Skip to content

Commit

Permalink
better compiler-rt linkage logic
Browse files Browse the repository at this point in the history
now the compiler-rt tests are passing on windows. See #302
  • Loading branch information
andrewrk committed Oct 2, 2017
1 parent 8156e4f commit 5cbae7b
Show file tree
Hide file tree
Showing 16 changed files with 167 additions and 126 deletions.
6 changes: 6 additions & 0 deletions src/link.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,12 @@ static Buf *build_o_raw(CodeGen *parent_gen, const char *oname, Buf *full_path)
codegen_set_mmacosx_version_min(child_gen, parent_gen->mmacosx_version_min);
codegen_set_mios_version_min(child_gen, parent_gen->mios_version_min);

for (size_t i = 0; i < parent_gen->link_libs_list.length; i += 1) {
LinkLib *link_lib = parent_gen->link_libs_list.at(i);
LinkLib *new_link_lib = codegen_add_link_lib(child_gen, link_lib->name);
new_link_lib->provided_explicitly = link_lib->provided_explicitly;
}

codegen_build(child_gen);
const char *o_ext = target_o_file_ext(&child_gen->zig_target);
Buf *o_out_name = buf_sprintf("%s%s", oname, o_ext);
Expand Down
17 changes: 9 additions & 8 deletions std/special/compiler_rt/comparetf2.zig
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,11 @@ 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;

export fn __letf2(a: f128, b: f128) -> c_int {
@setDebugSafety(this, is_test);
@setGlobalLinkage(__letf2, builtin.GlobalLinkage.LinkOnce);
@setGlobalLinkage(__letf2, linkage);

const aInt = @bitCast(rep_t, a);
const bInt = @bitCast(rep_t, b);
Expand Down Expand Up @@ -65,7 +66,7 @@ export fn __letf2(a: f128, b: f128) -> c_int {
// Alias for libgcc compatibility
// TODO https://github.com/zig-lang/zig/issues/420
export fn __cmptf2(a: f128, b: f128) -> c_int {
@setGlobalLinkage(__cmptf2, builtin.GlobalLinkage.LinkOnce);
@setGlobalLinkage(__cmptf2, linkage);
@setDebugSafety(this, is_test);
return __letf2(a, b);
}
Expand All @@ -78,7 +79,7 @@ const GE_GREATER = c_int(1);
const GE_UNORDERED = c_int(-1); // Note: different from LE_UNORDERED

export fn __getf2(a: f128, b: f128) -> c_int {
@setGlobalLinkage(__getf2, builtin.GlobalLinkage.LinkOnce);
@setGlobalLinkage(__getf2, linkage);
@setDebugSafety(this, is_test);

const aInt = @bitCast(srep_t, a);
Expand Down Expand Up @@ -108,7 +109,7 @@ export fn __getf2(a: f128, b: f128) -> c_int {
}

export fn __unordtf2(a: f128, b: f128) -> c_int {
@setGlobalLinkage(__unordtf2, builtin.GlobalLinkage.LinkOnce);
@setGlobalLinkage(__unordtf2, linkage);
@setDebugSafety(this, is_test);

const aAbs = @bitCast(rep_t, a) & absMask;
Expand All @@ -120,25 +121,25 @@ export fn __unordtf2(a: f128, b: f128) -> c_int {
// TODO use aliases https://github.com/zig-lang/zig/issues/462

export fn __eqtf2(a: f128, b: f128) -> c_int {
@setGlobalLinkage(__eqtf2, builtin.GlobalLinkage.LinkOnce);
@setGlobalLinkage(__eqtf2, linkage);
@setDebugSafety(this, is_test);
return __letf2(a, b);
}

export fn __lttf2(a: f128, b: f128) -> c_int {
@setGlobalLinkage(__lttf2, builtin.GlobalLinkage.LinkOnce);
@setGlobalLinkage(__lttf2, linkage);
@setDebugSafety(this, is_test);
return __letf2(a, b);
}

export fn __netf2(a: f128, b: f128) -> c_int {
@setGlobalLinkage(__netf2, builtin.GlobalLinkage.LinkOnce);
@setGlobalLinkage(__netf2, linkage);
@setDebugSafety(this, is_test);
return __letf2(a, b);
}

export fn __gttf2(a: f128, b: f128) -> c_int {
@setGlobalLinkage(__gttf2, builtin.GlobalLinkage.LinkOnce);
@setGlobalLinkage(__gttf2, linkage);
@setDebugSafety(this, is_test);
return __getf2(a, b);
}
5 changes: 4 additions & 1 deletion std/special/compiler_rt/fixunsdfdi.zig
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;

export fn __fixunsdfdi(a: f64) -> u64 {
@setGlobalLinkage(__fixunsdfdi, @import("builtin").GlobalLinkage.LinkOnce);
@setDebugSafety(this, builtin.is_test);
@setGlobalLinkage(__fixunsdfdi, linkage);
return fixuint(f64, u64, a);
}

Expand Down
5 changes: 4 additions & 1 deletion std/special/compiler_rt/fixunsdfsi.zig
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;

export fn __fixunsdfsi(a: f64) -> u32 {
@setGlobalLinkage(__fixunsdfsi, @import("builtin").GlobalLinkage.LinkOnce);
@setDebugSafety(this, builtin.is_test);
@setGlobalLinkage(__fixunsdfsi, linkage);
return fixuint(f64, u32, a);
}

Expand Down
5 changes: 4 additions & 1 deletion std/special/compiler_rt/fixunsdfti.zig
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;

export fn __fixunsdfti(a: f64) -> u128 {
@setGlobalLinkage(__fixunsdfti, @import("builtin").GlobalLinkage.LinkOnce);
@setDebugSafety(this, builtin.is_test);
@setGlobalLinkage(__fixunsdfti, linkage);
return fixuint(f64, u128, a);
}

Expand Down
5 changes: 4 additions & 1 deletion std/special/compiler_rt/fixunssfdi.zig
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;

export fn __fixunssfdi(a: f32) -> u64 {
@setGlobalLinkage(__fixunssfdi, @import("builtin").GlobalLinkage.LinkOnce);
@setDebugSafety(this, builtin.is_test);
@setGlobalLinkage(__fixunssfdi, linkage);
return fixuint(f32, u64, a);
}

Expand Down
5 changes: 4 additions & 1 deletion std/special/compiler_rt/fixunssfsi.zig
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;

export fn __fixunssfsi(a: f32) -> u32 {
@setGlobalLinkage(__fixunssfsi, @import("builtin").GlobalLinkage.LinkOnce);
@setDebugSafety(this, builtin.is_test);
@setGlobalLinkage(__fixunssfsi, linkage);
return fixuint(f32, u32, a);
}

Expand Down
5 changes: 4 additions & 1 deletion std/special/compiler_rt/fixunssfti.zig
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;

export fn __fixunssfti(a: f32) -> u128 {
@setGlobalLinkage(__fixunssfti, @import("builtin").GlobalLinkage.LinkOnce);
@setDebugSafety(this, builtin.is_test);
@setGlobalLinkage(__fixunssfti, linkage);
return fixuint(f32, u128, a);
}

Expand Down
5 changes: 4 additions & 1 deletion std/special/compiler_rt/fixunstfdi.zig
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;

export fn __fixunstfdi(a: f128) -> u64 {
@setGlobalLinkage(__fixunstfdi, @import("builtin").GlobalLinkage.LinkOnce);
@setDebugSafety(this, builtin.is_test);
@setGlobalLinkage(__fixunstfdi, linkage);
return fixuint(f128, u64, a);
}

Expand Down
5 changes: 4 additions & 1 deletion std/special/compiler_rt/fixunstfsi.zig
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;

export fn __fixunstfsi(a: f128) -> u32 {
@setGlobalLinkage(__fixunstfsi, @import("builtin").GlobalLinkage.LinkOnce);
@setDebugSafety(this, builtin.is_test);
@setGlobalLinkage(__fixunstfsi, linkage);
return fixuint(f128, u32, a);
}

Expand Down
5 changes: 4 additions & 1 deletion std/special/compiler_rt/fixunstfti.zig
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
const fixuint = @import("fixuint.zig").fixuint;
const builtin = @import("builtin");
const linkage = if (builtin.is_test) builtin.GlobalLinkage.Internal else builtin.GlobalLinkage.LinkOnce;

export fn __fixunstfti(a: f128) -> u128 {
@setGlobalLinkage(__fixunstfti, @import("builtin").GlobalLinkage.LinkOnce);
@setDebugSafety(this, builtin.is_test);
@setGlobalLinkage(__fixunstfti, linkage);
return fixuint(f128, u128, a);
}

Expand Down
Loading

0 comments on commit 5cbae7b

Please sign in to comment.