Commit | Line | Data |
---|---|---|
984263bc MD |
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 Software.Distribution@CS.CMU.EDU | |
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 | * $FreeBSD: src/sys/ddb/db_sym.h,v 1.19 1999/08/28 00:41:10 peter Exp $ | |
27 | */ | |
28 | ||
29 | #ifndef _DDB_DB_SYM_H_ | |
30 | #define _DDB_DB_SYM_H_ | |
31 | ||
1bd40720 MD |
32 | #ifndef _DDB_DDB_H_ |
33 | #include <ddb/ddb.h> | |
34 | #endif | |
35 | ||
984263bc MD |
36 | /* |
37 | * Author: Alessandro Forin, Carnegie Mellon University | |
38 | * Date: 8/90 | |
39 | */ | |
40 | ||
41 | /* | |
42 | * This module can handle multiple symbol tables | |
43 | */ | |
44 | typedef struct { | |
45 | char *name; /* symtab name */ | |
46 | char *start; /* symtab location */ | |
47 | char *end; | |
48 | char *private; /* optional machdep pointer */ | |
49 | } db_symtab_t; | |
50 | ||
51 | /* | |
52 | * Symbol representation is specific to the symtab style: | |
53 | * BSD compilers use dbx' nlist, other compilers might use | |
54 | * a different one | |
55 | */ | |
56 | typedef char * db_sym_t; /* opaque handle on symbols */ | |
57 | typedef const char * c_db_sym_t; /* opaque handle on symbols */ | |
58 | #define DB_SYM_NULL ((db_sym_t)0) | |
59 | #define C_DB_SYM_NULL ((c_db_sym_t)0) | |
60 | ||
61 | /* | |
62 | * Non-stripped symbol tables will have duplicates, for instance | |
63 | * the same string could match a parameter name, a local var, a | |
64 | * global var, etc. | |
65 | * We are most concern with the following matches. | |
66 | */ | |
67 | typedef int db_strategy_t; /* search strategy */ | |
68 | ||
69 | #define DB_STGY_ANY 0 /* anything goes */ | |
70 | #define DB_STGY_XTRN 1 /* only external symbols */ | |
71 | #define DB_STGY_PROC 2 /* only procedures */ | |
72 | ||
73 | /* | |
74 | * Functions exported by the symtable module | |
75 | */ | |
43c0ece6 | 76 | void db_add_symbol_table (char *, char *, char *, char *); |
984263bc MD |
77 | /* extend the list of symbol tables */ |
78 | ||
43c0ece6 | 79 | c_db_sym_t db_search_symbol (db_addr_t, db_strategy_t, db_expr_t *); |
984263bc MD |
80 | /* find symbol given value */ |
81 | ||
43c0ece6 | 82 | void db_symbol_values (c_db_sym_t, const char **, db_expr_t *); |
984263bc MD |
83 | /* return name and value of symbol */ |
84 | ||
85 | #define db_find_sym_and_offset(val,namep,offp) \ | |
86 | db_symbol_values(db_search_symbol(val,DB_STGY_ANY,offp),namep,0) | |
87 | /* find name&value given approx val */ | |
88 | ||
89 | #define db_find_xtrn_sym_and_offset(val,namep,offp) \ | |
90 | db_symbol_values(db_search_symbol(val,DB_STGY_XTRN,offp),namep,0) | |
91 | /* ditto, but no locals */ | |
92 | ||
99ebfb7c | 93 | boolean_t db_eqname (const char *, const char *, int); |
984263bc MD |
94 | /* strcmp, modulo leading char */ |
95 | ||
43c0ece6 | 96 | void db_printsym (db_expr_t, db_strategy_t); |
984263bc MD |
97 | /* print closest symbol to a value */ |
98 | ||
43c0ece6 | 99 | int db_sym_numargs (c_db_sym_t, int *, char **); |
984263bc | 100 | |
43c0ece6 | 101 | boolean_t X_db_line_at_pc (db_symtab_t *symtab, c_db_sym_t cursym, |
984263bc | 102 | char **filename, int *linenum, |
43c0ece6 RG |
103 | db_expr_t off); |
104 | c_db_sym_t X_db_lookup (db_symtab_t *stab, const char *symstr); | |
105 | c_db_sym_t X_db_search_symbol (db_symtab_t *symtab, db_addr_t off, | |
984263bc | 106 | db_strategy_t strategy, |
43c0ece6 | 107 | db_expr_t *diffp); |
99ebfb7c | 108 | boolean_t X_db_sym_numargs (db_symtab_t *, c_db_sym_t, int *, |
43c0ece6 RG |
109 | char **); |
110 | void X_db_symbol_values (db_symtab_t *symtab, | |
984263bc | 111 | c_db_sym_t sym, const char **namep, |
43c0ece6 | 112 | db_expr_t *valuep); |
984263bc MD |
113 | |
114 | #endif /* !_DDB_DB_SYM_H_ */ |