Re: [Ltt-dev] Linux Kernel Markers : sparc build issue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Kernel Development]     [DCCP]     [Linux ARM Development]     [Linux]     [Photo]     [Yosemite Help]     [Linux ARM Kernel]     [Linux SCSI]     [Linux x86_64]     [Linux Hams]

  Powered by Linux