Annotation of 43BSDReno/bin/adb/adb.tahoe/machdep.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1988 The Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  *     @(#)machdep.h   5.2 (Berkeley) 2/23/90
                      6:  */
                      7: 
                      8: /*
                      9:  * hword_t is a 2-byte (`halfword') type, used for (eg) w, l, x commands;
                     10:  * addr_t is address type, must be unsigned; registers pc, fp, sp
                     11:  *     (where those exist) are assumed to be of this type, and
                     12:  *     addresses in the debuggee are of this type;
                     13:  * expr_t is expression result type, size must be >= size of addr_t and
                     14:  *     reg_t; must be unsigned; it is treated as the fullword type
                     15:  *     and should therefore be 4 bytes long;
                     16:  * sexpr_t is a signed version of expr_t.
                     17:  *
                     18:  * SHOULD WORK ON ALLOWING (eg) 1 AND 2 BYTE, OR 4 AND 8 BYTE, ETC, WORDS
                     19:  */
                     20: typedef        u_int   addr_t;
                     21: typedef        u_int   expr_t;
                     22: typedef        int     sexpr_t;
                     23: typedef        u_short hword_t;
                     24: 
                     25: /*
                     26:  * Since values of type addr_t, hword_t, and expr_t must be printed,
                     27:  * and the varargs mechanism assumes that the programmer has accounted
                     28:  * for any extension from `small' types (char, short) to `regular' types
                     29:  * (int), we define the following macros.  Each is supposed to produce
                     30:  * a (possibly sign-extended) expr_t value:
                     31:  *
                     32:  *     SH_ARG  a signed halfword (%d, %q formats)
                     33:  *     UH_ARG  an unsigned halfword (o, u, x)
                     34:  *     SF_ARG  a signed fullword (D, Q) 
                     35:  *     UF_ARG  an unsigned fullword (O, U, X)
                     36:  */
                     37: #define SH_ARG (expr_t)(short)va_arg(ap, int)
                     38: #define        UH_ARG  (expr_t)(unsigned short)va_arg(ap, int)
                     39: #define        SF_ARG  (expr_t)va_arg(ap, int)
                     40: #define        UF_ARG  (expr_t)va_arg(ap, int)
                     41: 
                     42: /*
                     43:  * bpt_t is used to hold original instructions when their breakpoint
                     44:  * replacement(s) is/are set.
                     45:  */
                     46: typedef        char    bpt_t;
                     47: 
                     48: /*
                     49:  * ADDRESS_WRAP is a predicate that returns true if the two addr_t
                     50:  * arguments are in different spaces.
                     51:  */
                     52: #define        ADDRESS_WRAP(a, b) (((a) ^ (b)) >> 30)
                     53: 
                     54: /*
                     55:  * Struct activation is used for tracing through stack frames.
                     56:  * It must hold any information needed to locate an activation record
                     57:  * (variables and parameters) for a function, and must have two fields
                     58:  * of type addr_t called `a_pc' and `a_fp', the `program counter' and
                     59:  * the `frame pointer'.  a_pc is used by the expression evaluator to
                     60:  * find symbols; a_fp is returned as the result from an expression of
                     61:  * the form `name.' (a routine name, but no local symbol).
                     62:  * The field a_valid is cleared by a_prev() when there are no more
                     63:  * activation records on the stack.
                     64:  */
                     65: struct activation {
                     66:        int     a_valid;                /* set iff frame is valid */
                     67:        addr_t  a_fp;                   /* fp */
                     68:        addr_t  a_pc;                   /* pc */
                     69: };
                     70: 
                     71: /*
                     72:  * On the tahoe, the frame pointer of a `struct frame' points to the
                     73:  * frame's fr_savfp field, not to the base address of the frame.
                     74:  */
                     75: #define        FRAMEOFF 8              /* (int)&fr.fr_savfp - (int)&fr */
                     76: 
                     77: /*
                     78:  * The reglist structure holds information needed to set and examine
                     79:  * registers.  It must contain an r_name field; this name must be unique
                     80:  * across the register set, cannot be a single letter or digit, and
                     81:  * cannot be a substring of any other register name.
                     82:  *
                     83:  * On the Tahoe, we keep an offset into the u. area, either from the
                     84:  * base of the u. area (in the pcb), or, for those registers that
                     85:  * are saved by syscalls, in the save area pointed to by u.u_ar0.
                     86:  * Offsets into the latter region are negative.
                     87:  *
                     88:  * We also keep a pointer into the current pcb for use when debugging
                     89:  * the kernel.
                     90:  */
                     91: struct reglist {
                     92:        char    *r_name;        /* name */
                     93:        int     r_offset;       /* offset into pcb, or from u.u_ar0 */
                     94:        int     *r_pcbaddr;     /* if kcore, address in current pcb */
                     95: };
                     96: 
                     97: /*
                     98:  * ispace_reg() is true iff register r points into I-space (usually just PC).
                     99:  */
                    100: #ifdef lint
                    101: #define        ispace_reg(r)   ((r) == NULL)
                    102: #else
                    103: #define        ispace_reg(r)   0       /* ispace==dspace on Tahoe */
                    104: #endif
                    105: 
                    106: /*
                    107:  * getpc() returns as an addr_t the current PC; setpc() sets PC to its
                    108:  * addr_t argument.  entrypc() returns the addr_t value of the appropriate
                    109:  * startup PC.
                    110:  */
                    111: addr_t getpc();
                    112: #define        entrypc()       ((addr_t)0)     /* ??? */
                    113: 
                    114: /*
                    115:  * INSTACK is true when its argument is a stack address.  It is
                    116:  * only used for consistency checking and may be overly permissive.
                    117:  * INKERNEL is true iff its argument is a kernel space address.
                    118:  */
                    119: #define        INSTACK(a)      (((a) & 0xc0000000) == 0x80000000) /* p2 space */
                    120: #define        INKERNEL(a)     (((a) & 0xc0000000) == 0xc0000000) /* sys space */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.