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