mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 05:44:20 +00:00
compiler_rt: avoid using weak aliases
This is a partial revert of 0d533433e2,
which regressed this behavior. The idea here is to avoid aliases, which
happens when the same function is exported with multiple names. The
problem with aliases is that weak aliases don't seem to work, causing
symbol collisions when multiple of the same symbol are provided, despite
the desired behavior that weak symbols are overridden.
In this case we export redundant functions with different names. Thanks
to -ffunction-sections, the unused functions will be garbage-collected
at link time. This leaves us with the best of both worlds: Zig's
compiler-rt will provide both sets of symbols, and it will be
binary-compatible with different compilers that expect different names,
while still resulting in binaries without garbage.
This commit is contained in:
parent
9067daeb94
commit
3bc70ea2dd
2 changed files with 10 additions and 2 deletions
|
|
@ -5,7 +5,7 @@ pub const panic = common.panic;
|
|||
|
||||
comptime {
|
||||
if (common.gnu_f16_abi) {
|
||||
@export(__extendhfsf2, .{ .name = "__gnu_h2f_ieee", .linkage = common.linkage });
|
||||
@export(__gnu_h2f_ieee, .{ .name = "__gnu_h2f_ieee", .linkage = common.linkage });
|
||||
} else if (common.want_aeabi) {
|
||||
@export(__aeabi_h2f, .{ .name = "__aeabi_h2f", .linkage = common.linkage });
|
||||
}
|
||||
|
|
@ -16,6 +16,10 @@ pub fn __extendhfsf2(a: common.F16T) callconv(.C) f32 {
|
|||
return extendf(f32, f16, @bitCast(u16, a));
|
||||
}
|
||||
|
||||
fn __gnu_h2f_ieee(a: common.F16T) callconv(.C) f32 {
|
||||
return extendf(f32, f16, @bitCast(u16, a));
|
||||
}
|
||||
|
||||
fn __aeabi_h2f(a: u16) callconv(.AAPCS) f32 {
|
||||
return extendf(f32, f16, @bitCast(u16, a));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ pub const panic = common.panic;
|
|||
|
||||
comptime {
|
||||
if (common.gnu_f16_abi) {
|
||||
@export(__truncsfhf2, .{ .name = "__gnu_f2h_ieee", .linkage = common.linkage });
|
||||
@export(__gnu_f2h_ieee, .{ .name = "__gnu_f2h_ieee", .linkage = common.linkage });
|
||||
} else if (common.want_aeabi) {
|
||||
@export(__aeabi_f2h, .{ .name = "__aeabi_f2h", .linkage = common.linkage });
|
||||
}
|
||||
|
|
@ -16,6 +16,10 @@ pub fn __truncsfhf2(a: f32) callconv(.C) common.F16T {
|
|||
return @bitCast(common.F16T, truncf(f16, f32, a));
|
||||
}
|
||||
|
||||
fn __gnu_f2h_ieee(a: f32) callconv(.C) common.F16T {
|
||||
return @bitCast(common.F16T, truncf(f16, f32, a));
|
||||
}
|
||||
|
||||
fn __aeabi_f2h(a: f32) callconv(.AAPCS) u16 {
|
||||
return @bitCast(common.F16T, truncf(f16, f32, a));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue