From 823cb06774ad6a2aee0afcf6f011c3a134f25747 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 29 Aug 2017 11:28:10 -0700 Subject: [PATCH] x86: Simplify bad return in get_synthetic_symtab * elf32-i386.c (elf_i386_get_synthetic_symtab): Simplify bad return. * elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Likewise. --- bfd/ChangeLog | 6 ++++++ bfd/elf32-i386.c | 18 +++++++----------- bfd/elf64-x86-64.c | 18 +++++++----------- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 21b01b7..71b96dd 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,11 @@ 2017-08-29 H.J. Lu + * elf32-i386.c (elf_i386_get_synthetic_symtab): Simplify bad + return. + * elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Likewise. + +2017-08-29 H.J. Lu + * elf32-i386.c (elf_i386_get_synthetic_symtab): Check valid PLT sections before checking dynamic relocations and free invalid PLT section contents. diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 31ef02a..2826272 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -6504,14 +6504,7 @@ elf_i386_get_synthetic_symtab (bfd *abfd, s = *ret = (asymbol *) bfd_zmalloc (size); if (s == NULL) - { -bad_return: - for (j = 0; plts[j].name != NULL; j++) - if (plts[j].contents != NULL) - free (plts[j].contents); - free (dynrelbuf); - return -1; - } + goto bad_return; if (got_addr) { @@ -6639,9 +6632,12 @@ bad_return: /* PLT entries with R_386_TLS_DESC relocations are skipped. */ if (n == 0) - goto bad_return; - - count = n; + { +bad_return: + count = -1; + } + else + count = n; for (j = 0; plts[j].name != NULL; j++) if (plts[j].contents != NULL) diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index ba7c595..847a182 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -6896,14 +6896,7 @@ elf_x86_64_get_synthetic_symtab (bfd *abfd, s = *ret = (asymbol *) bfd_zmalloc (size); if (s == NULL) - { -bad_return: - for (j = 0; plts[j].name != NULL; j++) - if (plts[j].contents != NULL) - free (plts[j].contents); - free (dynrelbuf); - return -1; - } + goto bad_return; /* Check for each PLT section. */ names = (char *) (s + count); @@ -7014,9 +7007,12 @@ bad_return: /* PLT entries with R_X86_64_TLSDESC relocations are skipped. */ if (n == 0) - goto bad_return; - - count = n; + { +bad_return: + count = -1; + } + else + count = n; for (j = 0; plts[j].name != NULL; j++) if (plts[j].contents != NULL) -- 2.7.4