2002-01-15 Michael Snyder * 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". Index: target.c =================================================================== RCS file: /cvs/src/src/gdb/target.c,v retrieving revision 1.30 diff -p -r1.30 target.c *** target.c 2002/01/09 00:36:58 1.30 --- target.c 2002/01/31 02:20:53 *************** target_write_memory (CORE_ADDR memaddr, *** 835,840 **** --- 835,842 ---- 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. *************** do_xfer_memory (CORE_ADDR memaddr, char *** 857,862 **** --- 859,882 ---- 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); *************** initialize_targets (void) *** 2254,2266 **** 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\ When non-zero, target debugging is enabled.", &setdebuglist), ! &showdebuglist); add_com ("monitor", class_obscure, do_monitor_command, "Send a command to the remote monitor (remote targets only)."); --- 2274,2296 ---- 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\ When non-zero, target debugging is enabled.", &setdebuglist), ! &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).");