From: Timm Bäder Date: Fri, 8 Jan 2021 08:04:48 +0000 (+0100) Subject: strip: Pull update_section_size() into file scope X-Git-Tag: elfutils-0.183~19 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=541aa7d060ea52eddfd851234e1d4b412fcbc8c7;p=thirdparty%2Felfutils.git strip: Pull update_section_size() into file scope Get rid of a nested function this way. Signed-off-by: Timm Bäder --- diff --git a/src/ChangeLog b/src/ChangeLog index 972cfb23c..d1d9a8bfe 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2021-01-08 Timm Bäder + + * strip.c (handle_elf): Move inlined update_section_size function + to... + (update_section_size): ...here. New static function that takes as + extra arguments the Elf_Scn, debug_elf, section cnt and fname. + 2021-01-08 Timm Bäder * strip.c (remove_debug_relocations): Rewrite inlined relocate diff --git a/src/strip.c b/src/strip.c index 71913fac9..e608dc5ef 100644 --- a/src/strip.c +++ b/src/strip.c @@ -939,6 +939,31 @@ handle_debug_relocs (Elf *elf, Ebl *ebl, Elf *new_elf, return 0; } +/* 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. */ +static inline void +update_section_size (Elf_Scn *scn, + const Elf_Data *newdata, + Elf *debugelf, + size_t cnt, + const char *fname) +{ + 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); + if (debugdata == NULL) + INTERNAL_ERROR (fname); + debugdata->d_size = newdata->d_size; + } +} + /* Maximum size of array allocated on stack. */ #define MAX_STACK_ALLOC (400 * 1024) @@ -2150,26 +2175,6 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, /* 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) - { - 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); - if (debugdata == NULL) - INTERNAL_ERROR (fname); - 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 @@ -2299,7 +2304,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, * sizeof (Elf32_Word)); elf_assert (n_size <= hashd->d_size); hashd->d_size = n_size; - update_section_size (hashd); + update_section_size (scn, hashd, debugelf, cnt, fname); /* Clear the arrays. */ memset (bucket, '\0', @@ -2361,7 +2366,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, * sizeof (Elf64_Xword)); elf_assert (n_size <= hashd->d_size); hashd->d_size = n_size; - update_section_size (hashd); + update_section_size (scn, hashd, debugelf, cnt, fname); /* Clear the arrays. */ memset (bucket, '\0', @@ -2435,7 +2440,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, / gelf_fsize (elf, symd->d_type, 1, EV_CURRENT), EV_CURRENT); - update_section_size (verd); + update_section_size (scn, verd, debugelf, cnt, fname); break; case SHT_GROUP: