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