1 #include "qemu/osdep.h"
7 #include <sys/select.h>
10 #include <netinet/in.h>
11 #include <netinet/tcp.h>
12 #include <netinet/udp.h>
13 #include <linux/if_packet.h>
14 #include <linux/in6.h>
15 #include <linux/netlink.h>
18 #include "user-internals.h"
20 #include "signal-common.h"
26 void (*call)(CPUArchState *, const struct syscallname *,
27 abi_long, abi_long, abi_long,
28 abi_long, abi_long, abi_long);
29 void (*result)(CPUArchState *, const struct syscallname *, abi_long,
30 abi_long, abi_long, abi_long,
31 abi_long, abi_long, abi_long);
35 * It is possible that target doesn't have syscall that uses
36 * following flags but we don't want the compiler to warn
37 * us about them being unused. Same applies to utility print
38 * functions. It is ok to keep them while not used.
40 #define UNUSED __attribute__ ((unused))
43 * Structure used to translate flag values into strings. This is
44 * similar that is in the actual strace tool.
47 abi_long f_value; /* flag */
48 const char *f_string; /* stringified flag */
51 /* common flags for all architectures */
52 #define FLAG_GENERIC(name) { name, #name }
53 /* target specific flags (syscall_defs.h has TARGET_<flag>) */
54 #define FLAG_TARGET(name) { TARGET_ ## name, #name }
55 /* end of flags array */
56 #define FLAG_END { 0, NULL }
58 /* Structure used to translate enumerated values into strings */
60 abi_long e_value; /* enum value */
61 const char *e_string; /* stringified enum */
64 /* common enums for all architectures */
65 #define ENUM_GENERIC(name) { name, #name }
66 /* target specific enums */
67 #define ENUM_TARGET(name) { TARGET_ ## name, #name }
68 /* end of enums array */
69 #define ENUM_END { 0, NULL }
71 UNUSED static const char *get_comma(int);
72 UNUSED static void print_pointer(abi_long, int);
73 UNUSED static void print_flags(const struct flags *, abi_long, int);
74 UNUSED static void print_enums(const struct enums *, abi_long, int);
75 UNUSED static void print_at_dirfd(abi_long, int);
76 UNUSED static void print_file_mode(abi_long, int);
77 UNUSED static void print_open_flags(abi_long, int);
78 UNUSED static void print_syscall_prologue(const struct syscallname *);
79 UNUSED static void print_syscall_epilogue(const struct syscallname *);
80 UNUSED static void print_string(abi_long, int);
81 UNUSED static void print_buf(abi_long addr, abi_long len, int last);
82 UNUSED static void print_raw_param(const char *, abi_long, int);
83 UNUSED static void print_timeval(abi_ulong, int);
84 UNUSED static void print_timespec(abi_ulong, int);
85 UNUSED static void print_timespec64(abi_ulong, int);
86 UNUSED static void print_timezone(abi_ulong, int);
87 UNUSED static void print_itimerval(abi_ulong, int);
88 UNUSED static void print_number(abi_long, int);
89 UNUSED static void print_signal(abi_ulong, int);
90 UNUSED static void print_sockaddr(abi_ulong, abi_long, int);
91 UNUSED static void print_socket_domain(int domain);
92 UNUSED static void print_socket_type(int type);
93 UNUSED static void print_socket_protocol(int domain, int type, int protocol);
99 print_ipc_cmd(int cmd)
101 #define output_cmd(val) \
109 /* General IPC commands */
110 output_cmd( IPC_RMID );
111 output_cmd( IPC_SET );
112 output_cmd( IPC_STAT );
113 output_cmd( IPC_INFO );
114 /* msgctl() commands */
115 output_cmd( MSG_STAT );
116 output_cmd( MSG_INFO );
117 /* shmctl() commands */
118 output_cmd( SHM_LOCK );
119 output_cmd( SHM_UNLOCK );
120 output_cmd( SHM_STAT );
121 output_cmd( SHM_INFO );
122 /* semctl() commands */
123 output_cmd( GETPID );
124 output_cmd( GETVAL );
125 output_cmd( GETALL );
126 output_cmd( GETNCNT );
127 output_cmd( GETZCNT );
128 output_cmd( SETVAL );
129 output_cmd( SETALL );
130 output_cmd( SEM_STAT );
131 output_cmd( SEM_INFO );
132 output_cmd( IPC_RMID );
133 output_cmd( IPC_RMID );
134 output_cmd( IPC_RMID );
135 output_cmd( IPC_RMID );
136 output_cmd( IPC_RMID );
137 output_cmd( IPC_RMID );
138 output_cmd( IPC_RMID );
139 output_cmd( IPC_RMID );
140 output_cmd( IPC_RMID );
142 /* Some value we don't recognize */
146 static const char * const target_signal_name[] = {
147 #define MAKE_SIG_ENTRY(sig) [TARGET_##sig] = #sig,
149 #undef MAKE_SIG_ENTRY
153 print_signal(abi_ulong arg, int last)
155 const char *signal_name = NULL;
157 if (arg < ARRAY_SIZE(target_signal_name)) {
158 signal_name = target_signal_name[arg];
161 if (signal_name == NULL) {
162 print_raw_param("%ld", arg, last);
165 qemu_log("%s%s", signal_name, get_comma(last));
168 static void print_si_code(int arg)
170 const char *codename = NULL;
174 codename = "SI_USER";
177 codename = "SI_KERNEL";
180 codename = "SI_QUEUE";
183 codename = "SI_TIMER";
186 codename = "SI_MESGQ";
189 codename = "SI_ASYNCIO";
192 codename = "SI_SIGIO";
195 codename = "SI_TKILL";
201 qemu_log("%s", codename);
204 static void get_target_siginfo(target_siginfo_t *tinfo,
205 const target_siginfo_t *info)
214 __get_user(sig, &info->si_signo);
215 __get_user(si_errno, &tinfo->si_errno);
216 __get_user(si_code, &info->si_code);
218 tinfo->si_signo = sig;
219 tinfo->si_errno = si_errno;
220 tinfo->si_code = si_code;
222 /* Ensure we don't leak random junk to the guest later */
223 memset(tinfo->_sifields._pad, 0, sizeof(tinfo->_sifields._pad));
225 /* This is awkward, because we have to use a combination of
226 * the si_code and si_signo to figure out which of the union's
227 * members are valid. (Within the host kernel it is always possible
228 * to tell, but the kernel carefully avoids giving userspace the
229 * high 16 bits of si_code, so we don't have the information to
230 * do this the easy way...) We therefore make our best guess,
231 * bearing in mind that a guest can spoof most of the si_codes
232 * via rt_sigqueueinfo() if it likes.
234 * Once we have made our guess, we record it in the top 16 bits of
235 * the si_code, so that print_siginfo() later can use it.
236 * print_siginfo() will strip these top bits out before printing
244 /* Sent via kill(), tkill() or tgkill(), or direct from the kernel.
245 * These are the only unspoofable si_code values.
247 __get_user(tinfo->_sifields._kill._pid, &info->_sifields._kill._pid);
248 __get_user(tinfo->_sifields._kill._uid, &info->_sifields._kill._uid);
249 si_type = QEMU_SI_KILL;
252 /* Everything else is spoofable. Make best guess based on signal */
255 __get_user(tinfo->_sifields._sigchld._pid,
256 &info->_sifields._sigchld._pid);
257 __get_user(tinfo->_sifields._sigchld._uid,
258 &info->_sifields._sigchld._uid);
259 __get_user(tinfo->_sifields._sigchld._status,
260 &info->_sifields._sigchld._status);
261 __get_user(tinfo->_sifields._sigchld._utime,
262 &info->_sifields._sigchld._utime);
263 __get_user(tinfo->_sifields._sigchld._stime,
264 &info->_sifields._sigchld._stime);
265 si_type = QEMU_SI_CHLD;
268 __get_user(tinfo->_sifields._sigpoll._band,
269 &info->_sifields._sigpoll._band);
270 __get_user(tinfo->_sifields._sigpoll._fd,
271 &info->_sifields._sigpoll._fd);
272 si_type = QEMU_SI_POLL;
275 /* Assume a sigqueue()/mq_notify()/rt_sigqueueinfo() source. */
276 __get_user(tinfo->_sifields._rt._pid, &info->_sifields._rt._pid);
277 __get_user(tinfo->_sifields._rt._uid, &info->_sifields._rt._uid);
278 /* XXX: potential problem if 64 bit */
279 __get_user(sival_ptr, &info->_sifields._rt._sigval.sival_ptr);
280 tinfo->_sifields._rt._sigval.sival_ptr = sival_ptr;
282 si_type = QEMU_SI_RT;
288 tinfo->si_code = deposit32(si_code, 16, 16, si_type);
291 static void print_siginfo(const target_siginfo_t *tinfo)
293 /* Print a target_siginfo_t in the format desired for printing
294 * signals being taken. We assume the target_siginfo_t is in the
295 * internal form where the top 16 bits of si_code indicate which
296 * part of the union is valid, rather than in the guest-visible
297 * form where the bottom 16 bits are sign-extended into the top 16.
299 int si_type = extract32(tinfo->si_code, 16, 16);
300 int si_code = sextract32(tinfo->si_code, 0, 16);
302 qemu_log("{si_signo=");
303 print_signal(tinfo->si_signo, 1);
304 qemu_log(", si_code=");
305 print_si_code(si_code);
309 qemu_log(", si_pid=%u, si_uid=%u",
310 (unsigned int)tinfo->_sifields._kill._pid,
311 (unsigned int)tinfo->_sifields._kill._uid);
314 qemu_log(", si_timer1=%u, si_timer2=%u",
315 tinfo->_sifields._timer._timer1,
316 tinfo->_sifields._timer._timer2);
319 qemu_log(", si_band=%d, si_fd=%d",
320 tinfo->_sifields._sigpoll._band,
321 tinfo->_sifields._sigpoll._fd);
324 qemu_log(", si_addr=");
325 print_pointer(tinfo->_sifields._sigfault._addr, 1);
328 qemu_log(", si_pid=%u, si_uid=%u, si_status=%d"
329 ", si_utime=" TARGET_ABI_FMT_ld
330 ", si_stime=" TARGET_ABI_FMT_ld,
331 (unsigned int)(tinfo->_sifields._sigchld._pid),
332 (unsigned int)(tinfo->_sifields._sigchld._uid),
333 tinfo->_sifields._sigchld._status,
334 tinfo->_sifields._sigchld._utime,
335 tinfo->_sifields._sigchld._stime);
338 qemu_log(", si_pid=%u, si_uid=%u, si_sigval=" TARGET_ABI_FMT_ld,
339 (unsigned int)tinfo->_sifields._rt._pid,
340 (unsigned int)tinfo->_sifields._rt._uid,
341 tinfo->_sifields._rt._sigval.sival_ptr);
344 g_assert_not_reached();
350 print_sockaddr(abi_ulong addr, abi_long addrlen, int last)
352 struct target_sockaddr *sa;
356 sa = lock_user(VERIFY_READ, addr, addrlen, 1);
358 sa_family = tswap16(sa->sa_family);
361 struct target_sockaddr_un *un = (struct target_sockaddr_un *)sa;
363 qemu_log("{sun_family=AF_UNIX,sun_path=\"");
364 for (i = 0; i < addrlen -
365 offsetof(struct target_sockaddr_un, sun_path) &&
366 un->sun_path[i]; i++) {
367 qemu_log("%c", un->sun_path[i]);
373 struct target_sockaddr_in *in = (struct target_sockaddr_in *)sa;
374 uint8_t *c = (uint8_t *)&in->sin_addr.s_addr;
375 qemu_log("{sin_family=AF_INET,sin_port=htons(%d),",
376 ntohs(in->sin_port));
377 qemu_log("sin_addr=inet_addr(\"%d.%d.%d.%d\")",
378 c[0], c[1], c[2], c[3]);
383 struct target_sockaddr_ll *ll = (struct target_sockaddr_ll *)sa;
384 uint8_t *c = (uint8_t *)&ll->sll_addr;
385 qemu_log("{sll_family=AF_PACKET,"
386 "sll_protocol=htons(0x%04x),if%d,pkttype=",
387 ntohs(ll->sll_protocol), ll->sll_ifindex);
388 switch (ll->sll_pkttype) {
390 qemu_log("PACKET_HOST");
392 case PACKET_BROADCAST:
393 qemu_log("PACKET_BROADCAST");
395 case PACKET_MULTICAST:
396 qemu_log("PACKET_MULTICAST");
398 case PACKET_OTHERHOST:
399 qemu_log("PACKET_OTHERHOST");
401 case PACKET_OUTGOING:
402 qemu_log("PACKET_OUTGOING");
405 qemu_log("%d", ll->sll_pkttype);
408 qemu_log(",sll_addr=%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
409 c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7]);
414 struct target_sockaddr_nl *nl = (struct target_sockaddr_nl *)sa;
415 qemu_log("{nl_family=AF_NETLINK,nl_pid=%u,nl_groups=%u}",
416 tswap32(nl->nl_pid), tswap32(nl->nl_groups));
420 qemu_log("{sa_family=%d, sa_data={", sa->sa_family);
421 for (i = 0; i < 13; i++) {
422 qemu_log("%02x, ", sa->sa_data[i]);
424 qemu_log("%02x}", sa->sa_data[i]);
428 unlock_user(sa, addr, 0);
430 print_raw_param("0x"TARGET_ABI_FMT_lx, addr, 0);
432 qemu_log(", "TARGET_ABI_FMT_ld"%s", addrlen, get_comma(last));
436 print_socket_domain(int domain)
446 qemu_log("PF_NETLINK");
449 qemu_log("PF_PACKET");
452 qemu_log("%d", domain);
458 print_socket_type(int type)
460 switch (type & TARGET_SOCK_TYPE_MASK) {
461 case TARGET_SOCK_DGRAM:
462 qemu_log("SOCK_DGRAM");
464 case TARGET_SOCK_STREAM:
465 qemu_log("SOCK_STREAM");
467 case TARGET_SOCK_RAW:
468 qemu_log("SOCK_RAW");
470 case TARGET_SOCK_RDM:
471 qemu_log("SOCK_RDM");
473 case TARGET_SOCK_SEQPACKET:
474 qemu_log("SOCK_SEQPACKET");
476 case TARGET_SOCK_PACKET:
477 qemu_log("SOCK_PACKET");
480 if (type & TARGET_SOCK_CLOEXEC) {
481 qemu_log("|SOCK_CLOEXEC");
483 if (type & TARGET_SOCK_NONBLOCK) {
484 qemu_log("|SOCK_NONBLOCK");
489 print_socket_protocol(int domain, int type, int protocol)
491 if (domain == AF_PACKET ||
492 (domain == AF_INET && type == TARGET_SOCK_PACKET)) {
495 qemu_log("ETH_P_ALL");
498 qemu_log("%d", protocol);
503 if (domain == PF_NETLINK) {
506 qemu_log("NETLINK_ROUTE");
509 qemu_log("NETLINK_AUDIT");
511 case NETLINK_NETFILTER:
512 qemu_log("NETLINK_NETFILTER");
514 case NETLINK_KOBJECT_UEVENT:
515 qemu_log("NETLINK_KOBJECT_UEVENT");
518 qemu_log("NETLINK_RDMA");
521 qemu_log("NETLINK_CRYPTO");
524 qemu_log("%d", protocol);
532 qemu_log("IPPROTO_IP");
535 qemu_log("IPPROTO_TCP");
538 qemu_log("IPPROTO_UDP");
541 qemu_log("IPPROTO_RAW");
544 qemu_log("%d", protocol);
550 #ifdef TARGET_NR__newselect
552 print_fdset(int n, abi_ulong target_fds_addr)
558 if( target_fds_addr ) {
559 abi_long *target_fds;
561 target_fds = lock_user(VERIFY_READ,
563 sizeof(*target_fds)*(n / TARGET_ABI_BITS + 1),
569 for (i=n; i>=0; i--) {
570 if ((tswapal(target_fds[i / TARGET_ABI_BITS]) >>
571 (i & (TARGET_ABI_BITS - 1))) & 1) {
572 qemu_log("%s%d", get_comma(first), i);
576 unlock_user(target_fds, target_fds_addr, 0);
583 * Sysycall specific output functions
587 #ifdef TARGET_NR__newselect
589 print_newselect(CPUArchState *cpu_env, const struct syscallname *name,
590 abi_long arg1, abi_long arg2, abi_long arg3,
591 abi_long arg4, abi_long arg5, abi_long arg6)
593 print_syscall_prologue(name);
594 print_fdset(arg1, arg2);
596 print_fdset(arg1, arg3);
598 print_fdset(arg1, arg4);
600 print_timeval(arg5, 1);
601 print_syscall_epilogue(name);
605 #ifdef TARGET_NR_semctl
607 print_semctl(CPUArchState *cpu_env, const struct syscallname *name,
608 abi_long arg1, abi_long arg2, abi_long arg3,
609 abi_long arg4, abi_long arg5, abi_long arg6)
611 qemu_log("%s(" TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ",",
612 name->name, arg1, arg2);
614 qemu_log(",0x" TARGET_ABI_FMT_lx ")", arg4);
619 print_execve(CPUArchState *cpu_env, const struct syscallname *name,
620 abi_long arg1, abi_long arg2, abi_long arg3,
621 abi_long arg4, abi_long arg5, abi_long arg6)
623 abi_ulong arg_ptr_addr;
626 if (!(s = lock_user_string(arg1)))
628 qemu_log("%s(\"%s\",{", name->name, s);
629 unlock_user(s, arg1, 0);
631 for (arg_ptr_addr = arg2; ; arg_ptr_addr += sizeof(abi_ulong)) {
632 abi_ulong *arg_ptr, arg_addr;
634 arg_ptr = lock_user(VERIFY_READ, arg_ptr_addr, sizeof(abi_ulong), 1);
637 arg_addr = tswapal(*arg_ptr);
638 unlock_user(arg_ptr, arg_ptr_addr, 0);
641 if ((s = lock_user_string(arg_addr))) {
642 qemu_log("\"%s\",", s);
643 unlock_user(s, arg_addr, 0);
652 print_ipc(CPUArchState *cpu_env, const struct syscallname *name,
653 abi_long arg1, abi_long arg2, abi_long arg3,
654 abi_long arg4, abi_long arg5, abi_long arg6)
658 qemu_log("semctl(" TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ",",
661 qemu_log(",0x" TARGET_ABI_FMT_lx ")", arg4);
665 TARGET_ABI_FMT_ld ","
666 TARGET_ABI_FMT_ld ","
667 TARGET_ABI_FMT_ld ","
670 name->name, arg1, arg2, arg3, arg4);
676 * Variants for the return value output function
680 print_syscall_err(abi_long ret)
686 errstr = target_strerror(-ret);
688 qemu_log("-1 errno=%d (%s)", (int)-ret, errstr);
696 print_syscall_ret_addr(CPUArchState *cpu_env, const struct syscallname *name,
697 abi_long ret, abi_long arg0, abi_long arg1,
698 abi_long arg2, abi_long arg3, abi_long arg4,
701 if (!print_syscall_err(ret)) {
702 qemu_log("0x" TARGET_ABI_FMT_lx, ret);
707 #if 0 /* currently unused */
709 print_syscall_ret_raw(struct syscallname *name, abi_long ret)
711 qemu_log(" = 0x" TARGET_ABI_FMT_lx "\n", ret);
715 #ifdef TARGET_NR__newselect
717 print_syscall_ret_newselect(CPUArchState *cpu_env, const struct syscallname *name,
718 abi_long ret, abi_long arg0, abi_long arg1,
719 abi_long arg2, abi_long arg3, abi_long arg4,
722 if (!print_syscall_err(ret)) {
723 qemu_log(" = 0x" TARGET_ABI_FMT_lx " (", ret);
724 print_fdset(arg0, arg1);
726 print_fdset(arg0, arg2);
728 print_fdset(arg0, arg3);
730 print_timeval(arg4, 1);
738 /* special meanings of adjtimex()' non-negative return values */
739 #define TARGET_TIME_OK 0 /* clock synchronized, no leap second */
740 #define TARGET_TIME_INS 1 /* insert leap second */
741 #define TARGET_TIME_DEL 2 /* delete leap second */
742 #define TARGET_TIME_OOP 3 /* leap second in progress */
743 #define TARGET_TIME_WAIT 4 /* leap second has occurred */
744 #define TARGET_TIME_ERROR 5 /* clock not synchronized */
745 #ifdef TARGET_NR_adjtimex
747 print_syscall_ret_adjtimex(CPUArchState *cpu_env, const struct syscallname *name,
748 abi_long ret, abi_long arg0, abi_long arg1,
749 abi_long arg2, abi_long arg3, abi_long arg4,
752 if (!print_syscall_err(ret)) {
753 qemu_log(TARGET_ABI_FMT_ld, ret);
756 qemu_log(" TIME_OK (clock synchronized, no leap second)");
758 case TARGET_TIME_INS:
759 qemu_log(" TIME_INS (insert leap second)");
761 case TARGET_TIME_DEL:
762 qemu_log(" TIME_DEL (delete leap second)");
764 case TARGET_TIME_OOP:
765 qemu_log(" TIME_OOP (leap second in progress)");
767 case TARGET_TIME_WAIT:
768 qemu_log(" TIME_WAIT (leap second has occurred)");
770 case TARGET_TIME_ERROR:
771 qemu_log(" TIME_ERROR (clock not synchronized)");
780 #if defined(TARGET_NR_clock_gettime) || defined(TARGET_NR_clock_getres)
782 print_syscall_ret_clock_gettime(CPUArchState *cpu_env, const struct syscallname *name,
783 abi_long ret, abi_long arg0, abi_long arg1,
784 abi_long arg2, abi_long arg3, abi_long arg4,
787 if (!print_syscall_err(ret)) {
788 qemu_log(TARGET_ABI_FMT_ld, ret);
790 print_timespec(arg1, 1);
796 #define print_syscall_ret_clock_getres print_syscall_ret_clock_gettime
799 #if defined(TARGET_NR_clock_gettime64)
801 print_syscall_ret_clock_gettime64(CPUArchState *cpu_env, const struct syscallname *name,
802 abi_long ret, abi_long arg0, abi_long arg1,
803 abi_long arg2, abi_long arg3, abi_long arg4,
806 if (!print_syscall_err(ret)) {
807 qemu_log(TARGET_ABI_FMT_ld, ret);
809 print_timespec64(arg1, 1);
817 #ifdef TARGET_NR_gettimeofday
819 print_syscall_ret_gettimeofday(CPUArchState *cpu_env, const struct syscallname *name,
820 abi_long ret, abi_long arg0, abi_long arg1,
821 abi_long arg2, abi_long arg3, abi_long arg4,
824 if (!print_syscall_err(ret)) {
825 qemu_log(TARGET_ABI_FMT_ld, ret);
827 print_timeval(arg0, 0);
828 print_timezone(arg1, 1);
836 #ifdef TARGET_NR_getitimer
838 print_syscall_ret_getitimer(CPUArchState *cpu_env, const struct syscallname *name,
839 abi_long ret, abi_long arg0, abi_long arg1,
840 abi_long arg2, abi_long arg3, abi_long arg4,
843 if (!print_syscall_err(ret)) {
844 qemu_log(TARGET_ABI_FMT_ld, ret);
846 print_itimerval(arg1, 1);
855 #ifdef TARGET_NR_getitimer
857 print_syscall_ret_setitimer(CPUArchState *cpu_env, const struct syscallname *name,
858 abi_long ret, abi_long arg0, abi_long arg1,
859 abi_long arg2, abi_long arg3, abi_long arg4,
862 if (!print_syscall_err(ret)) {
863 qemu_log(TARGET_ABI_FMT_ld, ret);
864 qemu_log(" (old_value = ");
865 print_itimerval(arg2, 1);
873 #if defined(TARGET_NR_listxattr) || defined(TARGET_NR_llistxattr) \
874 || defined(TARGGET_NR_flistxattr)
876 print_syscall_ret_listxattr(CPUArchState *cpu_env, const struct syscallname *name,
877 abi_long ret, abi_long arg0, abi_long arg1,
878 abi_long arg2, abi_long arg3, abi_long arg4,
881 if (!print_syscall_err(ret)) {
882 qemu_log(TARGET_ABI_FMT_ld, ret);
883 qemu_log(" (list = ");
885 abi_long attr = arg1;
890 print_string(attr, 1);
891 ret -= target_strlen(attr) + 1;
892 attr += target_strlen(attr) + 1;
902 #define print_syscall_ret_llistxattr print_syscall_ret_listxattr
903 #define print_syscall_ret_flistxattr print_syscall_ret_listxattr
906 #ifdef TARGET_NR_ioctl
908 print_syscall_ret_ioctl(CPUArchState *cpu_env, const struct syscallname *name,
909 abi_long ret, abi_long arg0, abi_long arg1,
910 abi_long arg2, abi_long arg3, abi_long arg4,
913 if (!print_syscall_err(ret)) {
914 qemu_log(TARGET_ABI_FMT_ld, ret);
916 const IOCTLEntry *ie;
917 const argtype *arg_type;
921 for (ie = ioctl_entries; ie->target_cmd != 0; ie++) {
922 if (ie->target_cmd == arg1) {
927 if (ie->target_cmd == arg1 &&
928 (ie->access == IOC_R || ie->access == IOC_RW)) {
929 arg_type = ie->arg_type;
932 target_size = thunk_type_size(arg_type, 0);
933 argptr = lock_user(VERIFY_READ, arg2, target_size, 1);
935 thunk_print(argptr, arg_type);
936 unlock_user(argptr, arg2, target_size);
938 print_pointer(arg2, 1);
947 UNUSED static struct flags access_flags[] = {
955 UNUSED static struct flags at_file_flags[] = {
957 FLAG_GENERIC(AT_EACCESS),
959 #ifdef AT_SYMLINK_NOFOLLOW
960 FLAG_GENERIC(AT_SYMLINK_NOFOLLOW),
965 UNUSED static struct flags unlinkat_flags[] = {
967 FLAG_GENERIC(AT_REMOVEDIR),
972 UNUSED static struct flags mode_flags[] = {
973 FLAG_GENERIC(S_IFSOCK),
974 FLAG_GENERIC(S_IFLNK),
975 FLAG_GENERIC(S_IFREG),
976 FLAG_GENERIC(S_IFBLK),
977 FLAG_GENERIC(S_IFDIR),
978 FLAG_GENERIC(S_IFCHR),
979 FLAG_GENERIC(S_IFIFO),
983 UNUSED static struct flags open_access_flags[] = {
984 FLAG_TARGET(O_RDONLY),
985 FLAG_TARGET(O_WRONLY),
990 UNUSED static struct flags open_flags[] = {
991 FLAG_TARGET(O_APPEND),
992 FLAG_TARGET(O_CREAT),
993 FLAG_TARGET(O_DIRECTORY),
995 FLAG_TARGET(O_LARGEFILE),
996 FLAG_TARGET(O_NOCTTY),
997 FLAG_TARGET(O_NOFOLLOW),
998 FLAG_TARGET(O_NONBLOCK), /* also O_NDELAY */
999 FLAG_TARGET(O_DSYNC),
1000 FLAG_TARGET(__O_SYNC),
1001 FLAG_TARGET(O_TRUNC),
1003 FLAG_TARGET(O_DIRECT),
1006 FLAG_TARGET(O_NOATIME),
1009 FLAG_TARGET(O_CLOEXEC),
1012 FLAG_TARGET(O_PATH),
1015 FLAG_TARGET(O_TMPFILE),
1016 FLAG_TARGET(__O_TMPFILE),
1021 UNUSED static struct flags mount_flags[] = {
1023 FLAG_GENERIC(MS_BIND),
1026 FLAG_GENERIC(MS_DIRSYNC),
1028 FLAG_GENERIC(MS_MANDLOCK),
1030 FLAG_GENERIC(MS_MOVE),
1032 FLAG_GENERIC(MS_NOATIME),
1033 FLAG_GENERIC(MS_NODEV),
1034 FLAG_GENERIC(MS_NODIRATIME),
1035 FLAG_GENERIC(MS_NOEXEC),
1036 FLAG_GENERIC(MS_NOSUID),
1037 FLAG_GENERIC(MS_RDONLY),
1039 FLAG_GENERIC(MS_RELATIME),
1041 FLAG_GENERIC(MS_REMOUNT),
1042 FLAG_GENERIC(MS_SYNCHRONOUS),
1046 UNUSED static struct flags umount2_flags[] = {
1048 FLAG_GENERIC(MNT_FORCE),
1051 FLAG_GENERIC(MNT_DETACH),
1054 FLAG_GENERIC(MNT_EXPIRE),
1059 UNUSED static struct flags mmap_prot_flags[] = {
1060 FLAG_GENERIC(PROT_NONE),
1061 FLAG_GENERIC(PROT_EXEC),
1062 FLAG_GENERIC(PROT_READ),
1063 FLAG_GENERIC(PROT_WRITE),
1064 FLAG_TARGET(PROT_SEM),
1065 FLAG_GENERIC(PROT_GROWSDOWN),
1066 FLAG_GENERIC(PROT_GROWSUP),
1070 UNUSED static struct flags mmap_flags[] = {
1071 FLAG_TARGET(MAP_SHARED),
1072 FLAG_TARGET(MAP_PRIVATE),
1073 FLAG_TARGET(MAP_ANONYMOUS),
1074 FLAG_TARGET(MAP_DENYWRITE),
1075 FLAG_TARGET(MAP_FIXED),
1076 FLAG_TARGET(MAP_GROWSDOWN),
1077 FLAG_TARGET(MAP_EXECUTABLE),
1079 FLAG_TARGET(MAP_LOCKED),
1082 FLAG_TARGET(MAP_NONBLOCK),
1084 FLAG_TARGET(MAP_NORESERVE),
1086 FLAG_TARGET(MAP_POPULATE),
1088 #ifdef TARGET_MAP_UNINITIALIZED
1089 FLAG_TARGET(MAP_UNINITIALIZED),
1094 UNUSED static struct flags clone_flags[] = {
1095 FLAG_GENERIC(CLONE_VM),
1096 FLAG_GENERIC(CLONE_FS),
1097 FLAG_GENERIC(CLONE_FILES),
1098 FLAG_GENERIC(CLONE_SIGHAND),
1099 FLAG_GENERIC(CLONE_PTRACE),
1100 FLAG_GENERIC(CLONE_VFORK),
1101 FLAG_GENERIC(CLONE_PARENT),
1102 FLAG_GENERIC(CLONE_THREAD),
1103 FLAG_GENERIC(CLONE_NEWNS),
1104 FLAG_GENERIC(CLONE_SYSVSEM),
1105 FLAG_GENERIC(CLONE_SETTLS),
1106 FLAG_GENERIC(CLONE_PARENT_SETTID),
1107 FLAG_GENERIC(CLONE_CHILD_CLEARTID),
1108 FLAG_GENERIC(CLONE_DETACHED),
1109 FLAG_GENERIC(CLONE_UNTRACED),
1110 FLAG_GENERIC(CLONE_CHILD_SETTID),
1111 #if defined(CLONE_NEWUTS)
1112 FLAG_GENERIC(CLONE_NEWUTS),
1114 #if defined(CLONE_NEWIPC)
1115 FLAG_GENERIC(CLONE_NEWIPC),
1117 #if defined(CLONE_NEWUSER)
1118 FLAG_GENERIC(CLONE_NEWUSER),
1120 #if defined(CLONE_NEWPID)
1121 FLAG_GENERIC(CLONE_NEWPID),
1123 #if defined(CLONE_NEWNET)
1124 FLAG_GENERIC(CLONE_NEWNET),
1126 #if defined(CLONE_NEWCGROUP)
1127 FLAG_GENERIC(CLONE_NEWCGROUP),
1129 #if defined(CLONE_NEWTIME)
1130 FLAG_GENERIC(CLONE_NEWTIME),
1132 #if defined(CLONE_IO)
1133 FLAG_GENERIC(CLONE_IO),
1138 UNUSED static struct flags msg_flags[] = {
1140 FLAG_GENERIC(MSG_CONFIRM),
1141 FLAG_GENERIC(MSG_DONTROUTE),
1142 FLAG_GENERIC(MSG_DONTWAIT),
1143 FLAG_GENERIC(MSG_EOR),
1144 FLAG_GENERIC(MSG_MORE),
1145 FLAG_GENERIC(MSG_NOSIGNAL),
1146 FLAG_GENERIC(MSG_OOB),
1148 FLAG_GENERIC(MSG_CMSG_CLOEXEC),
1149 FLAG_GENERIC(MSG_ERRQUEUE),
1150 FLAG_GENERIC(MSG_PEEK),
1151 FLAG_GENERIC(MSG_TRUNC),
1152 FLAG_GENERIC(MSG_WAITALL),
1154 FLAG_GENERIC(MSG_CTRUNC),
1158 UNUSED static struct flags statx_flags[] = {
1159 #ifdef AT_EMPTY_PATH
1160 FLAG_GENERIC(AT_EMPTY_PATH),
1162 #ifdef AT_NO_AUTOMOUNT
1163 FLAG_GENERIC(AT_NO_AUTOMOUNT),
1165 #ifdef AT_SYMLINK_NOFOLLOW
1166 FLAG_GENERIC(AT_SYMLINK_NOFOLLOW),
1168 #ifdef AT_STATX_SYNC_AS_STAT
1169 FLAG_GENERIC(AT_STATX_SYNC_AS_STAT),
1171 #ifdef AT_STATX_FORCE_SYNC
1172 FLAG_GENERIC(AT_STATX_FORCE_SYNC),
1174 #ifdef AT_STATX_DONT_SYNC
1175 FLAG_GENERIC(AT_STATX_DONT_SYNC),
1180 UNUSED static struct flags statx_mask[] = {
1181 /* This must come first, because it includes everything. */
1183 FLAG_GENERIC(STATX_ALL),
1185 /* This must come second; it includes everything except STATX_BTIME. */
1186 #ifdef STATX_BASIC_STATS
1187 FLAG_GENERIC(STATX_BASIC_STATS),
1190 FLAG_GENERIC(STATX_TYPE),
1193 FLAG_GENERIC(STATX_MODE),
1196 FLAG_GENERIC(STATX_NLINK),
1199 FLAG_GENERIC(STATX_UID),
1202 FLAG_GENERIC(STATX_GID),
1205 FLAG_GENERIC(STATX_ATIME),
1208 FLAG_GENERIC(STATX_MTIME),
1211 FLAG_GENERIC(STATX_CTIME),
1214 FLAG_GENERIC(STATX_INO),
1217 FLAG_GENERIC(STATX_SIZE),
1220 FLAG_GENERIC(STATX_BLOCKS),
1223 FLAG_GENERIC(STATX_BTIME),
1228 UNUSED static struct flags falloc_flags[] = {
1229 FLAG_GENERIC(FALLOC_FL_KEEP_SIZE),
1230 FLAG_GENERIC(FALLOC_FL_PUNCH_HOLE),
1231 #ifdef FALLOC_FL_NO_HIDE_STALE
1232 FLAG_GENERIC(FALLOC_FL_NO_HIDE_STALE),
1234 #ifdef FALLOC_FL_COLLAPSE_RANGE
1235 FLAG_GENERIC(FALLOC_FL_COLLAPSE_RANGE),
1237 #ifdef FALLOC_FL_ZERO_RANGE
1238 FLAG_GENERIC(FALLOC_FL_ZERO_RANGE),
1240 #ifdef FALLOC_FL_INSERT_RANGE
1241 FLAG_GENERIC(FALLOC_FL_INSERT_RANGE),
1243 #ifdef FALLOC_FL_UNSHARE_RANGE
1244 FLAG_GENERIC(FALLOC_FL_UNSHARE_RANGE),
1248 UNUSED static struct flags termios_iflags[] = {
1249 FLAG_TARGET(IGNBRK),
1250 FLAG_TARGET(BRKINT),
1251 FLAG_TARGET(IGNPAR),
1252 FLAG_TARGET(PARMRK),
1254 FLAG_TARGET(ISTRIP),
1262 FLAG_TARGET(IMAXBEL),
1267 UNUSED static struct flags termios_oflags[] = {
1273 FLAG_TARGET(ONLRET),
1279 UNUSED static struct enums termios_oflags_NLDLY[] = {
1285 UNUSED static struct enums termios_oflags_CRDLY[] = {
1293 UNUSED static struct enums termios_oflags_TABDLY[] = {
1301 UNUSED static struct enums termios_oflags_VTDLY[] = {
1307 UNUSED static struct enums termios_oflags_FFDLY[] = {
1313 UNUSED static struct enums termios_oflags_BSDLY[] = {
1319 UNUSED static struct enums termios_cflags_CBAUD[] = {
1334 ENUM_TARGET(B19200),
1335 ENUM_TARGET(B38400),
1336 ENUM_TARGET(B57600),
1337 ENUM_TARGET(B115200),
1338 ENUM_TARGET(B230400),
1339 ENUM_TARGET(B460800),
1343 UNUSED static struct enums termios_cflags_CSIZE[] = {
1351 UNUSED static struct flags termios_cflags[] = {
1352 FLAG_TARGET(CSTOPB),
1354 FLAG_TARGET(PARENB),
1355 FLAG_TARGET(PARODD),
1357 FLAG_TARGET(CLOCAL),
1358 FLAG_TARGET(CRTSCTS),
1362 UNUSED static struct flags termios_lflags[] = {
1364 FLAG_TARGET(ICANON),
1369 FLAG_TARGET(ECHONL),
1370 FLAG_TARGET(NOFLSH),
1371 FLAG_TARGET(TOSTOP),
1372 FLAG_TARGET(ECHOCTL),
1373 FLAG_TARGET(ECHOPRT),
1374 FLAG_TARGET(ECHOKE),
1375 FLAG_TARGET(FLUSHO),
1376 FLAG_TARGET(PENDIN),
1377 FLAG_TARGET(IEXTEN),
1378 FLAG_TARGET(EXTPROC),
1382 UNUSED static struct flags mlockall_flags[] = {
1383 FLAG_TARGET(MCL_CURRENT),
1384 FLAG_TARGET(MCL_FUTURE),
1386 FLAG_TARGET(MCL_ONFAULT),
1391 /* IDs of the various system clocks */
1392 #define TARGET_CLOCK_REALTIME 0
1393 #define TARGET_CLOCK_MONOTONIC 1
1394 #define TARGET_CLOCK_PROCESS_CPUTIME_ID 2
1395 #define TARGET_CLOCK_THREAD_CPUTIME_ID 3
1396 #define TARGET_CLOCK_MONOTONIC_RAW 4
1397 #define TARGET_CLOCK_REALTIME_COARSE 5
1398 #define TARGET_CLOCK_MONOTONIC_COARSE 6
1399 #define TARGET_CLOCK_BOOTTIME 7
1400 #define TARGET_CLOCK_REALTIME_ALARM 8
1401 #define TARGET_CLOCK_BOOTTIME_ALARM 9
1402 #define TARGET_CLOCK_SGI_CYCLE 10
1403 #define TARGET_CLOCK_TAI 11
1405 UNUSED static struct enums clockids[] = {
1406 ENUM_TARGET(CLOCK_REALTIME),
1407 ENUM_TARGET(CLOCK_MONOTONIC),
1408 ENUM_TARGET(CLOCK_PROCESS_CPUTIME_ID),
1409 ENUM_TARGET(CLOCK_THREAD_CPUTIME_ID),
1410 ENUM_TARGET(CLOCK_MONOTONIC_RAW),
1411 ENUM_TARGET(CLOCK_REALTIME_COARSE),
1412 ENUM_TARGET(CLOCK_MONOTONIC_COARSE),
1413 ENUM_TARGET(CLOCK_BOOTTIME),
1414 ENUM_TARGET(CLOCK_REALTIME_ALARM),
1415 ENUM_TARGET(CLOCK_BOOTTIME_ALARM),
1416 ENUM_TARGET(CLOCK_SGI_CYCLE),
1417 ENUM_TARGET(CLOCK_TAI),
1421 UNUSED static struct enums itimer_types[] = {
1422 ENUM_GENERIC(ITIMER_REAL),
1423 ENUM_GENERIC(ITIMER_VIRTUAL),
1424 ENUM_GENERIC(ITIMER_PROF),
1429 * print_xxx utility functions. These are used to print syscall
1430 * parameters in certain format. All of these have parameter
1431 * named 'last'. This parameter is used to add comma to output
1438 return ((last) ? "" : ",");
1442 print_flags(const struct flags *f, abi_long flags, int last)
1444 const char *sep = "";
1447 if ((flags == 0) && (f->f_value == 0)) {
1448 qemu_log("%s%s", f->f_string, get_comma(last));
1451 for (n = 0; f->f_string != NULL; f++) {
1452 if ((f->f_value != 0) && ((flags & f->f_value) == f->f_value)) {
1453 qemu_log("%s%s", sep, f->f_string);
1454 flags &= ~f->f_value;
1461 /* print rest of the flags as numeric */
1463 qemu_log("%s%#x%s", sep, (unsigned int)flags, get_comma(last));
1465 qemu_log("%s", get_comma(last));
1468 /* no string version of flags found, print them in hex then */
1469 qemu_log("%#x%s", (unsigned int)flags, get_comma(last));
1474 print_enums(const struct enums *e, abi_long enum_arg, int last)
1476 for (; e->e_string != NULL; e++) {
1477 if (e->e_value == enum_arg) {
1478 qemu_log("%s", e->e_string);
1483 if (e->e_string == NULL) {
1484 qemu_log("%#x", (unsigned int)enum_arg);
1487 qemu_log("%s", get_comma(last));
1491 print_at_dirfd(abi_long dirfd, int last)
1494 if (dirfd == AT_FDCWD) {
1495 qemu_log("AT_FDCWD%s", get_comma(last));
1499 qemu_log("%d%s", (int)dirfd, get_comma(last));
1503 print_file_mode(abi_long mode, int last)
1505 const char *sep = "";
1506 const struct flags *m;
1508 for (m = &mode_flags[0]; m->f_string != NULL; m++) {
1509 if ((m->f_value & mode) == m->f_value) {
1510 qemu_log("%s%s", m->f_string, sep);
1512 mode &= ~m->f_value;
1518 /* print rest of the mode as octal */
1520 qemu_log("%s%#o", sep, (unsigned int)mode);
1522 qemu_log("%s", get_comma(last));
1526 print_open_flags(abi_long flags, int last)
1528 print_flags(open_access_flags, flags & TARGET_O_ACCMODE, 1);
1529 flags &= ~TARGET_O_ACCMODE;
1531 qemu_log("%s", get_comma(last));
1535 print_flags(open_flags, flags, last);
1539 print_syscall_prologue(const struct syscallname *sc)
1541 qemu_log("%s(", sc->name);
1546 print_syscall_epilogue(const struct syscallname *sc)
1553 print_string(abi_long addr, int last)
1557 if ((s = lock_user_string(addr)) != NULL) {
1558 qemu_log("\"%s\"%s", s, get_comma(last));
1559 unlock_user(s, addr, 0);
1561 /* can't get string out of it, so print it as pointer */
1562 print_pointer(addr, last);
1566 #define MAX_PRINT_BUF 40
1568 print_buf(abi_long addr, abi_long len, int last)
1573 s = lock_user(VERIFY_READ, addr, len, 1);
1576 for (i = 0; i < MAX_PRINT_BUF && i < len; i++) {
1577 if (isprint(s[i])) {
1578 qemu_log("%c", s[i]);
1580 qemu_log("\\%o", s[i]);
1590 unlock_user(s, addr, 0);
1592 print_pointer(addr, last);
1597 * Prints out raw parameter using given format. Caller needs
1598 * to do byte swapping if needed.
1601 print_raw_param(const char *fmt, abi_long param, int last)
1605 (void) snprintf(format, sizeof (format), "%s%s", fmt, get_comma(last));
1606 qemu_log(format, param);
1610 print_pointer(abi_long p, int last)
1613 qemu_log("NULL%s", get_comma(last));
1615 qemu_log("0x" TARGET_ABI_FMT_lx "%s", p, get_comma(last));
1619 * Reads 32-bit (int) number from guest address space from
1620 * address 'addr' and prints it.
1623 print_number(abi_long addr, int last)
1626 qemu_log("NULL%s", get_comma(last));
1630 get_user_s32(num, addr);
1631 qemu_log("[%d]%s", num, get_comma(last));
1636 print_timeval(abi_ulong tv_addr, int last)
1639 struct target_timeval *tv;
1641 tv = lock_user(VERIFY_READ, tv_addr, sizeof(*tv), 1);
1643 print_pointer(tv_addr, last);
1646 qemu_log("{tv_sec = " TARGET_ABI_FMT_ld
1647 ",tv_usec = " TARGET_ABI_FMT_ld "}%s",
1648 tswapal(tv->tv_sec), tswapal(tv->tv_usec), get_comma(last));
1649 unlock_user(tv, tv_addr, 0);
1651 qemu_log("NULL%s", get_comma(last));
1655 print_timespec(abi_ulong ts_addr, int last)
1658 struct target_timespec *ts;
1660 ts = lock_user(VERIFY_READ, ts_addr, sizeof(*ts), 1);
1662 print_pointer(ts_addr, last);
1665 qemu_log("{tv_sec = " TARGET_ABI_FMT_ld
1666 ",tv_nsec = " TARGET_ABI_FMT_ld "}%s",
1667 tswapal(ts->tv_sec), tswapal(ts->tv_nsec), get_comma(last));
1668 unlock_user(ts, ts_addr, 0);
1670 qemu_log("NULL%s", get_comma(last));
1675 print_timespec64(abi_ulong ts_addr, int last)
1678 struct target__kernel_timespec *ts;
1680 ts = lock_user(VERIFY_READ, ts_addr, sizeof(*ts), 1);
1682 print_pointer(ts_addr, last);
1685 qemu_log("{tv_sec = %lld"
1686 ",tv_nsec = %lld}%s",
1687 (long long)tswap64(ts->tv_sec), (long long)tswap64(ts->tv_nsec),
1689 unlock_user(ts, ts_addr, 0);
1691 qemu_log("NULL%s", get_comma(last));
1696 print_timezone(abi_ulong tz_addr, int last)
1699 struct target_timezone *tz;
1701 tz = lock_user(VERIFY_READ, tz_addr, sizeof(*tz), 1);
1703 print_pointer(tz_addr, last);
1706 qemu_log("{%d,%d}%s", tswap32(tz->tz_minuteswest),
1707 tswap32(tz->tz_dsttime), get_comma(last));
1708 unlock_user(tz, tz_addr, 0);
1710 qemu_log("NULL%s", get_comma(last));
1715 print_itimerval(abi_ulong it_addr, int last)
1718 qemu_log("{it_interval=");
1719 print_timeval(it_addr +
1720 offsetof(struct target_itimerval, it_interval), 0);
1721 qemu_log("it_value=");
1722 print_timeval(it_addr +
1723 offsetof(struct target_itimerval, it_value), 0);
1724 qemu_log("}%s", get_comma(last));
1726 qemu_log("NULL%s", get_comma(last));
1731 print_termios(void *arg)
1733 const struct target_termios *target = arg;
1735 target_tcflag_t iflags = tswap32(target->c_iflag);
1736 target_tcflag_t oflags = tswap32(target->c_oflag);
1737 target_tcflag_t cflags = tswap32(target->c_cflag);
1738 target_tcflag_t lflags = tswap32(target->c_lflag);
1742 qemu_log("c_iflag = ");
1743 print_flags(termios_iflags, iflags, 0);
1745 qemu_log("c_oflag = ");
1746 target_tcflag_t oflags_clean = oflags & ~(TARGET_NLDLY | TARGET_CRDLY |
1747 TARGET_TABDLY | TARGET_BSDLY |
1748 TARGET_VTDLY | TARGET_FFDLY);
1749 print_flags(termios_oflags, oflags_clean, 0);
1750 if (oflags & TARGET_NLDLY) {
1751 print_enums(termios_oflags_NLDLY, oflags & TARGET_NLDLY, 0);
1753 if (oflags & TARGET_CRDLY) {
1754 print_enums(termios_oflags_CRDLY, oflags & TARGET_CRDLY, 0);
1756 if (oflags & TARGET_TABDLY) {
1757 print_enums(termios_oflags_TABDLY, oflags & TARGET_TABDLY, 0);
1759 if (oflags & TARGET_BSDLY) {
1760 print_enums(termios_oflags_BSDLY, oflags & TARGET_BSDLY, 0);
1762 if (oflags & TARGET_VTDLY) {
1763 print_enums(termios_oflags_VTDLY, oflags & TARGET_VTDLY, 0);
1765 if (oflags & TARGET_FFDLY) {
1766 print_enums(termios_oflags_FFDLY, oflags & TARGET_FFDLY, 0);
1769 qemu_log("c_cflag = ");
1770 if (cflags & TARGET_CBAUD) {
1771 print_enums(termios_cflags_CBAUD, cflags & TARGET_CBAUD, 0);
1773 if (cflags & TARGET_CSIZE) {
1774 print_enums(termios_cflags_CSIZE, cflags & TARGET_CSIZE, 0);
1776 target_tcflag_t cflags_clean = cflags & ~(TARGET_CBAUD | TARGET_CSIZE);
1777 print_flags(termios_cflags, cflags_clean, 0);
1779 qemu_log("c_lflag = ");
1780 print_flags(termios_lflags, lflags, 0);
1782 qemu_log("c_cc = ");
1783 qemu_log("\"%s\",", target->c_cc);
1785 qemu_log("c_line = ");
1786 print_raw_param("\'%c\'", target->c_line, 1);
1793 #ifdef TARGET_NR_accept
1795 print_accept(CPUArchState *cpu_env, const struct syscallname *name,
1796 abi_long arg0, abi_long arg1, abi_long arg2,
1797 abi_long arg3, abi_long arg4, abi_long arg5)
1799 print_syscall_prologue(name);
1800 print_raw_param("%d", arg0, 0);
1801 print_pointer(arg1, 0);
1802 print_number(arg2, 1);
1803 print_syscall_epilogue(name);
1807 #ifdef TARGET_NR_access
1809 print_access(CPUArchState *cpu_env, const struct syscallname *name,
1810 abi_long arg0, abi_long arg1, abi_long arg2,
1811 abi_long arg3, abi_long arg4, abi_long arg5)
1813 print_syscall_prologue(name);
1814 print_string(arg0, 0);
1815 print_flags(access_flags, arg1, 1);
1816 print_syscall_epilogue(name);
1820 #ifdef TARGET_NR_acct
1822 print_acct(CPUArchState *cpu_env, const struct syscallname *name,
1823 abi_long arg0, abi_long arg1, abi_long arg2,
1824 abi_long arg3, abi_long arg4, abi_long arg5)
1826 print_syscall_prologue(name);
1827 print_string(arg0, 1);
1828 print_syscall_epilogue(name);
1832 #ifdef TARGET_NR_brk
1834 print_brk(CPUArchState *cpu_env, const struct syscallname *name,
1835 abi_long arg0, abi_long arg1, abi_long arg2,
1836 abi_long arg3, abi_long arg4, abi_long arg5)
1838 print_syscall_prologue(name);
1839 print_pointer(arg0, 1);
1840 print_syscall_epilogue(name);
1844 #ifdef TARGET_NR_chdir
1846 print_chdir(CPUArchState *cpu_env, const struct syscallname *name,
1847 abi_long arg0, abi_long arg1, abi_long arg2,
1848 abi_long arg3, abi_long arg4, abi_long arg5)
1850 print_syscall_prologue(name);
1851 print_string(arg0, 1);
1852 print_syscall_epilogue(name);
1856 #ifdef TARGET_NR_chroot
1858 print_chroot(CPUArchState *cpu_env, const struct syscallname *name,
1859 abi_long arg0, abi_long arg1, abi_long arg2,
1860 abi_long arg3, abi_long arg4, abi_long arg5)
1862 print_syscall_prologue(name);
1863 print_string(arg0, 1);
1864 print_syscall_epilogue(name);
1868 #ifdef TARGET_NR_chmod
1870 print_chmod(CPUArchState *cpu_env, const struct syscallname *name,
1871 abi_long arg0, abi_long arg1, abi_long arg2,
1872 abi_long arg3, abi_long arg4, abi_long arg5)
1874 print_syscall_prologue(name);
1875 print_string(arg0, 0);
1876 print_file_mode(arg1, 1);
1877 print_syscall_epilogue(name);
1881 #if defined(TARGET_NR_chown) || defined(TARGET_NR_lchown)
1883 print_chown(CPUArchState *cpu_env, const struct syscallname *name,
1884 abi_long arg0, abi_long arg1, abi_long arg2,
1885 abi_long arg3, abi_long arg4, abi_long arg5)
1887 print_syscall_prologue(name);
1888 print_string(arg0, 0);
1889 print_raw_param("%d", arg1, 0);
1890 print_raw_param("%d", arg2, 1);
1891 print_syscall_epilogue(name);
1893 #define print_lchown print_chown
1896 #ifdef TARGET_NR_clock_adjtime
1898 print_clock_adjtime(CPUArchState *cpu_env, const struct syscallname *name,
1899 abi_long arg0, abi_long arg1, abi_long arg2,
1900 abi_long arg3, abi_long arg4, abi_long arg5)
1902 print_syscall_prologue(name);
1903 print_enums(clockids, arg0, 0);
1904 print_pointer(arg1, 1);
1905 print_syscall_epilogue(name);
1909 #ifdef TARGET_NR_clone
1910 static void do_print_clone(unsigned int flags, abi_ulong newsp,
1911 abi_ulong parent_tidptr, target_ulong newtls,
1912 abi_ulong child_tidptr)
1914 print_flags(clone_flags, flags, 0);
1915 print_raw_param("child_stack=0x" TARGET_ABI_FMT_lx, newsp, 0);
1916 print_raw_param("parent_tidptr=0x" TARGET_ABI_FMT_lx, parent_tidptr, 0);
1917 print_raw_param("tls=0x" TARGET_ABI_FMT_lx, newtls, 0);
1918 print_raw_param("child_tidptr=0x" TARGET_ABI_FMT_lx, child_tidptr, 1);
1922 print_clone(CPUArchState *cpu_env, const struct syscallname *name,
1923 abi_long arg1, abi_long arg2, abi_long arg3,
1924 abi_long arg4, abi_long arg5, abi_long arg6)
1926 print_syscall_prologue(name);
1927 #if defined(TARGET_MICROBLAZE)
1928 do_print_clone(arg1, arg2, arg4, arg6, arg5);
1929 #elif defined(TARGET_CLONE_BACKWARDS)
1930 do_print_clone(arg1, arg2, arg3, arg4, arg5);
1931 #elif defined(TARGET_CLONE_BACKWARDS2)
1932 do_print_clone(arg2, arg1, arg3, arg5, arg4);
1934 do_print_clone(arg1, arg2, arg3, arg5, arg4);
1936 print_syscall_epilogue(name);
1940 #ifdef TARGET_NR_creat
1942 print_creat(CPUArchState *cpu_env, const struct syscallname *name,
1943 abi_long arg0, abi_long arg1, abi_long arg2,
1944 abi_long arg3, abi_long arg4, abi_long arg5)
1946 print_syscall_prologue(name);
1947 print_string(arg0, 0);
1948 print_file_mode(arg1, 1);
1949 print_syscall_epilogue(name);
1953 #ifdef TARGET_NR_execv
1955 print_execv(CPUArchState *cpu_env, const struct syscallname *name,
1956 abi_long arg0, abi_long arg1, abi_long arg2,
1957 abi_long arg3, abi_long arg4, abi_long arg5)
1959 print_syscall_prologue(name);
1960 print_string(arg0, 0);
1961 print_raw_param("0x" TARGET_ABI_FMT_lx, arg1, 1);
1962 print_syscall_epilogue(name);
1966 #ifdef TARGET_NR_faccessat
1968 print_faccessat(CPUArchState *cpu_env, const struct syscallname *name,
1969 abi_long arg0, abi_long arg1, abi_long arg2,
1970 abi_long arg3, abi_long arg4, abi_long arg5)
1972 print_syscall_prologue(name);
1973 print_at_dirfd(arg0, 0);
1974 print_string(arg1, 0);
1975 print_flags(access_flags, arg2, 0);
1976 print_flags(at_file_flags, arg3, 1);
1977 print_syscall_epilogue(name);
1981 #ifdef TARGET_NR_fallocate
1983 print_fallocate(CPUArchState *cpu_env, const struct syscallname *name,
1984 abi_long arg0, abi_long arg1, abi_long arg2,
1985 abi_long arg3, abi_long arg4, abi_long arg5)
1987 print_syscall_prologue(name);
1988 print_raw_param("%d", arg0, 0);
1989 print_flags(falloc_flags, arg1, 0);
1990 #if TARGET_ABI_BITS == 32
1991 print_raw_param("%" PRIu64, target_offset64(arg2, arg3), 0);
1992 print_raw_param("%" PRIu64, target_offset64(arg4, arg5), 1);
1994 print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
1995 print_raw_param(TARGET_ABI_FMT_ld, arg3, 1);
1997 print_syscall_epilogue(name);
2001 #ifdef TARGET_NR_fchmodat
2003 print_fchmodat(CPUArchState *cpu_env, const struct syscallname *name,
2004 abi_long arg0, abi_long arg1, abi_long arg2,
2005 abi_long arg3, abi_long arg4, abi_long arg5)
2007 print_syscall_prologue(name);
2008 print_at_dirfd(arg0, 0);
2009 print_string(arg1, 0);
2010 print_file_mode(arg2, 0);
2011 print_flags(at_file_flags, arg3, 1);
2012 print_syscall_epilogue(name);
2016 #ifdef TARGET_NR_fchownat
2018 print_fchownat(CPUArchState *cpu_env, const struct syscallname *name,
2019 abi_long arg0, abi_long arg1, abi_long arg2,
2020 abi_long arg3, abi_long arg4, abi_long arg5)
2022 print_syscall_prologue(name);
2023 print_at_dirfd(arg0, 0);
2024 print_string(arg1, 0);
2025 print_raw_param("%d", arg2, 0);
2026 print_raw_param("%d", arg3, 0);
2027 print_flags(at_file_flags, arg4, 1);
2028 print_syscall_epilogue(name);
2032 #if defined(TARGET_NR_fcntl) || defined(TARGET_NR_fcntl64)
2034 print_fcntl(CPUArchState *cpu_env, const struct syscallname *name,
2035 abi_long arg0, abi_long arg1, abi_long arg2,
2036 abi_long arg3, abi_long arg4, abi_long arg5)
2038 print_syscall_prologue(name);
2039 print_raw_param("%d", arg0, 0);
2041 case TARGET_F_DUPFD:
2042 qemu_log("F_DUPFD,");
2043 print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2045 case TARGET_F_GETFD:
2046 qemu_log("F_GETFD");
2048 case TARGET_F_SETFD:
2049 qemu_log("F_SETFD,");
2050 print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2052 case TARGET_F_GETFL:
2053 qemu_log("F_GETFL");
2055 case TARGET_F_SETFL:
2056 qemu_log("F_SETFL,");
2057 print_open_flags(arg2, 1);
2059 case TARGET_F_GETLK:
2060 qemu_log("F_GETLK,");
2061 print_pointer(arg2, 1);
2063 case TARGET_F_SETLK:
2064 qemu_log("F_SETLK,");
2065 print_pointer(arg2, 1);
2067 case TARGET_F_SETLKW:
2068 qemu_log("F_SETLKW,");
2069 print_pointer(arg2, 1);
2071 case TARGET_F_GETOWN:
2072 qemu_log("F_GETOWN");
2074 case TARGET_F_SETOWN:
2075 qemu_log("F_SETOWN,");
2076 print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
2078 case TARGET_F_GETSIG:
2079 qemu_log("F_GETSIG");
2081 case TARGET_F_SETSIG:
2082 qemu_log("F_SETSIG,");
2083 print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
2085 #if TARGET_ABI_BITS == 32
2086 case TARGET_F_GETLK64:
2087 qemu_log("F_GETLK64,");
2088 print_pointer(arg2, 1);
2090 case TARGET_F_SETLK64:
2091 qemu_log("F_SETLK64,");
2092 print_pointer(arg2, 1);
2094 case TARGET_F_SETLKW64:
2095 qemu_log("F_SETLKW64,");
2096 print_pointer(arg2, 1);
2099 case TARGET_F_OFD_GETLK:
2100 qemu_log("F_OFD_GETLK,");
2101 print_pointer(arg2, 1);
2103 case TARGET_F_OFD_SETLK:
2104 qemu_log("F_OFD_SETLK,");
2105 print_pointer(arg2, 1);
2107 case TARGET_F_OFD_SETLKW:
2108 qemu_log("F_OFD_SETLKW,");
2109 print_pointer(arg2, 1);
2111 case TARGET_F_SETLEASE:
2112 qemu_log("F_SETLEASE,");
2113 print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2115 case TARGET_F_GETLEASE:
2116 qemu_log("F_GETLEASE");
2118 #ifdef F_DUPFD_CLOEXEC
2119 case TARGET_F_DUPFD_CLOEXEC:
2120 qemu_log("F_DUPFD_CLOEXEC,");
2121 print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2124 case TARGET_F_NOTIFY:
2125 qemu_log("F_NOTIFY,");
2126 print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2129 case TARGET_F_GETOWN_EX:
2130 qemu_log("F_GETOWN_EX,");
2131 print_pointer(arg2, 1);
2135 case TARGET_F_SETOWN_EX:
2136 qemu_log("F_SETOWN_EX,");
2137 print_pointer(arg2, 1);
2141 case TARGET_F_SETPIPE_SZ:
2142 qemu_log("F_SETPIPE_SZ,");
2143 print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2145 case TARGET_F_GETPIPE_SZ:
2146 qemu_log("F_GETPIPE_SZ");
2150 case TARGET_F_ADD_SEALS:
2151 qemu_log("F_ADD_SEALS,");
2152 print_raw_param("0x"TARGET_ABI_FMT_lx, arg2, 1);
2154 case TARGET_F_GET_SEALS:
2155 qemu_log("F_GET_SEALS");
2159 print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
2160 print_pointer(arg2, 1);
2163 print_syscall_epilogue(name);
2165 #define print_fcntl64 print_fcntl
2168 #ifdef TARGET_NR_fgetxattr
2170 print_fgetxattr(CPUArchState *cpu_env, const struct syscallname *name,
2171 abi_long arg0, abi_long arg1, abi_long arg2,
2172 abi_long arg3, abi_long arg4, abi_long arg5)
2174 print_syscall_prologue(name);
2175 print_raw_param("%d", arg0, 0);
2176 print_string(arg1, 0);
2177 print_pointer(arg2, 0);
2178 print_raw_param(TARGET_FMT_lu, arg3, 1);
2179 print_syscall_epilogue(name);
2183 #ifdef TARGET_NR_flistxattr
2185 print_flistxattr(CPUArchState *cpu_env, const struct syscallname *name,
2186 abi_long arg0, abi_long arg1, abi_long arg2,
2187 abi_long arg3, abi_long arg4, abi_long arg5)
2189 print_syscall_prologue(name);
2190 print_raw_param("%d", arg0, 0);
2191 print_pointer(arg1, 0);
2192 print_raw_param(TARGET_FMT_lu, arg2, 1);
2193 print_syscall_epilogue(name);
2197 #if defined(TARGET_NR_getxattr) || defined(TARGET_NR_lgetxattr)
2199 print_getxattr(CPUArchState *cpu_env, const struct syscallname *name,
2200 abi_long arg0, abi_long arg1, abi_long arg2,
2201 abi_long arg3, abi_long arg4, abi_long arg5)
2203 print_syscall_prologue(name);
2204 print_string(arg0, 0);
2205 print_string(arg1, 0);
2206 print_pointer(arg2, 0);
2207 print_raw_param(TARGET_FMT_lu, arg3, 1);
2208 print_syscall_epilogue(name);
2210 #define print_lgetxattr print_getxattr
2213 #if defined(TARGET_NR_listxattr) || defined(TARGET_NR_llistxattr)
2215 print_listxattr(CPUArchState *cpu_env, const struct syscallname *name,
2216 abi_long arg0, abi_long arg1, abi_long arg2,
2217 abi_long arg3, abi_long arg4, abi_long arg5)
2219 print_syscall_prologue(name);
2220 print_string(arg0, 0);
2221 print_pointer(arg1, 0);
2222 print_raw_param(TARGET_FMT_lu, arg2, 1);
2223 print_syscall_epilogue(name);
2225 #define print_llistxattr print_listxattr
2228 #if defined(TARGET_NR_fremovexattr)
2230 print_fremovexattr(CPUArchState *cpu_env, const struct syscallname *name,
2231 abi_long arg0, abi_long arg1, abi_long arg2,
2232 abi_long arg3, abi_long arg4, abi_long arg5)
2234 print_syscall_prologue(name);
2235 print_raw_param("%d", arg0, 0);
2236 print_string(arg1, 1);
2237 print_syscall_epilogue(name);
2241 #if defined(TARGET_NR_removexattr) || defined(TARGET_NR_lremovexattr)
2243 print_removexattr(CPUArchState *cpu_env, const struct syscallname *name,
2244 abi_long arg0, abi_long arg1, abi_long arg2,
2245 abi_long arg3, abi_long arg4, abi_long arg5)
2247 print_syscall_prologue(name);
2248 print_string(arg0, 0);
2249 print_string(arg1, 1);
2250 print_syscall_epilogue(name);
2252 #define print_lremovexattr print_removexattr
2255 #ifdef TARGET_NR_futimesat
2257 print_futimesat(CPUArchState *cpu_env, const struct syscallname *name,
2258 abi_long arg0, abi_long arg1, abi_long arg2,
2259 abi_long arg3, abi_long arg4, abi_long arg5)
2261 print_syscall_prologue(name);
2262 print_at_dirfd(arg0, 0);
2263 print_string(arg1, 0);
2264 print_timeval(arg2, 0);
2265 print_timeval(arg2 + sizeof (struct target_timeval), 1);
2266 print_syscall_epilogue(name);
2270 #ifdef TARGET_NR_gettimeofday
2272 print_gettimeofday(CPUArchState *cpu_env, const struct syscallname *name,
2273 abi_long arg0, abi_long arg1, abi_long arg2,
2274 abi_long arg3, abi_long arg4, abi_long arg5)
2276 print_syscall_prologue(name);
2277 print_pointer(arg0, 0);
2278 print_pointer(arg1, 1);
2279 print_syscall_epilogue(name);
2283 #ifdef TARGET_NR_settimeofday
2285 print_settimeofday(CPUArchState *cpu_env, const struct syscallname *name,
2286 abi_long arg0, abi_long arg1, abi_long arg2,
2287 abi_long arg3, abi_long arg4, abi_long arg5)
2289 print_syscall_prologue(name);
2290 print_timeval(arg0, 0);
2291 print_timezone(arg1, 1);
2292 print_syscall_epilogue(name);
2296 #if defined(TARGET_NR_clock_gettime) || defined(TARGET_NR_clock_getres)
2298 print_clock_gettime(CPUArchState *cpu_env, const struct syscallname *name,
2299 abi_long arg0, abi_long arg1, abi_long arg2,
2300 abi_long arg3, abi_long arg4, abi_long arg5)
2302 print_syscall_prologue(name);
2303 print_enums(clockids, arg0, 0);
2304 print_pointer(arg1, 1);
2305 print_syscall_epilogue(name);
2307 #define print_clock_getres print_clock_gettime
2310 #if defined(TARGET_NR_clock_gettime64)
2312 print_clock_gettime64(CPUArchState *cpu_env, const struct syscallname *name,
2313 abi_long arg0, abi_long arg1, abi_long arg2,
2314 abi_long arg3, abi_long arg4, abi_long arg5)
2316 print_syscall_prologue(name);
2317 print_enums(clockids, arg0, 0);
2318 print_pointer(arg1, 1);
2319 print_syscall_epilogue(name);
2323 #ifdef TARGET_NR_clock_settime
2325 print_clock_settime(CPUArchState *cpu_env, const struct syscallname *name,
2326 abi_long arg0, abi_long arg1, abi_long arg2,
2327 abi_long arg3, abi_long arg4, abi_long arg5)
2329 print_syscall_prologue(name);
2330 print_enums(clockids, arg0, 0);
2331 print_timespec(arg1, 1);
2332 print_syscall_epilogue(name);
2336 #ifdef TARGET_NR_getitimer
2338 print_getitimer(CPUArchState *cpu_env, const struct syscallname *name,
2339 abi_long arg0, abi_long arg1, abi_long arg2,
2340 abi_long arg3, abi_long arg4, abi_long arg5)
2342 print_syscall_prologue(name);
2343 print_enums(itimer_types, arg0, 0);
2344 print_pointer(arg1, 1);
2345 print_syscall_epilogue(name);
2349 #ifdef TARGET_NR_setitimer
2351 print_setitimer(CPUArchState *cpu_env, const struct syscallname *name,
2352 abi_long arg0, abi_long arg1, abi_long arg2,
2353 abi_long arg3, abi_long arg4, abi_long arg5)
2355 print_syscall_prologue(name);
2356 print_enums(itimer_types, arg0, 0);
2357 print_itimerval(arg1, 0);
2358 print_pointer(arg2, 1);
2359 print_syscall_epilogue(name);
2363 #ifdef TARGET_NR_link
2365 print_link(CPUArchState *cpu_env, const struct syscallname *name,
2366 abi_long arg0, abi_long arg1, abi_long arg2,
2367 abi_long arg3, abi_long arg4, abi_long arg5)
2369 print_syscall_prologue(name);
2370 print_string(arg0, 0);
2371 print_string(arg1, 1);
2372 print_syscall_epilogue(name);
2376 #ifdef TARGET_NR_linkat
2378 print_linkat(CPUArchState *cpu_env, const struct syscallname *name,
2379 abi_long arg0, abi_long arg1, abi_long arg2,
2380 abi_long arg3, abi_long arg4, abi_long arg5)
2382 print_syscall_prologue(name);
2383 print_at_dirfd(arg0, 0);
2384 print_string(arg1, 0);
2385 print_at_dirfd(arg2, 0);
2386 print_string(arg3, 0);
2387 print_flags(at_file_flags, arg4, 1);
2388 print_syscall_epilogue(name);
2392 #if defined(TARGET_NR__llseek) || defined(TARGET_NR_llseek)
2394 print__llseek(CPUArchState *cpu_env, const struct syscallname *name,
2395 abi_long arg0, abi_long arg1, abi_long arg2,
2396 abi_long arg3, abi_long arg4, abi_long arg5)
2398 const char *whence = "UNKNOWN";
2399 print_syscall_prologue(name);
2400 print_raw_param("%d", arg0, 0);
2401 print_raw_param("%ld", arg1, 0);
2402 print_raw_param("%ld", arg2, 0);
2403 print_pointer(arg3, 0);
2405 case SEEK_SET: whence = "SEEK_SET"; break;
2406 case SEEK_CUR: whence = "SEEK_CUR"; break;
2407 case SEEK_END: whence = "SEEK_END"; break;
2409 qemu_log("%s", whence);
2410 print_syscall_epilogue(name);
2412 #define print_llseek print__llseek
2415 #ifdef TARGET_NR_lseek
2417 print_lseek(CPUArchState *cpu_env, const struct syscallname *name,
2418 abi_long arg0, abi_long arg1, abi_long arg2,
2419 abi_long arg3, abi_long arg4, abi_long arg5)
2421 print_syscall_prologue(name);
2422 print_raw_param("%d", arg0, 0);
2423 print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
2426 qemu_log("SEEK_SET"); break;
2428 qemu_log("SEEK_CUR"); break;
2430 qemu_log("SEEK_END"); break;
2433 qemu_log("SEEK_DATA"); break;
2437 qemu_log("SEEK_HOLE"); break;
2440 print_raw_param("%#x", arg2, 1);
2442 print_syscall_epilogue(name);
2446 #ifdef TARGET_NR_truncate
2448 print_truncate(CPUArchState *cpu_env, const struct syscallname *name,
2449 abi_long arg0, abi_long arg1, abi_long arg2,
2450 abi_long arg3, abi_long arg4, abi_long arg5)
2452 print_syscall_prologue(name);
2453 print_string(arg0, 0);
2454 print_raw_param(TARGET_ABI_FMT_ld, arg1, 1);
2455 print_syscall_epilogue(name);
2459 #ifdef TARGET_NR_truncate64
2461 print_truncate64(CPUArchState *cpu_env, const struct syscallname *name,
2462 abi_long arg0, abi_long arg1, abi_long arg2,
2463 abi_long arg3, abi_long arg4, abi_long arg5)
2465 print_syscall_prologue(name);
2466 print_string(arg0, 0);
2467 if (regpairs_aligned(cpu_env, TARGET_NR_truncate64)) {
2471 print_raw_param("%" PRIu64, target_offset64(arg1, arg2), 1);
2472 print_syscall_epilogue(name);
2476 #ifdef TARGET_NR_ftruncate64
2478 print_ftruncate64(CPUArchState *cpu_env, const struct syscallname *name,
2479 abi_long arg0, abi_long arg1, abi_long arg2,
2480 abi_long arg3, abi_long arg4, abi_long arg5)
2482 print_syscall_prologue(name);
2483 print_raw_param("%d", arg0, 0);
2484 if (regpairs_aligned(cpu_env, TARGET_NR_ftruncate64)) {
2488 print_raw_param("%" PRIu64, target_offset64(arg1, arg2), 1);
2489 print_syscall_epilogue(name);
2493 #ifdef TARGET_NR_mlockall
2495 print_mlockall(CPUArchState *cpu_env, const struct syscallname *name,
2496 abi_long arg0, abi_long arg1, abi_long arg2,
2497 abi_long arg3, abi_long arg4, abi_long arg5)
2499 print_syscall_prologue(name);
2500 print_flags(mlockall_flags, arg0, 1);
2501 print_syscall_epilogue(name);
2505 #if defined(TARGET_NR_socket)
2507 print_socket(CPUArchState *cpu_env, const struct syscallname *name,
2508 abi_long arg0, abi_long arg1, abi_long arg2,
2509 abi_long arg3, abi_long arg4, abi_long arg5)
2511 abi_ulong domain = arg0, type = arg1, protocol = arg2;
2513 print_syscall_prologue(name);
2514 print_socket_domain(domain);
2516 print_socket_type(type);
2518 if (domain == AF_PACKET ||
2519 (domain == AF_INET && type == TARGET_SOCK_PACKET)) {
2520 protocol = tswap16(protocol);
2522 print_socket_protocol(domain, type, protocol);
2523 print_syscall_epilogue(name);
2528 #if defined(TARGET_NR_socketcall) || defined(TARGET_NR_bind)
2530 static void print_sockfd(abi_long sockfd, int last)
2532 print_raw_param(TARGET_ABI_FMT_ld, sockfd, last);
2537 #if defined(TARGET_NR_socketcall)
2539 #define get_user_ualx(x, gaddr, idx) \
2540 get_user_ual(x, (gaddr) + (idx) * sizeof(abi_long))
2542 static void do_print_socket(const char *name, abi_long arg1)
2544 abi_ulong domain, type, protocol;
2546 get_user_ualx(domain, arg1, 0);
2547 get_user_ualx(type, arg1, 1);
2548 get_user_ualx(protocol, arg1, 2);
2549 qemu_log("%s(", name);
2550 print_socket_domain(domain);
2552 print_socket_type(type);
2554 if (domain == AF_PACKET ||
2555 (domain == AF_INET && type == TARGET_SOCK_PACKET)) {
2556 protocol = tswap16(protocol);
2558 print_socket_protocol(domain, type, protocol);
2562 static void do_print_sockaddr(const char *name, abi_long arg1)
2564 abi_ulong sockfd, addr, addrlen;
2566 get_user_ualx(sockfd, arg1, 0);
2567 get_user_ualx(addr, arg1, 1);
2568 get_user_ualx(addrlen, arg1, 2);
2570 qemu_log("%s(", name);
2571 print_sockfd(sockfd, 0);
2572 print_sockaddr(addr, addrlen, 0);
2576 static void do_print_listen(const char *name, abi_long arg1)
2578 abi_ulong sockfd, backlog;
2580 get_user_ualx(sockfd, arg1, 0);
2581 get_user_ualx(backlog, arg1, 1);
2583 qemu_log("%s(", name);
2584 print_sockfd(sockfd, 0);
2585 print_raw_param(TARGET_ABI_FMT_ld, backlog, 1);
2589 static void do_print_socketpair(const char *name, abi_long arg1)
2591 abi_ulong domain, type, protocol, tab;
2593 get_user_ualx(domain, arg1, 0);
2594 get_user_ualx(type, arg1, 1);
2595 get_user_ualx(protocol, arg1, 2);
2596 get_user_ualx(tab, arg1, 3);
2598 qemu_log("%s(", name);
2599 print_socket_domain(domain);
2601 print_socket_type(type);
2603 print_socket_protocol(domain, type, protocol);
2605 print_raw_param(TARGET_ABI_FMT_lx, tab, 1);
2609 static void do_print_sendrecv(const char *name, abi_long arg1)
2611 abi_ulong sockfd, msg, len, flags;
2613 get_user_ualx(sockfd, arg1, 0);
2614 get_user_ualx(msg, arg1, 1);
2615 get_user_ualx(len, arg1, 2);
2616 get_user_ualx(flags, arg1, 3);
2618 qemu_log("%s(", name);
2619 print_sockfd(sockfd, 0);
2620 print_buf(msg, len, 0);
2621 print_raw_param(TARGET_ABI_FMT_ld, len, 0);
2622 print_flags(msg_flags, flags, 1);
2626 static void do_print_msgaddr(const char *name, abi_long arg1)
2628 abi_ulong sockfd, msg, len, flags, addr, addrlen;
2630 get_user_ualx(sockfd, arg1, 0);
2631 get_user_ualx(msg, arg1, 1);
2632 get_user_ualx(len, arg1, 2);
2633 get_user_ualx(flags, arg1, 3);
2634 get_user_ualx(addr, arg1, 4);
2635 get_user_ualx(addrlen, arg1, 5);
2637 qemu_log("%s(", name);
2638 print_sockfd(sockfd, 0);
2639 print_buf(msg, len, 0);
2640 print_raw_param(TARGET_ABI_FMT_ld, len, 0);
2641 print_flags(msg_flags, flags, 0);
2642 print_sockaddr(addr, addrlen, 0);
2646 static void do_print_shutdown(const char *name, abi_long arg1)
2648 abi_ulong sockfd, how;
2650 get_user_ualx(sockfd, arg1, 0);
2651 get_user_ualx(how, arg1, 1);
2653 qemu_log("shutdown(");
2654 print_sockfd(sockfd, 0);
2657 qemu_log("SHUT_RD");
2660 qemu_log("SHUT_WR");
2663 qemu_log("SHUT_RDWR");
2666 print_raw_param(TARGET_ABI_FMT_ld, how, 1);
2672 static void do_print_msg(const char *name, abi_long arg1)
2674 abi_ulong sockfd, msg, flags;
2676 get_user_ualx(sockfd, arg1, 0);
2677 get_user_ualx(msg, arg1, 1);
2678 get_user_ualx(flags, arg1, 2);
2680 qemu_log("%s(", name);
2681 print_sockfd(sockfd, 0);
2682 print_pointer(msg, 0);
2683 print_flags(msg_flags, flags, 1);
2687 static void do_print_sockopt(const char *name, abi_long arg1)
2689 abi_ulong sockfd, level, optname, optval, optlen;
2691 get_user_ualx(sockfd, arg1, 0);
2692 get_user_ualx(level, arg1, 1);
2693 get_user_ualx(optname, arg1, 2);
2694 get_user_ualx(optval, arg1, 3);
2695 get_user_ualx(optlen, arg1, 4);
2697 qemu_log("%s(", name);
2698 print_sockfd(sockfd, 0);
2701 qemu_log("SOL_TCP,");
2702 print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2703 print_pointer(optval, 0);
2706 qemu_log("SOL_UDP,");
2707 print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2708 print_pointer(optval, 0);
2711 qemu_log("SOL_IP,");
2712 print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2713 print_pointer(optval, 0);
2716 qemu_log("SOL_RAW,");
2717 print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2718 print_pointer(optval, 0);
2720 case TARGET_SOL_SOCKET:
2721 qemu_log("SOL_SOCKET,");
2723 case TARGET_SO_DEBUG:
2724 qemu_log("SO_DEBUG,");
2726 print_number(optval, 0);
2728 case TARGET_SO_REUSEADDR:
2729 qemu_log("SO_REUSEADDR,");
2731 case TARGET_SO_REUSEPORT:
2732 qemu_log("SO_REUSEPORT,");
2734 case TARGET_SO_TYPE:
2735 qemu_log("SO_TYPE,");
2737 case TARGET_SO_ERROR:
2738 qemu_log("SO_ERROR,");
2740 case TARGET_SO_DONTROUTE:
2741 qemu_log("SO_DONTROUTE,");
2743 case TARGET_SO_BROADCAST:
2744 qemu_log("SO_BROADCAST,");
2746 case TARGET_SO_SNDBUF:
2747 qemu_log("SO_SNDBUF,");
2749 case TARGET_SO_RCVBUF:
2750 qemu_log("SO_RCVBUF,");
2752 case TARGET_SO_KEEPALIVE:
2753 qemu_log("SO_KEEPALIVE,");
2755 case TARGET_SO_OOBINLINE:
2756 qemu_log("SO_OOBINLINE,");
2758 case TARGET_SO_NO_CHECK:
2759 qemu_log("SO_NO_CHECK,");
2761 case TARGET_SO_PRIORITY:
2762 qemu_log("SO_PRIORITY,");
2764 case TARGET_SO_BSDCOMPAT:
2765 qemu_log("SO_BSDCOMPAT,");
2767 case TARGET_SO_PASSCRED:
2768 qemu_log("SO_PASSCRED,");
2770 case TARGET_SO_TIMESTAMP:
2771 qemu_log("SO_TIMESTAMP,");
2773 case TARGET_SO_RCVLOWAT:
2774 qemu_log("SO_RCVLOWAT,");
2776 case TARGET_SO_RCVTIMEO:
2777 qemu_log("SO_RCVTIMEO,");
2778 print_timeval(optval, 0);
2780 case TARGET_SO_SNDTIMEO:
2781 qemu_log("SO_SNDTIMEO,");
2782 print_timeval(optval, 0);
2784 case TARGET_SO_ATTACH_FILTER: {
2785 struct target_sock_fprog *fprog;
2787 qemu_log("SO_ATTACH_FILTER,");
2789 if (lock_user_struct(VERIFY_READ, fprog, optval, 0)) {
2790 struct target_sock_filter *filter;
2792 if (lock_user_struct(VERIFY_READ, filter,
2793 tswapal(fprog->filter), 0)) {
2795 for (i = 0; i < tswap16(fprog->len) - 1; i++) {
2796 qemu_log("[%d]{0x%x,%d,%d,0x%x},",
2797 i, tswap16(filter[i].code),
2798 filter[i].jt, filter[i].jf,
2799 tswap32(filter[i].k));
2801 qemu_log("[%d]{0x%x,%d,%d,0x%x}",
2802 i, tswap16(filter[i].code),
2803 filter[i].jt, filter[i].jf,
2804 tswap32(filter[i].k));
2806 qemu_log(TARGET_ABI_FMT_lx, tswapal(fprog->filter));
2808 qemu_log(",%d},", tswap16(fprog->len));
2809 unlock_user(fprog, optval, 0);
2811 print_pointer(optval, 0);
2816 print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2817 print_pointer(optval, 0);
2822 qemu_log("SOL_IPV6,");
2824 case IPV6_MTU_DISCOVER:
2825 qemu_log("IPV6_MTU_DISCOVER,");
2828 qemu_log("IPV6_MTU,");
2831 qemu_log("IPV6_V6ONLY,");
2833 case IPV6_RECVPKTINFO:
2834 qemu_log("IPV6_RECVPKTINFO,");
2836 case IPV6_UNICAST_HOPS:
2837 qemu_log("IPV6_UNICAST_HOPS,");
2839 case IPV6_MULTICAST_HOPS:
2840 qemu_log("IPV6_MULTICAST_HOPS,");
2842 case IPV6_MULTICAST_LOOP:
2843 qemu_log("IPV6_MULTICAST_LOOP,");
2846 qemu_log("IPV6_RECVERR,");
2848 case IPV6_RECVHOPLIMIT:
2849 qemu_log("IPV6_RECVHOPLIMIT,");
2851 case IPV6_2292HOPLIMIT:
2852 qemu_log("IPV6_2292HOPLIMIT,");
2855 qemu_log("IPV6_CHECKSUM,");
2858 qemu_log("IPV6_ADDRFORM,");
2860 case IPV6_2292PKTINFO:
2861 qemu_log("IPV6_2292PKTINFO,");
2863 case IPV6_RECVTCLASS:
2864 qemu_log("IPV6_RECVTCLASS,");
2866 case IPV6_RECVRTHDR:
2867 qemu_log("IPV6_RECVRTHDR,");
2869 case IPV6_2292RTHDR:
2870 qemu_log("IPV6_2292RTHDR,");
2872 case IPV6_RECVHOPOPTS:
2873 qemu_log("IPV6_RECVHOPOPTS,");
2875 case IPV6_2292HOPOPTS:
2876 qemu_log("IPV6_2292HOPOPTS,");
2878 case IPV6_RECVDSTOPTS:
2879 qemu_log("IPV6_RECVDSTOPTS,");
2881 case IPV6_2292DSTOPTS:
2882 qemu_log("IPV6_2292DSTOPTS,");
2885 qemu_log("IPV6_TCLASS,");
2887 case IPV6_ADDR_PREFERENCES:
2888 qemu_log("IPV6_ADDR_PREFERENCES,");
2890 #ifdef IPV6_RECVPATHMTU
2891 case IPV6_RECVPATHMTU:
2892 qemu_log("IPV6_RECVPATHMTU,");
2895 #ifdef IPV6_TRANSPARENT
2896 case IPV6_TRANSPARENT:
2897 qemu_log("IPV6_TRANSPARENT,");
2900 #ifdef IPV6_FREEBIND
2902 qemu_log("IPV6_FREEBIND,");
2905 #ifdef IPV6_RECVORIGDSTADDR
2906 case IPV6_RECVORIGDSTADDR:
2907 qemu_log("IPV6_RECVORIGDSTADDR,");
2911 qemu_log("IPV6_PKTINFO,");
2912 print_pointer(optval, 0);
2914 case IPV6_ADD_MEMBERSHIP:
2915 qemu_log("IPV6_ADD_MEMBERSHIP,");
2916 print_pointer(optval, 0);
2918 case IPV6_DROP_MEMBERSHIP:
2919 qemu_log("IPV6_DROP_MEMBERSHIP,");
2920 print_pointer(optval, 0);
2923 print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2924 print_pointer(optval, 0);
2929 print_raw_param(TARGET_ABI_FMT_ld, level, 0);
2930 print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2931 print_pointer(optval, 0);
2934 print_raw_param(TARGET_ABI_FMT_ld, optlen, 1);
2938 #define PRINT_SOCKOP(name, func) \
2939 [TARGET_SYS_##name] = { #name, func }
2943 void (*print)(const char *, abi_long);
2945 PRINT_SOCKOP(SOCKET, do_print_socket),
2946 PRINT_SOCKOP(BIND, do_print_sockaddr),
2947 PRINT_SOCKOP(CONNECT, do_print_sockaddr),
2948 PRINT_SOCKOP(LISTEN, do_print_listen),
2949 PRINT_SOCKOP(ACCEPT, do_print_sockaddr),
2950 PRINT_SOCKOP(GETSOCKNAME, do_print_sockaddr),
2951 PRINT_SOCKOP(GETPEERNAME, do_print_sockaddr),
2952 PRINT_SOCKOP(SOCKETPAIR, do_print_socketpair),
2953 PRINT_SOCKOP(SEND, do_print_sendrecv),
2954 PRINT_SOCKOP(RECV, do_print_sendrecv),
2955 PRINT_SOCKOP(SENDTO, do_print_msgaddr),
2956 PRINT_SOCKOP(RECVFROM, do_print_msgaddr),
2957 PRINT_SOCKOP(SHUTDOWN, do_print_shutdown),
2958 PRINT_SOCKOP(SETSOCKOPT, do_print_sockopt),
2959 PRINT_SOCKOP(GETSOCKOPT, do_print_sockopt),
2960 PRINT_SOCKOP(SENDMSG, do_print_msg),
2961 PRINT_SOCKOP(RECVMSG, do_print_msg),
2962 PRINT_SOCKOP(ACCEPT4, NULL),
2963 PRINT_SOCKOP(RECVMMSG, NULL),
2964 PRINT_SOCKOP(SENDMMSG, NULL),
2968 print_socketcall(CPUArchState *cpu_env, const struct syscallname *name,
2969 abi_long arg0, abi_long arg1, abi_long arg2,
2970 abi_long arg3, abi_long arg4, abi_long arg5)
2972 if (arg0 >= 0 && arg0 < ARRAY_SIZE(scall) && scall[arg0].print) {
2973 scall[arg0].print(scall[arg0].name, arg1);
2976 print_syscall_prologue(name);
2977 print_raw_param(TARGET_ABI_FMT_ld, arg0, 0);
2978 print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
2979 print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
2980 print_raw_param(TARGET_ABI_FMT_ld, arg3, 0);
2981 print_raw_param(TARGET_ABI_FMT_ld, arg4, 0);
2982 print_raw_param(TARGET_ABI_FMT_ld, arg5, 0);
2983 print_syscall_epilogue(name);
2987 #if defined(TARGET_NR_bind)
2989 print_bind(CPUArchState *cpu_env, const struct syscallname *name,
2990 abi_long arg0, abi_long arg1, abi_long arg2,
2991 abi_long arg3, abi_long arg4, abi_long arg5)
2993 print_syscall_prologue(name);
2994 print_sockfd(arg0, 0);
2995 print_sockaddr(arg1, arg2, 1);
2996 print_syscall_epilogue(name);
3000 #if defined(TARGET_NR_stat) || defined(TARGET_NR_stat64) || \
3001 defined(TARGET_NR_lstat) || defined(TARGET_NR_lstat64)
3003 print_stat(CPUArchState *cpu_env, const struct syscallname *name,
3004 abi_long arg0, abi_long arg1, abi_long arg2,
3005 abi_long arg3, abi_long arg4, abi_long arg5)
3007 print_syscall_prologue(name);
3008 print_string(arg0, 0);
3009 print_pointer(arg1, 1);
3010 print_syscall_epilogue(name);
3012 #define print_lstat print_stat
3013 #define print_stat64 print_stat
3014 #define print_lstat64 print_stat
3017 #if defined(TARGET_NR_fstat) || defined(TARGET_NR_fstat64)
3019 print_fstat(CPUArchState *cpu_env, const struct syscallname *name,
3020 abi_long arg0, abi_long arg1, abi_long arg2,
3021 abi_long arg3, abi_long arg4, abi_long arg5)
3023 print_syscall_prologue(name);
3024 print_raw_param("%d", arg0, 0);
3025 print_pointer(arg1, 1);
3026 print_syscall_epilogue(name);
3028 #define print_fstat64 print_fstat
3031 #ifdef TARGET_NR_mkdir
3033 print_mkdir(CPUArchState *cpu_env, const struct syscallname *name,
3034 abi_long arg0, abi_long arg1, abi_long arg2,
3035 abi_long arg3, abi_long arg4, abi_long arg5)
3037 print_syscall_prologue(name);
3038 print_string(arg0, 0);
3039 print_file_mode(arg1, 1);
3040 print_syscall_epilogue(name);
3044 #ifdef TARGET_NR_mkdirat
3046 print_mkdirat(CPUArchState *cpu_env, const struct syscallname *name,
3047 abi_long arg0, abi_long arg1, abi_long arg2,
3048 abi_long arg3, abi_long arg4, abi_long arg5)
3050 print_syscall_prologue(name);
3051 print_at_dirfd(arg0, 0);
3052 print_string(arg1, 0);
3053 print_file_mode(arg2, 1);
3054 print_syscall_epilogue(name);
3058 #ifdef TARGET_NR_rmdir
3060 print_rmdir(CPUArchState *cpu_env, const struct syscallname *name,
3061 abi_long arg0, abi_long arg1, abi_long arg2,
3062 abi_long arg3, abi_long arg4, abi_long arg5)
3064 print_syscall_prologue(name);
3065 print_string(arg0, 0);
3066 print_syscall_epilogue(name);
3070 #ifdef TARGET_NR_rt_sigaction
3072 print_rt_sigaction(CPUArchState *cpu_env, const struct syscallname *name,
3073 abi_long arg0, abi_long arg1, abi_long arg2,
3074 abi_long arg3, abi_long arg4, abi_long arg5)
3076 print_syscall_prologue(name);
3077 print_signal(arg0, 0);
3078 print_pointer(arg1, 0);
3079 print_pointer(arg2, 1);
3080 print_syscall_epilogue(name);
3084 #ifdef TARGET_NR_rt_sigprocmask
3086 print_rt_sigprocmask(CPUArchState *cpu_env, const struct syscallname *name,
3087 abi_long arg0, abi_long arg1, abi_long arg2,
3088 abi_long arg3, abi_long arg4, abi_long arg5)
3090 const char *how = "UNKNOWN";
3091 print_syscall_prologue(name);
3093 case TARGET_SIG_BLOCK: how = "SIG_BLOCK"; break;
3094 case TARGET_SIG_UNBLOCK: how = "SIG_UNBLOCK"; break;
3095 case TARGET_SIG_SETMASK: how = "SIG_SETMASK"; break;
3097 qemu_log("%s,", how);
3098 print_pointer(arg1, 0);
3099 print_pointer(arg2, 1);
3100 print_syscall_epilogue(name);
3104 #ifdef TARGET_NR_rt_sigqueueinfo
3106 print_rt_sigqueueinfo(CPUArchState *cpu_env, const struct syscallname *name,
3107 abi_long arg0, abi_long arg1, abi_long arg2,
3108 abi_long arg3, abi_long arg4, abi_long arg5)
3111 target_siginfo_t uinfo;
3113 print_syscall_prologue(name);
3114 print_raw_param("%d", arg0, 0);
3115 print_signal(arg1, 0);
3116 p = lock_user(VERIFY_READ, arg2, sizeof(target_siginfo_t), 1);
3118 get_target_siginfo(&uinfo, p);
3119 print_siginfo(&uinfo);
3121 unlock_user(p, arg2, 0);
3123 print_pointer(arg2, 1);
3125 print_syscall_epilogue(name);
3129 #ifdef TARGET_NR_rt_tgsigqueueinfo
3131 print_rt_tgsigqueueinfo(CPUArchState *cpu_env, const struct syscallname *name,
3132 abi_long arg0, abi_long arg1, abi_long arg2,
3133 abi_long arg3, abi_long arg4, abi_long arg5)
3136 target_siginfo_t uinfo;
3138 print_syscall_prologue(name);
3139 print_raw_param("%d", arg0, 0);
3140 print_raw_param("%d", arg1, 0);
3141 print_signal(arg2, 0);
3142 p = lock_user(VERIFY_READ, arg3, sizeof(target_siginfo_t), 1);
3144 get_target_siginfo(&uinfo, p);
3145 print_siginfo(&uinfo);
3147 unlock_user(p, arg3, 0);
3149 print_pointer(arg3, 1);
3151 print_syscall_epilogue(name);
3155 #ifdef TARGET_NR_syslog
3157 print_syslog_action(abi_ulong arg, int last)
3162 case TARGET_SYSLOG_ACTION_CLOSE: {
3163 type = "SYSLOG_ACTION_CLOSE";
3166 case TARGET_SYSLOG_ACTION_OPEN: {
3167 type = "SYSLOG_ACTION_OPEN";
3170 case TARGET_SYSLOG_ACTION_READ: {
3171 type = "SYSLOG_ACTION_READ";
3174 case TARGET_SYSLOG_ACTION_READ_ALL: {
3175 type = "SYSLOG_ACTION_READ_ALL";
3178 case TARGET_SYSLOG_ACTION_READ_CLEAR: {
3179 type = "SYSLOG_ACTION_READ_CLEAR";
3182 case TARGET_SYSLOG_ACTION_CLEAR: {
3183 type = "SYSLOG_ACTION_CLEAR";
3186 case TARGET_SYSLOG_ACTION_CONSOLE_OFF: {
3187 type = "SYSLOG_ACTION_CONSOLE_OFF";
3190 case TARGET_SYSLOG_ACTION_CONSOLE_ON: {
3191 type = "SYSLOG_ACTION_CONSOLE_ON";
3194 case TARGET_SYSLOG_ACTION_CONSOLE_LEVEL: {
3195 type = "SYSLOG_ACTION_CONSOLE_LEVEL";
3198 case TARGET_SYSLOG_ACTION_SIZE_UNREAD: {
3199 type = "SYSLOG_ACTION_SIZE_UNREAD";
3202 case TARGET_SYSLOG_ACTION_SIZE_BUFFER: {
3203 type = "SYSLOG_ACTION_SIZE_BUFFER";
3207 print_raw_param("%ld", arg, last);
3211 qemu_log("%s%s", type, get_comma(last));
3215 print_syslog(CPUArchState *cpu_env, const struct syscallname *name,
3216 abi_long arg0, abi_long arg1, abi_long arg2,
3217 abi_long arg3, abi_long arg4, abi_long arg5)
3219 print_syscall_prologue(name);
3220 print_syslog_action(arg0, 0);
3221 print_pointer(arg1, 0);
3222 print_raw_param("%d", arg2, 1);
3223 print_syscall_epilogue(name);
3227 #ifdef TARGET_NR_mknod
3229 print_mknod(CPUArchState *cpu_env, const struct syscallname *name,
3230 abi_long arg0, abi_long arg1, abi_long arg2,
3231 abi_long arg3, abi_long arg4, abi_long arg5)
3233 int hasdev = (arg1 & (S_IFCHR|S_IFBLK));
3235 print_syscall_prologue(name);
3236 print_string(arg0, 0);
3237 print_file_mode(arg1, (hasdev == 0));
3239 print_raw_param("makedev(%d", major(arg2), 0);
3240 print_raw_param("%d)", minor(arg2), 1);
3242 print_syscall_epilogue(name);
3246 #ifdef TARGET_NR_mknodat
3248 print_mknodat(CPUArchState *cpu_env, const struct syscallname *name,
3249 abi_long arg0, abi_long arg1, abi_long arg2,
3250 abi_long arg3, abi_long arg4, abi_long arg5)
3252 int hasdev = (arg2 & (S_IFCHR|S_IFBLK));
3254 print_syscall_prologue(name);
3255 print_at_dirfd(arg0, 0);
3256 print_string(arg1, 0);
3257 print_file_mode(arg2, (hasdev == 0));
3259 print_raw_param("makedev(%d", major(arg3), 0);
3260 print_raw_param("%d)", minor(arg3), 1);
3262 print_syscall_epilogue(name);
3266 #ifdef TARGET_NR_mq_open
3268 print_mq_open(CPUArchState *cpu_env, const struct syscallname *name,
3269 abi_long arg0, abi_long arg1, abi_long arg2,
3270 abi_long arg3, abi_long arg4, abi_long arg5)
3272 int is_creat = (arg1 & TARGET_O_CREAT);
3274 print_syscall_prologue(name);
3275 print_string(arg0, 0);
3276 print_open_flags(arg1, (is_creat == 0));
3278 print_file_mode(arg2, 0);
3279 print_pointer(arg3, 1);
3281 print_syscall_epilogue(name);
3285 #ifdef TARGET_NR_open
3287 print_open(CPUArchState *cpu_env, const struct syscallname *name,
3288 abi_long arg0, abi_long arg1, abi_long arg2,
3289 abi_long arg3, abi_long arg4, abi_long arg5)
3291 int is_creat = (arg1 & TARGET_O_CREAT);
3293 print_syscall_prologue(name);
3294 print_string(arg0, 0);
3295 print_open_flags(arg1, (is_creat == 0));
3297 print_file_mode(arg2, 1);
3298 print_syscall_epilogue(name);
3302 #ifdef TARGET_NR_openat
3304 print_openat(CPUArchState *cpu_env, const struct syscallname *name,
3305 abi_long arg0, abi_long arg1, abi_long arg2,
3306 abi_long arg3, abi_long arg4, abi_long arg5)
3308 int is_creat = (arg2 & TARGET_O_CREAT);
3310 print_syscall_prologue(name);
3311 print_at_dirfd(arg0, 0);
3312 print_string(arg1, 0);
3313 print_open_flags(arg2, (is_creat == 0));
3315 print_file_mode(arg3, 1);
3316 print_syscall_epilogue(name);
3320 #ifdef TARGET_NR_pidfd_send_signal
3322 print_pidfd_send_signal(CPUArchState *cpu_env, const struct syscallname *name,
3323 abi_long arg0, abi_long arg1, abi_long arg2,
3324 abi_long arg3, abi_long arg4, abi_long arg5)
3327 target_siginfo_t uinfo;
3329 print_syscall_prologue(name);
3330 print_raw_param("%d", arg0, 0);
3331 print_signal(arg1, 0);
3333 p = lock_user(VERIFY_READ, arg2, sizeof(target_siginfo_t), 1);
3335 get_target_siginfo(&uinfo, p);
3336 print_siginfo(&uinfo);
3338 unlock_user(p, arg2, 0);
3340 print_pointer(arg2, 1);
3343 print_raw_param("%u", arg3, 0);
3344 print_syscall_epilogue(name);
3348 #ifdef TARGET_NR_mq_unlink
3350 print_mq_unlink(CPUArchState *cpu_env, const struct syscallname *name,
3351 abi_long arg0, abi_long arg1, abi_long arg2,
3352 abi_long arg3, abi_long arg4, abi_long arg5)
3354 print_syscall_prologue(name);
3355 print_string(arg0, 1);
3356 print_syscall_epilogue(name);
3360 #if defined(TARGET_NR_fstatat64) || defined(TARGET_NR_newfstatat)
3362 print_fstatat64(CPUArchState *cpu_env, const struct syscallname *name,
3363 abi_long arg0, abi_long arg1, abi_long arg2,
3364 abi_long arg3, abi_long arg4, abi_long arg5)
3366 print_syscall_prologue(name);
3367 print_at_dirfd(arg0, 0);
3368 print_string(arg1, 0);
3369 print_pointer(arg2, 0);
3370 print_flags(at_file_flags, arg3, 1);
3371 print_syscall_epilogue(name);
3373 #define print_newfstatat print_fstatat64
3376 #ifdef TARGET_NR_readlink
3378 print_readlink(CPUArchState *cpu_env, const struct syscallname *name,
3379 abi_long arg0, abi_long arg1, abi_long arg2,
3380 abi_long arg3, abi_long arg4, abi_long arg5)
3382 print_syscall_prologue(name);
3383 print_string(arg0, 0);
3384 print_pointer(arg1, 0);
3385 print_raw_param("%u", arg2, 1);
3386 print_syscall_epilogue(name);
3390 #ifdef TARGET_NR_readlinkat
3392 print_readlinkat(CPUArchState *cpu_env, const struct syscallname *name,
3393 abi_long arg0, abi_long arg1, abi_long arg2,
3394 abi_long arg3, abi_long arg4, abi_long arg5)
3396 print_syscall_prologue(name);
3397 print_at_dirfd(arg0, 0);
3398 print_string(arg1, 0);
3399 print_pointer(arg2, 0);
3400 print_raw_param("%u", arg3, 1);
3401 print_syscall_epilogue(name);
3405 #ifdef TARGET_NR_rename
3407 print_rename(CPUArchState *cpu_env, const struct syscallname *name,
3408 abi_long arg0, abi_long arg1, abi_long arg2,
3409 abi_long arg3, abi_long arg4, abi_long arg5)
3411 print_syscall_prologue(name);
3412 print_string(arg0, 0);
3413 print_string(arg1, 1);
3414 print_syscall_epilogue(name);
3418 #ifdef TARGET_NR_renameat
3420 print_renameat(CPUArchState *cpu_env, const struct syscallname *name,
3421 abi_long arg0, abi_long arg1, abi_long arg2,
3422 abi_long arg3, abi_long arg4, abi_long arg5)
3424 print_syscall_prologue(name);
3425 print_at_dirfd(arg0, 0);
3426 print_string(arg1, 0);
3427 print_at_dirfd(arg2, 0);
3428 print_string(arg3, 1);
3429 print_syscall_epilogue(name);
3433 #ifdef TARGET_NR_statfs
3435 print_statfs(CPUArchState *cpu_env, const struct syscallname *name,
3436 abi_long arg0, abi_long arg1, abi_long arg2,
3437 abi_long arg3, abi_long arg4, abi_long arg5)
3439 print_syscall_prologue(name);
3440 print_string(arg0, 0);
3441 print_pointer(arg1, 1);
3442 print_syscall_epilogue(name);
3446 #ifdef TARGET_NR_statfs64
3448 print_statfs64(CPUArchState *cpu_env, const struct syscallname *name,
3449 abi_long arg0, abi_long arg1, abi_long arg2,
3450 abi_long arg3, abi_long arg4, abi_long arg5)
3452 print_syscall_prologue(name);
3453 print_string(arg0, 0);
3454 print_pointer(arg1, 1);
3455 print_syscall_epilogue(name);
3459 #ifdef TARGET_NR_symlink
3461 print_symlink(CPUArchState *cpu_env, const struct syscallname *name,
3462 abi_long arg0, abi_long arg1, abi_long arg2,
3463 abi_long arg3, abi_long arg4, abi_long arg5)
3465 print_syscall_prologue(name);
3466 print_string(arg0, 0);
3467 print_string(arg1, 1);
3468 print_syscall_epilogue(name);
3472 #ifdef TARGET_NR_symlinkat
3474 print_symlinkat(CPUArchState *cpu_env, const struct syscallname *name,
3475 abi_long arg0, abi_long arg1, abi_long arg2,
3476 abi_long arg3, abi_long arg4, abi_long arg5)
3478 print_syscall_prologue(name);
3479 print_string(arg0, 0);
3480 print_at_dirfd(arg1, 0);
3481 print_string(arg2, 1);
3482 print_syscall_epilogue(name);
3486 #ifdef TARGET_NR_mount
3488 print_mount(CPUArchState *cpu_env, const struct syscallname *name,
3489 abi_long arg0, abi_long arg1, abi_long arg2,
3490 abi_long arg3, abi_long arg4, abi_long arg5)
3492 print_syscall_prologue(name);
3493 print_string(arg0, 0);
3494 print_string(arg1, 0);
3495 print_string(arg2, 0);
3496 print_flags(mount_flags, arg3, 0);
3497 print_pointer(arg4, 1);
3498 print_syscall_epilogue(name);
3502 #ifdef TARGET_NR_umount
3504 print_umount(CPUArchState *cpu_env, const struct syscallname *name,
3505 abi_long arg0, abi_long arg1, abi_long arg2,
3506 abi_long arg3, abi_long arg4, abi_long arg5)
3508 print_syscall_prologue(name);
3509 print_string(arg0, 1);
3510 print_syscall_epilogue(name);
3514 #ifdef TARGET_NR_umount2
3516 print_umount2(CPUArchState *cpu_env, const struct syscallname *name,
3517 abi_long arg0, abi_long arg1, abi_long arg2,
3518 abi_long arg3, abi_long arg4, abi_long arg5)
3520 print_syscall_prologue(name);
3521 print_string(arg0, 0);
3522 print_flags(umount2_flags, arg1, 1);
3523 print_syscall_epilogue(name);
3527 #ifdef TARGET_NR_unlink
3529 print_unlink(CPUArchState *cpu_env, const struct syscallname *name,
3530 abi_long arg0, abi_long arg1, abi_long arg2,
3531 abi_long arg3, abi_long arg4, abi_long arg5)
3533 print_syscall_prologue(name);
3534 print_string(arg0, 1);
3535 print_syscall_epilogue(name);
3539 #ifdef TARGET_NR_unlinkat
3541 print_unlinkat(CPUArchState *cpu_env, const struct syscallname *name,
3542 abi_long arg0, abi_long arg1, abi_long arg2,
3543 abi_long arg3, abi_long arg4, abi_long arg5)
3545 print_syscall_prologue(name);
3546 print_at_dirfd(arg0, 0);
3547 print_string(arg1, 0);
3548 print_flags(unlinkat_flags, arg2, 1);
3549 print_syscall_epilogue(name);
3553 #ifdef TARGET_NR_unshare
3555 print_unshare(CPUArchState *cpu_env, const struct syscallname *name,
3556 abi_long arg0, abi_long arg1, abi_long arg2,
3557 abi_long arg3, abi_long arg4, abi_long arg5)
3559 print_syscall_prologue(name);
3560 print_flags(clone_flags, arg0, 1);
3561 print_syscall_epilogue(name);
3565 #ifdef TARGET_NR_utime
3567 print_utime(CPUArchState *cpu_env, const struct syscallname *name,
3568 abi_long arg0, abi_long arg1, abi_long arg2,
3569 abi_long arg3, abi_long arg4, abi_long arg5)
3571 print_syscall_prologue(name);
3572 print_string(arg0, 0);
3573 print_pointer(arg1, 1);
3574 print_syscall_epilogue(name);
3578 #ifdef TARGET_NR_utimes
3580 print_utimes(CPUArchState *cpu_env, const struct syscallname *name,
3581 abi_long arg0, abi_long arg1, abi_long arg2,
3582 abi_long arg3, abi_long arg4, abi_long arg5)
3584 print_syscall_prologue(name);
3585 print_string(arg0, 0);
3586 print_pointer(arg1, 1);
3587 print_syscall_epilogue(name);
3591 #ifdef TARGET_NR_utimensat
3593 print_utimensat(CPUArchState *cpu_env, const struct syscallname *name,
3594 abi_long arg0, abi_long arg1, abi_long arg2,
3595 abi_long arg3, abi_long arg4, abi_long arg5)
3597 print_syscall_prologue(name);
3598 print_at_dirfd(arg0, 0);
3599 print_string(arg1, 0);
3600 print_pointer(arg2, 0);
3601 print_flags(at_file_flags, arg3, 1);
3602 print_syscall_epilogue(name);
3606 #if defined(TARGET_NR_mmap) || defined(TARGET_NR_mmap2)
3608 print_mmap(CPUArchState *cpu_env, const struct syscallname *name,
3609 abi_long arg0, abi_long arg1, abi_long arg2,
3610 abi_long arg3, abi_long arg4, abi_long arg5)
3612 print_syscall_prologue(name);
3613 print_pointer(arg0, 0);
3614 print_raw_param("%d", arg1, 0);
3615 print_flags(mmap_prot_flags, arg2, 0);
3616 print_flags(mmap_flags, arg3, 0);
3617 print_raw_param("%d", arg4, 0);
3618 print_raw_param("%#x", arg5, 1);
3619 print_syscall_epilogue(name);
3621 #define print_mmap2 print_mmap
3624 #ifdef TARGET_NR_mprotect
3626 print_mprotect(CPUArchState *cpu_env, const struct syscallname *name,
3627 abi_long arg0, abi_long arg1, abi_long arg2,
3628 abi_long arg3, abi_long arg4, abi_long arg5)
3630 print_syscall_prologue(name);
3631 print_pointer(arg0, 0);
3632 print_raw_param("%d", arg1, 0);
3633 print_flags(mmap_prot_flags, arg2, 1);
3634 print_syscall_epilogue(name);
3638 #ifdef TARGET_NR_munmap
3640 print_munmap(CPUArchState *cpu_env, const struct syscallname *name,
3641 abi_long arg0, abi_long arg1, abi_long arg2,
3642 abi_long arg3, abi_long arg4, abi_long arg5)
3644 print_syscall_prologue(name);
3645 print_pointer(arg0, 0);
3646 print_raw_param("%d", arg1, 1);
3647 print_syscall_epilogue(name);
3651 #ifdef TARGET_NR_futex
3652 static void print_futex_op(abi_long tflag, int last)
3654 #define print_op(val) \
3655 if( cmd == val ) { \
3660 int cmd = (int)tflag;
3661 #ifdef FUTEX_PRIVATE_FLAG
3662 if (cmd & FUTEX_PRIVATE_FLAG) {
3663 qemu_log("FUTEX_PRIVATE_FLAG|");
3664 cmd &= ~FUTEX_PRIVATE_FLAG;
3667 #ifdef FUTEX_CLOCK_REALTIME
3668 if (cmd & FUTEX_CLOCK_REALTIME) {
3669 qemu_log("FUTEX_CLOCK_REALTIME|");
3670 cmd &= ~FUTEX_CLOCK_REALTIME;
3673 print_op(FUTEX_WAIT)
3674 print_op(FUTEX_WAKE)
3676 print_op(FUTEX_REQUEUE)
3677 print_op(FUTEX_CMP_REQUEUE)
3678 print_op(FUTEX_WAKE_OP)
3679 print_op(FUTEX_LOCK_PI)
3680 print_op(FUTEX_UNLOCK_PI)
3681 print_op(FUTEX_TRYLOCK_PI)
3682 #ifdef FUTEX_WAIT_BITSET
3683 print_op(FUTEX_WAIT_BITSET)
3685 #ifdef FUTEX_WAKE_BITSET
3686 print_op(FUTEX_WAKE_BITSET)
3688 /* unknown values */
3689 qemu_log("%d", cmd);
3693 print_futex(CPUArchState *cpu_env, const struct syscallname *name,
3694 abi_long arg0, abi_long arg1, abi_long arg2,
3695 abi_long arg3, abi_long arg4, abi_long arg5)
3697 print_syscall_prologue(name);
3698 print_pointer(arg0, 0);
3699 print_futex_op(arg1, 0);
3700 print_raw_param(",%d", arg2, 0);
3701 print_pointer(arg3, 0); /* struct timespec */
3702 print_pointer(arg4, 0);
3703 print_raw_param("%d", arg4, 1);
3704 print_syscall_epilogue(name);
3708 #ifdef TARGET_NR_kill
3710 print_kill(CPUArchState *cpu_env, const struct syscallname *name,
3711 abi_long arg0, abi_long arg1, abi_long arg2,
3712 abi_long arg3, abi_long arg4, abi_long arg5)
3714 print_syscall_prologue(name);
3715 print_raw_param("%d", arg0, 0);
3716 print_signal(arg1, 1);
3717 print_syscall_epilogue(name);
3721 #ifdef TARGET_NR_tkill
3723 print_tkill(CPUArchState *cpu_env, const struct syscallname *name,
3724 abi_long arg0, abi_long arg1, abi_long arg2,
3725 abi_long arg3, abi_long arg4, abi_long arg5)
3727 print_syscall_prologue(name);
3728 print_raw_param("%d", arg0, 0);
3729 print_signal(arg1, 1);
3730 print_syscall_epilogue(name);
3734 #ifdef TARGET_NR_tgkill
3736 print_tgkill(CPUArchState *cpu_env, const struct syscallname *name,
3737 abi_long arg0, abi_long arg1, abi_long arg2,
3738 abi_long arg3, abi_long arg4, abi_long arg5)
3740 print_syscall_prologue(name);
3741 print_raw_param("%d", arg0, 0);
3742 print_raw_param("%d", arg1, 0);
3743 print_signal(arg2, 1);
3744 print_syscall_epilogue(name);
3748 #ifdef TARGET_NR_statx
3750 print_statx(CPUArchState *cpu_env, const struct syscallname *name,
3751 abi_long arg0, abi_long arg1, abi_long arg2,
3752 abi_long arg3, abi_long arg4, abi_long arg5)
3754 print_syscall_prologue(name);
3755 print_at_dirfd(arg0, 0);
3756 print_string(arg1, 0);
3757 print_flags(statx_flags, arg2, 0);
3758 print_flags(statx_mask, arg3, 0);
3759 print_pointer(arg4, 1);
3760 print_syscall_epilogue(name);
3764 #ifdef TARGET_NR_ioctl
3766 print_ioctl(CPUArchState *cpu_env, const struct syscallname *name,
3767 abi_long arg0, abi_long arg1, abi_long arg2,
3768 abi_long arg3, abi_long arg4, abi_long arg5)
3770 print_syscall_prologue(name);
3771 print_raw_param("%d", arg0, 0);
3773 const IOCTLEntry *ie;
3774 const argtype *arg_type;
3778 for (ie = ioctl_entries; ie->target_cmd != 0; ie++) {
3779 if (ie->target_cmd == arg1) {
3784 if (ie->target_cmd == 0) {
3785 print_raw_param("%#x", arg1, 0);
3786 print_raw_param("%#x", arg2, 1);
3788 qemu_log("%s", ie->name);
3789 arg_type = ie->arg_type;
3791 if (arg_type[0] != TYPE_NULL) {
3794 switch (arg_type[0]) {
3796 print_pointer(arg2, 1);
3801 print_raw_param("%d", arg2, 1);
3804 print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
3807 print_raw_param(TARGET_ABI_FMT_lu, arg2, 1);
3810 switch (ie->access) {
3812 print_pointer(arg2, 1);
3817 target_size = thunk_type_size(arg_type, 0);
3818 argptr = lock_user(VERIFY_READ, arg2, target_size, 1);
3820 thunk_print(argptr, arg_type);
3821 unlock_user(argptr, arg2, target_size);
3823 print_pointer(arg2, 1);
3829 g_assert_not_reached();
3833 print_syscall_epilogue(name);
3838 * An array of all of the syscalls we know about
3841 static const struct syscallname scnames[] = {
3842 #include "strace.list"
3845 static int nsyscalls = ARRAY_SIZE(scnames);
3848 * The public interface to this module.
3851 print_syscall(CPUArchState *cpu_env, int num,
3852 abi_long arg1, abi_long arg2, abi_long arg3,
3853 abi_long arg4, abi_long arg5, abi_long arg6)
3856 const char *format="%s(" TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ")";
3858 qemu_log("%d ", getpid());
3860 for(i=0;i<nsyscalls;i++)
3861 if( scnames[i].nr == num ) {
3862 if( scnames[i].call != NULL ) {
3864 cpu_env, &scnames[i], arg1, arg2, arg3, arg4, arg5, arg6);
3866 /* XXX: this format system is broken because it uses
3867 host types and host pointers for strings */
3868 if( scnames[i].format != NULL )
3869 format = scnames[i].format;
3871 scnames[i].name, arg1, arg2, arg3, arg4, arg5, arg6);
3875 qemu_log("Unknown syscall %d\n", num);
3880 print_syscall_ret(CPUArchState *cpu_env, int num, abi_long ret,
3881 abi_long arg1, abi_long arg2, abi_long arg3,
3882 abi_long arg4, abi_long arg5, abi_long arg6)
3886 for(i=0;i<nsyscalls;i++)
3887 if( scnames[i].nr == num ) {
3888 if( scnames[i].result != NULL ) {
3889 scnames[i].result(cpu_env, &scnames[i], ret,
3893 if (!print_syscall_err(ret)) {
3894 qemu_log(TARGET_ABI_FMT_ld, ret);
3902 void print_taken_signal(int target_signum, const target_siginfo_t *tinfo)
3904 /* Print the strace output for a signal being taken:
3905 * --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=0} ---
3908 print_signal(target_signum, 1);
3910 print_siginfo(tinfo);