2003-10-17 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Fri, 17 Oct 2003 20:17:51 +0000 (20:17 +0000)
committerAndrew Cagney <cagney@redhat.com>
Fri, 17 Oct 2003 20:17:51 +0000 (20:17 +0000)
* target.c (target_section_by_addr): New function.
(do_xfer_memory): Use "target_section_by_addr".
* target.h (target_section_by_addr): Declare.

gdb/ChangeLog
gdb/target.c
gdb/target.h

index 00217dbe147c88e8a0f25fa89b09e12548add7fe..a63f51f185848873891bdf975be83ee4ef76a9ef 100644 (file)
@@ -1,5 +1,9 @@
 2003-10-17  Andrew Cagney  <cagney@redhat.com>
 
+       * target.c (target_section_by_addr): New function.
+       (do_xfer_memory): Use "target_section_by_addr".
+       * target.h (target_section_by_addr): Declare.
+
        * target.h (struct target_ops): Add "to_read_partial" and
        "to_write_partial", delete "to_query".
        (target_read_partial, target_write_partial): Declare.
index 252cb1473c7a54dce8fc9873760fc8f1ae453c3f..c763af375aecc9961b9e68ee6f39da74caffe7b5 100644 (file)
@@ -814,6 +814,21 @@ done:
   return nbytes_read;
 }
 
+/* Find a section containing ADDR.  */
+struct section_table *
+target_section_by_addr (struct target_ops *target, CORE_ADDR addr)
+{
+  struct section_table *secp;
+  for (secp = target->to_sections;
+       secp < target->to_sections_end;
+       secp++)
+    {
+      if (addr >= secp->addr && addr < secp->endaddr)
+       return secp;
+    }
+  return NULL;
+}
+
 /* Read LEN bytes of target memory at address MEMADDR, placing the results in
    GDB's memory at MYADDR.  Returns either 0 for success or an errno value
    if any error occurs.
@@ -861,22 +876,15 @@ do_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
 
   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. */
-
-      struct section_table *secp;
-
-      for (secp = current_target.to_sections;
-          secp < current_target.to_sections_end;
-          secp++)
-       {
-         if (bfd_get_section_flags (secp->bfd, secp->the_bfd_section) 
-             & SEC_READONLY)
-           if (memaddr >= secp->addr && memaddr < secp->endaddr)
-             return xfer_memory (memaddr, myaddr, len, 0, 
-                                 attrib, &current_target);
-       }
+         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.  */
index b8c5a44b06c3121a1789ee58f6d8c4546ca06862..7bee270a09d468e0efe86500acc025b3c0e46c76 100644 (file)
@@ -1147,6 +1147,11 @@ struct section_table
     bfd *bfd;                  /* BFD file pointer */
   };
 
+/* Return the "section" containing the specified address.  */
+struct section_table *target_section_by_addr (struct target_ops *target,
+                                             CORE_ADDR addr);
+
+
 /* Builds a section table, given args BFD, SECTABLE_PTR, SECEND_PTR.
    Returns 0 if OK, 1 on error.  */