From 521c47d2a216fc64098c024fc5ed53532b485f32 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Fri, 11 Apr 2008 07:01:58 +0000 Subject: [PATCH] src/ * strip.c (handle_elf): Don't keep sections that kept symbol tables refer to. Instead, just be sure to preserve the original symbol table in the debug file so those symbols go with their sections and can be elided from the stripped version of the symbol table. tests/ * testfile48.bz2, testfile48.bz2.debug: New data files. * Makefile.am (EXTRA_DIST): Add them. * run-strip-test8.sh: Use them. --- src/ChangeLog | 19 ++ src/elflint.c | 13 +- src/strip.c | 568 ++++++++++++++++++++----------------- tests/ChangeLog | 13 + tests/Makefile.am | 7 +- tests/run-strip-test.sh | 9 +- tests/run-strip-test8.sh | 5 + tests/testfile16.bz2 | Bin 8424 -> 8413 bytes tests/testfile16.debug.bz2 | Bin 23520 -> 24257 bytes tests/testfile47.bz2 | Bin 0 -> 793 bytes tests/testfile48.bz2 | Bin 0 -> 408 bytes tests/testfile48.debug.bz2 | Bin 0 -> 758 bytes 12 files changed, 362 insertions(+), 272 deletions(-) create mode 100755 tests/run-strip-test8.sh create mode 100644 tests/testfile47.bz2 create mode 100644 tests/testfile48.bz2 create mode 100644 tests/testfile48.debug.bz2 diff --git a/src/ChangeLog b/src/ChangeLog index 41267ea0f..94444c581 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,22 @@ +2008-04-10 Roland McGrath + + * strip.c (handle_elf): Don't keep sections that kept symbol tables + refer to. Instead, just be sure to preserve the original symbol + table in the debug file so those symbols go with their sections and + can be elided from the stripped version of the symbol table. + + * strip.c (handle_elf): When a discarded section kept in the debug + file refers to a nondiscard section via sh_link/sh_info, preserve + that nondiscarded section unmodified in the debug file as well. + Skip adjustment of discarded sections symbol table references when + that symbol table is copied in this way. + + * elflint.c (check_symtab): Don't crash from missing symbol names + after diagnosing bogus strtab. + + * strip.c (handle_elf): Cosmetic cleanup in special section contents + adjustment for symtab changes. + 2008-03-31 Roland McGrath * elflint.c (check_sections): Add checks on SHF_EXECINSTR sections: diff --git a/src/elflint.c b/src/elflint.c index b13dfdb5f..bc4219b3e 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -579,9 +579,12 @@ check_symtab (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx) return; if (strshdr->sh_type != SHT_STRTAB) - ERROR (gettext ("section [%2d] '%s': referenced as string table for section [%2d] '%s' but type is not SHT_STRTAB\n"), - shdr->sh_link, section_name (ebl, shdr->sh_link), - idx, section_name (ebl, idx)); + { + ERROR (gettext ("section [%2d] '%s': referenced as string table for section [%2d] '%s' but type is not SHT_STRTAB\n"), + shdr->sh_link, section_name (ebl, shdr->sh_link), + idx, section_name (ebl, idx)); + strshdr = NULL; + } /* Search for an extended section index table section. */ Elf_Data *xndxdata = NULL; @@ -659,7 +662,9 @@ section [%2d] '%s': XINDEX for zeroth entry not zero\n"), } const char *name = NULL; - if (sym->st_name >= strshdr->sh_size) + if (strshdr == NULL) + name = ""; + else if (sym->st_name >= strshdr->sh_size) ERROR (gettext ("\ section [%2d] '%s': symbol %zu: invalid name value\n"), idx, section_name (ebl, idx), cnt); diff --git a/src/strip.c b/src/strip.c index 5fddeeebd..0f83e61d2 100644 --- a/src/strip.c +++ b/src/strip.c @@ -1,5 +1,5 @@ /* Discard section not used at runtime from object files. - Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc. + Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007,2008 Red Hat, Inc. This file is part of Red Hat elfutils. Written by Ulrich Drepper , 2000. @@ -390,6 +390,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, Elf_Scn *scn; GElf_Shdr shdr; Elf_Data *data; + Elf_Data *debug_data; const char *name; Elf32_Word idx; /* Index in new file. */ Elf32_Word old_sh_link; /* Original value of shdr.sh_link. */ @@ -720,8 +721,10 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, /* The content of symbol tables we don't remove must not reference any section which we do remove. Otherwise we cannot remove the section. */ - if (shdr_info[cnt].shdr.sh_type == SHT_DYNSYM - || shdr_info[cnt].shdr.sh_type == SHT_SYMTAB) + if (debug_fname != NULL + && shdr_info[cnt].debug_data == NULL + && (shdr_info[cnt].shdr.sh_type == SHT_DYNSYM + || shdr_info[cnt].shdr.sh_type == SHT_SYMTAB)) { /* Make sure the data is loaded. */ if (shdr_info[cnt].data == NULL) @@ -779,11 +782,10 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, scnidx = xndx; if (shdr_info[scnidx].idx == 0) - { - /* Mark this section as used. */ - shdr_info[scnidx].idx = 1; - changes |= scnidx < cnt; - } + /* This symbol table has a real symbol in + a discarded section. So preserve the + original table in the debug file. */ + shdr_info[cnt].debug_data = symdata; } } @@ -819,6 +821,36 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, /* Mark the section as investigated. */ shdr_info[cnt].idx = 2; } + + if (debug_fname != NULL + && (shdr_info[cnt].idx == 0 || shdr_info[cnt].debug_data != NULL)) + { + /* This section is being preserved in the debug file. + Sections it refers to must be preserved there too. + + In this pass we mark sections to be preserved in both + files by setting the .debug_data pointer to the original + file's .data pointer. Below, we'll copy the section + contents. */ + + inline void check_preserved (size_t i) + { + if (i != 0 && shdr_info[i].idx != 0) + { + if (shdr_info[i].data == NULL) + shdr_info[i].data = elf_getdata (shdr_info[i].scn, NULL); + if (shdr_info[i].data == NULL) + INTERNAL_ERROR (fname); + + shdr_info[i].debug_data = shdr_info[i].data; + changes |= i < cnt; + } + } + + check_preserved (shdr_info[cnt].shdr.sh_link); + if (SH_INFO_LINK_P (&shdr_info[cnt].shdr)) + check_preserved (shdr_info[cnt].shdr.sh_info); + } } } while (changes); @@ -836,6 +868,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, elf_errmsg (-1)); bool discard_section = (shdr_info[cnt].idx > 0 + && shdr_info[cnt].debug_data == NULL && shdr_info[cnt].shdr.sh_type != SHT_NOTE && cnt != ehdr->e_shstrndx); @@ -866,6 +899,13 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, *debugdata = *shdr_info[cnt].data; if (discard_section) debugdata->d_buf = NULL; + else if (shdr_info[cnt].debug_data != NULL) + { + /* Copy the original data before it gets modified. */ + shdr_info[cnt].debug_data = debugdata; + debugdata->d_buf = memcpy (xmalloc (debugdata->d_size), + debugdata->d_buf, debugdata->d_size); + } } /* Finish the ELF header. Fill in the fields not handled by @@ -1078,7 +1118,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, /* We know the size. */ shdr_info[cnt].shdr.sh_size = shdr_info[cnt].data->d_size; - /* We have to adjust symtol tables. The st_shndx member might + /* We have to adjust symbol tables. The st_shndx member might have to be updated. */ if (shdr_info[cnt].shdr.sh_type == SHT_DYNSYM || shdr_info[cnt].shdr.sh_type == SHT_SYMTAB) @@ -1206,7 +1246,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, shdr_info[cnt].shdr.sh_info = destidx - 1; } } - else + else if (debug_fname == NULL + || shdr_info[cnt].debug_data == NULL) /* This is a section symbol for a section which has been removed. */ assert (GELF_ST_TYPE (sym->st_info) == STT_SECTION); @@ -1248,291 +1289,288 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, /* Adjust symbol references if symbol tables changed. */ if (any_symtab_changes) - { - /* Find all relocation sections which use this - symbol table. */ - for (cnt = 1; cnt <= shdridx; ++cnt) + /* Find all relocation sections which use this symbol table. */ + for (cnt = 1; cnt <= shdridx; ++cnt) + { + /* Update section headers when the data size has changed. + We also update the SHT_NOBITS section in the debug + file so that the section headers match in sh_size. */ + inline void update_section_size (const Elf_Data *newdata) { - /* Update section headers when the data size has changed. - We also update the SHT_NOBITS section in the debug - file so that the section headers match in sh_size. */ - inline void update_section_size (const Elf_Data *newdata) + GElf_Shdr shdr_mem; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); + shdr->sh_size = newdata->d_size; + (void) gelf_update_shdr (scn, shdr); + if (debugelf != NULL) { - GElf_Shdr shdr_mem; - GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); - shdr->sh_size = newdata->d_size; - (void) gelf_update_shdr (scn, shdr); - if (debugelf != NULL) - { - /* libelf will use d_size to set sh_size. */ - Elf_Data *debugdata = elf_getdata (elf_getscn (debugelf, - cnt), NULL); - debugdata->d_size = newdata->d_size; - } + /* libelf will use d_size to set sh_size. */ + Elf_Data *debugdata = elf_getdata (elf_getscn (debugelf, + cnt), NULL); + debugdata->d_size = newdata->d_size; } + } - if (shdr_info[cnt].idx == 0 && debug_fname == NULL) - /* Ignore sections which are discarded. When we are saving a - relocation section in a separate debug file, we must fix up - the symbol table references. */ - continue; + if (shdr_info[cnt].idx == 0 && debug_fname == NULL) + /* Ignore sections which are discarded. When we are saving a + relocation section in a separate debug file, we must fix up + the symbol table references. */ + continue; - if (shdr_info[cnt].shdr.sh_type == SHT_REL - || shdr_info[cnt].shdr.sh_type == SHT_RELA) + const Elf32_Word symtabidx = shdr_info[cnt].old_sh_link; + const Elf32_Word *const newsymidx = shdr_info[symtabidx].newsymidx; + switch (shdr_info[cnt].shdr.sh_type) + { + inline bool no_symtab_updates (void) { /* If the symbol table hasn't changed, do not do anything. */ - if (shdr_info[shdr_info[cnt].old_sh_link].newsymidx == NULL) - continue; - - Elf32_Word *newsymidx - = shdr_info[shdr_info[cnt].old_sh_link].newsymidx; - Elf_Data *d = elf_getdata (shdr_info[cnt].idx == 0 - ? elf_getscn (debugelf, cnt) - : elf_getscn (newelf, - shdr_info[cnt].idx), - NULL); - assert (d != NULL); - size_t nrels = (shdr_info[cnt].shdr.sh_size - / shdr_info[cnt].shdr.sh_entsize); - - if (shdr_info[cnt].shdr.sh_type == SHT_REL) - for (size_t relidx = 0; relidx < nrels; ++relidx) - { - GElf_Rel rel_mem; - if (gelf_getrel (d, relidx, &rel_mem) == NULL) - INTERNAL_ERROR (fname); + if (shdr_info[symtabidx].newsymidx == NULL) + return true; - size_t symidx = GELF_R_SYM (rel_mem.r_info); - if (newsymidx[symidx] != symidx) - { - rel_mem.r_info - = GELF_R_INFO (newsymidx[symidx], - GELF_R_TYPE (rel_mem.r_info)); + /* If the symbol table is not discarded, but additionally + duplicated in the separate debug file and this section + is discarded, don't adjust anything. */ + return (shdr_info[cnt].idx == 0 + && shdr_info[symtabidx].debug_data != NULL); + } - if (gelf_update_rel (d, relidx, &rel_mem) == 0) - INTERNAL_ERROR (fname); - } - } - else - for (size_t relidx = 0; relidx < nrels; ++relidx) - { - GElf_Rela rel_mem; - if (gelf_getrela (d, relidx, &rel_mem) == NULL) - INTERNAL_ERROR (fname); + case SHT_REL: + case SHT_RELA: + if (no_symtab_updates ()) + break; - size_t symidx = GELF_R_SYM (rel_mem.r_info); - if (newsymidx[symidx] != symidx) - { - rel_mem.r_info - = GELF_R_INFO (newsymidx[symidx], - GELF_R_TYPE (rel_mem.r_info)); + Elf_Data *d = elf_getdata (shdr_info[cnt].idx == 0 + ? elf_getscn (debugelf, cnt) + : elf_getscn (newelf, + shdr_info[cnt].idx), + NULL); + assert (d != NULL); + size_t nrels = (shdr_info[cnt].shdr.sh_size + / shdr_info[cnt].shdr.sh_entsize); - if (gelf_update_rela (d, relidx, &rel_mem) == 0) - INTERNAL_ERROR (fname); - } - } - } - else if (shdr_info[cnt].shdr.sh_type == SHT_HASH) - { - /* We have to recompute the hash table. */ - Elf32_Word symtabidx = shdr_info[cnt].old_sh_link; + if (shdr_info[cnt].shdr.sh_type == SHT_REL) + for (size_t relidx = 0; relidx < nrels; ++relidx) + { + GElf_Rel rel_mem; + if (gelf_getrel (d, relidx, &rel_mem) == NULL) + INTERNAL_ERROR (fname); - /* We do not have to do anything if the symbol table was - not changed. */ - if (shdr_info[symtabidx].newsymidx == NULL) - continue; + size_t symidx = GELF_R_SYM (rel_mem.r_info); + if (newsymidx[symidx] != symidx) + { + rel_mem.r_info + = GELF_R_INFO (newsymidx[symidx], + GELF_R_TYPE (rel_mem.r_info)); - assert (shdr_info[cnt].idx > 0); + if (gelf_update_rel (d, relidx, &rel_mem) == 0) + INTERNAL_ERROR (fname); + } + } + else + for (size_t relidx = 0; relidx < nrels; ++relidx) + { + GElf_Rela rel_mem; + if (gelf_getrela (d, relidx, &rel_mem) == NULL) + INTERNAL_ERROR (fname); - /* The hash section in the new file. */ - scn = elf_getscn (newelf, shdr_info[cnt].idx); + size_t symidx = GELF_R_SYM (rel_mem.r_info); + if (newsymidx[symidx] != symidx) + { + rel_mem.r_info + = GELF_R_INFO (newsymidx[symidx], + GELF_R_TYPE (rel_mem.r_info)); - /* The symbol table data. */ - Elf_Data *symd = elf_getdata (elf_getscn (newelf, - shdr_info[symtabidx].idx), - NULL); - assert (symd != NULL); + if (gelf_update_rela (d, relidx, &rel_mem) == 0) + INTERNAL_ERROR (fname); + } + } + break; - /* The hash table data. */ - Elf_Data *hashd = elf_getdata (scn, NULL); - assert (hashd != NULL); + case SHT_HASH: + if (no_symtab_updates ()) + break; - if (shdr_info[cnt].shdr.sh_entsize == sizeof (Elf32_Word)) - { - /* Sane arches first. */ - Elf32_Word *bucket = (Elf32_Word *) hashd->d_buf; + /* We have to recompute the hash table. */ - size_t strshndx = shdr_info[symtabidx].old_sh_link; - size_t elsize = gelf_fsize (elf, ELF_T_SYM, 1, - ehdr->e_version); + assert (shdr_info[cnt].idx > 0); - /* Adjust the nchain value. The symbol table size - changed. We keep the same size for the bucket array. */ - bucket[1] = symd->d_size / elsize; - Elf32_Word nbucket = bucket[0]; - bucket += 2; - Elf32_Word *chain = bucket + nbucket; - - /* New size of the section. */ - hashd->d_size = ((2 + symd->d_size / elsize + nbucket) - * sizeof (Elf32_Word)); - update_section_size (hashd); - - /* Clear the arrays. */ - memset (bucket, '\0', - (symd->d_size / elsize + nbucket) - * sizeof (Elf32_Word)); - - for (size_t inner = shdr_info[symtabidx].shdr.sh_info; - inner < symd->d_size / elsize; ++inner) - { - GElf_Sym sym_mem; - GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem); - assert (sym != NULL); + /* The hash section in the new file. */ + scn = elf_getscn (newelf, shdr_info[cnt].idx); - const char *name = elf_strptr (elf, strshndx, - sym->st_name); - assert (name != NULL); - size_t hidx = elf_hash (name) % nbucket; + /* The symbol table data. */ + Elf_Data *symd = elf_getdata (elf_getscn (newelf, + shdr_info[symtabidx].idx), + NULL); + assert (symd != NULL); - if (bucket[hidx] == 0) - bucket[hidx] = inner; - else - { - hidx = bucket[hidx]; + /* The hash table data. */ + Elf_Data *hashd = elf_getdata (scn, NULL); + assert (hashd != NULL); - while (chain[hidx] != 0) - hidx = chain[hidx]; + if (shdr_info[cnt].shdr.sh_entsize == sizeof (Elf32_Word)) + { + /* Sane arches first. */ + Elf32_Word *bucket = (Elf32_Word *) hashd->d_buf; - chain[hidx] = inner; - } - } - } - else - { - /* Alpha and S390 64-bit use 64-bit SHT_HASH entries. */ - assert (shdr_info[cnt].shdr.sh_entsize - == sizeof (Elf64_Xword)); + size_t strshndx = shdr_info[symtabidx].old_sh_link; + size_t elsize = gelf_fsize (elf, ELF_T_SYM, 1, + ehdr->e_version); - Elf64_Xword *bucket = (Elf64_Xword *) hashd->d_buf; + /* Adjust the nchain value. The symbol table size + changed. We keep the same size for the bucket array. */ + bucket[1] = symd->d_size / elsize; + Elf32_Word nbucket = bucket[0]; + bucket += 2; + Elf32_Word *chain = bucket + nbucket; + + /* New size of the section. */ + hashd->d_size = ((2 + symd->d_size / elsize + nbucket) + * sizeof (Elf32_Word)); + update_section_size (hashd); + + /* Clear the arrays. */ + memset (bucket, '\0', + (symd->d_size / elsize + nbucket) + * sizeof (Elf32_Word)); + + for (size_t inner = shdr_info[symtabidx].shdr.sh_info; + inner < symd->d_size / elsize; ++inner) + { + GElf_Sym sym_mem; + GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem); + assert (sym != NULL); - size_t strshndx = shdr_info[symtabidx].old_sh_link; - size_t elsize = gelf_fsize (elf, ELF_T_SYM, 1, - ehdr->e_version); + const char *name = elf_strptr (elf, strshndx, + sym->st_name); + assert (name != NULL); + size_t hidx = elf_hash (name) % nbucket; - /* Adjust the nchain value. The symbol table size - changed. We keep the same size for the bucket array. */ - bucket[1] = symd->d_size / elsize; - Elf64_Xword nbucket = bucket[0]; - bucket += 2; - Elf64_Xword *chain = bucket + nbucket; - - /* New size of the section. */ - hashd->d_size = ((2 + symd->d_size / elsize + nbucket) - * sizeof (Elf64_Xword)); - update_section_size (hashd); - - /* Clear the arrays. */ - memset (bucket, '\0', - (symd->d_size / elsize + nbucket) - * sizeof (Elf64_Xword)); - - for (size_t inner = shdr_info[symtabidx].shdr.sh_info; - inner < symd->d_size / elsize; ++inner) - { - GElf_Sym sym_mem; - GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem); - assert (sym != NULL); + if (bucket[hidx] == 0) + bucket[hidx] = inner; + else + { + hidx = bucket[hidx]; - const char *name = elf_strptr (elf, strshndx, - sym->st_name); - assert (name != NULL); - size_t hidx = elf_hash (name) % nbucket; + while (chain[hidx] != 0) + hidx = chain[hidx]; - if (bucket[hidx] == 0) - bucket[hidx] = inner; - else - { - hidx = bucket[hidx]; + chain[hidx] = inner; + } + } + } + else + { + /* Alpha and S390 64-bit use 64-bit SHT_HASH entries. */ + assert (shdr_info[cnt].shdr.sh_entsize + == sizeof (Elf64_Xword)); - while (chain[hidx] != 0) - hidx = chain[hidx]; + Elf64_Xword *bucket = (Elf64_Xword *) hashd->d_buf; - chain[hidx] = inner; - } - } - } - } - else if (shdr_info[cnt].shdr.sh_type == SHT_GNU_versym) - { - /* If the symbol table changed we have to adjust the - entries. */ - Elf32_Word symtabidx = shdr_info[cnt].old_sh_link; + size_t strshndx = shdr_info[symtabidx].old_sh_link; + size_t elsize = gelf_fsize (elf, ELF_T_SYM, 1, + ehdr->e_version); - /* We do not have to do anything if the symbol table was - not changed. */ - if (shdr_info[symtabidx].newsymidx == NULL) - continue; - - assert (shdr_info[cnt].idx > 0); - - /* The symbol version section in the new file. */ - scn = elf_getscn (newelf, shdr_info[cnt].idx); - - /* The symbol table data. */ - Elf_Data *symd = elf_getdata (elf_getscn (newelf, - shdr_info[symtabidx].idx), - NULL); - assert (symd != NULL); - - /* The version symbol data. */ - Elf_Data *verd = elf_getdata (scn, NULL); - assert (verd != NULL); - - /* The symbol version array. */ - GElf_Half *verstab = (GElf_Half *) verd->d_buf; - - /* New indices of the symbols. */ - Elf32_Word *newsymidx = shdr_info[symtabidx].newsymidx; - - /* Walk through the list and */ - size_t elsize = gelf_fsize (elf, verd->d_type, 1, - ehdr->e_version); - for (size_t inner = 1; inner < verd->d_size / elsize; ++inner) - if (newsymidx[inner] != 0) - /* Overwriting the same array works since the - reordering can only move entries to lower indices - in the array. */ - verstab[newsymidx[inner]] = verstab[inner]; - - /* New size of the section. */ - verd->d_size = gelf_fsize (newelf, verd->d_type, - symd->d_size - / gelf_fsize (elf, symd->d_type, 1, - ehdr->e_version), - ehdr->e_version); - update_section_size (verd); - } - else if (shdr_info[cnt].shdr.sh_type == SHT_GROUP) - { - /* Check whether the associated symbol table changed. */ - if (shdr_info[shdr_info[cnt].old_sh_link].newsymidx != NULL) - { - /* Yes the symbol table changed. Update the section - header of the section group. */ - scn = elf_getscn (newelf, shdr_info[cnt].idx); - GElf_Shdr shdr_mem; - GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); - assert (shdr != NULL); + /* Adjust the nchain value. The symbol table size + changed. We keep the same size for the bucket array. */ + bucket[1] = symd->d_size / elsize; + Elf64_Xword nbucket = bucket[0]; + bucket += 2; + Elf64_Xword *chain = bucket + nbucket; + + /* New size of the section. */ + hashd->d_size = ((2 + symd->d_size / elsize + nbucket) + * sizeof (Elf64_Xword)); + update_section_size (hashd); + + /* Clear the arrays. */ + memset (bucket, '\0', + (symd->d_size / elsize + nbucket) + * sizeof (Elf64_Xword)); + + for (size_t inner = shdr_info[symtabidx].shdr.sh_info; + inner < symd->d_size / elsize; ++inner) + { + GElf_Sym sym_mem; + GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem); + assert (sym != NULL); - size_t stabidx = shdr_info[cnt].old_sh_link; - shdr->sh_info = shdr_info[stabidx].newsymidx[shdr->sh_info]; + const char *name = elf_strptr (elf, strshndx, + sym->st_name); + assert (name != NULL); + size_t hidx = elf_hash (name) % nbucket; - (void) gelf_update_shdr (scn, shdr); - } - } - } - } + if (bucket[hidx] == 0) + bucket[hidx] = inner; + else + { + hidx = bucket[hidx]; + + while (chain[hidx] != 0) + hidx = chain[hidx]; + + chain[hidx] = inner; + } + } + } + break; + + case SHT_GNU_versym: + /* If the symbol table changed we have to adjust the entries. */ + if (no_symtab_updates ()) + break; + + assert (shdr_info[cnt].idx > 0); + + /* The symbol version section in the new file. */ + scn = elf_getscn (newelf, shdr_info[cnt].idx); + + /* The symbol table data. */ + symd = elf_getdata (elf_getscn (newelf, shdr_info[symtabidx].idx), + NULL); + assert (symd != NULL); + + /* The version symbol data. */ + Elf_Data *verd = elf_getdata (scn, NULL); + assert (verd != NULL); + + /* The symbol version array. */ + GElf_Half *verstab = (GElf_Half *) verd->d_buf; + + /* Walk through the list and */ + size_t elsize = gelf_fsize (elf, verd->d_type, 1, + ehdr->e_version); + for (size_t inner = 1; inner < verd->d_size / elsize; ++inner) + if (newsymidx[inner] != 0) + /* Overwriting the same array works since the + reordering can only move entries to lower indices + in the array. */ + verstab[newsymidx[inner]] = verstab[inner]; + + /* New size of the section. */ + verd->d_size = gelf_fsize (newelf, verd->d_type, + symd->d_size + / gelf_fsize (elf, symd->d_type, 1, + ehdr->e_version), + ehdr->e_version); + update_section_size (verd); + break; + + case SHT_GROUP: + if (no_symtab_updates ()) + break; + + /* Yes, the symbol table changed. + Update the section header of the section group. */ + scn = elf_getscn (newelf, shdr_info[cnt].idx); + GElf_Shdr shdr_mem; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); + assert (shdr != NULL); + + shdr->sh_info = newsymidx[shdr->sh_info]; + + (void) gelf_update_shdr (scn, shdr); + break; + } + } /* Now that we have done all adjustments to the data, we can actually write out the debug file. */ @@ -1659,7 +1697,11 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, table indices. */ if (any_symtab_changes) for (cnt = 1; cnt <= shdridx; ++cnt) - free (shdr_info[cnt].newsymidx); + { + free (shdr_info[cnt].newsymidx); + if (shdr_info[cnt].debug_data != NULL) + free (shdr_info[cnt].debug_data->d_buf); + } /* Free the memory. */ if ((shnum + 2) * sizeof (struct shdr_info) > MAX_STACK_ALLOC) diff --git a/tests/ChangeLog b/tests/ChangeLog index d9d746921..c9bba45cc 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,16 @@ +2008-04-10 Roland McGrath + + * testfile48.bz2, testfile48.bz2.debug: New data files. + * Makefile.am (EXTRA_DIST): Add them. + * run-strip-test8.sh: Use them. + + * testfile16.bz2, testfile16.debug.bz2: Replace data files. + + * run-strip-test.sh: Fail if stripped output has ".debug_*" sections. + * run-strip-test8.sh: New file. + * testfile47.bz2: New data file. + * Makefile.am (TESTS, EXTRA_DIST): Add them. + 2008-03-31 Roland McGrath * run-early-offscn.sh: New file. diff --git a/tests/Makefile.am b/tests/Makefile.am index f0b20e9dc..361c6581b 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -71,7 +71,7 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ run-show-abbrev.sh run-line2addr.sh hash \ newscn run-strip-test.sh run-strip-test2.sh \ run-strip-test3.sh run-strip-test4.sh run-strip-test5.sh \ - run-strip-test6.sh run-strip-test7.sh \ + run-strip-test6.sh run-strip-test7.sh run-strip-test8.sh \ run-unstrip-test.sh run-unstrip-test2.sh \ run-ecp-test.sh run-ecp-test2.sh \ run-elflint-test.sh run-elflint-self.sh run-ranlib-test.sh \ @@ -110,7 +110,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ testfile13.bz2 run-strip-test3.sh run-allfcts.sh \ run-line2addr.sh run-elflint-test.sh testfile14.bz2 \ run-strip-test4.sh run-strip-test5.sh run-strip-test6.sh \ - run-strip-test7.sh run-unstrip-test.sh run-unstrip-test2.sh \ + run-strip-test7.sh run-strip-test8.sh \ + run-unstrip-test.sh run-unstrip-test2.sh \ run-elflint-self.sh run-ranlib-test.sh run-ranlib-test2.sh \ run-ranlib-test3.sh run-ranlib-test4.sh \ run-addrscopes.sh run-strings-test.sh run-funcscopes.sh \ @@ -138,7 +139,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ testfile41.bz2 testfile42.bz2 testfile43.bz2 \ testfile44.S.bz2 testfile44.expect.bz2 run-disasm-x86.sh \ testfile45.S.bz2 testfile45.expect.bz2 run-disasm-x86-64.sh \ - testfile46.bz2 + testfile46.bz2 testfile47.bz2 testfile48.bz2 testfile48.debug.bz2 installed_TESTS_ENVIRONMENT = libdir=$(DESTDIR)$(libdir) \ bindir=$(DESTDIR)$(bindir) \ diff --git a/tests/run-strip-test.sh b/tests/run-strip-test.sh index 480101ebd..e056f8904 100755 --- a/tests/run-strip-test.sh +++ b/tests/run-strip-test.sh @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 1999, 2000, 2002, 2003, 2005, 2007 Red Hat, Inc. +# Copyright (C) 1999, 2000, 2002, 2003, 2005, 2007, 2008 Red Hat, Inc. # This file is part of Red Hat elfutils. # Written by Ulrich Drepper , 1999. # @@ -30,7 +30,8 @@ original=${original:-testfile11} stripped=${stripped:-testfile7} debugout=${debugfile:+-f testfile.debug.temp -F $debugfile} -testfiles $original $stripped $debugfile +testfiles $original +test x$stripped = xtestfile.temp || testfiles $stripped $debugfile tempfiles testfile.temp testfile.debug.temp testfile.unstrip @@ -56,4 +57,8 @@ testrun ../src/unstrip -o testfile.unstrip testfile.temp testfile.debug.temp testrun ../src/elfcmp --hash-inexact $original testfile.unstrip } +tempfiles testfile.sections +testrun ../src/readelf -S testfile.temp > testfile.sections || status=$? +fgrep ' .debug_' testfile.sections && status=1 + exit $status diff --git a/tests/run-strip-test8.sh b/tests/run-strip-test8.sh new file mode 100755 index 000000000..fb9fa0878 --- /dev/null +++ b/tests/run-strip-test8.sh @@ -0,0 +1,5 @@ +original=testfile47 +stripped=testfile48 +debugfile=testfile48.debug + +. $srcdir/run-strip-test.sh diff --git a/tests/testfile16.bz2 b/tests/testfile16.bz2 index 909e2253baec7e97c807d27bc97e1af21c91dc55..4d7160c0c5d2d6b54862fcd95baa09d0ccecf731 100644 GIT binary patch literal 8413 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

+!!ZkIerpK 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 literal 8424 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 akCC};A-Y-!4?-b-_`8xR!i0w4k-2Du=%G~r literal 23520 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%0A+ZfNu! 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 G+(tmMS}K+R diff --git a/tests/testfile47.bz2 b/tests/testfile47.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..334bd6c436f759b24be394463dce3552966cbfe9 GIT binary patch literal 793 zc-jFO1LpifT4*^jL0KkKSyAEJ;s66SfB*mg|L$x5{n-EQT1Nlx-(`UWBmxltfDj0f z1OPw)AW6Uiohnc>Of*87O*2zZNNB`qrqLQP15GplGH7T6KmY*HGeT$@RPZT{3V4VO z003xufChj700006fB~Vv0000q00001pwIvS05Sm301_lZ1Yt&oLq?BC2AX04rh$_{ zX`pBUkN^RprKpm>6Hh1Ok*9KuJNN>Y^E&kA&|Y@ik#u1zWG_1cjX<0xteh-%GiF`S ze!H`f#jyn%5e4nV^egyrBGudsL1Usn$JI$tXz?{pY>AZ_WQfGKp(LD%cd7(HO{00= z_xUw^7`CxmY8vDjVp}6#0U9j|nUJh`O#M&Z7^$m*<$ot+=;+7Q#-5hFF0BsUwPpKP zm1WC^F(5qKu?o6_21{kR1Sc61ULZn!r9)XNq_g&aS!JT*NE9$lwvucRbI5`%%0-rv zftDf-4m7Zw(3fGPmcv+&q{Og{{|vi~H5w2Q;W8zTk%9r%mn;89>D4+FkgEotknGk# z4IAmm48}T1DwuL=pv>qrugaPjifE0~OC6N9GZ)zcG+z=5WTh4)L05W6>oief)iZ8P zwORtzU{ID03<6c!u2G=;lBxNuaZG=22>N}B<$MPa z@ng`lC>>B;v`SU4V1+@ILNe1?h;5`P>8B~I7r@R4z{C!Rl7Jux4I&jb6bEQMs|2Im z)Kf76l*|*r#dUr%Qo0890OEAEg6fihIs4owS`)zZFE8&d%`pn8lAH83>-YHXv_6KDV?CMEy?1ZjW)FeFka zX|*&1A&>*q3`0SusKgCDKn6_;IqS~OdM`4A6OF7C5D18)tpm@p7)cTN^9tH1(1)_^ zI~13}k}y+8FcC~}W+`LK+_P7lPoMeWeouJtu$7|5s-z8Y{@X59zl>Rsl0}K}A?VF$ZFbvWy71EzdHt565UYVb4LPml9Y~ z>iIfl0dK@_N5Bk3=P(ky+V08+^_J(^Boh&^UgbmNliZXFBZtR0>D`JQT4PU12siK& zygi0tx*>T4*^jL0KkKSphYZ3jhNPfB*mg|L$w^{h0sl9zy@`-(`RVAVLs8gb)A_ z1OPw;APB$$eF;F?VWLAwn<<)%nKZ&+nld!dG7U0h02wqi13=NEXh3NKYLC&SHYwpSGy~K)003wj8X6j80B8UMKr}P}0LTCVB0?ZEBs4S{4GlEWhz&F} z&}arg00w{n(ZZY(IR0)oclUz4t6>}th8c*k!-7fHD8N9Ww@I{3Z!&WfH8g6%U6W_O zJ`=M_49ptHg^u~sY4i5rf>|=nNYBQC)e&^j%WDE_IASNeLjw6W zrOI-;k3R57!m8%cpu+m95EV?6#X!iU`Yl80NZvBz76y_;G=|#*+7dK~f-IDaZ3+fm zh&3|htmcHfO$ltXCF!({uBJS-n0Q)1BV5P?or44esrF!c-nn?{wuNt+pFx940FHAE zJd$OT8i*qDl@2z^wxqK zX%%1ONoHQ;#oXgY{gj!8cIS$vxEs4!u{;5rF^CbJgIo;OIe3>OKfnluYn+xS4xbu> zL)Zy*N4w7bj0QrCs{o9zoPqjviCgmXOE`|oU`-;75K9`2pv;NIu*>Ko{8ex#1P5_( z7BPe(Q4(9Ufcl@@oUmWPQ(_PrT$2_P9c+sP@xeiQ+QAfObzts-c|yIRDZ*kWnZ0Zi oVl%L=7Y}Co3o)H3BOKed;!Uy3HatzunqTpEBvXY6025g-u*-Q(xBvhE literal 0 Hc-jL100001 -- 2.47.2