diff options
author | phk <phk@FreeBSD.org> | 2001-11-05 21:55:42 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2001-11-05 21:55:42 +0000 |
commit | 87f18c0e4ef0b98c26d0d010e38a7ec8aa175ffb (patch) | |
tree | 015437b9324583ca1fc0a6ca87424038406ff77f | |
parent | d1ac48c2ffa4d9f5fb50db928c45776d42aae95d (diff) | |
download | FreeBSD-src-87f18c0e4ef0b98c26d0d010e38a7ec8aa175ffb.zip FreeBSD-src-87f18c0e4ef0b98c26d0d010e38a7ec8aa175ffb.tar.gz |
GC the a.out support in DDB, nothing anywhere would pull this
file into a build.
-rw-r--r-- | sys/ddb/db_aout.c | 402 |
1 files changed, 0 insertions, 402 deletions
diff --git a/sys/ddb/db_aout.c b/sys/ddb/db_aout.c deleted file mode 100644 index 21d13be..0000000 --- a/sys/ddb/db_aout.c +++ /dev/null @@ -1,402 +0,0 @@ -/* - * Mach Operating System - * Copyright (c) 1991,1990 Carnegie Mellon University - * All Rights Reserved. - * - * Permission to use, copy, modify and distribute this software and its - * documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR - * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie the - * rights to redistribute these changes. - * - * $FreeBSD$ - */ - -/* - * Author: David B. Golub, Carnegie Mellon University - * Date: 7/90 - */ -/* - * Symbol table routines for a.out format files. - */ - -#if !defined(__ELF__) && !defined(__alpha__) - -#include <sys/param.h> -#include <sys/systm.h> - -#include <machine/bootinfo.h> - -#include <ddb/ddb.h> -#include <ddb/db_sym.h> - -#define _AOUT_INCLUDE_ -#include <nlist.h> -#include <stab.h> - -/* - * An a.out symbol table as loaded into the kernel debugger: - * - * symtab -> size of symbol entries, in bytes - * sp -> first symbol entry - * ... - * ep -> last symbol entry + 1 - * strtab == start of string table - * size of string table in bytes, - * including this word - * -> strings - */ - -static void X_db_sym_init __P((int *symtab, char *esymtab, char *name)); -/* - * Find pointers to the start and end of the symbol entries, - * given a pointer to the start of the symbol table. - */ -#define db_get_aout_symtab(symtab, sp, ep) \ - (sp = (struct nlist *)((symtab) + 1), \ - ep = (struct nlist *)((char *)sp + *(symtab))) - -static void -X_db_sym_init(symtab, esymtab, name) - int * symtab; /* pointer to start of symbol table */ - char * esymtab; /* pointer to end of string table, - for checking - rounded up to integer - boundary */ - char * name; -{ - register struct nlist *sym_start, *sym_end; - register struct nlist *sp; - register char * strtab; - register int strlen; - - if (*symtab < 4) { - printf ("DDB: no symbols\n"); - return; - } - - db_get_aout_symtab(symtab, sym_start, sym_end); - - strtab = (char *)sym_end; - strlen = *(int *)strtab; - - if (strtab + ((strlen + sizeof(int) - 1) & ~(sizeof(int)-1)) - != esymtab) - { - db_printf("[ %s symbol table not valid ]\n", name); - return; - } - - db_printf("[ preserving %#x bytes of %s symbol table ]\n", - esymtab - (char *)symtab, name); - - for (sp = sym_start; sp < sym_end; sp++) { - register int strx; - strx = sp->n_un.n_strx; - if (strx != 0) { - if (strx > strlen) { - db_printf("Bad string table index (%#x)\n", strx); - sp->n_un.n_name = 0; - continue; - } - sp->n_un.n_name = strtab + strx; - } - } - - db_add_symbol_table((char *)sym_start, (char *)sym_end, name, - (char *)symtab); -} - -c_db_sym_t -X_db_lookup(stab, symstr) - db_symtab_t *stab; - const char * symstr; -{ - register struct nlist *sp, *ep; - - sp = (struct nlist *)stab->start; - ep = (struct nlist *)stab->end; - - for (; sp < ep; sp++) { - if (sp->n_un.n_name == 0) - continue; - if ((sp->n_type & N_STAB) == 0 && - sp->n_un.n_name != 0 && - db_eqname(sp->n_un.n_name, symstr, '_')) - { - return ((db_sym_t)sp); - } - } - return ((db_sym_t)0); -} - -c_db_sym_t -X_db_search_symbol(symtab, off, strategy, diffp) - db_symtab_t * symtab; - register - db_addr_t off; - db_strategy_t strategy; - db_expr_t *diffp; /* in/out */ -{ - register unsigned int diff = *diffp; - register struct nlist *symp = 0; - register struct nlist *sp, *ep; - - sp = (struct nlist *)symtab->start; - ep = (struct nlist *)symtab->end; - - for (; sp < ep; sp++) { - if (sp->n_un.n_name == 0) - continue; - if ((sp->n_type & N_STAB) != 0 || (sp->n_type & N_TYPE) == N_FN) - continue; - if (off >= sp->n_value) { - if (off - sp->n_value < diff) { - diff = off - sp->n_value; - symp = sp; - if (diff == 0) { - if (strategy == DB_STGY_PROC && - sp->n_type == (N_TEXT|N_EXT)) - break; - if (strategy == DB_STGY_ANY && - (sp->n_type & N_EXT)) - break; - } - } - else if (off - sp->n_value == diff) { - if (symp == 0) - symp = sp; - else if ((symp->n_type & N_EXT) == 0 && - (sp->n_type & N_EXT) != 0) - symp = sp; /* pick the external symbol */ - } - } - } - if (symp == 0) { - *diffp = off; - } - else { - *diffp = diff; - } - return ((db_sym_t)symp); -} - -/* - * Return the name and value for a symbol. - */ -void -X_db_symbol_values(symtab, sym, namep, valuep) - db_symtab_t *symtab; - c_db_sym_t sym; - const char **namep; - db_expr_t *valuep; -{ - register const struct nlist *sp; - - sp = (const struct nlist *)sym; - if (namep) - *namep = sp->n_un.n_name; - if (valuep) - *valuep = sp->n_value; -} - - -boolean_t -X_db_line_at_pc(symtab, cursym, filename, linenum, off) - db_symtab_t * symtab; - c_db_sym_t cursym; - char **filename; - int *linenum; - db_expr_t off; -{ - register struct nlist *sp, *ep; - unsigned long sodiff = -1UL, lndiff = -1UL, ln = 0; - char *fname = NULL; - - sp = (struct nlist *)symtab->start; - ep = (struct nlist *)symtab->end; - -/* - * XXX - this used to remove "gcc_compiled.", but that is obsolete. We - * now remove unwanted names using symorder. - */ -#define NEWSRC(str) 0 - - for (; sp < ep; sp++) { - - /* - * Prevent bogus linenumbers in case module not compiled - * with debugging options - */ -#if 0 - if (sp->n_value <= off && (off - sp->n_value) <= sodiff && - NEWSRC(sp->n_un.n_name)) { -#endif - if ((sp->n_type & N_TYPE) == N_FN || NEWSRC(sp->n_un.n_name)) { - sodiff = lndiff = -1UL; - ln = 0; - fname = NULL; - } - - if (sp->n_type == N_SO && *sp->n_un.n_name != '/') { - if (sp->n_value <= off && (off - sp->n_value) < sodiff) { - sodiff = off - sp->n_value; - fname = sp->n_un.n_name; - } - continue; - } - - if (sp->n_type != N_SLINE) - continue; - - if (sp->n_value > off) - break; - - if (off - sp->n_value < lndiff) { - lndiff = off - sp->n_value; - ln = sp->n_desc; - } - } - - if (fname != NULL && ln != 0) { - *filename = fname; - *linenum = ln; - return TRUE; - } - - return (FALSE); -} - -boolean_t -X_db_sym_numargs(symtab, cursym, nargp, argnamep) - db_symtab_t * symtab; - c_db_sym_t cursym; - int *nargp; - char **argnamep; -{ - register struct nlist *sp, *ep; - u_long addr; - int maxnarg = *nargp, nargs = 0; - - if (cursym == NULL) - return FALSE; - - addr = ((const struct nlist *)cursym)->n_value; - sp = (struct nlist *)symtab->start; - ep = (struct nlist *)symtab->end; - - for (; sp < ep; sp++) { - if (sp->n_type == N_FUN && sp->n_value == addr) { - while (++sp < ep && sp->n_type == N_PSYM) { - if (nargs >= maxnarg) - break; - nargs++; - *argnamep++ = sp->n_un.n_name?sp->n_un.n_name:"???"; - { - /* XXX - remove trailers */ - char *cp = *(argnamep-1); - while (*cp != '\0' && *cp != ':') cp++; - if (*cp == ':') *cp = '\0'; - } - } - *nargp = nargs; - return TRUE; - } - } - return FALSE; -} - -/* - * Initialization routine for a.out files. - */ -void -kdb_init() -{ -#ifdef __i386__ - if (bootinfo.bi_esymtab != bootinfo.bi_symtab) - X_db_sym_init((int *)bootinfo.bi_symtab, - (char *)((bootinfo.bi_esymtab + sizeof(int) - 1) - & ~(sizeof(int) - 1)), - "kernel"); -#endif -} - -#if 0 -/* - * Read symbol table from file. - * (should be somewhere else) - */ -#include <boot_ufs/file_io.h> -#include <vm/vm_kern.h> - -read_symtab_from_file(fp, symtab_name) - struct file *fp; - char * symtab_name; -{ - vm_size_t resid; - kern_return_t result; - vm_offset_t symoff; - vm_size_t symsize; - vm_offset_t stroff; - vm_size_t strsize; - vm_size_t table_size; - vm_offset_t symtab; - - if (!get_symtab(fp, &symoff, &symsize)) { - boot_printf("[ error %d reading %s file header ]\n", - result, symtab_name); - return; - } - - stroff = symoff + symsize; - result = read_file(fp, (vm_offset_t)stroff, - (vm_offset_t)&strsize, sizeof(strsize), &resid); - if (result || resid) { - boot_printf("[ no valid symbol table present for %s ]\n", - symtab_name); - return; - } - - table_size = sizeof(int) + symsize + strsize; - table_size = (table_size + sizeof(int)-1) & ~(sizeof(int)-1); - - symtab = kmem_alloc_wired(kernel_map, table_size); - - *(int *)symtab = symsize; - - result = read_file(fp, symoff, - symtab + sizeof(int), symsize, &resid); - if (result || resid) { - boot_printf("[ error %d reading %s symbol table ]\n", - result, symtab_name); - return; - } - - result = read_file(fp, stroff, - symtab + sizeof(int) + symsize, strsize, &resid); - if (result || resid) { - boot_printf("[ error %d reading %s string table ]\n", - result, symtab_name); - return; - } - - X_db_sym_init((int *)symtab, - (char *)(symtab + table_size), - symtab_name); - -} -#endif -#endif |