diff options
author | Michael Snyder <msnyder@vmware.com> | 2002-01-31 02:31:06 +0000 |
---|---|---|
committer | Michael Snyder <msnyder@vmware.com> | 2002-01-31 02:31:06 +0000 |
commit | 3a11626da1b01bee21978b0bfa90b8d13775ae25 (patch) | |
tree | f3415fec0baf329be4181810e46c3a2ba412c4e5 /gdb/target.c | |
parent | 2c955b8b6195aba246f98f80c4ba218f296d8c13 (diff) | |
download | gdb-3a11626da1b01bee21978b0bfa90b8d13775ae25.zip gdb-3a11626da1b01bee21978b0bfa90b8d13775ae25.tar.gz gdb-3a11626da1b01bee21978b0bfa90b8d13775ae25.tar.bz2 |
2002-01-15 Michael Snyder <msnyder@redhat.com>
* target.c: New command, "set trust-readonly-sections on".
(do_xfer_memory): Honor the suggestion to trust readonly sections
by reading them from the object file instead of from the target.
(initialize_targets): Register command "set trust-readonly-sections".
Diffstat (limited to 'gdb/target.c')
-rw-r--r-- | gdb/target.c | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/gdb/target.c b/gdb/target.c index 1af8883..95ec4ef 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -835,6 +835,8 @@ target_write_memory (CORE_ADDR memaddr, char *myaddr, int len) return target_xfer_memory (memaddr, myaddr, len, 1); } +static int trust_readonly = 0; + /* Move memory to or from the targets. The top target gets priority; if it cannot handle it, it is offered to the next one down, etc. @@ -857,6 +859,24 @@ do_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write, 0. */ errno = 0; + if (!write && trust_readonly) + { + /* User-settable option, "trust-readonly". If true, then + memory from any SEC_READONLY bfd section may be read + directly from the bfd file. */ + + struct section_table *secp; + + for (secp = current_target.to_sections; + secp < current_target.to_sections_end; + secp++) + { + if (memaddr >= secp->addr && memaddr < secp->endaddr) + return xfer_memory (memaddr, myaddr, len, 0, + attrib, ¤t_target); + } + } + /* The quick case is that the top target can handle the transfer. */ res = current_target.to_xfer_memory (memaddr, myaddr, len, write, attrib, ¤t_target); @@ -2254,13 +2274,23 @@ initialize_targets (void) add_info ("target", target_info, targ_desc); add_info ("files", target_info, targ_desc); - add_show_from_set ( - add_set_cmd ("target", class_maintenance, var_zinteger, - (char *) &targetdebug, - "Set target debugging.\n\ + add_show_from_set + (add_set_cmd ("target", class_maintenance, var_zinteger, + (char *) &targetdebug, + "Set target debugging.\n\ When non-zero, target debugging is enabled.", &setdebuglist), - &showdebuglist); - + &showdebuglist); + + add_show_from_set + (add_set_boolean_cmd + ("trust-readonly-sections", class_support, + &trust_readonly, + "Set mode for reading from readonly sections.\n\ +When this mode is on, memory reads from readonly sections (such as .text)\n\ +will be read from the object file instead of from the target. This will\n\ +result in significant performance improvement for remote targets.", + &setlist), + &showlist); add_com ("monitor", class_obscure, do_monitor_command, "Send a command to the remote monitor (remote targets only)."); |