authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-10-24 21:28:56-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-10-24 21:31:47-04:00
log1828f8eb8e1514578ed2da8d58536903f94b7ed0
treef8e9891a31798e671867dd95f4be7e24471c4ff1
parentd7e28f991d431ee6347f316f03a6f35a5692e095

fix missing compiler_rt in release modes

the optimizer was deleting compiler_rt symbols, so I changed the linkage type from LinkOnce to Weak also changed LinkOnce to mean linkonce_odr in llvm and Weak to mean weak_odr in llvm. See #563

17 files changed, 18 insertions(+), 21 deletions(-)

src/codegen.cpp+2-2
......@@ -456,10 +456,10 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
456456 LLVMSetLinkage(fn_table_entry->llvm_value, LLVMExternalLinkage);
457457 break;
458458 case GlobalLinkageIdWeak:
459 LLVMSetLinkage(fn_table_entry->llvm_value, LLVMWeakAnyLinkage);
459 LLVMSetLinkage(fn_table_entry->llvm_value, LLVMWeakODRLinkage);
460460 break;
461461 case GlobalLinkageIdLinkOnce:
462 LLVMSetLinkage(fn_table_entry->llvm_value, LLVMLinkOnceAnyLinkage);
462 LLVMSetLinkage(fn_table_entry->llvm_value, LLVMLinkOnceODRLinkage);
463463 break;
464464 }
465465
src/link.cpp+1
......@@ -38,6 +38,7 @@ static Buf *build_o_raw(CodeGen *parent_gen, const char *oname, Buf *full_path)
3838
3939 child_gen->want_h_file = false;
4040 child_gen->verbose_link = parent_gen->verbose_link;
41 child_gen->verbose_ir = parent_gen->verbose_ir;
4142
4243 codegen_set_cache_dir(child_gen, parent_gen->cache_dir);
4344
std/special/compiler_rt/comparetf2.zig+1-1
......@@ -20,7 +20,7 @@ const infRep = exponentMask;
2020
2121const builtin = @import("builtin");
2222const is_test = builtin.is_test;
23const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
23const linkage = @import("index.zig").linkage;
2424
2525export fn __letf2(a: f128, b: f128) -> c_int {
2626 @setDebugSafety(this, is_test);
std/special/compiler_rt/fixunsdfdi.zig+1-1
......@@ -1,6 +1,6 @@
11const fixuint = @import("fixuint.zig").fixuint;
22const builtin = @import("builtin");
3const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
3const linkage = @import("index.zig").linkage;
44
55export fn __fixunsdfdi(a: f64) -> u64 {
66 @setDebugSafety(this, builtin.is_test);
std/special/compiler_rt/fixunsdfsi.zig+1-1
......@@ -1,6 +1,6 @@
11const fixuint = @import("fixuint.zig").fixuint;
22const builtin = @import("builtin");
3const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
3const linkage = @import("index.zig").linkage;
44
55export fn __fixunsdfsi(a: f64) -> u32 {
66 @setDebugSafety(this, builtin.is_test);
std/special/compiler_rt/fixunsdfti.zig+1-1
......@@ -1,6 +1,6 @@
11const fixuint = @import("fixuint.zig").fixuint;
22const builtin = @import("builtin");
3const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
3const linkage = @import("index.zig").linkage;
44
55export fn __fixunsdfti(a: f64) -> u128 {
66 @setDebugSafety(this, builtin.is_test);
std/special/compiler_rt/fixunssfdi.zig+1-1
......@@ -1,6 +1,6 @@
11const fixuint = @import("fixuint.zig").fixuint;
22const builtin = @import("builtin");
3const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
3const linkage = @import("index.zig").linkage;
44
55export fn __fixunssfdi(a: f32) -> u64 {
66 @setDebugSafety(this, builtin.is_test);
std/special/compiler_rt/fixunssfsi.zig+1-1
......@@ -1,6 +1,6 @@
11const fixuint = @import("fixuint.zig").fixuint;
22const builtin = @import("builtin");
3const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
3const linkage = @import("index.zig").linkage;
44
55export fn __fixunssfsi(a: f32) -> u32 {
66 @setDebugSafety(this, builtin.is_test);
std/special/compiler_rt/fixunssfti.zig+1-1
......@@ -1,6 +1,6 @@
11const fixuint = @import("fixuint.zig").fixuint;
22const builtin = @import("builtin");
3const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
3const linkage = @import("index.zig").linkage;
44
55export fn __fixunssfti(a: f32) -> u128 {
66 @setDebugSafety(this, builtin.is_test);
std/special/compiler_rt/fixunstfdi.zig+1-1
......@@ -1,6 +1,6 @@
11const fixuint = @import("fixuint.zig").fixuint;
22const builtin = @import("builtin");
3const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
3const linkage = @import("index.zig").linkage;
44
55export fn __fixunstfdi(a: f128) -> u64 {
66 @setDebugSafety(this, builtin.is_test);
std/special/compiler_rt/fixunstfsi.zig+1-1
......@@ -1,6 +1,6 @@
11const fixuint = @import("fixuint.zig").fixuint;
22const builtin = @import("builtin");
3const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
3const linkage = @import("index.zig").linkage;
44
55export fn __fixunstfsi(a: f128) -> u32 {
66 @setDebugSafety(this, builtin.is_test);
std/special/compiler_rt/fixunstfti.zig+1-1
......@@ -1,6 +1,6 @@
11const fixuint = @import("fixuint.zig").fixuint;
22const builtin = @import("builtin");
3const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
3const linkage = @import("index.zig").linkage;
44
55export fn __fixunstfti(a: f128) -> u128 {
66 @setDebugSafety(this, builtin.is_test);
std/special/compiler_rt/index.zig+1-5
......@@ -26,7 +26,7 @@ const win32 = builtin.os == builtin.Os.windows and builtin.arch == builtin.Arch.
2626const win64 = builtin.os == builtin.Os.windows and builtin.arch == builtin.Arch.x86_64;
2727const win32_nocrt = win32 and !builtin.link_libc;
2828const win64_nocrt = win64 and !builtin.link_libc;
29const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
29pub const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.Weak;
3030const strong_linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.Strong;
3131
3232const __udivmoddi4 = @import("udivmoddi4.zig").__udivmoddi4;
......@@ -152,10 +152,6 @@ export nakedcc fn _chkstk() align(4) {
152152 @setGlobalLinkage(_chkstk, builtin.GlobalLinkage.Internal);
153153}
154154
155// TODO The implementation from compiler-rt causes crashes and
156// the implementation from disassembled ntdll seems to depend on
157// thread local storage. So we have given up this safety check
158// and simply have `ret`.
159155export nakedcc fn __chkstk() align(4) {
160156 @setDebugSafety(this, false);
161157
std/special/compiler_rt/udivmoddi4.zig+1-1
......@@ -1,6 +1,6 @@
11const udivmod = @import("udivmod.zig").udivmod;
22const builtin = @import("builtin");
3const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
3const linkage = @import("index.zig").linkage;
44
55export fn __udivmoddi4(a: u64, b: u64, maybe_rem: ?&u64) -> u64 {
66 @setDebugSafety(this, builtin.is_test);
std/special/compiler_rt/udivmodti4.zig+1-1
......@@ -1,6 +1,6 @@
11const udivmod = @import("udivmod.zig").udivmod;
22const builtin = @import("builtin");
3const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
3const linkage = @import("index.zig").linkage;
44
55export fn __udivmodti4(a: u128, b: u128, maybe_rem: ?&u128) -> u128 {
66 @setDebugSafety(this, builtin.is_test);
std/special/compiler_rt/udivti3.zig+1-1
......@@ -1,6 +1,6 @@
11const __udivmodti4 = @import("udivmodti4.zig").__udivmodti4;
22const builtin = @import("builtin");
3const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
3const linkage = @import("index.zig").linkage;
44
55export fn __udivti3(a: u128, b: u128) -> u128 {
66 @setDebugSafety(this, builtin.is_test);
std/special/compiler_rt/umodti3.zig+1-1
......@@ -1,6 +1,6 @@
11const __udivmodti4 = @import("udivmodti4.zig").__udivmodti4;
22const builtin = @import("builtin");
3const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
3const linkage = @import("index.zig").linkage;
44
55export fn __umodti3(a: u128, b: u128) -> u128 {
66 @setDebugSafety(this, builtin.is_test);