projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Rename common to gdbsupport
[deliverable/binutils-gdb.git]
/
gdb
/
objfiles.c
diff --git
a/gdb/objfiles.c
b/gdb/objfiles.c
index ff8b6fc72cffee439719797edb5116b6b6690ab9..84d9681bf4ea69bd9181497f64e76d13521e7084 100644
(file)
--- a/
gdb/objfiles.c
+++ b/
gdb/objfiles.c
@@
-52,7
+52,7
@@
#include "solist.h"
#include "gdb_bfd.h"
#include "btrace.h"
#include "solist.h"
#include "gdb_bfd.h"
#include "btrace.h"
-#include "
common
/pathstuff.h"
+#include "
gdbsupport
/pathstuff.h"
#include <vector>
#include <vector>
@@
-66,30
+66,30
@@
DEFINE_REGISTRY (objfile, REGISTRY_ACCESS_FIELD)
struct objfile_pspace_info
{
struct objfile_pspace_info
{
- struct obj_section **sections;
- int num_sections;
+ objfile_pspace_info () = default;
+ ~objfile_pspace_info ();
+
+ struct obj_section **sections = nullptr;
+ int num_sections = 0;
/* Nonzero if object files have been added since the section map
was last updated. */
/* Nonzero if object files have been added since the section map
was last updated. */
- int new_objfiles_available;
+ int new_objfiles_available
= 0
;
/* Nonzero if the section map MUST be updated before use. */
/* Nonzero if the section map MUST be updated before use. */
- int section_map_dirty;
+ int section_map_dirty
= 0
;
/* Nonzero if section map updates should be inhibited if possible. */
/* Nonzero if section map updates should be inhibited if possible. */
- int inhibit_updates;
+ int inhibit_updates
= 0
;
};
/* Per-program-space data key. */
};
/* Per-program-space data key. */
-static const struct program_space_data *objfiles_pspace_data;
+static const struct program_space_key<objfile_pspace_info>
+ objfiles_pspace_data;
-static void
-objfiles_pspace_data_cleanup (struct program_space *pspace, void *arg)
+objfile_pspace_info::~objfile_pspace_info ()
{
{
- struct objfile_pspace_info *info = (struct objfile_pspace_info *) arg;
-
- xfree (info->sections);
- xfree (info);
+ xfree (sections);
}
/* Get the current svr4 data. If none is found yet, add it now. This
}
/* Get the current svr4 data. If none is found yet, add it now. This
@@
-100,13
+100,9
@@
get_objfile_pspace_data (struct program_space *pspace)
{
struct objfile_pspace_info *info;
{
struct objfile_pspace_info *info;
- info = ((struct objfile_pspace_info *)
- program_space_data (pspace, objfiles_pspace_data));
+ info = objfiles_pspace_data.get (pspace);
if (info == NULL)
if (info == NULL)
- {
- info = XCNEW (struct objfile_pspace_info);
- set_program_space_data (pspace, objfiles_pspace_data, info);
- }
+ info = objfiles_pspace_data.emplace (pspace);
return info;
}
return info;
}
@@
-115,12
+111,10
@@
get_objfile_pspace_data (struct program_space *pspace)
/* Per-BFD data key. */
/* Per-BFD data key. */
-static const struct bfd_
data *
objfiles_bfd_data;
+static const struct bfd_
key<objfile_per_bfd_storage>
objfiles_bfd_data;
objfile_per_bfd_storage::~objfile_per_bfd_storage ()
{
objfile_per_bfd_storage::~objfile_per_bfd_storage ()
{
- if (demangled_names_hash)
- htab_delete (demangled_names_hash);
}
/* Create the per-BFD storage object for OBJFILE. If ABFD is not
}
/* Create the per-BFD storage object for OBJFILE. If ABFD is not
@@
-135,8
+129,7
@@
get_objfile_bfd_data (struct objfile *objfile, struct bfd *abfd)
struct objfile_per_bfd_storage *storage = NULL;
if (abfd != NULL)
struct objfile_per_bfd_storage *storage = NULL;
if (abfd != NULL)
- storage = ((struct objfile_per_bfd_storage *)
- bfd_data (abfd, objfiles_bfd_data));
+ storage = objfiles_bfd_data.get (abfd);
if (storage == NULL)
{
if (storage == NULL)
{
@@
-145,7
+138,7
@@
get_objfile_bfd_data (struct objfile *objfile, struct bfd *abfd)
back to not sharing data across users. These cases are rare
enough that this seems reasonable. */
if (abfd != NULL && !gdb_bfd_requires_relocations (abfd))
back to not sharing data across users. These cases are rare
enough that this seems reasonable. */
if (abfd != NULL && !gdb_bfd_requires_relocations (abfd))
-
set_bfd_data (abfd, objfiles_bfd_data
, storage);
+
objfiles_bfd_data.set (abfd
, storage);
/* Look up the gdbarch associated with the BFD. */
if (abfd != NULL)
/* Look up the gdbarch associated with the BFD. */
if (abfd != NULL)
@@
-155,15
+148,6
@@
get_objfile_bfd_data (struct objfile *objfile, struct bfd *abfd)
return storage;
}
return storage;
}
-/* A deleter for objfile_per_bfd_storage that can be passed as a
- cleanup function to the BFD registry. */
-
-static void
-objfile_bfd_data_free (struct bfd *unused, void *d)
-{
- delete (struct objfile_per_bfd_storage *) d;
-}
-
/* See objfiles.h. */
void
/* See objfiles.h. */
void
@@
-233,14
+217,14
@@
objfile_register_static_link (struct objfile *objfile,
struct static_link_htab_entry *entry;
if (objfile->static_links == NULL)
struct static_link_htab_entry *entry;
if (objfile->static_links == NULL)
- objfile->static_links
=
htab_create_alloc
+ objfile->static_links
.reset (
htab_create_alloc
(1, &static_link_htab_entry_hash, static_link_htab_entry_eq, NULL,
(1, &static_link_htab_entry_hash, static_link_htab_entry_eq, NULL,
- xcalloc, xfree);
+ xcalloc, xfree)
)
;
/* Create a slot for the mapping, make sure it's the first mapping for this
block and then create the mapping itself. */
lookup_entry.block = block;
/* Create a slot for the mapping, make sure it's the first mapping for this
block and then create the mapping itself. */
lookup_entry.block = block;
- slot = htab_find_slot (objfile->static_links, &lookup_entry, INSERT);
+ slot = htab_find_slot (objfile->static_links
.get ()
, &lookup_entry, INSERT);
gdb_assert (*slot == NULL);
entry = XOBNEW (&objfile->objfile_obstack, static_link_htab_entry);
gdb_assert (*slot == NULL);
entry = XOBNEW (&objfile->objfile_obstack, static_link_htab_entry);
@@
-262,9
+246,8
@@
objfile_lookup_static_link (struct objfile *objfile,
if (objfile->static_links == NULL)
return NULL;
lookup_entry.block = block;
if (objfile->static_links == NULL)
return NULL;
lookup_entry.block = block;
- entry
- = (struct static_link_htab_entry *) htab_find (objfile->static_links,
- &lookup_entry);
+ entry = ((struct static_link_htab_entry *)
+ htab_find (objfile->static_links.get (), &lookup_entry));
if (entry == NULL)
return NULL;
if (entry == NULL)
return NULL;
@@
-448,44
+431,50
@@
entry_point_address (void)
return retval;
}
return retval;
}
-/* Iterator on PARENT and every separate debug objfile of PARENT.
- The usage pattern is:
- for (objfile = parent;
- objfile;
- objfile = objfile_separate_debug_iterate (parent, objfile))
- ...
-*/
-
-struct objfile *
-objfile_separate_debug_iterate (const struct objfile *parent,
- const struct objfile *objfile)
+separate_debug_iterator &
+separate_debug_iterator::operator++ ()
{
{
+ gdb_assert (m_objfile != nullptr);
+
struct objfile *res;
/* If any, return the first child. */
struct objfile *res;
/* If any, return the first child. */
- res = objfile->separate_debug_objfile;
- if (res)
- return res;
+ res = m_objfile->separate_debug_objfile;
+ if (res != nullptr)
+ {
+ m_objfile = res;
+ return *this;
+ }
/* Common case where there is no separate debug objfile. */
/* Common case where there is no separate debug objfile. */
- if (objfile == parent)
- return NULL;
+ if (m_objfile == m_parent)
+ {
+ m_objfile = nullptr;
+ return *this;
+ }
/* Return the brother if any. Note that we don't iterate on brothers of
the parents. */
/* Return the brother if any. Note that we don't iterate on brothers of
the parents. */
- res = objfile->separate_debug_objfile_link;
- if (res)
- return res;
+ res = m_objfile->separate_debug_objfile_link;
+ if (res != nullptr)
+ {
+ m_objfile = res;
+ return *this;
+ }
- for (res = objfile->separate_debug_objfile_backlink;
- res != parent;
+ for (res =
m_
objfile->separate_debug_objfile_backlink;
+ res !=
m_
parent;
res = res->separate_debug_objfile_backlink)
{
res = res->separate_debug_objfile_backlink)
{
- gdb_assert (res != NULL);
- if (res->separate_debug_objfile_link)
- return res->separate_debug_objfile_link;
+ gdb_assert (res != nullptr);
+ if (res->separate_debug_objfile_link != nullptr)
+ {
+ m_objfile = res->separate_debug_objfile_link;
+ return *this;
+ }
}
}
- return NULL;
+ m_objfile = nullptr;
+ return *this;
}
/* Put one object file before a specified on in the global list.
}
/* Put one object file before a specified on in the global list.
@@
-672,12
+661,6
@@
objfile::~objfile ()
for example), so we need to call this here. */
clear_pc_function_cache ();
for example), so we need to call this here. */
clear_pc_function_cache ();
- /* Clear globals which might have pointed into a removed objfile.
- FIXME: It's not clear which of these are supposed to persist
- between expressions and which ought to be reset each time. */
- expression_context_block = NULL;
- innermost_block.reset ();
-
/* Check to see if the current_source_symtab belongs to this objfile,
and if so, call clear_current_source_symtab_and_line. */
/* Check to see if the current_source_symtab belongs to this objfile,
and if so, call clear_current_source_symtab_and_line. */
@@
-693,11
+676,6
@@
objfile::~objfile ()
/* Rebuild section map next time we need it. */
get_objfile_pspace_data (pspace)->section_map_dirty = 1;
/* Rebuild section map next time we need it. */
get_objfile_pspace_data (pspace)->section_map_dirty = 1;
-
- /* Free the map for static links. There's no need to free static link
- themselves since they were allocated on the objstack. */
- if (static_links != NULL)
- htab_delete (static_links);
}
/* Free all the object files at once and clean up their users. */
}
/* Free all the object files at once and clean up their users. */
@@
-707,7
+685,7
@@
free_all_objfiles (void)
{
struct so_list *so;
{
struct so_list *so;
- /* Any objfile referencewould become stale. */
+ /* Any objfile reference
would become stale. */
for (so = master_so_list (); so; so = so->next)
gdb_assert (so->objfile == NULL);
for (so = master_so_list (); so; so = so->next)
gdb_assert (so->objfile == NULL);
@@
-868,15
+846,15
@@
void
objfile_relocate (struct objfile *objfile,
const struct section_offsets *new_offsets)
{
objfile_relocate (struct objfile *objfile,
const struct section_offsets *new_offsets)
{
- struct objfile *debug_objfile;
int changed = 0;
changed |= objfile_relocate1 (objfile, new_offsets);
int changed = 0;
changed |= objfile_relocate1 (objfile, new_offsets);
- for (debug_objfile = objfile->separate_debug_objfile;
- debug_objfile;
- debug_objfile = objfile_separate_debug_iterate (objfile, debug_objfile))
+ for (::objfile *debug_objfile : objfile->separate_debug_objfiles ())
{
{
+ if (debug_objfile == objfile)
+ continue;
+
section_addr_info objfile_addrs
= build_section_addr_info_from_objfile (objfile);
section_addr_info objfile_addrs
= build_section_addr_info_from_objfile (objfile);
@@
-925,14
+903,9
@@
objfile_rebase1 (struct objfile *objfile, CORE_ADDR slide)
void
objfile_rebase (struct objfile *objfile, CORE_ADDR slide)
{
void
objfile_rebase (struct objfile *objfile, CORE_ADDR slide)
{
- struct objfile *debug_objfile;
int changed = 0;
int changed = 0;
- changed |= objfile_rebase1 (objfile, slide);
-
- for (debug_objfile = objfile->separate_debug_objfile;
- debug_objfile;
- debug_objfile = objfile_separate_debug_iterate (objfile, debug_objfile))
+ for (::objfile *debug_objfile : objfile->separate_debug_objfiles ())
changed |= objfile_rebase1 (debug_objfile, slide);
/* Relocate breakpoints as necessary, after things are relocated. */
changed |= objfile_rebase1 (debug_objfile, slide);
/* Relocate breakpoints as necessary, after things are relocated. */
@@
-973,9
+946,7
@@
objfile_has_full_symbols (struct objfile *objfile)
int
objfile_has_symbols (struct objfile *objfile)
{
int
objfile_has_symbols (struct objfile *objfile)
{
- struct objfile *o;
-
- for (o = objfile; o; o = objfile_separate_debug_iterate (objfile, o))
+ for (::objfile *o : objfile->separate_debug_objfiles ())
if (objfile_has_partial_symbols (o) || objfile_has_full_symbols (o))
return 1;
return 0;
if (objfile_has_partial_symbols (o) || objfile_has_full_symbols (o))
return 1;
return 0;
@@
-1526,14
+1497,3
@@
objfile_flavour_name (struct objfile *objfile)
return bfd_flavour_name (bfd_get_flavour (objfile->obfd));
return NULL;
}
return bfd_flavour_name (bfd_get_flavour (objfile->obfd));
return NULL;
}
-
-void
-_initialize_objfiles (void)
-{
- objfiles_pspace_data
- = register_program_space_data_with_cleanup (NULL,
- objfiles_pspace_data_cleanup);
-
- objfiles_bfd_data = register_bfd_data_with_cleanup (NULL,
- objfile_bfd_data_free);
-}
This page took
0.028711 seconds
and
4
git commands to generate.