You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
binutils/SOURCES/binutils-strip-unknown-relo...

108 lines
4.0 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

diff -rup binutils.orig/bfd/elf32-i386.c binutils-2.30/bfd/elf32-i386.c
--- binutils.orig/bfd/elf32-i386.c 2018-02-27 17:25:53.961140597 +0000
+++ binutils-2.30/bfd/elf32-i386.c 2018-02-27 17:27:14.115133477 +0000
@@ -383,7 +383,7 @@ elf_i386_rtype_to_howto (bfd *abfd, unsi
/* xgettext:c-format */
_bfd_error_handler (_("%B: invalid relocation type %d"),
abfd, (int) r_type);
- indx = R_386_NONE;
+ return NULL;
}
/* PR 17512: file: 0f67f69d. */
if (elf_howto_table [indx].type != r_type)
diff -rup binutils.orig/bfd/elf64-ppc.c binutils-2.30/bfd/elf64-ppc.c
--- binutils.orig/bfd/elf64-ppc.c 2018-02-27 17:25:53.969140496 +0000
+++ binutils-2.30/bfd/elf64-ppc.c 2018-02-27 17:27:56.213604518 +0000
@@ -2516,9 +2516,10 @@ ppc64_elf_info_to_howto (bfd *abfd, arel
/* xgettext:c-format */
_bfd_error_handler (_("%B: invalid relocation type %d"),
abfd, (int) type);
- type = R_PPC64_NONE;
+ cache_ptr->howto = NULL;
}
- cache_ptr->howto = ppc64_elf_howto_table[type];
+ else
+ cache_ptr->howto = ppc64_elf_howto_table[type];
}
/* Handle the R_PPC64_ADDR16_HA and similar relocs. */
diff -rup binutils.orig/bfd/elf64-s390.c binutils-2.30/bfd/elf64-s390.c
--- binutils.orig/bfd/elf64-s390.c 2018-02-27 17:25:53.968140509 +0000
+++ binutils-2.30/bfd/elf64-s390.c 2018-02-27 17:28:24.632247443 +0000
@@ -372,9 +372,10 @@ elf_s390_info_to_howto (bfd *abfd ATTRIB
/* xgettext:c-format */
_bfd_error_handler (_("%B: invalid relocation type %d"),
abfd, (int) r_type);
- r_type = R_390_NONE;
+ cache_ptr->howto = NULL;
}
- cache_ptr->howto = &elf_howto_table[r_type];
+ else
+ cache_ptr->howto = &elf_howto_table[r_type];
}
}
diff -rup binutils.orig/bfd/elf64-x86-64.c binutils-2.30/bfd/elf64-x86-64.c
--- binutils.orig/bfd/elf64-x86-64.c 2018-02-27 17:25:53.964140559 +0000
+++ binutils-2.30/bfd/elf64-x86-64.c 2018-02-27 17:29:12.554645307 +0000
@@ -284,7 +284,7 @@ elf_x86_64_rtype_to_howto (bfd *abfd, un
/* xgettext:c-format */
_bfd_error_handler (_("%B: invalid relocation type %d"),
abfd, (int) r_type);
- r_type = R_X86_64_NONE;
+ return NULL;
}
i = r_type;
}
@@ -347,8 +347,6 @@ elf_x86_64_info_to_howto (bfd *abfd ATTR
&& r_type != (unsigned int) R_X86_64_GNU_VTENTRY)
r_type &= ~R_X86_64_converted_reloc_bit;
cache_ptr->howto = elf_x86_64_rtype_to_howto (abfd, r_type);
-
- BFD_ASSERT (r_type == cache_ptr->howto->type || cache_ptr->howto->type == R_X86_64_NONE);
}
/* Support for core dump NOTE sections. */
diff -rup binutils.orig/bfd/elfcode.h binutils-2.30/bfd/elfcode.h
--- binutils.orig/bfd/elfcode.h 2018-02-27 17:25:53.964140559 +0000
+++ binutils-2.30/bfd/elfcode.h 2018-02-27 17:26:57.234345581 +0000
@@ -1474,6 +1474,12 @@ elf_slurp_reloc_table_from_section (bfd
(*ebd->elf_info_to_howto) (abfd, relent, &rela);
else
(*ebd->elf_info_to_howto_rel) (abfd, relent, &rela);
+
+ if (relent->howto == NULL)
+ {
+ bfd_set_error (bfd_error_bad_value);
+ goto error_return;
+ }
}
if (allocated != NULL)
diff -rup binutils.orig/binutils/objcopy.c binutils-2.30/binutils/objcopy.c
--- binutils.orig/binutils/objcopy.c 2018-02-27 17:25:53.185150347 +0000
+++ binutils-2.30/binutils/objcopy.c 2018-02-27 17:30:05.806976202 +0000
@@ -3022,10 +3022,19 @@ copy_object (bfd *ibfd, bfd *obfd, const
haven't been set yet. mark_symbols_used_in_relocations will
ignore input sections which have no corresponding output
section. */
+ bfd_set_error (bfd_error_no_error);
if (strip_symbols != STRIP_ALL)
- bfd_map_over_sections (ibfd,
- mark_symbols_used_in_relocations,
- isympp);
+ {
+ bfd_map_over_sections (ibfd,
+ mark_symbols_used_in_relocations,
+ isympp);
+ if (bfd_get_error () != bfd_error_no_error)
+ {
+ status = 1;
+ return FALSE;
+ }
+ }
+
osympp = (asymbol **) xmalloc ((symcount + add_symbols + 1) * sizeof (asymbol *));
symcount = filter_symbols (ibfd, obfd, osympp, isympp, symcount);
}