blob: a7322166a204aff43690c8c2f0dbcc5e33da1cf3 [file] [log] [blame]
/**
* D header file for GNU/Linux.
*
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
* Authors: Arun Chandrasekaran <aruncxy@gmail.com>
*/
module core.sys.linux.sys.prctl;
version (linux):
extern (C):
@system:
@nogc:
nothrow:
enum: uint
{
PR_SET_PDEATHSIG = 1,
PR_GET_PDEATHSIG = 2,
PR_GET_DUMPABLE = 3,
PR_SET_DUMPABLE = 4,
PR_GET_UNALIGN = 5,
PR_SET_UNALIGN = 6,
PR_UNALIGN_NOPRINT = 1,
PR_UNALIGN_SIGBUS = 2,
PR_GET_KEEPCAPS = 7,
PR_SET_KEEPCAPS = 8,
PR_GET_FPEMU = 9,
PR_SET_FPEMU = 10,
PR_FPEMU_NOPRINT = 1,
PR_FPEMU_SIGFPE = 2,
PR_GET_FPEXC = 11,
PR_SET_FPEXC = 12,
PR_FP_EXC_SW_ENABLE = 0x80,
PR_FP_EXC_DIV = 0x010000,
PR_FP_EXC_OVF = 0x020000,
PR_FP_EXC_UND = 0x040000,
PR_FP_EXC_RES = 0x080000,
PR_FP_EXC_INV = 0x100000,
PR_FP_EXC_DISABLED = 0,
PR_FP_EXC_NONRECOV = 1,
PR_FP_EXC_ASYNC = 2,
PR_FP_EXC_PRECISE = 3,
PR_GET_TIMING = 13,
PR_SET_TIMING = 14,
PR_TIMING_STATISTICAL = 0,
PR_TIMING_TIMESTAMP = 1,
PR_SET_NAME = 15,
PR_GET_NAME = 16,
PR_GET_ENDIAN = 19,
PR_SET_ENDIAN = 20,
PR_ENDIAN_BIG = 0,
PR_ENDIAN_LITTLE = 1,
PR_ENDIAN_PPC_LITTLE = 2,
PR_GET_SECCOMP = 21,
PR_SET_SECCOMP = 22,
PR_CAPBSET_READ = 23,
PR_CAPBSET_DROP = 24,
PR_GET_TSC = 25,
PR_SET_TSC = 26,
PR_TSC_ENABLE = 1,
PR_TSC_SIGSEGV = 2,
PR_GET_SECUREBITS = 27,
PR_SET_SECUREBITS = 28,
PR_SET_TIMERSLACK = 29,
PR_GET_TIMERSLACK = 30,
PR_TASK_PERF_EVENTS_DISABLE = 31,
PR_TASK_PERF_EVENTS_ENABLE = 32,
PR_MCE_KILL = 33,
PR_MCE_KILL_CLEAR = 0,
PR_MCE_KILL_SET = 1,
PR_MCE_KILL_LATE = 0,
PR_MCE_KILL_EARLY = 1,
PR_MCE_KILL_DEFAULT = 2,
PR_MCE_KILL_GET = 34,
PR_SET_MM = 35,
PR_SET_MM_START_CODE = 1,
PR_SET_MM_END_CODE = 2,
PR_SET_MM_START_DATA = 3,
PR_SET_MM_END_DATA = 4,
PR_SET_MM_START_STACK = 5,
PR_SET_MM_START_BRK = 6,
PR_SET_MM_BRK = 7,
PR_SET_MM_ARG_START = 8,
PR_SET_MM_ARG_END = 9,
PR_SET_MM_ENV_START = 10,
PR_SET_MM_ENV_END = 11,
PR_SET_MM_AUXV = 12,
PR_SET_MM_EXE_FILE = 13,
PR_SET_MM_MAP = 14,
PR_SET_MM_MAP_SIZE = 15,
PR_SET_PTRACER = 0x59616d61,
PR_SET_PTRACER_ANY = (cast (uint)-1),
PR_SET_CHILD_SUBREAPER = 36,
PR_GET_CHILD_SUBREAPER = 37,
PR_SET_NO_NEW_PRIVS = 38,
PR_GET_NO_NEW_PRIVS = 39,
PR_GET_TID_ADDRESS = 40,
PR_SET_THP_DISABLE = 41,
PR_GET_THP_DISABLE = 42,
}
struct prctl_mm_map
{
ulong start_code;
ulong end_code;
ulong start_data;
ulong end_data;
ulong start_brk;
ulong brk;
ulong start_stack;
ulong arg_start;
ulong arg_end;
ulong env_start;
ulong env_end;
ulong* auxv;
uint auxv_size;
uint exe_fd;
}
int prctl(int option, size_t arg2, size_t arg3, size_t arg4, size_t arg5);
//
// Example usage to set and get the task name.
//
// byte[16] oldname = cast(byte[]) "1234567890123456";
// oldname[oldname.length-1] = 0;
// prctl(PR_SET_NAME, cast(size_t) oldname.ptr, cast(size_t) null, cast(size_t) null, cast(size_t) null);
// byte[16] newname;
// prctl(PR_GET_NAME, cast(size_t) newname.ptr, cast(size_t) null, cast(size_t) null, cast(size_t) null);
// int i;
// foreach (b; newname)
// {
// assert(b == oldname[i]);
// i++;
// }
// writeln(cast(string) newname);