]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
(create_verneed_data): Pretty printing.
authorUlrich Drepper <drepper@redhat.com>
Mon, 12 Jun 2006 23:25:17 +0000 (23:25 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 12 Jun 2006 23:25:17 +0000 (23:25 +0000)
backends/ChangeLog
backends/ppc64_retval.c
libdwfl/ChangeLog
libdwfl/elf-from-memory.c
src/ChangeLog
src/ldgeneric.c

index b5ae13045358c9abb7eb19944ec1241b62565eaf..c054c58ed55a93559f62baab6d7df775823dc02b 100644 (file)
@@ -1,7 +1,3 @@
-2006-06-13  Roland McGrath  <roland@redhat.com>
-
-       * ppc64_retval.c: Remove SVR4_STRUCT_RETURN braino.
-
 2006-06-12  Ulrich Drepper  <drepper@redhat.com>
 
        * common-reloc.c (none_reloc_p): New function.
index 7f5e6f83d7785c7798c60b4e29d9ac7fa2094fe1..70a0de7641205824147e21ecba762bcc87d06373 100644 (file)
 #include "libebl_CPU.h"
 
 
+/* This is the SVR4 ELF ABI convention, but AIX and Linux do not use it.  */
+#define SVR4_STRUCT_RETURN 0
+
+
 /* r3.  */
 static const Dwarf_Op loc_intreg[] =
   {
@@ -133,7 +137,7 @@ ppc64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp)
                return nloc_fp4regs;
            }
        }
-      if (size <= 8)
+      if (size <= 8 && SVR4_STRUCT_RETURN)
        {
        intreg:
          *locp = loc_intreg;
index 96fe56bc6c6f613c70e9e75cd64d7e8c93107b9d..1a49526d5e71d7a4c823ffca3d6c7f0e8419a4cf 100644 (file)
@@ -1,8 +1,3 @@
-2006-06-13  Roland McGrath  <roland@redhat.com>
-
-       * elf-from-memory.c (elf_from_remote_memory): Fix 32/64 typo.
-       Use __libdwfl_seterrno for elf_memory failure.
-
 2006-05-27  Ulrich Drepper  <drepper@redhat.com>
 
        * libdwfl.h: Add extern "C".
index 2a174759b93ef81a25ed1f5d4fe8fec9f4c25db0..90a0c4d808887122077a78cf1cb03af145078e28 100644 (file)
@@ -1,5 +1,5 @@
 /* Reconstruct an ELF file by reading the segments out of remote memory.
-   Copyright (C) 2005, 2006 Red Hat, Inc.
+   Copyright (C) 2005 Red Hat, Inc.
    This file is part of Red Hat elfutils.
 
    Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -338,7 +338,7 @@ elf_from_remote_memory (GElf_Addr ehdr_vma,
       xlatefrom.d_size = xlateto.d_size = sizeof ehdr.e64;
       xlatefrom.d_buf = &ehdr.e64;
       xlateto.d_buf = buffer;
-      if (elf64_xlatetof (&xlateto, &xlatefrom,
+      if (elf32_xlatetof (&xlateto, &xlatefrom,
                          ehdr.e64.e_ident[EI_DATA]) == NULL)
        goto libelf_error;
       break;
@@ -354,7 +354,7 @@ elf_from_remote_memory (GElf_Addr ehdr_vma,
   if (elf == NULL)
     {
       free (buffer);
-      goto libelf_error;
+      return NULL;
     }
 
   elf->flags |= ELF_F_MALLOCED;
index c7c113e4fbc1f070c6650b6be3a3250548da5f6e..87ea97443c4ffe2858094edfdc44cca044302806 100644 (file)
@@ -5,6 +5,8 @@
        (ld_generic_create_outfile): Don't store reference to symbols in
        discarded COMDAT groups.  Don't create PHDR and INTERP program header
        for DSO if no interpreter is specified.
+       (create_verneed_data): Pretty printing.
+
        * ldscript.y (content): If a DSO is created don't set default
        interpreter from linker script.
 
index 22fac22814f9fda34bf6026537e981e5c83e47a7..47015b169f55f08192a870de1d3001bce885e48d 100644 (file)
@@ -3649,66 +3649,62 @@ allocate_version_names (struct usedfiles *runp, struct Ebl_Strtab *dynstrtab)
 }
 
 
-XElf_Off
+static XElf_Off
 create_verneed_data (XElf_Off offset, Elf_Data *verneeddata,
                     struct usedfiles *runp, int *ntotal)
 {
-         size_t verneed_size = xelf_fsize (ld_state.outelf, ELF_T_VNEED, 1);
-         size_t vernaux_size = xelf_fsize (ld_state.outelf, ELF_T_VNAUX, 1);
-             int need_offset;
-             bool filled = false;
-             GElf_Verneed verneed;
-             GElf_Vernaux vernaux;
-             int ndef = 0;
-size_t cnt;
-
-             /* If this DSO has no versions skip it.  */
-             if (runp->nverdefused == 0)
-               return offset;
-
-             /* We fill in the Verneed record last.  Remember the
-                offset.  */
-             need_offset = offset;
-             offset += verneed_size;
-
-             for (cnt = 2; cnt <= runp->nverdef; ++cnt)
-               if (runp->verdefused[cnt] != 0)
-                 {
-                   assert (runp->verdefent[cnt] != NULL);
+  size_t verneed_size = xelf_fsize (ld_state.outelf, ELF_T_VNEED, 1);
+  size_t vernaux_size = xelf_fsize (ld_state.outelf, ELF_T_VNAUX, 1);
+  int need_offset;
+  bool filled = false;
+  GElf_Verneed verneed;
+  GElf_Vernaux vernaux;
+  int ndef = 0;
+  size_t cnt;
 
-                   if (filled)
-                     {
-                       vernaux.vna_next = vernaux_size;
-                       (void) gelf_update_vernaux (verneeddata, offset,
-                                                   &vernaux);
-                       offset += vernaux_size;
-                     }
+  /* If this DSO has no versions skip it.  */
+  if (runp->nverdefused == 0)
+    return offset;
 
-                   vernaux.vna_hash
-                     = elf_hash (ebl_string (runp->verdefent[cnt]));
-                   vernaux.vna_flags = 0;
-                   vernaux.vna_other = runp->verdefused[cnt];
-                   vernaux.vna_name = ebl_strtaboffset (runp->verdefent[cnt]);
-                   filled = true;
-                   ++ndef;
-                 }
+  /* We fill in the Verneed record last.  Remember the offset.  */
+  need_offset = offset;
+  offset += verneed_size;
+
+  for (cnt = 2; cnt <= runp->nverdef; ++cnt)
+    if (runp->verdefused[cnt] != 0)
+      {
+       assert (runp->verdefent[cnt] != NULL);
+
+       if (filled)
+         {
+           vernaux.vna_next = vernaux_size;
+           (void) gelf_update_vernaux (verneeddata, offset, &vernaux);
+           offset += vernaux_size;
+         }
+
+       vernaux.vna_hash = elf_hash (ebl_string (runp->verdefent[cnt]));
+       vernaux.vna_flags = 0;
+       vernaux.vna_other = runp->verdefused[cnt];
+       vernaux.vna_name = ebl_strtaboffset (runp->verdefent[cnt]);
+       filled = true;
+       ++ndef;
+      }
 
-             assert (filled);
-             vernaux.vna_next = 0;
-             (void) gelf_update_vernaux (verneeddata, offset, &vernaux);
-             offset += vernaux_size;
-
-             verneed.vn_version = VER_NEED_CURRENT;
-             verneed.vn_cnt = ndef;
-             verneed.vn_file = ebl_strtaboffset (runp->verdefent[1]);
-             /* The first auxiliary entry is always found directly
-                after the verneed entry.  */
-             verneed.vn_aux = verneed_size;
-             verneed.vn_next = --*ntotal > 0 ? offset - need_offset : 0;
-             (void) gelf_update_verneed (verneeddata, need_offset,
-                                         &verneed);
-
-             return offset;
+  assert (filled);
+  vernaux.vna_next = 0;
+  (void) gelf_update_vernaux (verneeddata, offset, &vernaux);
+  offset += vernaux_size;
+
+  verneed.vn_version = VER_NEED_CURRENT;
+  verneed.vn_cnt = ndef;
+  verneed.vn_file = ebl_strtaboffset (runp->verdefent[1]);
+  /* The first auxiliary entry is always found directly
+     after the verneed entry.  */
+  verneed.vn_aux = verneed_size;
+  verneed.vn_next = --*ntotal > 0 ? offset - need_offset : 0;
+  (void) gelf_update_verneed (verneeddata, need_offset, &verneed);
+
+  return offset;
 }