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 (¤t_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, ¤t_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 (¤t_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, ¤t_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
next prev parent 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