1 a84cbb2a 2004-04-19 devnull #include <u.h>
2 a84cbb2a 2004-04-19 devnull #include <libc.h>
3 a84cbb2a 2004-04-19 devnull #include <mach.h>
4 a84cbb2a 2004-04-19 devnull #include "stabs.h"
7 a84cbb2a 2004-04-19 devnull http://sources.redhat.com/gdb/onlinedocs/stabs.html
11 a84cbb2a 2004-04-19 devnull stabsym(Stab *stabs, int i, StabSym *sym)
13 a84cbb2a 2004-04-19 devnull uchar *p;
16 a84cbb2a 2004-04-19 devnull if(stabs == nil){
17 a84cbb2a 2004-04-19 devnull werrstr("no stabs");
18 a84cbb2a 2004-04-19 devnull return -1;
20 a8763864 2004-07-09 devnull if(stabs->e2==0 || stabs->e4==0){
21 a84cbb2a 2004-04-19 devnull werrstr("no data extractors");
22 a84cbb2a 2004-04-19 devnull return -1;
25 a84cbb2a 2004-04-19 devnull if(i >= stabs->stabsize/12){
26 a84cbb2a 2004-04-19 devnull werrstr("stabs index out of range");
27 a84cbb2a 2004-04-19 devnull return -1;
30 a84cbb2a 2004-04-19 devnull p = stabs->stabbase+i*12;
31 a84cbb2a 2004-04-19 devnull x = stabs->e4(p);
32 a84cbb2a 2004-04-19 devnull if(x == 0)
33 a84cbb2a 2004-04-19 devnull sym->name = nil;
34 a84cbb2a 2004-04-19 devnull else if(x < stabs->strsize)
35 a84cbb2a 2004-04-19 devnull sym->name = stabs->strbase+x;
37 a84cbb2a 2004-04-19 devnull werrstr("bad stabs string index");
38 a84cbb2a 2004-04-19 devnull return -1;
42 a84cbb2a 2004-04-19 devnull * In theory, if name ends with a backslash,
43 a84cbb2a 2004-04-19 devnull * it continues into the next entry. We could
44 a84cbb2a 2004-04-19 devnull * rewrite these in place and then zero the next
45 a84cbb2a 2004-04-19 devnull * few entries, but let's wait until we run across
46 a84cbb2a 2004-04-19 devnull * some system that generates these.
48 a84cbb2a 2004-04-19 devnull sym->type = p[4];
49 a84cbb2a 2004-04-19 devnull sym->other = p[5];
50 a84cbb2a 2004-04-19 devnull sym->desc = stabs->e2(p+6);
51 a84cbb2a 2004-04-19 devnull sym->value = stabs->e4(p+8);
52 a84cbb2a 2004-04-19 devnull return 0;