1d39594e9SPeter Maydell #include "qemu/osdep.h"
2a44d57a3SPeter Maydell
333189d31Sths #include <sys/ipc.h>
433189d31Sths #include <sys/msg.h>
533189d31Sths #include <sys/sem.h>
633189d31Sths #include <sys/shm.h>
733189d31Sths #include <sys/select.h>
874d753acSMika Westerberg #include <sys/mount.h>
9fb3aabf3SLaurent Vivier #include <arpa/inet.h>
1038987eabSShu-Chun Weng #include <netinet/in.h>
11fb3aabf3SLaurent Vivier #include <netinet/tcp.h>
12fe51b0a5SShu-Chun Weng #include <netinet/udp.h>
13fb3aabf3SLaurent Vivier #include <linux/if_packet.h>
1438987eabSShu-Chun Weng #include <linux/in6.h>
15814ae70fSPhilippe Mathieu-Daudé #include <linux/netlink.h>
1697299303SMichael Vogt #ifdef HAVE_OPENAT2_H
1797299303SMichael Vogt #include <linux/openat2.h>
1897299303SMichael Vogt #endif
19608e5592SLaurent Vivier #include <sched.h>
2033189d31Sths #include "qemu.h"
213b249d26SPeter Maydell #include "user-internals.h"
22a44d57a3SPeter Maydell #include "strace.h"
237b72aa1dSHelge Deller #include "signal-common.h"
24375ce49bSIlya Leoshkevich #include "target_mman.h"
2533189d31Sths
2633189d31Sths struct syscallname {
2733189d31Sths int nr;
287ccfb2ebSblueswir1 const char *name;
297ccfb2ebSblueswir1 const char *format;
30a0939b89SPhilippe Mathieu-Daudé void (*call)(CPUArchState *, const struct syscallname *,
31c16f9ed3Sbellard abi_long, abi_long, abi_long,
32c16f9ed3Sbellard abi_long, abi_long, abi_long);
33a0939b89SPhilippe Mathieu-Daudé void (*result)(CPUArchState *, const struct syscallname *, abi_long,
34c84be71fSFilip Bozuta abi_long, abi_long, abi_long,
35c84be71fSFilip Bozuta abi_long, abi_long, abi_long);
3633189d31Sths };
3733189d31Sths
3874d753acSMika Westerberg /*
3974d753acSMika Westerberg * It is possible that target doesn't have syscall that uses
4074d753acSMika Westerberg * following flags but we don't want the compiler to warn
4174d753acSMika Westerberg * us about them being unused. Same applies to utility print
4274d753acSMika Westerberg * functions. It is ok to keep them while not used.
4374d753acSMika Westerberg */
4474d753acSMika Westerberg #define UNUSED __attribute__ ((unused))
4574d753acSMika Westerberg
4674d753acSMika Westerberg /*
4774d753acSMika Westerberg * Structure used to translate flag values into strings. This is
4874d753acSMika Westerberg * similar that is in the actual strace tool.
4974d753acSMika Westerberg */
5074d753acSMika Westerberg struct flags {
5174d753acSMika Westerberg abi_long f_value; /* flag */
5240965ad9SRichard Henderson abi_long f_mask; /* mask */
5374d753acSMika Westerberg const char *f_string; /* stringified flag */
5474d753acSMika Westerberg };
5574d753acSMika Westerberg
5640965ad9SRichard Henderson /* No 'struct flags' element should have a zero mask. */
5740965ad9SRichard Henderson #define FLAG_BASIC(V, M, N) { V, M | QEMU_BUILD_BUG_ON_ZERO(!(M)), N }
5840965ad9SRichard Henderson
5974d753acSMika Westerberg /* common flags for all architectures */
6040965ad9SRichard Henderson #define FLAG_GENERIC_MASK(V, M) FLAG_BASIC(V, M, #V)
6140965ad9SRichard Henderson #define FLAG_GENERIC(V) FLAG_BASIC(V, V, #V)
6274d753acSMika Westerberg /* target specific flags (syscall_defs.h has TARGET_<flag>) */
6340965ad9SRichard Henderson #define FLAG_TARGET_MASK(V, M) FLAG_BASIC(TARGET_##V, TARGET_##M, #V)
6440965ad9SRichard Henderson #define FLAG_TARGET(V) FLAG_BASIC(TARGET_##V, TARGET_##V, #V)
6574d753acSMika Westerberg /* end of flags array */
6640965ad9SRichard Henderson #define FLAG_END { 0, 0, NULL }
6774d753acSMika Westerberg
6845f56799SFilip Bozuta /* Structure used to translate enumerated values into strings */
6945f56799SFilip Bozuta struct enums {
7045f56799SFilip Bozuta abi_long e_value; /* enum value */
7145f56799SFilip Bozuta const char *e_string; /* stringified enum */
7245f56799SFilip Bozuta };
7345f56799SFilip Bozuta
7445f56799SFilip Bozuta /* common enums for all architectures */
7545f56799SFilip Bozuta #define ENUM_GENERIC(name) { name, #name }
7645f56799SFilip Bozuta /* target specific enums */
7745f56799SFilip Bozuta #define ENUM_TARGET(name) { TARGET_ ## name, #name }
7845f56799SFilip Bozuta /* end of enums array */
7945f56799SFilip Bozuta #define ENUM_END { 0, NULL }
8045f56799SFilip Bozuta
8174d753acSMika Westerberg UNUSED static const char *get_comma(int);
8274d753acSMika Westerberg UNUSED static void print_pointer(abi_long, int);
8374d753acSMika Westerberg UNUSED static void print_flags(const struct flags *, abi_long, int);
8445f56799SFilip Bozuta UNUSED static void print_enums(const struct enums *, abi_long, int);
8574d753acSMika Westerberg UNUSED static void print_at_dirfd(abi_long, int);
8674d753acSMika Westerberg UNUSED static void print_file_mode(abi_long, int);
8774d753acSMika Westerberg UNUSED static void print_open_flags(abi_long, int);
8874d753acSMika Westerberg UNUSED static void print_syscall_prologue(const struct syscallname *);
8974d753acSMika Westerberg UNUSED static void print_syscall_epilogue(const struct syscallname *);
9074d753acSMika Westerberg UNUSED static void print_string(abi_long, int);
91fb3aabf3SLaurent Vivier UNUSED static void print_buf(abi_long addr, abi_long len, int last);
9274d753acSMika Westerberg UNUSED static void print_raw_param(const char *, abi_long, int);
938e0f5c1bSHelge Deller UNUSED static void print_raw_param64(const char *, long long, int last);
9474d753acSMika Westerberg UNUSED static void print_timeval(abi_ulong, int);
951a674adfSFilip Bozuta UNUSED static void print_timespec(abi_ulong, int);
96aad43d15SHelge Deller UNUSED static void print_timespec64(abi_ulong, int);
976d33e036SPhilippe Mathieu-Daudé UNUSED static void print_timezone(abi_ulong, int);
981a674adfSFilip Bozuta UNUSED static void print_itimerval(abi_ulong, int);
9974d753acSMika Westerberg UNUSED static void print_number(abi_long, int);
100608e5592SLaurent Vivier UNUSED static void print_signal(abi_ulong, int);
10142b15d70SPhilippe Mathieu-Daudé UNUSED static void print_sockaddr(abi_ulong, abi_long, int);
102fb3aabf3SLaurent Vivier UNUSED static void print_socket_domain(int domain);
103fb3aabf3SLaurent Vivier UNUSED static void print_socket_type(int type);
104fb3aabf3SLaurent Vivier UNUSED static void print_socket_protocol(int domain, int type, int protocol);
10574d753acSMika Westerberg
10633189d31Sths /*
10733189d31Sths * Utility functions
10833189d31Sths */
10933189d31Sths static void
print_ipc_cmd(int cmd)11033189d31Sths print_ipc_cmd(int cmd)
11133189d31Sths {
11233189d31Sths #define output_cmd(val) \
11333189d31Sths if( cmd == val ) { \
1144b25a506SJosh Kunz qemu_log(#val); \
11533189d31Sths return; \
11633189d31Sths }
11733189d31Sths
11833189d31Sths cmd &= 0xff;
11933189d31Sths
12033189d31Sths /* General IPC commands */
12133189d31Sths output_cmd( IPC_RMID );
12233189d31Sths output_cmd( IPC_SET );
12333189d31Sths output_cmd( IPC_STAT );
12433189d31Sths output_cmd( IPC_INFO );
12533189d31Sths /* msgctl() commands */
12633189d31Sths output_cmd( MSG_STAT );
12733189d31Sths output_cmd( MSG_INFO );
12833189d31Sths /* shmctl() commands */
12933189d31Sths output_cmd( SHM_LOCK );
13033189d31Sths output_cmd( SHM_UNLOCK );
13133189d31Sths output_cmd( SHM_STAT );
13233189d31Sths output_cmd( SHM_INFO );
13333189d31Sths /* semctl() commands */
13433189d31Sths output_cmd( GETPID );
13533189d31Sths output_cmd( GETVAL );
13633189d31Sths output_cmd( GETALL );
13733189d31Sths output_cmd( GETNCNT );
13833189d31Sths output_cmd( GETZCNT );
13933189d31Sths output_cmd( SETVAL );
14033189d31Sths output_cmd( SETALL );
14133189d31Sths output_cmd( SEM_STAT );
14233189d31Sths output_cmd( SEM_INFO );
14333189d31Sths output_cmd( IPC_RMID );
14433189d31Sths output_cmd( IPC_RMID );
14533189d31Sths output_cmd( IPC_RMID );
14633189d31Sths output_cmd( IPC_RMID );
14733189d31Sths output_cmd( IPC_RMID );
14833189d31Sths output_cmd( IPC_RMID );
14933189d31Sths output_cmd( IPC_RMID );
15033189d31Sths output_cmd( IPC_RMID );
15133189d31Sths output_cmd( IPC_RMID );
15233189d31Sths
15333189d31Sths /* Some value we don't recognize */
1544b25a506SJosh Kunz qemu_log("%d", cmd);
15533189d31Sths }
15633189d31Sths
1577b72aa1dSHelge Deller static const char * const target_signal_name[] = {
1587b72aa1dSHelge Deller #define MAKE_SIG_ENTRY(sig) [TARGET_##sig] = #sig,
1597b72aa1dSHelge Deller MAKE_SIGNAL_LIST
1607b72aa1dSHelge Deller #undef MAKE_SIG_ENTRY
1617b72aa1dSHelge Deller };
1627b72aa1dSHelge Deller
163608e5592SLaurent Vivier static void
print_signal_1(abi_ulong arg)164f769eb00SIlya Leoshkevich print_signal_1(abi_ulong arg)
165f769eb00SIlya Leoshkevich {
166f769eb00SIlya Leoshkevich if (arg < ARRAY_SIZE(target_signal_name)) {
167f769eb00SIlya Leoshkevich qemu_log("%s", target_signal_name[arg]);
168f769eb00SIlya Leoshkevich } else {
169f769eb00SIlya Leoshkevich qemu_log(TARGET_ABI_FMT_lu, arg);
170f769eb00SIlya Leoshkevich }
171f769eb00SIlya Leoshkevich }
172f769eb00SIlya Leoshkevich
173f769eb00SIlya Leoshkevich static void
print_signal(abi_ulong arg,int last)174608e5592SLaurent Vivier print_signal(abi_ulong arg, int last)
175608e5592SLaurent Vivier {
176f769eb00SIlya Leoshkevich print_signal_1(arg);
177f769eb00SIlya Leoshkevich qemu_log("%s", get_comma(last));
178608e5592SLaurent Vivier }
179608e5592SLaurent Vivier
print_si_code(int arg)1800cb581d6SPeter Maydell static void print_si_code(int arg)
1810cb581d6SPeter Maydell {
1820cb581d6SPeter Maydell const char *codename = NULL;
1830cb581d6SPeter Maydell
1840cb581d6SPeter Maydell switch (arg) {
1850cb581d6SPeter Maydell case SI_USER:
1860cb581d6SPeter Maydell codename = "SI_USER";
1870cb581d6SPeter Maydell break;
1880cb581d6SPeter Maydell case SI_KERNEL:
1890cb581d6SPeter Maydell codename = "SI_KERNEL";
1900cb581d6SPeter Maydell break;
1910cb581d6SPeter Maydell case SI_QUEUE:
1920cb581d6SPeter Maydell codename = "SI_QUEUE";
1930cb581d6SPeter Maydell break;
1940cb581d6SPeter Maydell case SI_TIMER:
1950cb581d6SPeter Maydell codename = "SI_TIMER";
1960cb581d6SPeter Maydell break;
1970cb581d6SPeter Maydell case SI_MESGQ:
1980cb581d6SPeter Maydell codename = "SI_MESGQ";
1990cb581d6SPeter Maydell break;
2000cb581d6SPeter Maydell case SI_ASYNCIO:
2010cb581d6SPeter Maydell codename = "SI_ASYNCIO";
2020cb581d6SPeter Maydell break;
2030cb581d6SPeter Maydell case SI_SIGIO:
2040cb581d6SPeter Maydell codename = "SI_SIGIO";
2050cb581d6SPeter Maydell break;
2060cb581d6SPeter Maydell case SI_TKILL:
2070cb581d6SPeter Maydell codename = "SI_TKILL";
2080cb581d6SPeter Maydell break;
2090cb581d6SPeter Maydell default:
2104b25a506SJosh Kunz qemu_log("%d", arg);
2110cb581d6SPeter Maydell return;
2120cb581d6SPeter Maydell }
2134b25a506SJosh Kunz qemu_log("%s", codename);
2140cb581d6SPeter Maydell }
2150cb581d6SPeter Maydell
get_target_siginfo(target_siginfo_t * tinfo,const target_siginfo_t * info)216ba9fcea1SMiloš Stojanović static void get_target_siginfo(target_siginfo_t *tinfo,
217ba9fcea1SMiloš Stojanović const target_siginfo_t *info)
218ba9fcea1SMiloš Stojanović {
219ba9fcea1SMiloš Stojanović abi_ulong sival_ptr;
220ba9fcea1SMiloš Stojanović
221ba9fcea1SMiloš Stojanović int sig;
222ba9fcea1SMiloš Stojanović int si_errno;
223ba9fcea1SMiloš Stojanović int si_code;
224ba9fcea1SMiloš Stojanović int si_type;
225ba9fcea1SMiloš Stojanović
226ba9fcea1SMiloš Stojanović __get_user(sig, &info->si_signo);
227ba9fcea1SMiloš Stojanović __get_user(si_errno, &tinfo->si_errno);
228ba9fcea1SMiloš Stojanović __get_user(si_code, &info->si_code);
229ba9fcea1SMiloš Stojanović
230ba9fcea1SMiloš Stojanović tinfo->si_signo = sig;
231ba9fcea1SMiloš Stojanović tinfo->si_errno = si_errno;
232ba9fcea1SMiloš Stojanović tinfo->si_code = si_code;
233ba9fcea1SMiloš Stojanović
234ba9fcea1SMiloš Stojanović /* Ensure we don't leak random junk to the guest later */
235ba9fcea1SMiloš Stojanović memset(tinfo->_sifields._pad, 0, sizeof(tinfo->_sifields._pad));
236ba9fcea1SMiloš Stojanović
237ba9fcea1SMiloš Stojanović /* This is awkward, because we have to use a combination of
238ba9fcea1SMiloš Stojanović * the si_code and si_signo to figure out which of the union's
239ba9fcea1SMiloš Stojanović * members are valid. (Within the host kernel it is always possible
240ba9fcea1SMiloš Stojanović * to tell, but the kernel carefully avoids giving userspace the
241ba9fcea1SMiloš Stojanović * high 16 bits of si_code, so we don't have the information to
242ba9fcea1SMiloš Stojanović * do this the easy way...) We therefore make our best guess,
243ba9fcea1SMiloš Stojanović * bearing in mind that a guest can spoof most of the si_codes
244ba9fcea1SMiloš Stojanović * via rt_sigqueueinfo() if it likes.
245ba9fcea1SMiloš Stojanović *
246ba9fcea1SMiloš Stojanović * Once we have made our guess, we record it in the top 16 bits of
247ba9fcea1SMiloš Stojanović * the si_code, so that print_siginfo() later can use it.
248ba9fcea1SMiloš Stojanović * print_siginfo() will strip these top bits out before printing
249ba9fcea1SMiloš Stojanović * the si_code.
250ba9fcea1SMiloš Stojanović */
251ba9fcea1SMiloš Stojanović
252ba9fcea1SMiloš Stojanović switch (si_code) {
253ba9fcea1SMiloš Stojanović case SI_USER:
254ba9fcea1SMiloš Stojanović case SI_TKILL:
255ba9fcea1SMiloš Stojanović case SI_KERNEL:
256ba9fcea1SMiloš Stojanović /* Sent via kill(), tkill() or tgkill(), or direct from the kernel.
257ba9fcea1SMiloš Stojanović * These are the only unspoofable si_code values.
258ba9fcea1SMiloš Stojanović */
259ba9fcea1SMiloš Stojanović __get_user(tinfo->_sifields._kill._pid, &info->_sifields._kill._pid);
260ba9fcea1SMiloš Stojanović __get_user(tinfo->_sifields._kill._uid, &info->_sifields._kill._uid);
261ba9fcea1SMiloš Stojanović si_type = QEMU_SI_KILL;
262ba9fcea1SMiloš Stojanović break;
263ba9fcea1SMiloš Stojanović default:
264ba9fcea1SMiloš Stojanović /* Everything else is spoofable. Make best guess based on signal */
265ba9fcea1SMiloš Stojanović switch (sig) {
266ba9fcea1SMiloš Stojanović case TARGET_SIGCHLD:
267ba9fcea1SMiloš Stojanović __get_user(tinfo->_sifields._sigchld._pid,
268ba9fcea1SMiloš Stojanović &info->_sifields._sigchld._pid);
269ba9fcea1SMiloš Stojanović __get_user(tinfo->_sifields._sigchld._uid,
270ba9fcea1SMiloš Stojanović &info->_sifields._sigchld._uid);
271ba9fcea1SMiloš Stojanović __get_user(tinfo->_sifields._sigchld._status,
272ba9fcea1SMiloš Stojanović &info->_sifields._sigchld._status);
273ba9fcea1SMiloš Stojanović __get_user(tinfo->_sifields._sigchld._utime,
274ba9fcea1SMiloš Stojanović &info->_sifields._sigchld._utime);
275ba9fcea1SMiloš Stojanović __get_user(tinfo->_sifields._sigchld._stime,
276ba9fcea1SMiloš Stojanović &info->_sifields._sigchld._stime);
277ba9fcea1SMiloš Stojanović si_type = QEMU_SI_CHLD;
278ba9fcea1SMiloš Stojanović break;
279ba9fcea1SMiloš Stojanović case TARGET_SIGIO:
280ba9fcea1SMiloš Stojanović __get_user(tinfo->_sifields._sigpoll._band,
281ba9fcea1SMiloš Stojanović &info->_sifields._sigpoll._band);
282ba9fcea1SMiloš Stojanović __get_user(tinfo->_sifields._sigpoll._fd,
283ba9fcea1SMiloš Stojanović &info->_sifields._sigpoll._fd);
284ba9fcea1SMiloš Stojanović si_type = QEMU_SI_POLL;
285ba9fcea1SMiloš Stojanović break;
286ba9fcea1SMiloš Stojanović default:
287ba9fcea1SMiloš Stojanović /* Assume a sigqueue()/mq_notify()/rt_sigqueueinfo() source. */
288ba9fcea1SMiloš Stojanović __get_user(tinfo->_sifields._rt._pid, &info->_sifields._rt._pid);
289ba9fcea1SMiloš Stojanović __get_user(tinfo->_sifields._rt._uid, &info->_sifields._rt._uid);
290ba9fcea1SMiloš Stojanović /* XXX: potential problem if 64 bit */
291ba9fcea1SMiloš Stojanović __get_user(sival_ptr, &info->_sifields._rt._sigval.sival_ptr);
292ba9fcea1SMiloš Stojanović tinfo->_sifields._rt._sigval.sival_ptr = sival_ptr;
293ba9fcea1SMiloš Stojanović
294ba9fcea1SMiloš Stojanović si_type = QEMU_SI_RT;
295ba9fcea1SMiloš Stojanović break;
296ba9fcea1SMiloš Stojanović }
297ba9fcea1SMiloš Stojanović break;
298ba9fcea1SMiloš Stojanović }
299ba9fcea1SMiloš Stojanović
300ba9fcea1SMiloš Stojanović tinfo->si_code = deposit32(si_code, 16, 16, si_type);
301ba9fcea1SMiloš Stojanović }
302ba9fcea1SMiloš Stojanović
print_siginfo(const target_siginfo_t * tinfo)3030cb581d6SPeter Maydell static void print_siginfo(const target_siginfo_t *tinfo)
3040cb581d6SPeter Maydell {
3050cb581d6SPeter Maydell /* Print a target_siginfo_t in the format desired for printing
3060cb581d6SPeter Maydell * signals being taken. We assume the target_siginfo_t is in the
3070cb581d6SPeter Maydell * internal form where the top 16 bits of si_code indicate which
3080cb581d6SPeter Maydell * part of the union is valid, rather than in the guest-visible
3090cb581d6SPeter Maydell * form where the bottom 16 bits are sign-extended into the top 16.
3100cb581d6SPeter Maydell */
3110cb581d6SPeter Maydell int si_type = extract32(tinfo->si_code, 16, 16);
3120cb581d6SPeter Maydell int si_code = sextract32(tinfo->si_code, 0, 16);
3130cb581d6SPeter Maydell
3144b25a506SJosh Kunz qemu_log("{si_signo=");
3150cb581d6SPeter Maydell print_signal(tinfo->si_signo, 1);
3164b25a506SJosh Kunz qemu_log(", si_code=");
3170cb581d6SPeter Maydell print_si_code(si_code);
3180cb581d6SPeter Maydell
3190cb581d6SPeter Maydell switch (si_type) {
3200cb581d6SPeter Maydell case QEMU_SI_KILL:
3214b25a506SJosh Kunz qemu_log(", si_pid=%u, si_uid=%u",
3220cb581d6SPeter Maydell (unsigned int)tinfo->_sifields._kill._pid,
3230cb581d6SPeter Maydell (unsigned int)tinfo->_sifields._kill._uid);
3240cb581d6SPeter Maydell break;
3250cb581d6SPeter Maydell case QEMU_SI_TIMER:
3264b25a506SJosh Kunz qemu_log(", si_timer1=%u, si_timer2=%u",
3270cb581d6SPeter Maydell tinfo->_sifields._timer._timer1,
3280cb581d6SPeter Maydell tinfo->_sifields._timer._timer2);
3290cb581d6SPeter Maydell break;
3300cb581d6SPeter Maydell case QEMU_SI_POLL:
3314b25a506SJosh Kunz qemu_log(", si_band=%d, si_fd=%d",
3320cb581d6SPeter Maydell tinfo->_sifields._sigpoll._band,
3330cb581d6SPeter Maydell tinfo->_sifields._sigpoll._fd);
3340cb581d6SPeter Maydell break;
3350cb581d6SPeter Maydell case QEMU_SI_FAULT:
3364b25a506SJosh Kunz qemu_log(", si_addr=");
3370cb581d6SPeter Maydell print_pointer(tinfo->_sifields._sigfault._addr, 1);
3380cb581d6SPeter Maydell break;
3390cb581d6SPeter Maydell case QEMU_SI_CHLD:
3404b25a506SJosh Kunz qemu_log(", si_pid=%u, si_uid=%u, si_status=%d"
3410cb581d6SPeter Maydell ", si_utime=" TARGET_ABI_FMT_ld
3420cb581d6SPeter Maydell ", si_stime=" TARGET_ABI_FMT_ld,
3430cb581d6SPeter Maydell (unsigned int)(tinfo->_sifields._sigchld._pid),
3440cb581d6SPeter Maydell (unsigned int)(tinfo->_sifields._sigchld._uid),
3450cb581d6SPeter Maydell tinfo->_sifields._sigchld._status,
3460cb581d6SPeter Maydell tinfo->_sifields._sigchld._utime,
3470cb581d6SPeter Maydell tinfo->_sifields._sigchld._stime);
3480cb581d6SPeter Maydell break;
3490cb581d6SPeter Maydell case QEMU_SI_RT:
3504b25a506SJosh Kunz qemu_log(", si_pid=%u, si_uid=%u, si_sigval=" TARGET_ABI_FMT_ld,
3510cb581d6SPeter Maydell (unsigned int)tinfo->_sifields._rt._pid,
3520cb581d6SPeter Maydell (unsigned int)tinfo->_sifields._rt._uid,
3530cb581d6SPeter Maydell tinfo->_sifields._rt._sigval.sival_ptr);
3540cb581d6SPeter Maydell break;
3550cb581d6SPeter Maydell default:
3560cb581d6SPeter Maydell g_assert_not_reached();
3570cb581d6SPeter Maydell }
3584b25a506SJosh Kunz qemu_log("}");
3590cb581d6SPeter Maydell }
3600cb581d6SPeter Maydell
361fb3aabf3SLaurent Vivier static void
print_sockaddr(abi_ulong addr,abi_long addrlen,int last)36242b15d70SPhilippe Mathieu-Daudé print_sockaddr(abi_ulong addr, abi_long addrlen, int last)
363fb3aabf3SLaurent Vivier {
364fb3aabf3SLaurent Vivier struct target_sockaddr *sa;
365fb3aabf3SLaurent Vivier int i;
366fb3aabf3SLaurent Vivier int sa_family;
367fb3aabf3SLaurent Vivier
368fb3aabf3SLaurent Vivier sa = lock_user(VERIFY_READ, addr, addrlen, 1);
369fb3aabf3SLaurent Vivier if (sa) {
370fb3aabf3SLaurent Vivier sa_family = tswap16(sa->sa_family);
371fb3aabf3SLaurent Vivier switch (sa_family) {
372fb3aabf3SLaurent Vivier case AF_UNIX: {
373fb3aabf3SLaurent Vivier struct target_sockaddr_un *un = (struct target_sockaddr_un *)sa;
3744b25a506SJosh Kunz qemu_log("{sun_family=AF_UNIX,sun_path=\"");
375fb3aabf3SLaurent Vivier for (i = 0; i < addrlen -
376fb3aabf3SLaurent Vivier offsetof(struct target_sockaddr_un, sun_path) &&
377fb3aabf3SLaurent Vivier un->sun_path[i]; i++) {
3784b25a506SJosh Kunz qemu_log("%c", un->sun_path[i]);
379fb3aabf3SLaurent Vivier }
3807db3a42eSPhilippe Mathieu-Daudé qemu_log("\"},");
381fb3aabf3SLaurent Vivier break;
382fb3aabf3SLaurent Vivier }
383fb3aabf3SLaurent Vivier case AF_INET: {
384fb3aabf3SLaurent Vivier struct target_sockaddr_in *in = (struct target_sockaddr_in *)sa;
385fb3aabf3SLaurent Vivier uint8_t *c = (uint8_t *)&in->sin_addr.s_addr;
3864b25a506SJosh Kunz qemu_log("{sin_family=AF_INET,sin_port=htons(%d),",
387fb3aabf3SLaurent Vivier ntohs(in->sin_port));
3884b25a506SJosh Kunz qemu_log("sin_addr=inet_addr(\"%d.%d.%d.%d\")",
389fb3aabf3SLaurent Vivier c[0], c[1], c[2], c[3]);
3907db3a42eSPhilippe Mathieu-Daudé qemu_log("},");
391fb3aabf3SLaurent Vivier break;
392fb3aabf3SLaurent Vivier }
393fb3aabf3SLaurent Vivier case AF_PACKET: {
394fb3aabf3SLaurent Vivier struct target_sockaddr_ll *ll = (struct target_sockaddr_ll *)sa;
395fb3aabf3SLaurent Vivier uint8_t *c = (uint8_t *)&ll->sll_addr;
3964b25a506SJosh Kunz qemu_log("{sll_family=AF_PACKET,"
397fb3aabf3SLaurent Vivier "sll_protocol=htons(0x%04x),if%d,pkttype=",
398fb3aabf3SLaurent Vivier ntohs(ll->sll_protocol), ll->sll_ifindex);
399fb3aabf3SLaurent Vivier switch (ll->sll_pkttype) {
400fb3aabf3SLaurent Vivier case PACKET_HOST:
4014b25a506SJosh Kunz qemu_log("PACKET_HOST");
402fb3aabf3SLaurent Vivier break;
403fb3aabf3SLaurent Vivier case PACKET_BROADCAST:
4044b25a506SJosh Kunz qemu_log("PACKET_BROADCAST");
405fb3aabf3SLaurent Vivier break;
406fb3aabf3SLaurent Vivier case PACKET_MULTICAST:
4074b25a506SJosh Kunz qemu_log("PACKET_MULTICAST");
408fb3aabf3SLaurent Vivier break;
409fb3aabf3SLaurent Vivier case PACKET_OTHERHOST:
4104b25a506SJosh Kunz qemu_log("PACKET_OTHERHOST");
411fb3aabf3SLaurent Vivier break;
412fb3aabf3SLaurent Vivier case PACKET_OUTGOING:
4134b25a506SJosh Kunz qemu_log("PACKET_OUTGOING");
414fb3aabf3SLaurent Vivier break;
415fb3aabf3SLaurent Vivier default:
4164b25a506SJosh Kunz qemu_log("%d", ll->sll_pkttype);
417fb3aabf3SLaurent Vivier break;
418fb3aabf3SLaurent Vivier }
4194b25a506SJosh Kunz qemu_log(",sll_addr=%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
420fb3aabf3SLaurent Vivier c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7]);
4217db3a42eSPhilippe Mathieu-Daudé qemu_log("},");
422fb3aabf3SLaurent Vivier break;
423fb3aabf3SLaurent Vivier }
424814ae70fSPhilippe Mathieu-Daudé case AF_NETLINK: {
425814ae70fSPhilippe Mathieu-Daudé struct target_sockaddr_nl *nl = (struct target_sockaddr_nl *)sa;
4267db3a42eSPhilippe Mathieu-Daudé qemu_log("{nl_family=AF_NETLINK,nl_pid=%u,nl_groups=%u},",
427814ae70fSPhilippe Mathieu-Daudé tswap32(nl->nl_pid), tswap32(nl->nl_groups));
428814ae70fSPhilippe Mathieu-Daudé break;
429814ae70fSPhilippe Mathieu-Daudé }
430fb3aabf3SLaurent Vivier default:
4314b25a506SJosh Kunz qemu_log("{sa_family=%d, sa_data={", sa->sa_family);
432fb3aabf3SLaurent Vivier for (i = 0; i < 13; i++) {
4334b25a506SJosh Kunz qemu_log("%02x, ", sa->sa_data[i]);
434fb3aabf3SLaurent Vivier }
4354b25a506SJosh Kunz qemu_log("%02x}", sa->sa_data[i]);
4367db3a42eSPhilippe Mathieu-Daudé qemu_log("},");
437fb3aabf3SLaurent Vivier break;
438fb3aabf3SLaurent Vivier }
439fb3aabf3SLaurent Vivier unlock_user(sa, addr, 0);
440fb3aabf3SLaurent Vivier } else {
44102d91697SPhilippe Mathieu-Daudé print_pointer(addr, 0);
442fb3aabf3SLaurent Vivier }
4437db3a42eSPhilippe Mathieu-Daudé qemu_log(TARGET_ABI_FMT_ld"%s", addrlen, get_comma(last));
444fb3aabf3SLaurent Vivier }
445fb3aabf3SLaurent Vivier
446fb3aabf3SLaurent Vivier static void
print_socket_domain(int domain)447fb3aabf3SLaurent Vivier print_socket_domain(int domain)
448fb3aabf3SLaurent Vivier {
449fb3aabf3SLaurent Vivier switch (domain) {
450fb3aabf3SLaurent Vivier case PF_UNIX:
4514b25a506SJosh Kunz qemu_log("PF_UNIX");
452fb3aabf3SLaurent Vivier break;
453fb3aabf3SLaurent Vivier case PF_INET:
4544b25a506SJosh Kunz qemu_log("PF_INET");
455fb3aabf3SLaurent Vivier break;
456814ae70fSPhilippe Mathieu-Daudé case PF_NETLINK:
4574b25a506SJosh Kunz qemu_log("PF_NETLINK");
458814ae70fSPhilippe Mathieu-Daudé break;
459fb3aabf3SLaurent Vivier case PF_PACKET:
4604b25a506SJosh Kunz qemu_log("PF_PACKET");
461fb3aabf3SLaurent Vivier break;
462fb3aabf3SLaurent Vivier default:
4634b25a506SJosh Kunz qemu_log("%d", domain);
464fb3aabf3SLaurent Vivier break;
465fb3aabf3SLaurent Vivier }
466fb3aabf3SLaurent Vivier }
467fb3aabf3SLaurent Vivier
468fb3aabf3SLaurent Vivier static void
print_socket_type(int type)469fb3aabf3SLaurent Vivier print_socket_type(int type)
470fb3aabf3SLaurent Vivier {
4712039b1b0SLaurent Vivier switch (type & TARGET_SOCK_TYPE_MASK) {
472fb3aabf3SLaurent Vivier case TARGET_SOCK_DGRAM:
4734b25a506SJosh Kunz qemu_log("SOCK_DGRAM");
474fb3aabf3SLaurent Vivier break;
475fb3aabf3SLaurent Vivier case TARGET_SOCK_STREAM:
4764b25a506SJosh Kunz qemu_log("SOCK_STREAM");
477fb3aabf3SLaurent Vivier break;
478fb3aabf3SLaurent Vivier case TARGET_SOCK_RAW:
4794b25a506SJosh Kunz qemu_log("SOCK_RAW");
480fb3aabf3SLaurent Vivier break;
481fb3aabf3SLaurent Vivier case TARGET_SOCK_RDM:
4824b25a506SJosh Kunz qemu_log("SOCK_RDM");
483fb3aabf3SLaurent Vivier break;
484fb3aabf3SLaurent Vivier case TARGET_SOCK_SEQPACKET:
4854b25a506SJosh Kunz qemu_log("SOCK_SEQPACKET");
486fb3aabf3SLaurent Vivier break;
487fb3aabf3SLaurent Vivier case TARGET_SOCK_PACKET:
4884b25a506SJosh Kunz qemu_log("SOCK_PACKET");
489fb3aabf3SLaurent Vivier break;
490fb3aabf3SLaurent Vivier }
4912039b1b0SLaurent Vivier if (type & TARGET_SOCK_CLOEXEC) {
4922039b1b0SLaurent Vivier qemu_log("|SOCK_CLOEXEC");
4932039b1b0SLaurent Vivier }
4942039b1b0SLaurent Vivier if (type & TARGET_SOCK_NONBLOCK) {
4952039b1b0SLaurent Vivier qemu_log("|SOCK_NONBLOCK");
4962039b1b0SLaurent Vivier }
497fb3aabf3SLaurent Vivier }
498fb3aabf3SLaurent Vivier
499fb3aabf3SLaurent Vivier static void
print_socket_protocol(int domain,int type,int protocol)500fb3aabf3SLaurent Vivier print_socket_protocol(int domain, int type, int protocol)
501fb3aabf3SLaurent Vivier {
502fb3aabf3SLaurent Vivier if (domain == AF_PACKET ||
503fb3aabf3SLaurent Vivier (domain == AF_INET && type == TARGET_SOCK_PACKET)) {
504fb3aabf3SLaurent Vivier switch (protocol) {
505fb3aabf3SLaurent Vivier case 0x0003:
5064b25a506SJosh Kunz qemu_log("ETH_P_ALL");
507fb3aabf3SLaurent Vivier break;
508fb3aabf3SLaurent Vivier default:
5094b25a506SJosh Kunz qemu_log("%d", protocol);
510fb3aabf3SLaurent Vivier }
511fb3aabf3SLaurent Vivier return;
512fb3aabf3SLaurent Vivier }
513fb3aabf3SLaurent Vivier
514814ae70fSPhilippe Mathieu-Daudé if (domain == PF_NETLINK) {
515814ae70fSPhilippe Mathieu-Daudé switch (protocol) {
516814ae70fSPhilippe Mathieu-Daudé case NETLINK_ROUTE:
5174b25a506SJosh Kunz qemu_log("NETLINK_ROUTE");
518814ae70fSPhilippe Mathieu-Daudé break;
519d5dbbfe6SLetu Ren case NETLINK_UNUSED:
520d5dbbfe6SLetu Ren qemu_log("NETLINK_UNUSED");
521d5dbbfe6SLetu Ren break;
522d5dbbfe6SLetu Ren case NETLINK_USERSOCK:
523d5dbbfe6SLetu Ren qemu_log("NETLINK_USERSOCK");
524d5dbbfe6SLetu Ren break;
525d5dbbfe6SLetu Ren case NETLINK_FIREWALL:
526d5dbbfe6SLetu Ren qemu_log("NETLINK_FIREWALL");
527d5dbbfe6SLetu Ren break;
528d5dbbfe6SLetu Ren case NETLINK_SOCK_DIAG:
529d5dbbfe6SLetu Ren qemu_log("NETLINK_SOCK_DIAG");
530d5dbbfe6SLetu Ren break;
531d5dbbfe6SLetu Ren case NETLINK_NFLOG:
532d5dbbfe6SLetu Ren qemu_log("NETLINK_NFLOG");
533d5dbbfe6SLetu Ren break;
534d5dbbfe6SLetu Ren case NETLINK_XFRM:
535d5dbbfe6SLetu Ren qemu_log("NETLINK_XFRM");
536d5dbbfe6SLetu Ren break;
537d5dbbfe6SLetu Ren case NETLINK_SELINUX:
538d5dbbfe6SLetu Ren qemu_log("NETLINK_SELINUX");
539d5dbbfe6SLetu Ren break;
540d5dbbfe6SLetu Ren case NETLINK_ISCSI:
541d5dbbfe6SLetu Ren qemu_log("NETLINK_ISCSI");
542d5dbbfe6SLetu Ren break;
543814ae70fSPhilippe Mathieu-Daudé case NETLINK_AUDIT:
5444b25a506SJosh Kunz qemu_log("NETLINK_AUDIT");
545814ae70fSPhilippe Mathieu-Daudé break;
546d5dbbfe6SLetu Ren case NETLINK_FIB_LOOKUP:
547d5dbbfe6SLetu Ren qemu_log("NETLINK_FIB_LOOKUP");
548d5dbbfe6SLetu Ren break;
549d5dbbfe6SLetu Ren case NETLINK_CONNECTOR:
550d5dbbfe6SLetu Ren qemu_log("NETLINK_CONNECTOR");
551d5dbbfe6SLetu Ren break;
552814ae70fSPhilippe Mathieu-Daudé case NETLINK_NETFILTER:
5534b25a506SJosh Kunz qemu_log("NETLINK_NETFILTER");
554814ae70fSPhilippe Mathieu-Daudé break;
555d5dbbfe6SLetu Ren case NETLINK_IP6_FW:
556d5dbbfe6SLetu Ren qemu_log("NETLINK_IP6_FW");
557d5dbbfe6SLetu Ren break;
558d5dbbfe6SLetu Ren case NETLINK_DNRTMSG:
559d5dbbfe6SLetu Ren qemu_log("NETLINK_DNRTMSG");
560d5dbbfe6SLetu Ren break;
561814ae70fSPhilippe Mathieu-Daudé case NETLINK_KOBJECT_UEVENT:
5624b25a506SJosh Kunz qemu_log("NETLINK_KOBJECT_UEVENT");
563814ae70fSPhilippe Mathieu-Daudé break;
564d5dbbfe6SLetu Ren case NETLINK_GENERIC:
565d5dbbfe6SLetu Ren qemu_log("NETLINK_GENERIC");
566d5dbbfe6SLetu Ren break;
567d5dbbfe6SLetu Ren case NETLINK_SCSITRANSPORT:
568d5dbbfe6SLetu Ren qemu_log("NETLINK_SCSITRANSPORT");
569d5dbbfe6SLetu Ren break;
570d5dbbfe6SLetu Ren case NETLINK_ECRYPTFS:
571d5dbbfe6SLetu Ren qemu_log("NETLINK_ECRYPTFS");
572d5dbbfe6SLetu Ren break;
573814ae70fSPhilippe Mathieu-Daudé case NETLINK_RDMA:
5744b25a506SJosh Kunz qemu_log("NETLINK_RDMA");
575814ae70fSPhilippe Mathieu-Daudé break;
576814ae70fSPhilippe Mathieu-Daudé case NETLINK_CRYPTO:
5774b25a506SJosh Kunz qemu_log("NETLINK_CRYPTO");
578814ae70fSPhilippe Mathieu-Daudé break;
579d5dbbfe6SLetu Ren case NETLINK_SMC:
580d5dbbfe6SLetu Ren qemu_log("NETLINK_SMC");
581d5dbbfe6SLetu Ren break;
582814ae70fSPhilippe Mathieu-Daudé default:
5834b25a506SJosh Kunz qemu_log("%d", protocol);
584814ae70fSPhilippe Mathieu-Daudé break;
585814ae70fSPhilippe Mathieu-Daudé }
586814ae70fSPhilippe Mathieu-Daudé return;
587814ae70fSPhilippe Mathieu-Daudé }
588814ae70fSPhilippe Mathieu-Daudé
589fb3aabf3SLaurent Vivier switch (protocol) {
590fb3aabf3SLaurent Vivier case IPPROTO_IP:
5914b25a506SJosh Kunz qemu_log("IPPROTO_IP");
592fb3aabf3SLaurent Vivier break;
593fb3aabf3SLaurent Vivier case IPPROTO_TCP:
5944b25a506SJosh Kunz qemu_log("IPPROTO_TCP");
595fb3aabf3SLaurent Vivier break;
596fb3aabf3SLaurent Vivier case IPPROTO_UDP:
5974b25a506SJosh Kunz qemu_log("IPPROTO_UDP");
598fb3aabf3SLaurent Vivier break;
599fb3aabf3SLaurent Vivier case IPPROTO_RAW:
6004b25a506SJosh Kunz qemu_log("IPPROTO_RAW");
601fb3aabf3SLaurent Vivier break;
602fb3aabf3SLaurent Vivier default:
6034b25a506SJosh Kunz qemu_log("%d", protocol);
604fb3aabf3SLaurent Vivier break;
605fb3aabf3SLaurent Vivier }
606fb3aabf3SLaurent Vivier }
607fb3aabf3SLaurent Vivier
608fb3aabf3SLaurent Vivier
609c16f9ed3Sbellard #ifdef TARGET_NR__newselect
61033189d31Sths static void
print_fdset(int n,abi_ulong target_fds_addr)611c16f9ed3Sbellard print_fdset(int n, abi_ulong target_fds_addr)
61233189d31Sths {
61333189d31Sths int i;
614664441eaSFilip Bozuta int first = 1;
61533189d31Sths
6164b25a506SJosh Kunz qemu_log("[");
61733189d31Sths if( target_fds_addr ) {
618579a97f7Sbellard abi_long *target_fds;
61933189d31Sths
620579a97f7Sbellard target_fds = lock_user(VERIFY_READ,
621579a97f7Sbellard target_fds_addr,
622579a97f7Sbellard sizeof(*target_fds)*(n / TARGET_ABI_BITS + 1),
623579a97f7Sbellard 1);
624579a97f7Sbellard
625579a97f7Sbellard if (!target_fds)
62633189d31Sths return;
62733189d31Sths
62833189d31Sths for (i=n; i>=0; i--) {
629664441eaSFilip Bozuta if ((tswapal(target_fds[i / TARGET_ABI_BITS]) >>
630664441eaSFilip Bozuta (i & (TARGET_ABI_BITS - 1))) & 1) {
631664441eaSFilip Bozuta qemu_log("%s%d", get_comma(first), i);
632664441eaSFilip Bozuta first = 0;
633664441eaSFilip Bozuta }
63433189d31Sths }
63533189d31Sths unlock_user(target_fds, target_fds_addr, 0);
63633189d31Sths }
6374b25a506SJosh Kunz qemu_log("]");
63833189d31Sths }
639c16f9ed3Sbellard #endif
64033189d31Sths
64133189d31Sths /*
64233189d31Sths * Sysycall specific output functions
64333189d31Sths */
64433189d31Sths
64533189d31Sths /* select */
646c16f9ed3Sbellard #ifdef TARGET_NR__newselect
64733189d31Sths static void
print_newselect(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5,abi_long arg6)648a0939b89SPhilippe Mathieu-Daudé print_newselect(CPUArchState *cpu_env, const struct syscallname *name,
649c16f9ed3Sbellard abi_long arg1, abi_long arg2, abi_long arg3,
650c16f9ed3Sbellard abi_long arg4, abi_long arg5, abi_long arg6)
65133189d31Sths {
652c84be71fSFilip Bozuta print_syscall_prologue(name);
65333189d31Sths print_fdset(arg1, arg2);
6544b25a506SJosh Kunz qemu_log(",");
65533189d31Sths print_fdset(arg1, arg3);
6564b25a506SJosh Kunz qemu_log(",");
65733189d31Sths print_fdset(arg1, arg4);
6584b25a506SJosh Kunz qemu_log(",");
65974d753acSMika Westerberg print_timeval(arg5, 1);
660c84be71fSFilip Bozuta print_syscall_epilogue(name);
66133189d31Sths }
662c16f9ed3Sbellard #endif
66333189d31Sths
66433189d31Sths static void
print_semctl(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5,abi_long arg6)665a0939b89SPhilippe Mathieu-Daudé print_semctl(CPUArchState *cpu_env, const struct syscallname *name,
666c16f9ed3Sbellard abi_long arg1, abi_long arg2, abi_long arg3,
667c16f9ed3Sbellard abi_long arg4, abi_long arg5, abi_long arg6)
66833189d31Sths {
6694b25a506SJosh Kunz qemu_log("%s(" TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ",",
6704b25a506SJosh Kunz name->name, arg1, arg2);
67133189d31Sths print_ipc_cmd(arg3);
6724b25a506SJosh Kunz qemu_log(",0x" TARGET_ABI_FMT_lx ")", arg4);
67333189d31Sths }
67433189d31Sths
6759f7c9732SRichard Henderson static void
print_shmat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)6769f7c9732SRichard Henderson print_shmat(CPUArchState *cpu_env, const struct syscallname *name,
6779f7c9732SRichard Henderson abi_long arg0, abi_long arg1, abi_long arg2,
6789f7c9732SRichard Henderson abi_long arg3, abi_long arg4, abi_long arg5)
6799f7c9732SRichard Henderson {
6809f7c9732SRichard Henderson static const struct flags shmat_flags[] = {
6819f7c9732SRichard Henderson FLAG_GENERIC(SHM_RND),
6829f7c9732SRichard Henderson FLAG_GENERIC(SHM_REMAP),
6839f7c9732SRichard Henderson FLAG_GENERIC(SHM_RDONLY),
6849f7c9732SRichard Henderson FLAG_GENERIC(SHM_EXEC),
6859f7c9732SRichard Henderson FLAG_END
6869f7c9732SRichard Henderson };
6879f7c9732SRichard Henderson
6889f7c9732SRichard Henderson print_syscall_prologue(name);
6899f7c9732SRichard Henderson print_raw_param(TARGET_ABI_FMT_ld, arg0, 0);
6909f7c9732SRichard Henderson print_pointer(arg1, 0);
6919f7c9732SRichard Henderson print_flags(shmat_flags, arg2, 1);
6929f7c9732SRichard Henderson print_syscall_epilogue(name);
6939f7c9732SRichard Henderson }
6949f7c9732SRichard Henderson
695c16f9ed3Sbellard #ifdef TARGET_NR_ipc
69633189d31Sths static void
print_ipc(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5,abi_long arg6)697a0939b89SPhilippe Mathieu-Daudé print_ipc(CPUArchState *cpu_env, const struct syscallname *name,
698c16f9ed3Sbellard abi_long arg1, abi_long arg2, abi_long arg3,
699c16f9ed3Sbellard abi_long arg4, abi_long arg5, abi_long arg6)
70033189d31Sths {
70133189d31Sths switch(arg1) {
70233189d31Sths case IPCOP_semctl:
703b9f38374SIlya Leoshkevich print_semctl(cpu_env, &(const struct syscallname){ .name = "semctl" },
704b9f38374SIlya Leoshkevich arg2, arg3, arg4, arg5, 0, 0);
70533189d31Sths break;
7069f7c9732SRichard Henderson case IPCOP_shmat:
7079f7c9732SRichard Henderson print_shmat(cpu_env, &(const struct syscallname){ .name = "shmat" },
708e6763d7dSIlya Leoshkevich arg2, arg5, arg3, 0, 0, 0);
7099f7c9732SRichard Henderson break;
71033189d31Sths default:
7114b25a506SJosh Kunz qemu_log(("%s("
7124b25a506SJosh Kunz TARGET_ABI_FMT_ld ","
7134b25a506SJosh Kunz TARGET_ABI_FMT_ld ","
7144b25a506SJosh Kunz TARGET_ABI_FMT_ld ","
7154b25a506SJosh Kunz TARGET_ABI_FMT_ld
7164b25a506SJosh Kunz ")"),
71733189d31Sths name->name, arg1, arg2, arg3, arg4);
71833189d31Sths }
71933189d31Sths }
720c16f9ed3Sbellard #endif
72133189d31Sths
722f769eb00SIlya Leoshkevich #ifdef TARGET_NR_rt_sigprocmask
print_target_sigset_t_1(target_sigset_t * set,int last)723f769eb00SIlya Leoshkevich static void print_target_sigset_t_1(target_sigset_t *set, int last)
724f769eb00SIlya Leoshkevich {
725f769eb00SIlya Leoshkevich bool first = true;
726f769eb00SIlya Leoshkevich int i, sig = 1;
727f769eb00SIlya Leoshkevich
728f769eb00SIlya Leoshkevich qemu_log("[");
729f769eb00SIlya Leoshkevich for (i = 0; i < TARGET_NSIG_WORDS; i++) {
730f769eb00SIlya Leoshkevich abi_ulong bits = 0;
731f769eb00SIlya Leoshkevich int j;
732f769eb00SIlya Leoshkevich
733f769eb00SIlya Leoshkevich __get_user(bits, &set->sig[i]);
734f769eb00SIlya Leoshkevich for (j = 0; j < sizeof(bits) * 8; j++) {
735f769eb00SIlya Leoshkevich if (bits & ((abi_ulong)1 << j)) {
736f769eb00SIlya Leoshkevich if (first) {
737f769eb00SIlya Leoshkevich first = false;
738f769eb00SIlya Leoshkevich } else {
739f769eb00SIlya Leoshkevich qemu_log(" ");
740f769eb00SIlya Leoshkevich }
741f769eb00SIlya Leoshkevich print_signal_1(sig);
742f769eb00SIlya Leoshkevich }
743f769eb00SIlya Leoshkevich sig++;
744f769eb00SIlya Leoshkevich }
745f769eb00SIlya Leoshkevich }
746f769eb00SIlya Leoshkevich qemu_log("]%s", get_comma(last));
747f769eb00SIlya Leoshkevich }
748f769eb00SIlya Leoshkevich
print_target_sigset_t(abi_ulong addr,abi_ulong size,int last)749f769eb00SIlya Leoshkevich static void print_target_sigset_t(abi_ulong addr, abi_ulong size, int last)
750f769eb00SIlya Leoshkevich {
751f769eb00SIlya Leoshkevich if (addr && size == sizeof(target_sigset_t)) {
752f769eb00SIlya Leoshkevich target_sigset_t *set;
753f769eb00SIlya Leoshkevich
754f769eb00SIlya Leoshkevich set = lock_user(VERIFY_READ, addr, sizeof(target_sigset_t), 1);
755f769eb00SIlya Leoshkevich if (set) {
756f769eb00SIlya Leoshkevich print_target_sigset_t_1(set, last);
757f769eb00SIlya Leoshkevich unlock_user(set, addr, 0);
758f769eb00SIlya Leoshkevich } else {
759f769eb00SIlya Leoshkevich print_pointer(addr, last);
760f769eb00SIlya Leoshkevich }
761f769eb00SIlya Leoshkevich } else {
762f769eb00SIlya Leoshkevich print_pointer(addr, last);
763f769eb00SIlya Leoshkevich }
764f769eb00SIlya Leoshkevich }
765f769eb00SIlya Leoshkevich #endif
766f769eb00SIlya Leoshkevich
76733189d31Sths /*
76833189d31Sths * Variants for the return value output function
76933189d31Sths */
77033189d31Sths
77142b16184SLaurent Vivier static bool
print_syscall_err(abi_long ret)772c84be71fSFilip Bozuta print_syscall_err(abi_long ret)
77333189d31Sths {
77442b16184SLaurent Vivier const char *errstr;
775962b289eSAlexander Graf
776c84be71fSFilip Bozuta qemu_log(" = ");
7777c75571cSRichard Henderson if (is_error(ret)) {
7782a7e1245SPeter Maydell errstr = target_strerror(-ret);
7792a7e1245SPeter Maydell if (errstr) {
78042b16184SLaurent Vivier qemu_log("-1 errno=%d (%s)", (int)-ret, errstr);
78142b16184SLaurent Vivier return true;
782c84be71fSFilip Bozuta }
783c84be71fSFilip Bozuta }
78442b16184SLaurent Vivier return false;
785c84be71fSFilip Bozuta }
786c84be71fSFilip Bozuta
787c84be71fSFilip Bozuta static void
print_syscall_ret_addr(CPUArchState * cpu_env,const struct syscallname * name,abi_long ret,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)788a0939b89SPhilippe Mathieu-Daudé print_syscall_ret_addr(CPUArchState *cpu_env, const struct syscallname *name,
789e400e119SFilip Bozuta abi_long ret, abi_long arg0, abi_long arg1,
790e400e119SFilip Bozuta abi_long arg2, abi_long arg3, abi_long arg4,
791e400e119SFilip Bozuta abi_long arg5)
792c84be71fSFilip Bozuta {
79342b16184SLaurent Vivier if (!print_syscall_err(ret)) {
79442b16184SLaurent Vivier qemu_log("0x" TARGET_ABI_FMT_lx, ret);
79533189d31Sths }
79642b16184SLaurent Vivier qemu_log("\n");
79733189d31Sths }
79833189d31Sths
799f3e3285dSths #if 0 /* currently unused */
80033189d31Sths static void
801c16f9ed3Sbellard print_syscall_ret_raw(struct syscallname *name, abi_long ret)
80233189d31Sths {
8034b25a506SJosh Kunz qemu_log(" = 0x" TARGET_ABI_FMT_lx "\n", ret);
80433189d31Sths }
805f3e3285dSths #endif
80633189d31Sths
807f3e3285dSths #ifdef TARGET_NR__newselect
80833189d31Sths static void
print_syscall_ret_newselect(CPUArchState * cpu_env,const struct syscallname * name,abi_long ret,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)809a0939b89SPhilippe Mathieu-Daudé print_syscall_ret_newselect(CPUArchState *cpu_env, const struct syscallname *name,
810e400e119SFilip Bozuta abi_long ret, abi_long arg0, abi_long arg1,
811e400e119SFilip Bozuta abi_long arg2, abi_long arg3, abi_long arg4,
812e400e119SFilip Bozuta abi_long arg5)
81333189d31Sths {
81442b16184SLaurent Vivier if (!print_syscall_err(ret)) {
8154b25a506SJosh Kunz qemu_log(" = 0x" TARGET_ABI_FMT_lx " (", ret);
816c84be71fSFilip Bozuta print_fdset(arg0, arg1);
8174b25a506SJosh Kunz qemu_log(",");
818c84be71fSFilip Bozuta print_fdset(arg0, arg2);
8194b25a506SJosh Kunz qemu_log(",");
820c84be71fSFilip Bozuta print_fdset(arg0, arg3);
8214b25a506SJosh Kunz qemu_log(",");
822c84be71fSFilip Bozuta print_timeval(arg4, 1);
823c84be71fSFilip Bozuta qemu_log(")");
824c84be71fSFilip Bozuta }
825c84be71fSFilip Bozuta
826c84be71fSFilip Bozuta qemu_log("\n");
82733189d31Sths }
828f3e3285dSths #endif
82933189d31Sths
83019f59bceSAleksandar Markovic /* special meanings of adjtimex()' non-negative return values */
83119f59bceSAleksandar Markovic #define TARGET_TIME_OK 0 /* clock synchronized, no leap second */
83219f59bceSAleksandar Markovic #define TARGET_TIME_INS 1 /* insert leap second */
83319f59bceSAleksandar Markovic #define TARGET_TIME_DEL 2 /* delete leap second */
83419f59bceSAleksandar Markovic #define TARGET_TIME_OOP 3 /* leap second in progress */
83519f59bceSAleksandar Markovic #define TARGET_TIME_WAIT 4 /* leap second has occurred */
83619f59bceSAleksandar Markovic #define TARGET_TIME_ERROR 5 /* clock not synchronized */
837859e8a89SAlistair Francis #ifdef TARGET_NR_adjtimex
83819f59bceSAleksandar Markovic static void
print_syscall_ret_adjtimex(CPUArchState * cpu_env,const struct syscallname * name,abi_long ret,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)839a0939b89SPhilippe Mathieu-Daudé print_syscall_ret_adjtimex(CPUArchState *cpu_env, const struct syscallname *name,
840e400e119SFilip Bozuta abi_long ret, abi_long arg0, abi_long arg1,
841e400e119SFilip Bozuta abi_long arg2, abi_long arg3, abi_long arg4,
842e400e119SFilip Bozuta abi_long arg5)
84319f59bceSAleksandar Markovic {
84442b16184SLaurent Vivier if (!print_syscall_err(ret)) {
8454b25a506SJosh Kunz qemu_log(TARGET_ABI_FMT_ld, ret);
84619f59bceSAleksandar Markovic switch (ret) {
84719f59bceSAleksandar Markovic case TARGET_TIME_OK:
8484b25a506SJosh Kunz qemu_log(" TIME_OK (clock synchronized, no leap second)");
84919f59bceSAleksandar Markovic break;
85019f59bceSAleksandar Markovic case TARGET_TIME_INS:
8514b25a506SJosh Kunz qemu_log(" TIME_INS (insert leap second)");
85219f59bceSAleksandar Markovic break;
85319f59bceSAleksandar Markovic case TARGET_TIME_DEL:
8544b25a506SJosh Kunz qemu_log(" TIME_DEL (delete leap second)");
85519f59bceSAleksandar Markovic break;
85619f59bceSAleksandar Markovic case TARGET_TIME_OOP:
8574b25a506SJosh Kunz qemu_log(" TIME_OOP (leap second in progress)");
85819f59bceSAleksandar Markovic break;
85919f59bceSAleksandar Markovic case TARGET_TIME_WAIT:
8604b25a506SJosh Kunz qemu_log(" TIME_WAIT (leap second has occurred)");
86119f59bceSAleksandar Markovic break;
86219f59bceSAleksandar Markovic case TARGET_TIME_ERROR:
8634b25a506SJosh Kunz qemu_log(" TIME_ERROR (clock not synchronized)");
86419f59bceSAleksandar Markovic break;
86519f59bceSAleksandar Markovic }
86619f59bceSAleksandar Markovic }
86719f59bceSAleksandar Markovic
8684b25a506SJosh Kunz qemu_log("\n");
86919f59bceSAleksandar Markovic }
870859e8a89SAlistair Francis #endif
87119f59bceSAleksandar Markovic
8721a674adfSFilip Bozuta #if defined(TARGET_NR_clock_gettime) || defined(TARGET_NR_clock_getres)
8731a674adfSFilip Bozuta static void
print_syscall_ret_clock_gettime(CPUArchState * cpu_env,const struct syscallname * name,abi_long ret,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)874a0939b89SPhilippe Mathieu-Daudé print_syscall_ret_clock_gettime(CPUArchState *cpu_env, const struct syscallname *name,
8751a674adfSFilip Bozuta abi_long ret, abi_long arg0, abi_long arg1,
8761a674adfSFilip Bozuta abi_long arg2, abi_long arg3, abi_long arg4,
8771a674adfSFilip Bozuta abi_long arg5)
8781a674adfSFilip Bozuta {
8791a674adfSFilip Bozuta if (!print_syscall_err(ret)) {
8801a674adfSFilip Bozuta qemu_log(TARGET_ABI_FMT_ld, ret);
8811a674adfSFilip Bozuta qemu_log(" (");
8821a674adfSFilip Bozuta print_timespec(arg1, 1);
8831a674adfSFilip Bozuta qemu_log(")");
8841a674adfSFilip Bozuta }
8851a674adfSFilip Bozuta
8861a674adfSFilip Bozuta qemu_log("\n");
8871a674adfSFilip Bozuta }
8881a674adfSFilip Bozuta #define print_syscall_ret_clock_getres print_syscall_ret_clock_gettime
8891a674adfSFilip Bozuta #endif
8901a674adfSFilip Bozuta
891aad43d15SHelge Deller #if defined(TARGET_NR_clock_gettime64)
892aad43d15SHelge Deller static void
print_syscall_ret_clock_gettime64(CPUArchState * cpu_env,const struct syscallname * name,abi_long ret,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)893aad43d15SHelge Deller print_syscall_ret_clock_gettime64(CPUArchState *cpu_env, const struct syscallname *name,
894aad43d15SHelge Deller abi_long ret, abi_long arg0, abi_long arg1,
895aad43d15SHelge Deller abi_long arg2, abi_long arg3, abi_long arg4,
896aad43d15SHelge Deller abi_long arg5)
897aad43d15SHelge Deller {
898aad43d15SHelge Deller if (!print_syscall_err(ret)) {
899aad43d15SHelge Deller qemu_log(TARGET_ABI_FMT_ld, ret);
900aad43d15SHelge Deller qemu_log(" (");
901aad43d15SHelge Deller print_timespec64(arg1, 1);
902aad43d15SHelge Deller qemu_log(")");
903aad43d15SHelge Deller }
904aad43d15SHelge Deller
905aad43d15SHelge Deller qemu_log("\n");
906aad43d15SHelge Deller }
907aad43d15SHelge Deller #endif
908aad43d15SHelge Deller
9091a674adfSFilip Bozuta #ifdef TARGET_NR_gettimeofday
9101a674adfSFilip Bozuta static void
print_syscall_ret_gettimeofday(CPUArchState * cpu_env,const struct syscallname * name,abi_long ret,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)911a0939b89SPhilippe Mathieu-Daudé print_syscall_ret_gettimeofday(CPUArchState *cpu_env, const struct syscallname *name,
9121a674adfSFilip Bozuta abi_long ret, abi_long arg0, abi_long arg1,
9131a674adfSFilip Bozuta abi_long arg2, abi_long arg3, abi_long arg4,
9141a674adfSFilip Bozuta abi_long arg5)
9151a674adfSFilip Bozuta {
9161a674adfSFilip Bozuta if (!print_syscall_err(ret)) {
9171a674adfSFilip Bozuta qemu_log(TARGET_ABI_FMT_ld, ret);
9181a674adfSFilip Bozuta qemu_log(" (");
9191a674adfSFilip Bozuta print_timeval(arg0, 0);
9201a674adfSFilip Bozuta print_timezone(arg1, 1);
9211a674adfSFilip Bozuta qemu_log(")");
9221a674adfSFilip Bozuta }
9231a674adfSFilip Bozuta
9241a674adfSFilip Bozuta qemu_log("\n");
9251a674adfSFilip Bozuta }
9261a674adfSFilip Bozuta #endif
9271a674adfSFilip Bozuta
9281a674adfSFilip Bozuta #ifdef TARGET_NR_getitimer
9291a674adfSFilip Bozuta static void
print_syscall_ret_getitimer(CPUArchState * cpu_env,const struct syscallname * name,abi_long ret,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)930a0939b89SPhilippe Mathieu-Daudé print_syscall_ret_getitimer(CPUArchState *cpu_env, const struct syscallname *name,
9311a674adfSFilip Bozuta abi_long ret, abi_long arg0, abi_long arg1,
9321a674adfSFilip Bozuta abi_long arg2, abi_long arg3, abi_long arg4,
9331a674adfSFilip Bozuta abi_long arg5)
9341a674adfSFilip Bozuta {
9351a674adfSFilip Bozuta if (!print_syscall_err(ret)) {
9361a674adfSFilip Bozuta qemu_log(TARGET_ABI_FMT_ld, ret);
9371a674adfSFilip Bozuta qemu_log(" (");
9381a674adfSFilip Bozuta print_itimerval(arg1, 1);
9391a674adfSFilip Bozuta qemu_log(")");
9401a674adfSFilip Bozuta }
9411a674adfSFilip Bozuta
9421a674adfSFilip Bozuta qemu_log("\n");
9431a674adfSFilip Bozuta }
9441a674adfSFilip Bozuta #endif
9451a674adfSFilip Bozuta
9461a674adfSFilip Bozuta
9471a674adfSFilip Bozuta #ifdef TARGET_NR_getitimer
9481a674adfSFilip Bozuta static void
print_syscall_ret_setitimer(CPUArchState * cpu_env,const struct syscallname * name,abi_long ret,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)949a0939b89SPhilippe Mathieu-Daudé print_syscall_ret_setitimer(CPUArchState *cpu_env, const struct syscallname *name,
9501a674adfSFilip Bozuta abi_long ret, abi_long arg0, abi_long arg1,
9511a674adfSFilip Bozuta abi_long arg2, abi_long arg3, abi_long arg4,
9521a674adfSFilip Bozuta abi_long arg5)
9531a674adfSFilip Bozuta {
9541a674adfSFilip Bozuta if (!print_syscall_err(ret)) {
9551a674adfSFilip Bozuta qemu_log(TARGET_ABI_FMT_ld, ret);
9561a674adfSFilip Bozuta qemu_log(" (old_value = ");
9571a674adfSFilip Bozuta print_itimerval(arg2, 1);
9581a674adfSFilip Bozuta qemu_log(")");
9591a674adfSFilip Bozuta }
9601a674adfSFilip Bozuta
9611a674adfSFilip Bozuta qemu_log("\n");
9621a674adfSFilip Bozuta }
9631a674adfSFilip Bozuta #endif
9641a674adfSFilip Bozuta
9654fc3cddeSFilip Bozuta #if defined(TARGET_NR_listxattr) || defined(TARGET_NR_llistxattr) \
9664fc3cddeSFilip Bozuta || defined(TARGGET_NR_flistxattr)
9674fc3cddeSFilip Bozuta static void
print_syscall_ret_listxattr(CPUArchState * cpu_env,const struct syscallname * name,abi_long ret,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)968a0939b89SPhilippe Mathieu-Daudé print_syscall_ret_listxattr(CPUArchState *cpu_env, const struct syscallname *name,
969e400e119SFilip Bozuta abi_long ret, abi_long arg0, abi_long arg1,
970e400e119SFilip Bozuta abi_long arg2, abi_long arg3, abi_long arg4,
971e400e119SFilip Bozuta abi_long arg5)
9724fc3cddeSFilip Bozuta {
97342b16184SLaurent Vivier if (!print_syscall_err(ret)) {
9744fc3cddeSFilip Bozuta qemu_log(TARGET_ABI_FMT_ld, ret);
9754fc3cddeSFilip Bozuta qemu_log(" (list = ");
9764fc3cddeSFilip Bozuta if (arg1 != 0) {
9774fc3cddeSFilip Bozuta abi_long attr = arg1;
9784fc3cddeSFilip Bozuta while (ret) {
9794fc3cddeSFilip Bozuta if (attr != arg1) {
9804fc3cddeSFilip Bozuta qemu_log(",");
9814fc3cddeSFilip Bozuta }
9824fc3cddeSFilip Bozuta print_string(attr, 1);
9834fc3cddeSFilip Bozuta ret -= target_strlen(attr) + 1;
9844fc3cddeSFilip Bozuta attr += target_strlen(attr) + 1;
9854fc3cddeSFilip Bozuta }
9864fc3cddeSFilip Bozuta } else {
9874fc3cddeSFilip Bozuta qemu_log("NULL");
9884fc3cddeSFilip Bozuta }
9894fc3cddeSFilip Bozuta qemu_log(")");
9904fc3cddeSFilip Bozuta }
9914fc3cddeSFilip Bozuta
9924fc3cddeSFilip Bozuta qemu_log("\n");
9934fc3cddeSFilip Bozuta }
9944fc3cddeSFilip Bozuta #define print_syscall_ret_llistxattr print_syscall_ret_listxattr
9954fc3cddeSFilip Bozuta #define print_syscall_ret_flistxattr print_syscall_ret_listxattr
9964fc3cddeSFilip Bozuta #endif
9974fc3cddeSFilip Bozuta
99879482e59SFilip Bozuta #ifdef TARGET_NR_ioctl
99979482e59SFilip Bozuta static void
print_syscall_ret_ioctl(CPUArchState * cpu_env,const struct syscallname * name,abi_long ret,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)1000a0939b89SPhilippe Mathieu-Daudé print_syscall_ret_ioctl(CPUArchState *cpu_env, const struct syscallname *name,
1001e400e119SFilip Bozuta abi_long ret, abi_long arg0, abi_long arg1,
1002e400e119SFilip Bozuta abi_long arg2, abi_long arg3, abi_long arg4,
1003e400e119SFilip Bozuta abi_long arg5)
100479482e59SFilip Bozuta {
100542b16184SLaurent Vivier if (!print_syscall_err(ret)) {
100679482e59SFilip Bozuta qemu_log(TARGET_ABI_FMT_ld, ret);
100779482e59SFilip Bozuta
100879482e59SFilip Bozuta const IOCTLEntry *ie;
100979482e59SFilip Bozuta const argtype *arg_type;
101079482e59SFilip Bozuta void *argptr;
101179482e59SFilip Bozuta int target_size;
101279482e59SFilip Bozuta
101379482e59SFilip Bozuta for (ie = ioctl_entries; ie->target_cmd != 0; ie++) {
101479482e59SFilip Bozuta if (ie->target_cmd == arg1) {
101579482e59SFilip Bozuta break;
101679482e59SFilip Bozuta }
101779482e59SFilip Bozuta }
101879482e59SFilip Bozuta
101979482e59SFilip Bozuta if (ie->target_cmd == arg1 &&
102079482e59SFilip Bozuta (ie->access == IOC_R || ie->access == IOC_RW)) {
102179482e59SFilip Bozuta arg_type = ie->arg_type;
102279482e59SFilip Bozuta qemu_log(" (");
102379482e59SFilip Bozuta arg_type++;
102479482e59SFilip Bozuta target_size = thunk_type_size(arg_type, 0);
102579482e59SFilip Bozuta argptr = lock_user(VERIFY_READ, arg2, target_size, 1);
10264c1850c1SLaurent Vivier if (argptr) {
102779482e59SFilip Bozuta thunk_print(argptr, arg_type);
102879482e59SFilip Bozuta unlock_user(argptr, arg2, target_size);
10294c1850c1SLaurent Vivier } else {
10304c1850c1SLaurent Vivier print_pointer(arg2, 1);
10314c1850c1SLaurent Vivier }
103279482e59SFilip Bozuta qemu_log(")");
103379482e59SFilip Bozuta }
103479482e59SFilip Bozuta }
103579482e59SFilip Bozuta qemu_log("\n");
103679482e59SFilip Bozuta }
103779482e59SFilip Bozuta #endif
103879482e59SFilip Bozuta
1039ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags access_flags[] = {
104040965ad9SRichard Henderson FLAG_GENERIC_MASK(F_OK, R_OK | W_OK | X_OK),
104174d753acSMika Westerberg FLAG_GENERIC(R_OK),
104274d753acSMika Westerberg FLAG_GENERIC(W_OK),
104374d753acSMika Westerberg FLAG_GENERIC(X_OK),
104474d753acSMika Westerberg FLAG_END,
104574d753acSMika Westerberg };
104674d753acSMika Westerberg
1047ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags at_file_flags[] = {
104874d753acSMika Westerberg #ifdef AT_EACCESS
104974d753acSMika Westerberg FLAG_GENERIC(AT_EACCESS),
105074d753acSMika Westerberg #endif
105174d753acSMika Westerberg #ifdef AT_SYMLINK_NOFOLLOW
105274d753acSMika Westerberg FLAG_GENERIC(AT_SYMLINK_NOFOLLOW),
105374d753acSMika Westerberg #endif
105474d753acSMika Westerberg FLAG_END,
105574d753acSMika Westerberg };
105674d753acSMika Westerberg
1057ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags unlinkat_flags[] = {
105874d753acSMika Westerberg #ifdef AT_REMOVEDIR
105974d753acSMika Westerberg FLAG_GENERIC(AT_REMOVEDIR),
106074d753acSMika Westerberg #endif
106174d753acSMika Westerberg FLAG_END,
106274d753acSMika Westerberg };
106374d753acSMika Westerberg
1064ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags mode_flags[] = {
106574d753acSMika Westerberg FLAG_GENERIC(S_IFSOCK),
106674d753acSMika Westerberg FLAG_GENERIC(S_IFLNK),
106774d753acSMika Westerberg FLAG_GENERIC(S_IFREG),
106874d753acSMika Westerberg FLAG_GENERIC(S_IFBLK),
106974d753acSMika Westerberg FLAG_GENERIC(S_IFDIR),
107074d753acSMika Westerberg FLAG_GENERIC(S_IFCHR),
107174d753acSMika Westerberg FLAG_GENERIC(S_IFIFO),
107274d753acSMika Westerberg FLAG_END,
107374d753acSMika Westerberg };
107474d753acSMika Westerberg
1075ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags open_access_flags[] = {
107640965ad9SRichard Henderson FLAG_TARGET_MASK(O_RDONLY, O_ACCMODE),
107740965ad9SRichard Henderson FLAG_TARGET_MASK(O_WRONLY, O_ACCMODE),
107840965ad9SRichard Henderson FLAG_TARGET_MASK(O_RDWR, O_ACCMODE),
107974d753acSMika Westerberg FLAG_END,
108074d753acSMika Westerberg };
108174d753acSMika Westerberg
1082ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags open_flags[] = {
108374d753acSMika Westerberg FLAG_TARGET(O_APPEND),
108474d753acSMika Westerberg FLAG_TARGET(O_CREAT),
108574d753acSMika Westerberg FLAG_TARGET(O_DIRECTORY),
108674d753acSMika Westerberg FLAG_TARGET(O_EXCL),
108740965ad9SRichard Henderson #if TARGET_O_LARGEFILE != 0
108874d753acSMika Westerberg FLAG_TARGET(O_LARGEFILE),
108940965ad9SRichard Henderson #endif
109074d753acSMika Westerberg FLAG_TARGET(O_NOCTTY),
109174d753acSMika Westerberg FLAG_TARGET(O_NOFOLLOW),
109274d753acSMika Westerberg FLAG_TARGET(O_NONBLOCK), /* also O_NDELAY */
1093afc8763fSRichard Henderson FLAG_TARGET(O_DSYNC),
1094afc8763fSRichard Henderson FLAG_TARGET(__O_SYNC),
109574d753acSMika Westerberg FLAG_TARGET(O_TRUNC),
109674d753acSMika Westerberg #ifdef O_DIRECT
109774d753acSMika Westerberg FLAG_TARGET(O_DIRECT),
109874d753acSMika Westerberg #endif
1099afc8763fSRichard Henderson #ifdef O_NOATIME
1100afc8763fSRichard Henderson FLAG_TARGET(O_NOATIME),
1101afc8763fSRichard Henderson #endif
1102afc8763fSRichard Henderson #ifdef O_CLOEXEC
1103afc8763fSRichard Henderson FLAG_TARGET(O_CLOEXEC),
1104afc8763fSRichard Henderson #endif
1105afc8763fSRichard Henderson #ifdef O_PATH
1106afc8763fSRichard Henderson FLAG_TARGET(O_PATH),
1107afc8763fSRichard Henderson #endif
11085f9cee46SRiku Voipio #ifdef O_TMPFILE
11095f9cee46SRiku Voipio FLAG_TARGET(O_TMPFILE),
11105f9cee46SRiku Voipio FLAG_TARGET(__O_TMPFILE),
11115f9cee46SRiku Voipio #endif
111274d753acSMika Westerberg FLAG_END,
111374d753acSMika Westerberg };
111474d753acSMika Westerberg
111597299303SMichael Vogt UNUSED static const struct flags openat2_resolve_flags[] = {
111697299303SMichael Vogt #ifdef HAVE_OPENAT2_H
111797299303SMichael Vogt FLAG_GENERIC(RESOLVE_NO_XDEV),
111897299303SMichael Vogt FLAG_GENERIC(RESOLVE_NO_MAGICLINKS),
111997299303SMichael Vogt FLAG_GENERIC(RESOLVE_NO_SYMLINKS),
112097299303SMichael Vogt FLAG_GENERIC(RESOLVE_BENEATH),
112197299303SMichael Vogt FLAG_GENERIC(RESOLVE_IN_ROOT),
112297299303SMichael Vogt FLAG_GENERIC(RESOLVE_CACHED),
112397299303SMichael Vogt #endif
112497299303SMichael Vogt FLAG_END,
112597299303SMichael Vogt };
112697299303SMichael Vogt
1127ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags mount_flags[] = {
112874d753acSMika Westerberg #ifdef MS_BIND
112974d753acSMika Westerberg FLAG_GENERIC(MS_BIND),
113074d753acSMika Westerberg #endif
113174d753acSMika Westerberg #ifdef MS_DIRSYNC
113274d753acSMika Westerberg FLAG_GENERIC(MS_DIRSYNC),
113374d753acSMika Westerberg #endif
113474d753acSMika Westerberg FLAG_GENERIC(MS_MANDLOCK),
113574d753acSMika Westerberg #ifdef MS_MOVE
113674d753acSMika Westerberg FLAG_GENERIC(MS_MOVE),
113774d753acSMika Westerberg #endif
113874d753acSMika Westerberg FLAG_GENERIC(MS_NOATIME),
113974d753acSMika Westerberg FLAG_GENERIC(MS_NODEV),
114074d753acSMika Westerberg FLAG_GENERIC(MS_NODIRATIME),
114174d753acSMika Westerberg FLAG_GENERIC(MS_NOEXEC),
114274d753acSMika Westerberg FLAG_GENERIC(MS_NOSUID),
114374d753acSMika Westerberg FLAG_GENERIC(MS_RDONLY),
114474d753acSMika Westerberg #ifdef MS_RELATIME
114574d753acSMika Westerberg FLAG_GENERIC(MS_RELATIME),
114674d753acSMika Westerberg #endif
114774d753acSMika Westerberg FLAG_GENERIC(MS_REMOUNT),
114874d753acSMika Westerberg FLAG_GENERIC(MS_SYNCHRONOUS),
114974d753acSMika Westerberg FLAG_END,
115074d753acSMika Westerberg };
115174d753acSMika Westerberg
1152ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags umount2_flags[] = {
115374d753acSMika Westerberg #ifdef MNT_FORCE
115474d753acSMika Westerberg FLAG_GENERIC(MNT_FORCE),
115574d753acSMika Westerberg #endif
115674d753acSMika Westerberg #ifdef MNT_DETACH
115774d753acSMika Westerberg FLAG_GENERIC(MNT_DETACH),
115874d753acSMika Westerberg #endif
115974d753acSMika Westerberg #ifdef MNT_EXPIRE
116074d753acSMika Westerberg FLAG_GENERIC(MNT_EXPIRE),
116174d753acSMika Westerberg #endif
116274d753acSMika Westerberg FLAG_END,
116374d753acSMika Westerberg };
116474d753acSMika Westerberg
1165ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags mmap_prot_flags[] = {
116640965ad9SRichard Henderson FLAG_GENERIC_MASK(PROT_NONE, PROT_READ | PROT_WRITE | PROT_EXEC),
116774d753acSMika Westerberg FLAG_GENERIC(PROT_EXEC),
116874d753acSMika Westerberg FLAG_GENERIC(PROT_READ),
116974d753acSMika Westerberg FLAG_GENERIC(PROT_WRITE),
11709e0b74a4SPaul Brook FLAG_TARGET(PROT_SEM),
11719e0b74a4SPaul Brook FLAG_GENERIC(PROT_GROWSDOWN),
11729e0b74a4SPaul Brook FLAG_GENERIC(PROT_GROWSUP),
117374d753acSMika Westerberg FLAG_END,
117474d753acSMika Westerberg };
117574d753acSMika Westerberg
1176ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags mmap_flags[] = {
11774b840f96SRichard Henderson FLAG_TARGET_MASK(MAP_SHARED, MAP_TYPE),
11784b840f96SRichard Henderson FLAG_TARGET_MASK(MAP_PRIVATE, MAP_TYPE),
11794b840f96SRichard Henderson FLAG_TARGET_MASK(MAP_SHARED_VALIDATE, MAP_TYPE),
118074d753acSMika Westerberg FLAG_TARGET(MAP_ANONYMOUS),
118174d753acSMika Westerberg FLAG_TARGET(MAP_DENYWRITE),
1182906c1b8eSMike Frysinger FLAG_TARGET(MAP_EXECUTABLE),
11834b840f96SRichard Henderson FLAG_TARGET(MAP_FIXED),
11844b840f96SRichard Henderson FLAG_TARGET(MAP_FIXED_NOREPLACE),
11854b840f96SRichard Henderson FLAG_TARGET(MAP_GROWSDOWN),
11864b840f96SRichard Henderson FLAG_TARGET(MAP_HUGETLB),
118774d753acSMika Westerberg FLAG_TARGET(MAP_LOCKED),
118874d753acSMika Westerberg FLAG_TARGET(MAP_NONBLOCK),
118974d753acSMika Westerberg FLAG_TARGET(MAP_NORESERVE),
119074d753acSMika Westerberg FLAG_TARGET(MAP_POPULATE),
11914b840f96SRichard Henderson FLAG_TARGET(MAP_STACK),
11924b840f96SRichard Henderson FLAG_TARGET(MAP_SYNC),
11934b840f96SRichard Henderson #if TARGET_MAP_UNINITIALIZED != 0
1194906c1b8eSMike Frysinger FLAG_TARGET(MAP_UNINITIALIZED),
1195906c1b8eSMike Frysinger #endif
119674d753acSMika Westerberg FLAG_END,
119774d753acSMika Westerberg };
119874d753acSMika Westerberg
1199895ce8bbSHelge Deller #ifndef CLONE_PIDFD
1200895ce8bbSHelge Deller # define CLONE_PIDFD 0x00001000
1201895ce8bbSHelge Deller #endif
1202895ce8bbSHelge Deller
1203ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags clone_flags[] = {
1204608e5592SLaurent Vivier FLAG_GENERIC(CLONE_VM),
1205608e5592SLaurent Vivier FLAG_GENERIC(CLONE_FS),
1206608e5592SLaurent Vivier FLAG_GENERIC(CLONE_FILES),
1207608e5592SLaurent Vivier FLAG_GENERIC(CLONE_SIGHAND),
1208895ce8bbSHelge Deller FLAG_GENERIC(CLONE_PIDFD),
1209608e5592SLaurent Vivier FLAG_GENERIC(CLONE_PTRACE),
1210608e5592SLaurent Vivier FLAG_GENERIC(CLONE_VFORK),
1211608e5592SLaurent Vivier FLAG_GENERIC(CLONE_PARENT),
1212608e5592SLaurent Vivier FLAG_GENERIC(CLONE_THREAD),
1213608e5592SLaurent Vivier FLAG_GENERIC(CLONE_NEWNS),
1214608e5592SLaurent Vivier FLAG_GENERIC(CLONE_SYSVSEM),
1215608e5592SLaurent Vivier FLAG_GENERIC(CLONE_SETTLS),
1216608e5592SLaurent Vivier FLAG_GENERIC(CLONE_PARENT_SETTID),
1217608e5592SLaurent Vivier FLAG_GENERIC(CLONE_CHILD_CLEARTID),
1218608e5592SLaurent Vivier FLAG_GENERIC(CLONE_DETACHED),
1219608e5592SLaurent Vivier FLAG_GENERIC(CLONE_UNTRACED),
1220608e5592SLaurent Vivier FLAG_GENERIC(CLONE_CHILD_SETTID),
12216f11f013SStefan Weil #if defined(CLONE_NEWUTS)
1222608e5592SLaurent Vivier FLAG_GENERIC(CLONE_NEWUTS),
12236f11f013SStefan Weil #endif
12246f11f013SStefan Weil #if defined(CLONE_NEWIPC)
1225608e5592SLaurent Vivier FLAG_GENERIC(CLONE_NEWIPC),
12266f11f013SStefan Weil #endif
12276f11f013SStefan Weil #if defined(CLONE_NEWUSER)
1228608e5592SLaurent Vivier FLAG_GENERIC(CLONE_NEWUSER),
12296f11f013SStefan Weil #endif
12306f11f013SStefan Weil #if defined(CLONE_NEWPID)
1231608e5592SLaurent Vivier FLAG_GENERIC(CLONE_NEWPID),
12326f11f013SStefan Weil #endif
12336f11f013SStefan Weil #if defined(CLONE_NEWNET)
1234608e5592SLaurent Vivier FLAG_GENERIC(CLONE_NEWNET),
12356f11f013SStefan Weil #endif
12365847d309SMatus Kysel #if defined(CLONE_NEWCGROUP)
12375847d309SMatus Kysel FLAG_GENERIC(CLONE_NEWCGROUP),
12385847d309SMatus Kysel #endif
12395847d309SMatus Kysel #if defined(CLONE_NEWTIME)
12405847d309SMatus Kysel FLAG_GENERIC(CLONE_NEWTIME),
12415847d309SMatus Kysel #endif
12426f11f013SStefan Weil #if defined(CLONE_IO)
1243608e5592SLaurent Vivier FLAG_GENERIC(CLONE_IO),
12446f11f013SStefan Weil #endif
1245608e5592SLaurent Vivier FLAG_END,
1246608e5592SLaurent Vivier };
1247608e5592SLaurent Vivier
12485667a1aeSDrew DeVault UNUSED static const struct flags execveat_flags[] = {
12495667a1aeSDrew DeVault #ifdef AT_EMPTY_PATH
12505667a1aeSDrew DeVault FLAG_GENERIC(AT_EMPTY_PATH),
12515667a1aeSDrew DeVault #endif
12525667a1aeSDrew DeVault #ifdef AT_SYMLINK_NOFOLLOW
12535667a1aeSDrew DeVault FLAG_GENERIC(AT_SYMLINK_NOFOLLOW),
12545667a1aeSDrew DeVault #endif
12555667a1aeSDrew DeVault FLAG_END,
12565667a1aeSDrew DeVault };
12575667a1aeSDrew DeVault
1258ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags msg_flags[] = {
1259fb3aabf3SLaurent Vivier /* send */
1260fb3aabf3SLaurent Vivier FLAG_GENERIC(MSG_CONFIRM),
1261fb3aabf3SLaurent Vivier FLAG_GENERIC(MSG_DONTROUTE),
1262fb3aabf3SLaurent Vivier FLAG_GENERIC(MSG_DONTWAIT),
1263fb3aabf3SLaurent Vivier FLAG_GENERIC(MSG_EOR),
1264fb3aabf3SLaurent Vivier FLAG_GENERIC(MSG_MORE),
1265fb3aabf3SLaurent Vivier FLAG_GENERIC(MSG_NOSIGNAL),
1266fb3aabf3SLaurent Vivier FLAG_GENERIC(MSG_OOB),
1267fb3aabf3SLaurent Vivier /* recv */
1268fb3aabf3SLaurent Vivier FLAG_GENERIC(MSG_CMSG_CLOEXEC),
1269fb3aabf3SLaurent Vivier FLAG_GENERIC(MSG_ERRQUEUE),
1270fb3aabf3SLaurent Vivier FLAG_GENERIC(MSG_PEEK),
1271fb3aabf3SLaurent Vivier FLAG_GENERIC(MSG_TRUNC),
1272fb3aabf3SLaurent Vivier FLAG_GENERIC(MSG_WAITALL),
1273fb3aabf3SLaurent Vivier /* recvmsg */
1274fb3aabf3SLaurent Vivier FLAG_GENERIC(MSG_CTRUNC),
1275fb3aabf3SLaurent Vivier FLAG_END,
1276fb3aabf3SLaurent Vivier };
1277fb3aabf3SLaurent Vivier
1278ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags statx_flags[] = {
1279d42744feSJim Wilson #ifdef AT_EMPTY_PATH
1280d42744feSJim Wilson FLAG_GENERIC(AT_EMPTY_PATH),
1281d42744feSJim Wilson #endif
1282d42744feSJim Wilson #ifdef AT_NO_AUTOMOUNT
1283d42744feSJim Wilson FLAG_GENERIC(AT_NO_AUTOMOUNT),
1284d42744feSJim Wilson #endif
1285d42744feSJim Wilson #ifdef AT_SYMLINK_NOFOLLOW
1286d42744feSJim Wilson FLAG_GENERIC(AT_SYMLINK_NOFOLLOW),
1287d42744feSJim Wilson #endif
1288d42744feSJim Wilson #ifdef AT_STATX_SYNC_AS_STAT
128940965ad9SRichard Henderson FLAG_GENERIC_MASK(AT_STATX_SYNC_AS_STAT, AT_STATX_SYNC_TYPE),
1290d42744feSJim Wilson #endif
1291d42744feSJim Wilson #ifdef AT_STATX_FORCE_SYNC
129240965ad9SRichard Henderson FLAG_GENERIC_MASK(AT_STATX_FORCE_SYNC, AT_STATX_SYNC_TYPE),
1293d42744feSJim Wilson #endif
1294d42744feSJim Wilson #ifdef AT_STATX_DONT_SYNC
129540965ad9SRichard Henderson FLAG_GENERIC_MASK(AT_STATX_DONT_SYNC, AT_STATX_SYNC_TYPE),
1296d42744feSJim Wilson #endif
1297d42744feSJim Wilson FLAG_END,
1298d42744feSJim Wilson };
1299d42744feSJim Wilson
1300ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags statx_mask[] = {
1301d42744feSJim Wilson /* This must come first, because it includes everything. */
1302d42744feSJim Wilson #ifdef STATX_ALL
1303d42744feSJim Wilson FLAG_GENERIC(STATX_ALL),
1304d42744feSJim Wilson #endif
1305d42744feSJim Wilson /* This must come second; it includes everything except STATX_BTIME. */
1306d42744feSJim Wilson #ifdef STATX_BASIC_STATS
1307d42744feSJim Wilson FLAG_GENERIC(STATX_BASIC_STATS),
1308d42744feSJim Wilson #endif
1309d42744feSJim Wilson #ifdef STATX_TYPE
1310d42744feSJim Wilson FLAG_GENERIC(STATX_TYPE),
1311d42744feSJim Wilson #endif
1312d42744feSJim Wilson #ifdef STATX_MODE
1313d42744feSJim Wilson FLAG_GENERIC(STATX_MODE),
1314d42744feSJim Wilson #endif
1315d42744feSJim Wilson #ifdef STATX_NLINK
1316d42744feSJim Wilson FLAG_GENERIC(STATX_NLINK),
1317d42744feSJim Wilson #endif
1318d42744feSJim Wilson #ifdef STATX_UID
1319d42744feSJim Wilson FLAG_GENERIC(STATX_UID),
1320d42744feSJim Wilson #endif
1321d42744feSJim Wilson #ifdef STATX_GID
1322d42744feSJim Wilson FLAG_GENERIC(STATX_GID),
1323d42744feSJim Wilson #endif
1324d42744feSJim Wilson #ifdef STATX_ATIME
1325d42744feSJim Wilson FLAG_GENERIC(STATX_ATIME),
1326d42744feSJim Wilson #endif
1327d42744feSJim Wilson #ifdef STATX_MTIME
1328d42744feSJim Wilson FLAG_GENERIC(STATX_MTIME),
1329d42744feSJim Wilson #endif
1330d42744feSJim Wilson #ifdef STATX_CTIME
1331d42744feSJim Wilson FLAG_GENERIC(STATX_CTIME),
1332d42744feSJim Wilson #endif
1333d42744feSJim Wilson #ifdef STATX_INO
1334d42744feSJim Wilson FLAG_GENERIC(STATX_INO),
1335d42744feSJim Wilson #endif
1336d42744feSJim Wilson #ifdef STATX_SIZE
1337d42744feSJim Wilson FLAG_GENERIC(STATX_SIZE),
1338d42744feSJim Wilson #endif
1339d42744feSJim Wilson #ifdef STATX_BLOCKS
1340d42744feSJim Wilson FLAG_GENERIC(STATX_BLOCKS),
1341d42744feSJim Wilson #endif
1342d42744feSJim Wilson #ifdef STATX_BTIME
1343d42744feSJim Wilson FLAG_GENERIC(STATX_BTIME),
1344d42744feSJim Wilson #endif
1345d42744feSJim Wilson FLAG_END,
1346d42744feSJim Wilson };
1347d42744feSJim Wilson
1348ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags falloc_flags[] = {
1349f4d92c5eSFilip Bozuta FLAG_GENERIC(FALLOC_FL_KEEP_SIZE),
1350f4d92c5eSFilip Bozuta FLAG_GENERIC(FALLOC_FL_PUNCH_HOLE),
1351f4d92c5eSFilip Bozuta #ifdef FALLOC_FL_NO_HIDE_STALE
1352f4d92c5eSFilip Bozuta FLAG_GENERIC(FALLOC_FL_NO_HIDE_STALE),
1353f4d92c5eSFilip Bozuta #endif
1354f4d92c5eSFilip Bozuta #ifdef FALLOC_FL_COLLAPSE_RANGE
1355f4d92c5eSFilip Bozuta FLAG_GENERIC(FALLOC_FL_COLLAPSE_RANGE),
1356f4d92c5eSFilip Bozuta #endif
1357f4d92c5eSFilip Bozuta #ifdef FALLOC_FL_ZERO_RANGE
1358f4d92c5eSFilip Bozuta FLAG_GENERIC(FALLOC_FL_ZERO_RANGE),
1359f4d92c5eSFilip Bozuta #endif
1360f4d92c5eSFilip Bozuta #ifdef FALLOC_FL_INSERT_RANGE
1361f4d92c5eSFilip Bozuta FLAG_GENERIC(FALLOC_FL_INSERT_RANGE),
1362f4d92c5eSFilip Bozuta #endif
1363f4d92c5eSFilip Bozuta #ifdef FALLOC_FL_UNSHARE_RANGE
1364f4d92c5eSFilip Bozuta FLAG_GENERIC(FALLOC_FL_UNSHARE_RANGE),
1365f4d92c5eSFilip Bozuta #endif
1366f4d92c5eSFilip Bozuta };
1367f4d92c5eSFilip Bozuta
1368ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags termios_iflags[] = {
1369888468dbSFilip Bozuta FLAG_TARGET(IGNBRK),
1370888468dbSFilip Bozuta FLAG_TARGET(BRKINT),
1371888468dbSFilip Bozuta FLAG_TARGET(IGNPAR),
1372888468dbSFilip Bozuta FLAG_TARGET(PARMRK),
1373888468dbSFilip Bozuta FLAG_TARGET(INPCK),
1374888468dbSFilip Bozuta FLAG_TARGET(ISTRIP),
1375888468dbSFilip Bozuta FLAG_TARGET(INLCR),
1376888468dbSFilip Bozuta FLAG_TARGET(IGNCR),
1377888468dbSFilip Bozuta FLAG_TARGET(ICRNL),
1378888468dbSFilip Bozuta FLAG_TARGET(IUCLC),
1379888468dbSFilip Bozuta FLAG_TARGET(IXON),
1380888468dbSFilip Bozuta FLAG_TARGET(IXANY),
1381888468dbSFilip Bozuta FLAG_TARGET(IXOFF),
1382888468dbSFilip Bozuta FLAG_TARGET(IMAXBEL),
1383888468dbSFilip Bozuta FLAG_TARGET(IUTF8),
1384888468dbSFilip Bozuta FLAG_END,
1385888468dbSFilip Bozuta };
1386888468dbSFilip Bozuta
1387ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags termios_oflags[] = {
1388888468dbSFilip Bozuta FLAG_TARGET(OPOST),
1389888468dbSFilip Bozuta FLAG_TARGET(OLCUC),
1390888468dbSFilip Bozuta FLAG_TARGET(ONLCR),
1391888468dbSFilip Bozuta FLAG_TARGET(OCRNL),
1392888468dbSFilip Bozuta FLAG_TARGET(ONOCR),
1393888468dbSFilip Bozuta FLAG_TARGET(ONLRET),
1394888468dbSFilip Bozuta FLAG_TARGET(OFILL),
1395888468dbSFilip Bozuta FLAG_TARGET(OFDEL),
1396888468dbSFilip Bozuta FLAG_END,
1397888468dbSFilip Bozuta };
1398888468dbSFilip Bozuta
1399888468dbSFilip Bozuta UNUSED static struct enums termios_oflags_NLDLY[] = {
1400888468dbSFilip Bozuta ENUM_TARGET(NL0),
1401888468dbSFilip Bozuta ENUM_TARGET(NL1),
1402888468dbSFilip Bozuta ENUM_END,
1403888468dbSFilip Bozuta };
1404888468dbSFilip Bozuta
1405888468dbSFilip Bozuta UNUSED static struct enums termios_oflags_CRDLY[] = {
1406888468dbSFilip Bozuta ENUM_TARGET(CR0),
1407888468dbSFilip Bozuta ENUM_TARGET(CR1),
1408888468dbSFilip Bozuta ENUM_TARGET(CR2),
1409888468dbSFilip Bozuta ENUM_TARGET(CR3),
1410888468dbSFilip Bozuta ENUM_END,
1411888468dbSFilip Bozuta };
1412888468dbSFilip Bozuta
1413888468dbSFilip Bozuta UNUSED static struct enums termios_oflags_TABDLY[] = {
1414888468dbSFilip Bozuta ENUM_TARGET(TAB0),
1415888468dbSFilip Bozuta ENUM_TARGET(TAB1),
1416888468dbSFilip Bozuta ENUM_TARGET(TAB2),
1417888468dbSFilip Bozuta ENUM_TARGET(TAB3),
1418888468dbSFilip Bozuta ENUM_END,
1419888468dbSFilip Bozuta };
1420888468dbSFilip Bozuta
1421888468dbSFilip Bozuta UNUSED static struct enums termios_oflags_VTDLY[] = {
1422888468dbSFilip Bozuta ENUM_TARGET(VT0),
1423888468dbSFilip Bozuta ENUM_TARGET(VT1),
1424888468dbSFilip Bozuta ENUM_END,
1425888468dbSFilip Bozuta };
1426888468dbSFilip Bozuta
1427888468dbSFilip Bozuta UNUSED static struct enums termios_oflags_FFDLY[] = {
1428888468dbSFilip Bozuta ENUM_TARGET(FF0),
1429888468dbSFilip Bozuta ENUM_TARGET(FF1),
1430888468dbSFilip Bozuta ENUM_END,
1431888468dbSFilip Bozuta };
1432888468dbSFilip Bozuta
1433888468dbSFilip Bozuta UNUSED static struct enums termios_oflags_BSDLY[] = {
1434888468dbSFilip Bozuta ENUM_TARGET(BS0),
1435888468dbSFilip Bozuta ENUM_TARGET(BS1),
1436888468dbSFilip Bozuta ENUM_END,
1437888468dbSFilip Bozuta };
1438888468dbSFilip Bozuta
1439888468dbSFilip Bozuta UNUSED static struct enums termios_cflags_CBAUD[] = {
1440888468dbSFilip Bozuta ENUM_TARGET(B0),
1441888468dbSFilip Bozuta ENUM_TARGET(B50),
1442888468dbSFilip Bozuta ENUM_TARGET(B75),
1443888468dbSFilip Bozuta ENUM_TARGET(B110),
1444888468dbSFilip Bozuta ENUM_TARGET(B134),
1445888468dbSFilip Bozuta ENUM_TARGET(B150),
1446888468dbSFilip Bozuta ENUM_TARGET(B200),
1447888468dbSFilip Bozuta ENUM_TARGET(B300),
1448888468dbSFilip Bozuta ENUM_TARGET(B600),
1449888468dbSFilip Bozuta ENUM_TARGET(B1200),
1450888468dbSFilip Bozuta ENUM_TARGET(B1800),
1451888468dbSFilip Bozuta ENUM_TARGET(B2400),
1452888468dbSFilip Bozuta ENUM_TARGET(B4800),
1453888468dbSFilip Bozuta ENUM_TARGET(B9600),
1454888468dbSFilip Bozuta ENUM_TARGET(B19200),
1455888468dbSFilip Bozuta ENUM_TARGET(B38400),
1456888468dbSFilip Bozuta ENUM_TARGET(B57600),
1457888468dbSFilip Bozuta ENUM_TARGET(B115200),
1458888468dbSFilip Bozuta ENUM_TARGET(B230400),
1459888468dbSFilip Bozuta ENUM_TARGET(B460800),
1460888468dbSFilip Bozuta ENUM_END,
1461888468dbSFilip Bozuta };
1462888468dbSFilip Bozuta
1463888468dbSFilip Bozuta UNUSED static struct enums termios_cflags_CSIZE[] = {
1464888468dbSFilip Bozuta ENUM_TARGET(CS5),
1465888468dbSFilip Bozuta ENUM_TARGET(CS6),
1466888468dbSFilip Bozuta ENUM_TARGET(CS7),
1467888468dbSFilip Bozuta ENUM_TARGET(CS8),
1468888468dbSFilip Bozuta ENUM_END,
1469888468dbSFilip Bozuta };
1470888468dbSFilip Bozuta
1471ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags termios_cflags[] = {
1472888468dbSFilip Bozuta FLAG_TARGET(CSTOPB),
1473888468dbSFilip Bozuta FLAG_TARGET(CREAD),
1474888468dbSFilip Bozuta FLAG_TARGET(PARENB),
1475888468dbSFilip Bozuta FLAG_TARGET(PARODD),
1476888468dbSFilip Bozuta FLAG_TARGET(HUPCL),
1477888468dbSFilip Bozuta FLAG_TARGET(CLOCAL),
1478888468dbSFilip Bozuta FLAG_TARGET(CRTSCTS),
1479888468dbSFilip Bozuta FLAG_END,
1480888468dbSFilip Bozuta };
1481888468dbSFilip Bozuta
1482ba0fef0dSPhilippe Mathieu-Daudé UNUSED static const struct flags termios_lflags[] = {
1483888468dbSFilip Bozuta FLAG_TARGET(ISIG),
1484888468dbSFilip Bozuta FLAG_TARGET(ICANON),
1485888468dbSFilip Bozuta FLAG_TARGET(XCASE),
1486888468dbSFilip Bozuta FLAG_TARGET(ECHO),
1487888468dbSFilip Bozuta FLAG_TARGET(ECHOE),
1488888468dbSFilip Bozuta FLAG_TARGET(ECHOK),
1489888468dbSFilip Bozuta FLAG_TARGET(ECHONL),
1490888468dbSFilip Bozuta FLAG_TARGET(NOFLSH),
1491888468dbSFilip Bozuta FLAG_TARGET(TOSTOP),
1492888468dbSFilip Bozuta FLAG_TARGET(ECHOCTL),
1493888468dbSFilip Bozuta FLAG_TARGET(ECHOPRT),
1494888468dbSFilip Bozuta FLAG_TARGET(ECHOKE),
1495888468dbSFilip Bozuta FLAG_TARGET(FLUSHO),
1496888468dbSFilip Bozuta FLAG_TARGET(PENDIN),
1497888468dbSFilip Bozuta FLAG_TARGET(IEXTEN),
1498888468dbSFilip Bozuta FLAG_TARGET(EXTPROC),
1499888468dbSFilip Bozuta FLAG_END,
1500888468dbSFilip Bozuta };
1501888468dbSFilip Bozuta
1502d237b416SMike Frysinger #ifdef TARGET_NR_mlockall
1503d237b416SMike Frysinger static const struct flags mlockall_flags[] = {
150402e5d7d7SFilip Bozuta FLAG_TARGET(MCL_CURRENT),
150502e5d7d7SFilip Bozuta FLAG_TARGET(MCL_FUTURE),
150602e5d7d7SFilip Bozuta #ifdef MCL_ONFAULT
150702e5d7d7SFilip Bozuta FLAG_TARGET(MCL_ONFAULT),
150802e5d7d7SFilip Bozuta #endif
150902e5d7d7SFilip Bozuta FLAG_END,
151002e5d7d7SFilip Bozuta };
1511d237b416SMike Frysinger #endif
151202e5d7d7SFilip Bozuta
15131a674adfSFilip Bozuta /* IDs of the various system clocks */
15141a674adfSFilip Bozuta #define TARGET_CLOCK_REALTIME 0
15151a674adfSFilip Bozuta #define TARGET_CLOCK_MONOTONIC 1
15161a674adfSFilip Bozuta #define TARGET_CLOCK_PROCESS_CPUTIME_ID 2
15171a674adfSFilip Bozuta #define TARGET_CLOCK_THREAD_CPUTIME_ID 3
15181a674adfSFilip Bozuta #define TARGET_CLOCK_MONOTONIC_RAW 4
15191a674adfSFilip Bozuta #define TARGET_CLOCK_REALTIME_COARSE 5
15201a674adfSFilip Bozuta #define TARGET_CLOCK_MONOTONIC_COARSE 6
15211a674adfSFilip Bozuta #define TARGET_CLOCK_BOOTTIME 7
15221a674adfSFilip Bozuta #define TARGET_CLOCK_REALTIME_ALARM 8
15231a674adfSFilip Bozuta #define TARGET_CLOCK_BOOTTIME_ALARM 9
15241a674adfSFilip Bozuta #define TARGET_CLOCK_SGI_CYCLE 10
15251a674adfSFilip Bozuta #define TARGET_CLOCK_TAI 11
15261a674adfSFilip Bozuta
15271a674adfSFilip Bozuta UNUSED static struct enums clockids[] = {
15281a674adfSFilip Bozuta ENUM_TARGET(CLOCK_REALTIME),
15291a674adfSFilip Bozuta ENUM_TARGET(CLOCK_MONOTONIC),
15301a674adfSFilip Bozuta ENUM_TARGET(CLOCK_PROCESS_CPUTIME_ID),
15311a674adfSFilip Bozuta ENUM_TARGET(CLOCK_THREAD_CPUTIME_ID),
15321a674adfSFilip Bozuta ENUM_TARGET(CLOCK_MONOTONIC_RAW),
15331a674adfSFilip Bozuta ENUM_TARGET(CLOCK_REALTIME_COARSE),
15341a674adfSFilip Bozuta ENUM_TARGET(CLOCK_MONOTONIC_COARSE),
15351a674adfSFilip Bozuta ENUM_TARGET(CLOCK_BOOTTIME),
15361a674adfSFilip Bozuta ENUM_TARGET(CLOCK_REALTIME_ALARM),
15371a674adfSFilip Bozuta ENUM_TARGET(CLOCK_BOOTTIME_ALARM),
15381a674adfSFilip Bozuta ENUM_TARGET(CLOCK_SGI_CYCLE),
15391a674adfSFilip Bozuta ENUM_TARGET(CLOCK_TAI),
15401a674adfSFilip Bozuta ENUM_END,
15411a674adfSFilip Bozuta };
15421a674adfSFilip Bozuta
15431a674adfSFilip Bozuta UNUSED static struct enums itimer_types[] = {
15441a674adfSFilip Bozuta ENUM_GENERIC(ITIMER_REAL),
15451a674adfSFilip Bozuta ENUM_GENERIC(ITIMER_VIRTUAL),
15461a674adfSFilip Bozuta ENUM_GENERIC(ITIMER_PROF),
15471a674adfSFilip Bozuta ENUM_END,
15481a674adfSFilip Bozuta };
15491a674adfSFilip Bozuta
155074d753acSMika Westerberg /*
155174d753acSMika Westerberg * print_xxx utility functions. These are used to print syscall
155274d753acSMika Westerberg * parameters in certain format. All of these have parameter
155374d753acSMika Westerberg * named 'last'. This parameter is used to add comma to output
155474d753acSMika Westerberg * when last == 0.
155574d753acSMika Westerberg */
155674d753acSMika Westerberg
155774d753acSMika Westerberg static const char *
get_comma(int last)155874d753acSMika Westerberg get_comma(int last)
155974d753acSMika Westerberg {
156074d753acSMika Westerberg return ((last) ? "" : ",");
156174d753acSMika Westerberg }
156274d753acSMika Westerberg
156374d753acSMika Westerberg static void
print_flags(const struct flags * f,abi_long flags,int last)1564d2ee72a5SLaurent Vivier print_flags(const struct flags *f, abi_long flags, int last)
156574d753acSMika Westerberg {
156674d753acSMika Westerberg const char *sep = "";
156774d753acSMika Westerberg int n;
156874d753acSMika Westerberg
156974d753acSMika Westerberg for (n = 0; f->f_string != NULL; f++) {
157040965ad9SRichard Henderson if ((flags & f->f_mask) == f->f_value) {
15714b25a506SJosh Kunz qemu_log("%s%s", sep, f->f_string);
157240965ad9SRichard Henderson flags &= ~f->f_mask;
157374d753acSMika Westerberg sep = "|";
157474d753acSMika Westerberg n++;
157574d753acSMika Westerberg }
157674d753acSMika Westerberg }
157774d753acSMika Westerberg
157874d753acSMika Westerberg if (n > 0) {
157974d753acSMika Westerberg /* print rest of the flags as numeric */
158074d753acSMika Westerberg if (flags != 0) {
15814b25a506SJosh Kunz qemu_log("%s%#x%s", sep, (unsigned int)flags, get_comma(last));
158274d753acSMika Westerberg } else {
15834b25a506SJosh Kunz qemu_log("%s", get_comma(last));
158474d753acSMika Westerberg }
158574d753acSMika Westerberg } else {
158674d753acSMika Westerberg /* no string version of flags found, print them in hex then */
15874b25a506SJosh Kunz qemu_log("%#x%s", (unsigned int)flags, get_comma(last));
158874d753acSMika Westerberg }
158974d753acSMika Westerberg }
159074d753acSMika Westerberg
159174d753acSMika Westerberg static void
print_enums(const struct enums * e,abi_long enum_arg,int last)159245f56799SFilip Bozuta print_enums(const struct enums *e, abi_long enum_arg, int last)
159345f56799SFilip Bozuta {
159445f56799SFilip Bozuta for (; e->e_string != NULL; e++) {
159545f56799SFilip Bozuta if (e->e_value == enum_arg) {
159645f56799SFilip Bozuta qemu_log("%s", e->e_string);
159745f56799SFilip Bozuta break;
159845f56799SFilip Bozuta }
159945f56799SFilip Bozuta }
160045f56799SFilip Bozuta
160145f56799SFilip Bozuta if (e->e_string == NULL) {
160245f56799SFilip Bozuta qemu_log("%#x", (unsigned int)enum_arg);
160345f56799SFilip Bozuta }
160445f56799SFilip Bozuta
160545f56799SFilip Bozuta qemu_log("%s", get_comma(last));
160645f56799SFilip Bozuta }
160745f56799SFilip Bozuta
160845f56799SFilip Bozuta static void
print_at_dirfd(abi_long dirfd,int last)1609d2ee72a5SLaurent Vivier print_at_dirfd(abi_long dirfd, int last)
161074d753acSMika Westerberg {
161174d753acSMika Westerberg #ifdef AT_FDCWD
161274d753acSMika Westerberg if (dirfd == AT_FDCWD) {
16134b25a506SJosh Kunz qemu_log("AT_FDCWD%s", get_comma(last));
161474d753acSMika Westerberg return;
161574d753acSMika Westerberg }
161674d753acSMika Westerberg #endif
16174b25a506SJosh Kunz qemu_log("%d%s", (int)dirfd, get_comma(last));
161874d753acSMika Westerberg }
161974d753acSMika Westerberg
162074d753acSMika Westerberg static void
print_file_mode(abi_long mode,int last)1621d2ee72a5SLaurent Vivier print_file_mode(abi_long mode, int last)
162274d753acSMika Westerberg {
162374d753acSMika Westerberg const char *sep = "";
162474d753acSMika Westerberg const struct flags *m;
162574d753acSMika Westerberg
1626105d599aSHelge Deller if (mode == 0) {
1627105d599aSHelge Deller qemu_log("000%s", get_comma(last));
1628105d599aSHelge Deller return;
1629105d599aSHelge Deller }
1630105d599aSHelge Deller
163174d753acSMika Westerberg for (m = &mode_flags[0]; m->f_string != NULL; m++) {
163274d753acSMika Westerberg if ((m->f_value & mode) == m->f_value) {
16334b25a506SJosh Kunz qemu_log("%s%s", m->f_string, sep);
163474d753acSMika Westerberg sep = "|";
163574d753acSMika Westerberg mode &= ~m->f_value;
163674d753acSMika Westerberg break;
163774d753acSMika Westerberg }
163874d753acSMika Westerberg }
163974d753acSMika Westerberg
164074d753acSMika Westerberg mode &= ~S_IFMT;
164174d753acSMika Westerberg /* print rest of the mode as octal */
164274d753acSMika Westerberg if (mode != 0)
16434b25a506SJosh Kunz qemu_log("%s%#o", sep, (unsigned int)mode);
164474d753acSMika Westerberg
16454b25a506SJosh Kunz qemu_log("%s", get_comma(last));
164674d753acSMika Westerberg }
164774d753acSMika Westerberg
164874d753acSMika Westerberg static void
print_open_flags(abi_long flags,int last)1649d2ee72a5SLaurent Vivier print_open_flags(abi_long flags, int last)
165074d753acSMika Westerberg {
165174d753acSMika Westerberg print_flags(open_access_flags, flags & TARGET_O_ACCMODE, 1);
165274d753acSMika Westerberg flags &= ~TARGET_O_ACCMODE;
165374d753acSMika Westerberg if (flags == 0) {
16544b25a506SJosh Kunz qemu_log("%s", get_comma(last));
165574d753acSMika Westerberg return;
165674d753acSMika Westerberg }
16574b25a506SJosh Kunz qemu_log("|");
165874d753acSMika Westerberg print_flags(open_flags, flags, last);
165974d753acSMika Westerberg }
166074d753acSMika Westerberg
166174d753acSMika Westerberg static void
print_syscall_prologue(const struct syscallname * sc)166274d753acSMika Westerberg print_syscall_prologue(const struct syscallname *sc)
166374d753acSMika Westerberg {
16644b25a506SJosh Kunz qemu_log("%s(", sc->name);
166574d753acSMika Westerberg }
166674d753acSMika Westerberg
166774d753acSMika Westerberg /*ARGSUSED*/
166874d753acSMika Westerberg static void
print_syscall_epilogue(const struct syscallname * sc)166974d753acSMika Westerberg print_syscall_epilogue(const struct syscallname *sc)
167074d753acSMika Westerberg {
167174d753acSMika Westerberg (void)sc;
16724b25a506SJosh Kunz qemu_log(")");
167374d753acSMika Westerberg }
167474d753acSMika Westerberg
167574d753acSMika Westerberg static void
print_string(abi_long addr,int last)167674d753acSMika Westerberg print_string(abi_long addr, int last)
167774d753acSMika Westerberg {
167874d753acSMika Westerberg char *s;
167974d753acSMika Westerberg
168074d753acSMika Westerberg if ((s = lock_user_string(addr)) != NULL) {
16814b25a506SJosh Kunz qemu_log("\"%s\"%s", s, get_comma(last));
168274d753acSMika Westerberg unlock_user(s, addr, 0);
168374d753acSMika Westerberg } else {
168474d753acSMika Westerberg /* can't get string out of it, so print it as pointer */
168574d753acSMika Westerberg print_pointer(addr, last);
168674d753acSMika Westerberg }
168774d753acSMika Westerberg }
168874d753acSMika Westerberg
1689fb3aabf3SLaurent Vivier #define MAX_PRINT_BUF 40
1690fb3aabf3SLaurent Vivier static void
print_buf(abi_long addr,abi_long len,int last)1691fb3aabf3SLaurent Vivier print_buf(abi_long addr, abi_long len, int last)
1692fb3aabf3SLaurent Vivier {
1693fb3aabf3SLaurent Vivier uint8_t *s;
1694fb3aabf3SLaurent Vivier int i;
1695fb3aabf3SLaurent Vivier
1696fb3aabf3SLaurent Vivier s = lock_user(VERIFY_READ, addr, len, 1);
1697fb3aabf3SLaurent Vivier if (s) {
16984b25a506SJosh Kunz qemu_log("\"");
1699fb3aabf3SLaurent Vivier for (i = 0; i < MAX_PRINT_BUF && i < len; i++) {
1700fb3aabf3SLaurent Vivier if (isprint(s[i])) {
17014b25a506SJosh Kunz qemu_log("%c", s[i]);
1702fb3aabf3SLaurent Vivier } else {
17034b25a506SJosh Kunz qemu_log("\\%o", s[i]);
1704fb3aabf3SLaurent Vivier }
1705fb3aabf3SLaurent Vivier }
17064b25a506SJosh Kunz qemu_log("\"");
1707fb3aabf3SLaurent Vivier if (i != len) {
17084b25a506SJosh Kunz qemu_log("...");
1709fb3aabf3SLaurent Vivier }
1710fb3aabf3SLaurent Vivier if (!last) {
17114b25a506SJosh Kunz qemu_log(",");
1712fb3aabf3SLaurent Vivier }
1713fb3aabf3SLaurent Vivier unlock_user(s, addr, 0);
1714fb3aabf3SLaurent Vivier } else {
1715fb3aabf3SLaurent Vivier print_pointer(addr, last);
1716fb3aabf3SLaurent Vivier }
1717fb3aabf3SLaurent Vivier }
1718fb3aabf3SLaurent Vivier
171957fbc9b9SPhilippe Mathieu-Daudé static void
print_buf_len(abi_long addr,abi_long len,int last)172057fbc9b9SPhilippe Mathieu-Daudé print_buf_len(abi_long addr, abi_long len, int last)
172157fbc9b9SPhilippe Mathieu-Daudé {
172257fbc9b9SPhilippe Mathieu-Daudé print_buf(addr, len, 0);
172357fbc9b9SPhilippe Mathieu-Daudé print_raw_param(TARGET_ABI_FMT_ld, len, last);
172457fbc9b9SPhilippe Mathieu-Daudé }
172557fbc9b9SPhilippe Mathieu-Daudé
172674d753acSMika Westerberg /*
172774d753acSMika Westerberg * Prints out raw parameter using given format. Caller needs
172874d753acSMika Westerberg * to do byte swapping if needed.
172974d753acSMika Westerberg */
173074d753acSMika Westerberg static void
print_raw_param(const char * fmt,abi_long param,int last)173174d753acSMika Westerberg print_raw_param(const char *fmt, abi_long param, int last)
173274d753acSMika Westerberg {
173374d753acSMika Westerberg char format[64];
173474d753acSMika Westerberg
173574d753acSMika Westerberg (void) snprintf(format, sizeof (format), "%s%s", fmt, get_comma(last));
17364b25a506SJosh Kunz qemu_log(format, param);
173774d753acSMika Westerberg }
173874d753acSMika Westerberg
17398e0f5c1bSHelge Deller /*
17408e0f5c1bSHelge Deller * Same as print_raw_param() but prints out raw 64-bit parameter.
17418e0f5c1bSHelge Deller */
17428e0f5c1bSHelge Deller static void
print_raw_param64(const char * fmt,long long param,int last)17438e0f5c1bSHelge Deller print_raw_param64(const char *fmt, long long param, int last)
17448e0f5c1bSHelge Deller {
17458e0f5c1bSHelge Deller char format[64];
17468e0f5c1bSHelge Deller
17478e0f5c1bSHelge Deller (void)snprintf(format, sizeof(format), "%s%s", fmt, get_comma(last));
17488e0f5c1bSHelge Deller qemu_log(format, param);
17498e0f5c1bSHelge Deller }
17508e0f5c1bSHelge Deller
17518e0f5c1bSHelge Deller
175274d753acSMika Westerberg static void
print_pointer(abi_long p,int last)175374d753acSMika Westerberg print_pointer(abi_long p, int last)
175474d753acSMika Westerberg {
175574d753acSMika Westerberg if (p == 0)
17564b25a506SJosh Kunz qemu_log("NULL%s", get_comma(last));
175774d753acSMika Westerberg else
17584b25a506SJosh Kunz qemu_log("0x" TARGET_ABI_FMT_lx "%s", p, get_comma(last));
175974d753acSMika Westerberg }
176074d753acSMika Westerberg
176174d753acSMika Westerberg /*
176274d753acSMika Westerberg * Reads 32-bit (int) number from guest address space from
176374d753acSMika Westerberg * address 'addr' and prints it.
176474d753acSMika Westerberg */
176574d753acSMika Westerberg static void
print_number(abi_long addr,int last)176674d753acSMika Westerberg print_number(abi_long addr, int last)
176774d753acSMika Westerberg {
176874d753acSMika Westerberg if (addr == 0) {
17694b25a506SJosh Kunz qemu_log("NULL%s", get_comma(last));
177074d753acSMika Westerberg } else {
177174d753acSMika Westerberg int num;
177274d753acSMika Westerberg
177374d753acSMika Westerberg get_user_s32(num, addr);
17744b25a506SJosh Kunz qemu_log("[%d]%s", num, get_comma(last));
177574d753acSMika Westerberg }
177674d753acSMika Westerberg }
177774d753acSMika Westerberg
177874d753acSMika Westerberg static void
print_timeval(abi_ulong tv_addr,int last)177974d753acSMika Westerberg print_timeval(abi_ulong tv_addr, int last)
178074d753acSMika Westerberg {
178174d753acSMika Westerberg if( tv_addr ) {
178274d753acSMika Westerberg struct target_timeval *tv;
178374d753acSMika Westerberg
178474d753acSMika Westerberg tv = lock_user(VERIFY_READ, tv_addr, sizeof(*tv), 1);
17858f93089dSPhilippe Mathieu-Daudé if (!tv) {
17868f93089dSPhilippe Mathieu-Daudé print_pointer(tv_addr, last);
178774d753acSMika Westerberg return;
17888f93089dSPhilippe Mathieu-Daudé }
17891a674adfSFilip Bozuta qemu_log("{tv_sec = " TARGET_ABI_FMT_ld
17901a674adfSFilip Bozuta ",tv_usec = " TARGET_ABI_FMT_ld "}%s",
1791910ee4e5SLaurent Vivier tswapal(tv->tv_sec), tswapal(tv->tv_usec), get_comma(last));
179274d753acSMika Westerberg unlock_user(tv, tv_addr, 0);
179374d753acSMika Westerberg } else
17944b25a506SJosh Kunz qemu_log("NULL%s", get_comma(last));
179574d753acSMika Westerberg }
179674d753acSMika Westerberg
17976d33e036SPhilippe Mathieu-Daudé static void
print_timespec(abi_ulong ts_addr,int last)17981a674adfSFilip Bozuta print_timespec(abi_ulong ts_addr, int last)
17991a674adfSFilip Bozuta {
18001a674adfSFilip Bozuta if (ts_addr) {
18011a674adfSFilip Bozuta struct target_timespec *ts;
18021a674adfSFilip Bozuta
18031a674adfSFilip Bozuta ts = lock_user(VERIFY_READ, ts_addr, sizeof(*ts), 1);
18041a674adfSFilip Bozuta if (!ts) {
18051a674adfSFilip Bozuta print_pointer(ts_addr, last);
18061a674adfSFilip Bozuta return;
18071a674adfSFilip Bozuta }
18081a674adfSFilip Bozuta qemu_log("{tv_sec = " TARGET_ABI_FMT_ld
18091a674adfSFilip Bozuta ",tv_nsec = " TARGET_ABI_FMT_ld "}%s",
18101a674adfSFilip Bozuta tswapal(ts->tv_sec), tswapal(ts->tv_nsec), get_comma(last));
18111a674adfSFilip Bozuta unlock_user(ts, ts_addr, 0);
18121a674adfSFilip Bozuta } else {
18131a674adfSFilip Bozuta qemu_log("NULL%s", get_comma(last));
18141a674adfSFilip Bozuta }
18151a674adfSFilip Bozuta }
18161a674adfSFilip Bozuta
18171a674adfSFilip Bozuta static void
print_timespec64(abi_ulong ts_addr,int last)1818aad43d15SHelge Deller print_timespec64(abi_ulong ts_addr, int last)
1819aad43d15SHelge Deller {
1820aad43d15SHelge Deller if (ts_addr) {
1821aad43d15SHelge Deller struct target__kernel_timespec *ts;
1822aad43d15SHelge Deller
1823aad43d15SHelge Deller ts = lock_user(VERIFY_READ, ts_addr, sizeof(*ts), 1);
1824aad43d15SHelge Deller if (!ts) {
1825aad43d15SHelge Deller print_pointer(ts_addr, last);
1826aad43d15SHelge Deller return;
1827aad43d15SHelge Deller }
18288e0f5c1bSHelge Deller print_raw_param64("{tv_sec=%" PRId64, tswap64(ts->tv_sec), 0);
18298e0f5c1bSHelge Deller print_raw_param64("tv_nsec=%" PRId64 "}", tswap64(ts->tv_nsec), last);
1830aad43d15SHelge Deller unlock_user(ts, ts_addr, 0);
1831aad43d15SHelge Deller } else {
1832aad43d15SHelge Deller qemu_log("NULL%s", get_comma(last));
1833aad43d15SHelge Deller }
1834aad43d15SHelge Deller }
1835aad43d15SHelge Deller
1836aad43d15SHelge Deller static void
print_timezone(abi_ulong tz_addr,int last)18376d33e036SPhilippe Mathieu-Daudé print_timezone(abi_ulong tz_addr, int last)
18386d33e036SPhilippe Mathieu-Daudé {
18396d33e036SPhilippe Mathieu-Daudé if (tz_addr) {
18406d33e036SPhilippe Mathieu-Daudé struct target_timezone *tz;
18416d33e036SPhilippe Mathieu-Daudé
18426d33e036SPhilippe Mathieu-Daudé tz = lock_user(VERIFY_READ, tz_addr, sizeof(*tz), 1);
18436d33e036SPhilippe Mathieu-Daudé if (!tz) {
18446d33e036SPhilippe Mathieu-Daudé print_pointer(tz_addr, last);
18456d33e036SPhilippe Mathieu-Daudé return;
18466d33e036SPhilippe Mathieu-Daudé }
18474b25a506SJosh Kunz qemu_log("{%d,%d}%s", tswap32(tz->tz_minuteswest),
18486d33e036SPhilippe Mathieu-Daudé tswap32(tz->tz_dsttime), get_comma(last));
18496d33e036SPhilippe Mathieu-Daudé unlock_user(tz, tz_addr, 0);
18506d33e036SPhilippe Mathieu-Daudé } else {
18514b25a506SJosh Kunz qemu_log("NULL%s", get_comma(last));
18526d33e036SPhilippe Mathieu-Daudé }
18536d33e036SPhilippe Mathieu-Daudé }
18546d33e036SPhilippe Mathieu-Daudé
18551a674adfSFilip Bozuta static void
print_itimerval(abi_ulong it_addr,int last)18561a674adfSFilip Bozuta print_itimerval(abi_ulong it_addr, int last)
18571a674adfSFilip Bozuta {
18581a674adfSFilip Bozuta if (it_addr) {
18591a674adfSFilip Bozuta qemu_log("{it_interval=");
18601a674adfSFilip Bozuta print_timeval(it_addr +
18611a674adfSFilip Bozuta offsetof(struct target_itimerval, it_interval), 0);
18621a674adfSFilip Bozuta qemu_log("it_value=");
18631a674adfSFilip Bozuta print_timeval(it_addr +
18641a674adfSFilip Bozuta offsetof(struct target_itimerval, it_value), 0);
18651a674adfSFilip Bozuta qemu_log("}%s", get_comma(last));
18661a674adfSFilip Bozuta } else {
18671a674adfSFilip Bozuta qemu_log("NULL%s", get_comma(last));
18681a674adfSFilip Bozuta }
18691a674adfSFilip Bozuta }
18701a674adfSFilip Bozuta
1871888468dbSFilip Bozuta void
print_termios(void * arg)1872888468dbSFilip Bozuta print_termios(void *arg)
1873888468dbSFilip Bozuta {
1874888468dbSFilip Bozuta const struct target_termios *target = arg;
1875888468dbSFilip Bozuta
1876888468dbSFilip Bozuta target_tcflag_t iflags = tswap32(target->c_iflag);
1877888468dbSFilip Bozuta target_tcflag_t oflags = tswap32(target->c_oflag);
1878888468dbSFilip Bozuta target_tcflag_t cflags = tswap32(target->c_cflag);
1879888468dbSFilip Bozuta target_tcflag_t lflags = tswap32(target->c_lflag);
1880888468dbSFilip Bozuta
1881888468dbSFilip Bozuta qemu_log("{");
1882888468dbSFilip Bozuta
1883888468dbSFilip Bozuta qemu_log("c_iflag = ");
1884888468dbSFilip Bozuta print_flags(termios_iflags, iflags, 0);
1885888468dbSFilip Bozuta
1886888468dbSFilip Bozuta qemu_log("c_oflag = ");
1887888468dbSFilip Bozuta target_tcflag_t oflags_clean = oflags & ~(TARGET_NLDLY | TARGET_CRDLY |
1888888468dbSFilip Bozuta TARGET_TABDLY | TARGET_BSDLY |
1889888468dbSFilip Bozuta TARGET_VTDLY | TARGET_FFDLY);
1890888468dbSFilip Bozuta print_flags(termios_oflags, oflags_clean, 0);
1891888468dbSFilip Bozuta if (oflags & TARGET_NLDLY) {
1892888468dbSFilip Bozuta print_enums(termios_oflags_NLDLY, oflags & TARGET_NLDLY, 0);
1893888468dbSFilip Bozuta }
1894888468dbSFilip Bozuta if (oflags & TARGET_CRDLY) {
1895888468dbSFilip Bozuta print_enums(termios_oflags_CRDLY, oflags & TARGET_CRDLY, 0);
1896888468dbSFilip Bozuta }
1897888468dbSFilip Bozuta if (oflags & TARGET_TABDLY) {
1898888468dbSFilip Bozuta print_enums(termios_oflags_TABDLY, oflags & TARGET_TABDLY, 0);
1899888468dbSFilip Bozuta }
1900888468dbSFilip Bozuta if (oflags & TARGET_BSDLY) {
1901888468dbSFilip Bozuta print_enums(termios_oflags_BSDLY, oflags & TARGET_BSDLY, 0);
1902888468dbSFilip Bozuta }
1903888468dbSFilip Bozuta if (oflags & TARGET_VTDLY) {
1904888468dbSFilip Bozuta print_enums(termios_oflags_VTDLY, oflags & TARGET_VTDLY, 0);
1905888468dbSFilip Bozuta }
1906888468dbSFilip Bozuta if (oflags & TARGET_FFDLY) {
1907888468dbSFilip Bozuta print_enums(termios_oflags_FFDLY, oflags & TARGET_FFDLY, 0);
1908888468dbSFilip Bozuta }
1909888468dbSFilip Bozuta
1910888468dbSFilip Bozuta qemu_log("c_cflag = ");
1911888468dbSFilip Bozuta if (cflags & TARGET_CBAUD) {
1912888468dbSFilip Bozuta print_enums(termios_cflags_CBAUD, cflags & TARGET_CBAUD, 0);
1913888468dbSFilip Bozuta }
1914888468dbSFilip Bozuta if (cflags & TARGET_CSIZE) {
1915888468dbSFilip Bozuta print_enums(termios_cflags_CSIZE, cflags & TARGET_CSIZE, 0);
1916888468dbSFilip Bozuta }
1917888468dbSFilip Bozuta target_tcflag_t cflags_clean = cflags & ~(TARGET_CBAUD | TARGET_CSIZE);
1918888468dbSFilip Bozuta print_flags(termios_cflags, cflags_clean, 0);
1919888468dbSFilip Bozuta
1920888468dbSFilip Bozuta qemu_log("c_lflag = ");
1921888468dbSFilip Bozuta print_flags(termios_lflags, lflags, 0);
1922888468dbSFilip Bozuta
1923888468dbSFilip Bozuta qemu_log("c_cc = ");
1924888468dbSFilip Bozuta qemu_log("\"%s\",", target->c_cc);
1925888468dbSFilip Bozuta
1926888468dbSFilip Bozuta qemu_log("c_line = ");
1927888468dbSFilip Bozuta print_raw_param("\'%c\'", target->c_line, 1);
1928888468dbSFilip Bozuta
1929888468dbSFilip Bozuta qemu_log("}");
1930888468dbSFilip Bozuta }
1931888468dbSFilip Bozuta
193274d753acSMika Westerberg #undef UNUSED
193374d753acSMika Westerberg
193474d753acSMika Westerberg #ifdef TARGET_NR_accept
193574d753acSMika Westerberg static void
print_accept(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)1936a0939b89SPhilippe Mathieu-Daudé print_accept(CPUArchState *cpu_env, const struct syscallname *name,
193774d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
193874d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
193974d753acSMika Westerberg {
194074d753acSMika Westerberg print_syscall_prologue(name);
1941d2ee72a5SLaurent Vivier print_raw_param("%d", arg0, 0);
194274d753acSMika Westerberg print_pointer(arg1, 0);
194374d753acSMika Westerberg print_number(arg2, 1);
194474d753acSMika Westerberg print_syscall_epilogue(name);
194574d753acSMika Westerberg }
194674d753acSMika Westerberg #endif
194774d753acSMika Westerberg
194874d753acSMika Westerberg #ifdef TARGET_NR_access
194974d753acSMika Westerberg static void
print_access(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)1950a0939b89SPhilippe Mathieu-Daudé print_access(CPUArchState *cpu_env, const struct syscallname *name,
195174d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
195274d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
195374d753acSMika Westerberg {
195474d753acSMika Westerberg print_syscall_prologue(name);
195574d753acSMika Westerberg print_string(arg0, 0);
195674d753acSMika Westerberg print_flags(access_flags, arg1, 1);
195774d753acSMika Westerberg print_syscall_epilogue(name);
195874d753acSMika Westerberg }
195974d753acSMika Westerberg #endif
196074d753acSMika Westerberg
1961c42569f6SFilip Bozuta #ifdef TARGET_NR_acct
1962c42569f6SFilip Bozuta static void
print_acct(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)1963a0939b89SPhilippe Mathieu-Daudé print_acct(CPUArchState *cpu_env, const struct syscallname *name,
1964c42569f6SFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
1965c42569f6SFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
1966c42569f6SFilip Bozuta {
1967c42569f6SFilip Bozuta print_syscall_prologue(name);
1968c42569f6SFilip Bozuta print_string(arg0, 1);
1969c42569f6SFilip Bozuta print_syscall_epilogue(name);
1970c42569f6SFilip Bozuta }
1971c42569f6SFilip Bozuta #endif
1972c42569f6SFilip Bozuta
197374d753acSMika Westerberg #ifdef TARGET_NR_brk
197474d753acSMika Westerberg static void
print_brk(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)1975a0939b89SPhilippe Mathieu-Daudé print_brk(CPUArchState *cpu_env, const struct syscallname *name,
197674d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
197774d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
197874d753acSMika Westerberg {
197974d753acSMika Westerberg print_syscall_prologue(name);
198074d753acSMika Westerberg print_pointer(arg0, 1);
198174d753acSMika Westerberg print_syscall_epilogue(name);
198274d753acSMika Westerberg }
198374d753acSMika Westerberg #endif
198474d753acSMika Westerberg
198574d753acSMika Westerberg #ifdef TARGET_NR_chdir
198674d753acSMika Westerberg static void
print_chdir(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)1987a0939b89SPhilippe Mathieu-Daudé print_chdir(CPUArchState *cpu_env, const struct syscallname *name,
198874d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
198974d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
199074d753acSMika Westerberg {
199174d753acSMika Westerberg print_syscall_prologue(name);
199274d753acSMika Westerberg print_string(arg0, 1);
199374d753acSMika Westerberg print_syscall_epilogue(name);
199474d753acSMika Westerberg }
199574d753acSMika Westerberg #endif
199674d753acSMika Westerberg
19971b7695feSHelge Deller #ifdef TARGET_NR_chroot
19981b7695feSHelge Deller static void
print_chroot(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)1999a0939b89SPhilippe Mathieu-Daudé print_chroot(CPUArchState *cpu_env, const struct syscallname *name,
20001b7695feSHelge Deller abi_long arg0, abi_long arg1, abi_long arg2,
20011b7695feSHelge Deller abi_long arg3, abi_long arg4, abi_long arg5)
20021b7695feSHelge Deller {
20031b7695feSHelge Deller print_syscall_prologue(name);
20041b7695feSHelge Deller print_string(arg0, 1);
20051b7695feSHelge Deller print_syscall_epilogue(name);
20061b7695feSHelge Deller }
20071b7695feSHelge Deller #endif
20081b7695feSHelge Deller
200974d753acSMika Westerberg #ifdef TARGET_NR_chmod
201074d753acSMika Westerberg static void
print_chmod(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2011a0939b89SPhilippe Mathieu-Daudé print_chmod(CPUArchState *cpu_env, const struct syscallname *name,
201274d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
201374d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
201474d753acSMika Westerberg {
201574d753acSMika Westerberg print_syscall_prologue(name);
201674d753acSMika Westerberg print_string(arg0, 0);
201774d753acSMika Westerberg print_file_mode(arg1, 1);
201874d753acSMika Westerberg print_syscall_epilogue(name);
201974d753acSMika Westerberg }
202074d753acSMika Westerberg #endif
202174d753acSMika Westerberg
20225844f4bcSFilip Bozuta #if defined(TARGET_NR_chown) || defined(TARGET_NR_lchown)
20235844f4bcSFilip Bozuta static void
print_chown(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2024a0939b89SPhilippe Mathieu-Daudé print_chown(CPUArchState *cpu_env, const struct syscallname *name,
20255844f4bcSFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
20265844f4bcSFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
20275844f4bcSFilip Bozuta {
20285844f4bcSFilip Bozuta print_syscall_prologue(name);
20295844f4bcSFilip Bozuta print_string(arg0, 0);
20305844f4bcSFilip Bozuta print_raw_param("%d", arg1, 0);
20315844f4bcSFilip Bozuta print_raw_param("%d", arg2, 1);
20325844f4bcSFilip Bozuta print_syscall_epilogue(name);
20335844f4bcSFilip Bozuta }
20345844f4bcSFilip Bozuta #define print_lchown print_chown
20355844f4bcSFilip Bozuta #endif
20365844f4bcSFilip Bozuta
203738860a03SAleksandar Markovic #ifdef TARGET_NR_clock_adjtime
203838860a03SAleksandar Markovic static void
print_clock_adjtime(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2039a0939b89SPhilippe Mathieu-Daudé print_clock_adjtime(CPUArchState *cpu_env, const struct syscallname *name,
204038860a03SAleksandar Markovic abi_long arg0, abi_long arg1, abi_long arg2,
204138860a03SAleksandar Markovic abi_long arg3, abi_long arg4, abi_long arg5)
204238860a03SAleksandar Markovic {
204338860a03SAleksandar Markovic print_syscall_prologue(name);
20441a674adfSFilip Bozuta print_enums(clockids, arg0, 0);
204538860a03SAleksandar Markovic print_pointer(arg1, 1);
204638860a03SAleksandar Markovic print_syscall_epilogue(name);
204738860a03SAleksandar Markovic }
204838860a03SAleksandar Markovic #endif
204938860a03SAleksandar Markovic
2050608e5592SLaurent Vivier #ifdef TARGET_NR_clone
do_print_clone(unsigned int flags,abi_ulong newsp,abi_ulong parent_tidptr,target_ulong newtls,abi_ulong child_tidptr)205184bd8284SLaurent Vivier static void do_print_clone(unsigned int flags, abi_ulong newsp,
205284bd8284SLaurent Vivier abi_ulong parent_tidptr, target_ulong newtls,
205384bd8284SLaurent Vivier abi_ulong child_tidptr)
205484bd8284SLaurent Vivier {
205584bd8284SLaurent Vivier print_flags(clone_flags, flags, 0);
205684bd8284SLaurent Vivier print_raw_param("child_stack=0x" TARGET_ABI_FMT_lx, newsp, 0);
205784bd8284SLaurent Vivier print_raw_param("parent_tidptr=0x" TARGET_ABI_FMT_lx, parent_tidptr, 0);
205884bd8284SLaurent Vivier print_raw_param("tls=0x" TARGET_ABI_FMT_lx, newtls, 0);
205984bd8284SLaurent Vivier print_raw_param("child_tidptr=0x" TARGET_ABI_FMT_lx, child_tidptr, 1);
206084bd8284SLaurent Vivier }
206184bd8284SLaurent Vivier
2062608e5592SLaurent Vivier static void
print_clone(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5,abi_long arg6)2063a0939b89SPhilippe Mathieu-Daudé print_clone(CPUArchState *cpu_env, const struct syscallname *name,
206484bd8284SLaurent Vivier abi_long arg1, abi_long arg2, abi_long arg3,
206584bd8284SLaurent Vivier abi_long arg4, abi_long arg5, abi_long arg6)
2066608e5592SLaurent Vivier {
2067608e5592SLaurent Vivier print_syscall_prologue(name);
206884bd8284SLaurent Vivier #if defined(TARGET_MICROBLAZE)
206984bd8284SLaurent Vivier do_print_clone(arg1, arg2, arg4, arg6, arg5);
207084bd8284SLaurent Vivier #elif defined(TARGET_CLONE_BACKWARDS)
207184bd8284SLaurent Vivier do_print_clone(arg1, arg2, arg3, arg4, arg5);
207284bd8284SLaurent Vivier #elif defined(TARGET_CLONE_BACKWARDS2)
207384bd8284SLaurent Vivier do_print_clone(arg2, arg1, arg3, arg5, arg4);
2074608e5592SLaurent Vivier #else
207584bd8284SLaurent Vivier do_print_clone(arg1, arg2, arg3, arg5, arg4);
2076608e5592SLaurent Vivier #endif
2077608e5592SLaurent Vivier print_syscall_epilogue(name);
2078608e5592SLaurent Vivier }
2079608e5592SLaurent Vivier #endif
2080608e5592SLaurent Vivier
208174d753acSMika Westerberg #ifdef TARGET_NR_creat
208274d753acSMika Westerberg static void
print_creat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2083a0939b89SPhilippe Mathieu-Daudé print_creat(CPUArchState *cpu_env, const struct syscallname *name,
208474d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
208574d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
208674d753acSMika Westerberg {
208774d753acSMika Westerberg print_syscall_prologue(name);
208874d753acSMika Westerberg print_string(arg0, 0);
208974d753acSMika Westerberg print_file_mode(arg1, 1);
209074d753acSMika Westerberg print_syscall_epilogue(name);
209174d753acSMika Westerberg }
209274d753acSMika Westerberg #endif
209374d753acSMika Westerberg
209474d753acSMika Westerberg #ifdef TARGET_NR_execv
209574d753acSMika Westerberg static void
print_execv(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2096a0939b89SPhilippe Mathieu-Daudé print_execv(CPUArchState *cpu_env, const struct syscallname *name,
209774d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
209874d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
209974d753acSMika Westerberg {
210074d753acSMika Westerberg print_syscall_prologue(name);
210174d753acSMika Westerberg print_string(arg0, 0);
2102d2ee72a5SLaurent Vivier print_raw_param("0x" TARGET_ABI_FMT_lx, arg1, 1);
210374d753acSMika Westerberg print_syscall_epilogue(name);
210474d753acSMika Westerberg }
210574d753acSMika Westerberg #endif
210674d753acSMika Westerberg
210724acb7b4SDrew DeVault static void
print_execve_argv(abi_long argv,int last)210824acb7b4SDrew DeVault print_execve_argv(abi_long argv, int last)
210924acb7b4SDrew DeVault {
211024acb7b4SDrew DeVault abi_ulong arg_ptr_addr;
211124acb7b4SDrew DeVault char *s;
211224acb7b4SDrew DeVault
211324acb7b4SDrew DeVault qemu_log("{");
211424acb7b4SDrew DeVault for (arg_ptr_addr = argv; ; arg_ptr_addr += sizeof(abi_ulong)) {
211524acb7b4SDrew DeVault abi_ulong *arg_ptr, arg_addr;
211624acb7b4SDrew DeVault
211724acb7b4SDrew DeVault arg_ptr = lock_user(VERIFY_READ, arg_ptr_addr, sizeof(abi_ulong), 1);
211824acb7b4SDrew DeVault if (!arg_ptr) {
211924acb7b4SDrew DeVault return;
212024acb7b4SDrew DeVault }
212124acb7b4SDrew DeVault arg_addr = tswapal(*arg_ptr);
212224acb7b4SDrew DeVault unlock_user(arg_ptr, arg_ptr_addr, 0);
212324acb7b4SDrew DeVault if (!arg_addr) {
212424acb7b4SDrew DeVault break;
212524acb7b4SDrew DeVault }
212624acb7b4SDrew DeVault s = lock_user_string(arg_addr);
212724acb7b4SDrew DeVault if (s) {
212824acb7b4SDrew DeVault qemu_log("\"%s\",", s);
212924acb7b4SDrew DeVault unlock_user(s, arg_addr, 0);
213024acb7b4SDrew DeVault }
213124acb7b4SDrew DeVault }
213224acb7b4SDrew DeVault qemu_log("NULL}%s", get_comma(last));
213324acb7b4SDrew DeVault }
213424acb7b4SDrew DeVault
213524acb7b4SDrew DeVault static void
print_execve(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5,abi_long arg6)213624acb7b4SDrew DeVault print_execve(CPUArchState *cpu_env, const struct syscallname *name,
213724acb7b4SDrew DeVault abi_long arg1, abi_long arg2, abi_long arg3,
213824acb7b4SDrew DeVault abi_long arg4, abi_long arg5, abi_long arg6)
213924acb7b4SDrew DeVault {
214024acb7b4SDrew DeVault print_syscall_prologue(name);
214124acb7b4SDrew DeVault print_string(arg1, 0);
214224acb7b4SDrew DeVault print_execve_argv(arg2, 1);
214324acb7b4SDrew DeVault print_syscall_epilogue(name);
214424acb7b4SDrew DeVault }
214524acb7b4SDrew DeVault
21465667a1aeSDrew DeVault static void
print_execveat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5,abi_long arg6)21475667a1aeSDrew DeVault print_execveat(CPUArchState *cpu_env, const struct syscallname *name,
21485667a1aeSDrew DeVault abi_long arg1, abi_long arg2, abi_long arg3,
21495667a1aeSDrew DeVault abi_long arg4, abi_long arg5, abi_long arg6)
21505667a1aeSDrew DeVault {
21515667a1aeSDrew DeVault print_syscall_prologue(name);
21525667a1aeSDrew DeVault print_at_dirfd(arg1, 0);
21535667a1aeSDrew DeVault print_string(arg2, 0);
21545667a1aeSDrew DeVault print_execve_argv(arg3, 0);
21555667a1aeSDrew DeVault print_flags(execveat_flags, arg5, 1);
21565667a1aeSDrew DeVault print_syscall_epilogue(name);
21575667a1aeSDrew DeVault }
21585667a1aeSDrew DeVault
215935a2c85fSWANG Xuerui #if defined(TARGET_NR_faccessat) || defined(TARGET_NR_faccessat2)
216074d753acSMika Westerberg static void
print_faccessat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2161a0939b89SPhilippe Mathieu-Daudé print_faccessat(CPUArchState *cpu_env, const struct syscallname *name,
216274d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
216374d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
216474d753acSMika Westerberg {
216574d753acSMika Westerberg print_syscall_prologue(name);
216674d753acSMika Westerberg print_at_dirfd(arg0, 0);
216774d753acSMika Westerberg print_string(arg1, 0);
216874d753acSMika Westerberg print_flags(access_flags, arg2, 0);
216974d753acSMika Westerberg print_flags(at_file_flags, arg3, 1);
217074d753acSMika Westerberg print_syscall_epilogue(name);
217174d753acSMika Westerberg }
217274d753acSMika Westerberg #endif
217374d753acSMika Westerberg
2174f4d92c5eSFilip Bozuta #ifdef TARGET_NR_fallocate
2175f4d92c5eSFilip Bozuta static void
print_fallocate(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2176a0939b89SPhilippe Mathieu-Daudé print_fallocate(CPUArchState *cpu_env, const struct syscallname *name,
2177f4d92c5eSFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
2178f4d92c5eSFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
2179f4d92c5eSFilip Bozuta {
2180f4d92c5eSFilip Bozuta print_syscall_prologue(name);
2181f4d92c5eSFilip Bozuta print_raw_param("%d", arg0, 0);
2182f4d92c5eSFilip Bozuta print_flags(falloc_flags, arg1, 0);
2183f4d92c5eSFilip Bozuta #if TARGET_ABI_BITS == 32
2184f4d92c5eSFilip Bozuta print_raw_param("%" PRIu64, target_offset64(arg2, arg3), 0);
2185f4d92c5eSFilip Bozuta print_raw_param("%" PRIu64, target_offset64(arg4, arg5), 1);
2186f4d92c5eSFilip Bozuta #else
2187f4d92c5eSFilip Bozuta print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
2188f4d92c5eSFilip Bozuta print_raw_param(TARGET_ABI_FMT_ld, arg3, 1);
2189f4d92c5eSFilip Bozuta #endif
2190f4d92c5eSFilip Bozuta print_syscall_epilogue(name);
2191f4d92c5eSFilip Bozuta }
2192f4d92c5eSFilip Bozuta #endif
2193f4d92c5eSFilip Bozuta
219474d753acSMika Westerberg #ifdef TARGET_NR_fchmodat
219574d753acSMika Westerberg static void
print_fchmodat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2196a0939b89SPhilippe Mathieu-Daudé print_fchmodat(CPUArchState *cpu_env, const struct syscallname *name,
219774d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
219874d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
219974d753acSMika Westerberg {
220074d753acSMika Westerberg print_syscall_prologue(name);
220174d753acSMika Westerberg print_at_dirfd(arg0, 0);
220274d753acSMika Westerberg print_string(arg1, 0);
220374d753acSMika Westerberg print_file_mode(arg2, 0);
220474d753acSMika Westerberg print_flags(at_file_flags, arg3, 1);
220574d753acSMika Westerberg print_syscall_epilogue(name);
220674d753acSMika Westerberg }
220774d753acSMika Westerberg #endif
220874d753acSMika Westerberg
220974d753acSMika Westerberg #ifdef TARGET_NR_fchownat
221074d753acSMika Westerberg static void
print_fchownat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2211a0939b89SPhilippe Mathieu-Daudé print_fchownat(CPUArchState *cpu_env, const struct syscallname *name,
221274d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
221374d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
221474d753acSMika Westerberg {
221574d753acSMika Westerberg print_syscall_prologue(name);
221674d753acSMika Westerberg print_at_dirfd(arg0, 0);
221774d753acSMika Westerberg print_string(arg1, 0);
2218d2ee72a5SLaurent Vivier print_raw_param("%d", arg2, 0);
2219d2ee72a5SLaurent Vivier print_raw_param("%d", arg3, 0);
222074d753acSMika Westerberg print_flags(at_file_flags, arg4, 1);
222174d753acSMika Westerberg print_syscall_epilogue(name);
222274d753acSMika Westerberg }
222374d753acSMika Westerberg #endif
222474d753acSMika Westerberg
222574d753acSMika Westerberg #if defined(TARGET_NR_fcntl) || defined(TARGET_NR_fcntl64)
222674d753acSMika Westerberg static void
print_fcntl(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2227a0939b89SPhilippe Mathieu-Daudé print_fcntl(CPUArchState *cpu_env, const struct syscallname *name,
222874d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
222974d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
223074d753acSMika Westerberg {
223174d753acSMika Westerberg print_syscall_prologue(name);
2232d2ee72a5SLaurent Vivier print_raw_param("%d", arg0, 0);
2233d95ec14fSLaurent Vivier switch(arg1) {
2234d95ec14fSLaurent Vivier case TARGET_F_DUPFD:
22354b25a506SJosh Kunz qemu_log("F_DUPFD,");
2236d95ec14fSLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2237d95ec14fSLaurent Vivier break;
2238d95ec14fSLaurent Vivier case TARGET_F_GETFD:
22394b25a506SJosh Kunz qemu_log("F_GETFD");
2240d95ec14fSLaurent Vivier break;
2241d95ec14fSLaurent Vivier case TARGET_F_SETFD:
22424b25a506SJosh Kunz qemu_log("F_SETFD,");
2243d95ec14fSLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2244d95ec14fSLaurent Vivier break;
2245d95ec14fSLaurent Vivier case TARGET_F_GETFL:
22464b25a506SJosh Kunz qemu_log("F_GETFL");
2247d95ec14fSLaurent Vivier break;
2248d95ec14fSLaurent Vivier case TARGET_F_SETFL:
22494b25a506SJosh Kunz qemu_log("F_SETFL,");
2250d95ec14fSLaurent Vivier print_open_flags(arg2, 1);
2251d95ec14fSLaurent Vivier break;
2252d95ec14fSLaurent Vivier case TARGET_F_GETLK:
22534b25a506SJosh Kunz qemu_log("F_GETLK,");
225474d753acSMika Westerberg print_pointer(arg2, 1);
2255d95ec14fSLaurent Vivier break;
2256d95ec14fSLaurent Vivier case TARGET_F_SETLK:
22574b25a506SJosh Kunz qemu_log("F_SETLK,");
2258d95ec14fSLaurent Vivier print_pointer(arg2, 1);
2259d95ec14fSLaurent Vivier break;
2260d95ec14fSLaurent Vivier case TARGET_F_SETLKW:
22614b25a506SJosh Kunz qemu_log("F_SETLKW,");
2262d95ec14fSLaurent Vivier print_pointer(arg2, 1);
2263d95ec14fSLaurent Vivier break;
2264d95ec14fSLaurent Vivier case TARGET_F_GETOWN:
22654b25a506SJosh Kunz qemu_log("F_GETOWN");
2266d95ec14fSLaurent Vivier break;
2267d95ec14fSLaurent Vivier case TARGET_F_SETOWN:
22684b25a506SJosh Kunz qemu_log("F_SETOWN,");
2269d95ec14fSLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
2270d95ec14fSLaurent Vivier break;
2271d95ec14fSLaurent Vivier case TARGET_F_GETSIG:
22724b25a506SJosh Kunz qemu_log("F_GETSIG");
2273d95ec14fSLaurent Vivier break;
2274d95ec14fSLaurent Vivier case TARGET_F_SETSIG:
22754b25a506SJosh Kunz qemu_log("F_SETSIG,");
2276d95ec14fSLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
2277d95ec14fSLaurent Vivier break;
2278d95ec14fSLaurent Vivier #if TARGET_ABI_BITS == 32
2279d95ec14fSLaurent Vivier case TARGET_F_GETLK64:
22804b25a506SJosh Kunz qemu_log("F_GETLK64,");
2281d95ec14fSLaurent Vivier print_pointer(arg2, 1);
2282d95ec14fSLaurent Vivier break;
2283d95ec14fSLaurent Vivier case TARGET_F_SETLK64:
22844b25a506SJosh Kunz qemu_log("F_SETLK64,");
2285d95ec14fSLaurent Vivier print_pointer(arg2, 1);
2286d95ec14fSLaurent Vivier break;
2287d95ec14fSLaurent Vivier case TARGET_F_SETLKW64:
22884b25a506SJosh Kunz qemu_log("F_SETLKW64,");
2289d95ec14fSLaurent Vivier print_pointer(arg2, 1);
2290d95ec14fSLaurent Vivier break;
2291d95ec14fSLaurent Vivier #endif
229238be863dSMike Gelfand case TARGET_F_OFD_GETLK:
229338be863dSMike Gelfand qemu_log("F_OFD_GETLK,");
229438be863dSMike Gelfand print_pointer(arg2, 1);
229538be863dSMike Gelfand break;
229638be863dSMike Gelfand case TARGET_F_OFD_SETLK:
229738be863dSMike Gelfand qemu_log("F_OFD_SETLK,");
229838be863dSMike Gelfand print_pointer(arg2, 1);
229938be863dSMike Gelfand break;
230038be863dSMike Gelfand case TARGET_F_OFD_SETLKW:
230138be863dSMike Gelfand qemu_log("F_OFD_SETLKW,");
230238be863dSMike Gelfand print_pointer(arg2, 1);
230338be863dSMike Gelfand break;
2304d95ec14fSLaurent Vivier case TARGET_F_SETLEASE:
23054b25a506SJosh Kunz qemu_log("F_SETLEASE,");
23062bb963ffSShu-Chun Weng print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
2307d95ec14fSLaurent Vivier break;
2308d95ec14fSLaurent Vivier case TARGET_F_GETLEASE:
23094b25a506SJosh Kunz qemu_log("F_GETLEASE");
2310d95ec14fSLaurent Vivier break;
23112bb963ffSShu-Chun Weng #ifdef F_DUPFD_CLOEXEC
23122bb963ffSShu-Chun Weng case TARGET_F_DUPFD_CLOEXEC:
23132bb963ffSShu-Chun Weng qemu_log("F_DUPFD_CLOEXEC,");
23142bb963ffSShu-Chun Weng print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
23152bb963ffSShu-Chun Weng break;
23162bb963ffSShu-Chun Weng #endif
23172bb963ffSShu-Chun Weng case TARGET_F_NOTIFY:
23182bb963ffSShu-Chun Weng qemu_log("F_NOTIFY,");
23192bb963ffSShu-Chun Weng print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
23202bb963ffSShu-Chun Weng break;
23212bb963ffSShu-Chun Weng #ifdef F_GETOWN_EX
23222bb963ffSShu-Chun Weng case TARGET_F_GETOWN_EX:
23232bb963ffSShu-Chun Weng qemu_log("F_GETOWN_EX,");
23242bb963ffSShu-Chun Weng print_pointer(arg2, 1);
23252bb963ffSShu-Chun Weng break;
23262bb963ffSShu-Chun Weng #endif
23272bb963ffSShu-Chun Weng #ifdef F_SETOWN_EX
23282bb963ffSShu-Chun Weng case TARGET_F_SETOWN_EX:
23292bb963ffSShu-Chun Weng qemu_log("F_SETOWN_EX,");
23302bb963ffSShu-Chun Weng print_pointer(arg2, 1);
23312bb963ffSShu-Chun Weng break;
23322bb963ffSShu-Chun Weng #endif
23332bb963ffSShu-Chun Weng #ifdef F_SETPIPE_SZ
23347e3b92ecSPeter Maydell case TARGET_F_SETPIPE_SZ:
23354b25a506SJosh Kunz qemu_log("F_SETPIPE_SZ,");
23367e3b92ecSPeter Maydell print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
23377e3b92ecSPeter Maydell break;
23387e3b92ecSPeter Maydell case TARGET_F_GETPIPE_SZ:
23394b25a506SJosh Kunz qemu_log("F_GETPIPE_SZ");
23407e3b92ecSPeter Maydell break;
23412bb963ffSShu-Chun Weng #endif
23422bb963ffSShu-Chun Weng #ifdef F_ADD_SEALS
23432bb963ffSShu-Chun Weng case TARGET_F_ADD_SEALS:
23442bb963ffSShu-Chun Weng qemu_log("F_ADD_SEALS,");
23452bb963ffSShu-Chun Weng print_raw_param("0x"TARGET_ABI_FMT_lx, arg2, 1);
2346d95ec14fSLaurent Vivier break;
23472bb963ffSShu-Chun Weng case TARGET_F_GET_SEALS:
23482bb963ffSShu-Chun Weng qemu_log("F_GET_SEALS");
2349d95ec14fSLaurent Vivier break;
23502bb963ffSShu-Chun Weng #endif
2351d95ec14fSLaurent Vivier default:
2352d95ec14fSLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
2353d95ec14fSLaurent Vivier print_pointer(arg2, 1);
2354d95ec14fSLaurent Vivier break;
2355d95ec14fSLaurent Vivier }
235674d753acSMika Westerberg print_syscall_epilogue(name);
235774d753acSMika Westerberg }
235874d753acSMika Westerberg #define print_fcntl64 print_fcntl
235974d753acSMika Westerberg #endif
236074d753acSMika Westerberg
23614fc3cddeSFilip Bozuta #ifdef TARGET_NR_fgetxattr
23624fc3cddeSFilip Bozuta static void
print_fgetxattr(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2363a0939b89SPhilippe Mathieu-Daudé print_fgetxattr(CPUArchState *cpu_env, const struct syscallname *name,
23644fc3cddeSFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
23654fc3cddeSFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
23664fc3cddeSFilip Bozuta {
23674fc3cddeSFilip Bozuta print_syscall_prologue(name);
23684fc3cddeSFilip Bozuta print_raw_param("%d", arg0, 0);
23694fc3cddeSFilip Bozuta print_string(arg1, 0);
23704fc3cddeSFilip Bozuta print_pointer(arg2, 0);
23714fc3cddeSFilip Bozuta print_raw_param(TARGET_FMT_lu, arg3, 1);
23724fc3cddeSFilip Bozuta print_syscall_epilogue(name);
23734fc3cddeSFilip Bozuta }
23744fc3cddeSFilip Bozuta #endif
23754fc3cddeSFilip Bozuta
23764fc3cddeSFilip Bozuta #ifdef TARGET_NR_flistxattr
23774fc3cddeSFilip Bozuta static void
print_flistxattr(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2378a0939b89SPhilippe Mathieu-Daudé print_flistxattr(CPUArchState *cpu_env, const struct syscallname *name,
23794fc3cddeSFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
23804fc3cddeSFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
23814fc3cddeSFilip Bozuta {
23824fc3cddeSFilip Bozuta print_syscall_prologue(name);
23834fc3cddeSFilip Bozuta print_raw_param("%d", arg0, 0);
23844fc3cddeSFilip Bozuta print_pointer(arg1, 0);
23854fc3cddeSFilip Bozuta print_raw_param(TARGET_FMT_lu, arg2, 1);
23864fc3cddeSFilip Bozuta print_syscall_epilogue(name);
23874fc3cddeSFilip Bozuta }
23884fc3cddeSFilip Bozuta #endif
23894fc3cddeSFilip Bozuta
23904fc3cddeSFilip Bozuta #if defined(TARGET_NR_getxattr) || defined(TARGET_NR_lgetxattr)
23914fc3cddeSFilip Bozuta static void
print_getxattr(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2392a0939b89SPhilippe Mathieu-Daudé print_getxattr(CPUArchState *cpu_env, const struct syscallname *name,
23934fc3cddeSFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
23944fc3cddeSFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
23954fc3cddeSFilip Bozuta {
23964fc3cddeSFilip Bozuta print_syscall_prologue(name);
23974fc3cddeSFilip Bozuta print_string(arg0, 0);
23984fc3cddeSFilip Bozuta print_string(arg1, 0);
23994fc3cddeSFilip Bozuta print_pointer(arg2, 0);
24004fc3cddeSFilip Bozuta print_raw_param(TARGET_FMT_lu, arg3, 1);
24014fc3cddeSFilip Bozuta print_syscall_epilogue(name);
24024fc3cddeSFilip Bozuta }
24034fc3cddeSFilip Bozuta #define print_lgetxattr print_getxattr
24044fc3cddeSFilip Bozuta #endif
24054fc3cddeSFilip Bozuta
24064fc3cddeSFilip Bozuta #if defined(TARGET_NR_listxattr) || defined(TARGET_NR_llistxattr)
24074fc3cddeSFilip Bozuta static void
print_listxattr(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2408a0939b89SPhilippe Mathieu-Daudé print_listxattr(CPUArchState *cpu_env, const struct syscallname *name,
24094fc3cddeSFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
24104fc3cddeSFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
24114fc3cddeSFilip Bozuta {
24124fc3cddeSFilip Bozuta print_syscall_prologue(name);
24134fc3cddeSFilip Bozuta print_string(arg0, 0);
24144fc3cddeSFilip Bozuta print_pointer(arg1, 0);
24154fc3cddeSFilip Bozuta print_raw_param(TARGET_FMT_lu, arg2, 1);
24164fc3cddeSFilip Bozuta print_syscall_epilogue(name);
24174fc3cddeSFilip Bozuta }
24184fc3cddeSFilip Bozuta #define print_llistxattr print_listxattr
24194fc3cddeSFilip Bozuta #endif
24204fc3cddeSFilip Bozuta
24214fc3cddeSFilip Bozuta #if defined(TARGET_NR_fremovexattr)
24224fc3cddeSFilip Bozuta static void
print_fremovexattr(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2423a0939b89SPhilippe Mathieu-Daudé print_fremovexattr(CPUArchState *cpu_env, const struct syscallname *name,
24244fc3cddeSFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
24254fc3cddeSFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
24264fc3cddeSFilip Bozuta {
24274fc3cddeSFilip Bozuta print_syscall_prologue(name);
24284fc3cddeSFilip Bozuta print_raw_param("%d", arg0, 0);
24294fc3cddeSFilip Bozuta print_string(arg1, 1);
24304fc3cddeSFilip Bozuta print_syscall_epilogue(name);
24314fc3cddeSFilip Bozuta }
24324fc3cddeSFilip Bozuta #endif
24334fc3cddeSFilip Bozuta
24344fc3cddeSFilip Bozuta #if defined(TARGET_NR_removexattr) || defined(TARGET_NR_lremovexattr)
24354fc3cddeSFilip Bozuta static void
print_removexattr(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2436a0939b89SPhilippe Mathieu-Daudé print_removexattr(CPUArchState *cpu_env, const struct syscallname *name,
24374fc3cddeSFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
24384fc3cddeSFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
24394fc3cddeSFilip Bozuta {
24404fc3cddeSFilip Bozuta print_syscall_prologue(name);
24414fc3cddeSFilip Bozuta print_string(arg0, 0);
24424fc3cddeSFilip Bozuta print_string(arg1, 1);
24434fc3cddeSFilip Bozuta print_syscall_epilogue(name);
24444fc3cddeSFilip Bozuta }
24454fc3cddeSFilip Bozuta #define print_lremovexattr print_removexattr
24464fc3cddeSFilip Bozuta #endif
24474fc3cddeSFilip Bozuta
244874d753acSMika Westerberg #ifdef TARGET_NR_futimesat
244974d753acSMika Westerberg static void
print_futimesat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2450a0939b89SPhilippe Mathieu-Daudé print_futimesat(CPUArchState *cpu_env, const struct syscallname *name,
245174d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
245274d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
245374d753acSMika Westerberg {
245474d753acSMika Westerberg print_syscall_prologue(name);
245574d753acSMika Westerberg print_at_dirfd(arg0, 0);
245674d753acSMika Westerberg print_string(arg1, 0);
245774d753acSMika Westerberg print_timeval(arg2, 0);
245874d753acSMika Westerberg print_timeval(arg2 + sizeof (struct target_timeval), 1);
245974d753acSMika Westerberg print_syscall_epilogue(name);
246074d753acSMika Westerberg }
246174d753acSMika Westerberg #endif
246274d753acSMika Westerberg
24631a674adfSFilip Bozuta #ifdef TARGET_NR_gettimeofday
24641a674adfSFilip Bozuta static void
print_gettimeofday(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2465a0939b89SPhilippe Mathieu-Daudé print_gettimeofday(CPUArchState *cpu_env, const struct syscallname *name,
24661a674adfSFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
24671a674adfSFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
24681a674adfSFilip Bozuta {
24691a674adfSFilip Bozuta print_syscall_prologue(name);
24701a674adfSFilip Bozuta print_pointer(arg0, 0);
24711a674adfSFilip Bozuta print_pointer(arg1, 1);
24721a674adfSFilip Bozuta print_syscall_epilogue(name);
24731a674adfSFilip Bozuta }
24741a674adfSFilip Bozuta #endif
24751a674adfSFilip Bozuta
24760d2187c4SPhilippe Mathieu-Daudé #ifdef TARGET_NR_settimeofday
24770d2187c4SPhilippe Mathieu-Daudé static void
print_settimeofday(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2478a0939b89SPhilippe Mathieu-Daudé print_settimeofday(CPUArchState *cpu_env, const struct syscallname *name,
24790d2187c4SPhilippe Mathieu-Daudé abi_long arg0, abi_long arg1, abi_long arg2,
24800d2187c4SPhilippe Mathieu-Daudé abi_long arg3, abi_long arg4, abi_long arg5)
24810d2187c4SPhilippe Mathieu-Daudé {
24820d2187c4SPhilippe Mathieu-Daudé print_syscall_prologue(name);
24830d2187c4SPhilippe Mathieu-Daudé print_timeval(arg0, 0);
24840d2187c4SPhilippe Mathieu-Daudé print_timezone(arg1, 1);
24850d2187c4SPhilippe Mathieu-Daudé print_syscall_epilogue(name);
24860d2187c4SPhilippe Mathieu-Daudé }
24870d2187c4SPhilippe Mathieu-Daudé #endif
24880d2187c4SPhilippe Mathieu-Daudé
24891a674adfSFilip Bozuta #if defined(TARGET_NR_clock_gettime) || defined(TARGET_NR_clock_getres)
24901a674adfSFilip Bozuta static void
print_clock_gettime(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2491a0939b89SPhilippe Mathieu-Daudé print_clock_gettime(CPUArchState *cpu_env, const struct syscallname *name,
24921a674adfSFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
24931a674adfSFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
24941a674adfSFilip Bozuta {
24951a674adfSFilip Bozuta print_syscall_prologue(name);
24961a674adfSFilip Bozuta print_enums(clockids, arg0, 0);
24971a674adfSFilip Bozuta print_pointer(arg1, 1);
24981a674adfSFilip Bozuta print_syscall_epilogue(name);
24991a674adfSFilip Bozuta }
25001a674adfSFilip Bozuta #define print_clock_getres print_clock_gettime
25011a674adfSFilip Bozuta #endif
25021a674adfSFilip Bozuta
2503aad43d15SHelge Deller #if defined(TARGET_NR_clock_gettime64)
2504aad43d15SHelge Deller static void
print_clock_gettime64(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2505aad43d15SHelge Deller print_clock_gettime64(CPUArchState *cpu_env, const struct syscallname *name,
2506aad43d15SHelge Deller abi_long arg0, abi_long arg1, abi_long arg2,
2507aad43d15SHelge Deller abi_long arg3, abi_long arg4, abi_long arg5)
2508aad43d15SHelge Deller {
2509aad43d15SHelge Deller print_syscall_prologue(name);
2510aad43d15SHelge Deller print_enums(clockids, arg0, 0);
2511aad43d15SHelge Deller print_pointer(arg1, 1);
2512aad43d15SHelge Deller print_syscall_epilogue(name);
2513aad43d15SHelge Deller }
2514aad43d15SHelge Deller #endif
2515aad43d15SHelge Deller
25161a674adfSFilip Bozuta #ifdef TARGET_NR_clock_settime
25171a674adfSFilip Bozuta static void
print_clock_settime(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2518a0939b89SPhilippe Mathieu-Daudé print_clock_settime(CPUArchState *cpu_env, const struct syscallname *name,
25191a674adfSFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
25201a674adfSFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
25211a674adfSFilip Bozuta {
25221a674adfSFilip Bozuta print_syscall_prologue(name);
25231a674adfSFilip Bozuta print_enums(clockids, arg0, 0);
25241a674adfSFilip Bozuta print_timespec(arg1, 1);
25251a674adfSFilip Bozuta print_syscall_epilogue(name);
25261a674adfSFilip Bozuta }
25271a674adfSFilip Bozuta #endif
25281a674adfSFilip Bozuta
25291a674adfSFilip Bozuta #ifdef TARGET_NR_getitimer
25301a674adfSFilip Bozuta static void
print_getitimer(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2531a0939b89SPhilippe Mathieu-Daudé print_getitimer(CPUArchState *cpu_env, const struct syscallname *name,
25321a674adfSFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
25331a674adfSFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
25341a674adfSFilip Bozuta {
25351a674adfSFilip Bozuta print_syscall_prologue(name);
25361a674adfSFilip Bozuta print_enums(itimer_types, arg0, 0);
25371a674adfSFilip Bozuta print_pointer(arg1, 1);
25381a674adfSFilip Bozuta print_syscall_epilogue(name);
25391a674adfSFilip Bozuta }
25401a674adfSFilip Bozuta #endif
25411a674adfSFilip Bozuta
25421a674adfSFilip Bozuta #ifdef TARGET_NR_setitimer
25431a674adfSFilip Bozuta static void
print_setitimer(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2544a0939b89SPhilippe Mathieu-Daudé print_setitimer(CPUArchState *cpu_env, const struct syscallname *name,
25451a674adfSFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
25461a674adfSFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
25471a674adfSFilip Bozuta {
25481a674adfSFilip Bozuta print_syscall_prologue(name);
25491a674adfSFilip Bozuta print_enums(itimer_types, arg0, 0);
25501a674adfSFilip Bozuta print_itimerval(arg1, 0);
25511a674adfSFilip Bozuta print_pointer(arg2, 1);
25521a674adfSFilip Bozuta print_syscall_epilogue(name);
25531a674adfSFilip Bozuta }
25541a674adfSFilip Bozuta #endif
25551a674adfSFilip Bozuta
255674d753acSMika Westerberg #ifdef TARGET_NR_link
255774d753acSMika Westerberg static void
print_link(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2558a0939b89SPhilippe Mathieu-Daudé print_link(CPUArchState *cpu_env, const struct syscallname *name,
255974d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
256074d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
256174d753acSMika Westerberg {
256274d753acSMika Westerberg print_syscall_prologue(name);
256374d753acSMika Westerberg print_string(arg0, 0);
256474d753acSMika Westerberg print_string(arg1, 1);
256574d753acSMika Westerberg print_syscall_epilogue(name);
256674d753acSMika Westerberg }
256774d753acSMika Westerberg #endif
256874d753acSMika Westerberg
256974d753acSMika Westerberg #ifdef TARGET_NR_linkat
257074d753acSMika Westerberg static void
print_linkat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2571a0939b89SPhilippe Mathieu-Daudé print_linkat(CPUArchState *cpu_env, const struct syscallname *name,
257274d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
257374d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
257474d753acSMika Westerberg {
257574d753acSMika Westerberg print_syscall_prologue(name);
257674d753acSMika Westerberg print_at_dirfd(arg0, 0);
257774d753acSMika Westerberg print_string(arg1, 0);
257874d753acSMika Westerberg print_at_dirfd(arg2, 0);
257974d753acSMika Westerberg print_string(arg3, 0);
258074d753acSMika Westerberg print_flags(at_file_flags, arg4, 1);
258174d753acSMika Westerberg print_syscall_epilogue(name);
258274d753acSMika Westerberg }
258374d753acSMika Westerberg #endif
258474d753acSMika Westerberg
25859f771ad8SKito Cheng #if defined(TARGET_NR__llseek) || defined(TARGET_NR_llseek)
2586608e5592SLaurent Vivier static void
print__llseek(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2587a0939b89SPhilippe Mathieu-Daudé print__llseek(CPUArchState *cpu_env, const struct syscallname *name,
2588608e5592SLaurent Vivier abi_long arg0, abi_long arg1, abi_long arg2,
2589608e5592SLaurent Vivier abi_long arg3, abi_long arg4, abi_long arg5)
2590608e5592SLaurent Vivier {
2591608e5592SLaurent Vivier const char *whence = "UNKNOWN";
2592608e5592SLaurent Vivier print_syscall_prologue(name);
2593608e5592SLaurent Vivier print_raw_param("%d", arg0, 0);
2594608e5592SLaurent Vivier print_raw_param("%ld", arg1, 0);
2595608e5592SLaurent Vivier print_raw_param("%ld", arg2, 0);
2596608e5592SLaurent Vivier print_pointer(arg3, 0);
2597608e5592SLaurent Vivier switch(arg4) {
2598608e5592SLaurent Vivier case SEEK_SET: whence = "SEEK_SET"; break;
2599608e5592SLaurent Vivier case SEEK_CUR: whence = "SEEK_CUR"; break;
2600608e5592SLaurent Vivier case SEEK_END: whence = "SEEK_END"; break;
2601608e5592SLaurent Vivier }
26024b25a506SJosh Kunz qemu_log("%s", whence);
2603608e5592SLaurent Vivier print_syscall_epilogue(name);
2604608e5592SLaurent Vivier }
26059f771ad8SKito Cheng #define print_llseek print__llseek
2606608e5592SLaurent Vivier #endif
2607608e5592SLaurent Vivier
2608af861deaSFilip Bozuta #ifdef TARGET_NR_lseek
2609af861deaSFilip Bozuta static void
print_lseek(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2610a0939b89SPhilippe Mathieu-Daudé print_lseek(CPUArchState *cpu_env, const struct syscallname *name,
2611af861deaSFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
2612af861deaSFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
2613af861deaSFilip Bozuta {
2614af861deaSFilip Bozuta print_syscall_prologue(name);
2615af861deaSFilip Bozuta print_raw_param("%d", arg0, 0);
2616af861deaSFilip Bozuta print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
2617af861deaSFilip Bozuta switch (arg2) {
2618af861deaSFilip Bozuta case SEEK_SET:
2619af861deaSFilip Bozuta qemu_log("SEEK_SET"); break;
2620af861deaSFilip Bozuta case SEEK_CUR:
2621af861deaSFilip Bozuta qemu_log("SEEK_CUR"); break;
2622af861deaSFilip Bozuta case SEEK_END:
2623af861deaSFilip Bozuta qemu_log("SEEK_END"); break;
2624af861deaSFilip Bozuta #ifdef SEEK_DATA
2625af861deaSFilip Bozuta case SEEK_DATA:
2626af861deaSFilip Bozuta qemu_log("SEEK_DATA"); break;
2627af861deaSFilip Bozuta #endif
2628af861deaSFilip Bozuta #ifdef SEEK_HOLE
2629af861deaSFilip Bozuta case SEEK_HOLE:
2630af861deaSFilip Bozuta qemu_log("SEEK_HOLE"); break;
2631af861deaSFilip Bozuta #endif
2632af861deaSFilip Bozuta default:
2633af861deaSFilip Bozuta print_raw_param("%#x", arg2, 1);
2634af861deaSFilip Bozuta }
2635af861deaSFilip Bozuta print_syscall_epilogue(name);
2636af861deaSFilip Bozuta }
2637af861deaSFilip Bozuta #endif
2638af861deaSFilip Bozuta
26397c89f343SFilip Bozuta #ifdef TARGET_NR_truncate
26407c89f343SFilip Bozuta static void
print_truncate(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2641a0939b89SPhilippe Mathieu-Daudé print_truncate(CPUArchState *cpu_env, const struct syscallname *name,
26427c89f343SFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
26437c89f343SFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
26447c89f343SFilip Bozuta {
26457c89f343SFilip Bozuta print_syscall_prologue(name);
26467c89f343SFilip Bozuta print_string(arg0, 0);
26477c89f343SFilip Bozuta print_raw_param(TARGET_ABI_FMT_ld, arg1, 1);
26487c89f343SFilip Bozuta print_syscall_epilogue(name);
26497c89f343SFilip Bozuta }
26507c89f343SFilip Bozuta #endif
26517c89f343SFilip Bozuta
26527c89f343SFilip Bozuta #ifdef TARGET_NR_truncate64
26537c89f343SFilip Bozuta static void
print_truncate64(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2654a0939b89SPhilippe Mathieu-Daudé print_truncate64(CPUArchState *cpu_env, const struct syscallname *name,
26557c89f343SFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
26567c89f343SFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
26577c89f343SFilip Bozuta {
26587c89f343SFilip Bozuta print_syscall_prologue(name);
26597c89f343SFilip Bozuta print_string(arg0, 0);
26607c89f343SFilip Bozuta if (regpairs_aligned(cpu_env, TARGET_NR_truncate64)) {
26617c89f343SFilip Bozuta arg1 = arg2;
26627c89f343SFilip Bozuta arg2 = arg3;
26637c89f343SFilip Bozuta }
26647c89f343SFilip Bozuta print_raw_param("%" PRIu64, target_offset64(arg1, arg2), 1);
26657c89f343SFilip Bozuta print_syscall_epilogue(name);
26667c89f343SFilip Bozuta }
26677c89f343SFilip Bozuta #endif
26687c89f343SFilip Bozuta
26697c89f343SFilip Bozuta #ifdef TARGET_NR_ftruncate64
26707c89f343SFilip Bozuta static void
print_ftruncate64(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2671a0939b89SPhilippe Mathieu-Daudé print_ftruncate64(CPUArchState *cpu_env, const struct syscallname *name,
26727c89f343SFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
26737c89f343SFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
26747c89f343SFilip Bozuta {
26757c89f343SFilip Bozuta print_syscall_prologue(name);
26767c89f343SFilip Bozuta print_raw_param("%d", arg0, 0);
26777c89f343SFilip Bozuta if (regpairs_aligned(cpu_env, TARGET_NR_ftruncate64)) {
26787c89f343SFilip Bozuta arg1 = arg2;
26797c89f343SFilip Bozuta arg2 = arg3;
26807c89f343SFilip Bozuta }
26817c89f343SFilip Bozuta print_raw_param("%" PRIu64, target_offset64(arg1, arg2), 1);
26827c89f343SFilip Bozuta print_syscall_epilogue(name);
26837c89f343SFilip Bozuta }
26847c89f343SFilip Bozuta #endif
26857c89f343SFilip Bozuta
268602e5d7d7SFilip Bozuta #ifdef TARGET_NR_mlockall
268702e5d7d7SFilip Bozuta static void
print_mlockall(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2688a0939b89SPhilippe Mathieu-Daudé print_mlockall(CPUArchState *cpu_env, const struct syscallname *name,
268902e5d7d7SFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
269002e5d7d7SFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
269102e5d7d7SFilip Bozuta {
269202e5d7d7SFilip Bozuta print_syscall_prologue(name);
269302e5d7d7SFilip Bozuta print_flags(mlockall_flags, arg0, 1);
269402e5d7d7SFilip Bozuta print_syscall_epilogue(name);
269502e5d7d7SFilip Bozuta }
269602e5d7d7SFilip Bozuta #endif
269702e5d7d7SFilip Bozuta
26988997d1bdSLaurent Vivier #if defined(TARGET_NR_socket)
26998997d1bdSLaurent Vivier static void
print_socket(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)2700a0939b89SPhilippe Mathieu-Daudé print_socket(CPUArchState *cpu_env, const struct syscallname *name,
27018997d1bdSLaurent Vivier abi_long arg0, abi_long arg1, abi_long arg2,
27028997d1bdSLaurent Vivier abi_long arg3, abi_long arg4, abi_long arg5)
27038997d1bdSLaurent Vivier {
27048997d1bdSLaurent Vivier abi_ulong domain = arg0, type = arg1, protocol = arg2;
27058997d1bdSLaurent Vivier
27068997d1bdSLaurent Vivier print_syscall_prologue(name);
27078997d1bdSLaurent Vivier print_socket_domain(domain);
27084b25a506SJosh Kunz qemu_log(",");
27098997d1bdSLaurent Vivier print_socket_type(type);
27104b25a506SJosh Kunz qemu_log(",");
27118997d1bdSLaurent Vivier if (domain == AF_PACKET ||
27128997d1bdSLaurent Vivier (domain == AF_INET && type == TARGET_SOCK_PACKET)) {
27138997d1bdSLaurent Vivier protocol = tswap16(protocol);
27148997d1bdSLaurent Vivier }
27158997d1bdSLaurent Vivier print_socket_protocol(domain, type, protocol);
27168997d1bdSLaurent Vivier print_syscall_epilogue(name);
27178997d1bdSLaurent Vivier }
27188997d1bdSLaurent Vivier
27198997d1bdSLaurent Vivier #endif
27208997d1bdSLaurent Vivier
2721bb10540eSPhilippe Mathieu-Daudé #if defined(TARGET_NR_socketcall) || defined(TARGET_NR_bind)
2722fb3aabf3SLaurent Vivier
print_sockfd(abi_long sockfd,int last)2723d84fe1edSPhilippe Mathieu-Daudé static void print_sockfd(abi_long sockfd, int last)
2724d84fe1edSPhilippe Mathieu-Daudé {
2725d84fe1edSPhilippe Mathieu-Daudé print_raw_param(TARGET_ABI_FMT_ld, sockfd, last);
2726d84fe1edSPhilippe Mathieu-Daudé }
2727d84fe1edSPhilippe Mathieu-Daudé
2728d84fe1edSPhilippe Mathieu-Daudé #endif
2729d84fe1edSPhilippe Mathieu-Daudé
2730d84fe1edSPhilippe Mathieu-Daudé #if defined(TARGET_NR_socketcall)
2731d84fe1edSPhilippe Mathieu-Daudé
2732fb3aabf3SLaurent Vivier #define get_user_ualx(x, gaddr, idx) \
2733fb3aabf3SLaurent Vivier get_user_ual(x, (gaddr) + (idx) * sizeof(abi_long))
2734fb3aabf3SLaurent Vivier
do_print_socket(const char * name,abi_long arg1)2735fb3aabf3SLaurent Vivier static void do_print_socket(const char *name, abi_long arg1)
2736fb3aabf3SLaurent Vivier {
2737fb3aabf3SLaurent Vivier abi_ulong domain, type, protocol;
2738fb3aabf3SLaurent Vivier
2739fb3aabf3SLaurent Vivier get_user_ualx(domain, arg1, 0);
2740fb3aabf3SLaurent Vivier get_user_ualx(type, arg1, 1);
2741fb3aabf3SLaurent Vivier get_user_ualx(protocol, arg1, 2);
27424b25a506SJosh Kunz qemu_log("%s(", name);
2743fb3aabf3SLaurent Vivier print_socket_domain(domain);
27444b25a506SJosh Kunz qemu_log(",");
2745fb3aabf3SLaurent Vivier print_socket_type(type);
27464b25a506SJosh Kunz qemu_log(",");
2747fb3aabf3SLaurent Vivier if (domain == AF_PACKET ||
2748fb3aabf3SLaurent Vivier (domain == AF_INET && type == TARGET_SOCK_PACKET)) {
2749fb3aabf3SLaurent Vivier protocol = tswap16(protocol);
2750fb3aabf3SLaurent Vivier }
2751fb3aabf3SLaurent Vivier print_socket_protocol(domain, type, protocol);
27524b25a506SJosh Kunz qemu_log(")");
2753fb3aabf3SLaurent Vivier }
2754fb3aabf3SLaurent Vivier
do_print_sockaddr(const char * name,abi_long arg1)2755fb3aabf3SLaurent Vivier static void do_print_sockaddr(const char *name, abi_long arg1)
2756fb3aabf3SLaurent Vivier {
2757fb3aabf3SLaurent Vivier abi_ulong sockfd, addr, addrlen;
2758fb3aabf3SLaurent Vivier
2759fb3aabf3SLaurent Vivier get_user_ualx(sockfd, arg1, 0);
2760fb3aabf3SLaurent Vivier get_user_ualx(addr, arg1, 1);
2761fb3aabf3SLaurent Vivier get_user_ualx(addrlen, arg1, 2);
2762fb3aabf3SLaurent Vivier
27634b25a506SJosh Kunz qemu_log("%s(", name);
2764d84fe1edSPhilippe Mathieu-Daudé print_sockfd(sockfd, 0);
276542b15d70SPhilippe Mathieu-Daudé print_sockaddr(addr, addrlen, 0);
27664b25a506SJosh Kunz qemu_log(")");
2767fb3aabf3SLaurent Vivier }
2768fb3aabf3SLaurent Vivier
do_print_listen(const char * name,abi_long arg1)2769fb3aabf3SLaurent Vivier static void do_print_listen(const char *name, abi_long arg1)
2770fb3aabf3SLaurent Vivier {
2771fb3aabf3SLaurent Vivier abi_ulong sockfd, backlog;
2772fb3aabf3SLaurent Vivier
2773fb3aabf3SLaurent Vivier get_user_ualx(sockfd, arg1, 0);
2774fb3aabf3SLaurent Vivier get_user_ualx(backlog, arg1, 1);
2775fb3aabf3SLaurent Vivier
27764b25a506SJosh Kunz qemu_log("%s(", name);
2777d84fe1edSPhilippe Mathieu-Daudé print_sockfd(sockfd, 0);
2778fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, backlog, 1);
27794b25a506SJosh Kunz qemu_log(")");
2780fb3aabf3SLaurent Vivier }
2781fb3aabf3SLaurent Vivier
do_print_socketpair(const char * name,abi_long arg1)2782fb3aabf3SLaurent Vivier static void do_print_socketpair(const char *name, abi_long arg1)
2783fb3aabf3SLaurent Vivier {
2784fb3aabf3SLaurent Vivier abi_ulong domain, type, protocol, tab;
2785fb3aabf3SLaurent Vivier
2786fb3aabf3SLaurent Vivier get_user_ualx(domain, arg1, 0);
2787fb3aabf3SLaurent Vivier get_user_ualx(type, arg1, 1);
2788fb3aabf3SLaurent Vivier get_user_ualx(protocol, arg1, 2);
2789fb3aabf3SLaurent Vivier get_user_ualx(tab, arg1, 3);
2790fb3aabf3SLaurent Vivier
27914b25a506SJosh Kunz qemu_log("%s(", name);
2792fb3aabf3SLaurent Vivier print_socket_domain(domain);
27934b25a506SJosh Kunz qemu_log(",");
2794fb3aabf3SLaurent Vivier print_socket_type(type);
27954b25a506SJosh Kunz qemu_log(",");
2796fb3aabf3SLaurent Vivier print_socket_protocol(domain, type, protocol);
27974b25a506SJosh Kunz qemu_log(",");
2798fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_lx, tab, 1);
27994b25a506SJosh Kunz qemu_log(")");
2800fb3aabf3SLaurent Vivier }
2801fb3aabf3SLaurent Vivier
do_print_sendrecv(const char * name,abi_long arg1)2802fb3aabf3SLaurent Vivier static void do_print_sendrecv(const char *name, abi_long arg1)
2803fb3aabf3SLaurent Vivier {
2804fb3aabf3SLaurent Vivier abi_ulong sockfd, msg, len, flags;
2805fb3aabf3SLaurent Vivier
2806fb3aabf3SLaurent Vivier get_user_ualx(sockfd, arg1, 0);
2807fb3aabf3SLaurent Vivier get_user_ualx(msg, arg1, 1);
2808fb3aabf3SLaurent Vivier get_user_ualx(len, arg1, 2);
2809fb3aabf3SLaurent Vivier get_user_ualx(flags, arg1, 3);
2810fb3aabf3SLaurent Vivier
28114b25a506SJosh Kunz qemu_log("%s(", name);
2812d84fe1edSPhilippe Mathieu-Daudé print_sockfd(sockfd, 0);
281357fbc9b9SPhilippe Mathieu-Daudé print_buf_len(msg, len, 0);
2814fb3aabf3SLaurent Vivier print_flags(msg_flags, flags, 1);
28154b25a506SJosh Kunz qemu_log(")");
2816fb3aabf3SLaurent Vivier }
2817fb3aabf3SLaurent Vivier
do_print_msgaddr(const char * name,abi_long arg1)2818fb3aabf3SLaurent Vivier static void do_print_msgaddr(const char *name, abi_long arg1)
2819fb3aabf3SLaurent Vivier {
2820fb3aabf3SLaurent Vivier abi_ulong sockfd, msg, len, flags, addr, addrlen;
2821fb3aabf3SLaurent Vivier
2822fb3aabf3SLaurent Vivier get_user_ualx(sockfd, arg1, 0);
2823fb3aabf3SLaurent Vivier get_user_ualx(msg, arg1, 1);
2824fb3aabf3SLaurent Vivier get_user_ualx(len, arg1, 2);
2825fb3aabf3SLaurent Vivier get_user_ualx(flags, arg1, 3);
2826fb3aabf3SLaurent Vivier get_user_ualx(addr, arg1, 4);
2827fb3aabf3SLaurent Vivier get_user_ualx(addrlen, arg1, 5);
2828fb3aabf3SLaurent Vivier
28294b25a506SJosh Kunz qemu_log("%s(", name);
2830d84fe1edSPhilippe Mathieu-Daudé print_sockfd(sockfd, 0);
283157fbc9b9SPhilippe Mathieu-Daudé print_buf_len(msg, len, 0);
2832fb3aabf3SLaurent Vivier print_flags(msg_flags, flags, 0);
283342b15d70SPhilippe Mathieu-Daudé print_sockaddr(addr, addrlen, 0);
28344b25a506SJosh Kunz qemu_log(")");
2835fb3aabf3SLaurent Vivier }
2836fb3aabf3SLaurent Vivier
do_print_shutdown(const char * name,abi_long arg1)2837fb3aabf3SLaurent Vivier static void do_print_shutdown(const char *name, abi_long arg1)
2838fb3aabf3SLaurent Vivier {
2839fb3aabf3SLaurent Vivier abi_ulong sockfd, how;
2840fb3aabf3SLaurent Vivier
2841fb3aabf3SLaurent Vivier get_user_ualx(sockfd, arg1, 0);
2842fb3aabf3SLaurent Vivier get_user_ualx(how, arg1, 1);
2843fb3aabf3SLaurent Vivier
28444b25a506SJosh Kunz qemu_log("shutdown(");
2845d84fe1edSPhilippe Mathieu-Daudé print_sockfd(sockfd, 0);
2846fb3aabf3SLaurent Vivier switch (how) {
2847fb3aabf3SLaurent Vivier case SHUT_RD:
28484b25a506SJosh Kunz qemu_log("SHUT_RD");
2849fb3aabf3SLaurent Vivier break;
2850fb3aabf3SLaurent Vivier case SHUT_WR:
28514b25a506SJosh Kunz qemu_log("SHUT_WR");
2852fb3aabf3SLaurent Vivier break;
2853fb3aabf3SLaurent Vivier case SHUT_RDWR:
28544b25a506SJosh Kunz qemu_log("SHUT_RDWR");
2855fb3aabf3SLaurent Vivier break;
2856fb3aabf3SLaurent Vivier default:
2857fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, how, 1);
2858fb3aabf3SLaurent Vivier break;
2859fb3aabf3SLaurent Vivier }
28604b25a506SJosh Kunz qemu_log(")");
2861fb3aabf3SLaurent Vivier }
2862fb3aabf3SLaurent Vivier
do_print_msg(const char * name,abi_long arg1)2863fb3aabf3SLaurent Vivier static void do_print_msg(const char *name, abi_long arg1)
2864fb3aabf3SLaurent Vivier {
2865fb3aabf3SLaurent Vivier abi_ulong sockfd, msg, flags;
2866fb3aabf3SLaurent Vivier
2867fb3aabf3SLaurent Vivier get_user_ualx(sockfd, arg1, 0);
2868fb3aabf3SLaurent Vivier get_user_ualx(msg, arg1, 1);
2869fb3aabf3SLaurent Vivier get_user_ualx(flags, arg1, 2);
2870fb3aabf3SLaurent Vivier
28714b25a506SJosh Kunz qemu_log("%s(", name);
2872d84fe1edSPhilippe Mathieu-Daudé print_sockfd(sockfd, 0);
2873fb3aabf3SLaurent Vivier print_pointer(msg, 0);
2874fb3aabf3SLaurent Vivier print_flags(msg_flags, flags, 1);
28754b25a506SJosh Kunz qemu_log(")");
2876fb3aabf3SLaurent Vivier }
2877fb3aabf3SLaurent Vivier
do_print_sockopt(const char * name,abi_long arg1)2878fb3aabf3SLaurent Vivier static void do_print_sockopt(const char *name, abi_long arg1)
2879fb3aabf3SLaurent Vivier {
2880fb3aabf3SLaurent Vivier abi_ulong sockfd, level, optname, optval, optlen;
2881fb3aabf3SLaurent Vivier
2882fb3aabf3SLaurent Vivier get_user_ualx(sockfd, arg1, 0);
2883fb3aabf3SLaurent Vivier get_user_ualx(level, arg1, 1);
2884fb3aabf3SLaurent Vivier get_user_ualx(optname, arg1, 2);
2885fb3aabf3SLaurent Vivier get_user_ualx(optval, arg1, 3);
2886fb3aabf3SLaurent Vivier get_user_ualx(optlen, arg1, 4);
2887fb3aabf3SLaurent Vivier
28884b25a506SJosh Kunz qemu_log("%s(", name);
2889d84fe1edSPhilippe Mathieu-Daudé print_sockfd(sockfd, 0);
2890fb3aabf3SLaurent Vivier switch (level) {
2891fb3aabf3SLaurent Vivier case SOL_TCP:
28924b25a506SJosh Kunz qemu_log("SOL_TCP,");
2893fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2894fb3aabf3SLaurent Vivier print_pointer(optval, 0);
2895fb3aabf3SLaurent Vivier break;
2896fe51b0a5SShu-Chun Weng case SOL_UDP:
2897fe51b0a5SShu-Chun Weng qemu_log("SOL_UDP,");
2898fe51b0a5SShu-Chun Weng print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2899fe51b0a5SShu-Chun Weng print_pointer(optval, 0);
2900fe51b0a5SShu-Chun Weng break;
2901fb3aabf3SLaurent Vivier case SOL_IP:
29024b25a506SJosh Kunz qemu_log("SOL_IP,");
2903fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2904fb3aabf3SLaurent Vivier print_pointer(optval, 0);
2905fb3aabf3SLaurent Vivier break;
2906fb3aabf3SLaurent Vivier case SOL_RAW:
29074b25a506SJosh Kunz qemu_log("SOL_RAW,");
2908fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
2909fb3aabf3SLaurent Vivier print_pointer(optval, 0);
2910fb3aabf3SLaurent Vivier break;
2911fb3aabf3SLaurent Vivier case TARGET_SOL_SOCKET:
29124b25a506SJosh Kunz qemu_log("SOL_SOCKET,");
2913fb3aabf3SLaurent Vivier switch (optname) {
2914fb3aabf3SLaurent Vivier case TARGET_SO_DEBUG:
29154b25a506SJosh Kunz qemu_log("SO_DEBUG,");
2916fb3aabf3SLaurent Vivier print_optint:
2917fb3aabf3SLaurent Vivier print_number(optval, 0);
2918fb3aabf3SLaurent Vivier break;
2919fb3aabf3SLaurent Vivier case TARGET_SO_REUSEADDR:
29204b25a506SJosh Kunz qemu_log("SO_REUSEADDR,");
2921fb3aabf3SLaurent Vivier goto print_optint;
2922113a9dd7SYunqiang Su case TARGET_SO_REUSEPORT:
29234b25a506SJosh Kunz qemu_log("SO_REUSEPORT,");
2924113a9dd7SYunqiang Su goto print_optint;
2925fb3aabf3SLaurent Vivier case TARGET_SO_TYPE:
29264b25a506SJosh Kunz qemu_log("SO_TYPE,");
2927fb3aabf3SLaurent Vivier goto print_optint;
2928fb3aabf3SLaurent Vivier case TARGET_SO_ERROR:
29294b25a506SJosh Kunz qemu_log("SO_ERROR,");
2930fb3aabf3SLaurent Vivier goto print_optint;
2931fb3aabf3SLaurent Vivier case TARGET_SO_DONTROUTE:
29324b25a506SJosh Kunz qemu_log("SO_DONTROUTE,");
2933fb3aabf3SLaurent Vivier goto print_optint;
2934fb3aabf3SLaurent Vivier case TARGET_SO_BROADCAST:
29354b25a506SJosh Kunz qemu_log("SO_BROADCAST,");
2936fb3aabf3SLaurent Vivier goto print_optint;
2937fb3aabf3SLaurent Vivier case TARGET_SO_SNDBUF:
29384b25a506SJosh Kunz qemu_log("SO_SNDBUF,");
2939fb3aabf3SLaurent Vivier goto print_optint;
2940fb3aabf3SLaurent Vivier case TARGET_SO_RCVBUF:
29414b25a506SJosh Kunz qemu_log("SO_RCVBUF,");
2942fb3aabf3SLaurent Vivier goto print_optint;
2943fb3aabf3SLaurent Vivier case TARGET_SO_KEEPALIVE:
29444b25a506SJosh Kunz qemu_log("SO_KEEPALIVE,");
2945fb3aabf3SLaurent Vivier goto print_optint;
2946fb3aabf3SLaurent Vivier case TARGET_SO_OOBINLINE:
29474b25a506SJosh Kunz qemu_log("SO_OOBINLINE,");
2948fb3aabf3SLaurent Vivier goto print_optint;
2949fb3aabf3SLaurent Vivier case TARGET_SO_NO_CHECK:
29504b25a506SJosh Kunz qemu_log("SO_NO_CHECK,");
2951fb3aabf3SLaurent Vivier goto print_optint;
2952fb3aabf3SLaurent Vivier case TARGET_SO_PRIORITY:
29534b25a506SJosh Kunz qemu_log("SO_PRIORITY,");
2954fb3aabf3SLaurent Vivier goto print_optint;
2955fb3aabf3SLaurent Vivier case TARGET_SO_BSDCOMPAT:
29564b25a506SJosh Kunz qemu_log("SO_BSDCOMPAT,");
2957fb3aabf3SLaurent Vivier goto print_optint;
2958fb3aabf3SLaurent Vivier case TARGET_SO_PASSCRED:
29594b25a506SJosh Kunz qemu_log("SO_PASSCRED,");
2960fb3aabf3SLaurent Vivier goto print_optint;
2961fb3aabf3SLaurent Vivier case TARGET_SO_TIMESTAMP:
29624b25a506SJosh Kunz qemu_log("SO_TIMESTAMP,");
2963fb3aabf3SLaurent Vivier goto print_optint;
2964fb3aabf3SLaurent Vivier case TARGET_SO_RCVLOWAT:
29654b25a506SJosh Kunz qemu_log("SO_RCVLOWAT,");
2966fb3aabf3SLaurent Vivier goto print_optint;
2967fb3aabf3SLaurent Vivier case TARGET_SO_RCVTIMEO:
29684b25a506SJosh Kunz qemu_log("SO_RCVTIMEO,");
2969fb3aabf3SLaurent Vivier print_timeval(optval, 0);
2970fb3aabf3SLaurent Vivier break;
2971fb3aabf3SLaurent Vivier case TARGET_SO_SNDTIMEO:
29724b25a506SJosh Kunz qemu_log("SO_SNDTIMEO,");
2973fb3aabf3SLaurent Vivier print_timeval(optval, 0);
2974fb3aabf3SLaurent Vivier break;
2975fb3aabf3SLaurent Vivier case TARGET_SO_ATTACH_FILTER: {
2976fb3aabf3SLaurent Vivier struct target_sock_fprog *fprog;
2977fb3aabf3SLaurent Vivier
29784b25a506SJosh Kunz qemu_log("SO_ATTACH_FILTER,");
2979fb3aabf3SLaurent Vivier
2980fb3aabf3SLaurent Vivier if (lock_user_struct(VERIFY_READ, fprog, optval, 0)) {
2981fb3aabf3SLaurent Vivier struct target_sock_filter *filter;
29824b25a506SJosh Kunz qemu_log("{");
2983fb3aabf3SLaurent Vivier if (lock_user_struct(VERIFY_READ, filter,
2984fb3aabf3SLaurent Vivier tswapal(fprog->filter), 0)) {
2985fb3aabf3SLaurent Vivier int i;
2986fb3aabf3SLaurent Vivier for (i = 0; i < tswap16(fprog->len) - 1; i++) {
29874b25a506SJosh Kunz qemu_log("[%d]{0x%x,%d,%d,0x%x},",
2988fb3aabf3SLaurent Vivier i, tswap16(filter[i].code),
2989fb3aabf3SLaurent Vivier filter[i].jt, filter[i].jf,
2990fb3aabf3SLaurent Vivier tswap32(filter[i].k));
2991fb3aabf3SLaurent Vivier }
29924b25a506SJosh Kunz qemu_log("[%d]{0x%x,%d,%d,0x%x}",
2993fb3aabf3SLaurent Vivier i, tswap16(filter[i].code),
2994fb3aabf3SLaurent Vivier filter[i].jt, filter[i].jf,
2995fb3aabf3SLaurent Vivier tswap32(filter[i].k));
2996fb3aabf3SLaurent Vivier } else {
29974b25a506SJosh Kunz qemu_log(TARGET_ABI_FMT_lx, tswapal(fprog->filter));
2998fb3aabf3SLaurent Vivier }
29994b25a506SJosh Kunz qemu_log(",%d},", tswap16(fprog->len));
3000fb3aabf3SLaurent Vivier unlock_user(fprog, optval, 0);
3001fb3aabf3SLaurent Vivier } else {
3002fb3aabf3SLaurent Vivier print_pointer(optval, 0);
3003fb3aabf3SLaurent Vivier }
3004fb3aabf3SLaurent Vivier break;
3005fb3aabf3SLaurent Vivier }
3006fb3aabf3SLaurent Vivier default:
3007fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
3008fb3aabf3SLaurent Vivier print_pointer(optval, 0);
3009fb3aabf3SLaurent Vivier break;
3010fb3aabf3SLaurent Vivier }
3011fb3aabf3SLaurent Vivier break;
301238987eabSShu-Chun Weng case SOL_IPV6:
301338987eabSShu-Chun Weng qemu_log("SOL_IPV6,");
301438987eabSShu-Chun Weng switch (optname) {
301538987eabSShu-Chun Weng case IPV6_MTU_DISCOVER:
301638987eabSShu-Chun Weng qemu_log("IPV6_MTU_DISCOVER,");
301738987eabSShu-Chun Weng goto print_optint;
301838987eabSShu-Chun Weng case IPV6_MTU:
301938987eabSShu-Chun Weng qemu_log("IPV6_MTU,");
302038987eabSShu-Chun Weng goto print_optint;
302138987eabSShu-Chun Weng case IPV6_V6ONLY:
302238987eabSShu-Chun Weng qemu_log("IPV6_V6ONLY,");
302338987eabSShu-Chun Weng goto print_optint;
302438987eabSShu-Chun Weng case IPV6_RECVPKTINFO:
302538987eabSShu-Chun Weng qemu_log("IPV6_RECVPKTINFO,");
302638987eabSShu-Chun Weng goto print_optint;
302738987eabSShu-Chun Weng case IPV6_UNICAST_HOPS:
302838987eabSShu-Chun Weng qemu_log("IPV6_UNICAST_HOPS,");
302938987eabSShu-Chun Weng goto print_optint;
303038987eabSShu-Chun Weng case IPV6_MULTICAST_HOPS:
303138987eabSShu-Chun Weng qemu_log("IPV6_MULTICAST_HOPS,");
303238987eabSShu-Chun Weng goto print_optint;
303338987eabSShu-Chun Weng case IPV6_MULTICAST_LOOP:
303438987eabSShu-Chun Weng qemu_log("IPV6_MULTICAST_LOOP,");
303538987eabSShu-Chun Weng goto print_optint;
303638987eabSShu-Chun Weng case IPV6_RECVERR:
303738987eabSShu-Chun Weng qemu_log("IPV6_RECVERR,");
303838987eabSShu-Chun Weng goto print_optint;
303938987eabSShu-Chun Weng case IPV6_RECVHOPLIMIT:
304038987eabSShu-Chun Weng qemu_log("IPV6_RECVHOPLIMIT,");
304138987eabSShu-Chun Weng goto print_optint;
304238987eabSShu-Chun Weng case IPV6_2292HOPLIMIT:
304338987eabSShu-Chun Weng qemu_log("IPV6_2292HOPLIMIT,");
304438987eabSShu-Chun Weng goto print_optint;
304538987eabSShu-Chun Weng case IPV6_CHECKSUM:
304638987eabSShu-Chun Weng qemu_log("IPV6_CHECKSUM,");
304738987eabSShu-Chun Weng goto print_optint;
304838987eabSShu-Chun Weng case IPV6_ADDRFORM:
304938987eabSShu-Chun Weng qemu_log("IPV6_ADDRFORM,");
305038987eabSShu-Chun Weng goto print_optint;
305138987eabSShu-Chun Weng case IPV6_2292PKTINFO:
305238987eabSShu-Chun Weng qemu_log("IPV6_2292PKTINFO,");
305338987eabSShu-Chun Weng goto print_optint;
305438987eabSShu-Chun Weng case IPV6_RECVTCLASS:
305538987eabSShu-Chun Weng qemu_log("IPV6_RECVTCLASS,");
305638987eabSShu-Chun Weng goto print_optint;
305738987eabSShu-Chun Weng case IPV6_RECVRTHDR:
305838987eabSShu-Chun Weng qemu_log("IPV6_RECVRTHDR,");
305938987eabSShu-Chun Weng goto print_optint;
306038987eabSShu-Chun Weng case IPV6_2292RTHDR:
306138987eabSShu-Chun Weng qemu_log("IPV6_2292RTHDR,");
306238987eabSShu-Chun Weng goto print_optint;
306338987eabSShu-Chun Weng case IPV6_RECVHOPOPTS:
306438987eabSShu-Chun Weng qemu_log("IPV6_RECVHOPOPTS,");
306538987eabSShu-Chun Weng goto print_optint;
306638987eabSShu-Chun Weng case IPV6_2292HOPOPTS:
306738987eabSShu-Chun Weng qemu_log("IPV6_2292HOPOPTS,");
306838987eabSShu-Chun Weng goto print_optint;
306938987eabSShu-Chun Weng case IPV6_RECVDSTOPTS:
307038987eabSShu-Chun Weng qemu_log("IPV6_RECVDSTOPTS,");
307138987eabSShu-Chun Weng goto print_optint;
307238987eabSShu-Chun Weng case IPV6_2292DSTOPTS:
307338987eabSShu-Chun Weng qemu_log("IPV6_2292DSTOPTS,");
307438987eabSShu-Chun Weng goto print_optint;
307538987eabSShu-Chun Weng case IPV6_TCLASS:
307638987eabSShu-Chun Weng qemu_log("IPV6_TCLASS,");
307738987eabSShu-Chun Weng goto print_optint;
307838987eabSShu-Chun Weng case IPV6_ADDR_PREFERENCES:
307938987eabSShu-Chun Weng qemu_log("IPV6_ADDR_PREFERENCES,");
308038987eabSShu-Chun Weng goto print_optint;
308138987eabSShu-Chun Weng #ifdef IPV6_RECVPATHMTU
308238987eabSShu-Chun Weng case IPV6_RECVPATHMTU:
308338987eabSShu-Chun Weng qemu_log("IPV6_RECVPATHMTU,");
308438987eabSShu-Chun Weng goto print_optint;
308538987eabSShu-Chun Weng #endif
308638987eabSShu-Chun Weng #ifdef IPV6_TRANSPARENT
308738987eabSShu-Chun Weng case IPV6_TRANSPARENT:
308838987eabSShu-Chun Weng qemu_log("IPV6_TRANSPARENT,");
308938987eabSShu-Chun Weng goto print_optint;
309038987eabSShu-Chun Weng #endif
309138987eabSShu-Chun Weng #ifdef IPV6_FREEBIND
309238987eabSShu-Chun Weng case IPV6_FREEBIND:
309338987eabSShu-Chun Weng qemu_log("IPV6_FREEBIND,");
309438987eabSShu-Chun Weng goto print_optint;
309538987eabSShu-Chun Weng #endif
309638987eabSShu-Chun Weng #ifdef IPV6_RECVORIGDSTADDR
309738987eabSShu-Chun Weng case IPV6_RECVORIGDSTADDR:
309838987eabSShu-Chun Weng qemu_log("IPV6_RECVORIGDSTADDR,");
309938987eabSShu-Chun Weng goto print_optint;
310038987eabSShu-Chun Weng #endif
310138987eabSShu-Chun Weng case IPV6_PKTINFO:
310238987eabSShu-Chun Weng qemu_log("IPV6_PKTINFO,");
310338987eabSShu-Chun Weng print_pointer(optval, 0);
310438987eabSShu-Chun Weng break;
310538987eabSShu-Chun Weng case IPV6_ADD_MEMBERSHIP:
310638987eabSShu-Chun Weng qemu_log("IPV6_ADD_MEMBERSHIP,");
310738987eabSShu-Chun Weng print_pointer(optval, 0);
310838987eabSShu-Chun Weng break;
310938987eabSShu-Chun Weng case IPV6_DROP_MEMBERSHIP:
311038987eabSShu-Chun Weng qemu_log("IPV6_DROP_MEMBERSHIP,");
311138987eabSShu-Chun Weng print_pointer(optval, 0);
311238987eabSShu-Chun Weng break;
311338987eabSShu-Chun Weng default:
311438987eabSShu-Chun Weng print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
311538987eabSShu-Chun Weng print_pointer(optval, 0);
311638987eabSShu-Chun Weng break;
311738987eabSShu-Chun Weng }
311838987eabSShu-Chun Weng break;
3119fb3aabf3SLaurent Vivier default:
3120fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, level, 0);
3121fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
3122fb3aabf3SLaurent Vivier print_pointer(optval, 0);
3123fb3aabf3SLaurent Vivier break;
3124fb3aabf3SLaurent Vivier }
3125fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, optlen, 1);
31264b25a506SJosh Kunz qemu_log(")");
3127fb3aabf3SLaurent Vivier }
3128fb3aabf3SLaurent Vivier
3129fb3aabf3SLaurent Vivier #define PRINT_SOCKOP(name, func) \
3130ff71a454SAleksandar Markovic [TARGET_SYS_##name] = { #name, func }
3131fb3aabf3SLaurent Vivier
3132fb3aabf3SLaurent Vivier static struct {
3133fb3aabf3SLaurent Vivier const char *name;
3134fb3aabf3SLaurent Vivier void (*print)(const char *, abi_long);
3135fb3aabf3SLaurent Vivier } scall[] = {
3136ff71a454SAleksandar Markovic PRINT_SOCKOP(SOCKET, do_print_socket),
3137ff71a454SAleksandar Markovic PRINT_SOCKOP(BIND, do_print_sockaddr),
3138ff71a454SAleksandar Markovic PRINT_SOCKOP(CONNECT, do_print_sockaddr),
3139ff71a454SAleksandar Markovic PRINT_SOCKOP(LISTEN, do_print_listen),
3140ff71a454SAleksandar Markovic PRINT_SOCKOP(ACCEPT, do_print_sockaddr),
3141ff71a454SAleksandar Markovic PRINT_SOCKOP(GETSOCKNAME, do_print_sockaddr),
3142ff71a454SAleksandar Markovic PRINT_SOCKOP(GETPEERNAME, do_print_sockaddr),
3143ff71a454SAleksandar Markovic PRINT_SOCKOP(SOCKETPAIR, do_print_socketpair),
3144ff71a454SAleksandar Markovic PRINT_SOCKOP(SEND, do_print_sendrecv),
3145ff71a454SAleksandar Markovic PRINT_SOCKOP(RECV, do_print_sendrecv),
3146ff71a454SAleksandar Markovic PRINT_SOCKOP(SENDTO, do_print_msgaddr),
3147ff71a454SAleksandar Markovic PRINT_SOCKOP(RECVFROM, do_print_msgaddr),
3148ff71a454SAleksandar Markovic PRINT_SOCKOP(SHUTDOWN, do_print_shutdown),
3149ff71a454SAleksandar Markovic PRINT_SOCKOP(SETSOCKOPT, do_print_sockopt),
3150ff71a454SAleksandar Markovic PRINT_SOCKOP(GETSOCKOPT, do_print_sockopt),
3151ff71a454SAleksandar Markovic PRINT_SOCKOP(SENDMSG, do_print_msg),
3152ff71a454SAleksandar Markovic PRINT_SOCKOP(RECVMSG, do_print_msg),
3153ff71a454SAleksandar Markovic PRINT_SOCKOP(ACCEPT4, NULL),
3154ff71a454SAleksandar Markovic PRINT_SOCKOP(RECVMMSG, NULL),
3155ff71a454SAleksandar Markovic PRINT_SOCKOP(SENDMMSG, NULL),
3156fb3aabf3SLaurent Vivier };
3157fb3aabf3SLaurent Vivier
3158fb3aabf3SLaurent Vivier static void
print_socketcall(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3159a0939b89SPhilippe Mathieu-Daudé print_socketcall(CPUArchState *cpu_env, const struct syscallname *name,
3160fb3aabf3SLaurent Vivier abi_long arg0, abi_long arg1, abi_long arg2,
3161fb3aabf3SLaurent Vivier abi_long arg3, abi_long arg4, abi_long arg5)
3162fb3aabf3SLaurent Vivier {
3163fb3aabf3SLaurent Vivier if (arg0 >= 0 && arg0 < ARRAY_SIZE(scall) && scall[arg0].print) {
3164fb3aabf3SLaurent Vivier scall[arg0].print(scall[arg0].name, arg1);
3165fb3aabf3SLaurent Vivier return;
3166fb3aabf3SLaurent Vivier }
3167fb3aabf3SLaurent Vivier print_syscall_prologue(name);
3168fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, arg0, 0);
3169fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
3170fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
3171fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, arg3, 0);
3172fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, arg4, 0);
3173fb3aabf3SLaurent Vivier print_raw_param(TARGET_ABI_FMT_ld, arg5, 0);
3174fb3aabf3SLaurent Vivier print_syscall_epilogue(name);
3175fb3aabf3SLaurent Vivier }
3176fb3aabf3SLaurent Vivier #endif
3177fb3aabf3SLaurent Vivier
3178bb10540eSPhilippe Mathieu-Daudé #if defined(TARGET_NR_bind)
3179bb10540eSPhilippe Mathieu-Daudé static void
print_bind(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3180a0939b89SPhilippe Mathieu-Daudé print_bind(CPUArchState *cpu_env, const struct syscallname *name,
3181bb10540eSPhilippe Mathieu-Daudé abi_long arg0, abi_long arg1, abi_long arg2,
3182bb10540eSPhilippe Mathieu-Daudé abi_long arg3, abi_long arg4, abi_long arg5)
3183bb10540eSPhilippe Mathieu-Daudé {
3184bb10540eSPhilippe Mathieu-Daudé print_syscall_prologue(name);
3185bb10540eSPhilippe Mathieu-Daudé print_sockfd(arg0, 0);
3186bb10540eSPhilippe Mathieu-Daudé print_sockaddr(arg1, arg2, 1);
3187bb10540eSPhilippe Mathieu-Daudé print_syscall_epilogue(name);
3188bb10540eSPhilippe Mathieu-Daudé }
3189bb10540eSPhilippe Mathieu-Daudé #endif
3190bb10540eSPhilippe Mathieu-Daudé
3191124e7690SPhilippe Mathieu-Daudé #ifdef TARGET_NR_recvfrom
3192124e7690SPhilippe Mathieu-Daudé static void
print_recvfrom(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3193124e7690SPhilippe Mathieu-Daudé print_recvfrom(CPUArchState *cpu_env, const struct syscallname *name,
3194124e7690SPhilippe Mathieu-Daudé abi_long arg0, abi_long arg1, abi_long arg2,
3195124e7690SPhilippe Mathieu-Daudé abi_long arg3, abi_long arg4, abi_long arg5)
3196124e7690SPhilippe Mathieu-Daudé {
3197124e7690SPhilippe Mathieu-Daudé print_syscall_prologue(name);
3198124e7690SPhilippe Mathieu-Daudé print_sockfd(arg0, 0);
3199124e7690SPhilippe Mathieu-Daudé print_pointer(arg1, 0); /* output */
3200124e7690SPhilippe Mathieu-Daudé print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
3201124e7690SPhilippe Mathieu-Daudé print_flags(msg_flags, arg3, 0);
3202124e7690SPhilippe Mathieu-Daudé print_pointer(arg4, 0); /* output */
3203124e7690SPhilippe Mathieu-Daudé print_pointer(arg5, 1); /* in/out */
3204124e7690SPhilippe Mathieu-Daudé print_syscall_epilogue(name);
3205124e7690SPhilippe Mathieu-Daudé }
3206124e7690SPhilippe Mathieu-Daudé #endif
3207124e7690SPhilippe Mathieu-Daudé
3208ff54bcd5SPhilippe Mathieu-Daudé #ifdef TARGET_NR_sendto
3209ff54bcd5SPhilippe Mathieu-Daudé static void
print_sendto(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3210ff54bcd5SPhilippe Mathieu-Daudé print_sendto(CPUArchState *cpu_env, const struct syscallname *name,
3211ff54bcd5SPhilippe Mathieu-Daudé abi_long arg0, abi_long arg1, abi_long arg2,
3212ff54bcd5SPhilippe Mathieu-Daudé abi_long arg3, abi_long arg4, abi_long arg5)
3213ff54bcd5SPhilippe Mathieu-Daudé {
3214ff54bcd5SPhilippe Mathieu-Daudé print_syscall_prologue(name);
3215ff54bcd5SPhilippe Mathieu-Daudé print_sockfd(arg0, 0);
3216ff54bcd5SPhilippe Mathieu-Daudé print_buf_len(arg1, arg2, 0);
3217ff54bcd5SPhilippe Mathieu-Daudé print_flags(msg_flags, arg3, 0);
3218ff54bcd5SPhilippe Mathieu-Daudé print_sockaddr(arg4, arg5, 1);
3219ff54bcd5SPhilippe Mathieu-Daudé print_syscall_epilogue(name);
3220ff54bcd5SPhilippe Mathieu-Daudé }
3221ff54bcd5SPhilippe Mathieu-Daudé #endif
3222ff54bcd5SPhilippe Mathieu-Daudé
322374d753acSMika Westerberg #if defined(TARGET_NR_stat) || defined(TARGET_NR_stat64) || \
322474d753acSMika Westerberg defined(TARGET_NR_lstat) || defined(TARGET_NR_lstat64)
322574d753acSMika Westerberg static void
print_stat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3226a0939b89SPhilippe Mathieu-Daudé print_stat(CPUArchState *cpu_env, const struct syscallname *name,
322774d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
322874d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
322974d753acSMika Westerberg {
323074d753acSMika Westerberg print_syscall_prologue(name);
323174d753acSMika Westerberg print_string(arg0, 0);
323274d753acSMika Westerberg print_pointer(arg1, 1);
323374d753acSMika Westerberg print_syscall_epilogue(name);
323474d753acSMika Westerberg }
323574d753acSMika Westerberg #define print_lstat print_stat
323674d753acSMika Westerberg #define print_stat64 print_stat
323774d753acSMika Westerberg #define print_lstat64 print_stat
323874d753acSMika Westerberg #endif
323974d753acSMika Westerberg
3240375ce49bSIlya Leoshkevich #if defined(TARGET_NR_madvise)
3241375ce49bSIlya Leoshkevich static struct enums madvise_advice[] = {
3242375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_NORMAL),
3243375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_RANDOM),
3244375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_SEQUENTIAL),
3245375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_WILLNEED),
3246375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_DONTNEED),
3247375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_FREE),
3248375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_REMOVE),
3249375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_DONTFORK),
3250375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_DOFORK),
3251375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_MERGEABLE),
3252375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_UNMERGEABLE),
3253375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_HUGEPAGE),
3254375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_NOHUGEPAGE),
3255375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_DONTDUMP),
3256375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_DODUMP),
3257375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_WIPEONFORK),
3258375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_KEEPONFORK),
3259375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_COLD),
3260375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_PAGEOUT),
3261375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_POPULATE_READ),
3262375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_POPULATE_WRITE),
3263375ce49bSIlya Leoshkevich ENUM_TARGET(MADV_DONTNEED_LOCKED),
3264375ce49bSIlya Leoshkevich ENUM_END,
3265375ce49bSIlya Leoshkevich };
3266375ce49bSIlya Leoshkevich
3267375ce49bSIlya Leoshkevich static void
print_madvise(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3268375ce49bSIlya Leoshkevich print_madvise(CPUArchState *cpu_env, const struct syscallname *name,
3269375ce49bSIlya Leoshkevich abi_long arg0, abi_long arg1, abi_long arg2,
3270375ce49bSIlya Leoshkevich abi_long arg3, abi_long arg4, abi_long arg5)
3271375ce49bSIlya Leoshkevich {
3272375ce49bSIlya Leoshkevich print_syscall_prologue(name);
3273375ce49bSIlya Leoshkevich print_pointer(arg0, 0);
3274375ce49bSIlya Leoshkevich print_raw_param("%d", arg1, 0);
3275375ce49bSIlya Leoshkevich print_enums(madvise_advice, arg2, 1);
3276375ce49bSIlya Leoshkevich print_syscall_epilogue(name);
3277375ce49bSIlya Leoshkevich }
3278375ce49bSIlya Leoshkevich #endif
3279375ce49bSIlya Leoshkevich
328074d753acSMika Westerberg #if defined(TARGET_NR_fstat) || defined(TARGET_NR_fstat64)
328174d753acSMika Westerberg static void
print_fstat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3282a0939b89SPhilippe Mathieu-Daudé print_fstat(CPUArchState *cpu_env, const struct syscallname *name,
328374d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
328474d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
328574d753acSMika Westerberg {
328674d753acSMika Westerberg print_syscall_prologue(name);
3287d2ee72a5SLaurent Vivier print_raw_param("%d", arg0, 0);
328874d753acSMika Westerberg print_pointer(arg1, 1);
328974d753acSMika Westerberg print_syscall_epilogue(name);
329074d753acSMika Westerberg }
329174d753acSMika Westerberg #define print_fstat64 print_fstat
329274d753acSMika Westerberg #endif
329374d753acSMika Westerberg
329474d753acSMika Westerberg #ifdef TARGET_NR_mkdir
329574d753acSMika Westerberg static void
print_mkdir(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3296a0939b89SPhilippe Mathieu-Daudé print_mkdir(CPUArchState *cpu_env, const struct syscallname *name,
329774d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
329874d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
329974d753acSMika Westerberg {
330074d753acSMika Westerberg print_syscall_prologue(name);
330174d753acSMika Westerberg print_string(arg0, 0);
330274d753acSMika Westerberg print_file_mode(arg1, 1);
330374d753acSMika Westerberg print_syscall_epilogue(name);
330474d753acSMika Westerberg }
330574d753acSMika Westerberg #endif
330674d753acSMika Westerberg
330774d753acSMika Westerberg #ifdef TARGET_NR_mkdirat
330874d753acSMika Westerberg static void
print_mkdirat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3309a0939b89SPhilippe Mathieu-Daudé print_mkdirat(CPUArchState *cpu_env, const struct syscallname *name,
331074d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
331174d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
331274d753acSMika Westerberg {
331374d753acSMika Westerberg print_syscall_prologue(name);
331474d753acSMika Westerberg print_at_dirfd(arg0, 0);
331574d753acSMika Westerberg print_string(arg1, 0);
331674d753acSMika Westerberg print_file_mode(arg2, 1);
331774d753acSMika Westerberg print_syscall_epilogue(name);
331874d753acSMika Westerberg }
331974d753acSMika Westerberg #endif
332074d753acSMika Westerberg
33214de596cbSLaurent Vivier #ifdef TARGET_NR_rmdir
33224de596cbSLaurent Vivier static void
print_rmdir(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3323a0939b89SPhilippe Mathieu-Daudé print_rmdir(CPUArchState *cpu_env, const struct syscallname *name,
33244de596cbSLaurent Vivier abi_long arg0, abi_long arg1, abi_long arg2,
33254de596cbSLaurent Vivier abi_long arg3, abi_long arg4, abi_long arg5)
33264de596cbSLaurent Vivier {
33274de596cbSLaurent Vivier print_syscall_prologue(name);
33284de596cbSLaurent Vivier print_string(arg0, 0);
33294de596cbSLaurent Vivier print_syscall_epilogue(name);
33304de596cbSLaurent Vivier }
33314de596cbSLaurent Vivier #endif
33324de596cbSLaurent Vivier
3333608e5592SLaurent Vivier #ifdef TARGET_NR_rt_sigaction
3334608e5592SLaurent Vivier static void
print_rt_sigaction(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3335a0939b89SPhilippe Mathieu-Daudé print_rt_sigaction(CPUArchState *cpu_env, const struct syscallname *name,
3336608e5592SLaurent Vivier abi_long arg0, abi_long arg1, abi_long arg2,
3337608e5592SLaurent Vivier abi_long arg3, abi_long arg4, abi_long arg5)
3338608e5592SLaurent Vivier {
3339608e5592SLaurent Vivier print_syscall_prologue(name);
3340608e5592SLaurent Vivier print_signal(arg0, 0);
3341608e5592SLaurent Vivier print_pointer(arg1, 0);
3342608e5592SLaurent Vivier print_pointer(arg2, 1);
3343608e5592SLaurent Vivier print_syscall_epilogue(name);
3344608e5592SLaurent Vivier }
3345608e5592SLaurent Vivier #endif
3346608e5592SLaurent Vivier
3347608e5592SLaurent Vivier #ifdef TARGET_NR_rt_sigprocmask
3348608e5592SLaurent Vivier static void
print_rt_sigprocmask(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3349a0939b89SPhilippe Mathieu-Daudé print_rt_sigprocmask(CPUArchState *cpu_env, const struct syscallname *name,
3350608e5592SLaurent Vivier abi_long arg0, abi_long arg1, abi_long arg2,
3351608e5592SLaurent Vivier abi_long arg3, abi_long arg4, abi_long arg5)
3352608e5592SLaurent Vivier {
3353608e5592SLaurent Vivier const char *how = "UNKNOWN";
3354608e5592SLaurent Vivier print_syscall_prologue(name);
3355608e5592SLaurent Vivier switch(arg0) {
3356608e5592SLaurent Vivier case TARGET_SIG_BLOCK: how = "SIG_BLOCK"; break;
3357608e5592SLaurent Vivier case TARGET_SIG_UNBLOCK: how = "SIG_UNBLOCK"; break;
3358608e5592SLaurent Vivier case TARGET_SIG_SETMASK: how = "SIG_SETMASK"; break;
3359608e5592SLaurent Vivier }
33604b25a506SJosh Kunz qemu_log("%s,", how);
3361f769eb00SIlya Leoshkevich print_target_sigset_t(arg1, arg3, 0);
33627020e2fdSHelge Deller print_pointer(arg2, 0);
33637020e2fdSHelge Deller print_raw_param("%u", arg3, 1);
3364608e5592SLaurent Vivier print_syscall_epilogue(name);
3365608e5592SLaurent Vivier }
3366f769eb00SIlya Leoshkevich
3367f769eb00SIlya Leoshkevich static void
print_rt_sigprocmask_ret(CPUArchState * cpu_env,const struct syscallname * name,abi_long ret,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3368f769eb00SIlya Leoshkevich print_rt_sigprocmask_ret(CPUArchState *cpu_env, const struct syscallname *name,
3369f769eb00SIlya Leoshkevich abi_long ret, abi_long arg0, abi_long arg1,
3370f769eb00SIlya Leoshkevich abi_long arg2, abi_long arg3, abi_long arg4,
3371f769eb00SIlya Leoshkevich abi_long arg5)
3372f769eb00SIlya Leoshkevich {
3373f769eb00SIlya Leoshkevich if (!print_syscall_err(ret)) {
3374f769eb00SIlya Leoshkevich qemu_log(TARGET_ABI_FMT_ld, ret);
3375f769eb00SIlya Leoshkevich if (arg2) {
3376f769eb00SIlya Leoshkevich qemu_log(" (oldset=");
3377f769eb00SIlya Leoshkevich print_target_sigset_t(arg2, arg3, 1);
3378f769eb00SIlya Leoshkevich qemu_log(")");
3379f769eb00SIlya Leoshkevich }
3380f769eb00SIlya Leoshkevich }
3381f769eb00SIlya Leoshkevich
3382f769eb00SIlya Leoshkevich qemu_log("\n");
3383f769eb00SIlya Leoshkevich }
3384608e5592SLaurent Vivier #endif
3385608e5592SLaurent Vivier
33865162264eSMiloš Stojanović #ifdef TARGET_NR_rt_sigqueueinfo
33875162264eSMiloš Stojanović static void
print_rt_sigqueueinfo(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3388a0939b89SPhilippe Mathieu-Daudé print_rt_sigqueueinfo(CPUArchState *cpu_env, const struct syscallname *name,
33895162264eSMiloš Stojanović abi_long arg0, abi_long arg1, abi_long arg2,
33905162264eSMiloš Stojanović abi_long arg3, abi_long arg4, abi_long arg5)
33915162264eSMiloš Stojanović {
3392ba9fcea1SMiloš Stojanović void *p;
3393ba9fcea1SMiloš Stojanović target_siginfo_t uinfo;
3394ba9fcea1SMiloš Stojanović
33955162264eSMiloš Stojanović print_syscall_prologue(name);
33965162264eSMiloš Stojanović print_raw_param("%d", arg0, 0);
33975162264eSMiloš Stojanović print_signal(arg1, 0);
3398ba9fcea1SMiloš Stojanović p = lock_user(VERIFY_READ, arg2, sizeof(target_siginfo_t), 1);
3399ba9fcea1SMiloš Stojanović if (p) {
3400ba9fcea1SMiloš Stojanović get_target_siginfo(&uinfo, p);
3401ba9fcea1SMiloš Stojanović print_siginfo(&uinfo);
3402ba9fcea1SMiloš Stojanović
3403ba9fcea1SMiloš Stojanović unlock_user(p, arg2, 0);
3404ba9fcea1SMiloš Stojanović } else {
34055162264eSMiloš Stojanović print_pointer(arg2, 1);
3406ba9fcea1SMiloš Stojanović }
34075162264eSMiloš Stojanović print_syscall_epilogue(name);
34085162264eSMiloš Stojanović }
34095162264eSMiloš Stojanović #endif
34105162264eSMiloš Stojanović
3411243e0fe5SMiloš Stojanović #ifdef TARGET_NR_rt_tgsigqueueinfo
3412243e0fe5SMiloš Stojanović static void
print_rt_tgsigqueueinfo(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3413a0939b89SPhilippe Mathieu-Daudé print_rt_tgsigqueueinfo(CPUArchState *cpu_env, const struct syscallname *name,
3414243e0fe5SMiloš Stojanović abi_long arg0, abi_long arg1, abi_long arg2,
3415243e0fe5SMiloš Stojanović abi_long arg3, abi_long arg4, abi_long arg5)
3416243e0fe5SMiloš Stojanović {
3417ba9fcea1SMiloš Stojanović void *p;
3418ba9fcea1SMiloš Stojanović target_siginfo_t uinfo;
3419ba9fcea1SMiloš Stojanović
3420243e0fe5SMiloš Stojanović print_syscall_prologue(name);
3421243e0fe5SMiloš Stojanović print_raw_param("%d", arg0, 0);
3422243e0fe5SMiloš Stojanović print_raw_param("%d", arg1, 0);
3423243e0fe5SMiloš Stojanović print_signal(arg2, 0);
3424ba9fcea1SMiloš Stojanović p = lock_user(VERIFY_READ, arg3, sizeof(target_siginfo_t), 1);
3425ba9fcea1SMiloš Stojanović if (p) {
3426ba9fcea1SMiloš Stojanović get_target_siginfo(&uinfo, p);
3427ba9fcea1SMiloš Stojanović print_siginfo(&uinfo);
3428ba9fcea1SMiloš Stojanović
3429ba9fcea1SMiloš Stojanović unlock_user(p, arg3, 0);
3430ba9fcea1SMiloš Stojanović } else {
3431243e0fe5SMiloš Stojanović print_pointer(arg3, 1);
3432ba9fcea1SMiloš Stojanović }
3433243e0fe5SMiloš Stojanović print_syscall_epilogue(name);
3434243e0fe5SMiloš Stojanović }
3435243e0fe5SMiloš Stojanović #endif
3436243e0fe5SMiloš Stojanović
3437da2c8ad7SAleksandar Markovic #ifdef TARGET_NR_syslog
3438da2c8ad7SAleksandar Markovic static void
print_syslog_action(abi_ulong arg,int last)3439da2c8ad7SAleksandar Markovic print_syslog_action(abi_ulong arg, int last)
3440da2c8ad7SAleksandar Markovic {
3441da2c8ad7SAleksandar Markovic const char *type;
3442da2c8ad7SAleksandar Markovic
3443da2c8ad7SAleksandar Markovic switch (arg) {
3444da2c8ad7SAleksandar Markovic case TARGET_SYSLOG_ACTION_CLOSE: {
3445da2c8ad7SAleksandar Markovic type = "SYSLOG_ACTION_CLOSE";
3446da2c8ad7SAleksandar Markovic break;
3447da2c8ad7SAleksandar Markovic }
3448da2c8ad7SAleksandar Markovic case TARGET_SYSLOG_ACTION_OPEN: {
3449da2c8ad7SAleksandar Markovic type = "SYSLOG_ACTION_OPEN";
3450da2c8ad7SAleksandar Markovic break;
3451da2c8ad7SAleksandar Markovic }
3452da2c8ad7SAleksandar Markovic case TARGET_SYSLOG_ACTION_READ: {
3453da2c8ad7SAleksandar Markovic type = "SYSLOG_ACTION_READ";
3454da2c8ad7SAleksandar Markovic break;
3455da2c8ad7SAleksandar Markovic }
3456da2c8ad7SAleksandar Markovic case TARGET_SYSLOG_ACTION_READ_ALL: {
3457da2c8ad7SAleksandar Markovic type = "SYSLOG_ACTION_READ_ALL";
3458da2c8ad7SAleksandar Markovic break;
3459da2c8ad7SAleksandar Markovic }
3460da2c8ad7SAleksandar Markovic case TARGET_SYSLOG_ACTION_READ_CLEAR: {
3461da2c8ad7SAleksandar Markovic type = "SYSLOG_ACTION_READ_CLEAR";
3462da2c8ad7SAleksandar Markovic break;
3463da2c8ad7SAleksandar Markovic }
3464da2c8ad7SAleksandar Markovic case TARGET_SYSLOG_ACTION_CLEAR: {
3465da2c8ad7SAleksandar Markovic type = "SYSLOG_ACTION_CLEAR";
3466da2c8ad7SAleksandar Markovic break;
3467da2c8ad7SAleksandar Markovic }
3468da2c8ad7SAleksandar Markovic case TARGET_SYSLOG_ACTION_CONSOLE_OFF: {
3469da2c8ad7SAleksandar Markovic type = "SYSLOG_ACTION_CONSOLE_OFF";
3470da2c8ad7SAleksandar Markovic break;
3471da2c8ad7SAleksandar Markovic }
3472da2c8ad7SAleksandar Markovic case TARGET_SYSLOG_ACTION_CONSOLE_ON: {
3473da2c8ad7SAleksandar Markovic type = "SYSLOG_ACTION_CONSOLE_ON";
3474da2c8ad7SAleksandar Markovic break;
3475da2c8ad7SAleksandar Markovic }
3476da2c8ad7SAleksandar Markovic case TARGET_SYSLOG_ACTION_CONSOLE_LEVEL: {
3477da2c8ad7SAleksandar Markovic type = "SYSLOG_ACTION_CONSOLE_LEVEL";
3478da2c8ad7SAleksandar Markovic break;
3479da2c8ad7SAleksandar Markovic }
3480da2c8ad7SAleksandar Markovic case TARGET_SYSLOG_ACTION_SIZE_UNREAD: {
3481da2c8ad7SAleksandar Markovic type = "SYSLOG_ACTION_SIZE_UNREAD";
3482da2c8ad7SAleksandar Markovic break;
3483da2c8ad7SAleksandar Markovic }
3484da2c8ad7SAleksandar Markovic case TARGET_SYSLOG_ACTION_SIZE_BUFFER: {
3485da2c8ad7SAleksandar Markovic type = "SYSLOG_ACTION_SIZE_BUFFER";
3486da2c8ad7SAleksandar Markovic break;
3487da2c8ad7SAleksandar Markovic }
3488da2c8ad7SAleksandar Markovic default: {
3489da2c8ad7SAleksandar Markovic print_raw_param("%ld", arg, last);
3490da2c8ad7SAleksandar Markovic return;
3491da2c8ad7SAleksandar Markovic }
3492da2c8ad7SAleksandar Markovic }
34934b25a506SJosh Kunz qemu_log("%s%s", type, get_comma(last));
3494da2c8ad7SAleksandar Markovic }
3495da2c8ad7SAleksandar Markovic
3496da2c8ad7SAleksandar Markovic static void
print_syslog(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3497a0939b89SPhilippe Mathieu-Daudé print_syslog(CPUArchState *cpu_env, const struct syscallname *name,
3498da2c8ad7SAleksandar Markovic abi_long arg0, abi_long arg1, abi_long arg2,
3499da2c8ad7SAleksandar Markovic abi_long arg3, abi_long arg4, abi_long arg5)
3500da2c8ad7SAleksandar Markovic {
3501da2c8ad7SAleksandar Markovic print_syscall_prologue(name);
3502da2c8ad7SAleksandar Markovic print_syslog_action(arg0, 0);
3503da2c8ad7SAleksandar Markovic print_pointer(arg1, 0);
3504da2c8ad7SAleksandar Markovic print_raw_param("%d", arg2, 1);
3505da2c8ad7SAleksandar Markovic print_syscall_epilogue(name);
3506da2c8ad7SAleksandar Markovic }
3507da2c8ad7SAleksandar Markovic #endif
3508da2c8ad7SAleksandar Markovic
350974d753acSMika Westerberg #ifdef TARGET_NR_mknod
351074d753acSMika Westerberg static void
print_mknod(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3511a0939b89SPhilippe Mathieu-Daudé print_mknod(CPUArchState *cpu_env, const struct syscallname *name,
351274d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
351374d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
351474d753acSMika Westerberg {
3515d2ee72a5SLaurent Vivier int hasdev = (arg1 & (S_IFCHR|S_IFBLK));
351674d753acSMika Westerberg
351774d753acSMika Westerberg print_syscall_prologue(name);
351874d753acSMika Westerberg print_string(arg0, 0);
351974d753acSMika Westerberg print_file_mode(arg1, (hasdev == 0));
352074d753acSMika Westerberg if (hasdev) {
3521d2ee72a5SLaurent Vivier print_raw_param("makedev(%d", major(arg2), 0);
3522d2ee72a5SLaurent Vivier print_raw_param("%d)", minor(arg2), 1);
352374d753acSMika Westerberg }
352474d753acSMika Westerberg print_syscall_epilogue(name);
352574d753acSMika Westerberg }
352674d753acSMika Westerberg #endif
352774d753acSMika Westerberg
352874d753acSMika Westerberg #ifdef TARGET_NR_mknodat
352974d753acSMika Westerberg static void
print_mknodat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3530a0939b89SPhilippe Mathieu-Daudé print_mknodat(CPUArchState *cpu_env, const struct syscallname *name,
353174d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
353274d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
353374d753acSMika Westerberg {
3534d2ee72a5SLaurent Vivier int hasdev = (arg2 & (S_IFCHR|S_IFBLK));
353574d753acSMika Westerberg
353674d753acSMika Westerberg print_syscall_prologue(name);
353774d753acSMika Westerberg print_at_dirfd(arg0, 0);
353874d753acSMika Westerberg print_string(arg1, 0);
353974d753acSMika Westerberg print_file_mode(arg2, (hasdev == 0));
354074d753acSMika Westerberg if (hasdev) {
3541d2ee72a5SLaurent Vivier print_raw_param("makedev(%d", major(arg3), 0);
3542d2ee72a5SLaurent Vivier print_raw_param("%d)", minor(arg3), 1);
354374d753acSMika Westerberg }
354474d753acSMika Westerberg print_syscall_epilogue(name);
354574d753acSMika Westerberg }
354674d753acSMika Westerberg #endif
354774d753acSMika Westerberg
354874d753acSMika Westerberg #ifdef TARGET_NR_mq_open
354974d753acSMika Westerberg static void
print_mq_open(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3550a0939b89SPhilippe Mathieu-Daudé print_mq_open(CPUArchState *cpu_env, const struct syscallname *name,
355174d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
355274d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
355374d753acSMika Westerberg {
3554d2ee72a5SLaurent Vivier int is_creat = (arg1 & TARGET_O_CREAT);
355574d753acSMika Westerberg
355674d753acSMika Westerberg print_syscall_prologue(name);
355774d753acSMika Westerberg print_string(arg0, 0);
355874d753acSMika Westerberg print_open_flags(arg1, (is_creat == 0));
355974d753acSMika Westerberg if (is_creat) {
356074d753acSMika Westerberg print_file_mode(arg2, 0);
356174d753acSMika Westerberg print_pointer(arg3, 1);
356274d753acSMika Westerberg }
356374d753acSMika Westerberg print_syscall_epilogue(name);
356474d753acSMika Westerberg }
356574d753acSMika Westerberg #endif
356674d753acSMika Westerberg
356774d753acSMika Westerberg #ifdef TARGET_NR_open
356874d753acSMika Westerberg static void
print_open(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3569a0939b89SPhilippe Mathieu-Daudé print_open(CPUArchState *cpu_env, const struct syscallname *name,
357074d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
357174d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
357274d753acSMika Westerberg {
3573d2ee72a5SLaurent Vivier int is_creat = (arg1 & TARGET_O_CREAT);
357474d753acSMika Westerberg
357574d753acSMika Westerberg print_syscall_prologue(name);
357674d753acSMika Westerberg print_string(arg0, 0);
357774d753acSMika Westerberg print_open_flags(arg1, (is_creat == 0));
357874d753acSMika Westerberg if (is_creat)
357974d753acSMika Westerberg print_file_mode(arg2, 1);
358074d753acSMika Westerberg print_syscall_epilogue(name);
358174d753acSMika Westerberg }
358274d753acSMika Westerberg #endif
358374d753acSMika Westerberg
358474d753acSMika Westerberg #ifdef TARGET_NR_openat
358574d753acSMika Westerberg static void
print_openat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3586a0939b89SPhilippe Mathieu-Daudé print_openat(CPUArchState *cpu_env, const struct syscallname *name,
358774d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
358874d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
358974d753acSMika Westerberg {
3590d2ee72a5SLaurent Vivier int is_creat = (arg2 & TARGET_O_CREAT);
359174d753acSMika Westerberg
359274d753acSMika Westerberg print_syscall_prologue(name);
359374d753acSMika Westerberg print_at_dirfd(arg0, 0);
359474d753acSMika Westerberg print_string(arg1, 0);
359574d753acSMika Westerberg print_open_flags(arg2, (is_creat == 0));
359674d753acSMika Westerberg if (is_creat)
359774d753acSMika Westerberg print_file_mode(arg3, 1);
359874d753acSMika Westerberg print_syscall_epilogue(name);
359974d753acSMika Westerberg }
360074d753acSMika Westerberg #endif
360174d753acSMika Westerberg
360297299303SMichael Vogt #ifdef TARGET_NR_openat2
360397299303SMichael Vogt static void
print_openat2(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)360497299303SMichael Vogt print_openat2(CPUArchState *cpu_env, const struct syscallname *name,
360597299303SMichael Vogt abi_long arg0, abi_long arg1, abi_long arg2,
360697299303SMichael Vogt abi_long arg3, abi_long arg4, abi_long arg5)
360797299303SMichael Vogt {
360897299303SMichael Vogt struct open_how_ver0 how;
360997299303SMichael Vogt
361097299303SMichael Vogt print_syscall_prologue(name);
361197299303SMichael Vogt print_at_dirfd(arg0, 0);
361297299303SMichael Vogt print_string(arg1, 0);
361397299303SMichael Vogt
361497299303SMichael Vogt if ((abi_ulong)arg3 >= sizeof(struct target_open_how_ver0) &&
361597299303SMichael Vogt copy_struct_from_user(&how, sizeof(how), arg2, arg3) == 0) {
361697299303SMichael Vogt how.flags = tswap64(how.flags);
361797299303SMichael Vogt how.mode = tswap64(how.mode);
361897299303SMichael Vogt how.resolve = tswap64(how.resolve);
361997299303SMichael Vogt qemu_log("{");
362097299303SMichael Vogt print_open_flags(how.flags, 0);
362197299303SMichael Vogt if (how.flags & TARGET_O_CREAT) {
362297299303SMichael Vogt print_file_mode(how.mode, 0);
362397299303SMichael Vogt }
362497299303SMichael Vogt print_flags(openat2_resolve_flags, how.resolve, 1);
362597299303SMichael Vogt qemu_log("},");
362697299303SMichael Vogt } else {
362797299303SMichael Vogt print_pointer(arg2, 0);
362897299303SMichael Vogt }
362997299303SMichael Vogt print_raw_param(TARGET_ABI_FMT_lu, arg3, 1);
363097299303SMichael Vogt print_syscall_epilogue(name);
363197299303SMichael Vogt }
363297299303SMichael Vogt #endif
363397299303SMichael Vogt
3634cc054c6fSHelge Deller #ifdef TARGET_NR_pidfd_send_signal
3635cc054c6fSHelge Deller static void
print_pidfd_send_signal(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3636cc054c6fSHelge Deller print_pidfd_send_signal(CPUArchState *cpu_env, const struct syscallname *name,
3637cc054c6fSHelge Deller abi_long arg0, abi_long arg1, abi_long arg2,
3638cc054c6fSHelge Deller abi_long arg3, abi_long arg4, abi_long arg5)
3639cc054c6fSHelge Deller {
3640cc054c6fSHelge Deller void *p;
3641cc054c6fSHelge Deller target_siginfo_t uinfo;
3642cc054c6fSHelge Deller
3643cc054c6fSHelge Deller print_syscall_prologue(name);
3644cc054c6fSHelge Deller print_raw_param("%d", arg0, 0);
3645cc054c6fSHelge Deller print_signal(arg1, 0);
3646cc054c6fSHelge Deller
3647cc054c6fSHelge Deller p = lock_user(VERIFY_READ, arg2, sizeof(target_siginfo_t), 1);
3648cc054c6fSHelge Deller if (p) {
3649cc054c6fSHelge Deller get_target_siginfo(&uinfo, p);
3650cc054c6fSHelge Deller print_siginfo(&uinfo);
3651cc054c6fSHelge Deller
3652cc054c6fSHelge Deller unlock_user(p, arg2, 0);
3653cc054c6fSHelge Deller } else {
365446187d70SLaurent Vivier print_pointer(arg2, 0);
3655cc054c6fSHelge Deller }
3656cc054c6fSHelge Deller
365746187d70SLaurent Vivier print_raw_param("%u", arg3, 1);
3658cc054c6fSHelge Deller print_syscall_epilogue(name);
3659cc054c6fSHelge Deller }
3660cc054c6fSHelge Deller #endif
3661cc054c6fSHelge Deller
366274d753acSMika Westerberg #ifdef TARGET_NR_mq_unlink
366374d753acSMika Westerberg static void
print_mq_unlink(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3664a0939b89SPhilippe Mathieu-Daudé print_mq_unlink(CPUArchState *cpu_env, const struct syscallname *name,
366574d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
366674d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
366774d753acSMika Westerberg {
366874d753acSMika Westerberg print_syscall_prologue(name);
366974d753acSMika Westerberg print_string(arg0, 1);
367074d753acSMika Westerberg print_syscall_epilogue(name);
367174d753acSMika Westerberg }
367274d753acSMika Westerberg #endif
367374d753acSMika Westerberg
367474d753acSMika Westerberg #if defined(TARGET_NR_fstatat64) || defined(TARGET_NR_newfstatat)
367574d753acSMika Westerberg static void
print_fstatat64(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3676a0939b89SPhilippe Mathieu-Daudé print_fstatat64(CPUArchState *cpu_env, const struct syscallname *name,
367774d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
367874d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
367974d753acSMika Westerberg {
368074d753acSMika Westerberg print_syscall_prologue(name);
368174d753acSMika Westerberg print_at_dirfd(arg0, 0);
368274d753acSMika Westerberg print_string(arg1, 0);
368374d753acSMika Westerberg print_pointer(arg2, 0);
368474d753acSMika Westerberg print_flags(at_file_flags, arg3, 1);
368574d753acSMika Westerberg print_syscall_epilogue(name);
368674d753acSMika Westerberg }
368774d753acSMika Westerberg #define print_newfstatat print_fstatat64
368874d753acSMika Westerberg #endif
368974d753acSMika Westerberg
369074d753acSMika Westerberg #ifdef TARGET_NR_readlink
369174d753acSMika Westerberg static void
print_readlink(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3692a0939b89SPhilippe Mathieu-Daudé print_readlink(CPUArchState *cpu_env, const struct syscallname *name,
369374d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
369474d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
369574d753acSMika Westerberg {
369674d753acSMika Westerberg print_syscall_prologue(name);
369774d753acSMika Westerberg print_string(arg0, 0);
369874d753acSMika Westerberg print_pointer(arg1, 0);
3699d2ee72a5SLaurent Vivier print_raw_param("%u", arg2, 1);
370074d753acSMika Westerberg print_syscall_epilogue(name);
370174d753acSMika Westerberg }
370274d753acSMika Westerberg #endif
370374d753acSMika Westerberg
370474d753acSMika Westerberg #ifdef TARGET_NR_readlinkat
370574d753acSMika Westerberg static void
print_readlinkat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3706a0939b89SPhilippe Mathieu-Daudé print_readlinkat(CPUArchState *cpu_env, const struct syscallname *name,
370774d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
370874d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
370974d753acSMika Westerberg {
371074d753acSMika Westerberg print_syscall_prologue(name);
371174d753acSMika Westerberg print_at_dirfd(arg0, 0);
371274d753acSMika Westerberg print_string(arg1, 0);
371374d753acSMika Westerberg print_pointer(arg2, 0);
3714d2ee72a5SLaurent Vivier print_raw_param("%u", arg3, 1);
371574d753acSMika Westerberg print_syscall_epilogue(name);
371674d753acSMika Westerberg }
371774d753acSMika Westerberg #endif
371874d753acSMika Westerberg
371974d753acSMika Westerberg #ifdef TARGET_NR_rename
372074d753acSMika Westerberg static void
print_rename(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3721a0939b89SPhilippe Mathieu-Daudé print_rename(CPUArchState *cpu_env, const struct syscallname *name,
372274d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
372374d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
372474d753acSMika Westerberg {
372574d753acSMika Westerberg print_syscall_prologue(name);
372674d753acSMika Westerberg print_string(arg0, 0);
372774d753acSMika Westerberg print_string(arg1, 1);
372874d753acSMika Westerberg print_syscall_epilogue(name);
372974d753acSMika Westerberg }
373074d753acSMika Westerberg #endif
373174d753acSMika Westerberg
373274d753acSMika Westerberg #ifdef TARGET_NR_renameat
373374d753acSMika Westerberg static void
print_renameat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3734a0939b89SPhilippe Mathieu-Daudé print_renameat(CPUArchState *cpu_env, const struct syscallname *name,
373574d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
373674d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
373774d753acSMika Westerberg {
373874d753acSMika Westerberg print_syscall_prologue(name);
373974d753acSMika Westerberg print_at_dirfd(arg0, 0);
374074d753acSMika Westerberg print_string(arg1, 0);
374174d753acSMika Westerberg print_at_dirfd(arg2, 0);
374274d753acSMika Westerberg print_string(arg3, 1);
374374d753acSMika Westerberg print_syscall_epilogue(name);
374474d753acSMika Westerberg }
374574d753acSMika Westerberg #endif
374674d753acSMika Westerberg
374774d753acSMika Westerberg #ifdef TARGET_NR_statfs
374874d753acSMika Westerberg static void
print_statfs(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3749a0939b89SPhilippe Mathieu-Daudé print_statfs(CPUArchState *cpu_env, const struct syscallname *name,
375074d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
375174d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
375274d753acSMika Westerberg {
375374d753acSMika Westerberg print_syscall_prologue(name);
375474d753acSMika Westerberg print_string(arg0, 0);
375574d753acSMika Westerberg print_pointer(arg1, 1);
375674d753acSMika Westerberg print_syscall_epilogue(name);
375774d753acSMika Westerberg }
37584f7f8924SAleksandar Rikalo #endif
37594f7f8924SAleksandar Rikalo
37604f7f8924SAleksandar Rikalo #ifdef TARGET_NR_statfs64
37614f7f8924SAleksandar Rikalo static void
print_statfs64(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3762a0939b89SPhilippe Mathieu-Daudé print_statfs64(CPUArchState *cpu_env, const struct syscallname *name,
37634f7f8924SAleksandar Rikalo abi_long arg0, abi_long arg1, abi_long arg2,
37644f7f8924SAleksandar Rikalo abi_long arg3, abi_long arg4, abi_long arg5)
37654f7f8924SAleksandar Rikalo {
37664f7f8924SAleksandar Rikalo print_syscall_prologue(name);
37674f7f8924SAleksandar Rikalo print_string(arg0, 0);
37684f7f8924SAleksandar Rikalo print_pointer(arg1, 1);
37694f7f8924SAleksandar Rikalo print_syscall_epilogue(name);
37704f7f8924SAleksandar Rikalo }
377174d753acSMika Westerberg #endif
377274d753acSMika Westerberg
377374d753acSMika Westerberg #ifdef TARGET_NR_symlink
377474d753acSMika Westerberg static void
print_symlink(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3775a0939b89SPhilippe Mathieu-Daudé print_symlink(CPUArchState *cpu_env, const struct syscallname *name,
377674d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
377774d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
377874d753acSMika Westerberg {
377974d753acSMika Westerberg print_syscall_prologue(name);
378074d753acSMika Westerberg print_string(arg0, 0);
378174d753acSMika Westerberg print_string(arg1, 1);
378274d753acSMika Westerberg print_syscall_epilogue(name);
378374d753acSMika Westerberg }
378474d753acSMika Westerberg #endif
378574d753acSMika Westerberg
378674d753acSMika Westerberg #ifdef TARGET_NR_symlinkat
378774d753acSMika Westerberg static void
print_symlinkat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3788a0939b89SPhilippe Mathieu-Daudé print_symlinkat(CPUArchState *cpu_env, const struct syscallname *name,
378974d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
379074d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
379174d753acSMika Westerberg {
379274d753acSMika Westerberg print_syscall_prologue(name);
379374d753acSMika Westerberg print_string(arg0, 0);
379474d753acSMika Westerberg print_at_dirfd(arg1, 0);
379574d753acSMika Westerberg print_string(arg2, 1);
379674d753acSMika Westerberg print_syscall_epilogue(name);
379774d753acSMika Westerberg }
379874d753acSMika Westerberg #endif
379974d753acSMika Westerberg
380074d753acSMika Westerberg #ifdef TARGET_NR_mount
380174d753acSMika Westerberg static void
print_mount(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3802a0939b89SPhilippe Mathieu-Daudé print_mount(CPUArchState *cpu_env, const struct syscallname *name,
380374d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
380474d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
380574d753acSMika Westerberg {
380674d753acSMika Westerberg print_syscall_prologue(name);
380774d753acSMika Westerberg print_string(arg0, 0);
380874d753acSMika Westerberg print_string(arg1, 0);
380974d753acSMika Westerberg print_string(arg2, 0);
381074d753acSMika Westerberg print_flags(mount_flags, arg3, 0);
381174d753acSMika Westerberg print_pointer(arg4, 1);
381274d753acSMika Westerberg print_syscall_epilogue(name);
381374d753acSMika Westerberg }
381474d753acSMika Westerberg #endif
381574d753acSMika Westerberg
381674d753acSMika Westerberg #ifdef TARGET_NR_umount
381774d753acSMika Westerberg static void
print_umount(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3818a0939b89SPhilippe Mathieu-Daudé print_umount(CPUArchState *cpu_env, const struct syscallname *name,
381974d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
382074d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
382174d753acSMika Westerberg {
382274d753acSMika Westerberg print_syscall_prologue(name);
382374d753acSMika Westerberg print_string(arg0, 1);
382474d753acSMika Westerberg print_syscall_epilogue(name);
382574d753acSMika Westerberg }
382674d753acSMika Westerberg #endif
382774d753acSMika Westerberg
382874d753acSMika Westerberg #ifdef TARGET_NR_umount2
382974d753acSMika Westerberg static void
print_umount2(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3830a0939b89SPhilippe Mathieu-Daudé print_umount2(CPUArchState *cpu_env, const struct syscallname *name,
383174d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
383274d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
383374d753acSMika Westerberg {
383474d753acSMika Westerberg print_syscall_prologue(name);
383574d753acSMika Westerberg print_string(arg0, 0);
383674d753acSMika Westerberg print_flags(umount2_flags, arg1, 1);
383774d753acSMika Westerberg print_syscall_epilogue(name);
383874d753acSMika Westerberg }
383974d753acSMika Westerberg #endif
384074d753acSMika Westerberg
384174d753acSMika Westerberg #ifdef TARGET_NR_unlink
384274d753acSMika Westerberg static void
print_unlink(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3843a0939b89SPhilippe Mathieu-Daudé print_unlink(CPUArchState *cpu_env, const struct syscallname *name,
384474d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
384574d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
384674d753acSMika Westerberg {
384774d753acSMika Westerberg print_syscall_prologue(name);
384874d753acSMika Westerberg print_string(arg0, 1);
384974d753acSMika Westerberg print_syscall_epilogue(name);
385074d753acSMika Westerberg }
385174d753acSMika Westerberg #endif
385274d753acSMika Westerberg
385374d753acSMika Westerberg #ifdef TARGET_NR_unlinkat
385474d753acSMika Westerberg static void
print_unlinkat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3855a0939b89SPhilippe Mathieu-Daudé print_unlinkat(CPUArchState *cpu_env, const struct syscallname *name,
385674d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
385774d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
385874d753acSMika Westerberg {
385974d753acSMika Westerberg print_syscall_prologue(name);
386074d753acSMika Westerberg print_at_dirfd(arg0, 0);
386174d753acSMika Westerberg print_string(arg1, 0);
386274d753acSMika Westerberg print_flags(unlinkat_flags, arg2, 1);
386374d753acSMika Westerberg print_syscall_epilogue(name);
386474d753acSMika Westerberg }
386574d753acSMika Westerberg #endif
386674d753acSMika Westerberg
38675847d309SMatus Kysel #ifdef TARGET_NR_unshare
38685847d309SMatus Kysel static void
print_unshare(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3869a0939b89SPhilippe Mathieu-Daudé print_unshare(CPUArchState *cpu_env, const struct syscallname *name,
38705847d309SMatus Kysel abi_long arg0, abi_long arg1, abi_long arg2,
38715847d309SMatus Kysel abi_long arg3, abi_long arg4, abi_long arg5)
38725847d309SMatus Kysel {
38735847d309SMatus Kysel print_syscall_prologue(name);
38745847d309SMatus Kysel print_flags(clone_flags, arg0, 1);
38755847d309SMatus Kysel print_syscall_epilogue(name);
38765847d309SMatus Kysel }
38775847d309SMatus Kysel #endif
38785847d309SMatus Kysel
387905f3adc9SHelge Deller #ifdef TARGET_NR_clock_nanosleep
388005f3adc9SHelge Deller static void
print_clock_nanosleep(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)388105f3adc9SHelge Deller print_clock_nanosleep(CPUArchState *cpu_env, const struct syscallname *name,
388205f3adc9SHelge Deller abi_long arg0, abi_long arg1, abi_long arg2,
388305f3adc9SHelge Deller abi_long arg3, abi_long arg4, abi_long arg5)
388405f3adc9SHelge Deller {
388505f3adc9SHelge Deller print_syscall_prologue(name);
388605f3adc9SHelge Deller print_enums(clockids, arg0, 0);
388705f3adc9SHelge Deller print_raw_param("%d", arg1, 0);
388805f3adc9SHelge Deller print_timespec(arg2, 0);
388905f3adc9SHelge Deller print_timespec(arg3, 1);
389005f3adc9SHelge Deller print_syscall_epilogue(name);
389105f3adc9SHelge Deller }
389205f3adc9SHelge Deller #endif
389305f3adc9SHelge Deller
389474d753acSMika Westerberg #ifdef TARGET_NR_utime
389574d753acSMika Westerberg static void
print_utime(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3896a0939b89SPhilippe Mathieu-Daudé print_utime(CPUArchState *cpu_env, const struct syscallname *name,
389774d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
389874d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
389974d753acSMika Westerberg {
390074d753acSMika Westerberg print_syscall_prologue(name);
390174d753acSMika Westerberg print_string(arg0, 0);
390274d753acSMika Westerberg print_pointer(arg1, 1);
390374d753acSMika Westerberg print_syscall_epilogue(name);
390474d753acSMika Westerberg }
390574d753acSMika Westerberg #endif
390674d753acSMika Westerberg
390774d753acSMika Westerberg #ifdef TARGET_NR_utimes
390874d753acSMika Westerberg static void
print_utimes(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3909a0939b89SPhilippe Mathieu-Daudé print_utimes(CPUArchState *cpu_env, const struct syscallname *name,
391074d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
391174d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
391274d753acSMika Westerberg {
391374d753acSMika Westerberg print_syscall_prologue(name);
391474d753acSMika Westerberg print_string(arg0, 0);
391574d753acSMika Westerberg print_pointer(arg1, 1);
391674d753acSMika Westerberg print_syscall_epilogue(name);
391774d753acSMika Westerberg }
391874d753acSMika Westerberg #endif
391974d753acSMika Westerberg
392074d753acSMika Westerberg #ifdef TARGET_NR_utimensat
392174d753acSMika Westerberg static void
print_utimensat(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3922a0939b89SPhilippe Mathieu-Daudé print_utimensat(CPUArchState *cpu_env, const struct syscallname *name,
392374d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
392474d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
392574d753acSMika Westerberg {
392674d753acSMika Westerberg print_syscall_prologue(name);
392774d753acSMika Westerberg print_at_dirfd(arg0, 0);
392874d753acSMika Westerberg print_string(arg1, 0);
392974d753acSMika Westerberg print_pointer(arg2, 0);
393074d753acSMika Westerberg print_flags(at_file_flags, arg3, 1);
393174d753acSMika Westerberg print_syscall_epilogue(name);
393274d753acSMika Westerberg }
393374d753acSMika Westerberg #endif
393474d753acSMika Westerberg
39358d9016c0SMike Frysinger #if defined(TARGET_NR_mmap) || defined(TARGET_NR_mmap2)
393674d753acSMika Westerberg static void
print_mmap_both(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5,bool is_old_mmap)3937d971040cSHelge Deller print_mmap_both(CPUArchState *cpu_env, const struct syscallname *name,
393874d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
3939d971040cSHelge Deller abi_long arg3, abi_long arg4, abi_long arg5,
3940d971040cSHelge Deller bool is_old_mmap)
394174d753acSMika Westerberg {
3942d971040cSHelge Deller if (is_old_mmap) {
3943d971040cSHelge Deller abi_ulong *v;
3944d971040cSHelge Deller abi_ulong argp = arg0;
3945d971040cSHelge Deller if (!(v = lock_user(VERIFY_READ, argp, 6 * sizeof(abi_ulong), 1)))
3946d971040cSHelge Deller return;
3947d971040cSHelge Deller arg0 = tswapal(v[0]);
3948d971040cSHelge Deller arg1 = tswapal(v[1]);
3949d971040cSHelge Deller arg2 = tswapal(v[2]);
3950d971040cSHelge Deller arg3 = tswapal(v[3]);
3951d971040cSHelge Deller arg4 = tswapal(v[4]);
3952d971040cSHelge Deller arg5 = tswapal(v[5]);
3953d971040cSHelge Deller unlock_user(v, argp, 0);
3954d971040cSHelge Deller }
395574d753acSMika Westerberg print_syscall_prologue(name);
395674d753acSMika Westerberg print_pointer(arg0, 0);
3957d2ee72a5SLaurent Vivier print_raw_param("%d", arg1, 0);
395874d753acSMika Westerberg print_flags(mmap_prot_flags, arg2, 0);
395974d753acSMika Westerberg print_flags(mmap_flags, arg3, 0);
3960d2ee72a5SLaurent Vivier print_raw_param("%d", arg4, 0);
3961d2ee72a5SLaurent Vivier print_raw_param("%#x", arg5, 1);
396274d753acSMika Westerberg print_syscall_epilogue(name);
396374d753acSMika Westerberg }
3964d971040cSHelge Deller #endif
3965d971040cSHelge Deller
3966d971040cSHelge Deller #if defined(TARGET_NR_mmap)
3967d971040cSHelge Deller static void
print_mmap(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3968d971040cSHelge Deller print_mmap(CPUArchState *cpu_env, const struct syscallname *name,
3969d971040cSHelge Deller abi_long arg0, abi_long arg1, abi_long arg2,
3970d971040cSHelge Deller abi_long arg3, abi_long arg4, abi_long arg5)
3971d971040cSHelge Deller {
3972d971040cSHelge Deller return print_mmap_both(cpu_env, name, arg0, arg1, arg2, arg3,
3973d971040cSHelge Deller arg4, arg5,
3974*d95fd983SIlya Leoshkevich #ifdef TARGET_ARCH_WANT_SYS_OLD_MMAP
3975d971040cSHelge Deller true
3976d971040cSHelge Deller #else
3977d971040cSHelge Deller false
3978d971040cSHelge Deller #endif
3979d971040cSHelge Deller );
3980d971040cSHelge Deller }
3981d971040cSHelge Deller #endif
3982d971040cSHelge Deller
3983d971040cSHelge Deller #if defined(TARGET_NR_mmap2)
3984d971040cSHelge Deller static void
print_mmap2(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3985d971040cSHelge Deller print_mmap2(CPUArchState *cpu_env, const struct syscallname *name,
3986d971040cSHelge Deller abi_long arg0, abi_long arg1, abi_long arg2,
3987d971040cSHelge Deller abi_long arg3, abi_long arg4, abi_long arg5)
3988d971040cSHelge Deller {
3989d971040cSHelge Deller return print_mmap_both(cpu_env, name, arg0, arg1, arg2, arg3,
3990d971040cSHelge Deller arg4, arg5, false);
3991d971040cSHelge Deller }
399274d753acSMika Westerberg #endif
399374d753acSMika Westerberg
399474d753acSMika Westerberg #ifdef TARGET_NR_mprotect
399574d753acSMika Westerberg static void
print_mprotect(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)3996a0939b89SPhilippe Mathieu-Daudé print_mprotect(CPUArchState *cpu_env, const struct syscallname *name,
399774d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
399874d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
399974d753acSMika Westerberg {
400074d753acSMika Westerberg print_syscall_prologue(name);
400174d753acSMika Westerberg print_pointer(arg0, 0);
4002d2ee72a5SLaurent Vivier print_raw_param("%d", arg1, 0);
400374d753acSMika Westerberg print_flags(mmap_prot_flags, arg2, 1);
400474d753acSMika Westerberg print_syscall_epilogue(name);
400574d753acSMika Westerberg }
400674d753acSMika Westerberg #endif
400774d753acSMika Westerberg
400874d753acSMika Westerberg #ifdef TARGET_NR_munmap
400974d753acSMika Westerberg static void
print_munmap(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)4010a0939b89SPhilippe Mathieu-Daudé print_munmap(CPUArchState *cpu_env, const struct syscallname *name,
401174d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
401274d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
401374d753acSMika Westerberg {
401474d753acSMika Westerberg print_syscall_prologue(name);
401574d753acSMika Westerberg print_pointer(arg0, 0);
4016d2ee72a5SLaurent Vivier print_raw_param("%d", arg1, 1);
401774d753acSMika Westerberg print_syscall_epilogue(name);
401874d753acSMika Westerberg }
401974d753acSMika Westerberg #endif
402074d753acSMika Westerberg
402174d753acSMika Westerberg #ifdef TARGET_NR_futex
print_futex_op(int cmd,int last)402253b578f3SRichard Henderson static void print_futex_op(int cmd, int last)
402374d753acSMika Westerberg {
402453b578f3SRichard Henderson static const char * const futex_names[] = {
402553b578f3SRichard Henderson #define NAME(X) [X] = #X
402653b578f3SRichard Henderson NAME(FUTEX_WAIT),
402753b578f3SRichard Henderson NAME(FUTEX_WAKE),
402853b578f3SRichard Henderson NAME(FUTEX_FD),
402953b578f3SRichard Henderson NAME(FUTEX_REQUEUE),
403053b578f3SRichard Henderson NAME(FUTEX_CMP_REQUEUE),
403153b578f3SRichard Henderson NAME(FUTEX_WAKE_OP),
403253b578f3SRichard Henderson NAME(FUTEX_LOCK_PI),
403353b578f3SRichard Henderson NAME(FUTEX_UNLOCK_PI),
403453b578f3SRichard Henderson NAME(FUTEX_TRYLOCK_PI),
403553b578f3SRichard Henderson NAME(FUTEX_WAIT_BITSET),
403653b578f3SRichard Henderson NAME(FUTEX_WAKE_BITSET),
403753b578f3SRichard Henderson NAME(FUTEX_WAIT_REQUEUE_PI),
403853b578f3SRichard Henderson NAME(FUTEX_CMP_REQUEUE_PI),
403953b578f3SRichard Henderson NAME(FUTEX_LOCK_PI2),
404053b578f3SRichard Henderson #undef NAME
404153b578f3SRichard Henderson };
404274d753acSMika Westerberg
404353b578f3SRichard Henderson unsigned base_cmd = cmd & FUTEX_CMD_MASK;
404453b578f3SRichard Henderson
404553b578f3SRichard Henderson if (base_cmd < ARRAY_SIZE(futex_names)) {
404653b578f3SRichard Henderson qemu_log("%s%s%s",
404753b578f3SRichard Henderson (cmd & FUTEX_PRIVATE_FLAG ? "FUTEX_PRIVATE_FLAG|" : ""),
404853b578f3SRichard Henderson (cmd & FUTEX_CLOCK_REALTIME ? "FUTEX_CLOCK_REALTIME|" : ""),
404953b578f3SRichard Henderson futex_names[base_cmd]);
405053b578f3SRichard Henderson } else {
405153b578f3SRichard Henderson qemu_log("0x%x", cmd);
40525f2243f3SPaul Brook }
405374d753acSMika Westerberg }
405474d753acSMika Westerberg
405574d753acSMika Westerberg static void
print_futex(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)4056a0939b89SPhilippe Mathieu-Daudé print_futex(CPUArchState *cpu_env, const struct syscallname *name,
405774d753acSMika Westerberg abi_long arg0, abi_long arg1, abi_long arg2,
405874d753acSMika Westerberg abi_long arg3, abi_long arg4, abi_long arg5)
405974d753acSMika Westerberg {
4060811ee5cfSHelge Deller abi_long op = arg1 & FUTEX_CMD_MASK;
406174d753acSMika Westerberg print_syscall_prologue(name);
406274d753acSMika Westerberg print_pointer(arg0, 0);
406374d753acSMika Westerberg print_futex_op(arg1, 0);
4064d2ee72a5SLaurent Vivier print_raw_param(",%d", arg2, 0);
4065811ee5cfSHelge Deller switch (op) {
4066811ee5cfSHelge Deller case FUTEX_WAIT:
4067811ee5cfSHelge Deller case FUTEX_WAIT_BITSET:
406853b578f3SRichard Henderson case FUTEX_LOCK_PI:
406953b578f3SRichard Henderson case FUTEX_LOCK_PI2:
407053b578f3SRichard Henderson case FUTEX_WAIT_REQUEUE_PI:
4071811ee5cfSHelge Deller print_timespec(arg3, 0);
4072811ee5cfSHelge Deller break;
4073811ee5cfSHelge Deller default:
4074811ee5cfSHelge Deller print_pointer(arg3, 0);
4075811ee5cfSHelge Deller break;
4076811ee5cfSHelge Deller }
407774d753acSMika Westerberg print_pointer(arg4, 0);
4078d2ee72a5SLaurent Vivier print_raw_param("%d", arg4, 1);
407974d753acSMika Westerberg print_syscall_epilogue(name);
408074d753acSMika Westerberg }
408174d753acSMika Westerberg #endif
408274d753acSMika Westerberg
4083dae81a08SHelge Deller #ifdef TARGET_NR_prlimit64
target_ressource_string(abi_ulong r)4084dae81a08SHelge Deller static const char *target_ressource_string(abi_ulong r)
4085dae81a08SHelge Deller {
4086dae81a08SHelge Deller #define RET_RES_ENTRY(res) case TARGET_##res: return #res;
4087dae81a08SHelge Deller switch (r) {
4088dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_AS);
4089dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_CORE);
4090dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_CPU);
4091dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_DATA);
4092dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_FSIZE);
4093dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_LOCKS);
4094dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_MEMLOCK);
4095dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_MSGQUEUE);
4096dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_NICE);
4097dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_NOFILE);
4098dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_NPROC);
4099dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_RSS);
4100dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_RTPRIO);
4101dae81a08SHelge Deller #ifdef RLIMIT_RTTIME
4102dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_RTTIME);
4103dae81a08SHelge Deller #endif
4104dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_SIGPENDING);
4105dae81a08SHelge Deller RET_RES_ENTRY(RLIMIT_STACK);
4106dae81a08SHelge Deller default:
4107dae81a08SHelge Deller return NULL;
4108dae81a08SHelge Deller }
4109dae81a08SHelge Deller #undef RET_RES_ENTRY
4110dae81a08SHelge Deller }
4111dae81a08SHelge Deller
4112dae81a08SHelge Deller static void
print_rlimit64(abi_ulong rlim_addr,int last)4113dae81a08SHelge Deller print_rlimit64(abi_ulong rlim_addr, int last)
4114dae81a08SHelge Deller {
4115dae81a08SHelge Deller if (rlim_addr) {
4116dae81a08SHelge Deller struct target_rlimit64 *rl;
4117dae81a08SHelge Deller
4118dae81a08SHelge Deller rl = lock_user(VERIFY_READ, rlim_addr, sizeof(*rl), 1);
4119dae81a08SHelge Deller if (!rl) {
4120dae81a08SHelge Deller print_pointer(rlim_addr, last);
4121dae81a08SHelge Deller return;
4122dae81a08SHelge Deller }
4123dae81a08SHelge Deller print_raw_param64("{rlim_cur=%" PRId64, tswap64(rl->rlim_cur), 0);
4124dae81a08SHelge Deller print_raw_param64("rlim_max=%" PRId64 "}", tswap64(rl->rlim_max),
4125dae81a08SHelge Deller last);
4126dae81a08SHelge Deller unlock_user(rl, rlim_addr, 0);
4127dae81a08SHelge Deller } else {
4128dae81a08SHelge Deller qemu_log("NULL%s", get_comma(last));
4129dae81a08SHelge Deller }
4130dae81a08SHelge Deller }
4131dae81a08SHelge Deller
4132dae81a08SHelge Deller static void
print_prlimit64(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)4133dae81a08SHelge Deller print_prlimit64(CPUArchState *cpu_env, const struct syscallname *name,
4134dae81a08SHelge Deller abi_long arg0, abi_long arg1, abi_long arg2,
4135dae81a08SHelge Deller abi_long arg3, abi_long arg4, abi_long arg5)
4136dae81a08SHelge Deller {
4137dae81a08SHelge Deller const char *rlim_name;
4138dae81a08SHelge Deller
4139dae81a08SHelge Deller print_syscall_prologue(name);
4140dae81a08SHelge Deller print_raw_param("%d", arg0, 0);
4141dae81a08SHelge Deller rlim_name = target_ressource_string(arg1);
4142dae81a08SHelge Deller if (rlim_name) {
4143dae81a08SHelge Deller qemu_log("%s,", rlim_name);
4144dae81a08SHelge Deller } else {
4145dae81a08SHelge Deller print_raw_param("%d", arg1, 0);
4146dae81a08SHelge Deller }
4147dae81a08SHelge Deller print_rlimit64(arg2, 0);
4148dae81a08SHelge Deller print_pointer(arg3, 1);
4149dae81a08SHelge Deller print_syscall_epilogue(name);
4150dae81a08SHelge Deller }
4151dae81a08SHelge Deller
4152dae81a08SHelge Deller static void
print_syscall_ret_prlimit64(CPUArchState * cpu_env,const struct syscallname * name,abi_long ret,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)4153dae81a08SHelge Deller print_syscall_ret_prlimit64(CPUArchState *cpu_env,
4154dae81a08SHelge Deller const struct syscallname *name,
4155dae81a08SHelge Deller abi_long ret, abi_long arg0, abi_long arg1,
4156dae81a08SHelge Deller abi_long arg2, abi_long arg3, abi_long arg4,
4157dae81a08SHelge Deller abi_long arg5)
4158dae81a08SHelge Deller {
4159dae81a08SHelge Deller if (!print_syscall_err(ret)) {
4160dae81a08SHelge Deller qemu_log(TARGET_ABI_FMT_ld, ret);
4161dae81a08SHelge Deller if (arg3) {
4162dae81a08SHelge Deller qemu_log(" (");
4163dae81a08SHelge Deller print_rlimit64(arg3, 1);
4164dae81a08SHelge Deller qemu_log(")");
4165dae81a08SHelge Deller }
4166dae81a08SHelge Deller }
4167dae81a08SHelge Deller qemu_log("\n");
4168dae81a08SHelge Deller }
4169dae81a08SHelge Deller #endif
4170dae81a08SHelge Deller
4171608e5592SLaurent Vivier #ifdef TARGET_NR_kill
4172608e5592SLaurent Vivier static void
print_kill(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)4173a0939b89SPhilippe Mathieu-Daudé print_kill(CPUArchState *cpu_env, const struct syscallname *name,
4174608e5592SLaurent Vivier abi_long arg0, abi_long arg1, abi_long arg2,
4175608e5592SLaurent Vivier abi_long arg3, abi_long arg4, abi_long arg5)
4176608e5592SLaurent Vivier {
4177608e5592SLaurent Vivier print_syscall_prologue(name);
4178608e5592SLaurent Vivier print_raw_param("%d", arg0, 0);
4179608e5592SLaurent Vivier print_signal(arg1, 1);
4180608e5592SLaurent Vivier print_syscall_epilogue(name);
4181608e5592SLaurent Vivier }
4182608e5592SLaurent Vivier #endif
4183608e5592SLaurent Vivier
41845162264eSMiloš Stojanović #ifdef TARGET_NR_tkill
41855162264eSMiloš Stojanović static void
print_tkill(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)4186a0939b89SPhilippe Mathieu-Daudé print_tkill(CPUArchState *cpu_env, const struct syscallname *name,
41875162264eSMiloš Stojanović abi_long arg0, abi_long arg1, abi_long arg2,
41885162264eSMiloš Stojanović abi_long arg3, abi_long arg4, abi_long arg5)
41895162264eSMiloš Stojanović {
41905162264eSMiloš Stojanović print_syscall_prologue(name);
41915162264eSMiloš Stojanović print_raw_param("%d", arg0, 0);
41925162264eSMiloš Stojanović print_signal(arg1, 1);
41935162264eSMiloš Stojanović print_syscall_epilogue(name);
41945162264eSMiloš Stojanović }
41955162264eSMiloš Stojanović #endif
41965162264eSMiloš Stojanović
41975162264eSMiloš Stojanović #ifdef TARGET_NR_tgkill
41985162264eSMiloš Stojanović static void
print_tgkill(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)4199a0939b89SPhilippe Mathieu-Daudé print_tgkill(CPUArchState *cpu_env, const struct syscallname *name,
42005162264eSMiloš Stojanović abi_long arg0, abi_long arg1, abi_long arg2,
42015162264eSMiloš Stojanović abi_long arg3, abi_long arg4, abi_long arg5)
42025162264eSMiloš Stojanović {
42035162264eSMiloš Stojanović print_syscall_prologue(name);
42045162264eSMiloš Stojanović print_raw_param("%d", arg0, 0);
42055162264eSMiloš Stojanović print_raw_param("%d", arg1, 0);
42065162264eSMiloš Stojanović print_signal(arg2, 1);
42075162264eSMiloš Stojanović print_syscall_epilogue(name);
42085162264eSMiloš Stojanović }
42095162264eSMiloš Stojanović #endif
42105162264eSMiloš Stojanović
4211036cf169SHelge Deller #if defined(TARGET_NR_pread64) || defined(TARGET_NR_pwrite64)
4212036cf169SHelge Deller static void
print_pread64(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)4213036cf169SHelge Deller print_pread64(CPUArchState *cpu_env, const struct syscallname *name,
4214036cf169SHelge Deller abi_long arg0, abi_long arg1, abi_long arg2,
4215036cf169SHelge Deller abi_long arg3, abi_long arg4, abi_long arg5)
4216036cf169SHelge Deller {
4217036cf169SHelge Deller if (regpairs_aligned(cpu_env, TARGET_NR_pread64)) {
4218036cf169SHelge Deller arg3 = arg4;
4219036cf169SHelge Deller arg4 = arg5;
4220036cf169SHelge Deller }
4221036cf169SHelge Deller print_syscall_prologue(name);
4222036cf169SHelge Deller print_raw_param("%d", arg0, 0);
4223036cf169SHelge Deller print_pointer(arg1, 0);
4224036cf169SHelge Deller print_raw_param("%d", arg2, 0);
4225036cf169SHelge Deller print_raw_param("%" PRIu64, target_offset64(arg3, arg4), 1);
4226036cf169SHelge Deller print_syscall_epilogue(name);
4227036cf169SHelge Deller }
4228036cf169SHelge Deller #endif
4229036cf169SHelge Deller
4230d42744feSJim Wilson #ifdef TARGET_NR_statx
4231d42744feSJim Wilson static void
print_statx(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)4232a0939b89SPhilippe Mathieu-Daudé print_statx(CPUArchState *cpu_env, const struct syscallname *name,
4233d42744feSJim Wilson abi_long arg0, abi_long arg1, abi_long arg2,
4234d42744feSJim Wilson abi_long arg3, abi_long arg4, abi_long arg5)
4235d42744feSJim Wilson {
4236d42744feSJim Wilson print_syscall_prologue(name);
4237d42744feSJim Wilson print_at_dirfd(arg0, 0);
4238d42744feSJim Wilson print_string(arg1, 0);
4239d42744feSJim Wilson print_flags(statx_flags, arg2, 0);
4240d42744feSJim Wilson print_flags(statx_mask, arg3, 0);
4241d42744feSJim Wilson print_pointer(arg4, 1);
4242d42744feSJim Wilson print_syscall_epilogue(name);
4243d42744feSJim Wilson }
4244d42744feSJim Wilson #endif
4245d42744feSJim Wilson
424679482e59SFilip Bozuta #ifdef TARGET_NR_ioctl
424779482e59SFilip Bozuta static void
print_ioctl(CPUArchState * cpu_env,const struct syscallname * name,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)4248a0939b89SPhilippe Mathieu-Daudé print_ioctl(CPUArchState *cpu_env, const struct syscallname *name,
424979482e59SFilip Bozuta abi_long arg0, abi_long arg1, abi_long arg2,
425079482e59SFilip Bozuta abi_long arg3, abi_long arg4, abi_long arg5)
425179482e59SFilip Bozuta {
425279482e59SFilip Bozuta print_syscall_prologue(name);
425379482e59SFilip Bozuta print_raw_param("%d", arg0, 0);
425479482e59SFilip Bozuta
425579482e59SFilip Bozuta const IOCTLEntry *ie;
425679482e59SFilip Bozuta const argtype *arg_type;
425779482e59SFilip Bozuta void *argptr;
425879482e59SFilip Bozuta int target_size;
425979482e59SFilip Bozuta
426079482e59SFilip Bozuta for (ie = ioctl_entries; ie->target_cmd != 0; ie++) {
426179482e59SFilip Bozuta if (ie->target_cmd == arg1) {
426279482e59SFilip Bozuta break;
426379482e59SFilip Bozuta }
426479482e59SFilip Bozuta }
426579482e59SFilip Bozuta
426679482e59SFilip Bozuta if (ie->target_cmd == 0) {
426779482e59SFilip Bozuta print_raw_param("%#x", arg1, 0);
426879482e59SFilip Bozuta print_raw_param("%#x", arg2, 1);
426979482e59SFilip Bozuta } else {
427079482e59SFilip Bozuta qemu_log("%s", ie->name);
427179482e59SFilip Bozuta arg_type = ie->arg_type;
427279482e59SFilip Bozuta
427379482e59SFilip Bozuta if (arg_type[0] != TYPE_NULL) {
427479482e59SFilip Bozuta qemu_log(",");
427579482e59SFilip Bozuta
427679482e59SFilip Bozuta switch (arg_type[0]) {
427779482e59SFilip Bozuta case TYPE_PTRVOID:
427879482e59SFilip Bozuta print_pointer(arg2, 1);
427979482e59SFilip Bozuta break;
428079482e59SFilip Bozuta case TYPE_CHAR:
428179482e59SFilip Bozuta case TYPE_SHORT:
428279482e59SFilip Bozuta case TYPE_INT:
428379482e59SFilip Bozuta print_raw_param("%d", arg2, 1);
428479482e59SFilip Bozuta break;
428579482e59SFilip Bozuta case TYPE_LONG:
428679482e59SFilip Bozuta print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
428779482e59SFilip Bozuta break;
428879482e59SFilip Bozuta case TYPE_ULONG:
428979482e59SFilip Bozuta print_raw_param(TARGET_ABI_FMT_lu, arg2, 1);
429079482e59SFilip Bozuta break;
429179482e59SFilip Bozuta case TYPE_PTR:
429279482e59SFilip Bozuta switch (ie->access) {
429379482e59SFilip Bozuta case IOC_R:
429479482e59SFilip Bozuta print_pointer(arg2, 1);
429579482e59SFilip Bozuta break;
429679482e59SFilip Bozuta case IOC_W:
429779482e59SFilip Bozuta case IOC_RW:
429879482e59SFilip Bozuta arg_type++;
429979482e59SFilip Bozuta target_size = thunk_type_size(arg_type, 0);
430079482e59SFilip Bozuta argptr = lock_user(VERIFY_READ, arg2, target_size, 1);
43014c1850c1SLaurent Vivier if (argptr) {
430279482e59SFilip Bozuta thunk_print(argptr, arg_type);
430379482e59SFilip Bozuta unlock_user(argptr, arg2, target_size);
43044c1850c1SLaurent Vivier } else {
43054c1850c1SLaurent Vivier print_pointer(arg2, 1);
43064c1850c1SLaurent Vivier }
430779482e59SFilip Bozuta break;
430879482e59SFilip Bozuta }
430979482e59SFilip Bozuta break;
431079482e59SFilip Bozuta default:
431179482e59SFilip Bozuta g_assert_not_reached();
431279482e59SFilip Bozuta }
431379482e59SFilip Bozuta }
431479482e59SFilip Bozuta }
431579482e59SFilip Bozuta print_syscall_epilogue(name);
431679482e59SFilip Bozuta }
431779482e59SFilip Bozuta #endif
431879482e59SFilip Bozuta
4319322bfaa2SIlya Leoshkevich #if defined(TARGET_NR_wait4) || defined(TARGET_NR_waitpid)
print_wstatus(int wstatus)4320322bfaa2SIlya Leoshkevich static void print_wstatus(int wstatus)
4321322bfaa2SIlya Leoshkevich {
4322322bfaa2SIlya Leoshkevich if (WIFSIGNALED(wstatus)) {
4323322bfaa2SIlya Leoshkevich qemu_log("{WIFSIGNALED(s) && WTERMSIG(s) == ");
4324322bfaa2SIlya Leoshkevich print_signal(WTERMSIG(wstatus), 1);
4325322bfaa2SIlya Leoshkevich if (WCOREDUMP(wstatus)) {
4326322bfaa2SIlya Leoshkevich qemu_log(" && WCOREDUMP(s)");
4327322bfaa2SIlya Leoshkevich }
4328322bfaa2SIlya Leoshkevich qemu_log("}");
4329322bfaa2SIlya Leoshkevich } else if (WIFEXITED(wstatus)) {
4330322bfaa2SIlya Leoshkevich qemu_log("{WIFEXITED(s) && WEXITSTATUS(s) == %d}",
4331322bfaa2SIlya Leoshkevich WEXITSTATUS(wstatus));
4332322bfaa2SIlya Leoshkevich } else {
4333322bfaa2SIlya Leoshkevich print_number(wstatus, 1);
4334322bfaa2SIlya Leoshkevich }
4335322bfaa2SIlya Leoshkevich }
4336322bfaa2SIlya Leoshkevich
print_ret_wstatus(abi_long ret,abi_long wstatus_addr)4337322bfaa2SIlya Leoshkevich static void print_ret_wstatus(abi_long ret, abi_long wstatus_addr)
4338322bfaa2SIlya Leoshkevich {
4339322bfaa2SIlya Leoshkevich int wstatus;
4340322bfaa2SIlya Leoshkevich
4341322bfaa2SIlya Leoshkevich if (!print_syscall_err(ret)
4342322bfaa2SIlya Leoshkevich && wstatus_addr
4343322bfaa2SIlya Leoshkevich && get_user_s32(wstatus, wstatus_addr)) {
4344322bfaa2SIlya Leoshkevich qemu_log(TARGET_ABI_FMT_ld " (wstatus=", ret);
4345322bfaa2SIlya Leoshkevich print_wstatus(wstatus);
4346322bfaa2SIlya Leoshkevich qemu_log(")");
4347322bfaa2SIlya Leoshkevich }
4348322bfaa2SIlya Leoshkevich qemu_log("\n");
4349322bfaa2SIlya Leoshkevich }
4350322bfaa2SIlya Leoshkevich #endif
4351322bfaa2SIlya Leoshkevich
4352322bfaa2SIlya Leoshkevich #ifdef TARGET_NR_wait4
4353322bfaa2SIlya Leoshkevich static void
print_syscall_ret_wait4(CPUArchState * cpu_env,const struct syscallname * name,abi_long ret,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)4354322bfaa2SIlya Leoshkevich print_syscall_ret_wait4(CPUArchState *cpu_env,
4355322bfaa2SIlya Leoshkevich const struct syscallname *name,
4356322bfaa2SIlya Leoshkevich abi_long ret, abi_long arg0, abi_long arg1,
4357322bfaa2SIlya Leoshkevich abi_long arg2, abi_long arg3, abi_long arg4,
4358322bfaa2SIlya Leoshkevich abi_long arg5)
4359322bfaa2SIlya Leoshkevich {
4360322bfaa2SIlya Leoshkevich print_ret_wstatus(ret, arg1);
4361322bfaa2SIlya Leoshkevich }
4362322bfaa2SIlya Leoshkevich #endif
4363322bfaa2SIlya Leoshkevich
4364322bfaa2SIlya Leoshkevich #ifdef TARGET_NR_waitpid
4365322bfaa2SIlya Leoshkevich static void
print_syscall_ret_waitpid(CPUArchState * cpu_env,const struct syscallname * name,abi_long ret,abi_long arg0,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5)4366322bfaa2SIlya Leoshkevich print_syscall_ret_waitpid(CPUArchState *cpu_env,
4367322bfaa2SIlya Leoshkevich const struct syscallname *name,
4368322bfaa2SIlya Leoshkevich abi_long ret, abi_long arg0, abi_long arg1,
4369322bfaa2SIlya Leoshkevich abi_long arg2, abi_long arg3, abi_long arg4,
4370322bfaa2SIlya Leoshkevich abi_long arg5)
4371322bfaa2SIlya Leoshkevich {
4372322bfaa2SIlya Leoshkevich print_ret_wstatus(ret, arg1);
4373322bfaa2SIlya Leoshkevich }
4374322bfaa2SIlya Leoshkevich #endif
4375322bfaa2SIlya Leoshkevich
437633189d31Sths /*
437733189d31Sths * An array of all of the syscalls we know about
437833189d31Sths */
437933189d31Sths
43807ccfb2ebSblueswir1 static const struct syscallname scnames[] = {
438133189d31Sths #include "strace.list"
438233189d31Sths };
438333189d31Sths
4384b1503cdaSmalc static int nsyscalls = ARRAY_SIZE(scnames);
438533189d31Sths
438633189d31Sths /*
438733189d31Sths * The public interface to this module.
438833189d31Sths */
438933189d31Sths void
print_syscall(CPUArchState * cpu_env,int num,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5,abi_long arg6)4390a0939b89SPhilippe Mathieu-Daudé print_syscall(CPUArchState *cpu_env, int num,
4391c16f9ed3Sbellard abi_long arg1, abi_long arg2, abi_long arg3,
4392c16f9ed3Sbellard abi_long arg4, abi_long arg5, abi_long arg6)
439333189d31Sths {
439433189d31Sths int i;
4395c5a1c6b8SRichard Henderson FILE *f;
4396c5a1c6b8SRichard Henderson const char *format = "%s(" TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ","
4397c5a1c6b8SRichard Henderson TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ","
4398c5a1c6b8SRichard Henderson TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ")";
439933189d31Sths
4400c5a1c6b8SRichard Henderson f = qemu_log_trylock();
4401c5a1c6b8SRichard Henderson if (!f) {
4402c5a1c6b8SRichard Henderson return;
4403c5a1c6b8SRichard Henderson }
4404e8b609acSJ. Neuschäfer fprintf(f, "%d ", get_task_state(env_cpu(cpu_env))->ts_tid);
440533189d31Sths
4406c5a1c6b8SRichard Henderson for (i = 0; i < nsyscalls; i++) {
440733189d31Sths if (scnames[i].nr == num) {
440833189d31Sths if (scnames[i].call != NULL) {
4409c5a1c6b8SRichard Henderson scnames[i].call(cpu_env, &scnames[i], arg1, arg2, arg3,
4410c5a1c6b8SRichard Henderson arg4, arg5, arg6);
441133189d31Sths } else {
44126b23f777Sbellard /* XXX: this format system is broken because it uses
44136b23f777Sbellard host types and host pointers for strings */
4414c5a1c6b8SRichard Henderson if (scnames[i].format != NULL) {
441533189d31Sths format = scnames[i].format;
441633189d31Sths }
4417c5a1c6b8SRichard Henderson fprintf(f, format, scnames[i].name, arg1, arg2,
4418c5a1c6b8SRichard Henderson arg3, arg4, arg5, arg6);
4419c5a1c6b8SRichard Henderson }
4420c5a1c6b8SRichard Henderson qemu_log_unlock(f);
442174c11e55Spbrook return;
442233189d31Sths }
4423c5a1c6b8SRichard Henderson }
4424c5a1c6b8SRichard Henderson fprintf(f, "Unknown syscall %d\n", num);
4425c5a1c6b8SRichard Henderson qemu_log_unlock(f);
442633189d31Sths }
442733189d31Sths
442833189d31Sths
442933189d31Sths void
print_syscall_ret(CPUArchState * cpu_env,int num,abi_long ret,abi_long arg1,abi_long arg2,abi_long arg3,abi_long arg4,abi_long arg5,abi_long arg6)4430a0939b89SPhilippe Mathieu-Daudé print_syscall_ret(CPUArchState *cpu_env, int num, abi_long ret,
4431c84be71fSFilip Bozuta abi_long arg1, abi_long arg2, abi_long arg3,
4432c84be71fSFilip Bozuta abi_long arg4, abi_long arg5, abi_long arg6)
443333189d31Sths {
443433189d31Sths int i;
4435c5a1c6b8SRichard Henderson FILE *f;
443633189d31Sths
4437c5a1c6b8SRichard Henderson f = qemu_log_trylock();
4438c5a1c6b8SRichard Henderson if (!f) {
4439c5a1c6b8SRichard Henderson return;
4440c5a1c6b8SRichard Henderson }
4441c5a1c6b8SRichard Henderson
4442c5a1c6b8SRichard Henderson for (i = 0; i < nsyscalls; i++) {
444333189d31Sths if (scnames[i].nr == num) {
444433189d31Sths if (scnames[i].result != NULL) {
4445e400e119SFilip Bozuta scnames[i].result(cpu_env, &scnames[i], ret,
4446c84be71fSFilip Bozuta arg1, arg2, arg3,
4447c84be71fSFilip Bozuta arg4, arg5, arg6);
444833189d31Sths } else {
444942b16184SLaurent Vivier if (!print_syscall_err(ret)) {
4450c5a1c6b8SRichard Henderson fprintf(f, TARGET_ABI_FMT_ld, ret);
4451962b289eSAlexander Graf }
4452c5a1c6b8SRichard Henderson fprintf(f, "\n");
445333189d31Sths }
445433189d31Sths break;
445533189d31Sths }
445633189d31Sths }
4457c5a1c6b8SRichard Henderson qemu_log_unlock(f);
4458c5a1c6b8SRichard Henderson }
44590cb581d6SPeter Maydell
print_taken_signal(int target_signum,const target_siginfo_t * tinfo)44600cb581d6SPeter Maydell void print_taken_signal(int target_signum, const target_siginfo_t *tinfo)
44610cb581d6SPeter Maydell {
44620cb581d6SPeter Maydell /* Print the strace output for a signal being taken:
44630cb581d6SPeter Maydell * --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=0} ---
44640cb581d6SPeter Maydell */
4465c5a1c6b8SRichard Henderson FILE *f;
4466c5a1c6b8SRichard Henderson
4467c5a1c6b8SRichard Henderson f = qemu_log_trylock();
4468c5a1c6b8SRichard Henderson if (!f) {
4469c5a1c6b8SRichard Henderson return;
4470c5a1c6b8SRichard Henderson }
4471c5a1c6b8SRichard Henderson
4472c5a1c6b8SRichard Henderson fprintf(f, "--- ");
44730cb581d6SPeter Maydell print_signal(target_signum, 1);
4474c5a1c6b8SRichard Henderson fprintf(f, " ");
44750cb581d6SPeter Maydell print_siginfo(tinfo);
4476c5a1c6b8SRichard Henderson fprintf(f, " ---\n");
4477c5a1c6b8SRichard Henderson qemu_log_unlock(f);
44780cb581d6SPeter Maydell }
4479