projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git]
/
gdb
/
symfile.c
diff --git
a/gdb/symfile.c
b/gdb/symfile.c
index 946443f07a89a911dc79ff67c19140553372a8ec..b29f864b3735989392dae7684754e7958413a08d 100644
(file)
--- a/
gdb/symfile.c
+++ b/
gdb/symfile.c
@@
-717,12
+717,11
@@
default_symfile_offsets (struct objfile *objfile,
It assumes that object files do not have segments, and fully linked
files have a single segment. */
It assumes that object files do not have segments, and fully linked
files have a single segment. */
-s
truct symfile_segment_data *
+s
ymfile_segment_data_up
default_symfile_segments (bfd *abfd)
{
int num_sections, i;
asection *sect;
default_symfile_segments (bfd *abfd)
{
int num_sections, i;
asection *sect;
- struct symfile_segment_data *data;
CORE_ADDR low, high;
/* Relocatable files contain enough information to position each
CORE_ADDR low, high;
/* Relocatable files contain enough information to position each
@@
-745,13
+744,12
@@
default_symfile_segments (bfd *abfd)
low = bfd_section_vma (sect);
high = low + bfd_section_size (sect);
low = bfd_section_vma (sect);
high = low + bfd_section_size (sect);
- data = XCNEW (struct symfile_segment_data);
- data->num_segments = 1;
- data->segment_bases = XCNEW (CORE_ADDR);
- data->segment_sizes = XCNEW (CORE_ADDR);
+ symfile_segment_data_up data (new symfile_segment_data);
num_sections = bfd_count_sections (abfd);
num_sections = bfd_count_sections (abfd);
- data->segment_info = XCNEWVEC (int, num_sections);
+
+ /* All elements are initialized to 0 (map to no segment). */
+ data->segment_info.resize (num_sections);
for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
{
for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
{
@@
-769,8
+767,7
@@
default_symfile_segments (bfd *abfd)
data->segment_info[i] = 1;
}
data->segment_info[i] = 1;
}
- data->segment_bases[0] = low;
- data->segment_sizes[0] = high - low;
+ data->segments.emplace_back (low, high - low);
return data;
}
return data;
}
@@
-1278,7
+1275,7
@@
separate_debug_file_exists (const std::string &name, unsigned long crc,
gdb_flush (gdb_stdout);
}
gdb_flush (gdb_stdout);
}
- gdb_bfd_ref_ptr abfd (gdb_bfd_open (name.c_str (), gnutarget
, -1
));
+ gdb_bfd_ref_ptr abfd (gdb_bfd_open (name.c_str (), gnutarget));
if (abfd == NULL)
{
if (abfd == NULL)
{
@@
-2042,7
+2039,7
@@
generic_load (const char *args, int from_tty)
}
/* Open the file for loading. */
}
/* Open the file for loading. */
- gdb_bfd_ref_ptr loadfile_bfd (gdb_bfd_open (filename.get (), gnutarget
, -1
));
+ gdb_bfd_ref_ptr loadfile_bfd (gdb_bfd_open (filename.get (), gnutarget));
if (loadfile_bfd == NULL)
perror_with_name (filename.get ());
if (loadfile_bfd == NULL)
perror_with_name (filename.get ());
@@
-2453,7
+2450,7
@@
reread_symbols (void)
a `shared library' on AIX is also an archive), then you should
stat on the archive name, not member name. */
if (objfile->obfd->my_archive)
a `shared library' on AIX is also an archive), then you should
stat on the archive name, not member name. */
if (objfile->obfd->my_archive)
- res = stat (
objfile->obfd->my_archive->filename
, &new_statbuf);
+ res = stat (
bfd_get_filename (objfile->obfd->my_archive)
, &new_statbuf);
else
res = stat (objfile_name (objfile), &new_statbuf);
if (res != 0)
else
res = stat (objfile_name (objfile), &new_statbuf);
if (res != 0)
@@
-2527,7
+2524,7
@@
reread_symbols (void)
obfd_filename = bfd_get_filename (objfile->obfd);
/* Open the new BFD before freeing the old one, so that
the filename remains live. */
obfd_filename = bfd_get_filename (objfile->obfd);
/* Open the new BFD before freeing the old one, so that
the filename remains live. */
- gdb_bfd_ref_ptr temp (gdb_bfd_open (obfd_filename, gnutarget
, -1
));
+ gdb_bfd_ref_ptr temp (gdb_bfd_open (obfd_filename, gnutarget));
objfile->obfd = temp.release ();
if (objfile->obfd == NULL)
error (_("Can't open %s to read symbols."), obfd_filename);
objfile->obfd = temp.release ();
if (objfile->obfd == NULL)
error (_("Can't open %s to read symbols."), obfd_filename);
@@
-2546,6
+2543,11
@@
reread_symbols (void)
will need to be called (see discussion below). */
obstack_free (&objfile->objfile_obstack, 0);
objfile->sections = NULL;
will need to be called (see discussion below). */
obstack_free (&objfile->objfile_obstack, 0);
objfile->sections = NULL;
+ objfile->section_offsets.clear ();
+ objfile->sect_index_bss = -1;
+ objfile->sect_index_data = -1;
+ objfile->sect_index_rodata = -1;
+ objfile->sect_index_text = -1;
objfile->compunit_symtabs = NULL;
objfile->template_symbols = NULL;
objfile->static_links.reset (nullptr);
objfile->compunit_symtabs = NULL;
objfile->template_symbols = NULL;
objfile->static_links.reset (nullptr);
@@
-2600,6
+2602,9
@@
reread_symbols (void)
objfiles_changed ();
objfiles_changed ();
+ /* Recompute section offsets and section indices. */
+ objfile->sf->sym_offsets (objfile, {});
+
read_symbols (objfile, 0);
if (!objfile_has_symbols (objfile))
read_symbols (objfile, 0);
if (!objfile_has_symbols (objfile))
@@
-3399,8
+3404,7
@@
enum ovly_index
static void
simple_free_overlay_table (void)
{
static void
simple_free_overlay_table (void)
{
- if (cache_ovly_table)
- xfree (cache_ovly_table);
+ xfree (cache_ovly_table);
cache_novlys = 0;
cache_ovly_table = NULL;
cache_ovly_table_base = 0;
cache_novlys = 0;
cache_ovly_table = NULL;
cache_ovly_table_base = 0;
@@
-3621,7
+3625,7
@@
symfile_relocate_debug_section (struct objfile *objfile,
return (*objfile->sf->sym_relocate) (objfile, sectp, buf);
}
return (*objfile->sf->sym_relocate) (objfile, sectp, buf);
}
-s
truct symfile_segment_data *
+s
ymfile_segment_data_up
get_symfile_segment_data (bfd *abfd)
{
const struct sym_fns *sf = find_sym_fns (abfd);
get_symfile_segment_data (bfd *abfd)
{
const struct sym_fns *sf = find_sym_fns (abfd);
@@
-3632,15
+3636,6
@@
get_symfile_segment_data (bfd *abfd)
return sf->sym_segments (abfd);
}
return sf->sym_segments (abfd);
}
-void
-free_symfile_segment_data (struct symfile_segment_data *data)
-{
- xfree (data->segment_bases);
- xfree (data->segment_sizes);
- xfree (data->segment_info);
- xfree (data);
-}
-
/* Given:
- DATA, containing segment addresses from the object file ABFD, and
the mapping from ABFD's sections onto the segments that own them,
/* Given:
- DATA, containing segment addresses from the object file ABFD, and
the mapping from ABFD's sections onto the segments that own them,
@@
-3673,13
+3668,13
@@
symfile_map_offsets_to_segments (bfd *abfd,
/* If we do not have segment mappings for the object file, we
can not relocate it by segments. */
gdb_assert (data != NULL);
/* If we do not have segment mappings for the object file, we
can not relocate it by segments. */
gdb_assert (data != NULL);
- gdb_assert (data->
num_segments
> 0);
+ gdb_assert (data->
segments.size ()
> 0);
for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
{
int which = data->segment_info[i];
for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
{
int which = data->segment_info[i];
- gdb_assert (0 <= which && which <= data->
num_segments
);
+ gdb_assert (0 <= which && which <= data->
segments.size ()
);
/* Don't bother computing offsets for sections that aren't
loaded as part of any segment. */
/* Don't bother computing offsets for sections that aren't
loaded as part of any segment. */
@@
-3691,7
+3686,7
@@
symfile_map_offsets_to_segments (bfd *abfd,
if (which > num_segment_bases)
which = num_segment_bases;
if (which > num_segment_bases)
which = num_segment_bases;
- offsets[i] = segment_bases[which - 1] - data->segment
_bases[which - 1]
;
+ offsets[i] = segment_bases[which - 1] - data->segment
s[which - 1].base
;
}
return 1;
}
return 1;
@@
-3703,17
+3698,14
@@
symfile_find_segment_sections (struct objfile *objfile)
bfd *abfd = objfile->obfd;
int i;
asection *sect;
bfd *abfd = objfile->obfd;
int i;
asection *sect;
- struct symfile_segment_data *data;
- data = get_symfile_segment_data (objfile->obfd);
+ symfile_segment_data_up data
+ = get_symfile_segment_data (objfile->obfd);
if (data == NULL)
return;
if (data == NULL)
return;
- if (data->num_segments != 1 && data->num_segments != 2)
- {
- free_symfile_segment_data (data);
- return;
- }
+ if (data->segments.size () != 1 && data->segments.size () != 2)
+ return;
for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
{
for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
{
@@
-3736,8
+3728,6
@@
symfile_find_segment_sections (struct objfile *objfile)
objfile->sect_index_bss = sect->index;
}
}
objfile->sect_index_bss = sect->index;
}
}
-
- free_symfile_segment_data (data);
}
/* Listen for free_objfile events. */
}
/* Listen for free_objfile events. */
This page took
0.047224 seconds
and
4
git commands to generate.