mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 18:39:34 +08:00
Change target_section_table to std::vector alias
Because target_section_table only holds a vector, and because it is used in an "open" way, this patch makes it just be an alias for the std::vector specialization. This makes the code less wordy. If we do ever want to add more specialized behavior to this type, it's simple enough to convert it back to a struct with the few needed methods implied by this change. gdb/ChangeLog 2020-10-12 Tom Tromey <tom@tromey.com> * target.h (struct target_ops) <get_section_table>: Update. (target_get_section_table): Update. * target.c (target_get_section_table, target_section_by_addr) (memory_xfer_partial_1): Update. * target-section.h (target_section_table): Now an alias. * target-delegates.c: Rebuild. * target-debug.h (target_debug_print_target_section_table_p): Rename from target_debug_print_struct_target_section_table_p. * symfile.c (build_section_addr_info_from_section_table): Update. * solib.c (solib_map_sections, solib_contains_address_p): Update. * solib-svr4.c (scan_dyntag): Update. * solib-dsbt.c (scan_dyntag): Update. * remote.c (remote_target::remote_xfer_live_readonly_partial): Update. * record-full.c (record_full_core_target::xfer_partial): Update. * progspace.h (struct program_space) <target_sections>: Update. * exec.h (print_section_info): Update. * exec.c (exec_target::close, build_section_table) (add_target_sections, add_target_sections_of_objfile) (remove_target_sections, exec_on_vfork) (section_table_available_memory) (section_table_xfer_memory_partial) (exec_target::get_section_table, exec_target::xfer_partial) (print_section_info, set_section_command) (exec_set_section_address, exec_target::has_memory): Update. * corelow.c (core_target::build_file_mappings) (core_target::xfer_partial, core_target::info_proc_mappings) (core_target::info_proc_mappings): Update. * bfd-target.c (class target_bfd): Update
This commit is contained in:
@ -1,3 +1,35 @@
|
||||
2020-10-12 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* target.h (struct target_ops) <get_section_table>: Update.
|
||||
(target_get_section_table): Update.
|
||||
* target.c (target_get_section_table, target_section_by_addr)
|
||||
(memory_xfer_partial_1): Update.
|
||||
* target-section.h (target_section_table): Now an alias.
|
||||
* target-delegates.c: Rebuild.
|
||||
* target-debug.h (target_debug_print_target_section_table_p):
|
||||
Rename from target_debug_print_struct_target_section_table_p.
|
||||
* symfile.c (build_section_addr_info_from_section_table): Update.
|
||||
* solib.c (solib_map_sections, solib_contains_address_p): Update.
|
||||
* solib-svr4.c (scan_dyntag): Update.
|
||||
* solib-dsbt.c (scan_dyntag): Update.
|
||||
* remote.c (remote_target::remote_xfer_live_readonly_partial):
|
||||
Update.
|
||||
* record-full.c (record_full_core_target::xfer_partial): Update.
|
||||
* progspace.h (struct program_space) <target_sections>: Update.
|
||||
* exec.h (print_section_info): Update.
|
||||
* exec.c (exec_target::close, build_section_table)
|
||||
(add_target_sections, add_target_sections_of_objfile)
|
||||
(remove_target_sections, exec_on_vfork)
|
||||
(section_table_available_memory)
|
||||
(section_table_xfer_memory_partial)
|
||||
(exec_target::get_section_table, exec_target::xfer_partial)
|
||||
(print_section_info, set_section_command)
|
||||
(exec_set_section_address, exec_target::has_memory): Update.
|
||||
* corelow.c (core_target::build_file_mappings)
|
||||
(core_target::xfer_partial, core_target::info_proc_mappings)
|
||||
(core_target::info_proc_mappings): Update.
|
||||
* bfd-target.c (class target_bfd): Update
|
||||
|
||||
2020-10-12 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* progspace.c (program_space::~program_space): Don't call
|
||||
|
@ -59,7 +59,7 @@ private:
|
||||
/* The section table build from the ALLOC sections in BFD. Note
|
||||
that we can't rely on extracting the BFD from a random section in
|
||||
the table, since the table can be legitimately empty. */
|
||||
struct target_section_table m_table;
|
||||
target_section_table m_table;
|
||||
};
|
||||
|
||||
target_xfer_status
|
||||
|
@ -266,8 +266,8 @@ core_target::build_file_mappings ()
|
||||
bfd_set_section_alignment (sec, 2);
|
||||
|
||||
/* Set target_section fields. */
|
||||
m_core_file_mappings.sections.emplace_back ();
|
||||
target_section &ts = m_core_file_mappings.sections.back ();
|
||||
m_core_file_mappings.emplace_back ();
|
||||
target_section &ts = m_core_file_mappings.back ();
|
||||
ts.addr = start;
|
||||
ts.endaddr = end;
|
||||
ts.owner = nullptr;
|
||||
@ -814,7 +814,7 @@ core_target::xfer_partial (enum target_object object, const char *annex,
|
||||
or the like) as this should provide a more accurate
|
||||
result. If not, check the stratum beneath us, which should
|
||||
be the file stratum. */
|
||||
if (!m_core_file_mappings.sections.empty ())
|
||||
if (!m_core_file_mappings.empty ())
|
||||
xfer_status = xfer_memory_via_mappings (readbuf, writebuf, offset,
|
||||
len, xfered_len);
|
||||
else
|
||||
@ -1098,7 +1098,7 @@ get_current_core_target ()
|
||||
void
|
||||
core_target::info_proc_mappings (struct gdbarch *gdbarch)
|
||||
{
|
||||
if (!m_core_file_mappings.sections.empty ())
|
||||
if (!m_core_file_mappings.empty ())
|
||||
{
|
||||
printf_filtered (_("Mapped address spaces:\n\n"));
|
||||
if (gdbarch_addr_bit (gdbarch) == 32)
|
||||
@ -1117,7 +1117,7 @@ core_target::info_proc_mappings (struct gdbarch *gdbarch)
|
||||
}
|
||||
}
|
||||
|
||||
for (const target_section &tsp : m_core_file_mappings.sections)
|
||||
for (const target_section &tsp : m_core_file_mappings)
|
||||
{
|
||||
ULONGEST start = tsp.addr;
|
||||
ULONGEST end = tsp.endaddr;
|
||||
|
63
gdb/exec.c
63
gdb/exec.c
@ -75,7 +75,7 @@ struct exec_target final : public target_ops
|
||||
const gdb_byte *writebuf,
|
||||
ULONGEST offset, ULONGEST len,
|
||||
ULONGEST *xfered_len) override;
|
||||
struct target_section_table *get_section_table () override;
|
||||
target_section_table *get_section_table () override;
|
||||
void files_info () override;
|
||||
|
||||
bool has_memory () override;
|
||||
@ -183,7 +183,7 @@ exec_target::close ()
|
||||
for (struct program_space *ss : program_spaces)
|
||||
{
|
||||
set_current_program_space (ss);
|
||||
current_target_sections->sections.clear ();
|
||||
current_target_sections->clear ();
|
||||
exec_close ();
|
||||
}
|
||||
}
|
||||
@ -598,8 +598,8 @@ build_section_table (struct bfd *some_bfd)
|
||||
if (!(aflag & SEC_ALLOC))
|
||||
continue;
|
||||
|
||||
table.sections.emplace_back ();
|
||||
target_section § = table.sections.back ();
|
||||
table.emplace_back ();
|
||||
target_section § = table.back ();
|
||||
sect.owner = NULL;
|
||||
sect.the_bfd_section = asect;
|
||||
sect.addr = bfd_section_vma (asect);
|
||||
@ -616,14 +616,14 @@ void
|
||||
add_target_sections (void *owner,
|
||||
const target_section_table §ions)
|
||||
{
|
||||
struct target_section_table *table = current_target_sections;
|
||||
target_section_table *table = current_target_sections;
|
||||
|
||||
if (!sections.sections.empty ())
|
||||
if (!sections.empty ())
|
||||
{
|
||||
for (const target_section &s : sections.sections)
|
||||
for (const target_section &s : sections)
|
||||
{
|
||||
table->sections.push_back (s);
|
||||
table->sections.back ().owner = owner;
|
||||
table->push_back (s);
|
||||
table->back ().owner = owner;
|
||||
}
|
||||
|
||||
scoped_restore_current_pspace_and_thread restore_pspace_thread;
|
||||
@ -651,7 +651,7 @@ add_target_sections (void *owner,
|
||||
void
|
||||
add_target_sections_of_objfile (struct objfile *objfile)
|
||||
{
|
||||
struct target_section_table *table = current_target_sections;
|
||||
target_section_table *table = current_target_sections;
|
||||
struct obj_section *osect;
|
||||
|
||||
gdb_assert (objfile != nullptr);
|
||||
@ -662,8 +662,8 @@ add_target_sections_of_objfile (struct objfile *objfile)
|
||||
if (bfd_section_size (osect->the_bfd_section) == 0)
|
||||
continue;
|
||||
|
||||
table->sections.emplace_back ();
|
||||
target_section &ts = table->sections.back ();
|
||||
table->emplace_back ();
|
||||
target_section &ts = table->back ();
|
||||
ts.addr = obj_section_addr (osect);
|
||||
ts.endaddr = obj_section_endaddr (osect);
|
||||
ts.the_bfd_section = osect->the_bfd_section;
|
||||
@ -677,22 +677,22 @@ add_target_sections_of_objfile (struct objfile *objfile)
|
||||
void
|
||||
remove_target_sections (void *owner)
|
||||
{
|
||||
struct target_section_table *table = current_target_sections;
|
||||
target_section_table *table = current_target_sections;
|
||||
|
||||
gdb_assert (owner != NULL);
|
||||
|
||||
auto it = std::remove_if (table->sections.begin (),
|
||||
table->sections.end (),
|
||||
auto it = std::remove_if (table->begin (),
|
||||
table->end (),
|
||||
[&] (target_section §)
|
||||
{
|
||||
return sect.owner == owner;
|
||||
});
|
||||
table->sections.erase (it, table->sections.end ());
|
||||
table->erase (it, table->end ());
|
||||
|
||||
/* If we don't have any more sections to read memory from,
|
||||
remove the file_stratum target from the stack of each
|
||||
inferior sharing the program space. */
|
||||
if (table->sections.empty ())
|
||||
if (table->empty ())
|
||||
{
|
||||
scoped_restore_current_pspace_and_thread restore_pspace_thread;
|
||||
program_space *curr_pspace = current_program_space;
|
||||
@ -702,7 +702,7 @@ remove_target_sections (void *owner)
|
||||
if (inf->pspace != curr_pspace)
|
||||
continue;
|
||||
|
||||
if (!inf->pspace->target_sections.sections.empty ())
|
||||
if (!inf->pspace->target_sections.empty ())
|
||||
continue;
|
||||
|
||||
switch_to_inferior_no_thread (inf);
|
||||
@ -716,7 +716,7 @@ remove_target_sections (void *owner)
|
||||
void
|
||||
exec_on_vfork ()
|
||||
{
|
||||
if (!current_program_space->target_sections.sections.empty ())
|
||||
if (!current_program_space->target_sections.empty ())
|
||||
push_target (&exec_ops);
|
||||
}
|
||||
|
||||
@ -779,7 +779,7 @@ section_table_available_memory (CORE_ADDR memaddr, ULONGEST len,
|
||||
{
|
||||
std::vector<mem_range> memory;
|
||||
|
||||
for (const target_section &p : sections.sections)
|
||||
for (const target_section &p : sections)
|
||||
{
|
||||
if ((bfd_section_flags (p.the_bfd_section) & SEC_READONLY) == 0)
|
||||
continue;
|
||||
@ -858,7 +858,7 @@ section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
|
||||
|
||||
gdb_assert (len != 0);
|
||||
|
||||
for (const target_section &p : sections.sections)
|
||||
for (const target_section &p : sections)
|
||||
{
|
||||
struct bfd_section *asect = p.the_bfd_section;
|
||||
bfd *abfd = asect->owner;
|
||||
@ -918,7 +918,7 @@ section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
|
||||
return TARGET_XFER_EOF; /* We can't help. */
|
||||
}
|
||||
|
||||
struct target_section_table *
|
||||
target_section_table *
|
||||
exec_target::get_section_table ()
|
||||
{
|
||||
return current_target_sections;
|
||||
@ -930,7 +930,7 @@ exec_target::xfer_partial (enum target_object object,
|
||||
const gdb_byte *writebuf,
|
||||
ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
|
||||
{
|
||||
struct target_section_table *table = get_section_table ();
|
||||
target_section_table *table = get_section_table ();
|
||||
|
||||
if (object == TARGET_OBJECT_MEMORY)
|
||||
return section_table_xfer_memory_partial (readbuf, writebuf,
|
||||
@ -942,7 +942,7 @@ exec_target::xfer_partial (enum target_object object,
|
||||
|
||||
|
||||
void
|
||||
print_section_info (struct target_section_table *t, bfd *abfd)
|
||||
print_section_info (target_section_table *t, bfd *abfd)
|
||||
{
|
||||
struct gdbarch *gdbarch = gdbarch_from_bfd (abfd);
|
||||
/* FIXME: 16 is not wide enough when gdbarch_addr_bit > 64. */
|
||||
@ -961,7 +961,7 @@ print_section_info (struct target_section_table *t, bfd *abfd)
|
||||
bfd_vma entry_point;
|
||||
bool found = false;
|
||||
|
||||
for (const target_section &p : t->sections)
|
||||
for (const target_section &p : *t)
|
||||
{
|
||||
struct bfd_section *psect = p.the_bfd_section;
|
||||
|
||||
@ -989,7 +989,7 @@ print_section_info (struct target_section_table *t, bfd *abfd)
|
||||
printf_filtered (_("\tEntry point: %s\n"),
|
||||
paddress (gdbarch, entry_point));
|
||||
}
|
||||
for (const target_section &p : t->sections)
|
||||
for (const target_section &p : *t)
|
||||
{
|
||||
struct bfd_section *psect = p.the_bfd_section;
|
||||
bfd *pbfd = psect->owner;
|
||||
@ -1032,7 +1032,6 @@ set_section_command (const char *args, int from_tty)
|
||||
unsigned long secaddr;
|
||||
char secprint[100];
|
||||
long offset;
|
||||
struct target_section_table *table;
|
||||
|
||||
if (args == 0)
|
||||
error (_("Must specify section name and its virtual address"));
|
||||
@ -1044,8 +1043,7 @@ set_section_command (const char *args, int from_tty)
|
||||
/* Parse out new virtual address. */
|
||||
secaddr = parse_and_eval_address (args);
|
||||
|
||||
table = current_target_sections;
|
||||
for (target_section &p : table->sections)
|
||||
for (target_section &p : *current_target_sections)
|
||||
{
|
||||
if (!strncmp (secname, bfd_section_name (p.the_bfd_section), seclen)
|
||||
&& bfd_section_name (p.the_bfd_section)[seclen] == '\0')
|
||||
@ -1071,10 +1069,7 @@ set_section_command (const char *args, int from_tty)
|
||||
void
|
||||
exec_set_section_address (const char *filename, int index, CORE_ADDR address)
|
||||
{
|
||||
struct target_section_table *table;
|
||||
|
||||
table = current_target_sections;
|
||||
for (target_section &p : table->sections)
|
||||
for (target_section &p : *current_target_sections)
|
||||
{
|
||||
if (filename_cmp (filename,
|
||||
bfd_get_filename (p.the_bfd_section->owner)) == 0
|
||||
@ -1091,7 +1086,7 @@ exec_target::has_memory ()
|
||||
{
|
||||
/* We can provide memory if we have any file/target sections to read
|
||||
from. */
|
||||
return !current_target_sections->sections.empty ();
|
||||
return !current_target_sections->empty ();
|
||||
}
|
||||
|
||||
char *
|
||||
|
@ -115,7 +115,7 @@ extern void add_target_sections_of_objfile (struct objfile *objfile);
|
||||
special cased --- it's filename is omitted; if it is the executable
|
||||
file, its entry point is printed. */
|
||||
|
||||
extern void print_section_info (struct target_section_table *table,
|
||||
extern void print_section_info (target_section_table *table,
|
||||
bfd *abfd);
|
||||
|
||||
extern void exec_close (void);
|
||||
|
@ -325,7 +325,7 @@ struct program_space
|
||||
|
||||
/* The set of target sections matching the sections mapped into
|
||||
this program space. Managed by both exec_ops and solib.c. */
|
||||
struct target_section_table target_sections {};
|
||||
target_section_table target_sections;
|
||||
|
||||
/* List of shared objects mapped into this space. Managed by
|
||||
solib.c. */
|
||||
|
@ -2138,7 +2138,7 @@ record_full_core_target::xfer_partial (enum target_object object,
|
||||
{
|
||||
if (record_full_gdb_operation_disable || !writebuf)
|
||||
{
|
||||
for (target_section &p : record_full_core_sections.sections)
|
||||
for (target_section &p : record_full_core_sections)
|
||||
{
|
||||
if (offset >= p.addr)
|
||||
{
|
||||
|
@ -8890,7 +8890,6 @@ remote_target::remote_xfer_live_readonly_partial (gdb_byte *readbuf,
|
||||
ULONGEST *xfered_len)
|
||||
{
|
||||
struct target_section *secp;
|
||||
struct target_section_table *table;
|
||||
|
||||
secp = target_section_by_addr (this, memaddr);
|
||||
if (secp != NULL
|
||||
@ -8898,9 +8897,8 @@ remote_target::remote_xfer_live_readonly_partial (gdb_byte *readbuf,
|
||||
{
|
||||
ULONGEST memend = memaddr + len;
|
||||
|
||||
table = target_get_section_table (this);
|
||||
|
||||
for (target_section &p : table->sections)
|
||||
target_section_table *table = target_get_section_table (this);
|
||||
for (target_section &p : *table)
|
||||
{
|
||||
if (memaddr >= p.addr)
|
||||
{
|
||||
|
@ -424,7 +424,7 @@ scan_dyntag (int dyntag, bfd *abfd, CORE_ADDR *ptr)
|
||||
return 0;
|
||||
|
||||
bool found = false;
|
||||
for (target_section &target_section : current_target_sections->sections)
|
||||
for (target_section &target_section : *current_target_sections)
|
||||
if (sect == target_section.the_bfd_section)
|
||||
{
|
||||
dyn_addr = target_section.addr;
|
||||
|
@ -608,7 +608,7 @@ scan_dyntag (const int desired_dyntag, bfd *abfd, CORE_ADDR *ptr,
|
||||
return 0;
|
||||
|
||||
bool found = false;
|
||||
for (target_section &target_section : current_target_sections->sections)
|
||||
for (target_section &target_section : *current_target_sections)
|
||||
if (sect == target_section.the_bfd_section)
|
||||
{
|
||||
dyn_addr = target_section.addr;
|
||||
|
@ -556,7 +556,7 @@ solib_map_sections (struct so_list *so)
|
||||
so->sections = new target_section_table;
|
||||
*so->sections = build_section_table (so->abfd);
|
||||
|
||||
for (target_section &p : so->sections->sections)
|
||||
for (target_section &p : *so->sections)
|
||||
{
|
||||
/* Relocate the section binding addresses as recorded in the shared
|
||||
object's file by the base address to which the object was actually
|
||||
@ -1113,7 +1113,7 @@ bool
|
||||
solib_contains_address_p (const struct so_list *const solib,
|
||||
CORE_ADDR address)
|
||||
{
|
||||
for (target_section &p : solib->sections->sections)
|
||||
for (target_section &p : *solib->sections)
|
||||
if (p.addr <= address && address < p.endaddr)
|
||||
return true;
|
||||
|
||||
|
@ -216,13 +216,13 @@ build_section_addr_info_from_section_table (const target_section_table &table)
|
||||
{
|
||||
section_addr_info sap;
|
||||
|
||||
for (const target_section &stp : table.sections)
|
||||
for (const target_section &stp : table)
|
||||
{
|
||||
struct bfd_section *asect = stp.the_bfd_section;
|
||||
bfd *abfd = asect->owner;
|
||||
|
||||
if (bfd_section_flags (asect) & (SEC_ALLOC | SEC_LOAD)
|
||||
&& sap.size () < table.sections.size ())
|
||||
&& sap.size () < table.size ())
|
||||
sap.emplace_back (stp.addr,
|
||||
bfd_section_name (asect),
|
||||
gdb_bfd_section_index (abfd, asect));
|
||||
|
@ -106,7 +106,7 @@
|
||||
target_debug_do_print (host_address_to_string (X))
|
||||
#define target_debug_print_struct_ui_file_p(X) \
|
||||
target_debug_do_print (host_address_to_string (X))
|
||||
#define target_debug_print_struct_target_section_table_p(X) \
|
||||
#define target_debug_print_target_section_table_p(X) \
|
||||
target_debug_do_print (host_address_to_string (X))
|
||||
#define target_debug_print_async_callback_ftype_p(X) \
|
||||
target_debug_do_print (host_address_to_string (X))
|
||||
|
@ -77,7 +77,7 @@ struct dummy_target : public target_ops
|
||||
void rcmd (const char *arg0, struct ui_file *arg1) override;
|
||||
char *pid_to_exec_file (int arg0) override;
|
||||
void log_command (const char *arg0) override;
|
||||
struct target_section_table *get_section_table () override;
|
||||
target_section_table *get_section_table () override;
|
||||
thread_control_capabilities get_thread_control_capabilities () override;
|
||||
bool attach_no_wait () override;
|
||||
bool can_async_p () override;
|
||||
@ -248,7 +248,7 @@ struct debug_target : public target_ops
|
||||
void rcmd (const char *arg0, struct ui_file *arg1) override;
|
||||
char *pid_to_exec_file (int arg0) override;
|
||||
void log_command (const char *arg0) override;
|
||||
struct target_section_table *get_section_table () override;
|
||||
target_section_table *get_section_table () override;
|
||||
thread_control_capabilities get_thread_control_capabilities () override;
|
||||
bool attach_no_wait () override;
|
||||
bool can_async_p () override;
|
||||
@ -2021,27 +2021,27 @@ debug_target::log_command (const char *arg0)
|
||||
fputs_unfiltered (")\n", gdb_stdlog);
|
||||
}
|
||||
|
||||
struct target_section_table *
|
||||
target_section_table *
|
||||
target_ops::get_section_table ()
|
||||
{
|
||||
return this->beneath ()->get_section_table ();
|
||||
}
|
||||
|
||||
struct target_section_table *
|
||||
target_section_table *
|
||||
dummy_target::get_section_table ()
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct target_section_table *
|
||||
target_section_table *
|
||||
debug_target::get_section_table ()
|
||||
{
|
||||
struct target_section_table * result;
|
||||
target_section_table * result;
|
||||
fprintf_unfiltered (gdb_stdlog, "-> %s->get_section_table (...)\n", this->beneath ()->shortname ());
|
||||
result = this->beneath ()->get_section_table ();
|
||||
fprintf_unfiltered (gdb_stdlog, "<- %s->get_section_table (", this->beneath ()->shortname ());
|
||||
fputs_unfiltered (") = ", gdb_stdlog);
|
||||
target_debug_print_struct_target_section_table_p (result);
|
||||
target_debug_print_target_section_table_p (result);
|
||||
fputs_unfiltered ("\n", gdb_stdlog);
|
||||
return result;
|
||||
}
|
||||
|
@ -44,9 +44,6 @@ struct target_section
|
||||
|
||||
/* Holds an array of target sections. */
|
||||
|
||||
struct target_section_table
|
||||
{
|
||||
std::vector<struct target_section> sections;
|
||||
};
|
||||
using target_section_table = std::vector<target_section>;
|
||||
|
||||
#endif /* GDB_TARGET_SECTION_H */
|
||||
|
12
gdb/target.c
12
gdb/target.c
@ -812,7 +812,7 @@ target_read_string (CORE_ADDR memaddr, int len, int *bytes_read)
|
||||
return gdb::unique_xmalloc_ptr<char> ((char *) buffer.release ());
|
||||
}
|
||||
|
||||
struct target_section_table *
|
||||
target_section_table *
|
||||
target_get_section_table (struct target_ops *target)
|
||||
{
|
||||
return target->get_section_table ();
|
||||
@ -823,12 +823,12 @@ target_get_section_table (struct target_ops *target)
|
||||
struct target_section *
|
||||
target_section_by_addr (struct target_ops *target, CORE_ADDR addr)
|
||||
{
|
||||
struct target_section_table *table = target_get_section_table (target);
|
||||
target_section_table *table = target_get_section_table (target);
|
||||
|
||||
if (table == NULL)
|
||||
return NULL;
|
||||
|
||||
for (target_section &secp : table->sections)
|
||||
for (target_section &secp : *table)
|
||||
{
|
||||
if (addr >= secp.addr && addr < secp.endaddr)
|
||||
return &secp;
|
||||
@ -965,8 +965,7 @@ memory_xfer_partial_1 (struct target_ops *ops, enum target_object object,
|
||||
|
||||
if (pc_in_unmapped_range (memaddr, section))
|
||||
{
|
||||
struct target_section_table *table
|
||||
= target_get_section_table (ops);
|
||||
target_section_table *table = target_get_section_table (ops);
|
||||
const char *section_name = section->the_bfd_section->name;
|
||||
|
||||
memaddr = overlay_mapped_address (memaddr, section);
|
||||
@ -986,13 +985,12 @@ memory_xfer_partial_1 (struct target_ops *ops, enum target_object object,
|
||||
if (readbuf != NULL && trust_readonly)
|
||||
{
|
||||
struct target_section *secp;
|
||||
struct target_section_table *table;
|
||||
|
||||
secp = target_section_by_addr (ops, memaddr);
|
||||
if (secp != NULL
|
||||
&& (bfd_section_flags (secp->the_bfd_section) & SEC_READONLY))
|
||||
{
|
||||
table = target_get_section_table (ops);
|
||||
target_section_table *table = target_get_section_table (ops);
|
||||
return section_table_xfer_memory_partial (readbuf, writebuf,
|
||||
memaddr, len, xfered_len,
|
||||
*table);
|
||||
|
@ -29,7 +29,6 @@ struct target_ops;
|
||||
struct bp_location;
|
||||
struct bp_target_info;
|
||||
struct regcache;
|
||||
struct target_section_table;
|
||||
struct trace_state_variable;
|
||||
struct trace_status;
|
||||
struct uploaded_tsv;
|
||||
@ -681,7 +680,7 @@ struct target_ops
|
||||
TARGET_DEFAULT_RETURN (NULL);
|
||||
virtual void log_command (const char *)
|
||||
TARGET_DEFAULT_IGNORE ();
|
||||
virtual struct target_section_table *get_section_table ()
|
||||
virtual target_section_table *get_section_table ()
|
||||
TARGET_DEFAULT_RETURN (NULL);
|
||||
|
||||
/* Provide default values for all "must have" methods. */
|
||||
@ -2413,7 +2412,7 @@ struct target_section *target_section_by_addr (struct target_ops *target,
|
||||
/* Return the target section table this target (or the targets
|
||||
beneath) currently manipulate. */
|
||||
|
||||
extern struct target_section_table *target_get_section_table
|
||||
extern target_section_table *target_get_section_table
|
||||
(struct target_ops *target);
|
||||
|
||||
/* From mem-break.c */
|
||||
|
Reference in New Issue
Block a user