5 #include "xlat/prctl_options.h"
8 unalignctl_string(unsigned int ctl)
10 static char buf[sizeof(int)*2 + 2];
13 #ifdef PR_UNALIGN_NOPRINT
14 case PR_UNALIGN_NOPRINT:
17 #ifdef PR_UNALIGN_SIGBUS
18 case PR_UNALIGN_SIGBUS:
24 sprintf(buf, "%x", ctl);
29 sys_prctl(struct tcb *tcp)
34 printxval(prctl_options, tcp->u_arg[0], "PR_???");
35 switch (tcp->u_arg[0]) {
40 #ifdef PR_SET_PDEATHSIG
41 case PR_SET_PDEATHSIG:
42 tprintf(", %lu", tcp->u_arg[1]);
45 #ifdef PR_GET_PDEATHSIG
46 case PR_GET_PDEATHSIG:
49 #ifdef PR_SET_DUMPABLE
51 tprintf(", %lu", tcp->u_arg[1]);
54 #ifdef PR_GET_DUMPABLE
60 tprintf(", %s", unalignctl_string(tcp->u_arg[1]));
65 tprintf(", %#lx", tcp->u_arg[1]);
68 #ifdef PR_SET_KEEPCAPS
70 tprintf(", %lu", tcp->u_arg[1]);
73 #ifdef PR_GET_KEEPCAPS
78 for (i = 1; i < tcp->s_ent->nargs; i++)
79 tprintf(", %#lx", tcp->u_arg[i]);
83 switch (tcp->u_arg[0]) {
84 #ifdef PR_GET_PDEATHSIG
85 case PR_GET_PDEATHSIG:
86 if (umove(tcp, tcp->u_arg[1], &i) < 0)
87 tprintf(", %#lx", tcp->u_arg[1]);
92 #ifdef PR_GET_DUMPABLE
98 if (syserror(tcp) || umove(tcp, tcp->u_arg[1], &i) < 0)
100 tcp->auxstr = unalignctl_string(i);
103 #ifdef PR_GET_KEEPCAPS
104 case PR_GET_KEEPCAPS:
105 return RVAL_UDECIMAL;
114 #if defined X86_64 || defined X32
115 # include <asm/prctl.h>
116 # include "xlat/archvals.h"
119 sys_arch_prctl(struct tcb *tcp)
122 printxval(archvals, tcp->u_arg[0], "ARCH_???");
123 if (tcp->u_arg[0] == ARCH_SET_GS
124 || tcp->u_arg[0] == ARCH_SET_FS
126 tprintf(", %#lx", tcp->u_arg[1]);
129 if (tcp->u_arg[0] == ARCH_GET_GS
130 || tcp->u_arg[0] == ARCH_GET_FS
133 if (!syserror(tcp) && umove(tcp, tcp->u_arg[1], &v) != -1)
134 tprintf(", [%#lx]", v);
136 tprintf(", %#lx", tcp->u_arg[1]);
141 #endif /* X86_64 || X32 */