Re: Linux Kernel Markers : sparc build issue

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

 



* 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
-
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