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