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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gdb-7.2/] [gdb/] [objfiles.c] - Blame information for rev 853

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

Line No. Rev Author Line
1 330 jeremybenn
/* GDB routines for manipulating objfiles.
2
 
3
   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
4
   2002, 2003, 2004, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
5
 
6
   Contributed by Cygnus Support, using pieces from other GDB modules.
7
 
8
   This file is part of GDB.
9
 
10
   This program is free software; you can redistribute it and/or modify
11
   it under the terms of the GNU General Public License as published by
12
   the Free Software Foundation; either version 3 of the License, or
13
   (at your option) any later version.
14
 
15
   This program is distributed in the hope that it will be useful,
16
   but WITHOUT ANY WARRANTY; without even the implied warranty of
17
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
   GNU General Public License for more details.
19
 
20
   You should have received a copy of the GNU General Public License
21
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22
 
23
/* This file contains support routines for creating, manipulating, and
24
   destroying objfile structures. */
25
 
26
#include "defs.h"
27
#include "bfd.h"                /* Binary File Description */
28
#include "symtab.h"
29
#include "symfile.h"
30
#include "objfiles.h"
31
#include "gdb-stabs.h"
32
#include "target.h"
33
#include "bcache.h"
34
#include "mdebugread.h"
35
#include "expression.h"
36
#include "parser-defs.h"
37
 
38
#include "gdb_assert.h"
39
#include <sys/types.h>
40
#include "gdb_stat.h"
41
#include <fcntl.h>
42
#include "gdb_obstack.h"
43
#include "gdb_string.h"
44
#include "hashtab.h"
45
 
46
#include "breakpoint.h"
47
#include "block.h"
48
#include "dictionary.h"
49
#include "source.h"
50
#include "addrmap.h"
51
#include "arch-utils.h"
52
#include "exec.h"
53
#include "observer.h"
54
#include "complaints.h"
55
#include "psymtab.h"
56
#include "solist.h"
57
 
58
/* Prototypes for local functions */
59
 
60
static void objfile_alloc_data (struct objfile *objfile);
61
static void objfile_free_data (struct objfile *objfile);
62
 
63
/* Externally visible variables that are owned by this module.
64
   See declarations in objfile.h for more info. */
65
 
66
struct objfile *current_objfile;        /* For symbol file being read in */
67
struct objfile *rt_common_objfile;      /* For runtime common symbols */
68
 
69
struct objfile_pspace_info
70
{
71
  int objfiles_changed_p;
72
  struct obj_section **sections;
73
  int num_sections;
74
};
75
 
76
/* Per-program-space data key.  */
77
static const struct program_space_data *objfiles_pspace_data;
78
 
79
static void
80
objfiles_pspace_data_cleanup (struct program_space *pspace, void *arg)
81
{
82
  struct objfile_pspace_info *info;
83
 
84
  info = program_space_data (pspace, objfiles_pspace_data);
85
  if (info != NULL)
86
    {
87
      xfree (info->sections);
88
      xfree (info);
89
    }
90
}
91
 
92
/* Get the current svr4 data.  If none is found yet, add it now.  This
93
   function always returns a valid object.  */
94
 
95
static struct objfile_pspace_info *
96
get_objfile_pspace_data (struct program_space *pspace)
97
{
98
  struct objfile_pspace_info *info;
99
 
100
  info = program_space_data (pspace, objfiles_pspace_data);
101
  if (info == NULL)
102
    {
103
      info = XZALLOC (struct objfile_pspace_info);
104
      set_program_space_data (pspace, objfiles_pspace_data, info);
105
    }
106
 
107
  return info;
108
}
109
 
110
/* Records whether any objfiles appeared or disappeared since we last updated
111
   address to obj section map.  */
112
 
113
/* Locate all mappable sections of a BFD file.
114
   objfile_p_char is a char * to get it through
115
   bfd_map_over_sections; we cast it back to its proper type.  */
116
 
117
/* Called via bfd_map_over_sections to build up the section table that
118
   the objfile references.  The objfile contains pointers to the start
119
   of the table (objfile->sections) and to the first location after
120
   the end of the table (objfile->sections_end). */
121
 
122
static void
123
add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
124
                         void *objfile_p_char)
125
{
126
  struct objfile *objfile = (struct objfile *) objfile_p_char;
127
  struct obj_section section;
128
  flagword aflag;
129
 
130
  aflag = bfd_get_section_flags (abfd, asect);
131
 
132
  if (!(aflag & SEC_ALLOC))
133
    return;
134
 
135
  if (0 == bfd_section_size (abfd, asect))
136
    return;
137
  section.objfile = objfile;
138
  section.the_bfd_section = asect;
139
  section.ovly_mapped = 0;
140
  obstack_grow (&objfile->objfile_obstack, (char *) &section, sizeof (section));
141
  objfile->sections_end
142
    = (struct obj_section *) (((size_t) objfile->sections_end) + 1);
143
}
144
 
145
/* Builds a section table for OBJFILE.
146
   Returns 0 if OK, 1 on error (in which case bfd_error contains the
147
   error).
148
 
149
   Note that while we are building the table, which goes into the
150
   psymbol obstack, we hijack the sections_end pointer to instead hold
151
   a count of the number of sections.  When bfd_map_over_sections
152
   returns, this count is used to compute the pointer to the end of
153
   the sections table, which then overwrites the count.
154
 
155
   Also note that the OFFSET and OVLY_MAPPED in each table entry
156
   are initialized to zero.
157
 
158
   Also note that if anything else writes to the psymbol obstack while
159
   we are building the table, we're pretty much hosed. */
160
 
161
int
162
build_objfile_section_table (struct objfile *objfile)
163
{
164
  /* objfile->sections can be already set when reading a mapped symbol
165
     file.  I believe that we do need to rebuild the section table in
166
     this case (we rebuild other things derived from the bfd), but we
167
     can't free the old one (it's in the objfile_obstack).  So we just
168
     waste some memory.  */
169
 
170
  objfile->sections_end = 0;
171
  bfd_map_over_sections (objfile->obfd,
172
                         add_to_objfile_sections, (void *) objfile);
173
  objfile->sections = obstack_finish (&objfile->objfile_obstack);
174
  objfile->sections_end = objfile->sections + (size_t) objfile->sections_end;
175
  return (0);
176
}
177
 
178
/* Given a pointer to an initialized bfd (ABFD) and some flag bits
179
   allocate a new objfile struct, fill it in as best we can, link it
180
   into the list of all known objfiles, and return a pointer to the
181
   new objfile struct.
182
 
183
   The FLAGS word contains various bits (OBJF_*) that can be taken as
184
   requests for specific operations.  Other bits like OBJF_SHARED are
185
   simply copied through to the new objfile flags member. */
186
 
187
/* NOTE: carlton/2003-02-04: This function is called with args NULL, 0
188
   by jv-lang.c, to create an artificial objfile used to hold
189
   information about dynamically-loaded Java classes.  Unfortunately,
190
   that branch of this function doesn't get tested very frequently, so
191
   it's prone to breakage.  (E.g. at one time the name was set to NULL
192
   in that situation, which broke a loop over all names in the dynamic
193
   library loader.)  If you change this function, please try to leave
194
   things in a consistent state even if abfd is NULL.  */
195
 
196
struct objfile *
197
allocate_objfile (bfd *abfd, int flags)
198
{
199
  struct objfile *objfile;
200
 
201
  objfile = (struct objfile *) xzalloc (sizeof (struct objfile));
202
  objfile->psymbol_cache = bcache_xmalloc ();
203
  objfile->macro_cache = bcache_xmalloc ();
204
  objfile->filename_cache = bcache_xmalloc ();
205
  /* We could use obstack_specify_allocation here instead, but
206
     gdb_obstack.h specifies the alloc/dealloc functions.  */
207
  obstack_init (&objfile->objfile_obstack);
208
  terminate_minimal_symbol_table (objfile);
209
 
210
  objfile_alloc_data (objfile);
211
 
212
  /* Update the per-objfile information that comes from the bfd, ensuring
213
     that any data that is reference is saved in the per-objfile data
214
     region. */
215
 
216
  objfile->obfd = gdb_bfd_ref (abfd);
217
  if (objfile->name != NULL)
218
    {
219
      xfree (objfile->name);
220
    }
221
  if (abfd != NULL)
222
    {
223
      /* Look up the gdbarch associated with the BFD.  */
224
      objfile->gdbarch = gdbarch_from_bfd (abfd);
225
 
226
      objfile->name = xstrdup (bfd_get_filename (abfd));
227
      objfile->mtime = bfd_get_mtime (abfd);
228
 
229
      /* Build section table.  */
230
 
231
      if (build_objfile_section_table (objfile))
232
        {
233
          error (_("Can't find the file sections in `%s': %s"),
234
                 objfile->name, bfd_errmsg (bfd_get_error ()));
235
        }
236
    }
237
  else
238
    {
239
      objfile->name = xstrdup ("<<anonymous objfile>>");
240
    }
241
 
242
  objfile->pspace = current_program_space;
243
 
244
  /* Initialize the section indexes for this objfile, so that we can
245
     later detect if they are used w/o being properly assigned to. */
246
 
247
  objfile->sect_index_text = -1;
248
  objfile->sect_index_data = -1;
249
  objfile->sect_index_bss = -1;
250
  objfile->sect_index_rodata = -1;
251
 
252
  /* We don't yet have a C++-specific namespace symtab.  */
253
 
254
  objfile->cp_namespace_symtab = NULL;
255
 
256
  /* Add this file onto the tail of the linked list of other such files. */
257
 
258
  objfile->next = NULL;
259
  if (object_files == NULL)
260
    object_files = objfile;
261
  else
262
    {
263
      struct objfile *last_one;
264
 
265
      for (last_one = object_files;
266
           last_one->next;
267
           last_one = last_one->next);
268
      last_one->next = objfile;
269
    }
270
 
271
  /* Save passed in flag bits. */
272
  objfile->flags |= flags;
273
 
274
  /* Rebuild section map next time we need it.  */
275
  get_objfile_pspace_data (objfile->pspace)->objfiles_changed_p = 1;
276
 
277
  return objfile;
278
}
279
 
280
/* Retrieve the gdbarch associated with OBJFILE.  */
281
struct gdbarch *
282
get_objfile_arch (struct objfile *objfile)
283
{
284
  return objfile->gdbarch;
285
}
286
 
287
/* Initialize entry point information for this objfile. */
288
 
289
void
290
init_entry_point_info (struct objfile *objfile)
291
{
292
  /* Save startup file's range of PC addresses to help blockframe.c
293
     decide where the bottom of the stack is.  */
294
 
295
  if (bfd_get_file_flags (objfile->obfd) & EXEC_P)
296
    {
297
      /* Executable file -- record its entry point so we'll recognize
298
         the startup file because it contains the entry point.  */
299
      objfile->ei.entry_point = bfd_get_start_address (objfile->obfd);
300
      objfile->ei.entry_point_p = 1;
301
    }
302
  else if (bfd_get_file_flags (objfile->obfd) & DYNAMIC
303
           && bfd_get_start_address (objfile->obfd) != 0)
304
    {
305
      /* Some shared libraries may have entry points set and be
306
         runnable.  There's no clear way to indicate this, so just check
307
         for values other than zero.  */
308
      objfile->ei.entry_point = bfd_get_start_address (objfile->obfd);
309
      objfile->ei.entry_point_p = 1;
310
    }
311
  else
312
    {
313
      /* Examination of non-executable.o files.  Short-circuit this stuff.  */
314
      objfile->ei.entry_point_p = 0;
315
    }
316
}
317
 
318
/* If there is a valid and known entry point, function fills *ENTRY_P with it
319
   and returns non-zero; otherwise it returns zero.  */
320
 
321
int
322
entry_point_address_query (CORE_ADDR *entry_p)
323
{
324
  struct gdbarch *gdbarch;
325
  CORE_ADDR entry_point;
326
 
327
  if (symfile_objfile == NULL || !symfile_objfile->ei.entry_point_p)
328
    return 0;
329
 
330
  gdbarch = get_objfile_arch (symfile_objfile);
331
 
332
  entry_point = symfile_objfile->ei.entry_point;
333
 
334
  /* Make certain that the address points at real code, and not a
335
     function descriptor.  */
336
  entry_point = gdbarch_convert_from_func_ptr_addr (gdbarch, entry_point,
337
                                                    &current_target);
338
 
339
  /* Remove any ISA markers, so that this matches entries in the
340
     symbol table.  */
341
  entry_point = gdbarch_addr_bits_remove (gdbarch, entry_point);
342
 
343
  *entry_p = entry_point;
344
  return 1;
345
}
346
 
347
/* Get current entry point address.  Call error if it is not known.  */
348
 
349
CORE_ADDR
350
entry_point_address (void)
351
{
352
  CORE_ADDR retval;
353
 
354
  if (!entry_point_address_query (&retval))
355
    error (_("Entry point address is not known."));
356
 
357
  return retval;
358
}
359
 
360
/* Create the terminating entry of OBJFILE's minimal symbol table.
361
   If OBJFILE->msymbols is zero, allocate a single entry from
362
   OBJFILE->objfile_obstack; otherwise, just initialize
363
   OBJFILE->msymbols[OBJFILE->minimal_symbol_count].  */
364
void
365
terminate_minimal_symbol_table (struct objfile *objfile)
366
{
367
  if (! objfile->msymbols)
368
    objfile->msymbols = ((struct minimal_symbol *)
369
                         obstack_alloc (&objfile->objfile_obstack,
370
                                        sizeof (objfile->msymbols[0])));
371
 
372
  {
373
    struct minimal_symbol *m
374
      = &objfile->msymbols[objfile->minimal_symbol_count];
375
 
376
    memset (m, 0, sizeof (*m));
377
    /* Don't rely on these enumeration values being 0's.  */
378
    MSYMBOL_TYPE (m) = mst_unknown;
379
    SYMBOL_INIT_LANGUAGE_SPECIFIC (m, language_unknown);
380
  }
381
}
382
 
383
/* Iterator on PARENT and every separate debug objfile of PARENT.
384
   The usage pattern is:
385
     for (objfile = parent;
386
          objfile;
387
          objfile = objfile_separate_debug_iterate (parent, objfile))
388
       ...
389
*/
390
 
391
struct objfile *
392
objfile_separate_debug_iterate (const struct objfile *parent,
393
                                const struct objfile *objfile)
394
{
395
  struct objfile *res;
396
 
397
  /* If any, return the first child.  */
398
  res = objfile->separate_debug_objfile;
399
  if (res)
400
    return res;
401
 
402
  /* Common case where there is no separate debug objfile.  */
403
  if (objfile == parent)
404
    return NULL;
405
 
406
  /* Return the brother if any.  Note that we don't iterate on brothers of
407
     the parents.  */
408
  res = objfile->separate_debug_objfile_link;
409
  if (res)
410
    return res;
411
 
412
  for (res = objfile->separate_debug_objfile_backlink;
413
       res != parent;
414
       res = res->separate_debug_objfile_backlink)
415
    {
416
      gdb_assert (res != NULL);
417
      if (res->separate_debug_objfile_link)
418
        return res->separate_debug_objfile_link;
419
    }
420
  return NULL;
421
}
422
 
423
/* Put one object file before a specified on in the global list.
424
   This can be used to make sure an object file is destroyed before
425
   another when using ALL_OBJFILES_SAFE to free all objfiles. */
426
void
427
put_objfile_before (struct objfile *objfile, struct objfile *before_this)
428
{
429
  struct objfile **objp;
430
 
431
  unlink_objfile (objfile);
432
 
433
  for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
434
    {
435
      if (*objp == before_this)
436
        {
437
          objfile->next = *objp;
438
          *objp = objfile;
439
          return;
440
        }
441
    }
442
 
443
  internal_error (__FILE__, __LINE__,
444
                  _("put_objfile_before: before objfile not in list"));
445
}
446
 
447
/* Put OBJFILE at the front of the list.  */
448
 
449
void
450
objfile_to_front (struct objfile *objfile)
451
{
452
  struct objfile **objp;
453
  for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
454
    {
455
      if (*objp == objfile)
456
        {
457
          /* Unhook it from where it is.  */
458
          *objp = objfile->next;
459
          /* Put it in the front.  */
460
          objfile->next = object_files;
461
          object_files = objfile;
462
          break;
463
        }
464
    }
465
}
466
 
467
/* Unlink OBJFILE from the list of known objfiles, if it is found in the
468
   list.
469
 
470
   It is not a bug, or error, to call this function if OBJFILE is not known
471
   to be in the current list.  This is done in the case of mapped objfiles,
472
   for example, just to ensure that the mapped objfile doesn't appear twice
473
   in the list.  Since the list is threaded, linking in a mapped objfile
474
   twice would create a circular list.
475
 
476
   If OBJFILE turns out to be in the list, we zap it's NEXT pointer after
477
   unlinking it, just to ensure that we have completely severed any linkages
478
   between the OBJFILE and the list. */
479
 
480
void
481
unlink_objfile (struct objfile *objfile)
482
{
483
  struct objfile **objpp;
484
 
485
  for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next))
486
    {
487
      if (*objpp == objfile)
488
        {
489
          *objpp = (*objpp)->next;
490
          objfile->next = NULL;
491
          return;
492
        }
493
    }
494
 
495
  internal_error (__FILE__, __LINE__,
496
                  _("unlink_objfile: objfile already unlinked"));
497
}
498
 
499
/* Add OBJFILE as a separate debug objfile of PARENT.  */
500
 
501
void
502
add_separate_debug_objfile (struct objfile *objfile, struct objfile *parent)
503
{
504
  gdb_assert (objfile && parent);
505
 
506
  /* Must not be already in a list.  */
507
  gdb_assert (objfile->separate_debug_objfile_backlink == NULL);
508
  gdb_assert (objfile->separate_debug_objfile_link == NULL);
509
 
510
  objfile->separate_debug_objfile_backlink = parent;
511
  objfile->separate_debug_objfile_link = parent->separate_debug_objfile;
512
  parent->separate_debug_objfile = objfile;
513
 
514
  /* Put the separate debug object before the normal one, this is so that
515
     usage of the ALL_OBJFILES_SAFE macro will stay safe. */
516
  put_objfile_before (objfile, parent);
517
}
518
 
519
/* Free all separate debug objfile of OBJFILE, but don't free OBJFILE
520
   itself.  */
521
 
522
void
523
free_objfile_separate_debug (struct objfile *objfile)
524
{
525
  struct objfile *child;
526
 
527
  for (child = objfile->separate_debug_objfile; child;)
528
    {
529
      struct objfile *next_child = child->separate_debug_objfile_link;
530
      free_objfile (child);
531
      child = next_child;
532
    }
533
}
534
 
535
/* Destroy an objfile and all the symtabs and psymtabs under it.  Note
536
   that as much as possible is allocated on the objfile_obstack
537
   so that the memory can be efficiently freed.
538
 
539
   Things which we do NOT free because they are not in malloc'd memory
540
   or not in memory specific to the objfile include:
541
 
542
   objfile -> sf
543
 
544
   FIXME:  If the objfile is using reusable symbol information (via mmalloc),
545
   then we need to take into account the fact that more than one process
546
   may be using the symbol information at the same time (when mmalloc is
547
   extended to support cooperative locking).  When more than one process
548
   is using the mapped symbol info, we need to be more careful about when
549
   we free objects in the reusable area. */
550
 
551
void
552
free_objfile (struct objfile *objfile)
553
{
554
  /* Free all separate debug objfiles.  */
555
  free_objfile_separate_debug (objfile);
556
 
557
  if (objfile->separate_debug_objfile_backlink)
558
    {
559
      /* We freed the separate debug file, make sure the base objfile
560
         doesn't reference it.  */
561
      struct objfile *child;
562
 
563
      child = objfile->separate_debug_objfile_backlink->separate_debug_objfile;
564
 
565
      if (child == objfile)
566
        {
567
          /* OBJFILE is the first child.  */
568
          objfile->separate_debug_objfile_backlink->separate_debug_objfile =
569
            objfile->separate_debug_objfile_link;
570
        }
571
      else
572
        {
573
          /* Find OBJFILE in the list.  */
574
          while (1)
575
            {
576
              if (child->separate_debug_objfile_link == objfile)
577
                {
578
                  child->separate_debug_objfile_link =
579
                    objfile->separate_debug_objfile_link;
580
                  break;
581
                }
582
              child = child->separate_debug_objfile_link;
583
              gdb_assert (child);
584
            }
585
        }
586
    }
587
 
588
  /* Remove any references to this objfile in the global value
589
     lists.  */
590
  preserve_values (objfile);
591
 
592
  /* First do any symbol file specific actions required when we are
593
     finished with a particular symbol file.  Note that if the objfile
594
     is using reusable symbol information (via mmalloc) then each of
595
     these routines is responsible for doing the correct thing, either
596
     freeing things which are valid only during this particular gdb
597
     execution, or leaving them to be reused during the next one. */
598
 
599
  if (objfile->sf != NULL)
600
    {
601
      (*objfile->sf->sym_finish) (objfile);
602
    }
603
 
604
  /* Discard any data modules have associated with the objfile.  */
605
  objfile_free_data (objfile);
606
 
607
  gdb_bfd_unref (objfile->obfd);
608
 
609
  /* Remove it from the chain of all objfiles. */
610
 
611
  unlink_objfile (objfile);
612
 
613
  if (objfile == symfile_objfile)
614
    symfile_objfile = NULL;
615
 
616
  if (objfile == rt_common_objfile)
617
    rt_common_objfile = NULL;
618
 
619
  /* Before the symbol table code was redone to make it easier to
620
     selectively load and remove information particular to a specific
621
     linkage unit, gdb used to do these things whenever the monolithic
622
     symbol table was blown away.  How much still needs to be done
623
     is unknown, but we play it safe for now and keep each action until
624
     it is shown to be no longer needed. */
625
 
626
  /* Not all our callers call clear_symtab_users (objfile_purge_solibs,
627
     for example), so we need to call this here.  */
628
  clear_pc_function_cache ();
629
 
630
  /* Clear globals which might have pointed into a removed objfile.
631
     FIXME: It's not clear which of these are supposed to persist
632
     between expressions and which ought to be reset each time.  */
633
  expression_context_block = NULL;
634
  innermost_block = NULL;
635
 
636
  /* Check to see if the current_source_symtab belongs to this objfile,
637
     and if so, call clear_current_source_symtab_and_line. */
638
 
639
  {
640
    struct symtab_and_line cursal = get_current_source_symtab_and_line ();
641
    struct symtab *s;
642
 
643
    ALL_OBJFILE_SYMTABS (objfile, s)
644
      {
645
        if (s == cursal.symtab)
646
          clear_current_source_symtab_and_line ();
647
      }
648
  }
649
 
650
  /* The last thing we do is free the objfile struct itself. */
651
 
652
  if (objfile->name != NULL)
653
    {
654
      xfree (objfile->name);
655
    }
656
  if (objfile->global_psymbols.list)
657
    xfree (objfile->global_psymbols.list);
658
  if (objfile->static_psymbols.list)
659
    xfree (objfile->static_psymbols.list);
660
  /* Free the obstacks for non-reusable objfiles */
661
  bcache_xfree (objfile->psymbol_cache);
662
  bcache_xfree (objfile->macro_cache);
663
  bcache_xfree (objfile->filename_cache);
664
  if (objfile->demangled_names_hash)
665
    htab_delete (objfile->demangled_names_hash);
666
  obstack_free (&objfile->objfile_obstack, 0);
667
 
668
  /* Rebuild section map next time we need it.  */
669
  get_objfile_pspace_data (objfile->pspace)->objfiles_changed_p = 1;
670
 
671
  xfree (objfile);
672
}
673
 
674
static void
675
do_free_objfile_cleanup (void *obj)
676
{
677
  free_objfile (obj);
678
}
679
 
680
struct cleanup *
681
make_cleanup_free_objfile (struct objfile *obj)
682
{
683
  return make_cleanup (do_free_objfile_cleanup, obj);
684
}
685
 
686
/* Free all the object files at once and clean up their users.  */
687
 
688
void
689
free_all_objfiles (void)
690
{
691
  struct objfile *objfile, *temp;
692
  struct so_list *so;
693
 
694
  /* Any objfile referencewould become stale.  */
695
  for (so = master_so_list (); so; so = so->next)
696
    gdb_assert (so->objfile == NULL);
697
 
698
  ALL_OBJFILES_SAFE (objfile, temp)
699
  {
700
    free_objfile (objfile);
701
  }
702
  clear_symtab_users ();
703
}
704
 
705
/* Relocate OBJFILE to NEW_OFFSETS.  There should be OBJFILE->NUM_SECTIONS
706
   entries in new_offsets.  SEPARATE_DEBUG_OBJFILE is not touched here.
707
   Return non-zero iff any change happened.  */
708
 
709
static int
710
objfile_relocate1 (struct objfile *objfile,
711
                   struct section_offsets *new_offsets)
712
{
713
  struct obj_section *s;
714
  struct section_offsets *delta =
715
    ((struct section_offsets *)
716
     alloca (SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)));
717
 
718
  int i;
719
  int something_changed = 0;
720
 
721
  for (i = 0; i < objfile->num_sections; ++i)
722
    {
723
      delta->offsets[i] =
724
        ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i);
725
      if (ANOFFSET (delta, i) != 0)
726
        something_changed = 1;
727
    }
728
  if (!something_changed)
729
    return 0;
730
 
731
  /* OK, get all the symtabs.  */
732
  {
733
    struct symtab *s;
734
 
735
    ALL_OBJFILE_SYMTABS (objfile, s)
736
    {
737
      struct linetable *l;
738
      struct blockvector *bv;
739
      int i;
740
 
741
      /* First the line table.  */
742
      l = LINETABLE (s);
743
      if (l)
744
        {
745
          for (i = 0; i < l->nitems; ++i)
746
            l->item[i].pc += ANOFFSET (delta, s->block_line_section);
747
        }
748
 
749
      /* Don't relocate a shared blockvector more than once.  */
750
      if (!s->primary)
751
        continue;
752
 
753
      bv = BLOCKVECTOR (s);
754
      if (BLOCKVECTOR_MAP (bv))
755
        addrmap_relocate (BLOCKVECTOR_MAP (bv),
756
                          ANOFFSET (delta, s->block_line_section));
757
 
758
      for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
759
        {
760
          struct block *b;
761
          struct symbol *sym;
762
          struct dict_iterator iter;
763
 
764
          b = BLOCKVECTOR_BLOCK (bv, i);
765
          BLOCK_START (b) += ANOFFSET (delta, s->block_line_section);
766
          BLOCK_END (b) += ANOFFSET (delta, s->block_line_section);
767
 
768
          ALL_BLOCK_SYMBOLS (b, iter, sym)
769
            {
770
              fixup_symbol_section (sym, objfile);
771
 
772
              /* The RS6000 code from which this was taken skipped
773
                 any symbols in STRUCT_DOMAIN or UNDEF_DOMAIN.
774
                 But I'm leaving out that test, on the theory that
775
                 they can't possibly pass the tests below.  */
776
              if ((SYMBOL_CLASS (sym) == LOC_LABEL
777
                   || SYMBOL_CLASS (sym) == LOC_STATIC)
778
                  && SYMBOL_SECTION (sym) >= 0)
779
                {
780
                  SYMBOL_VALUE_ADDRESS (sym) +=
781
                    ANOFFSET (delta, SYMBOL_SECTION (sym));
782
                }
783
            }
784
        }
785
    }
786
  }
787
 
788
  if (objfile->psymtabs_addrmap)
789
    addrmap_relocate (objfile->psymtabs_addrmap,
790
                      ANOFFSET (delta, SECT_OFF_TEXT (objfile)));
791
 
792
  if (objfile->sf)
793
    objfile->sf->qf->relocate (objfile, new_offsets, delta);
794
 
795
  {
796
    struct minimal_symbol *msym;
797
 
798
    ALL_OBJFILE_MSYMBOLS (objfile, msym)
799
      if (SYMBOL_SECTION (msym) >= 0)
800
      SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
801
  }
802
  /* Relocating different sections by different amounts may cause the symbols
803
     to be out of order.  */
804
  msymbols_sort (objfile);
805
 
806
  if (objfile->ei.entry_point_p)
807
    {
808
      /* Relocate ei.entry_point with its section offset, use SECT_OFF_TEXT
809
         only as a fallback.  */
810
      struct obj_section *s;
811
      s = find_pc_section (objfile->ei.entry_point);
812
      if (s)
813
        objfile->ei.entry_point += ANOFFSET (delta, s->the_bfd_section->index);
814
      else
815
        objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
816
    }
817
 
818
  {
819
    int i;
820
 
821
    for (i = 0; i < objfile->num_sections; ++i)
822
      (objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i);
823
  }
824
 
825
  /* Rebuild section map next time we need it.  */
826
  get_objfile_pspace_data (objfile->pspace)->objfiles_changed_p = 1;
827
 
828
  /* Update the table in exec_ops, used to read memory.  */
829
  ALL_OBJFILE_OSECTIONS (objfile, s)
830
    {
831
      int idx = s->the_bfd_section->index;
832
 
833
      exec_set_section_address (bfd_get_filename (objfile->obfd), idx,
834
                                obj_section_addr (s));
835
    }
836
 
837
  /* Data changed.  */
838
  return 1;
839
}
840
 
841
/* Relocate OBJFILE to NEW_OFFSETS.  There should be OBJFILE->NUM_SECTIONS
842
   entries in new_offsets.  Process also OBJFILE's SEPARATE_DEBUG_OBJFILEs.
843
 
844
   The number and ordering of sections does differ between the two objfiles.
845
   Only their names match.  Also the file offsets will differ (objfile being
846
   possibly prelinked but separate_debug_objfile is probably not prelinked) but
847
   the in-memory absolute address as specified by NEW_OFFSETS must match both
848
   files.  */
849
 
850
void
851
objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
852
{
853
  struct objfile *debug_objfile;
854
  int changed = 0;
855
 
856
  changed |= objfile_relocate1 (objfile, new_offsets);
857
 
858
  for (debug_objfile = objfile->separate_debug_objfile;
859
       debug_objfile;
860
       debug_objfile = objfile_separate_debug_iterate (objfile, debug_objfile))
861
    {
862
      struct section_addr_info *objfile_addrs;
863
      struct section_offsets *new_debug_offsets;
864
      struct cleanup *my_cleanups;
865
 
866
      objfile_addrs = build_section_addr_info_from_objfile (objfile);
867
      my_cleanups = make_cleanup (xfree, objfile_addrs);
868
 
869
      /* Here OBJFILE_ADDRS contain the correct absolute addresses, the
870
         relative ones must be already created according to debug_objfile.  */
871
 
872
      addr_info_make_relative (objfile_addrs, debug_objfile->obfd);
873
 
874
      gdb_assert (debug_objfile->num_sections
875
                  == bfd_count_sections (debug_objfile->obfd));
876
      new_debug_offsets =
877
        xmalloc (SIZEOF_N_SECTION_OFFSETS (debug_objfile->num_sections));
878
      make_cleanup (xfree, new_debug_offsets);
879
      relative_addr_info_to_section_offsets (new_debug_offsets,
880
                                             debug_objfile->num_sections,
881
                                             objfile_addrs);
882
 
883
      changed |= objfile_relocate1 (debug_objfile, new_debug_offsets);
884
 
885
      do_cleanups (my_cleanups);
886
    }
887
 
888
  /* Relocate breakpoints as necessary, after things are relocated. */
889
  if (changed)
890
    breakpoint_re_set ();
891
}
892
 
893
/* Return non-zero if OBJFILE has partial symbols.  */
894
 
895
int
896
objfile_has_partial_symbols (struct objfile *objfile)
897
{
898
  return objfile->sf ? objfile->sf->qf->has_symbols (objfile) : 0;
899
}
900
 
901
/* Return non-zero if OBJFILE has full symbols.  */
902
 
903
int
904
objfile_has_full_symbols (struct objfile *objfile)
905
{
906
  return objfile->symtabs != NULL;
907
}
908
 
909
/* Return non-zero if OBJFILE has full or partial symbols, either directly
910
   or through a separate debug file.  */
911
 
912
int
913
objfile_has_symbols (struct objfile *objfile)
914
{
915
  struct objfile *o;
916
 
917
  for (o = objfile; o; o = objfile_separate_debug_iterate (objfile, o))
918
    if (objfile_has_partial_symbols (o) || objfile_has_full_symbols (o))
919
      return 1;
920
  return 0;
921
}
922
 
923
 
924
/* Many places in gdb want to test just to see if we have any partial
925
   symbols available.  This function returns zero if none are currently
926
   available, nonzero otherwise. */
927
 
928
int
929
have_partial_symbols (void)
930
{
931
  struct objfile *ofp;
932
 
933
  ALL_OBJFILES (ofp)
934
  {
935
    if (objfile_has_partial_symbols (ofp))
936
      return 1;
937
  }
938
  return 0;
939
}
940
 
941
/* Many places in gdb want to test just to see if we have any full
942
   symbols available.  This function returns zero if none are currently
943
   available, nonzero otherwise. */
944
 
945
int
946
have_full_symbols (void)
947
{
948
  struct objfile *ofp;
949
 
950
  ALL_OBJFILES (ofp)
951
  {
952
    if (objfile_has_full_symbols (ofp))
953
      return 1;
954
  }
955
  return 0;
956
}
957
 
958
 
959
/* This operations deletes all objfile entries that represent solibs that
960
   weren't explicitly loaded by the user, via e.g., the add-symbol-file
961
   command.
962
 */
963
void
964
objfile_purge_solibs (void)
965
{
966
  struct objfile *objf;
967
  struct objfile *temp;
968
 
969
  ALL_OBJFILES_SAFE (objf, temp)
970
  {
971
    /* We assume that the solib package has been purged already, or will
972
       be soon.
973
     */
974
    if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
975
      free_objfile (objf);
976
  }
977
}
978
 
979
 
980
/* Many places in gdb want to test just to see if we have any minimal
981
   symbols available.  This function returns zero if none are currently
982
   available, nonzero otherwise. */
983
 
984
int
985
have_minimal_symbols (void)
986
{
987
  struct objfile *ofp;
988
 
989
  ALL_OBJFILES (ofp)
990
  {
991
    if (ofp->minimal_symbol_count > 0)
992
      {
993
        return 1;
994
      }
995
  }
996
  return 0;
997
}
998
 
999
/* Qsort comparison function.  */
1000
 
1001
static int
1002
qsort_cmp (const void *a, const void *b)
1003
{
1004
  const struct obj_section *sect1 = *(const struct obj_section **) a;
1005
  const struct obj_section *sect2 = *(const struct obj_section **) b;
1006
  const CORE_ADDR sect1_addr = obj_section_addr (sect1);
1007
  const CORE_ADDR sect2_addr = obj_section_addr (sect2);
1008
 
1009
  if (sect1_addr < sect2_addr)
1010
    return -1;
1011
  else if (sect1_addr > sect2_addr)
1012
    return 1;
1013
  else
1014
    {
1015
      /* Sections are at the same address.  This could happen if
1016
         A) we have an objfile and a separate debuginfo.
1017
         B) we are confused, and have added sections without proper relocation,
1018
         or something like that. */
1019
 
1020
      const struct objfile *const objfile1 = sect1->objfile;
1021
      const struct objfile *const objfile2 = sect2->objfile;
1022
 
1023
      if (objfile1->separate_debug_objfile == objfile2
1024
          || objfile2->separate_debug_objfile == objfile1)
1025
        {
1026
          /* Case A.  The ordering doesn't matter: separate debuginfo files
1027
             will be filtered out later.  */
1028
 
1029
          return 0;
1030
        }
1031
 
1032
      /* Case B.  Maintain stable sort order, so bugs in GDB are easier to
1033
         triage.  This section could be slow (since we iterate over all
1034
         objfiles in each call to qsort_cmp), but this shouldn't happen
1035
         very often (GDB is already in a confused state; one hopes this
1036
         doesn't happen at all).  If you discover that significant time is
1037
         spent in the loops below, do 'set complaints 100' and examine the
1038
         resulting complaints.  */
1039
 
1040
      if (objfile1 == objfile2)
1041
        {
1042
          /* Both sections came from the same objfile.  We are really confused.
1043
             Sort on sequence order of sections within the objfile.  */
1044
 
1045
          const struct obj_section *osect;
1046
 
1047
          ALL_OBJFILE_OSECTIONS (objfile1, osect)
1048
            if (osect == sect1)
1049
              return -1;
1050
            else if (osect == sect2)
1051
              return 1;
1052
 
1053
          /* We should have found one of the sections before getting here.  */
1054
          gdb_assert (0);
1055
        }
1056
      else
1057
        {
1058
          /* Sort on sequence number of the objfile in the chain.  */
1059
 
1060
          const struct objfile *objfile;
1061
 
1062
          ALL_OBJFILES (objfile)
1063
            if (objfile == objfile1)
1064
              return -1;
1065
            else if (objfile == objfile2)
1066
              return 1;
1067
 
1068
          /* We should have found one of the objfiles before getting here.  */
1069
          gdb_assert (0);
1070
        }
1071
    }
1072
 
1073
  /* Unreachable.  */
1074
  gdb_assert (0);
1075
  return 0;
1076
}
1077
 
1078
/* Select "better" obj_section to keep.  We prefer the one that came from
1079
   the real object, rather than the one from separate debuginfo.
1080
   Most of the time the two sections are exactly identical, but with
1081
   prelinking the .rel.dyn section in the real object may have different
1082
   size.  */
1083
 
1084
static struct obj_section *
1085
preferred_obj_section (struct obj_section *a, struct obj_section *b)
1086
{
1087
  gdb_assert (obj_section_addr (a) == obj_section_addr (b));
1088
  gdb_assert ((a->objfile->separate_debug_objfile == b->objfile)
1089
              || (b->objfile->separate_debug_objfile == a->objfile));
1090
  gdb_assert ((a->objfile->separate_debug_objfile_backlink == b->objfile)
1091
              || (b->objfile->separate_debug_objfile_backlink == a->objfile));
1092
 
1093
  if (a->objfile->separate_debug_objfile != NULL)
1094
    return a;
1095
  return b;
1096
}
1097
 
1098
/* Return 1 if SECTION should be inserted into the section map.
1099
   We want to insert only non-overlay and non-TLS section.  */
1100
 
1101
static int
1102
insert_section_p (const struct bfd *abfd,
1103
                  const struct bfd_section *section)
1104
{
1105
  const bfd_vma lma = bfd_section_lma (abfd, section);
1106
 
1107
  if (lma != 0 && lma != bfd_section_vma (abfd, section)
1108
      && (bfd_get_file_flags (abfd) & BFD_IN_MEMORY) == 0)
1109
    /* This is an overlay section.  IN_MEMORY check is needed to avoid
1110
       discarding sections from the "system supplied DSO" (aka vdso)
1111
       on some Linux systems (e.g. Fedora 11).  */
1112
    return 0;
1113
  if ((bfd_get_section_flags (abfd, section) & SEC_THREAD_LOCAL) != 0)
1114
    /* This is a TLS section.  */
1115
    return 0;
1116
 
1117
  return 1;
1118
}
1119
 
1120
/* Filter out overlapping sections where one section came from the real
1121
   objfile, and the other from a separate debuginfo file.
1122
   Return the size of table after redundant sections have been eliminated.  */
1123
 
1124
static int
1125
filter_debuginfo_sections (struct obj_section **map, int map_size)
1126
{
1127
  int i, j;
1128
 
1129
  for (i = 0, j = 0; i < map_size - 1; i++)
1130
    {
1131
      struct obj_section *const sect1 = map[i];
1132
      struct obj_section *const sect2 = map[i + 1];
1133
      const struct objfile *const objfile1 = sect1->objfile;
1134
      const struct objfile *const objfile2 = sect2->objfile;
1135
      const CORE_ADDR sect1_addr = obj_section_addr (sect1);
1136
      const CORE_ADDR sect2_addr = obj_section_addr (sect2);
1137
 
1138
      if (sect1_addr == sect2_addr
1139
          && (objfile1->separate_debug_objfile == objfile2
1140
              || objfile2->separate_debug_objfile == objfile1))
1141
        {
1142
          map[j++] = preferred_obj_section (sect1, sect2);
1143
          ++i;
1144
        }
1145
      else
1146
        map[j++] = sect1;
1147
    }
1148
 
1149
  if (i < map_size)
1150
    {
1151
      gdb_assert (i == map_size - 1);
1152
      map[j++] = map[i];
1153
    }
1154
 
1155
  /* The map should not have shrunk to less than half the original size.  */
1156
  gdb_assert (map_size / 2 <= j);
1157
 
1158
  return j;
1159
}
1160
 
1161
/* Filter out overlapping sections, issuing a warning if any are found.
1162
   Overlapping sections could really be overlay sections which we didn't
1163
   classify as such in insert_section_p, or we could be dealing with a
1164
   corrupt binary.  */
1165
 
1166
static int
1167
filter_overlapping_sections (struct obj_section **map, int map_size)
1168
{
1169
  int i, j;
1170
 
1171
  for (i = 0, j = 0; i < map_size - 1; )
1172
    {
1173
      int k;
1174
 
1175
      map[j++] = map[i];
1176
      for (k = i + 1; k < map_size; k++)
1177
        {
1178
          struct obj_section *const sect1 = map[i];
1179
          struct obj_section *const sect2 = map[k];
1180
          const CORE_ADDR sect1_addr = obj_section_addr (sect1);
1181
          const CORE_ADDR sect2_addr = obj_section_addr (sect2);
1182
          const CORE_ADDR sect1_endaddr = obj_section_endaddr (sect1);
1183
 
1184
          gdb_assert (sect1_addr <= sect2_addr);
1185
 
1186
          if (sect1_endaddr <= sect2_addr)
1187
            break;
1188
          else
1189
            {
1190
              /* We have an overlap.  Report it.  */
1191
 
1192
              struct objfile *const objf1 = sect1->objfile;
1193
              struct objfile *const objf2 = sect2->objfile;
1194
 
1195
              const struct bfd *const abfd1 = objf1->obfd;
1196
              const struct bfd *const abfd2 = objf2->obfd;
1197
 
1198
              const struct bfd_section *const bfds1 = sect1->the_bfd_section;
1199
              const struct bfd_section *const bfds2 = sect2->the_bfd_section;
1200
 
1201
              const CORE_ADDR sect2_endaddr = obj_section_endaddr (sect2);
1202
 
1203
              struct gdbarch *const gdbarch = get_objfile_arch (objf1);
1204
 
1205
              complaint (&symfile_complaints,
1206
                         _("unexpected overlap between:\n"
1207
                           " (A) section `%s' from `%s' [%s, %s)\n"
1208
                           " (B) section `%s' from `%s' [%s, %s).\n"
1209
                           "Will ignore section B"),
1210
                         bfd_section_name (abfd1, bfds1), objf1->name,
1211
                         paddress (gdbarch, sect1_addr),
1212
                         paddress (gdbarch, sect1_endaddr),
1213
                         bfd_section_name (abfd2, bfds2), objf2->name,
1214
                         paddress (gdbarch, sect2_addr),
1215
                         paddress (gdbarch, sect2_endaddr));
1216
            }
1217
        }
1218
      i = k;
1219
    }
1220
 
1221
  if (i < map_size)
1222
    {
1223
      gdb_assert (i == map_size - 1);
1224
      map[j++] = map[i];
1225
    }
1226
 
1227
  return j;
1228
}
1229
 
1230
 
1231
/* Update PMAP, PMAP_SIZE with sections from all objfiles, excluding any
1232
   TLS, overlay and overlapping sections.  */
1233
 
1234
static void
1235
update_section_map (struct program_space *pspace,
1236
                    struct obj_section ***pmap, int *pmap_size)
1237
{
1238
  int alloc_size, map_size, i;
1239
  struct obj_section *s, **map;
1240
  struct objfile *objfile;
1241
 
1242
  gdb_assert (get_objfile_pspace_data (pspace)->objfiles_changed_p != 0);
1243
 
1244
  map = *pmap;
1245
  xfree (map);
1246
 
1247
  alloc_size = 0;
1248
  ALL_PSPACE_OBJFILES (pspace, objfile)
1249
    ALL_OBJFILE_OSECTIONS (objfile, s)
1250
      if (insert_section_p (objfile->obfd, s->the_bfd_section))
1251
        alloc_size += 1;
1252
 
1253
  /* This happens on detach/attach (e.g. in gdb.base/attach.exp).  */
1254
  if (alloc_size == 0)
1255
    {
1256
      *pmap = NULL;
1257
      *pmap_size = 0;
1258
      return;
1259
    }
1260
 
1261
  map = xmalloc (alloc_size * sizeof (*map));
1262
 
1263
  i = 0;
1264
  ALL_PSPACE_OBJFILES (pspace, objfile)
1265
    ALL_OBJFILE_OSECTIONS (objfile, s)
1266
      if (insert_section_p (objfile->obfd, s->the_bfd_section))
1267
        map[i++] = s;
1268
 
1269
  qsort (map, alloc_size, sizeof (*map), qsort_cmp);
1270
  map_size = filter_debuginfo_sections(map, alloc_size);
1271
  map_size = filter_overlapping_sections(map, map_size);
1272
 
1273
  if (map_size < alloc_size)
1274
    /* Some sections were eliminated.  Trim excess space.  */
1275
    map = xrealloc (map, map_size * sizeof (*map));
1276
  else
1277
    gdb_assert (alloc_size == map_size);
1278
 
1279
  *pmap = map;
1280
  *pmap_size = map_size;
1281
}
1282
 
1283
/* Bsearch comparison function. */
1284
 
1285
static int
1286
bsearch_cmp (const void *key, const void *elt)
1287
{
1288
  const CORE_ADDR pc = *(CORE_ADDR *) key;
1289
  const struct obj_section *section = *(const struct obj_section **) elt;
1290
 
1291
  if (pc < obj_section_addr (section))
1292
    return -1;
1293
  if (pc < obj_section_endaddr (section))
1294
    return 0;
1295
  return 1;
1296
}
1297
 
1298
/* Returns a section whose range includes PC or NULL if none found.   */
1299
 
1300
struct obj_section *
1301
find_pc_section (CORE_ADDR pc)
1302
{
1303
  struct objfile_pspace_info *pspace_info;
1304
  struct obj_section *s, **sp;
1305
 
1306
  /* Check for mapped overlay section first.  */
1307
  s = find_pc_mapped_section (pc);
1308
  if (s)
1309
    return s;
1310
 
1311
  pspace_info = get_objfile_pspace_data (current_program_space);
1312
  if (pspace_info->objfiles_changed_p != 0)
1313
    {
1314
      update_section_map (current_program_space,
1315
                          &pspace_info->sections,
1316
                          &pspace_info->num_sections);
1317
 
1318
      /* Don't need updates to section map until objfiles are added,
1319
         removed or relocated.  */
1320
      pspace_info->objfiles_changed_p = 0;
1321
    }
1322
 
1323
  /* The C standard (ISO/IEC 9899:TC2) requires the BASE argument to
1324
     bsearch be non-NULL.  */
1325
  if (pspace_info->sections == NULL)
1326
    {
1327
      gdb_assert (pspace_info->num_sections == 0);
1328
      return NULL;
1329
    }
1330
 
1331
  sp = (struct obj_section **) bsearch (&pc,
1332
                                        pspace_info->sections,
1333
                                        pspace_info->num_sections,
1334
                                        sizeof (*pspace_info->sections),
1335
                                        bsearch_cmp);
1336
  if (sp != NULL)
1337
    return *sp;
1338
  return NULL;
1339
}
1340
 
1341
 
1342
/* In SVR4, we recognize a trampoline by it's section name.
1343
   That is, if the pc is in a section named ".plt" then we are in
1344
   a trampoline.  */
1345
 
1346
int
1347
in_plt_section (CORE_ADDR pc, char *name)
1348
{
1349
  struct obj_section *s;
1350
  int retval = 0;
1351
 
1352
  s = find_pc_section (pc);
1353
 
1354
  retval = (s != NULL
1355
            && s->the_bfd_section->name != NULL
1356
            && strcmp (s->the_bfd_section->name, ".plt") == 0);
1357
  return (retval);
1358
}
1359
 
1360
 
1361
/* Keep a registry of per-objfile data-pointers required by other GDB
1362
   modules.  */
1363
 
1364
struct objfile_data
1365
{
1366
  unsigned index;
1367
  void (*save) (struct objfile *, void *);
1368
  void (*free) (struct objfile *, void *);
1369
};
1370
 
1371
struct objfile_data_registration
1372
{
1373
  struct objfile_data *data;
1374
  struct objfile_data_registration *next;
1375
};
1376
 
1377
struct objfile_data_registry
1378
{
1379
  struct objfile_data_registration *registrations;
1380
  unsigned num_registrations;
1381
};
1382
 
1383
static struct objfile_data_registry objfile_data_registry = { NULL, 0 };
1384
 
1385
const struct objfile_data *
1386
register_objfile_data_with_cleanup (void (*save) (struct objfile *, void *),
1387
                                    void (*free) (struct objfile *, void *))
1388
{
1389
  struct objfile_data_registration **curr;
1390
 
1391
  /* Append new registration.  */
1392
  for (curr = &objfile_data_registry.registrations;
1393
       *curr != NULL; curr = &(*curr)->next);
1394
 
1395
  *curr = XMALLOC (struct objfile_data_registration);
1396
  (*curr)->next = NULL;
1397
  (*curr)->data = XMALLOC (struct objfile_data);
1398
  (*curr)->data->index = objfile_data_registry.num_registrations++;
1399
  (*curr)->data->save = save;
1400
  (*curr)->data->free = free;
1401
 
1402
  return (*curr)->data;
1403
}
1404
 
1405
const struct objfile_data *
1406
register_objfile_data (void)
1407
{
1408
  return register_objfile_data_with_cleanup (NULL, NULL);
1409
}
1410
 
1411
static void
1412
objfile_alloc_data (struct objfile *objfile)
1413
{
1414
  gdb_assert (objfile->data == NULL);
1415
  objfile->num_data = objfile_data_registry.num_registrations;
1416
  objfile->data = XCALLOC (objfile->num_data, void *);
1417
}
1418
 
1419
static void
1420
objfile_free_data (struct objfile *objfile)
1421
{
1422
  gdb_assert (objfile->data != NULL);
1423
  clear_objfile_data (objfile);
1424
  xfree (objfile->data);
1425
  objfile->data = NULL;
1426
}
1427
 
1428
void
1429
clear_objfile_data (struct objfile *objfile)
1430
{
1431
  struct objfile_data_registration *registration;
1432
  int i;
1433
 
1434
  gdb_assert (objfile->data != NULL);
1435
 
1436
  /* Process all the save handlers.  */
1437
 
1438
  for (registration = objfile_data_registry.registrations, i = 0;
1439
       i < objfile->num_data;
1440
       registration = registration->next, i++)
1441
    if (objfile->data[i] != NULL && registration->data->save != NULL)
1442
      registration->data->save (objfile, objfile->data[i]);
1443
 
1444
  /* Now process all the free handlers.  */
1445
 
1446
  for (registration = objfile_data_registry.registrations, i = 0;
1447
       i < objfile->num_data;
1448
       registration = registration->next, i++)
1449
    if (objfile->data[i] != NULL && registration->data->free != NULL)
1450
      registration->data->free (objfile, objfile->data[i]);
1451
 
1452
  memset (objfile->data, 0, objfile->num_data * sizeof (void *));
1453
}
1454
 
1455
void
1456
set_objfile_data (struct objfile *objfile, const struct objfile_data *data,
1457
                  void *value)
1458
{
1459
  gdb_assert (data->index < objfile->num_data);
1460
  objfile->data[data->index] = value;
1461
}
1462
 
1463
void *
1464
objfile_data (struct objfile *objfile, const struct objfile_data *data)
1465
{
1466
  gdb_assert (data->index < objfile->num_data);
1467
  return objfile->data[data->index];
1468
}
1469
 
1470
/* Set objfiles_changed_p so section map will be rebuilt next time it
1471
   is used.  Called by reread_symbols.  */
1472
 
1473
void
1474
objfiles_changed (void)
1475
{
1476
  /* Rebuild section map next time we need it.  */
1477
  get_objfile_pspace_data (current_program_space)->objfiles_changed_p = 1;
1478
}
1479
 
1480
/* Close ABFD, and warn if that fails.  */
1481
 
1482
int
1483
gdb_bfd_close_or_warn (struct bfd *abfd)
1484
{
1485
  int ret;
1486
  char *name = bfd_get_filename (abfd);
1487
 
1488
  ret = bfd_close (abfd);
1489
 
1490
  if (!ret)
1491
    warning (_("cannot close \"%s\": %s"),
1492
             name, bfd_errmsg (bfd_get_error ()));
1493
 
1494
  return ret;
1495
}
1496
 
1497
/* Add reference to ABFD.  Returns ABFD.  */
1498
struct bfd *
1499
gdb_bfd_ref (struct bfd *abfd)
1500
{
1501
  int *p_refcount;
1502
 
1503
  if (abfd == NULL)
1504
    return NULL;
1505
 
1506
  p_refcount = bfd_usrdata (abfd);
1507
 
1508
  if (p_refcount != NULL)
1509
    {
1510
      *p_refcount += 1;
1511
      return abfd;
1512
    }
1513
 
1514
  p_refcount = xmalloc (sizeof (*p_refcount));
1515
  *p_refcount = 1;
1516
  bfd_usrdata (abfd) = p_refcount;
1517
 
1518
  return abfd;
1519
}
1520
 
1521
/* Unreference and possibly close ABFD.  */
1522
void
1523
gdb_bfd_unref (struct bfd *abfd)
1524
{
1525
  int *p_refcount;
1526
  char *name;
1527
 
1528
  if (abfd == NULL)
1529
    return;
1530
 
1531
  p_refcount = bfd_usrdata (abfd);
1532
 
1533
  /* Valid range for p_refcount: a pointer to int counter, which has a
1534
     value of 1 (single owner) or 2 (shared).  */
1535
  gdb_assert (*p_refcount == 1 || *p_refcount == 2);
1536
 
1537
  *p_refcount -= 1;
1538
  if (*p_refcount > 0)
1539
    return;
1540
 
1541
  xfree (p_refcount);
1542
  bfd_usrdata (abfd) = NULL;  /* Paranoia.  */
1543
 
1544
  name = bfd_get_filename (abfd);
1545
  gdb_bfd_close_or_warn (abfd);
1546
  xfree (name);
1547
}
1548
 
1549
/* Provide a prototype to silence -Wmissing-prototypes.  */
1550
extern initialize_file_ftype _initialize_objfiles;
1551
 
1552
void
1553
_initialize_objfiles (void)
1554
{
1555
  objfiles_pspace_data
1556
    = register_program_space_data_with_cleanup (objfiles_pspace_data_cleanup);
1557
}

powered by: WebSVN 2.1.0

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