Annotation of XNU/osfmk/ddb/db_sym.h, revision 1.1.1.1

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_ */

unix.superglobalmegacorp.com

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