This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: How can I link a program with a starting address of 0x100000000for its text?


Ian Lance Taylor wrote:

Find the default linker script, which may be in your file system, or
can be dumped using ld --verbose.  Put that in a file.  Change the
initial assignment to '.' to be the address of your dreams.  Invoke
the linker with -T FILENAME.

Ian



Thanks.

I tried your suggestion, and came across the following

I was able to change the initial address of the program to a number of my choice. But I
wasn't able to move this address high enough. I got relocation errors when the
initial assignment to '.', generated addresses above 0x80000000 (2Gb)


The errors produced be the linker were: In function start:
... relocation truncated to fit: R_X86_64_32S __libc_csu_fini
... relocation truncated to fit: R_X86_64_32S __libc_csu_init
... relocation truncated to fit: R_X86_64_32S main
In function frame_dummy:
... relocation truncated to fit: R_X86_64_PC32 _Jv_RegisterClasses
... relocation truncated to fit: R_X86_64_32S .ctros



All of the above were on a Linux Suse 9 x86_64 machine with 2.4.21 kernel, binutils-2.14.90.05-43 and libc 2.3.2


However, when doing the same on a i686 RedHat Linux machine with 2.4.20 kernel, binutils-2.13.90.02-2 and libc 2.3.2, I was able to assign initial addresses in the linker script way above 0x80000000.

In both cases the linker scripts I used were generated by ld, using the --verbose option and changing only the initial assignment to '.'

What is it I'm missing in the 64bit environment?
Is there a system design limitation that doesn't allow linking with address above a certain limit?


Mike


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]