I'm working on a script to make uClibc usable on an existing glibc-targetted gcc/binutils toolchain, and the one problem I'm left with is that pthread_cancel
needs to dlopen
libgcc_s.so.1
. The version supplied with the host gcc is linked to depend on glibc, so I'm instead using ld
's -u
option to pull in the needed symbols (and their dependencies) from libgcc_eh.a
to make a replacement libgcc_s.so.1
:
gcc -specs uclibc.specs -Wl,-u,_Unwind_Resume -Wl,-u,__gcc_personality_v0 \
-Wl,-u,_Unwind_ForcedUnwind -Wl,-u,_Unwind_GetCFA -shared -o libgcc_s.so.1
In principle I would be done, but all the symbols in libgcc_eh.a
have their visibility set to hidden, so in the output .so
file, they all become local and don't get added to the .dynsym
symbol table.
I'm looking for a way to use binutils (perhaps objcopy
? or a linker script?) on either the .so
file or the original .o
files in libgcc_eh.a
to un-hide these symbols. Is this possible?