]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/objfiles.c
gprofng: use $host instead $target
[thirdparty/binutils-gdb.git] / gdb / objfiles.c
CommitLineData
c906108c 1/* GDB routines for manipulating objfiles.
af5f3db6 2
4a94e368 3 Copyright (C) 1992-2022 Free Software Foundation, Inc.
af5f3db6 4
c906108c
SS
5 Contributed by Cygnus Support, using pieces from other GDB modules.
6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22/* This file contains support routines for creating, manipulating, and
0df8b418 23 destroying objfile structures. */
c906108c
SS
24
25#include "defs.h"
26#include "bfd.h" /* Binary File Description */
27#include "symtab.h"
28#include "symfile.h"
29#include "objfiles.h"
30#include "gdb-stabs.h"
31#include "target.h"
af5f3db6 32#include "bcache.h"
9bdcbae7
DJ
33#include "expression.h"
34#include "parser-defs.h"
35
c906108c 36#include <sys/types.h>
53ce3c39 37#include <sys/stat.h>
c906108c 38#include <fcntl.h>
bf31fd38 39#include "gdbsupport/gdb_obstack.h"
2de7ced7 40#include "hashtab.h"
c906108c 41
7a292a7a 42#include "breakpoint.h"
fe898f56 43#include "block.h"
de4f826b 44#include "dictionary.h"
cb5d864f 45#include "source.h"
801e3a5b 46#include "addrmap.h"
5e2b427d 47#include "arch-utils.h"
30510692 48#include "exec.h"
76727919 49#include "observable.h"
6fbf07cd 50#include "complaints.h"
ccefe4c4 51#include "psymtab.h"
0133421a 52#include "solist.h"
cbb099e8 53#include "gdb_bfd.h"
afedecd3 54#include "btrace.h"
268a13a5 55#include "gdbsupport/pathstuff.h"
7a292a7a 56
d0801dd8 57#include <algorithm>
cfe826d4
TT
58#include <vector>
59
8e260fc0
TT
60/* Keep a registry of per-objfile data-pointers required by other GDB
61 modules. */
c906108c 62
6b81941e 63DEFINE_REGISTRY (objfile, REGISTRY_ACCESS_FIELD)
0d0e1a63 64
c906108c 65/* Externally visible variables that are owned by this module.
0df8b418 66 See declarations in objfile.h for more info. */
c906108c 67
6c95b8df
PA
68struct objfile_pspace_info
69{
f6aa7436
TT
70 objfile_pspace_info () = default;
71 ~objfile_pspace_info ();
72
73 struct obj_section **sections = nullptr;
74 int num_sections = 0;
607ece04
GB
75
76 /* Nonzero if object files have been added since the section map
77 was last updated. */
f6aa7436 78 int new_objfiles_available = 0;
607ece04
GB
79
80 /* Nonzero if the section map MUST be updated before use. */
f6aa7436 81 int section_map_dirty = 0;
607ece04
GB
82
83 /* Nonzero if section map updates should be inhibited if possible. */
f6aa7436 84 int inhibit_updates = 0;
6c95b8df
PA
85};
86
87/* Per-program-space data key. */
f6aa7436
TT
88static const struct program_space_key<objfile_pspace_info>
89 objfiles_pspace_data;
6c95b8df 90
f6aa7436 91objfile_pspace_info::~objfile_pspace_info ()
6c95b8df 92{
f6aa7436 93 xfree (sections);
6c95b8df
PA
94}
95
96/* Get the current svr4 data. If none is found yet, add it now. This
97 function always returns a valid object. */
98
99static struct objfile_pspace_info *
100get_objfile_pspace_data (struct program_space *pspace)
101{
102 struct objfile_pspace_info *info;
103
f6aa7436 104 info = objfiles_pspace_data.get (pspace);
6c95b8df 105 if (info == NULL)
f6aa7436 106 info = objfiles_pspace_data.emplace (pspace);
6c95b8df
PA
107
108 return info;
109}
110
706e3705
TT
111\f
112
113/* Per-BFD data key. */
114
f6aa7436 115static const struct bfd_key<objfile_per_bfd_storage> objfiles_bfd_data;
706e3705 116
d6797f46
TT
117objfile_per_bfd_storage::~objfile_per_bfd_storage ()
118{
d6797f46
TT
119}
120
706e3705
TT
121/* Create the per-BFD storage object for OBJFILE. If ABFD is not
122 NULL, and it already has a per-BFD storage object, use that.
9161c89a 123 Otherwise, allocate a new per-BFD storage object. */
706e3705
TT
124
125static struct objfile_per_bfd_storage *
9161c89a 126get_objfile_bfd_data (bfd *abfd)
706e3705
TT
127{
128 struct objfile_per_bfd_storage *storage = NULL;
129
130 if (abfd != NULL)
f6aa7436 131 storage = objfiles_bfd_data.get (abfd);
706e3705
TT
132
133 if (storage == NULL)
134 {
0072c873 135 storage = new objfile_per_bfd_storage (abfd);
1da77581
TT
136 /* If the object requires gdb to do relocations, we simply fall
137 back to not sharing data across users. These cases are rare
138 enough that this seems reasonable. */
139 if (abfd != NULL && !gdb_bfd_requires_relocations (abfd))
f6aa7436 140 objfiles_bfd_data.set (abfd, storage);
706e3705 141
1da77581
TT
142 /* Look up the gdbarch associated with the BFD. */
143 if (abfd != NULL)
144 storage->gdbarch = gdbarch_from_bfd (abfd);
706e3705
TT
145 }
146
147 return storage;
148}
149
706e3705
TT
150/* See objfiles.h. */
151
152void
153set_objfile_per_bfd (struct objfile *objfile)
154{
9161c89a 155 objfile->per_bfd = get_objfile_bfd_data (objfile->obfd);
706e3705
TT
156}
157
3d548a53
TT
158/* Set the objfile's per-BFD notion of the "main" name and
159 language. */
160
161void
162set_objfile_main_name (struct objfile *objfile,
163 const char *name, enum language lang)
164{
165 if (objfile->per_bfd->name_of_main == NULL
166 || strcmp (objfile->per_bfd->name_of_main, name) != 0)
167 objfile->per_bfd->name_of_main
021887d8 168 = obstack_strdup (&objfile->per_bfd->storage_obstack, name);
3d548a53
TT
169 objfile->per_bfd->language_of_main = lang;
170}
171
63e43d3a
PMR
172/* Helper structure to map blocks to static link properties in hash tables. */
173
174struct static_link_htab_entry
175{
176 const struct block *block;
177 const struct dynamic_prop *static_link;
178};
179
180/* Return a hash code for struct static_link_htab_entry *P. */
181
182static hashval_t
183static_link_htab_entry_hash (const void *p)
184{
185 const struct static_link_htab_entry *e
186 = (const struct static_link_htab_entry *) p;
187
188 return htab_hash_pointer (e->block);
189}
190
191/* Return whether P1 an P2 (pointers to struct static_link_htab_entry) are
192 mappings for the same block. */
193
194static int
195static_link_htab_entry_eq (const void *p1, const void *p2)
196{
197 const struct static_link_htab_entry *e1
198 = (const struct static_link_htab_entry *) p1;
199 const struct static_link_htab_entry *e2
200 = (const struct static_link_htab_entry *) p2;
201
202 return e1->block == e2->block;
203}
204
205/* Register STATIC_LINK as the static link for BLOCK, which is part of OBJFILE.
206 Must not be called more than once for each BLOCK. */
207
208void
209objfile_register_static_link (struct objfile *objfile,
210 const struct block *block,
211 const struct dynamic_prop *static_link)
212{
213 void **slot;
214 struct static_link_htab_entry lookup_entry;
215 struct static_link_htab_entry *entry;
216
217 if (objfile->static_links == NULL)
cf250e36 218 objfile->static_links.reset (htab_create_alloc
63e43d3a 219 (1, &static_link_htab_entry_hash, static_link_htab_entry_eq, NULL,
cf250e36 220 xcalloc, xfree));
63e43d3a
PMR
221
222 /* Create a slot for the mapping, make sure it's the first mapping for this
223 block and then create the mapping itself. */
224 lookup_entry.block = block;
cf250e36 225 slot = htab_find_slot (objfile->static_links.get (), &lookup_entry, INSERT);
63e43d3a
PMR
226 gdb_assert (*slot == NULL);
227
e39db4db 228 entry = XOBNEW (&objfile->objfile_obstack, static_link_htab_entry);
63e43d3a
PMR
229 entry->block = block;
230 entry->static_link = static_link;
231 *slot = (void *) entry;
232}
233
234/* Look for a static link for BLOCK, which is part of OBJFILE. Return NULL if
235 none was found. */
236
237const struct dynamic_prop *
238objfile_lookup_static_link (struct objfile *objfile,
239 const struct block *block)
240{
241 struct static_link_htab_entry *entry;
242 struct static_link_htab_entry lookup_entry;
243
244 if (objfile->static_links == NULL)
245 return NULL;
246 lookup_entry.block = block;
cf250e36
TT
247 entry = ((struct static_link_htab_entry *)
248 htab_find (objfile->static_links.get (), &lookup_entry));
63e43d3a
PMR
249 if (entry == NULL)
250 return NULL;
251
252 gdb_assert (entry->block == block);
253 return entry->static_link;
254}
255
706e3705
TT
256\f
257
cb814f2e
TT
258/* Build up the section table that the objfile references. The
259 objfile contains pointers to the start of the table
260 (objfile->sections) and to the first location after the end of the
261 table (objfile->sections_end). */
96baa820 262
65cf3563 263static void
cb814f2e 264add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
65cf3563
TT
265 struct objfile *objfile, int force)
266{
267 struct obj_section *section;
268
269 if (!force)
270 {
271 flagword aflag;
272
fd361982 273 aflag = bfd_section_flags (asect);
65cf3563
TT
274 if (!(aflag & SEC_ALLOC))
275 return;
276 }
277
278 section = &objfile->sections[gdb_bfd_section_index (abfd, asect)];
279 section->objfile = objfile;
280 section->the_bfd_section = asect;
281 section->ovly_mapped = 0;
282}
283
c906108c 284/* Builds a section table for OBJFILE.
96baa820 285
65cf3563
TT
286 Note that the OFFSET and OVLY_MAPPED in each table entry are
287 initialized to zero. */
c906108c 288
d82ea6a8 289void
fba45db2 290build_objfile_section_table (struct objfile *objfile)
c906108c 291{
65cf3563
TT
292 int count = gdb_bfd_count_sections (objfile->obfd);
293
294 objfile->sections = OBSTACK_CALLOC (&objfile->objfile_obstack,
295 count,
296 struct obj_section);
297 objfile->sections_end = (objfile->sections + count);
cb814f2e
TT
298 for (asection *sect : gdb_bfd_sections (objfile->obfd))
299 add_to_objfile_sections (objfile->obfd, sect, objfile, 0);
65cf3563
TT
300
301 /* See gdb_bfd_section_index. */
cb814f2e
TT
302 add_to_objfile_sections (objfile->obfd, bfd_com_section_ptr, objfile, 1);
303 add_to_objfile_sections (objfile->obfd, bfd_und_section_ptr, objfile, 1);
304 add_to_objfile_sections (objfile->obfd, bfd_abs_section_ptr, objfile, 1);
305 add_to_objfile_sections (objfile->obfd, bfd_ind_section_ptr, objfile, 1);
c906108c
SS
306}
307
9e86da07
TT
308/* Given a pointer to an initialized bfd (ABFD) and some flag bits,
309 initialize the new objfile as best we can and link it into the list
310 of all known objfiles.
c906108c 311
24ba069a
JK
312 NAME should contain original non-canonicalized filename or other
313 identifier as entered by user. If there is no better source use
314 bfd_get_filename (ABFD). NAME may be NULL only if ABFD is NULL.
315 NAME content is copied into returned objfile.
316
2df3850c 317 The FLAGS word contains various bits (OBJF_*) that can be taken as
78a4a9b9 318 requests for specific operations. Other bits like OBJF_SHARED are
0df8b418 319 simply copied through to the new objfile flags member. */
c906108c 320
9e86da07
TT
321objfile::objfile (bfd *abfd, const char *name, objfile_flags flags_)
322 : flags (flags_),
323 pspace (current_program_space),
d320c2b5 324 obfd (abfd)
c906108c 325{
14278e1f 326 const char *expanded_name;
c906108c 327
2f6e5d7e
TG
328 /* We could use obstack_specify_allocation here instead, but
329 gdb_obstack.h specifies the alloc/dealloc functions. */
9e86da07 330 obstack_init (&objfile_obstack);
c906108c 331
9e86da07 332 objfile_alloc_data (this);
0d0e1a63 333
7ab2607f 334 std::string name_holder;
24ba069a
JK
335 if (name == NULL)
336 {
337 gdb_assert (abfd == NULL);
40135bb1 338 gdb_assert ((flags & OBJF_NOT_FILENAME) != 0);
e3e41d58 339 expanded_name = "<<anonymous objfile>>";
24ba069a 340 }
5fbae7d1
GB
341 else if ((flags & OBJF_NOT_FILENAME) != 0
342 || is_target_filename (name))
e3e41d58 343 expanded_name = name;
04affae3 344 else
e3e41d58
TT
345 {
346 name_holder = gdb_abspath (name);
7ab2607f 347 expanded_name = name_holder.c_str ();
e3e41d58 348 }
021887d8 349 original_name = obstack_strdup (&objfile_obstack, expanded_name);
04affae3 350
d3e81981
DE
351 /* Update the per-objfile information that comes from the bfd, ensuring
352 that any data that is reference is saved in the per-objfile data
353 region. */
354
8ac244b4 355 gdb_bfd_ref (abfd);
c906108c
SS
356 if (abfd != NULL)
357 {
9e86da07 358 mtime = bfd_get_mtime (abfd);
c906108c
SS
359
360 /* Build section table. */
9e86da07 361 build_objfile_section_table (this);
c906108c
SS
362 }
363
9161c89a 364 per_bfd = get_objfile_bfd_data (abfd);
c906108c
SS
365}
366
abd0a5fa
JK
367/* If there is a valid and known entry point, function fills *ENTRY_P with it
368 and returns non-zero; otherwise it returns zero. */
9ab9195f 369
abd0a5fa
JK
370int
371entry_point_address_query (CORE_ADDR *entry_p)
9ab9195f 372{
a42d7dd8
TT
373 objfile *objf = current_program_space->symfile_object_file;
374 if (objf == NULL || !objf->per_bfd->ei.entry_point_p)
3612b192
DJ
375 return 0;
376
a42d7dd8
TT
377 int idx = objf->per_bfd->ei.the_bfd_section_index;
378 *entry_p = objf->per_bfd->ei.entry_point + objf->section_offsets[idx];
3612b192 379
abd0a5fa
JK
380 return 1;
381}
382
383/* Get current entry point address. Call error if it is not known. */
384
385CORE_ADDR
386entry_point_address (void)
387{
388 CORE_ADDR retval;
389
390 if (!entry_point_address_query (&retval))
391 error (_("Entry point address is not known."));
392
393 return retval;
9ab9195f 394}
15831452 395
e9ad22ee
TT
396separate_debug_iterator &
397separate_debug_iterator::operator++ ()
15d123c9 398{
e9ad22ee
TT
399 gdb_assert (m_objfile != nullptr);
400
15d123c9
TG
401 struct objfile *res;
402
399f313b 403 /* If any, return the first child. */
e9ad22ee
TT
404 res = m_objfile->separate_debug_objfile;
405 if (res != nullptr)
406 {
407 m_objfile = res;
408 return *this;
409 }
15d123c9 410
15d123c9 411 /* Common case where there is no separate debug objfile. */
e9ad22ee
TT
412 if (m_objfile == m_parent)
413 {
414 m_objfile = nullptr;
415 return *this;
416 }
15d123c9 417
399f313b
TG
418 /* Return the brother if any. Note that we don't iterate on brothers of
419 the parents. */
e9ad22ee
TT
420 res = m_objfile->separate_debug_objfile_link;
421 if (res != nullptr)
422 {
423 m_objfile = res;
424 return *this;
425 }
399f313b 426
e9ad22ee
TT
427 for (res = m_objfile->separate_debug_objfile_backlink;
428 res != m_parent;
15d123c9
TG
429 res = res->separate_debug_objfile_backlink)
430 {
e9ad22ee
TT
431 gdb_assert (res != nullptr);
432 if (res->separate_debug_objfile_link != nullptr)
433 {
434 m_objfile = res->separate_debug_objfile_link;
435 return *this;
436 }
15d123c9 437 }
e9ad22ee
TT
438 m_objfile = nullptr;
439 return *this;
15d123c9 440}
15831452 441
15d123c9
TG
442/* Add OBJFILE as a separate debug objfile of PARENT. */
443
f65fe570 444static void
15d123c9
TG
445add_separate_debug_objfile (struct objfile *objfile, struct objfile *parent)
446{
447 gdb_assert (objfile && parent);
448
449 /* Must not be already in a list. */
450 gdb_assert (objfile->separate_debug_objfile_backlink == NULL);
451 gdb_assert (objfile->separate_debug_objfile_link == NULL);
8a92335b
JK
452 gdb_assert (objfile->separate_debug_objfile == NULL);
453 gdb_assert (parent->separate_debug_objfile_backlink == NULL);
454 gdb_assert (parent->separate_debug_objfile_link == NULL);
15d123c9
TG
455
456 objfile->separate_debug_objfile_backlink = parent;
457 objfile->separate_debug_objfile_link = parent->separate_debug_objfile;
458 parent->separate_debug_objfile = objfile;
15d123c9
TG
459}
460
f65fe570
TT
461/* See objfiles.h. */
462
463objfile *
464objfile::make (bfd *bfd_, const char *name_, objfile_flags flags_,
465 objfile *parent)
466{
467 objfile *result = new objfile (bfd_, name_, flags_);
468 if (parent != nullptr)
469 add_separate_debug_objfile (result, parent);
7cac64af 470
7d7167ce
TT
471 /* Using std::make_shared might be a bit nicer here, but that would
472 require making the constructor public. */
473 current_program_space->add_objfile (std::shared_ptr<objfile> (result),
474 parent);
7cac64af
TT
475
476 /* Rebuild section map next time we need it. */
477 get_objfile_pspace_data (current_program_space)->new_objfiles_available = 1;
478
f65fe570
TT
479 return result;
480}
481
268e4f09
TT
482/* See objfiles.h. */
483
484void
485objfile::unlink ()
486{
23452926 487 current_program_space->remove_objfile (this);
268e4f09
TT
488}
489
15d123c9
TG
490/* Free all separate debug objfile of OBJFILE, but don't free OBJFILE
491 itself. */
492
493void
494free_objfile_separate_debug (struct objfile *objfile)
495{
496 struct objfile *child;
497
498 for (child = objfile->separate_debug_objfile; child;)
499 {
500 struct objfile *next_child = child->separate_debug_objfile_link;
268e4f09 501 child->unlink ();
15d123c9
TG
502 child = next_child;
503 }
504}
c906108c 505
7580e917 506/* Destroy an objfile and all the symtabs and psymtabs under it. */
c906108c 507
9e86da07 508objfile::~objfile ()
c906108c 509{
63644780 510 /* First notify observers that this objfile is about to be freed. */
76727919 511 gdb::observers::free_objfile.notify (this);
63644780 512
15d123c9 513 /* Free all separate debug objfiles. */
9e86da07 514 free_objfile_separate_debug (this);
15d123c9 515
9e86da07 516 if (separate_debug_objfile_backlink)
5b5d99cf
JB
517 {
518 /* We freed the separate debug file, make sure the base objfile
519 doesn't reference it. */
15d123c9
TG
520 struct objfile *child;
521
9e86da07 522 child = separate_debug_objfile_backlink->separate_debug_objfile;
15d123c9 523
9e86da07 524 if (child == this)
dda83cd7
SM
525 {
526 /* THIS is the first child. */
527 separate_debug_objfile_backlink->separate_debug_objfile =
528 separate_debug_objfile_link;
529 }
15d123c9 530 else
dda83cd7
SM
531 {
532 /* Find THIS in the list. */
533 while (1)
534 {
535 if (child->separate_debug_objfile_link == this)
536 {
537 child->separate_debug_objfile_link =
538 separate_debug_objfile_link;
539 break;
540 }
541 child = child->separate_debug_objfile_link;
542 gdb_assert (child);
543 }
544 }
5b5d99cf 545 }
9e86da07 546
ae5a43e0
DJ
547 /* Remove any references to this objfile in the global value
548 lists. */
9e86da07 549 preserve_values (this);
ae5a43e0 550
9f743ef6
JK
551 /* It still may reference data modules have associated with the objfile and
552 the symbol file data. */
9e86da07 553 forget_cached_source_info_for_objfile (this);
9f743ef6 554
9e86da07
TT
555 breakpoint_free_objfile (this);
556 btrace_free_objfile (this);
2f202fde 557
c906108c
SS
558 /* First do any symbol file specific actions required when we are
559 finished with a particular symbol file. Note that if the objfile
560 is using reusable symbol information (via mmalloc) then each of
561 these routines is responsible for doing the correct thing, either
562 freeing things which are valid only during this particular gdb
0df8b418 563 execution, or leaving them to be reused during the next one. */
c906108c 564
9e86da07
TT
565 if (sf != NULL)
566 (*sf->sym_finish) (this);
c906108c 567
9f743ef6 568 /* Discard any data modules have associated with the objfile. The function
9e86da07
TT
569 still may reference obfd. */
570 objfile_free_data (this);
c5bc3a77 571
9e86da07
TT
572 if (obfd)
573 gdb_bfd_unref (obfd);
706e3705 574 else
d6797f46 575 delete per_bfd;
c906108c 576
c906108c
SS
577 /* Before the symbol table code was redone to make it easier to
578 selectively load and remove information particular to a specific
579 linkage unit, gdb used to do these things whenever the monolithic
580 symbol table was blown away. How much still needs to be done
581 is unknown, but we play it safe for now and keep each action until
0df8b418 582 it is shown to be no longer needed. */
c5aa993b 583
cb5d864f
FF
584 /* Not all our callers call clear_symtab_users (objfile_purge_solibs,
585 for example), so we need to call this here. */
c906108c
SS
586 clear_pc_function_cache ();
587
cb5d864f 588 /* Check to see if the current_source_symtab belongs to this objfile,
0df8b418 589 and if so, call clear_current_source_symtab_and_line. */
cb5d864f
FF
590
591 {
592 struct symtab_and_line cursal = get_current_source_symtab_and_line ();
cb5d864f 593
3c86fae3 594 if (cursal.symtab && cursal.symtab->compunit ()->objfile () == this)
00174a86 595 clear_current_source_symtab_and_line ();
cb5d864f
FF
596 }
597
0df8b418 598 /* Free the obstacks for non-reusable objfiles. */
9e86da07 599 obstack_free (&objfile_obstack, 0);
6c95b8df
PA
600
601 /* Rebuild section map next time we need it. */
9e86da07 602 get_objfile_pspace_data (pspace)->section_map_dirty = 1;
c906108c
SS
603}
604
c906108c 605\f
34eaf542
TT
606/* A helper function for objfile_relocate1 that relocates a single
607 symbol. */
608
609static void
610relocate_one_symbol (struct symbol *sym, struct objfile *objfile,
6a053cb1 611 const section_offsets &delta)
34eaf542
TT
612{
613 fixup_symbol_section (sym, objfile);
614
615 /* The RS6000 code from which this was taken skipped
616 any symbols in STRUCT_DOMAIN or UNDEF_DOMAIN.
617 But I'm leaving out that test, on the theory that
618 they can't possibly pass the tests below. */
66d7f48f
SM
619 if ((sym->aclass () == LOC_LABEL
620 || sym->aclass () == LOC_STATIC)
a52d653e 621 && sym->section_index () >= 0)
4aeddc50
SM
622 sym->set_value_address (sym->value_address ()
623 + delta[sym->section_index ()]);
34eaf542
TT
624}
625
c906108c 626/* Relocate OBJFILE to NEW_OFFSETS. There should be OBJFILE->NUM_SECTIONS
b260e109
JK
627 entries in new_offsets. SEPARATE_DEBUG_OBJFILE is not touched here.
628 Return non-zero iff any change happened. */
567995e1 629
b260e109 630static int
5cc80db3 631objfile_relocate1 (struct objfile *objfile,
6a053cb1 632 const section_offsets &new_offsets)
c906108c 633{
6a053cb1 634 section_offsets delta (objfile->section_offsets.size ());
c906108c 635
5cc80db3
MS
636 int something_changed = 0;
637
6a053cb1 638 for (int i = 0; i < objfile->section_offsets.size (); ++i)
5cc80db3 639 {
6a053cb1
TT
640 delta[i] = new_offsets[i] - objfile->section_offsets[i];
641 if (delta[i] != 0)
5cc80db3
MS
642 something_changed = 1;
643 }
644 if (!something_changed)
645 return 0;
c906108c
SS
646
647 /* OK, get all the symtabs. */
648 {
b669c953 649 for (compunit_symtab *cust : objfile->compunits ())
d5da8b3c 650 {
102cc235 651 for (symtab *s : cust->filetabs ())
d5da8b3c
TT
652 {
653 struct linetable *l;
654
655 /* First the line table. */
5b607461 656 l = s->linetable ();
d5da8b3c
TT
657 if (l)
658 {
659 for (int i = 0; i < l->nitems; ++i)
c1e35bc9 660 l->item[i].pc += delta[cust->block_line_section ()];
d5da8b3c
TT
661 }
662 }
663 }
c906108c 664
b669c953 665 for (compunit_symtab *cust : objfile->compunits ())
592553c4 666 {
63d609de 667 struct blockvector *bv = cust->blockvector ();
c1e35bc9 668 int block_line_section = cust->block_line_section ();
592553c4 669
414705d1
SM
670 if (bv->map () != nullptr)
671 addrmap_relocate (bv->map (), delta[block_line_section]);
592553c4 672
63d609de 673 for (block *b : bv->blocks ())
592553c4 674 {
592553c4 675 struct symbol *sym;
b026f593 676 struct mdict_iterator miter;
592553c4 677
4b8791e1
SM
678 b->set_start (b->start () + delta[block_line_section]);
679 b->set_end (b->end () + delta[block_line_section]);
592553c4 680
f5cb8afd
SM
681 for (blockrange &r : b->ranges ())
682 {
683 r.set_start (r.start () + delta[block_line_section]);
684 r.set_end (r.end () + delta[block_line_section]);
685 }
592553c4
TT
686
687 /* We only want to iterate over the local symbols, not any
688 symbols in included symtabs. */
24d74bb5 689 ALL_DICT_SYMBOLS (b->multidict (), miter, sym)
9644dc3a 690 {
592553c4 691 relocate_one_symbol (sym, objfile, delta);
9644dc3a 692 }
592553c4
TT
693 }
694 }
c906108c
SS
695 }
696
75336a5a 697 /* Notify the quick symbol object. */
e1114590
TT
698 for (const auto &iter : objfile->qf)
699 iter->relocated ();
79748972 700
34eaf542
TT
701 /* Relocate isolated symbols. */
702 {
703 struct symbol *iter;
704
705 for (iter = objfile->template_symbols; iter; iter = iter->hash_next)
706 relocate_one_symbol (iter, objfile, delta);
707 }
708
f1f2b5f4
PA
709 {
710 int i;
5cc80db3 711
6a053cb1
TT
712 for (i = 0; i < objfile->section_offsets.size (); ++i)
713 objfile->section_offsets[i] = new_offsets[i];
f1f2b5f4
PA
714 }
715
716 /* Rebuild section map next time we need it. */
607ece04 717 get_objfile_pspace_data (objfile->pspace)->section_map_dirty = 1;
f1f2b5f4 718
30510692 719 /* Update the table in exec_ops, used to read memory. */
b926417a 720 struct obj_section *s;
30510692
DJ
721 ALL_OBJFILE_OSECTIONS (objfile, s)
722 {
65cf3563 723 int idx = s - objfile->sections;
30510692
DJ
724
725 exec_set_section_address (bfd_get_filename (objfile->obfd), idx,
0c1bcd23 726 s->addr ());
30510692 727 }
b260e109
JK
728
729 /* Data changed. */
730 return 1;
567995e1
JK
731}
732
733/* Relocate OBJFILE to NEW_OFFSETS. There should be OBJFILE->NUM_SECTIONS
734 entries in new_offsets. Process also OBJFILE's SEPARATE_DEBUG_OBJFILEs.
735
736 The number and ordering of sections does differ between the two objfiles.
737 Only their names match. Also the file offsets will differ (objfile being
738 possibly prelinked but separate_debug_objfile is probably not prelinked) but
739 the in-memory absolute address as specified by NEW_OFFSETS must match both
740 files. */
741
742void
3189cb12 743objfile_relocate (struct objfile *objfile,
6a053cb1 744 const section_offsets &new_offsets)
567995e1 745{
b260e109 746 int changed = 0;
567995e1 747
b260e109 748 changed |= objfile_relocate1 (objfile, new_offsets);
567995e1 749
bde09ab7 750 for (::objfile *debug_objfile : objfile->separate_debug_objfiles ())
567995e1 751 {
e9ad22ee
TT
752 if (debug_objfile == objfile)
753 continue;
754
37e136b1
TT
755 section_addr_info objfile_addrs
756 = build_section_addr_info_from_objfile (objfile);
567995e1
JK
757
758 /* Here OBJFILE_ADDRS contain the correct absolute addresses, the
759 relative ones must be already created according to debug_objfile. */
760
37e136b1 761 addr_info_make_relative (&objfile_addrs, debug_objfile->obfd);
567995e1 762
6a053cb1 763 gdb_assert (debug_objfile->section_offsets.size ()
d445b2f6 764 == gdb_bfd_count_sections (debug_objfile->obfd));
6a053cb1
TT
765 section_offsets new_debug_offsets
766 (debug_objfile->section_offsets.size ());
767 relative_addr_info_to_section_offsets (new_debug_offsets, objfile_addrs);
567995e1 768
6a053cb1 769 changed |= objfile_relocate1 (debug_objfile, new_debug_offsets);
567995e1 770 }
30510692 771
0df8b418 772 /* Relocate breakpoints as necessary, after things are relocated. */
b260e109
JK
773 if (changed)
774 breakpoint_re_set ();
c906108c 775}
4141a416
JB
776
777/* Rebase (add to the offsets) OBJFILE by SLIDE. SEPARATE_DEBUG_OBJFILE is
778 not touched here.
779 Return non-zero iff any change happened. */
780
781static int
782objfile_rebase1 (struct objfile *objfile, CORE_ADDR slide)
783{
6a053cb1 784 section_offsets new_offsets (objfile->section_offsets.size (), slide);
4141a416
JB
785 return objfile_relocate1 (objfile, new_offsets);
786}
787
788/* Rebase (add to the offsets) OBJFILE by SLIDE. Process also OBJFILE's
789 SEPARATE_DEBUG_OBJFILEs. */
790
791void
792objfile_rebase (struct objfile *objfile, CORE_ADDR slide)
793{
4141a416
JB
794 int changed = 0;
795
bde09ab7 796 for (::objfile *debug_objfile : objfile->separate_debug_objfiles ())
4141a416
JB
797 changed |= objfile_rebase1 (debug_objfile, slide);
798
799 /* Relocate breakpoints as necessary, after things are relocated. */
800 if (changed)
801 breakpoint_re_set ();
802}
c906108c 803\f
55333a84
DE
804/* Return non-zero if OBJFILE has full symbols. */
805
806int
807objfile_has_full_symbols (struct objfile *objfile)
808{
43f3e411 809 return objfile->compunit_symtabs != NULL;
55333a84
DE
810}
811
e361b228 812/* Return non-zero if OBJFILE has full or partial symbols, either directly
15d123c9 813 or through a separate debug file. */
e361b228
TG
814
815int
816objfile_has_symbols (struct objfile *objfile)
817{
bde09ab7 818 for (::objfile *o : objfile->separate_debug_objfiles ())
a8ad4f3c 819 if (o->has_partial_symbols () || objfile_has_full_symbols (o))
15d123c9 820 return 1;
e361b228
TG
821 return 0;
822}
823
824
c906108c
SS
825/* Many places in gdb want to test just to see if we have any partial
826 symbols available. This function returns zero if none are currently
0df8b418 827 available, nonzero otherwise. */
c906108c
SS
828
829int
fba45db2 830have_partial_symbols (void)
c906108c 831{
2030c079 832 for (objfile *ofp : current_program_space->objfiles ())
aed57c53 833 {
a8ad4f3c 834 if (ofp->has_partial_symbols ())
aed57c53
TT
835 return 1;
836 }
c906108c
SS
837 return 0;
838}
839
840/* Many places in gdb want to test just to see if we have any full
841 symbols available. This function returns zero if none are currently
0df8b418 842 available, nonzero otherwise. */
c906108c
SS
843
844int
fba45db2 845have_full_symbols (void)
c906108c 846{
2030c079 847 for (objfile *ofp : current_program_space->objfiles ())
aed57c53
TT
848 {
849 if (objfile_has_full_symbols (ofp))
850 return 1;
851 }
c906108c
SS
852 return 0;
853}
854
855
856/* This operations deletes all objfile entries that represent solibs that
857 weren't explicitly loaded by the user, via e.g., the add-symbol-file
0df8b418
MS
858 command. */
859
c906108c 860void
fba45db2 861objfile_purge_solibs (void)
c906108c 862{
7e955d83 863 for (objfile *objf : current_program_space->objfiles_safe ())
cac85af2
TT
864 {
865 /* We assume that the solib package has been purged already, or will
866 be soon. */
0df8b418 867
cac85af2 868 if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
268e4f09 869 objf->unlink ();
cac85af2 870 }
c906108c
SS
871}
872
873
874/* Many places in gdb want to test just to see if we have any minimal
875 symbols available. This function returns zero if none are currently
0df8b418 876 available, nonzero otherwise. */
c906108c
SS
877
878int
fba45db2 879have_minimal_symbols (void)
c906108c 880{
2030c079 881 for (objfile *ofp : current_program_space->objfiles ())
aed57c53
TT
882 {
883 if (ofp->per_bfd->minimal_symbol_count > 0)
884 {
885 return 1;
886 }
887 }
c906108c
SS
888 return 0;
889}
890
a845f5cb
PP
891/* Qsort comparison function. */
892
39ef2f62
CB
893static bool
894sort_cmp (const struct obj_section *sect1, const obj_section *sect2)
a845f5cb 895{
0c1bcd23
SM
896 const CORE_ADDR sect1_addr = sect1->addr ();
897 const CORE_ADDR sect2_addr = sect2->addr ();
a845f5cb
PP
898
899 if (sect1_addr < sect2_addr)
39ef2f62 900 return true;
a845f5cb 901 else if (sect1_addr > sect2_addr)
39ef2f62 902 return false;
6fbf07cd 903 else
5cc80db3
MS
904 {
905 /* Sections are at the same address. This could happen if
906 A) we have an objfile and a separate debuginfo.
907 B) we are confused, and have added sections without proper relocation,
0df8b418 908 or something like that. */
5cc80db3
MS
909
910 const struct objfile *const objfile1 = sect1->objfile;
911 const struct objfile *const objfile2 = sect2->objfile;
912
913 if (objfile1->separate_debug_objfile == objfile2
914 || objfile2->separate_debug_objfile == objfile1)
915 {
916 /* Case A. The ordering doesn't matter: separate debuginfo files
917 will be filtered out later. */
918
39ef2f62 919 return false;
5cc80db3
MS
920 }
921
922 /* Case B. Maintain stable sort order, so bugs in GDB are easier to
923 triage. This section could be slow (since we iterate over all
39ef2f62 924 objfiles in each call to sort_cmp), but this shouldn't happen
5cc80db3
MS
925 very often (GDB is already in a confused state; one hopes this
926 doesn't happen at all). If you discover that significant time is
927 spent in the loops below, do 'set complaints 100' and examine the
928 resulting complaints. */
5cc80db3
MS
929 if (objfile1 == objfile2)
930 {
45f47c3a
AB
931 /* Both sections came from the same objfile. We are really
932 confused. Sort on sequence order of sections within the
933 objfile. The order of checks is important here, if we find a
934 match on SECT2 first then either SECT2 is before SECT1, or,
935 SECT2 == SECT1, in both cases we should return false. The
936 second case shouldn't occur during normal use, but std::sort
937 does check that '!(a < a)' when compiled in debug mode. */
5cc80db3
MS
938
939 const struct obj_section *osect;
940
941 ALL_OBJFILE_OSECTIONS (objfile1, osect)
45f47c3a 942 if (osect == sect2)
39ef2f62 943 return false;
45f47c3a
AB
944 else if (osect == sect1)
945 return true;
5cc80db3
MS
946
947 /* We should have found one of the sections before getting here. */
f3574227 948 gdb_assert_not_reached ("section not found");
5cc80db3
MS
949 }
950 else
951 {
952 /* Sort on sequence number of the objfile in the chain. */
953
2030c079 954 for (objfile *objfile : current_program_space->objfiles ())
5cc80db3 955 if (objfile == objfile1)
39ef2f62 956 return true;
5cc80db3 957 else if (objfile == objfile2)
39ef2f62 958 return false;
5cc80db3
MS
959
960 /* We should have found one of the objfiles before getting here. */
f3574227 961 gdb_assert_not_reached ("objfile not found");
5cc80db3
MS
962 }
963 }
6fbf07cd
PP
964
965 /* Unreachable. */
f3574227 966 gdb_assert_not_reached ("unexpected code path");
39ef2f62 967 return false;
a845f5cb
PP
968}
969
3aad21cf
PP
970/* Select "better" obj_section to keep. We prefer the one that came from
971 the real object, rather than the one from separate debuginfo.
972 Most of the time the two sections are exactly identical, but with
973 prelinking the .rel.dyn section in the real object may have different
974 size. */
975
976static struct obj_section *
977preferred_obj_section (struct obj_section *a, struct obj_section *b)
978{
0c1bcd23 979 gdb_assert (a->addr () == b->addr ());
3aad21cf
PP
980 gdb_assert ((a->objfile->separate_debug_objfile == b->objfile)
981 || (b->objfile->separate_debug_objfile == a->objfile));
982 gdb_assert ((a->objfile->separate_debug_objfile_backlink == b->objfile)
983 || (b->objfile->separate_debug_objfile_backlink == a->objfile));
984
985 if (a->objfile->separate_debug_objfile != NULL)
986 return a;
987 return b;
988}
989
6fbf07cd
PP
990/* Return 1 if SECTION should be inserted into the section map.
991 We want to insert only non-overlay and non-TLS section. */
992
993static int
994insert_section_p (const struct bfd *abfd,
995 const struct bfd_section *section)
996{
fd361982 997 const bfd_vma lma = bfd_section_lma (section);
6fbf07cd 998
fd361982 999 if (overlay_debugging && lma != 0 && lma != bfd_section_vma (section)
6fbf07cd
PP
1000 && (bfd_get_file_flags (abfd) & BFD_IN_MEMORY) == 0)
1001 /* This is an overlay section. IN_MEMORY check is needed to avoid
1002 discarding sections from the "system supplied DSO" (aka vdso)
1003 on some Linux systems (e.g. Fedora 11). */
1004 return 0;
fd361982 1005 if ((bfd_section_flags (section) & SEC_THREAD_LOCAL) != 0)
6fbf07cd
PP
1006 /* This is a TLS section. */
1007 return 0;
1008
1009 return 1;
1010}
1011
1012/* Filter out overlapping sections where one section came from the real
1013 objfile, and the other from a separate debuginfo file.
1014 Return the size of table after redundant sections have been eliminated. */
1015
1016static int
1017filter_debuginfo_sections (struct obj_section **map, int map_size)
1018{
1019 int i, j;
1020
1021 for (i = 0, j = 0; i < map_size - 1; i++)
1022 {
1023 struct obj_section *const sect1 = map[i];
1024 struct obj_section *const sect2 = map[i + 1];
1025 const struct objfile *const objfile1 = sect1->objfile;
1026 const struct objfile *const objfile2 = sect2->objfile;
0c1bcd23
SM
1027 const CORE_ADDR sect1_addr = sect1->addr ();
1028 const CORE_ADDR sect2_addr = sect2->addr ();
6fbf07cd
PP
1029
1030 if (sect1_addr == sect2_addr
1031 && (objfile1->separate_debug_objfile == objfile2
1032 || objfile2->separate_debug_objfile == objfile1))
1033 {
1034 map[j++] = preferred_obj_section (sect1, sect2);
1035 ++i;
1036 }
1037 else
1038 map[j++] = sect1;
1039 }
1040
1041 if (i < map_size)
1042 {
1043 gdb_assert (i == map_size - 1);
1044 map[j++] = map[i];
1045 }
1046
1047 /* The map should not have shrunk to less than half the original size. */
1048 gdb_assert (map_size / 2 <= j);
1049
1050 return j;
1051}
1052
1053/* Filter out overlapping sections, issuing a warning if any are found.
1054 Overlapping sections could really be overlay sections which we didn't
1055 classify as such in insert_section_p, or we could be dealing with a
1056 corrupt binary. */
1057
1058static int
1059filter_overlapping_sections (struct obj_section **map, int map_size)
1060{
1061 int i, j;
1062
1063 for (i = 0, j = 0; i < map_size - 1; )
1064 {
1065 int k;
1066
1067 map[j++] = map[i];
1068 for (k = i + 1; k < map_size; k++)
1069 {
1070 struct obj_section *const sect1 = map[i];
1071 struct obj_section *const sect2 = map[k];
0c1bcd23
SM
1072 const CORE_ADDR sect1_addr = sect1->addr ();
1073 const CORE_ADDR sect2_addr = sect2->addr ();
1074 const CORE_ADDR sect1_endaddr = sect1->endaddr ();
6fbf07cd
PP
1075
1076 gdb_assert (sect1_addr <= sect2_addr);
1077
1078 if (sect1_endaddr <= sect2_addr)
1079 break;
1080 else
1081 {
1082 /* We have an overlap. Report it. */
1083
1084 struct objfile *const objf1 = sect1->objfile;
1085 struct objfile *const objf2 = sect2->objfile;
1086
6fbf07cd
PP
1087 const struct bfd_section *const bfds1 = sect1->the_bfd_section;
1088 const struct bfd_section *const bfds2 = sect2->the_bfd_section;
1089
0c1bcd23 1090 const CORE_ADDR sect2_endaddr = sect2->endaddr ();
6fbf07cd 1091
08feed99 1092 struct gdbarch *const gdbarch = objf1->arch ();
6fbf07cd 1093
b98664d3 1094 complaint (_("unexpected overlap between:\n"
6fbf07cd
PP
1095 " (A) section `%s' from `%s' [%s, %s)\n"
1096 " (B) section `%s' from `%s' [%s, %s).\n"
1097 "Will ignore section B"),
fd361982 1098 bfd_section_name (bfds1), objfile_name (objf1),
6fbf07cd
PP
1099 paddress (gdbarch, sect1_addr),
1100 paddress (gdbarch, sect1_endaddr),
fd361982 1101 bfd_section_name (bfds2), objfile_name (objf2),
6fbf07cd
PP
1102 paddress (gdbarch, sect2_addr),
1103 paddress (gdbarch, sect2_endaddr));
1104 }
1105 }
1106 i = k;
1107 }
1108
1109 if (i < map_size)
1110 {
1111 gdb_assert (i == map_size - 1);
1112 map[j++] = map[i];
1113 }
1114
1115 return j;
1116}
1117
1118
1119/* Update PMAP, PMAP_SIZE with sections from all objfiles, excluding any
1120 TLS, overlay and overlapping sections. */
a845f5cb
PP
1121
1122static void
6c95b8df
PA
1123update_section_map (struct program_space *pspace,
1124 struct obj_section ***pmap, int *pmap_size)
a845f5cb 1125{
607ece04 1126 struct objfile_pspace_info *pspace_info;
6fbf07cd 1127 int alloc_size, map_size, i;
a845f5cb 1128 struct obj_section *s, **map;
a845f5cb 1129
607ece04
GB
1130 pspace_info = get_objfile_pspace_data (pspace);
1131 gdb_assert (pspace_info->section_map_dirty != 0
1132 || pspace_info->new_objfiles_available != 0);
a845f5cb
PP
1133
1134 map = *pmap;
1135 xfree (map);
1136
6fbf07cd 1137 alloc_size = 0;
2030c079 1138 for (objfile *objfile : pspace->objfiles ())
6c95b8df
PA
1139 ALL_OBJFILE_OSECTIONS (objfile, s)
1140 if (insert_section_p (objfile->obfd, s->the_bfd_section))
1141 alloc_size += 1;
a845f5cb 1142
65a97ab3
PP
1143 /* This happens on detach/attach (e.g. in gdb.base/attach.exp). */
1144 if (alloc_size == 0)
1145 {
1146 *pmap = NULL;
1147 *pmap_size = 0;
1148 return;
1149 }
1150
8d749320 1151 map = XNEWVEC (struct obj_section *, alloc_size);
a845f5cb 1152
3aad21cf 1153 i = 0;
2030c079 1154 for (objfile *objfile : pspace->objfiles ())
6c95b8df
PA
1155 ALL_OBJFILE_OSECTIONS (objfile, s)
1156 if (insert_section_p (objfile->obfd, s->the_bfd_section))
1157 map[i++] = s;
a845f5cb 1158
39ef2f62 1159 std::sort (map, map + alloc_size, sort_cmp);
6fbf07cd
PP
1160 map_size = filter_debuginfo_sections(map, alloc_size);
1161 map_size = filter_overlapping_sections(map, map_size);
a845f5cb 1162
6fbf07cd
PP
1163 if (map_size < alloc_size)
1164 /* Some sections were eliminated. Trim excess space. */
224c3ddb 1165 map = XRESIZEVEC (struct obj_section *, map, map_size);
3aad21cf 1166 else
6fbf07cd 1167 gdb_assert (alloc_size == map_size);
3aad21cf 1168
a845f5cb
PP
1169 *pmap = map;
1170 *pmap_size = map_size;
1171}
1172
0df8b418 1173/* Bsearch comparison function. */
a845f5cb
PP
1174
1175static int
1176bsearch_cmp (const void *key, const void *elt)
1177{
1178 const CORE_ADDR pc = *(CORE_ADDR *) key;
1179 const struct obj_section *section = *(const struct obj_section **) elt;
1180
0c1bcd23 1181 if (pc < section->addr ())
a845f5cb 1182 return -1;
0c1bcd23 1183 if (pc < section->endaddr ())
a845f5cb
PP
1184 return 0;
1185 return 1;
1186}
1187
714835d5 1188/* Returns a section whose range includes PC or NULL if none found. */
c906108c
SS
1189
1190struct obj_section *
714835d5 1191find_pc_section (CORE_ADDR pc)
c906108c 1192{
6c95b8df 1193 struct objfile_pspace_info *pspace_info;
a845f5cb 1194 struct obj_section *s, **sp;
c5aa993b 1195
714835d5
UW
1196 /* Check for mapped overlay section first. */
1197 s = find_pc_mapped_section (pc);
1198 if (s)
1199 return s;
c906108c 1200
6c95b8df 1201 pspace_info = get_objfile_pspace_data (current_program_space);
607ece04
GB
1202 if (pspace_info->section_map_dirty
1203 || (pspace_info->new_objfiles_available
1204 && !pspace_info->inhibit_updates))
a845f5cb 1205 {
6c95b8df
PA
1206 update_section_map (current_program_space,
1207 &pspace_info->sections,
1208 &pspace_info->num_sections);
c906108c 1209
6c95b8df 1210 /* Don't need updates to section map until objfiles are added,
dda83cd7 1211 removed or relocated. */
607ece04
GB
1212 pspace_info->new_objfiles_available = 0;
1213 pspace_info->section_map_dirty = 0;
a845f5cb
PP
1214 }
1215
65a97ab3
PP
1216 /* The C standard (ISO/IEC 9899:TC2) requires the BASE argument to
1217 bsearch be non-NULL. */
1218 if (pspace_info->sections == NULL)
1219 {
1220 gdb_assert (pspace_info->num_sections == 0);
1221 return NULL;
1222 }
1223
6c95b8df
PA
1224 sp = (struct obj_section **) bsearch (&pc,
1225 pspace_info->sections,
1226 pspace_info->num_sections,
1227 sizeof (*pspace_info->sections),
1228 bsearch_cmp);
a845f5cb
PP
1229 if (sp != NULL)
1230 return *sp;
714835d5 1231 return NULL;
c906108c 1232}
c5aa993b 1233
c906108c 1234
3e5d3a5a 1235/* Return non-zero if PC is in a section called NAME. */
c906108c
SS
1236
1237int
a121b7c1 1238pc_in_section (CORE_ADDR pc, const char *name)
c906108c
SS
1239{
1240 struct obj_section *s;
1241 int retval = 0;
c5aa993b
JM
1242
1243 s = find_pc_section (pc);
1244
c906108c
SS
1245 retval = (s != NULL
1246 && s->the_bfd_section->name != NULL
3e5d3a5a 1247 && strcmp (s->the_bfd_section->name, name) == 0);
c5aa993b 1248 return (retval);
c906108c 1249}
0d0e1a63
MK
1250\f
1251
607ece04 1252/* Set section_map_dirty so section map will be rebuilt next time it
bb272892 1253 is used. Called by reread_symbols. */
a845f5cb
PP
1254
1255void
bb272892 1256objfiles_changed (void)
a845f5cb 1257{
6c95b8df 1258 /* Rebuild section map next time we need it. */
607ece04
GB
1259 get_objfile_pspace_data (current_program_space)->section_map_dirty = 1;
1260}
1261
1262/* See comments in objfiles.h. */
1263
06424eac 1264scoped_restore_tmpl<int>
607ece04
GB
1265inhibit_section_map_updates (struct program_space *pspace)
1266{
06424eac
TT
1267 return scoped_restore_tmpl<int>
1268 (&get_objfile_pspace_data (pspace)->inhibit_updates, 1);
a845f5cb 1269}
e3c69974 1270
02ff80c2 1271/* See objfiles.h. */
63644780 1272
02ff80c2 1273bool
63644780
NB
1274is_addr_in_objfile (CORE_ADDR addr, const struct objfile *objfile)
1275{
1276 struct obj_section *osect;
1277
1278 if (objfile == NULL)
02ff80c2 1279 return false;
63644780
NB
1280
1281 ALL_OBJFILE_OSECTIONS (objfile, osect)
1282 {
1283 if (section_is_overlay (osect) && !section_is_mapped (osect))
1284 continue;
1285
0c1bcd23 1286 if (osect->addr () <= addr && addr < osect->endaddr ())
02ff80c2 1287 return true;
63644780 1288 }
02ff80c2 1289 return false;
63644780
NB
1290}
1291
02ff80c2
SM
1292/* See objfiles.h. */
1293
1294bool
d03de421
PA
1295shared_objfile_contains_address_p (struct program_space *pspace,
1296 CORE_ADDR address)
08351840 1297{
2030c079 1298 for (objfile *objfile : pspace->objfiles ())
08351840 1299 {
d03de421 1300 if ((objfile->flags & OBJF_SHARED) != 0
08351840 1301 && is_addr_in_objfile (address, objfile))
02ff80c2 1302 return true;
08351840
PA
1303 }
1304
02ff80c2 1305 return false;
08351840
PA
1306}
1307
19630284 1308/* The default implementation for the "iterate_over_objfiles_in_search_order"
2030c079 1309 gdbarch method. It is equivalent to use the objfiles iterable,
19630284
JB
1310 searching the objfiles in the order they are stored internally,
1311 ignoring CURRENT_OBJFILE.
1312
85102364 1313 On most platforms, it should be close enough to doing the best
19630284
JB
1314 we can without some knowledge specific to the architecture. */
1315
1316void
1317default_iterate_over_objfiles_in_search_order
1318 (struct gdbarch *gdbarch,
1319 iterate_over_objfiles_in_search_order_cb_ftype *cb,
1320 void *cb_data, struct objfile *current_objfile)
1321{
1322 int stop = 0;
19630284 1323
2030c079 1324 for (objfile *objfile : current_program_space->objfiles ())
19630284
JB
1325 {
1326 stop = cb (objfile, cb_data);
1327 if (stop)
1328 return;
1329 }
1330}
1331
e02c96a7 1332/* See objfiles.h. */
4262abfb
JK
1333
1334const char *
1335objfile_name (const struct objfile *objfile)
1336{
24ba069a
JK
1337 if (objfile->obfd != NULL)
1338 return bfd_get_filename (objfile->obfd);
1339
4262abfb
JK
1340 return objfile->original_name;
1341}
1342
cc485e62
DE
1343/* See objfiles.h. */
1344
e02c96a7
DE
1345const char *
1346objfile_filename (const struct objfile *objfile)
1347{
1348 if (objfile->obfd != NULL)
1349 return bfd_get_filename (objfile->obfd);
1350
1351 return NULL;
1352}
1353
1354/* See objfiles.h. */
1355
cc485e62
DE
1356const char *
1357objfile_debug_name (const struct objfile *objfile)
1358{
1359 return lbasename (objfile->original_name);
1360}
1361
015d2e7e
DE
1362/* See objfiles.h. */
1363
1364const char *
1365objfile_flavour_name (struct objfile *objfile)
1366{
1367 if (objfile->obfd != NULL)
1368 return bfd_flavour_name (bfd_get_flavour (objfile->obfd));
1369 return NULL;
1370}
b3a01ce2
WP
1371
1372/* See objfiles.h. */
1373
1374struct type *
1375objfile_int_type (struct objfile *of, int size_in_bytes, bool unsigned_p)
1376{
1377 struct type *int_type;
1378
1379 /* Helper macro to examine the various builtin types. */
1380#define TRY_TYPE(F) \
1381 int_type = (unsigned_p \
1382 ? objfile_type (of)->builtin_unsigned_ ## F \
1383 : objfile_type (of)->builtin_ ## F); \
1384 if (int_type != NULL && TYPE_LENGTH (int_type) == size_in_bytes) \
1385 return int_type
1386
1387 TRY_TYPE (char);
1388 TRY_TYPE (short);
1389 TRY_TYPE (int);
1390 TRY_TYPE (long);
1391 TRY_TYPE (long_long);
1392
1393#undef TRY_TYPE
1394
1395 gdb_assert_not_reached ("unable to find suitable integer type");
1396}