[LLVMdev] [lld] ELF/Linux support
Oleg Ranevskyy
llvm.mail.list at gmail.com
Fri Sep 12 02:35:59 PDT 2014
Hello LLVM community,
I am evaluating profitability of using the LLVM lld for linking our
projects.
As a test, I tried to build the latest Boost with clang / lld on X86_64
Ubuntu and faced a problem at the very first step of doing this. One of
the Boost's auxiliary tools refers to the "environ" variable to access
the environment variables. "environ" is defined in glibc and is actually
a weak alias for the "__environ" variable. Here is a fragment of
posix/environ.c:
char **__environ = NULL; // var pointing to env vars array
weak_alias (__environ, environ) // and two weak aliases to it
weak_alias (__environ, _environ)
When linking a program that accesses "environ" with binutils' ld, the
symbol is correctly marked as a weak object:
> nm a.out | grep environ
0000000000601040 B __environ@@GLIBC_2.2.5
0000000000601040 *V *environ@@GLIBC_2.2.5
LLVM lld marks it as uninitialized data from the BSS section:
0000000000401168 *B* environ
Readelf also shows different symbols (readelf -s a.out | grep environ):
- ld:
4: 0000000000601040 8 OBJECT WEAK DEFAULT 25
_environ at GLIBC_2.2.5 (2)
5: 0000000000601040 8 OBJECT WEAK DEFAULT 25
environ at GLIBC_2.2.5 (2) <- environ is a weak object
6: 0000000000601040 8 OBJECT GLOBAL DEFAULT 25
__environ at GLIBC_2.2.5 (2) <- __environ itself is present as a global
54: 0000000000601040 8 OBJECT WEAK DEFAULT 25
environ@@GLIBC_2.2.5
63: 0000000000601040 8 OBJECT GLOBAL DEFAULT 25
__environ@@GLIBC_2.2.5
- lld
1: 0000000000401168 8 OBJECT GLOBAL DEFAULT 22
environ <- no __environ reference. Environ is a global, not weak
8: 0000000000000000 8 OBJECT GLOBAL DEFAULT UND environ
37: 0000000000401168 8 OBJECT GLOBAL DEFAULT 22 environ
This leads to "environ" being nil when running the lld-linked binary.
Is it a known problem?
What is the fullness of ELF/Linux support?
Where can I find the features list that are expected to work and what
work is still in progress?
Thank you!
Kind regards,
Oleg
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140912/b73e0355/attachment.html>
More information about the llvm-dev
mailing list