]>
Commit | Line | Data |
---|---|---|
fd67aa11 | 1 | /* Copyright (C) 2021-2024 Free Software Foundation, Inc. |
bb368aad VM |
2 | Contributed by Oracle. |
3 | ||
4 | This file is part of GNU Binutils. | |
5 | ||
6 | This program is free software; you can redistribute it and/or modify | |
7 | it under the terms of the GNU General Public License as published by | |
8 | the Free Software Foundation; either version 3, or (at your option) | |
9 | any later version. | |
10 | ||
11 | This program is distributed in the hope that it will be useful, | |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | GNU General Public License for more details. | |
15 | ||
16 | You should have received a copy of the GNU General Public License | |
17 | along with this program; if not, write to the Free Software | |
18 | Foundation, 51 Franklin Street - Fifth Floor, Boston, | |
19 | MA 02110-1301, USA. */ | |
20 | ||
21 | /* | |
22 | * This file gives definitions supplementing <a.out.h> | |
23 | * for debugging symbol table entries. | |
24 | * These entries must have one of the N_STAB bits on, | |
25 | * and are subject to relocation according to the masks in <a.out.h> | |
26 | * on 4.x (stabs not relocated on SVR4). | |
27 | */ | |
28 | ||
29 | #ifndef _STAB_H | |
30 | #define _STAB_H | |
31 | ||
32 | /* this file also contains fragments of a.out.h relevant to | |
33 | * support of stab processing within ELF files | |
34 | * (when a.out.h is not available) | |
35 | */ | |
36 | struct stab | |
37 | { | |
38 | unsigned n_strx; /* index into file string table */ | |
39 | unsigned char n_type; /* type flag (N_TEXT,..) */ | |
40 | char n_other; /* used by N_SLINE stab */ | |
41 | short n_desc; /* see stabs documentation */ | |
42 | unsigned n_value; /* value of symbol (or sdb offset) */ | |
43 | }; | |
44 | ||
45 | /* patchtypes for N_PATCH stab (n_desc field) */ | |
46 | #define P_BITFIELD 0x1 | |
47 | #define P_SPILL 0x2 | |
48 | #define P_SCOPY 0x3 | |
49 | ||
50 | /* markers for N_CODETAG stab (n_other field) */ | |
51 | #define CODETAG_BITFIELD 0x1 /* load/store of a bit field */ | |
52 | #define CODETAG_SPILL 0x2 /* spill of registers */ | |
53 | #define CODETAG_SCOPY 0x3 /* structure copy load/store */ | |
54 | #define CODETAG_FSTART 0x4 /* points to first inst of new frame (0==leaf)*/ | |
55 | #define CODETAG_END_CTORS 0x5 /* end of calls to super-class constructors */ | |
56 | /* UNUSED 0x6 DW_ATCF_SUN_branch_target in dwarf, not used in stabs */ | |
57 | #define CODETAG_STACK_PROBE 0x7 /* marks insns which probe the stack memory */ | |
58 | ||
59 | /* | |
60 | * Simple values for n_type. | |
61 | */ | |
62 | #define N_UNDF 0x0 /* undefined */ | |
63 | #define N_ABS 0x2 /* absolute */ | |
64 | #define N_TEXT 0x4 /* text */ | |
65 | #define N_DATA 0x6 /* data */ | |
66 | #define N_BSS 0x8 /* bss */ | |
67 | #define N_COMM 0x12 /* common (internal to ld) */ | |
68 | #define N_FN 0x1f /* file name symbol */ | |
69 | #define N_EXT 01 /* external bit, or'ed in */ | |
70 | #define N_TYPE 0x1e /* mask for all the type bits */ | |
71 | ||
72 | /* | |
73 | * maximum length of stab string before using continuation stab. | |
74 | * (this is just a suggested limit), assembler has no limit. | |
75 | */ | |
76 | #define MAX_STAB_STR_LEN 250 | |
77 | ||
78 | /* | |
79 | * for symbolic debuggers: | |
80 | */ | |
81 | #define N_GSYM 0x20 /* global symbol: name,,0,type,0 */ | |
82 | #define N_FNAME 0x22 /* procedure name (f77 kludge): name,,0 */ | |
83 | #define N_FUN 0x24 /* procedure: name,,0,linenumber,0 */ | |
84 | #define N_OUTL 0x25 /* outlined func: name,,0,linenumber,0 */ | |
85 | #define N_STSYM 0x26 /* static symbol: name,,0,type,0 or section relative */ | |
86 | #define N_TSTSYM 0x27 /* thread static symbol: Ttdata.data */ | |
87 | #define N_LCSYM 0x28 /* .lcomm symbol: name,,0,type,0 or section relative */ | |
88 | #define N_TLCSYM 0x29 /* thread local symbol: Ttbss.bss */ | |
89 | #define N_MAIN 0x2a /* name of main routine : name,,0,0,0 */ | |
90 | #define N_ROSYM 0x2c /* ro_data: name,,0,type,0 or section relative */ | |
91 | #define N_FLSYM 0x2e /* fragmented data: name,,0,type,0 */ | |
92 | #define N_TFLSYM 0x2f /* thread fragmented data: name,,0,type,0 */ | |
93 | #define N_PC 0x30 /* global pascal symbol: name,,0,subtype,line */ | |
94 | #define N_CMDLINE 0x34 /* command line info */ | |
95 | #define N_OBJ 0x38 /* object file path or name */ | |
96 | #define N_OPT 0x3c /* compiler options */ | |
97 | #define N_RSYM 0x40 /* register sym: name,,0,type,register */ | |
98 | #define N_SLINE 0x44 /* src line: 0,,0,linenumber,function relative */ | |
99 | #define N_XLINE 0x45 /* h.o. src line: 0,,0,linenumber>>16,0 */ | |
100 | #define N_ILDPAD 0x4c /* now used as ild pad stab value=strtab delta | |
101 | * was designed for "function start.end" */ | |
102 | #define N_SSYM 0x60 /* structure elt: name,,0,type,struct_offset */ | |
103 | #define N_ENDM 0x62 /* last stab emitted for object module */ | |
104 | #define N_SO 0x64 /* source file name: name,,0,0,0 */ | |
105 | #define N_MOD 0x66 /* f90 module: name,,0,0,0 */ | |
106 | #define N_EMOD 0x68 /* end of f90 module: name,,0,0,0 */ | |
107 | #define N_READ_MOD 0x6a /* use of f90 module: name;locallist,,0,0,0 */ | |
108 | #define N_ALIAS 0x6c /* alias name: name,,0,0,0 */ | |
109 | #define N_LSYM 0x80 /* local sym: name,,0,type,offset */ | |
110 | #define N_BINCL 0x82 /* header file: name,,0,0,0 */ | |
111 | #define N_SOL 0x84 /* #included file name: name,,0,0,0 */ | |
112 | #define N_PSYM 0xa0 /* parameter: name,,0,type,offset */ | |
113 | #define N_EINCL 0xa2 /* end of include file */ | |
114 | #define N_ENTRY 0xa4 /* alternate entry: name,linenumber,0 */ | |
115 | #define N_SINCL 0xa6 /* shared include file */ | |
116 | #define N_LBRAC 0xc0 /* left bracket: 0,,0,nesting level,function relative */ | |
117 | #define N_EXCL 0xc2 /* excluded include file */ | |
118 | #define N_USING 0xc4 /* C++ using command */ | |
119 | #define N_ISYM 0xc6 /* position independent type symbol, internal */ | |
120 | #define N_ESYM 0xc8 /* position independent type symbol, external */ | |
121 | #define N_PATCH 0xd0 /* Instruction to be ignored by run-time checking. */ | |
122 | #define N_CONSTRUCT 0xd2 /* C++ constructor call. */ | |
123 | #define N_DESTRUCT 0xd4 /* C++ destructor call. */ | |
124 | #define N_CODETAG 0xd8 /* Generic code tag */ | |
125 | #define N_FUN_CHILD 0xd9 /* Identifies a child function */ | |
126 | #define N_RBRAC 0xe0 /* right bracket: 0,,0,nesting level,function relative */ | |
127 | #define N_BCOMM 0xe2 /* begin common: name,, */ | |
128 | #define N_TCOMM 0xe3 /* begin task common: name,, */ | |
129 | #define N_ECOMM 0xe4 /* end task_common/common: name,, */ | |
130 | #define N_XCOMM 0xe6 /* excluded common block */ | |
131 | #define N_ECOML 0xe8 /* end common (local name): ,,address */ | |
132 | #define N_WITH 0xea /* pascal with statement: type,,0,0,offset */ | |
133 | #define N_LENG 0xfe /* second stab entry with length information */ | |
134 | ||
135 | /* | |
136 | * for analyzer (cache profile feedback support) | |
137 | */ | |
138 | #define N_CPROF 0xf0 /* annotation for cache profile feedback */ | |
139 | ||
140 | /* | |
141 | * n_descr values used in N_CPROF stabs. The n_descr field of | |
142 | * an N_CPROF stab identifies the type of table whose location | |
143 | * is defined by the N_CPROF stab. | |
144 | */ | |
145 | typedef enum n_cprof_instr_type_t | |
146 | { | |
147 | N_CPROF_INSTR_TYPE_LOAD = 0, /* profiled load ops */ | |
148 | N_CPROF_INSTR_TYPE_STORE, /* profiled store ops */ | |
149 | N_CPROF_INSTR_TYPE_PREFETCH, /* profiled prefetch ops */ | |
150 | N_CPROF_INSTR_TYPE_BRTARGET, /* branch target locations */ | |
151 | N_CPROF_INSTR_TYPE_NTYPES /* number of types */ | |
152 | } n_cprof_instr_type_t; | |
153 | ||
154 | /* | |
155 | * for code browser only | |
156 | */ | |
157 | #define N_BROWS 0x48 /* path to associated .cb file */ | |
158 | ||
159 | /* | |
160 | * for functions -- n_other bits for N_FUN stab | |
161 | */ | |
162 | #define N_FUN_PURE (1 << 0) | |
163 | #define N_FUN_ELEMENTAL (1 << 1) | |
164 | #define N_FUN_RECURSIVE (1 << 2) | |
165 | #define N_FUN_AMD64_PARMDUMP (1 << 3) | |
166 | ||
167 | /* | |
168 | * for variables -- n_other bits for N_LSYM, N_GSYM, N_LCSYM, N_STSYM, ... | |
169 | */ | |
170 | #define N_SYM_OMP_TLS (1 << 3) | |
171 | ||
172 | /* | |
173 | * Optional language designations for N_SO (n_desc field) | |
174 | */ | |
175 | #define N_SO_AS 1 /* Assembler */ | |
176 | #define N_SO_C 2 /* C */ | |
177 | #define N_SO_ANSI_C 3 /* ANSI C */ | |
178 | #define N_SO_CC 4 /* C++ */ | |
179 | #define N_SO_FORTRAN 5 /* Fortran 77 */ | |
180 | #define N_SO_FORTRAN77 5 /* Fortran 77 */ | |
181 | #define N_SO_PASCAL 6 /* Pascal */ | |
182 | #define N_SO_FORTRAN90 7 /* Fortran 90 */ | |
183 | #define N_SO_JAVA 8 /* Java */ | |
184 | #define N_SO_C99 9 /* C99 */ | |
185 | ||
186 | /* | |
187 | * Floating point type values (encoded in "R" type specification string) | |
188 | */ | |
189 | #define NF_NONE 0 /* Undefined type */ | |
190 | #define NF_SINGLE 1 /* Float IEEE 32 bit floating point */ | |
191 | #define NF_DOUBLE 2 /* Double IEEE 64 bit floating point */ | |
192 | #define NF_COMPLEX 3 /* Complex (2 32bit floats) */ | |
193 | #define NF_COMPLEX16 4 /* Complex (2 64bit doubles) */ | |
194 | #define NF_COMPLEX32 5 /* Complex (2 128bit long doubles) */ | |
195 | #define NF_LDOUBLE 6 /* Long double 128 bit floating point */ | |
196 | #define NF_INTERARITH 7 /* Interval (2 32bit floats) */ | |
197 | #define NF_DINTERARITH 8 /* Interval (2 64bit doubles) */ | |
198 | #define NF_QINTERARITH 9 /* Interval (2 128bit long doubles) */ | |
199 | #define NF_IMAGINARY 10 /* Imaginary (1 32bit floats) */ | |
200 | #define NF_DIMAGINARY 11 /* Imaginary (1 64bit doubles) */ | |
201 | #define NF_QIMAGINARY 12 /* Imaginary (1 128bit long doubles) */ | |
202 | ||
203 | #endif | |
204 | ||
205 |