home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3998 / defs.h next >
Encoding:
C/C++ Source or Header  |  1991-09-09  |  2.3 KB  |  87 lines

  1. /*
  2.  * @(#)defs.h    1.5 91/09/05
  3.  */
  4.  
  5. typedef struct tcb /* Trace Control Block */ {
  6.     short    flags;
  7. #define TCB_STARTUP    01
  8. #define TCB_INUSE    02
  9. #define TCB_INSYSCALL    04
  10. #define TCB_ATTACHED    010
  11. #define TCB_EXITING    020
  12. #define TCB_SUSPENDED    040
  13. #define TCB_BPTSET    0100
  14. #define entering(tcp)    (!((tcp)->flags & TCB_INSYSCALL))
  15. #define exiting(tcp)    ((tcp)->flags & TCB_INSYSCALL)
  16. #define syserror(tcp)    ((tcp)->u_error != 0)
  17. #define waiting_parent(tcp) \
  18.         (tcp->parent && \
  19.         (tcp->parent->flags & TCB_SUSPENDED) && \
  20.         (tcp->parent->waitpid <= 0 || tcp->parent->waitpid == tcp->pid))
  21.  
  22.     int    pid;        /* Process Id of this entry */
  23.     int    scno;        /* System call number */
  24.     int    u_args[8];    /* System call arguments */
  25.     int    u_error;    /* Error code */
  26.     int    u_rval;        /* (first) return value */
  27.     FILE    *outf;        /* Output file for this process */
  28.     char    *auxstr;    /* Auxiliary info from syscall (see RVAL_STR) */
  29.  
  30.     /* Support for tracing forked processes */
  31.     struct    tcb *parent;    /* Parent of this process */
  32.     int    nchildren;    /* # of traced children */
  33.     int    waitpid;    /* pid(s) this process is waiting for */
  34.                 /* (1st arg of wait4()) */
  35.     int    baddr;        /* `Breakpoint' address */
  36.     int    inst[2];    /* Instructions on above */
  37. } Tcb;
  38. #define NULLTCB        ((struct tcb *)0)
  39.  
  40. typedef struct xlat {
  41.     int    val;
  42.     char    *str;
  43. } Xlat;
  44. extern char *xlookup();
  45.  
  46. #define MAX_PROCS    8
  47. extern struct tcb tcbtab[];
  48. extern struct tcb *alloctcb();
  49.  
  50. extern char *signals[];
  51. extern int debug, followfork, brutal, tflag;
  52. extern FILE *outf;
  53. extern int Nproc;
  54.  
  55. extern void newoutf();
  56. extern int syscall();
  57. extern int printargs();
  58. extern int addflags();
  59. extern int printflags();
  60. extern int umove();
  61. extern int umovestr();
  62. extern int printstr();
  63.  
  64. /*
  65.  * sys_* return values
  66.  */
  67. #define RVAL_HEX    1    /* Print syscall return value in hex format */
  68. #define RVAL_STR    2    /* Print `auxstr' field after return val */
  69. #define RVAL_NONE    0200    /* Print nothing */
  70.  
  71. #define DFLT_STR_LEN    32    /* default maximum # of bytes printed in
  72.                   `printstr', change with `-s' switch */
  73.  
  74. /* macro's */
  75. #ifndef MAX
  76. #define MAX(a,b)        (((a)>(b))?(a):(b))
  77. #endif
  78. #ifndef MIN
  79. #define MIN(a,b)        (((a)<(b))?(a):(b))
  80. #endif
  81.  
  82. /* get offset of field within a user struct */
  83. #define uoff(field)    ((char *)&(((struct user *)0)->field) - \
  84.             (char *)(struct user *)0)
  85. #define Xoff(X, field)    ((char *)&(((struct X *)0)->field) - \
  86.             (char *)(struct X *)0)
  87.