Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "Michael Snyder" <msnyder@redhat.com>
To: "Michael Snyder" <msnyder@redhat.com>,
	"GDB Patches" <gdb-patches@sources.redhat.com>
Subject: Re: [rfa] Restore "trust-readonly-section"
Date: Fri, 13 May 2005 11:41:00 -0000	[thread overview]
Message-ID: <00e201c55748$533cea10$aaa56b80@msnyder8600> (raw)
In-Reply-To: <00c201c55745$a651dd30$aaa56b80@msnyder8600>

[-- Attachment #1: Type: text/plain, Size: 845 bytes --]

Hmm, tabs fubar -- I'll try again with the patch as an attachment.

----- Original Message ----- 
From: "Michael Snyder" <msnyder@redhat.com>
To: "GDB Patches" <gdb-patches@sources.redhat.com>
Sent: Thursday, May 12, 2005 3:55 PM
Subject: [rfa] Restore "trust-readonly-section"


> This seems to have succumbed to bit-rot -- there are new target-read 
> functions
> in target.c that don't pay any attention to this user-settable mode bit.
> 
> The purpose of "trust-readonly-sections" is to improve speed on
> targets where reading memory is expensive (mostly remote).
> It checks to see if a read is from a read-only section, and if so,
> reads it from the exec file.  It defaults to "off" for safety, but if
> users choose to use it, it really speeds up prologue analysis
> (and therefore stepping).
> 
> This patch just makes it work again.


[-- Attachment #2: trust_readonly --]
[-- Type: application/octet-stream, Size: 5302 bytes --]

2005-05-12  Michael Snyder  <msnyder@redhat.com>

	* target.c (target_read_trusted): New function.
	Implements "trust-readonly-section".
	(target_xfer_partial): Honor trust-readonly-section.
	(do_xfer_memory): Ditto.
	(target_xfer_memory_partial): Ditto.
	(default_xfer_partial): Ditto.

Index: target.c
===================================================================
RCS file: /cvs/src/src/gdb/target.c,v
retrieving revision 1.106
diff -p -r1.106 target.c
*** target.c	9 May 2005 21:20:35 -0000	1.106
--- target.c	12 May 2005 22:23:32 -0000
*************** target_section_by_addr (struct target_op
*** 849,854 ****
--- 849,880 ----
    return NULL;
  }
  
+ static int trust_readonly = 0;
+ static void
+ show_trust_readonly (struct ui_file *file, int from_tty,
+ 		     struct cmd_list_element *c, const char *value)
+ {
+   fprintf_filtered (file, _("\
+ Mode for reading from readonly sections is %s.\n"),
+ 		    value);
+ }
+ 
+ static int
+ target_read_trusted (CORE_ADDR memaddr, char *myaddr, int len)
+ {
+   struct section_table *secp;
+   /* User-settable option, "trust-readonly-sections".  If true,
+      then memory from any SEC_READONLY bfd section may be read
+      directly from the bfd file.  */
+   secp = target_section_by_addr (&current_target, memaddr);
+   if (secp != NULL
+       && (bfd_get_section_flags (secp->bfd, secp->the_bfd_section)
+ 	  & SEC_READONLY))
+     return xfer_memory (memaddr, myaddr, len, 0, NULL, &current_target);
+ 
+   return 0;
+ }
+ 
  /* Return non-zero when the target vector has supplied an xfer_partial
     method and it, rather than xfer_memory, should be used.  */
  static int
*************** target_xfer_partial (struct target_ops *
*** 864,870 ****
  		     void *readbuf, const void *writebuf,
  		     ULONGEST offset, LONGEST len)
  {
!   LONGEST retval;
  
    gdb_assert (ops->to_xfer_partial != NULL);
    retval = ops->to_xfer_partial (ops, object, annex, readbuf, writebuf,
--- 890,904 ----
  		     void *readbuf, const void *writebuf,
  		     ULONGEST offset, LONGEST len)
  {
!   LONGEST retval = -1;
! 
!   /* No need to use target method if trusted readonly section can be
!      used (by user's wish).  */
!   if (trust_readonly
!       && object == TARGET_OBJECT_MEMORY
!       && readbuf != NULL)
!     if ((retval = target_read_trusted (offset, readbuf, len)) > 0)
!       return retval;
  
    gdb_assert (ops->to_xfer_partial != NULL);
    retval = ops->to_xfer_partial (ops, object, annex, readbuf, writebuf,
*************** target_stopped_data_address_p (struct ta
*** 1037,1052 ****
  }
  #endif
  
- static int trust_readonly = 0;
- static void
- show_trust_readonly (struct ui_file *file, int from_tty,
- 		     struct cmd_list_element *c, const char *value)
- {
-   fprintf_filtered (file, _("\
- Mode for reading from readonly sections is %s.\n"),
- 		    value);
- }
- 
  /* 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.
  
--- 1071,1076 ----
*************** do_xfer_memory (CORE_ADDR memaddr, char 
*** 1069,1085 ****
    errno = 0;
  
    if (!write && trust_readonly)
!     {
!       struct section_table *secp;
!       /* User-settable option, "trust-readonly-sections".  If true,
!          then memory from any SEC_READONLY bfd section may be read
!          directly from the bfd file.  */
!       secp = target_section_by_addr (&current_target, memaddr);
!       if (secp != NULL
! 	  && (bfd_get_section_flags (secp->bfd, secp->the_bfd_section)
! 	      & SEC_READONLY))
! 	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.deprecated_xfer_memory
--- 1093,1100 ----
    errno = 0;
  
    if (!write && trust_readonly)
!     if ((res = target_read_trusted (memaddr, myaddr, len)) > 0)
!       return res;
  
    /* The quick case is that the top target can handle the transfer.  */
    res = current_target.deprecated_xfer_memory
*************** target_xfer_memory_partial (CORE_ADDR me
*** 1199,1204 ****
--- 1214,1224 ----
        return 0;
      }
  
+   /* No need to use dcache if trusted readonly section can be used.  */
+   if (!write_p && trust_readonly)
+     if ((res = target_read_trusted (memaddr, myaddr, reg_len)) > 0)
+       return res;
+ 
    region = lookup_mem_region(memaddr);
    if (memaddr + len < region->hi)
      reg_len = len;
*************** default_xfer_partial (struct target_ops 
*** 1308,1313 ****
--- 1328,1343 ----
  		      const char *annex, void *readbuf, 
  		      const void *writebuf, ULONGEST offset, LONGEST len)
  {
+   LONGEST retval = -1;
+ 
+   /* No need to use target method if trusted readonly section can be
+      used (by user's wish).  */
+   if (trust_readonly
+       && object == TARGET_OBJECT_MEMORY
+       && readbuf != NULL)
+     if ((retval = target_read_trusted (offset, readbuf, len)) > 0)
+       return retval;
+ 
    if (object == TARGET_OBJECT_MEMORY
        && ops->deprecated_xfer_memory != NULL)
      /* If available, fall back to the target's

  reply	other threads:[~2005-05-12 23:14 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-13  6:29 Michael Snyder
2005-05-13 11:41 ` Michael Snyder [this message]
2005-05-15 17:25   ` Daniel Jacobowitz
2005-05-24  2:03     ` Michael Snyder
2005-05-28 22:55       ` Daniel Jacobowitz
2005-06-11 15:26       ` Mark Kettenis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='00e201c55748$533cea10$aaa56b80@msnyder8600' \
    --to=msnyder@redhat.com \
    --cc=gdb-patches@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox