[uClinux-dev] "reloc outside program" error
Aaron Zhong
aaron.zhong at juphoon.com
Fri Jan 5 20:25:46 EST 2007
Hi all,
I have a problem when I run my test program on uclinux for mips. The output is
# ./test
BINFMT_FLAT: reloc outside program 0xffbb2563 (0 - 0x4df98/0x3e220) start_brk !
calc_reloc fail 3 id = 0 i=3,rp=81f6a22c
BINFMT_FLAT: reloc outside program 0xffbb2563 (0 - 0x4df98/0x3e220) start_brk !
calc_reloc fail 3 id = 0 i=3,rp=81f6a22c
Memory fault
I noticed that there is a warning when compile the program:
...
mips-linux-gcc -O2 -msoft-float -DPARANOID_TTYS -DUSE_TERMIO -DKLUDGELINEMODE
-D_GNU_SOURCE -D__uClinux__ -c -o logout.o logout.c
mips-linux-gcc -Wl,-elf2flt="-z -s 8192 -v" -o test telnetd.o state.o termstat.o
slc.o sys_term.o utility.o global.o authenc.o logwtmp.o logout.o -L. -lfoo -lpthread
TEXT -> vma=400000 len=3e250
lma=400000 clen=0 oo=3e250 ap=0 fp=0
DATA -> vma=43e260 len=c140
lma=43e260 clen=0 oo=c140 ap=0 fp=0
WARNING: data=43e260 does not directly follow text=3e250
BSS -> vma=44a3a0 len=3c38
lma=44a3a0 clen=0 oo=3c38 ap=0 fp=0
GOT table contains 708 entries (2832 bytes)
SECTION: .text [96df414]: flags=233 vma=400000
SECTION: .data [96df4cc]: flags=243 vma=43e260
RELOCS: .data [96d75d4]: flags=247 vma=43e260
WARN: GPREL32
WARN: GPREL32
WARN: GPREL32
...
Is the warning cause the problem? Which confused me is that a simple program
like "hello world" could run correctly. Could anybody help me? And the following
is flthdr and objdump information, and last is the elf2flt.ld:
# mips-linux-flthdr test
test
Magic: bFLT
Rev: 4
Build Date: Fri Jan 5 11:07:49 2007
Entry: 0x400060
Data Start: 0x3e2a0
Data End: 0x4a3e0
BSS End: 0x4e018
Stack Size: 0x2000
Reloc Start: 0x4a3e0
Reloc Count: 0x112
Flags: 0x6 ( Has-PIC-GOT Gzip-Compressed )
# mips-linux-objdump -h test.gdb
test.gdb: file format elf32-tradbigmips
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0003e250 00400000 00400000 00001000 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 0000c140 0043e260 0043e260 0003f260 2**5
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00003c38 0044a3a0 0044a3a0 0004b3a0 2**4
ALLOC
3 .junk 00000000 00000000 00000000 00001000 2**4
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .comment 00000402 00000000 00000000 0004b3a0 2**0
CONTENTS, READONLY
5 .debug_aranges 00000200 00000000 00000000 0004b7a2 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_pubnames 0000024a 00000000 00000000 0004b9a2 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_info 00007521 00000000 00000000 0004bbec 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_abbrev 0000204d 00000000 00000000 0005310d 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_line 00001148 00000000 00000000 0005515a 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_frame 0000031c 00000000 00000000 000562a4 2**2
CONTENTS, READONLY, DEBUGGING
11 .debug_str 0000079d 00000000 00000000 000565c0 2**0
CONTENTS, READONLY, DEBUGGING
12 .pdr 00006c80 00000000 00000000 00056d60 2**2
CONTENTS, READONLY
13 .mdebug.abi32 00000000 00000000 00000000 0005d9e0 2**0
CONTENTS, READONLY
14 .debug_ranges 00000380 00000000 00000000 0005d9e0 2**0
CONTENTS, READONLY, DEBUGGING
# cat elf2flt.ld
ENTRY (__start)
MEMORY {
flatmem : ORIGIN = 0x400000, LENGTH = 0xffffff
junk : ORIGIN = 0x0, LENGTH = 0x100000
}
SECTIONS {
.text 0x400000 : {
. = . + 4;
. = ALIGN(0x4) ;
_stext = . ;
*(.reginfo)
*(.text)
*(.text.*)
*(.gnu.warning)
*(.stub)
*(.gnu.linkonce.t*)
*(.glue_7t)
*(.glue_7)
*(.jcr)
*(.init)
*(.fini)
W_RODAT *(.rodata)
W_RODAT *(.rodata1)
W_RODAT *(.rodata.*)
/* This is special code area at the end of the normal
text section. It contains a small lookup table at
the start followed by the code pointed to by entries
in the lookup table. */
. = ALIGN (4) ;
PROVIDE(__ctbp = .);
*(.call_table_data)
*(.call_table_text)
. = ALIGN(0x10) ;
_etext = . ;
} > flatmem
.data : {
. = ALIGN(0x4) ;
_sdata = . ;
__data_start = . ;
data_start = . ;
_gp = . ;
*(.got.plt)
*(.got)
. = ALIGN(0x10) ;
LONG(-1)
R_RODAT *(.rodata)
R_RODAT *(.rodata1)
R_RODAT *(.rodata.*)
*(.gnu.linkonce.r*)
*(.data)
*(.data1)
*(.data.*)
*(.gnu.linkonce.d*)
*(.data1)
*(.eh_frame)
*(.gcc_except_table)
*(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
*(__libc_atexit)
*(__libc_subinit)
*(__libc_subfreeres)
*(.note.ABI-tag)
. = ALIGN(4) ;
*(.ctors.*)
*(.ctors)
LONG(0)
*(.dtors.*)
*(.dtors)
LONG(0)
. = ALIGN(0x10) ;
_edata = . ;
} > flatmem
.bss : {
. = ALIGN(0x4) ;
_sbss = ALIGN(0x4) ;
__bss_start = . ;
*(.dynsbss)
*(.sbss)
*(.sbss.*)
*(.scommon)
*(.dynbss)
*(.bss)
*(.bss.*)
*(COMMON)
. = ALIGN(0x4) ;
_ebss = . ;
_end = . ;
end = . ;
} > flatmem
.junk : {
*(.rel*)
*(.rela*)
} > junk
}
More information about the uClinux-dev
mailing list