This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] New option "trust-readonly-sections"


Andrew Cagney wrote:
> 
> > *************** 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, &current_target);
> 
> My understanding of do_xfer_memory() is that it is allowed to do partial
> transfers.  Hence, here, if the data doesn't all lie in the section, it
> is safe to truncate the transfer and return the number of bytes transfered.

Thanks.  Implementing both this suggestion and your other one about 
using "add_set_boolean_cmd", I have committed the patch in the new
form attached below:

Eli may now nag me for doco, and you may nag me for a NEWS entry.  ;-)
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".

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, &current_target);
+ 	}
+     }
+ 
    /* The quick case is that the top target can handle the transfer.  */
    res = current_target.to_xfer_memory
      (memaddr, myaddr, len, write, attrib, &current_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).");

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]