diff options
author | Timm Bäder <tbaeder@redhat.com> | 2021-01-08 09:04:48 +0100 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2021-01-28 13:55:39 +0100 |
commit | 541aa7d060ea52eddfd851234e1d4b412fcbc8c7 (patch) | |
tree | fdf4ca319acb12af12a163d61b43323d9808136f /src/strip.c | |
parent | d68e8151ae55c9bbcad17e84ba35ebc18dc30529 (diff) | |
download | elfutils-541aa7d060ea52eddfd851234e1d4b412fcbc8c7.tar.gz |
strip: Pull update_section_size() into file scope
Get rid of a nested function this way.
Signed-off-by: Timm Bäder <tbaeder@redhat.com>
Diffstat (limited to 'src/strip.c')
-rw-r--r-- | src/strip.c | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/src/strip.c b/src/strip.c index 71913fac..e608dc5e 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: |