[llvm-dev] Need help on identifying a patch which fixed lld on linux platform

karnajit wangkhem via llvm-dev llvm-dev at lists.llvm.org
Thu Jun 13 03:13:43 PDT 2019


Thanks for the info Rui.

Transitioning from llvm 5.0 to llvm 7.0 will take some time due to the
nature/process of the production environment. Is it ok to use lld 7.0 with
llvm 5.0?

On Thu, Jun 13, 2019 at 1:47 PM Rui Ueyama <ruiu at google.com> wrote:

> Looks like Ubuntu 12 was released in 2012, and the most recent version of
> LLVM is LLVM 8.0.0.
>
> LLVM 5.0 is pretty old, and in particular, lld in LLVM 5.0 is extremely
> outdated. IIUC, the first release of LLVM that includes somewhat usable
> version of lld is LLVM 4.0, and I wouldn't be surprised that LLVM 5.0 has a
> lot of bugs.
>
> Can't you simply use a newer version of lld?
>
> On Thu, Jun 13, 2019 at 4:01 PM karnajit wangkhem via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
>> Hi All,
>>
>> This test is on a ubuntu 12 box. Can anyone please point me what
>> revision/commit-id of lld fixed this issue which was atleast in llvm 5.0.
>> .
>> ├── build.sh
>> ├── main.c
>> ├── shared
>> │   └── sh.c
>> └── static
>>     └── st.c
>>
>> [[ build.sh ]]
>>
>> #!/bin/sh
>>
>> CC="${TOOLCHAIN}/bin/clang"
>> AR="${TOOLCHAIN}/bin/llvm-ar"
>> CFLAGS="-g -O"
>> LDFLAGS="-fuse-ld=lld"
>>
>> rm shared/sh.o static/st.o main.o
>> rm shared/libsh.so static/libst.a main
>>
>> ${CC} ${CFLAGS} -c shared/sh.c -o shared/sh.o
>> ${CC} ${CFLAGS} ${LDFLAGS} -shared -o shared/libsh.so shared/sh.o
>>
>> ${CC} ${CFLAGS} -c static/st.c -o static/st.o
>> ${AR} cq static/libst.a static/st.o
>>
>> ${CC} ${CFLAGS} -c main.c -o main.o
>>
>> ${CC} ${CFLAGS} ${LDFLAGS} -o main -Lshared -lsh -Lstatic -lst  main.o
>> -Wl,-rpath=shared
>>
>> [[ main.c ]]
>>
>> void gn();
>>
>> int main()
>> {
>>     gn();
>>     return 0;
>> }
>>
>> [[ shared/sh.c ]]
>>
>> #include <stdio.h>
>>
>> void gn(void);
>> void fn(void);
>>
>> void gn()
>> {
>>     printf("Calling gn...\n");
>>     fn();
>> }
>>
>> [[ static/st.c ]]
>>
>> #include <stdio.h>
>>
>> void fn(void);
>>
>> void fn()
>> {
>>     printf("Calling fn...\n");
>> }
>>
>>
>> Code flow:
>> main -> gn (shared library) -> fn (part of the static lib)
>>
>> Result:
>> With llvm 5.0
>>
>> ./main
>> Calling gn...
>> ./main: symbol lookup error: shared/libsh.so: undefined symbol: fn   <==
>> symbol fn was not found in binary "main"
>>
>> readelf -s main | grep fn
>> <Nothing>
>>
>> With llvm 7.0
>>
>> ./main
>> Calling gn...
>> Calling fn...
>>
>> readelf -s main | grep fn
>>      9: 0000000000001100    12 FUNC    GLOBAL DEFAULT   13 fn
>>     36: 0000000000001100    12 FUNC    GLOBAL DEFAULT   13 fn
>>
>> Regards,
>> Karan
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190613/043f89fa/attachment.html>


More information about the llvm-dev mailing list