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

Subversion Repositories openrisc_me

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

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

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

powered by: WebSVN 2.1.0

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