From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28226 invoked by alias); 24 Jan 2002 03:29:32 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 28164 invoked from network); 24 Jan 2002 03:29:25 -0000 Received: from unknown (HELO cygnus.com) (205.180.230.5) by sources.redhat.com with SMTP; 24 Jan 2002 03:29:25 -0000 Received: from reddwarf.cygnus.com (reddwarf.sfbay.redhat.com [205.180.231.12]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with ESMTP id TAA11956 for ; Wed, 23 Jan 2002 19:29:25 -0800 (PST) Received: (from msnyder@localhost) by reddwarf.cygnus.com (8.11.2/8.11.2) id g0O3NI905339 for gdb-patches@sources.redhat.com; Wed, 23 Jan 2002 19:23:18 -0800 Date: Wed, 23 Jan 2002 19:29:00 -0000 From: Michael Snyder Message-Id: <200201240323.g0O3NI905339@reddwarf.cygnus.com> To: gdb-patches@sources.redhat.com Subject: [RFA] New option "trust-readonly-sections" X-SW-Source: 2002-01/txt/msg00711.txt.bz2 This is an optimization mainly for remote debugging, or any context where reading from the child's memory is expensive. In a nutshell, if you trust that read-only sections will really not be modified, you can advise GDB of this fact, and GDB will then satisfy all memory reads from read-only sections by reading from the object file, instead of from the child/target. Naturally it defaults to 'off'. On targets that do a lot of prologue analysis (which involves lots of reads from the text section), this can be a huge speed win. 2002-01-15 Michael Snyder * target.c: New command, "set trust-readonly on". (do_xfer_memory): Honor the suggestion to trust readonly sections by reading them from the object file instead of from the target. Index: target.c =================================================================== RCS file: /cvs/src/src/gdb/target.c,v retrieving revision 1.30 diff -c -3 -p -r1.30 target.c *** target.c 2002/01/09 00:36:58 1.30 --- target.c 2002/01/24 03:23:44 *************** 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,883 ---- 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++) + { + /* FIXME: take it only if it's entirely within the section. */ + if (memaddr >= secp->addr && memaddr + len <= 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)."); --- 2275,2295 ---- 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_cmd ("trust-readonly", class_support, + var_boolean, (char *) &trust_readonly, + "Set memory reads to trust SEC_READONLY section attribute.\n\ + When active, memory from readonly sections (such as .text)\n\ + will be read from the executable file instead of from target memory.", + &setlist), + &showlist); add_com ("monitor", class_obscure, do_monitor_command, "Send a command to the remote monitor (remote targets only).");