diff --git a/lib/std/os/linux/aarch64.zig b/lib/std/os/linux/aarch64.zig index db304a3a33b43647245fbd70c2be3b8638f05ae6..302c58ac2bcf58b48814c58cf253582e1f44e4ca 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 0839ea8297a0906f045b3a9466d21c368520e814..0b5cbb208ee8f2207958b11697898246f769aebd 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 b52f1d10b137e625ab70e1dff12d5163214e28be..ce57a6713a9b3d863eb4cbbbac6466a2ac797242 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 5d786ccde7f652a40e7d17614b1e088fb5ef86c3..5ebe6bd68658b7c6f800b23df29d5ebf58338d44 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 256c911bbe58753219952b53a0cf78b3e35928ad..0d0a1104c12c5bf08d5f4c53add1b07c6ec8fe1b 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 9dde326e1b043d68db1c500c8494f93c50b102c5..591575cb02a71e56a4938074cc0f382b9b3da75e 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 6a1f98a65fba318c6741fec91c88f88267f5ad8e..419c9f06298552145a06a16f865679647eee3a83 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 dc444a19560bd09762b12a71291bff27bd0c4cba..4df6e1671f93b7a53d4a708b893be252314c1c65 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 45ba568c1bf985f6a11d3afb24c4f967abb1e50a..c402e9e894ae75c90bb5dbfe4cf0b5d82cb64758 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 8fbe1c930b3b523089a380448093b6fab84ea892..337e36a574ab070d6816292d5d4d2635f94d54dc 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 17df65feb72df685413f3cf91191d951868b8570..90cb799e02be9980e3bceea968ad262b2481c355 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 cb746e52a8dc8af51e866a3b740f1572428af6dd..0cde6d805e786d4441c5a69c7bc05082d3d7a253 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 44a37345f0f46e8d441418f63c7bdb13c4ce9dc5..1c5105d6247d6c89deaab55c7e962b39fc650696 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