Annotation of sys/ddb/db_sym.h, Revision 1.1
1.1 ! nbrk 1: /* $NetBSD: db_sym.h,v 1.13 2000/05/25 19:57:36 jhawk Exp $ */
! 2:
! 3: /*
! 4: * Mach Operating System
! 5: * Copyright (c) 1993,1992,1991,1990 Carnegie Mellon University
! 6: * All Rights Reserved.
! 7: *
! 8: * Permission to use, copy, modify and distribute this software and its
! 9: * documentation is hereby granted, provided that both the copyright
! 10: * notice and this permission notice appear in all copies of the
! 11: * software, derivative works or modified versions, and any portions
! 12: * thereof, and that both notices appear in supporting documentation.
! 13: *
! 14: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
! 15: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
! 16: * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
! 17: *
! 18: * Carnegie Mellon requests users of this software to return to
! 19: *
! 20: * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
! 21: * School of Computer Science
! 22: * Carnegie Mellon University
! 23: * Pittsburgh PA 15213-3890
! 24: *
! 25: * any improvements or extensions that they make and grant Carnegie Mellon
! 26: * the rights to redistribute these changes.
! 27: *
! 28: * Author: Alessandro Forin, Carnegie Mellon University
! 29: * Date: 8/90
! 30: */
! 31:
! 32: /*
! 33: * This module can handle multiple symbol tables
! 34: */
! 35: typedef struct {
! 36: const char *name; /* symtab name */
! 37: char *start; /* symtab location */
! 38: char *end;
! 39: char *private; /* optional machdep pointer */
! 40: } db_symtab_t;
! 41:
! 42: extern db_symtab_t *db_last_symtab; /* where last symbol was found */
! 43:
! 44: /*
! 45: * Symbol representation is specific to the symtab style:
! 46: * BSD compilers use dbx' nlist, other compilers might use
! 47: * a different one
! 48: */
! 49: typedef char * db_sym_t; /* opaque handle on symbols */
! 50: #define DB_SYM_NULL ((db_sym_t)0)
! 51:
! 52: /*
! 53: * Non-stripped symbol tables will have duplicates, for instance
! 54: * the same string could match a parameter name, a local var, a
! 55: * global var, etc.
! 56: * We are most concern with the following matches.
! 57: */
! 58: typedef int db_strategy_t; /* search strategy */
! 59:
! 60: #define DB_STGY_ANY 0 /* anything goes */
! 61: #define DB_STGY_XTRN 1 /* only external symbols */
! 62: #define DB_STGY_PROC 2 /* only procedures */
! 63:
! 64:
! 65: /*
! 66: * Internal db_forall function calling convention:
! 67: *
! 68: * (*db_forall_func)(stab, sym, name, suffix, prefix, arg);
! 69: *
! 70: * stab is the symbol table, symbol the (opaque) symbol pointer,
! 71: * name the name of the symbol, suffix a string representing
! 72: * the type, prefix an initial ignorable function prefix (e.g. "_"
! 73: * in a.out), and arg an opaque argument to be passed in.
! 74: */
! 75: typedef void (db_forall_func_t)(db_symtab_t *, db_sym_t, char *, char *, int, void *);
! 76:
! 77: void X_db_forall(db_symtab_t *,
! 78: db_forall_func_t db_forall_func, void *);
! 79:
! 80: /*
! 81: * A symbol table may be in one of many formats. All symbol tables
! 82: * must be of the same format as the master kernel symbol table.
! 83: */
! 84: typedef struct {
! 85: const char *sym_format;
! 86: boolean_t (*sym_init)(int, void *, void *, const char *);
! 87: db_sym_t (*sym_lookup)(db_symtab_t *, char *);
! 88: db_sym_t (*sym_search)(db_symtab_t *, db_addr_t, db_strategy_t,
! 89: db_expr_t *);
! 90: void (*sym_value)(db_symtab_t *, db_sym_t, char **,
! 91: db_expr_t *);
! 92: boolean_t (*sym_line_at_pc)(db_symtab_t *, db_sym_t,
! 93: char **, int *, db_expr_t);
! 94: boolean_t (*sym_numargs)(db_symtab_t *, db_sym_t, int *,
! 95: char **);
! 96: void (*sym_forall)(db_symtab_t *,
! 97: db_forall_func_t *db_forall_func, void *);
! 98: } db_symformat_t;
! 99:
! 100: extern boolean_t db_qualify_ambiguous_names;
! 101: /* if TRUE, check across symbol tables
! 102: * for multiple occurrences of a name.
! 103: * Might slow down quite a bit */
! 104:
! 105: extern unsigned int db_maxoff; /* like gdb's "max-symbolic-offset" */
! 106: /*
! 107: * Functions exported by the symtable module
! 108: */
! 109: int db_add_symbol_table(char *, char *, const char *, char *);
! 110: /* extend the list of symbol tables */
! 111:
! 112: void db_del_symbol_table(char *);
! 113: /* remove a symbol table from list */
! 114:
! 115: boolean_t db_eqname(char *, char *, int);
! 116: /* strcmp, modulo leading char */
! 117:
! 118: int db_value_of_name(char *, db_expr_t *);
! 119: /* find symbol value given name */
! 120:
! 121: db_sym_t db_lookup(char *);
! 122:
! 123: void db_sifting(char *, int);
! 124: /* print partially matching symbol names */
! 125:
! 126: boolean_t db_symbol_is_ambiguous(db_sym_t);
! 127:
! 128: db_sym_t db_search_symbol(db_addr_t, db_strategy_t, db_expr_t *);
! 129: /* find symbol given value */
! 130:
! 131: void db_symbol_values(db_sym_t, char **, db_expr_t *);
! 132: /* return name and value of symbol */
! 133:
! 134: #define db_find_sym_and_offset(val,namep,offp) \
! 135: db_symbol_values(db_search_symbol(val,DB_STGY_ANY,offp),namep,0)
! 136: /* find name&value given approx val */
! 137:
! 138: #define db_find_xtrn_sym_and_offset(val,namep,offp) \
! 139: db_symbol_values(db_search_symbol(val,DB_STGY_XTRN,offp),namep,0)
! 140: /* ditto, but no locals */
! 141:
! 142: void db_printsym(db_expr_t, db_strategy_t, int (*)(const char *, ...));
! 143: /* print closest symbol to a value */
! 144:
! 145: boolean_t db_line_at_pc(db_sym_t, char **, int *, db_expr_t);
! 146:
! 147: int db_sym_numargs(db_sym_t, int *, char **);
! 148: char *db_qualify(db_sym_t, const char *);
! 149:
! 150: #ifdef DB_AOUT_SYMBOLS
! 151: extern db_symformat_t db_symformat_aout;
! 152: #endif
! 153: #ifdef DB_ELF_SYMBOLS
! 154: extern db_symformat_t db_symformat_elf;
! 155: #endif
CVSweb