]> Git Repo - qemu.git/blob - linux-user/strace.c
linux-user: Add strace support for printing arguments of fallocate()
[qemu.git] / linux-user / strace.c
1 #include "qemu/osdep.h"
2 #include <sys/ipc.h>
3 #include <sys/msg.h>
4 #include <sys/sem.h>
5 #include <sys/shm.h>
6 #include <sys/select.h>
7 #include <sys/mount.h>
8 #include <arpa/inet.h>
9 #include <netinet/tcp.h>
10 #include <linux/if_packet.h>
11 #include <linux/netlink.h>
12 #include <sched.h>
13 #include "qemu.h"
14
15 struct syscallname {
16     int nr;
17     const char *name;
18     const char *format;
19     void (*call)(const struct syscallname *,
20                  abi_long, abi_long, abi_long,
21                  abi_long, abi_long, abi_long);
22     void (*result)(const struct syscallname *, abi_long,
23                    abi_long, abi_long, abi_long,
24                    abi_long, abi_long, abi_long);
25 };
26
27 #ifdef __GNUC__
28 /*
29  * It is possible that target doesn't have syscall that uses
30  * following flags but we don't want the compiler to warn
31  * us about them being unused.  Same applies to utility print
32  * functions.  It is ok to keep them while not used.
33  */
34 #define UNUSED __attribute__ ((unused))
35 #else
36 #define UNUSED
37 #endif
38
39 /*
40  * Structure used to translate flag values into strings.  This is
41  * similar that is in the actual strace tool.
42  */
43 struct flags {
44     abi_long    f_value;  /* flag */
45     const char  *f_string; /* stringified flag */
46 };
47
48 /* common flags for all architectures */
49 #define FLAG_GENERIC(name) { name, #name }
50 /* target specific flags (syscall_defs.h has TARGET_<flag>) */
51 #define FLAG_TARGET(name)  { TARGET_ ## name, #name }
52 /* end of flags array */
53 #define FLAG_END           { 0, NULL }
54
55 UNUSED static const char *get_comma(int);
56 UNUSED static void print_pointer(abi_long, int);
57 UNUSED static void print_flags(const struct flags *, abi_long, int);
58 UNUSED static void print_at_dirfd(abi_long, int);
59 UNUSED static void print_file_mode(abi_long, int);
60 UNUSED static void print_open_flags(abi_long, int);
61 UNUSED static void print_syscall_prologue(const struct syscallname *);
62 UNUSED static void print_syscall_epilogue(const struct syscallname *);
63 UNUSED static void print_string(abi_long, int);
64 UNUSED static void print_buf(abi_long addr, abi_long len, int last);
65 UNUSED static void print_raw_param(const char *, abi_long, int);
66 UNUSED static void print_timeval(abi_ulong, int);
67 UNUSED static void print_timezone(abi_ulong, int);
68 UNUSED static void print_number(abi_long, int);
69 UNUSED static void print_signal(abi_ulong, int);
70 UNUSED static void print_sockaddr(abi_ulong, abi_long, int);
71 UNUSED static void print_socket_domain(int domain);
72 UNUSED static void print_socket_type(int type);
73 UNUSED static void print_socket_protocol(int domain, int type, int protocol);
74
75 /*
76  * Utility functions
77  */
78 static void
79 print_ipc_cmd(int cmd)
80 {
81 #define output_cmd(val) \
82 if( cmd == val ) { \
83     qemu_log(#val); \
84     return; \
85 }
86
87     cmd &= 0xff;
88
89     /* General IPC commands */
90     output_cmd( IPC_RMID );
91     output_cmd( IPC_SET );
92     output_cmd( IPC_STAT );
93     output_cmd( IPC_INFO );
94     /* msgctl() commands */
95     output_cmd( MSG_STAT );
96     output_cmd( MSG_INFO );
97     /* shmctl() commands */
98     output_cmd( SHM_LOCK );
99     output_cmd( SHM_UNLOCK );
100     output_cmd( SHM_STAT );
101     output_cmd( SHM_INFO );
102     /* semctl() commands */
103     output_cmd( GETPID );
104     output_cmd( GETVAL );
105     output_cmd( GETALL );
106     output_cmd( GETNCNT );
107     output_cmd( GETZCNT );
108     output_cmd( SETVAL );
109     output_cmd( SETALL );
110     output_cmd( SEM_STAT );
111     output_cmd( SEM_INFO );
112     output_cmd( IPC_RMID );
113     output_cmd( IPC_RMID );
114     output_cmd( IPC_RMID );
115     output_cmd( IPC_RMID );
116     output_cmd( IPC_RMID );
117     output_cmd( IPC_RMID );
118     output_cmd( IPC_RMID );
119     output_cmd( IPC_RMID );
120     output_cmd( IPC_RMID );
121
122     /* Some value we don't recognize */
123     qemu_log("%d", cmd);
124 }
125
126 static void
127 print_signal(abi_ulong arg, int last)
128 {
129     const char *signal_name = NULL;
130     switch(arg) {
131     case TARGET_SIGHUP: signal_name = "SIGHUP"; break;
132     case TARGET_SIGINT: signal_name = "SIGINT"; break;
133     case TARGET_SIGQUIT: signal_name = "SIGQUIT"; break;
134     case TARGET_SIGILL: signal_name = "SIGILL"; break;
135     case TARGET_SIGABRT: signal_name = "SIGABRT"; break;
136     case TARGET_SIGFPE: signal_name = "SIGFPE"; break;
137     case TARGET_SIGKILL: signal_name = "SIGKILL"; break;
138     case TARGET_SIGSEGV: signal_name = "SIGSEGV"; break;
139     case TARGET_SIGPIPE: signal_name = "SIGPIPE"; break;
140     case TARGET_SIGALRM: signal_name = "SIGALRM"; break;
141     case TARGET_SIGTERM: signal_name = "SIGTERM"; break;
142     case TARGET_SIGUSR1: signal_name = "SIGUSR1"; break;
143     case TARGET_SIGUSR2: signal_name = "SIGUSR2"; break;
144     case TARGET_SIGCHLD: signal_name = "SIGCHLD"; break;
145     case TARGET_SIGCONT: signal_name = "SIGCONT"; break;
146     case TARGET_SIGSTOP: signal_name = "SIGSTOP"; break;
147     case TARGET_SIGTTIN: signal_name = "SIGTTIN"; break;
148     case TARGET_SIGTTOU: signal_name = "SIGTTOU"; break;
149     }
150     if (signal_name == NULL) {
151         print_raw_param("%ld", arg, last);
152         return;
153     }
154     qemu_log("%s%s", signal_name, get_comma(last));
155 }
156
157 static void print_si_code(int arg)
158 {
159     const char *codename = NULL;
160
161     switch (arg) {
162     case SI_USER:
163         codename = "SI_USER";
164         break;
165     case SI_KERNEL:
166         codename = "SI_KERNEL";
167         break;
168     case SI_QUEUE:
169         codename = "SI_QUEUE";
170         break;
171     case SI_TIMER:
172         codename = "SI_TIMER";
173         break;
174     case SI_MESGQ:
175         codename = "SI_MESGQ";
176         break;
177     case SI_ASYNCIO:
178         codename = "SI_ASYNCIO";
179         break;
180     case SI_SIGIO:
181         codename = "SI_SIGIO";
182         break;
183     case SI_TKILL:
184         codename = "SI_TKILL";
185         break;
186     default:
187         qemu_log("%d", arg);
188         return;
189     }
190     qemu_log("%s", codename);
191 }
192
193 static void get_target_siginfo(target_siginfo_t *tinfo,
194                                 const target_siginfo_t *info)
195 {
196     abi_ulong sival_ptr;
197
198     int sig;
199     int si_errno;
200     int si_code;
201     int si_type;
202
203     __get_user(sig, &info->si_signo);
204     __get_user(si_errno, &tinfo->si_errno);
205     __get_user(si_code, &info->si_code);
206
207     tinfo->si_signo = sig;
208     tinfo->si_errno = si_errno;
209     tinfo->si_code = si_code;
210
211     /* Ensure we don't leak random junk to the guest later */
212     memset(tinfo->_sifields._pad, 0, sizeof(tinfo->_sifields._pad));
213
214     /* This is awkward, because we have to use a combination of
215      * the si_code and si_signo to figure out which of the union's
216      * members are valid. (Within the host kernel it is always possible
217      * to tell, but the kernel carefully avoids giving userspace the
218      * high 16 bits of si_code, so we don't have the information to
219      * do this the easy way...) We therefore make our best guess,
220      * bearing in mind that a guest can spoof most of the si_codes
221      * via rt_sigqueueinfo() if it likes.
222      *
223      * Once we have made our guess, we record it in the top 16 bits of
224      * the si_code, so that print_siginfo() later can use it.
225      * print_siginfo() will strip these top bits out before printing
226      * the si_code.
227      */
228
229     switch (si_code) {
230     case SI_USER:
231     case SI_TKILL:
232     case SI_KERNEL:
233         /* Sent via kill(), tkill() or tgkill(), or direct from the kernel.
234          * These are the only unspoofable si_code values.
235          */
236         __get_user(tinfo->_sifields._kill._pid, &info->_sifields._kill._pid);
237         __get_user(tinfo->_sifields._kill._uid, &info->_sifields._kill._uid);
238         si_type = QEMU_SI_KILL;
239         break;
240     default:
241         /* Everything else is spoofable. Make best guess based on signal */
242         switch (sig) {
243         case TARGET_SIGCHLD:
244             __get_user(tinfo->_sifields._sigchld._pid,
245                        &info->_sifields._sigchld._pid);
246             __get_user(tinfo->_sifields._sigchld._uid,
247                        &info->_sifields._sigchld._uid);
248             __get_user(tinfo->_sifields._sigchld._status,
249                        &info->_sifields._sigchld._status);
250             __get_user(tinfo->_sifields._sigchld._utime,
251                        &info->_sifields._sigchld._utime);
252             __get_user(tinfo->_sifields._sigchld._stime,
253                        &info->_sifields._sigchld._stime);
254             si_type = QEMU_SI_CHLD;
255             break;
256         case TARGET_SIGIO:
257             __get_user(tinfo->_sifields._sigpoll._band,
258                        &info->_sifields._sigpoll._band);
259             __get_user(tinfo->_sifields._sigpoll._fd,
260                        &info->_sifields._sigpoll._fd);
261             si_type = QEMU_SI_POLL;
262             break;
263         default:
264             /* Assume a sigqueue()/mq_notify()/rt_sigqueueinfo() source. */
265             __get_user(tinfo->_sifields._rt._pid, &info->_sifields._rt._pid);
266             __get_user(tinfo->_sifields._rt._uid, &info->_sifields._rt._uid);
267             /* XXX: potential problem if 64 bit */
268             __get_user(sival_ptr, &info->_sifields._rt._sigval.sival_ptr);
269             tinfo->_sifields._rt._sigval.sival_ptr = sival_ptr;
270
271             si_type = QEMU_SI_RT;
272             break;
273         }
274         break;
275     }
276
277     tinfo->si_code = deposit32(si_code, 16, 16, si_type);
278 }
279
280 static void print_siginfo(const target_siginfo_t *tinfo)
281 {
282     /* Print a target_siginfo_t in the format desired for printing
283      * signals being taken. We assume the target_siginfo_t is in the
284      * internal form where the top 16 bits of si_code indicate which
285      * part of the union is valid, rather than in the guest-visible
286      * form where the bottom 16 bits are sign-extended into the top 16.
287      */
288     int si_type = extract32(tinfo->si_code, 16, 16);
289     int si_code = sextract32(tinfo->si_code, 0, 16);
290
291     qemu_log("{si_signo=");
292     print_signal(tinfo->si_signo, 1);
293     qemu_log(", si_code=");
294     print_si_code(si_code);
295
296     switch (si_type) {
297     case QEMU_SI_KILL:
298         qemu_log(", si_pid=%u, si_uid=%u",
299                  (unsigned int)tinfo->_sifields._kill._pid,
300                  (unsigned int)tinfo->_sifields._kill._uid);
301         break;
302     case QEMU_SI_TIMER:
303         qemu_log(", si_timer1=%u, si_timer2=%u",
304                  tinfo->_sifields._timer._timer1,
305                  tinfo->_sifields._timer._timer2);
306         break;
307     case QEMU_SI_POLL:
308         qemu_log(", si_band=%d, si_fd=%d",
309                  tinfo->_sifields._sigpoll._band,
310                  tinfo->_sifields._sigpoll._fd);
311         break;
312     case QEMU_SI_FAULT:
313         qemu_log(", si_addr=");
314         print_pointer(tinfo->_sifields._sigfault._addr, 1);
315         break;
316     case QEMU_SI_CHLD:
317         qemu_log(", si_pid=%u, si_uid=%u, si_status=%d"
318                  ", si_utime=" TARGET_ABI_FMT_ld
319                  ", si_stime=" TARGET_ABI_FMT_ld,
320                  (unsigned int)(tinfo->_sifields._sigchld._pid),
321                  (unsigned int)(tinfo->_sifields._sigchld._uid),
322                  tinfo->_sifields._sigchld._status,
323                  tinfo->_sifields._sigchld._utime,
324                  tinfo->_sifields._sigchld._stime);
325         break;
326     case QEMU_SI_RT:
327         qemu_log(", si_pid=%u, si_uid=%u, si_sigval=" TARGET_ABI_FMT_ld,
328                  (unsigned int)tinfo->_sifields._rt._pid,
329                  (unsigned int)tinfo->_sifields._rt._uid,
330                  tinfo->_sifields._rt._sigval.sival_ptr);
331         break;
332     default:
333         g_assert_not_reached();
334     }
335     qemu_log("}");
336 }
337
338 static void
339 print_sockaddr(abi_ulong addr, abi_long addrlen, int last)
340 {
341     struct target_sockaddr *sa;
342     int i;
343     int sa_family;
344
345     sa = lock_user(VERIFY_READ, addr, addrlen, 1);
346     if (sa) {
347         sa_family = tswap16(sa->sa_family);
348         switch (sa_family) {
349         case AF_UNIX: {
350             struct target_sockaddr_un *un = (struct target_sockaddr_un *)sa;
351             int i;
352             qemu_log("{sun_family=AF_UNIX,sun_path=\"");
353             for (i = 0; i < addrlen -
354                             offsetof(struct target_sockaddr_un, sun_path) &&
355                  un->sun_path[i]; i++) {
356                 qemu_log("%c", un->sun_path[i]);
357             }
358             qemu_log("\"}");
359             break;
360         }
361         case AF_INET: {
362             struct target_sockaddr_in *in = (struct target_sockaddr_in *)sa;
363             uint8_t *c = (uint8_t *)&in->sin_addr.s_addr;
364             qemu_log("{sin_family=AF_INET,sin_port=htons(%d),",
365                      ntohs(in->sin_port));
366             qemu_log("sin_addr=inet_addr(\"%d.%d.%d.%d\")",
367                      c[0], c[1], c[2], c[3]);
368             qemu_log("}");
369             break;
370         }
371         case AF_PACKET: {
372             struct target_sockaddr_ll *ll = (struct target_sockaddr_ll *)sa;
373             uint8_t *c = (uint8_t *)&ll->sll_addr;
374             qemu_log("{sll_family=AF_PACKET,"
375                      "sll_protocol=htons(0x%04x),if%d,pkttype=",
376                      ntohs(ll->sll_protocol), ll->sll_ifindex);
377             switch (ll->sll_pkttype) {
378             case PACKET_HOST:
379                 qemu_log("PACKET_HOST");
380                 break;
381             case PACKET_BROADCAST:
382                 qemu_log("PACKET_BROADCAST");
383                 break;
384             case PACKET_MULTICAST:
385                 qemu_log("PACKET_MULTICAST");
386                 break;
387             case PACKET_OTHERHOST:
388                 qemu_log("PACKET_OTHERHOST");
389                 break;
390             case PACKET_OUTGOING:
391                 qemu_log("PACKET_OUTGOING");
392                 break;
393             default:
394                 qemu_log("%d", ll->sll_pkttype);
395                 break;
396             }
397             qemu_log(",sll_addr=%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
398                      c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7]);
399             qemu_log("}");
400             break;
401         }
402         case AF_NETLINK: {
403             struct target_sockaddr_nl *nl = (struct target_sockaddr_nl *)sa;
404             qemu_log("{nl_family=AF_NETLINK,nl_pid=%u,nl_groups=%u}",
405                      tswap32(nl->nl_pid), tswap32(nl->nl_groups));
406             break;
407         }
408         default:
409             qemu_log("{sa_family=%d, sa_data={", sa->sa_family);
410             for (i = 0; i < 13; i++) {
411                 qemu_log("%02x, ", sa->sa_data[i]);
412             }
413             qemu_log("%02x}", sa->sa_data[i]);
414             qemu_log("}");
415             break;
416         }
417         unlock_user(sa, addr, 0);
418     } else {
419         print_raw_param("0x"TARGET_ABI_FMT_lx, addr, 0);
420     }
421     qemu_log(", "TARGET_ABI_FMT_ld"%s", addrlen, get_comma(last));
422 }
423
424 static void
425 print_socket_domain(int domain)
426 {
427     switch (domain) {
428     case PF_UNIX:
429         qemu_log("PF_UNIX");
430         break;
431     case PF_INET:
432         qemu_log("PF_INET");
433         break;
434     case PF_NETLINK:
435         qemu_log("PF_NETLINK");
436         break;
437     case PF_PACKET:
438         qemu_log("PF_PACKET");
439         break;
440     default:
441         qemu_log("%d", domain);
442         break;
443     }
444 }
445
446 static void
447 print_socket_type(int type)
448 {
449     switch (type & TARGET_SOCK_TYPE_MASK) {
450     case TARGET_SOCK_DGRAM:
451         qemu_log("SOCK_DGRAM");
452         break;
453     case TARGET_SOCK_STREAM:
454         qemu_log("SOCK_STREAM");
455         break;
456     case TARGET_SOCK_RAW:
457         qemu_log("SOCK_RAW");
458         break;
459     case TARGET_SOCK_RDM:
460         qemu_log("SOCK_RDM");
461         break;
462     case TARGET_SOCK_SEQPACKET:
463         qemu_log("SOCK_SEQPACKET");
464         break;
465     case TARGET_SOCK_PACKET:
466         qemu_log("SOCK_PACKET");
467         break;
468     }
469     if (type & TARGET_SOCK_CLOEXEC) {
470         qemu_log("|SOCK_CLOEXEC");
471     }
472     if (type & TARGET_SOCK_NONBLOCK) {
473         qemu_log("|SOCK_NONBLOCK");
474     }
475 }
476
477 static void
478 print_socket_protocol(int domain, int type, int protocol)
479 {
480     if (domain == AF_PACKET ||
481         (domain == AF_INET && type == TARGET_SOCK_PACKET)) {
482         switch (protocol) {
483         case 0x0003:
484             qemu_log("ETH_P_ALL");
485             break;
486         default:
487             qemu_log("%d", protocol);
488         }
489         return;
490     }
491
492     if (domain == PF_NETLINK) {
493         switch (protocol) {
494         case NETLINK_ROUTE:
495             qemu_log("NETLINK_ROUTE");
496             break;
497         case NETLINK_AUDIT:
498             qemu_log("NETLINK_AUDIT");
499             break;
500         case NETLINK_NETFILTER:
501             qemu_log("NETLINK_NETFILTER");
502             break;
503         case NETLINK_KOBJECT_UEVENT:
504             qemu_log("NETLINK_KOBJECT_UEVENT");
505             break;
506         case NETLINK_RDMA:
507             qemu_log("NETLINK_RDMA");
508             break;
509         case NETLINK_CRYPTO:
510             qemu_log("NETLINK_CRYPTO");
511             break;
512         default:
513             qemu_log("%d", protocol);
514             break;
515         }
516         return;
517     }
518
519     switch (protocol) {
520     case IPPROTO_IP:
521         qemu_log("IPPROTO_IP");
522         break;
523     case IPPROTO_TCP:
524         qemu_log("IPPROTO_TCP");
525         break;
526     case IPPROTO_UDP:
527         qemu_log("IPPROTO_UDP");
528         break;
529     case IPPROTO_RAW:
530         qemu_log("IPPROTO_RAW");
531         break;
532     default:
533         qemu_log("%d", protocol);
534         break;
535     }
536 }
537
538
539 #ifdef TARGET_NR__newselect
540 static void
541 print_fdset(int n, abi_ulong target_fds_addr)
542 {
543     int i;
544
545     qemu_log("[");
546     if( target_fds_addr ) {
547         abi_long *target_fds;
548
549         target_fds = lock_user(VERIFY_READ,
550                                target_fds_addr,
551                                sizeof(*target_fds)*(n / TARGET_ABI_BITS + 1),
552                                1);
553
554         if (!target_fds)
555             return;
556
557         for (i=n; i>=0; i--) {
558             if ((tswapal(target_fds[i / TARGET_ABI_BITS]) >> (i & (TARGET_ABI_BITS - 1))) & 1)
559                 qemu_log("%d,", i);
560             }
561         unlock_user(target_fds, target_fds_addr, 0);
562     }
563     qemu_log("]");
564 }
565 #endif
566
567 #ifdef TARGET_NR_clock_adjtime
568 /* IDs of the various system clocks */
569 #define TARGET_CLOCK_REALTIME              0
570 #define TARGET_CLOCK_MONOTONIC             1
571 #define TARGET_CLOCK_PROCESS_CPUTIME_ID    2
572 #define TARGET_CLOCK_THREAD_CPUTIME_ID     3
573 #define TARGET_CLOCK_MONOTONIC_RAW         4
574 #define TARGET_CLOCK_REALTIME_COARSE       5
575 #define TARGET_CLOCK_MONOTONIC_COARSE      6
576 #define TARGET_CLOCK_BOOTTIME              7
577 #define TARGET_CLOCK_REALTIME_ALARM        8
578 #define TARGET_CLOCK_BOOTTIME_ALARM        9
579 #define TARGET_CLOCK_SGI_CYCLE             10
580 #define TARGET_CLOCK_TAI                   11
581
582 static void
583 print_clockid(int clockid, int last)
584 {
585     switch (clockid) {
586     case TARGET_CLOCK_REALTIME:
587         qemu_log("CLOCK_REALTIME");
588         break;
589     case TARGET_CLOCK_MONOTONIC:
590         qemu_log("CLOCK_MONOTONIC");
591         break;
592     case TARGET_CLOCK_PROCESS_CPUTIME_ID:
593         qemu_log("CLOCK_PROCESS_CPUTIME_ID");
594         break;
595     case TARGET_CLOCK_THREAD_CPUTIME_ID:
596         qemu_log("CLOCK_THREAD_CPUTIME_ID");
597         break;
598     case TARGET_CLOCK_MONOTONIC_RAW:
599         qemu_log("CLOCK_MONOTONIC_RAW");
600         break;
601     case TARGET_CLOCK_REALTIME_COARSE:
602         qemu_log("CLOCK_REALTIME_COARSE");
603         break;
604     case TARGET_CLOCK_MONOTONIC_COARSE:
605         qemu_log("CLOCK_MONOTONIC_COARSE");
606         break;
607     case TARGET_CLOCK_BOOTTIME:
608         qemu_log("CLOCK_BOOTTIME");
609         break;
610     case TARGET_CLOCK_REALTIME_ALARM:
611         qemu_log("CLOCK_REALTIME_ALARM");
612         break;
613     case TARGET_CLOCK_BOOTTIME_ALARM:
614         qemu_log("CLOCK_BOOTTIME_ALARM");
615         break;
616     case TARGET_CLOCK_SGI_CYCLE:
617         qemu_log("CLOCK_SGI_CYCLE");
618         break;
619     case TARGET_CLOCK_TAI:
620         qemu_log("CLOCK_TAI");
621         break;
622     default:
623         qemu_log("%d", clockid);
624         break;
625     }
626     qemu_log("%s", get_comma(last));
627 }
628 #endif
629
630 /*
631  * Sysycall specific output functions
632  */
633
634 /* select */
635 #ifdef TARGET_NR__newselect
636 static void
637 print_newselect(const struct syscallname *name,
638                 abi_long arg1, abi_long arg2, abi_long arg3,
639                 abi_long arg4, abi_long arg5, abi_long arg6)
640 {
641     print_syscall_prologue(name);
642     print_fdset(arg1, arg2);
643     qemu_log(",");
644     print_fdset(arg1, arg3);
645     qemu_log(",");
646     print_fdset(arg1, arg4);
647     qemu_log(",");
648     print_timeval(arg5, 1);
649     print_syscall_epilogue(name);
650 }
651 #endif
652
653 #ifdef TARGET_NR_semctl
654 static void
655 print_semctl(const struct syscallname *name,
656              abi_long arg1, abi_long arg2, abi_long arg3,
657              abi_long arg4, abi_long arg5, abi_long arg6)
658 {
659     qemu_log("%s(" TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ",",
660              name->name, arg1, arg2);
661     print_ipc_cmd(arg3);
662     qemu_log(",0x" TARGET_ABI_FMT_lx ")", arg4);
663 }
664 #endif
665
666 static void
667 print_execve(const struct syscallname *name,
668              abi_long arg1, abi_long arg2, abi_long arg3,
669              abi_long arg4, abi_long arg5, abi_long arg6)
670 {
671     abi_ulong arg_ptr_addr;
672     char *s;
673
674     if (!(s = lock_user_string(arg1)))
675         return;
676     qemu_log("%s(\"%s\",{", name->name, s);
677     unlock_user(s, arg1, 0);
678
679     for (arg_ptr_addr = arg2; ; arg_ptr_addr += sizeof(abi_ulong)) {
680         abi_ulong *arg_ptr, arg_addr;
681
682         arg_ptr = lock_user(VERIFY_READ, arg_ptr_addr, sizeof(abi_ulong), 1);
683         if (!arg_ptr)
684             return;
685     arg_addr = tswapal(*arg_ptr);
686         unlock_user(arg_ptr, arg_ptr_addr, 0);
687         if (!arg_addr)
688             break;
689         if ((s = lock_user_string(arg_addr))) {
690             qemu_log("\"%s\",", s);
691             unlock_user(s, arg_addr, 0);
692         }
693     }
694
695     qemu_log("NULL})");
696 }
697
698 #ifdef TARGET_NR_ipc
699 static void
700 print_ipc(const struct syscallname *name,
701           abi_long arg1, abi_long arg2, abi_long arg3,
702           abi_long arg4, abi_long arg5, abi_long arg6)
703 {
704     switch(arg1) {
705     case IPCOP_semctl:
706         qemu_log("semctl(" TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ",",
707                  arg1, arg2);
708         print_ipc_cmd(arg3);
709         qemu_log(",0x" TARGET_ABI_FMT_lx ")", arg4);
710         break;
711     default:
712         qemu_log(("%s("
713                   TARGET_ABI_FMT_ld ","
714                   TARGET_ABI_FMT_ld ","
715                   TARGET_ABI_FMT_ld ","
716                   TARGET_ABI_FMT_ld
717                   ")"),
718                  name->name, arg1, arg2, arg3, arg4);
719     }
720 }
721 #endif
722
723 /*
724  * Variants for the return value output function
725  */
726
727 static void
728 print_syscall_err(abi_long ret)
729 {
730     const char *errstr = NULL;
731
732     qemu_log(" = ");
733     if (ret < 0) {
734         qemu_log("-1 errno=%d", errno);
735         errstr = target_strerror(-ret);
736         if (errstr) {
737             qemu_log(" (%s)", errstr);
738         }
739     }
740 }
741
742 static void
743 print_syscall_ret_addr(const struct syscallname *name, abi_long ret,
744                        abi_long arg0, abi_long arg1, abi_long arg2,
745                        abi_long arg3, abi_long arg4, abi_long arg5)
746 {
747     print_syscall_err(ret);
748
749     if (ret >= 0) {
750         qemu_log("0x" TARGET_ABI_FMT_lx "\n", ret);
751     }
752 }
753
754 #if 0 /* currently unused */
755 static void
756 print_syscall_ret_raw(struct syscallname *name, abi_long ret)
757 {
758         qemu_log(" = 0x" TARGET_ABI_FMT_lx "\n", ret);
759 }
760 #endif
761
762 #ifdef TARGET_NR__newselect
763 static void
764 print_syscall_ret_newselect(const struct syscallname *name, abi_long ret,
765                             abi_long arg0, abi_long arg1, abi_long arg2,
766                             abi_long arg3, abi_long arg4, abi_long arg5)
767 {
768     print_syscall_err(ret);
769
770     if (ret >= 0) {
771         qemu_log(" = 0x" TARGET_ABI_FMT_lx " (", ret);
772         print_fdset(arg0, arg1);
773         qemu_log(",");
774         print_fdset(arg0, arg2);
775         qemu_log(",");
776         print_fdset(arg0, arg3);
777         qemu_log(",");
778         print_timeval(arg4, 1);
779         qemu_log(")");
780     }
781
782     qemu_log("\n");
783 }
784 #endif
785
786 /* special meanings of adjtimex()' non-negative return values */
787 #define TARGET_TIME_OK       0   /* clock synchronized, no leap second */
788 #define TARGET_TIME_INS      1   /* insert leap second */
789 #define TARGET_TIME_DEL      2   /* delete leap second */
790 #define TARGET_TIME_OOP      3   /* leap second in progress */
791 #define TARGET_TIME_WAIT     4   /* leap second has occurred */
792 #define TARGET_TIME_ERROR    5   /* clock not synchronized */
793 #ifdef TARGET_NR_adjtimex
794 static void
795 print_syscall_ret_adjtimex(const struct syscallname *name, abi_long ret,
796                            abi_long arg0, abi_long arg1, abi_long arg2,
797                            abi_long arg3, abi_long arg4, abi_long arg5)
798 {
799     print_syscall_err(ret);
800
801     if (ret >= 0) {
802         qemu_log(TARGET_ABI_FMT_ld, ret);
803         switch (ret) {
804         case TARGET_TIME_OK:
805             qemu_log(" TIME_OK (clock synchronized, no leap second)");
806             break;
807         case TARGET_TIME_INS:
808             qemu_log(" TIME_INS (insert leap second)");
809             break;
810         case TARGET_TIME_DEL:
811             qemu_log(" TIME_DEL (delete leap second)");
812             break;
813         case TARGET_TIME_OOP:
814             qemu_log(" TIME_OOP (leap second in progress)");
815             break;
816         case TARGET_TIME_WAIT:
817             qemu_log(" TIME_WAIT (leap second has occurred)");
818             break;
819         case TARGET_TIME_ERROR:
820             qemu_log(" TIME_ERROR (clock not synchronized)");
821             break;
822         }
823     }
824
825     qemu_log("\n");
826 }
827 #endif
828
829 #if defined(TARGET_NR_listxattr) || defined(TARGET_NR_llistxattr) \
830  || defined(TARGGET_NR_flistxattr)
831 static void
832 print_syscall_ret_listxattr(const struct syscallname *name, abi_long ret,
833                             abi_long arg0, abi_long arg1, abi_long arg2,
834                             abi_long arg3, abi_long arg4, abi_long arg5)
835 {
836     print_syscall_err(ret);
837
838     if (ret >= 0) {
839         qemu_log(TARGET_ABI_FMT_ld, ret);
840         qemu_log(" (list = ");
841         if (arg1 != 0) {
842             abi_long attr = arg1;
843             while (ret) {
844                 if (attr != arg1) {
845                     qemu_log(",");
846                 }
847                 print_string(attr, 1);
848                 ret -= target_strlen(attr) + 1;
849                 attr += target_strlen(attr) + 1;
850             }
851         } else {
852             qemu_log("NULL");
853         }
854         qemu_log(")");
855     }
856
857     qemu_log("\n");
858 }
859 #define print_syscall_ret_llistxattr     print_syscall_ret_listxattr
860 #define print_syscall_ret_flistxattr     print_syscall_ret_listxattr
861 #endif
862
863 UNUSED static struct flags access_flags[] = {
864     FLAG_GENERIC(F_OK),
865     FLAG_GENERIC(R_OK),
866     FLAG_GENERIC(W_OK),
867     FLAG_GENERIC(X_OK),
868     FLAG_END,
869 };
870
871 UNUSED static struct flags at_file_flags[] = {
872 #ifdef AT_EACCESS
873     FLAG_GENERIC(AT_EACCESS),
874 #endif
875 #ifdef AT_SYMLINK_NOFOLLOW
876     FLAG_GENERIC(AT_SYMLINK_NOFOLLOW),
877 #endif
878     FLAG_END,
879 };
880
881 UNUSED static struct flags unlinkat_flags[] = {
882 #ifdef AT_REMOVEDIR
883     FLAG_GENERIC(AT_REMOVEDIR),
884 #endif
885     FLAG_END,
886 };
887
888 UNUSED static struct flags mode_flags[] = {
889     FLAG_GENERIC(S_IFSOCK),
890     FLAG_GENERIC(S_IFLNK),
891     FLAG_GENERIC(S_IFREG),
892     FLAG_GENERIC(S_IFBLK),
893     FLAG_GENERIC(S_IFDIR),
894     FLAG_GENERIC(S_IFCHR),
895     FLAG_GENERIC(S_IFIFO),
896     FLAG_END,
897 };
898
899 UNUSED static struct flags open_access_flags[] = {
900     FLAG_TARGET(O_RDONLY),
901     FLAG_TARGET(O_WRONLY),
902     FLAG_TARGET(O_RDWR),
903     FLAG_END,
904 };
905
906 UNUSED static struct flags open_flags[] = {
907     FLAG_TARGET(O_APPEND),
908     FLAG_TARGET(O_CREAT),
909     FLAG_TARGET(O_DIRECTORY),
910     FLAG_TARGET(O_EXCL),
911     FLAG_TARGET(O_LARGEFILE),
912     FLAG_TARGET(O_NOCTTY),
913     FLAG_TARGET(O_NOFOLLOW),
914     FLAG_TARGET(O_NONBLOCK),      /* also O_NDELAY */
915     FLAG_TARGET(O_DSYNC),
916     FLAG_TARGET(__O_SYNC),
917     FLAG_TARGET(O_TRUNC),
918 #ifdef O_DIRECT
919     FLAG_TARGET(O_DIRECT),
920 #endif
921 #ifdef O_NOATIME
922     FLAG_TARGET(O_NOATIME),
923 #endif
924 #ifdef O_CLOEXEC
925     FLAG_TARGET(O_CLOEXEC),
926 #endif
927 #ifdef O_PATH
928     FLAG_TARGET(O_PATH),
929 #endif
930 #ifdef O_TMPFILE
931     FLAG_TARGET(O_TMPFILE),
932     FLAG_TARGET(__O_TMPFILE),
933 #endif
934     FLAG_END,
935 };
936
937 UNUSED static struct flags mount_flags[] = {
938 #ifdef MS_BIND
939     FLAG_GENERIC(MS_BIND),
940 #endif
941 #ifdef MS_DIRSYNC
942     FLAG_GENERIC(MS_DIRSYNC),
943 #endif
944     FLAG_GENERIC(MS_MANDLOCK),
945 #ifdef MS_MOVE
946     FLAG_GENERIC(MS_MOVE),
947 #endif
948     FLAG_GENERIC(MS_NOATIME),
949     FLAG_GENERIC(MS_NODEV),
950     FLAG_GENERIC(MS_NODIRATIME),
951     FLAG_GENERIC(MS_NOEXEC),
952     FLAG_GENERIC(MS_NOSUID),
953     FLAG_GENERIC(MS_RDONLY),
954 #ifdef MS_RELATIME
955     FLAG_GENERIC(MS_RELATIME),
956 #endif
957     FLAG_GENERIC(MS_REMOUNT),
958     FLAG_GENERIC(MS_SYNCHRONOUS),
959     FLAG_END,
960 };
961
962 UNUSED static struct flags umount2_flags[] = {
963 #ifdef MNT_FORCE
964     FLAG_GENERIC(MNT_FORCE),
965 #endif
966 #ifdef MNT_DETACH
967     FLAG_GENERIC(MNT_DETACH),
968 #endif
969 #ifdef MNT_EXPIRE
970     FLAG_GENERIC(MNT_EXPIRE),
971 #endif
972     FLAG_END,
973 };
974
975 UNUSED static struct flags mmap_prot_flags[] = {
976     FLAG_GENERIC(PROT_NONE),
977     FLAG_GENERIC(PROT_EXEC),
978     FLAG_GENERIC(PROT_READ),
979     FLAG_GENERIC(PROT_WRITE),
980     FLAG_TARGET(PROT_SEM),
981     FLAG_GENERIC(PROT_GROWSDOWN),
982     FLAG_GENERIC(PROT_GROWSUP),
983     FLAG_END,
984 };
985
986 UNUSED static struct flags mmap_flags[] = {
987     FLAG_TARGET(MAP_SHARED),
988     FLAG_TARGET(MAP_PRIVATE),
989     FLAG_TARGET(MAP_ANONYMOUS),
990     FLAG_TARGET(MAP_DENYWRITE),
991     FLAG_TARGET(MAP_FIXED),
992     FLAG_TARGET(MAP_GROWSDOWN),
993     FLAG_TARGET(MAP_EXECUTABLE),
994 #ifdef MAP_LOCKED
995     FLAG_TARGET(MAP_LOCKED),
996 #endif
997 #ifdef MAP_NONBLOCK
998     FLAG_TARGET(MAP_NONBLOCK),
999 #endif
1000     FLAG_TARGET(MAP_NORESERVE),
1001 #ifdef MAP_POPULATE
1002     FLAG_TARGET(MAP_POPULATE),
1003 #endif
1004 #ifdef TARGET_MAP_UNINITIALIZED
1005     FLAG_TARGET(MAP_UNINITIALIZED),
1006 #endif
1007     FLAG_END,
1008 };
1009
1010 UNUSED static struct flags clone_flags[] = {
1011     FLAG_GENERIC(CLONE_VM),
1012     FLAG_GENERIC(CLONE_FS),
1013     FLAG_GENERIC(CLONE_FILES),
1014     FLAG_GENERIC(CLONE_SIGHAND),
1015     FLAG_GENERIC(CLONE_PTRACE),
1016     FLAG_GENERIC(CLONE_VFORK),
1017     FLAG_GENERIC(CLONE_PARENT),
1018     FLAG_GENERIC(CLONE_THREAD),
1019     FLAG_GENERIC(CLONE_NEWNS),
1020     FLAG_GENERIC(CLONE_SYSVSEM),
1021     FLAG_GENERIC(CLONE_SETTLS),
1022     FLAG_GENERIC(CLONE_PARENT_SETTID),
1023     FLAG_GENERIC(CLONE_CHILD_CLEARTID),
1024     FLAG_GENERIC(CLONE_DETACHED),
1025     FLAG_GENERIC(CLONE_UNTRACED),
1026     FLAG_GENERIC(CLONE_CHILD_SETTID),
1027 #if defined(CLONE_NEWUTS)
1028     FLAG_GENERIC(CLONE_NEWUTS),
1029 #endif
1030 #if defined(CLONE_NEWIPC)
1031     FLAG_GENERIC(CLONE_NEWIPC),
1032 #endif
1033 #if defined(CLONE_NEWUSER)
1034     FLAG_GENERIC(CLONE_NEWUSER),
1035 #endif
1036 #if defined(CLONE_NEWPID)
1037     FLAG_GENERIC(CLONE_NEWPID),
1038 #endif
1039 #if defined(CLONE_NEWNET)
1040     FLAG_GENERIC(CLONE_NEWNET),
1041 #endif
1042 #if defined(CLONE_IO)
1043     FLAG_GENERIC(CLONE_IO),
1044 #endif
1045     FLAG_END,
1046 };
1047
1048 UNUSED static struct flags msg_flags[] = {
1049     /* send */
1050     FLAG_GENERIC(MSG_CONFIRM),
1051     FLAG_GENERIC(MSG_DONTROUTE),
1052     FLAG_GENERIC(MSG_DONTWAIT),
1053     FLAG_GENERIC(MSG_EOR),
1054     FLAG_GENERIC(MSG_MORE),
1055     FLAG_GENERIC(MSG_NOSIGNAL),
1056     FLAG_GENERIC(MSG_OOB),
1057     /* recv */
1058     FLAG_GENERIC(MSG_CMSG_CLOEXEC),
1059     FLAG_GENERIC(MSG_ERRQUEUE),
1060     FLAG_GENERIC(MSG_PEEK),
1061     FLAG_GENERIC(MSG_TRUNC),
1062     FLAG_GENERIC(MSG_WAITALL),
1063     /* recvmsg */
1064     FLAG_GENERIC(MSG_CTRUNC),
1065     FLAG_END,
1066 };
1067
1068 UNUSED static struct flags statx_flags[] = {
1069 #ifdef AT_EMPTY_PATH
1070     FLAG_GENERIC(AT_EMPTY_PATH),
1071 #endif
1072 #ifdef AT_NO_AUTOMOUNT
1073     FLAG_GENERIC(AT_NO_AUTOMOUNT),
1074 #endif
1075 #ifdef AT_SYMLINK_NOFOLLOW
1076     FLAG_GENERIC(AT_SYMLINK_NOFOLLOW),
1077 #endif
1078 #ifdef AT_STATX_SYNC_AS_STAT
1079     FLAG_GENERIC(AT_STATX_SYNC_AS_STAT),
1080 #endif
1081 #ifdef AT_STATX_FORCE_SYNC
1082     FLAG_GENERIC(AT_STATX_FORCE_SYNC),
1083 #endif
1084 #ifdef AT_STATX_DONT_SYNC
1085     FLAG_GENERIC(AT_STATX_DONT_SYNC),
1086 #endif
1087     FLAG_END,
1088 };
1089
1090 UNUSED static struct flags statx_mask[] = {
1091 /* This must come first, because it includes everything.  */
1092 #ifdef STATX_ALL
1093     FLAG_GENERIC(STATX_ALL),
1094 #endif
1095 /* This must come second; it includes everything except STATX_BTIME.  */
1096 #ifdef STATX_BASIC_STATS
1097     FLAG_GENERIC(STATX_BASIC_STATS),
1098 #endif
1099 #ifdef STATX_TYPE
1100     FLAG_GENERIC(STATX_TYPE),
1101 #endif
1102 #ifdef STATX_MODE
1103     FLAG_GENERIC(STATX_MODE),
1104 #endif
1105 #ifdef STATX_NLINK
1106     FLAG_GENERIC(STATX_NLINK),
1107 #endif
1108 #ifdef STATX_UID
1109     FLAG_GENERIC(STATX_UID),
1110 #endif
1111 #ifdef STATX_GID
1112     FLAG_GENERIC(STATX_GID),
1113 #endif
1114 #ifdef STATX_ATIME
1115     FLAG_GENERIC(STATX_ATIME),
1116 #endif
1117 #ifdef STATX_MTIME
1118     FLAG_GENERIC(STATX_MTIME),
1119 #endif
1120 #ifdef STATX_CTIME
1121     FLAG_GENERIC(STATX_CTIME),
1122 #endif
1123 #ifdef STATX_INO
1124     FLAG_GENERIC(STATX_INO),
1125 #endif
1126 #ifdef STATX_SIZE
1127     FLAG_GENERIC(STATX_SIZE),
1128 #endif
1129 #ifdef STATX_BLOCKS
1130     FLAG_GENERIC(STATX_BLOCKS),
1131 #endif
1132 #ifdef STATX_BTIME
1133     FLAG_GENERIC(STATX_BTIME),
1134 #endif
1135     FLAG_END,
1136 };
1137
1138 UNUSED static struct flags falloc_flags[] = {
1139     FLAG_GENERIC(FALLOC_FL_KEEP_SIZE),
1140     FLAG_GENERIC(FALLOC_FL_PUNCH_HOLE),
1141 #ifdef FALLOC_FL_NO_HIDE_STALE
1142     FLAG_GENERIC(FALLOC_FL_NO_HIDE_STALE),
1143 #endif
1144 #ifdef FALLOC_FL_COLLAPSE_RANGE
1145     FLAG_GENERIC(FALLOC_FL_COLLAPSE_RANGE),
1146 #endif
1147 #ifdef FALLOC_FL_ZERO_RANGE
1148     FLAG_GENERIC(FALLOC_FL_ZERO_RANGE),
1149 #endif
1150 #ifdef FALLOC_FL_INSERT_RANGE
1151     FLAG_GENERIC(FALLOC_FL_INSERT_RANGE),
1152 #endif
1153 #ifdef FALLOC_FL_UNSHARE_RANGE
1154     FLAG_GENERIC(FALLOC_FL_UNSHARE_RANGE),
1155 #endif
1156 };
1157
1158 /*
1159  * print_xxx utility functions.  These are used to print syscall
1160  * parameters in certain format.  All of these have parameter
1161  * named 'last'.  This parameter is used to add comma to output
1162  * when last == 0.
1163  */
1164
1165 static const char *
1166 get_comma(int last)
1167 {
1168     return ((last) ? "" : ",");
1169 }
1170
1171 static void
1172 print_flags(const struct flags *f, abi_long flags, int last)
1173 {
1174     const char *sep = "";
1175     int n;
1176
1177     if ((flags == 0) && (f->f_value == 0)) {
1178         qemu_log("%s%s", f->f_string, get_comma(last));
1179         return;
1180     }
1181     for (n = 0; f->f_string != NULL; f++) {
1182         if ((f->f_value != 0) && ((flags & f->f_value) == f->f_value)) {
1183             qemu_log("%s%s", sep, f->f_string);
1184             flags &= ~f->f_value;
1185             sep = "|";
1186             n++;
1187         }
1188     }
1189
1190     if (n > 0) {
1191         /* print rest of the flags as numeric */
1192         if (flags != 0) {
1193             qemu_log("%s%#x%s", sep, (unsigned int)flags, get_comma(last));
1194         } else {
1195             qemu_log("%s", get_comma(last));
1196         }
1197     } else {
1198         /* no string version of flags found, print them in hex then */
1199         qemu_log("%#x%s", (unsigned int)flags, get_comma(last));
1200     }
1201 }
1202
1203 static void
1204 print_at_dirfd(abi_long dirfd, int last)
1205 {
1206 #ifdef AT_FDCWD
1207     if (dirfd == AT_FDCWD) {
1208         qemu_log("AT_FDCWD%s", get_comma(last));
1209         return;
1210     }
1211 #endif
1212     qemu_log("%d%s", (int)dirfd, get_comma(last));
1213 }
1214
1215 static void
1216 print_file_mode(abi_long mode, int last)
1217 {
1218     const char *sep = "";
1219     const struct flags *m;
1220
1221     for (m = &mode_flags[0]; m->f_string != NULL; m++) {
1222         if ((m->f_value & mode) == m->f_value) {
1223             qemu_log("%s%s", m->f_string, sep);
1224             sep = "|";
1225             mode &= ~m->f_value;
1226             break;
1227         }
1228     }
1229
1230     mode &= ~S_IFMT;
1231     /* print rest of the mode as octal */
1232     if (mode != 0)
1233         qemu_log("%s%#o", sep, (unsigned int)mode);
1234
1235     qemu_log("%s", get_comma(last));
1236 }
1237
1238 static void
1239 print_open_flags(abi_long flags, int last)
1240 {
1241     print_flags(open_access_flags, flags & TARGET_O_ACCMODE, 1);
1242     flags &= ~TARGET_O_ACCMODE;
1243     if (flags == 0) {
1244         qemu_log("%s", get_comma(last));
1245         return;
1246     }
1247     qemu_log("|");
1248     print_flags(open_flags, flags, last);
1249 }
1250
1251 static void
1252 print_syscall_prologue(const struct syscallname *sc)
1253 {
1254     qemu_log("%s(", sc->name);
1255 }
1256
1257 /*ARGSUSED*/
1258 static void
1259 print_syscall_epilogue(const struct syscallname *sc)
1260 {
1261     (void)sc;
1262     qemu_log(")");
1263 }
1264
1265 static void
1266 print_string(abi_long addr, int last)
1267 {
1268     char *s;
1269
1270     if ((s = lock_user_string(addr)) != NULL) {
1271         qemu_log("\"%s\"%s", s, get_comma(last));
1272         unlock_user(s, addr, 0);
1273     } else {
1274         /* can't get string out of it, so print it as pointer */
1275         print_pointer(addr, last);
1276     }
1277 }
1278
1279 #define MAX_PRINT_BUF 40
1280 static void
1281 print_buf(abi_long addr, abi_long len, int last)
1282 {
1283     uint8_t *s;
1284     int i;
1285
1286     s = lock_user(VERIFY_READ, addr, len, 1);
1287     if (s) {
1288         qemu_log("\"");
1289         for (i = 0; i < MAX_PRINT_BUF && i < len; i++) {
1290             if (isprint(s[i])) {
1291                 qemu_log("%c", s[i]);
1292             } else {
1293                 qemu_log("\\%o", s[i]);
1294             }
1295         }
1296         qemu_log("\"");
1297         if (i != len) {
1298             qemu_log("...");
1299         }
1300         if (!last) {
1301             qemu_log(",");
1302         }
1303         unlock_user(s, addr, 0);
1304     } else {
1305         print_pointer(addr, last);
1306     }
1307 }
1308
1309 /*
1310  * Prints out raw parameter using given format.  Caller needs
1311  * to do byte swapping if needed.
1312  */
1313 static void
1314 print_raw_param(const char *fmt, abi_long param, int last)
1315 {
1316     char format[64];
1317
1318     (void) snprintf(format, sizeof (format), "%s%s", fmt, get_comma(last));
1319     qemu_log(format, param);
1320 }
1321
1322 static void
1323 print_pointer(abi_long p, int last)
1324 {
1325     if (p == 0)
1326         qemu_log("NULL%s", get_comma(last));
1327     else
1328         qemu_log("0x" TARGET_ABI_FMT_lx "%s", p, get_comma(last));
1329 }
1330
1331 /*
1332  * Reads 32-bit (int) number from guest address space from
1333  * address 'addr' and prints it.
1334  */
1335 static void
1336 print_number(abi_long addr, int last)
1337 {
1338     if (addr == 0) {
1339         qemu_log("NULL%s", get_comma(last));
1340     } else {
1341         int num;
1342
1343         get_user_s32(num, addr);
1344         qemu_log("[%d]%s", num, get_comma(last));
1345     }
1346 }
1347
1348 static void
1349 print_timeval(abi_ulong tv_addr, int last)
1350 {
1351     if( tv_addr ) {
1352         struct target_timeval *tv;
1353
1354         tv = lock_user(VERIFY_READ, tv_addr, sizeof(*tv), 1);
1355         if (!tv) {
1356             print_pointer(tv_addr, last);
1357             return;
1358         }
1359         qemu_log("{" TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld "}%s",
1360             tswapal(tv->tv_sec), tswapal(tv->tv_usec), get_comma(last));
1361         unlock_user(tv, tv_addr, 0);
1362     } else
1363         qemu_log("NULL%s", get_comma(last));
1364 }
1365
1366 static void
1367 print_timezone(abi_ulong tz_addr, int last)
1368 {
1369     if (tz_addr) {
1370         struct target_timezone *tz;
1371
1372         tz = lock_user(VERIFY_READ, tz_addr, sizeof(*tz), 1);
1373         if (!tz) {
1374             print_pointer(tz_addr, last);
1375             return;
1376         }
1377         qemu_log("{%d,%d}%s", tswap32(tz->tz_minuteswest),
1378                  tswap32(tz->tz_dsttime), get_comma(last));
1379         unlock_user(tz, tz_addr, 0);
1380     } else {
1381         qemu_log("NULL%s", get_comma(last));
1382     }
1383 }
1384
1385 #undef UNUSED
1386
1387 #ifdef TARGET_NR_accept
1388 static void
1389 print_accept(const struct syscallname *name,
1390     abi_long arg0, abi_long arg1, abi_long arg2,
1391     abi_long arg3, abi_long arg4, abi_long arg5)
1392 {
1393     print_syscall_prologue(name);
1394     print_raw_param("%d", arg0, 0);
1395     print_pointer(arg1, 0);
1396     print_number(arg2, 1);
1397     print_syscall_epilogue(name);
1398 }
1399 #endif
1400
1401 #ifdef TARGET_NR_access
1402 static void
1403 print_access(const struct syscallname *name,
1404     abi_long arg0, abi_long arg1, abi_long arg2,
1405     abi_long arg3, abi_long arg4, abi_long arg5)
1406 {
1407     print_syscall_prologue(name);
1408     print_string(arg0, 0);
1409     print_flags(access_flags, arg1, 1);
1410     print_syscall_epilogue(name);
1411 }
1412 #endif
1413
1414 #ifdef TARGET_NR_acct
1415 static void
1416 print_acct(const struct syscallname *name,
1417     abi_long arg0, abi_long arg1, abi_long arg2,
1418     abi_long arg3, abi_long arg4, abi_long arg5)
1419 {
1420     print_syscall_prologue(name);
1421     print_string(arg0, 1);
1422     print_syscall_epilogue(name);
1423 }
1424 #endif
1425
1426 #ifdef TARGET_NR_brk
1427 static void
1428 print_brk(const struct syscallname *name,
1429     abi_long arg0, abi_long arg1, abi_long arg2,
1430     abi_long arg3, abi_long arg4, abi_long arg5)
1431 {
1432     print_syscall_prologue(name);
1433     print_pointer(arg0, 1);
1434     print_syscall_epilogue(name);
1435 }
1436 #endif
1437
1438 #ifdef TARGET_NR_chdir
1439 static void
1440 print_chdir(const struct syscallname *name,
1441     abi_long arg0, abi_long arg1, abi_long arg2,
1442     abi_long arg3, abi_long arg4, abi_long arg5)
1443 {
1444     print_syscall_prologue(name);
1445     print_string(arg0, 1);
1446     print_syscall_epilogue(name);
1447 }
1448 #endif
1449
1450 #ifdef TARGET_NR_chroot
1451 static void
1452 print_chroot(const struct syscallname *name,
1453     abi_long arg0, abi_long arg1, abi_long arg2,
1454     abi_long arg3, abi_long arg4, abi_long arg5)
1455 {
1456     print_syscall_prologue(name);
1457     print_string(arg0, 1);
1458     print_syscall_epilogue(name);
1459 }
1460 #endif
1461
1462 #ifdef TARGET_NR_chmod
1463 static void
1464 print_chmod(const struct syscallname *name,
1465     abi_long arg0, abi_long arg1, abi_long arg2,
1466     abi_long arg3, abi_long arg4, abi_long arg5)
1467 {
1468     print_syscall_prologue(name);
1469     print_string(arg0, 0);
1470     print_file_mode(arg1, 1);
1471     print_syscall_epilogue(name);
1472 }
1473 #endif
1474
1475 #if defined(TARGET_NR_chown) || defined(TARGET_NR_lchown)
1476 static void
1477 print_chown(const struct syscallname *name,
1478     abi_long arg0, abi_long arg1, abi_long arg2,
1479     abi_long arg3, abi_long arg4, abi_long arg5)
1480 {
1481     print_syscall_prologue(name);
1482     print_string(arg0, 0);
1483     print_raw_param("%d", arg1, 0);
1484     print_raw_param("%d", arg2, 1);
1485     print_syscall_epilogue(name);
1486 }
1487 #define print_lchown     print_chown
1488 #endif
1489
1490 #ifdef TARGET_NR_clock_adjtime
1491 static void
1492 print_clock_adjtime(const struct syscallname *name,
1493     abi_long arg0, abi_long arg1, abi_long arg2,
1494     abi_long arg3, abi_long arg4, abi_long arg5)
1495 {
1496     print_syscall_prologue(name);
1497     print_clockid(arg0, 0);
1498     print_pointer(arg1, 1);
1499     print_syscall_epilogue(name);
1500 }
1501 #endif
1502
1503 #ifdef TARGET_NR_clone
1504 static void do_print_clone(unsigned int flags, abi_ulong newsp,
1505                            abi_ulong parent_tidptr, target_ulong newtls,
1506                            abi_ulong child_tidptr)
1507 {
1508     print_flags(clone_flags, flags, 0);
1509     print_raw_param("child_stack=0x" TARGET_ABI_FMT_lx, newsp, 0);
1510     print_raw_param("parent_tidptr=0x" TARGET_ABI_FMT_lx, parent_tidptr, 0);
1511     print_raw_param("tls=0x" TARGET_ABI_FMT_lx, newtls, 0);
1512     print_raw_param("child_tidptr=0x" TARGET_ABI_FMT_lx, child_tidptr, 1);
1513 }
1514
1515 static void
1516 print_clone(const struct syscallname *name,
1517     abi_long arg1, abi_long arg2, abi_long arg3,
1518     abi_long arg4, abi_long arg5, abi_long arg6)
1519 {
1520     print_syscall_prologue(name);
1521 #if defined(TARGET_MICROBLAZE)
1522     do_print_clone(arg1, arg2, arg4, arg6, arg5);
1523 #elif defined(TARGET_CLONE_BACKWARDS)
1524     do_print_clone(arg1, arg2, arg3, arg4, arg5);
1525 #elif defined(TARGET_CLONE_BACKWARDS2)
1526     do_print_clone(arg2, arg1, arg3, arg5, arg4);
1527 #else
1528     do_print_clone(arg1, arg2, arg3, arg5, arg4);
1529 #endif
1530     print_syscall_epilogue(name);
1531 }
1532 #endif
1533
1534 #ifdef TARGET_NR_creat
1535 static void
1536 print_creat(const struct syscallname *name,
1537     abi_long arg0, abi_long arg1, abi_long arg2,
1538     abi_long arg3, abi_long arg4, abi_long arg5)
1539 {
1540     print_syscall_prologue(name);
1541     print_string(arg0, 0);
1542     print_file_mode(arg1, 1);
1543     print_syscall_epilogue(name);
1544 }
1545 #endif
1546
1547 #ifdef TARGET_NR_execv
1548 static void
1549 print_execv(const struct syscallname *name,
1550     abi_long arg0, abi_long arg1, abi_long arg2,
1551     abi_long arg3, abi_long arg4, abi_long arg5)
1552 {
1553     print_syscall_prologue(name);
1554     print_string(arg0, 0);
1555     print_raw_param("0x" TARGET_ABI_FMT_lx, arg1, 1);
1556     print_syscall_epilogue(name);
1557 }
1558 #endif
1559
1560 #ifdef TARGET_NR_faccessat
1561 static void
1562 print_faccessat(const struct syscallname *name,
1563     abi_long arg0, abi_long arg1, abi_long arg2,
1564     abi_long arg3, abi_long arg4, abi_long arg5)
1565 {
1566     print_syscall_prologue(name);
1567     print_at_dirfd(arg0, 0);
1568     print_string(arg1, 0);
1569     print_flags(access_flags, arg2, 0);
1570     print_flags(at_file_flags, arg3, 1);
1571     print_syscall_epilogue(name);
1572 }
1573 #endif
1574
1575 #ifdef TARGET_NR_fallocate
1576 static void
1577 print_fallocate(const struct syscallname *name,
1578     abi_long arg0, abi_long arg1, abi_long arg2,
1579     abi_long arg3, abi_long arg4, abi_long arg5)
1580 {
1581     print_syscall_prologue(name);
1582     print_raw_param("%d", arg0, 0);
1583     print_flags(falloc_flags, arg1, 0);
1584 #if TARGET_ABI_BITS == 32
1585     print_raw_param("%" PRIu64, target_offset64(arg2, arg3), 0);
1586     print_raw_param("%" PRIu64, target_offset64(arg4, arg5), 1);
1587 #else
1588     print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
1589     print_raw_param(TARGET_ABI_FMT_ld, arg3, 1);
1590 #endif
1591     print_syscall_epilogue(name);
1592 }
1593 #endif
1594
1595 #ifdef TARGET_NR_fchmodat
1596 static void
1597 print_fchmodat(const struct syscallname *name,
1598     abi_long arg0, abi_long arg1, abi_long arg2,
1599     abi_long arg3, abi_long arg4, abi_long arg5)
1600 {
1601     print_syscall_prologue(name);
1602     print_at_dirfd(arg0, 0);
1603     print_string(arg1, 0);
1604     print_file_mode(arg2, 0);
1605     print_flags(at_file_flags, arg3, 1);
1606     print_syscall_epilogue(name);
1607 }
1608 #endif
1609
1610 #ifdef TARGET_NR_fchownat
1611 static void
1612 print_fchownat(const struct syscallname *name,
1613     abi_long arg0, abi_long arg1, abi_long arg2,
1614     abi_long arg3, abi_long arg4, abi_long arg5)
1615 {
1616     print_syscall_prologue(name);
1617     print_at_dirfd(arg0, 0);
1618     print_string(arg1, 0);
1619     print_raw_param("%d", arg2, 0);
1620     print_raw_param("%d", arg3, 0);
1621     print_flags(at_file_flags, arg4, 1);
1622     print_syscall_epilogue(name);
1623 }
1624 #endif
1625
1626 #if defined(TARGET_NR_fcntl) || defined(TARGET_NR_fcntl64)
1627 static void
1628 print_fcntl(const struct syscallname *name,
1629     abi_long arg0, abi_long arg1, abi_long arg2,
1630     abi_long arg3, abi_long arg4, abi_long arg5)
1631 {
1632     print_syscall_prologue(name);
1633     print_raw_param("%d", arg0, 0);
1634     switch(arg1) {
1635     case TARGET_F_DUPFD:
1636         qemu_log("F_DUPFD,");
1637         print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
1638         break;
1639     case TARGET_F_GETFD:
1640         qemu_log("F_GETFD");
1641         break;
1642     case TARGET_F_SETFD:
1643         qemu_log("F_SETFD,");
1644         print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
1645         break;
1646     case TARGET_F_GETFL:
1647         qemu_log("F_GETFL");
1648         break;
1649     case TARGET_F_SETFL:
1650         qemu_log("F_SETFL,");
1651         print_open_flags(arg2, 1);
1652         break;
1653     case TARGET_F_GETLK:
1654         qemu_log("F_GETLK,");
1655         print_pointer(arg2, 1);
1656         break;
1657     case TARGET_F_SETLK:
1658         qemu_log("F_SETLK,");
1659         print_pointer(arg2, 1);
1660         break;
1661     case TARGET_F_SETLKW:
1662         qemu_log("F_SETLKW,");
1663         print_pointer(arg2, 1);
1664         break;
1665     case TARGET_F_GETOWN:
1666         qemu_log("F_GETOWN");
1667         break;
1668     case TARGET_F_SETOWN:
1669         qemu_log("F_SETOWN,");
1670         print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
1671         break;
1672     case TARGET_F_GETSIG:
1673         qemu_log("F_GETSIG");
1674         break;
1675     case TARGET_F_SETSIG:
1676         qemu_log("F_SETSIG,");
1677         print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
1678         break;
1679 #if TARGET_ABI_BITS == 32
1680     case TARGET_F_GETLK64:
1681         qemu_log("F_GETLK64,");
1682         print_pointer(arg2, 1);
1683         break;
1684     case TARGET_F_SETLK64:
1685         qemu_log("F_SETLK64,");
1686         print_pointer(arg2, 1);
1687         break;
1688     case TARGET_F_SETLKW64:
1689         qemu_log("F_SETLKW64,");
1690         print_pointer(arg2, 1);
1691         break;
1692 #endif
1693     case TARGET_F_SETLEASE:
1694         qemu_log("F_SETLEASE,");
1695         print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
1696         break;
1697     case TARGET_F_GETLEASE:
1698         qemu_log("F_GETLEASE");
1699         break;
1700     case TARGET_F_SETPIPE_SZ:
1701         qemu_log("F_SETPIPE_SZ,");
1702         print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
1703         break;
1704     case TARGET_F_GETPIPE_SZ:
1705         qemu_log("F_GETPIPE_SZ");
1706         break;
1707     case TARGET_F_DUPFD_CLOEXEC:
1708         qemu_log("F_DUPFD_CLOEXEC,");
1709         print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
1710         break;
1711     case TARGET_F_NOTIFY:
1712         qemu_log("F_NOTIFY,");
1713         print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
1714         break;
1715     default:
1716         print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
1717         print_pointer(arg2, 1);
1718         break;
1719     }
1720     print_syscall_epilogue(name);
1721 }
1722 #define print_fcntl64   print_fcntl
1723 #endif
1724
1725 #ifdef TARGET_NR_fgetxattr
1726 static void
1727 print_fgetxattr(const struct syscallname *name,
1728     abi_long arg0, abi_long arg1, abi_long arg2,
1729     abi_long arg3, abi_long arg4, abi_long arg5)
1730 {
1731     print_syscall_prologue(name);
1732     print_raw_param("%d", arg0, 0);
1733     print_string(arg1, 0);
1734     print_pointer(arg2, 0);
1735     print_raw_param(TARGET_FMT_lu, arg3, 1);
1736     print_syscall_epilogue(name);
1737 }
1738 #endif
1739
1740 #ifdef TARGET_NR_flistxattr
1741 static void
1742 print_flistxattr(const struct syscallname *name,
1743     abi_long arg0, abi_long arg1, abi_long arg2,
1744     abi_long arg3, abi_long arg4, abi_long arg5)
1745 {
1746     print_syscall_prologue(name);
1747     print_raw_param("%d", arg0, 0);
1748     print_pointer(arg1, 0);
1749     print_raw_param(TARGET_FMT_lu, arg2, 1);
1750     print_syscall_epilogue(name);
1751 }
1752 #endif
1753
1754 #if defined(TARGET_NR_getxattr) || defined(TARGET_NR_lgetxattr)
1755 static void
1756 print_getxattr(const struct syscallname *name,
1757     abi_long arg0, abi_long arg1, abi_long arg2,
1758     abi_long arg3, abi_long arg4, abi_long arg5)
1759 {
1760     print_syscall_prologue(name);
1761     print_string(arg0, 0);
1762     print_string(arg1, 0);
1763     print_pointer(arg2, 0);
1764     print_raw_param(TARGET_FMT_lu, arg3, 1);
1765     print_syscall_epilogue(name);
1766 }
1767 #define print_lgetxattr     print_getxattr
1768 #endif
1769
1770 #if defined(TARGET_NR_listxattr) || defined(TARGET_NR_llistxattr)
1771 static void
1772 print_listxattr(const struct syscallname *name,
1773     abi_long arg0, abi_long arg1, abi_long arg2,
1774     abi_long arg3, abi_long arg4, abi_long arg5)
1775 {
1776     print_syscall_prologue(name);
1777     print_string(arg0, 0);
1778     print_pointer(arg1, 0);
1779     print_raw_param(TARGET_FMT_lu, arg2, 1);
1780     print_syscall_epilogue(name);
1781 }
1782 #define print_llistxattr     print_listxattr
1783 #endif
1784
1785 #if defined(TARGET_NR_fremovexattr)
1786 static void
1787 print_fremovexattr(const struct syscallname *name,
1788     abi_long arg0, abi_long arg1, abi_long arg2,
1789     abi_long arg3, abi_long arg4, abi_long arg5)
1790 {
1791     print_syscall_prologue(name);
1792     print_raw_param("%d", arg0, 0);
1793     print_string(arg1, 1);
1794     print_syscall_epilogue(name);
1795 }
1796 #endif
1797
1798 #if defined(TARGET_NR_removexattr) || defined(TARGET_NR_lremovexattr)
1799 static void
1800 print_removexattr(const struct syscallname *name,
1801     abi_long arg0, abi_long arg1, abi_long arg2,
1802     abi_long arg3, abi_long arg4, abi_long arg5)
1803 {
1804     print_syscall_prologue(name);
1805     print_string(arg0, 0);
1806     print_string(arg1, 1);
1807     print_syscall_epilogue(name);
1808 }
1809 #define print_lremovexattr     print_removexattr
1810 #endif
1811
1812 #ifdef TARGET_NR_futimesat
1813 static void
1814 print_futimesat(const struct syscallname *name,
1815     abi_long arg0, abi_long arg1, abi_long arg2,
1816     abi_long arg3, abi_long arg4, abi_long arg5)
1817 {
1818     print_syscall_prologue(name);
1819     print_at_dirfd(arg0, 0);
1820     print_string(arg1, 0);
1821     print_timeval(arg2, 0);
1822     print_timeval(arg2 + sizeof (struct target_timeval), 1);
1823     print_syscall_epilogue(name);
1824 }
1825 #endif
1826
1827 #ifdef TARGET_NR_settimeofday
1828 static void
1829 print_settimeofday(const struct syscallname *name,
1830                 abi_long arg0, abi_long arg1, abi_long arg2,
1831                 abi_long arg3, abi_long arg4, abi_long arg5)
1832 {
1833     print_syscall_prologue(name);
1834     print_timeval(arg0, 0);
1835     print_timezone(arg1, 1);
1836     print_syscall_epilogue(name);
1837 }
1838 #endif
1839
1840 #ifdef TARGET_NR_link
1841 static void
1842 print_link(const struct syscallname *name,
1843     abi_long arg0, abi_long arg1, abi_long arg2,
1844     abi_long arg3, abi_long arg4, abi_long arg5)
1845 {
1846     print_syscall_prologue(name);
1847     print_string(arg0, 0);
1848     print_string(arg1, 1);
1849     print_syscall_epilogue(name);
1850 }
1851 #endif
1852
1853 #ifdef TARGET_NR_linkat
1854 static void
1855 print_linkat(const struct syscallname *name,
1856     abi_long arg0, abi_long arg1, abi_long arg2,
1857     abi_long arg3, abi_long arg4, abi_long arg5)
1858 {
1859     print_syscall_prologue(name);
1860     print_at_dirfd(arg0, 0);
1861     print_string(arg1, 0);
1862     print_at_dirfd(arg2, 0);
1863     print_string(arg3, 0);
1864     print_flags(at_file_flags, arg4, 1);
1865     print_syscall_epilogue(name);
1866 }
1867 #endif
1868
1869 #ifdef TARGET_NR__llseek
1870 static void
1871 print__llseek(const struct syscallname *name,
1872     abi_long arg0, abi_long arg1, abi_long arg2,
1873     abi_long arg3, abi_long arg4, abi_long arg5)
1874 {
1875     const char *whence = "UNKNOWN";
1876     print_syscall_prologue(name);
1877     print_raw_param("%d", arg0, 0);
1878     print_raw_param("%ld", arg1, 0);
1879     print_raw_param("%ld", arg2, 0);
1880     print_pointer(arg3, 0);
1881     switch(arg4) {
1882     case SEEK_SET: whence = "SEEK_SET"; break;
1883     case SEEK_CUR: whence = "SEEK_CUR"; break;
1884     case SEEK_END: whence = "SEEK_END"; break;
1885     }
1886     qemu_log("%s", whence);
1887     print_syscall_epilogue(name);
1888 }
1889 #endif
1890
1891 #ifdef TARGET_NR_lseek
1892 static void
1893 print_lseek(const struct syscallname *name,
1894     abi_long arg0, abi_long arg1, abi_long arg2,
1895     abi_long arg3, abi_long arg4, abi_long arg5)
1896 {
1897     print_syscall_prologue(name);
1898     print_raw_param("%d", arg0, 0);
1899     print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
1900     switch (arg2) {
1901     case SEEK_SET:
1902         qemu_log("SEEK_SET"); break;
1903     case SEEK_CUR:
1904         qemu_log("SEEK_CUR"); break;
1905     case SEEK_END:
1906         qemu_log("SEEK_END"); break;
1907 #ifdef SEEK_DATA
1908     case SEEK_DATA:
1909         qemu_log("SEEK_DATA"); break;
1910 #endif
1911 #ifdef SEEK_HOLE
1912     case SEEK_HOLE:
1913         qemu_log("SEEK_HOLE"); break;
1914 #endif
1915     default:
1916         print_raw_param("%#x", arg2, 1);
1917     }
1918     print_syscall_epilogue(name);
1919 }
1920 #endif
1921
1922 #if defined(TARGET_NR_socket)
1923 static void
1924 print_socket(const struct syscallname *name,
1925              abi_long arg0, abi_long arg1, abi_long arg2,
1926              abi_long arg3, abi_long arg4, abi_long arg5)
1927 {
1928     abi_ulong domain = arg0, type = arg1, protocol = arg2;
1929
1930     print_syscall_prologue(name);
1931     print_socket_domain(domain);
1932     qemu_log(",");
1933     print_socket_type(type);
1934     qemu_log(",");
1935     if (domain == AF_PACKET ||
1936         (domain == AF_INET && type == TARGET_SOCK_PACKET)) {
1937         protocol = tswap16(protocol);
1938     }
1939     print_socket_protocol(domain, type, protocol);
1940     print_syscall_epilogue(name);
1941 }
1942
1943 #endif
1944
1945 #if defined(TARGET_NR_socketcall) || defined(TARGET_NR_bind)
1946
1947 static void print_sockfd(abi_long sockfd, int last)
1948 {
1949     print_raw_param(TARGET_ABI_FMT_ld, sockfd, last);
1950 }
1951
1952 #endif
1953
1954 #if defined(TARGET_NR_socketcall)
1955
1956 #define get_user_ualx(x, gaddr, idx) \
1957         get_user_ual(x, (gaddr) + (idx) * sizeof(abi_long))
1958
1959 static void do_print_socket(const char *name, abi_long arg1)
1960 {
1961     abi_ulong domain, type, protocol;
1962
1963     get_user_ualx(domain, arg1, 0);
1964     get_user_ualx(type, arg1, 1);
1965     get_user_ualx(protocol, arg1, 2);
1966     qemu_log("%s(", name);
1967     print_socket_domain(domain);
1968     qemu_log(",");
1969     print_socket_type(type);
1970     qemu_log(",");
1971     if (domain == AF_PACKET ||
1972         (domain == AF_INET && type == TARGET_SOCK_PACKET)) {
1973         protocol = tswap16(protocol);
1974     }
1975     print_socket_protocol(domain, type, protocol);
1976     qemu_log(")");
1977 }
1978
1979 static void do_print_sockaddr(const char *name, abi_long arg1)
1980 {
1981     abi_ulong sockfd, addr, addrlen;
1982
1983     get_user_ualx(sockfd, arg1, 0);
1984     get_user_ualx(addr, arg1, 1);
1985     get_user_ualx(addrlen, arg1, 2);
1986
1987     qemu_log("%s(", name);
1988     print_sockfd(sockfd, 0);
1989     print_sockaddr(addr, addrlen, 0);
1990     qemu_log(")");
1991 }
1992
1993 static void do_print_listen(const char *name, abi_long arg1)
1994 {
1995     abi_ulong sockfd, backlog;
1996
1997     get_user_ualx(sockfd, arg1, 0);
1998     get_user_ualx(backlog, arg1, 1);
1999
2000     qemu_log("%s(", name);
2001     print_sockfd(sockfd, 0);
2002     print_raw_param(TARGET_ABI_FMT_ld, backlog, 1);
2003     qemu_log(")");
2004 }
2005
2006 static void do_print_socketpair(const char *name, abi_long arg1)
2007 {
2008     abi_ulong domain, type, protocol, tab;
2009
2010     get_user_ualx(domain, arg1, 0);
2011     get_user_ualx(type, arg1, 1);
2012     get_user_ualx(protocol, arg1, 2);
2013     get_user_ualx(tab, arg1, 3);
2014
2015     qemu_log("%s(", name);
2016     print_socket_domain(domain);
2017     qemu_log(",");
2018     print_socket_type(type);
2019     qemu_log(",");
2020     print_socket_protocol(domain, type, protocol);
2021     qemu_log(",");
2022     print_raw_param(TARGET_ABI_FMT_lx, tab, 1);
2023     qemu_log(")");
2024 }
2025
2026 static void do_print_sendrecv(const char *name, abi_long arg1)
2027 {
2028     abi_ulong sockfd, msg, len, flags;
2029
2030     get_user_ualx(sockfd, arg1, 0);
2031     get_user_ualx(msg, arg1, 1);
2032     get_user_ualx(len, arg1, 2);
2033     get_user_ualx(flags, arg1, 3);
2034
2035     qemu_log("%s(", name);
2036     print_sockfd(sockfd, 0);
2037     print_buf(msg, len, 0);
2038     print_raw_param(TARGET_ABI_FMT_ld, len, 0);
2039     print_flags(msg_flags, flags, 1);
2040     qemu_log(")");
2041 }
2042
2043 static void do_print_msgaddr(const char *name, abi_long arg1)
2044 {
2045     abi_ulong sockfd, msg, len, flags, addr, addrlen;
2046
2047     get_user_ualx(sockfd, arg1, 0);
2048     get_user_ualx(msg, arg1, 1);
2049     get_user_ualx(len, arg1, 2);
2050     get_user_ualx(flags, arg1, 3);
2051     get_user_ualx(addr, arg1, 4);
2052     get_user_ualx(addrlen, arg1, 5);
2053
2054     qemu_log("%s(", name);
2055     print_sockfd(sockfd, 0);
2056     print_buf(msg, len, 0);
2057     print_raw_param(TARGET_ABI_FMT_ld, len, 0);
2058     print_flags(msg_flags, flags, 0);
2059     print_sockaddr(addr, addrlen, 0);
2060     qemu_log(")");
2061 }
2062
2063 static void do_print_shutdown(const char *name, abi_long arg1)
2064 {
2065     abi_ulong sockfd, how;
2066
2067     get_user_ualx(sockfd, arg1, 0);
2068     get_user_ualx(how, arg1, 1);
2069
2070     qemu_log("shutdown(");
2071     print_sockfd(sockfd, 0);
2072     switch (how) {
2073     case SHUT_RD:
2074         qemu_log("SHUT_RD");
2075         break;
2076     case SHUT_WR:
2077         qemu_log("SHUT_WR");
2078         break;
2079     case SHUT_RDWR:
2080         qemu_log("SHUT_RDWR");
2081         break;
2082     default:
2083         print_raw_param(TARGET_ABI_FMT_ld, how, 1);
2084         break;
2085     }
2086     qemu_log(")");
2087 }
2088
2089 static void do_print_msg(const char *name, abi_long arg1)
2090 {
2091     abi_ulong sockfd, msg, flags;
2092
2093     get_user_ualx(sockfd, arg1, 0);
2094     get_user_ualx(msg, arg1, 1);
2095     get_user_ualx(flags, arg1, 2);
2096
2097     qemu_log("%s(", name);
2098     print_sockfd(sockfd, 0);
2099     print_pointer(msg, 0);
2100     print_flags(msg_flags, flags, 1);
2101     qemu_log(")");
2102 }
2103
2104 static void do_print_sockopt(const char *name, abi_long arg1)
2105 {
2106     abi_ulong sockfd, level, optname, optval, optlen;
2107
2108     get_user_ualx(sockfd, arg1, 0);
2109     get_user_ualx(level, arg1, 1);
2110     get_user_ualx(optname, arg1, 2);
2111     get_user_ualx(optval, arg1, 3);
2112     get_user_ualx(optlen, arg1, 4);
2113
2114     qemu_log("%s(", name);
2115     print_sockfd(sockfd, 0);
2116     switch (level) {
2117     case SOL_TCP:
2118         qemu_log("SOL_TCP,");
2119         print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2120         print_pointer(optval, 0);
2121         break;
2122     case SOL_IP:
2123         qemu_log("SOL_IP,");
2124         print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2125         print_pointer(optval, 0);
2126         break;
2127     case SOL_RAW:
2128         qemu_log("SOL_RAW,");
2129         print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2130         print_pointer(optval, 0);
2131         break;
2132     case TARGET_SOL_SOCKET:
2133         qemu_log("SOL_SOCKET,");
2134         switch (optname) {
2135         case TARGET_SO_DEBUG:
2136             qemu_log("SO_DEBUG,");
2137 print_optint:
2138             print_number(optval, 0);
2139             break;
2140         case TARGET_SO_REUSEADDR:
2141             qemu_log("SO_REUSEADDR,");
2142             goto print_optint;
2143         case TARGET_SO_REUSEPORT:
2144             qemu_log("SO_REUSEPORT,");
2145             goto print_optint;
2146         case TARGET_SO_TYPE:
2147             qemu_log("SO_TYPE,");
2148             goto print_optint;
2149         case TARGET_SO_ERROR:
2150             qemu_log("SO_ERROR,");
2151             goto print_optint;
2152         case TARGET_SO_DONTROUTE:
2153             qemu_log("SO_DONTROUTE,");
2154             goto print_optint;
2155         case TARGET_SO_BROADCAST:
2156             qemu_log("SO_BROADCAST,");
2157             goto print_optint;
2158         case TARGET_SO_SNDBUF:
2159             qemu_log("SO_SNDBUF,");
2160             goto print_optint;
2161         case TARGET_SO_RCVBUF:
2162             qemu_log("SO_RCVBUF,");
2163             goto print_optint;
2164         case TARGET_SO_KEEPALIVE:
2165             qemu_log("SO_KEEPALIVE,");
2166             goto print_optint;
2167         case TARGET_SO_OOBINLINE:
2168             qemu_log("SO_OOBINLINE,");
2169             goto print_optint;
2170         case TARGET_SO_NO_CHECK:
2171             qemu_log("SO_NO_CHECK,");
2172             goto print_optint;
2173         case TARGET_SO_PRIORITY:
2174             qemu_log("SO_PRIORITY,");
2175             goto print_optint;
2176         case TARGET_SO_BSDCOMPAT:
2177             qemu_log("SO_BSDCOMPAT,");
2178             goto print_optint;
2179         case TARGET_SO_PASSCRED:
2180             qemu_log("SO_PASSCRED,");
2181             goto print_optint;
2182         case TARGET_SO_TIMESTAMP:
2183             qemu_log("SO_TIMESTAMP,");
2184             goto print_optint;
2185         case TARGET_SO_RCVLOWAT:
2186             qemu_log("SO_RCVLOWAT,");
2187             goto print_optint;
2188         case TARGET_SO_RCVTIMEO:
2189             qemu_log("SO_RCVTIMEO,");
2190             print_timeval(optval, 0);
2191             break;
2192         case TARGET_SO_SNDTIMEO:
2193             qemu_log("SO_SNDTIMEO,");
2194             print_timeval(optval, 0);
2195             break;
2196         case TARGET_SO_ATTACH_FILTER: {
2197             struct target_sock_fprog *fprog;
2198
2199             qemu_log("SO_ATTACH_FILTER,");
2200
2201             if (lock_user_struct(VERIFY_READ, fprog, optval,  0)) {
2202                 struct target_sock_filter *filter;
2203                 qemu_log("{");
2204                 if (lock_user_struct(VERIFY_READ, filter,
2205                                      tswapal(fprog->filter),  0)) {
2206                     int i;
2207                     for (i = 0; i < tswap16(fprog->len) - 1; i++) {
2208                         qemu_log("[%d]{0x%x,%d,%d,0x%x},",
2209                                  i, tswap16(filter[i].code),
2210                                  filter[i].jt, filter[i].jf,
2211                                  tswap32(filter[i].k));
2212                     }
2213                     qemu_log("[%d]{0x%x,%d,%d,0x%x}",
2214                              i, tswap16(filter[i].code),
2215                              filter[i].jt, filter[i].jf,
2216                              tswap32(filter[i].k));
2217                 } else {
2218                     qemu_log(TARGET_ABI_FMT_lx, tswapal(fprog->filter));
2219                 }
2220                 qemu_log(",%d},", tswap16(fprog->len));
2221                 unlock_user(fprog, optval, 0);
2222             } else {
2223                 print_pointer(optval, 0);
2224             }
2225             break;
2226         }
2227         default:
2228             print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2229             print_pointer(optval, 0);
2230             break;
2231         }
2232         break;
2233     default:
2234         print_raw_param(TARGET_ABI_FMT_ld, level, 0);
2235         print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2236         print_pointer(optval, 0);
2237         break;
2238     }
2239     print_raw_param(TARGET_ABI_FMT_ld, optlen, 1);
2240     qemu_log(")");
2241 }
2242
2243 #define PRINT_SOCKOP(name, func) \
2244     [TARGET_SYS_##name] = { #name, func }
2245
2246 static struct {
2247     const char *name;
2248     void (*print)(const char *, abi_long);
2249 } scall[] = {
2250     PRINT_SOCKOP(SOCKET, do_print_socket),
2251     PRINT_SOCKOP(BIND, do_print_sockaddr),
2252     PRINT_SOCKOP(CONNECT, do_print_sockaddr),
2253     PRINT_SOCKOP(LISTEN, do_print_listen),
2254     PRINT_SOCKOP(ACCEPT, do_print_sockaddr),
2255     PRINT_SOCKOP(GETSOCKNAME, do_print_sockaddr),
2256     PRINT_SOCKOP(GETPEERNAME, do_print_sockaddr),
2257     PRINT_SOCKOP(SOCKETPAIR, do_print_socketpair),
2258     PRINT_SOCKOP(SEND, do_print_sendrecv),
2259     PRINT_SOCKOP(RECV, do_print_sendrecv),
2260     PRINT_SOCKOP(SENDTO, do_print_msgaddr),
2261     PRINT_SOCKOP(RECVFROM, do_print_msgaddr),
2262     PRINT_SOCKOP(SHUTDOWN, do_print_shutdown),
2263     PRINT_SOCKOP(SETSOCKOPT, do_print_sockopt),
2264     PRINT_SOCKOP(GETSOCKOPT, do_print_sockopt),
2265     PRINT_SOCKOP(SENDMSG, do_print_msg),
2266     PRINT_SOCKOP(RECVMSG, do_print_msg),
2267     PRINT_SOCKOP(ACCEPT4, NULL),
2268     PRINT_SOCKOP(RECVMMSG, NULL),
2269     PRINT_SOCKOP(SENDMMSG, NULL),
2270 };
2271
2272 static void
2273 print_socketcall(const struct syscallname *name,
2274                  abi_long arg0, abi_long arg1, abi_long arg2,
2275                  abi_long arg3, abi_long arg4, abi_long arg5)
2276 {
2277     if (arg0 >= 0 && arg0 < ARRAY_SIZE(scall) && scall[arg0].print) {
2278         scall[arg0].print(scall[arg0].name, arg1);
2279         return;
2280     }
2281     print_syscall_prologue(name);
2282     print_raw_param(TARGET_ABI_FMT_ld, arg0, 0);
2283     print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
2284     print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
2285     print_raw_param(TARGET_ABI_FMT_ld, arg3, 0);
2286     print_raw_param(TARGET_ABI_FMT_ld, arg4, 0);
2287     print_raw_param(TARGET_ABI_FMT_ld, arg5, 0);
2288     print_syscall_epilogue(name);
2289 }
2290 #endif
2291
2292 #if defined(TARGET_NR_bind)
2293 static void
2294 print_bind(const struct syscallname *name,
2295            abi_long arg0, abi_long arg1, abi_long arg2,
2296            abi_long arg3, abi_long arg4, abi_long arg5)
2297 {
2298     print_syscall_prologue(name);
2299     print_sockfd(arg0, 0);
2300     print_sockaddr(arg1, arg2, 1);
2301     print_syscall_epilogue(name);
2302 }
2303 #endif
2304
2305 #if defined(TARGET_NR_stat) || defined(TARGET_NR_stat64) || \
2306     defined(TARGET_NR_lstat) || defined(TARGET_NR_lstat64)
2307 static void
2308 print_stat(const struct syscallname *name,
2309     abi_long arg0, abi_long arg1, abi_long arg2,
2310     abi_long arg3, abi_long arg4, abi_long arg5)
2311 {
2312     print_syscall_prologue(name);
2313     print_string(arg0, 0);
2314     print_pointer(arg1, 1);
2315     print_syscall_epilogue(name);
2316 }
2317 #define print_lstat     print_stat
2318 #define print_stat64    print_stat
2319 #define print_lstat64   print_stat
2320 #endif
2321
2322 #if defined(TARGET_NR_fstat) || defined(TARGET_NR_fstat64)
2323 static void
2324 print_fstat(const struct syscallname *name,
2325     abi_long arg0, abi_long arg1, abi_long arg2,
2326     abi_long arg3, abi_long arg4, abi_long arg5)
2327 {
2328     print_syscall_prologue(name);
2329     print_raw_param("%d", arg0, 0);
2330     print_pointer(arg1, 1);
2331     print_syscall_epilogue(name);
2332 }
2333 #define print_fstat64     print_fstat
2334 #endif
2335
2336 #ifdef TARGET_NR_mkdir
2337 static void
2338 print_mkdir(const struct syscallname *name,
2339     abi_long arg0, abi_long arg1, abi_long arg2,
2340     abi_long arg3, abi_long arg4, abi_long arg5)
2341 {
2342     print_syscall_prologue(name);
2343     print_string(arg0, 0);
2344     print_file_mode(arg1, 1);
2345     print_syscall_epilogue(name);
2346 }
2347 #endif
2348
2349 #ifdef TARGET_NR_mkdirat
2350 static void
2351 print_mkdirat(const struct syscallname *name,
2352     abi_long arg0, abi_long arg1, abi_long arg2,
2353     abi_long arg3, abi_long arg4, abi_long arg5)
2354 {
2355     print_syscall_prologue(name);
2356     print_at_dirfd(arg0, 0);
2357     print_string(arg1, 0);
2358     print_file_mode(arg2, 1);
2359     print_syscall_epilogue(name);
2360 }
2361 #endif
2362
2363 #ifdef TARGET_NR_rmdir
2364 static void
2365 print_rmdir(const struct syscallname *name,
2366     abi_long arg0, abi_long arg1, abi_long arg2,
2367     abi_long arg3, abi_long arg4, abi_long arg5)
2368 {
2369     print_syscall_prologue(name);
2370     print_string(arg0, 0);
2371     print_syscall_epilogue(name);
2372 }
2373 #endif
2374
2375 #ifdef TARGET_NR_rt_sigaction
2376 static void
2377 print_rt_sigaction(const struct syscallname *name,
2378     abi_long arg0, abi_long arg1, abi_long arg2,
2379     abi_long arg3, abi_long arg4, abi_long arg5)
2380 {
2381     print_syscall_prologue(name);
2382     print_signal(arg0, 0);
2383     print_pointer(arg1, 0);
2384     print_pointer(arg2, 1);
2385     print_syscall_epilogue(name);
2386 }
2387 #endif
2388
2389 #ifdef TARGET_NR_rt_sigprocmask
2390 static void
2391 print_rt_sigprocmask(const struct syscallname *name,
2392     abi_long arg0, abi_long arg1, abi_long arg2,
2393     abi_long arg3, abi_long arg4, abi_long arg5)
2394 {
2395     const char *how = "UNKNOWN";
2396     print_syscall_prologue(name);
2397     switch(arg0) {
2398     case TARGET_SIG_BLOCK: how = "SIG_BLOCK"; break;
2399     case TARGET_SIG_UNBLOCK: how = "SIG_UNBLOCK"; break;
2400     case TARGET_SIG_SETMASK: how = "SIG_SETMASK"; break;
2401     }
2402     qemu_log("%s,", how);
2403     print_pointer(arg1, 0);
2404     print_pointer(arg2, 1);
2405     print_syscall_epilogue(name);
2406 }
2407 #endif
2408
2409 #ifdef TARGET_NR_rt_sigqueueinfo
2410 static void
2411 print_rt_sigqueueinfo(const struct syscallname *name,
2412     abi_long arg0, abi_long arg1, abi_long arg2,
2413     abi_long arg3, abi_long arg4, abi_long arg5)
2414 {
2415     void *p;
2416     target_siginfo_t uinfo;
2417
2418     print_syscall_prologue(name);
2419     print_raw_param("%d", arg0, 0);
2420     print_signal(arg1, 0);
2421     p = lock_user(VERIFY_READ, arg2, sizeof(target_siginfo_t), 1);
2422     if (p) {
2423         get_target_siginfo(&uinfo, p);
2424         print_siginfo(&uinfo);
2425
2426         unlock_user(p, arg2, 0);
2427     } else {
2428         print_pointer(arg2, 1);
2429     }
2430     print_syscall_epilogue(name);
2431 }
2432 #endif
2433
2434 #ifdef TARGET_NR_rt_tgsigqueueinfo
2435 static void
2436 print_rt_tgsigqueueinfo(const struct syscallname *name,
2437     abi_long arg0, abi_long arg1, abi_long arg2,
2438     abi_long arg3, abi_long arg4, abi_long arg5)
2439 {
2440     void *p;
2441     target_siginfo_t uinfo;
2442
2443     print_syscall_prologue(name);
2444     print_raw_param("%d", arg0, 0);
2445     print_raw_param("%d", arg1, 0);
2446     print_signal(arg2, 0);
2447     p = lock_user(VERIFY_READ, arg3, sizeof(target_siginfo_t), 1);
2448     if (p) {
2449         get_target_siginfo(&uinfo, p);
2450         print_siginfo(&uinfo);
2451
2452         unlock_user(p, arg3, 0);
2453     } else {
2454         print_pointer(arg3, 1);
2455     }
2456     print_syscall_epilogue(name);
2457 }
2458 #endif
2459
2460 #ifdef TARGET_NR_syslog
2461 static void
2462 print_syslog_action(abi_ulong arg, int last)
2463 {
2464     const char *type;
2465
2466     switch (arg) {
2467         case TARGET_SYSLOG_ACTION_CLOSE: {
2468             type = "SYSLOG_ACTION_CLOSE";
2469             break;
2470         }
2471         case TARGET_SYSLOG_ACTION_OPEN: {
2472             type = "SYSLOG_ACTION_OPEN";
2473             break;
2474         }
2475         case TARGET_SYSLOG_ACTION_READ: {
2476             type = "SYSLOG_ACTION_READ";
2477             break;
2478         }
2479         case TARGET_SYSLOG_ACTION_READ_ALL: {
2480             type = "SYSLOG_ACTION_READ_ALL";
2481             break;
2482         }
2483         case TARGET_SYSLOG_ACTION_READ_CLEAR: {
2484             type = "SYSLOG_ACTION_READ_CLEAR";
2485             break;
2486         }
2487         case TARGET_SYSLOG_ACTION_CLEAR: {
2488             type = "SYSLOG_ACTION_CLEAR";
2489             break;
2490         }
2491         case TARGET_SYSLOG_ACTION_CONSOLE_OFF: {
2492             type = "SYSLOG_ACTION_CONSOLE_OFF";
2493             break;
2494         }
2495         case TARGET_SYSLOG_ACTION_CONSOLE_ON: {
2496             type = "SYSLOG_ACTION_CONSOLE_ON";
2497             break;
2498         }
2499         case TARGET_SYSLOG_ACTION_CONSOLE_LEVEL: {
2500             type = "SYSLOG_ACTION_CONSOLE_LEVEL";
2501             break;
2502         }
2503         case TARGET_SYSLOG_ACTION_SIZE_UNREAD: {
2504             type = "SYSLOG_ACTION_SIZE_UNREAD";
2505             break;
2506         }
2507         case TARGET_SYSLOG_ACTION_SIZE_BUFFER: {
2508             type = "SYSLOG_ACTION_SIZE_BUFFER";
2509             break;
2510         }
2511         default: {
2512             print_raw_param("%ld", arg, last);
2513             return;
2514         }
2515     }
2516     qemu_log("%s%s", type, get_comma(last));
2517 }
2518
2519 static void
2520 print_syslog(const struct syscallname *name,
2521     abi_long arg0, abi_long arg1, abi_long arg2,
2522     abi_long arg3, abi_long arg4, abi_long arg5)
2523 {
2524     print_syscall_prologue(name);
2525     print_syslog_action(arg0, 0);
2526     print_pointer(arg1, 0);
2527     print_raw_param("%d", arg2, 1);
2528     print_syscall_epilogue(name);
2529 }
2530 #endif
2531
2532 #ifdef TARGET_NR_mknod
2533 static void
2534 print_mknod(const struct syscallname *name,
2535     abi_long arg0, abi_long arg1, abi_long arg2,
2536     abi_long arg3, abi_long arg4, abi_long arg5)
2537 {
2538     int hasdev = (arg1 & (S_IFCHR|S_IFBLK));
2539
2540     print_syscall_prologue(name);
2541     print_string(arg0, 0);
2542     print_file_mode(arg1, (hasdev == 0));
2543     if (hasdev) {
2544         print_raw_param("makedev(%d", major(arg2), 0);
2545         print_raw_param("%d)", minor(arg2), 1);
2546     }
2547     print_syscall_epilogue(name);
2548 }
2549 #endif
2550
2551 #ifdef TARGET_NR_mknodat
2552 static void
2553 print_mknodat(const struct syscallname *name,
2554     abi_long arg0, abi_long arg1, abi_long arg2,
2555     abi_long arg3, abi_long arg4, abi_long arg5)
2556 {
2557     int hasdev = (arg2 & (S_IFCHR|S_IFBLK));
2558
2559     print_syscall_prologue(name);
2560     print_at_dirfd(arg0, 0);
2561     print_string(arg1, 0);
2562     print_file_mode(arg2, (hasdev == 0));
2563     if (hasdev) {
2564         print_raw_param("makedev(%d", major(arg3), 0);
2565         print_raw_param("%d)", minor(arg3), 1);
2566     }
2567     print_syscall_epilogue(name);
2568 }
2569 #endif
2570
2571 #ifdef TARGET_NR_mq_open
2572 static void
2573 print_mq_open(const struct syscallname *name,
2574     abi_long arg0, abi_long arg1, abi_long arg2,
2575     abi_long arg3, abi_long arg4, abi_long arg5)
2576 {
2577     int is_creat = (arg1 & TARGET_O_CREAT);
2578
2579     print_syscall_prologue(name);
2580     print_string(arg0, 0);
2581     print_open_flags(arg1, (is_creat == 0));
2582     if (is_creat) {
2583         print_file_mode(arg2, 0);
2584         print_pointer(arg3, 1);
2585     }
2586     print_syscall_epilogue(name);
2587 }
2588 #endif
2589
2590 #ifdef TARGET_NR_open
2591 static void
2592 print_open(const struct syscallname *name,
2593     abi_long arg0, abi_long arg1, abi_long arg2,
2594     abi_long arg3, abi_long arg4, abi_long arg5)
2595 {
2596     int is_creat = (arg1 & TARGET_O_CREAT);
2597
2598     print_syscall_prologue(name);
2599     print_string(arg0, 0);
2600     print_open_flags(arg1, (is_creat == 0));
2601     if (is_creat)
2602         print_file_mode(arg2, 1);
2603     print_syscall_epilogue(name);
2604 }
2605 #endif
2606
2607 #ifdef TARGET_NR_openat
2608 static void
2609 print_openat(const struct syscallname *name,
2610     abi_long arg0, abi_long arg1, abi_long arg2,
2611     abi_long arg3, abi_long arg4, abi_long arg5)
2612 {
2613     int is_creat = (arg2 & TARGET_O_CREAT);
2614
2615     print_syscall_prologue(name);
2616     print_at_dirfd(arg0, 0);
2617     print_string(arg1, 0);
2618     print_open_flags(arg2, (is_creat == 0));
2619     if (is_creat)
2620         print_file_mode(arg3, 1);
2621     print_syscall_epilogue(name);
2622 }
2623 #endif
2624
2625 #ifdef TARGET_NR_mq_unlink
2626 static void
2627 print_mq_unlink(const struct syscallname *name,
2628     abi_long arg0, abi_long arg1, abi_long arg2,
2629     abi_long arg3, abi_long arg4, abi_long arg5)
2630 {
2631     print_syscall_prologue(name);
2632     print_string(arg0, 1);
2633     print_syscall_epilogue(name);
2634 }
2635 #endif
2636
2637 #if defined(TARGET_NR_fstatat64) || defined(TARGET_NR_newfstatat)
2638 static void
2639 print_fstatat64(const struct syscallname *name,
2640     abi_long arg0, abi_long arg1, abi_long arg2,
2641     abi_long arg3, abi_long arg4, abi_long arg5)
2642 {
2643     print_syscall_prologue(name);
2644     print_at_dirfd(arg0, 0);
2645     print_string(arg1, 0);
2646     print_pointer(arg2, 0);
2647     print_flags(at_file_flags, arg3, 1);
2648     print_syscall_epilogue(name);
2649 }
2650 #define print_newfstatat    print_fstatat64
2651 #endif
2652
2653 #ifdef TARGET_NR_readlink
2654 static void
2655 print_readlink(const struct syscallname *name,
2656     abi_long arg0, abi_long arg1, abi_long arg2,
2657     abi_long arg3, abi_long arg4, abi_long arg5)
2658 {
2659     print_syscall_prologue(name);
2660     print_string(arg0, 0);
2661     print_pointer(arg1, 0);
2662     print_raw_param("%u", arg2, 1);
2663     print_syscall_epilogue(name);
2664 }
2665 #endif
2666
2667 #ifdef TARGET_NR_readlinkat
2668 static void
2669 print_readlinkat(const struct syscallname *name,
2670     abi_long arg0, abi_long arg1, abi_long arg2,
2671     abi_long arg3, abi_long arg4, abi_long arg5)
2672 {
2673     print_syscall_prologue(name);
2674     print_at_dirfd(arg0, 0);
2675     print_string(arg1, 0);
2676     print_pointer(arg2, 0);
2677     print_raw_param("%u", arg3, 1);
2678     print_syscall_epilogue(name);
2679 }
2680 #endif
2681
2682 #ifdef TARGET_NR_rename
2683 static void
2684 print_rename(const struct syscallname *name,
2685     abi_long arg0, abi_long arg1, abi_long arg2,
2686     abi_long arg3, abi_long arg4, abi_long arg5)
2687 {
2688     print_syscall_prologue(name);
2689     print_string(arg0, 0);
2690     print_string(arg1, 1);
2691     print_syscall_epilogue(name);
2692 }
2693 #endif
2694
2695 #ifdef TARGET_NR_renameat
2696 static void
2697 print_renameat(const struct syscallname *name,
2698     abi_long arg0, abi_long arg1, abi_long arg2,
2699     abi_long arg3, abi_long arg4, abi_long arg5)
2700 {
2701     print_syscall_prologue(name);
2702     print_at_dirfd(arg0, 0);
2703     print_string(arg1, 0);
2704     print_at_dirfd(arg2, 0);
2705     print_string(arg3, 1);
2706     print_syscall_epilogue(name);
2707 }
2708 #endif
2709
2710 #ifdef TARGET_NR_statfs
2711 static void
2712 print_statfs(const struct syscallname *name,
2713     abi_long arg0, abi_long arg1, abi_long arg2,
2714     abi_long arg3, abi_long arg4, abi_long arg5)
2715 {
2716     print_syscall_prologue(name);
2717     print_string(arg0, 0);
2718     print_pointer(arg1, 1);
2719     print_syscall_epilogue(name);
2720 }
2721 #endif
2722
2723 #ifdef TARGET_NR_statfs64
2724 static void
2725 print_statfs64(const struct syscallname *name,
2726     abi_long arg0, abi_long arg1, abi_long arg2,
2727     abi_long arg3, abi_long arg4, abi_long arg5)
2728 {
2729     print_syscall_prologue(name);
2730     print_string(arg0, 0);
2731     print_pointer(arg1, 1);
2732     print_syscall_epilogue(name);
2733 }
2734 #endif
2735
2736 #ifdef TARGET_NR_symlink
2737 static void
2738 print_symlink(const struct syscallname *name,
2739     abi_long arg0, abi_long arg1, abi_long arg2,
2740     abi_long arg3, abi_long arg4, abi_long arg5)
2741 {
2742     print_syscall_prologue(name);
2743     print_string(arg0, 0);
2744     print_string(arg1, 1);
2745     print_syscall_epilogue(name);
2746 }
2747 #endif
2748
2749 #ifdef TARGET_NR_symlinkat
2750 static void
2751 print_symlinkat(const struct syscallname *name,
2752     abi_long arg0, abi_long arg1, abi_long arg2,
2753     abi_long arg3, abi_long arg4, abi_long arg5)
2754 {
2755     print_syscall_prologue(name);
2756     print_string(arg0, 0);
2757     print_at_dirfd(arg1, 0);
2758     print_string(arg2, 1);
2759     print_syscall_epilogue(name);
2760 }
2761 #endif
2762
2763 #ifdef TARGET_NR_mount
2764 static void
2765 print_mount(const struct syscallname *name,
2766     abi_long arg0, abi_long arg1, abi_long arg2,
2767     abi_long arg3, abi_long arg4, abi_long arg5)
2768 {
2769     print_syscall_prologue(name);
2770     print_string(arg0, 0);
2771     print_string(arg1, 0);
2772     print_string(arg2, 0);
2773     print_flags(mount_flags, arg3, 0);
2774     print_pointer(arg4, 1);
2775     print_syscall_epilogue(name);
2776 }
2777 #endif
2778
2779 #ifdef TARGET_NR_umount
2780 static void
2781 print_umount(const struct syscallname *name,
2782     abi_long arg0, abi_long arg1, abi_long arg2,
2783     abi_long arg3, abi_long arg4, abi_long arg5)
2784 {
2785     print_syscall_prologue(name);
2786     print_string(arg0, 1);
2787     print_syscall_epilogue(name);
2788 }
2789 #endif
2790
2791 #ifdef TARGET_NR_umount2
2792 static void
2793 print_umount2(const struct syscallname *name,
2794     abi_long arg0, abi_long arg1, abi_long arg2,
2795     abi_long arg3, abi_long arg4, abi_long arg5)
2796 {
2797     print_syscall_prologue(name);
2798     print_string(arg0, 0);
2799     print_flags(umount2_flags, arg1, 1);
2800     print_syscall_epilogue(name);
2801 }
2802 #endif
2803
2804 #ifdef TARGET_NR_unlink
2805 static void
2806 print_unlink(const struct syscallname *name,
2807     abi_long arg0, abi_long arg1, abi_long arg2,
2808     abi_long arg3, abi_long arg4, abi_long arg5)
2809 {
2810     print_syscall_prologue(name);
2811     print_string(arg0, 1);
2812     print_syscall_epilogue(name);
2813 }
2814 #endif
2815
2816 #ifdef TARGET_NR_unlinkat
2817 static void
2818 print_unlinkat(const struct syscallname *name,
2819     abi_long arg0, abi_long arg1, abi_long arg2,
2820     abi_long arg3, abi_long arg4, abi_long arg5)
2821 {
2822     print_syscall_prologue(name);
2823     print_at_dirfd(arg0, 0);
2824     print_string(arg1, 0);
2825     print_flags(unlinkat_flags, arg2, 1);
2826     print_syscall_epilogue(name);
2827 }
2828 #endif
2829
2830 #ifdef TARGET_NR_utime
2831 static void
2832 print_utime(const struct syscallname *name,
2833     abi_long arg0, abi_long arg1, abi_long arg2,
2834     abi_long arg3, abi_long arg4, abi_long arg5)
2835 {
2836     print_syscall_prologue(name);
2837     print_string(arg0, 0);
2838     print_pointer(arg1, 1);
2839     print_syscall_epilogue(name);
2840 }
2841 #endif
2842
2843 #ifdef TARGET_NR_utimes
2844 static void
2845 print_utimes(const struct syscallname *name,
2846     abi_long arg0, abi_long arg1, abi_long arg2,
2847     abi_long arg3, abi_long arg4, abi_long arg5)
2848 {
2849     print_syscall_prologue(name);
2850     print_string(arg0, 0);
2851     print_pointer(arg1, 1);
2852     print_syscall_epilogue(name);
2853 }
2854 #endif
2855
2856 #ifdef TARGET_NR_utimensat
2857 static void
2858 print_utimensat(const struct syscallname *name,
2859     abi_long arg0, abi_long arg1, abi_long arg2,
2860     abi_long arg3, abi_long arg4, abi_long arg5)
2861 {
2862     print_syscall_prologue(name);
2863     print_at_dirfd(arg0, 0);
2864     print_string(arg1, 0);
2865     print_pointer(arg2, 0);
2866     print_flags(at_file_flags, arg3, 1);
2867     print_syscall_epilogue(name);
2868 }
2869 #endif
2870
2871 #if defined(TARGET_NR_mmap) || defined(TARGET_NR_mmap2)
2872 static void
2873 print_mmap(const struct syscallname *name,
2874     abi_long arg0, abi_long arg1, abi_long arg2,
2875     abi_long arg3, abi_long arg4, abi_long arg5)
2876 {
2877     print_syscall_prologue(name);
2878     print_pointer(arg0, 0);
2879     print_raw_param("%d", arg1, 0);
2880     print_flags(mmap_prot_flags, arg2, 0);
2881     print_flags(mmap_flags, arg3, 0);
2882     print_raw_param("%d", arg4, 0);
2883     print_raw_param("%#x", arg5, 1);
2884     print_syscall_epilogue(name);
2885 }
2886 #define print_mmap2     print_mmap
2887 #endif
2888
2889 #ifdef TARGET_NR_mprotect
2890 static void
2891 print_mprotect(const struct syscallname *name,
2892     abi_long arg0, abi_long arg1, abi_long arg2,
2893     abi_long arg3, abi_long arg4, abi_long arg5)
2894 {
2895     print_syscall_prologue(name);
2896     print_pointer(arg0, 0);
2897     print_raw_param("%d", arg1, 0);
2898     print_flags(mmap_prot_flags, arg2, 1);
2899     print_syscall_epilogue(name);
2900 }
2901 #endif
2902
2903 #ifdef TARGET_NR_munmap
2904 static void
2905 print_munmap(const struct syscallname *name,
2906     abi_long arg0, abi_long arg1, abi_long arg2,
2907     abi_long arg3, abi_long arg4, abi_long arg5)
2908 {
2909     print_syscall_prologue(name);
2910     print_pointer(arg0, 0);
2911     print_raw_param("%d", arg1, 1);
2912     print_syscall_epilogue(name);
2913 }
2914 #endif
2915
2916 #ifdef TARGET_NR_futex
2917 static void print_futex_op(abi_long tflag, int last)
2918 {
2919 #define print_op(val) \
2920 if( cmd == val ) { \
2921     qemu_log(#val); \
2922     return; \
2923 }
2924
2925     int cmd = (int)tflag;
2926 #ifdef FUTEX_PRIVATE_FLAG
2927     if (cmd & FUTEX_PRIVATE_FLAG) {
2928         qemu_log("FUTEX_PRIVATE_FLAG|");
2929         cmd &= ~FUTEX_PRIVATE_FLAG;
2930     }
2931 #endif
2932 #ifdef FUTEX_CLOCK_REALTIME
2933     if (cmd & FUTEX_CLOCK_REALTIME) {
2934         qemu_log("FUTEX_CLOCK_REALTIME|");
2935         cmd &= ~FUTEX_CLOCK_REALTIME;
2936     }
2937 #endif
2938     print_op(FUTEX_WAIT)
2939     print_op(FUTEX_WAKE)
2940     print_op(FUTEX_FD)
2941     print_op(FUTEX_REQUEUE)
2942     print_op(FUTEX_CMP_REQUEUE)
2943     print_op(FUTEX_WAKE_OP)
2944     print_op(FUTEX_LOCK_PI)
2945     print_op(FUTEX_UNLOCK_PI)
2946     print_op(FUTEX_TRYLOCK_PI)
2947 #ifdef FUTEX_WAIT_BITSET
2948     print_op(FUTEX_WAIT_BITSET)
2949 #endif
2950 #ifdef FUTEX_WAKE_BITSET
2951     print_op(FUTEX_WAKE_BITSET)
2952 #endif
2953     /* unknown values */
2954     qemu_log("%d", cmd);
2955 }
2956
2957 static void
2958 print_futex(const struct syscallname *name,
2959     abi_long arg0, abi_long arg1, abi_long arg2,
2960     abi_long arg3, abi_long arg4, abi_long arg5)
2961 {
2962     print_syscall_prologue(name);
2963     print_pointer(arg0, 0);
2964     print_futex_op(arg1, 0);
2965     print_raw_param(",%d", arg2, 0);
2966     print_pointer(arg3, 0); /* struct timespec */
2967     print_pointer(arg4, 0);
2968     print_raw_param("%d", arg4, 1);
2969     print_syscall_epilogue(name);
2970 }
2971 #endif
2972
2973 #ifdef TARGET_NR_kill
2974 static void
2975 print_kill(const struct syscallname *name,
2976     abi_long arg0, abi_long arg1, abi_long arg2,
2977     abi_long arg3, abi_long arg4, abi_long arg5)
2978 {
2979     print_syscall_prologue(name);
2980     print_raw_param("%d", arg0, 0);
2981     print_signal(arg1, 1);
2982     print_syscall_epilogue(name);
2983 }
2984 #endif
2985
2986 #ifdef TARGET_NR_tkill
2987 static void
2988 print_tkill(const struct syscallname *name,
2989     abi_long arg0, abi_long arg1, abi_long arg2,
2990     abi_long arg3, abi_long arg4, abi_long arg5)
2991 {
2992     print_syscall_prologue(name);
2993     print_raw_param("%d", arg0, 0);
2994     print_signal(arg1, 1);
2995     print_syscall_epilogue(name);
2996 }
2997 #endif
2998
2999 #ifdef TARGET_NR_tgkill
3000 static void
3001 print_tgkill(const struct syscallname *name,
3002     abi_long arg0, abi_long arg1, abi_long arg2,
3003     abi_long arg3, abi_long arg4, abi_long arg5)
3004 {
3005     print_syscall_prologue(name);
3006     print_raw_param("%d", arg0, 0);
3007     print_raw_param("%d", arg1, 0);
3008     print_signal(arg2, 1);
3009     print_syscall_epilogue(name);
3010 }
3011 #endif
3012
3013 #ifdef TARGET_NR_statx
3014 static void
3015 print_statx(const struct syscallname *name,
3016             abi_long arg0, abi_long arg1, abi_long arg2,
3017             abi_long arg3, abi_long arg4, abi_long arg5)
3018 {
3019     print_syscall_prologue(name);
3020     print_at_dirfd(arg0, 0);
3021     print_string(arg1, 0);
3022     print_flags(statx_flags, arg2, 0);
3023     print_flags(statx_mask, arg3, 0);
3024     print_pointer(arg4, 1);
3025     print_syscall_epilogue(name);
3026 }
3027 #endif
3028
3029 /*
3030  * An array of all of the syscalls we know about
3031  */
3032
3033 static const struct syscallname scnames[] = {
3034 #include "strace.list"
3035 };
3036
3037 static int nsyscalls = ARRAY_SIZE(scnames);
3038
3039 /*
3040  * The public interface to this module.
3041  */
3042 void
3043 print_syscall(int num,
3044               abi_long arg1, abi_long arg2, abi_long arg3,
3045               abi_long arg4, abi_long arg5, abi_long arg6)
3046 {
3047     int i;
3048     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 ")";
3049
3050     qemu_log("%d ", getpid());
3051
3052     for(i=0;i<nsyscalls;i++)
3053         if( scnames[i].nr == num ) {
3054             if( scnames[i].call != NULL ) {
3055                 scnames[i].call(
3056                     &scnames[i], arg1, arg2, arg3, arg4, arg5, arg6);
3057             } else {
3058                 /* XXX: this format system is broken because it uses
3059                    host types and host pointers for strings */
3060                 if( scnames[i].format != NULL )
3061                     format = scnames[i].format;
3062                 qemu_log(format,
3063                          scnames[i].name, arg1, arg2, arg3, arg4, arg5, arg6);
3064             }
3065             return;
3066         }
3067     qemu_log("Unknown syscall %d\n", num);
3068 }
3069
3070
3071 void
3072 print_syscall_ret(int num, abi_long ret,
3073                   abi_long arg1, abi_long arg2, abi_long arg3,
3074                   abi_long arg4, abi_long arg5, abi_long arg6)
3075 {
3076     int i;
3077
3078     for(i=0;i<nsyscalls;i++)
3079         if( scnames[i].nr == num ) {
3080             if( scnames[i].result != NULL ) {
3081                 scnames[i].result(&scnames[i], ret,
3082                                   arg1, arg2, arg3,
3083                                   arg4, arg5, arg6);
3084             } else {
3085                 print_syscall_err(ret);
3086
3087                 if (ret >= 0) {
3088                     qemu_log(TARGET_ABI_FMT_ld, ret);
3089                 }
3090                 qemu_log("\n");
3091             }
3092             break;
3093         }
3094 }
3095
3096 void print_taken_signal(int target_signum, const target_siginfo_t *tinfo)
3097 {
3098     /* Print the strace output for a signal being taken:
3099      * --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=0} ---
3100      */
3101     qemu_log("--- ");
3102     print_signal(target_signum, 1);
3103     qemu_log(" ");
3104     print_siginfo(tinfo);
3105     qemu_log(" ---\n");
3106 }
This page took 0.192495 seconds and 4 git commands to generate.