Is it possible to make the whole image above 4G on a 64 bit machine?

陳韋任 (Wei-Ren Chen) chenwj@iis.sinica.edu.tw
Wed Aug 29 13:07:00 GMT 2012


Hi all,

  For some reason, I need to compile a program so that when it's loaded
into memory, the whole image is above 4G virtual space (I am on a 64 bit
machine). The space below 4G tends to be other usage. I try the following
command,

$ gcc -Wl,-Ttext-segment=0x40000000 test.c -o test

I was only success to make the whole image above 1G. But when I want to
make it above 2G, the linker give me error below:

---
$ gcc -static -Wl,-Ttext-segment=0x80000000 test.c -o test
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/../../../../lib64/crt1.o: In function `_start':
(.text+0x12): relocation truncated to fit: R_X86_64_32S against symbol `__libc_csu_fini' defined in .text section in /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/../../../../lib64/libc.a(elf-init.o)
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/../../../../lib64/crt1.o: In function `_start':
(.text+0x19): relocation truncated to fit: R_X86_64_32S against symbol `__libc_csu_init' defined in .text section in /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/../../../../lib64/libc.a(elf-init.o)
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): relocation truncated to fit: R_X86_64_32S against symbol `main' defined in .text section in /tmp/ccdqj0nB.o
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/crtbeginT.o:(.text+0x21): relocation truncated to fit: R_X86_64_32S against `.dtors'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/crtbeginT.o:(.text+0x45): relocation truncated to fit: R_X86_64_32S against `.dtors'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/../../../../lib64/libc.a(libc-start.o):
In function `__libc_start_main':
(.text+0x34): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `_dl_starting_up'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/../../../../lib64/libc.a(libc-start.o): In function `__libc_start_main':
(.text+0x1fb): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__nptl_deallocate_tsd'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/../../../../lib64/libc.a(libc-start.o): In function `__libc_start_main':
(.text+0x202): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__nptl_nthreads'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/../../../../lib64/libc.a(libc-tls.o): In function `__libc_setup_tls':
(.text+0xf3): relocation truncated to fit: R_X86_64_32S against `.bss'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/../../../../lib64/libc.a(libc-tls.o): In function `__libc_setup_tls':
(.text+0x18b): relocation truncated to fit: R_X86_64_32S against `.bss'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/../../../../lib64/libc.a(libc-tls.o): In function `__libc_setup_tls':
(.text+0x196): additional relocation overflows omitted from the output
collect2: ld returned 1 exit status
---

  If it's possible to make the whole image above 4G, how I can do that?
If not, could you explain why? Thanks. 

Regards,
chenwj

-- 
Wei-Ren Chen (陳韋任)
Computer Systems Lab, Institute of Information Science,
Academia Sinica, Taiwan (R.O.C.)
Tel:886-2-2788-3799 #1667
Homepage: http://people.cs.nctu.edu.tw/~chenwj



More information about the Binutils mailing list