1 1.1 christos /* Support routines for decoding "stabs" debugging information format. 2 1.1 christos 3 1.11 christos Copyright (C) 1986-2024 Free Software Foundation, Inc. 4 1.1 christos 5 1.1 christos This file is part of GDB. 6 1.1 christos 7 1.1 christos This program is free software; you can redistribute it and/or modify 8 1.1 christos it under the terms of the GNU General Public License as published by 9 1.1 christos the Free Software Foundation; either version 3 of the License, or 10 1.1 christos (at your option) any later version. 11 1.1 christos 12 1.1 christos This program is distributed in the hope that it will be useful, 13 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of 14 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 1.1 christos GNU General Public License for more details. 16 1.1 christos 17 1.1 christos You should have received a copy of the GNU General Public License 18 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 1.1 christos 20 1.1 christos /* Support routines for reading and decoding debugging information in 21 1.7 christos the "stabs" format. This format is used by some systems that use 22 1.7 christos COFF or ELF where the stabs data is placed in a special section (as 23 1.7 christos well as with many old systems that used the a.out object file 24 1.7 christos format). Avoid placing any object file format specific code in 25 1.7 christos this file. */ 26 1.1 christos 27 1.1 christos #include "bfd.h" 28 1.11 christos #include "event-top.h" 29 1.10 christos #include "gdbsupport/gdb_obstack.h" 30 1.1 christos #include "symtab.h" 31 1.1 christos #include "gdbtypes.h" 32 1.1 christos #include "expression.h" 33 1.1 christos #include "symfile.h" 34 1.1 christos #include "objfiles.h" 35 1.11 christos #include "aout/stab_gnu.h" 36 1.12 christos #include "psymtab.h" 37 1.1 christos #include "libaout.h" 38 1.1 christos #include "aout/aout64.h" 39 1.1 christos #include "gdb-stabs.h" 40 1.8 christos #include "buildsym-legacy.h" 41 1.1 christos #include "complaints.h" 42 1.1 christos #include "demangle.h" 43 1.1 christos #include "gdb-demangle.h" 44 1.1 christos #include "language.h" 45 1.8 christos #include "target-float.h" 46 1.9 christos #include "c-lang.h" 47 1.1 christos #include "cp-abi.h" 48 1.1 christos #include "cp-support.h" 49 1.1 christos #include <ctype.h> 50 1.12 christos #include "block.h" 51 1.12 christos #include "filenames.h" 52 1.1 christos 53 1.8 christos #include "stabsread.h" 54 1.1 christos 55 1.8 christos /* See stabsread.h for these globals. */ 56 1.8 christos unsigned int symnum; 57 1.8 christos const char *(*next_symbol_text_func) (struct objfile *); 58 1.8 christos unsigned char processing_gcc_compilation; 59 1.8 christos int within_function; 60 1.8 christos struct symbol *global_sym_chain[HASHSIZE]; 61 1.8 christos struct pending_stabs *global_stabs; 62 1.8 christos int previous_stab_code; 63 1.8 christos int *this_object_header_files; 64 1.8 christos int n_this_object_header_files; 65 1.8 christos int n_allocated_this_object_header_files; 66 1.1 christos 67 1.12 christos /* See stabsread.h. */ 68 1.12 christos 69 1.12 christos const registry<objfile>::key<dbx_symfile_info> dbx_objfile_data_key; 70 1.12 christos 71 1.12 christos dbx_symfile_info::~dbx_symfile_info () 72 1.12 christos { 73 1.12 christos if (header_files != NULL) 74 1.12 christos { 75 1.12 christos int i = n_header_files; 76 1.12 christos struct header_file *hfiles = header_files; 77 1.12 christos 78 1.12 christos while (--i >= 0) 79 1.12 christos { 80 1.12 christos xfree (hfiles[i].name); 81 1.12 christos xfree (hfiles[i].vector); 82 1.12 christos } 83 1.12 christos xfree (hfiles); 84 1.12 christos } 85 1.12 christos } 86 1.12 christos 87 1.10 christos struct stabs_nextfield 88 1.5 christos { 89 1.10 christos struct stabs_nextfield *next; 90 1.5 christos 91 1.5 christos struct field field; 92 1.5 christos }; 93 1.5 christos 94 1.5 christos struct next_fnfieldlist 95 1.5 christos { 96 1.5 christos struct next_fnfieldlist *next; 97 1.5 christos struct fn_fieldlist fn_fieldlist; 98 1.5 christos }; 99 1.5 christos 100 1.1 christos /* The routines that read and process a complete stabs for a C struct or 101 1.1 christos C++ class pass lists of data member fields and lists of member function 102 1.1 christos fields in an instance of a field_info structure, as defined below. 103 1.1 christos This is part of some reorganization of low level C++ support and is 104 1.1 christos expected to eventually go away... (FIXME) */ 105 1.1 christos 106 1.9 christos struct stab_field_info 107 1.1 christos { 108 1.10 christos struct stabs_nextfield *list = nullptr; 109 1.9 christos struct next_fnfieldlist *fnlist = nullptr; 110 1.9 christos 111 1.9 christos auto_obstack obstack; 112 1.1 christos }; 113 1.1 christos 114 1.1 christos static void 115 1.9 christos read_one_struct_field (struct stab_field_info *, const char **, const char *, 116 1.1 christos struct type *, struct objfile *); 117 1.1 christos 118 1.1 christos static struct type *dbx_alloc_type (int[2], struct objfile *); 119 1.1 christos 120 1.7 christos static long read_huge_number (const char **, int, int *, int); 121 1.1 christos 122 1.7 christos static struct type *error_type (const char **, struct objfile *); 123 1.1 christos 124 1.1 christos static void 125 1.1 christos patch_block_stabs (struct pending *, struct pending_stabs *, 126 1.1 christos struct objfile *); 127 1.1 christos 128 1.7 christos static int read_type_number (const char **, int *); 129 1.1 christos 130 1.7 christos static struct type *read_type (const char **, struct objfile *); 131 1.1 christos 132 1.7 christos static struct type *read_range_type (const char **, int[2], 133 1.7 christos int, struct objfile *); 134 1.1 christos 135 1.7 christos static struct type *read_sun_builtin_type (const char **, 136 1.7 christos int[2], struct objfile *); 137 1.1 christos 138 1.7 christos static struct type *read_sun_floating_type (const char **, int[2], 139 1.1 christos struct objfile *); 140 1.1 christos 141 1.7 christos static struct type *read_enum_type (const char **, struct type *, struct objfile *); 142 1.1 christos 143 1.1 christos static struct type *rs6000_builtin_type (int, struct objfile *); 144 1.1 christos 145 1.1 christos static int 146 1.9 christos read_member_functions (struct stab_field_info *, const char **, struct type *, 147 1.1 christos struct objfile *); 148 1.1 christos 149 1.1 christos static int 150 1.9 christos read_struct_fields (struct stab_field_info *, const char **, struct type *, 151 1.1 christos struct objfile *); 152 1.1 christos 153 1.1 christos static int 154 1.9 christos read_baseclasses (struct stab_field_info *, const char **, struct type *, 155 1.1 christos struct objfile *); 156 1.1 christos 157 1.1 christos static int 158 1.9 christos read_tilde_fields (struct stab_field_info *, const char **, struct type *, 159 1.1 christos struct objfile *); 160 1.1 christos 161 1.9 christos static int attach_fn_fields_to_type (struct stab_field_info *, struct type *); 162 1.1 christos 163 1.9 christos static int attach_fields_to_type (struct stab_field_info *, struct type *, 164 1.1 christos struct objfile *); 165 1.1 christos 166 1.7 christos static struct type *read_struct_type (const char **, struct type *, 167 1.10 christos enum type_code, 168 1.1 christos struct objfile *); 169 1.1 christos 170 1.7 christos static struct type *read_array_type (const char **, struct type *, 171 1.1 christos struct objfile *); 172 1.1 christos 173 1.7 christos static struct field *read_args (const char **, int, struct objfile *, 174 1.7 christos int *, int *); 175 1.1 christos 176 1.1 christos static void add_undefined_type (struct type *, int[2]); 177 1.1 christos 178 1.1 christos static int 179 1.9 christos read_cpp_abbrev (struct stab_field_info *, const char **, struct type *, 180 1.1 christos struct objfile *); 181 1.1 christos 182 1.7 christos static const char *find_name_end (const char *name); 183 1.1 christos 184 1.7 christos static int process_reference (const char **string); 185 1.1 christos 186 1.1 christos void stabsread_clear_cache (void); 187 1.1 christos 188 1.1 christos static const char vptr_name[] = "_vptr$"; 189 1.1 christos static const char vb_name[] = "_vb$"; 190 1.1 christos 191 1.12 christos void 192 1.12 christos unknown_symtype_complaint (const char *arg1) 193 1.12 christos { 194 1.12 christos complaint (_("unknown symbol type %s"), arg1); 195 1.12 christos } 196 1.12 christos 197 1.12 christos void 198 1.12 christos lbrac_mismatch_complaint (int arg1) 199 1.12 christos { 200 1.12 christos complaint (_("N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d"), arg1); 201 1.12 christos } 202 1.12 christos 203 1.12 christos void 204 1.12 christos repeated_header_complaint (const char *arg1, int arg2) 205 1.12 christos { 206 1.12 christos complaint (_("\"repeated\" header file %s not " 207 1.12 christos "previously seen, at symtab pos %d"), 208 1.12 christos arg1, arg2); 209 1.12 christos } 210 1.12 christos 211 1.1 christos static void 212 1.1 christos invalid_cpp_abbrev_complaint (const char *arg1) 213 1.1 christos { 214 1.8 christos complaint (_("invalid C++ abbreviation `%s'"), arg1); 215 1.1 christos } 216 1.1 christos 217 1.1 christos static void 218 1.1 christos reg_value_complaint (int regnum, int num_regs, const char *sym) 219 1.1 christos { 220 1.8 christos complaint (_("bad register number %d (max %d) in symbol %s"), 221 1.10 christos regnum, num_regs - 1, sym); 222 1.1 christos } 223 1.1 christos 224 1.1 christos static void 225 1.1 christos stabs_general_complaint (const char *arg1) 226 1.1 christos { 227 1.8 christos complaint ("%s", arg1); 228 1.1 christos } 229 1.1 christos 230 1.12 christos static void 231 1.12 christos function_outside_compilation_unit_complaint (const char *arg1) 232 1.12 christos { 233 1.12 christos complaint (_("function `%s' appears to be defined " 234 1.12 christos "outside of all compilation units"), 235 1.12 christos arg1); 236 1.12 christos } 237 1.12 christos 238 1.1 christos /* Make a list of forward references which haven't been defined. */ 239 1.1 christos 240 1.1 christos static struct type **undef_types; 241 1.1 christos static int undef_types_allocated; 242 1.1 christos static int undef_types_length; 243 1.1 christos static struct symbol *current_symbol = NULL; 244 1.1 christos 245 1.1 christos /* Make a list of nameless types that are undefined. 246 1.1 christos This happens when another type is referenced by its number 247 1.1 christos before this type is actually defined. For instance "t(0,1)=k(0,2)" 248 1.1 christos and type (0,2) is defined only later. */ 249 1.1 christos 250 1.1 christos struct nat 251 1.1 christos { 252 1.1 christos int typenums[2]; 253 1.1 christos struct type *type; 254 1.1 christos }; 255 1.1 christos static struct nat *noname_undefs; 256 1.1 christos static int noname_undefs_allocated; 257 1.1 christos static int noname_undefs_length; 258 1.1 christos 259 1.1 christos /* Check for and handle cretinous stabs symbol name continuation! */ 260 1.1 christos #define STABS_CONTINUE(pp,objfile) \ 261 1.1 christos do { \ 262 1.1 christos if (**(pp) == '\\' || (**(pp) == '?' && (*(pp))[1] == '\0')) \ 263 1.1 christos *(pp) = next_symbol_text (objfile); \ 264 1.1 christos } while (0) 265 1.1 christos 266 1.1 christos /* Vector of types defined so far, indexed by their type numbers. 267 1.1 christos (In newer sun systems, dbx uses a pair of numbers in parens, 268 1.1 christos as in "(SUBFILENUM,NUMWITHINSUBFILE)". 269 1.1 christos Then these numbers must be translated through the type_translations 270 1.1 christos hash table to get the index into the type vector.) */ 271 1.1 christos 272 1.1 christos static struct type **type_vector; 273 1.1 christos 274 1.1 christos /* Number of elements allocated for type_vector currently. */ 275 1.1 christos 276 1.1 christos static int type_vector_length; 277 1.1 christos 278 1.1 christos /* Initial size of type vector. Is realloc'd larger if needed, and 279 1.1 christos realloc'd down to the size actually used, when completed. */ 280 1.1 christos 281 1.1 christos #define INITIAL_TYPE_VECTOR_LENGTH 160 282 1.1 christos 283 1.1 christos 285 1.1 christos /* Look up a dbx type-number pair. Return the address of the slot 286 1.1 christos where the type for that number-pair is stored. 287 1.1 christos The number-pair is in TYPENUMS. 288 1.1 christos 289 1.1 christos This can be used for finding the type associated with that pair 290 1.1 christos or for associating a new type with the pair. */ 291 1.1 christos 292 1.1 christos static struct type ** 293 1.1 christos dbx_lookup_type (int typenums[2], struct objfile *objfile) 294 1.1 christos { 295 1.1 christos int filenum = typenums[0]; 296 1.1 christos int index = typenums[1]; 297 1.1 christos unsigned old_len; 298 1.1 christos int real_filenum; 299 1.1 christos struct header_file *f; 300 1.1 christos int f_orig_length; 301 1.1 christos 302 1.1 christos if (filenum == -1) /* -1,-1 is for temporary types. */ 303 1.1 christos return 0; 304 1.1 christos 305 1.1 christos if (filenum < 0 || filenum >= n_this_object_header_files) 306 1.8 christos { 307 1.1 christos complaint (_("Invalid symbol data: type number " 308 1.1 christos "(%d,%d) out of range at symtab pos %d."), 309 1.1 christos filenum, index, symnum); 310 1.1 christos goto error_return; 311 1.1 christos } 312 1.1 christos 313 1.1 christos if (filenum == 0) 314 1.1 christos { 315 1.1 christos if (index < 0) 316 1.1 christos { 317 1.1 christos /* Caller wants address of address of type. We think 318 1.1 christos that negative (rs6k builtin) types will never appear as 319 1.1 christos "lvalues", (nor should they), so we stuff the real type 320 1.1 christos pointer into a temp, and return its address. If referenced, 321 1.1 christos this will do the right thing. */ 322 1.1 christos static struct type *temp_type; 323 1.1 christos 324 1.1 christos temp_type = rs6000_builtin_type (index, objfile); 325 1.1 christos return &temp_type; 326 1.1 christos } 327 1.1 christos 328 1.10 christos /* Type is defined outside of header files. 329 1.1 christos Find it in this object file's type vector. */ 330 1.1 christos if (index >= type_vector_length) 331 1.1 christos { 332 1.1 christos old_len = type_vector_length; 333 1.1 christos if (old_len == 0) 334 1.1 christos { 335 1.6 christos type_vector_length = INITIAL_TYPE_VECTOR_LENGTH; 336 1.1 christos type_vector = XNEWVEC (struct type *, type_vector_length); 337 1.1 christos } 338 1.1 christos while (index >= type_vector_length) 339 1.1 christos { 340 1.1 christos type_vector_length *= 2; 341 1.1 christos } 342 1.1 christos type_vector = (struct type **) 343 1.1 christos xrealloc ((char *) type_vector, 344 1.1 christos (type_vector_length * sizeof (struct type *))); 345 1.1 christos memset (&type_vector[old_len], 0, 346 1.1 christos (type_vector_length - old_len) * sizeof (struct type *)); 347 1.1 christos } 348 1.1 christos return (&type_vector[index]); 349 1.1 christos } 350 1.1 christos else 351 1.1 christos { 352 1.1 christos real_filenum = this_object_header_files[filenum]; 353 1.1 christos 354 1.1 christos if (real_filenum >= N_HEADER_FILES (objfile)) 355 1.1 christos { 356 1.1 christos static struct type *temp_type; 357 1.1 christos 358 1.1 christos warning (_("GDB internal error: bad real_filenum")); 359 1.1 christos 360 1.11 christos error_return: 361 1.1 christos temp_type = builtin_type (objfile)->builtin_error; 362 1.1 christos return &temp_type; 363 1.1 christos } 364 1.1 christos 365 1.1 christos f = HEADER_FILES (objfile) + real_filenum; 366 1.1 christos 367 1.1 christos f_orig_length = f->length; 368 1.1 christos if (index >= f_orig_length) 369 1.1 christos { 370 1.1 christos while (index >= f->length) 371 1.1 christos { 372 1.1 christos f->length *= 2; 373 1.1 christos } 374 1.1 christos f->vector = (struct type **) 375 1.1 christos xrealloc ((char *) f->vector, f->length * sizeof (struct type *)); 376 1.1 christos memset (&f->vector[f_orig_length], 0, 377 1.1 christos (f->length - f_orig_length) * sizeof (struct type *)); 378 1.1 christos } 379 1.1 christos return (&f->vector[index]); 380 1.1 christos } 381 1.1 christos } 382 1.1 christos 383 1.1 christos /* Make sure there is a type allocated for type numbers TYPENUMS 384 1.1 christos and return the type object. 385 1.1 christos This can create an empty (zeroed) type object. 386 1.1 christos TYPENUMS may be (-1, -1) to return a new type object that is not 387 1.1 christos put into the type vector, and so may not be referred to by number. */ 388 1.1 christos 389 1.1 christos static struct type * 390 1.1 christos dbx_alloc_type (int typenums[2], struct objfile *objfile) 391 1.1 christos { 392 1.1 christos struct type **type_addr; 393 1.1 christos 394 1.1 christos if (typenums[0] == -1) 395 1.11 christos { 396 1.11 christos return type_allocator (objfile, 397 1.1 christos get_current_subfile ()->language).new_type (); 398 1.1 christos } 399 1.1 christos 400 1.1 christos type_addr = dbx_lookup_type (typenums, objfile); 401 1.1 christos 402 1.1 christos /* If we are referring to a type not known at all yet, 403 1.1 christos allocate an empty type for it. 404 1.1 christos We will fill it in later if we find out how. */ 405 1.1 christos if (*type_addr == 0) 406 1.11 christos { 407 1.11 christos *type_addr = type_allocator (objfile, 408 1.1 christos get_current_subfile ()->language).new_type (); 409 1.1 christos } 410 1.1 christos 411 1.1 christos return (*type_addr); 412 1.1 christos } 413 1.7 christos 414 1.7 christos /* Allocate a floating-point type of size BITS. */ 415 1.7 christos 416 1.7 christos static struct type * 417 1.7 christos dbx_init_float_type (struct objfile *objfile, int bits) 418 1.9 christos { 419 1.7 christos struct gdbarch *gdbarch = objfile->arch (); 420 1.7 christos const struct floatformat **format; 421 1.7 christos struct type *type; 422 1.7 christos 423 1.11 christos format = gdbarch_floatformat_for_type (gdbarch, NULL, bits); 424 1.7 christos type_allocator alloc (objfile, get_current_subfile ()->language); 425 1.11 christos if (format) 426 1.7 christos type = init_float_type (alloc, bits, NULL, format); 427 1.11 christos else 428 1.7 christos type = alloc.new_type (TYPE_CODE_ERROR, bits, NULL); 429 1.7 christos 430 1.7 christos return type; 431 1.7 christos } 432 1.1 christos 433 1.1 christos /* for all the stabs in a given stab vector, build appropriate types 434 1.1 christos and fix their symbols in given symbol vector. */ 435 1.1 christos 436 1.1 christos static void 437 1.1 christos patch_block_stabs (struct pending *symbols, struct pending_stabs *stabs, 438 1.1 christos struct objfile *objfile) 439 1.1 christos { 440 1.1 christos int ii; 441 1.7 christos char *name; 442 1.1 christos const char *pp; 443 1.1 christos struct symbol *sym; 444 1.1 christos 445 1.1 christos if (stabs) 446 1.1 christos { 447 1.10 christos /* for all the stab entries, find their corresponding symbols and 448 1.1 christos patch their types! */ 449 1.1 christos 450 1.1 christos for (ii = 0; ii < stabs->count; ++ii) 451 1.1 christos { 452 1.1 christos name = stabs->stab[ii]; 453 1.1 christos pp = (char *) strchr (name, ':'); 454 1.1 christos gdb_assert (pp); /* Must find a ':' or game's over. */ 455 1.1 christos while (pp[1] == ':') 456 1.1 christos { 457 1.1 christos pp += 2; 458 1.1 christos pp = (char *) strchr (pp, ':'); 459 1.1 christos } 460 1.1 christos sym = find_symbol_in_list (symbols, name, pp - name); 461 1.1 christos if (!sym) 462 1.1 christos { 463 1.10 christos /* FIXME-maybe: it would be nice if we noticed whether 464 1.10 christos the variable was defined *anywhere*, not just whether 465 1.10 christos it is defined in this compilation unit. But neither 466 1.10 christos xlc or GCC seem to need such a definition, and until 467 1.10 christos we do psymtabs (so that the minimal symbols from all 468 1.10 christos compilation units are available now), I'm not sure 469 1.1 christos how to get the information. */ 470 1.1 christos 471 1.10 christos /* On xcoff, if a global is defined and never referenced, 472 1.10 christos ld will remove it from the executable. There is then 473 1.9 christos a N_GSYM stab for it, but no regular (C_EXT) symbol. */ 474 1.10 christos sym = new (&objfile->objfile_obstack) symbol; 475 1.10 christos sym->set_domain (VAR_DOMAIN); 476 1.9 christos sym->set_aclass_index (LOC_OPTIMIZED_OUT); 477 1.9 christos sym->set_linkage_name 478 1.1 christos (obstack_strndup (&objfile->objfile_obstack, name, pp - name)); 479 1.1 christos pp += 2; 480 1.1 christos if (*(pp - 1) == 'F' || *(pp - 1) == 'f') 481 1.1 christos { 482 1.1 christos /* I don't think the linker does this with functions, 483 1.1 christos so as far as I know this is never executed. 484 1.10 christos But it doesn't hurt to check. */ 485 1.10 christos sym->set_type 486 1.1 christos (lookup_function_type (read_type (&pp, objfile))); 487 1.1 christos } 488 1.1 christos else 489 1.10 christos { 490 1.1 christos sym->set_type (read_type (&pp, objfile)); 491 1.8 christos } 492 1.1 christos add_symbol_to_list (sym, get_global_symbols ()); 493 1.1 christos } 494 1.1 christos else 495 1.1 christos { 496 1.1 christos pp += 2; 497 1.1 christos if (*(pp - 1) == 'F' || *(pp - 1) == 'f') 498 1.10 christos { 499 1.10 christos sym->set_type 500 1.1 christos (lookup_function_type (read_type (&pp, objfile))); 501 1.1 christos } 502 1.1 christos else 503 1.10 christos { 504 1.1 christos sym->set_type (read_type (&pp, objfile)); 505 1.1 christos } 506 1.1 christos } 507 1.1 christos } 508 1.1 christos } 509 1.1 christos } 510 1.1 christos 511 1.1 christos 513 1.1 christos /* Read a number by which a type is referred to in dbx data, 514 1.1 christos or perhaps read a pair (FILENUM, TYPENUM) in parentheses. 515 1.1 christos Just a single number N is equivalent to (0,N). 516 1.1 christos Return the two numbers by storing them in the vector TYPENUMS. 517 1.1 christos TYPENUMS will then be used as an argument to dbx_lookup_type. 518 1.1 christos 519 1.1 christos Returns 0 for success, -1 for error. */ 520 1.7 christos 521 1.1 christos static int 522 1.1 christos read_type_number (const char **pp, int *typenums) 523 1.1 christos { 524 1.1 christos int nbits; 525 1.1 christos 526 1.1 christos if (**pp == '(') 527 1.1 christos { 528 1.1 christos (*pp)++; 529 1.1 christos typenums[0] = read_huge_number (pp, ',', &nbits, 0); 530 1.1 christos if (nbits != 0) 531 1.1 christos return -1; 532 1.1 christos typenums[1] = read_huge_number (pp, ')', &nbits, 0); 533 1.1 christos if (nbits != 0) 534 1.1 christos return -1; 535 1.1 christos } 536 1.1 christos else 537 1.1 christos { 538 1.1 christos typenums[0] = 0; 539 1.1 christos typenums[1] = read_huge_number (pp, 0, &nbits, 0); 540 1.1 christos if (nbits != 0) 541 1.1 christos return -1; 542 1.1 christos } 543 1.1 christos return 0; 544 1.1 christos } 545 1.12 christos 546 1.12 christos 548 1.12 christos /* Free up old header file tables. */ 549 1.12 christos 550 1.12 christos void 551 1.12 christos free_header_files (void) 552 1.12 christos { 553 1.12 christos if (this_object_header_files) 554 1.12 christos { 555 1.12 christos xfree (this_object_header_files); 556 1.12 christos this_object_header_files = NULL; 557 1.12 christos } 558 1.12 christos n_allocated_this_object_header_files = 0; 559 1.12 christos } 560 1.12 christos 561 1.12 christos /* Allocate new header file tables. */ 562 1.12 christos 563 1.12 christos void 564 1.12 christos init_header_files (void) 565 1.12 christos { 566 1.12 christos n_allocated_this_object_header_files = 10; 567 1.12 christos this_object_header_files = XNEWVEC (int, 10); 568 1.12 christos } 569 1.12 christos 570 1.12 christos /* Close off the current usage of PST. 571 1.12 christos Returns PST or NULL if the partial symtab was empty and thrown away. 572 1.12 christos 573 1.12 christos FIXME: List variables and peculiarities of same. */ 574 1.12 christos 575 1.12 christos legacy_psymtab * 576 1.12 christos stabs_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, 577 1.12 christos legacy_psymtab *pst, 578 1.12 christos const char **include_list, int num_includes, 579 1.12 christos int capping_symbol_offset, unrelocated_addr capping_text, 580 1.12 christos legacy_psymtab **dependency_list, 581 1.12 christos int number_dependencies, 582 1.12 christos int textlow_not_set) 583 1.12 christos { 584 1.12 christos int i; 585 1.12 christos struct gdbarch *gdbarch = objfile->arch (); 586 1.12 christos dbx_symfile_info *key = dbx_objfile_data_key. get (objfile); 587 1.12 christos 588 1.12 christos if (capping_symbol_offset != -1) 589 1.12 christos LDSYMLEN (pst) = capping_symbol_offset - LDSYMOFF (pst); 590 1.12 christos pst->set_text_high (capping_text); 591 1.12 christos 592 1.12 christos /* Under Solaris, the N_SO symbols always have a value of 0, 593 1.12 christos instead of the usual address of the .o file. Therefore, 594 1.12 christos we have to do some tricks to fill in texthigh and textlow. 595 1.12 christos The first trick is: if we see a static 596 1.12 christos or global function, and the textlow for the current pst 597 1.12 christos is not set (ie: textlow_not_set), then we use that function's 598 1.12 christos address for the textlow of the pst. */ 599 1.12 christos 600 1.12 christos /* Now, to fill in texthigh, we remember the last function seen 601 1.12 christos in the .o file. Also, there's a hack in 602 1.12 christos bfd/elf.c and gdb/elfread.c to pass the ELF st_size field 603 1.12 christos to here via the misc_info field. Therefore, we can fill in 604 1.12 christos a reliable texthigh by taking the address plus size of the 605 1.12 christos last function in the file. */ 606 1.12 christos 607 1.12 christos if (!pst->text_high_valid && key->ctx.last_function_name 608 1.12 christos && gdbarch_sofun_address_maybe_missing (gdbarch)) 609 1.12 christos { 610 1.12 christos int n; 611 1.12 christos 612 1.12 christos const char *colon = strchr (key->ctx.last_function_name, ':'); 613 1.12 christos if (colon == NULL) 614 1.12 christos n = 0; 615 1.12 christos else 616 1.12 christos n = colon - key->ctx.last_function_name; 617 1.12 christos char *p = (char *) alloca (n + 2); 618 1.12 christos strncpy (p, key->ctx.last_function_name, n); 619 1.12 christos p[n] = 0; 620 1.12 christos 621 1.12 christos bound_minimal_symbol minsym 622 1.12 christos = lookup_minimal_symbol (current_program_space, p, objfile, 623 1.12 christos pst->filename); 624 1.12 christos if (minsym.minsym == NULL) 625 1.12 christos { 626 1.12 christos /* Sun Fortran appends an underscore to the minimal symbol name, 627 1.12 christos try again with an appended underscore if the minimal symbol 628 1.12 christos was not found. */ 629 1.12 christos p[n] = '_'; 630 1.12 christos p[n + 1] = 0; 631 1.12 christos minsym = lookup_minimal_symbol (current_program_space, p, objfile, 632 1.12 christos pst->filename); 633 1.12 christos } 634 1.12 christos 635 1.12 christos if (minsym.minsym) 636 1.12 christos pst->set_text_high 637 1.12 christos (unrelocated_addr (CORE_ADDR (minsym.minsym->unrelocated_address ()) 638 1.12 christos + minsym.minsym->size ())); 639 1.12 christos 640 1.12 christos key->ctx.last_function_name = NULL; 641 1.12 christos } 642 1.12 christos 643 1.12 christos if (!gdbarch_sofun_address_maybe_missing (gdbarch)) 644 1.12 christos ; 645 1.12 christos /* This test will be true if the last .o file is only data. */ 646 1.12 christos else if (textlow_not_set) 647 1.12 christos pst->set_text_low (pst->unrelocated_text_high ()); 648 1.12 christos else 649 1.12 christos { 650 1.12 christos /* If we know our own starting text address, then walk through all other 651 1.12 christos psymtabs for this objfile, and if any didn't know their ending text 652 1.12 christos address, set it to our starting address. Take care to not set our 653 1.12 christos own ending address to our starting address. */ 654 1.12 christos 655 1.12 christos for (partial_symtab *p1 : partial_symtabs->range ()) 656 1.12 christos if (!p1->text_high_valid && p1->text_low_valid && p1 != pst) 657 1.12 christos p1->set_text_high (pst->unrelocated_text_low ()); 658 1.12 christos } 659 1.12 christos 660 1.12 christos /* End of kludge for patching Solaris textlow and texthigh. */ 661 1.12 christos 662 1.12 christos pst->end (); 663 1.12 christos 664 1.12 christos pst->number_of_dependencies = number_dependencies; 665 1.12 christos if (number_dependencies) 666 1.12 christos { 667 1.12 christos pst->dependencies 668 1.12 christos = partial_symtabs->allocate_dependencies (number_dependencies); 669 1.12 christos memcpy (pst->dependencies, dependency_list, 670 1.12 christos number_dependencies * sizeof (legacy_psymtab *)); 671 1.12 christos } 672 1.12 christos else 673 1.12 christos pst->dependencies = 0; 674 1.12 christos 675 1.12 christos for (i = 0; i < num_includes; i++) 676 1.12 christos { 677 1.12 christos legacy_psymtab *subpst = 678 1.12 christos new legacy_psymtab (include_list[i], partial_symtabs, objfile->per_bfd); 679 1.12 christos 680 1.12 christos subpst->read_symtab_private = 681 1.12 christos XOBNEW (&objfile->objfile_obstack, struct symloc); 682 1.12 christos LDSYMOFF (subpst) = 683 1.12 christos LDSYMLEN (subpst) = 0; 684 1.12 christos 685 1.12 christos /* We could save slight bits of space by only making one of these, 686 1.12 christos shared by the entire set of include files. FIXME-someday. */ 687 1.12 christos subpst->dependencies = 688 1.12 christos partial_symtabs->allocate_dependencies (1); 689 1.12 christos subpst->dependencies[0] = pst; 690 1.12 christos subpst->number_of_dependencies = 1; 691 1.12 christos 692 1.12 christos subpst->legacy_read_symtab = pst->legacy_read_symtab; 693 1.12 christos subpst->legacy_expand_psymtab = pst->legacy_expand_psymtab; 694 1.12 christos } 695 1.12 christos 696 1.12 christos if (num_includes == 0 697 1.12 christos && number_dependencies == 0 698 1.12 christos && pst->empty () 699 1.12 christos && key->ctx.has_line_numbers == 0) 700 1.12 christos { 701 1.12 christos /* Throw away this psymtab, it's empty. */ 702 1.12 christos /* Empty psymtabs happen as a result of header files which don't have 703 1.12 christos any symbols in them. There can be a lot of them. But this check 704 1.12 christos is wrong, in that a psymtab with N_SLINE entries but nothing else 705 1.12 christos is not empty, but we don't realize that. Fixing that without slowing 706 1.12 christos things down might be tricky. */ 707 1.12 christos 708 1.12 christos partial_symtabs->discard_psymtab (pst); 709 1.12 christos 710 1.12 christos /* Indicate that psymtab was thrown away. */ 711 1.12 christos pst = NULL; 712 1.12 christos } 713 1.12 christos return pst; 714 1.12 christos } 715 1.12 christos 716 1.12 christos /* Set namestring based on nlist. If the string table index is invalid, 717 1.12 christos give a fake name, and print a single error message per symbol file read, 718 1.12 christos rather than abort the symbol reading or flood the user with messages. */ 719 1.12 christos 720 1.12 christos static const char * 721 1.12 christos set_namestring (struct objfile *objfile, const struct internal_nlist *nlist) 722 1.12 christos { 723 1.12 christos const char *namestring; 724 1.12 christos struct dbx_symfile_info *key = dbx_objfile_data_key.get (objfile); 725 1.12 christos 726 1.12 christos if (nlist->n_strx + key->ctx.file_string_table_offset 727 1.12 christos >= DBX_STRINGTAB_SIZE (objfile) 728 1.12 christos || nlist->n_strx + key->ctx.file_string_table_offset < nlist->n_strx) 729 1.12 christos { 730 1.12 christos complaint (_("bad string table offset in symbol %d"), 731 1.12 christos symnum); 732 1.12 christos namestring = "<bad string table offset>"; 733 1.12 christos } 734 1.12 christos else 735 1.12 christos namestring = (nlist->n_strx + key->ctx.file_string_table_offset 736 1.12 christos + DBX_STRINGTAB (objfile)); 737 1.12 christos return namestring; 738 1.12 christos } 739 1.12 christos 740 1.12 christos static void 741 1.12 christos stabs_seek (int sym_offset, struct objfile *objfile) 742 1.12 christos { 743 1.12 christos dbx_symfile_info *key = dbx_objfile_data_key.get (objfile); 744 1.12 christos if (key->ctx.stabs_data) 745 1.12 christos { 746 1.12 christos key->ctx.symbuf_read += sym_offset; 747 1.12 christos key->ctx.symbuf_left -= sym_offset; 748 1.12 christos } 749 1.12 christos else 750 1.12 christos if (bfd_seek (objfile->obfd.get (), sym_offset, SEEK_CUR) != 0) 751 1.12 christos perror_with_name (bfd_get_filename (objfile->obfd.get ())); 752 1.12 christos } 753 1.12 christos 754 1.12 christos /* Buffer for reading the symbol table entries. */ 755 1.12 christos static struct external_nlist symbuf[4096]; 756 1.12 christos static int symbuf_idx; 757 1.12 christos static int symbuf_end; 758 1.12 christos 759 1.12 christos /* Refill the symbol table input buffer 760 1.12 christos and set the variables that control fetching entries from it. 761 1.12 christos Reports an error if no data available. 762 1.12 christos This function can read past the end of the symbol table 763 1.12 christos (into the string table) but this does no harm. */ 764 1.12 christos 765 1.12 christos static void 766 1.12 christos fill_symbuf (bfd *sym_bfd, struct objfile *objfile) 767 1.12 christos { 768 1.12 christos unsigned int count; 769 1.12 christos int nbytes; 770 1.12 christos struct dbx_symfile_info *key = dbx_objfile_data_key.get (objfile); 771 1.12 christos 772 1.12 christos if (key->ctx.stabs_data) 773 1.12 christos { 774 1.12 christos nbytes = sizeof (symbuf); 775 1.12 christos if (nbytes > key->ctx.symbuf_left) 776 1.12 christos nbytes = key->ctx.symbuf_left; 777 1.12 christos memcpy (symbuf, key->ctx.stabs_data + key->ctx.symbuf_read, nbytes); 778 1.12 christos } 779 1.12 christos else if (key->ctx.symbuf_sections == NULL) 780 1.12 christos { 781 1.12 christos count = sizeof (symbuf); 782 1.12 christos nbytes = bfd_read (symbuf, count, sym_bfd); 783 1.12 christos } 784 1.12 christos else 785 1.12 christos { 786 1.12 christos if (key->ctx.symbuf_left <= 0) 787 1.12 christos { 788 1.12 christos file_ptr filepos = (*key->ctx.symbuf_sections)[key->ctx.sect_idx]->filepos; 789 1.12 christos 790 1.12 christos if (bfd_seek (sym_bfd, filepos, SEEK_SET) != 0) 791 1.12 christos perror_with_name (bfd_get_filename (sym_bfd)); 792 1.12 christos key->ctx.symbuf_left = bfd_section_size ((*key->ctx.symbuf_sections)[key->ctx.sect_idx]); 793 1.12 christos key->ctx.symbol_table_offset = filepos - key->ctx.symbuf_read; 794 1.12 christos ++key->ctx.sect_idx; 795 1.12 christos } 796 1.12 christos 797 1.12 christos count = key->ctx.symbuf_left; 798 1.12 christos if (count > sizeof (symbuf)) 799 1.12 christos count = sizeof (symbuf); 800 1.12 christos nbytes = bfd_read (symbuf, count, sym_bfd); 801 1.12 christos } 802 1.12 christos 803 1.12 christos if (nbytes < 0) 804 1.12 christos perror_with_name (bfd_get_filename (sym_bfd)); 805 1.12 christos else if (nbytes == 0) 806 1.12 christos error (_("Premature end of file reading symbol table")); 807 1.12 christos symbuf_end = nbytes / key->ctx.symbol_size; 808 1.12 christos symbuf_idx = 0; 809 1.12 christos key->ctx.symbuf_left -= nbytes; 810 1.12 christos key->ctx.symbuf_read += nbytes; 811 1.12 christos } 812 1.12 christos 813 1.12 christos /* Read in a defined section of a specific object file's symbols. */ 814 1.12 christos 815 1.12 christos static void 816 1.12 christos read_ofile_symtab (struct objfile *objfile, legacy_psymtab *pst) 817 1.12 christos { 818 1.12 christos const char *namestring; 819 1.12 christos struct external_nlist *bufp; 820 1.12 christos struct internal_nlist nlist; 821 1.12 christos unsigned char type; 822 1.12 christos unsigned max_symnum; 823 1.12 christos bfd *abfd; 824 1.12 christos int sym_offset; /* Offset to start of symbols to read */ 825 1.12 christos int sym_size; /* Size of symbols to read */ 826 1.12 christos CORE_ADDR text_offset; /* Start of text segment for symbols */ 827 1.12 christos int text_size; /* Size of text segment for symbols */ 828 1.12 christos struct dbx_symfile_info *key = dbx_objfile_data_key.get (objfile); 829 1.12 christos 830 1.12 christos sym_offset = LDSYMOFF (pst); 831 1.12 christos sym_size = LDSYMLEN (pst); 832 1.12 christos text_offset = pst->text_low (objfile); 833 1.12 christos text_size = pst->text_high (objfile) - pst->text_low (objfile); 834 1.12 christos const section_offsets §ion_offsets = objfile->section_offsets; 835 1.12 christos 836 1.12 christos key->ctx.stringtab_global = DBX_STRINGTAB (objfile); 837 1.12 christos set_last_source_file (NULL); 838 1.12 christos 839 1.12 christos abfd = objfile->obfd.get (); 840 1.12 christos symbuf_end = symbuf_idx = 0; 841 1.12 christos key->ctx.symbuf_read = 0; 842 1.12 christos key->ctx.symbuf_left = sym_offset + sym_size; 843 1.12 christos 844 1.12 christos /* It is necessary to actually read one symbol *before* the start 845 1.12 christos of this symtab's symbols, because the GCC_COMPILED_FLAG_SYMBOL 846 1.12 christos occurs before the N_SO symbol. 847 1.12 christos 848 1.12 christos Detecting this in read_stabs_symtab 849 1.12 christos would slow down initial readin, so we look for it here instead. */ 850 1.12 christos if (!key->ctx.processing_acc_compilation && sym_offset >= (int) key->ctx.symbol_size) 851 1.12 christos { 852 1.12 christos stabs_seek (sym_offset - key->ctx.symbol_size, objfile); 853 1.12 christos fill_symbuf (abfd, objfile); 854 1.12 christos bufp = &symbuf[symbuf_idx++]; 855 1.12 christos INTERNALIZE_SYMBOL (nlist, bufp, abfd); 856 1.12 christos OBJSTAT (objfile, n_stabs++); 857 1.12 christos 858 1.12 christos namestring = set_namestring (objfile, &nlist); 859 1.12 christos 860 1.12 christos processing_gcc_compilation = 0; 861 1.12 christos if (nlist.n_type == N_TEXT) 862 1.12 christos { 863 1.12 christos const char *tempstring = namestring; 864 1.12 christos 865 1.12 christos if (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0) 866 1.12 christos processing_gcc_compilation = 1; 867 1.12 christos else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0) 868 1.12 christos processing_gcc_compilation = 2; 869 1.12 christos if (*tempstring != '\0' 870 1.12 christos && *tempstring == bfd_get_symbol_leading_char (objfile->obfd.get ())) 871 1.12 christos ++tempstring; 872 1.12 christos if (startswith (tempstring, "__gnu_compiled")) 873 1.12 christos processing_gcc_compilation = 2; 874 1.12 christos } 875 1.12 christos } 876 1.12 christos else 877 1.12 christos { 878 1.12 christos /* The N_SO starting this symtab is the first symbol, so we 879 1.12 christos better not check the symbol before it. I'm not this can 880 1.12 christos happen, but it doesn't hurt to check for it. */ 881 1.12 christos stabs_seek (sym_offset, objfile); 882 1.12 christos processing_gcc_compilation = 0; 883 1.12 christos } 884 1.12 christos 885 1.12 christos if (symbuf_idx == symbuf_end) 886 1.12 christos fill_symbuf (abfd, objfile); 887 1.12 christos bufp = &symbuf[symbuf_idx]; 888 1.12 christos if (bfd_h_get_8 (abfd, bufp->e_type) != N_SO) 889 1.12 christos error (_("First symbol in segment of executable not a source symbol")); 890 1.12 christos 891 1.12 christos max_symnum = sym_size / key->ctx.symbol_size; 892 1.12 christos 893 1.12 christos for (symnum = 0; 894 1.12 christos symnum < max_symnum; 895 1.12 christos symnum++) 896 1.12 christos { 897 1.12 christos QUIT; /* Allow this to be interruptable. */ 898 1.12 christos if (symbuf_idx == symbuf_end) 899 1.12 christos fill_symbuf (abfd, objfile); 900 1.12 christos bufp = &symbuf[symbuf_idx++]; 901 1.12 christos INTERNALIZE_SYMBOL (nlist, bufp, abfd); 902 1.12 christos OBJSTAT (objfile, n_stabs++); 903 1.12 christos 904 1.12 christos type = bfd_h_get_8 (abfd, bufp->e_type); 905 1.12 christos 906 1.12 christos namestring = set_namestring (objfile, &nlist); 907 1.12 christos 908 1.12 christos if (type & N_STAB) 909 1.12 christos { 910 1.12 christos if (sizeof (nlist.n_value) > 4 911 1.12 christos /* We are a 64-bit debugger debugging a 32-bit program. */ 912 1.12 christos && (type == N_LSYM || type == N_PSYM)) 913 1.12 christos /* We have to be careful with the n_value in the case of N_LSYM 914 1.12 christos and N_PSYM entries, because they are signed offsets from frame 915 1.12 christos pointer, but we actually read them as unsigned 32-bit values. 916 1.12 christos This is not a problem for 32-bit debuggers, for which negative 917 1.12 christos values end up being interpreted correctly (as negative 918 1.12 christos offsets) due to integer overflow. 919 1.12 christos But we need to sign-extend the value for 64-bit debuggers, 920 1.12 christos or we'll end up interpreting negative values as very large 921 1.12 christos positive offsets. */ 922 1.12 christos nlist.n_value = (nlist.n_value ^ 0x80000000) - 0x80000000; 923 1.12 christos process_one_symbol (type, nlist.n_desc, nlist.n_value, 924 1.12 christos namestring, section_offsets, objfile, 925 1.12 christos PST_LANGUAGE (pst)); 926 1.12 christos } 927 1.12 christos /* We skip checking for a new .o or -l file; that should never 928 1.12 christos happen in this routine. */ 929 1.12 christos else if (type == N_TEXT) 930 1.12 christos { 931 1.12 christos /* I don't think this code will ever be executed, because 932 1.12 christos the GCC_COMPILED_FLAG_SYMBOL usually is right before 933 1.12 christos the N_SO symbol which starts this source file. 934 1.12 christos However, there is no reason not to accept 935 1.12 christos the GCC_COMPILED_FLAG_SYMBOL anywhere. */ 936 1.12 christos 937 1.12 christos if (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0) 938 1.12 christos processing_gcc_compilation = 1; 939 1.12 christos else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0) 940 1.12 christos processing_gcc_compilation = 2; 941 1.12 christos } 942 1.12 christos else if (type & N_EXT || type == (unsigned char) N_TEXT 943 1.12 christos || type == (unsigned char) N_NBTEXT) 944 1.12 christos { 945 1.12 christos /* Global symbol: see if we came across a dbx definition for 946 1.12 christos a corresponding symbol. If so, store the value. Remove 947 1.12 christos syms from the chain when their values are stored, but 948 1.12 christos search the whole chain, as there may be several syms from 949 1.12 christos different files with the same name. */ 950 1.12 christos /* This is probably not true. Since the files will be read 951 1.12 christos in one at a time, each reference to a global symbol will 952 1.12 christos be satisfied in each file as it appears. So we skip this 953 1.12 christos section. */ 954 1.12 christos ; 955 1.12 christos } 956 1.12 christos } 957 1.12 christos 958 1.12 christos /* In a Solaris elf file, this variable, which comes from the value 959 1.12 christos of the N_SO symbol, will still be 0. Luckily, text_offset, which 960 1.12 christos comes from low text address of PST, is correct. */ 961 1.12 christos if (get_last_source_start_addr () == 0) 962 1.12 christos set_last_source_start_addr (text_offset); 963 1.12 christos 964 1.12 christos /* In reordered executables last_source_start_addr may not be the 965 1.12 christos lower bound for this symtab, instead use text_offset which comes 966 1.12 christos from the low text address of PST, which is correct. */ 967 1.12 christos if (get_last_source_start_addr () > text_offset) 968 1.12 christos set_last_source_start_addr (text_offset); 969 1.12 christos 970 1.12 christos pst->compunit_symtab = end_compunit_symtab (text_offset + text_size); 971 1.12 christos 972 1.12 christos end_stabs (); 973 1.12 christos 974 1.12 christos } 975 1.12 christos 976 1.12 christos static void 977 1.12 christos dbx_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile) 978 1.12 christos { 979 1.12 christos gdb_assert (!pst->readin); 980 1.12 christos struct dbx_symfile_info *key = dbx_objfile_data_key.get (objfile); 981 1.12 christos 982 1.12 christos /* Read in all partial symtabs on which this one is dependent. */ 983 1.12 christos pst->expand_dependencies (objfile); 984 1.12 christos 985 1.12 christos if (LDSYMLEN (pst)) /* Otherwise it's a dummy. */ 986 1.12 christos { 987 1.12 christos /* Init stuff necessary for reading in symbols */ 988 1.12 christos stabsread_init (); 989 1.12 christos scoped_free_pendings free_pending; 990 1.12 christos key->ctx.file_string_table_offset = FILE_STRING_OFFSET (pst); 991 1.12 christos key->ctx.symbol_size = SYMBOL_SIZE (pst); 992 1.12 christos 993 1.12 christos /* Read in this file's symbols. */ 994 1.12 christos if (bfd_seek (objfile->obfd.get (), SYMBOL_OFFSET (pst), SEEK_SET) == 0) 995 1.12 christos read_ofile_symtab (objfile, pst); 996 1.12 christos } 997 1.12 christos 998 1.12 christos pst->readin = true; 999 1.12 christos } 1000 1.12 christos 1001 1.12 christos /* Invariant: The symbol pointed to by symbuf_idx is the first one 1002 1.12 christos that hasn't been swapped. Swap the symbol at the same time 1003 1.12 christos that symbuf_idx is incremented. */ 1004 1.12 christos 1005 1.12 christos /* dbx allows the text of a symbol name to be continued into the 1006 1.12 christos next symbol name! When such a continuation is encountered 1007 1.12 christos (a \ at the end of the text of a name) 1008 1.12 christos call this function to get the continuation. */ 1009 1.12 christos 1010 1.12 christos static const char * 1011 1.12 christos dbx_next_symbol_text (struct objfile *objfile) 1012 1.12 christos { 1013 1.12 christos struct internal_nlist nlist; 1014 1.12 christos dbx_symfile_info *key = dbx_objfile_data_key.get (objfile); 1015 1.12 christos 1016 1.12 christos if (symbuf_idx == symbuf_end) 1017 1.12 christos fill_symbuf (objfile->obfd.get (), objfile); 1018 1.12 christos 1019 1.12 christos symnum++; 1020 1.12 christos INTERNALIZE_SYMBOL (nlist, &symbuf[symbuf_idx], objfile->obfd.get ()); 1021 1.12 christos OBJSTAT (objfile, n_stabs++); 1022 1.12 christos 1023 1.12 christos symbuf_idx++; 1024 1.12 christos 1025 1.12 christos return nlist.n_strx + key->ctx.stringtab_global 1026 1.12 christos + key->ctx.file_string_table_offset; 1027 1.12 christos } 1028 1.12 christos 1029 1.12 christos /* Read in all of the symbols for a given psymtab for real. 1030 1.12 christos Be verbose about it if the user wants that. SELF is not NULL. */ 1031 1.12 christos 1032 1.12 christos static void 1033 1.12 christos stabs_read_symtab (legacy_psymtab *self, struct objfile *objfile) 1034 1.12 christos { 1035 1.12 christos gdb_assert (!self->readin); 1036 1.12 christos 1037 1.12 christos if (LDSYMLEN (self) || self->number_of_dependencies) 1038 1.12 christos { 1039 1.12 christos next_symbol_text_func = dbx_next_symbol_text; 1040 1.12 christos dbx_symfile_info *key = dbx_objfile_data_key.get (objfile); 1041 1.12 christos 1042 1.12 christos { 1043 1.12 christos scoped_restore restore_stabs_data = make_scoped_restore (&key->ctx.stabs_data); 1044 1.12 christos gdb::unique_xmalloc_ptr<gdb_byte> data_holder; 1045 1.12 christos if (DBX_STAB_SECTION (objfile)) 1046 1.12 christos { 1047 1.12 christos key->ctx.stabs_data 1048 1.12 christos = symfile_relocate_debug_section (objfile, 1049 1.12 christos DBX_STAB_SECTION (objfile), 1050 1.12 christos NULL); 1051 1.12 christos data_holder.reset (key->ctx.stabs_data); 1052 1.12 christos } 1053 1.12 christos 1054 1.12 christos self->expand_psymtab (objfile); 1055 1.12 christos } 1056 1.12 christos 1057 1.12 christos /* Match with global symbols. This only needs to be done once, 1058 1.12 christos after all of the symtabs and dependencies have been read in. */ 1059 1.12 christos scan_file_globals (objfile); 1060 1.12 christos } 1061 1.12 christos } 1062 1.12 christos 1063 1.12 christos static void 1064 1.12 christos record_minimal_symbol (minimal_symbol_reader &reader, 1065 1.12 christos const char *name, unrelocated_addr address, int type, 1066 1.12 christos struct objfile *objfile) 1067 1.12 christos { 1068 1.12 christos enum minimal_symbol_type ms_type; 1069 1.12 christos int section; 1070 1.12 christos struct dbx_symfile_info *key = dbx_objfile_data_key.get (objfile); 1071 1.12 christos 1072 1.12 christos switch (type) 1073 1.12 christos { 1074 1.12 christos case N_TEXT | N_EXT: 1075 1.12 christos ms_type = mst_text; 1076 1.12 christos section = SECT_OFF_TEXT (objfile); 1077 1.12 christos break; 1078 1.12 christos case N_DATA | N_EXT: 1079 1.12 christos ms_type = mst_data; 1080 1.12 christos section = SECT_OFF_DATA (objfile); 1081 1.12 christos break; 1082 1.12 christos case N_BSS | N_EXT: 1083 1.12 christos ms_type = mst_bss; 1084 1.12 christos section = SECT_OFF_BSS (objfile); 1085 1.12 christos break; 1086 1.12 christos case N_ABS | N_EXT: 1087 1.12 christos ms_type = mst_abs; 1088 1.12 christos section = -1; 1089 1.12 christos break; 1090 1.12 christos #ifdef N_SETV 1091 1.12 christos case N_SETV | N_EXT: 1092 1.12 christos ms_type = mst_data; 1093 1.12 christos section = SECT_OFF_DATA (objfile); 1094 1.12 christos break; 1095 1.12 christos case N_SETV: 1096 1.12 christos /* I don't think this type actually exists; since a N_SETV is the result 1097 1.12 christos of going over many .o files, it doesn't make sense to have one 1098 1.12 christos file local. */ 1099 1.12 christos ms_type = mst_file_data; 1100 1.12 christos section = SECT_OFF_DATA (objfile); 1101 1.12 christos break; 1102 1.12 christos #endif 1103 1.12 christos case N_TEXT: 1104 1.12 christos case N_NBTEXT: 1105 1.12 christos case N_FN: 1106 1.12 christos case N_FN_SEQ: 1107 1.12 christos ms_type = mst_file_text; 1108 1.12 christos section = SECT_OFF_TEXT (objfile); 1109 1.12 christos break; 1110 1.12 christos case N_DATA: 1111 1.12 christos ms_type = mst_file_data; 1112 1.12 christos 1113 1.12 christos /* Check for __DYNAMIC, which is used by Sun shared libraries. 1114 1.12 christos Record it as global even if it's local, not global, so 1115 1.12 christos lookup_minimal_symbol can find it. We don't check symbol_leading_char 1116 1.12 christos because for SunOS4 it always is '_'. */ 1117 1.12 christos if (strcmp ("__DYNAMIC", name) == 0) 1118 1.12 christos ms_type = mst_data; 1119 1.12 christos 1120 1.12 christos /* Same with virtual function tables, both global and static. */ 1121 1.12 christos { 1122 1.12 christos const char *tempstring = name; 1123 1.12 christos 1124 1.12 christos if (*tempstring != '\0' 1125 1.12 christos && *tempstring == bfd_get_symbol_leading_char (objfile->obfd.get ())) 1126 1.12 christos ++tempstring; 1127 1.12 christos if (is_vtable_name (tempstring)) 1128 1.12 christos ms_type = mst_data; 1129 1.12 christos } 1130 1.12 christos section = SECT_OFF_DATA (objfile); 1131 1.12 christos break; 1132 1.12 christos case N_BSS: 1133 1.12 christos ms_type = mst_file_bss; 1134 1.12 christos section = SECT_OFF_BSS (objfile); 1135 1.12 christos break; 1136 1.12 christos default: 1137 1.12 christos ms_type = mst_unknown; 1138 1.12 christos section = -1; 1139 1.12 christos break; 1140 1.12 christos } 1141 1.12 christos 1142 1.12 christos if ((ms_type == mst_file_text || ms_type == mst_text) 1143 1.12 christos && address < key->ctx.lowest_text_address) 1144 1.12 christos key->ctx.lowest_text_address = address; 1145 1.12 christos 1146 1.12 christos reader.record_with_info (name, address, ms_type, section); 1147 1.12 christos } 1148 1.12 christos 1149 1.12 christos /* Given a name, value pair, find the corresponding 1150 1.12 christos bincl in the list. Return the partial symtab associated 1151 1.12 christos with that header_file_location. */ 1152 1.12 christos 1153 1.12 christos static legacy_psymtab * 1154 1.12 christos find_corresponding_bincl_psymtab (const char *name, int instance, 1155 1.12 christos struct objfile* objfile) 1156 1.12 christos { 1157 1.12 christos stabsread_context ctx = dbx_objfile_data_key.get (objfile) -> ctx; 1158 1.12 christos for (const header_file_location &bincl : ctx.bincl_list) 1159 1.12 christos if (bincl.instance == instance 1160 1.12 christos && strcmp (name, bincl.name) == 0) 1161 1.12 christos return bincl.pst; 1162 1.12 christos 1163 1.12 christos repeated_header_complaint (name, symnum); 1164 1.12 christos return (legacy_psymtab *) 0; 1165 1.12 christos } 1166 1.12 christos 1167 1.12 christos /* Allocate and partially fill a partial symtab. It will be 1168 1.12 christos completely filled at the end of the symbol list. 1169 1.12 christos 1170 1.12 christos SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR 1171 1.12 christos is the address relative to which its symbols are (incremental) or 0 1172 1.12 christos (normal). */ 1173 1.12 christos 1174 1.12 christos static legacy_psymtab * 1175 1.12 christos start_psymtab (psymtab_storage *partial_symtabs, struct objfile *objfile, 1176 1.12 christos const char *filename, unrelocated_addr textlow, int ldsymoff) 1177 1.12 christos { 1178 1.12 christos legacy_psymtab *result = new legacy_psymtab (filename, partial_symtabs, 1179 1.12 christos objfile->per_bfd, textlow); 1180 1.12 christos 1181 1.12 christos struct dbx_symfile_info *key = dbx_objfile_data_key.get(objfile); 1182 1.12 christos 1183 1.12 christos result->read_symtab_private = 1184 1.12 christos XOBNEW (&objfile->objfile_obstack, struct symloc); 1185 1.12 christos LDSYMOFF (result) = ldsymoff; 1186 1.12 christos result->legacy_read_symtab = stabs_read_symtab; 1187 1.12 christos result->legacy_expand_psymtab = dbx_expand_psymtab; 1188 1.12 christos SYMBOL_SIZE (result) = key->ctx.symbol_size; 1189 1.12 christos SYMBOL_OFFSET (result) = key->ctx.symbol_table_offset; 1190 1.12 christos STRING_OFFSET (result) = 0; /* This used to be an uninitialized global. */ 1191 1.12 christos FILE_STRING_OFFSET (result) = key->ctx.file_string_table_offset; 1192 1.12 christos 1193 1.12 christos /* Deduce the source language from the filename for this psymtab. */ 1194 1.12 christos key->ctx.psymtab_language = deduce_language_from_filename (filename); 1195 1.12 christos PST_LANGUAGE (result) = key->ctx.psymtab_language; 1196 1.12 christos 1197 1.12 christos return result; 1198 1.12 christos } 1199 1.12 christos 1200 1.12 christos /* See stabsread.h. */ 1201 1.12 christos 1202 1.12 christos static void 1203 1.12 christos read_stabs_symtab_1 (minimal_symbol_reader &reader, 1204 1.12 christos psymtab_storage *partial_symtabs, 1205 1.12 christos struct objfile *objfile) 1206 1.12 christos { 1207 1.12 christos struct gdbarch *gdbarch = objfile->arch (); 1208 1.12 christos struct external_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch. */ 1209 1.12 christos struct internal_nlist nlist; 1210 1.12 christos CORE_ADDR text_addr; 1211 1.12 christos int text_size; 1212 1.12 christos const char *sym_name; 1213 1.12 christos int sym_len; 1214 1.12 christos unsigned int next_file_string_table_offset = 0; 1215 1.12 christos struct dbx_symfile_info *dbx = dbx_objfile_data_key.get(objfile); 1216 1.12 christos 1217 1.12 christos const char *namestring; 1218 1.12 christos int nsl; 1219 1.12 christos int past_first_source_file = 0; 1220 1.12 christos CORE_ADDR last_function_start = 0; 1221 1.12 christos bfd *abfd; 1222 1.12 christos int textlow_not_set; 1223 1.12 christos int data_sect_index; 1224 1.12 christos 1225 1.12 christos /* Current partial symtab. */ 1226 1.12 christos legacy_psymtab *pst; 1227 1.12 christos 1228 1.12 christos /* List of current psymtab's include files. */ 1229 1.12 christos const char **psymtab_include_list; 1230 1.12 christos int includes_allocated; 1231 1.12 christos int includes_used; 1232 1.12 christos 1233 1.12 christos /* Index within current psymtab dependency list. */ 1234 1.12 christos legacy_psymtab **dependency_list; 1235 1.12 christos int dependencies_used, dependencies_allocated; 1236 1.12 christos 1237 1.12 christos text_addr = DBX_TEXT_ADDR (objfile); 1238 1.12 christos text_size = DBX_TEXT_SIZE (objfile); 1239 1.12 christos 1240 1.12 christos /* FIXME. We probably want to change stringtab_global rather than add this 1241 1.12 christos while processing every symbol entry. FIXME. */ 1242 1.12 christos dbx->ctx.file_string_table_offset = 0; 1243 1.12 christos 1244 1.12 christos dbx->ctx.stringtab_global = DBX_STRINGTAB (objfile); 1245 1.12 christos 1246 1.12 christos pst = (legacy_psymtab *) 0; 1247 1.12 christos 1248 1.12 christos includes_allocated = 30; 1249 1.12 christos includes_used = 0; 1250 1.12 christos psymtab_include_list = (const char **) alloca (includes_allocated * 1251 1.12 christos sizeof (const char *)); 1252 1.12 christos 1253 1.12 christos dependencies_allocated = 30; 1254 1.12 christos dependencies_used = 0; 1255 1.12 christos dependency_list = 1256 1.12 christos (legacy_psymtab **) alloca (dependencies_allocated * 1257 1.12 christos sizeof (legacy_psymtab *)); 1258 1.12 christos 1259 1.12 christos /* Init bincl list */ 1260 1.12 christos std::vector<struct header_file_location> bincl_storage; 1261 1.12 christos scoped_restore restore_bincl_global 1262 1.12 christos = make_scoped_restore (&(dbx->ctx.bincl_list), bincl_storage); 1263 1.12 christos 1264 1.12 christos set_last_source_file (NULL); 1265 1.12 christos 1266 1.12 christos dbx->ctx.lowest_text_address = (unrelocated_addr) -1; 1267 1.12 christos 1268 1.12 christos abfd = objfile->obfd.get (); 1269 1.12 christos symbuf_end = symbuf_idx = 0; 1270 1.12 christos next_symbol_text_func = dbx_next_symbol_text; 1271 1.12 christos textlow_not_set = 1; 1272 1.12 christos dbx->ctx.has_line_numbers = 0; 1273 1.12 christos 1274 1.12 christos /* FIXME: jimb/2003-09-12: We don't apply the right section's offset 1275 1.12 christos to global and static variables. The stab for a global or static 1276 1.12 christos variable doesn't give us any indication of which section it's in, 1277 1.12 christos so we can't tell immediately which offset in 1278 1.12 christos objfile->section_offsets we should apply to the variable's 1279 1.12 christos address. 1280 1.12 christos 1281 1.12 christos We could certainly find out which section contains the variable 1282 1.12 christos by looking up the variable's unrelocated address with 1283 1.12 christos find_pc_section, but that would be expensive; this is the 1284 1.12 christos function that constructs the partial symbol tables by examining 1285 1.12 christos every symbol in the entire executable, and it's 1286 1.12 christos performance-critical. So that expense would not be welcome. I'm 1287 1.12 christos not sure what to do about this at the moment. 1288 1.12 christos 1289 1.12 christos What we have done for years is to simply assume that the .data 1290 1.12 christos section's offset is appropriate for all global and static 1291 1.12 christos variables. Recently, this was expanded to fall back to the .bss 1292 1.12 christos section's offset if there is no .data section, and then to the 1293 1.12 christos .rodata section's offset. */ 1294 1.12 christos data_sect_index = objfile->sect_index_data; 1295 1.12 christos if (data_sect_index == -1) 1296 1.12 christos data_sect_index = SECT_OFF_BSS (objfile); 1297 1.12 christos if (data_sect_index == -1) 1298 1.12 christos data_sect_index = SECT_OFF_RODATA (objfile); 1299 1.12 christos 1300 1.12 christos /* If data_sect_index is still -1, that's okay. It's perfectly fine 1301 1.12 christos for the file to have no .data, no .bss, and no .text at all, if 1302 1.12 christos it also has no global or static variables. */ 1303 1.12 christos 1304 1.12 christos for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++) 1305 1.12 christos { 1306 1.12 christos /* Get the symbol for this run and pull out some info. */ 1307 1.12 christos QUIT; /* Allow this to be interruptable. */ 1308 1.12 christos if (symbuf_idx == symbuf_end) 1309 1.12 christos fill_symbuf (abfd, objfile); 1310 1.12 christos bufp = &symbuf[symbuf_idx++]; 1311 1.12 christos 1312 1.12 christos /* 1313 1.12 christos * Special case to speed up readin. 1314 1.12 christos */ 1315 1.12 christos if (bfd_h_get_8 (abfd, bufp->e_type) == N_SLINE) 1316 1.12 christos { 1317 1.12 christos dbx->ctx.has_line_numbers = 1; 1318 1.12 christos continue; 1319 1.12 christos } 1320 1.12 christos 1321 1.12 christos INTERNALIZE_SYMBOL (nlist, bufp, abfd); 1322 1.12 christos OBJSTAT (objfile, n_stabs++); 1323 1.12 christos 1324 1.12 christos /* Ok. There is a lot of code duplicated in the rest of this 1325 1.12 christos switch statement (for efficiency reasons). Since I don't 1326 1.12 christos like duplicating code, I will do my penance here, and 1327 1.12 christos describe the code which is duplicated: 1328 1.12 christos 1329 1.12 christos *) The assignment to namestring. 1330 1.12 christos *) The call to strchr. 1331 1.12 christos *) The addition of a partial symbol the two partial 1332 1.12 christos symbol lists. This last is a large section of code, so 1333 1.12 christos I've embedded it in the following macro. */ 1334 1.12 christos 1335 1.12 christos switch (nlist.n_type) 1336 1.12 christos { 1337 1.12 christos /* 1338 1.12 christos * Standard, external, non-debugger, symbols 1339 1.12 christos */ 1340 1.12 christos 1341 1.12 christos case N_TEXT | N_EXT: 1342 1.12 christos case N_NBTEXT | N_EXT: 1343 1.12 christos goto record_it; 1344 1.12 christos 1345 1.12 christos case N_DATA | N_EXT: 1346 1.12 christos case N_NBDATA | N_EXT: 1347 1.12 christos goto record_it; 1348 1.12 christos 1349 1.12 christos case N_BSS: 1350 1.12 christos case N_BSS | N_EXT: 1351 1.12 christos case N_NBBSS | N_EXT: 1352 1.12 christos case N_SETV | N_EXT: /* FIXME, is this in BSS? */ 1353 1.12 christos goto record_it; 1354 1.12 christos 1355 1.12 christos case N_ABS | N_EXT: 1356 1.12 christos record_it: 1357 1.12 christos namestring = set_namestring (objfile, &nlist); 1358 1.12 christos 1359 1.12 christos record_minimal_symbol (reader, namestring, 1360 1.12 christos unrelocated_addr (nlist.n_value), 1361 1.12 christos nlist.n_type, objfile); /* Always */ 1362 1.12 christos continue; 1363 1.12 christos 1364 1.12 christos /* Standard, local, non-debugger, symbols. */ 1365 1.12 christos 1366 1.12 christos case N_NBTEXT: 1367 1.12 christos 1368 1.12 christos /* We need to be able to deal with both N_FN or N_TEXT, 1369 1.12 christos because we have no way of knowing whether the sys-supplied ld 1370 1.12 christos or GNU ld was used to make the executable. Sequents throw 1371 1.12 christos in another wrinkle -- they renumbered N_FN. */ 1372 1.12 christos 1373 1.12 christos case N_FN: 1374 1.12 christos case N_FN_SEQ: 1375 1.12 christos case N_TEXT: 1376 1.12 christos namestring = set_namestring (objfile, &nlist); 1377 1.12 christos 1378 1.12 christos if ((namestring[0] == '-' && namestring[1] == 'l') 1379 1.12 christos || (namestring[(nsl = strlen (namestring)) - 1] == 'o' 1380 1.12 christos && namestring[nsl - 2] == '.')) 1381 1.12 christos { 1382 1.12 christos unrelocated_addr unrel_val = unrelocated_addr (nlist.n_value); 1383 1.12 christos 1384 1.12 christos if (past_first_source_file && pst 1385 1.12 christos /* The gould NP1 uses low values for .o and -l symbols 1386 1.12 christos which are not the address. */ 1387 1.12 christos && unrel_val >= pst->unrelocated_text_low ()) 1388 1.12 christos { 1389 1.12 christos stabs_end_psymtab (objfile, partial_symtabs, 1390 1.12 christos pst, psymtab_include_list, 1391 1.12 christos includes_used, symnum * dbx->ctx.symbol_size, 1392 1.12 christos unrel_val > pst->unrelocated_text_high () 1393 1.12 christos ? unrel_val : pst->unrelocated_text_high (), 1394 1.12 christos dependency_list, dependencies_used, 1395 1.12 christos textlow_not_set); 1396 1.12 christos pst = (legacy_psymtab *) 0; 1397 1.12 christos includes_used = 0; 1398 1.12 christos dependencies_used = 0; 1399 1.12 christos dbx->ctx.has_line_numbers = 0; 1400 1.12 christos } 1401 1.12 christos else 1402 1.12 christos past_first_source_file = 1; 1403 1.12 christos } 1404 1.12 christos else 1405 1.12 christos goto record_it; 1406 1.12 christos continue; 1407 1.12 christos 1408 1.12 christos case N_DATA: 1409 1.12 christos goto record_it; 1410 1.12 christos 1411 1.12 christos case N_UNDF | N_EXT: 1412 1.12 christos /* The case (nlist.n_value != 0) is a "Fortran COMMON" symbol. 1413 1.12 christos We used to rely on the target to tell us whether it knows 1414 1.12 christos where the symbol has been relocated to, but none of the 1415 1.12 christos target implementations actually provided that operation. 1416 1.12 christos So we just ignore the symbol, the same way we would do if 1417 1.12 christos we had a target-side symbol lookup which returned no match. 1418 1.12 christos 1419 1.12 christos All other symbols (with nlist.n_value == 0), are really 1420 1.12 christos undefined, and so we ignore them too. */ 1421 1.12 christos continue; 1422 1.12 christos 1423 1.12 christos case N_UNDF: 1424 1.12 christos if (dbx->ctx.processing_acc_compilation && nlist.n_strx == 1) 1425 1.12 christos { 1426 1.12 christos /* Deal with relative offsets in the string table 1427 1.12 christos used in ELF+STAB under Solaris. If we want to use the 1428 1.12 christos n_strx field, which contains the name of the file, 1429 1.12 christos we must adjust file_string_table_offset *before* calling 1430 1.12 christos set_namestring(). */ 1431 1.12 christos past_first_source_file = 1; 1432 1.12 christos dbx->ctx.file_string_table_offset = next_file_string_table_offset; 1433 1.12 christos next_file_string_table_offset = 1434 1.12 christos dbx->ctx.file_string_table_offset + nlist.n_value; 1435 1.12 christos if (next_file_string_table_offset < dbx->ctx.file_string_table_offset) 1436 1.12 christos error (_("string table offset backs up at %d"), symnum); 1437 1.12 christos /* FIXME -- replace error() with complaint. */ 1438 1.12 christos continue; 1439 1.12 christos } 1440 1.12 christos continue; 1441 1.12 christos 1442 1.12 christos /* Lots of symbol types we can just ignore. */ 1443 1.12 christos 1444 1.12 christos case N_ABS: 1445 1.12 christos case N_NBDATA: 1446 1.12 christos case N_NBBSS: 1447 1.12 christos continue; 1448 1.12 christos 1449 1.12 christos /* Keep going . . . */ 1450 1.12 christos 1451 1.12 christos /* 1452 1.12 christos * Special symbol types for GNU 1453 1.12 christos */ 1454 1.12 christos case N_INDR: 1455 1.12 christos case N_INDR | N_EXT: 1456 1.12 christos case N_SETA: 1457 1.12 christos case N_SETA | N_EXT: 1458 1.12 christos case N_SETT: 1459 1.12 christos case N_SETT | N_EXT: 1460 1.12 christos case N_SETD: 1461 1.12 christos case N_SETD | N_EXT: 1462 1.12 christos case N_SETB: 1463 1.12 christos case N_SETB | N_EXT: 1464 1.12 christos case N_SETV: 1465 1.12 christos continue; 1466 1.12 christos 1467 1.12 christos /* 1468 1.12 christos * Debugger symbols 1469 1.12 christos */ 1470 1.12 christos 1471 1.12 christos case N_SO: 1472 1.12 christos { 1473 1.12 christos CORE_ADDR valu; 1474 1.12 christos static int prev_so_symnum = -10; 1475 1.12 christos static int first_so_symnum; 1476 1.12 christos const char *p; 1477 1.12 christos static const char *dirname_nso; 1478 1.12 christos int prev_textlow_not_set; 1479 1.12 christos 1480 1.12 christos valu = nlist.n_value; 1481 1.12 christos 1482 1.12 christos prev_textlow_not_set = textlow_not_set; 1483 1.12 christos 1484 1.12 christos /* A zero value is probably an indication for the SunPRO 3.0 1485 1.12 christos compiler. stabs_end_psymtab explicitly tests for zero, so 1486 1.12 christos don't relocate it. */ 1487 1.12 christos 1488 1.12 christos if (nlist.n_value == 0 1489 1.12 christos && gdbarch_sofun_address_maybe_missing (gdbarch)) 1490 1.12 christos { 1491 1.12 christos textlow_not_set = 1; 1492 1.12 christos valu = 0; 1493 1.12 christos } 1494 1.12 christos else 1495 1.12 christos textlow_not_set = 0; 1496 1.12 christos 1497 1.12 christos past_first_source_file = 1; 1498 1.12 christos 1499 1.12 christos if (prev_so_symnum != symnum - 1) 1500 1.12 christos { /* Here if prev stab wasn't N_SO. */ 1501 1.12 christos first_so_symnum = symnum; 1502 1.12 christos 1503 1.12 christos if (pst) 1504 1.12 christos { 1505 1.12 christos unrelocated_addr unrel_value = unrelocated_addr (valu); 1506 1.12 christos stabs_end_psymtab (objfile, partial_symtabs, 1507 1.12 christos pst, psymtab_include_list, 1508 1.12 christos includes_used, symnum * dbx->ctx.symbol_size, 1509 1.12 christos unrel_value > pst->unrelocated_text_high () 1510 1.12 christos ? unrel_value 1511 1.12 christos : pst->unrelocated_text_high (), 1512 1.12 christos dependency_list, dependencies_used, 1513 1.12 christos prev_textlow_not_set); 1514 1.12 christos pst = (legacy_psymtab *) 0; 1515 1.12 christos includes_used = 0; 1516 1.12 christos dependencies_used = 0; 1517 1.12 christos dbx->ctx.has_line_numbers = 0; 1518 1.12 christos } 1519 1.12 christos } 1520 1.12 christos 1521 1.12 christos prev_so_symnum = symnum; 1522 1.12 christos 1523 1.12 christos /* End the current partial symtab and start a new one. */ 1524 1.12 christos 1525 1.12 christos namestring = set_namestring (objfile, &nlist); 1526 1.12 christos 1527 1.12 christos /* Null name means end of .o file. Don't start a new one. */ 1528 1.12 christos if (*namestring == '\000') 1529 1.12 christos continue; 1530 1.12 christos 1531 1.12 christos /* Some compilers (including gcc) emit a pair of initial N_SOs. 1532 1.12 christos The first one is a directory name; the second the file name. 1533 1.12 christos If pst exists, is empty, and has a filename ending in '/', 1534 1.12 christos we assume the previous N_SO was a directory name. */ 1535 1.12 christos 1536 1.12 christos p = lbasename (namestring); 1537 1.12 christos if (p != namestring && *p == '\000') 1538 1.12 christos { 1539 1.12 christos /* Save the directory name SOs locally, then save it into 1540 1.12 christos the psymtab when it's created below. */ 1541 1.12 christos dirname_nso = namestring; 1542 1.12 christos continue; 1543 1.12 christos } 1544 1.12 christos 1545 1.12 christos /* Some other compilers (C++ ones in particular) emit useless 1546 1.12 christos SOs for non-existant .c files. We ignore all subsequent SOs 1547 1.12 christos that immediately follow the first. */ 1548 1.12 christos 1549 1.12 christos if (!pst) 1550 1.12 christos { 1551 1.12 christos pst = start_psymtab (partial_symtabs, objfile, 1552 1.12 christos namestring, 1553 1.12 christos unrelocated_addr (valu), 1554 1.12 christos first_so_symnum * dbx->ctx.symbol_size); 1555 1.12 christos pst->dirname = dirname_nso; 1556 1.12 christos dirname_nso = NULL; 1557 1.12 christos } 1558 1.12 christos continue; 1559 1.12 christos } 1560 1.12 christos 1561 1.12 christos case N_BINCL: 1562 1.12 christos { 1563 1.12 christos enum language tmp_language; 1564 1.12 christos 1565 1.12 christos /* Add this bincl to the bincl_list for future EXCLs. No 1566 1.12 christos need to save the string; it'll be around until 1567 1.12 christos read_stabs_symtab function returns. */ 1568 1.12 christos 1569 1.12 christos namestring = set_namestring (objfile, &nlist); 1570 1.12 christos tmp_language = deduce_language_from_filename (namestring); 1571 1.12 christos 1572 1.12 christos /* Only change the psymtab's language if we've learned 1573 1.12 christos something useful (eg. tmp_language is not language_unknown). 1574 1.12 christos In addition, to match what start_subfile does, never change 1575 1.12 christos from C++ to C. */ 1576 1.12 christos if (tmp_language != language_unknown 1577 1.12 christos && (tmp_language != language_c 1578 1.12 christos || dbx->ctx.psymtab_language != language_cplus)) 1579 1.12 christos dbx->ctx.psymtab_language = tmp_language; 1580 1.12 christos 1581 1.12 christos if (pst == NULL) 1582 1.12 christos { 1583 1.12 christos /* FIXME: we should not get here without a PST to work on. 1584 1.12 christos Attempt to recover. */ 1585 1.12 christos complaint (_("N_BINCL %s not in entries for " 1586 1.12 christos "any file, at symtab pos %d"), 1587 1.12 christos namestring, symnum); 1588 1.12 christos continue; 1589 1.12 christos } 1590 1.12 christos dbx->ctx.bincl_list.emplace_back (namestring, nlist.n_value, pst); 1591 1.12 christos 1592 1.12 christos /* Mark down an include file in the current psymtab. */ 1593 1.12 christos 1594 1.12 christos goto record_include_file; 1595 1.12 christos } 1596 1.12 christos 1597 1.12 christos case N_SOL: 1598 1.12 christos { 1599 1.12 christos enum language tmp_language; 1600 1.12 christos 1601 1.12 christos /* Mark down an include file in the current psymtab. */ 1602 1.12 christos namestring = set_namestring (objfile, &nlist); 1603 1.12 christos tmp_language = deduce_language_from_filename (namestring); 1604 1.12 christos 1605 1.12 christos /* Only change the psymtab's language if we've learned 1606 1.12 christos something useful (eg. tmp_language is not language_unknown). 1607 1.12 christos In addition, to match what start_subfile does, never change 1608 1.12 christos from C++ to C. */ 1609 1.12 christos if (tmp_language != language_unknown 1610 1.12 christos && (tmp_language != language_c 1611 1.12 christos || dbx->ctx.psymtab_language != language_cplus)) 1612 1.12 christos dbx->ctx.psymtab_language = tmp_language; 1613 1.12 christos 1614 1.12 christos /* In C++, one may expect the same filename to come round many 1615 1.12 christos times, when code is coming alternately from the main file 1616 1.12 christos and from inline functions in other files. So I check to see 1617 1.12 christos if this is a file we've seen before -- either the main 1618 1.12 christos source file, or a previously included file. 1619 1.12 christos 1620 1.12 christos This seems to be a lot of time to be spending on N_SOL, but 1621 1.12 christos things like "break c-exp.y:435" need to work (I 1622 1.12 christos suppose the psymtab_include_list could be hashed or put 1623 1.12 christos in a binary tree, if profiling shows this is a major hog). */ 1624 1.12 christos if (pst && filename_cmp (namestring, pst->filename) == 0) 1625 1.12 christos continue; 1626 1.12 christos { 1627 1.12 christos int i; 1628 1.12 christos 1629 1.12 christos for (i = 0; i < includes_used; i++) 1630 1.12 christos if (filename_cmp (namestring, psymtab_include_list[i]) == 0) 1631 1.12 christos { 1632 1.12 christos i = -1; 1633 1.12 christos break; 1634 1.12 christos } 1635 1.12 christos if (i == -1) 1636 1.12 christos continue; 1637 1.12 christos } 1638 1.12 christos 1639 1.12 christos record_include_file: 1640 1.12 christos 1641 1.12 christos psymtab_include_list[includes_used++] = namestring; 1642 1.12 christos if (includes_used >= includes_allocated) 1643 1.12 christos { 1644 1.12 christos const char **orig = psymtab_include_list; 1645 1.12 christos 1646 1.12 christos psymtab_include_list = (const char **) 1647 1.12 christos alloca ((includes_allocated *= 2) * sizeof (const char *)); 1648 1.12 christos memcpy (psymtab_include_list, orig, 1649 1.12 christos includes_used * sizeof (const char *)); 1650 1.12 christos } 1651 1.12 christos continue; 1652 1.12 christos } 1653 1.12 christos case N_LSYM: /* Typedef or automatic variable. */ 1654 1.12 christos case N_STSYM: /* Data seg var -- static. */ 1655 1.12 christos case N_LCSYM: /* BSS " */ 1656 1.12 christos case N_ROSYM: /* Read-only data seg var -- static. */ 1657 1.12 christos case N_NBSTS: /* Gould nobase. */ 1658 1.12 christos case N_NBLCS: /* symbols. */ 1659 1.12 christos case N_FUN: 1660 1.12 christos case N_GSYM: /* Global (extern) variable; can be 1661 1.12 christos data or bss (sigh FIXME). */ 1662 1.12 christos 1663 1.12 christos /* Following may probably be ignored; I'll leave them here 1664 1.12 christos for now (until I do Pascal and Modula 2 extensions). */ 1665 1.12 christos 1666 1.12 christos case N_PC: /* I may or may not need this; I 1667 1.12 christos suspect not. */ 1668 1.12 christos case N_M2C: /* I suspect that I can ignore this here. */ 1669 1.12 christos case N_SCOPE: /* Same. */ 1670 1.12 christos { 1671 1.12 christos const char *p; 1672 1.12 christos 1673 1.12 christos namestring = set_namestring (objfile, &nlist); 1674 1.12 christos 1675 1.12 christos /* See if this is an end of function stab. */ 1676 1.12 christos if (pst && nlist.n_type == N_FUN && *namestring == '\000') 1677 1.12 christos { 1678 1.12 christos unrelocated_addr valu; 1679 1.12 christos 1680 1.12 christos /* It's value is the size (in bytes) of the function for 1681 1.12 christos function relative stabs, or the address of the function's 1682 1.12 christos end for old style stabs. */ 1683 1.12 christos valu = unrelocated_addr (nlist.n_value + last_function_start); 1684 1.12 christos if (pst->unrelocated_text_high () == unrelocated_addr (0) 1685 1.12 christos || valu > pst->unrelocated_text_high ()) 1686 1.12 christos pst->set_text_high (valu); 1687 1.12 christos break; 1688 1.12 christos } 1689 1.12 christos 1690 1.12 christos p = (char *) strchr (namestring, ':'); 1691 1.12 christos if (!p) 1692 1.12 christos continue; /* Not a debugging symbol. */ 1693 1.12 christos 1694 1.12 christos sym_len = 0; 1695 1.12 christos sym_name = NULL; /* pacify "gcc -Werror" */ 1696 1.12 christos if (dbx->ctx.psymtab_language == language_cplus) 1697 1.12 christos { 1698 1.12 christos std::string name (namestring, p - namestring); 1699 1.12 christos gdb::unique_xmalloc_ptr<char> new_name 1700 1.12 christos = cp_canonicalize_string (name.c_str ()); 1701 1.12 christos if (new_name != nullptr) 1702 1.12 christos { 1703 1.12 christos sym_len = strlen (new_name.get ()); 1704 1.12 christos sym_name = obstack_strdup (&objfile->objfile_obstack, 1705 1.12 christos new_name.get ()); 1706 1.12 christos } 1707 1.12 christos } 1708 1.12 christos else if (dbx->ctx.psymtab_language == language_c) 1709 1.12 christos { 1710 1.12 christos std::string name (namestring, p - namestring); 1711 1.12 christos gdb::unique_xmalloc_ptr<char> new_name 1712 1.12 christos = c_canonicalize_name (name.c_str ()); 1713 1.12 christos if (new_name != nullptr) 1714 1.12 christos { 1715 1.12 christos sym_len = strlen (new_name.get ()); 1716 1.12 christos sym_name = obstack_strdup (&objfile->objfile_obstack, 1717 1.12 christos new_name.get ()); 1718 1.12 christos } 1719 1.12 christos } 1720 1.12 christos 1721 1.12 christos if (sym_len == 0) 1722 1.12 christos { 1723 1.12 christos sym_name = namestring; 1724 1.12 christos sym_len = p - namestring; 1725 1.12 christos } 1726 1.12 christos 1727 1.12 christos /* Main processing section for debugging symbols which 1728 1.12 christos the initial read through the symbol tables needs to worry 1729 1.12 christos about. If we reach this point, the symbol which we are 1730 1.12 christos considering is definitely one we are interested in. 1731 1.12 christos p must also contain the (valid) index into the namestring 1732 1.12 christos which indicates the debugging type symbol. */ 1733 1.12 christos 1734 1.12 christos switch (p[1]) 1735 1.12 christos { 1736 1.12 christos case 'S': 1737 1.12 christos if (pst != nullptr) 1738 1.12 christos pst->add_psymbol (std::string_view (sym_name, sym_len), true, 1739 1.12 christos VAR_DOMAIN, LOC_STATIC, 1740 1.12 christos data_sect_index, 1741 1.12 christos psymbol_placement::STATIC, 1742 1.12 christos unrelocated_addr (nlist.n_value), 1743 1.12 christos dbx->ctx.psymtab_language, 1744 1.12 christos partial_symtabs, objfile); 1745 1.12 christos else 1746 1.12 christos complaint (_("static `%*s' appears to be defined " 1747 1.12 christos "outside of all compilation units"), 1748 1.12 christos sym_len, sym_name); 1749 1.12 christos continue; 1750 1.12 christos 1751 1.12 christos case 'G': 1752 1.12 christos /* The addresses in these entries are reported to be 1753 1.12 christos wrong. See the code that reads 'G's for symtabs. */ 1754 1.12 christos if (pst != nullptr) 1755 1.12 christos pst->add_psymbol (std::string_view (sym_name, sym_len), true, 1756 1.12 christos VAR_DOMAIN, LOC_STATIC, 1757 1.12 christos data_sect_index, 1758 1.12 christos psymbol_placement::GLOBAL, 1759 1.12 christos unrelocated_addr (nlist.n_value), 1760 1.12 christos dbx->ctx.psymtab_language, 1761 1.12 christos partial_symtabs, objfile); 1762 1.12 christos else 1763 1.12 christos complaint (_("global `%*s' appears to be defined " 1764 1.12 christos "outside of all compilation units"), 1765 1.12 christos sym_len, sym_name); 1766 1.12 christos continue; 1767 1.12 christos 1768 1.12 christos case 'T': 1769 1.12 christos /* When a 'T' entry is defining an anonymous enum, it 1770 1.12 christos may have a name which is the empty string, or a 1771 1.12 christos single space. Since they're not really defining a 1772 1.12 christos symbol, those shouldn't go in the partial symbol 1773 1.12 christos table. We do pick up the elements of such enums at 1774 1.12 christos 'check_enum:', below. */ 1775 1.12 christos if (p >= namestring + 2 1776 1.12 christos || (p == namestring + 1 1777 1.12 christos && namestring[0] != ' ')) 1778 1.12 christos { 1779 1.12 christos if (pst != nullptr) 1780 1.12 christos pst->add_psymbol (std::string_view (sym_name, sym_len), 1781 1.12 christos true, STRUCT_DOMAIN, LOC_TYPEDEF, -1, 1782 1.12 christos psymbol_placement::STATIC, 1783 1.12 christos unrelocated_addr (0), 1784 1.12 christos dbx->ctx.psymtab_language, 1785 1.12 christos partial_symtabs, objfile); 1786 1.12 christos else 1787 1.12 christos complaint (_("enum, struct, or union `%*s' appears " 1788 1.12 christos "to be defined outside of all " 1789 1.12 christos "compilation units"), 1790 1.12 christos sym_len, sym_name); 1791 1.12 christos if (p[2] == 't') 1792 1.12 christos { 1793 1.12 christos /* Also a typedef with the same name. */ 1794 1.12 christos if (pst != nullptr) 1795 1.12 christos pst->add_psymbol (std::string_view (sym_name, sym_len), 1796 1.12 christos true, VAR_DOMAIN, LOC_TYPEDEF, -1, 1797 1.12 christos psymbol_placement::STATIC, 1798 1.12 christos unrelocated_addr (0), 1799 1.12 christos dbx->ctx.psymtab_language, 1800 1.12 christos partial_symtabs, objfile); 1801 1.12 christos else 1802 1.12 christos complaint (_("typedef `%*s' appears to be defined " 1803 1.12 christos "outside of all compilation units"), 1804 1.12 christos sym_len, sym_name); 1805 1.12 christos p += 1; 1806 1.12 christos } 1807 1.12 christos } 1808 1.12 christos goto check_enum; 1809 1.12 christos 1810 1.12 christos case 't': 1811 1.12 christos if (p != namestring) /* a name is there, not just :T... */ 1812 1.12 christos { 1813 1.12 christos if (pst != nullptr) 1814 1.12 christos pst->add_psymbol (std::string_view (sym_name, sym_len), 1815 1.12 christos true, VAR_DOMAIN, LOC_TYPEDEF, -1, 1816 1.12 christos psymbol_placement::STATIC, 1817 1.12 christos unrelocated_addr (0), 1818 1.12 christos dbx->ctx.psymtab_language, 1819 1.12 christos partial_symtabs, objfile); 1820 1.12 christos else 1821 1.12 christos complaint (_("typename `%*s' appears to be defined " 1822 1.12 christos "outside of all compilation units"), 1823 1.12 christos sym_len, sym_name); 1824 1.12 christos } 1825 1.12 christos check_enum: 1826 1.12 christos /* If this is an enumerated type, we need to 1827 1.12 christos add all the enum constants to the partial symbol 1828 1.12 christos table. This does not cover enums without names, e.g. 1829 1.12 christos "enum {a, b} c;" in C, but fortunately those are 1830 1.12 christos rare. There is no way for GDB to find those from the 1831 1.12 christos enum type without spending too much time on it. Thus 1832 1.12 christos to solve this problem, the compiler needs to put out the 1833 1.12 christos enum in a nameless type. GCC2 does this. */ 1834 1.12 christos 1835 1.12 christos /* We are looking for something of the form 1836 1.12 christos <name> ":" ("t" | "T") [<number> "="] "e" 1837 1.12 christos {<constant> ":" <value> ","} ";". */ 1838 1.12 christos 1839 1.12 christos /* Skip over the colon and the 't' or 'T'. */ 1840 1.12 christos p += 2; 1841 1.12 christos /* This type may be given a number. Also, numbers can come 1842 1.12 christos in pairs like (0,26). Skip over it. */ 1843 1.12 christos while ((*p >= '0' && *p <= '9') 1844 1.12 christos || *p == '(' || *p == ',' || *p == ')' 1845 1.12 christos || *p == '=') 1846 1.12 christos p++; 1847 1.12 christos 1848 1.12 christos if (*p++ == 'e') 1849 1.12 christos { 1850 1.12 christos /* The aix4 compiler emits extra crud before the members. */ 1851 1.12 christos if (*p == '-') 1852 1.12 christos { 1853 1.12 christos /* Skip over the type (?). */ 1854 1.12 christos while (*p != ':') 1855 1.12 christos p++; 1856 1.12 christos 1857 1.12 christos /* Skip over the colon. */ 1858 1.12 christos p++; 1859 1.12 christos } 1860 1.12 christos 1861 1.12 christos /* We have found an enumerated type. */ 1862 1.12 christos /* According to comments in read_enum_type 1863 1.12 christos a comma could end it instead of a semicolon. 1864 1.12 christos I don't know where that happens. 1865 1.12 christos Accept either. */ 1866 1.12 christos while (*p && *p != ';' && *p != ',') 1867 1.12 christos { 1868 1.12 christos const char *q; 1869 1.12 christos 1870 1.12 christos /* Check for and handle cretinous dbx symbol name 1871 1.12 christos continuation! */ 1872 1.12 christos if (*p == '\\' || (*p == '?' && p[1] == '\0')) 1873 1.12 christos p = next_symbol_text (objfile); 1874 1.12 christos 1875 1.12 christos /* Point to the character after the name 1876 1.12 christos of the enum constant. */ 1877 1.12 christos for (q = p; *q && *q != ':'; q++) 1878 1.12 christos ; 1879 1.12 christos /* Note that the value doesn't matter for 1880 1.12 christos enum constants in psymtabs, just in symtabs. */ 1881 1.12 christos if (pst != nullptr) 1882 1.12 christos pst->add_psymbol (std::string_view (p, q - p), true, 1883 1.12 christos VAR_DOMAIN, LOC_CONST, -1, 1884 1.12 christos psymbol_placement::STATIC, 1885 1.12 christos unrelocated_addr (0), 1886 1.12 christos dbx->ctx.psymtab_language, 1887 1.12 christos partial_symtabs, objfile); 1888 1.12 christos else 1889 1.12 christos complaint (_("enum constant `%*s' appears to be defined " 1890 1.12 christos "outside of all compilation units"), 1891 1.12 christos ((int) (q - p)), p); 1892 1.12 christos /* Point past the name. */ 1893 1.12 christos p = q; 1894 1.12 christos /* Skip over the value. */ 1895 1.12 christos while (*p && *p != ',') 1896 1.12 christos p++; 1897 1.12 christos /* Advance past the comma. */ 1898 1.12 christos if (*p) 1899 1.12 christos p++; 1900 1.12 christos } 1901 1.12 christos } 1902 1.12 christos continue; 1903 1.12 christos 1904 1.12 christos case 'c': 1905 1.12 christos /* Constant, e.g. from "const" in Pascal. */ 1906 1.12 christos if (pst != nullptr) 1907 1.12 christos pst->add_psymbol (std::string_view (sym_name, sym_len), true, 1908 1.12 christos VAR_DOMAIN, LOC_CONST, -1, 1909 1.12 christos psymbol_placement::STATIC, 1910 1.12 christos unrelocated_addr (0), 1911 1.12 christos dbx->ctx.psymtab_language, 1912 1.12 christos partial_symtabs, objfile); 1913 1.12 christos else 1914 1.12 christos complaint (_("constant `%*s' appears to be defined " 1915 1.12 christos "outside of all compilation units"), 1916 1.12 christos sym_len, sym_name); 1917 1.12 christos 1918 1.12 christos continue; 1919 1.12 christos 1920 1.12 christos case 'f': 1921 1.12 christos if (! pst) 1922 1.12 christos { 1923 1.12 christos std::string name (namestring, (p - namestring)); 1924 1.12 christos function_outside_compilation_unit_complaint (name.c_str ()); 1925 1.12 christos } 1926 1.12 christos /* Kludges for ELF/STABS with Sun ACC. */ 1927 1.12 christos dbx->ctx.last_function_name = namestring; 1928 1.12 christos /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit 1929 1.12 christos value for the bottom of the text seg in those cases. */ 1930 1.12 christos if (nlist.n_value == 0 1931 1.12 christos && gdbarch_sofun_address_maybe_missing (gdbarch)) 1932 1.12 christos { 1933 1.12 christos bound_minimal_symbol minsym 1934 1.12 christos = find_stab_function (namestring, 1935 1.12 christos pst ? pst->filename : NULL, objfile); 1936 1.12 christos if (minsym.minsym != NULL) 1937 1.12 christos nlist.n_value 1938 1.12 christos = CORE_ADDR (minsym.minsym->unrelocated_address ()); 1939 1.12 christos } 1940 1.12 christos if (pst && textlow_not_set 1941 1.12 christos && gdbarch_sofun_address_maybe_missing (gdbarch)) 1942 1.12 christos { 1943 1.12 christos pst->set_text_low (unrelocated_addr (nlist.n_value)); 1944 1.12 christos textlow_not_set = 0; 1945 1.12 christos } 1946 1.12 christos /* End kludge. */ 1947 1.12 christos 1948 1.12 christos /* Keep track of the start of the last function so we 1949 1.12 christos can handle end of function symbols. */ 1950 1.12 christos last_function_start = nlist.n_value; 1951 1.12 christos 1952 1.12 christos /* In reordered executables this function may lie outside 1953 1.12 christos the bounds created by N_SO symbols. If that's the case 1954 1.12 christos use the address of this function as the low bound for 1955 1.12 christos the partial symbol table. */ 1956 1.12 christos if (pst 1957 1.12 christos && (textlow_not_set 1958 1.12 christos || (unrelocated_addr (nlist.n_value) 1959 1.12 christos < pst->unrelocated_text_low () 1960 1.12 christos && (nlist.n_value != 0)))) 1961 1.12 christos { 1962 1.12 christos pst->set_text_low (unrelocated_addr (nlist.n_value)); 1963 1.12 christos textlow_not_set = 0; 1964 1.12 christos } 1965 1.12 christos if (pst != nullptr) 1966 1.12 christos pst->add_psymbol (std::string_view (sym_name, sym_len), true, 1967 1.12 christos VAR_DOMAIN, LOC_BLOCK, 1968 1.12 christos SECT_OFF_TEXT (objfile), 1969 1.12 christos psymbol_placement::STATIC, 1970 1.12 christos unrelocated_addr (nlist.n_value), 1971 1.12 christos dbx->ctx.psymtab_language, 1972 1.12 christos partial_symtabs, objfile); 1973 1.12 christos continue; 1974 1.12 christos 1975 1.12 christos /* Global functions were ignored here, but now they 1976 1.12 christos are put into the global psymtab like one would expect. 1977 1.12 christos They're also in the minimal symbol table. */ 1978 1.12 christos case 'F': 1979 1.12 christos if (! pst) 1980 1.12 christos { 1981 1.12 christos std::string name (namestring, (p - namestring)); 1982 1.12 christos function_outside_compilation_unit_complaint (name.c_str ()); 1983 1.12 christos } 1984 1.12 christos /* Kludges for ELF/STABS with Sun ACC. */ 1985 1.12 christos dbx->ctx.last_function_name = namestring; 1986 1.12 christos /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit 1987 1.12 christos value for the bottom of the text seg in those cases. */ 1988 1.12 christos if (nlist.n_value == 0 1989 1.12 christos && gdbarch_sofun_address_maybe_missing (gdbarch)) 1990 1.12 christos { 1991 1.12 christos bound_minimal_symbol minsym 1992 1.12 christos = find_stab_function (namestring, 1993 1.12 christos pst ? pst->filename : NULL, objfile); 1994 1.12 christos if (minsym.minsym != NULL) 1995 1.12 christos nlist.n_value 1996 1.12 christos = CORE_ADDR (minsym.minsym->unrelocated_address ()); 1997 1.12 christos } 1998 1.12 christos if (pst && textlow_not_set 1999 1.12 christos && gdbarch_sofun_address_maybe_missing (gdbarch)) 2000 1.12 christos { 2001 1.12 christos pst->set_text_low (unrelocated_addr (nlist.n_value)); 2002 1.12 christos textlow_not_set = 0; 2003 1.12 christos } 2004 1.12 christos /* End kludge. */ 2005 1.12 christos 2006 1.12 christos /* Keep track of the start of the last function so we 2007 1.12 christos can handle end of function symbols. */ 2008 1.12 christos last_function_start = nlist.n_value; 2009 1.12 christos 2010 1.12 christos /* In reordered executables this function may lie outside 2011 1.12 christos the bounds created by N_SO symbols. If that's the case 2012 1.12 christos use the address of this function as the low bound for 2013 1.12 christos the partial symbol table. */ 2014 1.12 christos if (pst 2015 1.12 christos && (textlow_not_set 2016 1.12 christos || (unrelocated_addr (nlist.n_value) 2017 1.12 christos < pst->unrelocated_text_low () 2018 1.12 christos && (nlist.n_value != 0)))) 2019 1.12 christos { 2020 1.12 christos pst->set_text_low (unrelocated_addr (nlist.n_value)); 2021 1.12 christos textlow_not_set = 0; 2022 1.12 christos } 2023 1.12 christos if (pst != nullptr) 2024 1.12 christos pst->add_psymbol (std::string_view (sym_name, sym_len), true, 2025 1.12 christos VAR_DOMAIN, LOC_BLOCK, 2026 1.12 christos SECT_OFF_TEXT (objfile), 2027 1.12 christos psymbol_placement::GLOBAL, 2028 1.12 christos unrelocated_addr (nlist.n_value), 2029 1.12 christos dbx->ctx.psymtab_language, 2030 1.12 christos partial_symtabs, objfile); 2031 1.12 christos continue; 2032 1.12 christos 2033 1.12 christos /* Two things show up here (hopefully); static symbols of 2034 1.12 christos local scope (static used inside braces) or extensions 2035 1.12 christos of structure symbols. We can ignore both. */ 2036 1.12 christos case 'V': 2037 1.12 christos case '(': 2038 1.12 christos case '0': 2039 1.12 christos case '1': 2040 1.12 christos case '2': 2041 1.12 christos case '3': 2042 1.12 christos case '4': 2043 1.12 christos case '5': 2044 1.12 christos case '6': 2045 1.12 christos case '7': 2046 1.12 christos case '8': 2047 1.12 christos case '9': 2048 1.12 christos case '-': 2049 1.12 christos case '#': /* For symbol identification (used in live ranges). */ 2050 1.12 christos continue; 2051 1.12 christos 2052 1.12 christos case ':': 2053 1.12 christos /* It is a C++ nested symbol. We don't need to record it 2054 1.12 christos (I don't think); if we try to look up foo::bar::baz, 2055 1.12 christos then symbols for the symtab containing foo should get 2056 1.12 christos read in, I think. */ 2057 1.12 christos /* Someone says sun cc puts out symbols like 2058 1.12 christos /foo/baz/maclib::/usr/local/bin/maclib, 2059 1.12 christos which would get here with a symbol type of ':'. */ 2060 1.12 christos continue; 2061 1.12 christos 2062 1.12 christos default: 2063 1.12 christos /* Unexpected symbol descriptor. The second and subsequent stabs 2064 1.12 christos of a continued stab can show up here. The question is 2065 1.12 christos whether they ever can mimic a normal stab--it would be 2066 1.12 christos nice if not, since we certainly don't want to spend the 2067 1.12 christos time searching to the end of every string looking for 2068 1.12 christos a backslash. */ 2069 1.12 christos 2070 1.12 christos complaint (_("unknown symbol descriptor `%c'"), 2071 1.12 christos p[1]); 2072 1.12 christos 2073 1.12 christos /* Ignore it; perhaps it is an extension that we don't 2074 1.12 christos know about. */ 2075 1.12 christos continue; 2076 1.12 christos } 2077 1.12 christos } 2078 1.12 christos 2079 1.12 christos case N_EXCL: 2080 1.12 christos 2081 1.12 christos namestring = set_namestring (objfile, &nlist); 2082 1.12 christos 2083 1.12 christos /* Find the corresponding bincl and mark that psymtab on the 2084 1.12 christos psymtab dependency list. */ 2085 1.12 christos { 2086 1.12 christos legacy_psymtab *needed_pst = 2087 1.12 christos find_corresponding_bincl_psymtab (namestring, nlist.n_value, objfile); 2088 1.12 christos 2089 1.12 christos /* If this include file was defined earlier in this file, 2090 1.12 christos leave it alone. */ 2091 1.12 christos if (needed_pst == pst) 2092 1.12 christos continue; 2093 1.12 christos 2094 1.12 christos if (needed_pst) 2095 1.12 christos { 2096 1.12 christos int i; 2097 1.12 christos int found = 0; 2098 1.12 christos 2099 1.12 christos for (i = 0; i < dependencies_used; i++) 2100 1.12 christos if (dependency_list[i] == needed_pst) 2101 1.12 christos { 2102 1.12 christos found = 1; 2103 1.12 christos break; 2104 1.12 christos } 2105 1.12 christos 2106 1.12 christos /* If it's already in the list, skip the rest. */ 2107 1.12 christos if (found) 2108 1.12 christos continue; 2109 1.12 christos 2110 1.12 christos dependency_list[dependencies_used++] = needed_pst; 2111 1.12 christos if (dependencies_used >= dependencies_allocated) 2112 1.12 christos { 2113 1.12 christos legacy_psymtab **orig = dependency_list; 2114 1.12 christos 2115 1.12 christos dependency_list = 2116 1.12 christos (legacy_psymtab **) 2117 1.12 christos alloca ((dependencies_allocated *= 2) 2118 1.12 christos * sizeof (legacy_psymtab *)); 2119 1.12 christos memcpy (dependency_list, orig, 2120 1.12 christos (dependencies_used 2121 1.12 christos * sizeof (legacy_psymtab *))); 2122 1.12 christos #ifdef DEBUG_INFO 2123 1.12 christos gdb_printf (gdb_stderr, 2124 1.12 christos "Had to reallocate " 2125 1.12 christos "dependency list.\n"); 2126 1.12 christos gdb_printf (gdb_stderr, 2127 1.12 christos "New dependencies allocated: %d\n", 2128 1.12 christos dependencies_allocated); 2129 1.12 christos #endif 2130 1.12 christos } 2131 1.12 christos } 2132 1.12 christos } 2133 1.12 christos continue; 2134 1.12 christos 2135 1.12 christos case N_ENDM: 2136 1.12 christos /* Solaris 2 end of module, finish current partial symbol 2137 1.12 christos table. stabs_end_psymtab will set the high text address of 2138 1.12 christos PST to the proper value, which is necessary if a module 2139 1.12 christos compiled without debugging info follows this module. */ 2140 1.12 christos if (pst && gdbarch_sofun_address_maybe_missing (gdbarch)) 2141 1.12 christos { 2142 1.12 christos stabs_end_psymtab (objfile, partial_symtabs, pst, 2143 1.12 christos psymtab_include_list, includes_used, 2144 1.12 christos symnum * dbx->ctx.symbol_size, 2145 1.12 christos (unrelocated_addr) 0, dependency_list, 2146 1.12 christos dependencies_used, textlow_not_set); 2147 1.12 christos pst = (legacy_psymtab *) 0; 2148 1.12 christos includes_used = 0; 2149 1.12 christos dependencies_used = 0; 2150 1.12 christos dbx->ctx.has_line_numbers = 0; 2151 1.12 christos } 2152 1.12 christos continue; 2153 1.12 christos 2154 1.12 christos case N_RBRAC: 2155 1.12 christos #ifdef HANDLE_RBRAC 2156 1.12 christos HANDLE_RBRAC (nlist.n_value); 2157 1.12 christos continue; 2158 1.12 christos #endif 2159 1.12 christos case N_EINCL: 2160 1.12 christos case N_DSLINE: 2161 1.12 christos case N_BSLINE: 2162 1.12 christos case N_SSYM: /* Claim: Structure or union element. 2163 1.12 christos Hopefully, I can ignore this. */ 2164 1.12 christos case N_ENTRY: /* Alternate entry point; can ignore. */ 2165 1.12 christos case N_MAIN: /* Can definitely ignore this. */ 2166 1.12 christos case N_CATCH: /* These are GNU C++ extensions */ 2167 1.12 christos case N_EHDECL: /* that can safely be ignored here. */ 2168 1.12 christos case N_LENG: 2169 1.12 christos case N_BCOMM: 2170 1.12 christos case N_ECOMM: 2171 1.12 christos case N_ECOML: 2172 1.12 christos case N_FNAME: 2173 1.12 christos case N_SLINE: 2174 1.12 christos case N_RSYM: 2175 1.12 christos case N_PSYM: 2176 1.12 christos case N_BNSYM: 2177 1.12 christos case N_ENSYM: 2178 1.12 christos case N_LBRAC: 2179 1.12 christos case N_NSYMS: /* Ultrix 4.0: symbol count */ 2180 1.12 christos case N_DEFD: /* GNU Modula-2 */ 2181 1.12 christos case N_ALIAS: /* SunPro F77: alias name, ignore for now. */ 2182 1.12 christos 2183 1.12 christos case N_OBJ: /* Useless types from Solaris. */ 2184 1.12 christos case N_OPT: 2185 1.12 christos case N_PATCH: 2186 1.12 christos /* These symbols aren't interesting; don't worry about them. */ 2187 1.12 christos continue; 2188 1.12 christos 2189 1.12 christos default: 2190 1.12 christos /* If we haven't found it yet, ignore it. It's probably some 2191 1.12 christos new type we don't know about yet. */ 2192 1.12 christos unknown_symtype_complaint (hex_string (nlist.n_type)); 2193 1.12 christos continue; 2194 1.12 christos } 2195 1.12 christos } 2196 1.12 christos 2197 1.12 christos /* If there's stuff to be cleaned up, clean it up. */ 2198 1.12 christos if (pst) 2199 1.12 christos { 2200 1.12 christos /* Don't set high text address of PST lower than it already 2201 1.12 christos is. */ 2202 1.12 christos unrelocated_addr text_end 2203 1.12 christos = (unrelocated_addr 2204 1.12 christos ((dbx->ctx.lowest_text_address == (unrelocated_addr) -1 2205 1.12 christos ? text_addr 2206 1.12 christos : CORE_ADDR (dbx->ctx.lowest_text_address)) 2207 1.12 christos + text_size)); 2208 1.12 christos 2209 1.12 christos stabs_end_psymtab (objfile, partial_symtabs, 2210 1.12 christos pst, psymtab_include_list, includes_used, 2211 1.12 christos symnum * dbx->ctx.symbol_size, 2212 1.12 christos (text_end > pst->unrelocated_text_high () 2213 1.12 christos ? text_end : pst->unrelocated_text_high ()), 2214 1.12 christos dependency_list, dependencies_used, textlow_not_set); 2215 1.12 christos } 2216 1.12 christos } 2217 1.12 christos 2218 1.12 christos /* Scan and build partial symbols for a symbol file. 2219 1.12 christos We have been initialized by a call to dbx_symfile_init, which 2220 1.12 christos put all the relevant info into a "struct dbx_symfile_info", 2221 1.12 christos hung off the objfile structure. */ 2222 1.12 christos 2223 1.12 christos void 2224 1.12 christos read_stabs_symtab (struct objfile *objfile, symfile_add_flags symfile_flags) 2225 1.12 christos { 2226 1.12 christos bfd *sym_bfd; 2227 1.12 christos int val; 2228 1.12 christos struct dbx_symfile_info *key = dbx_objfile_data_key.get (objfile); 2229 1.12 christos 2230 1.12 christos sym_bfd = objfile->obfd.get (); 2231 1.12 christos 2232 1.12 christos /* .o and .nlm files are relocatables with text, data and bss segs based at 2233 1.12 christos 0. This flag disables special (Solaris stabs-in-elf only) fixups for 2234 1.12 christos symbols with a value of 0. */ 2235 1.12 christos 2236 1.12 christos key->ctx.symfile_relocatable = bfd_get_file_flags (sym_bfd) & HAS_RELOC; 2237 1.12 christos 2238 1.12 christos val = bfd_seek (sym_bfd, DBX_SYMTAB_OFFSET (objfile), SEEK_SET); 2239 1.12 christos if (val < 0) 2240 1.12 christos perror_with_name (objfile_name (objfile)); 2241 1.12 christos 2242 1.12 christos key->ctx.symbol_size = DBX_SYMBOL_SIZE (objfile); 2243 1.12 christos key->ctx.symbol_table_offset = DBX_SYMTAB_OFFSET (objfile); 2244 1.12 christos 2245 1.12 christos scoped_free_pendings free_pending; 2246 1.12 christos 2247 1.12 christos minimal_symbol_reader reader (objfile); 2248 1.12 christos 2249 1.12 christos /* Read stabs data from executable file and define symbols. */ 2250 1.12 christos 2251 1.12 christos psymbol_functions *psf = new psymbol_functions (); 2252 1.12 christos psymtab_storage *partial_symtabs = psf->get_partial_symtabs ().get (); 2253 1.12 christos objfile->qf.emplace_front (psf); 2254 1.12 christos read_stabs_symtab_1 (reader, partial_symtabs, objfile); 2255 1.12 christos 2256 1.12 christos /* Install any minimal symbols that have been collected as the current 2257 1.12 christos minimal symbols for this objfile. */ 2258 1.12 christos 2259 1.12 christos reader.install (); 2260 1.12 christos } 2261 1.12 christos 2262 1.12 christos /* Record the namespace that the function defined by SYMBOL was 2263 1.12 christos defined in, if necessary. BLOCK is the associated block; use 2264 1.12 christos OBSTACK for allocation. */ 2265 1.12 christos 2266 1.12 christos static void 2267 1.12 christos cp_set_block_scope (const struct symbol *symbol, 2268 1.12 christos struct block *block, 2269 1.12 christos struct obstack *obstack) 2270 1.12 christos { 2271 1.12 christos if (symbol->demangled_name () != NULL) 2272 1.12 christos { 2273 1.12 christos /* Try to figure out the appropriate namespace from the 2274 1.12 christos demangled name. */ 2275 1.12 christos 2276 1.12 christos /* FIXME: carlton/2003-04-15: If the function in question is 2277 1.12 christos a method of a class, the name will actually include the 2278 1.12 christos name of the class as well. This should be harmless, but 2279 1.12 christos is a little unfortunate. */ 2280 1.12 christos 2281 1.12 christos const char *name = symbol->demangled_name (); 2282 1.12 christos unsigned int prefix_len = cp_entire_prefix_len (name); 2283 1.12 christos 2284 1.12 christos block->set_scope (obstack_strndup (obstack, name, prefix_len), 2285 1.12 christos obstack); 2286 1.12 christos } 2287 1.12 christos } 2288 1.12 christos 2289 1.12 christos bound_minimal_symbol 2290 1.12 christos find_stab_function (const char *namestring, const char *filename, 2291 1.12 christos struct objfile *objfile) 2292 1.12 christos { 2293 1.12 christos int n; 2294 1.12 christos 2295 1.12 christos const char *colon = strchr (namestring, ':'); 2296 1.12 christos if (colon == NULL) 2297 1.12 christos n = 0; 2298 1.12 christos else 2299 1.12 christos n = colon - namestring; 2300 1.12 christos 2301 1.12 christos char *p = (char *) alloca (n + 2); 2302 1.12 christos strncpy (p, namestring, n); 2303 1.12 christos p[n] = 0; 2304 1.12 christos 2305 1.12 christos bound_minimal_symbol msym 2306 1.12 christos = lookup_minimal_symbol (current_program_space, p, objfile, filename); 2307 1.12 christos if (msym.minsym == NULL) 2308 1.12 christos { 2309 1.12 christos /* Sun Fortran appends an underscore to the minimal symbol name, 2310 1.12 christos try again with an appended underscore if the minimal symbol 2311 1.12 christos was not found. */ 2312 1.12 christos p[n] = '_'; 2313 1.12 christos p[n + 1] = 0; 2314 1.12 christos msym 2315 1.12 christos = lookup_minimal_symbol (current_program_space, p, objfile, filename); 2316 1.12 christos } 2317 1.12 christos 2318 1.12 christos if (msym.minsym == NULL && filename != NULL) 2319 1.12 christos { 2320 1.12 christos /* Try again without the filename. */ 2321 1.12 christos p[n] = 0; 2322 1.12 christos msym = lookup_minimal_symbol (current_program_space, p, objfile); 2323 1.12 christos } 2324 1.12 christos if (msym.minsym == NULL && filename != NULL) 2325 1.12 christos { 2326 1.12 christos /* And try again for Sun Fortran, but without the filename. */ 2327 1.12 christos p[n] = '_'; 2328 1.12 christos p[n + 1] = 0; 2329 1.12 christos msym = lookup_minimal_symbol (current_program_space, p, objfile); 2330 1.12 christos } 2331 1.12 christos 2332 1.12 christos return msym; 2333 1.12 christos } 2334 1.12 christos 2335 1.12 christos /* Add header file number I for this object file 2336 1.12 christos at the next successive FILENUM. */ 2337 1.12 christos 2338 1.12 christos static void 2339 1.12 christos add_this_object_header_file (int i) 2340 1.12 christos { 2341 1.12 christos if (n_this_object_header_files == n_allocated_this_object_header_files) 2342 1.12 christos { 2343 1.12 christos n_allocated_this_object_header_files *= 2; 2344 1.12 christos this_object_header_files 2345 1.12 christos = (int *) xrealloc ((char *) this_object_header_files, 2346 1.12 christos n_allocated_this_object_header_files * sizeof (int)); 2347 1.12 christos } 2348 1.12 christos 2349 1.12 christos this_object_header_files[n_this_object_header_files++] = i; 2350 1.12 christos } 2351 1.12 christos 2352 1.12 christos /* Add to this file an "old" header file, one already seen in 2353 1.12 christos a previous object file. NAME is the header file's name. 2354 1.12 christos INSTANCE is its instance code, to select among multiple 2355 1.12 christos symbol tables for the same header file. */ 2356 1.12 christos 2357 1.12 christos static void 2358 1.12 christos add_old_header_file (const char *name, int instance, struct objfile *objfile) 2359 1.12 christos { 2360 1.12 christos struct header_file *p = HEADER_FILES (objfile); 2361 1.12 christos int i; 2362 1.12 christos 2363 1.12 christos for (i = 0; i < N_HEADER_FILES (objfile); i++) 2364 1.12 christos if (filename_cmp (p[i].name, name) == 0 && instance == p[i].instance) 2365 1.12 christos { 2366 1.12 christos add_this_object_header_file (i); 2367 1.12 christos return; 2368 1.12 christos } 2369 1.12 christos repeated_header_complaint (name, symnum); 2370 1.12 christos } 2371 1.12 christos 2372 1.12 christos /* Add to this file a "new" header file: definitions for its types follow. 2373 1.12 christos NAME is the header file's name. 2374 1.12 christos Most often this happens only once for each distinct header file, 2375 1.12 christos but not necessarily. If it happens more than once, INSTANCE has 2376 1.12 christos a different value each time, and references to the header file 2377 1.12 christos use INSTANCE values to select among them. 2378 1.12 christos 2379 1.12 christos dbx output contains "begin" and "end" markers for each new header file, 2380 1.12 christos but at this level we just need to know which files there have been; 2381 1.12 christos so we record the file when its "begin" is seen and ignore the "end". */ 2382 1.12 christos 2383 1.12 christos static void 2384 1.12 christos add_new_header_file (const char *name, int instance, struct objfile *objfile) 2385 1.12 christos { 2386 1.12 christos int i; 2387 1.12 christos struct header_file *hfile; 2388 1.12 christos 2389 1.12 christos /* Make sure there is room for one more header file. */ 2390 1.12 christos 2391 1.12 christos i = N_ALLOCATED_HEADER_FILES (objfile); 2392 1.12 christos 2393 1.12 christos if (N_HEADER_FILES (objfile) == i) 2394 1.12 christos { 2395 1.12 christos if (i == 0) 2396 1.12 christos { 2397 1.12 christos N_ALLOCATED_HEADER_FILES (objfile) = 10; 2398 1.12 christos HEADER_FILES (objfile) = (struct header_file *) 2399 1.12 christos xmalloc (10 * sizeof (struct header_file)); 2400 1.12 christos } 2401 1.12 christos else 2402 1.12 christos { 2403 1.12 christos i *= 2; 2404 1.12 christos N_ALLOCATED_HEADER_FILES (objfile) = i; 2405 1.12 christos HEADER_FILES (objfile) = (struct header_file *) 2406 1.12 christos xrealloc ((char *) HEADER_FILES (objfile), 2407 1.12 christos (i * sizeof (struct header_file))); 2408 1.12 christos } 2409 1.12 christos } 2410 1.12 christos 2411 1.12 christos /* Create an entry for this header file. */ 2412 1.12 christos 2413 1.12 christos i = N_HEADER_FILES (objfile)++; 2414 1.12 christos hfile = HEADER_FILES (objfile) + i; 2415 1.12 christos hfile->name = xstrdup (name); 2416 1.12 christos hfile->instance = instance; 2417 1.12 christos hfile->length = 10; 2418 1.12 christos hfile->vector = XCNEWVEC (struct type *, 10); 2419 1.12 christos 2420 1.12 christos add_this_object_header_file (i); 2421 1.12 christos } 2422 1.12 christos 2423 1.12 christos /* See stabsread.h. */ 2424 1.12 christos 2425 1.12 christos void 2426 1.12 christos process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, 2427 1.12 christos const section_offsets §ion_offsets, 2428 1.12 christos struct objfile *objfile, enum language language) 2429 1.12 christos { 2430 1.12 christos struct gdbarch *gdbarch = objfile->arch (); 2431 1.12 christos struct context_stack *newobj; 2432 1.12 christos struct context_stack cstk; 2433 1.12 christos /* This remembers the address of the start of a function. It is 2434 1.12 christos used because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries 2435 1.12 christos are relative to the current function's start address. On systems 2436 1.12 christos other than Solaris 2, this just holds the SECT_OFF_TEXT value, 2437 1.12 christos and is used to relocate these symbol types rather than 2438 1.12 christos SECTION_OFFSETS. */ 2439 1.12 christos static CORE_ADDR function_start_offset; 2440 1.12 christos 2441 1.12 christos /* This holds the address of the start of a function, without the 2442 1.12 christos system peculiarities of function_start_offset. */ 2443 1.12 christos static CORE_ADDR last_function_start; 2444 1.12 christos 2445 1.12 christos /* If this is nonzero, we've seen an N_SLINE since the start of the 2446 1.12 christos current function. We use this to tell us to move the first sline 2447 1.12 christos to the beginning of the function regardless of what its given 2448 1.12 christos value is. */ 2449 1.12 christos static int sline_found_in_function = 1; 2450 1.12 christos 2451 1.12 christos /* If this is nonzero, we've seen a non-gcc N_OPT symbol for this 2452 1.12 christos source file. Used to detect the SunPRO solaris compiler. */ 2453 1.12 christos static int n_opt_found; 2454 1.12 christos 2455 1.12 christos /* The section index for this symbol. */ 2456 1.12 christos int section_index = -1; 2457 1.12 christos 2458 1.12 christos struct dbx_symfile_info *key = dbx_objfile_data_key.get (objfile); 2459 1.12 christos 2460 1.12 christos /* Something is wrong if we see real data before seeing a source 2461 1.12 christos file name. */ 2462 1.12 christos 2463 1.12 christos if (get_last_source_file () == NULL && type != (unsigned char) N_SO) 2464 1.12 christos { 2465 1.12 christos /* Ignore any symbols which appear before an N_SO symbol. 2466 1.12 christos Currently no one puts symbols there, but we should deal 2467 1.12 christos gracefully with the case. A complain()t might be in order, 2468 1.12 christos but this should not be an error (). */ 2469 1.12 christos return; 2470 1.12 christos } 2471 1.12 christos 2472 1.12 christos switch (type) 2473 1.12 christos { 2474 1.12 christos case N_FUN: 2475 1.12 christos case N_FNAME: 2476 1.12 christos 2477 1.12 christos if (*name == '\000') 2478 1.12 christos { 2479 1.12 christos /* This N_FUN marks the end of a function. This closes off 2480 1.12 christos the current block. */ 2481 1.12 christos struct block *block; 2482 1.12 christos 2483 1.12 christos if (outermost_context_p ()) 2484 1.12 christos { 2485 1.12 christos lbrac_mismatch_complaint (symnum); 2486 1.12 christos break; 2487 1.12 christos } 2488 1.12 christos 2489 1.12 christos /* The following check is added before recording line 0 at 2490 1.12 christos end of function so as to handle hand-generated stabs 2491 1.12 christos which may have an N_FUN stabs at the end of the function, 2492 1.12 christos but no N_SLINE stabs. */ 2493 1.12 christos if (sline_found_in_function) 2494 1.12 christos { 2495 1.12 christos CORE_ADDR addr = last_function_start + valu; 2496 1.12 christos 2497 1.12 christos record_line 2498 1.12 christos (get_current_subfile (), 0, 2499 1.12 christos unrelocated_addr (gdbarch_addr_bits_remove (gdbarch, addr) 2500 1.12 christos - objfile->text_section_offset ())); 2501 1.12 christos } 2502 1.12 christos 2503 1.12 christos within_function = 0; 2504 1.12 christos cstk = pop_context (); 2505 1.12 christos 2506 1.12 christos /* Make a block for the local symbols within. */ 2507 1.12 christos block = finish_block (cstk.name, 2508 1.12 christos cstk.old_blocks, NULL, 2509 1.12 christos cstk.start_addr, cstk.start_addr + valu); 2510 1.12 christos 2511 1.12 christos /* For C++, set the block's scope. */ 2512 1.12 christos if (cstk.name->language () == language_cplus) 2513 1.12 christos cp_set_block_scope (cstk.name, block, &objfile->objfile_obstack); 2514 1.12 christos 2515 1.12 christos /* May be switching to an assembler file which may not be using 2516 1.12 christos block relative stabs, so reset the offset. */ 2517 1.12 christos function_start_offset = 0; 2518 1.12 christos 2519 1.12 christos break; 2520 1.12 christos } 2521 1.12 christos 2522 1.12 christos sline_found_in_function = 0; 2523 1.12 christos 2524 1.12 christos /* Relocate for dynamic loading. */ 2525 1.12 christos section_index = SECT_OFF_TEXT (objfile); 2526 1.12 christos valu += section_offsets[SECT_OFF_TEXT (objfile)]; 2527 1.12 christos valu = gdbarch_addr_bits_remove (gdbarch, valu); 2528 1.12 christos last_function_start = valu; 2529 1.12 christos 2530 1.12 christos goto define_a_symbol; 2531 1.12 christos 2532 1.12 christos case N_LBRAC: 2533 1.12 christos /* This "symbol" just indicates the start of an inner lexical 2534 1.12 christos context within a function. */ 2535 1.12 christos 2536 1.12 christos /* Ignore extra outermost context from SunPRO cc and acc. */ 2537 1.12 christos if (n_opt_found && desc == 1) 2538 1.12 christos break; 2539 1.12 christos 2540 1.12 christos valu += function_start_offset; 2541 1.12 christos 2542 1.12 christos push_context (desc, valu); 2543 1.12 christos break; 2544 1.12 christos 2545 1.12 christos case N_RBRAC: 2546 1.12 christos /* This "symbol" just indicates the end of an inner lexical 2547 1.12 christos context that was started with N_LBRAC. */ 2548 1.12 christos 2549 1.12 christos /* Ignore extra outermost context from SunPRO cc and acc. */ 2550 1.12 christos if (n_opt_found && desc == 1) 2551 1.12 christos break; 2552 1.12 christos 2553 1.12 christos valu += function_start_offset; 2554 1.12 christos 2555 1.12 christos if (outermost_context_p ()) 2556 1.12 christos { 2557 1.12 christos lbrac_mismatch_complaint (symnum); 2558 1.12 christos break; 2559 1.12 christos } 2560 1.12 christos 2561 1.12 christos cstk = pop_context (); 2562 1.12 christos if (desc != cstk.depth) 2563 1.12 christos lbrac_mismatch_complaint (symnum); 2564 1.12 christos 2565 1.12 christos if (*get_local_symbols () != NULL) 2566 1.12 christos { 2567 1.12 christos /* GCC development snapshots from March to December of 2568 1.12 christos 2000 would output N_LSYM entries after N_LBRAC 2569 1.12 christos entries. As a consequence, these symbols are simply 2570 1.12 christos discarded. Complain if this is the case. */ 2571 1.12 christos complaint (_("misplaced N_LBRAC entry; discarding local " 2572 1.12 christos "symbols which have no enclosing block")); 2573 1.12 christos } 2574 1.12 christos *get_local_symbols () = cstk.locals; 2575 1.12 christos 2576 1.12 christos if (get_context_stack_depth () > 1) 2577 1.12 christos { 2578 1.12 christos /* This is not the outermost LBRAC...RBRAC pair in the 2579 1.12 christos function, its local symbols preceded it, and are the ones 2580 1.12 christos just recovered from the context stack. Define the block 2581 1.12 christos for them (but don't bother if the block contains no 2582 1.12 christos symbols. Should we complain on blocks without symbols? 2583 1.12 christos I can't think of any useful purpose for them). */ 2584 1.12 christos if (*get_local_symbols () != NULL) 2585 1.12 christos { 2586 1.12 christos /* Muzzle a compiler bug that makes end < start. 2587 1.12 christos 2588 1.12 christos ??? Which compilers? Is this ever harmful?. */ 2589 1.12 christos if (cstk.start_addr > valu) 2590 1.12 christos { 2591 1.12 christos complaint (_("block start larger than block end")); 2592 1.12 christos cstk.start_addr = valu; 2593 1.12 christos } 2594 1.12 christos /* Make a block for the local symbols within. */ 2595 1.12 christos finish_block (0, cstk.old_blocks, NULL, 2596 1.12 christos cstk.start_addr, valu); 2597 1.12 christos } 2598 1.12 christos } 2599 1.12 christos else 2600 1.12 christos { 2601 1.12 christos /* This is the outermost LBRAC...RBRAC pair. There is no 2602 1.12 christos need to do anything; leave the symbols that preceded it 2603 1.12 christos to be attached to the function's own block. We need to 2604 1.12 christos indicate that we just moved outside of the function. */ 2605 1.12 christos within_function = 0; 2606 1.12 christos } 2607 1.12 christos 2608 1.12 christos break; 2609 1.12 christos 2610 1.12 christos case N_FN: 2611 1.12 christos case N_FN_SEQ: 2612 1.12 christos /* This kind of symbol indicates the start of an object file. 2613 1.12 christos Relocate for dynamic loading. */ 2614 1.12 christos section_index = SECT_OFF_TEXT (objfile); 2615 1.12 christos valu += section_offsets[SECT_OFF_TEXT (objfile)]; 2616 1.12 christos break; 2617 1.12 christos 2618 1.12 christos case N_SO: 2619 1.12 christos /* This type of symbol indicates the start of data for one 2620 1.12 christos source file. Finish the symbol table of the previous source 2621 1.12 christos file (if any) and start accumulating a new symbol table. 2622 1.12 christos Relocate for dynamic loading. */ 2623 1.12 christos section_index = SECT_OFF_TEXT (objfile); 2624 1.12 christos valu += section_offsets[SECT_OFF_TEXT (objfile)]; 2625 1.12 christos 2626 1.12 christos n_opt_found = 0; 2627 1.12 christos 2628 1.12 christos if (get_last_source_file ()) 2629 1.12 christos { 2630 1.12 christos /* Check if previous symbol was also an N_SO (with some 2631 1.12 christos sanity checks). If so, that one was actually the 2632 1.12 christos directory name, and the current one is the real file 2633 1.12 christos name. Patch things up. */ 2634 1.12 christos if (previous_stab_code == (unsigned char) N_SO) 2635 1.12 christos { 2636 1.12 christos patch_subfile_names (get_current_subfile (), name); 2637 1.12 christos break; /* Ignore repeated SOs. */ 2638 1.12 christos } 2639 1.12 christos end_compunit_symtab (valu); 2640 1.12 christos end_stabs (); 2641 1.12 christos } 2642 1.12 christos 2643 1.12 christos /* Null name means this just marks the end of text for this .o 2644 1.12 christos file. Don't start a new symtab in this case. */ 2645 1.12 christos if (*name == '\000') 2646 1.12 christos break; 2647 1.12 christos 2648 1.12 christos function_start_offset = 0; 2649 1.12 christos 2650 1.12 christos start_stabs (); 2651 1.12 christos start_compunit_symtab (objfile, name, NULL, valu, language); 2652 1.12 christos record_debugformat ("stabs"); 2653 1.12 christos break; 2654 1.12 christos 2655 1.12 christos case N_SOL: 2656 1.12 christos /* This type of symbol indicates the start of data for a 2657 1.12 christos sub-source-file, one whose contents were copied or included 2658 1.12 christos in the compilation of the main source file (whose name was 2659 1.12 christos given in the N_SO symbol). Relocate for dynamic loading. */ 2660 1.12 christos section_index = SECT_OFF_TEXT (objfile); 2661 1.12 christos valu += section_offsets[SECT_OFF_TEXT (objfile)]; 2662 1.12 christos start_subfile (name); 2663 1.12 christos break; 2664 1.12 christos 2665 1.12 christos case N_BINCL: 2666 1.12 christos push_subfile (); 2667 1.12 christos add_new_header_file (name, valu, objfile); 2668 1.12 christos start_subfile (name); 2669 1.12 christos break; 2670 1.12 christos 2671 1.12 christos case N_EINCL: 2672 1.12 christos start_subfile (pop_subfile ()); 2673 1.12 christos break; 2674 1.12 christos 2675 1.12 christos case N_EXCL: 2676 1.12 christos add_old_header_file (name, valu, objfile); 2677 1.12 christos break; 2678 1.12 christos 2679 1.12 christos case N_SLINE: 2680 1.12 christos /* This type of "symbol" really just records one line-number -- 2681 1.12 christos core-address correspondence. Enter it in the line list for 2682 1.12 christos this symbol table. */ 2683 1.12 christos 2684 1.12 christos /* Relocate for dynamic loading and for ELF acc 2685 1.12 christos function-relative symbols. */ 2686 1.12 christos valu += function_start_offset; 2687 1.12 christos 2688 1.12 christos /* GCC 2.95.3 emits the first N_SLINE stab somewhere in the 2689 1.12 christos middle of the prologue instead of right at the start of the 2690 1.12 christos function. To deal with this we record the address for the 2691 1.12 christos first N_SLINE stab to be the start of the function instead of 2692 1.12 christos the listed location. We really shouldn't to this. When 2693 1.12 christos compiling with optimization, this first N_SLINE stab might be 2694 1.12 christos optimized away. Other (non-GCC) compilers don't emit this 2695 1.12 christos stab at all. There is no real harm in having an extra 2696 1.12 christos numbered line, although it can be a bit annoying for the 2697 1.12 christos user. However, it totally screws up our testsuite. 2698 1.12 christos 2699 1.12 christos So for now, keep adjusting the address of the first N_SLINE 2700 1.12 christos stab, but only for code compiled with GCC. */ 2701 1.12 christos 2702 1.12 christos if (within_function && sline_found_in_function == 0) 2703 1.12 christos { 2704 1.12 christos CORE_ADDR addr = processing_gcc_compilation == 2 ? 2705 1.12 christos last_function_start : valu; 2706 1.12 christos 2707 1.12 christos record_line 2708 1.12 christos (get_current_subfile (), desc, 2709 1.12 christos unrelocated_addr (gdbarch_addr_bits_remove (gdbarch, addr) 2710 1.12 christos - objfile->text_section_offset ())); 2711 1.12 christos sline_found_in_function = 1; 2712 1.12 christos } 2713 1.12 christos else 2714 1.12 christos record_line 2715 1.12 christos (get_current_subfile (), desc, 2716 1.12 christos unrelocated_addr (gdbarch_addr_bits_remove (gdbarch, valu) 2717 1.12 christos - objfile->text_section_offset ())); 2718 1.12 christos break; 2719 1.12 christos 2720 1.12 christos case N_BCOMM: 2721 1.12 christos common_block_start (name, objfile); 2722 1.12 christos break; 2723 1.12 christos 2724 1.12 christos case N_ECOMM: 2725 1.12 christos common_block_end (objfile); 2726 1.12 christos break; 2727 1.12 christos 2728 1.12 christos /* The following symbol types need to have the appropriate 2729 1.12 christos offset added to their value; then we process symbol 2730 1.12 christos definitions in the name. */ 2731 1.12 christos 2732 1.12 christos case N_STSYM: /* Static symbol in data segment. */ 2733 1.12 christos case N_LCSYM: /* Static symbol in BSS segment. */ 2734 1.12 christos case N_ROSYM: /* Static symbol in read-only data segment. */ 2735 1.12 christos /* HORRID HACK DEPT. However, it's Sun's furgin' fault. 2736 1.12 christos Solaris 2's stabs-in-elf makes *most* symbols relative but 2737 1.12 christos leaves a few absolute (at least for Solaris 2.1 and version 2738 1.12 christos 2.0.1 of the SunPRO compiler). N_STSYM and friends sit on 2739 1.12 christos the fence. .stab "foo:S...",N_STSYM is absolute (ld 2740 1.12 christos relocates it) .stab "foo:V...",N_STSYM is relative (section 2741 1.12 christos base subtracted). This leaves us no choice but to search for 2742 1.12 christos the 'S' or 'V'... (or pass the whole section_offsets stuff 2743 1.12 christos down ONE MORE function call level, which we really don't want 2744 1.12 christos to do). */ 2745 1.12 christos { 2746 1.12 christos const char *p; 2747 1.12 christos 2748 1.12 christos /* Normal object file and NLMs have non-zero text seg offsets, 2749 1.12 christos but don't need their static syms offset in this fashion. 2750 1.12 christos XXX - This is really a crock that should be fixed in the 2751 1.12 christos solib handling code so that I don't have to work around it 2752 1.12 christos here. */ 2753 1.12 christos 2754 1.12 christos if (!key->ctx.symfile_relocatable) 2755 1.12 christos { 2756 1.12 christos p = strchr (name, ':'); 2757 1.12 christos if (p != 0 && p[1] == 'S') 2758 1.12 christos { 2759 1.12 christos /* The linker relocated it. We don't want to add a 2760 1.12 christos Sun-stabs Tfoo.foo-like offset, but we *do* 2761 1.12 christos want to add whatever solib.c passed to 2762 1.12 christos symbol_file_add as addr (this is known to affect 2763 1.12 christos SunOS 4, and I suspect ELF too). Since there is no 2764 1.12 christos Ttext.text symbol, we can get addr from the text offset. */ 2765 1.12 christos section_index = SECT_OFF_TEXT (objfile); 2766 1.12 christos valu += section_offsets[SECT_OFF_TEXT (objfile)]; 2767 1.12 christos goto define_a_symbol; 2768 1.12 christos } 2769 1.12 christos } 2770 1.12 christos /* Since it's not the kludge case, re-dispatch to the right 2771 1.12 christos handler. */ 2772 1.12 christos switch (type) 2773 1.12 christos { 2774 1.12 christos case N_STSYM: 2775 1.12 christos goto case_N_STSYM; 2776 1.12 christos case N_LCSYM: 2777 1.12 christos goto case_N_LCSYM; 2778 1.12 christos case N_ROSYM: 2779 1.12 christos goto case_N_ROSYM; 2780 1.12 christos default: 2781 1.12 christos internal_error (_("failed internal consistency check")); 2782 1.12 christos } 2783 1.12 christos } 2784 1.12 christos 2785 1.12 christos case_N_STSYM: /* Static symbol in data segment. */ 2786 1.12 christos case N_DSLINE: /* Source line number, data segment. */ 2787 1.12 christos section_index = SECT_OFF_DATA (objfile); 2788 1.12 christos valu += section_offsets[SECT_OFF_DATA (objfile)]; 2789 1.12 christos goto define_a_symbol; 2790 1.12 christos 2791 1.12 christos case_N_LCSYM: /* Static symbol in BSS segment. */ 2792 1.12 christos case N_BSLINE: /* Source line number, BSS segment. */ 2793 1.12 christos /* N_BROWS: overlaps with N_BSLINE. */ 2794 1.12 christos section_index = SECT_OFF_BSS (objfile); 2795 1.12 christos valu += section_offsets[SECT_OFF_BSS (objfile)]; 2796 1.12 christos goto define_a_symbol; 2797 1.12 christos 2798 1.12 christos case_N_ROSYM: /* Static symbol in read-only data segment. */ 2799 1.12 christos section_index = SECT_OFF_RODATA (objfile); 2800 1.12 christos valu += section_offsets[SECT_OFF_RODATA (objfile)]; 2801 1.12 christos goto define_a_symbol; 2802 1.12 christos 2803 1.12 christos case N_ENTRY: /* Alternate entry point. */ 2804 1.12 christos /* Relocate for dynamic loading. */ 2805 1.12 christos section_index = SECT_OFF_TEXT (objfile); 2806 1.12 christos valu += section_offsets[SECT_OFF_TEXT (objfile)]; 2807 1.12 christos goto define_a_symbol; 2808 1.12 christos 2809 1.12 christos /* The following symbol types we don't know how to process. 2810 1.12 christos Handle them in a "default" way, but complain to people who 2811 1.12 christos care. */ 2812 1.12 christos default: 2813 1.12 christos case N_CATCH: /* Exception handler catcher. */ 2814 1.12 christos case N_EHDECL: /* Exception handler name. */ 2815 1.12 christos case N_PC: /* Global symbol in Pascal. */ 2816 1.12 christos case N_M2C: /* Modula-2 compilation unit. */ 2817 1.12 christos /* N_MOD2: overlaps with N_EHDECL. */ 2818 1.12 christos case N_SCOPE: /* Modula-2 scope information. */ 2819 1.12 christos case N_ECOML: /* End common (local name). */ 2820 1.12 christos case N_NBTEXT: /* Gould Non-Base-Register symbols??? */ 2821 1.12 christos case N_NBDATA: 2822 1.12 christos case N_NBBSS: 2823 1.12 christos case N_NBSTS: 2824 1.12 christos case N_NBLCS: 2825 1.12 christos unknown_symtype_complaint (hex_string (type)); 2826 1.12 christos 2827 1.12 christos define_a_symbol: 2828 1.12 christos [[fallthrough]]; 2829 1.12 christos /* These symbol types don't need the address field relocated, 2830 1.12 christos since it is either unused, or is absolute. */ 2831 1.12 christos case N_GSYM: /* Global variable. */ 2832 1.12 christos case N_NSYMS: /* Number of symbols (Ultrix). */ 2833 1.12 christos case N_NOMAP: /* No map? (Ultrix). */ 2834 1.12 christos case N_RSYM: /* Register variable. */ 2835 1.12 christos case N_DEFD: /* Modula-2 GNU module dependency. */ 2836 1.12 christos case N_SSYM: /* Struct or union element. */ 2837 1.12 christos case N_LSYM: /* Local symbol in stack. */ 2838 1.12 christos case N_PSYM: /* Parameter variable. */ 2839 1.12 christos case N_LENG: /* Length of preceding symbol type. */ 2840 1.12 christos if (name) 2841 1.12 christos { 2842 1.12 christos int deftype; 2843 1.12 christos const char *colon_pos = strchr (name, ':'); 2844 1.12 christos 2845 1.12 christos if (colon_pos == NULL) 2846 1.12 christos deftype = '\0'; 2847 1.12 christos else 2848 1.12 christos deftype = colon_pos[1]; 2849 1.12 christos 2850 1.12 christos switch (deftype) 2851 1.12 christos { 2852 1.12 christos case 'f': 2853 1.12 christos case 'F': 2854 1.12 christos /* Deal with the SunPRO 3.0 compiler which omits the 2855 1.12 christos address from N_FUN symbols. */ 2856 1.12 christos if (type == N_FUN 2857 1.12 christos && valu == section_offsets[SECT_OFF_TEXT (objfile)] 2858 1.12 christos && gdbarch_sofun_address_maybe_missing (gdbarch)) 2859 1.12 christos { 2860 1.12 christos bound_minimal_symbol minsym 2861 1.12 christos = find_stab_function (name, get_last_source_file (), 2862 1.12 christos objfile); 2863 1.12 christos if (minsym.minsym != NULL) 2864 1.12 christos valu = minsym.value_address (); 2865 1.12 christos } 2866 1.12 christos 2867 1.12 christos /* These addresses are absolute. */ 2868 1.12 christos function_start_offset = valu; 2869 1.12 christos 2870 1.12 christos within_function = 1; 2871 1.12 christos 2872 1.12 christos if (get_context_stack_depth () > 1) 2873 1.12 christos { 2874 1.12 christos complaint (_("unmatched N_LBRAC before symtab pos %d"), 2875 1.12 christos symnum); 2876 1.12 christos break; 2877 1.12 christos } 2878 1.12 christos 2879 1.12 christos if (!outermost_context_p ()) 2880 1.12 christos { 2881 1.12 christos struct block *block; 2882 1.12 christos 2883 1.12 christos cstk = pop_context (); 2884 1.12 christos /* Make a block for the local symbols within. */ 2885 1.12 christos block = finish_block (cstk.name, 2886 1.12 christos cstk.old_blocks, NULL, 2887 1.12 christos cstk.start_addr, valu); 2888 1.12 christos 2889 1.12 christos /* For C++, set the block's scope. */ 2890 1.12 christos if (cstk.name->language () == language_cplus) 2891 1.12 christos cp_set_block_scope (cstk.name, block, 2892 1.12 christos &objfile->objfile_obstack); 2893 1.12 christos } 2894 1.12 christos 2895 1.12 christos newobj = push_context (0, valu); 2896 1.12 christos newobj->name = define_symbol (valu, name, desc, type, objfile); 2897 1.12 christos if (newobj->name != nullptr) 2898 1.12 christos newobj->name->set_section_index (section_index); 2899 1.12 christos break; 2900 1.12 christos 2901 1.12 christos default: 2902 1.12 christos { 2903 1.12 christos struct symbol *sym = define_symbol (valu, name, desc, type, 2904 1.12 christos objfile); 2905 1.12 christos if (sym != nullptr) 2906 1.12 christos sym->set_section_index (section_index); 2907 1.12 christos } 2908 1.12 christos break; 2909 1.12 christos } 2910 1.12 christos } 2911 1.12 christos break; 2912 1.12 christos 2913 1.12 christos /* We use N_OPT to carry the gcc2_compiled flag. Sun uses it 2914 1.12 christos for a bunch of other flags, too. Someday we may parse their 2915 1.12 christos flags; for now we ignore theirs and hope they'll ignore ours. */ 2916 1.12 christos case N_OPT: /* Solaris 2: Compiler options. */ 2917 1.12 christos if (name) 2918 1.12 christos { 2919 1.12 christos if (strcmp (name, GCC2_COMPILED_FLAG_SYMBOL) == 0) 2920 1.12 christos { 2921 1.12 christos processing_gcc_compilation = 2; 2922 1.12 christos } 2923 1.12 christos else 2924 1.12 christos n_opt_found = 1; 2925 1.12 christos } 2926 1.12 christos break; 2927 1.12 christos 2928 1.12 christos case N_MAIN: /* Name of main routine. */ 2929 1.12 christos /* FIXME: If one has a symbol file with N_MAIN and then replaces 2930 1.12 christos it with a symbol file with "main" and without N_MAIN. I'm 2931 1.12 christos not sure exactly what rule to follow but probably something 2932 1.12 christos like: N_MAIN takes precedence over "main" no matter what 2933 1.12 christos objfile it is in; If there is more than one N_MAIN, choose 2934 1.12 christos the one in the symfile_objfile; If there is more than one 2935 1.12 christos N_MAIN within a given objfile, complain() and choose 2936 1.12 christos arbitrarily. (kingdon) */ 2937 1.12 christos if (name != NULL) 2938 1.12 christos set_objfile_main_name (objfile, name, language_unknown); 2939 1.12 christos break; 2940 1.12 christos 2941 1.12 christos /* The following symbol types can be ignored. */ 2942 1.12 christos case N_OBJ: /* Solaris 2: Object file dir and name. */ 2943 1.12 christos case N_PATCH: /* Solaris 2: Patch Run Time Checker. */ 2944 1.12 christos /* N_UNDF: Solaris 2: File separator mark. */ 2945 1.12 christos /* N_UNDF: -- we will never encounter it, since we only process 2946 1.12 christos one file's symbols at once. */ 2947 1.12 christos case N_ENDM: /* Solaris 2: End of module. */ 2948 1.12 christos case N_ALIAS: /* SunPro F77: alias name, ignore for now. */ 2949 1.12 christos break; 2950 1.12 christos } 2951 1.12 christos 2952 1.12 christos /* '#' is a GNU C extension to allow one symbol to refer to another 2953 1.12 christos related symbol. 2954 1.12 christos 2955 1.12 christos Generally this is used so that an alias can refer to its main 2956 1.12 christos symbol. */ 2957 1.12 christos gdb_assert (name); 2958 1.12 christos if (name[0] == '#') 2959 1.12 christos { 2960 1.12 christos /* Initialize symbol reference names and determine if this is a 2961 1.12 christos definition. If a symbol reference is being defined, go ahead 2962 1.12 christos and add it. Otherwise, just return. */ 2963 1.12 christos 2964 1.12 christos const char *s = name; 2965 1.12 christos int refnum; 2966 1.12 christos 2967 1.12 christos /* If this stab defines a new reference ID that is not on the 2968 1.12 christos reference list, then put it on the reference list. 2969 1.12 christos 2970 1.12 christos We go ahead and advance NAME past the reference, even though 2971 1.12 christos it is not strictly necessary at this time. */ 2972 1.12 christos refnum = symbol_reference_defined (&s); 2973 1.12 christos if (refnum >= 0) 2974 1.12 christos if (!ref_search (refnum)) 2975 1.12 christos ref_add (refnum, 0, name, valu); 2976 1.12 christos name = s; 2977 1.12 christos } 2978 1.12 christos 2979 1.1 christos previous_stab_code = type; 2980 1.1 christos } 2981 1.1 christos 2982 1.1 christos #define VISIBILITY_PRIVATE '0' /* Stabs character for private field */ 2983 1.1 christos #define VISIBILITY_PROTECTED '1' /* Stabs character for protected fld */ 2984 1.1 christos #define VISIBILITY_PUBLIC '2' /* Stabs character for public field */ 2985 1.1 christos #define VISIBILITY_IGNORE '9' /* Optimized out or zero length */ 2986 1.1 christos 2987 1.1 christos /* Structure for storing pointers to reference definitions for fast lookup 2988 1.1 christos during "process_later". */ 2989 1.7 christos 2990 1.1 christos struct ref_map 2991 1.1 christos { 2992 1.1 christos const char *stabs; 2993 1.1 christos CORE_ADDR value; 2994 1.1 christos struct symbol *sym; 2995 1.1 christos }; 2996 1.1 christos 2997 1.1 christos #define MAX_CHUNK_REFS 100 2998 1.1 christos #define REF_CHUNK_SIZE (MAX_CHUNK_REFS * sizeof (struct ref_map)) 2999 1.1 christos #define REF_MAP_SIZE(ref_chunk) ((ref_chunk) * REF_CHUNK_SIZE) 3000 1.1 christos 3001 1.1 christos static struct ref_map *ref_map; 3002 1.1 christos 3003 1.1 christos /* Ptr to free cell in chunk's linked list. */ 3004 1.1 christos static int ref_count = 0; 3005 1.1 christos 3006 1.1 christos /* Number of chunks malloced. */ 3007 1.1 christos static int ref_chunk = 0; 3008 1.1 christos 3009 1.1 christos /* This file maintains a cache of stabs aliases found in the symbol 3010 1.1 christos table. If the symbol table changes, this cache must be cleared 3011 1.1 christos or we are left holding onto data in invalid obstacks. */ 3012 1.1 christos void 3013 1.1 christos stabsread_clear_cache (void) 3014 1.1 christos { 3015 1.1 christos ref_count = 0; 3016 1.1 christos ref_chunk = 0; 3017 1.1 christos } 3018 1.1 christos 3019 1.1 christos /* Create array of pointers mapping refids to symbols and stab strings. 3020 1.1 christos Add pointers to reference definition symbols and/or their values as we 3021 1.7 christos find them, using their reference numbers as our index. 3022 1.1 christos These will be used later when we resolve references. */ 3023 1.1 christos void 3024 1.1 christos ref_add (int refnum, struct symbol *sym, const char *stabs, CORE_ADDR value) 3025 1.1 christos { 3026 1.1 christos if (ref_count == 0) 3027 1.1 christos ref_chunk = 0; 3028 1.1 christos if (refnum >= ref_count) 3029 1.1 christos ref_count = refnum + 1; 3030 1.1 christos if (ref_count > ref_chunk * MAX_CHUNK_REFS) 3031 1.1 christos { 3032 1.1 christos int new_slots = ref_count - ref_chunk * MAX_CHUNK_REFS; 3033 1.1 christos int new_chunks = new_slots / MAX_CHUNK_REFS + 1; 3034 1.1 christos 3035 1.1 christos ref_map = (struct ref_map *) 3036 1.1 christos xrealloc (ref_map, REF_MAP_SIZE (ref_chunk + new_chunks)); 3037 1.1 christos memset (ref_map + ref_chunk * MAX_CHUNK_REFS, 0, 3038 1.1 christos new_chunks * REF_CHUNK_SIZE); 3039 1.1 christos ref_chunk += new_chunks; 3040 1.1 christos } 3041 1.1 christos ref_map[refnum].stabs = stabs; 3042 1.1 christos ref_map[refnum].sym = sym; 3043 1.1 christos ref_map[refnum].value = value; 3044 1.1 christos } 3045 1.1 christos 3046 1.1 christos /* Return defined sym for the reference REFNUM. */ 3047 1.1 christos struct symbol * 3048 1.1 christos ref_search (int refnum) 3049 1.1 christos { 3050 1.1 christos if (refnum < 0 || refnum > ref_count) 3051 1.1 christos return 0; 3052 1.1 christos return ref_map[refnum].sym; 3053 1.1 christos } 3054 1.1 christos 3055 1.1 christos /* Parse a reference id in STRING and return the resulting 3056 1.7 christos reference number. Move STRING beyond the reference id. */ 3057 1.1 christos 3058 1.7 christos static int 3059 1.1 christos process_reference (const char **string) 3060 1.1 christos { 3061 1.1 christos const char *p; 3062 1.1 christos int refnum = 0; 3063 1.1 christos 3064 1.1 christos if (**string != '#') 3065 1.1 christos return 0; 3066 1.1 christos 3067 1.1 christos /* Advance beyond the initial '#'. */ 3068 1.11 christos p = *string + 1; 3069 1.1 christos 3070 1.1 christos /* Read number as reference id. */ 3071 1.1 christos while (*p && isdigit ((unsigned char)*p)) 3072 1.1 christos { 3073 1.1 christos refnum = refnum * 10 + *p - '0'; 3074 1.1 christos p++; 3075 1.1 christos } 3076 1.1 christos *string = p; 3077 1.1 christos return refnum; 3078 1.1 christos } 3079 1.1 christos 3080 1.1 christos /* If STRING defines a reference, store away a pointer to the reference 3081 1.7 christos definition for later use. Return the reference number. */ 3082 1.1 christos 3083 1.7 christos int 3084 1.1 christos symbol_reference_defined (const char **string) 3085 1.1 christos { 3086 1.1 christos const char *p = *string; 3087 1.1 christos int refnum = 0; 3088 1.1 christos 3089 1.1 christos refnum = process_reference (&p); 3090 1.1 christos 3091 1.1 christos /* Defining symbols end in '='. */ 3092 1.1 christos if (*p == '=') 3093 1.1 christos { 3094 1.1 christos /* Symbol is being defined here. */ 3095 1.1 christos *string = p + 1; 3096 1.1 christos return refnum; 3097 1.1 christos } 3098 1.10 christos else 3099 1.1 christos { 3100 1.1 christos /* Must be a reference. Either the symbol has already been defined, 3101 1.1 christos or this is a forward reference to it. */ 3102 1.1 christos *string = p; 3103 1.1 christos return -1; 3104 1.1 christos } 3105 1.1 christos } 3106 1.1 christos 3107 1.10 christos static int 3108 1.1 christos stab_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch) 3109 1.8 christos { 3110 1.8 christos int regno = gdbarch_stab_reg_to_regnum (gdbarch, sym->value_longest ()); 3111 1.8 christos 3112 1.9 christos if (regno < 0 || regno >= gdbarch_num_cooked_regs (gdbarch)) 3113 1.1 christos { 3114 1.1 christos reg_value_complaint (regno, gdbarch_num_cooked_regs (gdbarch), 3115 1.1 christos sym->print_name ()); 3116 1.1 christos 3117 1.1 christos regno = gdbarch_sp_regnum (gdbarch); /* Known safe, though useless. */ 3118 1.1 christos } 3119 1.1 christos 3120 1.1 christos return regno; 3121 1.1 christos } 3122 1.1 christos 3123 1.1 christos static const struct symbol_register_ops stab_register_funcs = { 3124 1.1 christos stab_reg_to_regnum 3125 1.1 christos }; 3126 1.1 christos 3127 1.1 christos /* The "aclass" indices for computed symbols. */ 3128 1.1 christos 3129 1.1 christos static int stab_register_index; 3130 1.7 christos static int stab_regparm_index; 3131 1.1 christos 3132 1.1 christos struct symbol * 3133 1.9 christos define_symbol (CORE_ADDR valu, const char *string, int desc, int type, 3134 1.1 christos struct objfile *objfile) 3135 1.7 christos { 3136 1.1 christos struct gdbarch *gdbarch = objfile->arch (); 3137 1.1 christos struct symbol *sym; 3138 1.1 christos const char *p = find_name_end (string); 3139 1.1 christos int deftype; 3140 1.1 christos int synonym = 0; 3141 1.1 christos int i; 3142 1.1 christos 3143 1.1 christos /* We would like to eliminate nameless symbols, but keep their types. 3144 1.1 christos E.g. stab entry ":t10=*2" should produce a type 10, which is a pointer 3145 1.1 christos to type 2, but, should not create a symbol to address that type. Since 3146 1.1 christos the symbol will be nameless, there is no way any user can refer to it. */ 3147 1.1 christos 3148 1.1 christos int nameless; 3149 1.1 christos 3150 1.1 christos /* Ignore syms with empty names. */ 3151 1.1 christos if (string[0] == 0) 3152 1.1 christos return 0; 3153 1.1 christos 3154 1.1 christos /* Ignore old-style symbols from cc -go. */ 3155 1.1 christos if (p == 0) 3156 1.1 christos return 0; 3157 1.1 christos 3158 1.1 christos while (p[1] == ':') 3159 1.1 christos { 3160 1.1 christos p += 2; 3161 1.8 christos p = strchr (p, ':'); 3162 1.1 christos if (p == NULL) 3163 1.1 christos { 3164 1.1 christos complaint ( 3165 1.1 christos _("Bad stabs string '%s'"), string); 3166 1.1 christos return NULL; 3167 1.1 christos } 3168 1.1 christos } 3169 1.1 christos 3170 1.1 christos /* If a nameless stab entry, all we need is the type, not the symbol. 3171 1.9 christos e.g. ":t10=*2" or a nameless enum like " :T16=ered:0,green:1,blue:2,;" */ 3172 1.1 christos nameless = (p == string || ((string[0] == ' ') && (string[1] == ':'))); 3173 1.1 christos 3174 1.1 christos current_symbol = sym = new (&objfile->objfile_obstack) symbol; 3175 1.1 christos 3176 1.10 christos if (processing_gcc_compilation) 3177 1.10 christos { 3178 1.1 christos /* GCC 2.x puts the line number in desc. SunOS apparently puts in the 3179 1.1 christos number of bytes occupied by a type or object, which we ignore. */ 3180 1.1 christos sym->set_line (desc); 3181 1.10 christos } 3182 1.1 christos else 3183 1.1 christos { 3184 1.9 christos sym->set_line (0); /* unknown */ 3185 1.9 christos } 3186 1.3 christos 3187 1.1 christos sym->set_language (get_current_subfile ()->language, 3188 1.1 christos &objfile->objfile_obstack); 3189 1.1 christos 3190 1.1 christos if (is_cplus_marker (string[0])) 3191 1.1 christos { 3192 1.1 christos /* Special GNU C++ names. */ 3193 1.9 christos switch (string[1]) 3194 1.1 christos { 3195 1.1 christos case 't': 3196 1.1 christos sym->set_linkage_name ("this"); 3197 1.1 christos break; 3198 1.1 christos 3199 1.1 christos case 'v': /* $vtbl_ptr_type */ 3200 1.9 christos goto normal; 3201 1.1 christos 3202 1.1 christos case 'e': 3203 1.1 christos sym->set_linkage_name ("eh_throw"); 3204 1.1 christos break; 3205 1.1 christos 3206 1.1 christos case '_': 3207 1.1 christos /* This was an anonymous type that was never fixed up. */ 3208 1.8 christos goto normal; 3209 1.1 christos 3210 1.1 christos default: 3211 1.1 christos complaint (_("Unknown C++ symbol name `%s'"), 3212 1.1 christos string); 3213 1.1 christos goto normal; /* Do *something* with it. */ 3214 1.1 christos } 3215 1.1 christos } 3216 1.9 christos else 3217 1.7 christos { 3218 1.9 christos normal: 3219 1.1 christos gdb::unique_xmalloc_ptr<char> new_name; 3220 1.10 christos 3221 1.10 christos if (sym->language () == language_cplus) 3222 1.10 christos { 3223 1.10 christos std::string name (string, p - string); 3224 1.10 christos new_name = cp_canonicalize_string (name.c_str ()); 3225 1.10 christos } 3226 1.10 christos else if (sym->language () == language_c) 3227 1.1 christos { 3228 1.9 christos std::string name (string, p - string); 3229 1.9 christos new_name = c_canonicalize_name (name.c_str ()); 3230 1.1 christos } 3231 1.11 christos if (new_name != nullptr) 3232 1.9 christos sym->compute_and_set_names (new_name.get (), true, objfile->per_bfd); 3233 1.1 christos else 3234 1.9 christos sym->compute_and_set_names (std::string_view (string, p - string), true, 3235 1.8 christos objfile->per_bfd); 3236 1.8 christos 3237 1.1 christos if (sym->language () == language_cplus) 3238 1.1 christos cp_scan_for_anonymous_namespaces (get_buildsym_compunit (), sym, 3239 1.1 christos objfile); 3240 1.1 christos 3241 1.1 christos } 3242 1.1 christos p++; 3243 1.1 christos 3244 1.1 christos /* Determine the type of name being defined. */ 3245 1.1 christos #if 0 3246 1.1 christos /* Getting GDB to correctly skip the symbol on an undefined symbol 3247 1.1 christos descriptor and not ever dump core is a very dodgy proposition if 3248 1.1 christos we do things this way. I say the acorn RISC machine can just 3249 1.1 christos fix their compiler. */ 3250 1.1 christos /* The Acorn RISC machine's compiler can put out locals that don't 3251 1.1 christos start with "234=" or "(3,4)=", so assume anything other than the 3252 1.11 christos deftypes we know how to handle is a local. */ 3253 1.1 christos if (!strchr ("cfFGpPrStTvVXCR", *p)) 3254 1.1 christos #else 3255 1.1 christos if (isdigit ((unsigned char)*p) || *p == '(' || *p == '-') 3256 1.1 christos #endif 3257 1.1 christos deftype = 'l'; 3258 1.1 christos else 3259 1.1 christos deftype = *p++; 3260 1.1 christos 3261 1.1 christos switch (deftype) 3262 1.10 christos { 3263 1.10 christos case 'c': 3264 1.10 christos /* c is a special case, not followed by a type-number. 3265 1.10 christos SYMBOL:c=iVALUE for an integer constant symbol. 3266 1.10 christos SYMBOL:c=rVALUE for a floating constant symbol. 3267 1.1 christos SYMBOL:c=eTYPE,INTVALUE for an enum constant symbol. 3268 1.1 christos e.g. "b:c=e6,0" for "const b = blob1" 3269 1.10 christos (where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;"). */ 3270 1.10 christos if (*p != '=') 3271 1.10 christos { 3272 1.8 christos sym->set_aclass_index (LOC_CONST); 3273 1.1 christos sym->set_type (error_type (&p, objfile)); 3274 1.1 christos sym->set_domain (VAR_DOMAIN); 3275 1.1 christos add_symbol_to_list (sym, get_file_symbols ()); 3276 1.1 christos return sym; 3277 1.1 christos } 3278 1.1 christos ++p; 3279 1.1 christos switch (*p++) 3280 1.1 christos { 3281 1.1 christos case 'r': 3282 1.1 christos { 3283 1.11 christos gdb_byte *dbl_valu; 3284 1.6 christos struct type *dbl_type; 3285 1.6 christos 3286 1.10 christos dbl_type = builtin_type (objfile)->builtin_double; 3287 1.8 christos dbl_valu 3288 1.8 christos = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack, 3289 1.1 christos dbl_type->length ()); 3290 1.10 christos 3291 1.10 christos target_float_from_string (dbl_valu, dbl_type, std::string (p)); 3292 1.10 christos 3293 1.1 christos sym->set_type (dbl_type); 3294 1.1 christos sym->set_value_bytes (dbl_valu); 3295 1.1 christos sym->set_aclass_index (LOC_CONST_BYTES); 3296 1.1 christos } 3297 1.1 christos break; 3298 1.1 christos case 'i': 3299 1.1 christos { 3300 1.1 christos /* Defining integer constants this way is kind of silly, 3301 1.1 christos since 'e' constants allows the compiler to give not 3302 1.1 christos only the value, but the type as well. C has at least 3303 1.1 christos int, long, unsigned int, and long long as constant 3304 1.11 christos types; other languages probably should have at least 3305 1.10 christos unsigned as well as signed constants. */ 3306 1.10 christos 3307 1.1 christos sym->set_type (builtin_type (objfile)->builtin_long); 3308 1.1 christos sym->set_value_longest (atoi (p)); 3309 1.1 christos sym->set_aclass_index (LOC_CONST); 3310 1.1 christos } 3311 1.1 christos break; 3312 1.11 christos 3313 1.10 christos case 'c': 3314 1.10 christos { 3315 1.1 christos sym->set_type (builtin_type (objfile)->builtin_char); 3316 1.1 christos sym->set_value_longest (atoi (p)); 3317 1.1 christos sym->set_aclass_index (LOC_CONST); 3318 1.1 christos } 3319 1.1 christos break; 3320 1.1 christos 3321 1.1 christos case 's': 3322 1.1 christos { 3323 1.1 christos struct type *range_type; 3324 1.1 christos int ind = 0; 3325 1.1 christos char quote = *p++; 3326 1.1 christos gdb_byte *string_local = (gdb_byte *) alloca (strlen (p)); 3327 1.1 christos gdb_byte *string_value; 3328 1.10 christos 3329 1.10 christos if (quote != '\'' && quote != '"') 3330 1.10 christos { 3331 1.8 christos sym->set_aclass_index (LOC_CONST); 3332 1.1 christos sym->set_type (error_type (&p, objfile)); 3333 1.1 christos sym->set_domain (VAR_DOMAIN); 3334 1.1 christos add_symbol_to_list (sym, get_file_symbols ()); 3335 1.1 christos return sym; 3336 1.1 christos } 3337 1.1 christos 3338 1.1 christos /* Find matching quote, rejecting escaped quotes. */ 3339 1.1 christos while (*p && *p != quote) 3340 1.1 christos { 3341 1.1 christos if (*p == '\\' && p[1] == quote) 3342 1.1 christos { 3343 1.1 christos string_local[ind] = (gdb_byte) quote; 3344 1.1 christos ind++; 3345 1.1 christos p += 2; 3346 1.1 christos } 3347 1.1 christos else if (*p) 3348 1.1 christos { 3349 1.1 christos string_local[ind] = (gdb_byte) (*p); 3350 1.1 christos ind++; 3351 1.1 christos p++; 3352 1.1 christos } 3353 1.10 christos } 3354 1.10 christos if (*p != quote) 3355 1.10 christos { 3356 1.8 christos sym->set_aclass_index (LOC_CONST); 3357 1.1 christos sym->set_type (error_type (&p, objfile)); 3358 1.1 christos sym->set_domain (VAR_DOMAIN); 3359 1.1 christos add_symbol_to_list (sym, get_file_symbols ()); 3360 1.1 christos return sym; 3361 1.1 christos } 3362 1.11 christos 3363 1.1 christos /* NULL terminate the string. */ 3364 1.11 christos string_local[ind] = 0; 3365 1.11 christos type_allocator alloc (objfile, get_current_subfile ()->language); 3366 1.3 christos range_type 3367 1.10 christos = create_static_range_type (alloc, 3368 1.11 christos builtin_type (objfile)->builtin_int, 3369 1.10 christos 0, ind); 3370 1.6 christos sym->set_type 3371 1.6 christos (create_array_type (alloc, builtin_type (objfile)->builtin_char, 3372 1.1 christos range_type)); 3373 1.1 christos string_value 3374 1.1 christos = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack, ind + 1); 3375 1.10 christos memcpy (string_value, string_local, ind + 1); 3376 1.10 christos p++; 3377 1.1 christos 3378 1.1 christos sym->set_value_bytes (string_value); 3379 1.1 christos sym->set_aclass_index (LOC_CONST_BYTES); 3380 1.1 christos } 3381 1.1 christos break; 3382 1.1 christos 3383 1.1 christos case 'e': 3384 1.1 christos /* SYMBOL:c=eTYPE,INTVALUE for a constant symbol whose value 3385 1.1 christos can be represented as integral. 3386 1.10 christos e.g. "b:c=e6,0" for "const b = blob1" 3387 1.10 christos (where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;"). */ 3388 1.1 christos { 3389 1.1 christos sym->set_aclass_index (LOC_CONST); 3390 1.1 christos sym->set_type (read_type (&p, objfile)); 3391 1.10 christos 3392 1.1 christos if (*p != ',') 3393 1.1 christos { 3394 1.1 christos sym->set_type (error_type (&p, objfile)); 3395 1.1 christos break; 3396 1.1 christos } 3397 1.1 christos ++p; 3398 1.1 christos 3399 1.1 christos /* If the value is too big to fit in an int (perhaps because 3400 1.1 christos it is unsigned), or something like that, we silently get 3401 1.1 christos a bogus value. The type and everything else about it is 3402 1.10 christos correct. Ideally, we should be using whatever we have 3403 1.1 christos available for parsing unsigned and long long values, 3404 1.1 christos however. */ 3405 1.1 christos sym->set_value_longest (atoi (p)); 3406 1.1 christos } 3407 1.10 christos break; 3408 1.10 christos default: 3409 1.1 christos { 3410 1.1 christos sym->set_aclass_index (LOC_CONST); 3411 1.10 christos sym->set_type (error_type (&p, objfile)); 3412 1.8 christos } 3413 1.1 christos } 3414 1.1 christos sym->set_domain (VAR_DOMAIN); 3415 1.1 christos add_symbol_to_list (sym, get_file_symbols ()); 3416 1.1 christos return sym; 3417 1.10 christos 3418 1.10 christos case 'C': 3419 1.10 christos /* The name of a caught exception. */ 3420 1.10 christos sym->set_type (read_type (&p, objfile)); 3421 1.8 christos sym->set_aclass_index (LOC_LABEL); 3422 1.1 christos sym->set_domain (VAR_DOMAIN); 3423 1.1 christos sym->set_value_address (valu); 3424 1.1 christos add_symbol_to_list (sym, get_local_symbols ()); 3425 1.1 christos break; 3426 1.10 christos 3427 1.10 christos case 'f': 3428 1.11 christos /* A static function definition. */ 3429 1.8 christos sym->set_type (read_type (&p, objfile)); 3430 1.1 christos sym->set_aclass_index (LOC_BLOCK); 3431 1.1 christos sym->set_domain (FUNCTION_DOMAIN); 3432 1.1 christos add_symbol_to_list (sym, get_file_symbols ()); 3433 1.1 christos /* fall into process_function_types. */ 3434 1.10 christos 3435 1.10 christos process_function_types: 3436 1.10 christos /* Function result types are described as the result type in stabs. 3437 1.10 christos We need to convert this to the function-returning-type-X type 3438 1.1 christos in GDB. E.g. "int" is converted to "function returning int". */ 3439 1.1 christos if (sym->type ()->code () != TYPE_CODE_FUNC) 3440 1.10 christos sym->set_type (lookup_function_type (sym->type ())); 3441 1.10 christos 3442 1.10 christos /* All functions in C++ have prototypes. Stabs does not offer an 3443 1.10 christos explicit way to identify prototyped or unprototyped functions, 3444 1.10 christos but both GCC and Sun CC emit stabs for the "call-as" type rather 3445 1.10 christos than the "declared-as" type for unprototyped functions, so 3446 1.1 christos we treat all functions as if they were prototyped. This is used 3447 1.1 christos primarily for promotion when calling the function from GDB. */ 3448 1.1 christos sym->type ()->set_is_prototyped (true); 3449 1.1 christos 3450 1.1 christos /* fall into process_prototype_types. */ 3451 1.1 christos 3452 1.1 christos process_prototype_types: 3453 1.10 christos /* Sun acc puts declared types of arguments here. */ 3454 1.1 christos if (*p == ';') 3455 1.1 christos { 3456 1.7 christos struct type *ftype = sym->type (); 3457 1.1 christos int nsemi = 0; 3458 1.1 christos int nparams = 0; 3459 1.1 christos const char *p1 = p; 3460 1.1 christos 3461 1.1 christos /* Obtain a worst case guess for the number of arguments 3462 1.1 christos by counting the semicolons. */ 3463 1.1 christos while (*p1) 3464 1.1 christos { 3465 1.1 christos if (*p1++ == ';') 3466 1.1 christos nsemi++; 3467 1.11 christos } 3468 1.1 christos 3469 1.1 christos /* Allocate parameter information fields and fill them in. */ 3470 1.1 christos ftype->alloc_fields (nsemi); 3471 1.1 christos while (*p++ == ';') 3472 1.1 christos { 3473 1.10 christos struct type *ptype; 3474 1.1 christos 3475 1.1 christos /* A type number of zero indicates the start of varargs. 3476 1.1 christos FIXME: GDB currently ignores vararg functions. */ 3477 1.1 christos if (p[0] == '0' && p[1] == '\0') 3478 1.1 christos break; 3479 1.10 christos ptype = read_type (&p, objfile); 3480 1.10 christos 3481 1.10 christos /* The Sun compilers mark integer arguments, which should 3482 1.10 christos be promoted to the width of the calling conventions, with 3483 1.10 christos a type which references itself. This type is turned into 3484 1.9 christos a TYPE_CODE_VOID type by read_type, and we have to turn 3485 1.11 christos it back into builtin_int here. 3486 1.9 christos FIXME: Do we need a new builtin_promoted_int_arg ? */ 3487 1.11 christos if (ptype->code () == TYPE_CODE_VOID) 3488 1.11 christos ptype = builtin_type (objfile)->builtin_int; 3489 1.1 christos ftype->field (nparams).set_type (ptype); 3490 1.9 christos ftype->field (nparams).set_is_artificial (false); 3491 1.10 christos nparams++; 3492 1.1 christos } 3493 1.1 christos ftype->set_num_fields (nparams); 3494 1.1 christos ftype->set_is_prototyped (true); 3495 1.1 christos } 3496 1.1 christos break; 3497 1.10 christos 3498 1.10 christos case 'F': 3499 1.11 christos /* A global function definition. */ 3500 1.8 christos sym->set_type (read_type (&p, objfile)); 3501 1.1 christos sym->set_aclass_index (LOC_BLOCK); 3502 1.1 christos sym->set_domain (FUNCTION_DOMAIN); 3503 1.1 christos add_symbol_to_list (sym, get_global_symbols ()); 3504 1.1 christos goto process_function_types; 3505 1.10 christos 3506 1.10 christos case 'G': 3507 1.10 christos /* For a class G (global) symbol, it appears that the 3508 1.10 christos value is not correct. It is necessary to search for the 3509 1.10 christos corresponding linker definition to find the value. 3510 1.10 christos These definitions appear at the end of the namelist. */ 3511 1.1 christos sym->set_type (read_type (&p, objfile)); 3512 1.10 christos sym->set_aclass_index (LOC_STATIC); 3513 1.10 christos sym->set_domain (VAR_DOMAIN); 3514 1.10 christos /* Don't add symbol references to global_sym_chain. 3515 1.9 christos Symbol references don't have valid names and wont't match up with 3516 1.1 christos minimal symbols when the global_sym_chain is relocated. 3517 1.9 christos We'll fixup symbol references when we fixup the defining symbol. */ 3518 1.10 christos if (sym->linkage_name () && sym->linkage_name ()[0] != '#') 3519 1.1 christos { 3520 1.1 christos i = hashname (sym->linkage_name ()); 3521 1.8 christos sym->set_value_chain (global_sym_chain[i]); 3522 1.1 christos global_sym_chain[i] = sym; 3523 1.1 christos } 3524 1.1 christos add_symbol_to_list (sym, get_global_symbols ()); 3525 1.10 christos break; 3526 1.10 christos 3527 1.1 christos /* This case is faked by a conditional above, 3528 1.1 christos when there is no code letter in the dbx data. 3529 1.10 christos Dbx data never actually contains 'l'. */ 3530 1.10 christos case 's': 3531 1.10 christos case 'l': 3532 1.10 christos sym->set_type (read_type (&p, objfile)); 3533 1.8 christos sym->set_aclass_index (LOC_LOCAL); 3534 1.1 christos sym->set_value_longest (valu); 3535 1.1 christos sym->set_domain (VAR_DOMAIN); 3536 1.1 christos add_symbol_to_list (sym, get_local_symbols ()); 3537 1.1 christos break; 3538 1.1 christos 3539 1.1 christos case 'p': 3540 1.1 christos if (*p == 'F') 3541 1.1 christos /* pF is a two-letter code that means a function parameter in Fortran. 3542 1.1 christos The type-number specifies the type of the return value. 3543 1.10 christos Translate it into a pointer-to-function type. */ 3544 1.10 christos { 3545 1.10 christos p++; 3546 1.1 christos sym->set_type 3547 1.1 christos (lookup_pointer_type 3548 1.10 christos (lookup_function_type (read_type (&p, objfile)))); 3549 1.1 christos } 3550 1.10 christos else 3551 1.10 christos sym->set_type (read_type (&p, objfile)); 3552 1.10 christos 3553 1.10 christos sym->set_aclass_index (LOC_ARG); 3554 1.8 christos sym->set_value_longest (valu); 3555 1.1 christos sym->set_domain (VAR_DOMAIN); 3556 1.1 christos sym->set_is_argument (1); 3557 1.1 christos add_symbol_to_list (sym, get_local_symbols ()); 3558 1.1 christos 3559 1.1 christos if (gdbarch_byte_order (gdbarch) != BFD_ENDIAN_BIG) 3560 1.1 christos { 3561 1.1 christos /* On little-endian machines, this crud is never necessary, 3562 1.1 christos and, if the extra bytes contain garbage, is harmful. */ 3563 1.1 christos break; 3564 1.1 christos } 3565 1.1 christos 3566 1.1 christos /* If it's gcc-compiled, if it says `short', believe it. */ 3567 1.1 christos if (processing_gcc_compilation 3568 1.1 christos || gdbarch_believe_pcc_promotion (gdbarch)) 3569 1.1 christos break; 3570 1.1 christos 3571 1.1 christos if (!gdbarch_believe_pcc_promotion (gdbarch)) 3572 1.10 christos { 3573 1.1 christos /* If PCC says a parameter is a short or a char, it is 3574 1.10 christos really an int. */ 3575 1.1 christos if (sym->type ()->length () 3576 1.10 christos < gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT 3577 1.10 christos && sym->type ()->code () == TYPE_CODE_INT) 3578 1.11 christos { 3579 1.11 christos sym->set_type 3580 1.1 christos (sym->type ()->is_unsigned () 3581 1.1 christos ? builtin_type (objfile)->builtin_unsigned_int 3582 1.1 christos : builtin_type (objfile)->builtin_int); 3583 1.11 christos } 3584 1.1 christos break; 3585 1.1 christos } 3586 1.1 christos [[fallthrough]]; 3587 1.10 christos 3588 1.10 christos case 'P': 3589 1.1 christos /* acc seems to use P to declare the prototypes of functions that 3590 1.1 christos are referenced by this file. gdb is not prepared to deal 3591 1.10 christos with this extra information. FIXME, it ought to. */ 3592 1.1 christos if (type == N_FUN) 3593 1.1 christos { 3594 1.11 christos sym->set_type (read_type (&p, objfile)); 3595 1.1 christos goto process_prototype_types; 3596 1.1 christos } 3597 1.1 christos [[fallthrough]]; 3598 1.10 christos 3599 1.10 christos case 'R': 3600 1.10 christos /* Parameter which is in a register. */ 3601 1.10 christos sym->set_type (read_type (&p, objfile)); 3602 1.10 christos sym->set_aclass_index (stab_register_index); 3603 1.8 christos sym->set_is_argument (1); 3604 1.1 christos sym->set_value_longest (valu); 3605 1.1 christos sym->set_domain (VAR_DOMAIN); 3606 1.1 christos add_symbol_to_list (sym, get_local_symbols ()); 3607 1.1 christos break; 3608 1.10 christos 3609 1.10 christos case 'r': 3610 1.10 christos /* Register variable (either global or local). */ 3611 1.10 christos sym->set_type (read_type (&p, objfile)); 3612 1.1 christos sym->set_aclass_index (stab_register_index); 3613 1.1 christos sym->set_value_longest (valu); 3614 1.1 christos sym->set_domain (VAR_DOMAIN); 3615 1.1 christos if (within_function) 3616 1.1 christos { 3617 1.1 christos /* Sun cc uses a pair of symbols, one 'p' and one 'r', with 3618 1.9 christos the same name to represent an argument passed in a 3619 1.1 christos register. GCC uses 'P' for the same case. So if we find 3620 1.1 christos such a symbol pair we combine it into one 'P' symbol. 3621 1.1 christos For Sun cc we need to do this regardless of stabs_argument_has_addr, because the compiler puts out 3622 1.1 christos the 'p' symbol even if it never saves the argument onto 3623 1.1 christos the stack. 3624 1.1 christos 3625 1.1 christos On most machines, we want to preserve both symbols, so 3626 1.1 christos that we can still get information about what is going on 3627 1.1 christos with the stack (VAX for computing args_printed, using 3628 1.1 christos stack slots instead of saved registers in backtraces, 3629 1.1 christos etc.). 3630 1.1 christos 3631 1.1 christos Note that this code illegally combines 3632 1.1 christos main(argc) struct foo argc; { register struct foo argc; } 3633 1.8 christos but this case is considered pathological and causes a warning 3634 1.1 christos from a decent compiler. */ 3635 1.1 christos 3636 1.10 christos struct pending *local_symbols = *get_local_symbols (); 3637 1.1 christos if (local_symbols 3638 1.1 christos && local_symbols->nsyms > 0 3639 1.1 christos && gdbarch_stabs_argument_has_addr (gdbarch, sym->type ())) 3640 1.1 christos { 3641 1.10 christos struct symbol *prev_sym; 3642 1.10 christos 3643 1.9 christos prev_sym = local_symbols->symbol[local_symbols->nsyms - 1]; 3644 1.9 christos if ((prev_sym->aclass () == LOC_REF_ARG 3645 1.1 christos || prev_sym->aclass () == LOC_ARG) 3646 1.10 christos && strcmp (prev_sym->linkage_name (), 3647 1.1 christos sym->linkage_name ()) == 0) 3648 1.1 christos { 3649 1.10 christos prev_sym->set_aclass_index (stab_register_index); 3650 1.10 christos /* Use the type from the LOC_REGISTER; that is the type 3651 1.1 christos that is actually in that register. */ 3652 1.1 christos prev_sym->set_type (sym->type ()); 3653 1.1 christos prev_sym->set_value_longest (sym->value_longest ()); 3654 1.1 christos sym = prev_sym; 3655 1.8 christos break; 3656 1.1 christos } 3657 1.1 christos } 3658 1.8 christos add_symbol_to_list (sym, get_local_symbols ()); 3659 1.1 christos } 3660 1.1 christos else 3661 1.1 christos add_symbol_to_list (sym, get_file_symbols ()); 3662 1.1 christos break; 3663 1.10 christos 3664 1.10 christos case 'S': 3665 1.10 christos /* Static symbol at top level of file. */ 3666 1.10 christos sym->set_type (read_type (&p, objfile)); 3667 1.8 christos sym->set_aclass_index (LOC_STATIC); 3668 1.1 christos sym->set_value_address (valu); 3669 1.1 christos sym->set_domain (VAR_DOMAIN); 3670 1.1 christos add_symbol_to_list (sym, get_file_symbols ()); 3671 1.1 christos break; 3672 1.10 christos 3673 1.10 christos case 't': 3674 1.1 christos /* In Ada, there is no distinction between typedef and non-typedef; 3675 1.10 christos any type declaration implicitly has the equivalent of a typedef, 3676 1.10 christos and thus 't' is in fact equivalent to 'Tt'. 3677 1.10 christos 3678 1.10 christos Therefore, for Ada units, we check the character immediately 3679 1.10 christos before the 't', and if we do not find a 'T', then make sure to 3680 1.10 christos create the associated symbol in the STRUCT_DOMAIN ('t' definitions 3681 1.10 christos will be stored in the VAR_DOMAIN). If the symbol was indeed 3682 1.10 christos defined as 'Tt' then the STRUCT_DOMAIN symbol will be created 3683 1.10 christos elsewhere, so we don't need to take care of that. 3684 1.10 christos 3685 1.9 christos This is important to do, because of forward references: 3686 1.1 christos The cleanup of undefined types stored in undef_types only uses 3687 1.1 christos STRUCT_DOMAIN symbols to perform the replacement. */ 3688 1.10 christos synonym = (sym->language () == language_ada && p[-2] != 'T'); 3689 1.1 christos 3690 1.1 christos /* Typedef */ 3691 1.10 christos sym->set_type (read_type (&p, objfile)); 3692 1.1 christos 3693 1.1 christos /* For a nameless type, we don't want a create a symbol, thus we 3694 1.1 christos did not use `sym'. Return without further processing. */ 3695 1.10 christos if (nameless) 3696 1.10 christos return NULL; 3697 1.11 christos 3698 1.1 christos sym->set_aclass_index (LOC_TYPEDEF); 3699 1.10 christos sym->set_value_longest (valu); 3700 1.10 christos sym->set_domain (TYPE_DOMAIN); 3701 1.10 christos /* C++ vagaries: we may have a type which is derived from 3702 1.10 christos a base type which did not have its name defined when the 3703 1.10 christos derived class was output. We fill in the derived class's 3704 1.10 christos base part member's name here in that case. */ 3705 1.10 christos if (sym->type ()->name () != NULL) 3706 1.1 christos if ((sym->type ()->code () == TYPE_CODE_STRUCT 3707 1.1 christos || sym->type ()->code () == TYPE_CODE_UNION) 3708 1.1 christos && TYPE_N_BASECLASSES (sym->type ())) 3709 1.10 christos { 3710 1.10 christos int j; 3711 1.10 christos 3712 1.10 christos for (j = TYPE_N_BASECLASSES (sym->type ()) - 1; j >= 0; j--) 3713 1.1 christos if (TYPE_BASECLASS_NAME (sym->type (), j) == 0) 3714 1.1 christos sym->type ()->field (j).set_name 3715 1.10 christos (TYPE_BASECLASS (sym->type (), j)->name ()); 3716 1.1 christos } 3717 1.10 christos 3718 1.9 christos if (sym->type ()->name () == NULL) 3719 1.10 christos { 3720 1.1 christos if ((sym->type ()->code () == TYPE_CODE_PTR 3721 1.1 christos && strcmp (sym->linkage_name (), vtbl_ptr_name)) 3722 1.10 christos || sym->type ()->code () == TYPE_CODE_FUNC) 3723 1.10 christos { 3724 1.10 christos /* If we are giving a name to a type such as "pointer to 3725 1.10 christos foo" or "function returning foo", we better not set 3726 1.10 christos the TYPE_NAME. If the program contains "typedef char 3727 1.10 christos *caddr_t;", we don't want all variables of type char 3728 1.10 christos * to print as caddr_t. This is not just a 3729 1.10 christos consequence of GDB's type management; PCC and GCC (at 3730 1.10 christos least through version 2.4) both output variables of 3731 1.10 christos either type char * or caddr_t with the type number 3732 1.10 christos defined in the 't' symbol for caddr_t. If a future 3733 1.10 christos compiler cleans this up it GDB is not ready for it 3734 1.10 christos yet, but if it becomes ready we somehow need to 3735 1.10 christos disable this check (without breaking the PCC/GCC2.4 3736 1.10 christos case). 3737 1.10 christos 3738 1.10 christos Sigh. 3739 1.10 christos 3740 1.1 christos Fortunately, this check seems not to be necessary 3741 1.1 christos for anything except pointers or functions. */ 3742 1.1 christos /* ezannoni: 2000-10-26. This seems to apply for 3743 1.1 christos versions of gcc older than 2.8. This was the original 3744 1.10 christos problem: with the following code gdb would tell that 3745 1.1 christos the type for name1 is caddr_t, and func is char(). 3746 1.1 christos 3747 1.1 christos typedef char *caddr_t; 3748 1.1 christos char *name2; 3749 1.1 christos struct x 3750 1.1 christos { 3751 1.1 christos char *name1; 3752 1.1 christos } xx; 3753 1.1 christos char *func() 3754 1.1 christos { 3755 1.1 christos } 3756 1.1 christos main () {} 3757 1.8 christos */ 3758 1.10 christos 3759 1.1 christos /* Pascal accepts names for pointer types. */ 3760 1.1 christos if (get_current_subfile ()->language == language_pascal) 3761 1.10 christos sym->type ()->set_name (sym->linkage_name ()); 3762 1.1 christos } 3763 1.1 christos else 3764 1.8 christos sym->type ()->set_name (sym->linkage_name ()); 3765 1.1 christos } 3766 1.1 christos 3767 1.10 christos add_symbol_to_list (sym, get_file_symbols ()); 3768 1.10 christos 3769 1.10 christos if (synonym) 3770 1.10 christos { 3771 1.10 christos /* Create the STRUCT_DOMAIN clone. */ 3772 1.10 christos struct symbol *struct_sym = new (&objfile->objfile_obstack) symbol; 3773 1.10 christos 3774 1.10 christos *struct_sym = *sym; 3775 1.10 christos struct_sym->set_aclass_index (LOC_TYPEDEF); 3776 1.10 christos struct_sym->set_value_longest (valu); 3777 1.9 christos struct_sym->set_domain (STRUCT_DOMAIN); 3778 1.9 christos if (sym->type ()->name () == 0) 3779 1.10 christos sym->type ()->set_name 3780 1.10 christos (obconcat (&objfile->objfile_obstack, sym->linkage_name (), 3781 1.9 christos (char *) NULL)); 3782 1.1 christos add_symbol_to_list (struct_sym, get_file_symbols ()); 3783 1.1 christos } 3784 1.1 christos 3785 1.1 christos break; 3786 1.10 christos 3787 1.1 christos case 'T': 3788 1.1 christos /* Struct, union, or enum tag. For GNU C++, this can be be followed 3789 1.1 christos by 't' which means we are typedef'ing it as well. */ 3790 1.1 christos synonym = *p == 't'; 3791 1.1 christos 3792 1.10 christos if (synonym) 3793 1.1 christos p++; 3794 1.1 christos 3795 1.10 christos sym->set_type (read_type (&p, objfile)); 3796 1.1 christos 3797 1.1 christos /* For a nameless type, we don't want a create a symbol, thus we 3798 1.1 christos did not use `sym'. Return without further processing. */ 3799 1.10 christos if (nameless) 3800 1.10 christos return NULL; 3801 1.10 christos 3802 1.10 christos sym->set_aclass_index (LOC_TYPEDEF); 3803 1.10 christos sym->set_value_longest (valu); 3804 1.9 christos sym->set_domain (STRUCT_DOMAIN); 3805 1.9 christos if (sym->type ()->name () == 0) 3806 1.8 christos sym->type ()->set_name 3807 1.1 christos (obconcat (&objfile->objfile_obstack, sym->linkage_name (), 3808 1.1 christos (char *) NULL)); 3809 1.1 christos add_symbol_to_list (sym, get_file_symbols ()); 3810 1.1 christos 3811 1.9 christos if (synonym) 3812 1.1 christos { 3813 1.1 christos /* Clone the sym and then modify it. */ 3814 1.10 christos struct symbol *typedef_sym = new (&objfile->objfile_obstack) symbol; 3815 1.10 christos 3816 1.11 christos *typedef_sym = *sym; 3817 1.10 christos typedef_sym->set_aclass_index (LOC_TYPEDEF); 3818 1.10 christos typedef_sym->set_value_longest (valu); 3819 1.9 christos typedef_sym->set_domain (TYPE_DOMAIN); 3820 1.9 christos if (sym->type ()->name () == 0) 3821 1.8 christos sym->type ()->set_name 3822 1.1 christos (obconcat (&objfile->objfile_obstack, sym->linkage_name (), 3823 1.1 christos (char *) NULL)); 3824 1.1 christos add_symbol_to_list (typedef_sym, get_file_symbols ()); 3825 1.1 christos } 3826 1.1 christos break; 3827 1.10 christos 3828 1.10 christos case 'V': 3829 1.10 christos /* Static symbol of local scope. */ 3830 1.10 christos sym->set_type (read_type (&p, objfile)); 3831 1.9 christos sym->set_aclass_index (LOC_STATIC); 3832 1.1 christos sym->set_value_address (valu); 3833 1.1 christos sym->set_domain (VAR_DOMAIN); 3834 1.1 christos add_symbol_to_list (sym, get_local_symbols ()); 3835 1.1 christos break; 3836 1.10 christos 3837 1.10 christos case 'v': 3838 1.10 christos /* Reference parameter */ 3839 1.10 christos sym->set_type (read_type (&p, objfile)); 3840 1.10 christos sym->set_aclass_index (LOC_REF_ARG); 3841 1.8 christos sym->set_is_argument (1); 3842 1.1 christos sym->set_value_longest (valu); 3843 1.1 christos sym->set_domain (VAR_DOMAIN); 3844 1.1 christos add_symbol_to_list (sym, get_local_symbols ()); 3845 1.1 christos break; 3846 1.10 christos 3847 1.10 christos case 'a': 3848 1.10 christos /* Reference parameter which is in a register. */ 3849 1.10 christos sym->set_type (read_type (&p, objfile)); 3850 1.10 christos sym->set_aclass_index (stab_regparm_index); 3851 1.8 christos sym->set_is_argument (1); 3852 1.1 christos sym->set_value_longest (valu); 3853 1.1 christos sym->set_domain (VAR_DOMAIN); 3854 1.1 christos add_symbol_to_list (sym, get_local_symbols ()); 3855 1.1 christos break; 3856 1.10 christos 3857 1.10 christos case 'X': 3858 1.10 christos /* This is used by Sun FORTRAN for "function result value". 3859 1.10 christos Sun claims ("dbx and dbxtool interfaces", 2nd ed) 3860 1.10 christos that Pascal uses it too, but when I tried it Pascal used 3861 1.10 christos "x:3" (local symbol) instead. */ 3862 1.10 christos sym->set_type (read_type (&p, objfile)); 3863 1.8 christos sym->set_aclass_index (LOC_LOCAL); 3864 1.1 christos sym->set_value_longest (valu); 3865 1.1 christos sym->set_domain (VAR_DOMAIN); 3866 1.1 christos add_symbol_to_list (sym, get_local_symbols ()); 3867 1.10 christos break; 3868 1.10 christos 3869 1.10 christos default: 3870 1.10 christos sym->set_type (error_type (&p, objfile)); 3871 1.8 christos sym->set_aclass_index (LOC_CONST); 3872 1.1 christos sym->set_value_longest (0); 3873 1.1 christos sym->set_domain (VAR_DOMAIN); 3874 1.1 christos add_symbol_to_list (sym, get_file_symbols ()); 3875 1.1 christos break; 3876 1.1 christos } 3877 1.1 christos 3878 1.1 christos /* Some systems pass variables of certain types by reference instead 3879 1.10 christos of by value, i.e. they will pass the address of a structure (in a 3880 1.10 christos register or on the stack) instead of the structure itself. */ 3881 1.1 christos 3882 1.1 christos if (gdbarch_stabs_argument_has_addr (gdbarch, sym->type ()) 3883 1.10 christos && sym->is_argument ()) 3884 1.10 christos { 3885 1.10 christos /* We have to convert LOC_REGISTER to LOC_REGPARM_ADDR (for 3886 1.1 christos variables passed in a register). */ 3887 1.1 christos if (sym->aclass () == LOC_REGISTER) 3888 1.10 christos sym->set_aclass_index (LOC_REGPARM_ADDR); 3889 1.10 christos /* Likewise for converting LOC_ARG to LOC_REF_ARG (for the 7th 3890 1.1 christos and subsequent arguments on SPARC, for example). */ 3891 1.1 christos else if (sym->aclass () == LOC_ARG) 3892 1.1 christos sym->set_aclass_index (LOC_REF_ARG); 3893 1.1 christos } 3894 1.1 christos 3895 1.1 christos return sym; 3896 1.1 christos } 3897 1.1 christos 3898 1.1 christos /* Skip rest of this symbol and return an error type. 3899 1.1 christos 3900 1.1 christos General notes on error recovery: error_type always skips to the 3901 1.1 christos end of the symbol (modulo cretinous dbx symbol name continuation). 3902 1.1 christos Thus code like this: 3903 1.1 christos 3904 1.1 christos if (*(*pp)++ != ';') 3905 1.1 christos return error_type (pp, objfile); 3906 1.1 christos 3907 1.1 christos is wrong because if *pp starts out pointing at '\0' (typically as the 3908 1.1 christos result of an earlier error), it will be incremented to point to the 3909 1.1 christos start of the next symbol, which might produce strange results, at least 3910 1.1 christos if you run off the end of the string table. Instead use 3911 1.1 christos 3912 1.1 christos if (**pp != ';') 3913 1.1 christos return error_type (pp, objfile); 3914 1.1 christos ++*pp; 3915 1.1 christos 3916 1.1 christos or 3917 1.1 christos 3918 1.1 christos if (**pp != ';') 3919 1.1 christos foo = error_type (pp, objfile); 3920 1.1 christos else 3921 1.1 christos ++*pp; 3922 1.1 christos 3923 1.1 christos And in case it isn't obvious, the point of all this hair is so the compiler 3924 1.1 christos can define new types and new syntaxes, and old versions of the 3925 1.7 christos debugger will be able to read the new symbol tables. */ 3926 1.1 christos 3927 1.8 christos static struct type * 3928 1.1 christos error_type (const char **pp, struct objfile *objfile) 3929 1.1 christos { 3930 1.1 christos complaint (_("couldn't parse type; debugger out of date?")); 3931 1.1 christos while (1) 3932 1.1 christos { 3933 1.1 christos /* Skip to end of symbol. */ 3934 1.1 christos while (**pp != '\0') 3935 1.1 christos { 3936 1.1 christos (*pp)++; 3937 1.1 christos } 3938 1.1 christos 3939 1.1 christos /* Check for and handle cretinous dbx symbol name continuation! */ 3940 1.1 christos if ((*pp)[-1] == '\\' || (*pp)[-1] == '?') 3941 1.1 christos { 3942 1.1 christos *pp = next_symbol_text (objfile); 3943 1.1 christos } 3944 1.1 christos else 3945 1.1 christos { 3946 1.11 christos break; 3947 1.1 christos } 3948 1.1 christos } 3949 1.1 christos return builtin_type (objfile)->builtin_error; 3950 1.11 christos } 3951 1.11 christos 3952 1.11 christos 3954 1.11 christos /* Allocate a stub method whose return type is TYPE. This apparently 3955 1.11 christos happens for speed of symbol reading, since parsing out the 3956 1.11 christos arguments to the method is cpu-intensive, the way we are doing it. 3957 1.11 christos So, we will fill in arguments later. This always returns a fresh 3958 1.11 christos type. */ 3959 1.11 christos 3960 1.11 christos static struct type * 3961 1.11 christos allocate_stub_method (struct type *type) 3962 1.11 christos { 3963 1.11 christos struct type *mtype; 3964 1.11 christos 3965 1.11 christos mtype = type_allocator (type).new_type (); 3966 1.11 christos mtype->set_code (TYPE_CODE_METHOD); 3967 1.11 christos mtype->set_length (1); 3968 1.11 christos mtype->set_is_stub (true); 3969 1.11 christos mtype->set_target_type (type); 3970 1.1 christos /* TYPE_SELF_TYPE (mtype) = unknown yet */ 3971 1.1 christos return mtype; 3972 1.1 christos } 3973 1.1 christos 3974 1.1 christos /* Read type information or a type definition; return the type. Even 3975 1.1 christos though this routine accepts either type information or a type 3976 1.1 christos definition, the distinction is relevant--some parts of stabsread.c 3977 1.7 christos assume that type information starts with a digit, '-', or '(' in 3978 1.1 christos deciding whether to call read_type. */ 3979 1.1 christos 3980 1.1 christos static struct type * 3981 1.1 christos read_type (const char **pp, struct objfile *objfile) 3982 1.1 christos { 3983 1.1 christos struct type *type = 0; 3984 1.1 christos struct type *type1; 3985 1.1 christos int typenums[2]; 3986 1.1 christos char type_descriptor; 3987 1.1 christos 3988 1.1 christos /* Size in bits of type if specified by a type attribute, or -1 if 3989 1.1 christos there is no size attribute. */ 3990 1.1 christos int type_size = -1; 3991 1.1 christos 3992 1.1 christos /* Used to distinguish string and bitstring from char-array and set. */ 3993 1.1 christos int is_string = 0; 3994 1.1 christos 3995 1.1 christos /* Used to distinguish vector from array. */ 3996 1.1 christos int is_vector = 0; 3997 1.1 christos 3998 1.1 christos /* Read type number if present. The type number may be omitted. 3999 1.1 christos for instance in a two-dimensional array declared with type 4000 1.1 christos "ar1;1;10;ar1;1;10;4". */ 4001 1.1 christos if ((**pp >= '0' && **pp <= '9') 4002 1.1 christos || **pp == '(' 4003 1.1 christos || **pp == '-') 4004 1.1 christos { 4005 1.10 christos if (read_type_number (pp, typenums) != 0) 4006 1.10 christos return error_type (pp, objfile); 4007 1.10 christos 4008 1.10 christos if (**pp != '=') 4009 1.10 christos { 4010 1.10 christos /* Type is not being defined here. Either it already 4011 1.10 christos exists, or this is a forward reference to it. 4012 1.10 christos dbx_alloc_type handles both cases. */ 4013 1.10 christos type = dbx_alloc_type (typenums, objfile); 4014 1.10 christos 4015 1.10 christos /* If this is a forward reference, arrange to complain if it 4016 1.1 christos doesn't get patched up by the time we're done 4017 1.10 christos reading. */ 4018 1.10 christos if (type->code () == TYPE_CODE_UNDEF) 4019 1.1 christos add_undefined_type (type, typenums); 4020 1.1 christos 4021 1.1 christos return type; 4022 1.10 christos } 4023 1.1 christos 4024 1.1 christos /* Type is being defined here. */ 4025 1.1 christos /* Skip the '='. 4026 1.1 christos Also skip the type descriptor - we get it below with (*pp)[-1]. */ 4027 1.1 christos (*pp) += 2; 4028 1.10 christos } 4029 1.1 christos else 4030 1.1 christos { 4031 1.1 christos /* 'typenums=' not present, type is anonymous. Read and return 4032 1.1 christos the definition, but don't put it in the type vector. */ 4033 1.1 christos typenums[0] = typenums[1] = -1; 4034 1.1 christos (*pp)++; 4035 1.1 christos } 4036 1.1 christos 4037 1.1 christos again: 4038 1.1 christos type_descriptor = (*pp)[-1]; 4039 1.1 christos switch (type_descriptor) 4040 1.1 christos { 4041 1.1 christos case 'x': 4042 1.1 christos { 4043 1.1 christos enum type_code code; 4044 1.1 christos 4045 1.1 christos /* Used to index through file_symbols. */ 4046 1.1 christos struct pending *ppt; 4047 1.1 christos int i; 4048 1.1 christos 4049 1.7 christos /* Name including "struct", etc. */ 4050 1.1 christos char *type_name; 4051 1.1 christos 4052 1.1 christos { 4053 1.1 christos const char *from, *p, *q1, *q2; 4054 1.1 christos 4055 1.1 christos /* Set the type code according to the following letter. */ 4056 1.1 christos switch ((*pp)[0]) 4057 1.1 christos { 4058 1.1 christos case 's': 4059 1.1 christos code = TYPE_CODE_STRUCT; 4060 1.1 christos break; 4061 1.1 christos case 'u': 4062 1.1 christos code = TYPE_CODE_UNION; 4063 1.1 christos break; 4064 1.1 christos case 'e': 4065 1.1 christos code = TYPE_CODE_ENUM; 4066 1.1 christos break; 4067 1.8 christos default: 4068 1.1 christos { 4069 1.1 christos /* Complain and keep going, so compilers can invent new 4070 1.1 christos cross-reference types. */ 4071 1.1 christos complaint (_("Unrecognized cross-reference type `%c'"), 4072 1.1 christos (*pp)[0]); 4073 1.1 christos code = TYPE_CODE_STRUCT; 4074 1.1 christos break; 4075 1.1 christos } 4076 1.1 christos } 4077 1.1 christos 4078 1.1 christos q1 = strchr (*pp, '<'); 4079 1.1 christos p = strchr (*pp, ':'); 4080 1.1 christos if (p == NULL) 4081 1.1 christos return error_type (pp, objfile); 4082 1.1 christos if (q1 && p > q1 && p[1] == ':') 4083 1.1 christos { 4084 1.1 christos int nesting_level = 0; 4085 1.1 christos 4086 1.1 christos for (q2 = q1; *q2; q2++) 4087 1.1 christos { 4088 1.1 christos if (*q2 == '<') 4089 1.1 christos nesting_level++; 4090 1.1 christos else if (*q2 == '>') 4091 1.1 christos nesting_level--; 4092 1.1 christos else if (*q2 == ':' && nesting_level == 0) 4093 1.1 christos break; 4094 1.1 christos } 4095 1.1 christos p = q2; 4096 1.8 christos if (*p != ':') 4097 1.1 christos return error_type (pp, objfile); 4098 1.10 christos } 4099 1.10 christos type_name = NULL; 4100 1.10 christos if (get_current_subfile ()->language == language_cplus) 4101 1.10 christos { 4102 1.10 christos std::string name (*pp, p - *pp); 4103 1.10 christos gdb::unique_xmalloc_ptr<char> new_name 4104 1.10 christos = cp_canonicalize_string (name.c_str ()); 4105 1.10 christos if (new_name != nullptr) 4106 1.10 christos type_name = obstack_strdup (&objfile->objfile_obstack, 4107 1.10 christos new_name.get ()); 4108 1.10 christos } 4109 1.10 christos else if (get_current_subfile ()->language == language_c) 4110 1.9 christos { 4111 1.9 christos std::string name (*pp, p - *pp); 4112 1.9 christos gdb::unique_xmalloc_ptr<char> new_name 4113 1.1 christos = c_canonicalize_name (name.c_str ()); 4114 1.1 christos if (new_name != nullptr) 4115 1.1 christos type_name = obstack_strdup (&objfile->objfile_obstack, 4116 1.7 christos new_name.get ()); 4117 1.1 christos } 4118 1.1 christos if (type_name == NULL) 4119 1.1 christos { 4120 1.1 christos char *to = type_name = (char *) 4121 1.1 christos obstack_alloc (&objfile->objfile_obstack, p - *pp + 1); 4122 1.1 christos 4123 1.1 christos /* Copy the name. */ 4124 1.1 christos from = *pp + 1; 4125 1.1 christos while (from < p) 4126 1.1 christos *to++ = *from++; 4127 1.1 christos *to = '\0'; 4128 1.1 christos } 4129 1.1 christos 4130 1.1 christos /* Set the pointer ahead of the name which we just read, and 4131 1.10 christos the colon. */ 4132 1.10 christos *pp = p + 1; 4133 1.10 christos } 4134 1.1 christos 4135 1.8 christos /* If this type has already been declared, then reuse the same 4136 1.1 christos type, rather than allocating a new one. This saves some 4137 1.1 christos memory. */ 4138 1.1 christos 4139 1.1 christos for (ppt = *get_file_symbols (); ppt; ppt = ppt->next) 4140 1.10 christos for (i = 0; i < ppt->nsyms; i++) 4141 1.10 christos { 4142 1.10 christos struct symbol *sym = ppt->symbol[i]; 4143 1.9 christos 4144 1.1 christos if (sym->aclass () == LOC_TYPEDEF 4145 1.1 christos && sym->domain () == STRUCT_DOMAIN 4146 1.10 christos && (sym->type ()->code () == code) 4147 1.10 christos && strcmp (sym->linkage_name (), type_name) == 0) 4148 1.10 christos { 4149 1.1 christos obstack_free (&objfile->objfile_obstack, type_name); 4150 1.1 christos type = sym->type (); 4151 1.1 christos if (typenums[0] != -1) 4152 1.1 christos *dbx_lookup_type (typenums, objfile) = type; 4153 1.1 christos return type; 4154 1.1 christos } 4155 1.1 christos } 4156 1.1 christos 4157 1.1 christos /* Didn't find the type to which this refers, so we must 4158 1.1 christos be dealing with a forward reference. Allocate a type 4159 1.9 christos structure for it, and keep track of it so we can 4160 1.9 christos fill in the rest of the fields when we get the full 4161 1.1 christos type. */ 4162 1.10 christos type = dbx_alloc_type (typenums, objfile); 4163 1.1 christos type->set_code (code); 4164 1.1 christos type->set_name (type_name); 4165 1.1 christos INIT_CPLUS_SPECIFIC (type); 4166 1.1 christos type->set_is_stub (true); 4167 1.1 christos 4168 1.1 christos add_undefined_type (type, typenums); 4169 1.1 christos return type; 4170 1.1 christos } 4171 1.1 christos 4172 1.1 christos case '-': /* RS/6000 built-in type */ 4173 1.1 christos case '0': 4174 1.1 christos case '1': 4175 1.1 christos case '2': 4176 1.1 christos case '3': 4177 1.1 christos case '4': 4178 1.1 christos case '5': 4179 1.1 christos case '6': 4180 1.1 christos case '7': 4181 1.1 christos case '8': 4182 1.1 christos case '9': 4183 1.10 christos case '(': 4184 1.1 christos (*pp)--; 4185 1.1 christos 4186 1.10 christos /* We deal with something like t(1,2)=(3,4)=... which 4187 1.1 christos the Lucid compiler and recent gcc versions (post 2.7.3) use. */ 4188 1.9 christos 4189 1.1 christos /* Allocate and enter the typedef type first. 4190 1.1 christos This handles recursive types. */ 4191 1.1 christos type = dbx_alloc_type (typenums, objfile); 4192 1.1 christos type->set_code (TYPE_CODE_TYPEDEF); 4193 1.1 christos { 4194 1.1 christos struct type *xtype = read_type (pp, objfile); 4195 1.9 christos 4196 1.10 christos if (type == xtype) 4197 1.1 christos { 4198 1.1 christos /* It's being defined as itself. That means it is "void". */ 4199 1.1 christos type->set_code (TYPE_CODE_VOID); 4200 1.1 christos type->set_length (1); 4201 1.1 christos } 4202 1.1 christos else if (type_size >= 0 || is_string) 4203 1.1 christos { 4204 1.1 christos /* This is the absolute wrong way to construct types. Every 4205 1.1 christos other debug format has found a way around this problem and 4206 1.1 christos the related problems with unnecessarily stubbed types; 4207 1.10 christos someone motivated should attempt to clean up the issue 4208 1.10 christos here as well. Once a type pointed to has been created it 4209 1.10 christos should not be modified. 4210 1.10 christos 4211 1.10 christos Well, it's not *absolutely* wrong. Constructing recursive 4212 1.10 christos types (trees, linked lists) necessarily entails modifying 4213 1.10 christos types after creating them. Constructing any loop structure 4214 1.10 christos entails side effects. The Dwarf 2 reader does handle this 4215 1.10 christos more gracefully (it never constructs more than once 4216 1.10 christos instance of a type object, so it doesn't have to copy type 4217 1.10 christos objects wholesale), but it still mutates type objects after 4218 1.10 christos other folks have references to them. 4219 1.10 christos 4220 1.10 christos Keep in mind that this circularity/mutation issue shows up 4221 1.10 christos at the source language level, too: C's "incomplete types", 4222 1.10 christos for example. So the proper cleanup, I think, would be to 4223 1.1 christos limit GDB's type smashing to match exactly those required 4224 1.9 christos by the source language. So GDB could have a 4225 1.1 christos "complete_this_type" function, but never create unnecessary 4226 1.1 christos copies of a type otherwise. */ 4227 1.1 christos replace_type (type, xtype); 4228 1.10 christos type->set_name (NULL); 4229 1.10 christos } 4230 1.1 christos else 4231 1.1 christos { 4232 1.1 christos type->set_target_is_stub (true); 4233 1.1 christos type->set_target_type (xtype); 4234 1.1 christos } 4235 1.10 christos } 4236 1.10 christos break; 4237 1.10 christos 4238 1.10 christos /* In the following types, we must be sure to overwrite any existing 4239 1.10 christos type that the typenums refer to, rather than allocating a new one 4240 1.1 christos and making the typenums point to the new one. This is because there 4241 1.1 christos may already be pointers to the existing type (if it had been 4242 1.1 christos forward-referenced), and we must change it to a pointer, function, 4243 1.1 christos reference, or whatever, *in-place*. */ 4244 1.1 christos 4245 1.1 christos case '*': /* Pointer to another type */ 4246 1.1 christos type1 = read_type (pp, objfile); 4247 1.1 christos type = make_pointer_type (type1, dbx_lookup_type (typenums, objfile)); 4248 1.7 christos break; 4249 1.10 christos 4250 1.1 christos case '&': /* Reference to another type */ 4251 1.1 christos type1 = read_type (pp, objfile); 4252 1.1 christos type = make_reference_type (type1, dbx_lookup_type (typenums, objfile), 4253 1.1 christos TYPE_CODE_REF); 4254 1.1 christos break; 4255 1.1 christos 4256 1.1 christos case 'f': /* Function returning another type */ 4257 1.1 christos type1 = read_type (pp, objfile); 4258 1.1 christos type = make_function_type (type1, dbx_lookup_type (typenums, objfile)); 4259 1.10 christos break; 4260 1.1 christos 4261 1.10 christos case 'g': /* Prototyped function. (Sun) */ 4262 1.10 christos { 4263 1.10 christos /* Unresolved questions: 4264 1.10 christos 4265 1.10 christos - According to Sun's ``STABS Interface Manual'', for 'f' 4266 1.10 christos and 'F' symbol descriptors, a `0' in the argument type list 4267 1.10 christos indicates a varargs function. But it doesn't say how 'g' 4268 1.10 christos type descriptors represent that info. Someone with access 4269 1.10 christos to Sun's toolchain should try it out. 4270 1.10 christos 4271 1.10 christos - According to the comment in define_symbol (search for 4272 1.10 christos `process_prototype_types:'), Sun emits integer arguments as 4273 1.10 christos types which ref themselves --- like `void' types. Do we 4274 1.10 christos have to deal with that here, too? Again, someone with 4275 1.10 christos access to Sun's toolchain should try it out and let us 4276 1.10 christos know. */ 4277 1.10 christos 4278 1.1 christos const char *type_start = (*pp) - 1; 4279 1.10 christos struct type *return_type = read_type (pp, objfile); 4280 1.10 christos struct type *func_type 4281 1.10 christos = make_function_type (return_type, 4282 1.10 christos dbx_lookup_type (typenums, objfile)); 4283 1.10 christos struct type_list { 4284 1.10 christos struct type *type; 4285 1.10 christos struct type_list *next; 4286 1.10 christos } *arg_types = 0; 4287 1.10 christos int num_args = 0; 4288 1.10 christos 4289 1.10 christos while (**pp && **pp != '#') 4290 1.10 christos { 4291 1.10 christos struct type *arg_type = read_type (pp, objfile); 4292 1.10 christos struct type_list *newobj = XALLOCA (struct type_list); 4293 1.10 christos newobj->type = arg_type; 4294 1.10 christos newobj->next = arg_types; 4295 1.10 christos arg_types = newobj; 4296 1.10 christos num_args++; 4297 1.10 christos } 4298 1.8 christos if (**pp == '#') 4299 1.1 christos ++*pp; 4300 1.1 christos else 4301 1.10 christos { 4302 1.1 christos complaint (_("Prototyped function type didn't " 4303 1.10 christos "end arguments with `#':\n%s"), 4304 1.10 christos type_start); 4305 1.10 christos } 4306 1.10 christos 4307 1.10 christos /* If there is just one argument whose type is `void', then 4308 1.10 christos that's just an empty argument list. */ 4309 1.1 christos if (arg_types 4310 1.11 christos && ! arg_types->next 4311 1.10 christos && arg_types->type->code () == TYPE_CODE_VOID) 4312 1.10 christos num_args = 0; 4313 1.10 christos 4314 1.10 christos func_type->alloc_fields (num_args); 4315 1.10 christos { 4316 1.10 christos int i; 4317 1.10 christos struct type_list *t; 4318 1.10 christos 4319 1.10 christos /* We stuck each argument type onto the front of the list 4320 1.10 christos when we read it, so the list is reversed. Build the 4321 1.10 christos fields array right-to-left. */ 4322 1.10 christos for (t = arg_types, i = num_args - 1; t; t = t->next, i--) 4323 1.1 christos func_type->field (i).set_type (t->type); 4324 1.10 christos } 4325 1.10 christos func_type->set_num_fields (num_args); 4326 1.1 christos func_type->set_is_prototyped (true); 4327 1.1 christos 4328 1.1 christos type = func_type; 4329 1.1 christos break; 4330 1.1 christos } 4331 1.1 christos 4332 1.1 christos case 'k': /* Const qualifier on some type (Sun) */ 4333 1.1 christos type = read_type (pp, objfile); 4334 1.1 christos type = make_cv_type (1, TYPE_VOLATILE (type), type, 4335 1.1 christos dbx_lookup_type (typenums, objfile)); 4336 1.1 christos break; 4337 1.1 christos 4338 1.1 christos case 'B': /* Volatile qual on some type (Sun) */ 4339 1.1 christos type = read_type (pp, objfile); 4340 1.1 christos type = make_cv_type (TYPE_CONST (type), 1, type, 4341 1.11 christos dbx_lookup_type (typenums, objfile)); 4342 1.1 christos break; 4343 1.1 christos 4344 1.1 christos case '@': 4345 1.1 christos if (isdigit ((unsigned char)**pp) || **pp == '(' || **pp == '-') 4346 1.1 christos { /* Member (class & variable) type */ 4347 1.1 christos /* FIXME -- we should be doing smash_to_XXX types here. */ 4348 1.1 christos 4349 1.1 christos struct type *domain = read_type (pp, objfile); 4350 1.1 christos struct type *memtype; 4351 1.1 christos 4352 1.1 christos if (**pp != ',') 4353 1.1 christos /* Invalid member type data format. */ 4354 1.1 christos return error_type (pp, objfile); 4355 1.1 christos ++*pp; 4356 1.1 christos 4357 1.1 christos memtype = read_type (pp, objfile); 4358 1.1 christos type = dbx_alloc_type (typenums, objfile); 4359 1.1 christos smash_to_memberptr_type (type, domain, memtype); 4360 1.7 christos } 4361 1.1 christos else 4362 1.1 christos /* type attribute */ 4363 1.1 christos { 4364 1.1 christos const char *attr = *pp; 4365 1.1 christos 4366 1.1 christos /* Skip to the semicolon. */ 4367 1.1 christos while (**pp != ';' && **pp != '\0') 4368 1.1 christos ++(*pp); 4369 1.1 christos if (**pp == '\0') 4370 1.1 christos return error_type (pp, objfile); 4371 1.1 christos else 4372 1.1 christos ++ * pp; /* Skip the semicolon. */ 4373 1.1 christos 4374 1.1 christos switch (*attr) 4375 1.1 christos { 4376 1.1 christos case 's': /* Size attribute */ 4377 1.1 christos type_size = atoi (attr + 1); 4378 1.1 christos if (type_size <= 0) 4379 1.1 christos type_size = -1; 4380 1.1 christos break; 4381 1.1 christos 4382 1.1 christos case 'S': /* String attribute */ 4383 1.1 christos /* FIXME: check to see if following type is array? */ 4384 1.1 christos is_string = 1; 4385 1.1 christos break; 4386 1.1 christos 4387 1.1 christos case 'V': /* Vector attribute */ 4388 1.1 christos /* FIXME: check to see if following type is array? */ 4389 1.1 christos is_vector = 1; 4390 1.10 christos break; 4391 1.1 christos 4392 1.1 christos default: 4393 1.1 christos /* Ignore unrecognized type attributes, so future compilers 4394 1.1 christos can invent new ones. */ 4395 1.1 christos break; 4396 1.1 christos } 4397 1.1 christos ++*pp; 4398 1.1 christos goto again; 4399 1.1 christos } 4400 1.1 christos break; 4401 1.1 christos 4402 1.1 christos case '#': /* Method (class & fn) type */ 4403 1.1 christos if ((*pp)[0] == '#') 4404 1.1 christos { 4405 1.1 christos /* We'll get the parameter types from the name. */ 4406 1.1 christos struct type *return_type; 4407 1.8 christos 4408 1.1 christos (*pp)++; 4409 1.1 christos return_type = read_type (pp, objfile); 4410 1.1 christos if (*(*pp)++ != ';') 4411 1.1 christos complaint (_("invalid (minimal) member type " 4412 1.1 christos "data format at symtab pos %d."), 4413 1.1 christos symnum); 4414 1.1 christos type = allocate_stub_method (return_type); 4415 1.1 christos if (typenums[0] != -1) 4416 1.1 christos *dbx_lookup_type (typenums, objfile) = type; 4417 1.1 christos } 4418 1.1 christos else 4419 1.1 christos { 4420 1.1 christos struct type *domain = read_type (pp, objfile); 4421 1.1 christos struct type *return_type; 4422 1.1 christos struct field *args; 4423 1.1 christos int nargs, varargs; 4424 1.1 christos 4425 1.1 christos if (**pp != ',') 4426 1.1 christos /* Invalid member type data format. */ 4427 1.1 christos return error_type (pp, objfile); 4428 1.1 christos else 4429 1.1 christos ++(*pp); 4430 1.1 christos 4431 1.1 christos return_type = read_type (pp, objfile); 4432 1.1 christos args = read_args (pp, ';', objfile, &nargs, &varargs); 4433 1.1 christos if (args == NULL) 4434 1.1 christos return error_type (pp, objfile); 4435 1.1 christos type = dbx_alloc_type (typenums, objfile); 4436 1.1 christos smash_to_method_type (type, domain, return_type, args, 4437 1.1 christos nargs, varargs); 4438 1.1 christos } 4439 1.1 christos break; 4440 1.1 christos 4441 1.1 christos case 'r': /* Range type */ 4442 1.1 christos type = read_range_type (pp, typenums, type_size, objfile); 4443 1.1 christos if (typenums[0] != -1) 4444 1.1 christos *dbx_lookup_type (typenums, objfile) = type; 4445 1.1 christos break; 4446 1.1 christos 4447 1.1 christos case 'b': 4448 1.1 christos { 4449 1.1 christos /* Sun ACC builtin int type */ 4450 1.1 christos type = read_sun_builtin_type (pp, typenums, objfile); 4451 1.1 christos if (typenums[0] != -1) 4452 1.1 christos *dbx_lookup_type (typenums, objfile) = type; 4453 1.1 christos } 4454 1.1 christos break; 4455 1.1 christos 4456 1.1 christos case 'R': /* Sun ACC builtin float type */ 4457 1.1 christos type = read_sun_floating_type (pp, typenums, objfile); 4458 1.1 christos if (typenums[0] != -1) 4459 1.1 christos *dbx_lookup_type (typenums, objfile) = type; 4460 1.1 christos break; 4461 1.1 christos 4462 1.1 christos case 'e': /* Enumeration type */ 4463 1.1 christos type = dbx_alloc_type (typenums, objfile); 4464 1.1 christos type = read_enum_type (pp, type, objfile); 4465 1.1 christos if (typenums[0] != -1) 4466 1.1 christos *dbx_lookup_type (typenums, objfile) = type; 4467 1.1 christos break; 4468 1.10 christos 4469 1.10 christos case 's': /* Struct type */ 4470 1.10 christos case 'u': /* Union type */ 4471 1.10 christos { 4472 1.10 christos enum type_code type_code = TYPE_CODE_UNDEF; 4473 1.10 christos type = dbx_alloc_type (typenums, objfile); 4474 1.10 christos switch (type_descriptor) 4475 1.10 christos { 4476 1.10 christos case 's': 4477 1.10 christos type_code = TYPE_CODE_STRUCT; 4478 1.10 christos break; 4479 1.10 christos case 'u': 4480 1.10 christos type_code = TYPE_CODE_UNION; 4481 1.1 christos break; 4482 1.1 christos } 4483 1.1 christos type = read_struct_type (pp, type, type_code, objfile); 4484 1.1 christos break; 4485 1.1 christos } 4486 1.1 christos 4487 1.1 christos case 'a': /* Array type */ 4488 1.1 christos if (**pp != 'r') 4489 1.1 christos return error_type (pp, objfile); 4490 1.1 christos ++*pp; 4491 1.9 christos 4492 1.1 christos type = dbx_alloc_type (typenums, objfile); 4493 1.1 christos type = read_array_type (pp, type, objfile); 4494 1.1 christos if (is_string) 4495 1.1 christos type->set_code (TYPE_CODE_STRING); 4496 1.1 christos if (is_vector) 4497 1.11 christos make_vector_type (type); 4498 1.11 christos break; 4499 1.11 christos 4500 1.11 christos case 'S': /* Set type */ 4501 1.11 christos { 4502 1.11 christos type1 = read_type (pp, objfile); 4503 1.11 christos type_allocator alloc (objfile, get_current_subfile ()->language); 4504 1.1 christos type = create_set_type (alloc, type1); 4505 1.1 christos if (typenums[0] != -1) 4506 1.1 christos *dbx_lookup_type (typenums, objfile) = type; 4507 1.1 christos } 4508 1.1 christos break; 4509 1.1 christos 4510 1.1 christos default: 4511 1.1 christos --*pp; /* Go back to the symbol in error. */ 4512 1.1 christos /* Particularly important if it was \0! */ 4513 1.1 christos return error_type (pp, objfile); 4514 1.1 christos } 4515 1.1 christos 4516 1.1 christos if (type == 0) 4517 1.1 christos { 4518 1.1 christos warning (_("GDB internal error, type is NULL in stabsread.c.")); 4519 1.1 christos return error_type (pp, objfile); 4520 1.10 christos } 4521 1.1 christos 4522 1.1 christos /* Size specified in a type attribute overrides any other size. */ 4523 1.1 christos if (type_size != -1) 4524 1.1 christos type->set_length ((type_size + TARGET_CHAR_BIT - 1) / TARGET_CHAR_BIT); 4525 1.1 christos 4526 1.1 christos return type; 4527 1.1 christos } 4528 1.10 christos 4529 1.10 christos /* RS/6000 xlc/dbx combination uses a set of builtin types, starting from -1. 4531 1.1 christos Return the proper type node for a given builtin type number. */ 4532 1.1 christos 4533 1.1 christos static const registry<objfile>::key<struct type *, 4534 1.1 christos gdb::noop_deleter<struct type *>> 4535 1.9 christos rs6000_builtin_type_data; 4536 1.1 christos 4537 1.1 christos static struct type * 4538 1.1 christos rs6000_builtin_type (int typenum, struct objfile *objfile) 4539 1.1 christos { 4540 1.1 christos struct type **negative_types = rs6000_builtin_type_data.get (objfile); 4541 1.1 christos 4542 1.1 christos /* We recognize types numbered from -NUMBER_RECOGNIZED to -1. */ 4543 1.8 christos #define NUMBER_RECOGNIZED 34 4544 1.11 christos struct type *rettype = NULL; 4545 1.1 christos 4546 1.1 christos if (typenum >= 0 || typenum < -NUMBER_RECOGNIZED) 4547 1.1 christos { 4548 1.1 christos complaint (_("Unknown builtin type %d"), typenum); 4549 1.1 christos return builtin_type (objfile)->builtin_error; 4550 1.1 christos } 4551 1.1 christos 4552 1.9 christos if (!negative_types) 4553 1.1 christos { 4554 1.1 christos /* This includes an empty slot for type number -0. */ 4555 1.1 christos negative_types = OBSTACK_CALLOC (&objfile->objfile_obstack, 4556 1.1 christos NUMBER_RECOGNIZED + 1, struct type *); 4557 1.1 christos rs6000_builtin_type_data.set (objfile, negative_types); 4558 1.1 christos } 4559 1.1 christos 4560 1.1 christos if (negative_types[-typenum] != NULL) 4561 1.1 christos return negative_types[-typenum]; 4562 1.1 christos 4563 1.1 christos #if TARGET_CHAR_BIT != 8 4564 1.1 christos #error This code wrong for TARGET_CHAR_BIT not 8 4565 1.1 christos /* These definitions all assume that TARGET_CHAR_BIT is 8. I think 4566 1.11 christos that if that ever becomes not true, the correct fix will be to 4567 1.1 christos make the size in the struct type to be in bits, not in units of 4568 1.1 christos TARGET_CHAR_BIT. */ 4569 1.1 christos #endif 4570 1.1 christos 4571 1.10 christos type_allocator alloc (objfile, get_current_subfile ()->language); 4572 1.10 christos switch (-typenum) 4573 1.10 christos { 4574 1.10 christos case 1: 4575 1.11 christos /* The size of this and all the other types are fixed, defined 4576 1.1 christos by the debugging format. If there is a type called "int" which 4577 1.1 christos is other than 32 bits, then it should use a new negative type 4578 1.11 christos number (or avoid negative type numbers for that case). 4579 1.10 christos See stabs.texinfo. */ 4580 1.1 christos rettype = init_integer_type (alloc, 32, 0, "int"); 4581 1.1 christos break; 4582 1.11 christos case 2: 4583 1.1 christos rettype = init_integer_type (alloc, 8, 0, "char"); 4584 1.1 christos rettype->set_has_no_signedness (true); 4585 1.11 christos break; 4586 1.1 christos case 3: 4587 1.1 christos rettype = init_integer_type (alloc, 16, 0, "short"); 4588 1.11 christos break; 4589 1.1 christos case 4: 4590 1.1 christos rettype = init_integer_type (alloc, 32, 0, "long"); 4591 1.11 christos break; 4592 1.1 christos case 5: 4593 1.1 christos rettype = init_integer_type (alloc, 8, 1, "unsigned char"); 4594 1.11 christos break; 4595 1.1 christos case 6: 4596 1.1 christos rettype = init_integer_type (alloc, 8, 0, "signed char"); 4597 1.11 christos break; 4598 1.1 christos case 7: 4599 1.1 christos rettype = init_integer_type (alloc, 16, 1, "unsigned short"); 4600 1.11 christos break; 4601 1.1 christos case 8: 4602 1.1 christos rettype = init_integer_type (alloc, 32, 1, "unsigned int"); 4603 1.11 christos break; 4604 1.1 christos case 9: 4605 1.1 christos rettype = init_integer_type (alloc, 32, 1, "unsigned"); 4606 1.11 christos break; 4607 1.1 christos case 10: 4608 1.1 christos rettype = init_integer_type (alloc, 32, 1, "unsigned long"); 4609 1.1 christos break; 4610 1.11 christos case 11: 4611 1.7 christos rettype = alloc.new_type (TYPE_CODE_VOID, TARGET_CHAR_BIT, "void"); 4612 1.1 christos break; 4613 1.1 christos case 12: 4614 1.1 christos /* IEEE single precision (32 bit). */ 4615 1.11 christos rettype = init_float_type (alloc, 32, "float", 4616 1.7 christos floatformats_ieee_single); 4617 1.1 christos break; 4618 1.1 christos case 13: 4619 1.1 christos /* IEEE double precision (64 bit). */ 4620 1.10 christos rettype = init_float_type (alloc, 64, "double", 4621 1.10 christos floatformats_ieee_double); 4622 1.11 christos break; 4623 1.7 christos case 14: 4624 1.1 christos /* This is an IEEE double on the RS/6000, and different machines with 4625 1.1 christos different sizes for "long double" should use different negative 4626 1.11 christos type numbers. See stabs.texinfo. */ 4627 1.1 christos rettype = init_float_type (alloc, 64, "long double", 4628 1.1 christos floatformats_ieee_double); 4629 1.11 christos break; 4630 1.1 christos case 15: 4631 1.1 christos rettype = init_integer_type (alloc, 32, 0, "integer"); 4632 1.11 christos break; 4633 1.7 christos case 16: 4634 1.1 christos rettype = init_boolean_type (alloc, 32, 1, "boolean"); 4635 1.1 christos break; 4636 1.11 christos case 17: 4637 1.7 christos rettype = init_float_type (alloc, 32, "short real", 4638 1.1 christos floatformats_ieee_single); 4639 1.1 christos break; 4640 1.11 christos case 18: 4641 1.1 christos rettype = init_float_type (alloc, 64, "real", 4642 1.1 christos floatformats_ieee_double); 4643 1.11 christos break; 4644 1.1 christos case 19: 4645 1.1 christos rettype = alloc.new_type (TYPE_CODE_ERROR, 0, "stringptr"); 4646 1.11 christos break; 4647 1.1 christos case 20: 4648 1.1 christos rettype = init_character_type (alloc, 8, 1, "character"); 4649 1.11 christos break; 4650 1.1 christos case 21: 4651 1.1 christos rettype = init_boolean_type (alloc, 8, 1, "logical*1"); 4652 1.11 christos break; 4653 1.1 christos case 22: 4654 1.1 christos rettype = init_boolean_type (alloc, 16, 1, "logical*2"); 4655 1.11 christos break; 4656 1.1 christos case 23: 4657 1.1 christos rettype = init_boolean_type (alloc, 32, 1, "logical*4"); 4658 1.1 christos break; 4659 1.9 christos case 24: 4660 1.7 christos rettype = init_boolean_type (alloc, 32, 1, "logical"); 4661 1.1 christos break; 4662 1.1 christos case 25: 4663 1.1 christos /* Complex type consisting of two IEEE single precision values. */ 4664 1.9 christos rettype = init_complex_type ("complex", 4665 1.7 christos rs6000_builtin_type (12, objfile)); 4666 1.1 christos break; 4667 1.1 christos case 26: 4668 1.11 christos /* Complex type consisting of two IEEE double precision values. */ 4669 1.1 christos rettype = init_complex_type ("double complex", 4670 1.1 christos rs6000_builtin_type (13, objfile)); 4671 1.11 christos break; 4672 1.1 christos case 27: 4673 1.1 christos rettype = init_integer_type (alloc, 8, 0, "integer*1"); 4674 1.11 christos break; 4675 1.1 christos case 28: 4676 1.1 christos rettype = init_integer_type (alloc, 16, 0, "integer*2"); 4677 1.11 christos break; 4678 1.1 christos case 29: 4679 1.1 christos rettype = init_integer_type (alloc, 32, 0, "integer*4"); 4680 1.11 christos break; 4681 1.1 christos case 30: 4682 1.1 christos rettype = init_character_type (alloc, 16, 0, "wchar"); 4683 1.11 christos break; 4684 1.1 christos case 31: 4685 1.1 christos rettype = init_integer_type (alloc, 64, 0, "long long"); 4686 1.11 christos break; 4687 1.1 christos case 32: 4688 1.1 christos rettype = init_integer_type (alloc, 64, 1, "unsigned long long"); 4689 1.11 christos break; 4690 1.1 christos case 33: 4691 1.1 christos rettype = init_integer_type (alloc, 64, 1, "logical*8"); 4692 1.1 christos break; 4693 1.1 christos case 34: 4694 1.1 christos rettype = init_integer_type (alloc, 64, 0, "integer*8"); 4695 1.1 christos break; 4696 1.1 christos } 4697 1.1 christos negative_types[-typenum] = rettype; 4698 1.1 christos return rettype; 4699 1.1 christos } 4700 1.1 christos 4701 1.1 christos /* This page contains subroutines of read_type. */ 4703 1.1 christos 4704 1.1 christos /* Wrapper around method_name_from_physname to flag a complaint 4705 1.1 christos if there is an error. */ 4706 1.1 christos 4707 1.1 christos static char * 4708 1.1 christos stabs_method_name_from_physname (const char *physname) 4709 1.1 christos { 4710 1.8 christos char *method_name; 4711 1.1 christos 4712 1.1 christos method_name = method_name_from_physname (physname); 4713 1.1 christos 4714 1.1 christos if (method_name == NULL) 4715 1.1 christos { 4716 1.1 christos complaint (_("Method has bad physname %s\n"), physname); 4717 1.1 christos return NULL; 4718 1.1 christos } 4719 1.1 christos 4720 1.1 christos return method_name; 4721 1.1 christos } 4722 1.1 christos 4723 1.1 christos /* Read member function stabs info for C++ classes. The form of each member 4724 1.1 christos function data is: 4725 1.1 christos 4726 1.1 christos NAME :: TYPENUM[=type definition] ARGS : PHYSNAME ; 4727 1.1 christos 4728 1.1 christos An example with two member functions is: 4729 1.1 christos 4730 1.1 christos afunc1::20=##15;:i;2A.;afunc2::20:i;2A.; 4731 1.1 christos 4732 1.1 christos For the case of overloaded operators, the format is op$::*.funcs, where 4733 1.9 christos $ is the CPLUS_MARKER (usually '$'), `*' holds the place for an operator 4734 1.7 christos name (such as `+=') and `.' marks the end of the operator name. 4735 1.1 christos 4736 1.1 christos Returns 1 for success, 0 for failure. */ 4737 1.1 christos 4738 1.1 christos static int 4739 1.1 christos read_member_functions (struct stab_field_info *fip, const char **pp, 4740 1.1 christos struct type *type, struct objfile *objfile) 4741 1.1 christos { 4742 1.1 christos int nfn_fields = 0; 4743 1.1 christos int length = 0; 4744 1.1 christos int i; 4745 1.1 christos struct next_fnfield 4746 1.1 christos { 4747 1.1 christos struct next_fnfield *next; 4748 1.1 christos struct fn_field fn_field; 4749 1.7 christos } 4750 1.1 christos *sublist; 4751 1.1 christos struct type *look_ahead_type; 4752 1.1 christos struct next_fnfieldlist *new_fnlist; 4753 1.1 christos struct next_fnfield *new_sublist; 4754 1.1 christos char *main_fn_name; 4755 1.1 christos const char *p; 4756 1.1 christos 4757 1.10 christos /* Process each list until we find something that is not a member function 4758 1.10 christos or find the end of the functions. */ 4759 1.1 christos 4760 1.1 christos while (**pp != ';') 4761 1.1 christos { 4762 1.1 christos /* We should be positioned at the start of the function name. 4763 1.1 christos Scan forward to find the first ':' and if it is not the 4764 1.1 christos first of a "::" delimiter, then this is not a member function. */ 4765 1.1 christos p = *pp; 4766 1.1 christos while (*p != ':') 4767 1.1 christos { 4768 1.1 christos p++; 4769 1.1 christos } 4770 1.1 christos if (p[1] != ':') 4771 1.1 christos { 4772 1.1 christos break; 4773 1.9 christos } 4774 1.1 christos 4775 1.1 christos sublist = NULL; 4776 1.1 christos look_ahead_type = NULL; 4777 1.12 christos length = 0; 4778 1.1 christos 4779 1.1 christos new_fnlist = OBSTACK_ZALLOC (&fip->obstack, struct next_fnfieldlist); 4780 1.1 christos 4781 1.1 christos if ((*pp)[0] == 'o' && (*pp)[1] == 'p' && is_cplus_marker ((*pp)[2])) 4782 1.1 christos { 4783 1.1 christos /* This is a completely weird case. In order to stuff in the 4784 1.1 christos names that might contain colons (the usual name delimiter), 4785 1.1 christos Mike Tiemann defined a different name format which is 4786 1.1 christos signalled if the identifier is "op$". In that case, the 4787 1.1 christos format is "op$::XXXX." where XXXX is the name. This is 4788 1.1 christos used for names like "+" or "=". YUUUUUUUK! FIXME! */ 4789 1.1 christos /* This lets the user type "break operator+". 4790 1.1 christos We could just put in "+" as the name, but that wouldn't 4791 1.1 christos work for "*". */ 4792 1.1 christos static char opname[32] = "op$"; 4793 1.1 christos char *o = opname + 3; 4794 1.1 christos 4795 1.1 christos /* Skip past '::'. */ 4796 1.1 christos *pp = p + 2; 4797 1.1 christos 4798 1.1 christos STABS_CONTINUE (pp, objfile); 4799 1.1 christos p = *pp; 4800 1.1 christos while (*p != '.') 4801 1.1 christos { 4802 1.1 christos *o++ = *p++; 4803 1.1 christos } 4804 1.1 christos main_fn_name = savestring (opname, o - opname); 4805 1.1 christos /* Skip past '.' */ 4806 1.1 christos *pp = p + 1; 4807 1.1 christos } 4808 1.1 christos else 4809 1.1 christos { 4810 1.1 christos main_fn_name = savestring (*pp, p - *pp); 4811 1.1 christos /* Skip past '::'. */ 4812 1.9 christos *pp = p + 2; 4813 1.1 christos } 4814 1.1 christos new_fnlist->fn_fieldlist.name = main_fn_name; 4815 1.1 christos 4816 1.1 christos do 4817 1.1 christos { 4818 1.1 christos new_sublist = OBSTACK_ZALLOC (&fip->obstack, struct next_fnfield); 4819 1.1 christos 4820 1.1 christos /* Check for and handle cretinous dbx symbol name continuation! */ 4821 1.1 christos if (look_ahead_type == NULL) 4822 1.1 christos { 4823 1.1 christos /* Normal case. */ 4824 1.1 christos STABS_CONTINUE (pp, objfile); 4825 1.1 christos 4826 1.1 christos new_sublist->fn_field.type = read_type (pp, objfile); 4827 1.1 christos if (**pp != ':') 4828 1.1 christos { 4829 1.1 christos /* Invalid symtab info for member function. */ 4830 1.1 christos return 0; 4831 1.1 christos } 4832 1.1 christos } 4833 1.1 christos else 4834 1.1 christos { 4835 1.1 christos /* g++ version 1 kludge */ 4836 1.1 christos new_sublist->fn_field.type = look_ahead_type; 4837 1.1 christos look_ahead_type = NULL; 4838 1.1 christos } 4839 1.1 christos 4840 1.1 christos (*pp)++; 4841 1.5 christos p = *pp; 4842 1.9 christos while (*p != ';') 4843 1.9 christos { 4844 1.5 christos p++; 4845 1.1 christos } 4846 1.10 christos 4847 1.1 christos /* These are methods, not functions. */ 4848 1.5 christos if (new_sublist->fn_field.type->code () == TYPE_CODE_FUNC) 4849 1.5 christos new_sublist->fn_field.type->set_code (TYPE_CODE_METHOD); 4850 1.1 christos 4851 1.1 christos /* If this is just a stub, then we don't have the real name here. */ 4852 1.5 christos if (new_sublist->fn_field.type->is_stub ()) 4853 1.1 christos { 4854 1.1 christos if (!TYPE_SELF_TYPE (new_sublist->fn_field.type)) 4855 1.1 christos set_type_self_type (new_sublist->fn_field.type, type); 4856 1.1 christos new_sublist->fn_field.is_stub = 1; 4857 1.1 christos } 4858 1.1 christos 4859 1.1 christos new_sublist->fn_field.physname = savestring (*pp, p - *pp); 4860 1.11 christos *pp = p + 1; 4861 1.1 christos 4862 1.1 christos /* Set this member function's visibility fields. */ 4863 1.11 christos switch (*(*pp)++) 4864 1.1 christos { 4865 1.1 christos case VISIBILITY_PRIVATE: 4866 1.1 christos new_sublist->fn_field.accessibility = accessibility::PRIVATE; 4867 1.1 christos break; 4868 1.1 christos case VISIBILITY_PROTECTED: 4869 1.1 christos new_sublist->fn_field.accessibility = accessibility::PROTECTED; 4870 1.1 christos break; 4871 1.1 christos } 4872 1.1 christos 4873 1.1 christos STABS_CONTINUE (pp, objfile); 4874 1.1 christos switch (**pp) 4875 1.1 christos { 4876 1.1 christos case 'A': /* Normal functions. */ 4877 1.1 christos new_sublist->fn_field.is_const = 0; 4878 1.1 christos new_sublist->fn_field.is_volatile = 0; 4879 1.1 christos (*pp)++; 4880 1.1 christos break; 4881 1.1 christos case 'B': /* `const' member functions. */ 4882 1.1 christos new_sublist->fn_field.is_const = 1; 4883 1.1 christos new_sublist->fn_field.is_volatile = 0; 4884 1.1 christos (*pp)++; 4885 1.1 christos break; 4886 1.1 christos case 'C': /* `volatile' member function. */ 4887 1.1 christos new_sublist->fn_field.is_const = 0; 4888 1.1 christos new_sublist->fn_field.is_volatile = 1; 4889 1.1 christos (*pp)++; 4890 1.1 christos break; 4891 1.1 christos case 'D': /* `const volatile' member function. */ 4892 1.1 christos new_sublist->fn_field.is_const = 1; 4893 1.1 christos new_sublist->fn_field.is_volatile = 1; 4894 1.1 christos (*pp)++; 4895 1.1 christos break; 4896 1.8 christos case '*': /* File compiled with g++ version 1 -- 4897 1.1 christos no info. */ 4898 1.1 christos case '?': 4899 1.1 christos case '.': 4900 1.1 christos break; 4901 1.1 christos default: 4902 1.1 christos complaint (_("const/volatile indicator missing, got '%c'"), 4903 1.1 christos **pp); 4904 1.1 christos break; 4905 1.1 christos } 4906 1.1 christos 4907 1.1 christos switch (*(*pp)++) 4908 1.1 christos { 4909 1.1 christos case '*': 4910 1.1 christos { 4911 1.1 christos int nbits; 4912 1.1 christos /* virtual member function, followed by index. 4913 1.1 christos The sign bit is set to distinguish pointers-to-methods 4914 1.1 christos from virtual function indicies. Since the array is 4915 1.1 christos in words, the quantity must be shifted left by 1 4916 1.1 christos on 16 bit machine, and by 2 on 32 bit machine, forcing 4917 1.1 christos the sign bit out, and usable as a valid index into 4918 1.1 christos the array. Remove the sign bit here. */ 4919 1.1 christos new_sublist->fn_field.voffset = 4920 1.1 christos (0x7fffffff & read_huge_number (pp, ';', &nbits, 0)) + 2; 4921 1.1 christos if (nbits != 0) 4922 1.1 christos return 0; 4923 1.1 christos 4924 1.1 christos STABS_CONTINUE (pp, objfile); 4925 1.1 christos if (**pp == ';' || **pp == '\0') 4926 1.1 christos { 4927 1.1 christos /* Must be g++ version 1. */ 4928 1.1 christos new_sublist->fn_field.fcontext = 0; 4929 1.1 christos } 4930 1.1 christos else 4931 1.1 christos { 4932 1.1 christos /* Figure out from whence this virtual function came. 4933 1.1 christos It may belong to virtual function table of 4934 1.1 christos one of its baseclasses. */ 4935 1.1 christos look_ahead_type = read_type (pp, objfile); 4936 1.1 christos if (**pp == ':') 4937 1.1 christos { 4938 1.1 christos /* g++ version 1 overloaded methods. */ 4939 1.1 christos } 4940 1.1 christos else 4941 1.1 christos { 4942 1.1 christos new_sublist->fn_field.fcontext = look_ahead_type; 4943 1.1 christos if (**pp != ';') 4944 1.1 christos { 4945 1.1 christos return 0; 4946 1.1 christos } 4947 1.1 christos else 4948 1.1 christos { 4949 1.1 christos ++*pp; 4950 1.1 christos } 4951 1.1 christos look_ahead_type = NULL; 4952 1.1 christos } 4953 1.1 christos } 4954 1.1 christos break; 4955 1.1 christos } 4956 1.1 christos case '?': 4957 1.1 christos /* static member function. */ 4958 1.1 christos { 4959 1.1 christos int slen = strlen (main_fn_name); 4960 1.1 christos 4961 1.1 christos new_sublist->fn_field.voffset = VOFFSET_STATIC; 4962 1.1 christos 4963 1.1 christos /* For static member functions, we can't tell if they 4964 1.1 christos are stubbed, as they are put out as functions, and not as 4965 1.1 christos methods. 4966 1.1 christos GCC v2 emits the fully mangled name if 4967 1.1 christos dbxout.c:flag_minimal_debug is not set, so we have to 4968 1.1 christos detect a fully mangled physname here and set is_stub 4969 1.1 christos accordingly. Fully mangled physnames in v2 start with 4970 1.1 christos the member function name, followed by two underscores. 4971 1.1 christos GCC v3 currently always emits stubbed member functions, 4972 1.1 christos but with fully mangled physnames, which start with _Z. */ 4973 1.1 christos if (!(strncmp (new_sublist->fn_field.physname, 4974 1.1 christos main_fn_name, slen) == 0 4975 1.1 christos && new_sublist->fn_field.physname[slen] == '_' 4976 1.1 christos && new_sublist->fn_field.physname[slen + 1] == '_')) 4977 1.1 christos { 4978 1.1 christos new_sublist->fn_field.is_stub = 1; 4979 1.8 christos } 4980 1.1 christos break; 4981 1.8 christos } 4982 1.11 christos 4983 1.1 christos default: 4984 1.1 christos /* error */ 4985 1.1 christos complaint (_("member function type missing, got '%c'"), 4986 1.1 christos (*pp)[-1]); 4987 1.1 christos /* Normal member function. */ 4988 1.1 christos [[fallthrough]]; 4989 1.1 christos 4990 1.1 christos case '.': 4991 1.1 christos /* normal member function. */ 4992 1.1 christos new_sublist->fn_field.voffset = 0; 4993 1.1 christos new_sublist->fn_field.fcontext = 0; 4994 1.1 christos break; 4995 1.1 christos } 4996 1.1 christos 4997 1.1 christos new_sublist->next = sublist; 4998 1.1 christos sublist = new_sublist; 4999 1.1 christos length++; 5000 1.1 christos STABS_CONTINUE (pp, objfile); 5001 1.1 christos } 5002 1.1 christos while (**pp != ';' && **pp != '\0'); 5003 1.1 christos 5004 1.1 christos (*pp)++; 5005 1.1 christos STABS_CONTINUE (pp, objfile); 5006 1.1 christos 5007 1.1 christos /* Skip GCC 3.X member functions which are duplicates of the callable 5008 1.1 christos constructor/destructor. */ 5009 1.1 christos if (strcmp_iw (main_fn_name, "__base_ctor ") == 0 5010 1.1 christos || strcmp_iw (main_fn_name, "__base_dtor ") == 0 5011 1.1 christos || strcmp (main_fn_name, "__deleting_dtor") == 0) 5012 1.1 christos { 5013 1.1 christos xfree (main_fn_name); 5014 1.1 christos } 5015 1.1 christos else 5016 1.1 christos { 5017 1.1 christos int has_destructor = 0, has_other = 0; 5018 1.1 christos int is_v3 = 0; 5019 1.1 christos struct next_fnfield *tmp_sublist; 5020 1.1 christos 5021 1.1 christos /* Various versions of GCC emit various mostly-useless 5022 1.1 christos strings in the name field for special member functions. 5023 1.1 christos 5024 1.1 christos For stub methods, we need to defer correcting the name 5025 1.1 christos until we are ready to unstub the method, because the current 5026 1.1 christos name string is used by gdb_mangle_name. The only stub methods 5027 1.1 christos of concern here are GNU v2 operators; other methods have their 5028 1.1 christos names correct (see caveat below). 5029 1.1 christos 5030 1.1 christos For non-stub methods, in GNU v3, we have a complete physname. 5031 1.1 christos Therefore we can safely correct the name now. This primarily 5032 1.1 christos affects constructors and destructors, whose name will be 5033 1.1 christos __comp_ctor or __comp_dtor instead of Foo or ~Foo. Cast 5034 1.1 christos operators will also have incorrect names; for instance, 5035 1.1 christos "operator int" will be named "operator i" (i.e. the type is 5036 1.1 christos mangled). 5037 1.1 christos 5038 1.1 christos For non-stub methods in GNU v2, we have no easy way to 5039 1.1 christos know if we have a complete physname or not. For most 5040 1.1 christos methods the result depends on the platform (if CPLUS_MARKER 5041 1.1 christos can be `$' or `.', it will use minimal debug information, or 5042 1.1 christos otherwise the full physname will be included). 5043 1.1 christos 5044 1.1 christos Rather than dealing with this, we take a different approach. 5045 1.1 christos For v3 mangled names, we can use the full physname; for v2, 5046 1.1 christos we use cplus_demangle_opname (which is actually v2 specific), 5047 1.1 christos because the only interesting names are all operators - once again 5048 1.1 christos barring the caveat below. Skip this process if any method in the 5049 1.1 christos group is a stub, to prevent our fouling up the workings of 5050 1.1 christos gdb_mangle_name. 5051 1.1 christos 5052 1.1 christos The caveat: GCC 2.95.x (and earlier?) put constructors and 5053 1.1 christos destructors in the same method group. We need to split this 5054 1.1 christos into two groups, because they should have different names. 5055 1.1 christos So for each method group we check whether it contains both 5056 1.1 christos routines whose physname appears to be a destructor (the physnames 5057 1.1 christos for and destructors are always provided, due to quirks in v2 5058 1.1 christos mangling) and routines whose physname does not appear to be a 5059 1.1 christos destructor. If so then we break up the list into two halves. 5060 1.10 christos Even if the constructors and destructors aren't in the same group 5061 1.1 christos the destructor will still lack the leading tilde, so that also 5062 1.1 christos needs to be fixed. 5063 1.1 christos 5064 1.10 christos So, to summarize what we expect and handle here: 5065 1.1 christos 5066 1.10 christos Given Given Real Real Action 5067 1.1 christos method name physname physname method name 5068 1.1 christos 5069 1.1 christos __opi [none] __opi__3Foo operator int opname 5070 1.1 christos [now or later] 5071 1.1 christos Foo _._3Foo _._3Foo ~Foo separate and 5072 1.1 christos rename 5073 1.1 christos operator i _ZN3FoocviEv _ZN3FoocviEv operator int demangle 5074 1.1 christos __comp_ctor _ZN3FooC1ERKS_ _ZN3FooC1ERKS_ Foo demangle 5075 1.1 christos */ 5076 1.1 christos 5077 1.1 christos tmp_sublist = sublist; 5078 1.1 christos while (tmp_sublist != NULL) 5079 1.1 christos { 5080 1.1 christos if (tmp_sublist->fn_field.physname[0] == '_' 5081 1.1 christos && tmp_sublist->fn_field.physname[1] == 'Z') 5082 1.1 christos is_v3 = 1; 5083 1.1 christos 5084 1.1 christos if (is_destructor_name (tmp_sublist->fn_field.physname)) 5085 1.1 christos has_destructor++; 5086 1.1 christos else 5087 1.1 christos has_other++; 5088 1.1 christos 5089 1.1 christos tmp_sublist = tmp_sublist->next; 5090 1.1 christos } 5091 1.1 christos 5092 1.1 christos if (has_destructor && has_other) 5093 1.9 christos { 5094 1.9 christos struct next_fnfieldlist *destr_fnlist; 5095 1.6 christos struct next_fnfield *last_sublist; 5096 1.1 christos 5097 1.1 christos /* Create a new fn_fieldlist for the destructors. */ 5098 1.1 christos 5099 1.1 christos destr_fnlist = OBSTACK_ZALLOC (&fip->obstack, 5100 1.6 christos struct next_fnfieldlist); 5101 1.6 christos 5102 1.6 christos destr_fnlist->fn_fieldlist.name 5103 1.1 christos = obconcat (&objfile->objfile_obstack, "~", 5104 1.1 christos new_fnlist->fn_fieldlist.name, (char *) NULL); 5105 1.1 christos 5106 1.1 christos destr_fnlist->fn_fieldlist.fn_fields = 5107 1.1 christos XOBNEWVEC (&objfile->objfile_obstack, 5108 1.1 christos struct fn_field, has_destructor); 5109 1.1 christos memset (destr_fnlist->fn_fieldlist.fn_fields, 0, 5110 1.1 christos sizeof (struct fn_field) * has_destructor); 5111 1.1 christos tmp_sublist = sublist; 5112 1.1 christos last_sublist = NULL; 5113 1.1 christos i = 0; 5114 1.1 christos while (tmp_sublist != NULL) 5115 1.1 christos { 5116 1.1 christos if (!is_destructor_name (tmp_sublist->fn_field.physname)) 5117 1.1 christos { 5118 1.1 christos tmp_sublist = tmp_sublist->next; 5119 1.1 christos continue; 5120 1.1 christos } 5121 1.1 christos 5122 1.1 christos destr_fnlist->fn_fieldlist.fn_fields[i++] 5123 1.1 christos = tmp_sublist->fn_field; 5124 1.1 christos if (last_sublist) 5125 1.1 christos last_sublist->next = tmp_sublist->next; 5126 1.1 christos else 5127 1.1 christos sublist = tmp_sublist->next; 5128 1.1 christos last_sublist = tmp_sublist; 5129 1.1 christos tmp_sublist = tmp_sublist->next; 5130 1.1 christos } 5131 1.1 christos 5132 1.1 christos destr_fnlist->fn_fieldlist.length = has_destructor; 5133 1.1 christos destr_fnlist->next = fip->fnlist; 5134 1.1 christos fip->fnlist = destr_fnlist; 5135 1.1 christos nfn_fields++; 5136 1.1 christos length -= has_destructor; 5137 1.1 christos } 5138 1.1 christos else if (is_v3) 5139 1.1 christos { 5140 1.1 christos /* v3 mangling prevents the use of abbreviated physnames, 5141 1.1 christos so we can do this here. There are stubbed methods in v3 5142 1.1 christos only: 5143 1.1 christos - in -gstabs instead of -gstabs+ 5144 1.1 christos - or for static methods, which are output as a function type 5145 1.1 christos instead of a method type. */ 5146 1.1 christos char *new_method_name = 5147 1.1 christos stabs_method_name_from_physname (sublist->fn_field.physname); 5148 1.1 christos 5149 1.1 christos if (new_method_name != NULL 5150 1.1 christos && strcmp (new_method_name, 5151 1.1 christos new_fnlist->fn_fieldlist.name) != 0) 5152 1.1 christos { 5153 1.1 christos new_fnlist->fn_fieldlist.name = new_method_name; 5154 1.1 christos xfree (main_fn_name); 5155 1.1 christos } 5156 1.1 christos else 5157 1.1 christos xfree (new_method_name); 5158 1.1 christos } 5159 1.1 christos else if (has_destructor && new_fnlist->fn_fieldlist.name[0] != '~') 5160 1.1 christos { 5161 1.8 christos new_fnlist->fn_fieldlist.name = 5162 1.8 christos obconcat (&objfile->objfile_obstack, 5163 1.1 christos "~", main_fn_name, (char *)NULL); 5164 1.1 christos xfree (main_fn_name); 5165 1.1 christos } 5166 1.1 christos 5167 1.1 christos new_fnlist->fn_fieldlist.fn_fields 5168 1.1 christos = OBSTACK_CALLOC (&objfile->objfile_obstack, length, fn_field); 5169 1.1 christos for (i = length; (i--, sublist); sublist = sublist->next) 5170 1.1 christos { 5171 1.1 christos new_fnlist->fn_fieldlist.fn_fields[i] = sublist->fn_field; 5172 1.1 christos } 5173 1.1 christos 5174 1.1 christos new_fnlist->fn_fieldlist.length = length; 5175 1.1 christos new_fnlist->next = fip->fnlist; 5176 1.1 christos fip->fnlist = new_fnlist; 5177 1.1 christos nfn_fields++; 5178 1.1 christos } 5179 1.11 christos } 5180 1.1 christos 5181 1.1 christos if (nfn_fields) 5182 1.1 christos { 5183 1.1 christos ALLOCATE_CPLUS_STRUCT_TYPE (type); 5184 1.1 christos TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *) 5185 1.1 christos TYPE_ZALLOC (type, sizeof (struct fn_fieldlist) * nfn_fields); 5186 1.1 christos TYPE_NFN_FIELDS (type) = nfn_fields; 5187 1.1 christos } 5188 1.1 christos 5189 1.1 christos return 1; 5190 1.1 christos } 5191 1.1 christos 5192 1.9 christos /* Special GNU C++ name. 5193 1.9 christos 5194 1.1 christos Returns 1 for success, 0 for failure. "failure" means that we can't 5195 1.7 christos keep parsing and it's time for error_type(). */ 5196 1.1 christos 5197 1.1 christos static int 5198 1.1 christos read_cpp_abbrev (struct stab_field_info *fip, const char **pp, 5199 1.1 christos struct type *type, struct objfile *objfile) 5200 1.1 christos { 5201 1.1 christos const char *p; 5202 1.1 christos const char *name; 5203 1.1 christos char cpp_abbrev; 5204 1.1 christos struct type *context; 5205 1.1 christos 5206 1.1 christos p = *pp; 5207 1.1 christos if (*++p == 'v') 5208 1.1 christos { 5209 1.10 christos name = NULL; 5210 1.10 christos cpp_abbrev = *++p; 5211 1.10 christos 5212 1.1 christos *pp = p + 1; 5213 1.1 christos 5214 1.1 christos /* At this point, *pp points to something like "22:23=*22...", 5215 1.1 christos where the type number before the ':' is the "context" and 5216 1.1 christos everything after is a regular type definition. Lookup the 5217 1.1 christos type, find it's name, and construct the field name. */ 5218 1.9 christos 5219 1.1 christos context = read_type (pp, objfile); 5220 1.1 christos 5221 1.1 christos switch (cpp_abbrev) 5222 1.1 christos { 5223 1.10 christos case 'f': /* $vf -- a virtual function table pointer */ 5224 1.10 christos name = context->name (); 5225 1.1 christos if (name == NULL) 5226 1.1 christos { 5227 1.1 christos name = ""; 5228 1.9 christos } 5229 1.1 christos fip->list->field.set_name (obconcat (&objfile->objfile_obstack, 5230 1.1 christos vptr_name, name, (char *) NULL)); 5231 1.8 christos break; 5232 1.1 christos 5233 1.1 christos case 'b': /* $vb -- a virtual bsomethingorother */ 5234 1.1 christos name = context->name (); 5235 1.1 christos if (name == NULL) 5236 1.10 christos { 5237 1.10 christos complaint (_("C++ abbreviated type name " 5238 1.1 christos "unknown at symtab pos %d"), 5239 1.1 christos symnum); 5240 1.1 christos name = "FOO"; 5241 1.1 christos } 5242 1.10 christos fip->list->field.set_name (obconcat (&objfile->objfile_obstack, 5243 1.10 christos vb_name, name, (char *) NULL)); 5244 1.10 christos break; 5245 1.1 christos 5246 1.1 christos default: 5247 1.1 christos invalid_cpp_abbrev_complaint (*pp); 5248 1.1 christos fip->list->field.set_name (obconcat (&objfile->objfile_obstack, 5249 1.10 christos "INVALID_CPLUSPLUS_ABBREV", 5250 1.1 christos (char *) NULL)); 5251 1.1 christos break; 5252 1.1 christos } 5253 1.1 christos 5254 1.1 christos /* At this point, *pp points to the ':'. Skip it and read the 5255 1.1 christos field type. */ 5256 1.1 christos 5257 1.9 christos p = ++(*pp); 5258 1.1 christos if (p[-1] != ':') 5259 1.1 christos { 5260 1.1 christos invalid_cpp_abbrev_complaint (*pp); 5261 1.1 christos return 0; 5262 1.1 christos } 5263 1.1 christos fip->list->field.set_type (read_type (pp, objfile)); 5264 1.1 christos if (**pp == ',') 5265 1.1 christos (*pp)++; /* Skip the comma. */ 5266 1.10 christos else 5267 1.1 christos return 0; 5268 1.1 christos 5269 1.1 christos { 5270 1.1 christos int nbits; 5271 1.11 christos 5272 1.11 christos fip->list->field.set_loc_bitpos (read_huge_number (pp, ';', &nbits, 0)); 5273 1.1 christos if (nbits != 0) 5274 1.1 christos return 0; 5275 1.1 christos } 5276 1.1 christos /* This field is unpacked. */ 5277 1.1 christos fip->list->field.set_bitsize (0); 5278 1.10 christos fip->list->field.set_accessibility (accessibility::PRIVATE); 5279 1.10 christos } 5280 1.1 christos else 5281 1.1 christos { 5282 1.1 christos invalid_cpp_abbrev_complaint (*pp); 5283 1.1 christos /* We have no idea what syntax an unrecognized abbrev would have, so 5284 1.1 christos better return 0. If we returned 1, we would need to at least advance 5285 1.1 christos *pp to avoid an infinite loop. */ 5286 1.9 christos return 0; 5287 1.9 christos } 5288 1.9 christos return 1; 5289 1.1 christos } 5290 1.9 christos 5291 1.1 christos static void 5292 1.10 christos read_one_struct_field (struct stab_field_info *fip, const char **pp, 5293 1.10 christos const char *p, struct type *type, 5294 1.1 christos struct objfile *objfile) 5295 1.1 christos { 5296 1.1 christos struct gdbarch *gdbarch = objfile->arch (); 5297 1.11 christos 5298 1.1 christos fip->list->field.set_name 5299 1.1 christos (obstack_strndup (&objfile->objfile_obstack, *pp, p - *pp)); 5300 1.1 christos *pp = p + 1; 5301 1.11 christos 5302 1.1 christos /* This means we have a visibility for a field coming. */ 5303 1.1 christos int visibility; 5304 1.1 christos if (**pp == '/') 5305 1.1 christos { 5306 1.11 christos (*pp)++; 5307 1.11 christos visibility = *(*pp)++; 5308 1.11 christos } 5309 1.11 christos else 5310 1.11 christos { 5311 1.11 christos /* normal dbx-style format, no explicit visibility */ 5312 1.11 christos visibility = VISIBILITY_PUBLIC; 5313 1.11 christos } 5314 1.11 christos 5315 1.11 christos switch (visibility) 5316 1.11 christos { 5317 1.11 christos case VISIBILITY_PRIVATE: 5318 1.11 christos fip->list->field.set_accessibility (accessibility::PRIVATE); 5319 1.11 christos break; 5320 1.11 christos 5321 1.11 christos case VISIBILITY_PROTECTED: 5322 1.11 christos fip->list->field.set_accessibility (accessibility::PROTECTED); 5323 1.11 christos break; 5324 1.11 christos 5325 1.11 christos case VISIBILITY_IGNORE: 5326 1.11 christos fip->list->field.set_ignored (); 5327 1.11 christos break; 5328 1.11 christos 5329 1.11 christos case VISIBILITY_PUBLIC: 5330 1.11 christos break; 5331 1.11 christos 5332 1.11 christos default: 5333 1.1 christos /* Unknown visibility. Complain and treat it as public. */ 5334 1.1 christos { 5335 1.9 christos complaint (_("Unknown visibility `%c' for field"), 5336 1.1 christos visibility); 5337 1.1 christos } 5338 1.1 christos break; 5339 1.1 christos } 5340 1.1 christos 5341 1.1 christos fip->list->field.set_type (read_type (pp, objfile)); 5342 1.1 christos if (**pp == ':') 5343 1.1 christos { 5344 1.1 christos p = ++(*pp); 5345 1.1 christos #if 0 5346 1.1 christos /* Possible future hook for nested types. */ 5347 1.1 christos if (**pp == '!') 5348 1.1 christos { 5349 1.1 christos fip->list->field.bitpos = (long) -2; /* nested type */ 5350 1.1 christos p = ++(*pp); 5351 1.1 christos } 5352 1.1 christos else 5353 1.1 christos ...; 5354 1.10 christos #endif 5355 1.1 christos while (*p != ';') 5356 1.1 christos { 5357 1.1 christos p++; 5358 1.1 christos } 5359 1.1 christos /* Static class member. */ 5360 1.1 christos fip->list->field.set_loc_physname (savestring (*pp, p - *pp)); 5361 1.1 christos *pp = p + 1; 5362 1.1 christos return; 5363 1.1 christos } 5364 1.1 christos else if (**pp != ',') 5365 1.1 christos { 5366 1.1 christos /* Bad structure-type format. */ 5367 1.1 christos stabs_general_complaint ("bad structure-type format"); 5368 1.1 christos return; 5369 1.1 christos } 5370 1.10 christos 5371 1.1 christos (*pp)++; /* Skip the comma. */ 5372 1.1 christos 5373 1.1 christos { 5374 1.1 christos int nbits; 5375 1.1 christos 5376 1.11 christos fip->list->field.set_loc_bitpos (read_huge_number (pp, ',', &nbits, 0)); 5377 1.1 christos if (nbits != 0) 5378 1.1 christos { 5379 1.1 christos stabs_general_complaint ("bad structure-type format"); 5380 1.1 christos return; 5381 1.1 christos } 5382 1.1 christos fip->list->field.set_bitsize (read_huge_number (pp, ';', &nbits, 0)); 5383 1.1 christos if (nbits != 0) 5384 1.10 christos { 5385 1.11 christos stabs_general_complaint ("bad structure-type format"); 5386 1.1 christos return; 5387 1.1 christos } 5388 1.10 christos } 5389 1.10 christos 5390 1.10 christos if (fip->list->field.loc_bitpos () == 0 5391 1.10 christos && fip->list->field.bitsize () == 0) 5392 1.10 christos { 5393 1.10 christos /* This can happen in two cases: (1) at least for gcc 2.4.5 or so, 5394 1.10 christos it is a field which has been optimized out. The correct stab for 5395 1.10 christos this case is to use VISIBILITY_IGNORE, but that is a recent 5396 1.10 christos invention. (2) It is a 0-size array. For example 5397 1.10 christos union { int num; char str[0]; } foo. Printing _("<no value>" for 5398 1.10 christos str in "p foo" is OK, since foo.str (and thus foo.str[3]) 5399 1.10 christos will continue to work, and a 0-size array as a whole doesn't 5400 1.1 christos have any contents to print. 5401 1.1 christos 5402 1.11 christos I suspect this probably could also happen with gcc -gstabs (not 5403 1.1 christos -gstabs+) for static fields, and perhaps other C++ extensions. 5404 1.1 christos Hopefully few people use -gstabs with gdb, since it is intended 5405 1.1 christos for dbx compatibility. */ 5406 1.1 christos 5407 1.10 christos /* Ignore this field. */ 5408 1.10 christos fip->list->field.set_ignored (); 5409 1.10 christos } 5410 1.1 christos else 5411 1.9 christos { 5412 1.1 christos /* Detect an unpacked field and mark it as such. 5413 1.9 christos dbx gives a bit size for all fields. 5414 1.9 christos Note that forward refs cannot be packed, 5415 1.9 christos and treat enums as if they had the width of ints. */ 5416 1.9 christos 5417 1.1 christos struct type *field_type = check_typedef (fip->list->field.type ()); 5418 1.11 christos 5419 1.1 christos if (field_type->code () != TYPE_CODE_INT 5420 1.11 christos && field_type->code () != TYPE_CODE_RANGE 5421 1.10 christos && field_type->code () != TYPE_CODE_BOOL 5422 1.9 christos && field_type->code () != TYPE_CODE_ENUM) 5423 1.11 christos { 5424 1.11 christos fip->list->field.set_bitsize (0); 5425 1.1 christos } 5426 1.1 christos if ((fip->list->field.bitsize () 5427 1.10 christos == TARGET_CHAR_BIT * field_type->length () 5428 1.1 christos || (field_type->code () == TYPE_CODE_ENUM 5429 1.11 christos && (fip->list->field.bitsize () 5430 1.1 christos == gdbarch_int_bit (gdbarch))) 5431 1.1 christos ) 5432 1.1 christos && 5433 1.1 christos fip->list->field.loc_bitpos () % 8 == 0) 5434 1.1 christos { 5435 1.1 christos fip->list->field.set_bitsize (0); 5436 1.1 christos } 5437 1.1 christos } 5438 1.1 christos } 5439 1.1 christos 5440 1.1 christos 5441 1.1 christos /* Read struct or class data fields. They have the form: 5442 1.1 christos 5443 1.1 christos NAME : [VISIBILITY] TYPENUM , BITPOS , BITSIZE ; 5444 1.1 christos 5445 1.1 christos At the end, we see a semicolon instead of a field. 5446 1.1 christos 5447 1.1 christos In C++, this may wind up being NAME:?TYPENUM:PHYSNAME; for 5448 1.1 christos a static field. 5449 1.1 christos 5450 1.1 christos The optional VISIBILITY is one of: 5451 1.1 christos 5452 1.1 christos '/0' (VISIBILITY_PRIVATE) 5453 1.1 christos '/1' (VISIBILITY_PROTECTED) 5454 1.1 christos '/2' (VISIBILITY_PUBLIC) 5455 1.1 christos '/9' (VISIBILITY_IGNORE) 5456 1.9 christos 5457 1.9 christos or nothing, for C style fields with public visibility. 5458 1.1 christos 5459 1.7 christos Returns 1 for success, 0 for failure. */ 5460 1.10 christos 5461 1.1 christos static int 5462 1.1 christos read_struct_fields (struct stab_field_info *fip, const char **pp, 5463 1.1 christos struct type *type, struct objfile *objfile) 5464 1.1 christos { 5465 1.1 christos const char *p; 5466 1.1 christos struct stabs_nextfield *newobj; 5467 1.1 christos 5468 1.1 christos /* We better set p right now, in case there are no fields at all... */ 5469 1.1 christos 5470 1.1 christos p = *pp; 5471 1.1 christos 5472 1.1 christos /* Read each data member type until we find the terminating ';' at the end of 5473 1.1 christos the data member list, or break for some other reason such as finding the 5474 1.1 christos start of the member function list. */ 5475 1.1 christos /* Stab string for structure/union does not end with two ';' in 5476 1.10 christos SUN C compiler 5.3 i.e. F6U2, hence check for end of string. */ 5477 1.6 christos 5478 1.5 christos while (**pp != ';' && **pp != '\0') 5479 1.5 christos { 5480 1.1 christos STABS_CONTINUE (pp, objfile); 5481 1.1 christos /* Get space to record the next field's data. */ 5482 1.1 christos newobj = OBSTACK_ZALLOC (&fip->obstack, struct stabs_nextfield); 5483 1.1 christos 5484 1.1 christos newobj->next = fip->list; 5485 1.10 christos fip->list = newobj; 5486 1.10 christos 5487 1.10 christos /* Get the field name. */ 5488 1.1 christos p = *pp; 5489 1.1 christos 5490 1.1 christos /* If is starts with CPLUS_MARKER it is a special abbreviation, 5491 1.1 christos unless the CPLUS_MARKER is followed by an underscore, in 5492 1.1 christos which case it is just the name of an anonymous type, which we 5493 1.1 christos should handle like any other type name. */ 5494 1.1 christos 5495 1.1 christos if (is_cplus_marker (p[0]) && p[1] != '_') 5496 1.1 christos { 5497 1.10 christos if (!read_cpp_abbrev (fip, pp, type, objfile)) 5498 1.10 christos return 0; 5499 1.10 christos continue; 5500 1.1 christos } 5501 1.1 christos 5502 1.1 christos /* Look for the ':' that separates the field name from the field 5503 1.1 christos values. Data members are delimited by a single ':', while member 5504 1.1 christos functions are delimited by a pair of ':'s. When we hit the member 5505 1.1 christos functions (if any), terminate scan loop and return. */ 5506 1.1 christos 5507 1.1 christos while (*p != ':' && *p != '\0') 5508 1.1 christos { 5509 1.1 christos p++; 5510 1.1 christos } 5511 1.1 christos if (*p == '\0') 5512 1.1 christos return 0; 5513 1.1 christos 5514 1.1 christos /* Check to see if we have hit the member functions yet. */ 5515 1.1 christos if (p[1] == ':') 5516 1.1 christos { 5517 1.1 christos break; 5518 1.10 christos } 5519 1.10 christos read_one_struct_field (fip, pp, p, type, objfile); 5520 1.1 christos } 5521 1.1 christos if (p[0] == ':' && p[1] == ':') 5522 1.1 christos { 5523 1.1 christos /* (the deleted) chill the list of fields: the last entry (at 5524 1.1 christos the head) is a partially constructed entry which we now 5525 1.1 christos scrub. */ 5526 1.1 christos fip->list = fip->list->next; 5527 1.1 christos } 5528 1.1 christos return 1; 5529 1.1 christos } 5530 1.1 christos /* The stabs for C++ derived classes contain baseclass information which 5531 1.1 christos is marked by a '!' character after the total size. This function is 5532 1.1 christos called when we encounter the baseclass marker, and slurps up all the 5533 1.1 christos baseclass information. 5534 1.1 christos 5535 1.1 christos Immediately following the '!' marker is the number of base classes that 5536 1.10 christos the class is derived from, followed by information for each base class. 5537 1.1 christos For each base class, there are two visibility specifiers, a bit offset 5538 1.1 christos to the base class information within the derived class, a reference to 5539 1.1 christos the type for the base class, and a terminating semicolon. 5540 1.1 christos 5541 1.1 christos A typical example, with two base classes, would be "!2,020,19;0264,21;". 5542 1.1 christos ^^ ^ ^ ^ ^ ^ ^ 5543 1.1 christos Baseclass information marker __________________|| | | | | | | 5544 1.1 christos Number of baseclasses __________________________| | | | | | | 5545 1.1 christos Visibility specifiers (2) ________________________| | | | | | 5546 1.1 christos Offset in bits from start of class _________________| | | | | 5547 1.1 christos Type number for base class ___________________________| | | | 5548 1.1 christos Visibility specifiers (2) _______________________________| | | 5549 1.1 christos Offset in bits from start of class ________________________| | 5550 1.1 christos Type number of base class ____________________________________| 5551 1.9 christos 5552 1.9 christos Return 1 for success, 0 for (error-type-inducing) failure. */ 5553 1.1 christos 5554 1.1 christos 5555 1.10 christos 5556 1.1 christos static int 5557 1.1 christos read_baseclasses (struct stab_field_info *fip, const char **pp, 5558 1.1 christos struct type *type, struct objfile *objfile) 5559 1.1 christos { 5560 1.1 christos int i; 5561 1.1 christos struct stabs_nextfield *newobj; 5562 1.1 christos 5563 1.1 christos if (**pp != '!') 5564 1.1 christos { 5565 1.1 christos return 1; 5566 1.1 christos } 5567 1.1 christos else 5568 1.1 christos { 5569 1.1 christos /* Skip the '!' baseclass information marker. */ 5570 1.1 christos (*pp)++; 5571 1.1 christos } 5572 1.1 christos 5573 1.1 christos ALLOCATE_CPLUS_STRUCT_TYPE (type); 5574 1.1 christos { 5575 1.1 christos int nbits; 5576 1.1 christos 5577 1.1 christos TYPE_N_BASECLASSES (type) = read_huge_number (pp, ',', &nbits, 0); 5578 1.10 christos if (nbits != 0) 5579 1.6 christos return 0; 5580 1.5 christos } 5581 1.5 christos 5582 1.11 christos for (i = 0; i < TYPE_N_BASECLASSES (type); i++) 5583 1.1 christos { 5584 1.1 christos newobj = OBSTACK_ZALLOC (&fip->obstack, struct stabs_nextfield); 5585 1.1 christos 5586 1.1 christos newobj->next = fip->list; 5587 1.1 christos fip->list = newobj; 5588 1.1 christos newobj->field.set_bitsize (0); /* This should be an unpacked 5589 1.1 christos field! */ 5590 1.1 christos 5591 1.1 christos STABS_CONTINUE (pp, objfile); 5592 1.11 christos switch (**pp) 5593 1.1 christos { 5594 1.1 christos case '0': 5595 1.1 christos /* Nothing to do. */ 5596 1.1 christos break; 5597 1.8 christos case '1': 5598 1.1 christos newobj->field.set_virtual (); 5599 1.1 christos break; 5600 1.1 christos default: 5601 1.1 christos /* Unknown character. Complain and treat it as non-virtual. */ 5602 1.1 christos { 5603 1.11 christos complaint (_("Unknown virtual character `%c' for baseclass"), 5604 1.11 christos **pp); 5605 1.1 christos } 5606 1.1 christos } 5607 1.11 christos ++(*pp); 5608 1.11 christos 5609 1.1 christos int visibility = *(*pp)++; 5610 1.11 christos switch (visibility) 5611 1.11 christos { 5612 1.1 christos case VISIBILITY_PRIVATE: 5613 1.1 christos newobj->field.set_accessibility (accessibility::PRIVATE); 5614 1.1 christos break; 5615 1.1 christos case VISIBILITY_PROTECTED: 5616 1.1 christos newobj->field.set_accessibility (accessibility::PROTECTED); 5617 1.1 christos break; 5618 1.8 christos case VISIBILITY_PUBLIC: 5619 1.11 christos break; 5620 1.1 christos default: 5621 1.1 christos /* Bad visibility format. Complain and treat it as 5622 1.1 christos public. */ 5623 1.1 christos { 5624 1.1 christos complaint (_("Unknown visibility `%c' for baseclass"), 5625 1.1 christos visibility); 5626 1.1 christos } 5627 1.1 christos } 5628 1.1 christos 5629 1.1 christos { 5630 1.10 christos int nbits; 5631 1.1 christos 5632 1.1 christos /* The remaining value is the bit offset of the portion of the object 5633 1.1 christos corresponding to this baseclass. Always zero in the absence of 5634 1.1 christos multiple inheritance. */ 5635 1.1 christos 5636 1.10 christos newobj->field.set_loc_bitpos (read_huge_number (pp, ',', &nbits, 0)); 5637 1.10 christos if (nbits != 0) 5638 1.1 christos return 0; 5639 1.9 christos } 5640 1.10 christos 5641 1.1 christos /* The last piece of baseclass information is the type of the 5642 1.1 christos base class. Read it, and remember it's type name as this 5643 1.1 christos field's name. */ 5644 1.1 christos 5645 1.1 christos newobj->field.set_type (read_type (pp, objfile)); 5646 1.1 christos newobj->field.set_name (newobj->field.type ()->name ()); 5647 1.1 christos 5648 1.1 christos /* Skip trailing ';' and bump count of number of fields seen. */ 5649 1.1 christos if (**pp == ';') 5650 1.1 christos (*pp)++; 5651 1.1 christos else 5652 1.1 christos return 0; 5653 1.1 christos } 5654 1.1 christos return 1; 5655 1.1 christos } 5656 1.1 christos 5657 1.1 christos /* The tail end of stabs for C++ classes that contain a virtual function 5658 1.1 christos pointer contains a tilde, a %, and a type number. 5659 1.1 christos The type number refers to the base class (possibly this class itself) which 5660 1.9 christos contains the vtable pointer for the current class. 5661 1.9 christos 5662 1.1 christos This function is called when we have parsed all the method declarations, 5663 1.7 christos so we can look for the vptr base class info. */ 5664 1.1 christos 5665 1.1 christos static int 5666 1.1 christos read_tilde_fields (struct stab_field_info *fip, const char **pp, 5667 1.1 christos struct type *type, struct objfile *objfile) 5668 1.1 christos { 5669 1.1 christos const char *p; 5670 1.1 christos 5671 1.1 christos STABS_CONTINUE (pp, objfile); 5672 1.1 christos 5673 1.1 christos /* If we are positioned at a ';', then skip it. */ 5674 1.1 christos if (**pp == ';') 5675 1.1 christos { 5676 1.1 christos (*pp)++; 5677 1.1 christos } 5678 1.1 christos 5679 1.1 christos if (**pp == '~') 5680 1.1 christos { 5681 1.1 christos (*pp)++; 5682 1.1 christos 5683 1.1 christos if (**pp == '=' || **pp == '+' || **pp == '-') 5684 1.1 christos { 5685 1.1 christos /* Obsolete flags that used to indicate the presence 5686 1.1 christos of constructors and/or destructors. */ 5687 1.1 christos (*pp)++; 5688 1.1 christos } 5689 1.1 christos 5690 1.1 christos /* Read either a '%' or the final ';'. */ 5691 1.1 christos if (*(*pp)++ == '%') 5692 1.1 christos { 5693 1.1 christos /* The next number is the type number of the base class 5694 1.1 christos (possibly our own class) which supplies the vtable for 5695 1.1 christos this class. Parse it out, and search that class to find 5696 1.1 christos its vtable pointer, and install those into TYPE_VPTR_BASETYPE 5697 1.1 christos and TYPE_VPTR_FIELDNO. */ 5698 1.1 christos 5699 1.1 christos struct type *t; 5700 1.1 christos int i; 5701 1.1 christos 5702 1.1 christos t = read_type (pp, objfile); 5703 1.1 christos p = (*pp)++; 5704 1.1 christos while (*p != '\0' && *p != ';') 5705 1.1 christos { 5706 1.1 christos p++; 5707 1.1 christos } 5708 1.5 christos if (*p == '\0') 5709 1.1 christos { 5710 1.1 christos /* Premature end of symbol. */ 5711 1.9 christos return 0; 5712 1.1 christos } 5713 1.1 christos 5714 1.1 christos set_type_vptr_basetype (type, t); 5715 1.10 christos if (type == t) /* Our own class provides vtbl ptr. */ 5716 1.1 christos { 5717 1.1 christos for (i = t->num_fields () - 1; 5718 1.1 christos i >= TYPE_N_BASECLASSES (t); 5719 1.1 christos --i) 5720 1.5 christos { 5721 1.1 christos const char *name = t->field (i).name (); 5722 1.1 christos 5723 1.1 christos if (!strncmp (name, vptr_name, sizeof (vptr_name) - 2) 5724 1.1 christos && is_cplus_marker (name[sizeof (vptr_name) - 2])) 5725 1.8 christos { 5726 1.1 christos set_type_vptr_fieldno (type, i); 5727 1.9 christos goto gotit; 5728 1.1 christos } 5729 1.1 christos } 5730 1.1 christos /* Virtual function table field not found. */ 5731 1.1 christos complaint (_("virtual function table pointer " 5732 1.5 christos "not found when defining class `%s'"), 5733 1.1 christos type->name ()); 5734 1.1 christos return 0; 5735 1.1 christos } 5736 1.1 christos else 5737 1.1 christos { 5738 1.1 christos set_type_vptr_fieldno (type, TYPE_VPTR_FIELDNO (t)); 5739 1.1 christos } 5740 1.1 christos 5741 1.1 christos gotit: 5742 1.1 christos *pp = p + 1; 5743 1.9 christos } 5744 1.1 christos } 5745 1.1 christos return 1; 5746 1.1 christos } 5747 1.1 christos 5748 1.1 christos static int 5749 1.1 christos attach_fn_fields_to_type (struct stab_field_info *fip, struct type *type) 5750 1.1 christos { 5751 1.1 christos int n; 5752 1.1 christos 5753 1.1 christos for (n = TYPE_NFN_FIELDS (type); 5754 1.1 christos fip->fnlist != NULL; 5755 1.1 christos fip->fnlist = fip->fnlist->next) 5756 1.1 christos { 5757 1.1 christos --n; /* Circumvent Sun3 compiler bug. */ 5758 1.1 christos TYPE_FN_FIELDLISTS (type)[n] = fip->fnlist->fn_fieldlist; 5759 1.1 christos } 5760 1.1 christos return 1; 5761 1.1 christos } 5762 1.9 christos 5763 1.1 christos /* Create the vector of fields, and record how big it is. 5764 1.1 christos We need this info to record proper virtual function table information 5765 1.1 christos for this class's virtual functions. */ 5766 1.10 christos 5767 1.1 christos static int 5768 1.11 christos attach_fields_to_type (struct stab_field_info *fip, struct type *type, 5769 1.1 christos struct objfile *objfile) 5770 1.1 christos { 5771 1.11 christos int nfields = 0; 5772 1.1 christos struct stabs_nextfield *scan; 5773 1.1 christos 5774 1.1 christos /* Count up the number of fields that we have. */ 5775 1.11 christos 5776 1.1 christos for (scan = fip->list; scan != NULL; scan = scan->next) 5777 1.11 christos nfields++; 5778 1.1 christos 5779 1.1 christos /* Now we know how many fields there are, and whether or not there are any 5780 1.1 christos non-public fields. Record the field count, allocate space for the 5781 1.1 christos array of fields. */ 5782 1.1 christos 5783 1.1 christos type->alloc_fields (nfields); 5784 1.1 christos 5785 1.1 christos /* Copy the saved-up fields into the field vector. Start from the 5786 1.9 christos head of the list, adding to the tail of the field array, so that 5787 1.1 christos they end up in the same order in the array in which they were 5788 1.1 christos added to the list. */ 5789 1.1 christos 5790 1.1 christos while (nfields-- > 0) 5791 1.1 christos { 5792 1.1 christos type->field (nfields) = fip->list->field; 5793 1.1 christos fip->list = fip->list->next; 5794 1.1 christos } 5795 1.1 christos return 1; 5796 1.1 christos } 5797 1.1 christos 5798 1.1 christos 5799 1.1 christos /* Complain that the compiler has emitted more than one definition for the 5800 1.1 christos structure type TYPE. */ 5801 1.9 christos static void 5802 1.1 christos complain_about_struct_wipeout (struct type *type) 5803 1.9 christos { 5804 1.9 christos const char *name = ""; 5805 1.10 christos const char *kind = ""; 5806 1.10 christos 5807 1.10 christos if (type->name ()) 5808 1.10 christos { 5809 1.10 christos name = type->name (); 5810 1.10 christos switch (type->code ()) 5811 1.1 christos { 5812 1.1 christos case TYPE_CODE_STRUCT: kind = "struct "; break; 5813 1.1 christos case TYPE_CODE_UNION: kind = "union "; break; 5814 1.1 christos case TYPE_CODE_ENUM: kind = "enum "; break; 5815 1.1 christos default: kind = ""; 5816 1.1 christos } 5817 1.1 christos } 5818 1.8 christos else 5819 1.1 christos { 5820 1.1 christos name = "<unknown>"; 5821 1.1 christos kind = ""; 5822 1.1 christos } 5823 1.1 christos 5824 1.1 christos complaint (_("struct/union type gets multiply defined: %s%s"), kind, name); 5825 1.1 christos } 5826 1.1 christos 5827 1.1 christos /* Set the length for all variants of a same main_type, which are 5828 1.1 christos connected in the closed chain. 5829 1.10 christos 5830 1.10 christos This is something that needs to be done when a type is defined *after* 5831 1.1 christos some cross references to this type have already been read. Consider 5832 1.1 christos for instance the following scenario where we have the following two 5833 1.1 christos stabs entries: 5834 1.1 christos 5835 1.1 christos .stabs "t:p(0,21)=*(0,22)=k(0,23)=xsdummy:",160,0,28,-24 5836 1.1 christos .stabs "dummy:T(0,23)=s16x:(0,1),0,3[...]" 5837 1.1 christos 5838 1.1 christos A stubbed version of type dummy is created while processing the first 5839 1.1 christos stabs entry. The length of that type is initially set to zero, since 5840 1.1 christos it is unknown at this point. Also, a "constant" variation of type 5841 1.1 christos "dummy" is created as well (this is the "(0,22)=k(0,23)" section of 5842 1.1 christos the stabs line). 5843 1.1 christos 5844 1.1 christos The second stabs entry allows us to replace the stubbed definition 5845 1.1 christos with the real definition. However, we still need to adjust the length 5846 1.1 christos of the "constant" variation of that type, as its length was left 5847 1.1 christos untouched during the main type replacement... */ 5848 1.1 christos 5849 1.1 christos static void 5850 1.10 christos set_length_in_type_chain (struct type *type) 5851 1.10 christos { 5852 1.1 christos struct type *ntype = TYPE_CHAIN (type); 5853 1.10 christos 5854 1.1 christos while (ntype != type) 5855 1.1 christos { 5856 1.1 christos if (ntype->length () == 0) 5857 1.1 christos ntype->set_length (type->length ()); 5858 1.1 christos else 5859 1.1 christos complain_about_struct_wipeout (ntype); 5860 1.1 christos ntype = TYPE_CHAIN (ntype); 5861 1.1 christos } 5862 1.1 christos } 5863 1.1 christos 5864 1.1 christos /* Read the description of a structure (or union type) and return an object 5865 1.1 christos describing the type. 5866 1.1 christos 5867 1.1 christos PP points to a character pointer that points to the next unconsumed token 5868 1.1 christos in the stabs string. For example, given stabs "A:T4=s4a:1,0,32;;", 5869 1.1 christos *PP will point to "4a:1,0,32;;". 5870 1.1 christos 5871 1.1 christos TYPE points to an incomplete type that needs to be filled in. 5872 1.1 christos 5873 1.7 christos OBJFILE points to the current objfile from which the stabs information is 5874 1.10 christos being read. (Note that it is redundant in that TYPE also contains a pointer 5875 1.1 christos to this same objfile, so it might be a good idea to eliminate it. FIXME). 5876 1.9 christos */ 5877 1.1 christos 5878 1.1 christos static struct type * 5879 1.1 christos read_struct_type (const char **pp, struct type *type, enum type_code type_code, 5880 1.1 christos struct objfile *objfile) 5881 1.1 christos { 5882 1.1 christos struct stab_field_info fi; 5883 1.1 christos 5884 1.1 christos /* When describing struct/union/class types in stabs, G++ always drops 5885 1.1 christos all qualifications from the name. So if you've got: 5886 1.1 christos struct A { ... struct B { ... }; ... }; 5887 1.1 christos then G++ will emit stabs for `struct A::B' that call it simply 5888 1.1 christos `struct B'. Obviously, if you've got a real top-level definition for 5889 1.9 christos `struct B', or other nested definitions, this is going to cause 5890 1.10 christos problems. 5891 1.1 christos 5892 1.1 christos Obviously, GDB can't fix this by itself, but it can at least avoid 5893 1.1 christos scribbling on existing structure type objects when new definitions 5894 1.1 christos appear. */ 5895 1.1 christos if (! (type->code () == TYPE_CODE_UNDEF 5896 1.1 christos || type->is_stub ())) 5897 1.1 christos { 5898 1.1 christos complain_about_struct_wipeout (type); 5899 1.9 christos 5900 1.10 christos /* It's probably best to return the type unchanged. */ 5901 1.1 christos return type; 5902 1.1 christos } 5903 1.1 christos 5904 1.1 christos INIT_CPLUS_SPECIFIC (type); 5905 1.1 christos type->set_code (type_code); 5906 1.1 christos type->set_is_stub (false); 5907 1.10 christos 5908 1.1 christos /* First comes the total size in bytes. */ 5909 1.9 christos 5910 1.1 christos { 5911 1.1 christos int nbits; 5912 1.1 christos 5913 1.1 christos type->set_length (read_huge_number (pp, 0, &nbits, 0)); 5914 1.1 christos if (nbits != 0) 5915 1.1 christos return error_type (pp, objfile); 5916 1.1 christos set_length_in_type_chain (type); 5917 1.1 christos } 5918 1.1 christos 5919 1.1 christos /* Now read the baseclasses, if any, read the regular C struct or C++ 5920 1.1 christos class member fields, attach the fields to the type, read the C++ 5921 1.1 christos member functions, attach them to the type, and then read any tilde 5922 1.1 christos field (baseclass specifier for the class holding the main vtable). */ 5923 1.1 christos 5924 1.1 christos if (!read_baseclasses (&fi, pp, type, objfile) 5925 1.1 christos || !read_struct_fields (&fi, pp, type, objfile) 5926 1.1 christos || !attach_fields_to_type (&fi, type, objfile) 5927 1.1 christos || !read_member_functions (&fi, pp, type, objfile) 5928 1.1 christos || !attach_fn_fields_to_type (&fi, type) 5929 1.1 christos || !read_tilde_fields (&fi, pp, type, objfile)) 5930 1.1 christos { 5931 1.1 christos type = error_type (pp, objfile); 5932 1.1 christos } 5933 1.1 christos 5934 1.1 christos return (type); 5935 1.1 christos } 5936 1.1 christos 5937 1.7 christos /* Read a definition of an array type, 5938 1.1 christos and create and return a suitable type object. 5939 1.1 christos Also creates a range type which represents the bounds of that 5940 1.1 christos array. */ 5941 1.1 christos 5942 1.1 christos static struct type * 5943 1.1 christos read_array_type (const char **pp, struct type *type, 5944 1.1 christos struct objfile *objfile) 5945 1.1 christos { 5946 1.1 christos struct type *index_type, *element_type, *range_type; 5947 1.1 christos int lower, upper; 5948 1.1 christos int adjustable = 0; 5949 1.1 christos int nbits; 5950 1.1 christos 5951 1.1 christos /* Format of an array type: 5952 1.1 christos "ar<index type>;lower;upper;<array_contents_type>". 5953 1.1 christos OS9000: "arlower,upper;<array_contents_type>". 5954 1.1 christos 5955 1.1 christos Fortran adjustable arrays use Adigits or Tdigits for lower or upper; 5956 1.1 christos for these, produce a type like float[][]. */ 5957 1.1 christos 5958 1.1 christos { 5959 1.1 christos index_type = read_type (pp, objfile); 5960 1.1 christos if (**pp != ';') 5961 1.1 christos /* Improper format of array type decl. */ 5962 1.1 christos return error_type (pp, objfile); 5963 1.1 christos ++*pp; 5964 1.1 christos } 5965 1.1 christos 5966 1.1 christos if (!(**pp >= '0' && **pp <= '9') && **pp != '-') 5967 1.1 christos { 5968 1.1 christos (*pp)++; 5969 1.1 christos adjustable = 1; 5970 1.1 christos } 5971 1.1 christos lower = read_huge_number (pp, ';', &nbits, 0); 5972 1.1 christos 5973 1.1 christos if (nbits != 0) 5974 1.1 christos return error_type (pp, objfile); 5975 1.1 christos 5976 1.1 christos if (!(**pp >= '0' && **pp <= '9') && **pp != '-') 5977 1.1 christos { 5978 1.1 christos (*pp)++; 5979 1.1 christos adjustable = 1; 5980 1.1 christos } 5981 1.1 christos upper = read_huge_number (pp, ';', &nbits, 0); 5982 1.1 christos if (nbits != 0) 5983 1.1 christos return error_type (pp, objfile); 5984 1.1 christos 5985 1.1 christos element_type = read_type (pp, objfile); 5986 1.1 christos 5987 1.11 christos if (adjustable) 5988 1.1 christos { 5989 1.11 christos lower = 0; 5990 1.11 christos upper = -1; 5991 1.11 christos } 5992 1.1 christos 5993 1.1 christos type_allocator alloc (objfile, get_current_subfile ()->language); 5994 1.1 christos range_type = 5995 1.1 christos create_static_range_type (alloc, index_type, lower, upper); 5996 1.1 christos type_allocator smash_alloc (type, type_allocator::SMASH); 5997 1.1 christos type = create_array_type (smash_alloc, element_type, range_type); 5998 1.1 christos 5999 1.1 christos return type; 6000 1.1 christos } 6001 1.1 christos 6002 1.7 christos 6003 1.1 christos /* Read a definition of an enumeration type, 6004 1.1 christos and create and return a suitable type object. 6005 1.9 christos Also defines the symbols that represent the values of the type. */ 6006 1.7 christos 6007 1.1 christos static struct type * 6008 1.1 christos read_enum_type (const char **pp, struct type *type, 6009 1.1 christos struct objfile *objfile) 6010 1.1 christos { 6011 1.1 christos struct gdbarch *gdbarch = objfile->arch (); 6012 1.1 christos const char *p; 6013 1.1 christos char *name; 6014 1.1 christos long n; 6015 1.1 christos struct symbol *sym; 6016 1.1 christos int nsyms = 0; 6017 1.1 christos struct pending **symlist; 6018 1.1 christos struct pending *osyms, *syms; 6019 1.1 christos int o_nsyms; 6020 1.1 christos int nbits; 6021 1.1 christos int unsigned_enum = 1; 6022 1.8 christos 6023 1.1 christos #if 0 6024 1.1 christos /* FIXME! The stabs produced by Sun CC merrily define things that ought 6025 1.8 christos to be file-scope, between N_FN entries, using N_LSYM. What's a mother 6026 1.1 christos to do? For now, force all enum values to file scope. */ 6027 1.1 christos if (within_function) 6028 1.1 christos symlist = get_local_symbols (); 6029 1.1 christos else 6030 1.1 christos #endif 6031 1.1 christos symlist = get_file_symbols (); 6032 1.1 christos osyms = *symlist; 6033 1.1 christos o_nsyms = osyms ? osyms->nsyms : 0; 6034 1.1 christos 6035 1.1 christos /* The aix4 compiler emits an extra field before the enum members; 6036 1.1 christos my guess is it's a type of some sort. Just ignore it. */ 6037 1.1 christos if (**pp == '-') 6038 1.1 christos { 6039 1.1 christos /* Skip over the type. */ 6040 1.1 christos while (**pp != ':') 6041 1.1 christos (*pp)++; 6042 1.1 christos 6043 1.1 christos /* Skip over the colon. */ 6044 1.1 christos (*pp)++; 6045 1.1 christos } 6046 1.1 christos 6047 1.1 christos /* Read the value-names and their values. 6048 1.1 christos The input syntax is NAME:VALUE,NAME:VALUE, and so on. 6049 1.1 christos A semicolon or comma instead of a NAME means the end. */ 6050 1.9 christos while (**pp && **pp != ';' && **pp != ',') 6051 1.1 christos { 6052 1.1 christos STABS_CONTINUE (pp, objfile); 6053 1.1 christos p = *pp; 6054 1.1 christos while (*p != ':') 6055 1.1 christos p++; 6056 1.9 christos name = obstack_strndup (&objfile->objfile_obstack, *pp, p - *pp); 6057 1.9 christos *pp = p + 1; 6058 1.9 christos n = read_huge_number (pp, ',', &nbits, 0); 6059 1.9 christos if (nbits != 0) 6060 1.10 christos return error_type (pp, objfile); 6061 1.10 christos 6062 1.10 christos sym = new (&objfile->objfile_obstack) symbol; 6063 1.1 christos sym->set_linkage_name (name); 6064 1.1 christos sym->set_language (get_current_subfile ()->language, 6065 1.1 christos &objfile->objfile_obstack); 6066 1.1 christos sym->set_aclass_index (LOC_CONST); 6067 1.1 christos sym->set_domain (VAR_DOMAIN); 6068 1.1 christos sym->set_value_longest (n); 6069 1.1 christos if (n < 0) 6070 1.1 christos unsigned_enum = 0; 6071 1.1 christos add_symbol_to_list (sym, symlist); 6072 1.1 christos nsyms++; 6073 1.1 christos } 6074 1.10 christos 6075 1.1 christos if (**pp == ';') 6076 1.9 christos (*pp)++; /* Skip the semicolon. */ 6077 1.10 christos 6078 1.1 christos /* Now fill in the fields of the type-structure. */ 6079 1.10 christos 6080 1.11 christos type->set_length (gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT); 6081 1.1 christos set_length_in_type_chain (type); 6082 1.1 christos type->set_code (TYPE_CODE_ENUM); 6083 1.1 christos type->set_is_stub (false); 6084 1.1 christos if (unsigned_enum) 6085 1.1 christos type->set_is_unsigned (true); 6086 1.1 christos type->alloc_fields (nsyms); 6087 1.1 christos 6088 1.1 christos /* Find the symbols for the values and put them into the type. 6089 1.1 christos The symbols can be found in the symlist that we put them on 6090 1.1 christos to cause them to be defined. osyms contains the old value 6091 1.1 christos of that symlist; everything up to there was defined by us. */ 6092 1.1 christos /* Note that we preserve the order of the enum constants, so 6093 1.1 christos that in something like "enum {FOO, LAST_THING=FOO}" we print 6094 1.1 christos FOO, not LAST_THING. */ 6095 1.1 christos 6096 1.1 christos for (syms = *symlist, n = nsyms - 1; syms; syms = syms->next) 6097 1.1 christos { 6098 1.1 christos int last = syms == osyms ? o_nsyms : 0; 6099 1.10 christos int j = syms->nsyms; 6100 1.10 christos 6101 1.10 christos for (; --j >= last; --n) 6102 1.11 christos { 6103 1.1 christos struct symbol *xsym = syms->symbol[j]; 6104 1.1 christos 6105 1.1 christos xsym->set_type (type); 6106 1.1 christos type->field (n).set_name (xsym->linkage_name ()); 6107 1.1 christos type->field (n).set_loc_enumval (xsym->value_longest ()); 6108 1.1 christos type->field (n).set_bitsize (0); 6109 1.1 christos } 6110 1.1 christos if (syms == osyms) 6111 1.1 christos break; 6112 1.1 christos } 6113 1.1 christos 6114 1.1 christos return type; 6115 1.1 christos } 6116 1.1 christos 6117 1.1 christos /* Sun's ACC uses a somewhat saner method for specifying the builtin 6118 1.1 christos typedefs in every file (for int, long, etc): 6119 1.1 christos 6120 1.1 christos type = b <signed> <width> <format type>; <offset>; <nbits> 6121 1.1 christos signed = u or s. 6122 1.1 christos optional format type = c or b for char or boolean. 6123 1.1 christos offset = offset from high order bit to start bit of type. 6124 1.1 christos width is # bytes in object of this type, nbits is # bits in type. 6125 1.7 christos 6126 1.1 christos The width/offset stuff appears to be for small objects stored in 6127 1.1 christos larger ones (e.g. `shorts' in `int' registers). We ignore it for now, 6128 1.1 christos FIXME. */ 6129 1.7 christos 6130 1.7 christos static struct type * 6131 1.1 christos read_sun_builtin_type (const char **pp, int typenums[2], struct objfile *objfile) 6132 1.1 christos { 6133 1.1 christos int type_bits; 6134 1.1 christos int nbits; 6135 1.7 christos int unsigned_type; 6136 1.1 christos int boolean_type = 0; 6137 1.1 christos 6138 1.7 christos switch (**pp) 6139 1.1 christos { 6140 1.1 christos case 's': 6141 1.1 christos unsigned_type = 0; 6142 1.1 christos break; 6143 1.1 christos case 'u': 6144 1.1 christos unsigned_type = 1; 6145 1.1 christos break; 6146 1.1 christos default: 6147 1.1 christos return error_type (pp, objfile); 6148 1.1 christos } 6149 1.1 christos (*pp)++; 6150 1.1 christos 6151 1.1 christos /* For some odd reason, all forms of char put a c here. This is strange 6152 1.1 christos because no other type has this honor. We can safely ignore this because 6153 1.1 christos we actually determine 'char'acterness by the number of bits specified in 6154 1.1 christos the descriptor. 6155 1.7 christos Boolean forms, e.g Fortran logical*X, put a b here. */ 6156 1.1 christos 6157 1.1 christos if (**pp == 'c') 6158 1.1 christos (*pp)++; 6159 1.1 christos else if (**pp == 'b') 6160 1.1 christos { 6161 1.1 christos boolean_type = 1; 6162 1.1 christos (*pp)++; 6163 1.1 christos } 6164 1.1 christos 6165 1.1 christos /* The first number appears to be the number of bytes occupied 6166 1.1 christos by this type, except that unsigned short is 4 instead of 2. 6167 1.1 christos Since this information is redundant with the third number, 6168 1.1 christos we will ignore it. */ 6169 1.1 christos read_huge_number (pp, ';', &nbits, 0); 6170 1.1 christos if (nbits != 0) 6171 1.1 christos return error_type (pp, objfile); 6172 1.1 christos 6173 1.1 christos /* The second number is always 0, so ignore it too. */ 6174 1.1 christos read_huge_number (pp, ';', &nbits, 0); 6175 1.1 christos if (nbits != 0) 6176 1.1 christos return error_type (pp, objfile); 6177 1.1 christos 6178 1.1 christos /* The third number is the number of bits for this type. */ 6179 1.1 christos type_bits = read_huge_number (pp, 0, &nbits, 0); 6180 1.1 christos if (nbits != 0) 6181 1.1 christos return error_type (pp, objfile); 6182 1.1 christos /* The type *should* end with a semicolon. If it are embedded 6183 1.1 christos in a larger type the semicolon may be the only way to know where 6184 1.1 christos the type ends. If this type is at the end of the stabstring we 6185 1.11 christos can deal with the omitted semicolon (but we don't have to like 6186 1.1 christos it). Don't bother to complain(), Sun's compiler omits the semicolon 6187 1.7 christos for "void". */ 6188 1.11 christos if (**pp == ';') 6189 1.11 christos ++(*pp); 6190 1.7 christos 6191 1.10 christos type_allocator alloc (objfile, get_current_subfile ()->language); 6192 1.10 christos if (type_bits == 0) 6193 1.7 christos { 6194 1.7 christos struct type *type = alloc.new_type (TYPE_CODE_VOID, 6195 1.7 christos TARGET_CHAR_BIT, nullptr); 6196 1.7 christos if (unsigned_type) 6197 1.11 christos type->set_is_unsigned (true); 6198 1.1 christos 6199 1.11 christos return type; 6200 1.1 christos } 6201 1.1 christos 6202 1.1 christos if (boolean_type) 6203 1.7 christos return init_boolean_type (alloc, type_bits, unsigned_type, NULL); 6204 1.7 christos else 6205 1.1 christos return init_integer_type (alloc, type_bits, unsigned_type, NULL); 6206 1.1 christos } 6207 1.1 christos 6208 1.1 christos static struct type * 6209 1.1 christos read_sun_floating_type (const char **pp, int typenums[2], 6210 1.1 christos struct objfile *objfile) 6211 1.1 christos { 6212 1.1 christos int nbits; 6213 1.1 christos int details; 6214 1.1 christos int nbytes; 6215 1.1 christos struct type *rettype; 6216 1.1 christos 6217 1.1 christos /* The first number has more details about the type, for example 6218 1.1 christos FN_COMPLEX. */ 6219 1.1 christos details = read_huge_number (pp, ';', &nbits, 0); 6220 1.1 christos if (nbits != 0) 6221 1.1 christos return error_type (pp, objfile); 6222 1.7 christos 6223 1.7 christos /* The second number is the number of bytes occupied by this type. */ 6224 1.1 christos nbytes = read_huge_number (pp, ';', &nbits, 0); 6225 1.1 christos if (nbits != 0) 6226 1.1 christos return error_type (pp, objfile); 6227 1.7 christos 6228 1.9 christos nbits = nbytes * TARGET_CHAR_BIT; 6229 1.1 christos 6230 1.1 christos if (details == NF_COMPLEX || details == NF_COMPLEX16 6231 1.7 christos || details == NF_COMPLEX32) 6232 1.1 christos { 6233 1.1 christos rettype = dbx_init_float_type (objfile, nbits / 2); 6234 1.1 christos return init_complex_type (NULL, rettype); 6235 1.1 christos } 6236 1.1 christos 6237 1.1 christos return dbx_init_float_type (objfile, nbits); 6238 1.1 christos } 6239 1.1 christos 6240 1.1 christos /* Read a number from the string pointed to by *PP. 6241 1.1 christos The value of *PP is advanced over the number. 6242 1.1 christos If END is nonzero, the character that ends the 6243 1.1 christos number must match END, or an error happens; 6244 1.1 christos and that character is skipped if it does match. 6245 1.1 christos If END is zero, *PP is left pointing to that character. 6246 1.1 christos 6247 1.1 christos If TWOS_COMPLEMENT_BITS is set to a strictly positive value and if 6248 1.1 christos the number is represented in an octal representation, assume that 6249 1.1 christos it is represented in a 2's complement representation with a size of 6250 1.1 christos TWOS_COMPLEMENT_BITS. 6251 1.1 christos 6252 1.7 christos If the number fits in a long, set *BITS to 0 and return the value. 6253 1.7 christos If not, set *BITS to be the number of bits in the number and return 0. 6254 1.1 christos 6255 1.7 christos If encounter garbage, set *BITS to -1 and return 0. */ 6256 1.1 christos 6257 1.1 christos static long 6258 1.1 christos read_huge_number (const char **pp, int end, int *bits, 6259 1.1 christos int twos_complement_bits) 6260 1.1 christos { 6261 1.1 christos const char *p = *pp; 6262 1.1 christos int sign = 1; 6263 1.1 christos int sign_bit = 0; 6264 1.1 christos long n = 0; 6265 1.1 christos int radix = 10; 6266 1.1 christos char overflow = 0; 6267 1.1 christos int nbits = 0; 6268 1.1 christos int c; 6269 1.1 christos long upper_limit; 6270 1.1 christos int twos_complement_representation = 0; 6271 1.1 christos 6272 1.1 christos if (*p == '-') 6273 1.1 christos { 6274 1.1 christos sign = -1; 6275 1.1 christos p++; 6276 1.1 christos } 6277 1.1 christos 6278 1.1 christos /* Leading zero means octal. GCC uses this to output values larger 6279 1.1 christos than an int (because that would be hard in decimal). */ 6280 1.1 christos if (*p == '0') 6281 1.1 christos { 6282 1.1 christos radix = 8; 6283 1.1 christos p++; 6284 1.1 christos } 6285 1.1 christos 6286 1.1 christos /* Skip extra zeros. */ 6287 1.1 christos while (*p == '0') 6288 1.1 christos p++; 6289 1.1 christos 6290 1.7 christos if (sign > 0 && radix == 8 && twos_complement_bits > 0) 6291 1.1 christos { 6292 1.1 christos /* Octal, possibly signed. Check if we have enough chars for a 6293 1.1 christos negative number. */ 6294 1.1 christos 6295 1.1 christos size_t len; 6296 1.1 christos const char *p1 = p; 6297 1.1 christos 6298 1.1 christos while ((c = *p1) >= '0' && c < '8') 6299 1.1 christos p1++; 6300 1.1 christos 6301 1.9 christos len = p1 - p; 6302 1.1 christos if (len > twos_complement_bits / 3 6303 1.1 christos || (twos_complement_bits % 3 == 0 6304 1.1 christos && len == twos_complement_bits / 3)) 6305 1.1 christos { 6306 1.1 christos /* Ok, we have enough characters for a signed value, check 6307 1.1 christos for signedness by testing if the sign bit is set. */ 6308 1.1 christos sign_bit = (twos_complement_bits % 3 + 2) % 3; 6309 1.1 christos c = *p - '0'; 6310 1.1 christos if (c & (1 << sign_bit)) 6311 1.1 christos { 6312 1.1 christos /* Definitely signed. */ 6313 1.1 christos twos_complement_representation = 1; 6314 1.1 christos sign = -1; 6315 1.1 christos } 6316 1.1 christos } 6317 1.1 christos } 6318 1.10 christos 6319 1.10 christos upper_limit = LONG_MAX / radix; 6320 1.10 christos 6321 1.1 christos while ((c = *p++) >= '0' && c < ('0' + radix)) 6322 1.1 christos { 6323 1.1 christos if (n <= upper_limit) 6324 1.1 christos { 6325 1.1 christos if (twos_complement_representation) 6326 1.1 christos { 6327 1.1 christos /* Octal, signed, twos complement representation. In 6328 1.1 christos this case, n is the corresponding absolute value. */ 6329 1.10 christos if (n == 0) 6330 1.10 christos { 6331 1.10 christos long sn = c - '0' - ((2 * (c - '0')) | (2 << sign_bit)); 6332 1.10 christos 6333 1.10 christos n = -sn; 6334 1.10 christos } 6335 1.10 christos else 6336 1.10 christos { 6337 1.10 christos n *= radix; 6338 1.10 christos n -= c - '0'; 6339 1.10 christos } 6340 1.10 christos } 6341 1.10 christos else 6342 1.1 christos { 6343 1.10 christos /* unsigned representation */ 6344 1.1 christos n *= radix; 6345 1.1 christos n += c - '0'; /* FIXME this overflows anyway. */ 6346 1.10 christos } 6347 1.1 christos } 6348 1.1 christos else 6349 1.1 christos overflow = 1; 6350 1.1 christos 6351 1.1 christos /* This depends on large values being output in octal, which is 6352 1.1 christos what GCC does. */ 6353 1.1 christos if (radix == 8) 6354 1.1 christos { 6355 1.1 christos if (nbits == 0) 6356 1.1 christos { 6357 1.1 christos if (c == '0') 6358 1.1 christos /* Ignore leading zeroes. */ 6359 1.1 christos ; 6360 1.1 christos else if (c == '1') 6361 1.1 christos nbits = 1; 6362 1.1 christos else if (c == '2' || c == '3') 6363 1.1 christos nbits = 2; 6364 1.1 christos else 6365 1.1 christos nbits = 3; 6366 1.1 christos } 6367 1.1 christos else 6368 1.1 christos nbits += 3; 6369 1.1 christos } 6370 1.1 christos } 6371 1.1 christos if (end) 6372 1.1 christos { 6373 1.1 christos if (c && c != end) 6374 1.1 christos { 6375 1.1 christos if (bits != NULL) 6376 1.1 christos *bits = -1; 6377 1.1 christos return 0; 6378 1.1 christos } 6379 1.1 christos } 6380 1.1 christos else 6381 1.1 christos --p; 6382 1.1 christos 6383 1.1 christos if (radix == 8 && twos_complement_bits > 0 && nbits > twos_complement_bits) 6384 1.1 christos { 6385 1.1 christos /* We were supposed to parse a number with maximum 6386 1.1 christos TWOS_COMPLEMENT_BITS bits, but something went wrong. */ 6387 1.1 christos if (bits != NULL) 6388 1.1 christos *bits = -1; 6389 1.1 christos return 0; 6390 1.1 christos } 6391 1.1 christos 6392 1.1 christos *pp = p; 6393 1.1 christos if (overflow) 6394 1.1 christos { 6395 1.1 christos if (nbits == 0) 6396 1.1 christos { 6397 1.1 christos /* Large decimal constants are an error (because it is hard to 6398 1.1 christos count how many bits are in them). */ 6399 1.12 christos if (bits != NULL) 6400 1.10 christos *bits = -1; 6401 1.1 christos return 0; 6402 1.1 christos } 6403 1.1 christos 6404 1.1 christos /* -0x7f is the same as 0x80. So deal with it by adding one to 6405 1.1 christos the number of bits. Two's complement representation octals 6406 1.1 christos can't have a '-' in front. */ 6407 1.1 christos if (sign == -1 && !twos_complement_representation) 6408 1.1 christos ++nbits; 6409 1.1 christos if (bits) 6410 1.1 christos *bits = nbits; 6411 1.1 christos } 6412 1.1 christos else 6413 1.1 christos { 6414 1.1 christos if (bits) 6415 1.1 christos *bits = 0; 6416 1.1 christos return n * sign; 6417 1.7 christos } 6418 1.10 christos /* It's *BITS which has the interesting information. */ 6419 1.1 christos return 0; 6420 1.9 christos } 6421 1.7 christos 6422 1.1 christos static struct type * 6423 1.1 christos read_range_type (const char **pp, int typenums[2], int type_size, 6424 1.1 christos struct objfile *objfile) 6425 1.1 christos { 6426 1.1 christos struct gdbarch *gdbarch = objfile->arch (); 6427 1.1 christos const char *orig_pp = *pp; 6428 1.1 christos int rangenums[2]; 6429 1.1 christos long n2, n3; 6430 1.1 christos int n2bits, n3bits; 6431 1.1 christos int self_subrange; 6432 1.1 christos struct type *result_type; 6433 1.1 christos struct type *index_type = NULL; 6434 1.1 christos 6435 1.1 christos /* First comes a type we are a subrange of. 6436 1.1 christos In C it is usually 0, 1 or the type being defined. */ 6437 1.1 christos if (read_type_number (pp, rangenums) != 0) 6438 1.1 christos return error_type (pp, objfile); 6439 1.1 christos self_subrange = (rangenums[0] == typenums[0] && 6440 1.1 christos rangenums[1] == typenums[1]); 6441 1.1 christos 6442 1.1 christos if (**pp == '=') 6443 1.1 christos { 6444 1.1 christos *pp = orig_pp; 6445 1.1 christos index_type = read_type (pp, objfile); 6446 1.1 christos } 6447 1.1 christos 6448 1.1 christos /* A semicolon should now follow; skip it. */ 6449 1.1 christos if (**pp == ';') 6450 1.1 christos (*pp)++; 6451 1.1 christos 6452 1.1 christos /* The remaining two operands are usually lower and upper bounds 6453 1.1 christos of the range. But in some special cases they mean something else. */ 6454 1.11 christos n2 = read_huge_number (pp, ';', &n2bits, type_size); 6455 1.11 christos n3 = read_huge_number (pp, ';', &n3bits, type_size); 6456 1.1 christos 6457 1.1 christos if (n2bits == -1 || n3bits == -1) 6458 1.1 christos return error_type (pp, objfile); 6459 1.1 christos 6460 1.1 christos type_allocator alloc (objfile, get_current_subfile ()->language); 6461 1.1 christos 6462 1.1 christos if (index_type) 6463 1.1 christos goto handle_true_range; 6464 1.1 christos 6465 1.1 christos /* If limits are huge, must be large integral type. */ 6466 1.1 christos if (n2bits != 0 || n3bits != 0) 6467 1.1 christos { 6468 1.10 christos char got_signed = 0; 6469 1.10 christos char got_unsigned = 0; 6470 1.1 christos /* Number of bits in the type. */ 6471 1.10 christos int nbits = 0; 6472 1.10 christos 6473 1.10 christos /* If a type size attribute has been specified, the bounds of 6474 1.10 christos the range should fit in this size. If the lower bounds needs 6475 1.10 christos more bits than the upper bound, then the type is signed. */ 6476 1.10 christos if (n2bits <= type_size && n3bits <= type_size) 6477 1.10 christos { 6478 1.1 christos if (n2bits == type_size && n2bits > n3bits) 6479 1.1 christos got_signed = 1; 6480 1.1 christos else 6481 1.1 christos got_unsigned = 1; 6482 1.1 christos nbits = type_size; 6483 1.1 christos } 6484 1.1 christos /* Range from 0 to <large number> is an unsigned large integral type. */ 6485 1.10 christos else if ((n2bits == 0 && n2 == 0) && n3bits != 0) 6486 1.10 christos { 6487 1.1 christos got_unsigned = 1; 6488 1.1 christos nbits = n3bits; 6489 1.1 christos } 6490 1.1 christos /* Range from <large number> to <large number>-1 is a large signed 6491 1.1 christos integral type. Take care of the case where <large number> doesn't 6492 1.1 christos fit in a long but <large number>-1 does. */ 6493 1.1 christos else if ((n2bits != 0 && n3bits != 0 && n2bits == n3bits + 1) 6494 1.1 christos || (n2bits != 0 && n3bits == 0 6495 1.1 christos && (n2bits == sizeof (long) * HOST_CHAR_BIT) 6496 1.1 christos && n3 == LONG_MAX)) 6497 1.11 christos { 6498 1.1 christos got_signed = 1; 6499 1.1 christos nbits = n2bits; 6500 1.1 christos } 6501 1.1 christos 6502 1.1 christos if (got_signed || got_unsigned) 6503 1.1 christos return init_integer_type (alloc, nbits, got_unsigned, NULL); 6504 1.11 christos else 6505 1.1 christos return error_type (pp, objfile); 6506 1.1 christos } 6507 1.1 christos 6508 1.1 christos /* A type defined as a subrange of itself, with bounds both 0, is void. */ 6509 1.1 christos if (self_subrange && n2 == 0 && n3 == 0) 6510 1.1 christos return alloc.new_type (TYPE_CODE_VOID, TARGET_CHAR_BIT, nullptr); 6511 1.1 christos 6512 1.1 christos /* If n3 is zero and n2 is positive, we want a floating type, and n2 6513 1.1 christos is the width in bytes. 6514 1.1 christos 6515 1.1 christos Fortran programs appear to use this for complex types also. To 6516 1.1 christos distinguish between floats and complex, g77 (and others?) seem 6517 1.1 christos to use self-subranges for the complexes, and subranges of int for 6518 1.1 christos the floats. 6519 1.1 christos 6520 1.1 christos Also note that for complexes, g77 sets n2 to the size of one of 6521 1.7 christos the member floats, not the whole complex beast. My guess is that 6522 1.1 christos this was to work well with pre-COMPLEX versions of gdb. */ 6523 1.1 christos 6524 1.9 christos if (n3 == 0 && n2 > 0) 6525 1.1 christos { 6526 1.1 christos struct type *float_type 6527 1.1 christos = dbx_init_float_type (objfile, n2 * TARGET_CHAR_BIT); 6528 1.1 christos 6529 1.1 christos if (self_subrange) 6530 1.1 christos return init_complex_type (NULL, float_type); 6531 1.1 christos else 6532 1.1 christos return float_type; 6533 1.1 christos } 6534 1.1 christos 6535 1.1 christos /* If the upper bound is -1, it must really be an unsigned integral. */ 6536 1.1 christos 6537 1.1 christos else if (n2 == 0 && n3 == -1) 6538 1.1 christos { 6539 1.1 christos int bits = type_size; 6540 1.1 christos 6541 1.1 christos if (bits <= 0) 6542 1.1 christos { 6543 1.11 christos /* We don't know its size. It is unsigned int or unsigned 6544 1.1 christos long. GCC 2.3.3 uses this for long long too, but that is 6545 1.1 christos just a GDB 3.5 compatibility hack. */ 6546 1.1 christos bits = gdbarch_int_bit (gdbarch); 6547 1.1 christos } 6548 1.1 christos 6549 1.7 christos return init_integer_type (alloc, bits, 1, NULL); 6550 1.11 christos } 6551 1.8 christos 6552 1.10 christos /* Special case: char is defined (Who knows why) as a subrange of 6553 1.7 christos itself with range 0-127. */ 6554 1.7 christos else if (self_subrange && n2 == 0 && n3 == 127) 6555 1.1 christos { 6556 1.1 christos struct type *type = init_integer_type (alloc, TARGET_CHAR_BIT, 6557 1.1 christos 0, NULL); 6558 1.1 christos type->set_has_no_signedness (true); 6559 1.10 christos return type; 6560 1.10 christos } 6561 1.1 christos /* We used to do this only for subrange of self or subrange of int. */ 6562 1.1 christos else if (n2 == 0) 6563 1.1 christos { 6564 1.11 christos /* -1 is used for the upper bound of (4 byte) "unsigned int" and 6565 1.1 christos "unsigned long", and we already checked for that, 6566 1.1 christos so don't need to test for it here. */ 6567 1.10 christos 6568 1.10 christos if (n3 < 0) 6569 1.1 christos /* n3 actually gives the size. */ 6570 1.1 christos return init_integer_type (alloc, -n3 * TARGET_CHAR_BIT, 1, NULL); 6571 1.1 christos 6572 1.1 christos /* Is n3 == 2**(8n)-1 for some integer n? Then it's an 6573 1.1 christos unsigned n-byte integer. But do require n to be a power of 6574 1.1 christos two; we don't want 3- and 5-byte integers flying around. */ 6575 1.1 christos { 6576 1.1 christos int bytes; 6577 1.1 christos unsigned long bits; 6578 1.11 christos 6579 1.1 christos bits = n3; 6580 1.1 christos for (bytes = 0; (bits & 0xff) == 0xff; bytes++) 6581 1.1 christos bits >>= 8; 6582 1.1 christos if (bits == 0 6583 1.1 christos && ((bytes - 1) & bytes) == 0) /* "bytes is a power of two" */ 6584 1.1 christos return init_integer_type (alloc, bytes * TARGET_CHAR_BIT, 1, NULL); 6585 1.1 christos } 6586 1.1 christos } 6587 1.1 christos /* I think this is for Convex "long long". Since I don't know whether 6588 1.11 christos Convex sets self_subrange, I also accept that particular size regardless 6589 1.1 christos of self_subrange. */ 6590 1.1 christos else if (n3 == 0 && n2 < 0 6591 1.1 christos && (self_subrange 6592 1.11 christos || n2 == -gdbarch_long_long_bit 6593 1.1 christos (gdbarch) / TARGET_CHAR_BIT)) 6594 1.11 christos return init_integer_type (alloc, -n2 * TARGET_CHAR_BIT, 0, NULL); 6595 1.1 christos else if (n2 == -n3 - 1) 6596 1.11 christos { 6597 1.1 christos if (n3 == 0x7f) 6598 1.1 christos return init_integer_type (alloc, 8, 0, NULL); 6599 1.1 christos if (n3 == 0x7fff) 6600 1.1 christos return init_integer_type (alloc, 16, 0, NULL); 6601 1.1 christos if (n3 == 0x7fffffff) 6602 1.1 christos return init_integer_type (alloc, 32, 0, NULL); 6603 1.1 christos } 6604 1.11 christos 6605 1.1 christos /* We have a real range type on our hands. Allocate space and 6606 1.1 christos return a real pointer. */ 6607 1.1 christos handle_true_range: 6608 1.1 christos 6609 1.1 christos if (self_subrange) 6610 1.10 christos index_type = builtin_type (objfile)->builtin_int; 6611 1.1 christos else 6612 1.8 christos index_type = *dbx_lookup_type (rangenums, objfile); 6613 1.1 christos if (index_type == NULL) 6614 1.11 christos { 6615 1.1 christos /* Does this actually ever happen? Is that why we are worrying 6616 1.1 christos about dealing with it rather than just calling error_type? */ 6617 1.3 christos 6618 1.11 christos complaint (_("base type %d of range type is not defined"), rangenums[1]); 6619 1.1 christos 6620 1.1 christos index_type = builtin_type (objfile)->builtin_int; 6621 1.1 christos } 6622 1.1 christos 6623 1.1 christos result_type 6624 1.1 christos = create_static_range_type (alloc, index_type, n2, n3); 6625 1.1 christos return (result_type); 6626 1.1 christos } 6627 1.7 christos 6628 1.1 christos /* Read in an argument list. This is a list of types, separated by commas 6629 1.1 christos and terminated with END. Return the list of types read in, or NULL 6630 1.1 christos if there is an error. */ 6631 1.1 christos 6632 1.1 christos static struct field * 6633 1.1 christos read_args (const char **pp, int end, struct objfile *objfile, int *nargsp, 6634 1.1 christos int *varargsp) 6635 1.1 christos { 6636 1.1 christos /* FIXME! Remove this arbitrary limit! */ 6637 1.1 christos struct type *types[1024]; /* Allow for fns of 1023 parameters. */ 6638 1.1 christos int n = 0, i; 6639 1.1 christos struct field *rval; 6640 1.1 christos 6641 1.1 christos while (**pp != end) 6642 1.1 christos { 6643 1.1 christos if (**pp != ',') 6644 1.1 christos /* Invalid argument list: no ','. */ 6645 1.1 christos return NULL; 6646 1.1 christos (*pp)++; 6647 1.1 christos STABS_CONTINUE (pp, objfile); 6648 1.1 christos types[n++] = read_type (pp, objfile); 6649 1.1 christos } 6650 1.1 christos (*pp)++; /* get past `end' (the ':' character). */ 6651 1.1 christos 6652 1.1 christos if (n == 0) 6653 1.8 christos { 6654 1.1 christos /* We should read at least the THIS parameter here. Some broken stabs 6655 1.1 christos output contained `(0,41),(0,42)=@s8;-16;,(0,43),(0,1);' where should 6656 1.9 christos have been present ";-16,(0,43)" reference instead. This way the 6657 1.1 christos excessive ";" marker prematurely stops the parameters parsing. */ 6658 1.1 christos 6659 1.1 christos complaint (_("Invalid (empty) method arguments")); 6660 1.1 christos *varargsp = 0; 6661 1.1 christos } 6662 1.1 christos else if (types[n - 1]->code () != TYPE_CODE_VOID) 6663 1.1 christos *varargsp = 1; 6664 1.6 christos else 6665 1.1 christos { 6666 1.9 christos n--; 6667 1.1 christos *varargsp = 0; 6668 1.1 christos } 6669 1.1 christos 6670 1.1 christos rval = XCNEWVEC (struct field, n); 6671 1.1 christos for (i = 0; i < n; i++) 6672 1.1 christos rval[i].set_type (types[i]); 6673 1.1 christos *nargsp = n; 6674 1.1 christos return rval; 6675 1.1 christos } 6676 1.1 christos 6677 1.1 christos /* Common block handling. */ 6679 1.1 christos 6680 1.1 christos /* List of symbols declared since the last BCOMM. This list is a tail 6681 1.1 christos of local_symbols. When ECOMM is seen, the symbols on the list 6682 1.1 christos are noted so their proper addresses can be filled in later, 6683 1.1 christos using the common block base address gotten from the assembler 6684 1.1 christos stabs. */ 6685 1.1 christos 6686 1.1 christos static struct pending *common_block; 6687 1.1 christos static int common_block_i; 6688 1.1 christos 6689 1.1 christos /* Name of the current common block. We get it from the BCOMM instead of the 6690 1.1 christos ECOMM to match IBM documentation (even though IBM puts the name both places 6691 1.7 christos like everyone else). */ 6692 1.1 christos static char *common_block_name; 6693 1.1 christos 6694 1.1 christos /* Process a N_BCOMM symbol. The storage for NAME is not guaranteed 6695 1.8 christos to remain after this function returns. */ 6696 1.1 christos 6697 1.8 christos void 6698 1.8 christos common_block_start (const char *name, struct objfile *objfile) 6699 1.9 christos { 6700 1.1 christos if (common_block_name != NULL) 6701 1.1 christos { 6702 1.1 christos complaint (_("Invalid symbol data: common block within common block")); 6703 1.1 christos } 6704 1.1 christos common_block = *get_local_symbols (); 6705 1.1 christos common_block_i = common_block ? common_block->nsyms : 0; 6706 1.1 christos common_block_name = obstack_strdup (&objfile->objfile_obstack, name); 6707 1.1 christos } 6708 1.1 christos 6709 1.1 christos /* Process a N_ECOMM symbol. */ 6710 1.1 christos 6711 1.1 christos void 6712 1.1 christos common_block_end (struct objfile *objfile) 6713 1.1 christos { 6714 1.5 christos /* Symbols declared since the BCOMM are to have the common block 6715 1.1 christos start address added in when we know it. common_block and 6716 1.1 christos common_block_i point to the first symbol after the BCOMM in 6717 1.1 christos the local_symbols list; copy the list and hang it off the 6718 1.1 christos symbol for the common block name for later fixup. */ 6719 1.1 christos int i; 6720 1.8 christos struct symbol *sym; 6721 1.1 christos struct pending *newobj = 0; 6722 1.1 christos struct pending *next; 6723 1.1 christos int j; 6724 1.9 christos 6725 1.1 christos if (common_block_name == NULL) 6726 1.9 christos { 6727 1.10 christos complaint (_("ECOMM symbol unmatched by BCOMM")); 6728 1.1 christos return; 6729 1.1 christos } 6730 1.1 christos 6731 1.1 christos sym = new (&objfile->objfile_obstack) symbol; 6732 1.8 christos /* Note: common_block_name already saved on objfile_obstack. */ 6733 1.1 christos sym->set_linkage_name (common_block_name); 6734 1.1 christos sym->set_aclass_index (LOC_BLOCK); 6735 1.1 christos 6736 1.1 christos /* Now we copy all the symbols which have been defined since the BCOMM. */ 6737 1.5 christos 6738 1.1 christos /* Copy all the struct pendings before common_block. */ 6739 1.1 christos for (next = *get_local_symbols (); 6740 1.1 christos next != NULL && next != common_block; 6741 1.1 christos next = next->next) 6742 1.1 christos { 6743 1.1 christos for (j = 0; j < next->nsyms; j++) 6744 1.1 christos add_symbol_to_list (next->symbol[j], &newobj); 6745 1.1 christos } 6746 1.5 christos 6747 1.1 christos /* Copy however much of COMMON_BLOCK we need. If COMMON_BLOCK is 6748 1.10 christos NULL, it means copy all the local symbols (which we already did 6749 1.1 christos above). */ 6750 1.1 christos 6751 1.1 christos if (common_block != NULL) 6752 1.1 christos for (j = common_block_i; j < common_block->nsyms; j++) 6753 1.9 christos add_symbol_to_list (common_block->symbol[j], &newobj); 6754 1.10 christos 6755 1.1 christos sym->set_type ((struct type *) newobj); 6756 1.1 christos 6757 1.1 christos /* Should we be putting local_symbols back to what it was? 6758 1.1 christos Does it matter? */ 6759 1.1 christos 6760 1.1 christos i = hashname (sym->linkage_name ()); 6761 1.1 christos sym->set_value_chain (global_sym_chain[i]); 6762 1.1 christos global_sym_chain[i] = sym; 6763 1.1 christos common_block_name = NULL; 6764 1.11 christos } 6765 1.1 christos 6766 1.10 christos /* Add a common block's start address to the offset of each symbol 6767 1.1 christos declared to be in it (by being between a BCOMM/ECOMM pair that uses 6768 1.1 christos the common block name). */ 6769 1.1 christos 6770 1.1 christos static void 6771 1.1 christos fix_common_block (struct symbol *sym, CORE_ADDR valu, int section_index) 6772 1.1 christos { 6773 1.11 christos struct pending *next = (struct pending *) sym->type (); 6774 1.11 christos 6775 1.11 christos for (; next; next = next->next) 6776 1.11 christos { 6777 1.11 christos int j; 6778 1.1 christos 6779 1.1 christos for (j = next->nsyms - 1; j >= 0; j--) 6780 1.1 christos { 6781 1.1 christos next->symbol[j]->set_value_address 6782 1.1 christos (next->symbol[j]->value_address () + valu); 6783 1.1 christos next->symbol[j]->set_section_index (section_index); 6784 1.1 christos } 6785 1.1 christos } 6786 1.1 christos } 6787 1.1 christos 6788 1.1 christos 6790 1.1 christos 6791 1.1 christos /* Add {TYPE, TYPENUMS} to the NONAME_UNDEFS vector. 6792 1.1 christos See add_undefined_type for more details. */ 6793 1.1 christos 6794 1.1 christos static void 6795 1.1 christos add_undefined_type_noname (struct type *type, int typenums[2]) 6796 1.1 christos { 6797 1.1 christos struct nat nat; 6798 1.1 christos 6799 1.1 christos nat.typenums[0] = typenums [0]; 6800 1.1 christos nat.typenums[1] = typenums [1]; 6801 1.1 christos nat.type = type; 6802 1.1 christos 6803 1.1 christos if (noname_undefs_length == noname_undefs_allocated) 6804 1.1 christos { 6805 1.1 christos noname_undefs_allocated *= 2; 6806 1.1 christos noname_undefs = (struct nat *) 6807 1.1 christos xrealloc ((char *) noname_undefs, 6808 1.1 christos noname_undefs_allocated * sizeof (struct nat)); 6809 1.1 christos } 6810 1.1 christos noname_undefs[noname_undefs_length++] = nat; 6811 1.1 christos } 6812 1.1 christos 6813 1.1 christos /* Add TYPE to the UNDEF_TYPES vector. 6814 1.1 christos See add_undefined_type for more details. */ 6815 1.1 christos 6816 1.1 christos static void 6817 1.1 christos add_undefined_type_1 (struct type *type) 6818 1.1 christos { 6819 1.1 christos if (undef_types_length == undef_types_allocated) 6820 1.1 christos { 6821 1.1 christos undef_types_allocated *= 2; 6822 1.1 christos undef_types = (struct type **) 6823 1.1 christos xrealloc ((char *) undef_types, 6824 1.1 christos undef_types_allocated * sizeof (struct type *)); 6825 1.1 christos } 6826 1.1 christos undef_types[undef_types_length++] = type; 6827 1.1 christos } 6828 1.1 christos 6829 1.1 christos /* What about types defined as forward references inside of a small lexical 6830 1.1 christos scope? */ 6831 1.1 christos /* Add a type to the list of undefined types to be checked through 6832 1.1 christos once this file has been read in. 6833 1.1 christos 6834 1.1 christos In practice, we actually maintain two such lists: The first list 6835 1.1 christos (UNDEF_TYPES) is used for types whose name has been provided, and 6836 1.1 christos concerns forward references (eg 'xs' or 'xu' forward references); 6837 1.9 christos the second list (NONAME_UNDEFS) is used for types whose name is 6838 1.1 christos unknown at creation time, because they were referenced through 6839 1.1 christos their type number before the actual type was declared. 6840 1.1 christos This function actually adds the given type to the proper list. */ 6841 1.1 christos 6842 1.1 christos static void 6843 1.1 christos add_undefined_type (struct type *type, int typenums[2]) 6844 1.1 christos { 6845 1.1 christos if (type->name () == NULL) 6846 1.1 christos add_undefined_type_noname (type, typenums); 6847 1.1 christos else 6848 1.1 christos add_undefined_type_1 (type); 6849 1.1 christos } 6850 1.1 christos 6851 1.1 christos /* Try to fix all undefined types pushed on the UNDEF_TYPES vector. */ 6852 1.1 christos 6853 1.1 christos static void 6854 1.1 christos cleanup_undefined_types_noname (struct objfile *objfile) 6855 1.1 christos { 6856 1.9 christos int i; 6857 1.10 christos 6858 1.10 christos for (i = 0; i < noname_undefs_length; i++) 6859 1.10 christos { 6860 1.10 christos struct nat nat = noname_undefs[i]; 6861 1.10 christos struct type **type; 6862 1.10 christos 6863 1.10 christos type = dbx_lookup_type (nat.typenums, objfile); 6864 1.10 christos if (nat.type != *type && (*type)->code () != TYPE_CODE_UNDEF) 6865 1.1 christos { 6866 1.1 christos /* The instance flags of the undefined type are still unset, 6867 1.1 christos and needs to be copied over from the reference type. 6868 1.1 christos Since replace_type expects them to be identical, we need 6869 1.1 christos to set these flags manually before hand. */ 6870 1.1 christos nat.type->set_instance_flags ((*type)->instance_flags ()); 6871 1.1 christos replace_type (nat.type, *type); 6872 1.1 christos } 6873 1.1 christos } 6874 1.1 christos 6875 1.1 christos noname_undefs_length = 0; 6876 1.1 christos } 6877 1.1 christos 6878 1.1 christos /* Go through each undefined type, see if it's still undefined, and fix it 6879 1.1 christos up if possible. We have two kinds of undefined types: 6880 1.1 christos 6881 1.1 christos TYPE_CODE_ARRAY: Array whose target type wasn't defined yet. 6882 1.1 christos Fix: update array length using the element bounds 6883 1.1 christos and the target type's length. 6884 1.1 christos TYPE_CODE_STRUCT, TYPE_CODE_UNION: Structure whose fields were not 6885 1.1 christos yet defined at the time a pointer to it was made. 6886 1.1 christos Fix: Do a full lookup on the struct/union tag. */ 6887 1.1 christos 6888 1.1 christos static void 6889 1.1 christos cleanup_undefined_types_1 (void) 6890 1.1 christos { 6891 1.1 christos struct type **type; 6892 1.1 christos 6893 1.1 christos /* Iterate over every undefined type, and look for a symbol whose type 6894 1.10 christos matches our undefined type. The symbol matches if: 6895 1.1 christos 1. It is a typedef in the STRUCT domain; 6896 1.1 christos 2. It has the same name, and same type code; 6897 1.1 christos 3. The instance flags are identical. 6898 1.1 christos 6899 1.1 christos It is important to check the instance flags, because we have seen 6900 1.1 christos examples where the debug info contained definitions such as: 6901 1.1 christos 6902 1.1 christos "foo_t:t30=B31=xefoo_t:" 6903 1.1 christos 6904 1.1 christos In this case, we have created an undefined type named "foo_t" whose 6905 1.1 christos instance flags is null (when processing "xefoo_t"), and then created 6906 1.9 christos another type with the same name, but with different instance flags 6907 1.1 christos ('B' means volatile). I think that the definition above is wrong, 6908 1.1 christos since the same type cannot be volatile and non-volatile at the same 6909 1.1 christos time, but we need to be able to cope with it when it happens. The 6910 1.1 christos approach taken here is to treat these two types as different. */ 6911 1.1 christos 6912 1.1 christos for (type = undef_types; type < undef_types + undef_types_length; type++) 6913 1.1 christos { 6914 1.1 christos switch ((*type)->code ()) 6915 1.1 christos { 6916 1.1 christos 6917 1.10 christos case TYPE_CODE_STRUCT: 6918 1.1 christos case TYPE_CODE_UNION: 6919 1.1 christos case TYPE_CODE_ENUM: 6920 1.1 christos { 6921 1.1 christos /* Check if it has been defined since. Need to do this here 6922 1.9 christos as well as in check_typedef to deal with the (legitimate in 6923 1.1 christos C though not C++) case of several types with the same name 6924 1.5 christos in different source files. */ 6925 1.1 christos if ((*type)->is_stub ()) 6926 1.8 christos { 6927 1.1 christos struct pending *ppt; 6928 1.1 christos int i; 6929 1.8 christos /* Name of the type, without "struct" or "union". */ 6930 1.1 christos const char *type_name = (*type)->name (); 6931 1.1 christos 6932 1.1 christos if (type_name == NULL) 6933 1.1 christos { 6934 1.1 christos complaint (_("need a type name")); 6935 1.10 christos break; 6936 1.10 christos } 6937 1.10 christos for (ppt = *get_file_symbols (); ppt; ppt = ppt->next) 6938 1.10 christos { 6939 1.10 christos for (i = 0; i < ppt->nsyms; i++) 6940 1.9 christos { 6941 1.10 christos struct symbol *sym = ppt->symbol[i]; 6942 1.1 christos 6943 1.1 christos if (sym->aclass () == LOC_TYPEDEF 6944 1.1 christos && sym->domain () == STRUCT_DOMAIN 6945 1.1 christos && (sym->type ()->code () == (*type)->code ()) 6946 1.1 christos && ((*type)->instance_flags () 6947 1.1 christos == sym->type ()->instance_flags ()) 6948 1.1 christos && strcmp (sym->linkage_name (), type_name) == 0) 6949 1.1 christos replace_type (*type, sym->type ()); 6950 1.8 christos } 6951 1.10 christos } 6952 1.9 christos } 6953 1.1 christos } 6954 1.1 christos break; 6955 1.1 christos 6956 1.1 christos default: 6957 1.1 christos { 6958 1.1 christos complaint (_("forward-referenced types left unresolved, " 6959 1.1 christos "type code %d."), 6960 1.1 christos (*type)->code ()); 6961 1.9 christos } 6962 1.1 christos break; 6963 1.1 christos } 6964 1.1 christos } 6965 1.1 christos 6966 1.1 christos undef_types_length = 0; 6967 1.1 christos } 6968 1.1 christos 6969 1.1 christos /* Try to fix all the undefined types we encountered while processing 6970 1.1 christos this unit. */ 6971 1.8 christos 6972 1.1 christos void 6973 1.1 christos cleanup_undefined_stabs_types (struct objfile *objfile) 6974 1.1 christos { 6975 1.1 christos cleanup_undefined_types_1 (); 6976 1.1 christos cleanup_undefined_types_noname (objfile); 6977 1.1 christos } 6978 1.1 christos 6979 1.1 christos /* See stabsread.h. */ 6980 1.1 christos 6981 1.1 christos void 6982 1.1 christos scan_file_globals (struct objfile *objfile) 6983 1.1 christos { 6984 1.1 christos int hash; 6985 1.10 christos struct symbol *sym, *prev; 6986 1.10 christos struct objfile *resolve_objfile; 6987 1.10 christos 6988 1.1 christos /* SVR4 based linkers copy referenced global symbols from shared 6989 1.1 christos libraries to the main executable. 6990 1.1 christos If we are scanning the symbols for a shared library, try to resolve 6991 1.1 christos them from the minimal symbols of the main executable first. */ 6992 1.1 christos 6993 1.1 christos if (current_program_space->symfile_object_file 6994 1.10 christos && objfile != current_program_space->symfile_object_file) 6995 1.1 christos resolve_objfile = current_program_space->symfile_object_file; 6996 1.1 christos else 6997 1.1 christos resolve_objfile = objfile; 6998 1.1 christos 6999 1.1 christos while (1) 7000 1.1 christos { 7001 1.1 christos /* Avoid expensive loop through all minimal symbols if there are 7002 1.1 christos no unresolved symbols. */ 7003 1.8 christos for (hash = 0; hash < HASHSIZE; hash++) 7004 1.1 christos { 7005 1.1 christos if (global_sym_chain[hash]) 7006 1.1 christos break; 7007 1.1 christos } 7008 1.10 christos if (hash >= HASHSIZE) 7009 1.1 christos return; 7010 1.1 christos 7011 1.1 christos for (minimal_symbol *msymbol : resolve_objfile->msymbols ()) 7012 1.1 christos { 7013 1.1 christos QUIT; 7014 1.1 christos 7015 1.1 christos /* Skip static symbols. */ 7016 1.1 christos switch (msymbol->type ()) 7017 1.1 christos { 7018 1.1 christos case mst_file_text: 7019 1.1 christos case mst_file_data: 7020 1.1 christos case mst_file_bss: 7021 1.1 christos continue; 7022 1.1 christos default: 7023 1.9 christos break; 7024 1.1 christos } 7025 1.1 christos 7026 1.1 christos prev = NULL; 7027 1.9 christos 7028 1.1 christos /* Get the hash index and check all the symbols 7029 1.1 christos under that hash index. */ 7030 1.1 christos 7031 1.1 christos hash = hashname (msymbol->linkage_name ()); 7032 1.1 christos 7033 1.10 christos for (sym = global_sym_chain[hash]; sym;) 7034 1.1 christos { 7035 1.1 christos if (strcmp (msymbol->linkage_name (), sym->linkage_name ()) == 0) 7036 1.1 christos { 7037 1.10 christos /* Splice this symbol out of the hash chain and 7038 1.1 christos assign the value we have to it. */ 7039 1.1 christos if (prev) 7040 1.1 christos { 7041 1.1 christos prev->set_value_chain (sym->value_chain ()); 7042 1.1 christos } 7043 1.1 christos else 7044 1.1 christos { 7045 1.10 christos global_sym_chain[hash] = sym->value_chain (); 7046 1.10 christos } 7047 1.11 christos 7048 1.11 christos /* Check to see whether we need to fix up a common block. */ 7049 1.1 christos /* Note: this code might be executed several times for 7050 1.10 christos the same symbol if there are multiple references. */ 7051 1.10 christos if (sym) 7052 1.10 christos { 7053 1.1 christos if (sym->aclass () == LOC_BLOCK) 7054 1.1 christos fix_common_block 7055 1.1 christos (sym, msymbol->value_address (resolve_objfile), 7056 1.1 christos msymbol->section_index ()); 7057 1.10 christos else 7058 1.1 christos sym->set_value_address 7059 1.1 christos (msymbol->value_address (resolve_objfile)); 7060 1.1 christos sym->set_section_index (msymbol->section_index ()); 7061 1.1 christos } 7062 1.1 christos 7063 1.1 christos if (prev) 7064 1.1 christos { 7065 1.1 christos sym = prev->value_chain (); 7066 1.1 christos } 7067 1.10 christos else 7068 1.1 christos { 7069 1.1 christos sym = global_sym_chain[hash]; 7070 1.1 christos } 7071 1.1 christos } 7072 1.1 christos else 7073 1.1 christos { 7074 1.1 christos prev = sym; 7075 1.1 christos sym = sym->value_chain (); 7076 1.1 christos } 7077 1.1 christos } 7078 1.1 christos } 7079 1.1 christos if (resolve_objfile == objfile) 7080 1.1 christos break; 7081 1.1 christos resolve_objfile = objfile; 7082 1.1 christos } 7083 1.1 christos 7084 1.10 christos /* Change the storage class of any remaining unresolved globals to 7085 1.1 christos LOC_UNRESOLVED and remove them from the chain. */ 7086 1.1 christos for (hash = 0; hash < HASHSIZE; hash++) 7087 1.1 christos { 7088 1.10 christos sym = global_sym_chain[hash]; 7089 1.1 christos while (sym) 7090 1.1 christos { 7091 1.10 christos prev = sym; 7092 1.10 christos sym = sym->value_chain (); 7093 1.1 christos 7094 1.8 christos /* Change the symbol address from the misleading chain value 7095 1.1 christos to address zero. */ 7096 1.9 christos prev->set_value_address (0); 7097 1.1 christos 7098 1.1 christos /* Complain about unresolved common block symbols. */ 7099 1.1 christos if (prev->aclass () == LOC_STATIC) 7100 1.1 christos prev->set_aclass_index (LOC_UNRESOLVED); 7101 1.1 christos else 7102 1.1 christos complaint (_("%s: common block `%s' from " 7103 1.1 christos "global_sym_chain unresolved"), 7104 1.1 christos objfile_name (objfile), prev->print_name ()); 7105 1.1 christos } 7106 1.1 christos } 7107 1.1 christos memset (global_sym_chain, 0, sizeof (global_sym_chain)); 7108 1.1 christos } 7109 1.1 christos 7110 1.1 christos /* Initialize anything that needs initializing when starting to read 7111 1.1 christos a fresh piece of a symbol file, e.g. reading in the stuff corresponding 7112 1.1 christos to a psymtab. */ 7113 1.1 christos 7114 1.1 christos void 7115 1.1 christos stabsread_init (void) 7116 1.1 christos { 7117 1.1 christos } 7118 1.1 christos 7119 1.1 christos /* Initialize anything that needs initializing when a completely new 7120 1.1 christos symbol file is specified (not just adding some symbols from another 7121 1.1 christos file, e.g. a shared library). */ 7122 1.1 christos 7123 1.10 christos void 7124 1.1 christos stabsread_new_init (void) 7125 1.1 christos { 7126 1.1 christos /* Empty the hash table of global syms looking for values. */ 7127 1.1 christos memset (global_sym_chain, 0, sizeof (global_sym_chain)); 7128 1.1 christos } 7129 1.1 christos 7130 1.1 christos /* Initialize anything that needs initializing at the same time as 7131 1.1 christos start_compunit_symtab() is called. */ 7132 1.1 christos 7133 1.8 christos void 7134 1.1 christos start_stabs (void) 7135 1.1 christos { 7136 1.1 christos global_stabs = NULL; /* AIX COFF */ 7137 1.1 christos /* Leave FILENUM of 0 free for builtin types and this file's types. */ 7138 1.1 christos n_this_object_header_files = 1; 7139 1.10 christos type_vector_length = 0; 7140 1.1 christos type_vector = (struct type **) 0; 7141 1.1 christos within_function = 0; 7142 1.1 christos 7143 1.1 christos /* FIXME: If common_block_name is not already NULL, we should complain(). */ 7144 1.1 christos common_block_name = NULL; 7145 1.1 christos } 7146 1.1 christos 7147 1.1 christos /* Call after end_compunit_symtab(). */ 7148 1.1 christos 7149 1.1 christos void 7150 1.1 christos end_stabs (void) 7151 1.1 christos { 7152 1.1 christos if (type_vector) 7153 1.1 christos { 7154 1.1 christos xfree (type_vector); 7155 1.1 christos } 7156 1.1 christos type_vector = 0; 7157 1.1 christos type_vector_length = 0; 7158 1.8 christos previous_stab_code = 0; 7159 1.1 christos } 7160 1.1 christos 7161 1.1 christos void 7162 1.1 christos finish_global_stabs (struct objfile *objfile) 7163 1.1 christos { 7164 1.1 christos if (global_stabs) 7165 1.1 christos { 7166 1.7 christos patch_block_stabs (*get_global_symbols (), global_stabs, objfile); 7167 1.7 christos xfree (global_stabs); 7168 1.1 christos global_stabs = NULL; 7169 1.7 christos } 7170 1.1 christos } 7171 1.1 christos 7172 1.1 christos /* Find the end of the name, delimited by a ':', but don't match 7173 1.1 christos ObjC symbols which look like -[Foo bar::]:bla. */ 7174 1.1 christos static const char * 7175 1.1 christos find_name_end (const char *name) 7176 1.1 christos { 7177 1.1 christos const char *s = name; 7178 1.1 christos 7179 1.1 christos if (s[0] == '-' || *s == '+') 7180 1.1 christos { 7181 1.1 christos /* Must be an ObjC method symbol. */ 7182 1.1 christos if (s[1] != '[') 7183 1.1 christos { 7184 1.1 christos error (_("invalid symbol name \"%s\""), name); 7185 1.1 christos } 7186 1.1 christos s = strchr (s, ']'); 7187 1.1 christos if (s == NULL) 7188 1.1 christos { 7189 1.1 christos error (_("invalid symbol name \"%s\""), name); 7190 1.1 christos } 7191 1.8 christos return strchr (s, ':'); 7192 1.8 christos } 7193 1.8 christos else 7194 1.8 christos { 7195 1.8 christos return strchr (s, ':'); 7196 1.9 christos } 7197 1.8 christos } 7198 1.8 christos 7199 1.1 christos /* See stabsread.h. */ 7200 1.1 christos 7201 1.9 christos int 7202 1.1 christos hashname (const char *name) 7203 1.9 christos { 7204 1.1 christos return fast_hash (name, strlen (name)) % HASHSIZE; 7205 1.1 christos } 7206 1.1 christos 7207 1.6 christos /* Initializer for this module. */ 7208 1.1 christos 7209 1.1 christos void _initialize_stabsread (); 7210 1.1 christos void 7211 1.6 christos _initialize_stabsread () 7212 1.1 christos { 7213 1.1 christos undef_types_allocated = 20; 7214 1.1 christos undef_types_length = 0; 7215 1.1 christos undef_types = XNEWVEC (struct type *, undef_types_allocated); 7216 1.1 christos 7217 1.1 christos noname_undefs_allocated = 20; 7218 noname_undefs_length = 0; 7219 noname_undefs = XNEWVEC (struct nat, noname_undefs_allocated); 7220 7221 stab_register_index = register_symbol_register_impl (LOC_REGISTER, 7222 &stab_register_funcs); 7223 stab_regparm_index = register_symbol_register_impl (LOC_REGPARM_ADDR, 7224 &stab_register_funcs); 7225 } 7226