windows-nat: Don't change current_event.dwThreadId in handle_output_debug_string()
[deliverable/binutils-gdb.git] / gdb / coffread.c
CommitLineData
c906108c 1/* Read coff symbol tables and convert to internal format, for GDB.
32d0add0 2 Copyright (C) 1987-2015 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
TT
43#include "psymtab.h"
44
a14ed312 45extern void _initialize_coffread (void);
392a587b 46
b8b98ad1
TT
47/* Key for COFF-associated data. */
48
49static const struct objfile_data *coff_objfile_data_key;
50
91a81f69
TT
51/* The objfile we are currently reading. */
52
dd707e8e 53static struct objfile *coffread_objfile;
91a81f69 54
c5aa993b
JM
55struct coff_symfile_info
56 {
aff410f1
MS
57 file_ptr min_lineno_offset; /* Where in file lowest line#s are. */
58 file_ptr max_lineno_offset; /* 1+last byte of line#s in file. */
c906108c 59
aff410f1
MS
60 CORE_ADDR textaddr; /* Addr of .text section. */
61 unsigned int textsize; /* Size of .text section. */
c5aa993b 62 struct stab_section_list *stabsects; /* .stab sections. */
aff410f1 63 asection *stabstrsect; /* Section pointer for .stab section. */
c5aa993b
JM
64 char *stabstrdata;
65 };
c906108c
SS
66
67/* Translate an external name string into a user-visible name. */
68#define EXTERNAL_NAME(string, abfd) \
aff410f1
MS
69 (string[0] == bfd_get_symbol_leading_char (abfd) \
70 ? string + 1 : string)
c906108c
SS
71
72/* To be an sdb debug type, type must have at least a basic or primary
73 derived type. Using this rather than checking against T_NULL is
74 said to prevent core dumps if we try to operate on Michael Bloom
75 dbx-in-coff file. */
76
77#define SDB_TYPE(type) (BTYPE(type) | (type & N_TMASK))
78
c906108c
SS
79/* Core address of start and end of text of current source file.
80 This comes from a ".text" symbol where x_nlinno > 0. */
81
82static CORE_ADDR current_source_start_addr;
83static CORE_ADDR current_source_end_addr;
84
85/* The addresses of the symbol table stream and number of symbols
86 of the object file we are reading (as copied into core). */
87
88static bfd *nlist_bfd_global;
89static int nlist_nsyms_global;
90
c906108c 91
aff410f1
MS
92/* Pointers to scratch storage, used for reading raw symbols and
93 auxents. */
c906108c
SS
94
95static char *temp_sym;
96static char *temp_aux;
97
98/* Local variables that hold the shift and mask values for the
99 COFF file that we are currently reading. These come back to us
100 from BFD, and are referenced by their macro names, as well as
101 internally to the BTYPE, ISPTR, ISFCN, ISARY, ISTAG, and DECREF
102 macros from include/coff/internal.h . */
103
c5aa993b
JM
104static unsigned local_n_btmask;
105static unsigned local_n_btshft;
106static unsigned local_n_tmask;
107static unsigned local_n_tshift;
c906108c
SS
108
109#define N_BTMASK local_n_btmask
110#define N_BTSHFT local_n_btshft
111#define N_TMASK local_n_tmask
112#define N_TSHIFT local_n_tshift
c5aa993b 113
aff410f1
MS
114/* Local variables that hold the sizes in the file of various COFF
115 structures. (We only need to know this to read them from the file
116 -- BFD will then translate the data in them, into `internal_xxx'
117 structs in the right byte order, alignment, etc.) */
c906108c 118
c5aa993b
JM
119static unsigned local_linesz;
120static unsigned local_symesz;
121static unsigned local_auxesz;
c906108c
SS
122
123/* This is set if this is a PE format file. */
124
125static int pe_file;
126
127/* Chain of typedefs of pointers to empty struct/union types.
128 They are chained thru the SYMBOL_VALUE_CHAIN. */
129
130static struct symbol *opaque_type_chain[HASHSIZE];
131
aff410f1 132/* Simplified internal version of coff symbol table information. */
c906108c 133
c5aa993b
JM
134struct coff_symbol
135 {
136 char *c_name;
aff410f1
MS
137 int c_symnum; /* Symbol number of this entry. */
138 int c_naux; /* 0 if syment only, 1 if syment +
139 auxent, etc. */
5e8db398 140 CORE_ADDR c_value;
c5aa993b
JM
141 int c_sclass;
142 int c_secnum;
143 unsigned int c_type;
144 };
c906108c 145
fc474241
DE
146/* Vector of types defined so far, indexed by their type numbers. */
147
148static struct type **type_vector;
149
150/* Number of elements allocated for type_vector currently. */
151
152static int type_vector_length;
153
154/* Initial size of type vector. Is realloc'd larger if needed, and
155 realloc'd down to the size actually used, when completed. */
156
157#define INITIAL_TYPE_VECTOR_LENGTH 160
158
a14ed312 159extern void stabsread_clear_cache (void);
7be570e7 160
5e2b427d
UW
161static struct type *coff_read_struct_type (int, int, int,
162 struct objfile *);
c906108c 163
a14ed312 164static struct type *decode_base_type (struct coff_symbol *,
aff410f1
MS
165 unsigned int,
166 union internal_auxent *,
5e2b427d 167 struct objfile *);
c906108c 168
a14ed312 169static struct type *decode_type (struct coff_symbol *, unsigned int,
5e2b427d
UW
170 union internal_auxent *,
171 struct objfile *);
c906108c 172
a14ed312
KB
173static struct type *decode_function_type (struct coff_symbol *,
174 unsigned int,
5e2b427d
UW
175 union internal_auxent *,
176 struct objfile *);
c906108c 177
5e2b427d
UW
178static struct type *coff_read_enum_type (int, int, int,
179 struct objfile *);
c906108c 180
a14ed312
KB
181static struct symbol *process_coff_symbol (struct coff_symbol *,
182 union internal_auxent *,
183 struct objfile *);
c906108c 184
a14ed312 185static void patch_opaque_types (struct symtab *);
c906108c 186
a14ed312 187static void enter_linenos (long, int, int, struct objfile *);
c906108c 188
a14ed312 189static void free_linetab (void);
c906108c 190
74b7792f
AC
191static void free_linetab_cleanup (void *ignore);
192
a14ed312 193static int init_lineno (bfd *, long, int);
c906108c 194
a14ed312 195static char *getsymname (struct internal_syment *);
c906108c 196
9f37bbcc 197static const char *coff_getfilename (union internal_auxent *);
c906108c 198
a14ed312 199static void free_stringtab (void);
c906108c 200
74b7792f
AC
201static void free_stringtab_cleanup (void *ignore);
202
a14ed312 203static int init_stringtab (bfd *, long);
c906108c 204
a14ed312 205static void read_one_sym (struct coff_symbol *,
aff410f1
MS
206 struct internal_syment *,
207 union internal_auxent *);
c906108c 208
a14ed312 209static void coff_symtab_read (long, unsigned int, struct objfile *);
c906108c
SS
210\f
211/* We are called once per section from coff_symfile_read. We
212 need to examine each section we are passed, check to see
213 if it is something we are interested in processing, and
214 if so, stash away some access information for the section.
215
216 FIXME: The section names should not be hardwired strings (what
217 should they be? I don't think most object file formats have enough
218 section flags to specify what kind of debug section it is
219 -kingdon). */
220
221static void
12b9c64f 222coff_locate_sections (bfd *abfd, asection *sectp, void *csip)
c906108c 223{
52f0bd74 224 struct coff_symfile_info *csi;
c906108c
SS
225 const char *name;
226
227 csi = (struct coff_symfile_info *) csip;
228 name = bfd_get_section_name (abfd, sectp);
7ecb6532 229 if (strcmp (name, ".text") == 0)
c906108c
SS
230 {
231 csi->textaddr = bfd_section_vma (abfd, sectp);
232 csi->textsize += bfd_section_size (abfd, sectp);
233 }
61012eef 234 else if (startswith (name, ".text"))
c906108c
SS
235 {
236 csi->textsize += bfd_section_size (abfd, sectp);
237 }
7ecb6532 238 else if (strcmp (name, ".stabstr") == 0)
c906108c
SS
239 {
240 csi->stabstrsect = sectp;
241 }
61012eef 242 else if (startswith (name, ".stab"))
c906108c
SS
243 {
244 const char *s;
245
246 /* We can have multiple .stab sections if linked with
247 --split-by-reloc. */
248 for (s = name + sizeof ".stab" - 1; *s != '\0'; s++)
c5aa993b 249 if (!isdigit (*s))
c906108c
SS
250 break;
251 if (*s == '\0')
252 {
253 struct stab_section_list *n, **pn;
254
255 n = ((struct stab_section_list *)
256 xmalloc (sizeof (struct stab_section_list)));
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;
564 struct dbx_symfile_info *dbxinfo;
565 bfd *abfd = objfile->obfd;
566 coff_data_type *cdata = coff_data (abfd);
567 char *name = bfd_get_filename (abfd);
52f0bd74 568 int val;
745b8ca0 569 unsigned int num_symbols;
c906108c
SS
570 int symtab_offset;
571 int stringtab_offset;
7134143f 572 struct cleanup *back_to, *cleanup_minimal_symbols;
c906108c 573 int stabstrsize;
c2d11a7d 574
b8b98ad1 575 info = objfile_data (objfile, coff_objfile_data_key);
d2f4b8fe 576 dbxinfo = DBX_SYMFILE_INFO (objfile);
aff410f1 577 symfile_bfd = abfd; /* Kludge for swap routines. */
c906108c
SS
578
579/* WARNING WILL ROBINSON! ACCESSING BFD-PRIVATE DATA HERE! FIXME! */
c5aa993b
JM
580 num_symbols = bfd_get_symcount (abfd); /* How many syms */
581 symtab_offset = cdata->sym_filepos; /* Symbol table file offset */
582 stringtab_offset = symtab_offset + /* String table file offset */
583 num_symbols * cdata->local_symesz;
c906108c
SS
584
585 /* Set a few file-statics that give us specific information about
586 the particular COFF file format we're reading. */
c906108c
SS
587 local_n_btmask = cdata->local_n_btmask;
588 local_n_btshft = cdata->local_n_btshft;
c5aa993b 589 local_n_tmask = cdata->local_n_tmask;
c906108c 590 local_n_tshift = cdata->local_n_tshift;
c5aa993b
JM
591 local_linesz = cdata->local_linesz;
592 local_symesz = cdata->local_symesz;
593 local_auxesz = cdata->local_auxesz;
c906108c
SS
594
595 /* Allocate space for raw symbol and aux entries, based on their
596 space requirements as reported by BFD. */
597 temp_sym = (char *) xmalloc
c5aa993b 598 (cdata->local_symesz + cdata->local_auxesz);
c906108c 599 temp_aux = temp_sym + cdata->local_symesz;
c13c43fd 600 back_to = make_cleanup (free_current_contents, &temp_sym);
c906108c
SS
601
602 /* We need to know whether this is a PE file, because in PE files,
603 unlike standard COFF files, symbol values are stored as offsets
604 from the section address, rather than as absolute addresses.
605 FIXME: We should use BFD to read the symbol table, and thus avoid
606 this problem. */
0d06e24b 607 pe_file =
61012eef
GB
608 startswith (bfd_get_target (objfile->obfd), "pe")
609 || startswith (bfd_get_target (objfile->obfd), "epoc-pe");
c906108c 610
aff410f1 611 /* End of warning. */
c906108c 612
c906108c
SS
613 info->min_lineno_offset = 0;
614 info->max_lineno_offset = 0;
c906108c 615
ebeb39fe
JB
616 /* Only read line number information if we have symbols.
617
618 On Windows NT, some of the system's DLL's have sections with
619 PointerToLinenumbers fields that are non-zero, but point at
620 random places within the image file. (In the case I found,
621 KERNEL32.DLL's .text section has a line number info pointer that
622 points into the middle of the string `lib\\i386\kernel32.dll'.)
623
624 However, these DLL's also have no symbols. The line number
625 tables are meaningless without symbols. And in fact, GDB never
626 uses the line number information unless there are symbols. So we
627 can avoid spurious error messages (and maybe run a little
628 faster!) by not even reading the line number table unless we have
629 symbols. */
630 if (num_symbols > 0)
631 {
632 /* Read the line number table, all at once. */
633 bfd_map_over_sections (abfd, find_linenos, (void *) info);
634
635 make_cleanup (free_linetab_cleanup, 0 /*ignore*/);
636 val = init_lineno (abfd, info->min_lineno_offset,
637 info->max_lineno_offset - info->min_lineno_offset);
638 if (val < 0)
8a3fe4f8 639 error (_("\"%s\": error reading line numbers."), name);
ebeb39fe 640 }
c906108c
SS
641
642 /* Now read the string table, all at once. */
643
74b7792f 644 make_cleanup (free_stringtab_cleanup, 0 /*ignore*/);
c906108c
SS
645 val = init_stringtab (abfd, stringtab_offset);
646 if (val < 0)
3d263c1d 647 error (_("\"%s\": can't get string table"), name);
c906108c
SS
648
649 init_minimal_symbol_collection ();
7134143f 650 cleanup_minimal_symbols = make_cleanup_discard_minimal_symbols ();
c906108c
SS
651
652 /* Now that the executable file is positioned at symbol table,
653 process it and define symbols accordingly. */
654
96baa820 655 coff_symtab_read ((long) symtab_offset, num_symbols, objfile);
c906108c 656
aff410f1
MS
657 /* Install any minimal symbols that have been collected as the
658 current minimal symbols for this objfile. */
c906108c
SS
659
660 install_minimal_symbols (objfile);
661
303c5ee1
YQ
662 if (pe_file)
663 {
664 struct minimal_symbol *msym;
665
666 ALL_OBJFILE_MSYMBOLS (objfile, msym)
667 {
efd66ac6 668 const char *name = MSYMBOL_LINKAGE_NAME (msym);
303c5ee1
YQ
669
670 /* If the minimal symbols whose name are prefixed by "__imp_"
671 or "_imp_", get rid of the prefix, and search the minimal
672 symbol in OBJFILE. Note that 'maintenance print msymbols'
673 shows that type of these "_imp_XXXX" symbols is mst_data. */
20d35291 674 if (MSYMBOL_TYPE (msym) == mst_data)
303c5ee1 675 {
20d35291
PA
676 const char *name1 = NULL;
677
678 if (startswith (name, "_imp_"))
679 name1 = name + 5;
680 else if (startswith (name, "__imp_"))
681 name1 = name + 6;
682 if (name1 != NULL)
683 {
684 int lead = bfd_get_symbol_leading_char (objfile->obfd);
685 struct bound_minimal_symbol found;
686
687 if (lead != '\0' && *name1 == lead)
688 name1 += 1;
689
690 found = lookup_minimal_symbol (name1, NULL, objfile);
691
692 /* If found, there are symbols named "_imp_foo" and "foo"
693 respectively in OBJFILE. Set the type of symbol "foo"
694 as 'mst_solib_trampoline'. */
695 if (found.minsym != NULL
696 && MSYMBOL_TYPE (found.minsym) == mst_text)
697 MSYMBOL_TYPE (found.minsym) = mst_solib_trampoline;
698 }
303c5ee1
YQ
699 }
700 }
701 }
702
7134143f
DJ
703 /* Free the installed minimal symbol data. */
704 do_cleanups (cleanup_minimal_symbols);
705
12b9c64f 706 bfd_map_over_sections (abfd, coff_locate_sections, (void *) info);
c906108c
SS
707
708 if (info->stabsects)
709 {
c5aa993b 710 if (!info->stabstrsect)
b83266a0 711 {
3e43a32a
MS
712 error (_("The debugging information in `%s' is corrupted.\nThe "
713 "file has a `.stabs' section, but no `.stabstr' section."),
255e7dbf 714 name);
b83266a0
SS
715 }
716
c906108c 717 /* FIXME: dubious. Why can't we use something normal like
c5aa993b 718 bfd_get_section_contents? */
c906108c
SS
719 bfd_seek (abfd, abfd->where, 0);
720
721 stabstrsize = bfd_section_size (abfd, info->stabstrsect);
722
723 coffstab_build_psymtabs (objfile,
c906108c
SS
724 info->textaddr, info->textsize,
725 info->stabsects,
726 info->stabstrsect->filepos, stabstrsize);
727 }
251d32d9 728 if (dwarf2_has_info (objfile, NULL))
42a076f0
EZ
729 {
730 /* DWARF2 sections. */
f29dff0a 731 dwarf2_build_psymtabs (objfile);
42a076f0 732 }
c906108c 733
fea25152
BF
734 dwarf2_build_frame_info (objfile);
735
9cce227f
TG
736 /* Try to add separate debug file if no symbols table found. */
737 if (!objfile_has_partial_symbols (objfile))
738 {
739 char *debugfile;
740
741 debugfile = find_separate_debug_file_by_debuglink (objfile);
8ac244b4 742 make_cleanup (xfree, debugfile);
9cce227f
TG
743
744 if (debugfile)
745 {
746 bfd *abfd = symfile_bfd_open (debugfile);
c5504eaf 747
8ac244b4 748 make_cleanup_bfd_unref (abfd);
24ba069a 749 symbol_file_add_separate (abfd, debugfile, symfile_flags, objfile);
9cce227f
TG
750 }
751 }
752
c906108c
SS
753 do_cleanups (back_to);
754}
755
756static void
fba45db2 757coff_new_init (struct objfile *ignore)
c906108c
SS
758{
759}
760
aff410f1
MS
761/* Perform any local cleanups required when we are done with a
762 particular objfile. I.E, we are in the process of discarding all
763 symbol information for an objfile, freeing up all memory held for
764 it, and unlinking the objfile struct from the global list of known
765 objfiles. */
c906108c
SS
766
767static void
fba45db2 768coff_symfile_finish (struct objfile *objfile)
c906108c 769{
aff410f1 770 /* Let stabs reader clean up. */
7be570e7 771 stabsread_clear_cache ();
fe3e1990
DJ
772
773 dwarf2_free_objfile (objfile);
c906108c 774}
c906108c 775\f
c5aa993b 776
c906108c
SS
777/* Given pointers to a symbol table in coff style exec file,
778 analyze them and create struct symtab's describing the symbols.
779 NSYMS is the number of symbols in the symbol table.
780 We read them one at a time using read_one_sym (). */
781
782static void
fba45db2
KB
783coff_symtab_read (long symtab_offset, unsigned int nsyms,
784 struct objfile *objfile)
c906108c 785{
5e2b427d 786 struct gdbarch *gdbarch = get_objfile_arch (objfile);
fe978cb0 787 struct context_stack *newobj;
c906108c 788 struct coff_symbol coff_symbol;
52f0bd74 789 struct coff_symbol *cs = &coff_symbol;
c906108c
SS
790 static struct internal_syment main_sym;
791 static union internal_auxent main_aux;
792 struct coff_symbol fcn_cs_saved;
793 static struct internal_syment fcn_sym_saved;
794 static union internal_auxent fcn_aux_saved;
c906108c
SS
795 /* A .file is open. */
796 int in_source_file = 0;
797 int next_file_symnum = -1;
798 /* Name of the current file. */
9f37bbcc 799 const char *filestring = "";
c906108c
SS
800 int depth = 0;
801 int fcn_first_line = 0;
b9179dbc 802 CORE_ADDR fcn_first_line_addr = 0;
c906108c
SS
803 int fcn_last_line = 0;
804 int fcn_start_addr = 0;
805 long fcn_line_ptr = 0;
806 int val;
807 CORE_ADDR tmpaddr;
05cfdb42 808 struct minimal_symbol *msym;
c906108c
SS
809
810 /* Work around a stdio bug in SunOS4.1.1 (this makes me nervous....
aff410f1
MS
811 it's hard to know I've really worked around it. The fix should
812 be harmless, anyway). The symptom of the bug is that the first
c906108c
SS
813 fread (in read_one_sym), will (in my example) actually get data
814 from file offset 268, when the fseek was to 264 (and ftell shows
815 264). This causes all hell to break loose. I was unable to
816 reproduce this on a short test program which operated on the same
817 file, performing (I think) the same sequence of operations.
818
819 It stopped happening when I put in this (former) rewind().
820
821 FIXME: Find out if this has been reported to Sun, whether it has
822 been fixed in a later release, etc. */
823
824 bfd_seek (objfile->obfd, 0, 0);
825
aff410f1 826 /* Position to read the symbol table. */
c906108c
SS
827 val = bfd_seek (objfile->obfd, (long) symtab_offset, 0);
828 if (val < 0)
4262abfb 829 perror_with_name (objfile_name (objfile));
c906108c 830
dd707e8e 831 coffread_objfile = objfile;
c906108c
SS
832 nlist_bfd_global = objfile->obfd;
833 nlist_nsyms_global = nsyms;
46212e0b 834 set_last_source_file (NULL);
c906108c
SS
835 memset (opaque_type_chain, 0, sizeof opaque_type_chain);
836
aff410f1 837 if (type_vector) /* Get rid of previous one. */
b8c9b27d 838 xfree (type_vector);
fc474241 839 type_vector_length = INITIAL_TYPE_VECTOR_LENGTH;
c906108c
SS
840 type_vector = (struct type **)
841 xmalloc (type_vector_length * sizeof (struct type *));
842 memset (type_vector, 0, type_vector_length * sizeof (struct type *));
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
fe978cb0
PA
1143 finish_block (newobj->name, &local_symbols,
1144 newobj->old_blocks, 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. */
fe978cb0
PA
1187 finish_block (0, &local_symbols, newobj->old_blocks,
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. */
fe978cb0
PA
2101 newobj = (struct nextfield *) alloca (sizeof (struct nextfield));
2102 newobj->next = list;
2103 list = newobj;
c5aa993b
JM
2104
2105 /* Save the data. */
10f0c4bb
TT
2106 list->field.name = obstack_copy0 (&objfile->objfile_obstack,
2107 name, strlen (name));
aff410f1
MS
2108 FIELD_TYPE (list->field) = decode_type (ms, ms->c_type,
2109 &sub_aux, objfile);
d6a843b5 2110 SET_FIELD_BITPOS (list->field, 8 * ms->c_value);
c5aa993b
JM
2111 FIELD_BITSIZE (list->field) = 0;
2112 nfields++;
2113 break;
c906108c 2114
c5aa993b
JM
2115 case C_FIELD:
2116
2117 /* Get space to record the next field's data. */
fe978cb0
PA
2118 newobj = (struct nextfield *) alloca (sizeof (struct nextfield));
2119 newobj->next = list;
2120 list = newobj;
c5aa993b
JM
2121
2122 /* Save the data. */
10f0c4bb
TT
2123 list->field.name = obstack_copy0 (&objfile->objfile_obstack,
2124 name, strlen (name));
aff410f1
MS
2125 FIELD_TYPE (list->field) = decode_type (ms, ms->c_type,
2126 &sub_aux, objfile);
d6a843b5 2127 SET_FIELD_BITPOS (list->field, ms->c_value);
c5aa993b
JM
2128 FIELD_BITSIZE (list->field) = sub_aux.x_sym.x_misc.x_lnsz.x_size;
2129 nfields++;
2130 break;
c906108c 2131
c5aa993b
JM
2132 case C_EOS:
2133 done = 1;
2134 break;
c906108c
SS
2135 }
2136 }
2137 /* Now create the vector of fields, and record how big it is. */
2138
2139 TYPE_NFIELDS (type) = nfields;
2140 TYPE_FIELDS (type) = (struct field *)
2141 TYPE_ALLOC (type, sizeof (struct field) * nfields);
2142
2143 /* Copy the saved-up fields into the field vector. */
2144
2145 for (n = nfields; list; list = list->next)
2146 TYPE_FIELD (type, --n) = list->field;
2147
2148 return type;
2149}
2150\f
2151/* Read a definition of an enumeration type,
2152 and create and return a suitable type object.
2153 Also defines the symbols that represent the values of the type. */
2154
c906108c 2155static struct type *
5e2b427d
UW
2156coff_read_enum_type (int index, int length, int lastsym,
2157 struct objfile *objfile)
c906108c 2158{
5e2b427d 2159 struct gdbarch *gdbarch = get_objfile_arch (objfile);
52f0bd74
AC
2160 struct symbol *sym;
2161 struct type *type;
c906108c
SS
2162 int nsyms = 0;
2163 int done = 0;
2164 struct pending **symlist;
2165 struct coff_symbol member_sym;
52f0bd74 2166 struct coff_symbol *ms = &member_sym;
c906108c
SS
2167 struct internal_syment sub_sym;
2168 union internal_auxent sub_aux;
2169 struct pending *osyms, *syms;
2170 int o_nsyms;
52f0bd74 2171 int n;
c906108c
SS
2172 char *name;
2173 int unsigned_enum = 1;
2174
2175 type = coff_alloc_type (index);
2176 if (within_function)
2177 symlist = &local_symbols;
2178 else
2179 symlist = &file_symbols;
2180 osyms = *symlist;
2181 o_nsyms = osyms ? osyms->nsyms : 0;
2182
2183 while (!done && symnum < lastsym && symnum < nlist_nsyms_global)
2184 {
2185 read_one_sym (ms, &sub_sym, &sub_aux);
2186 name = ms->c_name;
5e2b427d 2187 name = EXTERNAL_NAME (name, objfile->obfd);
c906108c
SS
2188
2189 switch (ms->c_sclass)
2190 {
c5aa993b 2191 case C_MOE:
e623cf5d 2192 sym = allocate_symbol (objfile);
c5aa993b 2193
3567439c 2194 SYMBOL_SET_LINKAGE_NAME (sym,
10f0c4bb
TT
2195 obstack_copy0 (&objfile->objfile_obstack,
2196 name, strlen (name)));
f1e6e072 2197 SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
176620f1 2198 SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
c5aa993b
JM
2199 SYMBOL_VALUE (sym) = ms->c_value;
2200 add_symbol_to_list (sym, symlist);
2201 nsyms++;
2202 break;
c906108c 2203
c5aa993b
JM
2204 case C_EOS:
2205 /* Sometimes the linker (on 386/ix 2.0.2 at least) screws
2206 up the count of how many symbols to read. So stop
2207 on .eos. */
2208 done = 1;
2209 break;
c906108c
SS
2210 }
2211 }
2212
2213 /* Now fill in the fields of the type-structure. */
2214
2215 if (length > 0)
2216 TYPE_LENGTH (type) = length;
9a76efb6 2217 else /* Assume ints. */
5e2b427d 2218 TYPE_LENGTH (type) = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
c906108c
SS
2219 TYPE_CODE (type) = TYPE_CODE_ENUM;
2220 TYPE_NFIELDS (type) = nsyms;
2221 TYPE_FIELDS (type) = (struct field *)
2222 TYPE_ALLOC (type, sizeof (struct field) * nsyms);
2223
2224 /* Find the symbols for the values and put them into the type.
2225 The symbols can be found in the symlist that we put them on
2226 to cause them to be defined. osyms contains the old value
2227 of that symlist; everything up to there was defined by us. */
2228 /* Note that we preserve the order of the enum constants, so
2229 that in something like "enum {FOO, LAST_THING=FOO}" we print
2230 FOO, not LAST_THING. */
2231
2232 for (syms = *symlist, n = 0; syms; syms = syms->next)
2233 {
2234 int j = 0;
2235
2236 if (syms == osyms)
2237 j = o_nsyms;
c5aa993b 2238 for (; j < syms->nsyms; j++, n++)
c906108c
SS
2239 {
2240 struct symbol *xsym = syms->symbol[j];
c5504eaf 2241
c906108c 2242 SYMBOL_TYPE (xsym) = type;
3567439c 2243 TYPE_FIELD_NAME (type, n) = SYMBOL_LINKAGE_NAME (xsym);
14e75d8e 2244 SET_FIELD_ENUMVAL (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym));
c906108c
SS
2245 if (SYMBOL_VALUE (xsym) < 0)
2246 unsigned_enum = 0;
2247 TYPE_FIELD_BITSIZE (type, n) = 0;
2248 }
2249 if (syms == osyms)
2250 break;
2251 }
2252
2253 if (unsigned_enum)
876cecd0 2254 TYPE_UNSIGNED (type) = 1;
c906108c
SS
2255
2256 return type;
2257}
2258
aff410f1 2259/* Register our ability to parse symbols for coff BFD files. */
c906108c 2260
00b5771c 2261static const struct sym_fns coff_sym_fns =
c906108c 2262{
aff410f1
MS
2263 coff_new_init, /* sym_new_init: init anything gbl to
2264 entire symtab */
2265 coff_symfile_init, /* sym_init: read initial info, setup
2266 for sym_read() */
2267 coff_symfile_read, /* sym_read: read a symbol file into
2268 symtab */
b11896a5 2269 NULL, /* sym_read_psymbols */
aff410f1
MS
2270 coff_symfile_finish, /* sym_finish: finished with file,
2271 cleanup */
2272 default_symfile_offsets, /* sym_offsets: xlate external to
2273 internal form */
2274 default_symfile_segments, /* sym_segments: Get segment
2275 information from a file */
c295b2e5 2276 NULL, /* sym_read_linetable */
aff410f1
MS
2277
2278 default_symfile_relocate, /* sym_relocate: Relocate a debug
2279 section. */
55aa24fb 2280 NULL, /* sym_probe_fns */
00b5771c 2281 &psym_functions
c906108c
SS
2282};
2283
b8b98ad1
TT
2284/* Free the per-objfile COFF data. */
2285
2286static void
2287coff_free_info (struct objfile *objfile, void *arg)
2288{
2289 xfree (arg);
2290}
2291
c906108c 2292void
fba45db2 2293_initialize_coffread (void)
c906108c 2294{
c256e171 2295 add_symtab_fns (bfd_target_coff_flavour, &coff_sym_fns);
b8b98ad1
TT
2296
2297 coff_objfile_data_key = register_objfile_data_with_cleanup (NULL,
2298 coff_free_info);
f1e6e072
TT
2299
2300 coff_register_index
2301 = register_symbol_register_impl (LOC_REGISTER, &coff_register_funcs);
c906108c 2302}
This page took 1.290882 seconds and 4 git commands to generate.