1 /* stabs.h a.out stabs */
2 /* (c) 2015 Frank Wille */
3 
4 #ifndef STABS_H
5 #define STABS_H
6 
7 /* stab definition node, created by .stab* directives */
8 struct stabdef {
9   struct stabdef *next;
10   union {
11     char *ptr;
12     int32_t idx;
13   } name;
14   int type;
15   int other;
16   int desc;
17   symbol *base;
18   taddr value;
19 };
20 
21 extern struct stabdef *first_nlist,*last_nlist;
22 
23 
24 /* Symbol table entry format */
25 struct nlist32 {
26   int32_t n_strx;           /* string table offset */
27   uint8_t n_type;           /* type defines */
28   int8_t n_other;           /* spare */
29   int16_t n_desc;           /* used by stab entries */
30   uint32_t n_value;         /* address/value of the symbol */
31 };
32 
33 #define N_EXT   0x01        /* external (global) bit, OR'ed in */
34 #define N_TYPE  0x1e        /* mask for all the type bits */
35 #define N_STAB  0x0e0       /* mask for debugger symbols */
36 
37 /* symbol types */
38 #define N_UNDF  0x00        /* undefined */
39 #define N_ABS   0x02        /* absolute address */
40 #define N_TEXT  0x04        /* text segment */
41 #define N_DATA  0x06        /* data segment */
42 #define N_BSS   0x08        /* bss segment */
43 #define N_INDR  0x0a        /* alias definition */
44 #define N_SIZE  0x0c        /* pseudo type, defines a symbol's size */
45 #define N_WEAKU 0x0d        /* GNU: Weak undefined symbol */
46 #define N_WEAKA 0x0e        /* GNU: Weak absolute symbol */
47 #define N_WEAKT 0x0f        /* GNU: Weak text symbol */
48 #define N_WEAKD 0x10        /* GNU: Weak data symbol */
49 #define N_WEAKB 0x11        /* GNU: Weak bss symbol */
50 #define N_COMM  0x12        /* common reference */
51 #define N_SETA  0x14        /* absolute set element symbol */
52 #define N_SETT  0x16        /* text set element symbol */
53 #define N_SETD  0x18        /* data set element symbol */
54 #define N_SETB  0x1a        /* bss set element symbol */
55 #define N_SETV  0x1c        /* set vector symbol */
56 #define N_FN    0x1e        /* file name (N_EXT on) */
57 #define N_WARN  0x1e        /* warning message (N_EXT off) */
58 
59 /* debugging symbols */
60 #define N_GSYM          0x20    /* global symbol */
61 #define N_FNAME         0x22    /* F77 function name */
62 #define N_FUN           0x24    /* procedure name */
63 #define N_STSYM         0x26    /* data segment variable */
64 #define N_LCSYM         0x28    /* bss segment variable */
65 #define N_MAIN          0x2a    /* main function name */
66 #define N_PC            0x30    /* global Pascal symbol */
67 #define N_RSYM          0x40    /* register variable */
68 #define N_SLINE         0x44    /* text segment line number */
69 #define N_DSLINE        0x46    /* data segment line number */
70 #define N_BSLINE        0x48    /* bss segment line number */
71 #define N_SSYM          0x60    /* structure/union element */
72 #define N_SO            0x64    /* main source file name */
73 #define N_LSYM          0x80    /* stack variable */
74 #define N_BINCL         0x82    /* include file beginning */
75 #define N_SOL           0x84    /* included source file name */
76 #define N_PSYM          0xa0    /* parameter variable */
77 #define N_EINCL         0xa2    /* include file end */
78 #define N_ENTRY         0xa4    /* alternate entry point */
79 #define N_LBRAC         0xc0    /* left bracket */
80 #define N_EXCL          0xc2    /* deleted include file */
81 #define N_RBRAC         0xe0    /* right bracket */
82 #define N_BCOMM         0xe2    /* begin common */
83 #define N_ECOMM         0xe4    /* end common */
84 #define N_ECOML         0xe8    /* end common (local name) */
85 #define N_LENG          0xfe    /* length of preceding entry */
86 
87 /* n_other & 0x0f */
88 #define AUX_UNKNOWN     0
89 #define AUX_OBJECT      1
90 #define AUX_FUNC        2
91 #define AUX_LABEL       3
92 #define AUX_IGNORE   0xff   /* vlink-specific, used to ignore this symbol */
93 /* n_other & 0xf0 >> 4 */
94 #define BIND_LOCAL      0   /* not used? */
95 #define BIND_GLOBAL     1   /* not used? */
96 #define BIND_WEAK       2
97 
98 #endif /* STABS_H */
99