It seems like I bust the 8k limit for the sparc GOT : The kallsyms_addresses is 8614 lines long (for a 33.6kB total) in the .S, and, according to http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Code-Gen-Options.html : "If the GOT size for the linked executable exceeds a machine-specific maximum size, you get an error message from the linker indicating that -fpic does not work; in that case, recompile with -fPIC instead. (These maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 386 has no such limit.)" Mathieu * Mathieu Desnoyers (mathieu.desnoyers@xxxxxxxxxx) wrote: > * Frank Ch. Eigler (fche@xxxxxxxxxx) wrote: > > > > Perhaps you could post excerpts of "objdump -dr <file.o>", to see the > > disassembly / relocations in question. > > > > - FChE > > Hi Frank, > > (this message follow up on > http://listserv.shafik.org/pipermail/ltt-dev/2007-February/002212.html) > > compudj@amd64:~/obj/sparc$ PATH=/opt/crosstool/gcc-4.1.1-glibc-2.3.6/sparc-unknown-linux-gnu/bin sparc-unknown-linux-gnu-objdump -dr .tmp_kallsyms3.o > > .tmp_kallsyms3.o: file format elf32-sparc > > (that's all) > > By looking at what follows in more depth, it looks like the symbols I > keep are relative to the beginning of the _text section and sparc would > have a limit regarding this (maximum offset ? number of offsets relative > to a symbol ?) > > Any insights are welcome, > > Mathieu > > > link error : > > opt/crosstool/gcc-4.1.1-glibc-2.3.6/sparc-unknown-linux-gnu/bin/sparc-unknown-linux-gnu-ld -m elf32_sparc -T arch/sparc/kernel/vmlinux.lds arch/sparc/kernel/head.o arch/sparc/kernel/init_task.o init/built-in.o --start-group usr/built-in.o arch/sparc/kernel/built-in.o arch/sparc/mm/built-in.o arch/sparc/math-emu/built-in.o kernel/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o crypto/built-in.o block/built-in.o lib/lib.a arch/sparc/prom/lib.a arch/sparc/lib/lib.a lib/built-in.o arch/sparc/prom/built-in.o arch/sparc/lib/built-in.o drivers/built-in.o sound/built-in.o net/built-in.o --end-group .tmp_kallsyms3.o arch/sparc/boot/btfix.o -o arch/sparc/boot/image > .tmp_kallsyms3.o: In function `kallsyms_addresses': > .tmp_kallsyms3.S:(.rodata+0x0): relocation truncated to fit: R_SPARC_32 against symbol `_text' defined in .text section in arch/sparc/boot/image > .tmp_kallsyms3.S:(.rodata+0x8): relocation truncated to fit: R_SPARC_32 against symbol `_text' defined in .text section in arch/sparc/boot/image > ... > .tmp_kallsyms3.S:(.rodata+0x2c): additional relocation overflows omitted > from the output > make[2]: *** [arch/sparc/boot/image] Error 1 > > > arch/sparc/kernel/vmlinux.lds > ... > OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc") > OUTPUT_ARCH(sparc) > ENTRY(_start) > jiffies = jiffies_64 + 4; > SECTIONS > { > . = 0x10000 + SIZEOF_HEADERS; > .text 0xf0004000 : > { > _text = .; > *(.text) > . = ALIGN(8); __sched_text_start = .; *(.sched.text) __sched_text_end = .; > . = ALIGN(8); __lock_text_start = .; *(.spinlock.text) __lock_text_end = .; > *(.gnu.warning) > } =0 > _etext = .; > ... > > > A look at .tmp_kallsyms3.S, symbol kallsyms_addresses which seems to cause > linking error on sparc : > > > #include <asm/types.h> > #if BITS_PER_LONG == 64 > #define PTR .quad > #define ALGN .align 8 > #else > #define PTR .long > #define ALGN .align 4 > #endif > .section .rodata, "a" > .globl kallsyms_addresses > ALGN > kallsyms_addresses: > PTR _text - 0xeffd7000 > PTR 0x2d000 > PTR _text - 0xeffd6fb8 > PTR _text - 0xeffd6f50 > PTR _text - 0xeffd6ed0 > PTR _text - 0xeffd6eac > PTR _text - 0xeffd6b84 > PTR _text - 0xeffd6860 > PTR _text - 0xeffd6830 > PTR _text - 0xeffd6814 > PTR _text - 0xeffd6794 > PTR _text - 0xeffd6788 > PTR _text - 0xeffd6778 > PTR _text - 0xeffd6764 > PTR _text - 0xeffd673c > PTR _text - 0xeffd6714 > PTR _text - 0xeffd66e4 > PTR _text - 0xeffd66b4 > PTR _text - 0xeffd66ac > PTR _text - 0xeffd6698 > PTR _text - 0xeffd6674 > PTR _text - 0xeffd6650 > PTR _text - 0xeffd63dc > PTR _text - 0xeffd637c > PTR _text - 0xeffd6304 > PTR _text - 0xeffd6060 > PTR _text - 0xeffd6034 > PTR _text - 0xeffd6008 > PTR _text - 0xeffd5ff8 > ..... > > PTR _text - 0xeffbc7a0 > PTR _text - 0xeffbc730 > PTR 0x47930 > PTR _text + 0 > PTR _text + 0 > PTR _text + 0 > PTR _text + 0 > PTR _text + 0 > PTR _text + 0 > PTR _text + 0 > PTR _text + 0x10 > PTR _text + 0x20 > PTR _text + 0x30 > PTR _text + 0x40 > PTR _text + 0x50 > PTR _text + 0x60 > PTR _text + 0x70 > PTR _text + 0x80 > PTR _text + 0x90 > PTR _text + 0xa0 > PTR _text + 0xb0 > PTR _text + 0xc0 > PTR _text + 0x110 > PTR _text + 0x120 > PTR _text + 0x130 > PTR _text + 0x140 > PTR _text + 0x150 > .... > > > PTR _text + 0x1b67c4 > PTR _text + 0x1b67d8 > PTR 0xf01ba890 > > > And by the way, I also add my own section to > include/asm-generic/vmlinux.lds.h in RODATA : > adds at line 124, kernel 2.6.20 : > /* Kernel markers : pointers */ \ > .markers : AT(ADDR(.markers) - LOAD_OFFSET) { \ > VMLINUX_SYMBOL(__start___markers) = .; \ > *(.markers) \ > VMLINUX_SYMBOL(__stop___markers) = .; \ > } \ > > > > -- > Mathieu Desnoyers > Computer Engineering Graduate Student, École Polytechnique de Montréal > OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68 > _______________________________________________ > Ltt-dev mailing list > Ltt-dev@xxxxxxxxxxxxxxxxxxx > http://listserv.shafik.org/mailman/listinfo/ltt-dev > -- Mathieu Desnoyers Computer Engineering Graduate Student, École Polytechnique de Montréal OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68 - To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html