xref: /qemu/linux-user/strace.c (revision 5093bee0fa8a6c9712c96653da3a79bc37a4e45d)
1  #include "qemu/osdep.h"
2  
3  #include <sys/ipc.h>
4  #include <sys/msg.h>
5  #include <sys/sem.h>
6  #include <sys/shm.h>
7  #include <sys/select.h>
8  #include <sys/mount.h>
9  #include <arpa/inet.h>
10  #include <netinet/in.h>
11  #include <netinet/tcp.h>
12  #include <netinet/udp.h>
13  #include <linux/if_packet.h>
14  #include <linux/in6.h>
15  #include <linux/netlink.h>
16  #include <sched.h>
17  #include "qemu.h"
18  #include "user-internals.h"
19  #include "strace.h"
20  #include "signal-common.h"
21  #include "target_mman.h"
22  
23  struct syscallname {
24      int nr;
25      const char *name;
26      const char *format;
27      void (*call)(CPUArchState *, const struct syscallname *,
28                   abi_long, abi_long, abi_long,
29                   abi_long, abi_long, abi_long);
30      void (*result)(CPUArchState *, const struct syscallname *, abi_long,
31                     abi_long, abi_long, abi_long,
32                     abi_long, abi_long, abi_long);
33  };
34  
35  /*
36   * It is possible that target doesn't have syscall that uses
37   * following flags but we don't want the compiler to warn
38   * us about them being unused.  Same applies to utility print
39   * functions.  It is ok to keep them while not used.
40   */
41  #define UNUSED __attribute__ ((unused))
42  
43  /*
44   * Structure used to translate flag values into strings.  This is
45   * similar that is in the actual strace tool.
46   */
47  struct flags {
48      abi_long    f_value;  /* flag */
49      abi_long    f_mask;   /* mask */
50      const char  *f_string; /* stringified flag */
51  };
52  
53  /* No 'struct flags' element should have a zero mask. */
54  #define FLAG_BASIC(V, M, N)      { V, M | QEMU_BUILD_BUG_ON_ZERO(!(M)), N }
55  
56  /* common flags for all architectures */
57  #define FLAG_GENERIC_MASK(V, M)  FLAG_BASIC(V, M, #V)
58  #define FLAG_GENERIC(V)          FLAG_BASIC(V, V, #V)
59  /* target specific flags (syscall_defs.h has TARGET_<flag>) */
60  #define FLAG_TARGET_MASK(V, M)   FLAG_BASIC(TARGET_##V, TARGET_##M, #V)
61  #define FLAG_TARGET(V)           FLAG_BASIC(TARGET_##V, TARGET_##V, #V)
62  /* end of flags array */
63  #define FLAG_END           { 0, 0, NULL }
64  
65  /* Structure used to translate enumerated values into strings */
66  struct enums {
67      abi_long    e_value;   /* enum value */
68      const char  *e_string; /* stringified enum */
69  };
70  
71  /* common enums for all architectures */
72  #define ENUM_GENERIC(name) { name, #name }
73  /* target specific enums */
74  #define ENUM_TARGET(name)  { TARGET_ ## name, #name }
75  /* end of enums array */
76  #define ENUM_END           { 0, NULL }
77  
78  UNUSED static const char *get_comma(int);
79  UNUSED static void print_pointer(abi_long, int);
80  UNUSED static void print_flags(const struct flags *, abi_long, int);
81  UNUSED static void print_enums(const struct enums *, abi_long, int);
82  UNUSED static void print_at_dirfd(abi_long, int);
83  UNUSED static void print_file_mode(abi_long, int);
84  UNUSED static void print_open_flags(abi_long, int);
85  UNUSED static void print_syscall_prologue(const struct syscallname *);
86  UNUSED static void print_syscall_epilogue(const struct syscallname *);
87  UNUSED static void print_string(abi_long, int);
88  UNUSED static void print_buf(abi_long addr, abi_long len, int last);
89  UNUSED static void print_raw_param(const char *, abi_long, int);
90  UNUSED static void print_raw_param64(const char *, long long, int last);
91  UNUSED static void print_timeval(abi_ulong, int);
92  UNUSED static void print_timespec(abi_ulong, int);
93  UNUSED static void print_timespec64(abi_ulong, int);
94  UNUSED static void print_timezone(abi_ulong, int);
95  UNUSED static void print_itimerval(abi_ulong, int);
96  UNUSED static void print_number(abi_long, int);
97  UNUSED static void print_signal(abi_ulong, int);
98  UNUSED static void print_sockaddr(abi_ulong, abi_long, int);
99  UNUSED static void print_socket_domain(int domain);
100  UNUSED static void print_socket_type(int type);
101  UNUSED static void print_socket_protocol(int domain, int type, int protocol);
102  
103  /*
104   * Utility functions
105   */
106  static void
107  print_ipc_cmd(int cmd)
108  {
109  #define output_cmd(val) \
110  if( cmd == val ) { \
111      qemu_log(#val); \
112      return; \
113  }
114  
115      cmd &= 0xff;
116  
117      /* General IPC commands */
118      output_cmd( IPC_RMID );
119      output_cmd( IPC_SET );
120      output_cmd( IPC_STAT );
121      output_cmd( IPC_INFO );
122      /* msgctl() commands */
123      output_cmd( MSG_STAT );
124      output_cmd( MSG_INFO );
125      /* shmctl() commands */
126      output_cmd( SHM_LOCK );
127      output_cmd( SHM_UNLOCK );
128      output_cmd( SHM_STAT );
129      output_cmd( SHM_INFO );
130      /* semctl() commands */
131      output_cmd( GETPID );
132      output_cmd( GETVAL );
133      output_cmd( GETALL );
134      output_cmd( GETNCNT );
135      output_cmd( GETZCNT );
136      output_cmd( SETVAL );
137      output_cmd( SETALL );
138      output_cmd( SEM_STAT );
139      output_cmd( SEM_INFO );
140      output_cmd( IPC_RMID );
141      output_cmd( IPC_RMID );
142      output_cmd( IPC_RMID );
143      output_cmd( IPC_RMID );
144      output_cmd( IPC_RMID );
145      output_cmd( IPC_RMID );
146      output_cmd( IPC_RMID );
147      output_cmd( IPC_RMID );
148      output_cmd( IPC_RMID );
149  
150      /* Some value we don't recognize */
151      qemu_log("%d", cmd);
152  }
153  
154  static const char * const target_signal_name[] = {
155  #define MAKE_SIG_ENTRY(sig)     [TARGET_##sig] = #sig,
156          MAKE_SIGNAL_LIST
157  #undef MAKE_SIG_ENTRY
158  };
159  
160  static void
161  print_signal(abi_ulong arg, int last)
162  {
163      const char *signal_name = NULL;
164  
165      if (arg < ARRAY_SIZE(target_signal_name)) {
166          signal_name = target_signal_name[arg];
167      }
168  
169      if (signal_name == NULL) {
170          print_raw_param("%ld", arg, last);
171          return;
172      }
173      qemu_log("%s%s", signal_name, get_comma(last));
174  }
175  
176  static void print_si_code(int arg)
177  {
178      const char *codename = NULL;
179  
180      switch (arg) {
181      case SI_USER:
182          codename = "SI_USER";
183          break;
184      case SI_KERNEL:
185          codename = "SI_KERNEL";
186          break;
187      case SI_QUEUE:
188          codename = "SI_QUEUE";
189          break;
190      case SI_TIMER:
191          codename = "SI_TIMER";
192          break;
193      case SI_MESGQ:
194          codename = "SI_MESGQ";
195          break;
196      case SI_ASYNCIO:
197          codename = "SI_ASYNCIO";
198          break;
199      case SI_SIGIO:
200          codename = "SI_SIGIO";
201          break;
202      case SI_TKILL:
203          codename = "SI_TKILL";
204          break;
205      default:
206          qemu_log("%d", arg);
207          return;
208      }
209      qemu_log("%s", codename);
210  }
211  
212  static void get_target_siginfo(target_siginfo_t *tinfo,
213                                  const target_siginfo_t *info)
214  {
215      abi_ulong sival_ptr;
216  
217      int sig;
218      int si_errno;
219      int si_code;
220      int si_type;
221  
222      __get_user(sig, &info->si_signo);
223      __get_user(si_errno, &tinfo->si_errno);
224      __get_user(si_code, &info->si_code);
225  
226      tinfo->si_signo = sig;
227      tinfo->si_errno = si_errno;
228      tinfo->si_code = si_code;
229  
230      /* Ensure we don't leak random junk to the guest later */
231      memset(tinfo->_sifields._pad, 0, sizeof(tinfo->_sifields._pad));
232  
233      /* This is awkward, because we have to use a combination of
234       * the si_code and si_signo to figure out which of the union's
235       * members are valid. (Within the host kernel it is always possible
236       * to tell, but the kernel carefully avoids giving userspace the
237       * high 16 bits of si_code, so we don't have the information to
238       * do this the easy way...) We therefore make our best guess,
239       * bearing in mind that a guest can spoof most of the si_codes
240       * via rt_sigqueueinfo() if it likes.
241       *
242       * Once we have made our guess, we record it in the top 16 bits of
243       * the si_code, so that print_siginfo() later can use it.
244       * print_siginfo() will strip these top bits out before printing
245       * the si_code.
246       */
247  
248      switch (si_code) {
249      case SI_USER:
250      case SI_TKILL:
251      case SI_KERNEL:
252          /* Sent via kill(), tkill() or tgkill(), or direct from the kernel.
253           * These are the only unspoofable si_code values.
254           */
255          __get_user(tinfo->_sifields._kill._pid, &info->_sifields._kill._pid);
256          __get_user(tinfo->_sifields._kill._uid, &info->_sifields._kill._uid);
257          si_type = QEMU_SI_KILL;
258          break;
259      default:
260          /* Everything else is spoofable. Make best guess based on signal */
261          switch (sig) {
262          case TARGET_SIGCHLD:
263              __get_user(tinfo->_sifields._sigchld._pid,
264                         &info->_sifields._sigchld._pid);
265              __get_user(tinfo->_sifields._sigchld._uid,
266                         &info->_sifields._sigchld._uid);
267              __get_user(tinfo->_sifields._sigchld._status,
268                         &info->_sifields._sigchld._status);
269              __get_user(tinfo->_sifields._sigchld._utime,
270                         &info->_sifields._sigchld._utime);
271              __get_user(tinfo->_sifields._sigchld._stime,
272                         &info->_sifields._sigchld._stime);
273              si_type = QEMU_SI_CHLD;
274              break;
275          case TARGET_SIGIO:
276              __get_user(tinfo->_sifields._sigpoll._band,
277                         &info->_sifields._sigpoll._band);
278              __get_user(tinfo->_sifields._sigpoll._fd,
279                         &info->_sifields._sigpoll._fd);
280              si_type = QEMU_SI_POLL;
281              break;
282          default:
283              /* Assume a sigqueue()/mq_notify()/rt_sigqueueinfo() source. */
284              __get_user(tinfo->_sifields._rt._pid, &info->_sifields._rt._pid);
285              __get_user(tinfo->_sifields._rt._uid, &info->_sifields._rt._uid);
286              /* XXX: potential problem if 64 bit */
287              __get_user(sival_ptr, &info->_sifields._rt._sigval.sival_ptr);
288              tinfo->_sifields._rt._sigval.sival_ptr = sival_ptr;
289  
290              si_type = QEMU_SI_RT;
291              break;
292          }
293          break;
294      }
295  
296      tinfo->si_code = deposit32(si_code, 16, 16, si_type);
297  }
298  
299  static void print_siginfo(const target_siginfo_t *tinfo)
300  {
301      /* Print a target_siginfo_t in the format desired for printing
302       * signals being taken. We assume the target_siginfo_t is in the
303       * internal form where the top 16 bits of si_code indicate which
304       * part of the union is valid, rather than in the guest-visible
305       * form where the bottom 16 bits are sign-extended into the top 16.
306       */
307      int si_type = extract32(tinfo->si_code, 16, 16);
308      int si_code = sextract32(tinfo->si_code, 0, 16);
309  
310      qemu_log("{si_signo=");
311      print_signal(tinfo->si_signo, 1);
312      qemu_log(", si_code=");
313      print_si_code(si_code);
314  
315      switch (si_type) {
316      case QEMU_SI_KILL:
317          qemu_log(", si_pid=%u, si_uid=%u",
318                   (unsigned int)tinfo->_sifields._kill._pid,
319                   (unsigned int)tinfo->_sifields._kill._uid);
320          break;
321      case QEMU_SI_TIMER:
322          qemu_log(", si_timer1=%u, si_timer2=%u",
323                   tinfo->_sifields._timer._timer1,
324                   tinfo->_sifields._timer._timer2);
325          break;
326      case QEMU_SI_POLL:
327          qemu_log(", si_band=%d, si_fd=%d",
328                   tinfo->_sifields._sigpoll._band,
329                   tinfo->_sifields._sigpoll._fd);
330          break;
331      case QEMU_SI_FAULT:
332          qemu_log(", si_addr=");
333          print_pointer(tinfo->_sifields._sigfault._addr, 1);
334          break;
335      case QEMU_SI_CHLD:
336          qemu_log(", si_pid=%u, si_uid=%u, si_status=%d"
337                   ", si_utime=" TARGET_ABI_FMT_ld
338                   ", si_stime=" TARGET_ABI_FMT_ld,
339                   (unsigned int)(tinfo->_sifields._sigchld._pid),
340                   (unsigned int)(tinfo->_sifields._sigchld._uid),
341                   tinfo->_sifields._sigchld._status,
342                   tinfo->_sifields._sigchld._utime,
343                   tinfo->_sifields._sigchld._stime);
344          break;
345      case QEMU_SI_RT:
346          qemu_log(", si_pid=%u, si_uid=%u, si_sigval=" TARGET_ABI_FMT_ld,
347                   (unsigned int)tinfo->_sifields._rt._pid,
348                   (unsigned int)tinfo->_sifields._rt._uid,
349                   tinfo->_sifields._rt._sigval.sival_ptr);
350          break;
351      default:
352          g_assert_not_reached();
353      }
354      qemu_log("}");
355  }
356  
357  static void
358  print_sockaddr(abi_ulong addr, abi_long addrlen, int last)
359  {
360      struct target_sockaddr *sa;
361      int i;
362      int sa_family;
363  
364      sa = lock_user(VERIFY_READ, addr, addrlen, 1);
365      if (sa) {
366          sa_family = tswap16(sa->sa_family);
367          switch (sa_family) {
368          case AF_UNIX: {
369              struct target_sockaddr_un *un = (struct target_sockaddr_un *)sa;
370              qemu_log("{sun_family=AF_UNIX,sun_path=\"");
371              for (i = 0; i < addrlen -
372                              offsetof(struct target_sockaddr_un, sun_path) &&
373                   un->sun_path[i]; i++) {
374                  qemu_log("%c", un->sun_path[i]);
375              }
376              qemu_log("\"}");
377              break;
378          }
379          case AF_INET: {
380              struct target_sockaddr_in *in = (struct target_sockaddr_in *)sa;
381              uint8_t *c = (uint8_t *)&in->sin_addr.s_addr;
382              qemu_log("{sin_family=AF_INET,sin_port=htons(%d),",
383                       ntohs(in->sin_port));
384              qemu_log("sin_addr=inet_addr(\"%d.%d.%d.%d\")",
385                       c[0], c[1], c[2], c[3]);
386              qemu_log("}");
387              break;
388          }
389          case AF_PACKET: {
390              struct target_sockaddr_ll *ll = (struct target_sockaddr_ll *)sa;
391              uint8_t *c = (uint8_t *)&ll->sll_addr;
392              qemu_log("{sll_family=AF_PACKET,"
393                       "sll_protocol=htons(0x%04x),if%d,pkttype=",
394                       ntohs(ll->sll_protocol), ll->sll_ifindex);
395              switch (ll->sll_pkttype) {
396              case PACKET_HOST:
397                  qemu_log("PACKET_HOST");
398                  break;
399              case PACKET_BROADCAST:
400                  qemu_log("PACKET_BROADCAST");
401                  break;
402              case PACKET_MULTICAST:
403                  qemu_log("PACKET_MULTICAST");
404                  break;
405              case PACKET_OTHERHOST:
406                  qemu_log("PACKET_OTHERHOST");
407                  break;
408              case PACKET_OUTGOING:
409                  qemu_log("PACKET_OUTGOING");
410                  break;
411              default:
412                  qemu_log("%d", ll->sll_pkttype);
413                  break;
414              }
415              qemu_log(",sll_addr=%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
416                       c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7]);
417              qemu_log("}");
418              break;
419          }
420          case AF_NETLINK: {
421              struct target_sockaddr_nl *nl = (struct target_sockaddr_nl *)sa;
422              qemu_log("{nl_family=AF_NETLINK,nl_pid=%u,nl_groups=%u}",
423                       tswap32(nl->nl_pid), tswap32(nl->nl_groups));
424              break;
425          }
426          default:
427              qemu_log("{sa_family=%d, sa_data={", sa->sa_family);
428              for (i = 0; i < 13; i++) {
429                  qemu_log("%02x, ", sa->sa_data[i]);
430              }
431              qemu_log("%02x}", sa->sa_data[i]);
432              qemu_log("}");
433              break;
434          }
435          unlock_user(sa, addr, 0);
436      } else {
437          print_raw_param("0x"TARGET_ABI_FMT_lx, addr, 0);
438      }
439      qemu_log(", "TARGET_ABI_FMT_ld"%s", addrlen, get_comma(last));
440  }
441  
442  static void
443  print_socket_domain(int domain)
444  {
445      switch (domain) {
446      case PF_UNIX:
447          qemu_log("PF_UNIX");
448          break;
449      case PF_INET:
450          qemu_log("PF_INET");
451          break;
452      case PF_NETLINK:
453          qemu_log("PF_NETLINK");
454          break;
455      case PF_PACKET:
456          qemu_log("PF_PACKET");
457          break;
458      default:
459          qemu_log("%d", domain);
460          break;
461      }
462  }
463  
464  static void
465  print_socket_type(int type)
466  {
467      switch (type & TARGET_SOCK_TYPE_MASK) {
468      case TARGET_SOCK_DGRAM:
469          qemu_log("SOCK_DGRAM");
470          break;
471      case TARGET_SOCK_STREAM:
472          qemu_log("SOCK_STREAM");
473          break;
474      case TARGET_SOCK_RAW:
475          qemu_log("SOCK_RAW");
476          break;
477      case TARGET_SOCK_RDM:
478          qemu_log("SOCK_RDM");
479          break;
480      case TARGET_SOCK_SEQPACKET:
481          qemu_log("SOCK_SEQPACKET");
482          break;
483      case TARGET_SOCK_PACKET:
484          qemu_log("SOCK_PACKET");
485          break;
486      }
487      if (type & TARGET_SOCK_CLOEXEC) {
488          qemu_log("|SOCK_CLOEXEC");
489      }
490      if (type & TARGET_SOCK_NONBLOCK) {
491          qemu_log("|SOCK_NONBLOCK");
492      }
493  }
494  
495  static void
496  print_socket_protocol(int domain, int type, int protocol)
497  {
498      if (domain == AF_PACKET ||
499          (domain == AF_INET && type == TARGET_SOCK_PACKET)) {
500          switch (protocol) {
501          case 0x0003:
502              qemu_log("ETH_P_ALL");
503              break;
504          default:
505              qemu_log("%d", protocol);
506          }
507          return;
508      }
509  
510      if (domain == PF_NETLINK) {
511          switch (protocol) {
512          case NETLINK_ROUTE:
513              qemu_log("NETLINK_ROUTE");
514              break;
515          case NETLINK_UNUSED:
516              qemu_log("NETLINK_UNUSED");
517              break;
518          case NETLINK_USERSOCK:
519              qemu_log("NETLINK_USERSOCK");
520              break;
521          case NETLINK_FIREWALL:
522              qemu_log("NETLINK_FIREWALL");
523              break;
524          case NETLINK_SOCK_DIAG:
525              qemu_log("NETLINK_SOCK_DIAG");
526              break;
527          case NETLINK_NFLOG:
528              qemu_log("NETLINK_NFLOG");
529              break;
530          case NETLINK_XFRM:
531              qemu_log("NETLINK_XFRM");
532              break;
533          case NETLINK_SELINUX:
534              qemu_log("NETLINK_SELINUX");
535              break;
536          case NETLINK_ISCSI:
537              qemu_log("NETLINK_ISCSI");
538              break;
539          case NETLINK_AUDIT:
540              qemu_log("NETLINK_AUDIT");
541              break;
542          case NETLINK_FIB_LOOKUP:
543              qemu_log("NETLINK_FIB_LOOKUP");
544              break;
545          case NETLINK_CONNECTOR:
546              qemu_log("NETLINK_CONNECTOR");
547              break;
548          case NETLINK_NETFILTER:
549              qemu_log("NETLINK_NETFILTER");
550              break;
551          case NETLINK_IP6_FW:
552              qemu_log("NETLINK_IP6_FW");
553              break;
554          case NETLINK_DNRTMSG:
555              qemu_log("NETLINK_DNRTMSG");
556              break;
557          case NETLINK_KOBJECT_UEVENT:
558              qemu_log("NETLINK_KOBJECT_UEVENT");
559              break;
560          case NETLINK_GENERIC:
561              qemu_log("NETLINK_GENERIC");
562              break;
563          case NETLINK_SCSITRANSPORT:
564              qemu_log("NETLINK_SCSITRANSPORT");
565              break;
566          case NETLINK_ECRYPTFS:
567              qemu_log("NETLINK_ECRYPTFS");
568              break;
569          case NETLINK_RDMA:
570              qemu_log("NETLINK_RDMA");
571              break;
572          case NETLINK_CRYPTO:
573              qemu_log("NETLINK_CRYPTO");
574              break;
575          case NETLINK_SMC:
576              qemu_log("NETLINK_SMC");
577              break;
578          default:
579              qemu_log("%d", protocol);
580              break;
581          }
582          return;
583      }
584  
585      switch (protocol) {
586      case IPPROTO_IP:
587          qemu_log("IPPROTO_IP");
588          break;
589      case IPPROTO_TCP:
590          qemu_log("IPPROTO_TCP");
591          break;
592      case IPPROTO_UDP:
593          qemu_log("IPPROTO_UDP");
594          break;
595      case IPPROTO_RAW:
596          qemu_log("IPPROTO_RAW");
597          break;
598      default:
599          qemu_log("%d", protocol);
600          break;
601      }
602  }
603  
604  
605  #ifdef TARGET_NR__newselect
606  static void
607  print_fdset(int n, abi_ulong target_fds_addr)
608  {
609      int i;
610      int first = 1;
611  
612      qemu_log("[");
613      if( target_fds_addr ) {
614          abi_long *target_fds;
615  
616          target_fds = lock_user(VERIFY_READ,
617                                 target_fds_addr,
618                                 sizeof(*target_fds)*(n / TARGET_ABI_BITS + 1),
619                                 1);
620  
621          if (!target_fds)
622              return;
623  
624          for (i=n; i>=0; i--) {
625              if ((tswapal(target_fds[i / TARGET_ABI_BITS]) >>
626                  (i & (TARGET_ABI_BITS - 1))) & 1) {
627                  qemu_log("%s%d", get_comma(first), i);
628                  first = 0;
629              }
630          }
631          unlock_user(target_fds, target_fds_addr, 0);
632      }
633      qemu_log("]");
634  }
635  #endif
636  
637  /*
638   * Sysycall specific output functions
639   */
640  
641  /* select */
642  #ifdef TARGET_NR__newselect
643  static void
644  print_newselect(CPUArchState *cpu_env, const struct syscallname *name,
645                  abi_long arg1, abi_long arg2, abi_long arg3,
646                  abi_long arg4, abi_long arg5, abi_long arg6)
647  {
648      print_syscall_prologue(name);
649      print_fdset(arg1, arg2);
650      qemu_log(",");
651      print_fdset(arg1, arg3);
652      qemu_log(",");
653      print_fdset(arg1, arg4);
654      qemu_log(",");
655      print_timeval(arg5, 1);
656      print_syscall_epilogue(name);
657  }
658  #endif
659  
660  static void
661  print_semctl(CPUArchState *cpu_env, const struct syscallname *name,
662               abi_long arg1, abi_long arg2, abi_long arg3,
663               abi_long arg4, abi_long arg5, abi_long arg6)
664  {
665      qemu_log("%s(" TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ",",
666               name->name, arg1, arg2);
667      print_ipc_cmd(arg3);
668      qemu_log(",0x" TARGET_ABI_FMT_lx ")", arg4);
669  }
670  
671  static void
672  print_shmat(CPUArchState *cpu_env, const struct syscallname *name,
673              abi_long arg0, abi_long arg1, abi_long arg2,
674              abi_long arg3, abi_long arg4, abi_long arg5)
675  {
676      static const struct flags shmat_flags[] = {
677          FLAG_GENERIC(SHM_RND),
678          FLAG_GENERIC(SHM_REMAP),
679          FLAG_GENERIC(SHM_RDONLY),
680          FLAG_GENERIC(SHM_EXEC),
681          FLAG_END
682      };
683  
684      print_syscall_prologue(name);
685      print_raw_param(TARGET_ABI_FMT_ld, arg0, 0);
686      print_pointer(arg1, 0);
687      print_flags(shmat_flags, arg2, 1);
688      print_syscall_epilogue(name);
689  }
690  
691  #ifdef TARGET_NR_ipc
692  static void
693  print_ipc(CPUArchState *cpu_env, const struct syscallname *name,
694            abi_long arg1, abi_long arg2, abi_long arg3,
695            abi_long arg4, abi_long arg5, abi_long arg6)
696  {
697      switch(arg1) {
698      case IPCOP_semctl:
699          print_semctl(cpu_env, &(const struct syscallname){ .name = "semctl" },
700                       arg2, arg3, arg4, arg5, 0, 0);
701          break;
702      case IPCOP_shmat:
703          print_shmat(cpu_env, &(const struct syscallname){ .name = "shmat" },
704                      arg2, arg5, arg3, 0, 0, 0);
705          break;
706      default:
707          qemu_log(("%s("
708                    TARGET_ABI_FMT_ld ","
709                    TARGET_ABI_FMT_ld ","
710                    TARGET_ABI_FMT_ld ","
711                    TARGET_ABI_FMT_ld
712                    ")"),
713                   name->name, arg1, arg2, arg3, arg4);
714      }
715  }
716  #endif
717  
718  /*
719   * Variants for the return value output function
720   */
721  
722  static bool
723  print_syscall_err(abi_long ret)
724  {
725      const char *errstr;
726  
727      qemu_log(" = ");
728      if (is_error(ret)) {
729          errstr = target_strerror(-ret);
730          if (errstr) {
731              qemu_log("-1 errno=%d (%s)", (int)-ret, errstr);
732              return true;
733          }
734      }
735      return false;
736  }
737  
738  static void
739  print_syscall_ret_addr(CPUArchState *cpu_env, const struct syscallname *name,
740                         abi_long ret, abi_long arg0, abi_long arg1,
741                         abi_long arg2, abi_long arg3, abi_long arg4,
742                         abi_long arg5)
743  {
744      if (!print_syscall_err(ret)) {
745          qemu_log("0x" TARGET_ABI_FMT_lx, ret);
746      }
747      qemu_log("\n");
748  }
749  
750  #if 0 /* currently unused */
751  static void
752  print_syscall_ret_raw(struct syscallname *name, abi_long ret)
753  {
754          qemu_log(" = 0x" TARGET_ABI_FMT_lx "\n", ret);
755  }
756  #endif
757  
758  #ifdef TARGET_NR__newselect
759  static void
760  print_syscall_ret_newselect(CPUArchState *cpu_env, const struct syscallname *name,
761                              abi_long ret, abi_long arg0, abi_long arg1,
762                              abi_long arg2, abi_long arg3, abi_long arg4,
763                              abi_long arg5)
764  {
765      if (!print_syscall_err(ret)) {
766          qemu_log(" = 0x" TARGET_ABI_FMT_lx " (", ret);
767          print_fdset(arg0, arg1);
768          qemu_log(",");
769          print_fdset(arg0, arg2);
770          qemu_log(",");
771          print_fdset(arg0, arg3);
772          qemu_log(",");
773          print_timeval(arg4, 1);
774          qemu_log(")");
775      }
776  
777      qemu_log("\n");
778  }
779  #endif
780  
781  /* special meanings of adjtimex()' non-negative return values */
782  #define TARGET_TIME_OK       0   /* clock synchronized, no leap second */
783  #define TARGET_TIME_INS      1   /* insert leap second */
784  #define TARGET_TIME_DEL      2   /* delete leap second */
785  #define TARGET_TIME_OOP      3   /* leap second in progress */
786  #define TARGET_TIME_WAIT     4   /* leap second has occurred */
787  #define TARGET_TIME_ERROR    5   /* clock not synchronized */
788  #ifdef TARGET_NR_adjtimex
789  static void
790  print_syscall_ret_adjtimex(CPUArchState *cpu_env, const struct syscallname *name,
791                             abi_long ret, abi_long arg0, abi_long arg1,
792                             abi_long arg2, abi_long arg3, abi_long arg4,
793                             abi_long arg5)
794  {
795      if (!print_syscall_err(ret)) {
796          qemu_log(TARGET_ABI_FMT_ld, ret);
797          switch (ret) {
798          case TARGET_TIME_OK:
799              qemu_log(" TIME_OK (clock synchronized, no leap second)");
800              break;
801          case TARGET_TIME_INS:
802              qemu_log(" TIME_INS (insert leap second)");
803              break;
804          case TARGET_TIME_DEL:
805              qemu_log(" TIME_DEL (delete leap second)");
806              break;
807          case TARGET_TIME_OOP:
808              qemu_log(" TIME_OOP (leap second in progress)");
809              break;
810          case TARGET_TIME_WAIT:
811              qemu_log(" TIME_WAIT (leap second has occurred)");
812              break;
813          case TARGET_TIME_ERROR:
814              qemu_log(" TIME_ERROR (clock not synchronized)");
815              break;
816          }
817      }
818  
819      qemu_log("\n");
820  }
821  #endif
822  
823  #if defined(TARGET_NR_clock_gettime) || defined(TARGET_NR_clock_getres)
824  static void
825  print_syscall_ret_clock_gettime(CPUArchState *cpu_env, const struct syscallname *name,
826                                  abi_long ret, abi_long arg0, abi_long arg1,
827                                  abi_long arg2, abi_long arg3, abi_long arg4,
828                                  abi_long arg5)
829  {
830      if (!print_syscall_err(ret)) {
831          qemu_log(TARGET_ABI_FMT_ld, ret);
832          qemu_log(" (");
833          print_timespec(arg1, 1);
834          qemu_log(")");
835      }
836  
837      qemu_log("\n");
838  }
839  #define print_syscall_ret_clock_getres     print_syscall_ret_clock_gettime
840  #endif
841  
842  #if defined(TARGET_NR_clock_gettime64)
843  static void
844  print_syscall_ret_clock_gettime64(CPUArchState *cpu_env, const struct syscallname *name,
845                                  abi_long ret, abi_long arg0, abi_long arg1,
846                                  abi_long arg2, abi_long arg3, abi_long arg4,
847                                  abi_long arg5)
848  {
849      if (!print_syscall_err(ret)) {
850          qemu_log(TARGET_ABI_FMT_ld, ret);
851          qemu_log(" (");
852          print_timespec64(arg1, 1);
853          qemu_log(")");
854      }
855  
856      qemu_log("\n");
857  }
858  #endif
859  
860  #ifdef TARGET_NR_gettimeofday
861  static void
862  print_syscall_ret_gettimeofday(CPUArchState *cpu_env, const struct syscallname *name,
863                                 abi_long ret, abi_long arg0, abi_long arg1,
864                                 abi_long arg2, abi_long arg3, abi_long arg4,
865                                 abi_long arg5)
866  {
867      if (!print_syscall_err(ret)) {
868          qemu_log(TARGET_ABI_FMT_ld, ret);
869          qemu_log(" (");
870          print_timeval(arg0, 0);
871          print_timezone(arg1, 1);
872          qemu_log(")");
873      }
874  
875      qemu_log("\n");
876  }
877  #endif
878  
879  #ifdef TARGET_NR_getitimer
880  static void
881  print_syscall_ret_getitimer(CPUArchState *cpu_env, const struct syscallname *name,
882                              abi_long ret, abi_long arg0, abi_long arg1,
883                              abi_long arg2, abi_long arg3, abi_long arg4,
884                              abi_long arg5)
885  {
886      if (!print_syscall_err(ret)) {
887          qemu_log(TARGET_ABI_FMT_ld, ret);
888          qemu_log(" (");
889          print_itimerval(arg1, 1);
890          qemu_log(")");
891      }
892  
893      qemu_log("\n");
894  }
895  #endif
896  
897  
898  #ifdef TARGET_NR_getitimer
899  static void
900  print_syscall_ret_setitimer(CPUArchState *cpu_env, const struct syscallname *name,
901                              abi_long ret, abi_long arg0, abi_long arg1,
902                              abi_long arg2, abi_long arg3, abi_long arg4,
903                              abi_long arg5)
904  {
905      if (!print_syscall_err(ret)) {
906          qemu_log(TARGET_ABI_FMT_ld, ret);
907          qemu_log(" (old_value = ");
908          print_itimerval(arg2, 1);
909          qemu_log(")");
910      }
911  
912      qemu_log("\n");
913  }
914  #endif
915  
916  #if defined(TARGET_NR_listxattr) || defined(TARGET_NR_llistxattr) \
917   || defined(TARGGET_NR_flistxattr)
918  static void
919  print_syscall_ret_listxattr(CPUArchState *cpu_env, const struct syscallname *name,
920                              abi_long ret, abi_long arg0, abi_long arg1,
921                              abi_long arg2, abi_long arg3, abi_long arg4,
922                              abi_long arg5)
923  {
924      if (!print_syscall_err(ret)) {
925          qemu_log(TARGET_ABI_FMT_ld, ret);
926          qemu_log(" (list = ");
927          if (arg1 != 0) {
928              abi_long attr = arg1;
929              while (ret) {
930                  if (attr != arg1) {
931                      qemu_log(",");
932                  }
933                  print_string(attr, 1);
934                  ret -= target_strlen(attr) + 1;
935                  attr += target_strlen(attr) + 1;
936              }
937          } else {
938              qemu_log("NULL");
939          }
940          qemu_log(")");
941      }
942  
943      qemu_log("\n");
944  }
945  #define print_syscall_ret_llistxattr     print_syscall_ret_listxattr
946  #define print_syscall_ret_flistxattr     print_syscall_ret_listxattr
947  #endif
948  
949  #ifdef TARGET_NR_ioctl
950  static void
951  print_syscall_ret_ioctl(CPUArchState *cpu_env, const struct syscallname *name,
952                          abi_long ret, abi_long arg0, abi_long arg1,
953                          abi_long arg2, abi_long arg3, abi_long arg4,
954                          abi_long arg5)
955  {
956      if (!print_syscall_err(ret)) {
957          qemu_log(TARGET_ABI_FMT_ld, ret);
958  
959          const IOCTLEntry *ie;
960          const argtype *arg_type;
961          void *argptr;
962          int target_size;
963  
964          for (ie = ioctl_entries; ie->target_cmd != 0; ie++) {
965              if (ie->target_cmd == arg1) {
966                  break;
967              }
968          }
969  
970          if (ie->target_cmd == arg1 &&
971             (ie->access == IOC_R || ie->access == IOC_RW)) {
972              arg_type = ie->arg_type;
973              qemu_log(" (");
974              arg_type++;
975              target_size = thunk_type_size(arg_type, 0);
976              argptr = lock_user(VERIFY_READ, arg2, target_size, 1);
977              if (argptr) {
978                  thunk_print(argptr, arg_type);
979                  unlock_user(argptr, arg2, target_size);
980              } else {
981                  print_pointer(arg2, 1);
982              }
983              qemu_log(")");
984          }
985      }
986      qemu_log("\n");
987  }
988  #endif
989  
990  UNUSED static const struct flags access_flags[] = {
991      FLAG_GENERIC_MASK(F_OK, R_OK | W_OK | X_OK),
992      FLAG_GENERIC(R_OK),
993      FLAG_GENERIC(W_OK),
994      FLAG_GENERIC(X_OK),
995      FLAG_END,
996  };
997  
998  UNUSED static const struct flags at_file_flags[] = {
999  #ifdef AT_EACCESS
1000      FLAG_GENERIC(AT_EACCESS),
1001  #endif
1002  #ifdef AT_SYMLINK_NOFOLLOW
1003      FLAG_GENERIC(AT_SYMLINK_NOFOLLOW),
1004  #endif
1005      FLAG_END,
1006  };
1007  
1008  UNUSED static const struct flags unlinkat_flags[] = {
1009  #ifdef AT_REMOVEDIR
1010      FLAG_GENERIC(AT_REMOVEDIR),
1011  #endif
1012      FLAG_END,
1013  };
1014  
1015  UNUSED static const struct flags mode_flags[] = {
1016      FLAG_GENERIC(S_IFSOCK),
1017      FLAG_GENERIC(S_IFLNK),
1018      FLAG_GENERIC(S_IFREG),
1019      FLAG_GENERIC(S_IFBLK),
1020      FLAG_GENERIC(S_IFDIR),
1021      FLAG_GENERIC(S_IFCHR),
1022      FLAG_GENERIC(S_IFIFO),
1023      FLAG_END,
1024  };
1025  
1026  UNUSED static const struct flags open_access_flags[] = {
1027      FLAG_TARGET_MASK(O_RDONLY, O_ACCMODE),
1028      FLAG_TARGET_MASK(O_WRONLY, O_ACCMODE),
1029      FLAG_TARGET_MASK(O_RDWR, O_ACCMODE),
1030      FLAG_END,
1031  };
1032  
1033  UNUSED static const struct flags open_flags[] = {
1034      FLAG_TARGET(O_APPEND),
1035      FLAG_TARGET(O_CREAT),
1036      FLAG_TARGET(O_DIRECTORY),
1037      FLAG_TARGET(O_EXCL),
1038  #if TARGET_O_LARGEFILE != 0
1039      FLAG_TARGET(O_LARGEFILE),
1040  #endif
1041      FLAG_TARGET(O_NOCTTY),
1042      FLAG_TARGET(O_NOFOLLOW),
1043      FLAG_TARGET(O_NONBLOCK),      /* also O_NDELAY */
1044      FLAG_TARGET(O_DSYNC),
1045      FLAG_TARGET(__O_SYNC),
1046      FLAG_TARGET(O_TRUNC),
1047  #ifdef O_DIRECT
1048      FLAG_TARGET(O_DIRECT),
1049  #endif
1050  #ifdef O_NOATIME
1051      FLAG_TARGET(O_NOATIME),
1052  #endif
1053  #ifdef O_CLOEXEC
1054      FLAG_TARGET(O_CLOEXEC),
1055  #endif
1056  #ifdef O_PATH
1057      FLAG_TARGET(O_PATH),
1058  #endif
1059  #ifdef O_TMPFILE
1060      FLAG_TARGET(O_TMPFILE),
1061      FLAG_TARGET(__O_TMPFILE),
1062  #endif
1063      FLAG_END,
1064  };
1065  
1066  UNUSED static const struct flags mount_flags[] = {
1067  #ifdef MS_BIND
1068      FLAG_GENERIC(MS_BIND),
1069  #endif
1070  #ifdef MS_DIRSYNC
1071      FLAG_GENERIC(MS_DIRSYNC),
1072  #endif
1073      FLAG_GENERIC(MS_MANDLOCK),
1074  #ifdef MS_MOVE
1075      FLAG_GENERIC(MS_MOVE),
1076  #endif
1077      FLAG_GENERIC(MS_NOATIME),
1078      FLAG_GENERIC(MS_NODEV),
1079      FLAG_GENERIC(MS_NODIRATIME),
1080      FLAG_GENERIC(MS_NOEXEC),
1081      FLAG_GENERIC(MS_NOSUID),
1082      FLAG_GENERIC(MS_RDONLY),
1083  #ifdef MS_RELATIME
1084      FLAG_GENERIC(MS_RELATIME),
1085  #endif
1086      FLAG_GENERIC(MS_REMOUNT),
1087      FLAG_GENERIC(MS_SYNCHRONOUS),
1088      FLAG_END,
1089  };
1090  
1091  UNUSED static const struct flags umount2_flags[] = {
1092  #ifdef MNT_FORCE
1093      FLAG_GENERIC(MNT_FORCE),
1094  #endif
1095  #ifdef MNT_DETACH
1096      FLAG_GENERIC(MNT_DETACH),
1097  #endif
1098  #ifdef MNT_EXPIRE
1099      FLAG_GENERIC(MNT_EXPIRE),
1100  #endif
1101      FLAG_END,
1102  };
1103  
1104  UNUSED static const struct flags mmap_prot_flags[] = {
1105      FLAG_GENERIC_MASK(PROT_NONE, PROT_READ | PROT_WRITE | PROT_EXEC),
1106      FLAG_GENERIC(PROT_EXEC),
1107      FLAG_GENERIC(PROT_READ),
1108      FLAG_GENERIC(PROT_WRITE),
1109      FLAG_TARGET(PROT_SEM),
1110      FLAG_GENERIC(PROT_GROWSDOWN),
1111      FLAG_GENERIC(PROT_GROWSUP),
1112      FLAG_END,
1113  };
1114  
1115  UNUSED static const struct flags mmap_flags[] = {
1116      FLAG_TARGET_MASK(MAP_SHARED, MAP_TYPE),
1117      FLAG_TARGET_MASK(MAP_PRIVATE, MAP_TYPE),
1118      FLAG_TARGET_MASK(MAP_SHARED_VALIDATE, MAP_TYPE),
1119      FLAG_TARGET(MAP_ANONYMOUS),
1120      FLAG_TARGET(MAP_DENYWRITE),
1121      FLAG_TARGET(MAP_EXECUTABLE),
1122      FLAG_TARGET(MAP_FIXED),
1123      FLAG_TARGET(MAP_FIXED_NOREPLACE),
1124      FLAG_TARGET(MAP_GROWSDOWN),
1125      FLAG_TARGET(MAP_HUGETLB),
1126      FLAG_TARGET(MAP_LOCKED),
1127      FLAG_TARGET(MAP_NONBLOCK),
1128      FLAG_TARGET(MAP_NORESERVE),
1129      FLAG_TARGET(MAP_POPULATE),
1130      FLAG_TARGET(MAP_STACK),
1131      FLAG_TARGET(MAP_SYNC),
1132  #if TARGET_MAP_UNINITIALIZED != 0
1133      FLAG_TARGET(MAP_UNINITIALIZED),
1134  #endif
1135      FLAG_END,
1136  };
1137  
1138  #ifndef CLONE_PIDFD
1139  # define CLONE_PIDFD 0x00001000
1140  #endif
1141  
1142  UNUSED static const struct flags clone_flags[] = {
1143      FLAG_GENERIC(CLONE_VM),
1144      FLAG_GENERIC(CLONE_FS),
1145      FLAG_GENERIC(CLONE_FILES),
1146      FLAG_GENERIC(CLONE_SIGHAND),
1147      FLAG_GENERIC(CLONE_PIDFD),
1148      FLAG_GENERIC(CLONE_PTRACE),
1149      FLAG_GENERIC(CLONE_VFORK),
1150      FLAG_GENERIC(CLONE_PARENT),
1151      FLAG_GENERIC(CLONE_THREAD),
1152      FLAG_GENERIC(CLONE_NEWNS),
1153      FLAG_GENERIC(CLONE_SYSVSEM),
1154      FLAG_GENERIC(CLONE_SETTLS),
1155      FLAG_GENERIC(CLONE_PARENT_SETTID),
1156      FLAG_GENERIC(CLONE_CHILD_CLEARTID),
1157      FLAG_GENERIC(CLONE_DETACHED),
1158      FLAG_GENERIC(CLONE_UNTRACED),
1159      FLAG_GENERIC(CLONE_CHILD_SETTID),
1160  #if defined(CLONE_NEWUTS)
1161      FLAG_GENERIC(CLONE_NEWUTS),
1162  #endif
1163  #if defined(CLONE_NEWIPC)
1164      FLAG_GENERIC(CLONE_NEWIPC),
1165  #endif
1166  #if defined(CLONE_NEWUSER)
1167      FLAG_GENERIC(CLONE_NEWUSER),
1168  #endif
1169  #if defined(CLONE_NEWPID)
1170      FLAG_GENERIC(CLONE_NEWPID),
1171  #endif
1172  #if defined(CLONE_NEWNET)
1173      FLAG_GENERIC(CLONE_NEWNET),
1174  #endif
1175  #if defined(CLONE_NEWCGROUP)
1176      FLAG_GENERIC(CLONE_NEWCGROUP),
1177  #endif
1178  #if defined(CLONE_NEWTIME)
1179      FLAG_GENERIC(CLONE_NEWTIME),
1180  #endif
1181  #if defined(CLONE_IO)
1182      FLAG_GENERIC(CLONE_IO),
1183  #endif
1184      FLAG_END,
1185  };
1186  
1187  UNUSED static const struct flags execveat_flags[] = {
1188  #ifdef AT_EMPTY_PATH
1189      FLAG_GENERIC(AT_EMPTY_PATH),
1190  #endif
1191  #ifdef AT_SYMLINK_NOFOLLOW
1192      FLAG_GENERIC(AT_SYMLINK_NOFOLLOW),
1193  #endif
1194      FLAG_END,
1195  };
1196  
1197  UNUSED static const struct flags msg_flags[] = {
1198      /* send */
1199      FLAG_GENERIC(MSG_CONFIRM),
1200      FLAG_GENERIC(MSG_DONTROUTE),
1201      FLAG_GENERIC(MSG_DONTWAIT),
1202      FLAG_GENERIC(MSG_EOR),
1203      FLAG_GENERIC(MSG_MORE),
1204      FLAG_GENERIC(MSG_NOSIGNAL),
1205      FLAG_GENERIC(MSG_OOB),
1206      /* recv */
1207      FLAG_GENERIC(MSG_CMSG_CLOEXEC),
1208      FLAG_GENERIC(MSG_ERRQUEUE),
1209      FLAG_GENERIC(MSG_PEEK),
1210      FLAG_GENERIC(MSG_TRUNC),
1211      FLAG_GENERIC(MSG_WAITALL),
1212      /* recvmsg */
1213      FLAG_GENERIC(MSG_CTRUNC),
1214      FLAG_END,
1215  };
1216  
1217  UNUSED static const struct flags statx_flags[] = {
1218  #ifdef AT_EMPTY_PATH
1219      FLAG_GENERIC(AT_EMPTY_PATH),
1220  #endif
1221  #ifdef AT_NO_AUTOMOUNT
1222      FLAG_GENERIC(AT_NO_AUTOMOUNT),
1223  #endif
1224  #ifdef AT_SYMLINK_NOFOLLOW
1225      FLAG_GENERIC(AT_SYMLINK_NOFOLLOW),
1226  #endif
1227  #ifdef AT_STATX_SYNC_AS_STAT
1228      FLAG_GENERIC_MASK(AT_STATX_SYNC_AS_STAT, AT_STATX_SYNC_TYPE),
1229  #endif
1230  #ifdef AT_STATX_FORCE_SYNC
1231      FLAG_GENERIC_MASK(AT_STATX_FORCE_SYNC, AT_STATX_SYNC_TYPE),
1232  #endif
1233  #ifdef AT_STATX_DONT_SYNC
1234      FLAG_GENERIC_MASK(AT_STATX_DONT_SYNC, AT_STATX_SYNC_TYPE),
1235  #endif
1236      FLAG_END,
1237  };
1238  
1239  UNUSED static const struct flags statx_mask[] = {
1240  /* This must come first, because it includes everything.  */
1241  #ifdef STATX_ALL
1242      FLAG_GENERIC(STATX_ALL),
1243  #endif
1244  /* This must come second; it includes everything except STATX_BTIME.  */
1245  #ifdef STATX_BASIC_STATS
1246      FLAG_GENERIC(STATX_BASIC_STATS),
1247  #endif
1248  #ifdef STATX_TYPE
1249      FLAG_GENERIC(STATX_TYPE),
1250  #endif
1251  #ifdef STATX_MODE
1252      FLAG_GENERIC(STATX_MODE),
1253  #endif
1254  #ifdef STATX_NLINK
1255      FLAG_GENERIC(STATX_NLINK),
1256  #endif
1257  #ifdef STATX_UID
1258      FLAG_GENERIC(STATX_UID),
1259  #endif
1260  #ifdef STATX_GID
1261      FLAG_GENERIC(STATX_GID),
1262  #endif
1263  #ifdef STATX_ATIME
1264      FLAG_GENERIC(STATX_ATIME),
1265  #endif
1266  #ifdef STATX_MTIME
1267      FLAG_GENERIC(STATX_MTIME),
1268  #endif
1269  #ifdef STATX_CTIME
1270      FLAG_GENERIC(STATX_CTIME),
1271  #endif
1272  #ifdef STATX_INO
1273      FLAG_GENERIC(STATX_INO),
1274  #endif
1275  #ifdef STATX_SIZE
1276      FLAG_GENERIC(STATX_SIZE),
1277  #endif
1278  #ifdef STATX_BLOCKS
1279      FLAG_GENERIC(STATX_BLOCKS),
1280  #endif
1281  #ifdef STATX_BTIME
1282      FLAG_GENERIC(STATX_BTIME),
1283  #endif
1284      FLAG_END,
1285  };
1286  
1287  UNUSED static const struct flags falloc_flags[] = {
1288      FLAG_GENERIC(FALLOC_FL_KEEP_SIZE),
1289      FLAG_GENERIC(FALLOC_FL_PUNCH_HOLE),
1290  #ifdef FALLOC_FL_NO_HIDE_STALE
1291      FLAG_GENERIC(FALLOC_FL_NO_HIDE_STALE),
1292  #endif
1293  #ifdef FALLOC_FL_COLLAPSE_RANGE
1294      FLAG_GENERIC(FALLOC_FL_COLLAPSE_RANGE),
1295  #endif
1296  #ifdef FALLOC_FL_ZERO_RANGE
1297      FLAG_GENERIC(FALLOC_FL_ZERO_RANGE),
1298  #endif
1299  #ifdef FALLOC_FL_INSERT_RANGE
1300      FLAG_GENERIC(FALLOC_FL_INSERT_RANGE),
1301  #endif
1302  #ifdef FALLOC_FL_UNSHARE_RANGE
1303      FLAG_GENERIC(FALLOC_FL_UNSHARE_RANGE),
1304  #endif
1305  };
1306  
1307  UNUSED static const struct flags termios_iflags[] = {
1308      FLAG_TARGET(IGNBRK),
1309      FLAG_TARGET(BRKINT),
1310      FLAG_TARGET(IGNPAR),
1311      FLAG_TARGET(PARMRK),
1312      FLAG_TARGET(INPCK),
1313      FLAG_TARGET(ISTRIP),
1314      FLAG_TARGET(INLCR),
1315      FLAG_TARGET(IGNCR),
1316      FLAG_TARGET(ICRNL),
1317      FLAG_TARGET(IUCLC),
1318      FLAG_TARGET(IXON),
1319      FLAG_TARGET(IXANY),
1320      FLAG_TARGET(IXOFF),
1321      FLAG_TARGET(IMAXBEL),
1322      FLAG_TARGET(IUTF8),
1323      FLAG_END,
1324  };
1325  
1326  UNUSED static const struct flags termios_oflags[] = {
1327      FLAG_TARGET(OPOST),
1328      FLAG_TARGET(OLCUC),
1329      FLAG_TARGET(ONLCR),
1330      FLAG_TARGET(OCRNL),
1331      FLAG_TARGET(ONOCR),
1332      FLAG_TARGET(ONLRET),
1333      FLAG_TARGET(OFILL),
1334      FLAG_TARGET(OFDEL),
1335      FLAG_END,
1336  };
1337  
1338  UNUSED static struct enums termios_oflags_NLDLY[] = {
1339      ENUM_TARGET(NL0),
1340      ENUM_TARGET(NL1),
1341      ENUM_END,
1342  };
1343  
1344  UNUSED static struct enums termios_oflags_CRDLY[] = {
1345      ENUM_TARGET(CR0),
1346      ENUM_TARGET(CR1),
1347      ENUM_TARGET(CR2),
1348      ENUM_TARGET(CR3),
1349      ENUM_END,
1350  };
1351  
1352  UNUSED static struct enums termios_oflags_TABDLY[] = {
1353      ENUM_TARGET(TAB0),
1354      ENUM_TARGET(TAB1),
1355      ENUM_TARGET(TAB2),
1356      ENUM_TARGET(TAB3),
1357      ENUM_END,
1358  };
1359  
1360  UNUSED static struct enums termios_oflags_VTDLY[] = {
1361      ENUM_TARGET(VT0),
1362      ENUM_TARGET(VT1),
1363      ENUM_END,
1364  };
1365  
1366  UNUSED static struct enums termios_oflags_FFDLY[] = {
1367      ENUM_TARGET(FF0),
1368      ENUM_TARGET(FF1),
1369      ENUM_END,
1370  };
1371  
1372  UNUSED static struct enums termios_oflags_BSDLY[] = {
1373      ENUM_TARGET(BS0),
1374      ENUM_TARGET(BS1),
1375      ENUM_END,
1376  };
1377  
1378  UNUSED static struct enums termios_cflags_CBAUD[] = {
1379      ENUM_TARGET(B0),
1380      ENUM_TARGET(B50),
1381      ENUM_TARGET(B75),
1382      ENUM_TARGET(B110),
1383      ENUM_TARGET(B134),
1384      ENUM_TARGET(B150),
1385      ENUM_TARGET(B200),
1386      ENUM_TARGET(B300),
1387      ENUM_TARGET(B600),
1388      ENUM_TARGET(B1200),
1389      ENUM_TARGET(B1800),
1390      ENUM_TARGET(B2400),
1391      ENUM_TARGET(B4800),
1392      ENUM_TARGET(B9600),
1393      ENUM_TARGET(B19200),
1394      ENUM_TARGET(B38400),
1395      ENUM_TARGET(B57600),
1396      ENUM_TARGET(B115200),
1397      ENUM_TARGET(B230400),
1398      ENUM_TARGET(B460800),
1399      ENUM_END,
1400  };
1401  
1402  UNUSED static struct enums termios_cflags_CSIZE[] = {
1403      ENUM_TARGET(CS5),
1404      ENUM_TARGET(CS6),
1405      ENUM_TARGET(CS7),
1406      ENUM_TARGET(CS8),
1407      ENUM_END,
1408  };
1409  
1410  UNUSED static const struct flags termios_cflags[] = {
1411      FLAG_TARGET(CSTOPB),
1412      FLAG_TARGET(CREAD),
1413      FLAG_TARGET(PARENB),
1414      FLAG_TARGET(PARODD),
1415      FLAG_TARGET(HUPCL),
1416      FLAG_TARGET(CLOCAL),
1417      FLAG_TARGET(CRTSCTS),
1418      FLAG_END,
1419  };
1420  
1421  UNUSED static const struct flags termios_lflags[] = {
1422      FLAG_TARGET(ISIG),
1423      FLAG_TARGET(ICANON),
1424      FLAG_TARGET(XCASE),
1425      FLAG_TARGET(ECHO),
1426      FLAG_TARGET(ECHOE),
1427      FLAG_TARGET(ECHOK),
1428      FLAG_TARGET(ECHONL),
1429      FLAG_TARGET(NOFLSH),
1430      FLAG_TARGET(TOSTOP),
1431      FLAG_TARGET(ECHOCTL),
1432      FLAG_TARGET(ECHOPRT),
1433      FLAG_TARGET(ECHOKE),
1434      FLAG_TARGET(FLUSHO),
1435      FLAG_TARGET(PENDIN),
1436      FLAG_TARGET(IEXTEN),
1437      FLAG_TARGET(EXTPROC),
1438      FLAG_END,
1439  };
1440  
1441  #ifdef TARGET_NR_mlockall
1442  static const struct flags mlockall_flags[] = {
1443      FLAG_TARGET(MCL_CURRENT),
1444      FLAG_TARGET(MCL_FUTURE),
1445  #ifdef MCL_ONFAULT
1446      FLAG_TARGET(MCL_ONFAULT),
1447  #endif
1448      FLAG_END,
1449  };
1450  #endif
1451  
1452  /* IDs of the various system clocks */
1453  #define TARGET_CLOCK_REALTIME              0
1454  #define TARGET_CLOCK_MONOTONIC             1
1455  #define TARGET_CLOCK_PROCESS_CPUTIME_ID    2
1456  #define TARGET_CLOCK_THREAD_CPUTIME_ID     3
1457  #define TARGET_CLOCK_MONOTONIC_RAW         4
1458  #define TARGET_CLOCK_REALTIME_COARSE       5
1459  #define TARGET_CLOCK_MONOTONIC_COARSE      6
1460  #define TARGET_CLOCK_BOOTTIME              7
1461  #define TARGET_CLOCK_REALTIME_ALARM        8
1462  #define TARGET_CLOCK_BOOTTIME_ALARM        9
1463  #define TARGET_CLOCK_SGI_CYCLE             10
1464  #define TARGET_CLOCK_TAI                   11
1465  
1466  UNUSED static struct enums clockids[] = {
1467      ENUM_TARGET(CLOCK_REALTIME),
1468      ENUM_TARGET(CLOCK_MONOTONIC),
1469      ENUM_TARGET(CLOCK_PROCESS_CPUTIME_ID),
1470      ENUM_TARGET(CLOCK_THREAD_CPUTIME_ID),
1471      ENUM_TARGET(CLOCK_MONOTONIC_RAW),
1472      ENUM_TARGET(CLOCK_REALTIME_COARSE),
1473      ENUM_TARGET(CLOCK_MONOTONIC_COARSE),
1474      ENUM_TARGET(CLOCK_BOOTTIME),
1475      ENUM_TARGET(CLOCK_REALTIME_ALARM),
1476      ENUM_TARGET(CLOCK_BOOTTIME_ALARM),
1477      ENUM_TARGET(CLOCK_SGI_CYCLE),
1478      ENUM_TARGET(CLOCK_TAI),
1479      ENUM_END,
1480  };
1481  
1482  UNUSED static struct enums itimer_types[] = {
1483      ENUM_GENERIC(ITIMER_REAL),
1484      ENUM_GENERIC(ITIMER_VIRTUAL),
1485      ENUM_GENERIC(ITIMER_PROF),
1486      ENUM_END,
1487  };
1488  
1489  /*
1490   * print_xxx utility functions.  These are used to print syscall
1491   * parameters in certain format.  All of these have parameter
1492   * named 'last'.  This parameter is used to add comma to output
1493   * when last == 0.
1494   */
1495  
1496  static const char *
1497  get_comma(int last)
1498  {
1499      return ((last) ? "" : ",");
1500  }
1501  
1502  static void
1503  print_flags(const struct flags *f, abi_long flags, int last)
1504  {
1505      const char *sep = "";
1506      int n;
1507  
1508      for (n = 0; f->f_string != NULL; f++) {
1509          if ((flags & f->f_mask) == f->f_value) {
1510              qemu_log("%s%s", sep, f->f_string);
1511              flags &= ~f->f_mask;
1512              sep = "|";
1513              n++;
1514          }
1515      }
1516  
1517      if (n > 0) {
1518          /* print rest of the flags as numeric */
1519          if (flags != 0) {
1520              qemu_log("%s%#x%s", sep, (unsigned int)flags, get_comma(last));
1521          } else {
1522              qemu_log("%s", get_comma(last));
1523          }
1524      } else {
1525          /* no string version of flags found, print them in hex then */
1526          qemu_log("%#x%s", (unsigned int)flags, get_comma(last));
1527      }
1528  }
1529  
1530  static void
1531  print_enums(const struct enums *e, abi_long enum_arg, int last)
1532  {
1533      for (; e->e_string != NULL; e++) {
1534          if (e->e_value == enum_arg) {
1535              qemu_log("%s", e->e_string);
1536              break;
1537          }
1538      }
1539  
1540      if (e->e_string == NULL) {
1541          qemu_log("%#x", (unsigned int)enum_arg);
1542      }
1543  
1544      qemu_log("%s", get_comma(last));
1545  }
1546  
1547  static void
1548  print_at_dirfd(abi_long dirfd, int last)
1549  {
1550  #ifdef AT_FDCWD
1551      if (dirfd == AT_FDCWD) {
1552          qemu_log("AT_FDCWD%s", get_comma(last));
1553          return;
1554      }
1555  #endif
1556      qemu_log("%d%s", (int)dirfd, get_comma(last));
1557  }
1558  
1559  static void
1560  print_file_mode(abi_long mode, int last)
1561  {
1562      const char *sep = "";
1563      const struct flags *m;
1564  
1565      if (mode == 0) {
1566          qemu_log("000%s", get_comma(last));
1567          return;
1568      }
1569  
1570      for (m = &mode_flags[0]; m->f_string != NULL; m++) {
1571          if ((m->f_value & mode) == m->f_value) {
1572              qemu_log("%s%s", m->f_string, sep);
1573              sep = "|";
1574              mode &= ~m->f_value;
1575              break;
1576          }
1577      }
1578  
1579      mode &= ~S_IFMT;
1580      /* print rest of the mode as octal */
1581      if (mode != 0)
1582          qemu_log("%s%#o", sep, (unsigned int)mode);
1583  
1584      qemu_log("%s", get_comma(last));
1585  }
1586  
1587  static void
1588  print_open_flags(abi_long flags, int last)
1589  {
1590      print_flags(open_access_flags, flags & TARGET_O_ACCMODE, 1);
1591      flags &= ~TARGET_O_ACCMODE;
1592      if (flags == 0) {
1593          qemu_log("%s", get_comma(last));
1594          return;
1595      }
1596      qemu_log("|");
1597      print_flags(open_flags, flags, last);
1598  }
1599  
1600  static void
1601  print_syscall_prologue(const struct syscallname *sc)
1602  {
1603      qemu_log("%s(", sc->name);
1604  }
1605  
1606  /*ARGSUSED*/
1607  static void
1608  print_syscall_epilogue(const struct syscallname *sc)
1609  {
1610      (void)sc;
1611      qemu_log(")");
1612  }
1613  
1614  static void
1615  print_string(abi_long addr, int last)
1616  {
1617      char *s;
1618  
1619      if ((s = lock_user_string(addr)) != NULL) {
1620          qemu_log("\"%s\"%s", s, get_comma(last));
1621          unlock_user(s, addr, 0);
1622      } else {
1623          /* can't get string out of it, so print it as pointer */
1624          print_pointer(addr, last);
1625      }
1626  }
1627  
1628  #define MAX_PRINT_BUF 40
1629  static void
1630  print_buf(abi_long addr, abi_long len, int last)
1631  {
1632      uint8_t *s;
1633      int i;
1634  
1635      s = lock_user(VERIFY_READ, addr, len, 1);
1636      if (s) {
1637          qemu_log("\"");
1638          for (i = 0; i < MAX_PRINT_BUF && i < len; i++) {
1639              if (isprint(s[i])) {
1640                  qemu_log("%c", s[i]);
1641              } else {
1642                  qemu_log("\\%o", s[i]);
1643              }
1644          }
1645          qemu_log("\"");
1646          if (i != len) {
1647              qemu_log("...");
1648          }
1649          if (!last) {
1650              qemu_log(",");
1651          }
1652          unlock_user(s, addr, 0);
1653      } else {
1654          print_pointer(addr, last);
1655      }
1656  }
1657  
1658  /*
1659   * Prints out raw parameter using given format.  Caller needs
1660   * to do byte swapping if needed.
1661   */
1662  static void
1663  print_raw_param(const char *fmt, abi_long param, int last)
1664  {
1665      char format[64];
1666  
1667      (void) snprintf(format, sizeof (format), "%s%s", fmt, get_comma(last));
1668      qemu_log(format, param);
1669  }
1670  
1671  /*
1672   * Same as print_raw_param() but prints out raw 64-bit parameter.
1673   */
1674  static void
1675  print_raw_param64(const char *fmt, long long param, int last)
1676  {
1677      char format[64];
1678  
1679      (void)snprintf(format, sizeof(format), "%s%s", fmt, get_comma(last));
1680      qemu_log(format, param);
1681  }
1682  
1683  
1684  static void
1685  print_pointer(abi_long p, int last)
1686  {
1687      if (p == 0)
1688          qemu_log("NULL%s", get_comma(last));
1689      else
1690          qemu_log("0x" TARGET_ABI_FMT_lx "%s", p, get_comma(last));
1691  }
1692  
1693  /*
1694   * Reads 32-bit (int) number from guest address space from
1695   * address 'addr' and prints it.
1696   */
1697  static void
1698  print_number(abi_long addr, int last)
1699  {
1700      if (addr == 0) {
1701          qemu_log("NULL%s", get_comma(last));
1702      } else {
1703          int num;
1704  
1705          get_user_s32(num, addr);
1706          qemu_log("[%d]%s", num, get_comma(last));
1707      }
1708  }
1709  
1710  static void
1711  print_timeval(abi_ulong tv_addr, int last)
1712  {
1713      if( tv_addr ) {
1714          struct target_timeval *tv;
1715  
1716          tv = lock_user(VERIFY_READ, tv_addr, sizeof(*tv), 1);
1717          if (!tv) {
1718              print_pointer(tv_addr, last);
1719              return;
1720          }
1721          qemu_log("{tv_sec = " TARGET_ABI_FMT_ld
1722                   ",tv_usec = " TARGET_ABI_FMT_ld "}%s",
1723                   tswapal(tv->tv_sec), tswapal(tv->tv_usec), get_comma(last));
1724          unlock_user(tv, tv_addr, 0);
1725      } else
1726          qemu_log("NULL%s", get_comma(last));
1727  }
1728  
1729  static void
1730  print_timespec(abi_ulong ts_addr, int last)
1731  {
1732      if (ts_addr) {
1733          struct target_timespec *ts;
1734  
1735          ts = lock_user(VERIFY_READ, ts_addr, sizeof(*ts), 1);
1736          if (!ts) {
1737              print_pointer(ts_addr, last);
1738              return;
1739          }
1740          qemu_log("{tv_sec = " TARGET_ABI_FMT_ld
1741                   ",tv_nsec = " TARGET_ABI_FMT_ld "}%s",
1742                   tswapal(ts->tv_sec), tswapal(ts->tv_nsec), get_comma(last));
1743          unlock_user(ts, ts_addr, 0);
1744      } else {
1745          qemu_log("NULL%s", get_comma(last));
1746      }
1747  }
1748  
1749  static void
1750  print_timespec64(abi_ulong ts_addr, int last)
1751  {
1752      if (ts_addr) {
1753          struct target__kernel_timespec *ts;
1754  
1755          ts = lock_user(VERIFY_READ, ts_addr, sizeof(*ts), 1);
1756          if (!ts) {
1757              print_pointer(ts_addr, last);
1758              return;
1759          }
1760          print_raw_param64("{tv_sec=%" PRId64, tswap64(ts->tv_sec), 0);
1761          print_raw_param64("tv_nsec=%" PRId64 "}", tswap64(ts->tv_nsec), last);
1762          unlock_user(ts, ts_addr, 0);
1763      } else {
1764          qemu_log("NULL%s", get_comma(last));
1765      }
1766  }
1767  
1768  static void
1769  print_timezone(abi_ulong tz_addr, int last)
1770  {
1771      if (tz_addr) {
1772          struct target_timezone *tz;
1773  
1774          tz = lock_user(VERIFY_READ, tz_addr, sizeof(*tz), 1);
1775          if (!tz) {
1776              print_pointer(tz_addr, last);
1777              return;
1778          }
1779          qemu_log("{%d,%d}%s", tswap32(tz->tz_minuteswest),
1780                   tswap32(tz->tz_dsttime), get_comma(last));
1781          unlock_user(tz, tz_addr, 0);
1782      } else {
1783          qemu_log("NULL%s", get_comma(last));
1784      }
1785  }
1786  
1787  static void
1788  print_itimerval(abi_ulong it_addr, int last)
1789  {
1790      if (it_addr) {
1791          qemu_log("{it_interval=");
1792          print_timeval(it_addr +
1793                        offsetof(struct target_itimerval, it_interval), 0);
1794          qemu_log("it_value=");
1795          print_timeval(it_addr +
1796                        offsetof(struct target_itimerval, it_value), 0);
1797          qemu_log("}%s", get_comma(last));
1798      } else {
1799          qemu_log("NULL%s", get_comma(last));
1800      }
1801  }
1802  
1803  void
1804  print_termios(void *arg)
1805  {
1806      const struct target_termios *target = arg;
1807  
1808      target_tcflag_t iflags = tswap32(target->c_iflag);
1809      target_tcflag_t oflags = tswap32(target->c_oflag);
1810      target_tcflag_t cflags = tswap32(target->c_cflag);
1811      target_tcflag_t lflags = tswap32(target->c_lflag);
1812  
1813      qemu_log("{");
1814  
1815      qemu_log("c_iflag = ");
1816      print_flags(termios_iflags, iflags, 0);
1817  
1818      qemu_log("c_oflag = ");
1819      target_tcflag_t oflags_clean =  oflags & ~(TARGET_NLDLY | TARGET_CRDLY |
1820                                                 TARGET_TABDLY | TARGET_BSDLY |
1821                                                 TARGET_VTDLY | TARGET_FFDLY);
1822      print_flags(termios_oflags, oflags_clean, 0);
1823      if (oflags & TARGET_NLDLY) {
1824          print_enums(termios_oflags_NLDLY, oflags & TARGET_NLDLY, 0);
1825      }
1826      if (oflags & TARGET_CRDLY) {
1827          print_enums(termios_oflags_CRDLY, oflags & TARGET_CRDLY, 0);
1828      }
1829      if (oflags & TARGET_TABDLY) {
1830          print_enums(termios_oflags_TABDLY, oflags & TARGET_TABDLY, 0);
1831      }
1832      if (oflags & TARGET_BSDLY) {
1833          print_enums(termios_oflags_BSDLY, oflags & TARGET_BSDLY, 0);
1834      }
1835      if (oflags & TARGET_VTDLY) {
1836          print_enums(termios_oflags_VTDLY, oflags & TARGET_VTDLY, 0);
1837      }
1838      if (oflags & TARGET_FFDLY) {
1839          print_enums(termios_oflags_FFDLY, oflags & TARGET_FFDLY, 0);
1840      }
1841  
1842      qemu_log("c_cflag = ");
1843      if (cflags & TARGET_CBAUD) {
1844          print_enums(termios_cflags_CBAUD, cflags & TARGET_CBAUD, 0);
1845      }
1846      if (cflags & TARGET_CSIZE) {
1847          print_enums(termios_cflags_CSIZE, cflags & TARGET_CSIZE, 0);
1848      }
1849      target_tcflag_t cflags_clean = cflags & ~(TARGET_CBAUD | TARGET_CSIZE);
1850      print_flags(termios_cflags, cflags_clean, 0);
1851  
1852      qemu_log("c_lflag = ");
1853      print_flags(termios_lflags, lflags, 0);
1854  
1855      qemu_log("c_cc = ");
1856      qemu_log("\"%s\",", target->c_cc);
1857  
1858      qemu_log("c_line = ");
1859      print_raw_param("\'%c\'", target->c_line, 1);
1860  
1861      qemu_log("}");
1862  }
1863  
1864  #undef UNUSED
1865  
1866  #ifdef TARGET_NR_accept
1867  static void
1868  print_accept(CPUArchState *cpu_env, const struct syscallname *name,
1869               abi_long arg0, abi_long arg1, abi_long arg2,
1870               abi_long arg3, abi_long arg4, abi_long arg5)
1871  {
1872      print_syscall_prologue(name);
1873      print_raw_param("%d", arg0, 0);
1874      print_pointer(arg1, 0);
1875      print_number(arg2, 1);
1876      print_syscall_epilogue(name);
1877  }
1878  #endif
1879  
1880  #ifdef TARGET_NR_access
1881  static void
1882  print_access(CPUArchState *cpu_env, const struct syscallname *name,
1883               abi_long arg0, abi_long arg1, abi_long arg2,
1884               abi_long arg3, abi_long arg4, abi_long arg5)
1885  {
1886      print_syscall_prologue(name);
1887      print_string(arg0, 0);
1888      print_flags(access_flags, arg1, 1);
1889      print_syscall_epilogue(name);
1890  }
1891  #endif
1892  
1893  #ifdef TARGET_NR_acct
1894  static void
1895  print_acct(CPUArchState *cpu_env, const struct syscallname *name,
1896             abi_long arg0, abi_long arg1, abi_long arg2,
1897             abi_long arg3, abi_long arg4, abi_long arg5)
1898  {
1899      print_syscall_prologue(name);
1900      print_string(arg0, 1);
1901      print_syscall_epilogue(name);
1902  }
1903  #endif
1904  
1905  #ifdef TARGET_NR_brk
1906  static void
1907  print_brk(CPUArchState *cpu_env, const struct syscallname *name,
1908            abi_long arg0, abi_long arg1, abi_long arg2,
1909            abi_long arg3, abi_long arg4, abi_long arg5)
1910  {
1911      print_syscall_prologue(name);
1912      print_pointer(arg0, 1);
1913      print_syscall_epilogue(name);
1914  }
1915  #endif
1916  
1917  #ifdef TARGET_NR_chdir
1918  static void
1919  print_chdir(CPUArchState *cpu_env, const struct syscallname *name,
1920              abi_long arg0, abi_long arg1, abi_long arg2,
1921              abi_long arg3, abi_long arg4, abi_long arg5)
1922  {
1923      print_syscall_prologue(name);
1924      print_string(arg0, 1);
1925      print_syscall_epilogue(name);
1926  }
1927  #endif
1928  
1929  #ifdef TARGET_NR_chroot
1930  static void
1931  print_chroot(CPUArchState *cpu_env, const struct syscallname *name,
1932               abi_long arg0, abi_long arg1, abi_long arg2,
1933               abi_long arg3, abi_long arg4, abi_long arg5)
1934  {
1935      print_syscall_prologue(name);
1936      print_string(arg0, 1);
1937      print_syscall_epilogue(name);
1938  }
1939  #endif
1940  
1941  #ifdef TARGET_NR_chmod
1942  static void
1943  print_chmod(CPUArchState *cpu_env, const struct syscallname *name,
1944              abi_long arg0, abi_long arg1, abi_long arg2,
1945              abi_long arg3, abi_long arg4, abi_long arg5)
1946  {
1947      print_syscall_prologue(name);
1948      print_string(arg0, 0);
1949      print_file_mode(arg1, 1);
1950      print_syscall_epilogue(name);
1951  }
1952  #endif
1953  
1954  #if defined(TARGET_NR_chown) || defined(TARGET_NR_lchown)
1955  static void
1956  print_chown(CPUArchState *cpu_env, const struct syscallname *name,
1957              abi_long arg0, abi_long arg1, abi_long arg2,
1958              abi_long arg3, abi_long arg4, abi_long arg5)
1959  {
1960      print_syscall_prologue(name);
1961      print_string(arg0, 0);
1962      print_raw_param("%d", arg1, 0);
1963      print_raw_param("%d", arg2, 1);
1964      print_syscall_epilogue(name);
1965  }
1966  #define print_lchown     print_chown
1967  #endif
1968  
1969  #ifdef TARGET_NR_clock_adjtime
1970  static void
1971  print_clock_adjtime(CPUArchState *cpu_env, const struct syscallname *name,
1972                      abi_long arg0, abi_long arg1, abi_long arg2,
1973                      abi_long arg3, abi_long arg4, abi_long arg5)
1974  {
1975      print_syscall_prologue(name);
1976      print_enums(clockids, arg0, 0);
1977      print_pointer(arg1, 1);
1978      print_syscall_epilogue(name);
1979  }
1980  #endif
1981  
1982  #ifdef TARGET_NR_clone
1983  static void do_print_clone(unsigned int flags, abi_ulong newsp,
1984                             abi_ulong parent_tidptr, target_ulong newtls,
1985                             abi_ulong child_tidptr)
1986  {
1987      print_flags(clone_flags, flags, 0);
1988      print_raw_param("child_stack=0x" TARGET_ABI_FMT_lx, newsp, 0);
1989      print_raw_param("parent_tidptr=0x" TARGET_ABI_FMT_lx, parent_tidptr, 0);
1990      print_raw_param("tls=0x" TARGET_ABI_FMT_lx, newtls, 0);
1991      print_raw_param("child_tidptr=0x" TARGET_ABI_FMT_lx, child_tidptr, 1);
1992  }
1993  
1994  static void
1995  print_clone(CPUArchState *cpu_env, const struct syscallname *name,
1996              abi_long arg1, abi_long arg2, abi_long arg3,
1997              abi_long arg4, abi_long arg5, abi_long arg6)
1998  {
1999      print_syscall_prologue(name);
2000  #if defined(TARGET_MICROBLAZE)
2001      do_print_clone(arg1, arg2, arg4, arg6, arg5);
2002  #elif defined(TARGET_CLONE_BACKWARDS)
2003      do_print_clone(arg1, arg2, arg3, arg4, arg5);
2004  #elif defined(TARGET_CLONE_BACKWARDS2)
2005      do_print_clone(arg2, arg1, arg3, arg5, arg4);
2006  #else
2007      do_print_clone(arg1, arg2, arg3, arg5, arg4);
2008  #endif
2009      print_syscall_epilogue(name);
2010  }
2011  #endif
2012  
2013  #ifdef TARGET_NR_creat
2014  static void
2015  print_creat(CPUArchState *cpu_env, const struct syscallname *name,
2016              abi_long arg0, abi_long arg1, abi_long arg2,
2017              abi_long arg3, abi_long arg4, abi_long arg5)
2018  {
2019      print_syscall_prologue(name);
2020      print_string(arg0, 0);
2021      print_file_mode(arg1, 1);
2022      print_syscall_epilogue(name);
2023  }
2024  #endif
2025  
2026  #ifdef TARGET_NR_execv
2027  static void
2028  print_execv(CPUArchState *cpu_env, const struct syscallname *name,
2029              abi_long arg0, abi_long arg1, abi_long arg2,
2030              abi_long arg3, abi_long arg4, abi_long arg5)
2031  {
2032      print_syscall_prologue(name);
2033      print_string(arg0, 0);
2034      print_raw_param("0x" TARGET_ABI_FMT_lx, arg1, 1);
2035      print_syscall_epilogue(name);
2036  }
2037  #endif
2038  
2039  static void
2040  print_execve_argv(abi_long argv, int last)
2041  {
2042      abi_ulong arg_ptr_addr;
2043      char *s;
2044  
2045      qemu_log("{");
2046      for (arg_ptr_addr = argv; ; arg_ptr_addr += sizeof(abi_ulong)) {
2047          abi_ulong *arg_ptr, arg_addr;
2048  
2049          arg_ptr = lock_user(VERIFY_READ, arg_ptr_addr, sizeof(abi_ulong), 1);
2050          if (!arg_ptr) {
2051              return;
2052          }
2053          arg_addr = tswapal(*arg_ptr);
2054          unlock_user(arg_ptr, arg_ptr_addr, 0);
2055          if (!arg_addr) {
2056              break;
2057          }
2058          s = lock_user_string(arg_addr);
2059          if (s) {
2060              qemu_log("\"%s\",", s);
2061              unlock_user(s, arg_addr, 0);
2062          }
2063      }
2064      qemu_log("NULL}%s", get_comma(last));
2065  }
2066  
2067  static void
2068  print_execve(CPUArchState *cpu_env, const struct syscallname *name,
2069               abi_long arg1, abi_long arg2, abi_long arg3,
2070               abi_long arg4, abi_long arg5, abi_long arg6)
2071  {
2072      print_syscall_prologue(name);
2073      print_string(arg1, 0);
2074      print_execve_argv(arg2, 1);
2075      print_syscall_epilogue(name);
2076  }
2077  
2078  static void
2079  print_execveat(CPUArchState *cpu_env, const struct syscallname *name,
2080                 abi_long arg1, abi_long arg2, abi_long arg3,
2081                 abi_long arg4, abi_long arg5, abi_long arg6)
2082  {
2083      print_syscall_prologue(name);
2084      print_at_dirfd(arg1, 0);
2085      print_string(arg2, 0);
2086      print_execve_argv(arg3, 0);
2087      print_flags(execveat_flags, arg5, 1);
2088      print_syscall_epilogue(name);
2089  }
2090  
2091  #if defined(TARGET_NR_faccessat) || defined(TARGET_NR_faccessat2)
2092  static void
2093  print_faccessat(CPUArchState *cpu_env, const struct syscallname *name,
2094                  abi_long arg0, abi_long arg1, abi_long arg2,
2095                  abi_long arg3, abi_long arg4, abi_long arg5)
2096  {
2097      print_syscall_prologue(name);
2098      print_at_dirfd(arg0, 0);
2099      print_string(arg1, 0);
2100      print_flags(access_flags, arg2, 0);
2101      print_flags(at_file_flags, arg3, 1);
2102      print_syscall_epilogue(name);
2103  }
2104  #endif
2105  
2106  #ifdef TARGET_NR_fallocate
2107  static void
2108  print_fallocate(CPUArchState *cpu_env, const struct syscallname *name,
2109                  abi_long arg0, abi_long arg1, abi_long arg2,
2110                  abi_long arg3, abi_long arg4, abi_long arg5)
2111  {
2112      print_syscall_prologue(name);
2113      print_raw_param("%d", arg0, 0);
2114      print_flags(falloc_flags, arg1, 0);
2115  #if TARGET_ABI_BITS == 32
2116      print_raw_param("%" PRIu64, target_offset64(arg2, arg3), 0);
2117      print_raw_param("%" PRIu64, target_offset64(arg4, arg5), 1);
2118  #else
2119      print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
2120      print_raw_param(TARGET_ABI_FMT_ld, arg3, 1);
2121  #endif
2122      print_syscall_epilogue(name);
2123  }
2124  #endif
2125  
2126  #ifdef TARGET_NR_fchmodat
2127  static void
2128  print_fchmodat(CPUArchState *cpu_env, const struct syscallname *name,
2129                 abi_long arg0, abi_long arg1, abi_long arg2,
2130                 abi_long arg3, abi_long arg4, abi_long arg5)
2131  {
2132      print_syscall_prologue(name);
2133      print_at_dirfd(arg0, 0);
2134      print_string(arg1, 0);
2135      print_file_mode(arg2, 0);
2136      print_flags(at_file_flags, arg3, 1);
2137      print_syscall_epilogue(name);
2138  }
2139  #endif
2140  
2141  #ifdef TARGET_NR_fchownat
2142  static void
2143  print_fchownat(CPUArchState *cpu_env, const struct syscallname *name,
2144                 abi_long arg0, abi_long arg1, abi_long arg2,
2145                 abi_long arg3, abi_long arg4, abi_long arg5)
2146  {
2147      print_syscall_prologue(name);
2148      print_at_dirfd(arg0, 0);
2149      print_string(arg1, 0);
2150      print_raw_param("%d", arg2, 0);
2151      print_raw_param("%d", arg3, 0);
2152      print_flags(at_file_flags, arg4, 1);
2153      print_syscall_epilogue(name);
2154  }
2155  #endif
2156  
2157  #if defined(TARGET_NR_fcntl) || defined(TARGET_NR_fcntl64)
2158  static void
2159  print_fcntl(CPUArchState *cpu_env, const struct syscallname *name,
2160              abi_long arg0, abi_long arg1, abi_long arg2,
2161              abi_long arg3, abi_long arg4, abi_long arg5)
2162  {
2163      print_syscall_prologue(name);
2164      print_raw_param("%d", arg0, 0);
2165      switch(arg1) {
2166      case TARGET_F_DUPFD:
2167          qemu_log("F_DUPFD,");
2168          print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2169          break;
2170      case TARGET_F_GETFD:
2171          qemu_log("F_GETFD");
2172          break;
2173      case TARGET_F_SETFD:
2174          qemu_log("F_SETFD,");
2175          print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2176          break;
2177      case TARGET_F_GETFL:
2178          qemu_log("F_GETFL");
2179          break;
2180      case TARGET_F_SETFL:
2181          qemu_log("F_SETFL,");
2182          print_open_flags(arg2, 1);
2183          break;
2184      case TARGET_F_GETLK:
2185          qemu_log("F_GETLK,");
2186          print_pointer(arg2, 1);
2187          break;
2188      case TARGET_F_SETLK:
2189          qemu_log("F_SETLK,");
2190          print_pointer(arg2, 1);
2191          break;
2192      case TARGET_F_SETLKW:
2193          qemu_log("F_SETLKW,");
2194          print_pointer(arg2, 1);
2195          break;
2196      case TARGET_F_GETOWN:
2197          qemu_log("F_GETOWN");
2198          break;
2199      case TARGET_F_SETOWN:
2200          qemu_log("F_SETOWN,");
2201          print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
2202          break;
2203      case TARGET_F_GETSIG:
2204          qemu_log("F_GETSIG");
2205          break;
2206      case TARGET_F_SETSIG:
2207          qemu_log("F_SETSIG,");
2208          print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
2209          break;
2210  #if TARGET_ABI_BITS == 32
2211      case TARGET_F_GETLK64:
2212          qemu_log("F_GETLK64,");
2213          print_pointer(arg2, 1);
2214          break;
2215      case TARGET_F_SETLK64:
2216          qemu_log("F_SETLK64,");
2217          print_pointer(arg2, 1);
2218          break;
2219      case TARGET_F_SETLKW64:
2220          qemu_log("F_SETLKW64,");
2221          print_pointer(arg2, 1);
2222          break;
2223  #endif
2224      case TARGET_F_OFD_GETLK:
2225          qemu_log("F_OFD_GETLK,");
2226          print_pointer(arg2, 1);
2227          break;
2228      case TARGET_F_OFD_SETLK:
2229          qemu_log("F_OFD_SETLK,");
2230          print_pointer(arg2, 1);
2231          break;
2232      case TARGET_F_OFD_SETLKW:
2233          qemu_log("F_OFD_SETLKW,");
2234          print_pointer(arg2, 1);
2235          break;
2236      case TARGET_F_SETLEASE:
2237          qemu_log("F_SETLEASE,");
2238          print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2239          break;
2240      case TARGET_F_GETLEASE:
2241          qemu_log("F_GETLEASE");
2242          break;
2243  #ifdef F_DUPFD_CLOEXEC
2244      case TARGET_F_DUPFD_CLOEXEC:
2245          qemu_log("F_DUPFD_CLOEXEC,");
2246          print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2247          break;
2248  #endif
2249      case TARGET_F_NOTIFY:
2250          qemu_log("F_NOTIFY,");
2251          print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2252          break;
2253  #ifdef F_GETOWN_EX
2254      case TARGET_F_GETOWN_EX:
2255          qemu_log("F_GETOWN_EX,");
2256          print_pointer(arg2, 1);
2257          break;
2258  #endif
2259  #ifdef F_SETOWN_EX
2260      case TARGET_F_SETOWN_EX:
2261          qemu_log("F_SETOWN_EX,");
2262          print_pointer(arg2, 1);
2263          break;
2264  #endif
2265  #ifdef F_SETPIPE_SZ
2266      case TARGET_F_SETPIPE_SZ:
2267          qemu_log("F_SETPIPE_SZ,");
2268          print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2269          break;
2270      case TARGET_F_GETPIPE_SZ:
2271          qemu_log("F_GETPIPE_SZ");
2272          break;
2273  #endif
2274  #ifdef F_ADD_SEALS
2275      case TARGET_F_ADD_SEALS:
2276          qemu_log("F_ADD_SEALS,");
2277          print_raw_param("0x"TARGET_ABI_FMT_lx, arg2, 1);
2278          break;
2279      case TARGET_F_GET_SEALS:
2280          qemu_log("F_GET_SEALS");
2281          break;
2282  #endif
2283      default:
2284          print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
2285          print_pointer(arg2, 1);
2286          break;
2287      }
2288      print_syscall_epilogue(name);
2289  }
2290  #define print_fcntl64   print_fcntl
2291  #endif
2292  
2293  #ifdef TARGET_NR_fgetxattr
2294  static void
2295  print_fgetxattr(CPUArchState *cpu_env, const struct syscallname *name,
2296                  abi_long arg0, abi_long arg1, abi_long arg2,
2297                  abi_long arg3, abi_long arg4, abi_long arg5)
2298  {
2299      print_syscall_prologue(name);
2300      print_raw_param("%d", arg0, 0);
2301      print_string(arg1, 0);
2302      print_pointer(arg2, 0);
2303      print_raw_param(TARGET_FMT_lu, arg3, 1);
2304      print_syscall_epilogue(name);
2305  }
2306  #endif
2307  
2308  #ifdef TARGET_NR_flistxattr
2309  static void
2310  print_flistxattr(CPUArchState *cpu_env, const struct syscallname *name,
2311                   abi_long arg0, abi_long arg1, abi_long arg2,
2312                   abi_long arg3, abi_long arg4, abi_long arg5)
2313  {
2314      print_syscall_prologue(name);
2315      print_raw_param("%d", arg0, 0);
2316      print_pointer(arg1, 0);
2317      print_raw_param(TARGET_FMT_lu, arg2, 1);
2318      print_syscall_epilogue(name);
2319  }
2320  #endif
2321  
2322  #if defined(TARGET_NR_getxattr) || defined(TARGET_NR_lgetxattr)
2323  static void
2324  print_getxattr(CPUArchState *cpu_env, 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_string(arg0, 0);
2330      print_string(arg1, 0);
2331      print_pointer(arg2, 0);
2332      print_raw_param(TARGET_FMT_lu, arg3, 1);
2333      print_syscall_epilogue(name);
2334  }
2335  #define print_lgetxattr     print_getxattr
2336  #endif
2337  
2338  #if defined(TARGET_NR_listxattr) || defined(TARGET_NR_llistxattr)
2339  static void
2340  print_listxattr(CPUArchState *cpu_env, const struct syscallname *name,
2341                  abi_long arg0, abi_long arg1, abi_long arg2,
2342                  abi_long arg3, abi_long arg4, abi_long arg5)
2343  {
2344      print_syscall_prologue(name);
2345      print_string(arg0, 0);
2346      print_pointer(arg1, 0);
2347      print_raw_param(TARGET_FMT_lu, arg2, 1);
2348      print_syscall_epilogue(name);
2349  }
2350  #define print_llistxattr     print_listxattr
2351  #endif
2352  
2353  #if defined(TARGET_NR_fremovexattr)
2354  static void
2355  print_fremovexattr(CPUArchState *cpu_env, const struct syscallname *name,
2356                     abi_long arg0, abi_long arg1, abi_long arg2,
2357                     abi_long arg3, abi_long arg4, abi_long arg5)
2358  {
2359      print_syscall_prologue(name);
2360      print_raw_param("%d", arg0, 0);
2361      print_string(arg1, 1);
2362      print_syscall_epilogue(name);
2363  }
2364  #endif
2365  
2366  #if defined(TARGET_NR_removexattr) || defined(TARGET_NR_lremovexattr)
2367  static void
2368  print_removexattr(CPUArchState *cpu_env, const struct syscallname *name,
2369                    abi_long arg0, abi_long arg1, abi_long arg2,
2370                    abi_long arg3, abi_long arg4, abi_long arg5)
2371  {
2372      print_syscall_prologue(name);
2373      print_string(arg0, 0);
2374      print_string(arg1, 1);
2375      print_syscall_epilogue(name);
2376  }
2377  #define print_lremovexattr     print_removexattr
2378  #endif
2379  
2380  #ifdef TARGET_NR_futimesat
2381  static void
2382  print_futimesat(CPUArchState *cpu_env, const struct syscallname *name,
2383                  abi_long arg0, abi_long arg1, abi_long arg2,
2384                  abi_long arg3, abi_long arg4, abi_long arg5)
2385  {
2386      print_syscall_prologue(name);
2387      print_at_dirfd(arg0, 0);
2388      print_string(arg1, 0);
2389      print_timeval(arg2, 0);
2390      print_timeval(arg2 + sizeof (struct target_timeval), 1);
2391      print_syscall_epilogue(name);
2392  }
2393  #endif
2394  
2395  #ifdef TARGET_NR_gettimeofday
2396  static void
2397  print_gettimeofday(CPUArchState *cpu_env, const struct syscallname *name,
2398                     abi_long arg0, abi_long arg1, abi_long arg2,
2399                     abi_long arg3, abi_long arg4, abi_long arg5)
2400  {
2401      print_syscall_prologue(name);
2402      print_pointer(arg0, 0);
2403      print_pointer(arg1, 1);
2404      print_syscall_epilogue(name);
2405  }
2406  #endif
2407  
2408  #ifdef TARGET_NR_settimeofday
2409  static void
2410  print_settimeofday(CPUArchState *cpu_env, const struct syscallname *name,
2411                     abi_long arg0, abi_long arg1, abi_long arg2,
2412                     abi_long arg3, abi_long arg4, abi_long arg5)
2413  {
2414      print_syscall_prologue(name);
2415      print_timeval(arg0, 0);
2416      print_timezone(arg1, 1);
2417      print_syscall_epilogue(name);
2418  }
2419  #endif
2420  
2421  #if defined(TARGET_NR_clock_gettime) || defined(TARGET_NR_clock_getres)
2422  static void
2423  print_clock_gettime(CPUArchState *cpu_env, const struct syscallname *name,
2424                      abi_long arg0, abi_long arg1, abi_long arg2,
2425                      abi_long arg3, abi_long arg4, abi_long arg5)
2426  {
2427      print_syscall_prologue(name);
2428      print_enums(clockids, arg0, 0);
2429      print_pointer(arg1, 1);
2430      print_syscall_epilogue(name);
2431  }
2432  #define print_clock_getres     print_clock_gettime
2433  #endif
2434  
2435  #if defined(TARGET_NR_clock_gettime64)
2436  static void
2437  print_clock_gettime64(CPUArchState *cpu_env, const struct syscallname *name,
2438                      abi_long arg0, abi_long arg1, abi_long arg2,
2439                      abi_long arg3, abi_long arg4, abi_long arg5)
2440  {
2441      print_syscall_prologue(name);
2442      print_enums(clockids, arg0, 0);
2443      print_pointer(arg1, 1);
2444      print_syscall_epilogue(name);
2445  }
2446  #endif
2447  
2448  #ifdef TARGET_NR_clock_settime
2449  static void
2450  print_clock_settime(CPUArchState *cpu_env, const struct syscallname *name,
2451                      abi_long arg0, abi_long arg1, abi_long arg2,
2452                      abi_long arg3, abi_long arg4, abi_long arg5)
2453  {
2454      print_syscall_prologue(name);
2455      print_enums(clockids, arg0, 0);
2456      print_timespec(arg1, 1);
2457      print_syscall_epilogue(name);
2458  }
2459  #endif
2460  
2461  #ifdef TARGET_NR_getitimer
2462  static void
2463  print_getitimer(CPUArchState *cpu_env, const struct syscallname *name,
2464                  abi_long arg0, abi_long arg1, abi_long arg2,
2465                  abi_long arg3, abi_long arg4, abi_long arg5)
2466  {
2467      print_syscall_prologue(name);
2468      print_enums(itimer_types, arg0, 0);
2469      print_pointer(arg1, 1);
2470      print_syscall_epilogue(name);
2471  }
2472  #endif
2473  
2474  #ifdef TARGET_NR_setitimer
2475  static void
2476  print_setitimer(CPUArchState *cpu_env, const struct syscallname *name,
2477                  abi_long arg0, abi_long arg1, abi_long arg2,
2478                  abi_long arg3, abi_long arg4, abi_long arg5)
2479  {
2480      print_syscall_prologue(name);
2481      print_enums(itimer_types, arg0, 0);
2482      print_itimerval(arg1, 0);
2483      print_pointer(arg2, 1);
2484      print_syscall_epilogue(name);
2485  }
2486  #endif
2487  
2488  #ifdef TARGET_NR_link
2489  static void
2490  print_link(CPUArchState *cpu_env, const struct syscallname *name,
2491             abi_long arg0, abi_long arg1, abi_long arg2,
2492             abi_long arg3, abi_long arg4, abi_long arg5)
2493  {
2494      print_syscall_prologue(name);
2495      print_string(arg0, 0);
2496      print_string(arg1, 1);
2497      print_syscall_epilogue(name);
2498  }
2499  #endif
2500  
2501  #ifdef TARGET_NR_linkat
2502  static void
2503  print_linkat(CPUArchState *cpu_env, const struct syscallname *name,
2504               abi_long arg0, abi_long arg1, abi_long arg2,
2505               abi_long arg3, abi_long arg4, abi_long arg5)
2506  {
2507      print_syscall_prologue(name);
2508      print_at_dirfd(arg0, 0);
2509      print_string(arg1, 0);
2510      print_at_dirfd(arg2, 0);
2511      print_string(arg3, 0);
2512      print_flags(at_file_flags, arg4, 1);
2513      print_syscall_epilogue(name);
2514  }
2515  #endif
2516  
2517  #if defined(TARGET_NR__llseek) || defined(TARGET_NR_llseek)
2518  static void
2519  print__llseek(CPUArchState *cpu_env, const struct syscallname *name,
2520                abi_long arg0, abi_long arg1, abi_long arg2,
2521                abi_long arg3, abi_long arg4, abi_long arg5)
2522  {
2523      const char *whence = "UNKNOWN";
2524      print_syscall_prologue(name);
2525      print_raw_param("%d", arg0, 0);
2526      print_raw_param("%ld", arg1, 0);
2527      print_raw_param("%ld", arg2, 0);
2528      print_pointer(arg3, 0);
2529      switch(arg4) {
2530      case SEEK_SET: whence = "SEEK_SET"; break;
2531      case SEEK_CUR: whence = "SEEK_CUR"; break;
2532      case SEEK_END: whence = "SEEK_END"; break;
2533      }
2534      qemu_log("%s", whence);
2535      print_syscall_epilogue(name);
2536  }
2537  #define print_llseek print__llseek
2538  #endif
2539  
2540  #ifdef TARGET_NR_lseek
2541  static void
2542  print_lseek(CPUArchState *cpu_env, const struct syscallname *name,
2543              abi_long arg0, abi_long arg1, abi_long arg2,
2544              abi_long arg3, abi_long arg4, abi_long arg5)
2545  {
2546      print_syscall_prologue(name);
2547      print_raw_param("%d", arg0, 0);
2548      print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
2549      switch (arg2) {
2550      case SEEK_SET:
2551          qemu_log("SEEK_SET"); break;
2552      case SEEK_CUR:
2553          qemu_log("SEEK_CUR"); break;
2554      case SEEK_END:
2555          qemu_log("SEEK_END"); break;
2556  #ifdef SEEK_DATA
2557      case SEEK_DATA:
2558          qemu_log("SEEK_DATA"); break;
2559  #endif
2560  #ifdef SEEK_HOLE
2561      case SEEK_HOLE:
2562          qemu_log("SEEK_HOLE"); break;
2563  #endif
2564      default:
2565          print_raw_param("%#x", arg2, 1);
2566      }
2567      print_syscall_epilogue(name);
2568  }
2569  #endif
2570  
2571  #ifdef TARGET_NR_truncate
2572  static void
2573  print_truncate(CPUArchState *cpu_env, 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      print_syscall_prologue(name);
2578      print_string(arg0, 0);
2579      print_raw_param(TARGET_ABI_FMT_ld, arg1, 1);
2580      print_syscall_epilogue(name);
2581  }
2582  #endif
2583  
2584  #ifdef TARGET_NR_truncate64
2585  static void
2586  print_truncate64(CPUArchState *cpu_env, const struct syscallname *name,
2587                   abi_long arg0, abi_long arg1, abi_long arg2,
2588                   abi_long arg3, abi_long arg4, abi_long arg5)
2589  {
2590      print_syscall_prologue(name);
2591      print_string(arg0, 0);
2592      if (regpairs_aligned(cpu_env, TARGET_NR_truncate64)) {
2593          arg1 = arg2;
2594          arg2 = arg3;
2595      }
2596      print_raw_param("%" PRIu64, target_offset64(arg1, arg2), 1);
2597      print_syscall_epilogue(name);
2598  }
2599  #endif
2600  
2601  #ifdef TARGET_NR_ftruncate64
2602  static void
2603  print_ftruncate64(CPUArchState *cpu_env, const struct syscallname *name,
2604                    abi_long arg0, abi_long arg1, abi_long arg2,
2605                    abi_long arg3, abi_long arg4, abi_long arg5)
2606  {
2607      print_syscall_prologue(name);
2608      print_raw_param("%d", arg0, 0);
2609      if (regpairs_aligned(cpu_env, TARGET_NR_ftruncate64)) {
2610          arg1 = arg2;
2611          arg2 = arg3;
2612      }
2613      print_raw_param("%" PRIu64, target_offset64(arg1, arg2), 1);
2614      print_syscall_epilogue(name);
2615  }
2616  #endif
2617  
2618  #ifdef TARGET_NR_mlockall
2619  static void
2620  print_mlockall(CPUArchState *cpu_env, const struct syscallname *name,
2621                 abi_long arg0, abi_long arg1, abi_long arg2,
2622                 abi_long arg3, abi_long arg4, abi_long arg5)
2623  {
2624      print_syscall_prologue(name);
2625      print_flags(mlockall_flags, arg0, 1);
2626      print_syscall_epilogue(name);
2627  }
2628  #endif
2629  
2630  #if defined(TARGET_NR_socket)
2631  static void
2632  print_socket(CPUArchState *cpu_env, const struct syscallname *name,
2633               abi_long arg0, abi_long arg1, abi_long arg2,
2634               abi_long arg3, abi_long arg4, abi_long arg5)
2635  {
2636      abi_ulong domain = arg0, type = arg1, protocol = arg2;
2637  
2638      print_syscall_prologue(name);
2639      print_socket_domain(domain);
2640      qemu_log(",");
2641      print_socket_type(type);
2642      qemu_log(",");
2643      if (domain == AF_PACKET ||
2644          (domain == AF_INET && type == TARGET_SOCK_PACKET)) {
2645          protocol = tswap16(protocol);
2646      }
2647      print_socket_protocol(domain, type, protocol);
2648      print_syscall_epilogue(name);
2649  }
2650  
2651  #endif
2652  
2653  #if defined(TARGET_NR_socketcall) || defined(TARGET_NR_bind)
2654  
2655  static void print_sockfd(abi_long sockfd, int last)
2656  {
2657      print_raw_param(TARGET_ABI_FMT_ld, sockfd, last);
2658  }
2659  
2660  #endif
2661  
2662  #if defined(TARGET_NR_socketcall)
2663  
2664  #define get_user_ualx(x, gaddr, idx) \
2665          get_user_ual(x, (gaddr) + (idx) * sizeof(abi_long))
2666  
2667  static void do_print_socket(const char *name, abi_long arg1)
2668  {
2669      abi_ulong domain, type, protocol;
2670  
2671      get_user_ualx(domain, arg1, 0);
2672      get_user_ualx(type, arg1, 1);
2673      get_user_ualx(protocol, arg1, 2);
2674      qemu_log("%s(", name);
2675      print_socket_domain(domain);
2676      qemu_log(",");
2677      print_socket_type(type);
2678      qemu_log(",");
2679      if (domain == AF_PACKET ||
2680          (domain == AF_INET && type == TARGET_SOCK_PACKET)) {
2681          protocol = tswap16(protocol);
2682      }
2683      print_socket_protocol(domain, type, protocol);
2684      qemu_log(")");
2685  }
2686  
2687  static void do_print_sockaddr(const char *name, abi_long arg1)
2688  {
2689      abi_ulong sockfd, addr, addrlen;
2690  
2691      get_user_ualx(sockfd, arg1, 0);
2692      get_user_ualx(addr, arg1, 1);
2693      get_user_ualx(addrlen, arg1, 2);
2694  
2695      qemu_log("%s(", name);
2696      print_sockfd(sockfd, 0);
2697      print_sockaddr(addr, addrlen, 0);
2698      qemu_log(")");
2699  }
2700  
2701  static void do_print_listen(const char *name, abi_long arg1)
2702  {
2703      abi_ulong sockfd, backlog;
2704  
2705      get_user_ualx(sockfd, arg1, 0);
2706      get_user_ualx(backlog, arg1, 1);
2707  
2708      qemu_log("%s(", name);
2709      print_sockfd(sockfd, 0);
2710      print_raw_param(TARGET_ABI_FMT_ld, backlog, 1);
2711      qemu_log(")");
2712  }
2713  
2714  static void do_print_socketpair(const char *name, abi_long arg1)
2715  {
2716      abi_ulong domain, type, protocol, tab;
2717  
2718      get_user_ualx(domain, arg1, 0);
2719      get_user_ualx(type, arg1, 1);
2720      get_user_ualx(protocol, arg1, 2);
2721      get_user_ualx(tab, arg1, 3);
2722  
2723      qemu_log("%s(", name);
2724      print_socket_domain(domain);
2725      qemu_log(",");
2726      print_socket_type(type);
2727      qemu_log(",");
2728      print_socket_protocol(domain, type, protocol);
2729      qemu_log(",");
2730      print_raw_param(TARGET_ABI_FMT_lx, tab, 1);
2731      qemu_log(")");
2732  }
2733  
2734  static void do_print_sendrecv(const char *name, abi_long arg1)
2735  {
2736      abi_ulong sockfd, msg, len, flags;
2737  
2738      get_user_ualx(sockfd, arg1, 0);
2739      get_user_ualx(msg, arg1, 1);
2740      get_user_ualx(len, arg1, 2);
2741      get_user_ualx(flags, arg1, 3);
2742  
2743      qemu_log("%s(", name);
2744      print_sockfd(sockfd, 0);
2745      print_buf(msg, len, 0);
2746      print_raw_param(TARGET_ABI_FMT_ld, len, 0);
2747      print_flags(msg_flags, flags, 1);
2748      qemu_log(")");
2749  }
2750  
2751  static void do_print_msgaddr(const char *name, abi_long arg1)
2752  {
2753      abi_ulong sockfd, msg, len, flags, addr, addrlen;
2754  
2755      get_user_ualx(sockfd, arg1, 0);
2756      get_user_ualx(msg, arg1, 1);
2757      get_user_ualx(len, arg1, 2);
2758      get_user_ualx(flags, arg1, 3);
2759      get_user_ualx(addr, arg1, 4);
2760      get_user_ualx(addrlen, arg1, 5);
2761  
2762      qemu_log("%s(", name);
2763      print_sockfd(sockfd, 0);
2764      print_buf(msg, len, 0);
2765      print_raw_param(TARGET_ABI_FMT_ld, len, 0);
2766      print_flags(msg_flags, flags, 0);
2767      print_sockaddr(addr, addrlen, 0);
2768      qemu_log(")");
2769  }
2770  
2771  static void do_print_shutdown(const char *name, abi_long arg1)
2772  {
2773      abi_ulong sockfd, how;
2774  
2775      get_user_ualx(sockfd, arg1, 0);
2776      get_user_ualx(how, arg1, 1);
2777  
2778      qemu_log("shutdown(");
2779      print_sockfd(sockfd, 0);
2780      switch (how) {
2781      case SHUT_RD:
2782          qemu_log("SHUT_RD");
2783          break;
2784      case SHUT_WR:
2785          qemu_log("SHUT_WR");
2786          break;
2787      case SHUT_RDWR:
2788          qemu_log("SHUT_RDWR");
2789          break;
2790      default:
2791          print_raw_param(TARGET_ABI_FMT_ld, how, 1);
2792          break;
2793      }
2794      qemu_log(")");
2795  }
2796  
2797  static void do_print_msg(const char *name, abi_long arg1)
2798  {
2799      abi_ulong sockfd, msg, flags;
2800  
2801      get_user_ualx(sockfd, arg1, 0);
2802      get_user_ualx(msg, arg1, 1);
2803      get_user_ualx(flags, arg1, 2);
2804  
2805      qemu_log("%s(", name);
2806      print_sockfd(sockfd, 0);
2807      print_pointer(msg, 0);
2808      print_flags(msg_flags, flags, 1);
2809      qemu_log(")");
2810  }
2811  
2812  static void do_print_sockopt(const char *name, abi_long arg1)
2813  {
2814      abi_ulong sockfd, level, optname, optval, optlen;
2815  
2816      get_user_ualx(sockfd, arg1, 0);
2817      get_user_ualx(level, arg1, 1);
2818      get_user_ualx(optname, arg1, 2);
2819      get_user_ualx(optval, arg1, 3);
2820      get_user_ualx(optlen, arg1, 4);
2821  
2822      qemu_log("%s(", name);
2823      print_sockfd(sockfd, 0);
2824      switch (level) {
2825      case SOL_TCP:
2826          qemu_log("SOL_TCP,");
2827          print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2828          print_pointer(optval, 0);
2829          break;
2830      case SOL_UDP:
2831          qemu_log("SOL_UDP,");
2832          print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2833          print_pointer(optval, 0);
2834          break;
2835      case SOL_IP:
2836          qemu_log("SOL_IP,");
2837          print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2838          print_pointer(optval, 0);
2839          break;
2840      case SOL_RAW:
2841          qemu_log("SOL_RAW,");
2842          print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2843          print_pointer(optval, 0);
2844          break;
2845      case TARGET_SOL_SOCKET:
2846          qemu_log("SOL_SOCKET,");
2847          switch (optname) {
2848          case TARGET_SO_DEBUG:
2849              qemu_log("SO_DEBUG,");
2850  print_optint:
2851              print_number(optval, 0);
2852              break;
2853          case TARGET_SO_REUSEADDR:
2854              qemu_log("SO_REUSEADDR,");
2855              goto print_optint;
2856          case TARGET_SO_REUSEPORT:
2857              qemu_log("SO_REUSEPORT,");
2858              goto print_optint;
2859          case TARGET_SO_TYPE:
2860              qemu_log("SO_TYPE,");
2861              goto print_optint;
2862          case TARGET_SO_ERROR:
2863              qemu_log("SO_ERROR,");
2864              goto print_optint;
2865          case TARGET_SO_DONTROUTE:
2866              qemu_log("SO_DONTROUTE,");
2867              goto print_optint;
2868          case TARGET_SO_BROADCAST:
2869              qemu_log("SO_BROADCAST,");
2870              goto print_optint;
2871          case TARGET_SO_SNDBUF:
2872              qemu_log("SO_SNDBUF,");
2873              goto print_optint;
2874          case TARGET_SO_RCVBUF:
2875              qemu_log("SO_RCVBUF,");
2876              goto print_optint;
2877          case TARGET_SO_KEEPALIVE:
2878              qemu_log("SO_KEEPALIVE,");
2879              goto print_optint;
2880          case TARGET_SO_OOBINLINE:
2881              qemu_log("SO_OOBINLINE,");
2882              goto print_optint;
2883          case TARGET_SO_NO_CHECK:
2884              qemu_log("SO_NO_CHECK,");
2885              goto print_optint;
2886          case TARGET_SO_PRIORITY:
2887              qemu_log("SO_PRIORITY,");
2888              goto print_optint;
2889          case TARGET_SO_BSDCOMPAT:
2890              qemu_log("SO_BSDCOMPAT,");
2891              goto print_optint;
2892          case TARGET_SO_PASSCRED:
2893              qemu_log("SO_PASSCRED,");
2894              goto print_optint;
2895          case TARGET_SO_TIMESTAMP:
2896              qemu_log("SO_TIMESTAMP,");
2897              goto print_optint;
2898          case TARGET_SO_RCVLOWAT:
2899              qemu_log("SO_RCVLOWAT,");
2900              goto print_optint;
2901          case TARGET_SO_RCVTIMEO:
2902              qemu_log("SO_RCVTIMEO,");
2903              print_timeval(optval, 0);
2904              break;
2905          case TARGET_SO_SNDTIMEO:
2906              qemu_log("SO_SNDTIMEO,");
2907              print_timeval(optval, 0);
2908              break;
2909          case TARGET_SO_ATTACH_FILTER: {
2910              struct target_sock_fprog *fprog;
2911  
2912              qemu_log("SO_ATTACH_FILTER,");
2913  
2914              if (lock_user_struct(VERIFY_READ, fprog, optval,  0)) {
2915                  struct target_sock_filter *filter;
2916                  qemu_log("{");
2917                  if (lock_user_struct(VERIFY_READ, filter,
2918                                       tswapal(fprog->filter),  0)) {
2919                      int i;
2920                      for (i = 0; i < tswap16(fprog->len) - 1; i++) {
2921                          qemu_log("[%d]{0x%x,%d,%d,0x%x},",
2922                                   i, tswap16(filter[i].code),
2923                                   filter[i].jt, filter[i].jf,
2924                                   tswap32(filter[i].k));
2925                      }
2926                      qemu_log("[%d]{0x%x,%d,%d,0x%x}",
2927                               i, tswap16(filter[i].code),
2928                               filter[i].jt, filter[i].jf,
2929                               tswap32(filter[i].k));
2930                  } else {
2931                      qemu_log(TARGET_ABI_FMT_lx, tswapal(fprog->filter));
2932                  }
2933                  qemu_log(",%d},", tswap16(fprog->len));
2934                  unlock_user(fprog, optval, 0);
2935              } else {
2936                  print_pointer(optval, 0);
2937              }
2938              break;
2939          }
2940          default:
2941              print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2942              print_pointer(optval, 0);
2943              break;
2944          }
2945          break;
2946      case SOL_IPV6:
2947          qemu_log("SOL_IPV6,");
2948          switch (optname) {
2949          case IPV6_MTU_DISCOVER:
2950              qemu_log("IPV6_MTU_DISCOVER,");
2951              goto print_optint;
2952          case IPV6_MTU:
2953              qemu_log("IPV6_MTU,");
2954              goto print_optint;
2955          case IPV6_V6ONLY:
2956              qemu_log("IPV6_V6ONLY,");
2957              goto print_optint;
2958          case IPV6_RECVPKTINFO:
2959              qemu_log("IPV6_RECVPKTINFO,");
2960              goto print_optint;
2961          case IPV6_UNICAST_HOPS:
2962              qemu_log("IPV6_UNICAST_HOPS,");
2963              goto print_optint;
2964          case IPV6_MULTICAST_HOPS:
2965              qemu_log("IPV6_MULTICAST_HOPS,");
2966              goto print_optint;
2967          case IPV6_MULTICAST_LOOP:
2968              qemu_log("IPV6_MULTICAST_LOOP,");
2969              goto print_optint;
2970          case IPV6_RECVERR:
2971              qemu_log("IPV6_RECVERR,");
2972              goto print_optint;
2973          case IPV6_RECVHOPLIMIT:
2974              qemu_log("IPV6_RECVHOPLIMIT,");
2975              goto print_optint;
2976          case IPV6_2292HOPLIMIT:
2977              qemu_log("IPV6_2292HOPLIMIT,");
2978              goto print_optint;
2979          case IPV6_CHECKSUM:
2980              qemu_log("IPV6_CHECKSUM,");
2981              goto print_optint;
2982          case IPV6_ADDRFORM:
2983              qemu_log("IPV6_ADDRFORM,");
2984              goto print_optint;
2985          case IPV6_2292PKTINFO:
2986              qemu_log("IPV6_2292PKTINFO,");
2987              goto print_optint;
2988          case IPV6_RECVTCLASS:
2989              qemu_log("IPV6_RECVTCLASS,");
2990              goto print_optint;
2991          case IPV6_RECVRTHDR:
2992              qemu_log("IPV6_RECVRTHDR,");
2993              goto print_optint;
2994          case IPV6_2292RTHDR:
2995              qemu_log("IPV6_2292RTHDR,");
2996              goto print_optint;
2997          case IPV6_RECVHOPOPTS:
2998              qemu_log("IPV6_RECVHOPOPTS,");
2999              goto print_optint;
3000          case IPV6_2292HOPOPTS:
3001              qemu_log("IPV6_2292HOPOPTS,");
3002              goto print_optint;
3003          case IPV6_RECVDSTOPTS:
3004              qemu_log("IPV6_RECVDSTOPTS,");
3005              goto print_optint;
3006          case IPV6_2292DSTOPTS:
3007              qemu_log("IPV6_2292DSTOPTS,");
3008              goto print_optint;
3009          case IPV6_TCLASS:
3010              qemu_log("IPV6_TCLASS,");
3011              goto print_optint;
3012          case IPV6_ADDR_PREFERENCES:
3013              qemu_log("IPV6_ADDR_PREFERENCES,");
3014              goto print_optint;
3015  #ifdef IPV6_RECVPATHMTU
3016          case IPV6_RECVPATHMTU:
3017              qemu_log("IPV6_RECVPATHMTU,");
3018              goto print_optint;
3019  #endif
3020  #ifdef IPV6_TRANSPARENT
3021          case IPV6_TRANSPARENT:
3022              qemu_log("IPV6_TRANSPARENT,");
3023              goto print_optint;
3024  #endif
3025  #ifdef IPV6_FREEBIND
3026          case IPV6_FREEBIND:
3027              qemu_log("IPV6_FREEBIND,");
3028              goto print_optint;
3029  #endif
3030  #ifdef IPV6_RECVORIGDSTADDR
3031          case IPV6_RECVORIGDSTADDR:
3032              qemu_log("IPV6_RECVORIGDSTADDR,");
3033              goto print_optint;
3034  #endif
3035          case IPV6_PKTINFO:
3036              qemu_log("IPV6_PKTINFO,");
3037              print_pointer(optval, 0);
3038              break;
3039          case IPV6_ADD_MEMBERSHIP:
3040              qemu_log("IPV6_ADD_MEMBERSHIP,");
3041              print_pointer(optval, 0);
3042              break;
3043          case IPV6_DROP_MEMBERSHIP:
3044              qemu_log("IPV6_DROP_MEMBERSHIP,");
3045              print_pointer(optval, 0);
3046              break;
3047          default:
3048              print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
3049              print_pointer(optval, 0);
3050              break;
3051          }
3052          break;
3053      default:
3054          print_raw_param(TARGET_ABI_FMT_ld, level, 0);
3055          print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
3056          print_pointer(optval, 0);
3057          break;
3058      }
3059      print_raw_param(TARGET_ABI_FMT_ld, optlen, 1);
3060      qemu_log(")");
3061  }
3062  
3063  #define PRINT_SOCKOP(name, func) \
3064      [TARGET_SYS_##name] = { #name, func }
3065  
3066  static struct {
3067      const char *name;
3068      void (*print)(const char *, abi_long);
3069  } scall[] = {
3070      PRINT_SOCKOP(SOCKET, do_print_socket),
3071      PRINT_SOCKOP(BIND, do_print_sockaddr),
3072      PRINT_SOCKOP(CONNECT, do_print_sockaddr),
3073      PRINT_SOCKOP(LISTEN, do_print_listen),
3074      PRINT_SOCKOP(ACCEPT, do_print_sockaddr),
3075      PRINT_SOCKOP(GETSOCKNAME, do_print_sockaddr),
3076      PRINT_SOCKOP(GETPEERNAME, do_print_sockaddr),
3077      PRINT_SOCKOP(SOCKETPAIR, do_print_socketpair),
3078      PRINT_SOCKOP(SEND, do_print_sendrecv),
3079      PRINT_SOCKOP(RECV, do_print_sendrecv),
3080      PRINT_SOCKOP(SENDTO, do_print_msgaddr),
3081      PRINT_SOCKOP(RECVFROM, do_print_msgaddr),
3082      PRINT_SOCKOP(SHUTDOWN, do_print_shutdown),
3083      PRINT_SOCKOP(SETSOCKOPT, do_print_sockopt),
3084      PRINT_SOCKOP(GETSOCKOPT, do_print_sockopt),
3085      PRINT_SOCKOP(SENDMSG, do_print_msg),
3086      PRINT_SOCKOP(RECVMSG, do_print_msg),
3087      PRINT_SOCKOP(ACCEPT4, NULL),
3088      PRINT_SOCKOP(RECVMMSG, NULL),
3089      PRINT_SOCKOP(SENDMMSG, NULL),
3090  };
3091  
3092  static void
3093  print_socketcall(CPUArchState *cpu_env, const struct syscallname *name,
3094                   abi_long arg0, abi_long arg1, abi_long arg2,
3095                   abi_long arg3, abi_long arg4, abi_long arg5)
3096  {
3097      if (arg0 >= 0 && arg0 < ARRAY_SIZE(scall) && scall[arg0].print) {
3098          scall[arg0].print(scall[arg0].name, arg1);
3099          return;
3100      }
3101      print_syscall_prologue(name);
3102      print_raw_param(TARGET_ABI_FMT_ld, arg0, 0);
3103      print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
3104      print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
3105      print_raw_param(TARGET_ABI_FMT_ld, arg3, 0);
3106      print_raw_param(TARGET_ABI_FMT_ld, arg4, 0);
3107      print_raw_param(TARGET_ABI_FMT_ld, arg5, 0);
3108      print_syscall_epilogue(name);
3109  }
3110  #endif
3111  
3112  #if defined(TARGET_NR_bind)
3113  static void
3114  print_bind(CPUArchState *cpu_env, const struct syscallname *name,
3115             abi_long arg0, abi_long arg1, abi_long arg2,
3116             abi_long arg3, abi_long arg4, abi_long arg5)
3117  {
3118      print_syscall_prologue(name);
3119      print_sockfd(arg0, 0);
3120      print_sockaddr(arg1, arg2, 1);
3121      print_syscall_epilogue(name);
3122  }
3123  #endif
3124  
3125  #if defined(TARGET_NR_stat) || defined(TARGET_NR_stat64) || \
3126      defined(TARGET_NR_lstat) || defined(TARGET_NR_lstat64)
3127  static void
3128  print_stat(CPUArchState *cpu_env, const struct syscallname *name,
3129             abi_long arg0, abi_long arg1, abi_long arg2,
3130             abi_long arg3, abi_long arg4, abi_long arg5)
3131  {
3132      print_syscall_prologue(name);
3133      print_string(arg0, 0);
3134      print_pointer(arg1, 1);
3135      print_syscall_epilogue(name);
3136  }
3137  #define print_lstat     print_stat
3138  #define print_stat64	print_stat
3139  #define print_lstat64   print_stat
3140  #endif
3141  
3142  #if defined(TARGET_NR_madvise)
3143  static struct enums madvise_advice[] = {
3144      ENUM_TARGET(MADV_NORMAL),
3145      ENUM_TARGET(MADV_RANDOM),
3146      ENUM_TARGET(MADV_SEQUENTIAL),
3147      ENUM_TARGET(MADV_WILLNEED),
3148      ENUM_TARGET(MADV_DONTNEED),
3149      ENUM_TARGET(MADV_FREE),
3150      ENUM_TARGET(MADV_REMOVE),
3151      ENUM_TARGET(MADV_DONTFORK),
3152      ENUM_TARGET(MADV_DOFORK),
3153      ENUM_TARGET(MADV_MERGEABLE),
3154      ENUM_TARGET(MADV_UNMERGEABLE),
3155      ENUM_TARGET(MADV_HUGEPAGE),
3156      ENUM_TARGET(MADV_NOHUGEPAGE),
3157      ENUM_TARGET(MADV_DONTDUMP),
3158      ENUM_TARGET(MADV_DODUMP),
3159      ENUM_TARGET(MADV_WIPEONFORK),
3160      ENUM_TARGET(MADV_KEEPONFORK),
3161      ENUM_TARGET(MADV_COLD),
3162      ENUM_TARGET(MADV_PAGEOUT),
3163      ENUM_TARGET(MADV_POPULATE_READ),
3164      ENUM_TARGET(MADV_POPULATE_WRITE),
3165      ENUM_TARGET(MADV_DONTNEED_LOCKED),
3166      ENUM_END,
3167  };
3168  
3169  static void
3170  print_madvise(CPUArchState *cpu_env, const struct syscallname *name,
3171                abi_long arg0, abi_long arg1, abi_long arg2,
3172                abi_long arg3, abi_long arg4, abi_long arg5)
3173  {
3174      print_syscall_prologue(name);
3175      print_pointer(arg0, 0);
3176      print_raw_param("%d", arg1, 0);
3177      print_enums(madvise_advice, arg2, 1);
3178      print_syscall_epilogue(name);
3179  }
3180  #endif
3181  
3182  #if defined(TARGET_NR_fstat) || defined(TARGET_NR_fstat64)
3183  static void
3184  print_fstat(CPUArchState *cpu_env, const struct syscallname *name,
3185              abi_long arg0, abi_long arg1, abi_long arg2,
3186              abi_long arg3, abi_long arg4, abi_long arg5)
3187  {
3188      print_syscall_prologue(name);
3189      print_raw_param("%d", arg0, 0);
3190      print_pointer(arg1, 1);
3191      print_syscall_epilogue(name);
3192  }
3193  #define print_fstat64     print_fstat
3194  #endif
3195  
3196  #ifdef TARGET_NR_mkdir
3197  static void
3198  print_mkdir(CPUArchState *cpu_env, const struct syscallname *name,
3199              abi_long arg0, abi_long arg1, abi_long arg2,
3200              abi_long arg3, abi_long arg4, abi_long arg5)
3201  {
3202      print_syscall_prologue(name);
3203      print_string(arg0, 0);
3204      print_file_mode(arg1, 1);
3205      print_syscall_epilogue(name);
3206  }
3207  #endif
3208  
3209  #ifdef TARGET_NR_mkdirat
3210  static void
3211  print_mkdirat(CPUArchState *cpu_env, const struct syscallname *name,
3212                abi_long arg0, abi_long arg1, abi_long arg2,
3213                abi_long arg3, abi_long arg4, abi_long arg5)
3214  {
3215      print_syscall_prologue(name);
3216      print_at_dirfd(arg0, 0);
3217      print_string(arg1, 0);
3218      print_file_mode(arg2, 1);
3219      print_syscall_epilogue(name);
3220  }
3221  #endif
3222  
3223  #ifdef TARGET_NR_rmdir
3224  static void
3225  print_rmdir(CPUArchState *cpu_env, const struct syscallname *name,
3226              abi_long arg0, abi_long arg1, abi_long arg2,
3227              abi_long arg3, abi_long arg4, abi_long arg5)
3228  {
3229      print_syscall_prologue(name);
3230      print_string(arg0, 0);
3231      print_syscall_epilogue(name);
3232  }
3233  #endif
3234  
3235  #ifdef TARGET_NR_rt_sigaction
3236  static void
3237  print_rt_sigaction(CPUArchState *cpu_env, const struct syscallname *name,
3238                     abi_long arg0, abi_long arg1, abi_long arg2,
3239                     abi_long arg3, abi_long arg4, abi_long arg5)
3240  {
3241      print_syscall_prologue(name);
3242      print_signal(arg0, 0);
3243      print_pointer(arg1, 0);
3244      print_pointer(arg2, 1);
3245      print_syscall_epilogue(name);
3246  }
3247  #endif
3248  
3249  #ifdef TARGET_NR_rt_sigprocmask
3250  static void
3251  print_rt_sigprocmask(CPUArchState *cpu_env, const struct syscallname *name,
3252                       abi_long arg0, abi_long arg1, abi_long arg2,
3253                       abi_long arg3, abi_long arg4, abi_long arg5)
3254  {
3255      const char *how = "UNKNOWN";
3256      print_syscall_prologue(name);
3257      switch(arg0) {
3258      case TARGET_SIG_BLOCK: how = "SIG_BLOCK"; break;
3259      case TARGET_SIG_UNBLOCK: how = "SIG_UNBLOCK"; break;
3260      case TARGET_SIG_SETMASK: how = "SIG_SETMASK"; break;
3261      }
3262      qemu_log("%s,", how);
3263      print_pointer(arg1, 0);
3264      print_pointer(arg2, 0);
3265      print_raw_param("%u", arg3, 1);
3266      print_syscall_epilogue(name);
3267  }
3268  #endif
3269  
3270  #ifdef TARGET_NR_rt_sigqueueinfo
3271  static void
3272  print_rt_sigqueueinfo(CPUArchState *cpu_env, const struct syscallname *name,
3273                        abi_long arg0, abi_long arg1, abi_long arg2,
3274                        abi_long arg3, abi_long arg4, abi_long arg5)
3275  {
3276      void *p;
3277      target_siginfo_t uinfo;
3278  
3279      print_syscall_prologue(name);
3280      print_raw_param("%d", arg0, 0);
3281      print_signal(arg1, 0);
3282      p = lock_user(VERIFY_READ, arg2, sizeof(target_siginfo_t), 1);
3283      if (p) {
3284          get_target_siginfo(&uinfo, p);
3285          print_siginfo(&uinfo);
3286  
3287          unlock_user(p, arg2, 0);
3288      } else {
3289          print_pointer(arg2, 1);
3290      }
3291      print_syscall_epilogue(name);
3292  }
3293  #endif
3294  
3295  #ifdef TARGET_NR_rt_tgsigqueueinfo
3296  static void
3297  print_rt_tgsigqueueinfo(CPUArchState *cpu_env, const struct syscallname *name,
3298                          abi_long arg0, abi_long arg1, abi_long arg2,
3299                          abi_long arg3, abi_long arg4, abi_long arg5)
3300  {
3301      void *p;
3302      target_siginfo_t uinfo;
3303  
3304      print_syscall_prologue(name);
3305      print_raw_param("%d", arg0, 0);
3306      print_raw_param("%d", arg1, 0);
3307      print_signal(arg2, 0);
3308      p = lock_user(VERIFY_READ, arg3, sizeof(target_siginfo_t), 1);
3309      if (p) {
3310          get_target_siginfo(&uinfo, p);
3311          print_siginfo(&uinfo);
3312  
3313          unlock_user(p, arg3, 0);
3314      } else {
3315          print_pointer(arg3, 1);
3316      }
3317      print_syscall_epilogue(name);
3318  }
3319  #endif
3320  
3321  #ifdef TARGET_NR_syslog
3322  static void
3323  print_syslog_action(abi_ulong arg, int last)
3324  {
3325      const char *type;
3326  
3327      switch (arg) {
3328          case TARGET_SYSLOG_ACTION_CLOSE: {
3329              type = "SYSLOG_ACTION_CLOSE";
3330              break;
3331          }
3332          case TARGET_SYSLOG_ACTION_OPEN: {
3333              type = "SYSLOG_ACTION_OPEN";
3334              break;
3335          }
3336          case TARGET_SYSLOG_ACTION_READ: {
3337              type = "SYSLOG_ACTION_READ";
3338              break;
3339          }
3340          case TARGET_SYSLOG_ACTION_READ_ALL: {
3341              type = "SYSLOG_ACTION_READ_ALL";
3342              break;
3343          }
3344          case TARGET_SYSLOG_ACTION_READ_CLEAR: {
3345              type = "SYSLOG_ACTION_READ_CLEAR";
3346              break;
3347          }
3348          case TARGET_SYSLOG_ACTION_CLEAR: {
3349              type = "SYSLOG_ACTION_CLEAR";
3350              break;
3351          }
3352          case TARGET_SYSLOG_ACTION_CONSOLE_OFF: {
3353              type = "SYSLOG_ACTION_CONSOLE_OFF";
3354              break;
3355          }
3356          case TARGET_SYSLOG_ACTION_CONSOLE_ON: {
3357              type = "SYSLOG_ACTION_CONSOLE_ON";
3358              break;
3359          }
3360          case TARGET_SYSLOG_ACTION_CONSOLE_LEVEL: {
3361              type = "SYSLOG_ACTION_CONSOLE_LEVEL";
3362              break;
3363          }
3364          case TARGET_SYSLOG_ACTION_SIZE_UNREAD: {
3365              type = "SYSLOG_ACTION_SIZE_UNREAD";
3366              break;
3367          }
3368          case TARGET_SYSLOG_ACTION_SIZE_BUFFER: {
3369              type = "SYSLOG_ACTION_SIZE_BUFFER";
3370              break;
3371          }
3372          default: {
3373              print_raw_param("%ld", arg, last);
3374              return;
3375          }
3376      }
3377      qemu_log("%s%s", type, get_comma(last));
3378  }
3379  
3380  static void
3381  print_syslog(CPUArchState *cpu_env, const struct syscallname *name,
3382               abi_long arg0, abi_long arg1, abi_long arg2,
3383               abi_long arg3, abi_long arg4, abi_long arg5)
3384  {
3385      print_syscall_prologue(name);
3386      print_syslog_action(arg0, 0);
3387      print_pointer(arg1, 0);
3388      print_raw_param("%d", arg2, 1);
3389      print_syscall_epilogue(name);
3390  }
3391  #endif
3392  
3393  #ifdef TARGET_NR_mknod
3394  static void
3395  print_mknod(CPUArchState *cpu_env, const struct syscallname *name,
3396              abi_long arg0, abi_long arg1, abi_long arg2,
3397              abi_long arg3, abi_long arg4, abi_long arg5)
3398  {
3399      int hasdev = (arg1 & (S_IFCHR|S_IFBLK));
3400  
3401      print_syscall_prologue(name);
3402      print_string(arg0, 0);
3403      print_file_mode(arg1, (hasdev == 0));
3404      if (hasdev) {
3405          print_raw_param("makedev(%d", major(arg2), 0);
3406          print_raw_param("%d)", minor(arg2), 1);
3407      }
3408      print_syscall_epilogue(name);
3409  }
3410  #endif
3411  
3412  #ifdef TARGET_NR_mknodat
3413  static void
3414  print_mknodat(CPUArchState *cpu_env, const struct syscallname *name,
3415                abi_long arg0, abi_long arg1, abi_long arg2,
3416                abi_long arg3, abi_long arg4, abi_long arg5)
3417  {
3418      int hasdev = (arg2 & (S_IFCHR|S_IFBLK));
3419  
3420      print_syscall_prologue(name);
3421      print_at_dirfd(arg0, 0);
3422      print_string(arg1, 0);
3423      print_file_mode(arg2, (hasdev == 0));
3424      if (hasdev) {
3425          print_raw_param("makedev(%d", major(arg3), 0);
3426          print_raw_param("%d)", minor(arg3), 1);
3427      }
3428      print_syscall_epilogue(name);
3429  }
3430  #endif
3431  
3432  #ifdef TARGET_NR_mq_open
3433  static void
3434  print_mq_open(CPUArchState *cpu_env, const struct syscallname *name,
3435                abi_long arg0, abi_long arg1, abi_long arg2,
3436                abi_long arg3, abi_long arg4, abi_long arg5)
3437  {
3438      int is_creat = (arg1 & TARGET_O_CREAT);
3439  
3440      print_syscall_prologue(name);
3441      print_string(arg0, 0);
3442      print_open_flags(arg1, (is_creat == 0));
3443      if (is_creat) {
3444          print_file_mode(arg2, 0);
3445          print_pointer(arg3, 1);
3446      }
3447      print_syscall_epilogue(name);
3448  }
3449  #endif
3450  
3451  #ifdef TARGET_NR_open
3452  static void
3453  print_open(CPUArchState *cpu_env, const struct syscallname *name,
3454             abi_long arg0, abi_long arg1, abi_long arg2,
3455             abi_long arg3, abi_long arg4, abi_long arg5)
3456  {
3457      int is_creat = (arg1 & TARGET_O_CREAT);
3458  
3459      print_syscall_prologue(name);
3460      print_string(arg0, 0);
3461      print_open_flags(arg1, (is_creat == 0));
3462      if (is_creat)
3463          print_file_mode(arg2, 1);
3464      print_syscall_epilogue(name);
3465  }
3466  #endif
3467  
3468  #ifdef TARGET_NR_openat
3469  static void
3470  print_openat(CPUArchState *cpu_env, const struct syscallname *name,
3471               abi_long arg0, abi_long arg1, abi_long arg2,
3472               abi_long arg3, abi_long arg4, abi_long arg5)
3473  {
3474      int is_creat = (arg2 & TARGET_O_CREAT);
3475  
3476      print_syscall_prologue(name);
3477      print_at_dirfd(arg0, 0);
3478      print_string(arg1, 0);
3479      print_open_flags(arg2, (is_creat == 0));
3480      if (is_creat)
3481          print_file_mode(arg3, 1);
3482      print_syscall_epilogue(name);
3483  }
3484  #endif
3485  
3486  #ifdef TARGET_NR_pidfd_send_signal
3487  static void
3488  print_pidfd_send_signal(CPUArchState *cpu_env, const struct syscallname *name,
3489                  abi_long arg0, abi_long arg1, abi_long arg2,
3490                  abi_long arg3, abi_long arg4, abi_long arg5)
3491  {
3492      void *p;
3493      target_siginfo_t uinfo;
3494  
3495      print_syscall_prologue(name);
3496      print_raw_param("%d", arg0, 0);
3497      print_signal(arg1, 0);
3498  
3499      p = lock_user(VERIFY_READ, arg2, sizeof(target_siginfo_t), 1);
3500      if (p) {
3501          get_target_siginfo(&uinfo, p);
3502          print_siginfo(&uinfo);
3503  
3504          unlock_user(p, arg2, 0);
3505      } else {
3506          print_pointer(arg2, 0);
3507      }
3508  
3509      print_raw_param("%u", arg3, 1);
3510      print_syscall_epilogue(name);
3511  }
3512  #endif
3513  
3514  #ifdef TARGET_NR_mq_unlink
3515  static void
3516  print_mq_unlink(CPUArchState *cpu_env, const struct syscallname *name,
3517                  abi_long arg0, abi_long arg1, abi_long arg2,
3518                  abi_long arg3, abi_long arg4, abi_long arg5)
3519  {
3520      print_syscall_prologue(name);
3521      print_string(arg0, 1);
3522      print_syscall_epilogue(name);
3523  }
3524  #endif
3525  
3526  #if defined(TARGET_NR_fstatat64) || defined(TARGET_NR_newfstatat)
3527  static void
3528  print_fstatat64(CPUArchState *cpu_env, const struct syscallname *name,
3529                  abi_long arg0, abi_long arg1, abi_long arg2,
3530                  abi_long arg3, abi_long arg4, abi_long arg5)
3531  {
3532      print_syscall_prologue(name);
3533      print_at_dirfd(arg0, 0);
3534      print_string(arg1, 0);
3535      print_pointer(arg2, 0);
3536      print_flags(at_file_flags, arg3, 1);
3537      print_syscall_epilogue(name);
3538  }
3539  #define print_newfstatat    print_fstatat64
3540  #endif
3541  
3542  #ifdef TARGET_NR_readlink
3543  static void
3544  print_readlink(CPUArchState *cpu_env, const struct syscallname *name,
3545                 abi_long arg0, abi_long arg1, abi_long arg2,
3546                 abi_long arg3, abi_long arg4, abi_long arg5)
3547  {
3548      print_syscall_prologue(name);
3549      print_string(arg0, 0);
3550      print_pointer(arg1, 0);
3551      print_raw_param("%u", arg2, 1);
3552      print_syscall_epilogue(name);
3553  }
3554  #endif
3555  
3556  #ifdef TARGET_NR_readlinkat
3557  static void
3558  print_readlinkat(CPUArchState *cpu_env, const struct syscallname *name,
3559                   abi_long arg0, abi_long arg1, abi_long arg2,
3560                   abi_long arg3, abi_long arg4, abi_long arg5)
3561  {
3562      print_syscall_prologue(name);
3563      print_at_dirfd(arg0, 0);
3564      print_string(arg1, 0);
3565      print_pointer(arg2, 0);
3566      print_raw_param("%u", arg3, 1);
3567      print_syscall_epilogue(name);
3568  }
3569  #endif
3570  
3571  #ifdef TARGET_NR_rename
3572  static void
3573  print_rename(CPUArchState *cpu_env, const struct syscallname *name,
3574               abi_long arg0, abi_long arg1, abi_long arg2,
3575               abi_long arg3, abi_long arg4, abi_long arg5)
3576  {
3577      print_syscall_prologue(name);
3578      print_string(arg0, 0);
3579      print_string(arg1, 1);
3580      print_syscall_epilogue(name);
3581  }
3582  #endif
3583  
3584  #ifdef TARGET_NR_renameat
3585  static void
3586  print_renameat(CPUArchState *cpu_env, const struct syscallname *name,
3587                 abi_long arg0, abi_long arg1, abi_long arg2,
3588                 abi_long arg3, abi_long arg4, abi_long arg5)
3589  {
3590      print_syscall_prologue(name);
3591      print_at_dirfd(arg0, 0);
3592      print_string(arg1, 0);
3593      print_at_dirfd(arg2, 0);
3594      print_string(arg3, 1);
3595      print_syscall_epilogue(name);
3596  }
3597  #endif
3598  
3599  #ifdef TARGET_NR_statfs
3600  static void
3601  print_statfs(CPUArchState *cpu_env, const struct syscallname *name,
3602               abi_long arg0, abi_long arg1, abi_long arg2,
3603               abi_long arg3, abi_long arg4, abi_long arg5)
3604  {
3605      print_syscall_prologue(name);
3606      print_string(arg0, 0);
3607      print_pointer(arg1, 1);
3608      print_syscall_epilogue(name);
3609  }
3610  #endif
3611  
3612  #ifdef TARGET_NR_statfs64
3613  static void
3614  print_statfs64(CPUArchState *cpu_env, const struct syscallname *name,
3615                 abi_long arg0, abi_long arg1, abi_long arg2,
3616                 abi_long arg3, abi_long arg4, abi_long arg5)
3617  {
3618      print_syscall_prologue(name);
3619      print_string(arg0, 0);
3620      print_pointer(arg1, 1);
3621      print_syscall_epilogue(name);
3622  }
3623  #endif
3624  
3625  #ifdef TARGET_NR_symlink
3626  static void
3627  print_symlink(CPUArchState *cpu_env, const struct syscallname *name,
3628                abi_long arg0, abi_long arg1, abi_long arg2,
3629                abi_long arg3, abi_long arg4, abi_long arg5)
3630  {
3631      print_syscall_prologue(name);
3632      print_string(arg0, 0);
3633      print_string(arg1, 1);
3634      print_syscall_epilogue(name);
3635  }
3636  #endif
3637  
3638  #ifdef TARGET_NR_symlinkat
3639  static void
3640  print_symlinkat(CPUArchState *cpu_env, const struct syscallname *name,
3641                  abi_long arg0, abi_long arg1, abi_long arg2,
3642                  abi_long arg3, abi_long arg4, abi_long arg5)
3643  {
3644      print_syscall_prologue(name);
3645      print_string(arg0, 0);
3646      print_at_dirfd(arg1, 0);
3647      print_string(arg2, 1);
3648      print_syscall_epilogue(name);
3649  }
3650  #endif
3651  
3652  #ifdef TARGET_NR_mount
3653  static void
3654  print_mount(CPUArchState *cpu_env, const struct syscallname *name,
3655              abi_long arg0, abi_long arg1, abi_long arg2,
3656              abi_long arg3, abi_long arg4, abi_long arg5)
3657  {
3658      print_syscall_prologue(name);
3659      print_string(arg0, 0);
3660      print_string(arg1, 0);
3661      print_string(arg2, 0);
3662      print_flags(mount_flags, arg3, 0);
3663      print_pointer(arg4, 1);
3664      print_syscall_epilogue(name);
3665  }
3666  #endif
3667  
3668  #ifdef TARGET_NR_umount
3669  static void
3670  print_umount(CPUArchState *cpu_env, const struct syscallname *name,
3671               abi_long arg0, abi_long arg1, abi_long arg2,
3672               abi_long arg3, abi_long arg4, abi_long arg5)
3673  {
3674      print_syscall_prologue(name);
3675      print_string(arg0, 1);
3676      print_syscall_epilogue(name);
3677  }
3678  #endif
3679  
3680  #ifdef TARGET_NR_umount2
3681  static void
3682  print_umount2(CPUArchState *cpu_env, const struct syscallname *name,
3683                abi_long arg0, abi_long arg1, abi_long arg2,
3684                abi_long arg3, abi_long arg4, abi_long arg5)
3685  {
3686      print_syscall_prologue(name);
3687      print_string(arg0, 0);
3688      print_flags(umount2_flags, arg1, 1);
3689      print_syscall_epilogue(name);
3690  }
3691  #endif
3692  
3693  #ifdef TARGET_NR_unlink
3694  static void
3695  print_unlink(CPUArchState *cpu_env, const struct syscallname *name,
3696               abi_long arg0, abi_long arg1, abi_long arg2,
3697               abi_long arg3, abi_long arg4, abi_long arg5)
3698  {
3699      print_syscall_prologue(name);
3700      print_string(arg0, 1);
3701      print_syscall_epilogue(name);
3702  }
3703  #endif
3704  
3705  #ifdef TARGET_NR_unlinkat
3706  static void
3707  print_unlinkat(CPUArchState *cpu_env, const struct syscallname *name,
3708                 abi_long arg0, abi_long arg1, abi_long arg2,
3709                 abi_long arg3, abi_long arg4, abi_long arg5)
3710  {
3711      print_syscall_prologue(name);
3712      print_at_dirfd(arg0, 0);
3713      print_string(arg1, 0);
3714      print_flags(unlinkat_flags, arg2, 1);
3715      print_syscall_epilogue(name);
3716  }
3717  #endif
3718  
3719  #ifdef TARGET_NR_unshare
3720  static void
3721  print_unshare(CPUArchState *cpu_env, const struct syscallname *name,
3722                abi_long arg0, abi_long arg1, abi_long arg2,
3723                abi_long arg3, abi_long arg4, abi_long arg5)
3724  {
3725      print_syscall_prologue(name);
3726      print_flags(clone_flags, arg0, 1);
3727      print_syscall_epilogue(name);
3728  }
3729  #endif
3730  
3731  #ifdef TARGET_NR_clock_nanosleep
3732  static void
3733  print_clock_nanosleep(CPUArchState *cpu_env, const struct syscallname *name,
3734                  abi_long arg0, abi_long arg1, abi_long arg2,
3735                  abi_long arg3, abi_long arg4, abi_long arg5)
3736  {
3737      print_syscall_prologue(name);
3738      print_enums(clockids, arg0, 0);
3739      print_raw_param("%d", arg1, 0);
3740      print_timespec(arg2, 0);
3741      print_timespec(arg3, 1);
3742      print_syscall_epilogue(name);
3743  }
3744  #endif
3745  
3746  #ifdef TARGET_NR_utime
3747  static void
3748  print_utime(CPUArchState *cpu_env, const struct syscallname *name,
3749              abi_long arg0, abi_long arg1, abi_long arg2,
3750              abi_long arg3, abi_long arg4, abi_long arg5)
3751  {
3752      print_syscall_prologue(name);
3753      print_string(arg0, 0);
3754      print_pointer(arg1, 1);
3755      print_syscall_epilogue(name);
3756  }
3757  #endif
3758  
3759  #ifdef TARGET_NR_utimes
3760  static void
3761  print_utimes(CPUArchState *cpu_env, const struct syscallname *name,
3762               abi_long arg0, abi_long arg1, abi_long arg2,
3763               abi_long arg3, abi_long arg4, abi_long arg5)
3764  {
3765      print_syscall_prologue(name);
3766      print_string(arg0, 0);
3767      print_pointer(arg1, 1);
3768      print_syscall_epilogue(name);
3769  }
3770  #endif
3771  
3772  #ifdef TARGET_NR_utimensat
3773  static void
3774  print_utimensat(CPUArchState *cpu_env, const struct syscallname *name,
3775                  abi_long arg0, abi_long arg1, abi_long arg2,
3776                  abi_long arg3, abi_long arg4, abi_long arg5)
3777  {
3778      print_syscall_prologue(name);
3779      print_at_dirfd(arg0, 0);
3780      print_string(arg1, 0);
3781      print_pointer(arg2, 0);
3782      print_flags(at_file_flags, arg3, 1);
3783      print_syscall_epilogue(name);
3784  }
3785  #endif
3786  
3787  #if defined(TARGET_NR_mmap) || defined(TARGET_NR_mmap2)
3788  static void
3789  print_mmap_both(CPUArchState *cpu_env, const struct syscallname *name,
3790             abi_long arg0, abi_long arg1, abi_long arg2,
3791             abi_long arg3, abi_long arg4, abi_long arg5,
3792             bool is_old_mmap)
3793  {
3794      if (is_old_mmap) {
3795              abi_ulong *v;
3796              abi_ulong argp = arg0;
3797              if (!(v = lock_user(VERIFY_READ, argp, 6 * sizeof(abi_ulong), 1)))
3798                  return;
3799              arg0 = tswapal(v[0]);
3800              arg1 = tswapal(v[1]);
3801              arg2 = tswapal(v[2]);
3802              arg3 = tswapal(v[3]);
3803              arg4 = tswapal(v[4]);
3804              arg5 = tswapal(v[5]);
3805              unlock_user(v, argp, 0);
3806          }
3807      print_syscall_prologue(name);
3808      print_pointer(arg0, 0);
3809      print_raw_param("%d", arg1, 0);
3810      print_flags(mmap_prot_flags, arg2, 0);
3811      print_flags(mmap_flags, arg3, 0);
3812      print_raw_param("%d", arg4, 0);
3813      print_raw_param("%#x", arg5, 1);
3814      print_syscall_epilogue(name);
3815  }
3816  #endif
3817  
3818  #if defined(TARGET_NR_mmap)
3819  static void
3820  print_mmap(CPUArchState *cpu_env, const struct syscallname *name,
3821             abi_long arg0, abi_long arg1, abi_long arg2,
3822             abi_long arg3, abi_long arg4, abi_long arg5)
3823  {
3824      return print_mmap_both(cpu_env, name, arg0, arg1, arg2, arg3,
3825                             arg4, arg5,
3826  #if defined(TARGET_NR_mmap2)
3827                              true
3828  #else
3829                              false
3830  #endif
3831                              );
3832  }
3833  #endif
3834  
3835  #if defined(TARGET_NR_mmap2)
3836  static void
3837  print_mmap2(CPUArchState *cpu_env, const struct syscallname *name,
3838             abi_long arg0, abi_long arg1, abi_long arg2,
3839             abi_long arg3, abi_long arg4, abi_long arg5)
3840  {
3841      return print_mmap_both(cpu_env, name, arg0, arg1, arg2, arg3,
3842                             arg4, arg5, false);
3843  }
3844  #endif
3845  
3846  #ifdef TARGET_NR_mprotect
3847  static void
3848  print_mprotect(CPUArchState *cpu_env, const struct syscallname *name,
3849                 abi_long arg0, abi_long arg1, abi_long arg2,
3850                 abi_long arg3, abi_long arg4, abi_long arg5)
3851  {
3852      print_syscall_prologue(name);
3853      print_pointer(arg0, 0);
3854      print_raw_param("%d", arg1, 0);
3855      print_flags(mmap_prot_flags, arg2, 1);
3856      print_syscall_epilogue(name);
3857  }
3858  #endif
3859  
3860  #ifdef TARGET_NR_munmap
3861  static void
3862  print_munmap(CPUArchState *cpu_env, const struct syscallname *name,
3863               abi_long arg0, abi_long arg1, abi_long arg2,
3864               abi_long arg3, abi_long arg4, abi_long arg5)
3865  {
3866      print_syscall_prologue(name);
3867      print_pointer(arg0, 0);
3868      print_raw_param("%d", arg1, 1);
3869      print_syscall_epilogue(name);
3870  }
3871  #endif
3872  
3873  #ifdef TARGET_NR_futex
3874  static void print_futex_op(int cmd, int last)
3875  {
3876      static const char * const futex_names[] = {
3877  #define NAME(X)  [X] = #X
3878          NAME(FUTEX_WAIT),
3879          NAME(FUTEX_WAKE),
3880          NAME(FUTEX_FD),
3881          NAME(FUTEX_REQUEUE),
3882          NAME(FUTEX_CMP_REQUEUE),
3883          NAME(FUTEX_WAKE_OP),
3884          NAME(FUTEX_LOCK_PI),
3885          NAME(FUTEX_UNLOCK_PI),
3886          NAME(FUTEX_TRYLOCK_PI),
3887          NAME(FUTEX_WAIT_BITSET),
3888          NAME(FUTEX_WAKE_BITSET),
3889          NAME(FUTEX_WAIT_REQUEUE_PI),
3890          NAME(FUTEX_CMP_REQUEUE_PI),
3891          NAME(FUTEX_LOCK_PI2),
3892  #undef NAME
3893      };
3894  
3895      unsigned base_cmd = cmd & FUTEX_CMD_MASK;
3896  
3897      if (base_cmd < ARRAY_SIZE(futex_names)) {
3898          qemu_log("%s%s%s",
3899                   (cmd & FUTEX_PRIVATE_FLAG ? "FUTEX_PRIVATE_FLAG|" : ""),
3900                   (cmd & FUTEX_CLOCK_REALTIME ? "FUTEX_CLOCK_REALTIME|" : ""),
3901                   futex_names[base_cmd]);
3902      } else {
3903          qemu_log("0x%x", cmd);
3904      }
3905  }
3906  
3907  static void
3908  print_futex(CPUArchState *cpu_env, const struct syscallname *name,
3909              abi_long arg0, abi_long arg1, abi_long arg2,
3910              abi_long arg3, abi_long arg4, abi_long arg5)
3911  {
3912      abi_long op = arg1 & FUTEX_CMD_MASK;
3913      print_syscall_prologue(name);
3914      print_pointer(arg0, 0);
3915      print_futex_op(arg1, 0);
3916      print_raw_param(",%d", arg2, 0);
3917      switch (op) {
3918          case FUTEX_WAIT:
3919          case FUTEX_WAIT_BITSET:
3920          case FUTEX_LOCK_PI:
3921          case FUTEX_LOCK_PI2:
3922          case FUTEX_WAIT_REQUEUE_PI:
3923              print_timespec(arg3, 0);
3924              break;
3925          default:
3926              print_pointer(arg3, 0);
3927              break;
3928      }
3929      print_pointer(arg4, 0);
3930      print_raw_param("%d", arg4, 1);
3931      print_syscall_epilogue(name);
3932  }
3933  #endif
3934  
3935  #ifdef TARGET_NR_prlimit64
3936  static const char *target_ressource_string(abi_ulong r)
3937  {
3938      #define RET_RES_ENTRY(res) case TARGET_##res:  return #res;
3939      switch (r) {
3940      RET_RES_ENTRY(RLIMIT_AS);
3941      RET_RES_ENTRY(RLIMIT_CORE);
3942      RET_RES_ENTRY(RLIMIT_CPU);
3943      RET_RES_ENTRY(RLIMIT_DATA);
3944      RET_RES_ENTRY(RLIMIT_FSIZE);
3945      RET_RES_ENTRY(RLIMIT_LOCKS);
3946      RET_RES_ENTRY(RLIMIT_MEMLOCK);
3947      RET_RES_ENTRY(RLIMIT_MSGQUEUE);
3948      RET_RES_ENTRY(RLIMIT_NICE);
3949      RET_RES_ENTRY(RLIMIT_NOFILE);
3950      RET_RES_ENTRY(RLIMIT_NPROC);
3951      RET_RES_ENTRY(RLIMIT_RSS);
3952      RET_RES_ENTRY(RLIMIT_RTPRIO);
3953  #ifdef RLIMIT_RTTIME
3954      RET_RES_ENTRY(RLIMIT_RTTIME);
3955  #endif
3956      RET_RES_ENTRY(RLIMIT_SIGPENDING);
3957      RET_RES_ENTRY(RLIMIT_STACK);
3958      default:
3959          return NULL;
3960      }
3961      #undef RET_RES_ENTRY
3962  }
3963  
3964  static void
3965  print_rlimit64(abi_ulong rlim_addr, int last)
3966  {
3967      if (rlim_addr) {
3968          struct target_rlimit64 *rl;
3969  
3970          rl = lock_user(VERIFY_READ, rlim_addr, sizeof(*rl), 1);
3971          if (!rl) {
3972              print_pointer(rlim_addr, last);
3973              return;
3974          }
3975          print_raw_param64("{rlim_cur=%" PRId64, tswap64(rl->rlim_cur), 0);
3976          print_raw_param64("rlim_max=%" PRId64 "}", tswap64(rl->rlim_max),
3977                              last);
3978          unlock_user(rl, rlim_addr, 0);
3979      } else {
3980          qemu_log("NULL%s", get_comma(last));
3981      }
3982  }
3983  
3984  static void
3985  print_prlimit64(CPUArchState *cpu_env, const struct syscallname *name,
3986             abi_long arg0, abi_long arg1, abi_long arg2,
3987             abi_long arg3, abi_long arg4, abi_long arg5)
3988  {
3989      const char *rlim_name;
3990  
3991      print_syscall_prologue(name);
3992      print_raw_param("%d", arg0, 0);
3993      rlim_name = target_ressource_string(arg1);
3994      if (rlim_name) {
3995          qemu_log("%s,", rlim_name);
3996      } else {
3997          print_raw_param("%d", arg1, 0);
3998      }
3999      print_rlimit64(arg2, 0);
4000      print_pointer(arg3, 1);
4001      print_syscall_epilogue(name);
4002  }
4003  
4004  static void
4005  print_syscall_ret_prlimit64(CPUArchState *cpu_env,
4006                         const struct syscallname *name,
4007                         abi_long ret, abi_long arg0, abi_long arg1,
4008                         abi_long arg2, abi_long arg3, abi_long arg4,
4009                         abi_long arg5)
4010  {
4011      if (!print_syscall_err(ret)) {
4012          qemu_log(TARGET_ABI_FMT_ld, ret);
4013          if (arg3) {
4014              qemu_log(" (");
4015              print_rlimit64(arg3, 1);
4016              qemu_log(")");
4017          }
4018      }
4019      qemu_log("\n");
4020  }
4021  #endif
4022  
4023  #ifdef TARGET_NR_kill
4024  static void
4025  print_kill(CPUArchState *cpu_env, const struct syscallname *name,
4026             abi_long arg0, abi_long arg1, abi_long arg2,
4027             abi_long arg3, abi_long arg4, abi_long arg5)
4028  {
4029      print_syscall_prologue(name);
4030      print_raw_param("%d", arg0, 0);
4031      print_signal(arg1, 1);
4032      print_syscall_epilogue(name);
4033  }
4034  #endif
4035  
4036  #ifdef TARGET_NR_tkill
4037  static void
4038  print_tkill(CPUArchState *cpu_env, const struct syscallname *name,
4039              abi_long arg0, abi_long arg1, abi_long arg2,
4040              abi_long arg3, abi_long arg4, abi_long arg5)
4041  {
4042      print_syscall_prologue(name);
4043      print_raw_param("%d", arg0, 0);
4044      print_signal(arg1, 1);
4045      print_syscall_epilogue(name);
4046  }
4047  #endif
4048  
4049  #ifdef TARGET_NR_tgkill
4050  static void
4051  print_tgkill(CPUArchState *cpu_env, const struct syscallname *name,
4052               abi_long arg0, abi_long arg1, abi_long arg2,
4053               abi_long arg3, abi_long arg4, abi_long arg5)
4054  {
4055      print_syscall_prologue(name);
4056      print_raw_param("%d", arg0, 0);
4057      print_raw_param("%d", arg1, 0);
4058      print_signal(arg2, 1);
4059      print_syscall_epilogue(name);
4060  }
4061  #endif
4062  
4063  #if defined(TARGET_NR_pread64) || defined(TARGET_NR_pwrite64)
4064  static void
4065  print_pread64(CPUArchState *cpu_env, const struct syscallname *name,
4066          abi_long arg0, abi_long arg1, abi_long arg2,
4067          abi_long arg3, abi_long arg4, abi_long arg5)
4068  {
4069      if (regpairs_aligned(cpu_env, TARGET_NR_pread64)) {
4070          arg3 = arg4;
4071          arg4 = arg5;
4072      }
4073      print_syscall_prologue(name);
4074      print_raw_param("%d", arg0, 0);
4075      print_pointer(arg1, 0);
4076      print_raw_param("%d", arg2, 0);
4077      print_raw_param("%" PRIu64, target_offset64(arg3, arg4), 1);
4078      print_syscall_epilogue(name);
4079  }
4080  #endif
4081  
4082  #ifdef TARGET_NR_statx
4083  static void
4084  print_statx(CPUArchState *cpu_env, const struct syscallname *name,
4085              abi_long arg0, abi_long arg1, abi_long arg2,
4086              abi_long arg3, abi_long arg4, abi_long arg5)
4087  {
4088      print_syscall_prologue(name);
4089      print_at_dirfd(arg0, 0);
4090      print_string(arg1, 0);
4091      print_flags(statx_flags, arg2, 0);
4092      print_flags(statx_mask, arg3, 0);
4093      print_pointer(arg4, 1);
4094      print_syscall_epilogue(name);
4095  }
4096  #endif
4097  
4098  #ifdef TARGET_NR_ioctl
4099  static void
4100  print_ioctl(CPUArchState *cpu_env, const struct syscallname *name,
4101              abi_long arg0, abi_long arg1, abi_long arg2,
4102              abi_long arg3, abi_long arg4, abi_long arg5)
4103  {
4104      print_syscall_prologue(name);
4105      print_raw_param("%d", arg0, 0);
4106  
4107      const IOCTLEntry *ie;
4108      const argtype *arg_type;
4109      void *argptr;
4110      int target_size;
4111  
4112      for (ie = ioctl_entries; ie->target_cmd != 0; ie++) {
4113          if (ie->target_cmd == arg1) {
4114              break;
4115          }
4116      }
4117  
4118      if (ie->target_cmd == 0) {
4119          print_raw_param("%#x", arg1, 0);
4120          print_raw_param("%#x", arg2, 1);
4121      } else {
4122          qemu_log("%s", ie->name);
4123          arg_type = ie->arg_type;
4124  
4125          if (arg_type[0] != TYPE_NULL) {
4126              qemu_log(",");
4127  
4128              switch (arg_type[0]) {
4129              case TYPE_PTRVOID:
4130                  print_pointer(arg2, 1);
4131                  break;
4132              case TYPE_CHAR:
4133              case TYPE_SHORT:
4134              case TYPE_INT:
4135                  print_raw_param("%d", arg2, 1);
4136                  break;
4137              case TYPE_LONG:
4138                  print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
4139                  break;
4140              case TYPE_ULONG:
4141                  print_raw_param(TARGET_ABI_FMT_lu, arg2, 1);
4142                  break;
4143              case TYPE_PTR:
4144                  switch (ie->access) {
4145                  case IOC_R:
4146                      print_pointer(arg2, 1);
4147                      break;
4148                  case IOC_W:
4149                  case IOC_RW:
4150                      arg_type++;
4151                      target_size = thunk_type_size(arg_type, 0);
4152                      argptr = lock_user(VERIFY_READ, arg2, target_size, 1);
4153                      if (argptr) {
4154                          thunk_print(argptr, arg_type);
4155                          unlock_user(argptr, arg2, target_size);
4156                      } else {
4157                          print_pointer(arg2, 1);
4158                      }
4159                      break;
4160                  }
4161                  break;
4162              default:
4163                  g_assert_not_reached();
4164              }
4165          }
4166      }
4167      print_syscall_epilogue(name);
4168  }
4169  #endif
4170  
4171  /*
4172   * An array of all of the syscalls we know about
4173   */
4174  
4175  static const struct syscallname scnames[] = {
4176  #include "strace.list"
4177  };
4178  
4179  static int nsyscalls = ARRAY_SIZE(scnames);
4180  
4181  /*
4182   * The public interface to this module.
4183   */
4184  void
4185  print_syscall(CPUArchState *cpu_env, int num,
4186                abi_long arg1, abi_long arg2, abi_long arg3,
4187                abi_long arg4, abi_long arg5, abi_long arg6)
4188  {
4189      int i;
4190      FILE *f;
4191      const char *format = "%s(" TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ","
4192                                 TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ","
4193                                 TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ")";
4194  
4195      f = qemu_log_trylock();
4196      if (!f) {
4197          return;
4198      }
4199      fprintf(f, "%d ", getpid());
4200  
4201      for (i = 0; i < nsyscalls; i++) {
4202          if (scnames[i].nr == num) {
4203              if (scnames[i].call != NULL) {
4204                  scnames[i].call(cpu_env, &scnames[i], arg1, arg2, arg3,
4205                                  arg4, arg5, arg6);
4206              } else {
4207                  /* XXX: this format system is broken because it uses
4208                     host types and host pointers for strings */
4209                  if (scnames[i].format != NULL) {
4210                      format = scnames[i].format;
4211                  }
4212                  fprintf(f, format, scnames[i].name, arg1, arg2,
4213                          arg3, arg4, arg5, arg6);
4214              }
4215              qemu_log_unlock(f);
4216              return;
4217          }
4218      }
4219      fprintf(f, "Unknown syscall %d\n", num);
4220      qemu_log_unlock(f);
4221  }
4222  
4223  
4224  void
4225  print_syscall_ret(CPUArchState *cpu_env, int num, abi_long ret,
4226                    abi_long arg1, abi_long arg2, abi_long arg3,
4227                    abi_long arg4, abi_long arg5, abi_long arg6)
4228  {
4229      int i;
4230      FILE *f;
4231  
4232      f = qemu_log_trylock();
4233      if (!f) {
4234          return;
4235      }
4236  
4237      for (i = 0; i < nsyscalls; i++) {
4238          if (scnames[i].nr == num) {
4239              if (scnames[i].result != NULL) {
4240                  scnames[i].result(cpu_env, &scnames[i], ret,
4241                                    arg1, arg2, arg3,
4242                                    arg4, arg5, arg6);
4243              } else {
4244                  if (!print_syscall_err(ret)) {
4245                      fprintf(f, TARGET_ABI_FMT_ld, ret);
4246                  }
4247                  fprintf(f, "\n");
4248              }
4249              break;
4250          }
4251      }
4252      qemu_log_unlock(f);
4253  }
4254  
4255  void print_taken_signal(int target_signum, const target_siginfo_t *tinfo)
4256  {
4257      /* Print the strace output for a signal being taken:
4258       * --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=0} ---
4259       */
4260      FILE *f;
4261  
4262      f = qemu_log_trylock();
4263      if (!f) {
4264          return;
4265      }
4266  
4267      fprintf(f, "--- ");
4268      print_signal(target_signum, 1);
4269      fprintf(f, " ");
4270      print_siginfo(tinfo);
4271      fprintf(f, " ---\n");
4272      qemu_log_unlock(f);
4273  }
4274