Annotation of 43BSDReno/bin/adb/adb.vax/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_ap;                   /* ap */
                     68:        addr_t  a_fp;                   /* fp */
                     69:        addr_t  a_pc;                   /* pc */
                     70: };
                     71: 
                     72: /*
                     73:  * The reglist structure holds information needed to set and examine
                     74:  * registers.  It must contain an r_name field; this name must be unique
                     75:  * across the register set, cannot be a single letter or digit, and
                     76:  * cannot be a substring of any other register name.
                     77:  *
                     78:  * On the VAX, we keep an offset into the u. area, either from the
                     79:  * base of the u. area (in the pcb), or, for those registers that
                     80:  * are saved by syscalls, in the save area pointed to by u.u_ar0.
                     81:  * Offsets into the latter region are negative.
                     82:  *
                     83:  * We also keep a pointer into the current pcb for use when debugging
                     84:  * the kernel.
                     85:  */
                     86: struct reglist {
                     87:        char    *r_name;        /* name */
                     88:        int     r_offset;       /* offset into pcb, or from u.u_ar0 */
                     89:        int     *r_pcbaddr;     /* if kcore, address in current pcb */
                     90: };
                     91: 
                     92: /*
                     93:  * ispace_reg() is true iff register r points into I-space (usually just PC).
                     94:  */
                     95: #ifdef lint
                     96: #define        ispace_reg(r)   ((r) == NULL)
                     97: #else
                     98: #define        ispace_reg(r)   0       /* ispace==dspace on VAX */
                     99: #endif
                    100: 
                    101: /*
                    102:  * getpc() returns as an addr_t the current PC; setpc() sets PC to its
                    103:  * addr_t argument.  entrypc() returns the addr_t value of the appropriate
                    104:  * startup PC.
                    105:  */
                    106: addr_t getpc();
                    107: #define        entrypc()       ((addr_t)2)
                    108: 
                    109: /*
                    110:  * INSTACK is true when its argument is a stack address.  It is
                    111:  * only used for consistency checking and may be overly permissive.
                    112:  * INKERNEL is true iff its argument is a kernel space address.
                    113:  */
                    114: #define        INSTACK(a)      (((a) & 0xc0000000) == 0x40000000) /* p1 space */
                    115: #define        INKERNEL(a)     (((a) & 0xc0000000) == 0x80000000) /* sys space */

unix.superglobalmegacorp.com

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