aboutsummaryrefslogtreecommitdiff
path: root/lib/compiler_rt.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-05-08 19:29:21 -0400
committerGitHub <noreply@github.com>2022-05-08 19:29:21 -0400
commitd7f8368da86241f47e97257e737b6fb14bf5f773 (patch)
tree260d9d2d3aa68a96d1ea7594234fae0c3b90640e /lib/compiler_rt.zig
parentea3f5905f0635d0c0cb3983ba5ca6c92859e9d81 (diff)
parentcd019ee502d6792c1615b0fab10827db419beab4 (diff)
downloadzig-d7f8368da86241f47e97257e737b6fb14bf5f773.tar.gz
zig-d7f8368da86241f47e97257e737b6fb14bf5f773.zip
Merge pull request #11609 from ziglang/win-compiler-rt
compiler-rt: avoid symbol collisions with Windows libc
Diffstat (limited to 'lib/compiler_rt.zig')
-rw-r--r--lib/compiler_rt.zig51
1 files changed, 27 insertions, 24 deletions
diff --git a/lib/compiler_rt.zig b/lib/compiler_rt.zig
index 638bbcc695..fdf5940702 100644
--- a/lib/compiler_rt.zig
+++ b/lib/compiler_rt.zig
@@ -724,25 +724,25 @@ comptime {
@export(_aullrem, .{ .name = "\x01__aullrem", .linkage = strong_linkage });
}
- mathExport("ceil", @import("./compiler_rt/ceil.zig"), true);
- mathExport("cos", @import("./compiler_rt/cos.zig"), true);
- mathExport("exp", @import("./compiler_rt/exp.zig"), true);
- mathExport("exp2", @import("./compiler_rt/exp2.zig"), true);
- mathExport("fabs", @import("./compiler_rt/fabs.zig"), true);
- mathExport("floor", @import("./compiler_rt/floor.zig"), true);
- mathExport("fma", @import("./compiler_rt/fma.zig"), true);
- mathExport("fmax", @import("./compiler_rt/fmax.zig"), true);
- mathExport("fmin", @import("./compiler_rt/fmin.zig"), true);
- mathExport("fmod", @import("./compiler_rt/fmod.zig"), true);
- mathExport("log", @import("./compiler_rt/log.zig"), true);
- mathExport("log10", @import("./compiler_rt/log10.zig"), true);
- mathExport("log2", @import("./compiler_rt/log2.zig"), true);
- mathExport("round", @import("./compiler_rt/round.zig"), true);
- mathExport("sin", @import("./compiler_rt/sin.zig"), true);
- mathExport("sincos", @import("./compiler_rt/sincos.zig"), true);
- mathExport("sqrt", @import("./compiler_rt/sqrt.zig"), true);
- mathExport("tan", @import("./compiler_rt/tan.zig"), false);
- mathExport("trunc", @import("./compiler_rt/trunc.zig"), true);
+ mathExport("ceil", @import("./compiler_rt/ceil.zig"));
+ mathExport("cos", @import("./compiler_rt/cos.zig"));
+ mathExport("exp", @import("./compiler_rt/exp.zig"));
+ mathExport("exp2", @import("./compiler_rt/exp2.zig"));
+ mathExport("fabs", @import("./compiler_rt/fabs.zig"));
+ mathExport("floor", @import("./compiler_rt/floor.zig"));
+ mathExport("fma", @import("./compiler_rt/fma.zig"));
+ mathExport("fmax", @import("./compiler_rt/fmax.zig"));
+ mathExport("fmin", @import("./compiler_rt/fmin.zig"));
+ mathExport("fmod", @import("./compiler_rt/fmod.zig"));
+ mathExport("log", @import("./compiler_rt/log.zig"));
+ mathExport("log10", @import("./compiler_rt/log10.zig"));
+ mathExport("log2", @import("./compiler_rt/log2.zig"));
+ mathExport("round", @import("./compiler_rt/round.zig"));
+ mathExport("sin", @import("./compiler_rt/sin.zig"));
+ mathExport("sincos", @import("./compiler_rt/sincos.zig"));
+ mathExport("sqrt", @import("./compiler_rt/sqrt.zig"));
+ mathExport("tan", @import("./compiler_rt/tan.zig"));
+ mathExport("trunc", @import("./compiler_rt/trunc.zig"));
if (arch.isSPARC()) {
// SPARC systems use a different naming scheme
@@ -825,7 +825,7 @@ comptime {
}
}
-inline fn mathExport(double_name: []const u8, comptime import: type, is_standard: bool) void {
+inline fn mathExport(double_name: []const u8, comptime import: type) void {
const half_name = "__" ++ double_name ++ "h";
const half_fn = @field(import, half_name);
const float_name = double_name ++ "f";
@@ -853,9 +853,12 @@ inline fn mathExport(double_name: []const u8, comptime import: type, is_standard
.{ f128, quad_fn },
};
- // Weak aliases don't work on Windows, so we avoid exporting the `l` alias
- // on this platform for functions we know will collide.
- if (builtin.os.tag != .windows or !builtin.link_libc or !is_standard) {
+ if (builtin.os.tag == .windows) {
+ // Weak aliases don't work on Windows, so we have to provide the 'l' variants
+ // as additional function definitions that jump to the real definition.
+ const long_double_fn = @field(import, long_double_name);
+ @export(long_double_fn, .{ .name = long_double_name, .linkage = linkage });
+ } else {
inline for (pairs) |pair| {
const F = pair[0];
const func = pair[1];
@@ -865,7 +868,7 @@ inline fn mathExport(double_name: []const u8, comptime import: type, is_standard
}
}
- if (is_ppc and is_standard) {
+ if (is_ppc) {
// LLVM PPC backend lowers f128 ops with the suffix `f128` instead of `l`.
@export(quad_fn, .{ .name = double_name ++ "f128", .linkage = linkage });
}