|
|
1.1 ! root 1: /* ! 2: * Mach Operating System ! 3: * Copyright (c) 1991,1990 Carnegie Mellon University ! 4: * All Rights Reserved. ! 5: * ! 6: * Permission to use, copy, modify and distribute this software and its ! 7: * documentation is hereby granted, provided that both the copyright ! 8: * notice and this permission notice appear in all copies of the ! 9: * software, derivative works or modified versions, and any portions ! 10: * thereof, and that both notices appear in supporting documentation. ! 11: * ! 12: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS ! 13: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR ! 14: * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. ! 15: * ! 16: * Carnegie Mellon requests users of this software to return to ! 17: * ! 18: * Software Distribution Coordinator or [email protected] ! 19: * School of Computer Science ! 20: * Carnegie Mellon University ! 21: * Pittsburgh PA 15213-3890 ! 22: * ! 23: * any improvements or extensions that they make and grant Carnegie the ! 24: * rights to redistribute these changes. ! 25: */ ! 26: /* ! 27: * HISTORY ! 28: * $Log: db_sym.h,v $ ! 29: * Revision 1.1 1992/03/25 21:45:29 pace ! 30: * Initial revision ! 31: * ! 32: * Revision 2.3 91/02/05 17:07:12 mrt ! 33: * Changed to new Mach copyright ! 34: * [91/01/31 16:19:27 mrt] ! 35: * ! 36: * Revision 2.2 90/08/27 21:52:39 dbg ! 37: * Changed type of db_sym_t to char * - it's a better type for an ! 38: * opaque pointer. ! 39: * [90/08/22 dbg] ! 40: * ! 41: * Created. ! 42: * [90/08/19 af] ! 43: * ! 44: */ ! 45: /* ! 46: * Author: Alessandro Forin, Carnegie Mellon University ! 47: * Date: 8/90 ! 48: */ ! 49: ! 50: /* ! 51: * This module can handle multiple symbol tables ! 52: */ ! 53: typedef struct { ! 54: char *name; /* symtab name */ ! 55: char *start; /* symtab location */ ! 56: char *end; ! 57: char *private; /* optional machdep pointer */ ! 58: } db_symtab_t; ! 59: ! 60: extern db_symtab_t *db_last_symtab; /* where last symbol was found */ ! 61: ! 62: /* ! 63: * Symbol representation is specific to the symtab style: ! 64: * BSD compilers use dbx' nlist, other compilers might use ! 65: * a different one ! 66: */ ! 67: typedef char * db_sym_t; /* opaque handle on symbols */ ! 68: #define DB_SYM_NULL ((db_sym_t)0) ! 69: ! 70: /* ! 71: * Non-stripped symbol tables will have duplicates, for instance ! 72: * the same string could match a parameter name, a local var, a ! 73: * global var, etc. ! 74: * We are most concern with the following matches. ! 75: */ ! 76: typedef int db_strategy_t; /* search strategy */ ! 77: ! 78: #define DB_STGY_ANY 0 /* anything goes */ ! 79: #define DB_STGY_XTRN 1 /* only external symbols */ ! 80: #define DB_STGY_PROC 2 /* only procedures */ ! 81: ! 82: extern boolean_t db_qualify_ambiguous_names; ! 83: /* if TRUE, check across symbol tables ! 84: * for multiple occurrences of a name. ! 85: * Might slow down quite a bit */ ! 86: ! 87: /* ! 88: * Functions exported by the symtable module ! 89: */ ! 90: extern void db_add_symbol_table(); ! 91: /* extend the list of symbol tables */ ! 92: ! 93: extern int db_value_of_name(/* char*, db_expr_t* */); ! 94: /* find symbol value given name */ ! 95: ! 96: extern db_sym_t db_search_symbol(/* db_expr_t, db_strategy_t, int* */); ! 97: /* find symbol given value */ ! 98: ! 99: extern void db_symbol_values(/* db_sym_t, char**, db_expr_t* */); ! 100: /* return name and value of symbol */ ! 101: ! 102: #define db_find_sym_and_offset(val,namep,offp) \ ! 103: db_symbol_values(db_search_symbol(val,DB_STGY_ANY,offp),namep,0) ! 104: /* find name&value given approx val */ ! 105: ! 106: #define db_find_xtrn_sym_and_offset(val,namep,offp) \ ! 107: db_symbol_values(db_search_symbol(val,DB_STGY_XTRN,offp),namep,0) ! 108: /* ditto, but no locals */ ! 109: ! 110: extern int db_eqname(/* char*, char*, char */); ! 111: /* strcmp, modulo leading char */ ! 112: ! 113: extern void db_printsym(/* db_expr_t, db_strategy_t */); ! 114: /* print closest symbol to a value */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.