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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.2/] [gdb/] [buildsym.c] - Blame information for rev 330

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 330 jeremybenn
/* Support routines for building symbol tables in GDB's internal format.
2
   Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
3
   1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007, 2008, 2009,
4
   2010 Free Software Foundation, Inc.
5
 
6
   This file is part of GDB.
7
 
8
   This program is free software; you can redistribute it and/or modify
9
   it under the terms of the GNU General Public License as published by
10
   the Free Software Foundation; either version 3 of the License, or
11
   (at your option) any later version.
12
 
13
   This program is distributed in the hope that it will be useful,
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
   GNU General Public License for more details.
17
 
18
   You should have received a copy of the GNU General Public License
19
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
 
21
/* This module provides subroutines used for creating and adding to
22
   the symbol table.  These routines are called from various symbol-
23
   file-reading routines.
24
 
25
   Routines to support specific debugging information formats (stabs,
26
   DWARF, etc) belong somewhere else. */
27
 
28
#include "defs.h"
29
#include "bfd.h"
30
#include "gdb_obstack.h"
31
#include "symtab.h"
32
#include "symfile.h"
33
#include "objfiles.h"
34
#include "gdbtypes.h"
35
#include "gdb_assert.h"
36
#include "complaints.h"
37
#include "gdb_string.h"
38
#include "expression.h"         /* For "enum exp_opcode" used by... */
39
#include "bcache.h"
40
#include "filenames.h"          /* For DOSish file names */
41
#include "macrotab.h"
42
#include "demangle.h"           /* Needed by SYMBOL_INIT_DEMANGLED_NAME.  */
43
#include "block.h"
44
#include "cp-support.h"
45
#include "dictionary.h"
46
#include "addrmap.h"
47
 
48
/* Ask buildsym.h to define the vars it normally declares `extern'.  */
49
#define EXTERN
50
/**/
51
#include "buildsym.h"           /* Our own declarations */
52
#undef  EXTERN
53
 
54
/* For cleanup_undefined_types and finish_global_stabs (somewhat
55
   questionable--see comment where we call them).  */
56
 
57
#include "stabsread.h"
58
 
59
/* List of subfiles.  */
60
 
61
static struct subfile *subfiles;
62
 
63
/* List of free `struct pending' structures for reuse.  */
64
 
65
static struct pending *free_pendings;
66
 
67
/* Non-zero if symtab has line number info.  This prevents an
68
   otherwise empty symtab from being tossed.  */
69
 
70
static int have_line_numbers;
71
 
72
/* The mutable address map for the compilation unit whose symbols
73
   we're currently reading.  The symtabs' shared blockvector will
74
   point to a fixed copy of this.  */
75
static struct addrmap *pending_addrmap;
76
 
77
/* The obstack on which we allocate pending_addrmap.
78
   If pending_addrmap is NULL, this is uninitialized; otherwise, it is
79
   initialized (and holds pending_addrmap).  */
80
static struct obstack pending_addrmap_obstack;
81
 
82
/* Non-zero if we recorded any ranges in the addrmap that are
83
   different from those in the blockvector already.  We set this to
84
   zero when we start processing a symfile, and if it's still zero at
85
   the end, then we just toss the addrmap.  */
86
static int pending_addrmap_interesting;
87
 
88
 
89
static int compare_line_numbers (const void *ln1p, const void *ln2p);
90
 
91
 
92
/* Initial sizes of data structures.  These are realloc'd larger if
93
   needed, and realloc'd down to the size actually used, when
94
   completed.  */
95
 
96
#define INITIAL_CONTEXT_STACK_SIZE      10
97
#define INITIAL_LINE_VECTOR_LENGTH      1000
98
 
99
 
100
/* maintain the lists of symbols and blocks */
101
 
102
/* Add a pending list to free_pendings. */
103
void
104
add_free_pendings (struct pending *list)
105
{
106
  struct pending *link = list;
107
 
108
  if (list)
109
    {
110
      while (link->next) link = link->next;
111
      link->next = free_pendings;
112
      free_pendings = list;
113
    }
114
}
115
 
116
/* Add a symbol to one of the lists of symbols.  While we're at it, if
117
   we're in the C++ case and don't have full namespace debugging info,
118
   check to see if it references an anonymous namespace; if so, add an
119
   appropriate using directive.  */
120
 
121
void
122
add_symbol_to_list (struct symbol *symbol, struct pending **listhead)
123
{
124
  struct pending *link;
125
 
126
  /* If this is an alias for another symbol, don't add it.  */
127
  if (symbol->ginfo.name && symbol->ginfo.name[0] == '#')
128
    return;
129
 
130
  /* We keep PENDINGSIZE symbols in each link of the list. If we
131
     don't have a link with room in it, add a new link.  */
132
  if (*listhead == NULL || (*listhead)->nsyms == PENDINGSIZE)
133
    {
134
      if (free_pendings)
135
        {
136
          link = free_pendings;
137
          free_pendings = link->next;
138
        }
139
      else
140
        {
141
          link = (struct pending *) xmalloc (sizeof (struct pending));
142
        }
143
 
144
      link->next = *listhead;
145
      *listhead = link;
146
      link->nsyms = 0;
147
    }
148
 
149
  (*listhead)->symbol[(*listhead)->nsyms++] = symbol;
150
}
151
 
152
/* Find a symbol named NAME on a LIST.  NAME need not be
153
   '\0'-terminated; LENGTH is the length of the name.  */
154
 
155
struct symbol *
156
find_symbol_in_list (struct pending *list, char *name, int length)
157
{
158
  int j;
159
  char *pp;
160
 
161
  while (list != NULL)
162
    {
163
      for (j = list->nsyms; --j >= 0;)
164
        {
165
          pp = SYMBOL_LINKAGE_NAME (list->symbol[j]);
166
          if (*pp == *name && strncmp (pp, name, length) == 0
167
              && pp[length] == '\0')
168
            {
169
              return (list->symbol[j]);
170
            }
171
        }
172
      list = list->next;
173
    }
174
  return (NULL);
175
}
176
 
177
/* At end of reading syms, or in case of quit, really free as many
178
   `struct pending's as we can easily find. */
179
 
180
void
181
really_free_pendings (void *dummy)
182
{
183
  struct pending *next, *next1;
184
 
185
  for (next = free_pendings; next; next = next1)
186
    {
187
      next1 = next->next;
188
      xfree ((void *) next);
189
    }
190
  free_pendings = NULL;
191
 
192
  free_pending_blocks ();
193
 
194
  for (next = file_symbols; next != NULL; next = next1)
195
    {
196
      next1 = next->next;
197
      xfree ((void *) next);
198
    }
199
  file_symbols = NULL;
200
 
201
  for (next = global_symbols; next != NULL; next = next1)
202
    {
203
      next1 = next->next;
204
      xfree ((void *) next);
205
    }
206
  global_symbols = NULL;
207
 
208
  if (pending_macros)
209
    free_macro_table (pending_macros);
210
 
211
  if (pending_addrmap)
212
    {
213
      obstack_free (&pending_addrmap_obstack, NULL);
214
      pending_addrmap = NULL;
215
    }
216
}
217
 
218
/* This function is called to discard any pending blocks. */
219
 
220
void
221
free_pending_blocks (void)
222
{
223
  /* The links are made in the objfile_obstack, so we only need to
224
     reset PENDING_BLOCKS.  */
225
  pending_blocks = NULL;
226
}
227
 
228
/* Take one of the lists of symbols and make a block from it.  Keep
229
   the order the symbols have in the list (reversed from the input
230
   file).  Put the block on the list of pending blocks.  */
231
 
232
struct block *
233
finish_block (struct symbol *symbol, struct pending **listhead,
234
              struct pending_block *old_blocks,
235
              CORE_ADDR start, CORE_ADDR end,
236
              struct objfile *objfile)
237
{
238
  struct gdbarch *gdbarch = get_objfile_arch (objfile);
239
  struct pending *next, *next1;
240
  struct block *block;
241
  struct pending_block *pblock;
242
  struct pending_block *opblock;
243
 
244
  block = allocate_block (&objfile->objfile_obstack);
245
 
246
  if (symbol)
247
    {
248
      BLOCK_DICT (block) = dict_create_linear (&objfile->objfile_obstack,
249
                                               *listhead);
250
    }
251
  else
252
    {
253
      BLOCK_DICT (block) = dict_create_hashed (&objfile->objfile_obstack,
254
                                               *listhead);
255
    }
256
 
257
  BLOCK_START (block) = start;
258
  BLOCK_END (block) = end;
259
  /* Superblock filled in when containing block is made */
260
  BLOCK_SUPERBLOCK (block) = NULL;
261
  BLOCK_NAMESPACE (block) = NULL;
262
 
263
  /* Put the block in as the value of the symbol that names it.  */
264
 
265
  if (symbol)
266
    {
267
      struct type *ftype = SYMBOL_TYPE (symbol);
268
      struct dict_iterator iter;
269
      SYMBOL_BLOCK_VALUE (symbol) = block;
270
      BLOCK_FUNCTION (block) = symbol;
271
 
272
      if (TYPE_NFIELDS (ftype) <= 0)
273
        {
274
          /* No parameter type information is recorded with the
275
             function's type.  Set that from the type of the
276
             parameter symbols. */
277
          int nparams = 0, iparams;
278
          struct symbol *sym;
279
          ALL_BLOCK_SYMBOLS (block, iter, sym)
280
            {
281
              if (SYMBOL_IS_ARGUMENT (sym))
282
                nparams++;
283
            }
284
          if (nparams > 0)
285
            {
286
              TYPE_NFIELDS (ftype) = nparams;
287
              TYPE_FIELDS (ftype) = (struct field *)
288
                TYPE_ALLOC (ftype, nparams * sizeof (struct field));
289
 
290
              iparams = 0;
291
              ALL_BLOCK_SYMBOLS (block, iter, sym)
292
                {
293
                  if (iparams == nparams)
294
                    break;
295
 
296
                  if (SYMBOL_IS_ARGUMENT (sym))
297
                    {
298
                      TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym);
299
                      TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
300
                      iparams++;
301
                    }
302
                }
303
            }
304
        }
305
    }
306
  else
307
    {
308
      BLOCK_FUNCTION (block) = NULL;
309
    }
310
 
311
  /* Now "free" the links of the list, and empty the list.  */
312
 
313
  for (next = *listhead; next; next = next1)
314
    {
315
      next1 = next->next;
316
      next->next = free_pendings;
317
      free_pendings = next;
318
    }
319
  *listhead = NULL;
320
 
321
  /* Check to be sure that the blocks have an end address that is
322
     greater than starting address */
323
 
324
  if (BLOCK_END (block) < BLOCK_START (block))
325
    {
326
      if (symbol)
327
        {
328
          complaint (&symfile_complaints,
329
                     _("block end address less than block start address in %s (patched it)"),
330
                     SYMBOL_PRINT_NAME (symbol));
331
        }
332
      else
333
        {
334
          complaint (&symfile_complaints,
335
                     _("block end address %s less than block start address %s (patched it)"),
336
                     paddress (gdbarch, BLOCK_END (block)),
337
                     paddress (gdbarch, BLOCK_START (block)));
338
        }
339
      /* Better than nothing */
340
      BLOCK_END (block) = BLOCK_START (block);
341
    }
342
 
343
  /* Install this block as the superblock of all blocks made since the
344
     start of this scope that don't have superblocks yet.  */
345
 
346
  opblock = NULL;
347
  for (pblock = pending_blocks;
348
       pblock && pblock != old_blocks;
349
       pblock = pblock->next)
350
    {
351
      if (BLOCK_SUPERBLOCK (pblock->block) == NULL)
352
        {
353
          /* Check to be sure the blocks are nested as we receive
354
             them. If the compiler/assembler/linker work, this just
355
             burns a small amount of time.
356
 
357
             Skip blocks which correspond to a function; they're not
358
             physically nested inside this other blocks, only
359
             lexically nested.  */
360
          if (BLOCK_FUNCTION (pblock->block) == NULL
361
              && (BLOCK_START (pblock->block) < BLOCK_START (block)
362
                  || BLOCK_END (pblock->block) > BLOCK_END (block)))
363
            {
364
              if (symbol)
365
                {
366
                  complaint (&symfile_complaints,
367
                             _("inner block not inside outer block in %s"),
368
                             SYMBOL_PRINT_NAME (symbol));
369
                }
370
              else
371
                {
372
                  complaint (&symfile_complaints,
373
                             _("inner block (%s-%s) not inside outer block (%s-%s)"),
374
                             paddress (gdbarch, BLOCK_START (pblock->block)),
375
                             paddress (gdbarch, BLOCK_END (pblock->block)),
376
                             paddress (gdbarch, BLOCK_START (block)),
377
                             paddress (gdbarch, BLOCK_END (block)));
378
                }
379
              if (BLOCK_START (pblock->block) < BLOCK_START (block))
380
                BLOCK_START (pblock->block) = BLOCK_START (block);
381
              if (BLOCK_END (pblock->block) > BLOCK_END (block))
382
                BLOCK_END (pblock->block) = BLOCK_END (block);
383
            }
384
          BLOCK_SUPERBLOCK (pblock->block) = block;
385
        }
386
      opblock = pblock;
387
    }
388
 
389
  block_set_using (block, using_directives, &objfile->objfile_obstack);
390
  using_directives = NULL;
391
 
392
  record_pending_block (objfile, block, opblock);
393
 
394
  return block;
395
}
396
 
397
 
398
/* Record BLOCK on the list of all blocks in the file.  Put it after
399
   OPBLOCK, or at the beginning if opblock is NULL.  This puts the
400
   block in the list after all its subblocks.
401
 
402
   Allocate the pending block struct in the objfile_obstack to save
403
   time.  This wastes a little space.  FIXME: Is it worth it?  */
404
 
405
void
406
record_pending_block (struct objfile *objfile, struct block *block,
407
                      struct pending_block *opblock)
408
{
409
  struct pending_block *pblock;
410
 
411
  pblock = (struct pending_block *)
412
    obstack_alloc (&objfile->objfile_obstack, sizeof (struct pending_block));
413
  pblock->block = block;
414
  if (opblock)
415
    {
416
      pblock->next = opblock->next;
417
      opblock->next = pblock;
418
    }
419
  else
420
    {
421
      pblock->next = pending_blocks;
422
      pending_blocks = pblock;
423
    }
424
}
425
 
426
 
427
/* Record that the range of addresses from START to END_INCLUSIVE
428
   (inclusive, like it says) belongs to BLOCK.  BLOCK's start and end
429
   addresses must be set already.  You must apply this function to all
430
   BLOCK's children before applying it to BLOCK.
431
 
432
   If a call to this function complicates the picture beyond that
433
   already provided by BLOCK_START and BLOCK_END, then we create an
434
   address map for the block.  */
435
void
436
record_block_range (struct block *block,
437
                    CORE_ADDR start, CORE_ADDR end_inclusive)
438
{
439
  /* If this is any different from the range recorded in the block's
440
     own BLOCK_START and BLOCK_END, then note that the address map has
441
     become interesting.  Note that even if this block doesn't have
442
     any "interesting" ranges, some later block might, so we still
443
     need to record this block in the addrmap.  */
444
  if (start != BLOCK_START (block)
445
      || end_inclusive + 1 != BLOCK_END (block))
446
    pending_addrmap_interesting = 1;
447
 
448
  if (! pending_addrmap)
449
    {
450
      obstack_init (&pending_addrmap_obstack);
451
      pending_addrmap = addrmap_create_mutable (&pending_addrmap_obstack);
452
    }
453
 
454
  addrmap_set_empty (pending_addrmap, start, end_inclusive, block);
455
}
456
 
457
 
458
static struct blockvector *
459
make_blockvector (struct objfile *objfile)
460
{
461
  struct pending_block *next;
462
  struct blockvector *blockvector;
463
  int i;
464
 
465
  /* Count the length of the list of blocks.  */
466
 
467
  for (next = pending_blocks, i = 0; next; next = next->next, i++)
468
    {;
469
    }
470
 
471
  blockvector = (struct blockvector *)
472
    obstack_alloc (&objfile->objfile_obstack,
473
                   (sizeof (struct blockvector)
474
                    + (i - 1) * sizeof (struct block *)));
475
 
476
  /* Copy the blocks into the blockvector. This is done in reverse
477
     order, which happens to put the blocks into the proper order
478
     (ascending starting address). finish_block has hair to insert
479
     each block into the list after its subblocks in order to make
480
     sure this is true.  */
481
 
482
  BLOCKVECTOR_NBLOCKS (blockvector) = i;
483
  for (next = pending_blocks; next; next = next->next)
484
    {
485
      BLOCKVECTOR_BLOCK (blockvector, --i) = next->block;
486
    }
487
 
488
  free_pending_blocks ();
489
 
490
  /* If we needed an address map for this symtab, record it in the
491
     blockvector.  */
492
  if (pending_addrmap && pending_addrmap_interesting)
493
    BLOCKVECTOR_MAP (blockvector)
494
      = addrmap_create_fixed (pending_addrmap, &objfile->objfile_obstack);
495
  else
496
    BLOCKVECTOR_MAP (blockvector) = 0;
497
 
498
  /* Some compilers output blocks in the wrong order, but we depend on
499
     their being in the right order so we can binary search. Check the
500
     order and moan about it.  */
501
  if (BLOCKVECTOR_NBLOCKS (blockvector) > 1)
502
    {
503
      for (i = 1; i < BLOCKVECTOR_NBLOCKS (blockvector); i++)
504
        {
505
          if (BLOCK_START (BLOCKVECTOR_BLOCK (blockvector, i - 1))
506
              > BLOCK_START (BLOCKVECTOR_BLOCK (blockvector, i)))
507
            {
508
              CORE_ADDR start
509
                = BLOCK_START (BLOCKVECTOR_BLOCK (blockvector, i));
510
 
511
              complaint (&symfile_complaints, _("block at %s out of order"),
512
                         hex_string ((LONGEST) start));
513
            }
514
        }
515
    }
516
 
517
  return (blockvector);
518
}
519
 
520
/* Start recording information about source code that came from an
521
   included (or otherwise merged-in) source file with a different
522
   name.  NAME is the name of the file (cannot be NULL), DIRNAME is
523
   the directory in which the file was compiled (or NULL if not known).  */
524
 
525
void
526
start_subfile (char *name, char *dirname)
527
{
528
  struct subfile *subfile;
529
 
530
  /* See if this subfile is already known as a subfile of the current
531
     main source file.  */
532
 
533
  for (subfile = subfiles; subfile; subfile = subfile->next)
534
    {
535
      char *subfile_name;
536
 
537
      /* If NAME is an absolute path, and this subfile is not, then
538
         attempt to create an absolute path to compare.  */
539
      if (IS_ABSOLUTE_PATH (name)
540
          && !IS_ABSOLUTE_PATH (subfile->name)
541
          && subfile->dirname != NULL)
542
        subfile_name = concat (subfile->dirname, SLASH_STRING,
543
                               subfile->name, (char *) NULL);
544
      else
545
        subfile_name = subfile->name;
546
 
547
      if (FILENAME_CMP (subfile_name, name) == 0)
548
        {
549
          current_subfile = subfile;
550
          if (subfile_name != subfile->name)
551
            xfree (subfile_name);
552
          return;
553
        }
554
      if (subfile_name != subfile->name)
555
        xfree (subfile_name);
556
    }
557
 
558
  /* This subfile is not known.  Add an entry for it. Make an entry
559
     for this subfile in the list of all subfiles of the current main
560
     source file.  */
561
 
562
  subfile = (struct subfile *) xmalloc (sizeof (struct subfile));
563
  memset ((char *) subfile, 0, sizeof (struct subfile));
564
  subfile->next = subfiles;
565
  subfiles = subfile;
566
  current_subfile = subfile;
567
 
568
  /* Save its name and compilation directory name */
569
  subfile->name = (name == NULL) ? NULL : xstrdup (name);
570
  subfile->dirname = (dirname == NULL) ? NULL : xstrdup (dirname);
571
 
572
  /* Initialize line-number recording for this subfile.  */
573
  subfile->line_vector = NULL;
574
 
575
  /* Default the source language to whatever can be deduced from the
576
     filename.  If nothing can be deduced (such as for a C/C++ include
577
     file with a ".h" extension), then inherit whatever language the
578
     previous subfile had.  This kludgery is necessary because there
579
     is no standard way in some object formats to record the source
580
     language.  Also, when symtabs are allocated we try to deduce a
581
     language then as well, but it is too late for us to use that
582
     information while reading symbols, since symtabs aren't allocated
583
     until after all the symbols have been processed for a given
584
     source file. */
585
 
586
  subfile->language = deduce_language_from_filename (subfile->name);
587
  if (subfile->language == language_unknown
588
      && subfile->next != NULL)
589
    {
590
      subfile->language = subfile->next->language;
591
    }
592
 
593
  /* Initialize the debug format string to NULL.  We may supply it
594
     later via a call to record_debugformat. */
595
  subfile->debugformat = NULL;
596
 
597
  /* Similarly for the producer.  */
598
  subfile->producer = NULL;
599
 
600
  /* If the filename of this subfile ends in .C, then change the
601
     language of any pending subfiles from C to C++.  We also accept
602
     any other C++ suffixes accepted by deduce_language_from_filename.  */
603
  /* Likewise for f2c.  */
604
 
605
  if (subfile->name)
606
    {
607
      struct subfile *s;
608
      enum language sublang = deduce_language_from_filename (subfile->name);
609
 
610
      if (sublang == language_cplus || sublang == language_fortran)
611
        for (s = subfiles; s != NULL; s = s->next)
612
          if (s->language == language_c)
613
            s->language = sublang;
614
    }
615
 
616
  /* And patch up this file if necessary.  */
617
  if (subfile->language == language_c
618
      && subfile->next != NULL
619
      && (subfile->next->language == language_cplus
620
          || subfile->next->language == language_fortran))
621
    {
622
      subfile->language = subfile->next->language;
623
    }
624
}
625
 
626
/* For stabs readers, the first N_SO symbol is assumed to be the
627
   source file name, and the subfile struct is initialized using that
628
   assumption.  If another N_SO symbol is later seen, immediately
629
   following the first one, then the first one is assumed to be the
630
   directory name and the second one is really the source file name.
631
 
632
   So we have to patch up the subfile struct by moving the old name
633
   value to dirname and remembering the new name.  Some sanity
634
   checking is performed to ensure that the state of the subfile
635
   struct is reasonable and that the old name we are assuming to be a
636
   directory name actually is (by checking for a trailing '/'). */
637
 
638
void
639
patch_subfile_names (struct subfile *subfile, char *name)
640
{
641
  if (subfile != NULL && subfile->dirname == NULL && subfile->name != NULL
642
      && subfile->name[strlen (subfile->name) - 1] == '/')
643
    {
644
      subfile->dirname = subfile->name;
645
      subfile->name = xstrdup (name);
646
      last_source_file = name;
647
 
648
      /* Default the source language to whatever can be deduced from
649
         the filename.  If nothing can be deduced (such as for a C/C++
650
         include file with a ".h" extension), then inherit whatever
651
         language the previous subfile had.  This kludgery is
652
         necessary because there is no standard way in some object
653
         formats to record the source language.  Also, when symtabs
654
         are allocated we try to deduce a language then as well, but
655
         it is too late for us to use that information while reading
656
         symbols, since symtabs aren't allocated until after all the
657
         symbols have been processed for a given source file. */
658
 
659
      subfile->language = deduce_language_from_filename (subfile->name);
660
      if (subfile->language == language_unknown
661
          && subfile->next != NULL)
662
        {
663
          subfile->language = subfile->next->language;
664
        }
665
    }
666
}
667
 
668
/* Handle the N_BINCL and N_EINCL symbol types that act like N_SOL for
669
   switching source files (different subfiles, as we call them) within
670
   one object file, but using a stack rather than in an arbitrary
671
   order.  */
672
 
673
void
674
push_subfile (void)
675
{
676
  struct subfile_stack *tem
677
    = (struct subfile_stack *) xmalloc (sizeof (struct subfile_stack));
678
 
679
  tem->next = subfile_stack;
680
  subfile_stack = tem;
681
  if (current_subfile == NULL || current_subfile->name == NULL)
682
    {
683
      internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
684
    }
685
  tem->name = current_subfile->name;
686
}
687
 
688
char *
689
pop_subfile (void)
690
{
691
  char *name;
692
  struct subfile_stack *link = subfile_stack;
693
 
694
  if (link == NULL)
695
    {
696
      internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
697
    }
698
  name = link->name;
699
  subfile_stack = link->next;
700
  xfree ((void *) link);
701
  return (name);
702
}
703
 
704
/* Add a linetable entry for line number LINE and address PC to the
705
   line vector for SUBFILE.  */
706
 
707
void
708
record_line (struct subfile *subfile, int line, CORE_ADDR pc)
709
{
710
  struct linetable_entry *e;
711
 
712
  /* Ignore the dummy line number in libg.o */
713
  if (line == 0xffff)
714
    {
715
      return;
716
    }
717
 
718
  /* Make sure line vector exists and is big enough.  */
719
  if (!subfile->line_vector)
720
    {
721
      subfile->line_vector_length = INITIAL_LINE_VECTOR_LENGTH;
722
      subfile->line_vector = (struct linetable *)
723
        xmalloc (sizeof (struct linetable)
724
           + subfile->line_vector_length * sizeof (struct linetable_entry));
725
      subfile->line_vector->nitems = 0;
726
      have_line_numbers = 1;
727
    }
728
 
729
  if (subfile->line_vector->nitems + 1 >= subfile->line_vector_length)
730
    {
731
      subfile->line_vector_length *= 2;
732
      subfile->line_vector = (struct linetable *)
733
        xrealloc ((char *) subfile->line_vector,
734
                  (sizeof (struct linetable)
735
                   + (subfile->line_vector_length
736
                      * sizeof (struct linetable_entry))));
737
    }
738
 
739
  /* Normally, we treat lines as unsorted.  But the end of sequence
740
     marker is special.  We sort line markers at the same PC by line
741
     number, so end of sequence markers (which have line == 0) appear
742
     first.  This is right if the marker ends the previous function,
743
     and there is no padding before the next function.  But it is
744
     wrong if the previous line was empty and we are now marking a
745
     switch to a different subfile.  We must leave the end of sequence
746
     marker at the end of this group of lines, not sort the empty line
747
     to after the marker.  The easiest way to accomplish this is to
748
     delete any empty lines from our table, if they are followed by
749
     end of sequence markers.  All we lose is the ability to set
750
     breakpoints at some lines which contain no instructions
751
     anyway.  */
752
  if (line == 0 && subfile->line_vector->nitems > 0)
753
    {
754
      e = subfile->line_vector->item + subfile->line_vector->nitems - 1;
755
      while (subfile->line_vector->nitems > 0 && e->pc == pc)
756
        {
757
          e--;
758
          subfile->line_vector->nitems--;
759
        }
760
    }
761
 
762
  e = subfile->line_vector->item + subfile->line_vector->nitems++;
763
  e->line = line;
764
  e->pc = pc;
765
}
766
 
767
/* Needed in order to sort line tables from IBM xcoff files.  Sigh!  */
768
 
769
static int
770
compare_line_numbers (const void *ln1p, const void *ln2p)
771
{
772
  struct linetable_entry *ln1 = (struct linetable_entry *) ln1p;
773
  struct linetable_entry *ln2 = (struct linetable_entry *) ln2p;
774
 
775
  /* Note: this code does not assume that CORE_ADDRs can fit in ints.
776
     Please keep it that way.  */
777
  if (ln1->pc < ln2->pc)
778
    return -1;
779
 
780
  if (ln1->pc > ln2->pc)
781
    return 1;
782
 
783
  /* If pc equal, sort by line.  I'm not sure whether this is optimum
784
     behavior (see comment at struct linetable in symtab.h).  */
785
  return ln1->line - ln2->line;
786
}
787
 
788
/* Start a new symtab for a new source file.  Called, for example,
789
   when a stabs symbol of type N_SO is seen, or when a DWARF
790
   TAG_compile_unit DIE is seen.  It indicates the start of data for
791
   one original source file.
792
 
793
   NAME is the name of the file (cannot be NULL).  DIRNAME is the directory in
794
   which the file was compiled (or NULL if not known).  START_ADDR is the
795
   lowest address of objects in the file (or 0 if not known).  */
796
 
797
void
798
start_symtab (char *name, char *dirname, CORE_ADDR start_addr)
799
{
800
  last_source_file = name;
801
  last_source_start_addr = start_addr;
802
  file_symbols = NULL;
803
  global_symbols = NULL;
804
  within_function = 0;
805
  have_line_numbers = 0;
806
 
807
  /* Context stack is initially empty.  Allocate first one with room
808
     for 10 levels; reuse it forever afterward.  */
809
  if (context_stack == NULL)
810
    {
811
      context_stack_size = INITIAL_CONTEXT_STACK_SIZE;
812
      context_stack = (struct context_stack *)
813
        xmalloc (context_stack_size * sizeof (struct context_stack));
814
    }
815
  context_stack_depth = 0;
816
 
817
  /* We shouldn't have any address map at this point.  */
818
  gdb_assert (! pending_addrmap);
819
 
820
  /* Initialize the list of sub source files with one entry for this
821
     file (the top-level source file).  */
822
 
823
  subfiles = NULL;
824
  current_subfile = NULL;
825
  start_subfile (name, dirname);
826
}
827
 
828
/* Subroutine of end_symtab to simplify it.
829
   Look for a subfile that matches the main source file's basename.
830
   If there is only one, and if the main source file doesn't have any
831
   symbol or line number information, then copy this file's symtab and
832
   line_vector to the main source file's subfile and discard the other subfile.
833
   This can happen because of a compiler bug or from the user playing games
834
   with #line or from things like a distributed build system that manipulates
835
   the debug info.  */
836
 
837
static void
838
watch_main_source_file_lossage (void)
839
{
840
  struct subfile *mainsub, *subfile;
841
 
842
  /* Find the main source file.
843
     This loop could be eliminated if start_symtab saved it for us.  */
844
  mainsub = NULL;
845
  for (subfile = subfiles; subfile; subfile = subfile->next)
846
    {
847
      /* The main subfile is guaranteed to be the last one.  */
848
      if (subfile->next == NULL)
849
        mainsub = subfile;
850
    }
851
 
852
  /* If the main source file doesn't have any line number or symbol info,
853
     look for an alias in another subfile.
854
     We have to watch for mainsub == NULL here.  It's a quirk of end_symtab,
855
     it can return NULL so there may not be a main subfile.  */
856
 
857
  if (mainsub
858
      && mainsub->line_vector == NULL
859
      && mainsub->symtab == NULL)
860
    {
861
      const char *mainbase = lbasename (mainsub->name);
862
      int nr_matches = 0;
863
      struct subfile *prevsub;
864
      struct subfile *mainsub_alias = NULL;
865
      struct subfile *prev_mainsub_alias = NULL;
866
 
867
      prevsub = NULL;
868
      for (subfile = subfiles;
869
           /* Stop before we get to the last one.  */
870
           subfile->next;
871
           subfile = subfile->next)
872
        {
873
          if (strcmp (lbasename (subfile->name), mainbase) == 0)
874
            {
875
              ++nr_matches;
876
              mainsub_alias = subfile;
877
              prev_mainsub_alias = prevsub;
878
            }
879
          prevsub = subfile;
880
        }
881
 
882
      if (nr_matches == 1)
883
        {
884
          gdb_assert (mainsub_alias != NULL && mainsub_alias != mainsub);
885
 
886
          /* Found a match for the main source file.
887
             Copy its line_vector and symtab to the main subfile
888
             and then discard it.  */
889
 
890
          mainsub->line_vector = mainsub_alias->line_vector;
891
          mainsub->line_vector_length = mainsub_alias->line_vector_length;
892
          mainsub->symtab = mainsub_alias->symtab;
893
 
894
          if (prev_mainsub_alias == NULL)
895
            subfiles = mainsub_alias->next;
896
          else
897
            prev_mainsub_alias->next = mainsub_alias->next;
898
          xfree (mainsub_alias);
899
        }
900
    }
901
}
902
 
903
/* Helper function for qsort.  Parametes are `struct block *' pointers,
904
   function sorts them in descending order by their BLOCK_START.  */
905
 
906
static int
907
block_compar (const void *ap, const void *bp)
908
{
909
  const struct block *a = *(const struct block **) ap;
910
  const struct block *b = *(const struct block **) bp;
911
 
912
  return ((BLOCK_START (b) > BLOCK_START (a))
913
          - (BLOCK_START (b) < BLOCK_START (a)));
914
}
915
 
916
/* Finish the symbol definitions for one main source file, close off
917
   all the lexical contexts for that file (creating struct block's for
918
   them), then make the struct symtab for that file and put it in the
919
   list of all such.
920
 
921
   END_ADDR is the address of the end of the file's text.  SECTION is
922
   the section number (in objfile->section_offsets) of the blockvector
923
   and linetable.
924
 
925
   Note that it is possible for end_symtab() to return NULL.  In
926
   particular, for the DWARF case at least, it will return NULL when
927
   it finds a compilation unit that has exactly one DIE, a
928
   TAG_compile_unit DIE.  This can happen when we link in an object
929
   file that was compiled from an empty source file.  Returning NULL
930
   is probably not the correct thing to do, because then gdb will
931
   never know about this empty file (FIXME). */
932
 
933
struct symtab *
934
end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
935
{
936
  struct symtab *symtab = NULL;
937
  struct blockvector *blockvector;
938
  struct subfile *subfile;
939
  struct context_stack *cstk;
940
  struct subfile *nextsub;
941
 
942
  /* Finish the lexical context of the last function in the file; pop
943
     the context stack.  */
944
 
945
  if (context_stack_depth > 0)
946
    {
947
      cstk = pop_context ();
948
      /* Make a block for the local symbols within.  */
949
      finish_block (cstk->name, &local_symbols, cstk->old_blocks,
950
                    cstk->start_addr, end_addr, objfile);
951
 
952
      if (context_stack_depth > 0)
953
        {
954
          /* This is said to happen with SCO.  The old coffread.c
955
             code simply emptied the context stack, so we do the
956
             same.  FIXME: Find out why it is happening.  This is not
957
             believed to happen in most cases (even for coffread.c);
958
             it used to be an abort().  */
959
          complaint (&symfile_complaints,
960
                     _("Context stack not empty in end_symtab"));
961
          context_stack_depth = 0;
962
        }
963
    }
964
 
965
  /* Reordered executables may have out of order pending blocks; if
966
     OBJF_REORDERED is true, then sort the pending blocks.  */
967
  if ((objfile->flags & OBJF_REORDERED) && pending_blocks)
968
    {
969
      unsigned count = 0;
970
      struct pending_block *pb;
971
      struct block **barray, **bp;
972
      struct cleanup *back_to;
973
 
974
      for (pb = pending_blocks; pb != NULL; pb = pb->next)
975
        count++;
976
 
977
      barray = xmalloc (sizeof (*barray) * count);
978
      back_to = make_cleanup (xfree, barray);
979
 
980
      bp = barray;
981
      for (pb = pending_blocks; pb != NULL; pb = pb->next)
982
        *bp++ = pb->block;
983
 
984
      qsort (barray, count, sizeof (*barray), block_compar);
985
 
986
      bp = barray;
987
      for (pb = pending_blocks; pb != NULL; pb = pb->next)
988
        pb->block = *bp++;
989
 
990
      do_cleanups (back_to);
991
    }
992
 
993
  /* Cleanup any undefined types that have been left hanging around
994
     (this needs to be done before the finish_blocks so that
995
     file_symbols is still good).
996
 
997
     Both cleanup_undefined_types and finish_global_stabs are stabs
998
     specific, but harmless for other symbol readers, since on gdb
999
     startup or when finished reading stabs, the state is set so these
1000
     are no-ops.  FIXME: Is this handled right in case of QUIT?  Can
1001
     we make this cleaner?  */
1002
 
1003
  cleanup_undefined_types (objfile);
1004
  finish_global_stabs (objfile);
1005
 
1006
  if (pending_blocks == NULL
1007
      && file_symbols == NULL
1008
      && global_symbols == NULL
1009
      && have_line_numbers == 0
1010
      && pending_macros == NULL)
1011
    {
1012
      /* Ignore symtabs that have no functions with real debugging
1013
         info.  */
1014
      blockvector = NULL;
1015
    }
1016
  else
1017
    {
1018
      /* Define the STATIC_BLOCK & GLOBAL_BLOCK, and build the
1019
         blockvector.  */
1020
      finish_block (0, &file_symbols, 0, last_source_start_addr, end_addr,
1021
                    objfile);
1022
      finish_block (0, &global_symbols, 0, last_source_start_addr, end_addr,
1023
                    objfile);
1024
      blockvector = make_blockvector (objfile);
1025
    }
1026
 
1027
  /* Read the line table if it has to be read separately.  */
1028
  if (objfile->sf->sym_read_linetable != NULL)
1029
    objfile->sf->sym_read_linetable ();
1030
 
1031
  /* Handle the case where the debug info specifies a different path
1032
     for the main source file.  It can cause us to lose track of its
1033
     line number information.  */
1034
  watch_main_source_file_lossage ();
1035
 
1036
  /* Now create the symtab objects proper, one for each subfile.  */
1037
  /* (The main file is the last one on the chain.)  */
1038
 
1039
  for (subfile = subfiles; subfile; subfile = nextsub)
1040
    {
1041
      int linetablesize = 0;
1042
      symtab = NULL;
1043
 
1044
      /* If we have blocks of symbols, make a symtab. Otherwise, just
1045
         ignore this file and any line number info in it.  */
1046
      if (blockvector)
1047
        {
1048
          if (subfile->line_vector)
1049
            {
1050
              linetablesize = sizeof (struct linetable) +
1051
                subfile->line_vector->nitems * sizeof (struct linetable_entry);
1052
 
1053
              /* Like the pending blocks, the line table may be
1054
                 scrambled in reordered executables.  Sort it if
1055
                 OBJF_REORDERED is true.  */
1056
              if (objfile->flags & OBJF_REORDERED)
1057
                qsort (subfile->line_vector->item,
1058
                       subfile->line_vector->nitems,
1059
                     sizeof (struct linetable_entry), compare_line_numbers);
1060
            }
1061
 
1062
          /* Now, allocate a symbol table.  */
1063
          if (subfile->symtab == NULL)
1064
            symtab = allocate_symtab (subfile->name, objfile);
1065
          else
1066
            symtab = subfile->symtab;
1067
 
1068
          /* Fill in its components.  */
1069
          symtab->blockvector = blockvector;
1070
          symtab->macro_table = pending_macros;
1071
          if (subfile->line_vector)
1072
            {
1073
              /* Reallocate the line table on the symbol obstack */
1074
              symtab->linetable = (struct linetable *)
1075
                obstack_alloc (&objfile->objfile_obstack, linetablesize);
1076
              memcpy (symtab->linetable, subfile->line_vector, linetablesize);
1077
            }
1078
          else
1079
            {
1080
              symtab->linetable = NULL;
1081
            }
1082
          symtab->block_line_section = section;
1083
          if (subfile->dirname)
1084
            {
1085
              /* Reallocate the dirname on the symbol obstack */
1086
              symtab->dirname = (char *)
1087
                obstack_alloc (&objfile->objfile_obstack,
1088
                               strlen (subfile->dirname) + 1);
1089
              strcpy (symtab->dirname, subfile->dirname);
1090
            }
1091
          else
1092
            {
1093
              symtab->dirname = NULL;
1094
            }
1095
          symtab->free_code = free_linetable;
1096
          symtab->free_func = NULL;
1097
 
1098
          /* Use whatever language we have been using for this
1099
             subfile, not the one that was deduced in allocate_symtab
1100
             from the filename.  We already did our own deducing when
1101
             we created the subfile, and we may have altered our
1102
             opinion of what language it is from things we found in
1103
             the symbols. */
1104
          symtab->language = subfile->language;
1105
 
1106
          /* Save the debug format string (if any) in the symtab */
1107
          if (subfile->debugformat != NULL)
1108
            {
1109
              symtab->debugformat = obsavestring (subfile->debugformat,
1110
                                              strlen (subfile->debugformat),
1111
                                                  &objfile->objfile_obstack);
1112
            }
1113
 
1114
          /* Similarly for the producer.  */
1115
          if (subfile->producer != NULL)
1116
            symtab->producer = obsavestring (subfile->producer,
1117
                                             strlen (subfile->producer),
1118
                                             &objfile->objfile_obstack);
1119
 
1120
          /* All symtabs for the main file and the subfiles share a
1121
             blockvector, so we need to clear primary for everything
1122
             but the main file.  */
1123
 
1124
          symtab->primary = 0;
1125
        }
1126
      else
1127
        {
1128
          if (subfile->symtab)
1129
            {
1130
              /* Since we are ignoring that subfile, we also need
1131
                 to unlink the associated empty symtab that we created.
1132
                 Otherwise, we can into trouble because various parts
1133
                 such as the block-vector are uninitialized whereas
1134
                 the rest of the code assumes that they are.
1135
 
1136
                 We can only unlink the symtab because it was allocated
1137
                 on the objfile obstack.  */
1138
              struct symtab *s;
1139
 
1140
              if (objfile->symtabs == subfile->symtab)
1141
                objfile->symtabs = objfile->symtabs->next;
1142
              else
1143
                ALL_OBJFILE_SYMTABS (objfile, s)
1144
                  if (s->next == subfile->symtab)
1145
                    {
1146
                      s->next = s->next->next;
1147
                      break;
1148
                    }
1149
              subfile->symtab = NULL;
1150
            }
1151
        }
1152
      if (subfile->name != NULL)
1153
        {
1154
          xfree ((void *) subfile->name);
1155
        }
1156
      if (subfile->dirname != NULL)
1157
        {
1158
          xfree ((void *) subfile->dirname);
1159
        }
1160
      if (subfile->line_vector != NULL)
1161
        {
1162
          xfree ((void *) subfile->line_vector);
1163
        }
1164
      if (subfile->debugformat != NULL)
1165
        {
1166
          xfree ((void *) subfile->debugformat);
1167
        }
1168
      if (subfile->producer != NULL)
1169
        xfree (subfile->producer);
1170
 
1171
      nextsub = subfile->next;
1172
      xfree ((void *) subfile);
1173
    }
1174
 
1175
  /* Set this for the main source file.  */
1176
  if (symtab)
1177
    {
1178
      symtab->primary = 1;
1179
    }
1180
 
1181
  /* Default any symbols without a specified symtab to the primary
1182
     symtab.  */
1183
  if (blockvector)
1184
    {
1185
      int block_i;
1186
 
1187
      for (block_i = 0; block_i < BLOCKVECTOR_NBLOCKS (blockvector); block_i++)
1188
        {
1189
          struct block *block = BLOCKVECTOR_BLOCK (blockvector, block_i);
1190
          struct symbol *sym;
1191
          struct dict_iterator iter;
1192
 
1193
          /* Inlined functions may have symbols not in the global or static
1194
             symbol lists.  */
1195
          if (BLOCK_FUNCTION (block) != NULL)
1196
            if (SYMBOL_SYMTAB (BLOCK_FUNCTION (block)) == NULL)
1197
              SYMBOL_SYMTAB (BLOCK_FUNCTION (block)) = symtab;
1198
 
1199
          for (sym = dict_iterator_first (BLOCK_DICT (block), &iter);
1200
               sym != NULL;
1201
               sym = dict_iterator_next (&iter))
1202
            if (SYMBOL_SYMTAB (sym) == NULL)
1203
              SYMBOL_SYMTAB (sym) = symtab;
1204
        }
1205
    }
1206
 
1207
  last_source_file = NULL;
1208
  current_subfile = NULL;
1209
  pending_macros = NULL;
1210
  if (pending_addrmap)
1211
    {
1212
      obstack_free (&pending_addrmap_obstack, NULL);
1213
      pending_addrmap = NULL;
1214
    }
1215
 
1216
  return symtab;
1217
}
1218
 
1219
/* Push a context block.  Args are an identifying nesting level
1220
   (checkable when you pop it), and the starting PC address of this
1221
   context.  */
1222
 
1223
struct context_stack *
1224
push_context (int desc, CORE_ADDR valu)
1225
{
1226
  struct context_stack *new;
1227
 
1228
  if (context_stack_depth == context_stack_size)
1229
    {
1230
      context_stack_size *= 2;
1231
      context_stack = (struct context_stack *)
1232
        xrealloc ((char *) context_stack,
1233
                  (context_stack_size * sizeof (struct context_stack)));
1234
    }
1235
 
1236
  new = &context_stack[context_stack_depth++];
1237
  new->depth = desc;
1238
  new->locals = local_symbols;
1239
  new->params = param_symbols;
1240
  new->old_blocks = pending_blocks;
1241
  new->start_addr = valu;
1242
  new->using_directives = using_directives;
1243
  new->name = NULL;
1244
 
1245
  local_symbols = NULL;
1246
  param_symbols = NULL;
1247
  using_directives = NULL;
1248
 
1249
  return new;
1250
}
1251
 
1252
/* Pop a context block.  Returns the address of the context block just
1253
   popped. */
1254
 
1255
struct context_stack *
1256
pop_context (void)
1257
{
1258
  gdb_assert (context_stack_depth > 0);
1259
  return (&context_stack[--context_stack_depth]);
1260
}
1261
 
1262
 
1263
 
1264
/* Compute a small integer hash code for the given name. */
1265
 
1266
int
1267
hashname (char *name)
1268
{
1269
    return (hash(name,strlen(name)) % HASHSIZE);
1270
}
1271
 
1272
 
1273
void
1274
record_debugformat (char *format)
1275
{
1276
  current_subfile->debugformat = xstrdup (format);
1277
}
1278
 
1279
void
1280
record_producer (const char *producer)
1281
{
1282
  /* The producer is not always provided in the debugging info.
1283
     Do nothing if PRODUCER is NULL.  */
1284
  if (producer == NULL)
1285
    return;
1286
 
1287
  current_subfile->producer = xstrdup (producer);
1288
}
1289
 
1290
/* Merge the first symbol list SRCLIST into the second symbol list
1291
   TARGETLIST by repeated calls to add_symbol_to_list().  This
1292
   procedure "frees" each link of SRCLIST by adding it to the
1293
   free_pendings list.  Caller must set SRCLIST to a null list after
1294
   calling this function.
1295
 
1296
   Void return. */
1297
 
1298
void
1299
merge_symbol_lists (struct pending **srclist, struct pending **targetlist)
1300
{
1301
  int i;
1302
 
1303
  if (!srclist || !*srclist)
1304
    return;
1305
 
1306
  /* Merge in elements from current link.  */
1307
  for (i = 0; i < (*srclist)->nsyms; i++)
1308
    add_symbol_to_list ((*srclist)->symbol[i], targetlist);
1309
 
1310
  /* Recurse on next.  */
1311
  merge_symbol_lists (&(*srclist)->next, targetlist);
1312
 
1313
  /* "Free" the current link.  */
1314
  (*srclist)->next = free_pendings;
1315
  free_pendings = (*srclist);
1316
}
1317
 
1318
/* Initialize anything that needs initializing when starting to read a
1319
   fresh piece of a symbol file, e.g. reading in the stuff
1320
   corresponding to a psymtab.  */
1321
 
1322
void
1323
buildsym_init (void)
1324
{
1325
  free_pendings = NULL;
1326
  file_symbols = NULL;
1327
  global_symbols = NULL;
1328
  pending_blocks = NULL;
1329
  pending_macros = NULL;
1330
 
1331
  /* We shouldn't have any address map at this point.  */
1332
  gdb_assert (! pending_addrmap);
1333
  pending_addrmap_interesting = 0;
1334
}
1335
 
1336
/* Initialize anything that needs initializing when a completely new
1337
   symbol file is specified (not just adding some symbols from another
1338
   file, e.g. a shared library).  */
1339
 
1340
void
1341
buildsym_new_init (void)
1342
{
1343
  buildsym_init ();
1344
}

powered by: WebSVN 2.1.0

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