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