aboutsummaryrefslogtreecommitdiff
path: root/lib/std/os/linux/arm-eabi.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2023-07-31 15:34:32 -0700
committerGitHub <noreply@github.com>2023-07-31 15:34:32 -0700
commite84cda0ebf8886346d42db78e8f3eb8d0bf515bd (patch)
tree9e0ed316fd374bcc3f7a4f26ff70291a9d1ca9fb /lib/std/os/linux/arm-eabi.zig
parent8f5c333ebe6631629be3b88d797a03b1d677d439 (diff)
parent228c956377e4f33e45fad7e0ba5d9eb5073803a5 (diff)
downloadzig-e84cda0ebf8886346d42db78e8f3eb8d0bf515bd.tar.gz
zig-e84cda0ebf8886346d42db78e8f3eb8d0bf515bd.zip
Merge pull request #16622 from jacobly0/cbe-asm-compat
CBE: fix regressions and get new targets passing behavior tests
Diffstat (limited to 'lib/std/os/linux/arm-eabi.zig')
-rw-r--r--lib/std/os/linux/arm-eabi.zig44
1 files changed, 32 insertions, 12 deletions
diff --git a/lib/std/os/linux/arm-eabi.zig b/lib/std/os/linux/arm-eabi.zig
index 057ecc763a..f4870dccbb 100644
--- a/lib/std/os/linux/arm-eabi.zig
+++ b/lib/std/os/linux/arm-eabi.zig
@@ -103,20 +103,40 @@ const CloneFn = *const fn (arg: usize) callconv(.C) u8;
/// This matches the libc clone function.
pub extern fn clone(func: CloneFn, stack: usize, flags: u32, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize;
-pub fn restore() callconv(.Naked) void {
- return asm volatile ("svc #0"
- :
- : [number] "{r7}" (@intFromEnum(SYS.sigreturn)),
- : "memory"
- );
+pub fn restore() callconv(.Naked) noreturn {
+ switch (@import("builtin").zig_backend) {
+ .stage2_c => asm volatile (
+ \\ mov r7, %[number]
+ \\ svc #0
+ :
+ : [number] "I" (@intFromEnum(SYS.sigreturn)),
+ : "memory"
+ ),
+ else => asm volatile (
+ \\ svc #0
+ :
+ : [number] "{r7}" (@intFromEnum(SYS.sigreturn)),
+ : "memory"
+ ),
+ }
}
-pub fn restore_rt() callconv(.Naked) void {
- return asm volatile ("svc #0"
- :
- : [number] "{r7}" (@intFromEnum(SYS.rt_sigreturn)),
- : "memory"
- );
+pub fn restore_rt() callconv(.Naked) noreturn {
+ switch (@import("builtin").zig_backend) {
+ .stage2_c => asm volatile (
+ \\ mov r7, %[number]
+ \\ svc #0
+ :
+ : [number] "I" (@intFromEnum(SYS.rt_sigreturn)),
+ : "memory"
+ ),
+ else => asm volatile (
+ \\ svc #0
+ :
+ : [number] "{r7}" (@intFromEnum(SYS.rt_sigreturn)),
+ : "memory"
+ ),
+ }
}
pub const MMAP2_UNIT = 4096;