1 1.1 christos /* Definitions and structures for reading debug symbols from the 2 1.1 christos native HP C compiler. 3 1.1 christos 4 1.1 christos Written by the Center for Software Science at the University of Utah 5 1.1 christos and by Cygnus Support. 6 1.1 christos 7 1.10 christos Copyright (C) 1994-2025 Free Software Foundation, Inc. 8 1.1 christos 9 1.1 christos This program is free software; you can redistribute it and/or modify 10 1.1 christos it under the terms of the GNU General Public License as published by 11 1.1 christos the Free Software Foundation; either version 3 of the License, or 12 1.1 christos (at your option) any later version. 13 1.1 christos 14 1.1 christos This program is distributed in the hope that it will be useful, 15 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of 16 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 1.1 christos GNU General Public License for more details. 18 1.1 christos 19 1.1 christos You should have received a copy of the GNU General Public License 20 1.1 christos along with this program; if not, write to the Free Software 21 1.1 christos Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 22 1.1 christos MA 02110-1301, USA. */ 23 1.1 christos 24 1.1 christos #ifndef HP_SYMTAB_INCLUDED 25 1.1 christos #define HP_SYMTAB_INCLUDED 26 1.1 christos 27 1.1 christos /* General information: 28 1.1 christos 29 1.1 christos This header file defines and describes only the data structures 30 1.1 christos necessary to read debug symbols produced by the HP C compiler, 31 1.1 christos HP ANSI C++ compiler, and HP FORTRAN 90 compiler using the 32 1.1 christos SOM object file format. 33 1.1 christos (For a full description of the debug format, ftp hpux-symtab.h from 34 1.1 christos jaguar.cs.utah.edu:/dist). 35 1.1 christos 36 1.1 christos Additional notes (Rich Title) 37 1.1 christos This file is a reverse-engineered version of a file called 38 1.1 christos "symtab.h" which exists internal to HP's Computer Languages Organization 39 1.1 christos in /CLO/Components/DDE/obj/som/symtab.h. Because HP's version of 40 1.1 christos the file is copyrighted and not distributed, it is necessary for 41 1.1 christos GDB to use the reverse-engineered version that follows. 42 1.1 christos Work was done by Cygnus to reverse-engineer the C subset of symtab.h. 43 1.1 christos The WDB project has extended this to also contain the C++ 44 1.1 christos symbol definitions, the F90 symbol definitions, 45 1.1 christos and the DOC (debugging-optimized-code) symbol definitions. 46 1.1 christos In some cases (the C++ symbol definitions) 47 1.1 christos I have added internal documentation here that 48 1.1 christos goes beyond what is supplied in HP's symtab.h. If we someday 49 1.1 christos unify these files again, the extra comments should be merged back 50 1.1 christos into HP's symtab.h. 51 1.1 christos 52 1.1 christos ------------------------------------------------------------------- 53 1.1 christos 54 1.1 christos Debug symbols are contained entirely within an unloadable space called 55 1.1 christos $DEBUG$. $DEBUG$ contains several subspaces which group related 56 1.1 christos debug symbols. 57 1.1 christos 58 1.1 christos $GNTT$ contains information for global variables, types and contants. 59 1.1 christos 60 1.1 christos $LNTT$ contains information for procedures (including nesting), scoping 61 1.1 christos information, local variables, types, and constants. 62 1.1 christos 63 1.1 christos $SLT$ contains source line information so that code addresses may be 64 1.1 christos mapped to source lines. 65 1.1 christos 66 1.1 christos $VT$ contains various strings and constants for named objects (variables, 67 1.1 christos typedefs, functions, etc). Strings are stored as null-terminated character 68 1.1 christos lists. Constants always begin on word boundaries. The first byte of 69 1.1 christos the VT must be zero (a null string). 70 1.1 christos 71 1.1 christos $XT$ is not currently used by GDB. 72 1.1 christos 73 1.1 christos Many structures within the subspaces point to other structures within 74 1.1 christos the same subspace, or to structures within a different subspace. These 75 1.1 christos pointers are represented as a structure index from the beginning of 76 1.1 christos the appropriate subspace. */ 77 1.1 christos 78 1.1 christos /* Used to describe where a constant is stored. */ 79 1.1 christos enum location_type 80 1.1 christos { 81 1.1 christos LOCATION_IMMEDIATE, 82 1.1 christos LOCATION_PTR, 83 1.1 christos LOCATION_VT, 84 1.1 christos }; 85 1.1 christos 86 1.1 christos /* Languages supported by this debug format. Within the data structures 87 1.1 christos this type is limited to 4 bits for a maximum of 16 languages. */ 88 1.1 christos enum hp_language 89 1.1 christos { 90 1.1 christos HP_LANGUAGE_UNKNOWN, 91 1.1 christos HP_LANGUAGE_C, 92 1.1 christos HP_LANGUAGE_FORTRAN, 93 1.1 christos HP_LANGUAGE_F77 = HP_LANGUAGE_FORTRAN, 94 1.1 christos HP_LANGUAGE_PASCAL, 95 1.1 christos HP_LANGUAGE_MODCAL, 96 1.1 christos HP_LANGUAGE_COBOL, 97 1.1 christos HP_LANGUAGE_BASIC, 98 1.1 christos HP_LANGUAGE_ADA, 99 1.1 christos HP_LANGUAGE_CPLUSPLUS, 100 1.1 christos HP_LANGUAGE_DMPASCAL 101 1.1 christos }; 102 1.1 christos 103 1.1 christos 104 1.1 christos /* Basic data types available in this debug format. Within the data 105 1.1 christos structures this type is limited to 5 bits for a maximum of 32 basic 106 1.1 christos data types. */ 107 1.1 christos enum hp_type 108 1.1 christos { 109 1.1 christos HP_TYPE_UNDEFINED, /* 0 */ 110 1.1 christos HP_TYPE_BOOLEAN, /* 1 */ 111 1.1 christos HP_TYPE_CHAR, /* 2 */ 112 1.1 christos HP_TYPE_INT, /* 3 */ 113 1.1 christos HP_TYPE_UNSIGNED_INT, /* 4 */ 114 1.1 christos HP_TYPE_REAL, /* 5 */ 115 1.1 christos HP_TYPE_COMPLEX, /* 6 */ 116 1.1 christos HP_TYPE_STRING200, /* 7 */ 117 1.1 christos HP_TYPE_LONGSTRING200, /* 8 */ 118 1.1 christos HP_TYPE_TEXT, /* 9 */ 119 1.1 christos HP_TYPE_FLABEL, /* 10 */ 120 1.1 christos HP_TYPE_FTN_STRING_SPEC, /* 11 */ 121 1.1 christos HP_TYPE_MOD_STRING_SPEC, /* 12 */ 122 1.1 christos HP_TYPE_PACKED_DECIMAL, /* 13 */ 123 1.1 christos HP_TYPE_REAL_3000, /* 14 */ 124 1.1 christos HP_TYPE_MOD_STRING_3000, /* 15 */ 125 1.1 christos HP_TYPE_ANYPOINTER, /* 16 */ 126 1.1 christos HP_TYPE_GLOBAL_ANYPOINTER, /* 17 */ 127 1.1 christos HP_TYPE_LOCAL_ANYPOINTER, /* 18 */ 128 1.1 christos HP_TYPE_COMPLEXS3000, /* 19 */ 129 1.1 christos HP_TYPE_FTN_STRING_S300_COMPAT, /* 20 */ 130 1.1 christos HP_TYPE_FTN_STRING_VAX_COMPAT, /* 21 */ 131 1.1 christos HP_TYPE_BOOLEAN_S300_COMPAT, /* 22 */ 132 1.1 christos HP_TYPE_BOOLEAN_VAX_COMPAT, /* 23 */ 133 1.1 christos HP_TYPE_WIDE_CHAR, /* 24 */ 134 1.1 christos HP_TYPE_LONG, /* 25 */ 135 1.1 christos HP_TYPE_UNSIGNED_LONG, /* 26 */ 136 1.1 christos HP_TYPE_DOUBLE, /* 27 */ 137 1.1 christos HP_TYPE_TEMPLATE_ARG, /* 28 */ 138 1.1 christos HP_TYPE_VOID /* 29 */ 139 1.1 christos }; 140 1.1 christos 141 1.1 christos /* An immediate name and type table entry. 142 1.1 christos 143 1.1 christos extension and immediate will always be one. 144 1.1 christos global will always be zero. 145 1.1 christos hp_type is the basic type this entry describes. 146 1.1 christos bitlength is the length in bits for the basic type. */ 147 1.1 christos struct dnttp_immediate 148 1.1 christos { 149 1.1 christos unsigned int extension: 1; 150 1.1 christos unsigned int immediate: 1; 151 1.1 christos unsigned int global: 1; 152 1.1 christos unsigned int type: 5; 153 1.1 christos unsigned int bitlength: 24; 154 1.1 christos }; 155 1.1 christos 156 1.1 christos /* A nonimmediate name and type table entry. 157 1.1 christos 158 1.1 christos extension will always be one. 159 1.1 christos immediate will always be zero. 160 1.1 christos if global is zero, this entry points into the LNTT 161 1.1 christos if global is one, this entry points into the GNTT 162 1.1 christos index is the index within the GNTT or LNTT for this entry. */ 163 1.1 christos struct dnttp_nonimmediate 164 1.1 christos { 165 1.1 christos unsigned int extension: 1; 166 1.1 christos unsigned int immediate: 1; 167 1.1 christos unsigned int global: 1; 168 1.1 christos unsigned int index: 29; 169 1.1 christos }; 170 1.1 christos 171 1.1 christos /* A pointer to an entry in the GNTT and LNTT tables. It has two 172 1.1 christos forms depending on the type being described. 173 1.1 christos 174 1.1 christos The immediate form is used for simple entries and is one 175 1.1 christos word. 176 1.1 christos 177 1.1 christos The nonimmediate form is used for complex entries and contains 178 1.1 christos an index into the LNTT or GNTT which describes the entire type. 179 1.1 christos 180 1.1 christos If a dnttpointer is -1, then it is a NIL entry. */ 181 1.1 christos 182 1.1 christos #define DNTTNIL (-1) 183 1.1 christos typedef union dnttpointer 184 1.1 christos { 185 1.1 christos struct dnttp_immediate dntti; 186 1.1 christos struct dnttp_nonimmediate dnttp; 187 1.1 christos int word; 188 1.1 christos } dnttpointer; 189 1.1 christos 190 1.1 christos /* An index into the source line table. As with dnttpointers, a sltpointer 191 1.1 christos of -1 indicates a NIL entry. */ 192 1.1 christos #define SLTNIL (-1) 193 1.1 christos typedef int sltpointer; 194 1.1 christos 195 1.1 christos /* Index into DOC (= "Debugging Optimized Code") line table. */ 196 1.1 christos #define LTNIL (-1) 197 1.1 christos typedef int ltpointer; 198 1.1 christos 199 1.1 christos /* Index into context table. */ 200 1.1 christos #define CTXTNIL (-1) 201 1.1 christos typedef int ctxtpointer; 202 1.1 christos 203 1.1 christos /* Unsigned byte offset into the VT. */ 204 1.1 christos typedef unsigned int vtpointer; 205 1.1 christos 206 1.1 christos /* A DNTT entry (used within the GNTT and LNTT). 207 1.1 christos 208 1.1 christos DNTT entries are variable sized objects, but are always a multiple 209 1.1 christos of 3 words (we call each group of 3 words a "block"). 210 1.1 christos 211 1.1 christos The first bit in each block is an extension bit. This bit is zero 212 1.1 christos for the first block of a DNTT entry. If the entry requires more 213 1.1 christos than one block, then this bit is set to one in all blocks after 214 1.1 christos the first one. */ 215 1.1 christos 216 1.1 christos /* Each DNTT entry describes a particular debug symbol (beginning of 217 1.1 christos a source file, a function, variables, structures, etc. 218 1.1 christos 219 1.1 christos The type of the DNTT entry is stored in the "kind" field within the 220 1.1 christos DNTT entry itself. */ 221 1.1 christos 222 1.1 christos enum dntt_entry_type 223 1.1 christos { 224 1.1 christos DNTT_TYPE_NIL = -1, 225 1.1 christos DNTT_TYPE_SRCFILE, 226 1.1 christos DNTT_TYPE_MODULE, 227 1.1 christos DNTT_TYPE_FUNCTION, 228 1.1 christos DNTT_TYPE_ENTRY, 229 1.1 christos DNTT_TYPE_BEGIN, 230 1.1 christos DNTT_TYPE_END, 231 1.1 christos DNTT_TYPE_IMPORT, 232 1.1 christos DNTT_TYPE_LABEL, 233 1.1 christos DNTT_TYPE_FPARAM, 234 1.1 christos DNTT_TYPE_SVAR, 235 1.1 christos DNTT_TYPE_DVAR, 236 1.1 christos DNTT_TYPE_HOLE1, 237 1.1 christos DNTT_TYPE_CONST, 238 1.1 christos DNTT_TYPE_TYPEDEF, 239 1.1 christos DNTT_TYPE_TAGDEF, 240 1.1 christos DNTT_TYPE_POINTER, 241 1.1 christos DNTT_TYPE_ENUM, 242 1.1 christos DNTT_TYPE_MEMENUM, 243 1.1 christos DNTT_TYPE_SET, 244 1.1 christos DNTT_TYPE_SUBRANGE, 245 1.1 christos DNTT_TYPE_ARRAY, 246 1.1 christos DNTT_TYPE_STRUCT, 247 1.1 christos DNTT_TYPE_UNION, 248 1.1 christos DNTT_TYPE_FIELD, 249 1.1 christos DNTT_TYPE_VARIANT, 250 1.1 christos DNTT_TYPE_FILE, 251 1.1 christos DNTT_TYPE_FUNCTYPE, 252 1.1 christos DNTT_TYPE_WITH, 253 1.1 christos DNTT_TYPE_COMMON, 254 1.1 christos DNTT_TYPE_COBSTRUCT, 255 1.1 christos DNTT_TYPE_XREF, 256 1.1 christos DNTT_TYPE_SA, 257 1.1 christos DNTT_TYPE_MACRO, 258 1.1 christos DNTT_TYPE_BLOCKDATA, 259 1.1 christos DNTT_TYPE_CLASS_SCOPE, 260 1.1 christos DNTT_TYPE_REFERENCE, 261 1.1 christos DNTT_TYPE_PTRMEM, 262 1.1 christos DNTT_TYPE_PTRMEMFUNC, 263 1.1 christos DNTT_TYPE_CLASS, 264 1.1 christos DNTT_TYPE_GENFIELD, 265 1.1 christos DNTT_TYPE_VFUNC, 266 1.1 christos DNTT_TYPE_MEMACCESS, 267 1.1 christos DNTT_TYPE_INHERITANCE, 268 1.1 christos DNTT_TYPE_FRIEND_CLASS, 269 1.1 christos DNTT_TYPE_FRIEND_FUNC, 270 1.1 christos DNTT_TYPE_MODIFIER, 271 1.1 christos DNTT_TYPE_OBJECT_ID, 272 1.1 christos DNTT_TYPE_MEMFUNC, 273 1.1 christos DNTT_TYPE_TEMPLATE, 274 1.1 christos DNTT_TYPE_TEMPLATE_ARG, 275 1.1 christos DNTT_TYPE_FUNC_TEMPLATE, 276 1.1 christos DNTT_TYPE_LINK, 277 1.1 christos DNTT_TYPE_DYN_ARRAY_DESC, 278 1.1 christos DNTT_TYPE_DESC_SUBRANGE, 279 1.1 christos DNTT_TYPE_BEGIN_EXT, 280 1.1 christos DNTT_TYPE_INLN, 281 1.1 christos DNTT_TYPE_INLN_LIST, 282 1.1 christos DNTT_TYPE_ALIAS, 283 1.1 christos DNTT_TYPE_DOC_FUNCTION, 284 1.1 christos DNTT_TYPE_DOC_MEMFUNC, 285 1.1 christos DNTT_TYPE_MAX 286 1.1 christos }; 287 1.1 christos 288 1.1 christos /* DNTT_TYPE_SRCFILE: 289 1.1 christos 290 1.1 christos One DNTT_TYPE_SRCFILE symbol is output for the start of each source 291 1.1 christos file and at the begin and end of an included file. A DNTT_TYPE_SRCFILE 292 1.1 christos entry is also output before each DNTT_TYPE_FUNC symbol so that debuggers 293 1.1 christos can determine what file a function was defined in. 294 1.1 christos 295 1.1 christos LANGUAGE describes the source file's language. 296 1.1 christos 297 1.1 christos NAME points to an VT entry providing the source file's name. 298 1.1 christos 299 1.1 christos Note the name used for DNTT_TYPE_SRCFILE entries are exactly as seen 300 1.1 christos by the compiler (ie they may be relative or absolute). C include files 301 1.1 christos via <> inclusion must use absolute paths. 302 1.1 christos 303 1.1 christos ADDRESS points to an SLT entry from which line number and code locations 304 1.1 christos may be determined. */ 305 1.1 christos 306 1.1 christos struct dntt_type_srcfile 307 1.1 christos { 308 1.1 christos unsigned int extension: 1; 309 1.1 christos unsigned int kind: 10; /* DNTT_TYPE_SRCFILE */ 310 1.1 christos unsigned int language: 4; 311 1.1 christos unsigned int unused: 17; 312 1.1 christos vtpointer name; 313 1.1 christos sltpointer address; 314 1.1 christos }; 315 1.1 christos 316 1.1 christos /* DNTT_TYPE_MODULE: 317 1.1 christos 318 1.1 christos A DNTT_TYPE_MODULE symbol is emitted for the start of a pascal 319 1.1 christos module or C source file. A module indicates a compilation unit 320 1.1 christos for name-scoping purposes; in that regard there should be 321 1.1 christos a 1-1 correspondence between GDB "symtab"'s and MODULE symbol records. 322 1.1 christos 323 1.1 christos Each DNTT_TYPE_MODULE must have an associated DNTT_TYPE_END symbol. 324 1.1 christos 325 1.1 christos NAME points to a VT entry providing the module's name. Note C 326 1.1 christos source files are considered nameless modules. 327 1.1 christos 328 1.1 christos ALIAS point to a VT entry providing a secondary name. 329 1.1 christos 330 1.1 christos ADDRESS points to an SLT entry from which line number and code locations 331 1.1 christos may be determined. */ 332 1.1 christos 333 1.1 christos struct dntt_type_module 334 1.1 christos { 335 1.1 christos unsigned int extension: 1; 336 1.1 christos unsigned int kind: 10; /* DNTT_TYPE_MODULE */ 337 1.1 christos unsigned int unused: 21; 338 1.1 christos vtpointer name; 339 1.1 christos vtpointer alias; 340 1.1 christos dnttpointer unused2; 341 1.1 christos sltpointer address; 342 1.1 christos }; 343 1.1 christos 344 1.1 christos /* DNTT_TYPE_FUNCTION, 345 1.1 christos DNTT_TYPE_ENTRY, 346 1.1 christos DNTT_TYPE_BLOCKDATA, 347 1.1 christos DNTT_TYPE_MEMFUNC: 348 1.1 christos 349 1.1 christos A DNTT_TYPE_FUNCTION symbol is emitted for each function definition; 350 1.1 christos a DNTT_TYPE_ENTRY symbols is used for secondary entry points. Both 351 1.1 christos symbols used the dntt_type_function structure. 352 1.1 christos A DNTT_TYPE_BLOCKDATA symbol is emitted ...? 353 1.1 christos A DNTT_TYPE_MEMFUNC symbol is emitted for inlined member functions (C++). 354 1.1 christos 355 1.1 christos Each of DNTT_TYPE_FUNCTION must have a matching DNTT_TYPE_END. 356 1.1 christos 357 1.1 christos GLOBAL is nonzero if the function has global scope. 358 1.1 christos 359 1.1 christos LANGUAGE describes the function's source language. 360 1.1 christos 361 1.1 christos OPT_LEVEL describes the optimization level the function was compiled 362 1.1 christos with. 363 1.1 christos 364 1.1 christos VARARGS is nonzero if the function uses varargs. 365 1.1 christos 366 1.1 christos NAME points to a VT entry providing the function's name. 367 1.1 christos 368 1.1 christos ALIAS points to a VT entry providing a secondary name for the function. 369 1.1 christos 370 1.1 christos FIRSTPARAM points to a LNTT entry which describes the parameter list. 371 1.1 christos 372 1.1 christos ADDRESS points to an SLT entry from which line number and code locations 373 1.1 christos may be determined. 374 1.1 christos 375 1.1 christos ENTRYADDR is the memory address corresponding the function's entry point 376 1.1 christos 377 1.1 christos RETVAL points to a LNTT entry describing the function's return value. 378 1.1 christos 379 1.1 christos LOWADDR is the lowest memory address associated with this function. 380 1.1 christos 381 1.1 christos HIADDR is the highest memory address associated with this function. */ 382 1.1 christos 383 1.1 christos struct dntt_type_function 384 1.1 christos { 385 1.1 christos unsigned int extension: 1; 386 1.1 christos unsigned int kind: 10; /* DNTT_TYPE_FUNCTION, 387 1.1 christos DNTT_TYPE_ENTRY, 388 1.1 christos DNTT_TYPE_BLOCKDATA 389 1.1 christos or DNTT_TYPE_MEMFUNC */ 390 1.1 christos unsigned int global: 1; 391 1.1 christos unsigned int language: 4; 392 1.1 christos unsigned int nest_level: 5; 393 1.1 christos unsigned int opt_level: 2; 394 1.1 christos unsigned int varargs: 1; 395 1.1 christos unsigned int lang_info: 4; 396 1.1 christos unsigned int inlined: 1; 397 1.1 christos unsigned int localalloc: 1; 398 1.1 christos unsigned int expansion: 1; 399 1.1 christos unsigned int unused: 1; 400 1.1 christos vtpointer name; 401 1.1 christos vtpointer alias; 402 1.1 christos dnttpointer firstparam; 403 1.1 christos sltpointer address; 404 1.1 christos CORE_ADDR entryaddr; 405 1.1 christos dnttpointer retval; 406 1.1 christos CORE_ADDR lowaddr; 407 1.1 christos CORE_ADDR hiaddr; 408 1.1 christos }; 409 1.1 christos 410 1.1 christos /* DNTT_TYPE_BEGIN: 411 1.1 christos 412 1.1 christos A DNTT_TYPE_BEGIN symbol is emitted to begin a new nested scope. 413 1.1 christos Every DNTT_TYPE_BEGIN symbol must have a matching DNTT_TYPE_END symbol. 414 1.1 christos 415 1.1 christos CLASSFLAG is nonzero if this is the beginning of a c++ class definition. 416 1.1 christos 417 1.1 christos ADDRESS points to an SLT entry from which line number and code locations 418 1.1 christos may be determined. */ 419 1.1 christos 420 1.1 christos struct dntt_type_begin 421 1.1 christos { 422 1.1 christos unsigned int extension: 1; 423 1.1 christos unsigned int kind: 10; 424 1.1 christos unsigned int classflag: 1; 425 1.1 christos unsigned int unused: 20; 426 1.1 christos sltpointer address; 427 1.1 christos }; 428 1.1 christos 429 1.1 christos /* DNTT_TYPE_END: 430 1.1 christos 431 1.1 christos A DNTT_TYPE_END symbol is emitted when closing a scope started by 432 1.1 christos a DNTT_TYPE_MODULE, DNTT_TYPE_FUNCTION, DNTT_TYPE_WITH, 433 1.1 christos DNTT_TYPE_COMMON, DNTT_TYPE_BEGIN, and DNTT_TYPE_CLASS_SCOPE symbols. 434 1.1 christos 435 1.1 christos ENDKIND describes what type of scope the DNTT_TYPE_END is closing 436 1.1 christos (one of the above 6 kinds). 437 1.1 christos 438 1.1 christos CLASSFLAG is nonzero if this is the end of a c++ class definition. 439 1.1 christos 440 1.1 christos ADDRESS points to an SLT entry from which line number and code locations 441 1.1 christos may be determined. 442 1.1 christos 443 1.1 christos BEGINSCOPE points to the LNTT entry which opened the scope. */ 444 1.1 christos 445 1.1 christos struct dntt_type_end 446 1.1 christos { 447 1.1 christos unsigned int extension: 1; 448 1.1 christos unsigned int kind: 10; 449 1.1 christos unsigned int endkind: 10; 450 1.1 christos unsigned int classflag: 1; 451 1.1 christos unsigned int unused: 10; 452 1.1 christos sltpointer address; 453 1.1 christos dnttpointer beginscope; 454 1.1 christos }; 455 1.1 christos 456 1.1 christos /* DNTT_TYPE_IMPORT is unused by GDB. */ 457 1.1 christos /* DNTT_TYPE_LABEL is unused by GDB. */ 458 1.1 christos 459 1.1 christos /* DNTT_TYPE_FPARAM: 460 1.1 christos 461 1.1 christos A DNTT_TYPE_FPARAM symbol is emitted for a function argument. When 462 1.1 christos chained together the symbols represent an argument list for a function. 463 1.1 christos 464 1.1 christos REGPARAM is nonzero if this parameter was passed in a register. 465 1.1 christos 466 1.1 christos INDIRECT is nonzero if this parameter is a pointer to the parameter 467 1.1 christos (pass by reference or pass by value for large items). 468 1.1 christos 469 1.1 christos LONGADDR is nonzero if the parameter is a 64bit pointer. 470 1.1 christos 471 1.1 christos NAME is a pointer into the VT for the parameter's name. 472 1.1 christos 473 1.1 christos LOCATION describes where the parameter is stored. Depending on the 474 1.1 christos parameter type LOCATION could be a register number, or an offset 475 1.1 christos from the stack pointer. 476 1.1 christos 477 1.1 christos TYPE points to a NTT entry describing the type of this parameter. 478 1.1 christos 479 1.1 christos NEXTPARAM points to the LNTT entry describing the next parameter. */ 480 1.1 christos 481 1.1 christos struct dntt_type_fparam 482 1.1 christos { 483 1.1 christos unsigned int extension: 1; 484 1.1 christos unsigned int kind: 10; 485 1.1 christos unsigned int regparam: 1; 486 1.1 christos unsigned int indirect: 1; 487 1.1 christos unsigned int longaddr: 1; 488 1.1 christos unsigned int copyparam: 1; 489 1.1 christos unsigned int dflt: 1; 490 1.1 christos unsigned int doc_ranges: 1; 491 1.1 christos unsigned int misc_kind: 1; 492 1.1 christos unsigned int unused: 14; 493 1.1 christos vtpointer name; 494 1.1 christos CORE_ADDR location; 495 1.1 christos dnttpointer type; 496 1.1 christos dnttpointer nextparam; 497 1.1 christos int misc; 498 1.1 christos }; 499 1.1 christos 500 1.1 christos /* DNTT_TYPE_SVAR: 501 1.1 christos 502 1.1 christos A DNTT_TYPE_SVAR is emitted to describe a variable in static storage. 503 1.1 christos 504 1.1 christos GLOBAL is nonzero if the variable has global scope. 505 1.1 christos 506 1.1 christos INDIRECT is nonzero if the variable is a pointer to an object. 507 1.1 christos 508 1.1 christos LONGADDR is nonzero if the variable is in long pointer space. 509 1.1 christos 510 1.1 christos STATICMEM is nonzero if the variable is a member of a class. 511 1.1 christos 512 1.1 christos A_UNION is nonzero if the variable is an anonymous union member. 513 1.1 christos 514 1.1 christos NAME is a pointer into the VT for the variable's name. 515 1.1 christos 516 1.1 christos LOCATION provides the memory address for the variable. 517 1.1 christos 518 1.1 christos TYPE is a pointer into either the GNTT or LNTT which describes 519 1.1 christos the type of this variable. */ 520 1.1 christos 521 1.1 christos struct dntt_type_svar 522 1.1 christos { 523 1.1 christos unsigned int extension: 1; 524 1.1 christos unsigned int kind: 10; 525 1.1 christos unsigned int global: 1; 526 1.1 christos unsigned int indirect: 1; 527 1.1 christos unsigned int longaddr: 1; 528 1.1 christos unsigned int staticmem: 1; 529 1.1 christos unsigned int a_union: 1; 530 1.1 christos unsigned int unused1: 1; 531 1.1 christos unsigned int thread_specific: 1; 532 1.1 christos unsigned int unused2: 14; 533 1.1 christos vtpointer name; 534 1.1 christos CORE_ADDR location; 535 1.1 christos dnttpointer type; 536 1.1 christos unsigned int offset; 537 1.1 christos unsigned int displacement; 538 1.1 christos }; 539 1.1 christos 540 1.1 christos /* DNTT_TYPE_DVAR: 541 1.1 christos 542 1.1 christos A DNTT_TYPE_DVAR is emitted to describe automatic variables and variables 543 1.1 christos held in registers. 544 1.1 christos 545 1.1 christos GLOBAL is nonzero if the variable has global scope. 546 1.1 christos 547 1.1 christos INDIRECT is nonzero if the variable is a pointer to an object. 548 1.1 christos 549 1.1 christos REGVAR is nonzero if the variable is in a register. 550 1.1 christos 551 1.1 christos A_UNION is nonzero if the variable is an anonymous union member. 552 1.1 christos 553 1.1 christos NAME is a pointer into the VT for the variable's name. 554 1.1 christos 555 1.1 christos LOCATION provides the memory address or register number for the variable. 556 1.1 christos 557 1.1 christos TYPE is a pointer into either the GNTT or LNTT which describes 558 1.1 christos the type of this variable. */ 559 1.1 christos 560 1.1 christos struct dntt_type_dvar 561 1.1 christos { 562 1.1 christos unsigned int extension: 1; 563 1.1 christos unsigned int kind: 10; 564 1.1 christos unsigned int global: 1; 565 1.1 christos unsigned int indirect: 1; 566 1.1 christos unsigned int regvar: 1; 567 1.1 christos unsigned int a_union: 1; 568 1.1 christos unsigned int unused: 17; 569 1.1 christos vtpointer name; 570 1.1 christos int location; 571 1.1 christos dnttpointer type; 572 1.1 christos unsigned int offset; 573 1.1 christos }; 574 1.1 christos 575 1.1 christos /* DNTT_TYPE_CONST: 576 1.1 christos 577 1.1 christos A DNTT_TYPE_CONST symbol is emitted for program constants. 578 1.1 christos 579 1.1 christos GLOBAL is nonzero if the constant has global scope. 580 1.1 christos 581 1.1 christos INDIRECT is nonzero if the constant is a pointer to an object. 582 1.1 christos 583 1.1 christos LOCATION_TYPE describes where to find the constant's value 584 1.1 christos (in the VT, memory, or embedded in an instruction). 585 1.1 christos 586 1.1 christos CLASSMEM is nonzero if the constant is a member of a class. 587 1.1 christos 588 1.1 christos NAME is a pointer into the VT for the constant's name. 589 1.1 christos 590 1.1 christos LOCATION provides the memory address, register number or pointer 591 1.1 christos into the VT for the constant's value. 592 1.1 christos 593 1.1 christos TYPE is a pointer into either the GNTT or LNTT which describes 594 1.1 christos the type of this variable. */ 595 1.1 christos 596 1.1 christos struct dntt_type_const 597 1.1 christos { 598 1.1 christos unsigned int extension: 1; 599 1.1 christos unsigned int kind: 10; 600 1.1 christos unsigned int global: 1; 601 1.1 christos unsigned int indirect: 1; 602 1.1 christos unsigned int location_type: 3; 603 1.1 christos unsigned int classmem: 1; 604 1.1 christos unsigned int unused: 15; 605 1.1 christos vtpointer name; 606 1.1 christos CORE_ADDR location; 607 1.1 christos dnttpointer type; 608 1.1 christos unsigned int offset; 609 1.1 christos unsigned int displacement; 610 1.1 christos }; 611 1.1 christos 612 1.1 christos /* DNTT_TYPE_TYPEDEF and DNTT_TYPE_TAGDEF: 613 1.1 christos 614 1.1 christos The same structure is used to describe typedefs and tagdefs. 615 1.1 christos 616 1.1 christos DNTT_TYPE_TYPEDEFS are associated with C "typedefs". 617 1.1 christos 618 1.1 christos DNTT_TYPE_TAGDEFs are associated with C "struct", "union", and "enum" 619 1.1 christos tags, which may have the same name as a typedef in the same scope. 620 1.1 christos Also they are associated with C++ "class" tags, which implicitly have 621 1.1 christos the same name as the class type. 622 1.1 christos 623 1.1 christos GLOBAL is nonzero if the typedef/tagdef has global scope. 624 1.1 christos 625 1.1 christos TYPEINFO is used to determine if full type information is available 626 1.1 christos for a tag. (usually 1, but can be zero for opaque types in C). 627 1.1 christos 628 1.1 christos NAME is a pointer into the VT for the constant's name. 629 1.1 christos 630 1.1 christos TYPE points to the underlying type for the typedef/tagdef in the 631 1.1 christos GNTT or LNTT. */ 632 1.1 christos 633 1.1 christos struct dntt_type_type 634 1.1 christos { 635 1.1 christos unsigned int extension: 1; 636 1.1 christos unsigned int kind: 10; /* DNTT_TYPE_TYPEDEF or 637 1.1 christos DNTT_TYPE_TAGDEF. */ 638 1.1 christos unsigned int global: 1; 639 1.1 christos unsigned int typeinfo: 1; 640 1.1 christos unsigned int unused: 19; 641 1.1 christos vtpointer name; 642 1.1 christos dnttpointer type; /* Underlying type, which for TAGDEF's may be 643 1.1 christos DNTT_TYPE_STRUCT, DNTT_TYPE_UNION, 644 1.1 christos DNTT_TYPE_ENUM, or DNTT_TYPE_CLASS. 645 1.1 christos For TYPEDEF's other underlying types 646 1.1 christos are also possible. */ 647 1.1 christos }; 648 1.1 christos 649 1.1 christos /* DNTT_TYPE_POINTER: 650 1.1 christos 651 1.1 christos Used to describe a pointer to an underlying type. 652 1.1 christos 653 1.1 christos POINTSTO is a pointer into the GNTT or LNTT for the type which this 654 1.1 christos pointer points to. 655 1.1 christos 656 1.1 christos BITLENGTH is the length of the pointer (not the underlying type). */ 657 1.1 christos 658 1.1 christos struct dntt_type_pointer 659 1.1 christos { 660 1.1 christos unsigned int extension: 1; 661 1.1 christos unsigned int kind: 10; 662 1.1 christos unsigned int unused: 21; 663 1.1 christos dnttpointer pointsto; 664 1.1 christos unsigned int bitlength; 665 1.1 christos }; 666 1.1 christos 667 1.1 christos 668 1.1 christos /* DNTT_TYPE_ENUM: 669 1.1 christos 670 1.1 christos Used to describe enumerated types. 671 1.1 christos 672 1.1 christos FIRSTMEM is a pointer to a DNTT_TYPE_MEMENUM in the GNTT/LNTT which 673 1.1 christos describes the first member (and contains a pointer to the chain of 674 1.1 christos members). 675 1.1 christos 676 1.1 christos BITLENGTH is the number of bits used to hold the values of the enum's 677 1.1 christos members. */ 678 1.1 christos 679 1.1 christos struct dntt_type_enum 680 1.1 christos { 681 1.1 christos unsigned int extension: 1; 682 1.1 christos unsigned int kind: 10; 683 1.1 christos unsigned int unused: 21; 684 1.1 christos dnttpointer firstmem; 685 1.1 christos unsigned int bitlength; 686 1.1 christos }; 687 1.1 christos 688 1.1 christos /* DNTT_TYPE_MEMENUM 689 1.1 christos 690 1.1 christos Used to describe members of an enumerated type. 691 1.1 christos 692 1.1 christos CLASSMEM is nonzero if this member is part of a class. 693 1.1 christos 694 1.1 christos NAME points into the VT for the name of this member. 695 1.1 christos 696 1.1 christos VALUE is the value of this enumeration member. 697 1.1 christos 698 1.1 christos NEXTMEM points to the next DNTT_TYPE_MEMENUM in the chain. */ 699 1.1 christos 700 1.1 christos struct dntt_type_memenum 701 1.1 christos { 702 1.1 christos unsigned int extension: 1; 703 1.1 christos unsigned int kind: 10; 704 1.1 christos unsigned int classmem: 1; 705 1.1 christos unsigned int unused: 20; 706 1.1 christos vtpointer name; 707 1.1 christos unsigned int value; 708 1.1 christos dnttpointer nextmem; 709 1.1 christos }; 710 1.1 christos 711 1.1 christos /* DNTT_TYPE_SET 712 1.1 christos 713 1.1 christos Used to describe PASCAL "set" type. 714 1.1 christos 715 1.1 christos DECLARATION describes the bitpacking of the set. 716 1.1 christos 717 1.1 christos SUBTYPE points to a DNTT entry describing the type of the members. 718 1.1 christos 719 1.1 christos BITLENGTH is the size of the set. */ 720 1.1 christos 721 1.1 christos struct dntt_type_set 722 1.1 christos { 723 1.1 christos unsigned int extension: 1; 724 1.1 christos unsigned int kind: 10; 725 1.1 christos unsigned int declaration: 2; 726 1.1 christos unsigned int unused: 19; 727 1.1 christos dnttpointer subtype; 728 1.1 christos unsigned int bitlength; 729 1.1 christos }; 730 1.1 christos 731 1.1 christos /* DNTT_TYPE_SUBRANGE 732 1.1 christos 733 1.1 christos Used to describe subrange type. 734 1.1 christos 735 1.1 christos DYN_LOW describes the lower bound of the subrange: 736 1.1 christos 737 1.1 christos 00 for a constant lower bound (found in LOWBOUND). 738 1.1 christos 739 1.1 christos 01 for a dynamic lower bound with the lower bound found in the 740 1.1 christos memory address pointed to by LOWBOUND. 741 1.1 christos 742 1.1 christos 10 for a dynamic lower bound described by an variable found in the 743 1.1 christos DNTT/LNTT (LOWBOUND would be a pointer into the DNTT/LNTT). 744 1.1 christos 745 1.1 christos DYN_HIGH is similar to DYN_LOW, except it describes the upper bound. 746 1.1 christos 747 1.1 christos SUBTYPE points to the type of the subrange. 748 1.1 christos 749 1.1 christos BITLENGTH is the length in bits needed to describe the subrange's 750 1.1 christos values. */ 751 1.1 christos 752 1.1 christos struct dntt_type_subrange 753 1.1 christos { 754 1.1 christos unsigned int extension: 1; 755 1.1 christos unsigned int kind: 10; 756 1.1 christos unsigned int dyn_low: 2; 757 1.1 christos unsigned int dyn_high: 2; 758 1.1 christos unsigned int unused: 17; 759 1.1 christos int lowbound; 760 1.1 christos int highbound; 761 1.1 christos dnttpointer subtype; 762 1.1 christos unsigned int bitlength; 763 1.1 christos }; 764 1.1 christos 765 1.1 christos /* DNTT_TYPE_ARRAY 766 1.1 christos 767 1.1 christos Used to describe an array type. 768 1.1 christos 769 1.1 christos DECLARATION describes the bit packing used in the array. 770 1.1 christos 771 1.1 christos ARRAYISBYTES is nonzero if the field in arraylength describes the 772 1.1 christos length in bytes rather than in bits. A value of zero is used to 773 1.1 christos describe an array with size 2**32. 774 1.1 christos 775 1.1 christos ELEMISBYTES is nonzero if the length if each element in the array 776 1.1 christos is describes in bytes rather than bits. A value of zero is used 777 1.1 christos to an element with size 2**32. 778 1.1 christos 779 1.1 christos ELEMORDER is nonzero if the elements are indexed in increasing order. 780 1.1 christos 781 1.1 christos JUSTIFIED if the elements are left justified to index zero. 782 1.1 christos 783 1.1 christos ARRAYLENGTH is the length of the array. 784 1.1 christos 785 1.1 christos INDEXTYPE is a DNTT pointer to the type used to index the array. 786 1.1 christos 787 1.1 christos ELEMTYPE is a DNTT pointer to the type for the array elements. 788 1.1 christos 789 1.1 christos ELEMLENGTH is the length of each element in the array (including 790 1.1 christos any padding). 791 1.1 christos 792 1.1 christos Multi-dimensional arrays are represented by ELEMTYPE pointing to 793 1.1 christos another DNTT_TYPE_ARRAY. */ 794 1.1 christos 795 1.1 christos struct dntt_type_array 796 1.1 christos { 797 1.1 christos unsigned int extension: 1; 798 1.1 christos unsigned int kind: 10; 799 1.1 christos unsigned int declaration: 2; 800 1.1 christos unsigned int dyn_low: 2; 801 1.1 christos unsigned int dyn_high: 2; 802 1.1 christos unsigned int arrayisbytes: 1; 803 1.1 christos unsigned int elemisbytes: 1; 804 1.1 christos unsigned int elemorder: 1; 805 1.1 christos unsigned int justified: 1; 806 1.1 christos unsigned int unused: 11; 807 1.1 christos unsigned int arraylength; 808 1.1 christos dnttpointer indextype; 809 1.1 christos dnttpointer elemtype; 810 1.1 christos unsigned int elemlength; 811 1.1 christos }; 812 1.1 christos 813 1.1 christos /* DNTT_TYPE_STRUCT 814 1.1 christos 815 1.1 christos DNTT_TYPE_STRUCT is used to describe a C structure. 816 1.1 christos 817 1.1 christos DECLARATION describes the bitpacking used. 818 1.1 christos 819 1.1 christos FIRSTFIELD is a DNTT pointer to the first field of the structure 820 1.1 christos (each field contains a pointer to the next field, walk the list 821 1.1 christos to access all fields of the structure). 822 1.1 christos 823 1.1 christos VARTAGFIELD and VARLIST are used for Pascal variant records. 824 1.1 christos 825 1.1 christos BITLENGTH is the size of the structure in bits. */ 826 1.1 christos 827 1.1 christos struct dntt_type_struct 828 1.1 christos { 829 1.1 christos unsigned int extension: 1; 830 1.1 christos unsigned int kind: 10; 831 1.1 christos unsigned int declaration: 2; 832 1.1 christos unsigned int unused: 19; 833 1.1 christos dnttpointer firstfield; 834 1.1 christos dnttpointer vartagfield; 835 1.1 christos dnttpointer varlist; 836 1.1 christos unsigned int bitlength; 837 1.1 christos }; 838 1.1 christos 839 1.1 christos /* DNTT_TYPE_UNION 840 1.1 christos 841 1.1 christos DNTT_TYPE_UNION is used to describe a C union. 842 1.1 christos 843 1.1 christos FIRSTFIELD is a DNTT pointer to the beginning of the field chain. 844 1.1 christos 845 1.1 christos BITLENGTH is the size of the union in bits. */ 846 1.1 christos 847 1.1 christos struct dntt_type_union 848 1.1 christos { 849 1.1 christos unsigned int extension: 1; 850 1.1 christos unsigned int kind: 10; 851 1.1 christos unsigned int unused: 21; 852 1.1 christos dnttpointer firstfield; 853 1.1 christos unsigned int bitlength; 854 1.1 christos }; 855 1.1 christos 856 1.1 christos /* DNTT_TYPE_FIELD 857 1.1 christos 858 1.1 christos DNTT_TYPE_FIELD describes one field in a structure or union 859 1.1 christos or C++ class. 860 1.1 christos 861 1.1 christos VISIBILITY is used to describe the visibility of the field 862 1.1 christos (for c++. public = 0, protected = 1, private = 2). 863 1.1 christos 864 1.1 christos A_UNION is nonzero if this field is a member of an anonymous union. 865 1.1 christos 866 1.1 christos STATICMEM is nonzero if this field is a static member of a template. 867 1.1 christos 868 1.1 christos NAME is a pointer into the VT for the name of the field. 869 1.1 christos 870 1.1 christos BITOFFSET gives the offset of this field in bits from the beginning 871 1.1 christos of the structure or union this field is a member of. 872 1.1 christos 873 1.1 christos TYPE is a DNTT pointer to the type describing this field. 874 1.1 christos 875 1.1 christos BITLENGTH is the size of the entry in bits. 876 1.1 christos 877 1.1 christos NEXTFIELD is a DNTT pointer to the next field in the chain. */ 878 1.1 christos 879 1.1 christos struct dntt_type_field 880 1.1 christos { 881 1.1 christos unsigned int extension: 1; 882 1.1 christos unsigned int kind: 10; 883 1.1 christos unsigned int visibility: 2; 884 1.1 christos unsigned int a_union: 1; 885 1.1 christos unsigned int staticmem: 1; 886 1.1 christos unsigned int unused: 17; 887 1.1 christos vtpointer name; 888 1.1 christos unsigned int bitoffset; 889 1.1 christos dnttpointer type; 890 1.1 christos unsigned int bitlength; 891 1.1 christos dnttpointer nextfield; 892 1.1 christos }; 893 1.1 christos 894 1.1 christos /* DNTT_TYPE_VARIANT is unused by GDB. */ 895 1.1 christos /* DNTT_TYPE_FILE is unused by GDB. */ 896 1.1 christos 897 1.1 christos /* DNTT_TYPE_FUNCTYPE 898 1.1 christos 899 1.1 christos I think this is used to describe a function type (e.g., would 900 1.1 christos be emitted as part of a function-pointer description). 901 1.1 christos 902 1.1 christos VARARGS is nonzero if this function uses varargs. 903 1.1 christos 904 1.1 christos FIRSTPARAM is a DNTT pointer to the first entry in the parameter 905 1.1 christos chain. 906 1.1 christos 907 1.1 christos RETVAL is a DNTT pointer to the type of the return value. */ 908 1.1 christos 909 1.1 christos struct dntt_type_functype 910 1.1 christos { 911 1.1 christos unsigned int extension: 1; 912 1.1 christos unsigned int kind: 10; 913 1.1 christos unsigned int varargs: 1; 914 1.1 christos unsigned int info: 4; 915 1.1 christos unsigned int unused: 16; 916 1.1 christos unsigned int bitlength; 917 1.1 christos dnttpointer firstparam; 918 1.1 christos dnttpointer retval; 919 1.1 christos }; 920 1.1 christos 921 1.1 christos /* DNTT_TYPE_WITH is emitted by C++ to indicate "with" scoping semantics. 922 1.1 christos (Probably also emitted by PASCAL to support "with"...). 923 1.1 christos 924 1.1 christos C++ example: Say "memfunc" is a method of class "c", and say 925 1.1 christos "m" is a data member of class "c". Then from within "memfunc", 926 1.1 christos it is legal to reference "m" directly (e.g. you don't have to 927 1.1 christos say "this->m". The symbol table indicates 928 1.1 christos this by emitting a DNTT_TYPE_WITH symbol within the function "memfunc", 929 1.1 christos pointing to the type symbol for class "c". 930 1.1 christos 931 1.1 christos In GDB, this symbol record is unnecessary, 932 1.1 christos because GDB's symbol lookup algorithm 933 1.1 christos infers the "with" semantics when it sees a "this" argument to the member 934 1.1 christos function. So GDB can safely ignore the DNTT_TYPE_WITH record. 935 1.1 christos 936 1.1 christos A DNTT_TYPE_WITH has a matching DNTT_TYPE_END symbol. */ 937 1.1 christos 938 1.1 christos struct dntt_type_with 939 1.1 christos { 940 1.1 christos unsigned int extension: 1; /* always zero */ 941 1.1 christos unsigned int kind: 10; /* always DNTT_TYPE_WITH */ 942 1.1 christos unsigned int addrtype: 2; /* 0 => STATTYPE */ 943 1.1 christos /* 1 => DYNTYPE */ 944 1.1 christos /* 2 => REGTYPE */ 945 1.1 christos unsigned int indirect: 1; /* 1 => pointer to object */ 946 1.1 christos unsigned int longaddr: 1; /* 1 => in long pointer space */ 947 1.1 christos unsigned int nestlevel: 6; /* # of nesting levels back */ 948 1.1 christos unsigned int doc_ranges: 1; /* 1 => location is range list */ 949 1.1 christos unsigned int unused: 10; 950 1.1 christos long location; /* where stored (allocated) */ 951 1.1 christos sltpointer address; 952 1.1 christos dnttpointer type; /* type of with expression */ 953 1.1 christos vtpointer name; /* name of with expression */ 954 1.1 christos unsigned long offset; /* byte offset from location */ 955 1.1 christos }; 956 1.1 christos 957 1.1 christos /* DNTT_TYPE_COMMON is unsupported by GDB. */ 958 1.1 christos /* A DNTT_TYPE_COMMON symbol must have a matching DNTT_TYPE_END symbol */ 959 1.1 christos 960 1.1 christos /* DNTT_TYPE_COBSTRUCT is unsupported by GDB. */ 961 1.1 christos /* DNTT_TYPE_XREF is unsupported by GDB. */ 962 1.1 christos /* DNTT_TYPE_SA is unsupported by GDB. */ 963 1.1 christos /* DNTT_TYPE_MACRO is unsupported by GDB */ 964 1.1 christos 965 1.1 christos /* DNTT_TYPE_BLOCKDATA has the same structure as DNTT_TYPE_FUNCTION */ 966 1.1 christos 967 1.1 christos /* The following are the C++ specific SOM records */ 968 1.1 christos 969 1.1 christos /* The purpose of the DNTT_TYPE_CLASS_SCOPE is to bracket C++ methods 970 1.1 christos and indicate the method name belongs in the "class scope" rather 971 1.1 christos than in the module they are being defined in. For example: 972 1.1 christos 973 1.1 christos class c { 974 1.1 christos ... 975 1.1 christos void memfunc(); // member function 976 1.1 christos }; 977 1.1 christos 978 1.1 christos void c::memfunc() // definition of class c's "memfunc" 979 1.1 christos { 980 1.1 christos ... 981 1.1 christos } 982 1.1 christos 983 1.1 christos main() 984 1.1 christos { 985 1.1 christos ... 986 1.1 christos } 987 1.1 christos 988 1.1 christos In the above, the name "memfunc" is not directly visible from "main". 989 1.1 christos I.e., you have to say "break c::memfunc". 990 1.1 christos If it were a normal function (not a method), it would be visible 991 1.1 christos via the simple "break memfunc". Since "memfunc" otherwise looks 992 1.1 christos like a normal FUNCTION in the symbol table, the bracketing 993 1.1 christos CLASS_SCOPE is what is used to indicate it is really a method. 994 1.1 christos 995 1.1 christos 996 1.1 christos A DNTT_TYPE_CLASS_SCOPE symbol must have a matching DNTT_TYPE_END symbol. */ 997 1.1 christos 998 1.1 christos struct dntt_type_class_scope 999 1.1 christos { 1000 1.1 christos unsigned int extension: 1; /* Always zero. */ 1001 1.1 christos unsigned int kind: 10; /* Always DNTT_TYPE_CLASS_SCOPE. */ 1002 1.1 christos unsigned int unused: 21; 1003 1.1 christos sltpointer address ; /* Pointer to SLT entry. */ 1004 1.1 christos dnttpointer type ; /* Pointer to class type DNTT. */ 1005 1.1 christos }; 1006 1.1 christos 1007 1.1 christos /* C++ reference parameter. 1008 1.1 christos The structure of this record is the same as DNTT_TYPE_POINTER - 1009 1.1 christos refer to struct dntt_type_pointer. */ 1010 1.1 christos 1011 1.1 christos /* The next two describe C++ pointer-to-data-member type, and 1012 1.1 christos pointer-to-member-function type, respectively. 1013 1.1 christos DNTT_TYPE_PTRMEM and DNTT_TYPE_PTRMEMFUNC have the same structure. */ 1014 1.1 christos 1015 1.1 christos struct dntt_type_ptrmem 1016 1.1 christos { 1017 1.1 christos unsigned int extension: 1; /* Always zero. */ 1018 1.1 christos unsigned int kind: 10; /* Always DNTT_TYPE_PTRMEM. */ 1019 1.1 christos unsigned int unused: 21; 1020 1.1 christos dnttpointer pointsto ; /* Pointer to class DNTT. */ 1021 1.1 christos dnttpointer memtype ; /* Type of member. */ 1022 1.1 christos }; 1023 1.1 christos 1024 1.1 christos struct dntt_type_ptrmemfunc 1025 1.1 christos { 1026 1.1 christos unsigned int extension: 1; /* Always zero. */ 1027 1.1 christos unsigned int kind: 10; /* Always DNTT_TYPE_PTRMEMFUNC. */ 1028 1.1 christos unsigned int unused: 21; 1029 1.1 christos dnttpointer pointsto ; /* Pointer to class DNTT. */ 1030 1.1 christos dnttpointer memtype ; /* Type of member. */ 1031 1.1 christos }; 1032 1.1 christos 1033 1.1 christos /* The DNTT_TYPE_CLASS symbol is emitted to describe a class type. 1034 1.1 christos "memberlist" points to a chained list of FIELD or GENFIELD records 1035 1.1 christos indicating the class members. "parentlist" points to a chained list 1036 1.1 christos of INHERITANCE records indicating classes from which we inherit 1037 1.1 christos fields. */ 1038 1.1 christos 1039 1.1 christos struct dntt_type_class 1040 1.1 christos { 1041 1.1 christos unsigned int extension: 1; /* Always zero. */ 1042 1.1 christos unsigned int kind: 10; /* Always DNTT_TYPE_CLASS. */ 1043 1.1 christos unsigned int abstract: 1; /* Is this an abstract class? */ 1044 1.1 christos unsigned int class_decl: 2; /* 0=class,1=union,2=struct. */ 1045 1.1 christos unsigned int expansion: 1; /* 1=template expansion. */ 1046 1.1 christos unsigned int unused: 17; 1047 1.1 christos dnttpointer memberlist ; /* Ptr to chain of [GEN]FIELDs. */ 1048 1.1 christos unsigned long vtbl_loc ; /* Offset in obj of ptr to vtbl. */ 1049 1.1 christos dnttpointer parentlist ; /* Ptr to K_INHERITANCE list. */ 1050 1.1 christos unsigned long bitlength ; /* Total at this level. */ 1051 1.1 christos dnttpointer identlist ; /* Ptr to chain of class ident's. */ 1052 1.1 christos dnttpointer friendlist ; /* Ptr to K_FRIEND list. */ 1053 1.1 christos dnttpointer templateptr ; /* Ptr to template. */ 1054 1.1 christos dnttpointer nextexp ; /* Ptr to next expansion. */ 1055 1.1 christos }; 1056 1.1 christos 1057 1.1 christos /* Class members are indicated via either the FIELD record (for 1058 1.1 christos data members, same as for C struct fields), or by the GENFIELD record 1059 1.1 christos (for member functions). */ 1060 1.1 christos 1061 1.1 christos struct dntt_type_genfield 1062 1.1 christos { 1063 1.1 christos unsigned int extension: 1; /* Always zero. */ 1064 1.1 christos unsigned int kind: 10; /* Always DNTT_TYPE_GENFIELD. */ 1065 1.1 christos unsigned int visibility: 2; /* Pub = 0, prot = 1, priv = 2. */ 1066 1.1 christos unsigned int a_union: 1; /* 1 => anonymous union member. */ 1067 1.1 christos unsigned int unused: 18; 1068 1.1 christos dnttpointer field ; /* Pointer to field or qualifier. */ 1069 1.1 christos dnttpointer nextfield ; /* Pointer to next field. */ 1070 1.1 christos }; 1071 1.1 christos 1072 1.1 christos /* C++ virtual functions. */ 1073 1.1 christos 1074 1.1 christos struct dntt_type_vfunc 1075 1.1 christos { 1076 1.1 christos unsigned int extension: 1; /* always zero */ 1077 1.1 christos unsigned int kind: 10; /* always DNTT_TYPE_VFUNC */ 1078 1.1 christos unsigned int pure: 1; /* pure virtual function ? */ 1079 1.1 christos unsigned int unused: 20; 1080 1.1 christos dnttpointer funcptr ; /* points to FUNCTION symbol */ 1081 1.1 christos unsigned long vtbl_offset ; /* offset into vtbl for virtual */ 1082 1.1 christos }; 1083 1.1 christos 1084 1.1 christos /* Not precisely sure what this is intended for - DDE ignores it. */ 1085 1.1 christos 1086 1.1 christos struct dntt_type_memaccess 1087 1.1 christos { 1088 1.1 christos unsigned int extension: 1; /* always zero */ 1089 1.1 christos unsigned int kind: 10; /* always DNTT_TYPE_MEMACCESS */ 1090 1.1 christos unsigned int unused: 21; 1091 1.1 christos dnttpointer classptr ; /* pointer to base class */ 1092 1.1 christos dnttpointer field ; /* pointer field */ 1093 1.1 christos }; 1094 1.1 christos 1095 1.1 christos /* The DNTT_TYPE_INHERITANCE record describes derived classes. 1096 1.1 christos In particular, the "parentlist" field of the CLASS record points 1097 1.1 christos to a list of INHERITANCE records for classes from which we 1098 1.1 christos inherit members. */ 1099 1.1 christos 1100 1.1 christos struct dntt_type_inheritance 1101 1.1 christos { 1102 1.1 christos unsigned int extension: 1; /* always zero */ 1103 1.1 christos unsigned int kind: 10; /* always DNTT_TYPE_INHERITANCE */ 1104 1.1 christos unsigned int Virtual: 1; /* virtual base class ? */ 1105 1.1 christos unsigned int visibility: 2; /* pub = 0, prot = 1, priv = 2 */ 1106 1.1 christos unsigned int unused: 18; 1107 1.1 christos dnttpointer classname ; /* first parent class, if any */ 1108 1.1 christos unsigned long offset ; /* offset to start of base class */ 1109 1.1 christos dnttpointer next ; /* pointer to next K_INHERITANCE */ 1110 1.1 christos unsigned long future[2] ; /* padding to 3-word block end */ 1111 1.1 christos }; 1112 1.1 christos 1113 1.1 christos /* C++ "friend" classes ... */ 1114 1.1 christos 1115 1.1 christos struct dntt_type_friend_class 1116 1.1 christos { 1117 1.1 christos unsigned int extension: 1; /* always zero */ 1118 1.1 christos unsigned int kind: 10; /* always DNTT_TYPE_FRIEND_CLASS */ 1119 1.1 christos unsigned int unused: 21; 1120 1.1 christos dnttpointer classptr ; /* pointer to class DNTT */ 1121 1.1 christos dnttpointer next ; /* next DNTT_FRIEND */ 1122 1.1 christos }; 1123 1.1 christos 1124 1.1 christos struct dntt_type_friend_func 1125 1.1 christos { 1126 1.1 christos unsigned int extension: 1; /* always zero */ 1127 1.1 christos unsigned int kind: 10; /* always DNTT_TYPE_FRIEND_FUNC */ 1128 1.1 christos unsigned int unused: 21; 1129 1.1 christos dnttpointer funcptr ; /* pointer to function */ 1130 1.1 christos dnttpointer classptr ; /* pointer to class DNTT */ 1131 1.1 christos dnttpointer next ; /* next DNTT_FRIEND */ 1132 1.1 christos unsigned long future[2] ; /* padding to 3-word block end */ 1133 1.1 christos }; 1134 1.1 christos 1135 1.1 christos /* DDE appears to ignore the DNTT_TYPE_MODIFIER record. 1136 1.1 christos It could perhaps be used to give better "ptype" output in GDB; 1137 1.1 christos otherwise it is probably safe for GDB to ignore it also. */ 1138 1.1 christos 1139 1.1 christos struct dntt_type_modifier 1140 1.1 christos { 1141 1.1 christos unsigned int extension: 1; /* always zero */ 1142 1.1 christos unsigned int kind: 10; /* always DNTT_TYPE_MODIFIER */ 1143 1.1 christos unsigned int m_const: 1; /* const */ 1144 1.1 christos unsigned int m_static: 1; /* static */ 1145 1.1 christos unsigned int m_void: 1; /* void */ 1146 1.1 christos unsigned int m_volatile: 1; /* volatile */ 1147 1.1 christos unsigned int m_duplicate: 1; /* duplicate */ 1148 1.1 christos unsigned int unused: 16; 1149 1.1 christos dnttpointer type ; /* subtype */ 1150 1.1 christos unsigned long future ; /* padding to 3-word block end */ 1151 1.1 christos }; 1152 1.1 christos 1153 1.1 christos /* I'm not sure what this was intended for - DDE ignores it. */ 1154 1.1 christos 1155 1.1 christos struct dntt_type_object_id 1156 1.1 christos { 1157 1.1 christos unsigned int extension: 1; /* always zero */ 1158 1.1 christos unsigned int kind: 10; /* always DNTT_TYPE_OBJECT_ID */ 1159 1.1 christos unsigned int indirect: 1; /* Is object_ident addr of addr? */ 1160 1.1 christos unsigned int unused: 20; 1161 1.1 christos unsigned long object_ident ; /* object identifier */ 1162 1.1 christos unsigned long offset ; /* offset to start of base class */ 1163 1.1 christos dnttpointer next ; /* pointer to next K_OBJECT_ID */ 1164 1.1 christos unsigned long segoffset ; /* for linker fixup */ 1165 1.1 christos unsigned long future ; /* padding to 3-word block end */ 1166 1.1 christos }; 1167 1.1 christos 1168 1.1 christos /* No separate dntt_type_memfunc; same as dntt_type_func */ 1169 1.1 christos 1170 1.1 christos /* Symbol records to support templates. These only get used 1171 1.1 christos in DDE's "describe" output (like GDB's "ptype"). */ 1172 1.1 christos 1173 1.1 christos /* The TEMPLATE record is the header for a template-class. 1174 1.1 christos Like the CLASS record, a TEMPLATE record has a memberlist that 1175 1.1 christos points to a list of template members. It also has an arglist 1176 1.1 christos pointing to a list of TEMPLATE_ARG records. */ 1177 1.1 christos 1178 1.1 christos struct dntt_type_template 1179 1.1 christos { 1180 1.1 christos unsigned int extension: 1; /* always zero */ 1181 1.1 christos unsigned int kind: 10; /* always DNTT_TYPE_TEMPLATE */ 1182 1.1 christos unsigned int abstract: 1; /* is this an abstract class? */ 1183 1.1 christos unsigned int class_decl: 2; /* 0=class,1=union,2=struct */ 1184 1.1 christos unsigned int unused: 18; 1185 1.1 christos dnttpointer memberlist ; /* ptr to chain of K_[GEN]FIELDs */ 1186 1.1 christos long unused2 ; /* offset in obj of ptr to vtbl */ 1187 1.1 christos dnttpointer parentlist ; /* ptr to K_INHERITANCE list */ 1188 1.1 christos unsigned long bitlength ; /* total at this level */ 1189 1.1 christos dnttpointer identlist ; /* ptr to chain of class ident's */ 1190 1.1 christos dnttpointer friendlist ; /* ptr to K_FRIEND list */ 1191 1.1 christos dnttpointer arglist ; /* ptr to argument list */ 1192 1.1 christos dnttpointer expansions ; /* ptr to expansion list */ 1193 1.1 christos }; 1194 1.1 christos 1195 1.1 christos /* Template-class arguments are a list of TEMPL_ARG records 1196 1.1 christos chained together. The "name" field is the name of the formal. 1197 1.1 christos E.g.: 1198 1.1 christos 1199 1.1 christos template <class T> class q { ... }; 1200 1.1 christos 1201 1.1 christos Then "T" is the name of the formal argument. */ 1202 1.1 christos 1203 1.1 christos struct dntt_type_templ_arg 1204 1.1 christos { 1205 1.1 christos unsigned int extension: 1; /* always zero */ 1206 1.1 christos unsigned int kind: 10; /* always DNTT_TYPE_TEMPL_ARG */ 1207 1.1 christos unsigned int usagetype: 1; /* 0 type-name 1 expression */ 1208 1.1 christos unsigned int unused: 20; 1209 1.1 christos vtpointer name ; /* name of argument */ 1210 1.1 christos dnttpointer type ; /* for non type arguments */ 1211 1.1 christos dnttpointer nextarg ; /* Next argument if any */ 1212 1.1 christos long future[2] ; /* padding to 3-word block end */ 1213 1.1 christos }; 1214 1.1 christos 1215 1.1 christos /* FUNC_TEMPLATE records are sort of like FUNCTION, but are emitted 1216 1.1 christos for template member functions. E.g., 1217 1.1 christos 1218 1.1 christos template <class T> class q 1219 1.1 christos { 1220 1.1 christos ... 1221 1.1 christos void f(); 1222 1.1 christos ... 1223 1.1 christos }; 1224 1.1 christos 1225 1.1 christos Within the list of FIELDs/GENFIELDs defining the member list 1226 1.1 christos of the template "q", "f" would appear as a FUNC_TEMPLATE. 1227 1.1 christos We'll also see instances of FUNCTION "f" records for each 1228 1.1 christos instantiation of the template. */ 1229 1.1 christos 1230 1.1 christos struct dntt_type_func_template 1231 1.1 christos { 1232 1.1 christos unsigned int extension: 1; /* always zero */ 1233 1.1 christos unsigned int kind: 10; /* always DNTT_TYPE_FUNC_TEMPLATE */ 1234 1.1 christos unsigned int public: 1; /* 1 => globally visible */ 1235 1.1 christos unsigned int language: 4; /* type of language */ 1236 1.1 christos unsigned int level: 5; /* nesting level (top level = 0)*/ 1237 1.1 christos unsigned int optimize: 2; /* level of optimization */ 1238 1.1 christos unsigned int varargs: 1; /* ellipses. Pascal/800 later */ 1239 1.1 christos unsigned int info: 4; /* lang-specific stuff; F_xxxx */ 1240 1.1 christos unsigned int inlined: 1; 1241 1.1 christos unsigned int localloc: 1; /* 0 at top, 1 at end of block */ 1242 1.1 christos unsigned int unused: 2; 1243 1.1 christos vtpointer name ; /* name of function */ 1244 1.1 christos vtpointer alias ; /* alternate name, if any */ 1245 1.1 christos dnttpointer firstparam ; /* first FPARAM, if any */ 1246 1.1 christos dnttpointer retval ; /* return type, if any */ 1247 1.1 christos dnttpointer arglist ; /* ptr to argument list */ 1248 1.1 christos }; 1249 1.1 christos 1250 1.1 christos /* LINK is apparently intended to link together function template 1251 1.1 christos definitions with their instantiations. However, it is not clear 1252 1.1 christos why this would be needed, except to provide the information on 1253 1.1 christos a "ptype" command. And as far as I can tell, aCC does not 1254 1.1 christos generate this record. */ 1255 1.1 christos 1256 1.1 christos struct dntt_type_link 1257 1.1 christos { 1258 1.1 christos unsigned int extension: 1; /* always zero */ 1259 1.1 christos unsigned int kind: 10; /* always DNTT_TYPE_LINK */ 1260 1.1 christos unsigned int linkKind: 4; /* always LINK_UNKNOWN */ 1261 1.1 christos unsigned int unused: 17; 1262 1.1 christos long future1 ; /* expansion */ 1263 1.1 christos dnttpointer ptr1 ; /* link from template */ 1264 1.1 christos dnttpointer ptr2 ; /* to expansion */ 1265 1.1 christos long future[2] ; /* padding to 3-word block end */ 1266 1.1 christos }; 1267 1.1 christos 1268 1.1 christos /* end of C++ specific SOM's. */ 1269 1.1 christos 1270 1.1 christos /* DNTT_TYPE_DYN_ARRAY_DESC is unused by GDB */ 1271 1.1 christos /* DNTT_TYPE_DESC_SUBRANGE is unused by GDB */ 1272 1.1 christos /* DNTT_TYPE_BEGIN_EXT is unused by GDB */ 1273 1.1 christos /* DNTT_TYPE_INLN is unused by GDB */ 1274 1.1 christos /* DNTT_TYPE_INLN_LIST is unused by GDB */ 1275 1.1 christos /* DNTT_TYPE_ALIAS is unused by GDB */ 1276 1.1 christos 1277 1.1 christos struct dntt_type_doc_function 1278 1.1 christos { 1279 1.1 christos unsigned int extension: 1; /* always zero */ 1280 1.1 christos unsigned int kind: 10; /* K_DOC_FUNCTION or */ 1281 1.1 christos /* K_DOC_MEMFUNC */ 1282 1.1 christos unsigned int global: 1; /* 1 => globally visible */ 1283 1.1 christos unsigned int language: 4; /* type of language */ 1284 1.1 christos unsigned int level: 5; /* nesting level (top level = 0)*/ 1285 1.1 christos unsigned int optimize: 2; /* level of optimization */ 1286 1.1 christos unsigned int varargs: 1; /* ellipses. Pascal/800 later */ 1287 1.1 christos unsigned int info: 4; /* lang-specific stuff; F_xxxx */ 1288 1.1 christos unsigned int inlined: 1; 1289 1.1 christos unsigned int localloc: 1; /* 0 at top, 1 at end of block */ 1290 1.1 christos unsigned int expansion: 1; /* 1 = function expansion */ 1291 1.1 christos unsigned int doc_clone: 1; 1292 1.1 christos vtpointer name; /* name of function */ 1293 1.1 christos vtpointer alias; /* alternate name, if any */ 1294 1.1 christos dnttpointer firstparam; /* first FPARAM, if any */ 1295 1.1 christos sltpointer address; /* code and text locations */ 1296 1.1 christos CORE_ADDR entryaddr; /* address of entry point */ 1297 1.1 christos dnttpointer retval; /* return type, if any */ 1298 1.1 christos CORE_ADDR lowaddr; /* lowest address of function */ 1299 1.1 christos CORE_ADDR hiaddr; /* highest address of function */ 1300 1.1 christos dnttpointer inline_list; /* pointer to first inline */ 1301 1.1 christos ltpointer lt_offset; /* start of frag/cp line table */ 1302 1.1 christos ctxtpointer ctxt_offset; /* start of context table for this routine */ 1303 1.1 christos }; 1304 1.1 christos 1305 1.1 christos /* DNTT_TYPE_DOC_MEMFUNC is unused by GDB */ 1306 1.1 christos 1307 1.1 christos /* DNTT_TYPE_GENERIC and DNTT_TYPE_BLOCK are convience structures 1308 1.1 christos so we can examine a DNTT entry in a generic fashion. */ 1309 1.1 christos struct dntt_type_generic 1310 1.1 christos { 1311 1.1 christos unsigned int word[9]; 1312 1.1 christos }; 1313 1.1 christos 1314 1.1 christos struct dntt_type_block 1315 1.1 christos { 1316 1.1 christos unsigned int extension: 1; 1317 1.1 christos unsigned int kind: 10; 1318 1.1 christos unsigned int unused: 21; 1319 1.1 christos unsigned int word[2]; 1320 1.1 christos }; 1321 1.1 christos 1322 1.1 christos /* One entry in a DNTT (either the LNTT or GNTT). 1323 1.1 christos This is a union of the above 60 or so structure definitions. */ 1324 1.1 christos 1325 1.1 christos union dnttentry 1326 1.1 christos { 1327 1.1 christos struct dntt_type_srcfile dsfile; 1328 1.1 christos struct dntt_type_module dmodule; 1329 1.1 christos struct dntt_type_function dfunc; 1330 1.1 christos struct dntt_type_function dentry; 1331 1.1 christos struct dntt_type_begin dbegin; 1332 1.1 christos struct dntt_type_end dend; 1333 1.1 christos struct dntt_type_fparam dfparam; 1334 1.1 christos struct dntt_type_svar dsvar; 1335 1.1 christos struct dntt_type_dvar ddvar; 1336 1.1 christos struct dntt_type_const dconst; 1337 1.1 christos struct dntt_type_type dtype; 1338 1.1 christos struct dntt_type_type dtag; 1339 1.1 christos struct dntt_type_pointer dptr; 1340 1.1 christos struct dntt_type_enum denum; 1341 1.1 christos struct dntt_type_memenum dmember; 1342 1.1 christos struct dntt_type_set dset; 1343 1.1 christos struct dntt_type_subrange dsubr; 1344 1.1 christos struct dntt_type_array darray; 1345 1.1 christos struct dntt_type_struct dstruct; 1346 1.1 christos struct dntt_type_union dunion; 1347 1.1 christos struct dntt_type_field dfield; 1348 1.1 christos struct dntt_type_functype dfunctype; 1349 1.1 christos struct dntt_type_with dwith; 1350 1.1 christos struct dntt_type_function dblockdata; 1351 1.1 christos struct dntt_type_class_scope dclass_scope; 1352 1.1 christos struct dntt_type_pointer dreference; 1353 1.1 christos struct dntt_type_ptrmem dptrmem; 1354 1.1 christos struct dntt_type_ptrmemfunc dptrmemfunc; 1355 1.1 christos struct dntt_type_class dclass; 1356 1.1 christos struct dntt_type_genfield dgenfield; 1357 1.1 christos struct dntt_type_vfunc dvfunc; 1358 1.1 christos struct dntt_type_memaccess dmemaccess; 1359 1.1 christos struct dntt_type_inheritance dinheritance; 1360 1.1 christos struct dntt_type_friend_class dfriend_class; 1361 1.1 christos struct dntt_type_friend_func dfriend_func; 1362 1.1 christos struct dntt_type_modifier dmodifier; 1363 1.1 christos struct dntt_type_object_id dobject_id; 1364 1.1 christos struct dntt_type_template dtemplate; 1365 1.1 christos struct dntt_type_templ_arg dtempl_arg; 1366 1.1 christos struct dntt_type_func_template dfunc_template; 1367 1.1 christos struct dntt_type_link dlink; 1368 1.1 christos struct dntt_type_doc_function ddocfunc; 1369 1.1 christos struct dntt_type_generic dgeneric; 1370 1.1 christos struct dntt_type_block dblock; 1371 1.1 christos }; 1372 1.1 christos 1373 1.1 christos /* Source line entry types. */ 1374 1.1 christos enum slttype 1375 1.1 christos { 1376 1.1 christos SLT_NORMAL, 1377 1.1 christos SLT_SRCFILE, 1378 1.1 christos SLT_MODULE, 1379 1.1 christos SLT_FUNCTION, 1380 1.1 christos SLT_ENTRY, 1381 1.1 christos SLT_BEGIN, 1382 1.1 christos SLT_END, 1383 1.1 christos SLT_WITH, 1384 1.1 christos SLT_EXIT, 1385 1.1 christos SLT_ASSIST, 1386 1.1 christos SLT_MARKER, 1387 1.1 christos SLT_CLASS_SCOPE, 1388 1.1 christos SLT_INLN, 1389 1.1 christos SLT_NORMAL_OFFSET, 1390 1.1 christos }; 1391 1.1 christos 1392 1.1 christos /* A normal source line entry. Simply provides a mapping of a source 1393 1.1 christos line number to a code address. 1394 1.1 christos 1395 1.1 christos SLTDESC will always be SLT_NORMAL or SLT_EXIT. */ 1396 1.1 christos 1397 1.1 christos struct slt_normal 1398 1.1 christos { 1399 1.1 christos unsigned int sltdesc: 4; 1400 1.1 christos unsigned int line: 28; 1401 1.1 christos CORE_ADDR address; 1402 1.1 christos }; 1403 1.1 christos 1404 1.1 christos struct slt_normal_off 1405 1.1 christos { 1406 1.1 christos unsigned int sltdesc: 4; 1407 1.1 christos unsigned int offset: 6; 1408 1.1 christos unsigned int line: 22; 1409 1.1 christos CORE_ADDR address; 1410 1.1 christos }; 1411 1.1 christos 1412 1.1 christos /* A special source line entry. Provides a mapping of a declaration 1413 1.1 christos to a line number. These entries point back into the DNTT which 1414 1.1 christos references them. */ 1415 1.1 christos 1416 1.1 christos struct slt_special 1417 1.1 christos { 1418 1.1 christos unsigned int sltdesc: 4; 1419 1.1 christos unsigned int line: 28; 1420 1.1 christos dnttpointer backptr; 1421 1.1 christos }; 1422 1.1 christos 1423 1.1 christos /* Used to describe nesting. 1424 1.1 christos 1425 1.1 christos For nested languages, an slt_assist entry must follow each SLT_FUNC 1426 1.1 christos entry in the SLT. The address field will point forward to the 1427 1.1 christos first slt_normal entry within the function's scope. */ 1428 1.1 christos 1429 1.1 christos struct slt_assist 1430 1.1 christos { 1431 1.1 christos unsigned int sltdesc: 4; 1432 1.1 christos unsigned int unused: 28; 1433 1.1 christos sltpointer address; 1434 1.1 christos }; 1435 1.1 christos 1436 1.1 christos struct slt_generic 1437 1.1 christos { 1438 1.1 christos unsigned int word[2]; 1439 1.1 christos }; 1440 1.1 christos 1441 1.1 christos union sltentry 1442 1.1 christos { 1443 1.1 christos struct slt_normal snorm; 1444 1.1 christos struct slt_normal_off snormoff; 1445 1.1 christos struct slt_special sspec; 1446 1.1 christos struct slt_assist sasst; 1447 1.1 christos struct slt_generic sgeneric; 1448 1.1 christos }; 1449 1.1 christos 1450 1.1 christos /* $LINES$ declarations 1451 1.1 christos This is the line table used for optimized code, which is only present 1452 1.1 christos in the new $PROGRAM_INFO$ debug space. */ 1453 1.1 christos 1454 1.1 christos #define DST_LN_ESCAPE_FLAG1 15 1455 1.1 christos #define DST_LN_ESCAPE_FLAG2 14 1456 1.1 christos #define DST_LN_CTX_SPEC1 13 1457 1.1 christos #define DST_LN_CTX_SPEC2 12 1458 1.1 christos 1459 1.1 christos /* Escape function codes: */ 1460 1.1 christos 1461 1.1 christos typedef enum 1462 1.1 christos { 1463 1.1 christos dst_ln_pad, /* pad byte */ 1464 1.1 christos dst_ln_escape_1, /* reserved */ 1465 1.1 christos dst_ln_dpc1_dln1, /* 1 byte line delta, 1 byte pc delta */ 1466 1.1 christos dst_ln_dpc2_dln2, /* 2 bytes line delta, 2 bytes pc delta */ 1467 1.1 christos dst_ln_pc4_ln4, /* 4 bytes ABSOLUTE line number, 4 bytes ABSOLUTE pc */ 1468 1.1 christos dst_ln_dpc0_dln1, /* 1 byte line delta, pc delta = 0 */ 1469 1.1 christos dst_ln_ln_off_1, /* statement escape, stmt # = 1 (2nd stmt on line) */ 1470 1.1 christos dst_ln_ln_off, /* statement escape, stmt # = next byte */ 1471 1.1 christos dst_ln_entry, /* entry escape, next byte is entry number */ 1472 1.1 christos dst_ln_exit, /* exit escape */ 1473 1.1 christos dst_ln_stmt_end, /* gap escape, 4 bytes pc delta */ 1474 1.1 christos dst_ln_stmt_cp, /* current stmt is a critical point */ 1475 1.1 christos dst_ln_escape_12, /* reserved */ 1476 1.1 christos dst_ln_escape_13, /* this is an exception site record */ 1477 1.1 christos dst_ln_nxt_byte, /* next byte contains the real escape code */ 1478 1.1 christos dst_ln_end, /* end escape, final entry follows */ 1479 1.1 christos dst_ln_escape1_END_OF_ENUM 1480 1.1 christos } 1481 1.1 christos dst_ln_escape1_t; 1482 1.1 christos 1483 1.1 christos typedef enum 1484 1.1 christos { 1485 1.1 christos dst_ln_ctx_1, /* next byte describes context switch with 5-bit */ 1486 1.1 christos /* index into the image table and 3-bit run length. */ 1487 1.1 christos /* If run length is 0, end with another cxt specifier or ctx_end */ 1488 1.1 christos dst_ln_ctx_2, /* next 2 bytes switch context: 13 bit index, 3 bit run length */ 1489 1.1 christos dst_ln_ctx_4, /* next 4 bytes switch context: 29 bit index, 3 bit run length */ 1490 1.1 christos dst_ln_ctx_end, /* end current context */ 1491 1.1 christos dst_ln_col_run_1, /* next byte is column position of start of next statement, */ 1492 1.1 christos /* following byte is length of statement */ 1493 1.1 christos dst_ln_col_run_2, /* next 2 bytes is column position of start of next statement, */ 1494 1.1 christos /* following 2 bytes is length of statement */ 1495 1.1 christos dst_ln_init_base1, /* next 4 bytes are absolute PC, followed by 1 byte of line number */ 1496 1.1 christos dst_ln_init_base2, /* next 4 bytes are absolute PC, followed by 2 bytes of line number */ 1497 1.1 christos dst_ln_init_base3, /* next 4 bytes are absolute PC, followed by 3 bytes of line number */ 1498 1.1 christos dst_ln_escape2_END_OF_ENUM 1499 1.1 christos } 1500 1.1 christos dst_ln_escape2_t; 1501 1.1 christos 1502 1.1 christos typedef union 1503 1.1 christos { 1504 1.1 christos struct 1505 1.1 christos { 1506 1.1 christos unsigned int pc_delta : 4; /* 4 bit pc delta */ 1507 1.1 christos int ln_delta : 4; /* 4 bit line number delta */ 1508 1.1 christos } 1509 1.1 christos delta; 1510 1.1 christos 1511 1.1 christos struct 1512 1.1 christos { 1513 1.1 christos unsigned int esc_flag : 4; /* alias for pc_delta */ 1514 1.1 christos unsigned int esc_code : 4; /* escape function code (dst_ln_escape1_t, or ...2_t */ 1515 1.1 christos } 1516 1.1 christos esc; 1517 1.1 christos 1518 1.1 christos struct 1519 1.1 christos { 1520 1.1 christos unsigned int esc_flag : 4; /* dst_ln_ctx_spec1, or dst_ln_ctx_spec2 */ 1521 1.1 christos unsigned int run_length : 2; 1522 1.1 christos unsigned int ctx_index : 2; /* ...spec2 contains index; ...spec1, index - 4 */ 1523 1.1 christos } 1524 1.1 christos ctx_spec; 1525 1.1 christos 1526 1.1 christos char sdata; /* signed data byte */ 1527 1.1 christos unsigned char udata; /* unsigned data byte */ 1528 1.1 christos } 1529 1.1 christos dst_ln_entry_t, 1530 1.1 christos * dst_ln_entry_ptr_t; 1531 1.1 christos 1532 1.1 christos /* Warning: although the above union occupies only 1 byte the compiler treats 1533 1.1 christos it as having size 2 (the minimum size of a struct). Therefore a sequence of 1534 1.1 christos dst_ln_entry_t's cannot be described as an array, and walking through such a 1535 1.1 christos sequence requires convoluted code such as 1536 1.1 christos ln_ptr = (dst_ln_entry_ptr_t) (char*) ln_ptr + 1 1537 1.1 christos We regret the inconvenience. */ 1538 1.1 christos 1539 1.1 christos /* Structure for interpreting the byte following a dst_ln_ctx1 entry. */ 1540 1.1 christos typedef struct 1541 1.1 christos { 1542 1.1 christos unsigned int ctx1_index : 5; /* 5 bit index into context table */ 1543 1.1 christos unsigned int ctx1_run_length : 3; /* 3 bit run length */ 1544 1.1 christos } dst_ln_ctx1_t, 1545 1.1 christos *dst_ln_ctx1_ptr_t; 1546 1.1 christos 1547 1.1 christos /* Structure for interpreting the bytes following a dst_ln_ctx2 entry. */ 1548 1.1 christos typedef struct 1549 1.1 christos { 1550 1.1 christos unsigned int ctx2_index : 13; /* 13 bit index into context table */ 1551 1.1 christos unsigned int ctx2_run_length : 3; /* 3 bit run length */ 1552 1.1 christos } dst_ln_ctx2_t, 1553 1.1 christos *dst_ln_ctx2_ptr_t; 1554 1.1 christos 1555 1.1 christos /* Structure for interpreting the bytes following a dst_ln_ctx4 entry. */ 1556 1.1 christos typedef struct 1557 1.1 christos { 1558 1.1 christos unsigned int ctx4_index : 29; /* 29 bit index into context table */ 1559 1.1 christos unsigned int ctx4_run_length : 3; /* 3 bit run length */ 1560 1.1 christos } dst_ln_ctx4_t, 1561 1.1 christos *dst_ln_ctx4_ptr_t; 1562 1.1 christos 1563 1.1 christos 1564 1.1 christos /* PXDB definitions. 1565 1.1 christos 1566 1.1 christos PXDB is a post-processor which takes the executable file 1567 1.1 christos and massages the debug information so that the debugger may 1568 1.1 christos start up and run more efficiently. Some of the tasks 1569 1.1 christos performed by PXDB are: 1570 1.1 christos 1571 1.1 christos o Remove duplicate global type and variable information 1572 1.1 christos from the GNTT, 1573 1.1 christos 1574 1.1 christos o Append the GNTT onto the end of the LNTT and place both 1575 1.1 christos back in the LNTT section, 1576 1.1 christos 1577 1.1 christos o Build quick look-up tables (description follows) for 1578 1.1 christos files, procedures, modules, and paragraphs (for Cobol), 1579 1.1 christos placing these in the GNTT section, 1580 1.1 christos 1581 1.1 christos o Reconstruct the header appearing in the header section 1582 1.1 christos to access this information. 1583 1.1 christos 1584 1.1 christos The "quick look-up" tables are in the $GNTT$ sub-space, in 1585 1.1 christos the following order: 1586 1.1 christos 1587 1.1 christos Procedures -sorted by address 1588 1.1 christos Source files -sorted by address (of the 1589 1.1 christos generated code from routines) 1590 1.1 christos Modules -sorted by address 1591 1.1 christos Classes -<unsorted?> 1592 1.1 christos Address Alias -sorted by index <?> 1593 1.1 christos Object IDs -sorted by object identifier 1594 1.1 christos 1595 1.1 christos Most quick entries have (0-based) indices into the LNTT tables to 1596 1.1 christos the full entries for the item it describes. 1597 1.1 christos 1598 1.1 christos The post-PXDB header is in the $HEADER$ sub-space. Alas, it 1599 1.1 christos occurs in different forms, depending on the optimization level 1600 1.1 christos in the compilation step and whether PXDB was run or not. The 1601 1.1 christos worst part is the forms aren't self-describing, so we'll have 1602 1.1 christos to grovel in the bits to figure out what kind we're looking at 1603 1.1 christos (see hp_get_header in hp-psymtab-read.c). */ 1604 1.1 christos 1605 1.1 christos /* PXDB versions. */ 1606 1.1 christos 1607 1.1 christos #define PXDB_VERSION_CPLUSPLUS 1 1608 1.1 christos #define PXDB_VERSION_7_4 2 1609 1.1 christos #define PXDB_VERSION_CPP_30 3 1610 1.1 christos #define PXDB_VERSION_DDE_3_2A 4 1611 1.1 christos #define PXDB_VERSION_DDE_3_2 5 1612 1.1 christos #define PXDB_VERSION_DDE_4_0 6 1613 1.1 christos 1614 1.1 christos #define PXDB_VERSION_2_1 1 1615 1.1 christos 1616 1.1 christos /* Header version for the case that there is no DOC info 1617 1.1 christos but the executable has been processed by pxdb (the easy 1618 1.1 christos case, from "cc -g"). */ 1619 1.1 christos 1620 1.1 christos typedef struct PXDB_struct 1621 1.1 christos { 1622 1.1 christos int pd_entries; /* # of entries in function look-up table */ 1623 1.1 christos int fd_entries; /* # of entries in file look-up table */ 1624 1.1 christos int md_entries; /* # of entries in module look-up table */ 1625 1.1 christos unsigned int pxdbed : 1; /* 1 => file has been preprocessed */ 1626 1.1 christos unsigned int bighdr : 1; /* 1 => this header contains 'time' word */ 1627 1.1 christos unsigned int sa_header : 1;/* 1 => created by SA version of pxdb */ 1628 1.1 christos /* used for version check in xdb */ 1629 1.1 christos unsigned int inlined: 1; /* one or more functions have been inlined */ 1630 1.1 christos unsigned int spare:12; 1631 1.1 christos short version; /* pxdb header version */ 1632 1.1 christos int globals; /* index into the DNTT where GNTT begins */ 1633 1.1 christos unsigned int time; /* modify time of file before being pxdbed */ 1634 1.1 christos int pg_entries; /* # of entries in label look-up table */ 1635 1.1 christos int functions; /* actual number of functions */ 1636 1.1 christos int files; /* actual number of files */ 1637 1.1 christos int cd_entries; /* # of entries in class look-up table */ 1638 1.1 christos int aa_entries; /* # of entries in addr alias look-up table */ 1639 1.1 christos int oi_entries; /* # of entries in object id look-up table */ 1640 1.1 christos } PXDB_header, *PXDB_header_ptr; 1641 1.1 christos 1642 1.1 christos /* Header version for the case that there is no DOC info and the 1643 1.1 christos executable has NOT been processed by pxdb. */ 1644 1.1 christos 1645 1.1 christos typedef struct XDB_header_struct 1646 1.1 christos { 1647 1.1 christos long gntt_length; 1648 1.1 christos long lntt_length; 1649 1.1 christos long slt_length; 1650 1.1 christos long vt_length; 1651 1.1 christos long xt_length; 1652 1.1 christos } XDB_header; 1653 1.1 christos 1654 1.1 christos /* Header version for the case that there is DOC info and the 1655 1.1 christos executable has been processed by pxdb. */ 1656 1.1 christos 1657 1.1 christos typedef struct DOC_info_PXDB_header_struct 1658 1.1 christos { 1659 1.1 christos unsigned int xdb_header: 1; /* bit set if this is post-3.1 xdb */ 1660 1.1 christos unsigned int doc_header: 1; /* bit set if this is doc-style header */ 1661 1.1 christos unsigned int version: 8; /* version of pxdb see defines 1662 1.1 christos PXDB_VERSION_* in this file. */ 1663 1.1 christos unsigned int reserved_for_flags: 16;/* for future use; -- must be 1664 1.1 christos set to zero. */ 1665 1.1 christos unsigned int has_aux_pd_table: 1; /* $GNTT$ has aux PD table */ 1666 1.1 christos unsigned int has_expr_table: 1; /* space has $EXPR$ */ 1667 1.1 christos unsigned int has_range_table: 1; /* space has $RANGE$ */ 1668 1.1 christos unsigned int has_context_table: 1; /* space has $SRC_CTXT$ */ 1669 1.1 christos unsigned int has_lines_table: 1; /* space contains a $LINES$ 1670 1.1 christos subspace for line tables. */ 1671 1.1 christos unsigned int has_lt_offset_map: 1; /* space contains an lt_offset 1672 1.1 christos subspace for line table mapping. */ 1673 1.1 christos /* The following fields are the same as those in the PXDB_header in $DEBUG$ */ 1674 1.1 christos int pd_entries; /* # of entries in function look-up table */ 1675 1.1 christos int fd_entries; /* # of entries in file look-up table */ 1676 1.1 christos int md_entries; /* # of entries in module look-up table */ 1677 1.1 christos unsigned int pxdbed : 1; /* 1 => file has been preprocessed */ 1678 1.1 christos unsigned int bighdr : 1; /* 1 => this header contains 'time' word */ 1679 1.1 christos unsigned int sa_header : 1;/* 1 => created by SA version of pxdb */ 1680 1.1 christos /* used for version check in xdb */ 1681 1.1 christos unsigned int inlined: 1; /* one or more functions have been inlined */ 1682 1.1 christos unsigned int spare : 28; 1683 1.1 christos int globals; /* index into the DNTT where GNTT begins */ 1684 1.1 christos unsigned int time; /* modify time of file before being pxdbed */ 1685 1.1 christos int pg_entries; /* # of entries in label look-up table */ 1686 1.1 christos int functions; /* actual number of functions */ 1687 1.1 christos int files; /* actual number of files */ 1688 1.1 christos int cd_entries; /* # of entries in class look-up table */ 1689 1.1 christos int aa_entries; /* # of entries in addr alias look-up table */ 1690 1.1 christos int oi_entries; /* # of entries in object id look-up table */ 1691 1.1 christos } DOC_info_PXDB_header; 1692 1.1 christos 1693 1.1 christos /* Header version for the case that there is DOC info and the 1694 1.1 christos executable has NOT been processed by pxdb. */ 1695 1.1 christos 1696 1.1 christos typedef struct DOC_info_header_struct 1697 1.1 christos { 1698 1.1 christos unsigned int xdb_header: 1; /* bit set if this is post-3.1 xdb */ 1699 1.1 christos unsigned int doc_header: 1; /* bit set if this is doc-style header*/ 1700 1.1 christos unsigned int version: 8; /* version of debug/header 1701 1.1 christos format. For 10.0 the value 1702 1.1 christos will be 1. For "Davis" the value is 2. */ 1703 1.1 christos unsigned int reserved_for_flags: 18; /* for future use; -- must be set to zero. */ 1704 1.1 christos unsigned int has_range_table: 1; /* space contains a $RANGE$ subspace for variable ranges. */ 1705 1.1 christos unsigned int has_context_table: 1; /* space contains a $CTXT$ subspace for context/inline table. */ 1706 1.1 christos unsigned int has_lines_table: 1; /* space contains a $LINES$ subspace for line tables. */ 1707 1.1 christos unsigned int has_lt_offset_map: 1; /* space contains an lt_offset subspace for line table mapping. */ 1708 1.1 christos 1709 1.1 christos long gntt_length; /* same as old header */ 1710 1.1 christos long lntt_length; /* same as old header */ 1711 1.1 christos long slt_length; /* same as old header */ 1712 1.1 christos long vt_length; /* same as old header */ 1713 1.1 christos long xt_length; /* same as old header */ 1714 1.1 christos long ctxt_length; /* present only if version >= 2 */ 1715 1.1 christos long range_length; /* present only if version >= 2 */ 1716 1.1 christos long expr_length; /* present only if version >= 2 */ 1717 1.1 christos 1718 1.1 christos } DOC_info_header; 1719 1.1 christos 1720 1.1 christos typedef union GenericDebugHeader_union 1721 1.1 christos { 1722 1.1 christos PXDB_header no_doc; 1723 1.1 christos DOC_info_PXDB_header doc; 1724 1.1 christos XDB_header no_pxdb_no_doc; 1725 1.1 christos DOC_info_header no_pxdb_doc; 1726 1.1 christos } GenericDebugHeader; 1727 1.1 christos 1728 1.1 christos 1729 1.1 christos /* Procedure Descriptor: 1730 1.1 christos An element of the procedure quick look-up table. */ 1731 1.1 christos 1732 1.1 christos typedef struct quick_procedure 1733 1.1 christos { 1734 1.1 christos long isym; /* 0-based index of first symbol 1735 1.1 christos for procedure in $LNTT$, 1736 1.1 christos i.e. the procedure itself. */ 1737 1.1 christos CORE_ADDR adrStart; /* memory adr of start of proc */ 1738 1.1 christos CORE_ADDR adrEnd; /* memory adr of end of proc */ 1739 1.1 christos char *sbAlias; /* alias name of procedure */ 1740 1.1 christos char *sbProc; /* real name of procedure */ 1741 1.1 christos CORE_ADDR adrBp; /* address of entry breakpoint */ 1742 1.1 christos CORE_ADDR adrExitBp; /* address of exit breakpoint */ 1743 1.1 christos int icd; /* member of this class (index) */ 1744 1.1 christos unsigned int ipd; /* index of template for this */ 1745 1.1 christos /* function (index) */ 1746 1.1 christos unsigned int unused: 5; 1747 1.1 christos unsigned int no_lt_offset: 1;/* no entry in lt_offset table */ 1748 1.1 christos unsigned int fTemplate: 1; /* function template */ 1749 1.1 christos unsigned int fExpansion: 1; /* function expansion */ 1750 1.1 christos unsigned int linked : 1; /* linked with other expansions */ 1751 1.1 christos unsigned int duplicate: 1; /* clone of another procedure */ 1752 1.1 christos unsigned int overloaded:1; /* overloaded function */ 1753 1.1 christos unsigned int member: 1; /* class member function */ 1754 1.1 christos unsigned int constructor:1; /* constructor function */ 1755 1.1 christos unsigned int destructor:1; /* destructor function */ 1756 1.1 christos unsigned int Static: 1; /* static function */ 1757 1.1 christos unsigned int Virtual: 1; /* virtual function */ 1758 1.1 christos unsigned int constant: 1; /* constant function */ 1759 1.1 christos unsigned int pure: 1; /* pure (virtual) function */ 1760 1.1 christos unsigned int language: 4; /* procedure's language */ 1761 1.1 christos unsigned int inlined: 1; /* function has been inlined */ 1762 1.1 christos unsigned int Operator: 1; /* operator function */ 1763 1.1 christos unsigned int stub: 1; /* bodyless function */ 1764 1.1 christos unsigned int optimize: 2; /* optimization level */ 1765 1.1 christos unsigned int level: 5; /* nesting level (top=0) */ 1766 1.1 christos } quick_procedure_entry, *quick_procedure_entry_ptr; 1767 1.1 christos 1768 1.1 christos /* Source File Descriptor: 1769 1.1 christos An element of the source file quick look-up table. */ 1770 1.1 christos 1771 1.1 christos typedef struct quick_source 1772 1.1 christos { 1773 1.1 christos long isym; /* 0-based index in $LNTT$ of 1774 1.1 christos first symbol for this file. */ 1775 1.1 christos CORE_ADDR adrStart; /* mem adr of start of file's code */ 1776 1.1 christos CORE_ADDR adrEnd; /* mem adr of end of file's code */ 1777 1.1 christos char *sbFile; /* name of source file */ 1778 1.1 christos unsigned int fHasDecl: 1; /* do we have a .d file? */ 1779 1.1 christos unsigned int fWarned: 1; /* have warned about age problems? */ 1780 1.1 christos unsigned int fSrcfile: 1; /* 0 => include 1=> source */ 1781 1.1 christos unsigned short ilnMac; /* lines in file (0 if don't know) */ 1782 1.1 christos int ipd; /* 0-based index of first procedure 1783 1.1 christos in this file, in the quick 1784 1.1 christos look-up table of procedures. */ 1785 1.1 christos unsigned int *rgLn; /* line pointer array, if any */ 1786 1.1 christos } quick_file_entry, *quick_file_entry_ptr; 1787 1.1 christos 1788 1.1 christos /* Module Descriptor: 1789 1.1 christos An element of the module quick reference table. */ 1790 1.1 christos 1791 1.1 christos typedef struct quick_module 1792 1.1 christos { 1793 1.1 christos long isym; /* 0-based index of first 1794 1.1 christos symbol for module. */ 1795 1.1 christos CORE_ADDR adrStart; /* adr of start of mod. */ 1796 1.1 christos CORE_ADDR adrEnd; /* adr of end of mod. */ 1797 1.1 christos char *sbAlias; /* alias name of module */ 1798 1.1 christos char *sbMod; /* real name of module */ 1799 1.1 christos unsigned int imports: 1; /* module have any imports? */ 1800 1.1 christos unsigned int vars_in_front: 1; /* module globals in front? */ 1801 1.1 christos unsigned int vars_in_gaps: 1; /* module globals in gaps? */ 1802 1.1 christos unsigned int language: 4; /* type of language */ 1803 1.1 christos unsigned int unused : 25; 1804 1.1 christos unsigned int unused2; /* space for future stuff */ 1805 1.1 christos } quick_module_entry, *quick_module_entry_ptr; 1806 1.1 christos 1807 1.1 christos /* Auxiliary Procedure Descriptor: 1808 1.1 christos An element of the auxiliary procedure quick look-up table. */ 1809 1.1 christos 1810 1.1 christos typedef struct quick_aux_procedure 1811 1.1 christos { 1812 1.1 christos long isym_inln; /* start on inline list for proc */ 1813 1.1 christos long spare; 1814 1.1 christos } quick_aux_procedure_entry, *quick_aux_procedure_entry_ptr; 1815 1.1 christos 1816 1.1 christos /* Paragraph Descriptor: 1817 1.1 christos An element of the paragraph quick look-up table. */ 1818 1.1 christos 1819 1.1 christos typedef struct quick_paragraph 1820 1.1 christos { 1821 1.1 christos long isym; /* first symbol for label (index) */ 1822 1.1 christos CORE_ADDR adrStart; /* memory adr of start of label */ 1823 1.1 christos CORE_ADDR adrEnd; /* memory adr of end of label */ 1824 1.1 christos char *sbLab; /* name of label */ 1825 1.1 christos unsigned int inst; /* Used in xdb to store inst @ bp */ 1826 1.1 christos unsigned int sect: 1; /* true = section, false = parag. */ 1827 1.1 christos unsigned int unused: 31; /* future use */ 1828 1.1 christos } quick_paragraph_entry, *quick_paragraph_entry_ptr; 1829 1.1 christos 1830 1.1 christos /* Class Descriptor: 1831 1.1 christos An element of the class quick look-up table. */ 1832 1.1 christos 1833 1.1 christos typedef struct quick_class 1834 1.1 christos { 1835 1.1 christos char *sbClass; /* name of class */ 1836 1.1 christos long isym; /* class symbol (tag) */ 1837 1.1 christos unsigned int type : 2; /* 0=class, 1=union, 2=struct */ 1838 1.1 christos unsigned int fTemplate : 1;/* class template */ 1839 1.1 christos unsigned int expansion : 1;/* template expansion */ 1840 1.1 christos unsigned int unused :28; 1841 1.1 christos sltpointer lowscope; /* beginning of defined scope */ 1842 1.1 christos sltpointer hiscope; /* end of defined scope */ 1843 1.1 christos } quick_class_entry, *quick_class_entry_ptr; 1844 1.1 christos 1845 1.1 christos /* Address Alias Entry 1846 1.1 christos An element of the address alias quick look-up table. */ 1847 1.1 christos 1848 1.1 christos typedef struct quick_alias 1849 1.1 christos { 1850 1.1 christos CORE_ADDR low; 1851 1.1 christos CORE_ADDR high; 1852 1.1 christos int index; 1853 1.1 christos unsigned int unused : 31; 1854 1.1 christos unsigned int alternate : 1; /* alternate unnamed aliases? */ 1855 1.1 christos } quick_alias_entry, *quick_alias_entry_ptr; 1856 1.1 christos 1857 1.1 christos /* Object Identification Entry 1858 1.1 christos An element of the object identification quick look-up table. */ 1859 1.1 christos 1860 1.1 christos typedef struct quick_obj_ID 1861 1.1 christos { 1862 1.1 christos CORE_ADDR obj_ident; /* class identifier */ 1863 1.1 christos long isym; /* class symbol */ 1864 1.1 christos long offset; /* offset to object start */ 1865 1.1 christos } quick_obj_ID_entry, *quick_obj_ID_entry_ptr; 1866 1.1 christos 1867 1.1 christos #endif /* HP_SYMTAB_INCLUDED */ 1868