mirror of
https://git.yoctoproject.org/poky
synced 2026-04-05 08:02:25 +02:00
binutils: Upgrade to 2.29
(From OE-Core rev: 3bf990eb275f63190a2cf7253527d6d49fd93f1a) Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -24,7 +24,7 @@ PREFERRED_PROVIDER_virtual/gettext ??= "gettext"
|
||||
|
||||
GCCVERSION ?= "7.%"
|
||||
SDKGCCVERSION ?= "${GCCVERSION}"
|
||||
BINUVERSION ?= "2.28%"
|
||||
BINUVERSION ?= "2.29%"
|
||||
GDBVERSION ?= "8.0%"
|
||||
GLIBCVERSION ?= "2.26%"
|
||||
LINUXLIBCVERSION ?= "4.10%"
|
||||
|
||||
@@ -18,29 +18,22 @@ BINUPV = "${@binutils_branch_version(d)}"
|
||||
|
||||
UPSTREAM_CHECK_GITTAGREGEX = "binutils-(?P<pver>\d+_(\d_?)*)"
|
||||
|
||||
SRCREV = "7ea1464297eadebe62aae92ad9bebb33f92c2454"
|
||||
SRCREV = "dd241688aee3712803a917315df089f4c714b5ef"
|
||||
SRC_URI = "\
|
||||
git://sourceware.org/git/binutils-gdb.git;branch=binutils-${BINUPV}-branch;protocol=git \
|
||||
file://0003-configure-widen-the-regexp-for-SH-architectures.patch \
|
||||
file://0004-Point-scripts-location-to-libdir.patch \
|
||||
file://0005-Only-generate-an-RPATH-entry-if-LD_RUN_PATH-is-not-e.patch \
|
||||
file://0007-Use-libtool-2.4.patch \
|
||||
file://0008-Add-the-armv5e-architecture-to-binutils.patch \
|
||||
file://0009-don-t-let-the-distro-compiler-point-to-the-wrong-ins.patch \
|
||||
file://0010-warn-for-uses-of-system-directories-when-cross-linki.patch \
|
||||
file://0011-Fix-rpath-in-libtool-when-sysroot-is-enabled.patch \
|
||||
file://0012-Change-default-emulation-for-mips64-linux.patch \
|
||||
file://0013-Add-support-for-Netlogic-XLP.patch \
|
||||
file://0014-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch \
|
||||
file://0006-Use-libtool-2.4.patch \
|
||||
file://0007-Add-the-armv5e-architecture-to-binutils.patch \
|
||||
file://0008-don-t-let-the-distro-compiler-point-to-the-wrong-ins.patch \
|
||||
file://0009-warn-for-uses-of-system-directories-when-cross-linki.patch \
|
||||
file://0010-Fix-rpath-in-libtool-when-sysroot-is-enabled.patch \
|
||||
file://0011-Change-default-emulation-for-mips64-linux.patch \
|
||||
file://0012-Add-support-for-Netlogic-XLP.patch \
|
||||
file://0013-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch \
|
||||
file://0014-Detect-64-bit-MIPS-targets.patch \
|
||||
file://0015-sync-with-OE-libtool-changes.patch \
|
||||
file://0016-Detect-64-bit-MIPS-targets.patch \
|
||||
file://CVE-2017-6965.patch \
|
||||
file://CVE-2017-6966.patch \
|
||||
file://0017-bfd-Improve-lookup-of-file-line-information-for-erro.patch \
|
||||
file://0018-PR-21409-segfault-in-_bfd_dwarf2_find_nearest_line.patch \
|
||||
file://CVE-2017-6969.patch \
|
||||
file://CVE-2017-6969_2.patch \
|
||||
file://CVE-2017-7209.patch \
|
||||
file://CVE-2017-7210.patch \
|
||||
"
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 689d011688b5ff9481d4367bef3dea7a7b2867fb Mon Sep 17 00:00:00 2001
|
||||
From 58ac9f95a3d83c29efaf7a8906fb6aefea8c8e79 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Mon, 2 Mar 2015 01:58:54 +0000
|
||||
Subject: [PATCH 01/15] binutils-crosssdk: Generate relocatable SDKs
|
||||
@@ -43,7 +43,7 @@ index b6940d376d..a42c4d7a4b 100755
|
||||
LD_FLAG=
|
||||
DATA_ALIGNMENT=${DATA_ALIGNMENT_}
|
||||
diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc
|
||||
index e65f9a3ccf..d99d2c1d2a 100644
|
||||
index d9138bc059..e48faeca43 100644
|
||||
--- a/ld/scripttempl/elf.sc
|
||||
+++ b/ld/scripttempl/elf.sc
|
||||
@@ -138,8 +138,8 @@ if test -z "$DATA_SEGMENT_ALIGN"; then
|
||||
@@ -58,5 +58,5 @@ index e65f9a3ccf..d99d2c1d2a 100644
|
||||
if test -z "$PLT"; then
|
||||
IPLT=".iplt ${RELOCATING-0} : { *(.iplt) }"
|
||||
--
|
||||
2.12.0
|
||||
2.14.0
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 7c7de107b4b0a507d2aeca3e3a86d01cb4b51360 Mon Sep 17 00:00:00 2001
|
||||
From 8f929c616208351d0971d7dfd7574d48d3144603 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Mon, 6 Mar 2017 23:37:05 -0800
|
||||
Subject: [PATCH 02/15] binutils-cross: Do not generate linker script
|
||||
@@ -57,5 +57,5 @@ index a42c4d7a4b..d727b4d07e 100755
|
||||
libs=${NATIVE_LIB_DIRS}
|
||||
if [ "x${NATIVE}" = "xyes" ] ; then
|
||||
--
|
||||
2.12.0
|
||||
2.14.0
|
||||
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
From e5a806aae02a10290c71deb72f6294c98068368d Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Mon, 2 Mar 2015 01:07:33 +0000
|
||||
Subject: [PATCH 03/15] configure: widen the regexp for SH architectures
|
||||
|
||||
gprof needs to know about uclibc
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
configure | 2 +-
|
||||
gprof/configure | 5 +++++
|
||||
2 files changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index be9dd89d9b..d8af155ab5 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -3844,7 +3844,7 @@ case "${target}" in
|
||||
or1k*-*-*)
|
||||
noconfigdirs="$noconfigdirs gdb"
|
||||
;;
|
||||
- sh-*-*)
|
||||
+ sh*-*-* | sh64-*-*)
|
||||
case "${target}" in
|
||||
sh*-*-elf)
|
||||
;;
|
||||
diff --git a/gprof/configure b/gprof/configure
|
||||
index e71fe8b9e4..679e0dce77 100755
|
||||
--- a/gprof/configure
|
||||
+++ b/gprof/configure
|
||||
@@ -5874,6 +5874,11 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||
lt_cv_deplibs_check_method=pass_all
|
||||
;;
|
||||
|
||||
+linux-uclibc*)
|
||||
+ lt_cv_deplibs_check_method=pass_all
|
||||
+ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
|
||||
+ ;;
|
||||
+
|
||||
netbsd*)
|
||||
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
|
||||
lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
|
||||
--
|
||||
2.14.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From e34650c50574a8a39d694567ed607a63006b6f99 Mon Sep 17 00:00:00 2001
|
||||
From 3634ec3547bc0f8a5d1b8ad15365e2f836cda642 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Mon, 2 Mar 2015 01:09:58 +0000
|
||||
Subject: [PATCH 04/15] Point scripts location to libdir
|
||||
@@ -12,7 +12,7 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/ld/Makefile.am b/ld/Makefile.am
|
||||
index 15beaa7021..bbf9c671d8 100644
|
||||
index 625347ff62..d5334d2681 100644
|
||||
--- a/ld/Makefile.am
|
||||
+++ b/ld/Makefile.am
|
||||
@@ -57,7 +57,7 @@ endif
|
||||
@@ -25,10 +25,10 @@ index 15beaa7021..bbf9c671d8 100644
|
||||
EMUL = @EMUL@
|
||||
EMULATION_OFILES = @EMULATION_OFILES@
|
||||
diff --git a/ld/Makefile.in b/ld/Makefile.in
|
||||
index 042b690ed6..37e7b25e9a 100644
|
||||
index ba251777b0..a2cf2282b5 100644
|
||||
--- a/ld/Makefile.in
|
||||
+++ b/ld/Makefile.in
|
||||
@@ -452,7 +452,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS)
|
||||
@@ -446,7 +446,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS)
|
||||
# We put the scripts in the directory $(scriptdir)/ldscripts.
|
||||
# We can't put the scripts in $(datadir) because the SEARCH_DIR
|
||||
# directives need to be different for native and cross linkers.
|
||||
@@ -38,5 +38,5 @@ index 042b690ed6..37e7b25e9a 100644
|
||||
BFDDIR = $(BASEDIR)/bfd
|
||||
INCDIR = $(BASEDIR)/include
|
||||
--
|
||||
2.12.0
|
||||
2.14.0
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 42292f5533bca904f230a8e03ceee1f84ef0c4ec Mon Sep 17 00:00:00 2001
|
||||
From 9d37c8f68c07da63186cb993f1221f6c11eca422 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Mon, 2 Mar 2015 01:27:17 +0000
|
||||
Subject: [PATCH 05/15] Only generate an RPATH entry if LD_RUN_PATH is not
|
||||
@@ -15,19 +15,19 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
|
||||
index 84adaef6df..ab8c74257e 100644
|
||||
index 9ac1840316..9dc4c149bc 100644
|
||||
--- a/ld/emultempl/elf32.em
|
||||
+++ b/ld/emultempl/elf32.em
|
||||
@@ -1411,6 +1411,8 @@ fragment <<EOF
|
||||
@@ -1463,6 +1463,8 @@ fragment <<EOF
|
||||
&& command_line.rpath == NULL)
|
||||
{
|
||||
lib_path = (const char *) getenv ("LD_RUN_PATH");
|
||||
+ if ((lib_path) && (strlen (lib_path) == 0))
|
||||
+ lib_path = NULL;
|
||||
if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
|
||||
force))
|
||||
path = (const char *) getenv ("LD_RUN_PATH");
|
||||
+ if ((path) && (strlen (path) == 0))
|
||||
+ path = NULL;
|
||||
if (path
|
||||
&& gld${EMULATION_NAME}_search_needed (path, &n, force))
|
||||
break;
|
||||
@@ -1692,6 +1694,8 @@ gld${EMULATION_NAME}_before_allocation (void)
|
||||
@@ -1740,6 +1742,8 @@ gld${EMULATION_NAME}_before_allocation (void)
|
||||
rpath = command_line.rpath;
|
||||
if (rpath == NULL)
|
||||
rpath = (const char *) getenv ("LD_RUN_PATH");
|
||||
@@ -37,5 +37,5 @@ index 84adaef6df..ab8c74257e 100644
|
||||
for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
|
||||
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
|
||||
--
|
||||
2.12.0
|
||||
2.14.0
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
From 9c313e8a15a7e7c5c0f2906e3218ed211563ac2a Mon Sep 17 00:00:00 2001
|
||||
From 2b87aad1741bc481dd0982f100ad5ea7f937bb61 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Mon, 2 Mar 2015 01:37:10 +0000
|
||||
Subject: [PATCH 08/15] Add the armv5e architecture to binutils
|
||||
Subject: [PATCH 07/15] Add the armv5e architecture to binutils
|
||||
|
||||
Binutils has a comment that indicates it is supposed to match gcc for
|
||||
all of the support "-march=" settings, but it was lacking the armv5e setting.
|
||||
@@ -19,10 +19,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
|
||||
index 60bda51070..eb6d0afd6e 100644
|
||||
index a885efe4fc..735eaa7447 100644
|
||||
--- a/gas/config/tc-arm.c
|
||||
+++ b/gas/config/tc-arm.c
|
||||
@@ -25633,6 +25633,7 @@ static const struct arm_arch_option_table arm_archs[] =
|
||||
@@ -25990,6 +25990,7 @@ static const struct arm_arch_option_table arm_archs[] =
|
||||
ARM_ARCH_OPT ("armv4t", ARM_ARCH_V4T, FPU_ARCH_FPA),
|
||||
ARM_ARCH_OPT ("armv4txm", ARM_ARCH_V4TxM, FPU_ARCH_FPA),
|
||||
ARM_ARCH_OPT ("armv5", ARM_ARCH_V5, FPU_ARCH_VFP),
|
||||
@@ -31,5 +31,5 @@ index 60bda51070..eb6d0afd6e 100644
|
||||
ARM_ARCH_OPT ("armv5txm", ARM_ARCH_V5TxM, FPU_ARCH_VFP),
|
||||
ARM_ARCH_OPT ("armv5te", ARM_ARCH_V5TE, FPU_ARCH_VFP),
|
||||
--
|
||||
2.12.0
|
||||
2.14.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From 2be9b44a4a308e3ea42a027c4c3211170f10c9c0 Mon Sep 17 00:00:00 2001
|
||||
From 331443a87a31ec504e5652fc099d9129a9a4deb8 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Mon, 2 Mar 2015 01:39:01 +0000
|
||||
Subject: [PATCH 09/15] don't let the distro compiler point to the wrong
|
||||
Subject: [PATCH 08/15] don't let the distro compiler point to the wrong
|
||||
installation location
|
||||
|
||||
Thanks to RP for helping find the source code causing the issue.
|
||||
@@ -17,10 +17,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
|
||||
index 0ff9e45e45..42c32642b2 100644
|
||||
index 25cfa29ad5..ce67a710e3 100644
|
||||
--- a/libiberty/Makefile.in
|
||||
+++ b/libiberty/Makefile.in
|
||||
@@ -366,7 +366,8 @@ install-strip: install
|
||||
@@ -364,7 +364,8 @@ install-strip: install
|
||||
# multilib-specific flags, it's overridden by FLAGS_TO_PASS from the
|
||||
# default multilib, so we have to take CFLAGS into account as well,
|
||||
# since it will be passed the multilib flags.
|
||||
@@ -31,5 +31,5 @@ index 0ff9e45e45..42c32642b2 100644
|
||||
if test -n "${target_header_dir}"; then \
|
||||
${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR); \
|
||||
--
|
||||
2.12.0
|
||||
2.14.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From b1ab17abe4128684f19775448545176fb2a5e27e Mon Sep 17 00:00:00 2001
|
||||
From 0a4afdcf0700efd45963568e2d0049127cdf4434 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Fri, 15 Jan 2016 06:31:09 +0000
|
||||
Subject: [PATCH 10/15] warn for uses of system directories when cross linking
|
||||
Subject: [PATCH 09/15] warn for uses of system directories when cross linking
|
||||
|
||||
2008-07-02 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
@@ -45,12 +45,12 @@ Subject: [PATCH 10/15] warn for uses of system directories when cross linking
|
||||
ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of /lib,
|
||||
/usr/lib, /usr/local/lib or /usr/X11R6/lib.
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
|
||||
Signed-off-by: Scott Garman <scott.a.garman@intel.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
Upstream-Status: Pending
|
||||
|
||||
ld/config.in | 3 +++
|
||||
ld/configure | 16 ++++++++++++++++
|
||||
ld/configure.ac | 10 ++++++++++
|
||||
@@ -63,10 +63,10 @@ Upstream-Status: Pending
|
||||
9 files changed, 86 insertions(+)
|
||||
|
||||
diff --git a/ld/config.in b/ld/config.in
|
||||
index 2c6d698b6c..d3cb7e882d 100644
|
||||
index a846743da6..df3cd5fb60 100644
|
||||
--- a/ld/config.in
|
||||
+++ b/ld/config.in
|
||||
@@ -17,6 +17,9 @@
|
||||
@@ -27,6 +27,9 @@
|
||||
language is requested. */
|
||||
#undef ENABLE_NLS
|
||||
|
||||
@@ -77,10 +77,10 @@ index 2c6d698b6c..d3cb7e882d 100644
|
||||
#undef EXTRA_SHLIB_EXTENSION
|
||||
|
||||
diff --git a/ld/configure b/ld/configure
|
||||
index 4277b74bad..63109644b6 100755
|
||||
index 4e71511bd1..71c6ad1fd1 100755
|
||||
--- a/ld/configure
|
||||
+++ b/ld/configure
|
||||
@@ -793,6 +793,7 @@ with_lib_path
|
||||
@@ -789,6 +789,7 @@ with_lib_path
|
||||
enable_targets
|
||||
enable_64_bit_bfd
|
||||
with_sysroot
|
||||
@@ -88,7 +88,7 @@ index 4277b74bad..63109644b6 100755
|
||||
enable_gold
|
||||
enable_got
|
||||
enable_compressed_debug_sections
|
||||
@@ -1450,6 +1451,8 @@ Optional Features:
|
||||
@@ -1448,6 +1449,8 @@ Optional Features:
|
||||
--disable-largefile omit support for large files
|
||||
--enable-targets alternative target configurations
|
||||
--enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes)
|
||||
@@ -97,7 +97,7 @@ index 4277b74bad..63109644b6 100755
|
||||
--enable-gold[=ARG] build gold [ARG={default,yes,no}]
|
||||
--enable-got=<type> GOT handling scheme (target, single, negative,
|
||||
multigot)
|
||||
@@ -16314,6 +16317,19 @@ fi
|
||||
@@ -16315,6 +16318,19 @@ fi
|
||||
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ index 4277b74bad..63109644b6 100755
|
||||
if test "${enable_gold+set}" = set; then :
|
||||
enableval=$enable_gold; case "${enableval}" in
|
||||
diff --git a/ld/configure.ac b/ld/configure.ac
|
||||
index 36a9f5083a..47f1d33fa5 100644
|
||||
index 00080f85fd..3aa98e37fb 100644
|
||||
--- a/ld/configure.ac
|
||||
+++ b/ld/configure.ac
|
||||
@@ -95,6 +95,16 @@ AC_SUBST(use_sysroot)
|
||||
@@ -139,12 +139,12 @@ index 36a9f5083a..47f1d33fa5 100644
|
||||
dnl "install_as_default" is set to false if gold is the default linker.
|
||||
dnl "installed_linker" is the installed BFD linker name.
|
||||
diff --git a/ld/ld.h b/ld/ld.h
|
||||
index 104bb8e237..74c914bdd5 100644
|
||||
index c6fa1247f0..01c373498f 100644
|
||||
--- a/ld/ld.h
|
||||
+++ b/ld/ld.h
|
||||
@@ -172,6 +172,14 @@ typedef struct
|
||||
/* If set, display the target memory usage (per memory region). */
|
||||
bfd_boolean print_memory_usage;
|
||||
@@ -174,6 +174,14 @@ typedef struct
|
||||
in the linker script. */
|
||||
bfd_boolean force_group_allocation;
|
||||
|
||||
+ /* If TRUE (the default) warn for uses of system directories when
|
||||
+ cross linking. */
|
||||
@@ -158,10 +158,10 @@ index 104bb8e237..74c914bdd5 100644
|
||||
enum endian_enum endian;
|
||||
|
||||
diff --git a/ld/ld.texinfo b/ld/ld.texinfo
|
||||
index d393acdd94..ba995b1e3a 100644
|
||||
index ebe7e7b7bd..33aa2c62fa 100644
|
||||
--- a/ld/ld.texinfo
|
||||
+++ b/ld/ld.texinfo
|
||||
@@ -2403,6 +2403,18 @@ string identifying the original linked file does not change.
|
||||
@@ -2480,6 +2480,18 @@ string identifying the original linked file does not change.
|
||||
|
||||
Passing @code{none} for @var{style} disables the setting from any
|
||||
@code{--build-id} options earlier on the command line.
|
||||
@@ -181,11 +181,11 @@ index d393acdd94..ba995b1e3a 100644
|
||||
|
||||
@c man end
|
||||
diff --git a/ld/ldfile.c b/ld/ldfile.c
|
||||
index 0943bb2dfa..95874c75de 100644
|
||||
index 3b37a0a3e2..5c85b01849 100644
|
||||
--- a/ld/ldfile.c
|
||||
+++ b/ld/ldfile.c
|
||||
@@ -114,6 +114,23 @@ ldfile_add_library_path (const char *name, bfd_boolean cmdline)
|
||||
new_dirs->name = concat (ld_sysroot, name + 1, (const char *) NULL);
|
||||
@@ -116,6 +116,23 @@ ldfile_add_library_path (const char *name, bfd_boolean cmdline)
|
||||
new_dirs->name = concat (ld_sysroot, name + strlen ("$SYSROOT"), (const char *) NULL);
|
||||
else
|
||||
new_dirs->name = xstrdup (name);
|
||||
+
|
||||
@@ -209,23 +209,23 @@ index 0943bb2dfa..95874c75de 100644
|
||||
|
||||
/* Try to open a BFD for a lang_input_statement. */
|
||||
diff --git a/ld/ldlex.h b/ld/ldlex.h
|
||||
index 3ecac2bc86..34117f43a5 100644
|
||||
index 5aa7f6bc3e..cb655e0399 100644
|
||||
--- a/ld/ldlex.h
|
||||
+++ b/ld/ldlex.h
|
||||
@@ -146,6 +146,8 @@ enum option_values
|
||||
OPTION_PRINT_MEMORY_USAGE,
|
||||
@@ -147,6 +147,8 @@ enum option_values
|
||||
OPTION_REQUIRE_DEFINED_SYMBOL,
|
||||
OPTION_ORPHAN_HANDLING,
|
||||
OPTION_FORCE_GROUP_ALLOCATION,
|
||||
+ OPTION_NO_POISON_SYSTEM_DIRECTORIES,
|
||||
+ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES,
|
||||
};
|
||||
|
||||
/* The initial parser states. */
|
||||
diff --git a/ld/ldmain.c b/ld/ldmain.c
|
||||
index 1e48b1a2db..21f27bacf1 100644
|
||||
index 2b09f20413..89e2a3a805 100644
|
||||
--- a/ld/ldmain.c
|
||||
+++ b/ld/ldmain.c
|
||||
@@ -270,6 +270,8 @@ main (int argc, char **argv)
|
||||
@@ -261,6 +261,8 @@ main (int argc, char **argv)
|
||||
command_line.warn_mismatch = TRUE;
|
||||
command_line.warn_search_mismatch = TRUE;
|
||||
command_line.check_section_addresses = -1;
|
||||
@@ -235,10 +235,10 @@ index 1e48b1a2db..21f27bacf1 100644
|
||||
/* We initialize DEMANGLING based on the environment variable
|
||||
COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the
|
||||
diff --git a/ld/lexsup.c b/ld/lexsup.c
|
||||
index 0b7d4976ac..dedc07a143 100644
|
||||
index effa277b16..e4929607e9 100644
|
||||
--- a/ld/lexsup.c
|
||||
+++ b/ld/lexsup.c
|
||||
@@ -535,6 +535,14 @@ static const struct ld_option ld_options[] =
|
||||
@@ -538,6 +538,14 @@ static const struct ld_option ld_options[] =
|
||||
{ {"orphan-handling", required_argument, NULL, OPTION_ORPHAN_HANDLING},
|
||||
'\0', N_("=MODE"), N_("Control how orphan sections are handled."),
|
||||
TWO_DASHES },
|
||||
@@ -253,7 +253,7 @@ index 0b7d4976ac..dedc07a143 100644
|
||||
};
|
||||
|
||||
#define OPTION_COUNT ARRAY_SIZE (ld_options)
|
||||
@@ -1562,6 +1570,14 @@ parse_args (unsigned argc, char **argv)
|
||||
@@ -1568,6 +1576,14 @@ parse_args (unsigned argc, char **argv)
|
||||
einfo (_("%P%F: invalid argument to option"
|
||||
" \"--orphan-handling\"\n"));
|
||||
break;
|
||||
@@ -269,5 +269,5 @@ index 0b7d4976ac..dedc07a143 100644
|
||||
}
|
||||
|
||||
--
|
||||
2.12.0
|
||||
2.14.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From 4fe13a36997253a5c91bcb086aeb392ab2095f67 Mon Sep 17 00:00:00 2001
|
||||
From 88fac08f1c472c612f381cbb9408756f2f58b4ff Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Mon, 2 Mar 2015 01:42:38 +0000
|
||||
Subject: [PATCH 11/15] Fix rpath in libtool when sysroot is enabled
|
||||
Subject: [PATCH 10/15] Fix rpath in libtool when sysroot is enabled
|
||||
|
||||
Enabling sysroot support in libtool exposed a bug where the final
|
||||
library had an RPATH encoded into it which still pointed to the
|
||||
@@ -48,5 +48,5 @@ index 70e856e065..11ee684ccc 100644
|
||||
if test -z "$hardcode_libdirs"; then
|
||||
hardcode_libdirs="$libdir"
|
||||
--
|
||||
2.12.0
|
||||
2.14.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From f43f832e0009caea6a3d5bcaa8f0a64d943072ea Mon Sep 17 00:00:00 2001
|
||||
From 497660bdbeb6788786553a5d733105f7f898dc62 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Mon, 2 Mar 2015 01:44:14 +0000
|
||||
Subject: [PATCH 12/15] Change default emulation for mips64*-*-linux
|
||||
Subject: [PATCH 11/15] Change default emulation for mips64*-*-linux
|
||||
|
||||
we change the default emulations to be N64 instead of N32
|
||||
|
||||
@@ -14,10 +14,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
2 files changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/bfd/config.bfd b/bfd/config.bfd
|
||||
index 1b28016b91..63596c2ebc 100644
|
||||
index dc24aabad5..4511024f22 100644
|
||||
--- a/bfd/config.bfd
|
||||
+++ b/bfd/config.bfd
|
||||
@@ -1183,12 +1183,12 @@ case "${targ}" in
|
||||
@@ -1186,12 +1186,12 @@ case "${targ}" in
|
||||
targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_be_vec mips_ecoff_le_vec"
|
||||
;;
|
||||
mips64*el-*-linux*)
|
||||
@@ -35,10 +35,10 @@ index 1b28016b91..63596c2ebc 100644
|
||||
mips*el-*-linux*)
|
||||
targ_defvec=mips_elf32_trad_le_vec
|
||||
diff --git a/ld/configure.tgt b/ld/configure.tgt
|
||||
index b85c6bb35a..4e77383a19 100644
|
||||
index 47c719cd05..fe7b9238b2 100644
|
||||
--- a/ld/configure.tgt
|
||||
+++ b/ld/configure.tgt
|
||||
@@ -518,11 +518,11 @@ mips*el-*-vxworks*) targ_emul=elf32elmipvxworks
|
||||
@@ -530,11 +530,11 @@ mips*el-*-vxworks*) targ_emul=elf32elmipvxworks
|
||||
mips*-*-vxworks*) targ_emul=elf32ebmipvxworks
|
||||
targ_extra_emuls="elf32elmipvxworks" ;;
|
||||
mips*-*-windiss) targ_emul=elf32mipswindiss ;;
|
||||
@@ -55,5 +55,5 @@ index b85c6bb35a..4e77383a19 100644
|
||||
mips*el-*-linux-*) targ_emul=elf32ltsmip
|
||||
targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
|
||||
--
|
||||
2.12.0
|
||||
2.14.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From fc6fa6a6e6e9e6e5ad7080785af31b4ea68f60c4 Mon Sep 17 00:00:00 2001
|
||||
From 8c60a55d3678589d93739bd27fec216911d80968 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Sun, 14 Feb 2016 17:06:19 +0000
|
||||
Subject: [PATCH 13/15] Add support for Netlogic XLP
|
||||
Subject: [PATCH 12/15] Add support for Netlogic XLP
|
||||
|
||||
Patch From: Nebu Philips <nphilips@netlogicmicro.com>
|
||||
|
||||
@@ -11,12 +11,12 @@ Netlogic. Also, update vendor name to NLM wherever applicable.
|
||||
Use 0x00000080 for INSN_XLP, the value 0x00000040 has already been
|
||||
assigned to INSN_OCTEON3
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
Signed-off-by: Baoshan Pang <baoshan.pang@windriver.com>
|
||||
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
|
||||
---
|
||||
Upstream-Status: Pending
|
||||
|
||||
bfd/aoutx.h | 1 +
|
||||
bfd/archures.c | 1 +
|
||||
bfd/bfd-in2.h | 1 +
|
||||
@@ -27,17 +27,17 @@ Upstream-Status: Pending
|
||||
gas/config/tc-mips.c | 4 +++-
|
||||
gas/configure | 3 +++
|
||||
include/elf/mips.h | 1 +
|
||||
include/opcode/mips.h | 10 ++++++++--
|
||||
include/opcode/mips.h | 6 ++++++
|
||||
ld/configure.tgt | 2 ++
|
||||
opcodes/mips-dis.c | 12 +++++-------
|
||||
opcodes/mips-opc.c | 33 +++++++++++++++++++++------------
|
||||
14 files changed, 64 insertions(+), 24 deletions(-)
|
||||
opcodes/mips-opc.c | 31 ++++++++++++++++++++-----------
|
||||
14 files changed, 61 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/bfd/aoutx.h b/bfd/aoutx.h
|
||||
index d30e8b8fbc..913b499744 100644
|
||||
index 3d38fda14b..0aec49bbb3 100644
|
||||
--- a/bfd/aoutx.h
|
||||
+++ b/bfd/aoutx.h
|
||||
@@ -812,6 +812,7 @@ NAME (aout, machine_type) (enum bfd_architecture arch,
|
||||
@@ -814,6 +814,7 @@ NAME (aout, machine_type) (enum bfd_architecture arch,
|
||||
case bfd_mach_mipsisa64r6:
|
||||
case bfd_mach_mips_sb1:
|
||||
case bfd_mach_mips_xlr:
|
||||
@@ -46,34 +46,34 @@ index d30e8b8fbc..913b499744 100644
|
||||
arch_flags = M_MIPS2;
|
||||
break;
|
||||
diff --git a/bfd/archures.c b/bfd/archures.c
|
||||
index 6f35a5b2a7..d12cdf609a 100644
|
||||
index 433b95fa08..063b7943a1 100644
|
||||
--- a/bfd/archures.c
|
||||
+++ b/bfd/archures.c
|
||||
@@ -197,6 +197,7 @@ DESCRIPTION
|
||||
.#define bfd_mach_mips_octeon2 6502
|
||||
@@ -201,6 +201,7 @@ DESCRIPTION
|
||||
.#define bfd_mach_mips_octeon3 6503
|
||||
.#define bfd_mach_mips_xlr 887682 {* decimal 'XLR' *}
|
||||
.#define bfd_mach_mips_interaptiv_mr2 736550 {* decimal 'IA2' *}
|
||||
+.#define bfd_mach_mips_xlp 887680 {* decimal 'XLP' *}
|
||||
.#define bfd_mach_mipsisa32 32
|
||||
.#define bfd_mach_mipsisa32r2 33
|
||||
.#define bfd_mach_mipsisa32r3 34
|
||||
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
|
||||
index 6288c3bb4a..e9f9859a7b 100644
|
||||
index d126aed086..2b753b3a93 100644
|
||||
--- a/bfd/bfd-in2.h
|
||||
+++ b/bfd/bfd-in2.h
|
||||
@@ -2041,6 +2041,7 @@ enum bfd_architecture
|
||||
#define bfd_mach_mips_octeon2 6502
|
||||
@@ -2060,6 +2060,7 @@ enum bfd_architecture
|
||||
#define bfd_mach_mips_octeon3 6503
|
||||
#define bfd_mach_mips_xlr 887682 /* decimal 'XLR' */
|
||||
#define bfd_mach_mips_interaptiv_mr2 736550 /* decimal 'IA2' */
|
||||
+#define bfd_mach_mips_xlp 887680 /* decimal 'XLP' */
|
||||
#define bfd_mach_mipsisa32 32
|
||||
#define bfd_mach_mipsisa32r2 33
|
||||
#define bfd_mach_mipsisa32r3 34
|
||||
diff --git a/bfd/config.bfd b/bfd/config.bfd
|
||||
index 63596c2ebc..6e923fb0ed 100644
|
||||
index 4511024f22..f0f9072f10 100644
|
||||
--- a/bfd/config.bfd
|
||||
+++ b/bfd/config.bfd
|
||||
@@ -1166,6 +1166,11 @@ case "${targ}" in
|
||||
@@ -1169,6 +1169,11 @@ case "${targ}" in
|
||||
targ_defvec=mips_elf32_le_vec
|
||||
targ_selvecs="mips_elf32_be_vec mips_elf64_be_vec mips_elf64_le_vec"
|
||||
;;
|
||||
@@ -86,23 +86,23 @@ index 63596c2ebc..6e923fb0ed 100644
|
||||
targ_defvec=mips_elf32_be_vec
|
||||
targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec"
|
||||
diff --git a/bfd/cpu-mips.c b/bfd/cpu-mips.c
|
||||
index b9ecdd6e55..df1bffc25b 100644
|
||||
index 2493094bef..8375d1ae96 100644
|
||||
--- a/bfd/cpu-mips.c
|
||||
+++ b/bfd/cpu-mips.c
|
||||
@@ -104,7 +104,8 @@ enum
|
||||
I_mipsocteon2,
|
||||
@@ -105,7 +105,8 @@ enum
|
||||
I_mipsocteon3,
|
||||
I_xlr,
|
||||
I_interaptiv_mr2,
|
||||
- I_micromips
|
||||
+ I_micromips,
|
||||
+ I_xlp
|
||||
};
|
||||
|
||||
#define NN(index) (&arch_info_struct[(index) + 1])
|
||||
@@ -155,7 +156,8 @@ static const bfd_arch_info_type arch_info_struct[] =
|
||||
N (64, 64, bfd_mach_mips_octeon2,"mips:octeon2", FALSE, NN(I_mipsocteon2)),
|
||||
N (64, 64, bfd_mach_mips_octeon3, "mips:octeon3", FALSE, NN(I_mipsocteon3)),
|
||||
@@ -158,7 +159,8 @@ static const bfd_arch_info_type arch_info_struct[] =
|
||||
N (64, 64, bfd_mach_mips_xlr, "mips:xlr", FALSE, NN(I_xlr)),
|
||||
N (32, 32, bfd_mach_mips_interaptiv_mr2, "mips:interaptiv-mr2", FALSE,
|
||||
NN(I_interaptiv_mr2)),
|
||||
- N (64, 64, bfd_mach_mips_micromips,"mips:micromips",FALSE,0)
|
||||
+ N (64, 64, bfd_mach_mips_micromips,"mips:micromips",FALSE,NN(I_micromips)),
|
||||
+ N (64, 64, bfd_mach_mips_xlp, "mips:xlp", FALSE, 0)
|
||||
@@ -110,20 +110,20 @@ index b9ecdd6e55..df1bffc25b 100644
|
||||
|
||||
/* The default architecture is mips:3000, but with a machine number of
|
||||
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
|
||||
index 723853f821..7b464211c3 100644
|
||||
index fddf68c816..354c85d00b 100644
|
||||
--- a/bfd/elfxx-mips.c
|
||||
+++ b/bfd/elfxx-mips.c
|
||||
@@ -6787,6 +6787,9 @@ _bfd_elf_mips_mach (flagword flags)
|
||||
case E_MIPS_MACH_XLR:
|
||||
return bfd_mach_mips_xlr;
|
||||
@@ -6796,6 +6796,9 @@ _bfd_elf_mips_mach (flagword flags)
|
||||
case E_MIPS_MACH_IAMR2:
|
||||
return bfd_mach_mips_interaptiv_mr2;
|
||||
|
||||
+ case E_MIPS_MACH_XLP:
|
||||
+ case E_MIPS_MACH_XLP:
|
||||
+ return bfd_mach_mips_xlp;
|
||||
+
|
||||
default:
|
||||
switch (flags & EF_MIPS_ARCH)
|
||||
{
|
||||
@@ -12106,6 +12109,10 @@ mips_set_isa_flags (bfd *abfd)
|
||||
@@ -11956,6 +11959,10 @@ mips_set_isa_flags (bfd *abfd)
|
||||
val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
|
||||
break;
|
||||
|
||||
@@ -134,7 +134,7 @@ index 723853f821..7b464211c3 100644
|
||||
case bfd_mach_mipsisa32:
|
||||
val = E_MIPS_ARCH_32;
|
||||
break;
|
||||
@@ -14135,6 +14142,7 @@ static const struct mips_mach_extension mips_mach_extensions[] =
|
||||
@@ -13989,6 +13996,7 @@ static const struct mips_mach_extension mips_mach_extensions[] =
|
||||
{ bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
|
||||
{ bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
|
||||
{ bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64r2 },
|
||||
@@ -143,19 +143,19 @@ index 723853f821..7b464211c3 100644
|
||||
/* MIPS64 extensions. */
|
||||
{ bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
|
||||
diff --git a/binutils/readelf.c b/binutils/readelf.c
|
||||
index 8dca490226..b5f577f5a1 100644
|
||||
index 2b15f0f2cb..092744708e 100644
|
||||
--- a/binutils/readelf.c
|
||||
+++ b/binutils/readelf.c
|
||||
@@ -3261,6 +3261,7 @@ get_machine_flags (unsigned e_flags, unsigned e_machine)
|
||||
case E_MIPS_MACH_OCTEON2: strcat (buf, ", octeon2"); break;
|
||||
@@ -3335,6 +3335,7 @@ get_machine_flags (unsigned e_flags, unsigned e_machine)
|
||||
case E_MIPS_MACH_OCTEON3: strcat (buf, ", octeon3"); break;
|
||||
case E_MIPS_MACH_XLR: strcat (buf, ", xlr"); break;
|
||||
+ case E_MIPS_MACH_XLP: strcat (buf, ", xlp"); break;
|
||||
case E_MIPS_MACH_IAMR2: strcat (buf, ", interaptiv-mr2"); break;
|
||||
+ case E_MIPS_MACH_XLP: strcat (buf, ", xlp"); break;
|
||||
case 0:
|
||||
/* We simply ignore the field in this case to avoid confusion:
|
||||
MIPS ELF does not specify EF_MIPS_MACH, it is a GNU
|
||||
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
|
||||
index e24e84df54..baf84e419d 100644
|
||||
index 3804df2958..9576c986db 100644
|
||||
--- a/gas/config/tc-mips.c
|
||||
+++ b/gas/config/tc-mips.c
|
||||
@@ -552,6 +552,7 @@ static int mips_32bitmode = 0;
|
||||
@@ -174,7 +174,7 @@ index e24e84df54..baf84e419d 100644
|
||||
)
|
||||
|
||||
/* Whether the processor uses hardware interlocks to protect reads
|
||||
@@ -19409,7 +19411,7 @@ static const struct mips_cpu_info mips_cpu_info_table[] =
|
||||
@@ -19738,7 +19740,7 @@ static const struct mips_cpu_info mips_cpu_info_table[] =
|
||||
/* Broadcom XLP.
|
||||
XLP is mostly like XLR, with the prominent exception that it is
|
||||
MIPS64R2 rather than MIPS64. */
|
||||
@@ -184,7 +184,7 @@ index e24e84df54..baf84e419d 100644
|
||||
/* MIPS 64 Release 6 */
|
||||
{ "i6400", 0, ASE_MSA, ISA_MIPS64R6, CPU_MIPS64R6},
|
||||
diff --git a/gas/configure b/gas/configure
|
||||
index a36f1ae161..99f0a94e20 100755
|
||||
index 81dd4cbd97..95bdf3b19b 100755
|
||||
--- a/gas/configure
|
||||
+++ b/gas/configure
|
||||
@@ -12989,6 +12989,9 @@ _ACEOF
|
||||
@@ -198,7 +198,7 @@ index a36f1ae161..99f0a94e20 100755
|
||||
mips_cpu=r3900
|
||||
;;
|
||||
diff --git a/include/elf/mips.h b/include/elf/mips.h
|
||||
index 3e27b05122..81ea78a817 100644
|
||||
index a4bea43ff8..73d904e25f 100644
|
||||
--- a/include/elf/mips.h
|
||||
+++ b/include/elf/mips.h
|
||||
@@ -290,6 +290,7 @@ END_RELOC_NUMBERS (R_MIPS_maxext)
|
||||
@@ -210,31 +210,27 @@ index 3e27b05122..81ea78a817 100644
|
||||
#define E_MIPS_MACH_OCTEON3 0x008e0000
|
||||
#define E_MIPS_MACH_5400 0x00910000
|
||||
diff --git a/include/opcode/mips.h b/include/opcode/mips.h
|
||||
index 0d043d9520..450e9c2d67 100644
|
||||
index ceae9ec50a..276ee3c6c1 100644
|
||||
--- a/include/opcode/mips.h
|
||||
+++ b/include/opcode/mips.h
|
||||
@@ -1244,8 +1244,10 @@ static const unsigned int mips_isa_table[] = {
|
||||
#define INSN_LOONGSON_2F 0x80000000
|
||||
/* Loongson 3A. */
|
||||
#define INSN_LOONGSON_3A 0x00000400
|
||||
-/* RMI Xlr instruction */
|
||||
-#define INSN_XLR 0x00000020
|
||||
+/* Netlogic Xlr instruction */
|
||||
+#define INSN_XLR 0x00000020
|
||||
@@ -1259,6 +1259,8 @@ static const unsigned int mips_isa_table[] = {
|
||||
#define INSN_XLR 0x00000020
|
||||
/* Imagination interAptiv MR2. */
|
||||
#define INSN_INTERAPTIV_MR2 0x04000000
|
||||
+/* Netlogic XlP instruction */
|
||||
+#define INSN_XLP 0x00000080
|
||||
|
||||
/* DSP ASE */
|
||||
#define ASE_DSP 0x00000001
|
||||
@@ -1344,6 +1346,7 @@ static const unsigned int mips_isa_table[] = {
|
||||
#define CPU_OCTEON2 6502
|
||||
@@ -1365,6 +1367,7 @@ static const unsigned int mips_isa_table[] = {
|
||||
#define CPU_OCTEON3 6503
|
||||
#define CPU_XLR 887682 /* decimal 'XLR' */
|
||||
#define CPU_INTERAPTIV_MR2 736550 /* decimal 'IA2' */
|
||||
+#define CPU_XLP 887680 /* decimal 'XLP' */
|
||||
|
||||
/* Return true if the given CPU is included in INSN_* mask MASK. */
|
||||
|
||||
@@ -1421,6 +1424,9 @@ cpu_is_member (int cpu, unsigned int mask)
|
||||
@@ -1445,6 +1448,9 @@ cpu_is_member (int cpu, unsigned int mask)
|
||||
return ((mask & INSN_ISA_MASK) == INSN_ISA32R6)
|
||||
|| ((mask & INSN_ISA_MASK) == INSN_ISA64R6);
|
||||
|
||||
@@ -245,10 +241,10 @@ index 0d043d9520..450e9c2d67 100644
|
||||
return FALSE;
|
||||
}
|
||||
diff --git a/ld/configure.tgt b/ld/configure.tgt
|
||||
index 4e77383a19..8a81f7ac39 100644
|
||||
index fe7b9238b2..2adf108b17 100644
|
||||
--- a/ld/configure.tgt
|
||||
+++ b/ld/configure.tgt
|
||||
@@ -504,6 +504,8 @@ mips*el-sde-elf* | mips*el-mti-elf* | mips*el-img-elf*)
|
||||
@@ -516,6 +516,8 @@ mips*el-sde-elf* | mips*el-mti-elf* | mips*el-img-elf*)
|
||||
mips*-sde-elf* | mips*-mti-elf* | mips*-img-elf*)
|
||||
targ_emul=elf32btsmip
|
||||
targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip" ;;
|
||||
@@ -258,10 +254,10 @@ index 4e77383a19..8a81f7ac39 100644
|
||||
targ_extra_emuls="elf32lr5900"
|
||||
targ_extra_libpath=$targ_extra_emuls ;;
|
||||
diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c
|
||||
index bb9912e462..70ecc51717 100644
|
||||
index 45195007c1..4a80a05d19 100644
|
||||
--- a/opcodes/mips-dis.c
|
||||
+++ b/opcodes/mips-dis.c
|
||||
@@ -648,13 +648,11 @@ const struct mips_arch_choice mips_arch_choices[] =
|
||||
@@ -655,13 +655,11 @@ const struct mips_arch_choice mips_arch_choices[] =
|
||||
mips_cp0sel_names_xlr, ARRAY_SIZE (mips_cp0sel_names_xlr),
|
||||
mips_cp1_names_mips3264, mips_hwr_names_numeric },
|
||||
|
||||
@@ -281,20 +277,18 @@ index bb9912e462..70ecc51717 100644
|
||||
/* This entry, mips16, is here only for ISA/processor selection; do
|
||||
not print its name. */
|
||||
diff --git a/opcodes/mips-opc.c b/opcodes/mips-opc.c
|
||||
index 5cb8e7365f..f2074856a2 100644
|
||||
index 19fca408c9..d02069c528 100644
|
||||
--- a/opcodes/mips-opc.c
|
||||
+++ b/opcodes/mips-opc.c
|
||||
@@ -320,7 +320,8 @@ decode_mips_operand (const char *p)
|
||||
#define IOCTP (INSN_OCTEONP | INSN_OCTEON2 | INSN_OCTEON3)
|
||||
#define IOCT2 (INSN_OCTEON2 | INSN_OCTEON3)
|
||||
@@ -328,6 +328,7 @@ decode_mips_operand (const char *p)
|
||||
#define IOCT3 INSN_OCTEON3
|
||||
-#define XLR INSN_XLR
|
||||
+#define XLR INSN_XLR
|
||||
#define XLR INSN_XLR
|
||||
#define IAMR2 INSN_INTERAPTIV_MR2
|
||||
+#define XLP INSN_XLP
|
||||
#define IVIRT ASE_VIRT
|
||||
#define IVIRT64 ASE_VIRT64
|
||||
|
||||
@@ -958,6 +959,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
@@ -966,6 +967,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
{"clo", "U,s", 0x70000021, 0xfc0007ff, WR_1|RD_2, 0, I32|N55, 0, I37 },
|
||||
{"clz", "d,s", 0x00000050, 0xfc1f07ff, WR_1|RD_2, 0, I37, 0, 0 },
|
||||
{"clz", "U,s", 0x70000020, 0xfc0007ff, WR_1|RD_2, 0, I32|N55, 0, I37 },
|
||||
@@ -302,7 +296,7 @@ index 5cb8e7365f..f2074856a2 100644
|
||||
/* ctc0 is at the bottom of the table. */
|
||||
{"ctc1", "t,G", 0x44c00000, 0xffe007ff, RD_1|WR_CC|CM, 0, I1, 0, 0 },
|
||||
{"ctc1", "t,S", 0x44c00000, 0xffe007ff, RD_1|WR_CC|CM, 0, I1, 0, 0 },
|
||||
@@ -990,12 +992,13 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
@@ -998,12 +1000,13 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
{"daddiu", "t,r,j", 0x64000000, 0xfc000000, WR_1|RD_2, 0, I3, 0, 0 },
|
||||
{"daddu", "d,v,t", 0x0000002d, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I3, 0, 0 },
|
||||
{"daddu", "t,r,I", 0, (int) M_DADDU_I, INSN_MACRO, 0, I3, 0, 0 },
|
||||
@@ -317,7 +311,7 @@ index 5cb8e7365f..f2074856a2 100644
|
||||
/* dctr and dctw are used on the r5000. */
|
||||
{"dctr", "o(b)", 0xbc050000, 0xfc1f0000, RD_2, 0, I3, 0, 0 },
|
||||
{"dctw", "o(b)", 0xbc090000, 0xfc1f0000, RD_2, 0, I3, 0, 0 },
|
||||
@@ -1067,6 +1070,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
@@ -1075,6 +1078,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
{"dmfc0", "t,G,H", 0x40200000, 0xffe007f8, WR_1|RD_C0|LC, 0, I64, 0, 0 },
|
||||
{"dmfgc0", "t,G", 0x40600100, 0xffe007ff, WR_1|RD_C0|LC, 0, 0, IVIRT64, 0 },
|
||||
{"dmfgc0", "t,G,H", 0x40600100, 0xffe007f8, WR_1|RD_C0|LC, 0, 0, IVIRT64, 0 },
|
||||
@@ -325,7 +319,7 @@ index 5cb8e7365f..f2074856a2 100644
|
||||
{"dmt", "", 0x41600bc1, 0xffffffff, TRAP, 0, 0, MT32, 0 },
|
||||
{"dmt", "t", 0x41600bc1, 0xffe0ffff, WR_1|TRAP, 0, 0, MT32, 0 },
|
||||
{"dmtc0", "t,G", 0x40a00000, 0xffe007ff, RD_1|WR_C0|WR_CC|CM, 0, I3, 0, EE },
|
||||
@@ -1082,6 +1086,8 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
@@ -1090,6 +1094,8 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
/* dmfc3 is at the bottom of the table. */
|
||||
/* dmtc3 is at the bottom of the table. */
|
||||
{"dmuh", "d,s,t", 0x000000dc, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I69, 0, 0 },
|
||||
@@ -334,7 +328,7 @@ index 5cb8e7365f..f2074856a2 100644
|
||||
{"dmul", "d,s,t", 0x0000009c, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I69, 0, 0 },
|
||||
{"dmul", "d,v,t", 0x70000003, 0xfc0007ff, WR_1|RD_2|RD_3|WR_HILO, 0, IOCT, 0, 0 },
|
||||
{"dmul", "d,v,t", 0, (int) M_DMUL, INSN_MACRO, 0, I3, 0, M32|I69 },
|
||||
@@ -1235,9 +1241,9 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
@@ -1243,9 +1249,9 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
{"ld", "s,-b(+R)", 0xec180000, 0xfc1c0000, WR_1, RD_pc, I69, 0, 0 },
|
||||
{"ld", "t,A(b)", 0, (int) M_LD_AB, INSN_MACRO, 0, I1, 0, 0 },
|
||||
{"ld", "t,o(b)", 0xdc000000, 0xfc000000, WR_1|RD_3|LM, 0, I3, 0, 0 },
|
||||
@@ -347,7 +341,7 @@ index 5cb8e7365f..f2074856a2 100644
|
||||
{"ldc1", "T,o(b)", 0xd4000000, 0xfc000000, WR_1|RD_3|CLD|FP_D, 0, I2, 0, SF },
|
||||
{"ldc1", "E,o(b)", 0xd4000000, 0xfc000000, WR_1|RD_3|CLD|FP_D, 0, I2, 0, SF },
|
||||
{"ldc1", "T,A(b)", 0, (int) M_LDC1_AB, INSN_MACRO, INSN2_M_FP_D, I2, 0, SF },
|
||||
@@ -1402,7 +1408,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
@@ -1410,7 +1416,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
{"mflo", "d,9", 0x00000012, 0xff9f07ff, WR_1|RD_LO, 0, 0, D32, 0 },
|
||||
{"mflo1", "d", 0x70000012, 0xffff07ff, WR_1|RD_LO, 0, EE, 0, 0 },
|
||||
{"mflhxu", "d", 0x00000052, 0xffff07ff, WR_1|MOD_HILO, 0, 0, SMT, 0 },
|
||||
@@ -356,7 +350,7 @@ index 5cb8e7365f..f2074856a2 100644
|
||||
{"mfsa", "d", 0x00000028, 0xffff07ff, WR_1, 0, EE, 0, 0 },
|
||||
{"min.ob", "X,Y,Q", 0x78000006, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, SB1, MX, 0 },
|
||||
{"min.ob", "D,S,Q", 0x48000006, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, N54, 0, 0 },
|
||||
@@ -1447,10 +1453,13 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
@@ -1455,10 +1461,13 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
/* move is at the top of the table. */
|
||||
{"msgn.qh", "X,Y,Q", 0x78200000, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, 0, MX, 0 },
|
||||
{"msgsnd", "t", 0, (int) M_MSGSND, INSN_MACRO, 0, XLR, 0, 0 },
|
||||
@@ -372,7 +366,7 @@ index 5cb8e7365f..f2074856a2 100644
|
||||
{"msub.d", "D,R,S,T", 0x4c000029, 0xfc00003f, WR_1|RD_2|RD_3|RD_4|FP_D, 0, I4_33, 0, I37 },
|
||||
{"msub.d", "D,S,T", 0x46200019, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
|
||||
{"msub.d", "D,S,T", 0x72200019, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F, 0, 0 },
|
||||
@@ -1500,7 +1509,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
@@ -1508,7 +1517,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
{"mtlo", "s,7", 0x00000013, 0xfc1fe7ff, RD_1|WR_LO, 0, 0, D32, 0 },
|
||||
{"mtlo1", "s", 0x70000013, 0xfc1fffff, RD_1|WR_LO, 0, EE, 0, 0 },
|
||||
{"mtlhx", "s", 0x00000053, 0xfc1fffff, RD_1|MOD_HILO, 0, 0, SMT, 0 },
|
||||
@@ -381,7 +375,7 @@ index 5cb8e7365f..f2074856a2 100644
|
||||
{"mtm0", "s", 0x70000008, 0xfc1fffff, RD_1, 0, IOCT, 0, 0 },
|
||||
{"mtm0", "s,t", 0x70000008, 0xfc00ffff, RD_1|RD_2, 0, IOCT3, 0, 0 },
|
||||
{"mtm1", "s", 0x7000000c, 0xfc1fffff, RD_1, 0, IOCT, 0, 0 },
|
||||
@@ -1937,9 +1946,9 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
@@ -1945,9 +1954,9 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
{"suxc1", "S,t(b)", 0x4c00000d, 0xfc0007ff, RD_1|RD_2|RD_3|SM|FP_D, 0, I5_33|N55, 0, I37},
|
||||
{"sw", "t,o(b)", 0xac000000, 0xfc000000, RD_1|RD_3|SM, 0, I1, 0, 0 },
|
||||
{"sw", "t,A(b)", 0, (int) M_SW_AB, INSN_MACRO, 0, I1, 0, 0 },
|
||||
@@ -395,5 +389,5 @@ index 5cb8e7365f..f2074856a2 100644
|
||||
{"swc0", "E,A(b)", 0, (int) M_SWC0_AB, INSN_MACRO, 0, I1, 0, IOCT|IOCTP|IOCT2|I37 },
|
||||
{"swc1", "T,o(b)", 0xe4000000, 0xfc000000, RD_1|RD_3|SM|FP_S, 0, I1, 0, 0 },
|
||||
--
|
||||
2.12.0
|
||||
2.14.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From a9177150f808d7e6285e1011c85d0ce89037b553 Mon Sep 17 00:00:00 2001
|
||||
From e46202becab625c6c08caf91e08ccbbc1bf799c4 Mon Sep 17 00:00:00 2001
|
||||
From: Zhenhua Luo <zhenhua.luo@nxp.com>
|
||||
Date: Sat, 11 Jun 2016 22:08:29 -0500
|
||||
Subject: [PATCH 14/15] fix the incorrect assembling for ppc wait mnemonic
|
||||
Subject: [PATCH 13/15] fix the incorrect assembling for ppc wait mnemonic
|
||||
|
||||
Signed-off-by: Zhenhua Luo <zhenhua.luo@nxp.com>
|
||||
|
||||
@@ -11,10 +11,10 @@ Upstream-Status: Pending
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c
|
||||
index 30fd789182..f2708e2276 100644
|
||||
index 426261ab21..0d35916cdd 100644
|
||||
--- a/opcodes/ppc-opc.c
|
||||
+++ b/opcodes/ppc-opc.c
|
||||
@@ -4876,7 +4876,6 @@ const struct powerpc_opcode powerpc_opcodes[] = {
|
||||
@@ -4881,7 +4881,6 @@ const struct powerpc_opcode powerpc_opcodes[] = {
|
||||
{"ldepx", X(31,29), X_MASK, E500MC|PPCA2, 0, {RT, RA0, RB}},
|
||||
|
||||
{"waitasec", X(31,30), XRTRARB_MASK, POWER8, POWER9, {0}},
|
||||
@@ -22,7 +22,7 @@ index 30fd789182..f2708e2276 100644
|
||||
|
||||
{"lwepx", X(31,31), X_MASK, E500MC|PPCA2, 0, {RT, RA0, RB}},
|
||||
|
||||
@@ -4930,7 +4929,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
|
||||
@@ -4935,7 +4934,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
|
||||
|
||||
{"waitrsv", X(31,62)|(1<<21), 0xffffffff, E500MC|PPCA2, 0, {0}},
|
||||
{"waitimpl", X(31,62)|(2<<21), 0xffffffff, E500MC|PPCA2, 0, {0}},
|
||||
@@ -32,5 +32,5 @@ index 30fd789182..f2708e2276 100644
|
||||
{"dcbstep", XRT(31,63,0), XRT_MASK, E500MC|PPCA2, 0, {RA0, RB}},
|
||||
|
||||
--
|
||||
2.12.0
|
||||
2.14.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From c3ebde5d8cc3b0092966b4d725cad7cfd074fd8d Mon Sep 17 00:00:00 2001
|
||||
From bf20d5823662d1f2eb47de2cdfd173627a205b17 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Fri, 31 Mar 2017 11:42:03 -0700
|
||||
Subject: [PATCH 16/16] Detect 64-bit MIPS targets
|
||||
Subject: [PATCH 14/15] Detect 64-bit MIPS targets
|
||||
|
||||
Add mips64 target triplets and default to N64
|
||||
|
||||
@@ -46,5 +46,5 @@ index 3d63027297..c1f92a1360 100644
|
||||
targ_obj=mips
|
||||
targ_machine=EM_MIPS
|
||||
--
|
||||
2.12.1
|
||||
2.14.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 58cdb28ed71cb57b4a0ea1b412a708fdb0f84c27 Mon Sep 17 00:00:00 2001
|
||||
From 9b456a0e4f284fd41ac36595144ed44dc82410ee Mon Sep 17 00:00:00 2001
|
||||
From: Ross Burton <ross.burton@intel.com>
|
||||
Date: Mon, 6 Mar 2017 23:33:27 -0800
|
||||
Subject: [PATCH 15/15] sync with OE libtool changes
|
||||
@@ -85,5 +85,5 @@ index 11ee684ccc..3b19ac1532 100644
|
||||
elif test -n "$runpath_var"; then
|
||||
case "$finalize_perm_rpath " in
|
||||
--
|
||||
2.12.0
|
||||
2.14.0
|
||||
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
From 3239a4231ff79bf8b67b8faaf414b1667486167c Mon Sep 17 00:00:00 2001
|
||||
From: Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
Date: Mon, 19 Dec 2016 15:27:59 +0000
|
||||
Subject: [PATCH] bfd: Improve lookup of file / line information for errors
|
||||
|
||||
When looking up file and line information (used from the linker to
|
||||
report error messages) if no symbol is passed in, then use the symbol
|
||||
list to look for a matching symbol.
|
||||
|
||||
If a matching symbol is found then use this to look up the file / line
|
||||
information.
|
||||
|
||||
This should improve errors when looking up file / line information for
|
||||
data sections. Hopefully we should find a matching data symbol, which
|
||||
should, in turn (we hope) match a DW_TAG_variable in the DWARF, this
|
||||
should allow us to give accurate file / line errors for data symbols.
|
||||
|
||||
As the hope is to find a matching DW_TAG_variable in the DWARF then we
|
||||
ignore section symbols, and prefer global symbols to locals.
|
||||
|
||||
CVE: CVE-2017-8392
|
||||
Upstream-Status: Accepted
|
||||
|
||||
Signed-off-by: Fan Xin <fan.xin@jp.fujitsu.com>
|
||||
---
|
||||
bfd/dwarf2.c | 32 ++++++++++++++++++++++++++++++++
|
||||
1 files changed, 32 insertions(+)
|
||||
|
||||
|
||||
diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
|
||||
index 03447a9..9bb8126 100644
|
||||
--- a/bfd/dwarf2.c
|
||||
+++ b/bfd/dwarf2.c
|
||||
@@ -4155,6 +4155,38 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
|
||||
{
|
||||
BFD_ASSERT (section != NULL && functionname_ptr != NULL);
|
||||
addr = offset;
|
||||
+
|
||||
+ /* If we have no SYMBOL but the section we're looking at is not a
|
||||
+ code section, then take a look through the list of symbols to see
|
||||
+ if we have a symbol at the address we're looking for. If we do
|
||||
+ then use this to look up line information. This will allow us to
|
||||
+ give file and line results for data symbols. We exclude code
|
||||
+ symbols here, if we look up a function symbol and then look up the
|
||||
+ line information we'll actually return the line number for the
|
||||
+ opening '{' rather than the function definition line. This is
|
||||
+ because looking up by symbol uses the line table, in which the
|
||||
+ first line for a function is usually the opening '{', while
|
||||
+ looking up the function by section + offset uses the
|
||||
+ DW_AT_decl_line from the function DW_TAG_subprogram for the line,
|
||||
+ which will be the line of the function name. */
|
||||
+ if ((section->flags & SEC_CODE) == 0)
|
||||
+ {
|
||||
+ asymbol **tmp;
|
||||
+
|
||||
+ for (tmp = symbols; (*tmp) != NULL; ++tmp)
|
||||
+ if ((*tmp)->the_bfd == abfd
|
||||
+ && (*tmp)->section == section
|
||||
+ && (*tmp)->value == offset
|
||||
+ && ((*tmp)->flags & BSF_SECTION_SYM) == 0)
|
||||
+ {
|
||||
+ symbol = *tmp;
|
||||
+ do_line = TRUE;
|
||||
+ /* For local symbols, keep going in the hope we find a
|
||||
+ global. */
|
||||
+ if ((symbol->flags & BSF_GLOBAL) != 0)
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
if (section->output_section)
|
||||
--
|
||||
1.9.1
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
From 97e83a100aa8250be783304bfe0429761c6e6b6b Mon Sep 17 00:00:00 2001
|
||||
From: Alan Modra <amodra@gmail.com>
|
||||
Date: Sun, 23 Apr 2017 13:55:49 +0930
|
||||
Subject: [PATCH] PR 21409, segfault in _bfd_dwarf2_find_nearest_line
|
||||
|
||||
PR 21409
|
||||
* dwarf2.c (_bfd_dwarf2_find_nearest_line): Don't segfault when
|
||||
no symbols.
|
||||
|
||||
CVE: CVE-2017-8392
|
||||
Upstream-Status: Accepted
|
||||
|
||||
Signed-off-by: Fan Xin <fan.xin@jp.fujitsu.com>
|
||||
---
|
||||
bfd/dwarf2.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
|
||||
index 132a674..0ef3e1f 100644
|
||||
--- a/bfd/dwarf2.c
|
||||
+++ b/bfd/dwarf2.c
|
||||
@@ -4205,7 +4205,7 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
|
||||
looking up the function by section + offset uses the
|
||||
DW_AT_decl_line from the function DW_TAG_subprogram for the line,
|
||||
which will be the line of the function name. */
|
||||
- if ((section->flags & SEC_CODE) == 0)
|
||||
+ if (symbols != NULL && (section->flags & SEC_CODE) == 0)
|
||||
{
|
||||
asymbol **tmp;
|
||||
|
||||
--
|
||||
1.9.1
|
||||
|
||||
@@ -1,109 +0,0 @@
|
||||
From bdc5166c274b842f83f8328e7cfaaf80fd29934e Mon Sep 17 00:00:00 2001
|
||||
From: Nick Clifton <nickc@redhat.com>
|
||||
Date: Mon, 13 Feb 2017 13:08:32 +0000
|
||||
Subject: [PATCH 1/2] Fix readelf writing to illegal addresses whilst
|
||||
processing corrupt input files containing symbol-difference relocations.
|
||||
|
||||
PR binutils/21137
|
||||
* readelf.c (target_specific_reloc_handling): Add end parameter.
|
||||
Check for buffer overflow before writing relocated values.
|
||||
(apply_relocations): Pass end to target_specific_reloc_handling.
|
||||
|
||||
(cherry pick from commit 03f7786e2f440b9892b1c34a58fb26222ce1b493)
|
||||
Upstream-Status: Backport [master]
|
||||
CVE: CVE-2017-6965
|
||||
|
||||
Signed-off-by: Yuanjie Huang <yuanjie.huang@windriver.com>
|
||||
---
|
||||
binutils/ChangeLog | 7 +++++++
|
||||
binutils/readelf.c | 30 +++++++++++++++++++++++++-----
|
||||
2 files changed, 32 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/binutils/readelf.c b/binutils/readelf.c
|
||||
index b5f577f5a1..8cdaae3b8c 100644
|
||||
--- a/binutils/readelf.c
|
||||
+++ b/binutils/readelf.c
|
||||
@@ -11585,6 +11585,7 @@ process_syminfo (FILE * file ATTRIBUTE_UNUSED)
|
||||
static bfd_boolean
|
||||
target_specific_reloc_handling (Elf_Internal_Rela * reloc,
|
||||
unsigned char * start,
|
||||
+ unsigned char * end,
|
||||
Elf_Internal_Sym * symtab)
|
||||
{
|
||||
unsigned int reloc_type = get_reloc_type (reloc->r_info);
|
||||
@@ -11625,13 +11626,19 @@ target_specific_reloc_handling (Elf_Internal_Rela * reloc,
|
||||
handle_sym_diff:
|
||||
if (saved_sym != NULL)
|
||||
{
|
||||
+ int reloc_size = reloc_type == 1 ? 4 : 2;
|
||||
bfd_vma value;
|
||||
|
||||
value = reloc->r_addend
|
||||
+ (symtab[get_reloc_symindex (reloc->r_info)].st_value
|
||||
- saved_sym->st_value);
|
||||
|
||||
- byte_put (start + reloc->r_offset, value, reloc_type == 1 ? 4 : 2);
|
||||
+ if (start + reloc->r_offset + reloc_size >= end)
|
||||
+ /* PR 21137 */
|
||||
+ error (_("MSP430 sym diff reloc writes past end of section (%p vs %p)\n"),
|
||||
+ start + reloc->r_offset + reloc_size, end);
|
||||
+ else
|
||||
+ byte_put (start + reloc->r_offset, value, reloc_size);
|
||||
|
||||
saved_sym = NULL;
|
||||
return TRUE;
|
||||
@@ -11662,13 +11669,18 @@ target_specific_reloc_handling (Elf_Internal_Rela * reloc,
|
||||
case 2: /* R_MN10300_16 */
|
||||
if (saved_sym != NULL)
|
||||
{
|
||||
+ int reloc_size = reloc_type == 1 ? 4 : 2;
|
||||
bfd_vma value;
|
||||
|
||||
value = reloc->r_addend
|
||||
+ (symtab[get_reloc_symindex (reloc->r_info)].st_value
|
||||
- saved_sym->st_value);
|
||||
|
||||
- byte_put (start + reloc->r_offset, value, reloc_type == 1 ? 4 : 2);
|
||||
+ if (start + reloc->r_offset + reloc_size >= end)
|
||||
+ error (_("MN10300 sym diff reloc writes past end of section (%p vs %p)\n"),
|
||||
+ start + reloc->r_offset + reloc_size, end);
|
||||
+ else
|
||||
+ byte_put (start + reloc->r_offset, value, reloc_size);
|
||||
|
||||
saved_sym = NULL;
|
||||
return TRUE;
|
||||
@@ -11703,12 +11715,20 @@ target_specific_reloc_handling (Elf_Internal_Rela * reloc,
|
||||
break;
|
||||
|
||||
case 0x41: /* R_RL78_ABS32. */
|
||||
- byte_put (start + reloc->r_offset, value, 4);
|
||||
+ if (start + reloc->r_offset + 4 >= end)
|
||||
+ error (_("RL78 sym diff reloc writes past end of section (%p vs %p)\n"),
|
||||
+ start + reloc->r_offset + 2, end);
|
||||
+ else
|
||||
+ byte_put (start + reloc->r_offset, value, 4);
|
||||
value = 0;
|
||||
return TRUE;
|
||||
|
||||
case 0x43: /* R_RL78_ABS16. */
|
||||
- byte_put (start + reloc->r_offset, value, 2);
|
||||
+ if (start + reloc->r_offset + 2 >= end)
|
||||
+ error (_("RL78 sym diff reloc writes past end of section (%p vs %p)\n"),
|
||||
+ start + reloc->r_offset + 2, end);
|
||||
+ else
|
||||
+ byte_put (start + reloc->r_offset, value, 2);
|
||||
value = 0;
|
||||
return TRUE;
|
||||
|
||||
@@ -12325,7 +12345,7 @@ apply_relocations (void * file,
|
||||
|
||||
reloc_type = get_reloc_type (rp->r_info);
|
||||
|
||||
- if (target_specific_reloc_handling (rp, start, symtab))
|
||||
+ if (target_specific_reloc_handling (rp, start, end, symtab))
|
||||
continue;
|
||||
else if (is_none_reloc (reloc_type))
|
||||
continue;
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -1,221 +0,0 @@
|
||||
From 383ec757d27652448d1511169e1133f486abf54f Mon Sep 17 00:00:00 2001
|
||||
From: Nick Clifton <nickc@redhat.com>
|
||||
Date: Mon, 13 Feb 2017 14:03:22 +0000
|
||||
Subject: [PATCH] Fix read-after-free error in readelf when processing
|
||||
multiple, relocated sections in an MSP430 binary.
|
||||
|
||||
PR binutils/21139
|
||||
* readelf.c (target_specific_reloc_handling): Add num_syms
|
||||
parameter. Check for symbol table overflow before accessing
|
||||
symbol value. If reloc pointer is NULL, discard all saved state.
|
||||
(apply_relocations): Pass num_syms to target_specific_reloc_handling.
|
||||
Call target_specific_reloc_handling with a NULL reloc pointer
|
||||
after processing all of the relocs.
|
||||
|
||||
(cherry pick from commit f84ce13b6708801ca1d6289b7c4003e2f5a6d7f9)
|
||||
Upstream-Status: Backport [master]
|
||||
CVE: CVE-2017-6966
|
||||
|
||||
Signed-off-by: Yuanjie Huang <yuanjie.huang@windriver.com>
|
||||
---
|
||||
binutils/ChangeLog | 10 +++++
|
||||
binutils/readelf.c | 109 +++++++++++++++++++++++++++++++++++++++++------------
|
||||
2 files changed, 94 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/binutils/readelf.c b/binutils/readelf.c
|
||||
index 8cdaae3b8c..7c158c6342 100644
|
||||
--- a/binutils/readelf.c
|
||||
+++ b/binutils/readelf.c
|
||||
@@ -11580,15 +11580,27 @@ process_syminfo (FILE * file ATTRIBUTE_UNUSED)
|
||||
|
||||
/* Check to see if the given reloc needs to be handled in a target specific
|
||||
manner. If so then process the reloc and return TRUE otherwise return
|
||||
- FALSE. */
|
||||
+ FALSE.
|
||||
+
|
||||
+ If called with reloc == NULL, then this is a signal that reloc processing
|
||||
+ for the current section has finished, and any saved state should be
|
||||
+ discarded. */
|
||||
|
||||
static bfd_boolean
|
||||
target_specific_reloc_handling (Elf_Internal_Rela * reloc,
|
||||
unsigned char * start,
|
||||
unsigned char * end,
|
||||
- Elf_Internal_Sym * symtab)
|
||||
+ Elf_Internal_Sym * symtab,
|
||||
+ unsigned long num_syms)
|
||||
{
|
||||
- unsigned int reloc_type = get_reloc_type (reloc->r_info);
|
||||
+ unsigned int reloc_type = 0;
|
||||
+ unsigned long sym_index = 0;
|
||||
+
|
||||
+ if (reloc)
|
||||
+ {
|
||||
+ reloc_type = get_reloc_type (reloc->r_info);
|
||||
+ sym_index = get_reloc_symindex (reloc->r_info);
|
||||
+ }
|
||||
|
||||
switch (elf_header.e_machine)
|
||||
{
|
||||
@@ -11597,6 +11609,12 @@ target_specific_reloc_handling (Elf_Internal_Rela * reloc,
|
||||
{
|
||||
static Elf_Internal_Sym * saved_sym = NULL;
|
||||
|
||||
+ if (reloc == NULL)
|
||||
+ {
|
||||
+ saved_sym = NULL;
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+
|
||||
switch (reloc_type)
|
||||
{
|
||||
case 10: /* R_MSP430_SYM_DIFF */
|
||||
@@ -11604,7 +11622,12 @@ target_specific_reloc_handling (Elf_Internal_Rela * reloc,
|
||||
break;
|
||||
/* Fall through. */
|
||||
case 21: /* R_MSP430X_SYM_DIFF */
|
||||
- saved_sym = symtab + get_reloc_symindex (reloc->r_info);
|
||||
+ /* PR 21139. */
|
||||
+ if (sym_index >= num_syms)
|
||||
+ error (_("MSP430 SYM_DIFF reloc contains invalid symbol index %lu\n"),
|
||||
+ sym_index);
|
||||
+ else
|
||||
+ saved_sym = symtab + sym_index;
|
||||
return TRUE;
|
||||
|
||||
case 1: /* R_MSP430_32 or R_MSP430_ABS32 */
|
||||
@@ -11629,16 +11652,21 @@ target_specific_reloc_handling (Elf_Internal_Rela * reloc,
|
||||
int reloc_size = reloc_type == 1 ? 4 : 2;
|
||||
bfd_vma value;
|
||||
|
||||
- value = reloc->r_addend
|
||||
- + (symtab[get_reloc_symindex (reloc->r_info)].st_value
|
||||
- - saved_sym->st_value);
|
||||
-
|
||||
- if (start + reloc->r_offset + reloc_size >= end)
|
||||
- /* PR 21137 */
|
||||
- error (_("MSP430 sym diff reloc writes past end of section (%p vs %p)\n"),
|
||||
- start + reloc->r_offset + reloc_size, end);
|
||||
+ if (sym_index >= num_syms)
|
||||
+ error (_("MSP430 reloc contains invalid symbol index %lu\n"),
|
||||
+ sym_index);
|
||||
else
|
||||
- byte_put (start + reloc->r_offset, value, reloc_size);
|
||||
+ {
|
||||
+ value = reloc->r_addend + (symtab[sym_index].st_value
|
||||
+ - saved_sym->st_value);
|
||||
+
|
||||
+ if (start + reloc->r_offset + reloc_size >= end)
|
||||
+ /* PR 21137 */
|
||||
+ error (_("MSP430 sym diff reloc writes past end of section (%p vs %p)\n"),
|
||||
+ start + reloc->r_offset + reloc_size, end);
|
||||
+ else
|
||||
+ byte_put (start + reloc->r_offset, value, reloc_size);
|
||||
+ }
|
||||
|
||||
saved_sym = NULL;
|
||||
return TRUE;
|
||||
@@ -11658,13 +11686,24 @@ target_specific_reloc_handling (Elf_Internal_Rela * reloc,
|
||||
{
|
||||
static Elf_Internal_Sym * saved_sym = NULL;
|
||||
|
||||
+ if (reloc == NULL)
|
||||
+ {
|
||||
+ saved_sym = NULL;
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+
|
||||
switch (reloc_type)
|
||||
{
|
||||
case 34: /* R_MN10300_ALIGN */
|
||||
return TRUE;
|
||||
case 33: /* R_MN10300_SYM_DIFF */
|
||||
- saved_sym = symtab + get_reloc_symindex (reloc->r_info);
|
||||
+ if (sym_index >= num_syms)
|
||||
+ error (_("MN10300_SYM_DIFF reloc contains invalid symbol index %lu\n"),
|
||||
+ sym_index);
|
||||
+ else
|
||||
+ saved_sym = symtab + sym_index;
|
||||
return TRUE;
|
||||
+
|
||||
case 1: /* R_MN10300_32 */
|
||||
case 2: /* R_MN10300_16 */
|
||||
if (saved_sym != NULL)
|
||||
@@ -11672,15 +11711,20 @@ target_specific_reloc_handling (Elf_Internal_Rela * reloc,
|
||||
int reloc_size = reloc_type == 1 ? 4 : 2;
|
||||
bfd_vma value;
|
||||
|
||||
- value = reloc->r_addend
|
||||
- + (symtab[get_reloc_symindex (reloc->r_info)].st_value
|
||||
- - saved_sym->st_value);
|
||||
-
|
||||
- if (start + reloc->r_offset + reloc_size >= end)
|
||||
- error (_("MN10300 sym diff reloc writes past end of section (%p vs %p)\n"),
|
||||
- start + reloc->r_offset + reloc_size, end);
|
||||
+ if (sym_index >= num_syms)
|
||||
+ error (_("MN10300 reloc contains invalid symbol index %lu\n"),
|
||||
+ sym_index);
|
||||
else
|
||||
- byte_put (start + reloc->r_offset, value, reloc_size);
|
||||
+ {
|
||||
+ value = reloc->r_addend + (symtab[sym_index].st_value
|
||||
+ - saved_sym->st_value);
|
||||
+
|
||||
+ if (start + reloc->r_offset + reloc_size >= end)
|
||||
+ error (_("MN10300 sym diff reloc writes past end of section (%p vs %p)\n"),
|
||||
+ start + reloc->r_offset + reloc_size, end);
|
||||
+ else
|
||||
+ byte_put (start + reloc->r_offset, value, reloc_size);
|
||||
+ }
|
||||
|
||||
saved_sym = NULL;
|
||||
return TRUE;
|
||||
@@ -11700,12 +11744,24 @@ target_specific_reloc_handling (Elf_Internal_Rela * reloc,
|
||||
static bfd_vma saved_sym2 = 0;
|
||||
static bfd_vma value;
|
||||
|
||||
+ if (reloc == NULL)
|
||||
+ {
|
||||
+ saved_sym1 = saved_sym2 = 0;
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+
|
||||
switch (reloc_type)
|
||||
{
|
||||
case 0x80: /* R_RL78_SYM. */
|
||||
saved_sym1 = saved_sym2;
|
||||
- saved_sym2 = symtab[get_reloc_symindex (reloc->r_info)].st_value;
|
||||
- saved_sym2 += reloc->r_addend;
|
||||
+ if (sym_index >= num_syms)
|
||||
+ error (_("RL78_SYM reloc contains invalid symbol index %lu\n"),
|
||||
+ sym_index);
|
||||
+ else
|
||||
+ {
|
||||
+ saved_sym2 = symtab[sym_index].st_value;
|
||||
+ saved_sym2 += reloc->r_addend;
|
||||
+ }
|
||||
return TRUE;
|
||||
|
||||
case 0x83: /* R_RL78_OPsub. */
|
||||
@@ -12345,7 +12401,7 @@ apply_relocations (void * file,
|
||||
|
||||
reloc_type = get_reloc_type (rp->r_info);
|
||||
|
||||
- if (target_specific_reloc_handling (rp, start, end, symtab))
|
||||
+ if (target_specific_reloc_handling (rp, start, end, symtab, num_syms))
|
||||
continue;
|
||||
else if (is_none_reloc (reloc_type))
|
||||
continue;
|
||||
@@ -12441,6 +12497,9 @@ apply_relocations (void * file,
|
||||
}
|
||||
|
||||
free (symtab);
|
||||
+ /* Let the target specific reloc processing code know that
|
||||
+ we have finished with these relocs. */
|
||||
+ target_specific_reloc_handling (NULL, NULL, NULL, NULL, 0);
|
||||
|
||||
if (relocs_return)
|
||||
{
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
From 1d9a2696903fc59d6a936f4ab4e4407ef329d066 Mon Sep 17 00:00:00 2001
|
||||
From: Nick Clifton <nickc@redhat.com>
|
||||
Date: Fri, 17 Feb 2017 15:59:45 +0000
|
||||
Subject: Fix illegal memory accesses in readelf when parsing
|
||||
a corrupt binary.
|
||||
|
||||
PR binutils/21156
|
||||
* readelf.c (find_section_in_set): Test for invalid section
|
||||
indicies.
|
||||
|
||||
CVE: CVE-2017-6969
|
||||
Upstream-Status: Backport [master]
|
||||
|
||||
Signed-off-by: Yuanjie Huang <yuanjie.huang@windriver.com>
|
||||
---
|
||||
binutils/ChangeLog | 6 ++++++
|
||||
binutils/readelf.c | 10 ++++++++--
|
||||
2 files changed, 14 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/binutils/readelf.c b/binutils/readelf.c
|
||||
index 7c158c6342..4960491c5c 100644
|
||||
--- a/binutils/readelf.c
|
||||
+++ b/binutils/readelf.c
|
||||
@@ -675,8 +675,14 @@ find_section_in_set (const char * name, unsigned int * set)
|
||||
if (set != NULL)
|
||||
{
|
||||
while ((i = *set++) > 0)
|
||||
- if (streq (SECTION_NAME (section_headers + i), name))
|
||||
- return section_headers + i;
|
||||
+ {
|
||||
+ /* See PR 21156 for a reproducer. */
|
||||
+ if (i >= elf_header.e_shnum)
|
||||
+ continue; /* FIXME: Should we issue an error message ? */
|
||||
+
|
||||
+ if (streq (SECTION_NAME (section_headers + i), name))
|
||||
+ return section_headers + i;
|
||||
+ }
|
||||
}
|
||||
|
||||
return find_section (name);
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
From ef81126314f67472a46db9581530fbf5ccb6b3f2 Mon Sep 17 00:00:00 2001
|
||||
From: Nick Clifton <nickc@redhat.com>
|
||||
Date: Mon, 20 Feb 2017 14:40:39 +0000
|
||||
Subject: Fix another memory access error in readelf when
|
||||
parsing a corrupt binary.
|
||||
|
||||
PR binutils/21156
|
||||
* dwarf.c (cu_tu_indexes_read): Move into...
|
||||
(load_cu_tu_indexes): ... here. Change the variable into
|
||||
tri-state. Change the function into boolean, returning
|
||||
false if the indicies could not be loaded.
|
||||
(find_cu_tu_set): Return NULL if the indicies could not be
|
||||
loaded.
|
||||
|
||||
CVE: CVE-2017-6969
|
||||
Upstream-Status: Backport [master]
|
||||
|
||||
Signed-off-by: Yuanjie Huang <yuanjie.huang@windriver.com>
|
||||
---
|
||||
binutils/ChangeLog | 10 ++++++++++
|
||||
binutils/dwarf.c | 34 ++++++++++++++++++++--------------
|
||||
2 files changed, 30 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
|
||||
index 0184a7ab2e..6d879c9b61 100644
|
||||
--- a/binutils/dwarf.c
|
||||
+++ b/binutils/dwarf.c
|
||||
@@ -76,7 +76,6 @@ int dwarf_check = 0;
|
||||
as a zero-terminated list of section indexes comprising one set of debug
|
||||
sections from a .dwo file. */
|
||||
|
||||
-static int cu_tu_indexes_read = 0;
|
||||
static unsigned int *shndx_pool = NULL;
|
||||
static unsigned int shndx_pool_size = 0;
|
||||
static unsigned int shndx_pool_used = 0;
|
||||
@@ -99,7 +98,7 @@ static int tu_count = 0;
|
||||
static struct cu_tu_set *cu_sets = NULL;
|
||||
static struct cu_tu_set *tu_sets = NULL;
|
||||
|
||||
-static void load_cu_tu_indexes (void *file);
|
||||
+static bfd_boolean load_cu_tu_indexes (void *);
|
||||
|
||||
/* Values for do_debug_lines. */
|
||||
#define FLAG_DEBUG_LINES_RAW 1
|
||||
@@ -2715,7 +2714,7 @@ load_debug_info (void * file)
|
||||
return num_debug_info_entries;
|
||||
|
||||
/* If this is a DWARF package file, load the CU and TU indexes. */
|
||||
- load_cu_tu_indexes (file);
|
||||
+ (void) load_cu_tu_indexes (file);
|
||||
|
||||
if (load_debug_section (info, file)
|
||||
&& process_debug_info (&debug_displays [info].section, file, abbrev, 1, 0))
|
||||
@@ -7378,21 +7377,27 @@ process_cu_tu_index (struct dwarf_section *section, int do_display)
|
||||
section sets that we can use to associate a .debug_info.dwo section
|
||||
with its associated .debug_abbrev.dwo section in a .dwp file. */
|
||||
|
||||
-static void
|
||||
+static bfd_boolean
|
||||
load_cu_tu_indexes (void *file)
|
||||
{
|
||||
+ static int cu_tu_indexes_read = -1; /* Tri-state variable. */
|
||||
+
|
||||
/* If we have already loaded (or tried to load) the CU and TU indexes
|
||||
then do not bother to repeat the task. */
|
||||
- if (cu_tu_indexes_read)
|
||||
- return;
|
||||
-
|
||||
- if (load_debug_section (dwp_cu_index, file))
|
||||
- process_cu_tu_index (&debug_displays [dwp_cu_index].section, 0);
|
||||
-
|
||||
- if (load_debug_section (dwp_tu_index, file))
|
||||
- process_cu_tu_index (&debug_displays [dwp_tu_index].section, 0);
|
||||
+ if (cu_tu_indexes_read == -1)
|
||||
+ {
|
||||
+ cu_tu_indexes_read = TRUE;
|
||||
+
|
||||
+ if (load_debug_section (dwp_cu_index, file))
|
||||
+ if (! process_cu_tu_index (&debug_displays [dwp_cu_index].section, 0))
|
||||
+ cu_tu_indexes_read = FALSE;
|
||||
+
|
||||
+ if (load_debug_section (dwp_tu_index, file))
|
||||
+ if (! process_cu_tu_index (&debug_displays [dwp_tu_index].section, 0))
|
||||
+ cu_tu_indexes_read = FALSE;
|
||||
+ }
|
||||
|
||||
- cu_tu_indexes_read = 1;
|
||||
+ return (bfd_boolean) cu_tu_indexes_read;
|
||||
}
|
||||
|
||||
/* Find the set of sections that includes section SHNDX. */
|
||||
@@ -7402,7 +7407,8 @@ find_cu_tu_set (void *file, unsigned int shndx)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
- load_cu_tu_indexes (file);
|
||||
+ if (! load_cu_tu_indexes (file))
|
||||
+ return NULL;
|
||||
|
||||
/* Find SHNDX in the shndx pool. */
|
||||
for (i = 0; i < shndx_pool_used; i++)
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
From b2706ceadac7239e7b02d43f05100fc6538b0d65 Mon Sep 17 00:00:00 2001
|
||||
From: Nick Clifton <nickc@redhat.com>
|
||||
Date: Mon, 13 Feb 2017 15:04:37 +0000
|
||||
Subject: Fix invalid read of section contents whilst processing a corrupt binary.
|
||||
|
||||
PR binutils/21135
|
||||
* readelf.c (dump_section_as_bytes): Handle the case where
|
||||
uncompress_section_contents returns false.
|
||||
|
||||
CVE: CVE-2017-7209
|
||||
Upstream-Status: Backport[master]
|
||||
|
||||
Signed-off-by: Yuanjie Huang <yuanjie.huang@windriver.com>
|
||||
---
|
||||
binutils/ChangeLog | 6 ++++++
|
||||
binutils/readelf.c | 16 ++++++++++++----
|
||||
2 files changed, 18 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/binutils/readelf.c b/binutils/readelf.c
|
||||
index 4960491c5c..f0e7b080e8 100644
|
||||
--- a/binutils/readelf.c
|
||||
+++ b/binutils/readelf.c
|
||||
@@ -12803,10 +12803,18 @@ dump_section_as_bytes (Elf_Internal_Shdr * section,
|
||||
new_size -= 12;
|
||||
}
|
||||
|
||||
- if (uncompressed_size
|
||||
- && uncompress_section_contents (& start, uncompressed_size,
|
||||
- & new_size))
|
||||
- section_size = new_size;
|
||||
+ if (uncompressed_size)
|
||||
+ {
|
||||
+ if (uncompress_section_contents (& start, uncompressed_size,
|
||||
+ & new_size))
|
||||
+ section_size = new_size;
|
||||
+ else
|
||||
+ {
|
||||
+ error (_("Unable to decompress section %s\n"),
|
||||
+ printable_section_name (section));
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
if (relocate)
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
From 4da598a472e1d298825035e452e3bc68f714311c Mon Sep 17 00:00:00 2001
|
||||
From: Nick Clifton <nickc@redhat.com>
|
||||
Date: Tue, 14 Feb 2017 14:07:29 +0000
|
||||
Subject: Fix handling of corrupt STABS enum type strings.
|
||||
|
||||
PR binutils/21157
|
||||
* stabs.c (parse_stab_enum_type): Check for corrupt NAME:VALUE
|
||||
pairs.
|
||||
(parse_number): Exit early if passed an empty string.
|
||||
|
||||
CVE: CVE-2017-7210
|
||||
Upstream-Status: Backport [master]
|
||||
|
||||
Signed-off-by: Yuanjie Huang <yuanjie.huang@windriver.com>
|
||||
---
|
||||
binutils/ChangeLog | 7 +++++++
|
||||
binutils/stabs.c | 14 +++++++++++++-
|
||||
2 files changed, 20 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/binutils/stabs.c b/binutils/stabs.c
|
||||
index f5c5d2d8e0..5d013cc361 100644
|
||||
--- a/binutils/stabs.c
|
||||
+++ b/binutils/stabs.c
|
||||
@@ -232,6 +232,10 @@ parse_number (const char **pp, bfd_boolean *poverflow)
|
||||
|
||||
orig = *pp;
|
||||
|
||||
+ /* Stop early if we are passed an empty string. */
|
||||
+ if (*orig == 0)
|
||||
+ return (bfd_vma) 0;
|
||||
+
|
||||
errno = 0;
|
||||
ul = strtoul (*pp, (char **) pp, 0);
|
||||
if (ul + 1 != 0 || errno == 0)
|
||||
@@ -1975,9 +1979,17 @@ parse_stab_enum_type (void *dhandle, const char **pp)
|
||||
bfd_signed_vma val;
|
||||
|
||||
p = *pp;
|
||||
- while (*p != ':')
|
||||
+ while (*p != ':' && *p != 0)
|
||||
++p;
|
||||
|
||||
+ if (*p == 0)
|
||||
+ {
|
||||
+ bad_stab (orig);
|
||||
+ free (names);
|
||||
+ free (values);
|
||||
+ return DEBUG_TYPE_NULL;
|
||||
+ }
|
||||
+
|
||||
name = savestring (*pp, p - *pp);
|
||||
|
||||
*pp = p + 1;
|
||||
--
|
||||
2.11.0
|
||||
|
||||
Reference in New Issue
Block a user