diff --git a/lib/std/os/linux/aarch64.zig b/lib/std/os/linux/aarch64.zig index db304a3a33..302c58ac2b 100644 --- a/lib/std/os/linux/aarch64.zig +++ b/lib/std/os/linux/aarch64.zig @@ -1,3 +1,4 @@ +const builtin = @import("builtin"); const std = @import("../../std.zig"); const maxInt = std.math.maxInt; const linux = std.os.linux; @@ -122,7 +123,12 @@ pub fn clone() callconv(.Naked) usize { \\ ret \\ \\ // child - \\1: .cfi_undefined lr + \\1: + ); + if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile ( + \\ .cfi_undefined lr + ); + asm volatile ( \\ mov fp, 0 \\ mov lr, 0 \\ diff --git a/lib/std/os/linux/hexagon.zig b/lib/std/os/linux/hexagon.zig index 0839ea8297..0b5cbb208e 100644 --- a/lib/std/os/linux/hexagon.zig +++ b/lib/std/os/linux/hexagon.zig @@ -1,3 +1,4 @@ +const builtin = @import("builtin"); const std = @import("../../std.zig"); const iovec = std.posix.iovec; const iovec_const = std.posix.iovec_const; @@ -117,8 +118,11 @@ pub fn clone() callconv(.Naked) usize { \\ \\ p0 = cmp.eq(r0, #0) \\ if (!p0) dealloc_return - \\ + ); + if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile ( \\ .cfi_undefined r31 + ); + asm volatile ( \\ r30 = #0 \\ r31 = #0 \\ diff --git a/lib/std/os/linux/loongarch64.zig b/lib/std/os/linux/loongarch64.zig index b52f1d10b1..ce57a6713a 100644 --- a/lib/std/os/linux/loongarch64.zig +++ b/lib/std/os/linux/loongarch64.zig @@ -1,3 +1,4 @@ +const builtin = @import("builtin"); const std = @import("../../std.zig"); const linux = std.os.linux; const SYS = linux.SYS; @@ -121,7 +122,11 @@ pub fn clone() callconv(.Naked) usize { \\ beqz $a0, 1f # whether child process \\ jirl $zero, $ra, 0 # parent process return \\1: + ); + if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile ( \\ .cfi_undefined 1 + ); + asm volatile ( \\ move $fp, $zero \\ move $ra, $zero \\ diff --git a/lib/std/os/linux/mips.zig b/lib/std/os/linux/mips.zig index 5d786ccde7..5ebe6bd686 100644 --- a/lib/std/os/linux/mips.zig +++ b/lib/std/os/linux/mips.zig @@ -1,3 +1,4 @@ +const builtin = @import("builtin"); const std = @import("../../std.zig"); const maxInt = std.math.maxInt; const linux = std.os.linux; @@ -231,7 +232,11 @@ pub fn clone() callconv(.Naked) usize { \\ jr $ra \\ nop \\1: + ); + if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile ( \\ .cfi_undefined $ra + ); + asm volatile ( \\ move $fp, $zero \\ move $ra, $zero \\ diff --git a/lib/std/os/linux/mips64.zig b/lib/std/os/linux/mips64.zig index 256c911bbe..0d0a1104c1 100644 --- a/lib/std/os/linux/mips64.zig +++ b/lib/std/os/linux/mips64.zig @@ -1,3 +1,4 @@ +const builtin = @import("builtin"); const std = @import("../../std.zig"); const maxInt = std.math.maxInt; const linux = std.os.linux; @@ -210,7 +211,11 @@ pub fn clone() callconv(.Naked) usize { \\ jr $ra \\ nop \\1: + ); + if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile ( \\ .cfi_undefined $ra + ); + asm volatile ( \\ move $fp, $zero \\ move $ra, $zero \\ diff --git a/lib/std/os/linux/powerpc.zig b/lib/std/os/linux/powerpc.zig index 9dde326e1b..591575cb02 100644 --- a/lib/std/os/linux/powerpc.zig +++ b/lib/std/os/linux/powerpc.zig @@ -1,3 +1,4 @@ +const builtin = @import("builtin"); const std = @import("../../std.zig"); const maxInt = std.math.maxInt; const linux = std.os.linux; @@ -176,7 +177,11 @@ pub fn clone() callconv(.Naked) usize { \\ \\ #else: we're the child \\ 2: + ); + if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile ( \\ .cfi_undefined lr + ); + asm volatile ( \\ li 31, 0 \\ mtlr 0 \\ diff --git a/lib/std/os/linux/powerpc64.zig b/lib/std/os/linux/powerpc64.zig index 6a1f98a65f..419c9f0629 100644 --- a/lib/std/os/linux/powerpc64.zig +++ b/lib/std/os/linux/powerpc64.zig @@ -1,3 +1,4 @@ +const builtin = @import("builtin"); const std = @import("../../std.zig"); const maxInt = std.math.maxInt; const linux = std.os.linux; @@ -161,7 +162,11 @@ pub fn clone() callconv(.Naked) usize { \\ bnelr cr7 \\ \\ # we're the child + ); + if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile ( \\ .cfi_undefined lr + ); + asm volatile ( \\ li 31, 0 \\ mtlr 0 \\ diff --git a/lib/std/os/linux/riscv32.zig b/lib/std/os/linux/riscv32.zig index dc444a1956..4df6e1671f 100644 --- a/lib/std/os/linux/riscv32.zig +++ b/lib/std/os/linux/riscv32.zig @@ -1,3 +1,4 @@ +const builtin = @import("builtin"); const std = @import("../../std.zig"); const iovec = std.posix.iovec; const iovec_const = std.posix.iovec_const; @@ -120,7 +121,12 @@ pub fn clone() callconv(.Naked) usize { \\ ret \\ \\ # Child - \\1: .cfi_undefined ra + \\1: + ); + if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile ( + \\ .cfi_undefined ra + ); + asm volatile ( \\ mv fp, zero \\ mv ra, zero \\ diff --git a/lib/std/os/linux/riscv64.zig b/lib/std/os/linux/riscv64.zig index 45ba568c1b..c402e9e894 100644 --- a/lib/std/os/linux/riscv64.zig +++ b/lib/std/os/linux/riscv64.zig @@ -1,3 +1,4 @@ +const builtin = @import("builtin"); const std = @import("../../std.zig"); const iovec = std.posix.iovec; const iovec_const = std.posix.iovec_const; @@ -120,7 +121,12 @@ pub fn clone() callconv(.Naked) usize { \\ ret \\ \\ # Child - \\1: .cfi_undefined ra + \\1: + ); + if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile ( + \\ .cfi_undefined ra + ); + asm volatile ( \\ mv fp, zero \\ mv ra, zero \\ diff --git a/lib/std/os/linux/s390x.zig b/lib/std/os/linux/s390x.zig index 8fbe1c930b..337e36a574 100644 --- a/lib/std/os/linux/s390x.zig +++ b/lib/std/os/linux/s390x.zig @@ -1,3 +1,4 @@ +const builtin = @import("builtin"); const std = @import("../../std.zig"); const iovec = std.posix.iovec; const iovec_const = std.posix.iovec_const; @@ -134,7 +135,11 @@ pub fn clone() callconv(.Naked) usize { \\bnzr %%r14 \\ \\# we're the child + ); + if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile ( \\.cfi_undefined %%r14 + ); + asm volatile ( \\lghi %%r11, 0 \\lghi %%r14, 0 \\ diff --git a/lib/std/os/linux/sparc64.zig b/lib/std/os/linux/sparc64.zig index 17df65feb7..90cb799e02 100644 --- a/lib/std/os/linux/sparc64.zig +++ b/lib/std/os/linux/sparc64.zig @@ -1,3 +1,4 @@ +const builtin = @import("builtin"); const std = @import("../../std.zig"); const maxInt = std.math.maxInt; const pid_t = linux.pid_t; @@ -215,7 +216,11 @@ pub fn clone() callconv(.Naked) usize { \\ restore \\2: \\ # Child process + ); + if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile ( \\ .cfi_undefined %%i7 + ); + asm volatile ( \\ mov %%g0, %%fp \\ mov %%g0, %%i7 \\ diff --git a/lib/std/os/linux/x86.zig b/lib/std/os/linux/x86.zig index cb746e52a8..0cde6d805e 100644 --- a/lib/std/os/linux/x86.zig +++ b/lib/std/os/linux/x86.zig @@ -1,3 +1,4 @@ +const builtin = @import("builtin"); const std = @import("../../std.zig"); const maxInt = std.math.maxInt; const linux = std.os.linux; @@ -156,7 +157,11 @@ pub fn clone() callconv(.Naked) usize { \\ retl \\ \\1: + ); + if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile ( \\ .cfi_undefined %%eip + ); + asm volatile ( \\ xorl %%ebp,%%ebp \\ \\ popl %%eax diff --git a/lib/std/os/linux/x86_64.zig b/lib/std/os/linux/x86_64.zig index 44a37345f0..1c5105d624 100644 --- a/lib/std/os/linux/x86_64.zig +++ b/lib/std/os/linux/x86_64.zig @@ -1,3 +1,4 @@ +const builtin = @import("builtin"); const std = @import("../../std.zig"); const maxInt = std.math.maxInt; const linux = std.os.linux; @@ -117,7 +118,12 @@ pub fn clone() callconv(.Naked) usize { \\ jz 1f \\ retq \\ - \\1: .cfi_undefined %%rip + \\1: + ); + if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile ( + \\ .cfi_undefined %%rip + ); + asm volatile ( \\ xorl %%ebp,%%ebp \\ \\ popq %%rdi