OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.1/] [gdb/] [coffread.c] - Blame information for rev 313

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.