[LLVMdev] Some thought on handling ELF shared libraries in lld (original) (raw)

Rafael EspĂ­ndola rafael.espindola at gmail.com
Tue Jul 21 07:23:44 PDT 2015


On 21 July 2015 at 09:08, Hal Finkel <hfinkel at anl.gov> wrote:

----- Original Message -----

From: "Rafael EspĂ­ndola" <rafael.espindola at gmail.com> To: "LLVM Developers Mailing List" <llvmdev at cs.uiuc.edu> Sent: Tuesday, July 21, 2015 7:46:58 AM Subject: [LLVMdev] Some thought on handling ELF shared libraries in lld

Most ELF shared libraries can be sliced in two ways. One is following the information in the program headers (ephoff). The other is following the information in the section headers (eshoff). Regular relocatable objects only have the section header. At runtime, the dynamic linker only uses the program headers. In fact, the section headers is optional. When given a shared library, how should the static linker handle it? Note that, unlike the dynamic linker, the static one has to find all the defined symbol is a shared library. It is not enough to just look up the currently undefined symbols. To see that, consider $ cat test.c void f(void) { } $ cat test2.c void f(void); void g(void) { f(); } $ clang -c test.c test2.c -fPIC $ clang -shared test.o -o test.so $ rm -f test.a $ ar rc test.a test.o $ clang test.so test2.o test.a -o t.so -Wl,-t -shared $ clang test2.o test.a -o t.so -Wl,-t -shared The second link will include the archive member, the first one will not. It is tempting to use the program headers in the static linker. Doing so would let us support linking with shared libraries with no section headers, but there are a few issues: * The intention of the spec seems to be for everything static to use the section headers and everything dynamic to use the program headers. * Finding the number of symbols with the program header in a traditional ELF file is a hack. One has to read the nchain field of the hash table. * It doesn't seem even possible to find that information in files using the newer gnu hash format (https://blogs.oracle.com/ali/entry/gnuhashelfsections). Why do you need the total number of symbols?

To find all the defined ones. See the above example.

Cheers, Rafael



More information about the llvm-dev mailing list