motiejus/zig

fork of https://codeberg.org/ziglang/zig
git clone https://git.jakstys.lt/motiejus/zig.git
Log | Tree | Refs | README | LICENSE

commit 8a78d875cc1cdab2648e7413fc0d2eea5afc6991 (tree)
parent 4de661ef18d4cdc7f859c8bc1990e8a0519163db
Author: Alex Rønne Petersen <alex@alexrp.com>
Date:   Sat, 18 Jan 2025 14:09:47 +0100

std.os.linux: Don't emit CFI directives if unwind tables are disabled.

Diffstat:
Mlib/std/os/linux/aarch64.zig | 8+++++++-
Mlib/std/os/linux/hexagon.zig | 6+++++-
Mlib/std/os/linux/loongarch64.zig | 5+++++
Mlib/std/os/linux/mips.zig | 5+++++
Mlib/std/os/linux/mips64.zig | 5+++++
Mlib/std/os/linux/powerpc.zig | 5+++++
Mlib/std/os/linux/powerpc64.zig | 5+++++
Mlib/std/os/linux/riscv32.zig | 8+++++++-
Mlib/std/os/linux/riscv64.zig | 8+++++++-
Mlib/std/os/linux/s390x.zig | 5+++++
Mlib/std/os/linux/sparc64.zig | 5+++++
Mlib/std/os/linux/x86.zig | 5+++++
Mlib/std/os/linux/x86_64.zig | 8+++++++-
13 files changed, 73 insertions(+), 5 deletions(-)

diff --git 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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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