home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / sun / volume3 / strace / part01 / defs.h next >
Encoding:
C/C++ Source or Header  |  1992-03-02  |  3.0 KB  |  101 lines

  1. /*
  2.  * @(#)defs.h    2.5 92/01/10
  3.  */
  4.  
  5. typedef struct tcb /* Trace Control Block */ {
  6.     short    flags;
  7. #define TCB_STARTUP    01    /* We have just begun ptracing this process */
  8. #define TCB_INUSE    02    /* This table entry is in use */
  9. #define TCB_INSYSCALL    04    /* A system call is in progress */
  10. #define TCB_ATTACHED    010    /* Process is not our own child */
  11. #define TCB_EXITING    020    /* As far as we know, this process is exiting */
  12. #define TCB_SUSPENDED    040    /* Process has done a wait(4), that can
  13.                    not be allowed to complete just now */
  14. #define TCB_BPTSET    0100    /* "Breakpoint" set after fork(2) */
  15. #define TCB_SIGTRAPPED    0200    /* Process wanted to block SIGTRAP */
  16.  
  17. #define entering(tcp)    (!((tcp)->flags & TCB_INSYSCALL))
  18. #define exiting(tcp)    ((tcp)->flags & TCB_INSYSCALL)
  19. #define syserror(tcp)    ((tcp)->u_error != 0)
  20. #define waiting_parent(tcp) \
  21.         (tcp->parent && \
  22.         (tcp->parent->flags & TCB_SUSPENDED) && \
  23.         (tcp->parent->waitpid <= 0 || tcp->parent->waitpid == tcp->pid))
  24.  
  25.     int    pid;        /* Process Id of this entry */
  26.     int    scno;        /* System call number */
  27.     int    u_args[8];    /* System call arguments */
  28.     int    u_error;    /* Error code */
  29.     int    u_rval;        /* (first) return value */
  30.     FILE    *outf;        /* Output file for this process */
  31.     char    *auxstr;    /* Auxiliary info from syscall (see RVAL_STR) */
  32.  
  33.     /* Support for tracing forked processes */
  34.     struct    tcb *parent;    /* Parent of this process */
  35.     int    nchildren;    /* # of traced children */
  36.     int    waitpid;    /* pid(s) this process is waiting for */
  37.                 /* (1st arg of wait4()) */
  38.     int    baddr;        /* `Breakpoint' address */
  39.     int    inst[2];    /* Instructions on above */
  40. } Tcb;
  41. #define NULLTCB        ((struct tcb *)0)
  42.  
  43. typedef struct xlat {
  44.     int    val;
  45.     char    *str;
  46. } Xlat;
  47. extern char *xlookup();
  48.  
  49. #define MAXPROC    16
  50. extern struct tcb tcbtab[];
  51. extern struct tcb *alloctcb();
  52. extern void droptcb();
  53.  
  54. extern char *signals[];
  55. extern int debug, verbose, followfork, tflag, cflag;
  56. extern unsigned int max_str_len;
  57. extern int Nproc;
  58.  
  59. extern void newoutf();
  60. extern void tprintf();
  61. extern int syscall();
  62. extern void printxval();
  63. extern int printargs();
  64. extern int addflags();
  65. extern int printflags();
  66. extern int umove();
  67. extern int umovestr();
  68. extern int printstr();
  69. extern void printtv();
  70. extern void printsock();
  71.  
  72. /*
  73.  * sys_* return values
  74.  */
  75. /* Format of syscall return values */
  76. #define RVAL_DEC    0    /* decimal format */
  77. #define RVAL_HEX    1    /* hex format */
  78. #define RVAL_OCT    2    /* octal format */
  79. #define RVAL_UDEC    3    /* unsigned decimal format */
  80. #define RVAL_FMASK    07    /* mask for these values */
  81.  
  82. #define RVAL_STR    010    /* Print `auxstr' field after return val */
  83. #define RVAL_NONE    020    /* Print nothing */
  84.  
  85. #define DFLT_STR_LEN    32    /* default maximum # of bytes printed in
  86.                   `printstr', change with `-s' switch */
  87.  
  88. /* macro's */
  89. #ifndef MAX
  90. #define MAX(a,b)        (((a)>(b))?(a):(b))
  91. #endif
  92. #ifndef MIN
  93. #define MIN(a,b)        (((a)<(b))?(a):(b))
  94. #endif
  95.  
  96. /* get offset of field within a user struct */
  97. #define uoff(field)    ((char *)&(((struct user *)0)->field) - \
  98.             (char *)(struct user *)0)
  99. #define Xoff(X, field)    ((char *)&(((struct X *)0)->field) - \
  100.             (char *)(struct X *)0)
  101.