[llvm-dev] C++ program crashes while build with compiler-rt and static-pie.

Youren Shen via llvm-dev llvm-dev at lists.llvm.org
Mon Dec 16 21:40:01 PST 2019


Hello.

I'm working on building a non-gun toolchain with musl, clang, llvm,
libunwind, libcxx, libcxxabi and compiler-rt for our project. While static
and pie compilation are very useful in our project, C++ programs crash
while running with the crtbegin from the compiler-rt in static-pie
compilation.

I tested different combinations on both c program and c++ program:
static-pie with/without compiler-rt and pie with/without compiler-rt. While
all other tests passed but only C++ program crashed when enabling
static-pie and compiler-rt.
To figured out why it crashes, I used GDB and it shows that the program
crashed because at the _dlstart_c function in musl, rel[0] in line 140 is
an address out of address space.

```
136    rel = (void *)(base+dyn[DT_RELA]);
137    rel_size = dyn[DT_RELASZ];
138    for (; rel_size; rel+=3, rel_size-=3*sizeof(size_t)) {
139        if (!IS_RELATIVE(rel[1], 0)) continue;
140        size_t *rel_addr = (void *)(base + rel[0]);
141        *rel_addr = base + rel[2];
142    }
```

Here[1] is my script to build a toolchain based on musl and llvm for ubuntu
16.04(I also attached it below). It will install the toolchain into
/usr/local/occlum/.
To compiler a c++ program, use : musl-clang hello.cc -I
/usr/local/occlum/include/c++/v1/  -static-pie -lc++ -lc++abi -fPIC -o
hello --rtlib=compiler-rt

Is it looks like a bug in llvm or compiler-rt? Or did I make some stupid
mistake in my script?
Im really appreciate for any response.

[1]. https://gist.github.com/Yourens/0794bfad63bc54e5890d5ee828120ebf
-- 
Best Regards.
Youren Shen.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20191217/11205487/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: download_and_build_toolchain.sh
Type: text/x-sh
Size: 7386 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20191217/11205487/attachment.sh>


More information about the llvm-dev mailing list