1 /** 2 * D header file for GNU/Linux. 3 * 4 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 5 * Authors: Arun Chandrasekaran <aruncxy@gmail.com> 6 */ 7 module core.sys.linux.sys.prctl; 8 9 version (linux): 10 extern (C): 11 @system: 12 @nogc: 13 nothrow: 14 15 enum: uint 16 { 17 PR_SET_PDEATHSIG = 1, 18 PR_GET_PDEATHSIG = 2, 19 20 PR_GET_DUMPABLE = 3, 21 PR_SET_DUMPABLE = 4, 22 23 PR_GET_UNALIGN = 5, 24 PR_SET_UNALIGN = 6, 25 26 PR_UNALIGN_NOPRINT = 1, 27 PR_UNALIGN_SIGBUS = 2, 28 29 PR_GET_KEEPCAPS = 7, 30 PR_SET_KEEPCAPS = 8, 31 32 PR_GET_FPEMU = 9, 33 PR_SET_FPEMU = 10, 34 PR_FPEMU_NOPRINT = 1, 35 PR_FPEMU_SIGFPE = 2, 36 37 PR_GET_FPEXC = 11, 38 PR_SET_FPEXC = 12, 39 PR_FP_EXC_SW_ENABLE = 0x80, 40 PR_FP_EXC_DIV = 0x010000, 41 PR_FP_EXC_OVF = 0x020000, 42 PR_FP_EXC_UND = 0x040000, 43 PR_FP_EXC_RES = 0x080000, 44 PR_FP_EXC_INV = 0x100000, 45 PR_FP_EXC_DISABLED = 0, 46 PR_FP_EXC_NONRECOV = 1, 47 PR_FP_EXC_ASYNC = 2, 48 PR_FP_EXC_PRECISE = 3, 49 50 PR_GET_TIMING = 13, 51 PR_SET_TIMING = 14, 52 PR_TIMING_STATISTICAL = 0, 53 PR_TIMING_TIMESTAMP = 1, 54 55 PR_SET_NAME = 15, 56 PR_GET_NAME = 16, 57 58 PR_GET_ENDIAN = 19, 59 PR_SET_ENDIAN = 20, 60 PR_ENDIAN_BIG = 0, 61 PR_ENDIAN_LITTLE = 1, 62 PR_ENDIAN_PPC_LITTLE = 2, 63 64 PR_GET_SECCOMP = 21, 65 PR_SET_SECCOMP = 22, 66 67 PR_CAPBSET_READ = 23, 68 PR_CAPBSET_DROP = 24, 69 70 PR_GET_TSC = 25, 71 PR_SET_TSC = 26, 72 PR_TSC_ENABLE = 1, 73 PR_TSC_SIGSEGV = 2, 74 75 PR_GET_SECUREBITS = 27, 76 PR_SET_SECUREBITS = 28, 77 78 79 PR_SET_TIMERSLACK = 29, 80 PR_GET_TIMERSLACK = 30, 81 82 PR_TASK_PERF_EVENTS_DISABLE = 31, 83 PR_TASK_PERF_EVENTS_ENABLE = 32, 84 85 86 PR_MCE_KILL = 33, 87 PR_MCE_KILL_CLEAR = 0, 88 PR_MCE_KILL_SET = 1, 89 90 PR_MCE_KILL_LATE = 0, 91 PR_MCE_KILL_EARLY = 1, 92 PR_MCE_KILL_DEFAULT = 2, 93 94 PR_MCE_KILL_GET = 34, 95 96 PR_SET_MM = 35, 97 PR_SET_MM_START_CODE = 1, 98 PR_SET_MM_END_CODE = 2, 99 PR_SET_MM_START_DATA = 3, 100 PR_SET_MM_END_DATA = 4, 101 PR_SET_MM_START_STACK = 5, 102 PR_SET_MM_START_BRK = 6, 103 PR_SET_MM_BRK = 7, 104 PR_SET_MM_ARG_START = 8, 105 PR_SET_MM_ARG_END = 9, 106 PR_SET_MM_ENV_START = 10, 107 PR_SET_MM_ENV_END = 11, 108 PR_SET_MM_AUXV = 12, 109 PR_SET_MM_EXE_FILE = 13, 110 PR_SET_MM_MAP = 14, 111 PR_SET_MM_MAP_SIZE = 15, 112 113 PR_SET_PTRACER = 0x59616d61, 114 PR_SET_PTRACER_ANY = (cast (uint)-1), 115 116 PR_SET_CHILD_SUBREAPER = 36, 117 PR_GET_CHILD_SUBREAPER = 37, 118 119 PR_SET_NO_NEW_PRIVS = 38, 120 PR_GET_NO_NEW_PRIVS = 39, 121 122 PR_GET_TID_ADDRESS = 40, 123 124 PR_SET_THP_DISABLE = 41, 125 PR_GET_THP_DISABLE = 42, 126 } 127 128 struct prctl_mm_map 129 { 130 ulong start_code; 131 ulong end_code; 132 ulong start_data; 133 ulong end_data; 134 ulong start_brk; 135 ulong brk; 136 ulong start_stack; 137 ulong arg_start; 138 ulong arg_end; 139 ulong env_start; 140 ulong env_end; 141 ulong* auxv; 142 uint auxv_size; 143 uint exe_fd; 144 } 145 146 int prctl(int option, size_t arg2, size_t arg3, size_t arg4, size_t arg5); 147 148 // 149 // Example usage to set and get the task name. 150 // 151 // byte[16] oldname = cast(byte[]) "1234567890123456"; 152 // oldname[oldname.length-1] = 0; 153 // prctl(PR_SET_NAME, cast(size_t) oldname.ptr, cast(size_t) null, cast(size_t) null, cast(size_t) null); 154 // byte[16] newname; 155 // prctl(PR_GET_NAME, cast(size_t) newname.ptr, cast(size_t) null, cast(size_t) null, cast(size_t) null); 156 // int i; 157 // foreach (b; newname) 158 // { 159 // assert(b == oldname[i]); 160 // i++; 161 // } 162 // writeln(cast(string) newname); 163