|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* ! 23: * @OSF_COPYRIGHT@ ! 24: */ ! 25: /* ! 26: * HISTORY ! 27: * ! 28: * Revision 1.1.1.1 1998/09/22 21:05:48 wsanchez ! 29: * Import of Mac OS X kernel (~semeria) ! 30: * ! 31: * Revision 1.1.1.1 1998/03/07 02:26:09 wsanchez ! 32: * Import of OSF Mach kernel (~mburg) ! 33: * ! 34: * Revision 1.2.20.6 1996/01/09 19:16:22 devrcs ! 35: * Add proto for db_task_getlinenum(). ! 36: * [1995/12/01 21:42:34 jfraser] ! 37: * ! 38: * Revision 1.2.20.5 1995/02/28 01:58:53 dwm ! 39: * Merged with changes from 1.2.20.4 ! 40: * [1995/02/28 01:53:54 dwm] ! 41: * ! 42: * mk6 CR1120 - Merge mk6pro_shared into cnmk_shared ! 43: * [1995/02/28 01:12:57 dwm] ! 44: * ! 45: * Revision 1.2.20.4 1995/02/23 21:43:48 alanl ! 46: * Prepend a "db_" to qsort and qsort_limit_search ! 47: * (collisions with the real qsort in stdlib.h) ! 48: * [95/02/14 travos] ! 49: * ! 50: * Expanded db_sym_switch structure to make ddb object format dependent; ! 51: * this allows us to remove all of the aout dependencies. ! 52: * [95/01/24 sjs] ! 53: * ! 54: * Revision 1.2.23.4 1994/12/22 20:36:20 bolinger ! 55: * Fix ri-osc CR881: Fixed glitch in use of symtab cloning hack. ! 56: * [1994/12/22 20:35:17 bolinger] ! 57: * ! 58: * Revision 1.2.23.3 1994/11/02 18:36:07 dwm ! 59: * mk6 CR668 - 1.3b26 merge ! 60: * 64bit cleanup, prototypes ! 61: * fix X_db_search_by_addr macro to match prototype ! 62: * [1994/11/02 18:16:20 dwm] ! 63: * ! 64: * Revision 1.2.20.4 1995/02/23 21:43:48 alanl ! 65: * Prepend a "db_" to qsort and qsort_limit_search ! 66: * (collisions with the real qsort in stdlib.h) ! 67: * [95/02/14 travos] ! 68: * ! 69: * Expanded db_sym_switch structure to make ddb object format dependent; ! 70: * this allows us to remove all of the aout dependencies. ! 71: * [95/01/24 sjs] ! 72: * ! 73: * Revision 1.2.23.4 1994/12/22 20:36:20 bolinger ! 74: * Fix ri-osc CR881: Fixed glitch in use of symtab cloning hack. ! 75: * [1994/12/22 20:35:17 bolinger] ! 76: * ! 77: * Revision 1.2.23.3 1994/11/02 18:36:07 dwm ! 78: * mk6 CR668 - 1.3b26 merge ! 79: * 64bit cleanup, prototypes ! 80: * fix X_db_search_by_addr macro to match prototype ! 81: * [1994/11/02 18:16:20 dwm] ! 82: * ! 83: * Revision 1.2.20.2 1994/09/23 01:21:51 ezf ! 84: * change marker to not FREE ! 85: * [1994/09/22 21:11:04 ezf] ! 86: * ! 87: * Revision 1.2.20.1 1994/06/11 21:12:25 bolinger ! 88: * Merge up to NMK17.2. ! 89: * [1994/06/11 20:04:14 bolinger] ! 90: * ! 91: * Revision 1.2.14.1 1994/02/08 10:58:56 bernadat ! 92: * Added db_sym_print_completion ! 93: * db_sym_parse_and_lookup_incomplete ! 94: * db_sym_parse_and_print_completion ! 95: * db_print_completion ! 96: * db_lookup_incomplete ! 97: * ddb_init ! 98: * prototypes ! 99: * ! 100: * Changed func type to db_sym_parse_and_lookup prototype ! 101: * ! 102: * Added definition of db_maxoff. ! 103: * [93/08/12 paire] ! 104: * [94/02/07 bernadat] ! 105: * ! 106: * Revision 1.2.18.1 1994/06/08 19:11:28 dswartz ! 107: * Preemption merge. ! 108: * [1994/06/08 19:10:27 dswartz] ! 109: * ! 110: * Revision 1.2.17.2 1994/06/01 21:34:50 klj ! 111: * Initial preemption code base merge ! 112: * ! 113: * Revision 1.2.4.3 1993/07/27 18:28:12 elliston ! 114: * Add ANSI prototypes. CR #9523. ! 115: * [1993/07/27 18:13:02 elliston] ! 116: * ! 117: * Revision 1.2.4.2 1993/06/09 02:20:56 gm ! 118: * Added to OSF/1 R1.3 from NMK15.0. ! 119: * [1993/06/02 20:57:18 jeffc] ! 120: * ! 121: * Revision 1.2 1993/04/19 16:03:18 devrcs ! 122: * Added 3 new fields in db_symtab_t for sorting. ! 123: * [[email protected]] ! 124: * [92/12/03 bernadat] ! 125: * ! 126: * Revision 1.1 1992/09/30 02:24:22 robert ! 127: * Initial revision ! 128: * ! 129: * $EndLog$ ! 130: */ ! 131: /* CMU_HIST */ ! 132: /* ! 133: * Revision 2.6 91/10/09 16:02:45 af ! 134: * Revision 2.5.1.1 91/10/05 13:07:39 jeffreyh ! 135: * Added macro definitions of db_find_task_sym_and_offset(), ! 136: * db_find_xtrn_task_sym_and_offset(), db_search_symbol(). ! 137: * [91/08/29 tak] ! 138: * ! 139: * Revision 2.5.1.1 91/10/05 13:07:39 jeffreyh ! 140: * Added macro definitions of db_find_task_sym_and_offset(), ! 141: * db_find_xtrn_task_sym_and_offset(), db_search_symbol(). ! 142: * [91/08/29 tak] ! 143: * ! 144: * Revision 2.5 91/07/31 17:31:49 dbg ! 145: * Add map pointer and storage for name to db_symtab_t. ! 146: * [91/07/30 16:45:08 dbg] ! 147: * ! 148: * Revision 2.4 91/05/14 15:36:08 mrt ! 149: * Correcting copyright ! 150: * ! 151: * Revision 2.3 91/02/05 17:07:12 mrt ! 152: * Changed to new Mach copyright ! 153: * [91/01/31 16:19:27 mrt] ! 154: * ! 155: * Revision 2.2 90/08/27 21:52:39 dbg ! 156: * Changed type of db_sym_t to char * - it's a better type for an ! 157: * opaque pointer. ! 158: * [90/08/22 dbg] ! 159: * ! 160: * Created. ! 161: * [90/08/19 af] ! 162: * ! 163: */ ! 164: /* CMU_ENDHIST */ ! 165: /* ! 166: * Mach Operating System ! 167: * Copyright (c) 1991,1990 Carnegie Mellon University ! 168: * All Rights Reserved. ! 169: * ! 170: * Permission to use, copy, modify and distribute this software and its ! 171: * documentation is hereby granted, provided that both the copyright ! 172: * notice and this permission notice appear in all copies of the ! 173: * software, derivative works or modified versions, and any portions ! 174: * thereof, and that both notices appear in supporting documentation. ! 175: * ! 176: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" ! 177: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR ! 178: * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. ! 179: * ! 180: * Carnegie Mellon requests users of this software to return to ! 181: * ! 182: * Software Distribution Coordinator or [email protected] ! 183: * School of Computer Science ! 184: * Carnegie Mellon University ! 185: * Pittsburgh PA 15213-3890 ! 186: * ! 187: * any improvements or extensions that they make and grant Carnegie Mellon ! 188: * the rights to redistribute these changes. ! 189: */ ! 190: /* ! 191: */ ! 192: /* ! 193: * Author: Alessandro Forin, Carnegie Mellon University ! 194: * Date: 8/90 ! 195: */ ! 196: ! 197: #ifndef _DDB_DB_SYM_H_ ! 198: #define _DDB_DB_SYM_H_ ! 199: ! 200: #include <mach/boolean.h> ! 201: #include <mach/machine/vm_types.h> ! 202: #include <machine/db_machdep.h> ! 203: #include <kern/task.h> ! 204: ! 205: /* ! 206: * This module can handle multiple symbol tables, ! 207: * of multiple types, at the same time ! 208: */ ! 209: #define SYMTAB_NAME_LEN 32 ! 210: ! 211: typedef struct { ! 212: int type; ! 213: #define SYMTAB_AOUT 0 ! 214: #define SYMTAB_COFF 1 ! 215: #define SYMTAB_MACHDEP 2 ! 216: char *start; /* symtab location */ ! 217: char *end; ! 218: char *private; /* optional machdep pointer */ ! 219: char *map_pointer; /* symbols are for this map only, ! 220: if not null */ ! 221: char name[SYMTAB_NAME_LEN]; ! 222: /* symtab name */ ! 223: unsigned long minsym; /* lowest symbol value */ ! 224: unsigned long maxsym; /* highest symbol value */ ! 225: boolean_t sorted; /* is this table sorted ? */ ! 226: } db_symtab_t; ! 227: ! 228: extern db_symtab_t *db_last_symtab; /* where last symbol was found */ ! 229: ! 230: /* ! 231: * Symbol representation is specific to the symtab style: ! 232: * BSD compilers use dbx' nlist, other compilers might use ! 233: * a different one ! 234: */ ! 235: typedef void * db_sym_t; /* opaque handle on symbols */ ! 236: #define DB_SYM_NULL ((db_sym_t)0) ! 237: ! 238: /* ! 239: * Non-stripped symbol tables will have duplicates, for instance ! 240: * the same string could match a parameter name, a local var, a ! 241: * global var, etc. ! 242: * We are most concern with the following matches. ! 243: */ ! 244: typedef int db_strategy_t; /* search strategy */ ! 245: ! 246: #define DB_STGY_ANY 0 /* anything goes */ ! 247: #define DB_STGY_XTRN 1 /* only external symbols */ ! 248: #define DB_STGY_PROC 2 /* only procedures */ ! 249: ! 250: extern boolean_t db_qualify_ambiguous_names; ! 251: /* if TRUE, check across symbol tables ! 252: * for multiple occurrences of a name. ! 253: * Might slow down quite a bit */ ! 254: ! 255: extern unsigned long db_maxoff; ! 256: ! 257: /* Prototypes for functions exported by this module. ! 258: */ ! 259: extern boolean_t db_add_symbol_table( ! 260: int type, ! 261: char *start, ! 262: char *end, ! 263: char *name, ! 264: char *ref, ! 265: char *map_pointer, ! 266: unsigned long minsym, ! 267: unsigned long maxsym, ! 268: boolean_t sorted); ! 269: ! 270: extern void db_install_inks( ! 271: vm_offset_t base); ! 272: ! 273: extern boolean_t db_value_of_name( ! 274: char *name, ! 275: db_expr_t *valuep); ! 276: ! 277: extern db_sym_t db_lookup(char *symstr); ! 278: ! 279: extern char * db_get_sym( ! 280: db_expr_t * off); ! 281: ! 282: extern db_sym_t db_sym_parse_and_lookup( ! 283: int (*func)(db_symtab_t *, ! 284: char *, ! 285: char *, ! 286: int, ! 287: db_sym_t*, ! 288: char **, ! 289: int *), ! 290: db_symtab_t *symtab, ! 291: char *symstr); ! 292: ! 293: extern int db_sym_parse_and_lookup_incomplete( ! 294: int (*func)(db_symtab_t *, ! 295: char *, ! 296: char *, ! 297: int, ! 298: db_sym_t*, ! 299: char **, ! 300: int *), ! 301: db_symtab_t *symtab, ! 302: char *symstr, ! 303: char **name, ! 304: int *len, ! 305: int *toadd); ! 306: ! 307: extern int db_sym_parse_and_print_completion( ! 308: int (*func)(db_symtab_t *, ! 309: char *), ! 310: db_symtab_t *symtab, ! 311: char *symstr); ! 312: ! 313: extern db_sym_t db_search_task_symbol( ! 314: db_addr_t val, ! 315: db_strategy_t strategy, ! 316: db_addr_t *offp, ! 317: task_t task); ! 318: ! 319: extern db_sym_t db_search_task_symbol_and_line( ! 320: db_addr_t val, ! 321: db_strategy_t strategy, ! 322: db_expr_t *offp, ! 323: char **filenamep, ! 324: int *linenump, ! 325: task_t task, ! 326: int *argsp); ! 327: ! 328: extern void db_symbol_values( ! 329: db_symtab_t *stab, ! 330: db_sym_t sym, ! 331: char **namep, ! 332: db_expr_t *valuep); ! 333: ! 334: extern void db_task_printsym( ! 335: db_expr_t off, ! 336: db_strategy_t strategy, ! 337: task_t task); ! 338: ! 339: extern void db_printsym( ! 340: db_expr_t off, ! 341: db_strategy_t strategy); ! 342: ! 343: extern boolean_t db_line_at_pc( ! 344: db_sym_t sym, ! 345: char **filename, ! 346: int *linenum, ! 347: db_expr_t pc); ! 348: ! 349: extern void db_qsort( ! 350: char *table, ! 351: int nbelts, ! 352: int eltsize, ! 353: int (*compfun)(char *, char *)); ! 354: ! 355: extern void db_qsort_limit_search( ! 356: char *target, ! 357: char **start, ! 358: char **end, ! 359: int eltsize, ! 360: int (*compfun)(char *, char *)); ! 361: ! 362: extern void db_sym_print_completion( ! 363: db_symtab_t *stab, ! 364: char *name, ! 365: int function, ! 366: char *fname, ! 367: int line); ! 368: ! 369: extern void db_print_completion( ! 370: char *symstr); ! 371: ! 372: extern int db_lookup_incomplete( ! 373: char *symstr, ! 374: int symlen); ! 375: ! 376: extern void ddb_init(void); ! 377: ! 378: extern void db_machdep_init(void); ! 379: ! 380: extern void db_clone_symtabXXX(char *, char *, vm_offset_t); ! 381: ! 382: extern db_symtab_t *db_symtab_cloneeXXX(char *); ! 383: ! 384: extern db_task_getlinenum( db_expr_t, task_t); ! 385: ! 386: /* Some convenience macros. ! 387: */ ! 388: #define db_find_sym_and_offset(val,namep,offp) \ ! 389: db_symbol_values(0, db_search_symbol(val,DB_STGY_ANY,offp),namep,0) ! 390: /* find name&value given approx val */ ! 391: ! 392: #define db_find_xtrn_sym_and_offset(val,namep,offp) \ ! 393: db_symbol_values(0, db_search_symbol(val,DB_STGY_XTRN,offp),namep,0) ! 394: /* ditto, but no locals */ ! 395: ! 396: #define db_find_task_sym_and_offset(val,namep,offp,task) \ ! 397: db_symbol_values(0, db_search_task_symbol(val,DB_STGY_ANY,offp,task), \ ! 398: namep, 0) /* find name&value given approx val */ ! 399: ! 400: #define db_find_xtrn_task_sym_and_offset(val,namep,offp,task) \ ! 401: db_symbol_values(0, db_search_task_symbol(val,DB_STGY_XTRN,offp,task), \ ! 402: namep,0) /* ditto, but no locals */ ! 403: ! 404: #define db_search_symbol(val,strgy,offp) \ ! 405: db_search_task_symbol(val,strgy,offp,0) ! 406: /* find symbol in current task */ ! 407: ! 408: /* ! 409: * Symbol table switch, defines the interface ! 410: * to symbol-table specific routines. ! 411: */ ! 412: ! 413: extern struct db_sym_switch { ! 414: ! 415: void (*init)(void); ! 416: ! 417: boolean_t (*sym_init)( ! 418: char *start, ! 419: char *end, ! 420: char *name, ! 421: char *task_addr ! 422: ); ! 423: ! 424: db_sym_t (*lookup)( ! 425: db_symtab_t *stab, ! 426: char *symstr ! 427: ); ! 428: db_sym_t (*search_symbol)( ! 429: db_symtab_t *stab, ! 430: db_addr_t off, ! 431: db_strategy_t strategy, ! 432: db_expr_t *diffp ! 433: ); ! 434: ! 435: boolean_t (*line_at_pc)( ! 436: db_symtab_t *stab, ! 437: db_sym_t sym, ! 438: char **file, ! 439: int *line, ! 440: db_expr_t pc ! 441: ); ! 442: ! 443: void (*symbol_values)( ! 444: db_sym_t sym, ! 445: char **namep, ! 446: db_expr_t *valuep ! 447: ); ! 448: db_sym_t (*search_by_addr)( ! 449: db_symtab_t *stab, ! 450: db_addr_t off, ! 451: char **file, ! 452: char **func, ! 453: int *line, ! 454: db_expr_t *diffp, ! 455: int *args ! 456: ); ! 457: ! 458: int (*print_completion)( ! 459: db_symtab_t *stab, ! 460: char *symstr ! 461: ); ! 462: ! 463: int (*lookup_incomplete)( ! 464: db_symtab_t *stab, ! 465: char *symstr, ! 466: char **name, ! 467: int *len, ! 468: int *toadd ! 469: ); ! 470: } x_db[]; ! 471: ! 472: #ifndef symtab_type ! 473: #define symtab_type(s) SYMTAB_AOUT ! 474: #endif ! 475: ! 476: #define X_db_init() x_db[symtab_type(s)].init() ! 477: #define X_db_sym_init(s,e,n,t) x_db[symtab_type(s)].sym_init(s,e,n,t) ! 478: #define X_db_lookup(s,n) x_db[(s)->type].lookup(s,n) ! 479: #define X_db_search_symbol(s,o,t,d) x_db[(s)->type].search_symbol(s,o,t,d) ! 480: #define X_db_line_at_pc(s,p,f,l,a) x_db[(s)->type].line_at_pc(s,p,f,l,a) ! 481: #define X_db_symbol_values(s,p,n,v) x_db[(s)->type].symbol_values(p,n,v) ! 482: #define X_db_search_by_addr(s,a,f,c,l,d,r) \ ! 483: x_db[(s)->type].search_by_addr(s,a,f,c,l,d,r) ! 484: #define X_db_print_completion(s,p) x_db[(s)->type].print_completion(s,p) ! 485: #define X_db_lookup_incomplete(s,p,n,l,t) \ ! 486: x_db[(s)->type].lookup_incomplete(s,p,n,l,t) ! 487: ! 488: #endif /* !_DDB_DB_SYM_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.