6 #include "xlat/prctl_options.h"
9 unalignctl_string(unsigned int ctl)
11 static char buf[sizeof(int)*2 + 2];
14 #ifdef PR_UNALIGN_NOPRINT
15 case PR_UNALIGN_NOPRINT:
18 #ifdef PR_UNALIGN_SIGBUS
19 case PR_UNALIGN_SIGBUS:
25 sprintf(buf, "%x", ctl);
30 sys_prctl(struct tcb *tcp)
35 printxval(prctl_options, tcp->u_arg[0], "PR_???");
36 switch (tcp->u_arg[0]) {
41 #ifdef PR_SET_PDEATHSIG
42 case PR_SET_PDEATHSIG:
43 tprintf(", %lu", tcp->u_arg[1]);
46 #ifdef PR_GET_PDEATHSIG
47 case PR_GET_PDEATHSIG:
50 #ifdef PR_SET_DUMPABLE
52 tprintf(", %lu", tcp->u_arg[1]);
55 #ifdef PR_GET_DUMPABLE
61 tprintf(", %s", unalignctl_string(tcp->u_arg[1]));
66 tprintf(", %#lx", tcp->u_arg[1]);
69 #ifdef PR_SET_KEEPCAPS
71 tprintf(", %lu", tcp->u_arg[1]);
74 #ifdef PR_GET_KEEPCAPS
79 for (i = 1; i < tcp->s_ent->nargs; i++)
80 tprintf(", %#lx", tcp->u_arg[i]);
84 switch (tcp->u_arg[0]) {
85 #ifdef PR_GET_PDEATHSIG
86 case PR_GET_PDEATHSIG:
87 if (umove(tcp, tcp->u_arg[1], &i) < 0)
88 tprintf(", %#lx", tcp->u_arg[1]);
93 #ifdef PR_GET_DUMPABLE
99 if (syserror(tcp) || umove(tcp, tcp->u_arg[1], &i) < 0)
101 tcp->auxstr = unalignctl_string(i);
104 #ifdef PR_GET_KEEPCAPS
105 case PR_GET_KEEPCAPS:
106 return RVAL_UDECIMAL;
114 #endif /* HAVE_PRCTL */
116 #if defined X86_64 || defined X32
117 # include <asm/prctl.h>
118 # include "xlat/archvals.h"
121 sys_arch_prctl(struct tcb *tcp)
124 printxval(archvals, tcp->u_arg[0], "ARCH_???");
125 if (tcp->u_arg[0] == ARCH_SET_GS
126 || tcp->u_arg[0] == ARCH_SET_FS
128 tprintf(", %#lx", tcp->u_arg[1]);
131 if (tcp->u_arg[0] == ARCH_GET_GS
132 || tcp->u_arg[0] == ARCH_GET_FS
135 if (!syserror(tcp) && umove(tcp, tcp->u_arg[1], &v) != -1)
136 tprintf(", [%#lx]", v);
138 tprintf(", %#lx", tcp->u_arg[1]);
143 #endif /* X86_64 || X32 */