aboutsummaryrefslogtreecommitdiff
path: root/lib/std/start.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-08-13 05:55:00 -0400
committerAndrew Kelley <andrew@ziglang.org>2023-09-19 09:37:32 -0700
commitd7daf7c203f583ed440efc68df6ee690ee8f8f32 (patch)
tree363f635f1b086e7be86cfec948f0ec4b61db52ba /lib/std/start.zig
parent39f1d96a2fd6aee5bf38b596db5a642bbba3a82d (diff)
downloadzig-d7daf7c203f583ed440efc68df6ee690ee8f8f32.tar.gz
zig-d7daf7c203f583ed440efc68df6ee690ee8f8f32.zip
start: workaround for LLVM 17 regression
Tracking issue #16799
Diffstat (limited to 'lib/std/start.zig')
-rw-r--r--lib/std/start.zig11
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/std/start.zig b/lib/std/start.zig
index d2099ca803..36379960a4 100644
--- a/lib/std/start.zig
+++ b/lib/std/start.zig
@@ -240,6 +240,14 @@ fn _start() callconv(.Naked) noreturn {
: [tos] "={rax}" (-> *std.os.plan9.Tos),
);
}
+ switch (native_arch) {
+ // https://github.com/ziglang/zig/issues/16799
+ .riscv64 => @export(argc_argv_ptr, .{
+ .name = "__zig_argc_argv_ptr",
+ .visibility = .hidden,
+ }),
+ else => {},
+ }
asm volatile (switch (native_arch) {
.x86_64 =>
\\ xorl %%ebp, %%ebp
@@ -270,7 +278,8 @@ fn _start() callconv(.Naked) noreturn {
.riscv64 =>
\\ li s0, 0
\\ li ra, 0
- \\ sd sp, %[argc_argv_ptr]
+ \\ lui a0, %hi(__zig_argc_argv_ptr)
+ \\ sd sp, %lo(__zig_argc_argv_ptr)(a0)
\\ andi sp, sp, -16
\\ tail %[posixCallMainAndExit]@plt
,