diff options
author | Ulrich Drepper <drepper@redhat.com> | 2006-06-12 23:25:17 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2006-06-12 23:25:17 +0000 |
commit | 595d0e7e9f368f04f0d9e04b902c8dc1073103e6 (patch) | |
tree | df3eece241bf558d13521bbc6513e105d539530b | |
parent | d8dcc9c17a866f18b342b3b0594c15d007b8b73b (diff) | |
download | elfutils-595d0e7e9f368f04f0d9e04b902c8dc1073103e6.tar.gz |
(create_verneed_data): Pretty printing.
-rw-r--r-- | backends/ChangeLog | 4 | ||||
-rw-r--r-- | backends/ppc64_retval.c | 6 | ||||
-rw-r--r-- | libdwfl/ChangeLog | 5 | ||||
-rw-r--r-- | libdwfl/elf-from-memory.c | 6 | ||||
-rw-r--r-- | src/ChangeLog | 2 | ||||
-rw-r--r-- | src/ldgeneric.c | 104 |
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; } |