]> granicus.if.org Git - strace/blobdiff - defs.h
tests: add a test for -yy option
[strace] / defs.h
diff --git a/defs.h b/defs.h
index 6b5f650494046fba1664647be002f0c0129aab7b..cd9817b84d0cac1a5803099dea4d5d6e0f8c10e5 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -150,28 +150,17 @@ extern char *stpcpy(char *dst, const char *src);
  */
 #define USE_CUSTOM_PRINTF 0
 
-#if (defined(SPARC) || defined(SPARC64) \
-    || defined(I386) || defined(X32) || defined(X86_64) \
-    || defined(ARM) || defined(AARCH64) \
-    || defined(AVR32) \
-    || defined(OR1K) \
-    || defined(METAG) \
-    || defined(TILE) \
-    || defined(XTENSA) \
-    || defined(ARC) \
-    ) && defined(__GLIBC__)
-# include <sys/ptrace.h>
-#else
-/* Work around awkward prototype in ptrace.h. */
+#ifdef NEED_PTRACE_PROTOTYPE_WORKAROUND
 # define ptrace xptrace
 # include <sys/ptrace.h>
 # undef ptrace
-# ifdef POWERPC
-#  define __KERNEL__
-#  include <asm/ptrace.h>
-#  undef __KERNEL__
-# endif
 extern long ptrace(int, int, char *, long);
+#else
+# include <sys/ptrace.h>
+#endif
+
+#if defined(POWERPC)
+# include <asm/ptrace.h>
 #endif
 
 #if defined(TILE)
@@ -381,7 +370,7 @@ struct arm_pt_regs {
 # define DEFAULT_PERSONALITY 0
 #endif
 #ifndef PERSONALITY0_WORDSIZE
-# define PERSONALITY0_WORDSIZE (int)(sizeof(long))
+# define PERSONALITY0_WORDSIZE SIZEOF_LONG
 #endif
 
 #if defined(I386) || defined(X86_64)
@@ -425,7 +414,7 @@ struct tcb {
 #endif
        long u_rval;            /* Return value */
 #if SUPPORTED_PERSONALITIES > 1
-       int currpers;           /* Personality at the time of scno update */
+       unsigned int currpers;  /* Personality at the time of scno update */
 #endif
        int curcol;             /* Output column for this process */
        FILE *outf;             /* Output file for this process */
@@ -436,6 +425,14 @@ struct tcb {
        struct timeval etime;   /* Syscall entry time */
                                /* Support for tracing forked processes: */
        long inst[2];           /* Saved clone args (badly named) */
+
+#ifdef USE_LIBUNWIND
+       struct UPT_info* libunwind_ui;
+       struct mmap_cache_t* mmap_cache;
+       unsigned int mmap_cache_size;
+       unsigned int mmap_cache_generation;
+       struct queue_t* queue;
+#endif
 };
 
 /* TCB flags */
@@ -511,9 +508,11 @@ typedef uint8_t qualbits_t;
 #define filtered(tcp)  ((tcp)->flags & TCB_FILTERED)
 
 struct xlat {
-       int val;
+       unsigned int val;
        const char *str;
 };
+#define XLAT(x) { x, #x }
+#define XLAT_END { 0, NULL }
 
 extern const struct xlat open_mode_flags[];
 extern const struct xlat addrfams[];
@@ -534,10 +533,11 @@ extern const struct xlat whence_codes[];
 # endif
 # define RVAL_LUDECIMAL        007     /* long unsigned decimal format */
 #endif
-#define RVAL_MASK      007     /* mask for these values */
+#define RVAL_FD                010     /* file descriptor */
+#define RVAL_MASK      017     /* mask for these values */
 
-#define RVAL_STR       010     /* Print `auxstr' field after return val */
-#define RVAL_NONE      020     /* Print nothing */
+#define RVAL_STR       020     /* Print `auxstr' field after return val */
+#define RVAL_NONE      040     /* Print nothing */
 
 #define TRACE_FILE     001     /* Trace file-related syscalls. */
 #define TRACE_IPC      002     /* Trace IPC-related syscalls. */
@@ -547,6 +547,8 @@ extern const struct xlat whence_codes[];
 #define TRACE_DESC     040     /* Trace file descriptor-related syscalls. */
 #define TRACE_MEMORY   0100    /* Trace memory mapping-related syscalls. */
 #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 */
 
 typedef enum {
        CFLAG_NONE = 0,
@@ -557,9 +559,10 @@ extern cflag_t cflag;
 extern bool debug_flag;
 extern bool Tflag;
 extern bool iflag;
+extern bool count_wallclock;
 extern unsigned int qflag;
 extern bool not_failing_only;
-extern bool show_fd_path;
+extern unsigned int show_fd_path;
 extern bool hide_log_until_execve;
 /* are we filtering traces based on paths? */
 extern const char **paths_selected;
@@ -567,6 +570,10 @@ extern const char **paths_selected;
 extern bool need_fork_exec_workarounds;
 extern unsigned xflag;
 extern unsigned followfork;
+#ifdef USE_LIBUNWIND
+/* if this is true do the stack trace for every system call */
+extern bool stack_trace_enabled;
+#endif
 extern unsigned ptrace_setoptions;
 extern unsigned max_strlen;
 extern unsigned os_release;
@@ -596,7 +603,7 @@ extern void set_overhead(int);
 extern void qualify(const char *);
 extern void print_pc(struct tcb *);
 extern int trace_syscall(struct tcb *);
-extern void count_syscall(struct tcb *, struct timeval *);
+extern void count_syscall(struct tcb *, const struct timeval *);
 extern void call_summary(FILE *);
 
 #if defined(AVR32) \
@@ -635,12 +642,13 @@ extern long getrval2(struct tcb *);
 extern int setbpt(struct tcb *);
 extern int clearbpt(struct tcb *);
 
-extern const char *signame(int);
+extern const char *signame(const int);
 extern void pathtrace_select(const char *);
 extern int pathtrace_match(struct tcb *);
 extern int getfdpath(struct tcb *, int, char *, unsigned);
 
-extern const char *xlookup(const struct xlat *, int);
+extern const char *xlookup(const struct xlat *, const unsigned int);
+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);
@@ -658,7 +666,7 @@ extern int next_set_bit(const void *bit_array, unsigned cur_bit, unsigned size_b
 #endif
 extern int printllval(struct tcb *, const char *, int);
 
-extern void printxval(const struct xlat *, int, const char *);
+extern void printxval(const struct xlat *, const unsigned int, const char *);
 extern int printargs(struct tcb *);
 extern int printargs_lu(struct tcb *);
 extern int printargs_ld(struct tcb *);
@@ -671,7 +679,7 @@ extern void printstr(struct tcb *, long, long);
 extern void printnum(struct tcb *, long, const char *);
 extern void printnum_int(struct tcb *, long, const char *);
 extern void printpath(struct tcb *, long);
-extern void printpathn(struct tcb *, long, int);
+extern void printpathn(struct tcb *, long, unsigned int);
 #define TIMESPEC_TEXT_BUFSIZE (sizeof(long)*3 * 2 + sizeof("{%u, %u}"))
 #define TIMEVAL_TEXT_BUFSIZE  TIMESPEC_TEXT_BUFSIZE
 extern void printtv_bitness(struct tcb *, long, enum bitness_t, int);
@@ -687,6 +695,8 @@ extern void printsiginfo(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 void print_dirfd(struct tcb *, int);
 extern void printsock(struct tcb *, long, int);
 extern void print_sock_optmgmt(struct tcb *, long, int);
 extern void printrusage(struct tcb *, long);
@@ -702,7 +712,7 @@ extern void tprint_open_modes(mode_t);
 extern const char *sprint_open_modes(mode_t);
 extern void print_loff_t(struct tcb *, long);
 
-extern const struct_ioctlent *ioctl_lookup(long);
+extern const struct_ioctlent *ioctl_lookup(unsigned long);
 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);
@@ -714,14 +724,24 @@ extern int block_ioctl(struct tcb *, 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 tv_nz(struct timeval *);
-extern int tv_cmp(struct timeval *, struct timeval *);
-extern double tv_float(struct timeval *);
-extern void tv_add(struct timeval *, struct timeval *, struct timeval *);
-extern void tv_sub(struct timeval *, struct timeval *, struct timeval *);
-extern void tv_mul(struct timeval *, struct timeval *, int);
-extern void tv_div(struct timeval *, struct timeval *, int);
+extern int ptp_ioctl(struct tcb *, long, long);
+
+extern int tv_nz(const struct timeval *);
+extern int tv_cmp(const struct timeval *, const struct timeval *);
+extern double tv_float(const struct timeval *);
+extern void tv_add(struct timeval *, const struct timeval *, const struct timeval *);
+extern void tv_sub(struct timeval *, const struct timeval *, const struct timeval *);
+extern void tv_mul(struct timeval *, const struct timeval *, int);
+extern void tv_div(struct timeval *, const struct timeval *, int);
+
+#ifdef USE_LIBUNWIND
+extern void unwind_init(void);
+extern void unwind_tcb_init(struct tcb *tcp);
+extern void unwind_tcb_fin(struct tcb *tcp);
+extern void unwind_cache_invalidate(struct tcb* tcp);
+extern void unwind_print_stacktrace(struct tcb* tcp);
+extern void unwind_capture_stacktrace(struct tcb* tcp);
+#endif
 
 /* Strace log generation machinery.
  *