*/
#define USE_CUSTOM_PRINTF 0
-#ifdef NEED_PTRACE_PROTOTYPE_WORKAROUND
-# define ptrace xptrace
-# include <sys/ptrace.h>
-# undef ptrace
-extern long ptrace(int, int, char *, long);
-#else
-# include <sys/ptrace.h>
-#endif
-
-#if defined(POWERPC)
-# include <asm/ptrace.h>
-#endif
-
-#if defined(TILE)
-# include <asm/ptrace.h> /* struct pt_regs */
-#endif
-
#ifndef ERESTARTSYS
# define ERESTARTSYS 512
#endif
# define ERESTART_RESTARTBLOCK 516
#endif
-#if !HAVE_DECL_PTRACE_SETOPTIONS
-# define PTRACE_SETOPTIONS 0x4200
-#endif
-#if !HAVE_DECL_PTRACE_GETEVENTMSG
-# define PTRACE_GETEVENTMSG 0x4201
-#endif
-#if !HAVE_DECL_PTRACE_GETSIGINFO
-# define PTRACE_GETSIGINFO 0x4202
-#endif
-
-#if !HAVE_DECL_PTRACE_O_TRACESYSGOOD
-# define PTRACE_O_TRACESYSGOOD 0x00000001
-#endif
-#if !HAVE_DECL_PTRACE_O_TRACEFORK
-# define PTRACE_O_TRACEFORK 0x00000002
-#endif
-#if !HAVE_DECL_PTRACE_O_TRACEVFORK
-# define PTRACE_O_TRACEVFORK 0x00000004
-#endif
-#if !HAVE_DECL_PTRACE_O_TRACECLONE
-# define PTRACE_O_TRACECLONE 0x00000008
-#endif
-#if !HAVE_DECL_PTRACE_O_TRACEEXEC
-# define PTRACE_O_TRACEEXEC 0x00000010
-#endif
-#if !HAVE_DECL_PTRACE_O_TRACEEXIT
-# define PTRACE_O_TRACEEXIT 0x00000040
-#endif
-
-#if !HAVE_DECL_PTRACE_EVENT_FORK
-# define PTRACE_EVENT_FORK 1
-#endif
-#if !HAVE_DECL_PTRACE_EVENT_VFORK
-# define PTRACE_EVENT_VFORK 2
-#endif
-#if !HAVE_DECL_PTRACE_EVENT_CLONE
-# define PTRACE_EVENT_CLONE 3
-#endif
-#if !HAVE_DECL_PTRACE_EVENT_EXEC
-# define PTRACE_EVENT_EXEC 4
-#endif
-#if !HAVE_DECL_PTRACE_EVENT_VFORK_DONE
-# define PTRACE_EVENT_VFORK_DONE 5
-#endif
-#if !HAVE_DECL_PTRACE_EVENT_EXIT
-# define PTRACE_EVENT_EXIT 6
-#endif
-
-#if !HAVE_DECL_PTRACE_PEEKUSER
-# define PTRACE_PEEKUSER PTRACE_PEEKUSR
-#endif
-#if !HAVE_DECL_PTRACE_POKEUSER
-# define PTRACE_POKEUSER PTRACE_POKEUSR
-#endif
-
-#undef PTRACE_SEIZE
-#define PTRACE_SEIZE 0x4206
-#undef PTRACE_INTERRUPT
-#define PTRACE_INTERRUPT 0x4207
-#undef PTRACE_LISTEN
-#define PTRACE_LISTEN 0x4208
-#undef PTRACE_EVENT_STOP
-#define PTRACE_EVENT_STOP 128
-
#ifdef ALPHA
# define REG_R0 0
# define REG_A0 16
typedef struct ioctlent {
const char *symbol;
- unsigned long code;
+ unsigned int code;
} struct_ioctlent;
/* Trace Control Block */
#define XLAT(x) { x, #x }
#define XLAT_END { 0, NULL }
-extern const struct xlat open_mode_flags[];
extern const struct xlat addrfams[];
-extern const struct xlat struct_user_offsets[];
+extern const struct xlat at_flags[];
extern const struct xlat open_access_modes[];
+extern const struct xlat open_mode_flags[];
extern const struct xlat whence_codes[];
/* Format of syscall return values */
#define SYSCALL_NEVER_FAILS 0200 /* Syscall is always successful. */
#define STACKTRACE_INVALIDATE_CACHE 0400 /* Trigger proc/maps cache updating */
#define STACKTRACE_CAPTURE_ON_ENTER 01000 /* Capture stacktrace on "entering" stage */
+#define TRACE_INDIRECT_SUBCALL 02000 /* Syscall is an indirect socket/ipc subcall. */
+
+#if defined(ARM) || defined(AARCH64) \
+ || defined(I386) || defined(X32) || defined(X86_64) \
+ || defined(BFIN) \
+ || defined(M68K) \
+ || defined(MICROBLAZE) \
+ || defined(S390) \
+ || defined(SH) || defined(SH64) \
+ || defined(SPARC) || defined(SPARC64) \
+ /**/
+# define NEED_UID16_PARSERS 1
+#else
+# define NEED_UID16_PARSERS 0
+#endif
typedef enum {
CFLAG_NONE = 0,
# define clear_regs() ((void)0)
# define get_regs(pid) ((void)0)
#endif
-extern int umoven(struct tcb *, long, int, char *);
+extern int umoven(struct tcb *, long, unsigned int, char *);
#define umove(pid, addr, objp) \
umoven((pid), (addr), sizeof(*(objp)), (char *) (objp))
-extern int umovestr(struct tcb *, long, int, char *);
+extern int umovestr(struct tcb *, long, unsigned int, char *);
extern int upeek(int pid, long, long *);
#if defined(SPARC) || defined(SPARC64) || defined(IA64) || defined(SH)
extern long getrval2(struct tcb *);
extern const char *xlat_search(const struct xlat *, const size_t, const unsigned int);
extern int string_to_uint(const char *str);
-extern int string_quote(const char *, char *, long, int);
extern int next_set_bit(const void *bit_array, unsigned cur_bit, unsigned size_bits);
+#define QUOTE_0_TERMINATED 0x01
+#define QUOTE_OMIT_LEADING_TRAILING_QUOTES 0x02
+
+extern int print_quoted_string(const char *, unsigned int, unsigned int);
+
/* a refers to the lower numbered u_arg,
* b refers to the higher numbered u_arg
*/
# define LONG_LONG(a,b) \
((long long)((unsigned long long)(unsigned)(b) | ((unsigned long long)(a)<<32)))
#endif
+extern int getllval(struct tcb *, unsigned long long *, int);
extern int printllval(struct tcb *, const char *, int);
extern void printxval(const struct xlat *, const unsigned int, const char *);
extern void addflags(const struct xlat *, int);
extern int printflags(const struct xlat *, int, const char *);
extern const char *sprintflags(const char *, const struct xlat *, int);
+extern const char *sprintmode(int);
+extern const char *sprinttime(time_t);
extern void dumpiov_in_msghdr(struct tcb *, long);
+extern void dumpiov_in_mmsghdr(struct tcb *, long);
extern void dumpiov(struct tcb *, int, long);
extern void dumpstr(struct tcb *, long, int);
extern void printstr(struct tcb *, long, long);
extern char *sprinttv(char *, struct tcb *, long, enum bitness_t, int special);
extern void print_timespec(struct tcb *, long);
extern void sprint_timespec(char *, struct tcb *, long);
-#ifdef HAVE_SIGINFO_T
-extern void printsiginfo(siginfo_t *, int);
+extern void printsiginfo(const siginfo_t *, int);
extern void printsiginfo_at(struct tcb *tcp, long addr);
-#endif
extern void printfd(struct tcb *, int);
-extern bool print_sockaddr_by_inode(const unsigned long);
+extern bool print_sockaddr_by_inode(const unsigned long, const char *);
extern void print_dirfd(struct tcb *, int);
extern void printsock(struct tcb *, long, int);
extern void print_sock_optmgmt(struct tcb *, long, int);
#ifdef ALPHA
extern void printrusage32(struct tcb *, long);
#endif
-extern void printuid(const char *, unsigned long);
+extern void printuid(const char *, const unsigned int);
extern void print_sigset_addr_len(struct tcb *, long, long);
extern void printsignal(int);
extern void tprint_iov(struct tcb *, unsigned long, unsigned long, int decode_iov);
extern void tprint_open_modes(int);
extern const char *sprint_open_modes(int);
extern void print_loff_t(struct tcb *, long);
+extern void print_seccomp_filter(struct tcb *tcp, unsigned long);
-extern const struct_ioctlent *ioctl_lookup(unsigned long);
+extern const struct_ioctlent *ioctl_lookup(const unsigned int);
extern const struct_ioctlent *ioctl_next_match(const struct_ioctlent *);
-extern int ioctl_decode(struct tcb *, long, long);
-extern int term_ioctl(struct tcb *, long, long);
-extern int sock_ioctl(struct tcb *, long, long);
-extern int proc_ioctl(struct tcb *, int, int);
-extern int rtc_ioctl(struct tcb *, long, long);
-extern int scsi_ioctl(struct tcb *, long, long);
-extern int block_ioctl(struct tcb *, long, long);
-extern int v4l2_ioctl(struct tcb *, unsigned long, long);
-extern int mtd_ioctl(struct tcb *, long, long);
-extern int ubi_ioctl(struct tcb *, long, long);
-extern int loop_ioctl(struct tcb *, long, long);
-extern int ptp_ioctl(struct tcb *, long, long);
+extern void ioctl_print_code(const unsigned int);
+extern int ioctl_decode(struct tcb *, const unsigned int, long);
+extern int ioctl_decode_command_number(const unsigned int);
+extern int block_ioctl(struct tcb *, const unsigned int, long);
+extern int loop_ioctl(struct tcb *, const unsigned int, long);
+extern int mtd_ioctl(struct tcb *, const unsigned int, long);
+extern int ptp_ioctl(struct tcb *, const unsigned int, long);
+extern int rtc_ioctl(struct tcb *, const unsigned int, long);
+extern int scsi_ioctl(struct tcb *, const unsigned int, long);
+extern int sock_ioctl(struct tcb *, const unsigned int, long);
+extern int term_ioctl(struct tcb *, const unsigned int, long);
+extern int ubi_ioctl(struct tcb *, const unsigned int, long);
+extern int v4l2_ioctl(struct tcb *, const unsigned int, long);
extern int tv_nz(const struct timeval *);
extern int tv_cmp(const struct timeval *, const struct timeval *);