[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
Fri Jun 14 07:23:55 PDT 2019


Thanks Rui for the great info. We will definitely take your advise.

Regards,
Karan


On Fri, Jun 14, 2019, 6:57 PM Rui Ueyama <ruiu at google.com> wrote:

> On Thu, Jun 13, 2019 at 7:15 PM karnajit wangkhem <karnajitw at gmail.com>
> wrote:
>
>> 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?
>>
>
> If you are not doing LTO, then yes, you can use any version of lld with
> any version of LLVM or Clang. lld takes the industry-standard file format
> as inputs, so you can use lld with any compiler including non-LLVM ones
> like GCC.
>
> I'd recommend you do that if you can upgrade lld. The improvements from
> lld 4.0 to lld 7.0 are significant, since lld 4.0 was not very mature when
> it was released.
>
>
>> 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/20190614/1c08086d/attachment-0001.html>


More information about the llvm-dev mailing list