[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
Wed Jun 12 23:59:58 PDT 2019
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190613/5cc32aba/attachment.html>
More information about the llvm-dev
mailing list