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