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 #563master
parent
d7e28f991d
commit
1828f8eb8e
|
@ -456,10 +456,10 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
|
|||
LLVMSetLinkage(fn_table_entry->llvm_value, LLVMExternalLinkage);
|
||||
break;
|
||||
case GlobalLinkageIdWeak:
|
||||
LLVMSetLinkage(fn_table_entry->llvm_value, LLVMWeakAnyLinkage);
|
||||
LLVMSetLinkage(fn_table_entry->llvm_value, LLVMWeakODRLinkage);
|
||||
break;
|
||||
case GlobalLinkageIdLinkOnce:
|
||||
LLVMSetLinkage(fn_table_entry->llvm_value, LLVMLinkOnceAnyLinkage);
|
||||
LLVMSetLinkage(fn_table_entry->llvm_value, LLVMLinkOnceODRLinkage);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ static Buf *build_o_raw(CodeGen *parent_gen, const char *oname, Buf *full_path)
|
|||
|
||||
child_gen->want_h_file = false;
|
||||
child_gen->verbose_link = parent_gen->verbose_link;
|
||||
child_gen->verbose_ir = parent_gen->verbose_ir;
|
||||
|
||||
codegen_set_cache_dir(child_gen, parent_gen->cache_dir);
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ const infRep = exponentMask;
|
|||
|
||||
const builtin = @import("builtin");
|
||||
const is_test = builtin.is_test;
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
const linkage = @import("index.zig").linkage;
|
||||
|
||||
export fn __letf2(a: f128, b: f128) -> c_int {
|
||||
@setDebugSafety(this, is_test);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const fixuint = @import("fixuint.zig").fixuint;
|
||||
const builtin = @import("builtin");
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
const linkage = @import("index.zig").linkage;
|
||||
|
||||
export fn __fixunsdfdi(a: f64) -> u64 {
|
||||
@setDebugSafety(this, builtin.is_test);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const fixuint = @import("fixuint.zig").fixuint;
|
||||
const builtin = @import("builtin");
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
const linkage = @import("index.zig").linkage;
|
||||
|
||||
export fn __fixunsdfsi(a: f64) -> u32 {
|
||||
@setDebugSafety(this, builtin.is_test);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const fixuint = @import("fixuint.zig").fixuint;
|
||||
const builtin = @import("builtin");
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
const linkage = @import("index.zig").linkage;
|
||||
|
||||
export fn __fixunsdfti(a: f64) -> u128 {
|
||||
@setDebugSafety(this, builtin.is_test);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const fixuint = @import("fixuint.zig").fixuint;
|
||||
const builtin = @import("builtin");
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
const linkage = @import("index.zig").linkage;
|
||||
|
||||
export fn __fixunssfdi(a: f32) -> u64 {
|
||||
@setDebugSafety(this, builtin.is_test);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const fixuint = @import("fixuint.zig").fixuint;
|
||||
const builtin = @import("builtin");
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
const linkage = @import("index.zig").linkage;
|
||||
|
||||
export fn __fixunssfsi(a: f32) -> u32 {
|
||||
@setDebugSafety(this, builtin.is_test);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const fixuint = @import("fixuint.zig").fixuint;
|
||||
const builtin = @import("builtin");
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
const linkage = @import("index.zig").linkage;
|
||||
|
||||
export fn __fixunssfti(a: f32) -> u128 {
|
||||
@setDebugSafety(this, builtin.is_test);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const fixuint = @import("fixuint.zig").fixuint;
|
||||
const builtin = @import("builtin");
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
const linkage = @import("index.zig").linkage;
|
||||
|
||||
export fn __fixunstfdi(a: f128) -> u64 {
|
||||
@setDebugSafety(this, builtin.is_test);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const fixuint = @import("fixuint.zig").fixuint;
|
||||
const builtin = @import("builtin");
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
const linkage = @import("index.zig").linkage;
|
||||
|
||||
export fn __fixunstfsi(a: f128) -> u32 {
|
||||
@setDebugSafety(this, builtin.is_test);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const fixuint = @import("fixuint.zig").fixuint;
|
||||
const builtin = @import("builtin");
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
const linkage = @import("index.zig").linkage;
|
||||
|
||||
export fn __fixunstfti(a: f128) -> u128 {
|
||||
@setDebugSafety(this, builtin.is_test);
|
||||
|
|
|
@ -26,7 +26,7 @@ const win32 = builtin.os == builtin.Os.windows and builtin.arch == builtin.Arch.
|
|||
const win64 = builtin.os == builtin.Os.windows and builtin.arch == builtin.Arch.x86_64;
|
||||
const win32_nocrt = win32 and !builtin.link_libc;
|
||||
const win64_nocrt = win64 and !builtin.link_libc;
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
pub const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.Weak;
|
||||
const strong_linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.Strong;
|
||||
|
||||
const __udivmoddi4 = @import("udivmoddi4.zig").__udivmoddi4;
|
||||
|
@ -152,10 +152,6 @@ export nakedcc fn _chkstk() align(4) {
|
|||
@setGlobalLinkage(_chkstk, builtin.GlobalLinkage.Internal);
|
||||
}
|
||||
|
||||
// TODO The implementation from compiler-rt causes crashes and
|
||||
// the implementation from disassembled ntdll seems to depend on
|
||||
// thread local storage. So we have given up this safety check
|
||||
// and simply have `ret`.
|
||||
export nakedcc fn __chkstk() align(4) {
|
||||
@setDebugSafety(this, false);
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const udivmod = @import("udivmod.zig").udivmod;
|
||||
const builtin = @import("builtin");
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
const linkage = @import("index.zig").linkage;
|
||||
|
||||
export fn __udivmoddi4(a: u64, b: u64, maybe_rem: ?&u64) -> u64 {
|
||||
@setDebugSafety(this, builtin.is_test);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const udivmod = @import("udivmod.zig").udivmod;
|
||||
const builtin = @import("builtin");
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
const linkage = @import("index.zig").linkage;
|
||||
|
||||
export fn __udivmodti4(a: u128, b: u128, maybe_rem: ?&u128) -> u128 {
|
||||
@setDebugSafety(this, builtin.is_test);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const __udivmodti4 = @import("udivmodti4.zig").__udivmodti4;
|
||||
const builtin = @import("builtin");
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
const linkage = @import("index.zig").linkage;
|
||||
|
||||
export fn __udivti3(a: u128, b: u128) -> u128 {
|
||||
@setDebugSafety(this, builtin.is_test);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const __udivmodti4 = @import("udivmodti4.zig").__udivmodti4;
|
||||
const builtin = @import("builtin");
|
||||
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;
|
||||
const linkage = @import("index.zig").linkage;
|
||||
|
||||
export fn __umodti3(a: u128, b: u128) -> u128 {
|
||||
@setDebugSafety(this, builtin.is_test);
|
||||
|
|
Loading…
Reference in New Issue