| author | |
| committer | |
| log | 1828f8eb8e1514578ed2da8d58536903f94b7ed0 |
| tree | f8e9891a31798e671867dd95f4be7e24471c4ff1 |
| parent | d7e28f991d431ee6347f316f03a6f35a5692e095 |
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 #56317 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) { | ... | @@ -456,10 +456,10 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) { |
| 456 | LLVMSetLinkage(fn_table_entry->llvm_value, LLVMExternalLinkage); | 456 | LLVMSetLinkage(fn_table_entry->llvm_value, LLVMExternalLinkage); |
| 457 | break; | 457 | break; |
| 458 | case GlobalLinkageIdWeak: | 458 | case GlobalLinkageIdWeak: |
| 459 | LLVMSetLinkage(fn_table_entry->llvm_value, LLVMWeakAnyLinkage); | 459 | LLVMSetLinkage(fn_table_entry->llvm_value, LLVMWeakODRLinkage); |
| 460 | break; | 460 | break; |
| 461 | case GlobalLinkageIdLinkOnce: | 461 | case GlobalLinkageIdLinkOnce: |
| 462 | LLVMSetLinkage(fn_table_entry->llvm_value, LLVMLinkOnceAnyLinkage); | 462 | LLVMSetLinkage(fn_table_entry->llvm_value, LLVMLinkOnceODRLinkage); |
| 463 | break; | 463 | break; |
| 464 | } | 464 | } |
| 465 | 465 |
src/link.cpp+1| ... | @@ -38,6 +38,7 @@ static Buf *build_o_raw(CodeGen *parent_gen, const char *oname, Buf *full_path) | ... | @@ -38,6 +38,7 @@ static Buf *build_o_raw(CodeGen *parent_gen, const char *oname, Buf *full_path) |
| 38 | 38 | ||
| 39 | child_gen->want_h_file = false; | 39 | child_gen->want_h_file = false; |
| 40 | child_gen->verbose_link = parent_gen->verbose_link; | 40 | child_gen->verbose_link = parent_gen->verbose_link; |
| 41 | child_gen->verbose_ir = parent_gen->verbose_ir; | ||
| 41 | 42 | ||
| 42 | codegen_set_cache_dir(child_gen, parent_gen->cache_dir); | 43 | codegen_set_cache_dir(child_gen, parent_gen->cache_dir); |
| 43 | 44 |
std/special/compiler_rt/comparetf2.zig+1-1| ... | @@ -20,7 +20,7 @@ const infRep = exponentMask; | ... | @@ -20,7 +20,7 @@ const infRep = exponentMask; |
| 20 | 20 | ||
| 21 | const builtin = @import("builtin"); | 21 | const builtin = @import("builtin"); |
| 22 | const is_test = builtin.is_test; | 22 | const is_test = builtin.is_test; |
| 23 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 23 | const linkage = @import("index.zig").linkage; |
| 24 | 24 | ||
| 25 | export fn __letf2(a: f128, b: f128) -> c_int { | 25 | export fn __letf2(a: f128, b: f128) -> c_int { |
| 26 | @setDebugSafety(this, is_test); | 26 | @setDebugSafety(this, is_test); |
std/special/compiler_rt/fixunsdfdi.zig+1-1| ... | @@ -1,6 +1,6 @@ | ... | @@ -1,6 +1,6 @@ |
| 1 | const fixuint = @import("fixuint.zig").fixuint; | 1 | const fixuint = @import("fixuint.zig").fixuint; |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 3 | const linkage = @import("index.zig").linkage; |
| 4 | 4 | ||
| 5 | export fn __fixunsdfdi(a: f64) -> u64 { | 5 | export fn __fixunsdfdi(a: f64) -> u64 { |
| 6 | @setDebugSafety(this, builtin.is_test); | 6 | @setDebugSafety(this, builtin.is_test); |
std/special/compiler_rt/fixunsdfsi.zig+1-1| ... | @@ -1,6 +1,6 @@ | ... | @@ -1,6 +1,6 @@ |
| 1 | const fixuint = @import("fixuint.zig").fixuint; | 1 | const fixuint = @import("fixuint.zig").fixuint; |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 3 | const linkage = @import("index.zig").linkage; |
| 4 | 4 | ||
| 5 | export fn __fixunsdfsi(a: f64) -> u32 { | 5 | export fn __fixunsdfsi(a: f64) -> u32 { |
| 6 | @setDebugSafety(this, builtin.is_test); | 6 | @setDebugSafety(this, builtin.is_test); |
std/special/compiler_rt/fixunsdfti.zig+1-1| ... | @@ -1,6 +1,6 @@ | ... | @@ -1,6 +1,6 @@ |
| 1 | const fixuint = @import("fixuint.zig").fixuint; | 1 | const fixuint = @import("fixuint.zig").fixuint; |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 3 | const linkage = @import("index.zig").linkage; |
| 4 | 4 | ||
| 5 | export fn __fixunsdfti(a: f64) -> u128 { | 5 | export fn __fixunsdfti(a: f64) -> u128 { |
| 6 | @setDebugSafety(this, builtin.is_test); | 6 | @setDebugSafety(this, builtin.is_test); |
std/special/compiler_rt/fixunssfdi.zig+1-1| ... | @@ -1,6 +1,6 @@ | ... | @@ -1,6 +1,6 @@ |
| 1 | const fixuint = @import("fixuint.zig").fixuint; | 1 | const fixuint = @import("fixuint.zig").fixuint; |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 3 | const linkage = @import("index.zig").linkage; |
| 4 | 4 | ||
| 5 | export fn __fixunssfdi(a: f32) -> u64 { | 5 | export fn __fixunssfdi(a: f32) -> u64 { |
| 6 | @setDebugSafety(this, builtin.is_test); | 6 | @setDebugSafety(this, builtin.is_test); |
std/special/compiler_rt/fixunssfsi.zig+1-1| ... | @@ -1,6 +1,6 @@ | ... | @@ -1,6 +1,6 @@ |
| 1 | const fixuint = @import("fixuint.zig").fixuint; | 1 | const fixuint = @import("fixuint.zig").fixuint; |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 3 | const linkage = @import("index.zig").linkage; |
| 4 | 4 | ||
| 5 | export fn __fixunssfsi(a: f32) -> u32 { | 5 | export fn __fixunssfsi(a: f32) -> u32 { |
| 6 | @setDebugSafety(this, builtin.is_test); | 6 | @setDebugSafety(this, builtin.is_test); |
std/special/compiler_rt/fixunssfti.zig+1-1| ... | @@ -1,6 +1,6 @@ | ... | @@ -1,6 +1,6 @@ |
| 1 | const fixuint = @import("fixuint.zig").fixuint; | 1 | const fixuint = @import("fixuint.zig").fixuint; |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 3 | const linkage = @import("index.zig").linkage; |
| 4 | 4 | ||
| 5 | export fn __fixunssfti(a: f32) -> u128 { | 5 | export fn __fixunssfti(a: f32) -> u128 { |
| 6 | @setDebugSafety(this, builtin.is_test); | 6 | @setDebugSafety(this, builtin.is_test); |
std/special/compiler_rt/fixunstfdi.zig+1-1| ... | @@ -1,6 +1,6 @@ | ... | @@ -1,6 +1,6 @@ |
| 1 | const fixuint = @import("fixuint.zig").fixuint; | 1 | const fixuint = @import("fixuint.zig").fixuint; |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 3 | const linkage = @import("index.zig").linkage; |
| 4 | 4 | ||
| 5 | export fn __fixunstfdi(a: f128) -> u64 { | 5 | export fn __fixunstfdi(a: f128) -> u64 { |
| 6 | @setDebugSafety(this, builtin.is_test); | 6 | @setDebugSafety(this, builtin.is_test); |
std/special/compiler_rt/fixunstfsi.zig+1-1| ... | @@ -1,6 +1,6 @@ | ... | @@ -1,6 +1,6 @@ |
| 1 | const fixuint = @import("fixuint.zig").fixuint; | 1 | const fixuint = @import("fixuint.zig").fixuint; |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 3 | const linkage = @import("index.zig").linkage; |
| 4 | 4 | ||
| 5 | export fn __fixunstfsi(a: f128) -> u32 { | 5 | export fn __fixunstfsi(a: f128) -> u32 { |
| 6 | @setDebugSafety(this, builtin.is_test); | 6 | @setDebugSafety(this, builtin.is_test); |
std/special/compiler_rt/fixunstfti.zig+1-1| ... | @@ -1,6 +1,6 @@ | ... | @@ -1,6 +1,6 @@ |
| 1 | const fixuint = @import("fixuint.zig").fixuint; | 1 | const fixuint = @import("fixuint.zig").fixuint; |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 3 | const linkage = @import("index.zig").linkage; |
| 4 | 4 | ||
| 5 | export fn __fixunstfti(a: f128) -> u128 { | 5 | export fn __fixunstfti(a: f128) -> u128 { |
| 6 | @setDebugSafety(this, builtin.is_test); | 6 | @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. | ... | @@ -26,7 +26,7 @@ const win32 = builtin.os == builtin.Os.windows and builtin.arch == builtin.Arch. |
| 26 | const win64 = builtin.os == builtin.Os.windows and builtin.arch == builtin.Arch.x86_64; | 26 | const win64 = builtin.os == builtin.Os.windows and builtin.arch == builtin.Arch.x86_64; |
| 27 | const win32_nocrt = win32 and !builtin.link_libc; | 27 | const win32_nocrt = win32 and !builtin.link_libc; |
| 28 | const win64_nocrt = win64 and !builtin.link_libc; | 28 | const win64_nocrt = win64 and !builtin.link_libc; |
| 29 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 29 | pub const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.Weak; |
| 30 | const strong_linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.Strong; | 30 | const strong_linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.Strong; |
| 31 | 31 | ||
| 32 | const __udivmoddi4 = @import("udivmoddi4.zig").__udivmoddi4; | 32 | const __udivmoddi4 = @import("udivmoddi4.zig").__udivmoddi4; |
| ... | @@ -152,10 +152,6 @@ export nakedcc fn _chkstk() align(4) { | ... | @@ -152,10 +152,6 @@ export nakedcc fn _chkstk() align(4) { |
| 152 | @setGlobalLinkage(_chkstk, builtin.GlobalLinkage.Internal); | 152 | @setGlobalLinkage(_chkstk, builtin.GlobalLinkage.Internal); |
| 153 | } | 153 | } |
| 154 | 154 | ||
| 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`. | ||
| 159 | export nakedcc fn __chkstk() align(4) { | 155 | export nakedcc fn __chkstk() align(4) { |
| 160 | @setDebugSafety(this, false); | 156 | @setDebugSafety(this, false); |
| 161 | 157 |
std/special/compiler_rt/udivmoddi4.zig+1-1| ... | @@ -1,6 +1,6 @@ | ... | @@ -1,6 +1,6 @@ |
| 1 | const udivmod = @import("udivmod.zig").udivmod; | 1 | const udivmod = @import("udivmod.zig").udivmod; |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 3 | const linkage = @import("index.zig").linkage; |
| 4 | 4 | ||
| 5 | export fn __udivmoddi4(a: u64, b: u64, maybe_rem: ?&u64) -> u64 { | 5 | export fn __udivmoddi4(a: u64, b: u64, maybe_rem: ?&u64) -> u64 { |
| 6 | @setDebugSafety(this, builtin.is_test); | 6 | @setDebugSafety(this, builtin.is_test); |
std/special/compiler_rt/udivmodti4.zig+1-1| ... | @@ -1,6 +1,6 @@ | ... | @@ -1,6 +1,6 @@ |
| 1 | const udivmod = @import("udivmod.zig").udivmod; | 1 | const udivmod = @import("udivmod.zig").udivmod; |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 3 | const linkage = @import("index.zig").linkage; |
| 4 | 4 | ||
| 5 | export fn __udivmodti4(a: u128, b: u128, maybe_rem: ?&u128) -> u128 { | 5 | export fn __udivmodti4(a: u128, b: u128, maybe_rem: ?&u128) -> u128 { |
| 6 | @setDebugSafety(this, builtin.is_test); | 6 | @setDebugSafety(this, builtin.is_test); |
std/special/compiler_rt/udivti3.zig+1-1| ... | @@ -1,6 +1,6 @@ | ... | @@ -1,6 +1,6 @@ |
| 1 | const __udivmodti4 = @import("udivmodti4.zig").__udivmodti4; | 1 | const __udivmodti4 = @import("udivmodti4.zig").__udivmodti4; |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 3 | const linkage = @import("index.zig").linkage; |
| 4 | 4 | ||
| 5 | export fn __udivti3(a: u128, b: u128) -> u128 { | 5 | export fn __udivti3(a: u128, b: u128) -> u128 { |
| 6 | @setDebugSafety(this, builtin.is_test); | 6 | @setDebugSafety(this, builtin.is_test); |
std/special/compiler_rt/umodti3.zig+1-1| ... | @@ -1,6 +1,6 @@ | ... | @@ -1,6 +1,6 @@ |
| 1 | const __udivmodti4 = @import("udivmodti4.zig").__udivmodti4; | 1 | const __udivmodti4 = @import("udivmodti4.zig").__udivmodti4; |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce; | 3 | const linkage = @import("index.zig").linkage; |
| 4 | 4 | ||
| 5 | export fn __umodti3(a: u128, b: u128) -> u128 { | 5 | export fn __umodti3(a: u128, b: u128) -> u128 { |
| 6 | @setDebugSafety(this, builtin.is_test); | 6 | @setDebugSafety(this, builtin.is_test); |