From d6583bb2a13f329cf0332ef2570eb8bb8fc0e39c Mon Sep 17 00:00:00 2001 From: Theo de Raadt Date: Wed, 18 Oct 1995 08:53:40 +0000 Subject: initial import of NetBSD tree --- usr.sbin/dbsym/dbtest.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 usr.sbin/dbsym/dbtest.c (limited to 'usr.sbin/dbsym/dbtest.c') diff --git a/usr.sbin/dbsym/dbtest.c b/usr.sbin/dbsym/dbtest.c new file mode 100644 index 00000000000..3db6c667c77 --- /dev/null +++ b/usr.sbin/dbsym/dbtest.c @@ -0,0 +1,58 @@ + +#include +#include + +#define SYMTAB_SPACE 0x8000 +int db_symtabsize = SYMTAB_SPACE; +char db_symtab[SYMTAB_SPACE] = { 0,0,0,0,1 }; +/* + * The actual format of the above is: + * int symtab_length = NSYMS; + * struct nlist[NSYMS]; + * int strtab_length; + * char strtab[]; + */ + +/* Print out our symbol table. */ +main() +{ + struct nlist *nl; + int symtab_len, strtab_len; + char *strtab; + char *p; + int *ip; + int st, sc, x; + + /* symbol table */ + ip = (int*) db_symtab; + symtab_len = *ip++; + if (symtab_len < 4) { + printf("no symbol table\n"); + exit(1); + } + nl = (struct nlist *) ip; + + /* string table pointer and length */ + ip = (int*) ((char*)ip + symtab_len); + strtab = (char*)ip; + strtab_len = *ip; + + if (strtab_len > (SYMTAB_SPACE - symtab_len)) + strtab_len = (SYMTAB_SPACE - symtab_len); + + /* print symbol table */ + while ((x=nl->n_un.n_strx) != 0) { + if (x < 0 || x >= strtab_len) p = "?"; + else p = strtab + x; + st = nl->n_type & 0x1F; + sc = "uatdbxxxxcxxxxxxx"[st>1]; + if (st & 1) sc &= ~0x20; /* to upper */ + printf("%08X %c %s\n", nl->n_value, sc, p); + nl++; + if ((char*)nl >= strtab) { + printf("symbol table missing null terminator\n"); + break; + } + } + exit(0); +} -- cgit v1.2.3