bfd/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 4 Jun 2012 14:35:25 +0000 (14:35 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 4 Jun 2012 14:35:25 +0000 (14:35 +0000)
* bfd-in.h (bfd_elf_bfd_from_remote_memory): Make LEN argument
of target_read_memory as bfd_size_type.
* bfd-in2.h: Regenerate.
* elf-bfd.h (elf_backend_bfd_from_remote_memory): Make LEN
argument of target_read_memory as bfd_size_type.
(_bfd_elf32_bfd_from_remote_memory): Likewise.
(_bfd_elf64_bfd_from_remote_memory): Likewise.
* elf.c (bfd_elf_bfd_from_remote_memory): Likewise.
* elfcode.h (NAME(_bfd_elf,bfd_from_remote_memory)): Likewise.

gdb/
* symfile-mem.c: 3 new gdb_static_assert for target_read_memory_bfd
parameters.
(target_read_memory_bfd): New function.
(symbol_file_add_from_memory): Use it.

bfd/ChangeLog
bfd/bfd-in.h
bfd/bfd-in2.h
bfd/elf-bfd.h
bfd/elf.c
bfd/elfcode.h
gdb/ChangeLog
gdb/symfile-mem.c

index e734796297f1156248470de3b9cf31b7aec34126..9874ff1cf169b3492e979d5d8817589a6400da6b 100644 (file)
@@ -1,3 +1,15 @@
+2012-06-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * bfd-in.h (bfd_elf_bfd_from_remote_memory): Make LEN argument
+       of target_read_memory as bfd_size_type.
+       * bfd-in2.h: Regenerate.
+       * elf-bfd.h (elf_backend_bfd_from_remote_memory): Make LEN
+       argument of target_read_memory as bfd_size_type.
+       (_bfd_elf32_bfd_from_remote_memory): Likewise.
+       (_bfd_elf64_bfd_from_remote_memory): Likewise.
+       * elf.c (bfd_elf_bfd_from_remote_memory): Likewise.
+       * elfcode.h (NAME(_bfd_elf,bfd_from_remote_memory)): Likewise.
+
 2012-06-03  Alan Modra  <amodra@gmail.com>
 
        PR binutils/13897
index 9617428caf5f1baf09d9b818821bff38bdfd1df0..5300b14dfce349f8fa2636756e34e298cfed3315 100644 (file)
@@ -698,7 +698,8 @@ extern int bfd_get_elf_phdrs
    the remote memory.  */
 extern bfd *bfd_elf_bfd_from_remote_memory
   (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr, size_t len));
+   int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
+                             bfd_size_type len));
 
 extern struct bfd_section *_bfd_elf_tls_setup
   (bfd *, struct bfd_link_info *);
index 585a54a0d2eff896c04e99638972a80d31f0ea6a..8798ae47ac4a5ae319da3b8ae810e768044a405b 100644 (file)
@@ -705,7 +705,8 @@ extern int bfd_get_elf_phdrs
    the remote memory.  */
 extern bfd *bfd_elf_bfd_from_remote_memory
   (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr, size_t len));
+   int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
+                             bfd_size_type len));
 
 extern struct bfd_section *_bfd_elf_tls_setup
   (bfd *, struct bfd_link_info *);
index 6918d5a129f072e418bfdc0bc3c5cb83c9ff4982..889ce128b4b526ad731af03bee0688b7a3774d4c 100644 (file)
@@ -1186,7 +1186,8 @@ struct elf_backend_data
      see elf.c, elfcode.h.  */
   bfd *(*elf_backend_bfd_from_remote_memory)
      (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
-      int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr, size_t len));
+      int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
+                                bfd_size_type len));
 
   /* This function is used by `_bfd_elf_get_synthetic_symtab';
      see elf.c.  */
@@ -2261,10 +2262,10 @@ extern char *elfcore_write_register_note
 
 extern bfd *_bfd_elf32_bfd_from_remote_memory
   (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma, bfd_byte *, size_t));
+   int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type));
 extern bfd *_bfd_elf64_bfd_from_remote_memory
   (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma, bfd_byte *, size_t));
+   int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type));
 
 extern bfd_vma bfd_elf_obj_attr_size (bfd *);
 extern void bfd_elf_set_obj_attr_contents (bfd *, bfd_byte *, bfd_vma);
index ac7be2c5ec135fcafd1fb76ccb98eee4616b99f5..d97da9f8ba9061147c760b16be0c165a9dceb602 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -9571,7 +9571,7 @@ bfd_elf_bfd_from_remote_memory
   (bfd *templ,
    bfd_vma ehdr_vma,
    bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma, bfd_byte *, size_t))
+   int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
 {
   return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
     (templ, ehdr_vma, loadbasep, target_read_memory);
index 2c8fe2b4f54234394f38b488e33f943026ed4e6d..cc55c866d6f40efccdefc2c444310b5425798926 100644 (file)
@@ -1615,7 +1615,7 @@ NAME(_bfd_elf,bfd_from_remote_memory)
   (bfd *templ,
    bfd_vma ehdr_vma,
    bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma, bfd_byte *, size_t))
+   int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
 {
   Elf_External_Ehdr x_ehdr;    /* Elf file header, external form */
   Elf_Internal_Ehdr i_ehdr;    /* Elf file header, internal form */
index 20fd853f72d1dd0029a326deaecea5abcdd4f4a5..0f5d4d99bb923e2c1b5e6fd62ecb9f5fcc3d0a0d 100644 (file)
@@ -1,3 +1,10 @@
+2012-06-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * symfile-mem.c: 3 new gdb_static_assert for target_read_memory_bfd
+       parameters.
+       (target_read_memory_bfd): New function.
+       (symbol_file_add_from_memory): Use it.
+
 2012-06-03  Doug Evans  <dje@google.com>
 
        * symtab.c (lookup_global_symbol_from_objfile): Only scan blockvector
index 91125e15e5fe43333a0b8c3492f0d0ef3eccd463..45d95a77e67609022e39e799b17536a59bd5b937 100644 (file)
 #include "auxv.h"
 #include "elf/common.h"
 
+/* Verify parameters of target_read_memory_bfd and target_read_memory are
+   compatible.  */
+
+gdb_static_assert (sizeof (CORE_ADDR) == sizeof (bfd_vma));
+gdb_static_assert (sizeof (gdb_byte) == sizeof (bfd_byte));
+gdb_static_assert (sizeof (size_t) <= sizeof (bfd_size_type));
+
+/* Provide bfd/ compatible prototype for target_read_memory.  Casting would not
+   be enough as LEN width may differ.  */
+
+static int
+target_read_memory_bfd (bfd_vma memaddr, bfd_byte *myaddr, bfd_size_type len)
+{
+  /* MYADDR must be already allocated for the LEN size so it has to fit in
+     size_t.  */
+  gdb_assert ((size_t) len == len);
+
+  return target_read_memory (memaddr, 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
@@ -77,7 +96,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);
+                                        target_read_memory_bfd);
   if (nbfd == NULL)
     error (_("Failed to read a valid object file image from memory."));