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