Link with 'ld'. You can do just about anything you'd like. It's not quite clear to me what you want to do exactly (and I'd guess it would give away your secret cunning plan to tell), but you can move the text segment where you'd like with "-Ttext 0xADDRESS".
Ok, -Ttext 0xADDRESS didn't work too well. ld completely ignored me
Try with "--section-start" as well, but the same result
However, feeding ld a linkerscript with:
PROVIDE (__executable_start = 0x10000000); . = 0x10000000 + SIZEOF_HEADERS;
Seems to work just fine
Now... next job is to patch into the Linux SWI handler