[gdb/testsuite] Fix dwo path in fission-*.S
[deliverable/binutils-gdb.git] / gdb / coffread.c
CommitLineData
c906108c 1/* Read coff symbol tables and convert to internal format, for GDB.
3666a048 2 Copyright (C) 1987-2021 Free Software Foundation, Inc.
c906108c
SS
3 Contributed by David D. Johnson, Brown University (ddj@cs.brown.edu).
4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
19
20#include "defs.h"
4de283e4
TT
21#include "symtab.h"
22#include "gdbtypes.h"
23#include "demangle.h"
24#include "breakpoint.h"
c906108c 25
4de283e4
TT
26#include "bfd.h"
27#include "gdb_obstack.h"
c906108c
SS
28#include <ctype.h>
29
4de283e4
TT
30#include "coff/internal.h" /* Internal format of COFF symbols in BFD */
31#include "libcoff.h" /* FIXME secret internal data from BFD */
32#include "objfiles.h"
0baae8db 33#include "buildsym-legacy.h"
d55e5aa6 34#include "stabsread.h"
4de283e4 35#include "complaints.h"
d55e5aa6 36#include "target.h"
4de283e4
TT
37#include "block.h"
38#include "dictionary.h"
70182375 39#include "dwarf2/public.h"
4de283e4
TT
40
41#include "coff-pe-read.h"
42
43#include "psymtab.h"
44#include "build-id.h"
ccefe4c4 45
91a81f69
TT
46/* The objfile we are currently reading. */
47
dd707e8e 48static struct objfile *coffread_objfile;
91a81f69 49
c5aa993b
JM
50struct coff_symfile_info
51 {
24699405
TT
52 file_ptr min_lineno_offset = 0; /* Where in file lowest line#s are. */
53 file_ptr max_lineno_offset = 0; /* 1+last byte of line#s in file. */
c906108c 54
24699405
TT
55 CORE_ADDR textaddr = 0; /* Addr of .text section. */
56 unsigned int textsize = 0; /* Size of .text section. */
e2a03548 57 std::vector<asection *> *stabsects; /* .stab sections. */
24699405
TT
58 asection *stabstrsect = nullptr; /* Section pointer for .stab section. */
59 char *stabstrdata = nullptr;
c5aa993b 60 };
c906108c 61
24699405
TT
62/* Key for COFF-associated data. */
63
64static const struct objfile_key<coff_symfile_info> coff_objfile_data_key;
65
c906108c
SS
66/* Translate an external name string into a user-visible name. */
67#define EXTERNAL_NAME(string, abfd) \
aff410f1
MS
68 (string[0] == bfd_get_symbol_leading_char (abfd) \
69 ? string + 1 : string)
c906108c
SS
70
71/* To be an sdb debug type, type must have at least a basic or primary
72 derived type. Using this rather than checking against T_NULL is
73 said to prevent core dumps if we try to operate on Michael Bloom
74 dbx-in-coff file. */
75
76#define SDB_TYPE(type) (BTYPE(type) | (type & N_TMASK))
77
c906108c
SS
78/* Core address of start and end of text of current source file.
79 This comes from a ".text" symbol where x_nlinno > 0. */
80
81static CORE_ADDR current_source_start_addr;
82static CORE_ADDR current_source_end_addr;
83
84/* The addresses of the symbol table stream and number of symbols
85 of the object file we are reading (as copied into core). */
86
87static bfd *nlist_bfd_global;
88static int nlist_nsyms_global;
89
c906108c 90
aff410f1
MS
91/* Pointers to scratch storage, used for reading raw symbols and
92 auxents. */
c906108c
SS
93
94static char *temp_sym;
95static char *temp_aux;
96
97/* Local variables that hold the shift and mask values for the
98 COFF file that we are currently reading. These come back to us
99 from BFD, and are referenced by their macro names, as well as
100 internally to the BTYPE, ISPTR, ISFCN, ISARY, ISTAG, and DECREF
101 macros from include/coff/internal.h . */
102
c5aa993b
JM
103static unsigned local_n_btmask;
104static unsigned local_n_btshft;
105static unsigned local_n_tmask;
106static unsigned local_n_tshift;
c906108c
SS
107
108#define N_BTMASK local_n_btmask
109#define N_BTSHFT local_n_btshft
110#define N_TMASK local_n_tmask
111#define N_TSHIFT local_n_tshift
c5aa993b 112
aff410f1
MS
113/* Local variables that hold the sizes in the file of various COFF
114 structures. (We only need to know this to read them from the file
115 -- BFD will then translate the data in them, into `internal_xxx'
116 structs in the right byte order, alignment, etc.) */
c906108c 117
c5aa993b
JM
118static unsigned local_linesz;
119static unsigned local_symesz;
120static unsigned local_auxesz;
c906108c
SS
121
122/* This is set if this is a PE format file. */
123
124static int pe_file;
125
126/* Chain of typedefs of pointers to empty struct/union types.
127 They are chained thru the SYMBOL_VALUE_CHAIN. */
128
129static struct symbol *opaque_type_chain[HASHSIZE];
130
aff410f1 131/* Simplified internal version of coff symbol table information. */
c906108c 132
c5aa993b
JM
133struct coff_symbol
134 {
135 char *c_name;
aff410f1
MS
136 int c_symnum; /* Symbol number of this entry. */
137 int c_naux; /* 0 if syment only, 1 if syment +
138 auxent, etc. */
5e8db398 139 CORE_ADDR c_value;
c5aa993b
JM
140 int c_sclass;
141 int c_secnum;
142 unsigned int c_type;
143 };
c906108c 144
fc474241
DE
145/* Vector of types defined so far, indexed by their type numbers. */
146
147static struct type **type_vector;
148
149/* Number of elements allocated for type_vector currently. */
150
151static int type_vector_length;
152
153/* Initial size of type vector. Is realloc'd larger if needed, and
154 realloc'd down to the size actually used, when completed. */
155
156#define INITIAL_TYPE_VECTOR_LENGTH 160
157
e2a03548 158static char *linetab = NULL;
a9e48095
JN
159static file_ptr linetab_offset;
160static file_ptr linetab_size;
e2a03548
TT
161
162static char *stringtab = NULL;
163
a14ed312 164extern void stabsread_clear_cache (void);
7be570e7 165
5e2b427d
UW
166static struct type *coff_read_struct_type (int, int, int,
167 struct objfile *);
c906108c 168
a14ed312 169static struct type *decode_base_type (struct coff_symbol *,
aff410f1
MS
170 unsigned int,
171 union internal_auxent *,
5e2b427d 172 struct objfile *);
c906108c 173
a14ed312 174static struct type *decode_type (struct coff_symbol *, unsigned int,
5e2b427d
UW
175 union internal_auxent *,
176 struct objfile *);
c906108c 177
a14ed312
KB
178static struct type *decode_function_type (struct coff_symbol *,
179 unsigned int,
5e2b427d
UW
180 union internal_auxent *,
181 struct objfile *);
c906108c 182
5e2b427d
UW
183static struct type *coff_read_enum_type (int, int, int,
184 struct objfile *);
c906108c 185
a14ed312
KB
186static struct symbol *process_coff_symbol (struct coff_symbol *,
187 union internal_auxent *,
188 struct objfile *);
c906108c 189
a14ed312 190static void patch_opaque_types (struct symtab *);
c906108c 191
a9e48095 192static void enter_linenos (file_ptr, int, int, struct objfile *);
c906108c 193
a9e48095 194static int init_lineno (bfd *, file_ptr, file_ptr, gdb::unique_xmalloc_ptr<char> *);
c906108c 195
a14ed312 196static char *getsymname (struct internal_syment *);
c906108c 197
9f37bbcc 198static const char *coff_getfilename (union internal_auxent *);
c906108c 199
a9e48095 200static int init_stringtab (bfd *, file_ptr, gdb::unique_xmalloc_ptr<char> *);
c906108c 201
a14ed312 202static void read_one_sym (struct coff_symbol *,
aff410f1
MS
203 struct internal_syment *,
204 union internal_auxent *);
c906108c 205
8dddcb8f 206static void coff_symtab_read (minimal_symbol_reader &,
a9e48095
JN
207 file_ptr, unsigned int, struct objfile *);
208
c906108c
SS
209/* We are called once per section from coff_symfile_read. We
210 need to examine each section we are passed, check to see
211 if it is something we are interested in processing, and
212 if so, stash away some access information for the section.
213
214 FIXME: The section names should not be hardwired strings (what
215 should they be? I don't think most object file formats have enough
216 section flags to specify what kind of debug section it is
217 -kingdon). */
218
219static void
12b9c64f 220coff_locate_sections (bfd *abfd, asection *sectp, void *csip)
c906108c 221{
52f0bd74 222 struct coff_symfile_info *csi;
c906108c
SS
223 const char *name;
224
225 csi = (struct coff_symfile_info *) csip;
fd361982 226 name = bfd_section_name (sectp);
7ecb6532 227 if (strcmp (name, ".text") == 0)
c906108c 228 {
fd361982
AM
229 csi->textaddr = bfd_section_vma (sectp);
230 csi->textsize += bfd_section_size (sectp);
c906108c 231 }
61012eef 232 else if (startswith (name, ".text"))
c906108c 233 {
fd361982 234 csi->textsize += bfd_section_size (sectp);
c906108c 235 }
7ecb6532 236 else if (strcmp (name, ".stabstr") == 0)
c906108c
SS
237 {
238 csi->stabstrsect = sectp;
239 }
61012eef 240 else if (startswith (name, ".stab"))
c906108c
SS
241 {
242 const char *s;
243
244 /* We can have multiple .stab sections if linked with
dda83cd7 245 --split-by-reloc. */
c906108c 246 for (s = name + sizeof ".stab" - 1; *s != '\0'; s++)
c5aa993b 247 if (!isdigit (*s))
c906108c
SS
248 break;
249 if (*s == '\0')
e2a03548 250 csi->stabsects->push_back (sectp);
c906108c
SS
251 }
252}
253
254/* Return the section_offsets* that CS points to. */
a14ed312 255static int cs_to_section (struct coff_symbol *, struct objfile *);
c906108c 256
c5aa993b
JM
257struct find_targ_sec_arg
258 {
259 int targ_index;
260 asection **resultp;
261 };
c906108c 262
c5aa993b 263static void
12b9c64f 264find_targ_sec (bfd *abfd, asection *sect, void *obj)
c906108c 265{
c5aa993b 266 struct find_targ_sec_arg *args = (struct find_targ_sec_arg *) obj;
c5504eaf 267
c906108c
SS
268 if (sect->target_index == args->targ_index)
269 *args->resultp = sect;
270}
271
fbcebcb1
DJ
272/* Return the bfd_section that CS points to. */
273static struct bfd_section*
274cs_to_bfd_section (struct coff_symbol *cs, struct objfile *objfile)
c906108c
SS
275{
276 asection *sect = NULL;
277 struct find_targ_sec_arg args;
c906108c
SS
278
279 args.targ_index = cs->c_secnum;
280 args.resultp = &sect;
281 bfd_map_over_sections (objfile->obfd, find_targ_sec, &args);
fbcebcb1
DJ
282 return sect;
283}
284
285/* Return the section number (SECT_OFF_*) that CS points to. */
286static int
287cs_to_section (struct coff_symbol *cs, struct objfile *objfile)
288{
289 asection *sect = cs_to_bfd_section (cs, objfile);
c5504eaf 290
05cfdb42
DJ
291 if (sect == NULL)
292 return SECT_OFF_TEXT (objfile);
65cf3563 293 return gdb_bfd_section_index (objfile->obfd, sect);
c906108c
SS
294}
295
296/* Return the address of the section of a COFF symbol. */
297
a14ed312 298static CORE_ADDR cs_section_address (struct coff_symbol *, bfd *);
c906108c
SS
299
300static CORE_ADDR
fba45db2 301cs_section_address (struct coff_symbol *cs, bfd *abfd)
c906108c
SS
302{
303 asection *sect = NULL;
304 struct find_targ_sec_arg args;
305 CORE_ADDR addr = 0;
306
307 args.targ_index = cs->c_secnum;
308 args.resultp = &sect;
309 bfd_map_over_sections (abfd, find_targ_sec, &args);
310 if (sect != NULL)
fd361982 311 addr = bfd_section_vma (sect);
c906108c
SS
312 return addr;
313}
314
315/* Look up a coff type-number index. Return the address of the slot
316 where the type for that index is stored.
317 The type-number is in INDEX.
318
319 This can be used for finding the type associated with that index
320 or for associating a new type with the index. */
321
322static struct type **
aa1ee363 323coff_lookup_type (int index)
c906108c
SS
324{
325 if (index >= type_vector_length)
326 {
327 int old_vector_length = type_vector_length;
328
329 type_vector_length *= 2;
c5aa993b 330 if (index /* is still */ >= type_vector_length)
c906108c
SS
331 type_vector_length = index * 2;
332
333 type_vector = (struct type **)
334 xrealloc ((char *) type_vector,
335 type_vector_length * sizeof (struct type *));
336 memset (&type_vector[old_vector_length], 0,
c5aa993b 337 (type_vector_length - old_vector_length) * sizeof (struct type *));
c906108c
SS
338 }
339 return &type_vector[index];
340}
341
342/* Make sure there is a type allocated for type number index
343 and return the type object.
344 This can create an empty (zeroed) type object. */
345
346static struct type *
fba45db2 347coff_alloc_type (int index)
c906108c 348{
52f0bd74
AC
349 struct type **type_addr = coff_lookup_type (index);
350 struct type *type = *type_addr;
c906108c
SS
351
352 /* If we are referring to a type not known at all yet,
353 allocate an empty type for it.
354 We will fill it in later if we find out how. */
355 if (type == NULL)
356 {
dd707e8e 357 type = alloc_type (coffread_objfile);
c906108c
SS
358 *type_addr = type;
359 }
360 return type;
361}
362\f
c906108c
SS
363/* Start a new symtab for a new source file.
364 This is called when a COFF ".file" symbol is seen;
365 it indicates the start of data for one original source file. */
366
367static void
4d663531 368coff_start_symtab (struct objfile *objfile, const char *name)
c906108c 369{
5985ac61 370 within_function = 0;
4d663531 371 start_symtab (objfile,
827f438f 372 name,
c5aa993b
JM
373 /* We never know the directory name for COFF. */
374 NULL,
2c99ee5c
TT
375 /* The start address is irrelevant, since we call
376 set_last_source_start_addr in coff_end_symtab. */
5ffa0793
PA
377 0,
378 /* Let buildsym.c deduce the language for this symtab. */
379 language_unknown);
c906108c 380 record_debugformat ("COFF");
c906108c
SS
381}
382
383/* Save the vital information from when starting to read a file,
384 for use when closing off the current file.
aff410f1
MS
385 NAME is the file name the symbols came from, START_ADDR is the
386 first text address for the file, and SIZE is the number of bytes of
387 text. */
c906108c
SS
388
389static void
9f37bbcc 390complete_symtab (const char *name, CORE_ADDR start_addr, unsigned int size)
c906108c 391{
46212e0b 392 set_last_source_file (name);
c906108c
SS
393 current_source_start_addr = start_addr;
394 current_source_end_addr = start_addr + size;
c906108c
SS
395}
396
aff410f1
MS
397/* Finish the symbol definitions for one main source file, close off
398 all the lexical contexts for that file (creating struct block's for
399 them), then make the struct symtab for that file and put it in the
400 list of all such. */
c906108c
SS
401
402static void
fba45db2 403coff_end_symtab (struct objfile *objfile)
c906108c 404{
2c99ee5c 405 set_last_source_start_addr (current_source_start_addr);
c906108c 406
4d663531 407 end_symtab (current_source_end_addr, SECT_OFF_TEXT (objfile));
c906108c 408
aff410f1 409 /* Reinitialize for beginning of new file. */
46212e0b 410 set_last_source_file (NULL);
c906108c
SS
411}
412\f
af312be7
JB
413/* The linker sometimes generates some non-function symbols inside
414 functions referencing variables imported from another DLL.
415 Return nonzero if the given symbol corresponds to one of them. */
416
417static int
418is_import_fixup_symbol (struct coff_symbol *cs,
419 enum minimal_symbol_type type)
420{
85102364 421 /* The following is a bit of a heuristic using the characteristics
af312be7
JB
422 of these fixup symbols, but should work well in practice... */
423 int i;
424
425 /* Must be a non-static text symbol. */
426 if (type != mst_text)
427 return 0;
428
429 /* Must be a non-function symbol. */
430 if (ISFCN (cs->c_type))
431 return 0;
432
433 /* The name must start with "__fu<digits>__". */
61012eef 434 if (!startswith (cs->c_name, "__fu"))
af312be7
JB
435 return 0;
436 if (! isdigit (cs->c_name[4]))
437 return 0;
438 for (i = 5; cs->c_name[i] != '\0' && isdigit (cs->c_name[i]); i++)
439 /* Nothing, just incrementing index past all digits. */;
440 if (cs->c_name[i] != '_' || cs->c_name[i + 1] != '_')
441 return 0;
442
443 return 1;
444}
445
fbcebcb1 446static struct minimal_symbol *
8dddcb8f
TT
447record_minimal_symbol (minimal_symbol_reader &reader,
448 struct coff_symbol *cs, CORE_ADDR address,
fbcebcb1
DJ
449 enum minimal_symbol_type type, int section,
450 struct objfile *objfile)
c906108c 451{
aff410f1 452 /* We don't want TDESC entry points in the minimal symbol table. */
fbcebcb1
DJ
453 if (cs->c_name[0] == '@')
454 return NULL;
c906108c 455
af312be7
JB
456 if (is_import_fixup_symbol (cs, type))
457 {
458 /* Because the value of these symbols is within a function code
459 range, these symbols interfere with the symbol-from-address
30baf67b 460 reverse lookup; this manifests itself in backtraces, or any
af312be7
JB
461 other commands that prints symbolic addresses. Just pretend
462 these symbols do not exist. */
463 return NULL;
464 }
465
31edb802 466 return reader.record_full (cs->c_name, true, address, type, section);
c906108c
SS
467}
468\f
469/* coff_symfile_init ()
470 is the coff-specific initialization routine for reading symbols.
471 It is passed a struct objfile which contains, among other things,
472 the BFD for the file whose symbols are being read, and a slot for
473 a pointer to "private data" which we fill with cookies and other
474 treats for coff_symfile_read ().
475
aff410f1
MS
476 We will only be called if this is a COFF or COFF-like file. BFD
477 handles figuring out the format of the file, and code in symtab.c
c906108c
SS
478 uses BFD's determination to vector to us.
479
aff410f1
MS
480 The ultimate result is a new symtab (or, FIXME, eventually a
481 psymtab). */
c906108c
SS
482
483static void
fba45db2 484coff_symfile_init (struct objfile *objfile)
c906108c 485{
aff410f1 486 /* Allocate struct to keep track of the symfile. */
24699405 487 coff_objfile_data_key.emplace (objfile);
c906108c
SS
488
489 /* COFF objects may be reordered, so set OBJF_REORDERED. If we
490 find this causes a significant slowdown in gdb then we could
491 set it in the debug symbol readers only when necessary. */
492 objfile->flags |= OBJF_REORDERED;
c906108c
SS
493}
494
aff410f1
MS
495/* This function is called for every section; it finds the outer
496 limits of the line table (minimum and maximum file offset) so that
497 the mainline code can read the whole thing for efficiency. */
c906108c 498
c906108c 499static void
7be0c536 500find_linenos (bfd *abfd, struct bfd_section *asect, void *vpinfo)
c906108c
SS
501{
502 struct coff_symfile_info *info;
503 int size, count;
504 file_ptr offset, maxoff;
505
aff410f1 506 /* WARNING WILL ROBINSON! ACCESSING BFD-PRIVATE DATA HERE! FIXME! */
c906108c 507 count = asect->lineno_count;
aff410f1 508 /* End of warning. */
c906108c
SS
509
510 if (count == 0)
511 return;
512 size = count * local_linesz;
513
c5aa993b 514 info = (struct coff_symfile_info *) vpinfo;
aff410f1 515 /* WARNING WILL ROBINSON! ACCESSING BFD-PRIVATE DATA HERE! FIXME! */
c906108c 516 offset = asect->line_filepos;
aff410f1 517 /* End of warning. */
c906108c
SS
518
519 if (offset < info->min_lineno_offset || info->min_lineno_offset == 0)
520 info->min_lineno_offset = offset;
521
522 maxoff = offset + size;
523 if (maxoff > info->max_lineno_offset)
524 info->max_lineno_offset = maxoff;
525}
526
527
528/* The BFD for this file -- only good while we're actively reading
529 symbols into a psymtab or a symtab. */
530
531static bfd *symfile_bfd;
532
533/* Read a symbol file, after initialization by coff_symfile_init. */
534
c906108c 535static void
b15cc25c 536coff_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
c906108c
SS
537{
538 struct coff_symfile_info *info;
c906108c
SS
539 bfd *abfd = objfile->obfd;
540 coff_data_type *cdata = coff_data (abfd);
b16c44de 541 const char *filename = bfd_get_filename (abfd);
52f0bd74 542 int val;
745b8ca0 543 unsigned int num_symbols;
a9e48095
JN
544 file_ptr symtab_offset;
545 file_ptr stringtab_offset;
546 unsigned int stabstrsize;
c2d11a7d 547
24699405 548 info = coff_objfile_data_key.get (objfile);
aff410f1 549 symfile_bfd = abfd; /* Kludge for swap routines. */
c906108c 550
e2a03548
TT
551 std::vector<asection *> stabsects;
552 scoped_restore restore_stabsects
553 = make_scoped_restore (&info->stabsects, &stabsects);
554
c906108c 555/* WARNING WILL ROBINSON! ACCESSING BFD-PRIVATE DATA HERE! FIXME! */
c5aa993b
JM
556 num_symbols = bfd_get_symcount (abfd); /* How many syms */
557 symtab_offset = cdata->sym_filepos; /* Symbol table file offset */
558 stringtab_offset = symtab_offset + /* String table file offset */
559 num_symbols * cdata->local_symesz;
c906108c
SS
560
561 /* Set a few file-statics that give us specific information about
562 the particular COFF file format we're reading. */
c906108c
SS
563 local_n_btmask = cdata->local_n_btmask;
564 local_n_btshft = cdata->local_n_btshft;
c5aa993b 565 local_n_tmask = cdata->local_n_tmask;
c906108c 566 local_n_tshift = cdata->local_n_tshift;
c5aa993b
JM
567 local_linesz = cdata->local_linesz;
568 local_symesz = cdata->local_symesz;
569 local_auxesz = cdata->local_auxesz;
c906108c
SS
570
571 /* Allocate space for raw symbol and aux entries, based on their
572 space requirements as reported by BFD. */
e2a03548
TT
573 gdb::def_vector<char> temp_storage (cdata->local_symesz
574 + cdata->local_auxesz);
575 temp_sym = temp_storage.data ();
c906108c 576 temp_aux = temp_sym + cdata->local_symesz;
c906108c
SS
577
578 /* We need to know whether this is a PE file, because in PE files,
579 unlike standard COFF files, symbol values are stored as offsets
580 from the section address, rather than as absolute addresses.
581 FIXME: We should use BFD to read the symbol table, and thus avoid
582 this problem. */
0d06e24b 583 pe_file =
61012eef
GB
584 startswith (bfd_get_target (objfile->obfd), "pe")
585 || startswith (bfd_get_target (objfile->obfd), "epoc-pe");
c906108c 586
aff410f1 587 /* End of warning. */
c906108c 588
c906108c
SS
589 info->min_lineno_offset = 0;
590 info->max_lineno_offset = 0;
c906108c 591
ebeb39fe
JB
592 /* Only read line number information if we have symbols.
593
594 On Windows NT, some of the system's DLL's have sections with
595 PointerToLinenumbers fields that are non-zero, but point at
596 random places within the image file. (In the case I found,
597 KERNEL32.DLL's .text section has a line number info pointer that
598 points into the middle of the string `lib\\i386\kernel32.dll'.)
599
600 However, these DLL's also have no symbols. The line number
601 tables are meaningless without symbols. And in fact, GDB never
602 uses the line number information unless there are symbols. So we
603 can avoid spurious error messages (and maybe run a little
604 faster!) by not even reading the line number table unless we have
605 symbols. */
e2a03548
TT
606 scoped_restore restore_linetab = make_scoped_restore (&linetab);
607 gdb::unique_xmalloc_ptr<char> linetab_storage;
ebeb39fe
JB
608 if (num_symbols > 0)
609 {
610 /* Read the line number table, all at once. */
611 bfd_map_over_sections (abfd, find_linenos, (void *) info);
612
ebeb39fe 613 val = init_lineno (abfd, info->min_lineno_offset,
dda83cd7 614 info->max_lineno_offset - info->min_lineno_offset,
e2a03548 615 &linetab_storage);
ebeb39fe 616 if (val < 0)
dda83cd7 617 error (_("\"%s\": error reading line numbers."), filename);
ebeb39fe 618 }
c906108c
SS
619
620 /* Now read the string table, all at once. */
621
e2a03548
TT
622 scoped_restore restore_stringtab = make_scoped_restore (&stringtab);
623 gdb::unique_xmalloc_ptr<char> stringtab_storage;
624 val = init_stringtab (abfd, stringtab_offset, &stringtab_storage);
c906108c 625 if (val < 0)
b926417a 626 error (_("\"%s\": can't get string table"), filename);
c906108c 627
d25e8719 628 minimal_symbol_reader reader (objfile);
c906108c
SS
629
630 /* Now that the executable file is positioned at symbol table,
631 process it and define symbols accordingly. */
632
8dddcb8f 633 coff_symtab_read (reader, (long) symtab_offset, num_symbols, objfile);
c906108c 634
aff410f1
MS
635 /* Install any minimal symbols that have been collected as the
636 current minimal symbols for this objfile. */
c906108c 637
d25e8719 638 reader.install ();
c906108c 639
303c5ee1
YQ
640 if (pe_file)
641 {
7932255d 642 for (minimal_symbol *msym : objfile->msymbols ())
303c5ee1 643 {
c9d95fa3 644 const char *name = msym->linkage_name ();
303c5ee1
YQ
645
646 /* If the minimal symbols whose name are prefixed by "__imp_"
647 or "_imp_", get rid of the prefix, and search the minimal
648 symbol in OBJFILE. Note that 'maintenance print msymbols'
649 shows that type of these "_imp_XXXX" symbols is mst_data. */
20d35291 650 if (MSYMBOL_TYPE (msym) == mst_data)
303c5ee1 651 {
20d35291
PA
652 const char *name1 = NULL;
653
654 if (startswith (name, "_imp_"))
655 name1 = name + 5;
656 else if (startswith (name, "__imp_"))
657 name1 = name + 6;
658 if (name1 != NULL)
659 {
660 int lead = bfd_get_symbol_leading_char (objfile->obfd);
661 struct bound_minimal_symbol found;
662
dda83cd7 663 if (lead != '\0' && *name1 == lead)
20d35291
PA
664 name1 += 1;
665
666 found = lookup_minimal_symbol (name1, NULL, objfile);
667
668 /* If found, there are symbols named "_imp_foo" and "foo"
669 respectively in OBJFILE. Set the type of symbol "foo"
670 as 'mst_solib_trampoline'. */
671 if (found.minsym != NULL
672 && MSYMBOL_TYPE (found.minsym) == mst_text)
673 MSYMBOL_TYPE (found.minsym) = mst_solib_trampoline;
674 }
303c5ee1
YQ
675 }
676 }
677 }
678
97cbe998
SDJ
679 if (!(objfile->flags & OBJF_READNEVER))
680 bfd_map_over_sections (abfd, coff_locate_sections, (void *) info);
c906108c 681
e2a03548 682 if (!info->stabsects->empty())
c906108c 683 {
c5aa993b 684 if (!info->stabstrsect)
b83266a0 685 {
3e43a32a
MS
686 error (_("The debugging information in `%s' is corrupted.\nThe "
687 "file has a `.stabs' section, but no `.stabstr' section."),
b926417a 688 filename);
b83266a0
SS
689 }
690
c906108c 691 /* FIXME: dubious. Why can't we use something normal like
dda83cd7 692 bfd_get_section_contents? */
c906108c
SS
693 bfd_seek (abfd, abfd->where, 0);
694
fd361982 695 stabstrsize = bfd_section_size (info->stabstrsect);
c906108c
SS
696
697 coffstab_build_psymtabs (objfile,
c906108c 698 info->textaddr, info->textsize,
e2a03548 699 *info->stabsects,
c906108c
SS
700 info->stabstrsect->filepos, stabstrsize);
701 }
251d32d9 702 if (dwarf2_has_info (objfile, NULL))
42a076f0
EZ
703 {
704 /* DWARF2 sections. */
f29dff0a 705 dwarf2_build_psymtabs (objfile);
42a076f0 706 }
c906108c 707
fea25152
BF
708 dwarf2_build_frame_info (objfile);
709
9cce227f 710 /* Try to add separate debug file if no symbols table found. */
a8ad4f3c 711 if (!objfile->has_partial_symbols ())
9cce227f 712 {
a8dbfd58 713 std::string debugfile = find_separate_debug_file_by_buildid (objfile);
9cce227f 714
a8dbfd58 715 if (debugfile.empty ())
c74f7d1c 716 debugfile = find_separate_debug_file_by_debuglink (objfile);
9cce227f 717
a8dbfd58 718 if (!debugfile.empty ())
9cce227f 719 {
b926417a 720 gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (debugfile.c_str ()));
c5504eaf 721
b926417a 722 symbol_file_add_separate (debug_bfd.get (), debugfile.c_str (),
a8dbfd58 723 symfile_flags, objfile);
9cce227f
TG
724 }
725 }
c906108c
SS
726}
727
728static void
fba45db2 729coff_new_init (struct objfile *ignore)
c906108c
SS
730{
731}
732
aff410f1
MS
733/* Perform any local cleanups required when we are done with a
734 particular objfile. I.E, we are in the process of discarding all
735 symbol information for an objfile, freeing up all memory held for
736 it, and unlinking the objfile struct from the global list of known
737 objfiles. */
c906108c
SS
738
739static void
fba45db2 740coff_symfile_finish (struct objfile *objfile)
c906108c 741{
aff410f1 742 /* Let stabs reader clean up. */
7be570e7 743 stabsread_clear_cache ();
c906108c 744}
c906108c 745\f
c5aa993b 746
c906108c
SS
747/* Given pointers to a symbol table in coff style exec file,
748 analyze them and create struct symtab's describing the symbols.
749 NSYMS is the number of symbols in the symbol table.
750 We read them one at a time using read_one_sym (). */
751
752static void
8dddcb8f 753coff_symtab_read (minimal_symbol_reader &reader,
a9e48095 754 file_ptr symtab_offset, unsigned int nsyms,
fba45db2 755 struct objfile *objfile)
c906108c 756{
08feed99 757 struct gdbarch *gdbarch = objfile->arch ();
875e5398 758 struct context_stack *newobj = nullptr;
c906108c 759 struct coff_symbol coff_symbol;
52f0bd74 760 struct coff_symbol *cs = &coff_symbol;
c906108c
SS
761 static struct internal_syment main_sym;
762 static union internal_auxent main_aux;
763 struct coff_symbol fcn_cs_saved;
764 static struct internal_syment fcn_sym_saved;
765 static union internal_auxent fcn_aux_saved;
c906108c
SS
766 /* A .file is open. */
767 int in_source_file = 0;
768 int next_file_symnum = -1;
769 /* Name of the current file. */
9f37bbcc 770 const char *filestring = "";
c906108c
SS
771 int depth = 0;
772 int fcn_first_line = 0;
b9179dbc 773 CORE_ADDR fcn_first_line_addr = 0;
c906108c
SS
774 int fcn_last_line = 0;
775 int fcn_start_addr = 0;
776 long fcn_line_ptr = 0;
777 int val;
778 CORE_ADDR tmpaddr;
05cfdb42 779 struct minimal_symbol *msym;
c906108c 780
4735f0ed
TT
781 scoped_free_pendings free_pending;
782
c906108c 783 /* Work around a stdio bug in SunOS4.1.1 (this makes me nervous....
aff410f1
MS
784 it's hard to know I've really worked around it. The fix should
785 be harmless, anyway). The symptom of the bug is that the first
c906108c
SS
786 fread (in read_one_sym), will (in my example) actually get data
787 from file offset 268, when the fseek was to 264 (and ftell shows
788 264). This causes all hell to break loose. I was unable to
789 reproduce this on a short test program which operated on the same
790 file, performing (I think) the same sequence of operations.
791
792 It stopped happening when I put in this (former) rewind().
793
794 FIXME: Find out if this has been reported to Sun, whether it has
795 been fixed in a later release, etc. */
796
797 bfd_seek (objfile->obfd, 0, 0);
798
aff410f1 799 /* Position to read the symbol table. */
a9e48095 800 val = bfd_seek (objfile->obfd, symtab_offset, 0);
c906108c 801 if (val < 0)
4262abfb 802 perror_with_name (objfile_name (objfile));
c906108c 803
dd707e8e 804 coffread_objfile = objfile;
c906108c
SS
805 nlist_bfd_global = objfile->obfd;
806 nlist_nsyms_global = nsyms;
46212e0b 807 set_last_source_file (NULL);
c906108c
SS
808 memset (opaque_type_chain, 0, sizeof opaque_type_chain);
809
aff410f1 810 if (type_vector) /* Get rid of previous one. */
b8c9b27d 811 xfree (type_vector);
fc474241 812 type_vector_length = INITIAL_TYPE_VECTOR_LENGTH;
8d749320 813 type_vector = XCNEWVEC (struct type *, type_vector_length);
c906108c 814
4d663531 815 coff_start_symtab (objfile, "");
c906108c
SS
816
817 symnum = 0;
818 while (symnum < nsyms)
819 {
820 QUIT; /* Make this command interruptable. */
821
822 read_one_sym (cs, &main_sym, &main_aux);
823
824 if (cs->c_symnum == next_file_symnum && cs->c_sclass != C_FILE)
825 {
46212e0b 826 if (get_last_source_file ())
c906108c
SS
827 coff_end_symtab (objfile);
828
4d663531 829 coff_start_symtab (objfile, "_globals_");
969107c5
EZ
830 /* coff_start_symtab will set the language of this symtab to
831 language_unknown, since such a ``file name'' is not
832 recognized. Override that with the minimal language to
833 allow printing values in this symtab. */
3c65e5b3 834 get_current_subfile ()->language = language_minimal;
c906108c 835 complete_symtab ("_globals_", 0, 0);
aff410f1
MS
836 /* Done with all files, everything from here on out is
837 globals. */
c906108c
SS
838 }
839
aff410f1
MS
840 /* Special case for file with type declarations only, no
841 text. */
46212e0b 842 if (!get_last_source_file () && SDB_TYPE (cs->c_type)
c906108c
SS
843 && cs->c_secnum == N_DEBUG)
844 complete_symtab (filestring, 0, 0);
845
846 /* Typedefs should not be treated as symbol definitions. */
847 if (ISFCN (cs->c_type) && cs->c_sclass != C_TPDEF)
848 {
aff410f1
MS
849 /* Record all functions -- external and static -- in
850 minsyms. */
fbcebcb1 851 int section = cs_to_section (cs, objfile);
c5504eaf 852
2273f0ac 853 tmpaddr = cs->c_value;
156f2366
EZ
854 /* Don't record unresolved symbols. */
855 if (!(cs->c_secnum <= 0 && cs->c_value == 0))
856 record_minimal_symbol (reader, cs, tmpaddr, mst_text,
857 section, objfile);
c906108c
SS
858
859 fcn_line_ptr = main_aux.x_sym.x_fcnary.x_fcn.x_lnnoptr;
860 fcn_start_addr = tmpaddr;
861 fcn_cs_saved = *cs;
862 fcn_sym_saved = main_sym;
863 fcn_aux_saved = main_aux;
864 continue;
865 }
866
867 switch (cs->c_sclass)
868 {
c5aa993b
JM
869 case C_EFCN:
870 case C_EXTDEF:
871 case C_ULABEL:
872 case C_USTATIC:
873 case C_LINE:
874 case C_ALIAS:
875 case C_HIDDEN:
b98664d3 876 complaint (_("Bad n_sclass for symbol %s"),
23136709 877 cs->c_name);
c5aa993b 878 break;
c906108c 879
c5aa993b 880 case C_FILE:
aff410f1
MS
881 /* c_value field contains symnum of next .file entry in
882 table or symnum of first global after last .file. */
c5aa993b
JM
883 next_file_symnum = cs->c_value;
884 if (cs->c_naux > 0)
885 filestring = coff_getfilename (&main_aux);
886 else
887 filestring = "";
888
889 /* Complete symbol table for last object file
890 containing debugging information. */
46212e0b 891 if (get_last_source_file ())
c5aa993b
JM
892 {
893 coff_end_symtab (objfile);
4d663531 894 coff_start_symtab (objfile, filestring);
c5aa993b
JM
895 }
896 in_source_file = 1;
897 break;
c906108c 898
aff410f1
MS
899 /* C_LABEL is used for labels and static functions.
900 Including it here allows gdb to see static functions when
901 no debug info is available. */
c5aa993b 902 case C_LABEL:
aff410f1
MS
903 /* However, labels within a function can make weird
904 backtraces, so filter them out (from phdm@macqel.be). */
c5aa993b
JM
905 if (within_function)
906 break;
565e0eda 907 /* Fall through. */
c5aa993b
JM
908 case C_STAT:
909 case C_THUMBLABEL:
910 case C_THUMBSTAT:
911 case C_THUMBSTATFUNC:
912 if (cs->c_name[0] == '.')
913 {
7ecb6532 914 if (strcmp (cs->c_name, ".text") == 0)
c5aa993b 915 {
aff410f1
MS
916 /* FIXME: don't wire in ".text" as section name or
917 symbol name! */
918 /* Check for in_source_file deals with case of a
919 file with debugging symbols followed by a later
920 file with no symbols. */
c906108c
SS
921 if (in_source_file)
922 complete_symtab (filestring,
6a053cb1 923 (cs->c_value
b3b3bada 924 + objfile->text_section_offset ()),
c906108c
SS
925 main_aux.x_scn.x_scnlen);
926 in_source_file = 0;
927 }
aff410f1 928 /* Flush rest of '.' symbols. */
c906108c 929 break;
c5aa993b
JM
930 }
931 else if (!SDB_TYPE (cs->c_type)
932 && cs->c_name[0] == 'L'
61012eef
GB
933 && (startswith (cs->c_name, "LI%")
934 || startswith (cs->c_name, "LF%")
935 || startswith (cs->c_name, "LC%")
936 || startswith (cs->c_name, "LP%")
937 || startswith (cs->c_name, "LPB%")
938 || startswith (cs->c_name, "LBB%")
939 || startswith (cs->c_name, "LBE%")
940 || startswith (cs->c_name, "LPBX%")))
c5aa993b
JM
941 /* At least on a 3b1, gcc generates swbeg and string labels
942 that look like this. Ignore them. */
943 break;
86a73007
TT
944 /* For static symbols that don't start with '.'... */
945 /* Fall through. */
c5aa993b
JM
946 case C_THUMBEXT:
947 case C_THUMBEXTFUNC:
948 case C_EXT:
949 {
950 /* Record it in the minimal symbols regardless of
951 SDB_TYPE. This parallels what we do for other debug
952 formats, and probably is needed to make
953 print_address_symbolic work right without the (now
954 gone) "set fast-symbolic-addr off" kludge. */
c906108c 955
c5aa993b
JM
956 enum minimal_symbol_type ms_type;
957 int sec;
2273f0ac 958 CORE_ADDR offset = 0;
c906108c 959
c5aa993b
JM
960 if (cs->c_secnum == N_UNDEF)
961 {
d4862372
JB
962 /* This is a common symbol. We used to rely on
963 the target to tell us whether it knows where
964 the symbol has been relocated to, but none of
965 the target implementations actually provided
966 that operation. So we just ignore the symbol,
967 the same way we would do if we had a target-side
968 symbol lookup which returned no match. */
969 break;
c5aa993b 970 }
24b21115
SM
971 else if (cs->c_secnum == N_ABS)
972 {
973 /* Use the correct minimal symbol type (and don't
974 relocate) for absolute values. */
975 ms_type = mst_abs;
976 sec = cs_to_section (cs, objfile);
977 tmpaddr = cs->c_value;
978 }
c5aa993b
JM
979 else
980 {
05cfdb42 981 asection *bfd_section = cs_to_bfd_section (cs, objfile);
c5504eaf 982
c5aa993b
JM
983 sec = cs_to_section (cs, objfile);
984 tmpaddr = cs->c_value;
24b21115
SM
985 /* Statics in a PE file also get relocated. */
986 if (cs->c_sclass == C_EXT
987 || cs->c_sclass == C_THUMBEXTFUNC
988 || cs->c_sclass == C_THUMBEXT
989 || (pe_file && (cs->c_sclass == C_STAT)))
6a053cb1 990 offset = objfile->section_offsets[sec];
c906108c 991
05cfdb42 992 if (bfd_section->flags & SEC_CODE)
c5aa993b 993 {
c5aa993b
JM
994 ms_type =
995 cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXTFUNC
996 || cs->c_sclass == C_THUMBEXT ?
997 mst_text : mst_file_text;
85ddcc70 998 tmpaddr = gdbarch_addr_bits_remove (gdbarch, tmpaddr);
b8fbeb18 999 }
05cfdb42
DJ
1000 else if (bfd_section->flags & SEC_ALLOC
1001 && bfd_section->flags & SEC_LOAD)
34e924c0 1002 {
c5aa993b 1003 ms_type =
aff410f1
MS
1004 cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXT
1005 ? mst_data : mst_file_data;
34e924c0 1006 }
05cfdb42 1007 else if (bfd_section->flags & SEC_ALLOC)
34e924c0 1008 {
c5aa993b 1009 ms_type =
aff410f1
MS
1010 cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXT
1011 ? mst_bss : mst_file_bss;
34e924c0
EZ
1012 }
1013 else
1014 ms_type = mst_unknown;
c5aa993b 1015 }
c906108c 1016
8dddcb8f 1017 msym = record_minimal_symbol (reader, cs, tmpaddr, ms_type,
aff410f1 1018 sec, objfile);
05cfdb42 1019 if (msym)
aff410f1
MS
1020 gdbarch_coff_make_msymbol_special (gdbarch,
1021 cs->c_sclass, msym);
fbcebcb1 1022
c5aa993b
JM
1023 if (SDB_TYPE (cs->c_type))
1024 {
1025 struct symbol *sym;
c5504eaf 1026
c5aa993b 1027 sym = process_coff_symbol
96baa820 1028 (cs, &main_aux, objfile);
2273f0ac 1029 SYMBOL_VALUE (sym) = tmpaddr + offset;
a52d653e 1030 sym->set_section_index (sec);
c5aa993b
JM
1031 }
1032 }
1033 break;
1034
1035 case C_FCN:
7ecb6532 1036 if (strcmp (cs->c_name, ".bf") == 0)
c5aa993b
JM
1037 {
1038 within_function = 1;
1039
aff410f1
MS
1040 /* Value contains address of first non-init type
1041 code. */
c5aa993b 1042 /* main_aux.x_sym.x_misc.x_lnsz.x_lnno
dda83cd7 1043 contains line number of '{' }. */
c5aa993b 1044 if (cs->c_naux != 1)
b98664d3 1045 complaint (_("`.bf' symbol %d has no aux entry"),
aff410f1 1046 cs->c_symnum);
c5aa993b
JM
1047 fcn_first_line = main_aux.x_sym.x_misc.x_lnsz.x_lnno;
1048 fcn_first_line_addr = cs->c_value;
1049
1050 /* Might want to check that locals are 0 and
dda83cd7 1051 context_stack_depth is zero, and complain if not. */
c5aa993b
JM
1052
1053 depth = 0;
fe978cb0 1054 newobj = push_context (depth, fcn_start_addr);
c5aa993b 1055 fcn_cs_saved.c_name = getsymname (&fcn_sym_saved);
fe978cb0 1056 newobj->name =
aff410f1
MS
1057 process_coff_symbol (&fcn_cs_saved,
1058 &fcn_aux_saved, objfile);
c5aa993b 1059 }
7ecb6532 1060 else if (strcmp (cs->c_name, ".ef") == 0)
c5aa993b 1061 {
b9179dbc 1062 if (!within_function)
8a3fe4f8 1063 error (_("Bad coff function information."));
aff410f1 1064 /* The value of .ef is the address of epilogue code;
dda83cd7 1065 not useful for gdb. */
c5aa993b 1066 /* { main_aux.x_sym.x_misc.x_lnsz.x_lnno
dda83cd7 1067 contains number of lines to '}' */
c5aa993b 1068
edb0470b 1069 if (outermost_context_p ())
aff410f1 1070 { /* We attempted to pop an empty context stack. */
b98664d3 1071 complaint (_("`.ef' symbol without matching `.bf' "
3e43a32a 1072 "symbol ignored starting at symnum %d"),
23136709 1073 cs->c_symnum);
c5aa993b
JM
1074 within_function = 0;
1075 break;
c906108c 1076 }
c5aa993b 1077
a60f3166 1078 struct context_stack cstk = pop_context ();
c5aa993b 1079 /* Stack must be empty now. */
edb0470b 1080 if (!outermost_context_p () || newobj == NULL)
c906108c 1081 {
b98664d3 1082 complaint (_("Unmatched .ef symbol(s) ignored "
3e43a32a 1083 "starting at symnum %d"),
23136709 1084 cs->c_symnum);
c5aa993b
JM
1085 within_function = 0;
1086 break;
c906108c 1087 }
c5aa993b
JM
1088 if (cs->c_naux != 1)
1089 {
b98664d3 1090 complaint (_("`.ef' symbol %d has no aux entry"),
aff410f1 1091 cs->c_symnum);
c5aa993b
JM
1092 fcn_last_line = 0x7FFFFFFF;
1093 }
1094 else
1095 {
1096 fcn_last_line = main_aux.x_sym.x_misc.x_lnsz.x_lnno;
1097 }
1098 /* fcn_first_line is the line number of the opening '{'.
dda83cd7
SM
1099 Do not record it - because it would affect gdb's idea
1100 of the line number of the first statement of the
1101 function - except for one-line functions, for which
1102 it is also the line number of all the statements and
1103 of the closing '}', and for which we do not have any
1104 other statement-line-number. */
c5aa993b 1105 if (fcn_last_line == 1)
3c65e5b3 1106 record_line (get_current_subfile (), fcn_first_line,
fbf65064
UW
1107 gdbarch_addr_bits_remove (gdbarch,
1108 fcn_first_line_addr));
c5aa993b 1109 else
aff410f1
MS
1110 enter_linenos (fcn_line_ptr, fcn_first_line,
1111 fcn_last_line, objfile);
c906108c 1112
c233e9c6 1113 finish_block (cstk.name, cstk.old_blocks,
a60f3166 1114 NULL, cstk.start_addr,
c5aa993b
JM
1115 fcn_cs_saved.c_value
1116 + fcn_aux_saved.x_sym.x_misc.x_fsize
b3b3bada 1117 + objfile->text_section_offset ());
c5aa993b
JM
1118 within_function = 0;
1119 }
1120 break;
c906108c 1121
c5aa993b 1122 case C_BLOCK:
7ecb6532 1123 if (strcmp (cs->c_name, ".bb") == 0)
c5aa993b
JM
1124 {
1125 tmpaddr = cs->c_value;
b3b3bada 1126 tmpaddr += objfile->text_section_offset ();
c5aa993b
JM
1127 push_context (++depth, tmpaddr);
1128 }
7ecb6532 1129 else if (strcmp (cs->c_name, ".eb") == 0)
c5aa993b 1130 {
edb0470b 1131 if (outermost_context_p ())
0963b4bd 1132 { /* We attempted to pop an empty context stack. */
b98664d3 1133 complaint (_("`.eb' symbol without matching `.bb' "
3e43a32a 1134 "symbol ignored starting at symnum %d"),
23136709 1135 cs->c_symnum);
c5aa993b
JM
1136 break;
1137 }
c906108c 1138
a60f3166
TT
1139 struct context_stack cstk = pop_context ();
1140 if (depth-- != cstk.depth)
c5aa993b 1141 {
b98664d3 1142 complaint (_("Mismatched .eb symbol ignored "
3e43a32a 1143 "starting at symnum %d"),
23136709 1144 symnum);
c5aa993b
JM
1145 break;
1146 }
e148f09d 1147 if (*get_local_symbols () && !outermost_context_p ())
c5aa993b 1148 {
b3b3bada 1149 tmpaddr = cs->c_value + objfile->text_section_offset ();
c5aa993b 1150 /* Make a block for the local symbols within. */
c233e9c6 1151 finish_block (0, cstk.old_blocks, NULL,
a60f3166 1152 cstk.start_addr, tmpaddr);
c5aa993b
JM
1153 }
1154 /* Now pop locals of block just finished. */
e148f09d 1155 *get_local_symbols () = cstk.locals;
c5aa993b
JM
1156 }
1157 break;
c906108c 1158
c5aa993b 1159 default:
96baa820 1160 process_coff_symbol (cs, &main_aux, objfile);
c5aa993b 1161 break;
c906108c
SS
1162 }
1163 }
1164
1b6bc7e0
CF
1165 if ((nsyms == 0) && (pe_file))
1166 {
c2f20dd6 1167 /* We've got no debugging symbols, but it's a portable
aff410f1 1168 executable, so try to read the export table. */
8dddcb8f 1169 read_pe_exported_syms (reader, objfile);
1b6bc7e0
CF
1170 }
1171
46212e0b 1172 if (get_last_source_file ())
c906108c
SS
1173 coff_end_symtab (objfile);
1174
1175 /* Patch up any opaque types (references to types that are not defined
1176 in the file where they are referenced, e.g. "struct foo *bar"). */
43f3e411 1177 {
b669c953 1178 for (compunit_symtab *cu : objfile->compunits ())
d5da8b3c
TT
1179 {
1180 for (symtab *s : compunit_filetabs (cu))
1181 patch_opaque_types (s);
1182 }
43f3e411 1183 }
c906108c 1184
dd707e8e 1185 coffread_objfile = NULL;
c906108c
SS
1186}
1187\f
1188/* Routines for reading headers and symbols from executable. */
1189
aff410f1
MS
1190/* Read the next symbol, swap it, and return it in both
1191 internal_syment form, and coff_symbol form. Also return its first
1192 auxent, if any, in internal_auxent form, and skip any other
1193 auxents. */
c906108c
SS
1194
1195static void
aa1ee363
AC
1196read_one_sym (struct coff_symbol *cs,
1197 struct internal_syment *sym,
1198 union internal_auxent *aux)
c906108c
SS
1199{
1200 int i;
3b016d57 1201 bfd_size_type bytes;
c906108c
SS
1202
1203 cs->c_symnum = symnum;
3b016d57
DJ
1204 bytes = bfd_bread (temp_sym, local_symesz, nlist_bfd_global);
1205 if (bytes != local_symesz)
4262abfb 1206 error (_("%s: error reading symbols"), objfile_name (coffread_objfile));
c5aa993b 1207 bfd_coff_swap_sym_in (symfile_bfd, temp_sym, (char *) sym);
c906108c
SS
1208 cs->c_naux = sym->n_numaux & 0xff;
1209 if (cs->c_naux >= 1)
1210 {
3b016d57
DJ
1211 bytes = bfd_bread (temp_aux, local_auxesz, nlist_bfd_global);
1212 if (bytes != local_auxesz)
4262abfb 1213 error (_("%s: error reading symbols"), objfile_name (coffread_objfile));
aff410f1
MS
1214 bfd_coff_swap_aux_in (symfile_bfd, temp_aux,
1215 sym->n_type, sym->n_sclass,
c5aa993b
JM
1216 0, cs->c_naux, (char *) aux);
1217 /* If more than one aux entry, read past it (only the first aux
dda83cd7 1218 is important). */
c5aa993b 1219 for (i = 1; i < cs->c_naux; i++)
3b016d57
DJ
1220 {
1221 bytes = bfd_bread (temp_aux, local_auxesz, nlist_bfd_global);
1222 if (bytes != local_auxesz)
4262abfb
JK
1223 error (_("%s: error reading symbols"),
1224 objfile_name (coffread_objfile));
3b016d57 1225 }
c906108c
SS
1226 }
1227 cs->c_name = getsymname (sym);
1228 cs->c_value = sym->n_value;
1229 cs->c_sclass = (sym->n_sclass & 0xff);
1230 cs->c_secnum = sym->n_scnum;
1231 cs->c_type = (unsigned) sym->n_type;
1232 if (!SDB_TYPE (cs->c_type))
1233 cs->c_type = 0;
1234
1235#if 0
1236 if (cs->c_sclass & 128)
3d263c1d 1237 printf (_("thumb symbol %s, class 0x%x\n"), cs->c_name, cs->c_sclass);
c906108c
SS
1238#endif
1239
1240 symnum += 1 + cs->c_naux;
1241
1242 /* The PE file format stores symbol values as offsets within the
1243 section, rather than as absolute addresses. We correct that
1244 here, if the symbol has an appropriate storage class. FIXME: We
1245 should use BFD to read the symbols, rather than duplicating the
1246 work here. */
1247 if (pe_file)
1248 {
1249 switch (cs->c_sclass)
1250 {
1251 case C_EXT:
1252 case C_THUMBEXT:
1253 case C_THUMBEXTFUNC:
1254 case C_SECTION:
1255 case C_NT_WEAK:
1256 case C_STAT:
1257 case C_THUMBSTAT:
1258 case C_THUMBSTATFUNC:
1259 case C_LABEL:
1260 case C_THUMBLABEL:
1261 case C_BLOCK:
1262 case C_FCN:
1263 case C_EFCN:
1264 if (cs->c_secnum != 0)
1265 cs->c_value += cs_section_address (cs, symfile_bfd);
1266 break;
1267 }
1268 }
1269}
1270\f
aff410f1 1271/* Support for string table handling. */
c906108c 1272
c906108c 1273static int
a9e48095 1274init_stringtab (bfd *abfd, file_ptr offset, gdb::unique_xmalloc_ptr<char> *storage)
c906108c
SS
1275{
1276 long length;
1277 int val;
1278 unsigned char lengthbuf[4];
1279
c906108c 1280 /* If the file is stripped, the offset might be zero, indicating no
aff410f1 1281 string table. Just return with `stringtab' set to null. */
c906108c
SS
1282 if (offset == 0)
1283 return 0;
1284
1285 if (bfd_seek (abfd, offset, 0) < 0)
1286 return -1;
1287
3a42e9d0 1288 val = bfd_bread ((char *) lengthbuf, sizeof lengthbuf, abfd);
c906108c 1289 length = bfd_h_get_32 (symfile_bfd, lengthbuf);
c5aa993b 1290
c906108c 1291 /* If no string table is needed, then the file may end immediately
aff410f1 1292 after the symbols. Just return with `stringtab' set to null. */
c906108c
SS
1293 if (val != sizeof lengthbuf || length < sizeof lengthbuf)
1294 return 0;
1295
e2a03548
TT
1296 storage->reset ((char *) xmalloc (length));
1297 stringtab = storage->get ();
aff410f1
MS
1298 /* This is in target format (probably not very useful, and not
1299 currently used), not host format. */
c906108c 1300 memcpy (stringtab, lengthbuf, sizeof lengthbuf);
aff410f1 1301 if (length == sizeof length) /* Empty table -- just the count. */
c906108c
SS
1302 return 0;
1303
aff410f1
MS
1304 val = bfd_bread (stringtab + sizeof lengthbuf,
1305 length - sizeof lengthbuf, abfd);
c906108c
SS
1306 if (val != length - sizeof lengthbuf || stringtab[length - 1] != '\0')
1307 return -1;
1308
1309 return 0;
1310}
1311
c906108c 1312static char *
fba45db2 1313getsymname (struct internal_syment *symbol_entry)
c906108c 1314{
c5aa993b 1315 static char buffer[SYMNMLEN + 1];
c906108c
SS
1316 char *result;
1317
1318 if (symbol_entry->_n._n_n._n_zeroes == 0)
1319 {
1320 /* FIXME: Probably should be detecting corrupt symbol files by
dda83cd7 1321 seeing whether offset points to within the stringtab. */
c906108c
SS
1322 result = stringtab + symbol_entry->_n._n_n._n_offset;
1323 }
1324 else
1325 {
1326 strncpy (buffer, symbol_entry->_n._n_name, SYMNMLEN);
1327 buffer[SYMNMLEN] = '\0';
1328 result = buffer;
1329 }
1330 return result;
1331}
1332
aff410f1
MS
1333/* Extract the file name from the aux entry of a C_FILE symbol.
1334 Return only the last component of the name. Result is in static
1335 storage and is only good for temporary use. */
c906108c 1336
9f37bbcc 1337static const char *
fba45db2 1338coff_getfilename (union internal_auxent *aux_entry)
c906108c
SS
1339{
1340 static char buffer[BUFSIZ];
9f37bbcc 1341 const char *result;
c906108c
SS
1342
1343 if (aux_entry->x_file.x_n.x_zeroes == 0)
9e91a352
MS
1344 {
1345 if (strlen (stringtab + aux_entry->x_file.x_n.x_offset) >= BUFSIZ)
1346 internal_error (__FILE__, __LINE__, _("coff file name too long"));
1347 strcpy (buffer, stringtab + aux_entry->x_file.x_n.x_offset);
1348 }
c906108c
SS
1349 else
1350 {
1351 strncpy (buffer, aux_entry->x_file.x_fname, FILNMLEN);
1352 buffer[FILNMLEN] = '\0';
1353 }
1354 result = buffer;
1355
1356 /* FIXME: We should not be throwing away the information about what
1357 directory. It should go into dirname of the symtab, or some such
1358 place. */
9f37bbcc 1359 result = lbasename (result);
c906108c
SS
1360 return (result);
1361}
1362\f
1363/* Support for line number handling. */
1364
c906108c
SS
1365/* Read in all the line numbers for fast lookups later. Leave them in
1366 external (unswapped) format in memory; we'll swap them as we enter
1367 them into GDB's data structures. */
c5aa993b 1368
c906108c 1369static int
a9e48095 1370init_lineno (bfd *abfd, file_ptr offset, file_ptr size,
e2a03548 1371 gdb::unique_xmalloc_ptr<char> *storage)
c906108c
SS
1372{
1373 int val;
1374
1375 linetab_offset = offset;
1376 linetab_size = size;
1377
c906108c
SS
1378 if (size == 0)
1379 return 0;
1380
1381 if (bfd_seek (abfd, offset, 0) < 0)
1382 return -1;
c5aa993b 1383
aff410f1 1384 /* Allocate the desired table, plus a sentinel. */
e2a03548
TT
1385 storage->reset ((char *) xmalloc (size + local_linesz));
1386 linetab = storage->get ();
c906108c 1387
e2a03548 1388 val = bfd_bread (storage->get (), size, abfd);
c906108c
SS
1389 if (val != size)
1390 return -1;
1391
aff410f1 1392 /* Terminate it with an all-zero sentinel record. */
c906108c
SS
1393 memset (linetab + size, 0, local_linesz);
1394
1395 return 0;
1396}
1397
c906108c
SS
1398#if !defined (L_LNNO32)
1399#define L_LNNO32(lp) ((lp)->l_lnno)
1400#endif
1401
1402static void
a9e48095 1403enter_linenos (file_ptr file_offset, int first_line,
aa1ee363 1404 int last_line, struct objfile *objfile)
c906108c 1405{
08feed99 1406 struct gdbarch *gdbarch = objfile->arch ();
52f0bd74 1407 char *rawptr;
c906108c
SS
1408 struct internal_lineno lptr;
1409
1410 if (!linetab)
c5aa993b 1411 return;
c906108c
SS
1412 if (file_offset < linetab_offset)
1413 {
d5d24e12
LM
1414 complaint (_("Line number pointer %s lower than start of line numbers"),
1415 plongest (file_offset));
aff410f1 1416 if (file_offset > linetab_size) /* Too big to be an offset? */
c906108c 1417 return;
aff410f1
MS
1418 file_offset += linetab_offset; /* Try reading at that linetab
1419 offset. */
c906108c 1420 }
c5aa993b 1421
c906108c
SS
1422 rawptr = &linetab[file_offset - linetab_offset];
1423
aff410f1 1424 /* Skip first line entry for each function. */
c906108c 1425 rawptr += local_linesz;
aff410f1 1426 /* Line numbers start at one for the first line of the function. */
c906108c
SS
1427 first_line--;
1428
e6a8a7d2
EZ
1429 /* If the line number table is full (e.g. 64K lines in COFF debug
1430 info), the next function's L_LNNO32 might not be zero, so don't
1431 overstep the table's end in any case. */
1432 while (rawptr <= &linetab[0] + linetab_size)
c5aa993b
JM
1433 {
1434 bfd_coff_swap_lineno_in (symfile_bfd, rawptr, &lptr);
1435 rawptr += local_linesz;
e6a8a7d2 1436 /* The next function, or the sentinel, will have L_LNNO32 zero;
aff410f1 1437 we exit. */
c5aa993b 1438 if (L_LNNO32 (&lptr) && L_LNNO32 (&lptr) <= last_line)
fbf65064
UW
1439 {
1440 CORE_ADDR addr = lptr.l_addr.l_paddr;
b3b3bada 1441 addr += objfile->text_section_offset ();
3c65e5b3 1442 record_line (get_current_subfile (),
aff410f1 1443 first_line + L_LNNO32 (&lptr),
fbf65064
UW
1444 gdbarch_addr_bits_remove (gdbarch, addr));
1445 }
c5aa993b
JM
1446 else
1447 break;
1448 }
c906108c
SS
1449}
1450\f
1451static void
fba45db2 1452patch_type (struct type *type, struct type *real_type)
c906108c 1453{
52f0bd74
AC
1454 struct type *target = TYPE_TARGET_TYPE (type);
1455 struct type *real_target = TYPE_TARGET_TYPE (real_type);
1f704f76 1456 int field_size = real_target->num_fields () * sizeof (struct field);
c906108c
SS
1457
1458 TYPE_LENGTH (target) = TYPE_LENGTH (real_target);
1f704f76 1459 target->set_num_fields (real_target->num_fields ());
c906108c 1460
3cabb6b0
SM
1461 field *fields = (struct field *) TYPE_ALLOC (target, field_size);
1462 memcpy (fields, real_target->fields (), field_size);
1463 target->set_fields (fields);
c906108c 1464
7d93a1e0 1465 if (real_target->name ())
c906108c 1466 {
0d5cff50
DE
1467 /* The previous copy of TYPE_NAME is allocated by
1468 process_coff_symbol. */
84d53fa9 1469 xfree ((char *) target->name ());
7d93a1e0 1470 target->set_name (xstrdup (real_target->name ()));
c906108c
SS
1471 }
1472}
1473
1474/* Patch up all appropriate typedef symbols in the opaque_type_chains
aff410f1
MS
1475 so that they can be used to print out opaque data structures
1476 properly. */
c906108c
SS
1477
1478static void
fba45db2 1479patch_opaque_types (struct symtab *s)
c906108c 1480{
582942f4 1481 const struct block *b;
8157b174 1482 struct block_iterator iter;
52f0bd74 1483 struct symbol *real_sym;
c5aa993b 1484
aff410f1 1485 /* Go through the per-file symbols only. */
439247b6 1486 b = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (s), STATIC_BLOCK);
de4f826b 1487 ALL_BLOCK_SYMBOLS (b, iter, real_sym)
c906108c
SS
1488 {
1489 /* Find completed typedefs to use to fix opaque ones.
dda83cd7
SM
1490 Remove syms from the chain when their types are stored,
1491 but search the whole chain, as there may be several syms
1492 from different files with the same name. */
5aafa1cc
PM
1493 if (SYMBOL_CLASS (real_sym) == LOC_TYPEDEF
1494 && SYMBOL_DOMAIN (real_sym) == VAR_DOMAIN
78134374 1495 && SYMBOL_TYPE (real_sym)->code () == TYPE_CODE_PTR
5aafa1cc 1496 && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (real_sym))) != 0)
c906108c 1497 {
987012b8 1498 const char *name = real_sym->linkage_name ();
aa1ee363
AC
1499 int hash = hashname (name);
1500 struct symbol *sym, *prev;
c5aa993b 1501
c906108c
SS
1502 prev = 0;
1503 for (sym = opaque_type_chain[hash]; sym;)
1504 {
987012b8
CB
1505 if (name[0] == sym->linkage_name ()[0]
1506 && strcmp (name + 1, sym->linkage_name () + 1) == 0)
c906108c
SS
1507 {
1508 if (prev)
1509 {
1510 SYMBOL_VALUE_CHAIN (prev) = SYMBOL_VALUE_CHAIN (sym);
1511 }
1512 else
1513 {
1514 opaque_type_chain[hash] = SYMBOL_VALUE_CHAIN (sym);
1515 }
c5aa993b 1516
c906108c 1517 patch_type (SYMBOL_TYPE (sym), SYMBOL_TYPE (real_sym));
c5aa993b 1518
c906108c
SS
1519 if (prev)
1520 {
1521 sym = SYMBOL_VALUE_CHAIN (prev);
1522 }
1523 else
1524 {
1525 sym = opaque_type_chain[hash];
1526 }
1527 }
1528 else
1529 {
1530 prev = sym;
1531 sym = SYMBOL_VALUE_CHAIN (sym);
1532 }
1533 }
1534 }
1535 }
1536}
1537\f
768a979c
UW
1538static int
1539coff_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch)
1540{
1541 return gdbarch_sdb_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym));
1542}
1543
1544static const struct symbol_register_ops coff_register_funcs = {
1545 coff_reg_to_regnum
1546};
1547
f1e6e072
TT
1548/* The "aclass" index for computed COFF symbols. */
1549
1550static int coff_register_index;
1551
c906108c 1552static struct symbol *
aa1ee363
AC
1553process_coff_symbol (struct coff_symbol *cs,
1554 union internal_auxent *aux,
fba45db2 1555 struct objfile *objfile)
c906108c 1556{
8c14c3a3 1557 struct symbol *sym = new (&objfile->objfile_obstack) symbol;
c906108c
SS
1558 char *name;
1559
c906108c
SS
1560 name = cs->c_name;
1561 name = EXTERNAL_NAME (name, objfile->obfd);
d3ecddab
CB
1562 sym->set_language (get_current_subfile ()->language,
1563 &objfile->objfile_obstack);
4d4eaa30 1564 sym->compute_and_set_names (name, true, objfile->per_bfd);
c906108c
SS
1565
1566 /* default assumptions */
1567 SYMBOL_VALUE (sym) = cs->c_value;
176620f1 1568 SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
a52d653e 1569 sym->set_section_index (cs_to_section (cs, objfile));
c906108c
SS
1570
1571 if (ISFCN (cs->c_type))
1572 {
b3b3bada 1573 SYMBOL_VALUE (sym) += objfile->text_section_offset ();
c5aa993b 1574 SYMBOL_TYPE (sym) =
aff410f1
MS
1575 lookup_function_type (decode_function_type (cs, cs->c_type,
1576 aux, objfile));
c906108c 1577
f1e6e072 1578 SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
c906108c
SS
1579 if (cs->c_sclass == C_STAT || cs->c_sclass == C_THUMBSTAT
1580 || cs->c_sclass == C_THUMBSTATFUNC)
e148f09d 1581 add_symbol_to_list (sym, get_file_symbols ());
c906108c
SS
1582 else if (cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXT
1583 || cs->c_sclass == C_THUMBEXTFUNC)
e148f09d 1584 add_symbol_to_list (sym, get_global_symbols ());
c906108c
SS
1585 }
1586 else
1587 {
5e2b427d 1588 SYMBOL_TYPE (sym) = decode_type (cs, cs->c_type, aux, objfile);
c906108c
SS
1589 switch (cs->c_sclass)
1590 {
c5aa993b
JM
1591 case C_NULL:
1592 break;
c906108c 1593
c5aa993b 1594 case C_AUTO:
f1e6e072 1595 SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL;
e148f09d 1596 add_symbol_to_list (sym, get_local_symbols ());
c5aa993b 1597 break;
c906108c 1598
c5aa993b
JM
1599 case C_THUMBEXT:
1600 case C_THUMBEXTFUNC:
1601 case C_EXT:
f1e6e072 1602 SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
38583298
TT
1603 SET_SYMBOL_VALUE_ADDRESS (sym,
1604 (CORE_ADDR) cs->c_value
6a053cb1 1605 + objfile->section_offsets[SECT_OFF_TEXT (objfile)]);
e148f09d 1606 add_symbol_to_list (sym, get_global_symbols ());
c5aa993b 1607 break;
c906108c 1608
c5aa993b
JM
1609 case C_THUMBSTAT:
1610 case C_THUMBSTATFUNC:
1611 case C_STAT:
f1e6e072 1612 SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
38583298
TT
1613 SET_SYMBOL_VALUE_ADDRESS (sym,
1614 (CORE_ADDR) cs->c_value
6a053cb1 1615 + objfile->section_offsets[SECT_OFF_TEXT (objfile)]);
c5aa993b
JM
1616 if (within_function)
1617 {
aff410f1 1618 /* Static symbol of local scope. */
e148f09d 1619 add_symbol_to_list (sym, get_local_symbols ());
c906108c 1620 }
c5aa993b
JM
1621 else
1622 {
aff410f1 1623 /* Static symbol at top level of file. */
e148f09d 1624 add_symbol_to_list (sym, get_file_symbols ());
c906108c 1625 }
c5aa993b 1626 break;
c906108c
SS
1627
1628#ifdef C_GLBLREG /* AMD coff */
c5aa993b 1629 case C_GLBLREG:
c906108c 1630#endif
c5aa993b 1631 case C_REG:
f1e6e072 1632 SYMBOL_ACLASS_INDEX (sym) = coff_register_index;
768a979c 1633 SYMBOL_VALUE (sym) = cs->c_value;
e148f09d 1634 add_symbol_to_list (sym, get_local_symbols ());
c5aa993b 1635 break;
c906108c 1636
c5aa993b
JM
1637 case C_THUMBLABEL:
1638 case C_LABEL:
1639 break;
c906108c 1640
c5aa993b 1641 case C_ARG:
f1e6e072 1642 SYMBOL_ACLASS_INDEX (sym) = LOC_ARG;
2a2d4dc3 1643 SYMBOL_IS_ARGUMENT (sym) = 1;
e148f09d 1644 add_symbol_to_list (sym, get_local_symbols ());
c5aa993b 1645 break;
c906108c 1646
c5aa993b 1647 case C_REGPARM:
f1e6e072 1648 SYMBOL_ACLASS_INDEX (sym) = coff_register_index;
2a2d4dc3 1649 SYMBOL_IS_ARGUMENT (sym) = 1;
768a979c 1650 SYMBOL_VALUE (sym) = cs->c_value;
e148f09d 1651 add_symbol_to_list (sym, get_local_symbols ());
c5aa993b 1652 break;
c906108c 1653
c5aa993b 1654 case C_TPDEF:
f1e6e072 1655 SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
176620f1 1656 SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
c5aa993b 1657
0963b4bd 1658 /* If type has no name, give it one. */
7d93a1e0 1659 if (SYMBOL_TYPE (sym)->name () == 0)
c5aa993b 1660 {
78134374
SM
1661 if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_PTR
1662 || SYMBOL_TYPE (sym)->code () == TYPE_CODE_FUNC)
c5aa993b 1663 {
aff410f1
MS
1664 /* If we are giving a name to a type such as
1665 "pointer to foo" or "function returning foo", we
1666 better not set the TYPE_NAME. If the program
1667 contains "typedef char *caddr_t;", we don't want
1668 all variables of type char * to print as caddr_t.
1669 This is not just a consequence of GDB's type
1670 management; CC and GCC (at least through version
1671 2.4) both output variables of either type char *
1672 or caddr_t with the type refering to the C_TPDEF
1673 symbol for caddr_t. If a future compiler cleans
1674 this up it GDB is not ready for it yet, but if it
1675 becomes ready we somehow need to disable this
1676 check (without breaking the PCC/GCC2.4 case).
c5aa993b
JM
1677
1678 Sigh.
1679
1680 Fortunately, this check seems not to be necessary
1681 for anything except pointers or functions. */
1682 ;
1683 }
1684 else
d0e39ea2 1685 SYMBOL_TYPE (sym)->set_name (xstrdup (sym->linkage_name ()));
c5aa993b 1686 }
c906108c 1687
aff410f1
MS
1688 /* Keep track of any type which points to empty structured
1689 type, so it can be filled from a definition from another
1690 file. A simple forward reference (TYPE_CODE_UNDEF) is
1691 not an empty structured type, though; the forward
1692 references work themselves out via the magic of
1693 coff_lookup_type. */
78134374 1694 if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_PTR
5aafa1cc 1695 && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))) == 0
78134374
SM
1696 && TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))->code ()
1697 != TYPE_CODE_UNDEF)
c5aa993b 1698 {
987012b8 1699 int i = hashname (sym->linkage_name ());
c906108c 1700
c5aa993b
JM
1701 SYMBOL_VALUE_CHAIN (sym) = opaque_type_chain[i];
1702 opaque_type_chain[i] = sym;
1703 }
e148f09d 1704 add_symbol_to_list (sym, get_file_symbols ());
c5aa993b 1705 break;
c906108c 1706
c5aa993b
JM
1707 case C_STRTAG:
1708 case C_UNTAG:
1709 case C_ENTAG:
f1e6e072 1710 SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
176620f1 1711 SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
c5aa993b
JM
1712
1713 /* Some compilers try to be helpful by inventing "fake"
1714 names for anonymous enums, structures, and unions, like
aff410f1 1715 "~0fake" or ".0fake". Thanks, but no thanks... */
7d93a1e0 1716 if (SYMBOL_TYPE (sym)->name () == 0)
987012b8
CB
1717 if (sym->linkage_name () != NULL
1718 && *sym->linkage_name () != '~'
1719 && *sym->linkage_name () != '.')
d0e39ea2 1720 SYMBOL_TYPE (sym)->set_name (xstrdup (sym->linkage_name ()));
c5aa993b 1721
e148f09d 1722 add_symbol_to_list (sym, get_file_symbols ());
c5aa993b 1723 break;
c906108c 1724
c5aa993b
JM
1725 default:
1726 break;
c906108c
SS
1727 }
1728 }
1729 return sym;
1730}
1731\f
1732/* Decode a coff type specifier; return the type that is meant. */
1733
1734static struct type *
aa1ee363 1735decode_type (struct coff_symbol *cs, unsigned int c_type,
5e2b427d 1736 union internal_auxent *aux, struct objfile *objfile)
c906108c 1737{
52f0bd74 1738 struct type *type = 0;
c906108c
SS
1739 unsigned int new_c_type;
1740
1741 if (c_type & ~N_BTMASK)
1742 {
1743 new_c_type = DECREF (c_type);
1744 if (ISPTR (c_type))
1745 {
5e2b427d 1746 type = decode_type (cs, new_c_type, aux, objfile);
c906108c
SS
1747 type = lookup_pointer_type (type);
1748 }
1749 else if (ISFCN (c_type))
1750 {
5e2b427d 1751 type = decode_type (cs, new_c_type, aux, objfile);
c906108c
SS
1752 type = lookup_function_type (type);
1753 }
1754 else if (ISARY (c_type))
1755 {
1756 int i, n;
aa1ee363 1757 unsigned short *dim;
c906108c
SS
1758 struct type *base_type, *index_type, *range_type;
1759
1760 /* Define an array type. */
aff410f1 1761 /* auxent refers to array, not base type. */
c906108c
SS
1762 if (aux->x_sym.x_tagndx.l == 0)
1763 cs->c_naux = 0;
1764
aff410f1 1765 /* Shift the indices down. */
c906108c
SS
1766 dim = &aux->x_sym.x_fcnary.x_ary.x_dimen[0];
1767 i = 1;
1768 n = dim[0];
1769 for (i = 0; *dim && i < DIMNUM - 1; i++, dim++)
1770 *dim = *(dim + 1);
1771 *dim = 0;
1772
5e2b427d 1773 base_type = decode_type (cs, new_c_type, aux, objfile);
46bf5051 1774 index_type = objfile_type (objfile)->builtin_int;
0c9c3474 1775 range_type
cafb3438 1776 = create_static_range_type (NULL, index_type, 0, n - 1);
c906108c 1777 type =
cafb3438 1778 create_array_type (NULL, base_type, range_type);
c906108c
SS
1779 }
1780 return type;
1781 }
1782
aff410f1
MS
1783 /* Reference to existing type. This only occurs with the struct,
1784 union, and enum types. EPI a29k coff fakes us out by producing
1785 aux entries with a nonzero x_tagndx for definitions of structs,
1786 unions, and enums, so we have to check the c_sclass field. SCO
1787 3.2v4 cc gets confused with pointers to pointers to defined
1788 structs, and generates negative x_tagndx fields. */
c906108c
SS
1789 if (cs->c_naux > 0 && aux->x_sym.x_tagndx.l != 0)
1790 {
1791 if (cs->c_sclass != C_STRTAG
1792 && cs->c_sclass != C_UNTAG
1793 && cs->c_sclass != C_ENTAG
1794 && aux->x_sym.x_tagndx.l >= 0)
1795 {
1796 type = coff_alloc_type (aux->x_sym.x_tagndx.l);
1797 return type;
1798 }
1799 else
1800 {
b98664d3 1801 complaint (_("Symbol table entry for %s has bad tagndx value"),
23136709 1802 cs->c_name);
aff410f1 1803 /* And fall through to decode_base_type... */
c906108c
SS
1804 }
1805 }
1806
5e2b427d 1807 return decode_base_type (cs, BTYPE (c_type), aux, objfile);
c906108c
SS
1808}
1809
1810/* Decode a coff type specifier for function definition;
1811 return the type that the function returns. */
1812
1813static struct type *
aff410f1
MS
1814decode_function_type (struct coff_symbol *cs,
1815 unsigned int c_type,
1816 union internal_auxent *aux,
1817 struct objfile *objfile)
c906108c
SS
1818{
1819 if (aux->x_sym.x_tagndx.l == 0)
aff410f1
MS
1820 cs->c_naux = 0; /* auxent refers to function, not base
1821 type. */
c906108c 1822
5e2b427d 1823 return decode_type (cs, DECREF (c_type), aux, objfile);
c906108c
SS
1824}
1825\f
aff410f1 1826/* Basic C types. */
c906108c
SS
1827
1828static struct type *
aff410f1
MS
1829decode_base_type (struct coff_symbol *cs,
1830 unsigned int c_type,
1831 union internal_auxent *aux,
1832 struct objfile *objfile)
c906108c 1833{
08feed99 1834 struct gdbarch *gdbarch = objfile->arch ();
c906108c
SS
1835 struct type *type;
1836
1837 switch (c_type)
1838 {
c5aa993b 1839 case T_NULL:
aff410f1 1840 /* Shows up with "void (*foo)();" structure members. */
46bf5051 1841 return objfile_type (objfile)->builtin_void;
c906108c 1842
c906108c 1843#ifdef T_VOID
c5aa993b
JM
1844 case T_VOID:
1845 /* Intel 960 COFF has this symbol and meaning. */
46bf5051 1846 return objfile_type (objfile)->builtin_void;
c906108c
SS
1847#endif
1848
c5aa993b 1849 case T_CHAR:
46bf5051 1850 return objfile_type (objfile)->builtin_char;
c906108c 1851
c5aa993b 1852 case T_SHORT:
46bf5051 1853 return objfile_type (objfile)->builtin_short;
c906108c 1854
c5aa993b 1855 case T_INT:
46bf5051 1856 return objfile_type (objfile)->builtin_int;
c906108c 1857
c5aa993b
JM
1858 case T_LONG:
1859 if (cs->c_sclass == C_FIELD
9a76efb6 1860 && aux->x_sym.x_misc.x_lnsz.x_size
5e2b427d 1861 > gdbarch_long_bit (gdbarch))
46bf5051 1862 return objfile_type (objfile)->builtin_long_long;
c5aa993b 1863 else
46bf5051 1864 return objfile_type (objfile)->builtin_long;
c906108c 1865
c5aa993b 1866 case T_FLOAT:
46bf5051 1867 return objfile_type (objfile)->builtin_float;
c906108c 1868
c5aa993b 1869 case T_DOUBLE:
46bf5051 1870 return objfile_type (objfile)->builtin_double;
c906108c 1871
c5aa993b 1872 case T_LNGDBL:
46bf5051 1873 return objfile_type (objfile)->builtin_long_double;
c906108c 1874
c5aa993b
JM
1875 case T_STRUCT:
1876 if (cs->c_naux != 1)
1877 {
aff410f1 1878 /* Anonymous structure type. */
c5aa993b 1879 type = coff_alloc_type (cs->c_symnum);
67607e24 1880 type->set_code (TYPE_CODE_STRUCT);
d0e39ea2 1881 type->set_name (NULL);
c5aa993b
JM
1882 INIT_CPLUS_SPECIFIC (type);
1883 TYPE_LENGTH (type) = 0;
3cabb6b0 1884 type->set_fields (nullptr);
5e33d5f4 1885 type->set_num_fields (0);
c5aa993b
JM
1886 }
1887 else
1888 {
1889 type = coff_read_struct_type (cs->c_symnum,
1890 aux->x_sym.x_misc.x_lnsz.x_size,
5e2b427d
UW
1891 aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
1892 objfile);
c5aa993b
JM
1893 }
1894 return type;
c906108c 1895
c5aa993b
JM
1896 case T_UNION:
1897 if (cs->c_naux != 1)
1898 {
aff410f1 1899 /* Anonymous union type. */
c5aa993b 1900 type = coff_alloc_type (cs->c_symnum);
d0e39ea2 1901 type->set_name (NULL);
c5aa993b
JM
1902 INIT_CPLUS_SPECIFIC (type);
1903 TYPE_LENGTH (type) = 0;
3cabb6b0 1904 type->set_fields (nullptr);
5e33d5f4 1905 type->set_num_fields (0);
c5aa993b
JM
1906 }
1907 else
1908 {
1909 type = coff_read_struct_type (cs->c_symnum,
c906108c 1910 aux->x_sym.x_misc.x_lnsz.x_size,
5e2b427d
UW
1911 aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
1912 objfile);
c5aa993b 1913 }
67607e24 1914 type->set_code (TYPE_CODE_UNION);
c5aa993b 1915 return type;
c906108c 1916
c5aa993b
JM
1917 case T_ENUM:
1918 if (cs->c_naux != 1)
1919 {
aff410f1 1920 /* Anonymous enum type. */
c5aa993b 1921 type = coff_alloc_type (cs->c_symnum);
67607e24 1922 type->set_code (TYPE_CODE_ENUM);
d0e39ea2 1923 type->set_name (NULL);
c5aa993b 1924 TYPE_LENGTH (type) = 0;
3cabb6b0 1925 type->set_fields (nullptr);
5e33d5f4 1926 type->set_num_fields (0);
c5aa993b
JM
1927 }
1928 else
1929 {
1930 type = coff_read_enum_type (cs->c_symnum,
1931 aux->x_sym.x_misc.x_lnsz.x_size,
5e2b427d
UW
1932 aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
1933 objfile);
c5aa993b
JM
1934 }
1935 return type;
1936
1937 case T_MOE:
aff410f1 1938 /* Shouldn't show up here. */
c5aa993b 1939 break;
c906108c 1940
c5aa993b 1941 case T_UCHAR:
46bf5051 1942 return objfile_type (objfile)->builtin_unsigned_char;
c906108c 1943
c5aa993b 1944 case T_USHORT:
46bf5051 1945 return objfile_type (objfile)->builtin_unsigned_short;
c906108c 1946
c5aa993b 1947 case T_UINT:
46bf5051 1948 return objfile_type (objfile)->builtin_unsigned_int;
c906108c 1949
c5aa993b
JM
1950 case T_ULONG:
1951 if (cs->c_sclass == C_FIELD
9a76efb6 1952 && aux->x_sym.x_misc.x_lnsz.x_size
5e2b427d 1953 > gdbarch_long_bit (gdbarch))
46bf5051 1954 return objfile_type (objfile)->builtin_unsigned_long_long;
c5aa993b 1955 else
46bf5051 1956 return objfile_type (objfile)->builtin_unsigned_long;
c906108c 1957 }
b98664d3 1958 complaint (_("Unexpected type for symbol %s"), cs->c_name);
46bf5051 1959 return objfile_type (objfile)->builtin_void;
c906108c
SS
1960}
1961\f
1962/* This page contains subroutines of read_type. */
1963
1964/* Read the description of a structure (or union type) and return an
1965 object describing the type. */
1966
1967static struct type *
5e2b427d
UW
1968coff_read_struct_type (int index, int length, int lastsym,
1969 struct objfile *objfile)
c906108c
SS
1970{
1971 struct nextfield
1972 {
1973 struct nextfield *next;
1974 struct field field;
1975 };
1976
52f0bd74
AC
1977 struct type *type;
1978 struct nextfield *list = 0;
fe978cb0 1979 struct nextfield *newobj;
c906108c 1980 int nfields = 0;
52f0bd74 1981 int n;
c906108c
SS
1982 char *name;
1983 struct coff_symbol member_sym;
52f0bd74 1984 struct coff_symbol *ms = &member_sym;
c906108c
SS
1985 struct internal_syment sub_sym;
1986 union internal_auxent sub_aux;
1987 int done = 0;
1988
1989 type = coff_alloc_type (index);
67607e24 1990 type->set_code (TYPE_CODE_STRUCT);
c5aa993b 1991 INIT_CPLUS_SPECIFIC (type);
c906108c
SS
1992 TYPE_LENGTH (type) = length;
1993
1994 while (!done && symnum < lastsym && symnum < nlist_nsyms_global)
1995 {
1996 read_one_sym (ms, &sub_sym, &sub_aux);
1997 name = ms->c_name;
5e2b427d 1998 name = EXTERNAL_NAME (name, objfile->obfd);
c906108c
SS
1999
2000 switch (ms->c_sclass)
2001 {
c5aa993b
JM
2002 case C_MOS:
2003 case C_MOU:
2004
2005 /* Get space to record the next field's data. */
8d749320 2006 newobj = XALLOCA (struct nextfield);
fe978cb0
PA
2007 newobj->next = list;
2008 list = newobj;
c5aa993b
JM
2009
2010 /* Save the data. */
021887d8 2011 list->field.name = obstack_strdup (&objfile->objfile_obstack, name);
5d14b6e5
SM
2012 list->field.set_type (decode_type (ms, ms->c_type, &sub_aux,
2013 objfile));
d6a843b5 2014 SET_FIELD_BITPOS (list->field, 8 * ms->c_value);
c5aa993b
JM
2015 FIELD_BITSIZE (list->field) = 0;
2016 nfields++;
2017 break;
c906108c 2018
c5aa993b
JM
2019 case C_FIELD:
2020
2021 /* Get space to record the next field's data. */
8d749320 2022 newobj = XALLOCA (struct nextfield);
fe978cb0
PA
2023 newobj->next = list;
2024 list = newobj;
c5aa993b
JM
2025
2026 /* Save the data. */
021887d8 2027 list->field.name = obstack_strdup (&objfile->objfile_obstack, name);
5d14b6e5
SM
2028 list->field.set_type (decode_type (ms, ms->c_type, &sub_aux,
2029 objfile));
d6a843b5 2030 SET_FIELD_BITPOS (list->field, ms->c_value);
c5aa993b
JM
2031 FIELD_BITSIZE (list->field) = sub_aux.x_sym.x_misc.x_lnsz.x_size;
2032 nfields++;
2033 break;
c906108c 2034
c5aa993b
JM
2035 case C_EOS:
2036 done = 1;
2037 break;
c906108c
SS
2038 }
2039 }
2040 /* Now create the vector of fields, and record how big it is. */
2041
5e33d5f4 2042 type->set_num_fields (nfields);
3cabb6b0
SM
2043 type->set_fields
2044 ((struct field *) TYPE_ALLOC (type, sizeof (struct field) * nfields));
c906108c
SS
2045
2046 /* Copy the saved-up fields into the field vector. */
2047
2048 for (n = nfields; list; list = list->next)
ceacbf6e 2049 type->field (--n) = list->field;
c906108c
SS
2050
2051 return type;
2052}
2053\f
2054/* Read a definition of an enumeration type,
2055 and create and return a suitable type object.
2056 Also defines the symbols that represent the values of the type. */
2057
c906108c 2058static struct type *
5e2b427d
UW
2059coff_read_enum_type (int index, int length, int lastsym,
2060 struct objfile *objfile)
c906108c 2061{
08feed99 2062 struct gdbarch *gdbarch = objfile->arch ();
52f0bd74
AC
2063 struct symbol *sym;
2064 struct type *type;
c906108c
SS
2065 int nsyms = 0;
2066 int done = 0;
2067 struct pending **symlist;
2068 struct coff_symbol member_sym;
52f0bd74 2069 struct coff_symbol *ms = &member_sym;
c906108c
SS
2070 struct internal_syment sub_sym;
2071 union internal_auxent sub_aux;
2072 struct pending *osyms, *syms;
2073 int o_nsyms;
52f0bd74 2074 int n;
c906108c
SS
2075 char *name;
2076 int unsigned_enum = 1;
2077
2078 type = coff_alloc_type (index);
2079 if (within_function)
e148f09d 2080 symlist = get_local_symbols ();
c906108c 2081 else
e148f09d 2082 symlist = get_file_symbols ();
c906108c
SS
2083 osyms = *symlist;
2084 o_nsyms = osyms ? osyms->nsyms : 0;
2085
2086 while (!done && symnum < lastsym && symnum < nlist_nsyms_global)
2087 {
2088 read_one_sym (ms, &sub_sym, &sub_aux);
2089 name = ms->c_name;
5e2b427d 2090 name = EXTERNAL_NAME (name, objfile->obfd);
c906108c
SS
2091
2092 switch (ms->c_sclass)
2093 {
c5aa993b 2094 case C_MOE:
8c14c3a3 2095 sym = new (&objfile->objfile_obstack) symbol;
c5aa993b 2096
021887d8 2097 name = obstack_strdup (&objfile->objfile_obstack, name);
43678b0a 2098 sym->set_linkage_name (name);
f1e6e072 2099 SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
176620f1 2100 SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
c5aa993b
JM
2101 SYMBOL_VALUE (sym) = ms->c_value;
2102 add_symbol_to_list (sym, symlist);
2103 nsyms++;
2104 break;
c906108c 2105
c5aa993b
JM
2106 case C_EOS:
2107 /* Sometimes the linker (on 386/ix 2.0.2 at least) screws
2108 up the count of how many symbols to read. So stop
2109 on .eos. */
2110 done = 1;
2111 break;
c906108c
SS
2112 }
2113 }
2114
2115 /* Now fill in the fields of the type-structure. */
2116
2117 if (length > 0)
2118 TYPE_LENGTH (type) = length;
9a76efb6 2119 else /* Assume ints. */
5e2b427d 2120 TYPE_LENGTH (type) = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
67607e24 2121 type->set_code (TYPE_CODE_ENUM);
5e33d5f4 2122 type->set_num_fields (nsyms);
3cabb6b0
SM
2123 type->set_fields
2124 ((struct field *) TYPE_ALLOC (type, sizeof (struct field) * nsyms));
c906108c
SS
2125
2126 /* Find the symbols for the values and put them into the type.
2127 The symbols can be found in the symlist that we put them on
2128 to cause them to be defined. osyms contains the old value
2129 of that symlist; everything up to there was defined by us. */
2130 /* Note that we preserve the order of the enum constants, so
2131 that in something like "enum {FOO, LAST_THING=FOO}" we print
2132 FOO, not LAST_THING. */
2133
2134 for (syms = *symlist, n = 0; syms; syms = syms->next)
2135 {
2136 int j = 0;
2137
2138 if (syms == osyms)
2139 j = o_nsyms;
c5aa993b 2140 for (; j < syms->nsyms; j++, n++)
c906108c
SS
2141 {
2142 struct symbol *xsym = syms->symbol[j];
c5504eaf 2143
c906108c 2144 SYMBOL_TYPE (xsym) = type;
987012b8 2145 TYPE_FIELD_NAME (type, n) = xsym->linkage_name ();
ceacbf6e 2146 SET_FIELD_ENUMVAL (type->field (n), SYMBOL_VALUE (xsym));
c906108c
SS
2147 if (SYMBOL_VALUE (xsym) < 0)
2148 unsigned_enum = 0;
2149 TYPE_FIELD_BITSIZE (type, n) = 0;
2150 }
2151 if (syms == osyms)
2152 break;
2153 }
2154
2155 if (unsigned_enum)
653223d3 2156 type->set_is_unsigned (true);
c906108c
SS
2157
2158 return type;
2159}
2160
aff410f1 2161/* Register our ability to parse symbols for coff BFD files. */
c906108c 2162
00b5771c 2163static const struct sym_fns coff_sym_fns =
c906108c 2164{
aff410f1
MS
2165 coff_new_init, /* sym_new_init: init anything gbl to
2166 entire symtab */
2167 coff_symfile_init, /* sym_init: read initial info, setup
2168 for sym_read() */
2169 coff_symfile_read, /* sym_read: read a symbol file into
2170 symtab */
2171 coff_symfile_finish, /* sym_finish: finished with file,
2172 cleanup */
2173 default_symfile_offsets, /* sym_offsets: xlate external to
2174 internal form */
2175 default_symfile_segments, /* sym_segments: Get segment
2176 information from a file */
c295b2e5 2177 NULL, /* sym_read_linetable */
aff410f1
MS
2178
2179 default_symfile_relocate, /* sym_relocate: Relocate a debug
2180 section. */
55aa24fb 2181 NULL, /* sym_probe_fns */
c906108c
SS
2182};
2183
6c265988 2184void _initialize_coffread ();
c906108c 2185void
6c265988 2186_initialize_coffread ()
c906108c 2187{
c256e171 2188 add_symtab_fns (bfd_target_coff_flavour, &coff_sym_fns);
b8b98ad1 2189
f1e6e072
TT
2190 coff_register_index
2191 = register_symbol_register_impl (LOC_REGISTER, &coff_register_funcs);
c906108c 2192}
This page took 1.609359 seconds and 4 git commands to generate.