summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2006-06-12 23:25:17 +0000
committerUlrich Drepper <drepper@redhat.com>2006-06-12 23:25:17 +0000
commit595d0e7e9f368f04f0d9e04b902c8dc1073103e6 (patch)
treedf3eece241bf558d13521bbc6513e105d539530b
parentd8dcc9c17a866f18b342b3b0594c15d007b8b73b (diff)
downloadelfutils-595d0e7e9f368f04f0d9e04b902c8dc1073103e6.tar.gz
(create_verneed_data): Pretty printing.
-rw-r--r--backends/ChangeLog4
-rw-r--r--backends/ppc64_retval.c6
-rw-r--r--libdwfl/ChangeLog5
-rw-r--r--libdwfl/elf-from-memory.c6
-rw-r--r--src/ChangeLog2
-rw-r--r--src/ldgeneric.c104
6 files changed, 60 insertions, 67 deletions
diff --git a/backends/ChangeLog b/backends/ChangeLog
index b5ae1304..c054c58e 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -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.
diff --git a/backends/ppc64_retval.c b/backends/ppc64_retval.c
index 7f5e6f83..70a0de76 100644
--- a/backends/ppc64_retval.c
+++ b/backends/ppc64_retval.c
@@ -34,6 +34,10 @@
#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;
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index 96fe56bc..1a49526d 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -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".
diff --git a/libdwfl/elf-from-memory.c b/libdwfl/elf-from-memory.c
index 2a174759..90a0c4d8 100644
--- a/libdwfl/elf-from-memory.c
+++ b/libdwfl/elf-from-memory.c
@@ -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;
diff --git a/src/ChangeLog b/src/ChangeLog
index c7c113e4..87ea9744 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -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.
diff --git a/src/ldgeneric.c b/src/ldgeneric.c
index 22fac228..47015b16 100644
--- a/src/ldgeneric.c
+++ b/src/ldgeneric.c
@@ -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;
}