mirror of
https://github.com/ziglang/zig.git
synced 2026-01-21 06:45:24 +00:00
Merge pull request #6974 from daurnimator/prctl-cleanup
prctl improvements
This commit is contained in:
commit
cf7505da1f
@ -5636,16 +5636,19 @@ pub const PrctlError = error{
|
||||
PermissionDenied,
|
||||
} || UnexpectedError;
|
||||
|
||||
pub fn prctl(option: i32, args: anytype) PrctlError!u31 {
|
||||
pub fn prctl(option: PR, args: anytype) PrctlError!u31 {
|
||||
if (@typeInfo(@TypeOf(args)) != .Struct)
|
||||
@compileError("Expected tuple or struct argument, found " ++ @typeName(@TypeOf(args)));
|
||||
if (args.len > 4)
|
||||
@compileError("prctl takes a maximum of 4 optional arguments");
|
||||
|
||||
var buf: [4]usize = undefined;
|
||||
inline for (args) |arg, i| buf[i] = arg;
|
||||
{
|
||||
comptime var i = 0;
|
||||
inline while (i < args.len) : (i += 1) buf[i] = args[i];
|
||||
}
|
||||
|
||||
const rc = system.prctl(option, buf[0], buf[1], buf[2], buf[3]);
|
||||
const rc = system.prctl(@enumToInt(option), buf[0], buf[1], buf[2], buf[3]);
|
||||
switch (errno(rc)) {
|
||||
0 => return @intCast(u31, rc),
|
||||
EACCES => return error.AccessDenied,
|
||||
|
||||
@ -4,27 +4,109 @@
|
||||
// The MIT license requires this copyright notice to be included in all copies
|
||||
// and substantial portions of the software.
|
||||
|
||||
pub const PR_SET_PDEATHSIG = 1;
|
||||
pub const PR_GET_PDEATHSIG = 2;
|
||||
pub const PR = extern enum(i32) {
|
||||
SET_PDEATHSIG = 1,
|
||||
GET_PDEATHSIG = 2,
|
||||
|
||||
pub const PR_GET_DUMPABLE = 3;
|
||||
pub const PR_SET_DUMPABLE = 4;
|
||||
GET_DUMPABLE = 3,
|
||||
SET_DUMPABLE = 4,
|
||||
|
||||
pub const PR_GET_UNALIGN = 5;
|
||||
pub const PR_SET_UNALIGN = 6;
|
||||
GET_UNALIGN = 5,
|
||||
SET_UNALIGN = 6,
|
||||
|
||||
GET_KEEPCAPS = 7,
|
||||
SET_KEEPCAPS = 8,
|
||||
|
||||
GET_FPEMU = 9,
|
||||
SET_FPEMU = 10,
|
||||
|
||||
GET_FPEXC = 11,
|
||||
SET_FPEXC = 12,
|
||||
|
||||
GET_TIMING = 13,
|
||||
SET_TIMING = 14,
|
||||
|
||||
SET_NAME = 15,
|
||||
GET_NAME = 16,
|
||||
|
||||
GET_ENDIAN = 19,
|
||||
SET_ENDIAN = 20,
|
||||
|
||||
GET_SECCOMP = 21,
|
||||
SET_SECCOMP = 22,
|
||||
|
||||
CAPBSET_READ = 23,
|
||||
CAPBSET_DROP = 24,
|
||||
|
||||
GET_TSC = 25,
|
||||
SET_TSC = 26,
|
||||
|
||||
GET_SECUREBITS = 27,
|
||||
SET_SECUREBITS = 28,
|
||||
|
||||
SET_TIMERSLACK = 29,
|
||||
GET_TIMERSLACK = 30,
|
||||
|
||||
TASK_PERF_EVENTS_DISABLE = 31,
|
||||
TASK_PERF_EVENTS_ENABLE = 32,
|
||||
|
||||
MCE_KILL = 33,
|
||||
|
||||
MCE_KILL_GET = 34,
|
||||
|
||||
SET_MM = 35,
|
||||
|
||||
SET_PTRACER = 0x59616d61,
|
||||
|
||||
SET_CHILD_SUBREAPER = 36,
|
||||
GET_CHILD_SUBREAPER = 37,
|
||||
|
||||
SET_NO_NEW_PRIVS = 38,
|
||||
GET_NO_NEW_PRIVS = 39,
|
||||
|
||||
GET_TID_ADDRESS = 40,
|
||||
|
||||
SET_THP_DISABLE = 41,
|
||||
GET_THP_DISABLE = 42,
|
||||
|
||||
MPX_ENABLE_MANAGEMENT = 43,
|
||||
MPX_DISABLE_MANAGEMENT = 44,
|
||||
|
||||
SET_FP_MODE = 45,
|
||||
GET_FP_MODE = 46,
|
||||
|
||||
CAP_AMBIENT = 47,
|
||||
|
||||
SVE_SET_VL = 50,
|
||||
SVE_GET_VL = 51,
|
||||
|
||||
GET_SPECULATION_CTRL = 52,
|
||||
SET_SPECULATION_CTRL = 53,
|
||||
|
||||
_,
|
||||
};
|
||||
|
||||
pub const PR_SET_PDEATHSIG = @enumToInt(PR.PR_SET_PDEATHSIG);
|
||||
pub const PR_GET_PDEATHSIG = @enumToInt(PR.PR_GET_PDEATHSIG);
|
||||
|
||||
pub const PR_GET_DUMPABLE = @enumToInt(PR.PR_GET_DUMPABLE);
|
||||
pub const PR_SET_DUMPABLE = @enumToInt(PR.PR_SET_DUMPABLE);
|
||||
|
||||
pub const PR_GET_UNALIGN = @enumToInt(PR.PR_GET_UNALIGN);
|
||||
pub const PR_SET_UNALIGN = @enumToInt(PR.PR_SET_UNALIGN);
|
||||
pub const PR_UNALIGN_NOPRINT = 1;
|
||||
pub const PR_UNALIGN_SIGBUS = 2;
|
||||
|
||||
pub const PR_GET_KEEPCAPS = 7;
|
||||
pub const PR_SET_KEEPCAPS = 8;
|
||||
pub const PR_GET_KEEPCAPS = @enumToInt(PR.PR_GET_KEEPCAPS);
|
||||
pub const PR_SET_KEEPCAPS = @enumToInt(PR.PR_SET_KEEPCAPS);
|
||||
|
||||
pub const PR_GET_FPEMU = 9;
|
||||
pub const PR_SET_FPEMU = 10;
|
||||
pub const PR_GET_FPEMU = @enumToInt(PR.PR_GET_FPEMU);
|
||||
pub const PR_SET_FPEMU = @enumToInt(PR.PR_SET_FPEMU);
|
||||
pub const PR_FPEMU_NOPRINT = 1;
|
||||
pub const PR_FPEMU_SIGFPE = 2;
|
||||
|
||||
pub const PR_GET_FPEXC = 11;
|
||||
pub const PR_SET_FPEXC = 12;
|
||||
pub const PR_GET_FPEXC = @enumToInt(PR.PR_GET_FPEXC);
|
||||
pub const PR_SET_FPEXC = @enumToInt(PR.PR_SET_FPEXC);
|
||||
pub const PR_FP_EXC_SW_ENABLE = 0x80;
|
||||
pub const PR_FP_EXC_DIV = 0x010000;
|
||||
pub const PR_FP_EXC_OVF = 0x020000;
|
||||
@ -36,41 +118,41 @@ pub const PR_FP_EXC_NONRECOV = 1;
|
||||
pub const PR_FP_EXC_ASYNC = 2;
|
||||
pub const PR_FP_EXC_PRECISE = 3;
|
||||
|
||||
pub const PR_GET_TIMING = 13;
|
||||
pub const PR_SET_TIMING = 14;
|
||||
pub const PR_GET_TIMING = @enumToInt(PR.PR_GET_TIMING);
|
||||
pub const PR_SET_TIMING = @enumToInt(PR.PR_SET_TIMING);
|
||||
pub const PR_TIMING_STATISTICAL = 0;
|
||||
pub const PR_TIMING_TIMESTAMP = 1;
|
||||
|
||||
pub const PR_SET_NAME = 15;
|
||||
pub const PR_GET_NAME = 16;
|
||||
pub const PR_SET_NAME = @enumToInt(PR.PR_SET_NAME);
|
||||
pub const PR_GET_NAME = @enumToInt(PR.PR_GET_NAME);
|
||||
|
||||
pub const PR_GET_ENDIAN = 19;
|
||||
pub const PR_SET_ENDIAN = 20;
|
||||
pub const PR_GET_ENDIAN = @enumToInt(PR.PR_GET_ENDIAN);
|
||||
pub const PR_SET_ENDIAN = @enumToInt(PR.PR_SET_ENDIAN);
|
||||
pub const PR_ENDIAN_BIG = 0;
|
||||
pub const PR_ENDIAN_LITTLE = 1;
|
||||
pub const PR_ENDIAN_PPC_LITTLE = 2;
|
||||
|
||||
pub const PR_GET_SECCOMP = 21;
|
||||
pub const PR_SET_SECCOMP = 22;
|
||||
pub const PR_GET_SECCOMP = @enumToInt(PR.PR_GET_SECCOMP);
|
||||
pub const PR_SET_SECCOMP = @enumToInt(PR.PR_SET_SECCOMP);
|
||||
|
||||
pub const PR_CAPBSET_READ = 23;
|
||||
pub const PR_CAPBSET_DROP = 24;
|
||||
pub const PR_CAPBSET_READ = @enumToInt(PR.PR_CAPBSET_READ);
|
||||
pub const PR_CAPBSET_DROP = @enumToInt(PR.PR_CAPBSET_DROP);
|
||||
|
||||
pub const PR_GET_TSC = 25;
|
||||
pub const PR_SET_TSC = 26;
|
||||
pub const PR_GET_TSC = @enumToInt(PR.PR_GET_TSC);
|
||||
pub const PR_SET_TSC = @enumToInt(PR.PR_SET_TSC);
|
||||
pub const PR_TSC_ENABLE = 1;
|
||||
pub const PR_TSC_SIGSEGV = 2;
|
||||
|
||||
pub const PR_GET_SECUREBITS = 27;
|
||||
pub const PR_SET_SECUREBITS = 28;
|
||||
pub const PR_GET_SECUREBITS = @enumToInt(PR.PR_GET_SECUREBITS);
|
||||
pub const PR_SET_SECUREBITS = @enumToInt(PR.PR_SET_SECUREBITS);
|
||||
|
||||
pub const PR_SET_TIMERSLACK = 29;
|
||||
pub const PR_GET_TIMERSLACK = 30;
|
||||
pub const PR_SET_TIMERSLACK = @enumToInt(PR.PR_SET_TIMERSLACK);
|
||||
pub const PR_GET_TIMERSLACK = @enumToInt(PR.PR_GET_TIMERSLACK);
|
||||
|
||||
pub const PR_TASK_PERF_EVENTS_DISABLE = 31;
|
||||
pub const PR_TASK_PERF_EVENTS_ENABLE = 32;
|
||||
pub const PR_TASK_PERF_EVENTS_DISABLE = @enumToInt(PR.PR_TASK_PERF_EVENTS_DISABLE);
|
||||
pub const PR_TASK_PERF_EVENTS_ENABLE = @enumToInt(PR.PR_TASK_PERF_EVENTS_ENABLE);
|
||||
|
||||
pub const PR_MCE_KILL = 33;
|
||||
pub const PR_MCE_KILL = @enumToInt(PR.PR_MCE_KILL);
|
||||
pub const PR_MCE_KILL_CLEAR = 0;
|
||||
pub const PR_MCE_KILL_SET = 1;
|
||||
|
||||
@ -78,9 +160,9 @@ pub const PR_MCE_KILL_LATE = 0;
|
||||
pub const PR_MCE_KILL_EARLY = 1;
|
||||
pub const PR_MCE_KILL_DEFAULT = 2;
|
||||
|
||||
pub const PR_MCE_KILL_GET = 34;
|
||||
pub const PR_MCE_KILL_GET = @enumToInt(PR.PR_MCE_KILL_GET);
|
||||
|
||||
pub const PR_SET_MM = 35;
|
||||
pub const PR_SET_MM = @enumToInt(PR.PR_SET_MM);
|
||||
pub const PR_SET_MM_START_CODE = 1;
|
||||
pub const PR_SET_MM_END_CODE = 2;
|
||||
pub const PR_SET_MM_START_DATA = 3;
|
||||
@ -114,42 +196,42 @@ pub const prctl_mm_map = extern struct {
|
||||
exe_fd: u32,
|
||||
};
|
||||
|
||||
pub const PR_SET_PTRACER = 0x59616d61;
|
||||
pub const PR_SET_PTRACER = @enumToInt(PR.PR_SET_PTRACER);
|
||||
pub const PR_SET_PTRACER_ANY = std.math.maxInt(c_ulong);
|
||||
|
||||
pub const PR_SET_CHILD_SUBREAPER = 36;
|
||||
pub const PR_GET_CHILD_SUBREAPER = 37;
|
||||
pub const PR_SET_CHILD_SUBREAPER = @enumToInt(PR.PR_SET_CHILD_SUBREAPER);
|
||||
pub const PR_GET_CHILD_SUBREAPER = @enumToInt(PR.PR_GET_CHILD_SUBREAPER);
|
||||
|
||||
pub const PR_SET_NO_NEW_PRIVS = 38;
|
||||
pub const PR_GET_NO_NEW_PRIVS = 39;
|
||||
pub const PR_SET_NO_NEW_PRIVS = @enumToInt(PR.PR_SET_NO_NEW_PRIVS);
|
||||
pub const PR_GET_NO_NEW_PRIVS = @enumToInt(PR.PR_GET_NO_NEW_PRIVS);
|
||||
|
||||
pub const PR_GET_TID_ADDRESS = 40;
|
||||
pub const PR_GET_TID_ADDRESS = @enumToInt(PR.PR_GET_TID_ADDRESS);
|
||||
|
||||
pub const PR_SET_THP_DISABLE = 41;
|
||||
pub const PR_GET_THP_DISABLE = 42;
|
||||
pub const PR_SET_THP_DISABLE = @enumToInt(PR.PR_SET_THP_DISABLE);
|
||||
pub const PR_GET_THP_DISABLE = @enumToInt(PR.PR_GET_THP_DISABLE);
|
||||
|
||||
pub const PR_MPX_ENABLE_MANAGEMENT = 43;
|
||||
pub const PR_MPX_DISABLE_MANAGEMENT = 44;
|
||||
pub const PR_MPX_ENABLE_MANAGEMENT = @enumToInt(PR.PR_MPX_ENABLE_MANAGEMENT);
|
||||
pub const PR_MPX_DISABLE_MANAGEMENT = @enumToInt(PR.PR_MPX_DISABLE_MANAGEMENT);
|
||||
|
||||
pub const PR_SET_FP_MODE = 45;
|
||||
pub const PR_GET_FP_MODE = 46;
|
||||
pub const PR_SET_FP_MODE = @enumToInt(PR.PR_SET_FP_MODE);
|
||||
pub const PR_GET_FP_MODE = @enumToInt(PR.PR_GET_FP_MODE);
|
||||
pub const PR_FP_MODE_FR = 1 << 0;
|
||||
pub const PR_FP_MODE_FRE = 1 << 1;
|
||||
|
||||
pub const PR_CAP_AMBIENT = 47;
|
||||
pub const PR_CAP_AMBIENT = @enumToInt(PR.PR_CAP_AMBIENT);
|
||||
pub const PR_CAP_AMBIENT_IS_SET = 1;
|
||||
pub const PR_CAP_AMBIENT_RAISE = 2;
|
||||
pub const PR_CAP_AMBIENT_LOWER = 3;
|
||||
pub const PR_CAP_AMBIENT_CLEAR_ALL = 4;
|
||||
|
||||
pub const PR_SVE_SET_VL = 50;
|
||||
pub const PR_SVE_SET_VL = @enumToInt(PR.PR_SVE_SET_VL);
|
||||
pub const PR_SVE_SET_VL_ONEXEC = 1 << 18;
|
||||
pub const PR_SVE_GET_VL = 51;
|
||||
pub const PR_SVE_GET_VL = @enumToInt(PR.PR_SVE_GET_VL);
|
||||
pub const PR_SVE_VL_LEN_MASK = 0xffff;
|
||||
pub const PR_SVE_VL_INHERIT = 1 << 17;
|
||||
|
||||
pub const PR_GET_SPECULATION_CTRL = 52;
|
||||
pub const PR_SET_SPECULATION_CTRL = 53;
|
||||
pub const PR_GET_SPECULATION_CTRL = @enumToInt(PR.PR_GET_SPECULATION_CTRL);
|
||||
pub const PR_SET_SPECULATION_CTRL = @enumToInt(PR.PR_SET_SPECULATION_CTRL);
|
||||
pub const PR_SPEC_STORE_BYPASS = 0;
|
||||
pub const PR_SPEC_NOT_AFFECTED = 0;
|
||||
pub const PR_SPEC_PRCTL = 1 << 0;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user