aboutsummaryrefslogtreecommitdiff
path: root/src/link.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2018-07-02 14:10:27 -0400
committerAndrew Kelley <superjoe30@gmail.com>2018-07-02 14:10:27 -0400
commit2759c7951da050d825cf765c4b660f5562fb01a4 (patch)
treebab0ced27c01658f6ee07f4e51077a3f8f5fcf7c /src/link.cpp
parent0206b76351a50e154181d5bff1d134656e412bfb (diff)
downloadzig-2759c7951da050d825cf765c4b660f5562fb01a4.tar.gz
zig-2759c7951da050d825cf765c4b660f5562fb01a4.zip
always link against compiler_rt.o even when linking libc
sometimes libgcc is missing things we need, so we always link compiler_rt and rely on weak linkage to allow libgcc to override.
Diffstat (limited to 'src/link.cpp')
-rw-r--r--src/link.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/link.cpp b/src/link.cpp
index a4631b1daf..2d9a79585f 100644
--- a/src/link.cpp
+++ b/src/link.cpp
@@ -325,10 +325,13 @@ static void construct_linker_job_elf(LinkJob *lj) {
lj->args.append((const char *)buf_ptr(g->link_objects.at(i)));
}
- if (g->libc_link_lib == nullptr && (g->out_type == OutTypeExe || g->out_type == OutTypeLib)) {
- Buf *builtin_o_path = build_o(g, "builtin");
- lj->args.append(buf_ptr(builtin_o_path));
+ if (g->out_type == OutTypeExe || g->out_type == OutTypeLib) {
+ if (g->libc_link_lib == nullptr) {
+ Buf *builtin_o_path = build_o(g, "builtin");
+ lj->args.append(buf_ptr(builtin_o_path));
+ }
+ // sometimes libgcc is missing stuff, so we still build compiler_rt and rely on weak linkage
Buf *compiler_rt_o_path = build_compiler_rt(g);
lj->args.append(buf_ptr(compiler_rt_o_path));
}
@@ -554,7 +557,7 @@ static void construct_linker_job_coff(LinkJob *lj) {
lj->args.append(buf_ptr(builtin_o_path));
}
- // msvc compiler_rt is missing some stuff, so we still build it and rely on LinkOnce
+ // msvc compiler_rt is missing some stuff, so we still build it and rely on weak linkage
Buf *compiler_rt_o_path = build_compiler_rt(g);
lj->args.append(buf_ptr(compiler_rt_o_path));
}