Annotation of XNU/osfmk/ddb/db_sym.h, revision 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.