2005-01-27 Andrew Cagney <cagney@gnu.org>
authorAndrew Cagney <cagney@redhat.com>
Thu, 27 Jan 2005 20:09:10 +0000 (20:09 +0000)
committerAndrew Cagney <cagney@redhat.com>
Thu, 27 Jan 2005 20:09:10 +0000 (20:09 +0000)
* symfile-mem.c (do_target_read_memory): New function.
(symbol_file_add_from_memory): Pass do_target_read_memory to
bfd_elf_bfd_from_remote_memory.
* corefile.c (write_memory): Update, make a copy of the read-only
buffer.
* target.c (target_read_memory): Update.
(target_write_memory): Update, make a copy of the read-only
buffer.
* gdbcore.h (write_memory): Change buffer type to bfd_byte, make
const.
* target.h (target_read_memory, target_write_memory): Change
buffer type to bfd_byte; for write_memory, make it const.

gdb/ChangeLog
gdb/corefile.c
gdb/gdbcore.h
gdb/symfile-mem.c
gdb/target.c
gdb/target.h

index 7732708d3d8111913bb2fb4b68b6df317c0ed336..7ccfa7155d3cc77555c6eb338f14dcb97ee63c9d 100644 (file)
@@ -1,5 +1,18 @@
 2005-01-27  Andrew Cagney  <cagney@gnu.org>
 
+       * corefile.c (write_memory): Update, make a copy of the read-only
+       buffer.
+       * target.c (target_read_memory): Update.
+       (target_write_memory): Update, make a copy of the read-only
+       buffer.
+       * gdbcore.h (write_memory): Change buffer type to bfd_byte, make
+       const.
+       * target.h (target_read_memory, target_write_memory): Change
+       buffer type to bfd_byte; for write_memory, make it const.
+       * symfile-mem.c (do_target_read_memory): New function.
+       (symbol_file_add_from_memory): Pass do_target_read_memory to
+       bfd_elf_bfd_from_remote_memory.
+
        * value.h: Indent using gdb_indent.sh.
 
        * configure: Regenerate to track ../gettext.m4 change.
index 8ef3ed2ef76d110f0280e19b85d61b77da5123c9..ff7003aaa8897e88fddc2a1116edde31632ea6eb 100644 (file)
@@ -347,11 +347,13 @@ read_memory_typed_address (CORE_ADDR addr, struct type *type)
 
 /* Same as target_write_memory, but report an error if can't write.  */
 void
-write_memory (CORE_ADDR memaddr, char *myaddr, int len)
+write_memory (CORE_ADDR memaddr, const bfd_byte *myaddr, int len)
 {
   int status;
-
-  status = target_write_memory (memaddr, myaddr, len);
+  bfd_byte *bytes = alloca (len);
+  
+  memcpy (bytes, myaddr, len);
+  status = target_write_memory (memaddr, bytes, len);
   if (status != 0)
     memory_error (status, memaddr);
 }
index 248b16972cde993ded01f32e667a66a04f15b6c5..d4e9a9d01e5761615bf40c6f7e99594772661ba1 100644 (file)
@@ -86,7 +86,7 @@ CORE_ADDR read_memory_typed_address (CORE_ADDR addr, struct type *type);
    byteswapping, alignment, different sizes for host vs. target types,
    etc.  */
 
-extern void write_memory (CORE_ADDR memaddr, char *myaddr, int len);
+extern void write_memory (CORE_ADDR memaddr, const bfd_byte *myaddr, int len);
 
 /* Store VALUE at ADDR in the inferior as a LEN-byte unsigned integer.  */
 extern void write_memory_unsigned_integer (CORE_ADDR addr, int len,
index 6cb04f2fd3745ed2a4ac095355fa5997df15ee99..61c168ecaade7b50ba9e618f841f494bcbb95c9c 100644 (file)
 #include "elf/common.h"
 
 
+/* FIXME: cagney/2005-01-27: Should be a function with the signature:
+   int (void *object, const bfd_byte *myaddr, int len).  */
+
+static int
+do_target_read_memory (bfd_vma vma, char *myaddr, int len)
+{
+  return target_read_memory (vma, myaddr, len);
+}
+
 /* Read inferior memory at ADDR to find the header of a loaded object file
    and read its in-core symbols out of inferior memory.  TEMPL is a bfd
    representing the target's format.  NAME is the name to use for this
@@ -78,7 +87,7 @@ symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, char *name,
     error ("add-symbol-file-from-memory not supported for this target");
 
   nbfd = bfd_elf_bfd_from_remote_memory (templ, addr, &loadbase,
-                                        target_read_memory);
+                                        do_target_read_memory);
   if (nbfd == NULL)
     error ("Failed to read a valid object file image from memory.");
 
index bade14c73cdfc810bd4aa37e89487171b72264be..5a050afcb6f329cced8074c6357cd6fbc3fccbf3 100644 (file)
@@ -995,7 +995,7 @@ xfer_using_stratum (enum target_object object, const char *annex,
    deal with partial reads should call target_read_memory_partial. */
 
 int
-target_read_memory (CORE_ADDR memaddr, char *myaddr, int len)
+target_read_memory (CORE_ADDR memaddr, bfd_byte *myaddr, int len)
 {
   if (target_xfer_partial_p ())
     return xfer_using_stratum (TARGET_OBJECT_MEMORY, NULL,
@@ -1005,13 +1005,15 @@ target_read_memory (CORE_ADDR memaddr, char *myaddr, int len)
 }
 
 int
-target_write_memory (CORE_ADDR memaddr, char *myaddr, int len)
+target_write_memory (CORE_ADDR memaddr, const bfd_byte *myaddr, int len)
 {
+  bfd_byte *bytes = alloca (len);
+  memcpy (bytes, myaddr, len);
   if (target_xfer_partial_p ())
     return xfer_using_stratum (TARGET_OBJECT_MEMORY, NULL,
-                              memaddr, len, NULL, myaddr);
+                              memaddr, len, NULL, bytes);
   else
-    return target_xfer_memory (memaddr, myaddr, len, 1);
+    return target_xfer_memory (memaddr, bytes, len, 1);
 }
 
 #ifndef target_stopped_data_address_p
index 9665ade58cd7df0b445127d313b6348adbfdcaa3..ff9ba11400cd61652a6799fd71563a7923617c20 100644 (file)
@@ -537,9 +537,10 @@ extern int do_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
 
 extern int target_read_string (CORE_ADDR, char **, int, int *);
 
-extern int target_read_memory (CORE_ADDR memaddr, char *myaddr, int len);
+extern int target_read_memory (CORE_ADDR memaddr, bfd_byte *myaddr, int len);
 
-extern int target_write_memory (CORE_ADDR memaddr, char *myaddr, int len);
+extern int target_write_memory (CORE_ADDR memaddr, const bfd_byte *myaddr,
+                               int len);
 
 extern int xfer_memory (CORE_ADDR, char *, int, int,
                        struct mem_attrib *, struct target_ops *);
This page took 0.032313 seconds and 4 git commands to generate.