From 0b8bd9b2b4f609fb4ae7d31da7e7a0fd4f5ad987 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 27 Jun 2022 18:27:06 -0700 Subject: [PATCH] std.os.linux.clone: upgrade to stage2 fn ptr semantics --- lib/std/os/linux/arm64.zig | 7 ++++++- lib/std/os/linux/i386.zig | 7 ++++++- lib/std/os/linux/mips.zig | 7 ++++++- lib/std/os/linux/powerpc.zig | 7 ++++++- lib/std/os/linux/powerpc64.zig | 7 ++++++- lib/std/os/linux/riscv64.zig | 7 ++++++- lib/std/os/linux/sparc64.zig | 7 ++++++- 7 files changed, 42 insertions(+), 7 deletions(-) diff --git a/lib/std/os/linux/arm64.zig b/lib/std/os/linux/arm64.zig index dc6c7077ba2ae671a999dfd669a2262dc709581c..8f928cab36d13ecd8b4024ad624d273310ae695a 100644 --- a/lib/std/os/linux/arm64.zig +++ b/lib/std/os/linux/arm64.zig @@ -98,8 +98,13 @@ pub fn syscall6( ); } +const CloneFn = switch (@import("builtin").zig_backend) { + .stage1 => fn (arg: usize) callconv(.C) u8, + else => *const fn (arg: usize) callconv(.C) u8, +}; + /// This matches the libc clone function. -pub extern fn clone(func: fn (arg: usize) callconv(.C) u8, stack: usize, flags: u32, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize; +pub extern fn clone(func: CloneFn, stack: usize, flags: u32, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize; pub const restore = restore_rt; diff --git a/lib/std/os/linux/i386.zig b/lib/std/os/linux/i386.zig index a85f6c713be9c69d1e6a74248f0a273fade14010..9ca127eb0cfba1f19ded295331a77ccb740e4dac 100644 --- a/lib/std/os/linux/i386.zig +++ b/lib/std/os/linux/i386.zig @@ -118,8 +118,13 @@ pub fn socketcall(call: usize, args: [*]usize) usize { ); } +const CloneFn = switch (@import("builtin").zig_backend) { + .stage1 => fn (arg: usize) callconv(.C) u8, + else => *const fn (arg: usize) callconv(.C) u8, +}; + /// This matches the libc clone function. -pub extern fn clone(func: fn (arg: usize) callconv(.C) u8, stack: usize, flags: u32, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize; +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 ("int $0x80" diff --git a/lib/std/os/linux/mips.zig b/lib/std/os/linux/mips.zig index 4341949b2f7c7dd9e8d523a16d61353e57883638..ee0aff281c9d9e9b0e0be65d59a9a81133d274e1 100644 --- a/lib/std/os/linux/mips.zig +++ b/lib/std/os/linux/mips.zig @@ -190,8 +190,13 @@ pub fn syscall7( ); } +const CloneFn = switch (@import("builtin").zig_backend) { + .stage1 => fn (arg: usize) callconv(.C) u8, + else => *const fn (arg: usize) callconv(.C) u8, +}; + /// This matches the libc clone function. -pub extern fn clone(func: fn (arg: usize) callconv(.C) u8, stack: usize, flags: u32, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize; +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 ("syscall" diff --git a/lib/std/os/linux/powerpc.zig b/lib/std/os/linux/powerpc.zig index c25f520ba25eae8b447fa38276441850157a0bf7..d0601f858bca908f2f1cdcd7332a2362c06e2778 100644 --- a/lib/std/os/linux/powerpc.zig +++ b/lib/std/os/linux/powerpc.zig @@ -126,8 +126,13 @@ pub fn syscall6( ); } +const CloneFn = switch (@import("builtin").zig_backend) { + .stage1 => fn (arg: usize) callconv(.C) u8, + else => *const fn (arg: usize) callconv(.C) u8, +}; + /// This matches the libc clone function. -pub extern fn clone(func: fn (arg: usize) callconv(.C) u8, stack: usize, flags: usize, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize; +pub extern fn clone(func: CloneFn, stack: usize, flags: usize, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize; pub const restore = restore_rt; diff --git a/lib/std/os/linux/powerpc64.zig b/lib/std/os/linux/powerpc64.zig index 221fd935f21594b675885f686e7d5631d0dc65ad..329674cd72ffd3e7ec70b852c1e9a8ffe2763b0d 100644 --- a/lib/std/os/linux/powerpc64.zig +++ b/lib/std/os/linux/powerpc64.zig @@ -126,8 +126,13 @@ pub fn syscall6( ); } +const CloneFn = switch (@import("builtin").zig_backend) { + .stage1 => fn (arg: usize) callconv(.C) u8, + else => *const fn (arg: usize) callconv(.C) u8, +}; + /// This matches the libc clone function. -pub extern fn clone(func: fn (arg: usize) callconv(.C) u8, stack: usize, flags: usize, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize; +pub extern fn clone(func: CloneFn, stack: usize, flags: usize, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize; pub const restore = restore_rt; diff --git a/lib/std/os/linux/riscv64.zig b/lib/std/os/linux/riscv64.zig index 079d501c32421426bcd54c1a5d1abbe4bc715f2b..dbf22e0aa4c216425fa1c4b4aaa8e27264e7db2e 100644 --- a/lib/std/os/linux/riscv64.zig +++ b/lib/std/os/linux/riscv64.zig @@ -95,7 +95,12 @@ pub fn syscall6( ); } -pub extern fn clone(func: fn (arg: usize) callconv(.C) u8, stack: usize, flags: u32, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize; +const CloneFn = switch (@import("builtin").zig_backend) { + .stage1 => fn (arg: usize) callconv(.C) u8, + else => *const fn (arg: usize) callconv(.C) u8, +}; + +pub extern fn clone(func: CloneFn, stack: usize, flags: u32, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize; pub const restore = restore_rt; diff --git a/lib/std/os/linux/sparc64.zig b/lib/std/os/linux/sparc64.zig index d7b74d95eb345a210fab0e18edaf512f45a95180..6e1792ae0addae080b82615178e854335367e493 100644 --- a/lib/std/os/linux/sparc64.zig +++ b/lib/std/os/linux/sparc64.zig @@ -178,8 +178,13 @@ pub fn syscall6( ); } +const CloneFn = switch (@import("builtin").zig_backend) { + .stage1 => fn (arg: usize) callconv(.C) u8, + else => *const fn (arg: usize) callconv(.C) u8, +}; + /// This matches the libc clone function. -pub extern fn clone(func: fn (arg: usize) callconv(.C) u8, stack: usize, flags: usize, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize; +pub extern fn clone(func: CloneFn, stack: usize, flags: usize, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize; pub const restore = restore_rt; -- 2.54.0