156c88695Sniklas /* $NetBSD: db_sym.h,v 1.13 2000/05/25 19:57:36 jhawk Exp $ */ 2df930be7Sderaadt 3df930be7Sderaadt /* 4df930be7Sderaadt * Mach Operating System 5b2471a9dSmickey * Copyright (c) 1993,1992,1991,1990 Carnegie Mellon University 6df930be7Sderaadt * All Rights Reserved. 7df930be7Sderaadt * 8df930be7Sderaadt * Permission to use, copy, modify and distribute this software and its 9df930be7Sderaadt * documentation is hereby granted, provided that both the copyright 10df930be7Sderaadt * notice and this permission notice appear in all copies of the 11df930be7Sderaadt * software, derivative works or modified versions, and any portions 12df930be7Sderaadt * thereof, and that both notices appear in supporting documentation. 13df930be7Sderaadt * 14b2471a9dSmickey * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 15df930be7Sderaadt * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 16df930be7Sderaadt * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 17df930be7Sderaadt * 18df930be7Sderaadt * Carnegie Mellon requests users of this software to return to 19df930be7Sderaadt * 20df930be7Sderaadt * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 21df930be7Sderaadt * School of Computer Science 22df930be7Sderaadt * Carnegie Mellon University 23df930be7Sderaadt * Pittsburgh PA 15213-3890 24df930be7Sderaadt * 25b2471a9dSmickey * any improvements or extensions that they make and grant Carnegie Mellon 26b2471a9dSmickey * the rights to redistribute these changes. 27df930be7Sderaadt * 28df930be7Sderaadt * Author: Alessandro Forin, Carnegie Mellon University 29df930be7Sderaadt * Date: 8/90 30df930be7Sderaadt */ 31df930be7Sderaadt 323ee2751eSmpi #ifndef _DDB_DB_SYM_H_ 333ee2751eSmpi #define _DDB_DB_SYM_H_ 343ee2751eSmpi 353ee2751eSmpi #include <sys/stdint.h> 3662781896Smpi #include <sys/exec_elf.h> 37df930be7Sderaadt 38df930be7Sderaadt /* 39df930be7Sderaadt * Non-stripped symbol tables will have duplicates, for instance 40df930be7Sderaadt * the same string could match a parameter name, a local var, a 41df930be7Sderaadt * global var, etc. 42df930be7Sderaadt * We are most concern with the following matches. 43df930be7Sderaadt */ 44df930be7Sderaadt typedef int db_strategy_t; /* search strategy */ 45df930be7Sderaadt 46df930be7Sderaadt #define DB_STGY_ANY 0 /* anything goes */ 47df930be7Sderaadt #define DB_STGY_XTRN 1 /* only external symbols */ 48df930be7Sderaadt #define DB_STGY_PROC 2 /* only procedures */ 49df930be7Sderaadt 5056c88695Sniklas 5156c88695Sniklas /* 5256c88695Sniklas * Internal db_forall function calling convention: 5356c88695Sniklas * 54*949c1c4eSmiod * (*db_forall_func)(sym, name, suffix, arg); 5556c88695Sniklas * 56*949c1c4eSmiod * symbol is the (opaque) symbol pointer, name the name of the symbol, 57*949c1c4eSmiod * suffix a string representing the type, and arg an opaque argument to 58*949c1c4eSmiod * be passed in. 5956c88695Sniklas */ 60*949c1c4eSmiod typedef void (db_forall_func_t)(Elf_Sym *, const char *, const char *, void *); 6156c88695Sniklas 6256c88695Sniklas extern unsigned int db_maxoff; /* like gdb's "max-symbolic-offset" */ 63df930be7Sderaadt 64*949c1c4eSmiod int db_eqname(const char *, const char *, int); 653ed44a89Smickey /* strcmp, modulo leading char */ 663ed44a89Smickey 67*949c1c4eSmiod Elf_Sym * db_symbol_by_name(const char *, db_expr_t *); 68df930be7Sderaadt /* find symbol value given name */ 69df930be7Sderaadt 7008f058f8Smpi Elf_Sym * db_search_symbol(vaddr_t, db_strategy_t, db_expr_t *); 71df930be7Sderaadt /* find symbol given value */ 72df930be7Sderaadt 73*949c1c4eSmiod void db_symbol_values(Elf_Sym *, const char **, db_expr_t *); 74df930be7Sderaadt /* return name and value of symbol */ 75df930be7Sderaadt 76df930be7Sderaadt #define db_find_sym_and_offset(val,namep,offp) \ 77da571dddSjsg db_symbol_values(db_search_symbol(val,DB_STGY_ANY,offp),namep,NULL) 78df930be7Sderaadt /* find name&value given approx val */ 79df930be7Sderaadt 80df930be7Sderaadt #define db_find_xtrn_sym_and_offset(val,namep,offp) \ 81da571dddSjsg db_symbol_values(db_search_symbol(val,DB_STGY_XTRN,offp),namep,NULL) 82df930be7Sderaadt /* ditto, but no locals */ 83df930be7Sderaadt 8433ca0db6Sart void db_printsym(db_expr_t, db_strategy_t, int (*)(const char *, ...)); 85df930be7Sderaadt /* print closest symbol to a value */ 863ed44a89Smickey 8751015a3eSmpi int db_elf_sym_init(int, void *, void *, const char *); 8808f058f8Smpi Elf_Sym * db_elf_sym_search(vaddr_t, db_strategy_t, db_expr_t *); 89*949c1c4eSmiod int db_elf_line_at_pc(Elf_Sym *, const char **, int *, db_expr_t); 906933210dSmpi void db_elf_sym_forall(db_forall_func_t db_forall_func, void *); 913ee2751eSmpi 923ee2751eSmpi bool db_dwarf_line_at_pc(const char *, size_t, uintptr_t, 933ee2751eSmpi const char **, const char **, int *); 943ee2751eSmpi 9562781896Smpi int db_ctf_func_numargs(Elf_Sym *); 963dc63949Smpi 973ee2751eSmpi #endif /* _DDB_DB_SYM_H_ */ 98