[uClibc]Tool chain changes to top of CVS

Simon Rowe srowe at cambridgebroadband.com
Thu Nov 7 16:36:04 UTC 2002


Platform: Power PC ppc_8xx
Compiler: HardHat 2.0

Something seems to have changed since 0.9.15, trying to build shared 
libraries runs into problems unless the library link is run with -fPIC as 
well as the compilation.

Below is an example run using a minimal library, the first is using a stock 
0.9.15 build of uClibc, the second using the top of the CVS tree generates a 
shared library with R_PPC_REL24 entries causing the run-time linker to barf. 
They can be eliminated by building the library with '-fPIC -shared' but the 
library is still bigger and this causes issues with third-party libraries 
e.g. openSSL.


[ Using 0.9.15 ]

bash$ cat lib.c
int
magic_num(void)
{
   return 42;
}
bash$ /usr/powerpc-linux-uclibc/bin/powerpc-uclibc-gcc -fPIC -c -o lib.o lib.c
bash$ /usr/powerpc-linux-uclibc/bin/powerpc-uclibc-gcc -shared -o 
libmytest.so lib.o
bash$ /usr/powerpc-linux-uclibc/bin/powerpc-uclibc-objdump -R libmytest.so

libmytest.so:     file format elf32-powerpc

DYNAMIC RELOCATION RECORDS
OFFSET   TYPE              VALUE 
0001051c R_PPC_ADDR32      main
00000000 R_PPC_NONE        *ABS*
00010568 R_PPC_JMP_SLOT    __uClibc_main
00000014 R_PPC_RELATIVE    *ABS*+0x00000424
00000020 R_PPC_RELATIVE    *ABS*+0x00000424
000001b8 R_PPC_ADDR32      _start2
0000026c R_PPC_RELATIVE    *ABS*+0x00000478


bash$ 

[ now switch to top of CVS tree ]

bash$ /usr/powerpc-linux-uclibc/bin/powerpc-uclibc-gcc -fPIC -c -o lib.o lib.c
bash$ /usr/powerpc-linux-uclibc/bin/powerpc-uclibc-gcc -shared -o 
libmytest.so lib.o
bash$ /usr/powerpc-linux-uclibc/bin/powerpc-uclibc-objdump -R libmytest.so

libmytest.so:     file format elf32-powerpc

DYNAMIC RELOCATION RECORDS
OFFSET   TYPE              VALUE 
000006fa R_PPC_ADDR16_HA   .data+0x00010904
000006fe R_PPC_ADDR16_LO   .data+0x00010904
0000070a R_PPC_ADDR16_HA   .data+0x00010900
0000070e R_PPC_ADDR16_LO   .data+0x00010900
0000071e R_PPC_ADDR16_HA   .data+0x00010900
00000722 R_PPC_ADDR16_LO   .data+0x00010900
0000072a R_PPC_ADDR16_LO   .data+0x00010900
0000073a R_PPC_ADDR16_LO   .data+0x00010900
0000074a R_PPC_ADDR16_HA   __deregister_frame_info
0000074e R_PPC_ADDR16_LO   __deregister_frame_info
0000075a R_PPC_ADDR16_HA   .eh_frame+0x00010908
0000075e R_PPC_ADDR16_LO   .eh_frame+0x00010908
00000760 R_PPC_REL24       __deregister_frame_info
00000766 R_PPC_ADDR16_HA   .data+0x00010904
0000076e R_PPC_ADDR16_LO   .data+0x00010904
000007ae R_PPC_ADDR16_HA   __register_frame_info
000007b2 R_PPC_ADDR16_LO   __register_frame_info
000007be R_PPC_ADDR16_HA   .eh_frame+0x00010908
000007c2 R_PPC_ADDR16_HA   .bss+0x00010a0c
000007c6 R_PPC_ADDR16_LO   .eh_frame+0x00010908
000007ca R_PPC_ADDR16_LO   .bss+0x00010a0c
000007cc R_PPC_REL24       __register_frame_info
00000886 R_PPC_ADDR16_HA   .ctors+0x0001090c
0000088a R_PPC_ADDR16_LO   .ctors+0x0001090c
0000088e R_PPC_ADDR16_LO   .ctors+0x0001090c
00000000 R_PPC_NONE        *ABS*
00010900 R_PPC_RELATIVE    *ABS*+0x00010918
000109b4 R_PPC_ADDR32      main
00010a00 R_PPC_JMP_SLOT    __uClibc_main
00000014 R_PPC_RELATIVE    *ABS*+0x000007fc
00000020 R_PPC_RELATIVE    *ABS*+0x000007fc
000001b8 R_PPC_ADDR32      _start2
0000026c R_PPC_RELATIVE    *ABS*+0x00000850


bash$ /usr/powerpc-linux-uclibc/bin/powerpc-uclibc-gcc -fPIC -shared -o 
libmytest.so lib.o
bash$ /usr/powerpc-linux-uclibc/bin/powerpc-uclibc-objdump -R libmytest.so

libmytest.so:     file format elf32-powerpc

DYNAMIC RELOCATION RECORDS
OFFSET   TYPE              VALUE 
00010880 R_PPC_RELATIVE    *ABS*+0x00010898
00000000 R_PPC_NONE        *ABS*
00000000 R_PPC_NONE        *ABS*
000108ac R_PPC_RELATIVE    *ABS*+0x00010884
000108a8 R_PPC_RELATIVE    *ABS*+0x00010880
000108b0 R_PPC_RELATIVE    *ABS*+0x00010888
000108b4 R_PPC_RELATIVE    *ABS*+0x000109b8
000108b8 R_PPC_RELATIVE    *ABS*+0x00010890
000108bc R_PPC_GLOB_DAT    __deregister_frame_info
000108c0 R_PPC_GLOB_DAT    __register_frame_info
00010948 R_PPC_ADDR32      main
00010994 R_PPC_JMP_SLOT    __deregister_frame_info
0001099c R_PPC_JMP_SLOT    __uClibc_main
000109a4 R_PPC_JMP_SLOT    __register_frame_info
00000014 R_PPC_RELATIVE    *ABS*+0x0000076c
00000020 R_PPC_RELATIVE    *ABS*+0x0000076c
000001b8 R_PPC_ADDR32      _start2
0000026c R_PPC_RELATIVE    *ABS*+0x000007c0


bash$


-- 
Simon Rowe
Cambridge Broadband Ltd



More information about the uClibc mailing list