diff --git a/.binutils.metadata b/.binutils.metadata new file mode 100644 index 0000000..56f721c --- /dev/null +++ b/.binutils.metadata @@ -0,0 +1,2 @@ +6e472ddae565a2b1447e6f2393809bb8799982cf SOURCES/binutils-2.27.tar.bz2 +d3e5c9fc829ed40648110da6fe46c2fb1ed8aadb SOURCES/standards.info.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..69ceadb --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +SOURCES/binutils-2.27.tar.bz2 +SOURCES/standards.info.gz diff --git a/SOURCES/binutils-2.19.50.0.1-output-format.sed b/SOURCES/binutils-2.19.50.0.1-output-format.sed new file mode 100644 index 0000000..fd770cb --- /dev/null +++ b/SOURCES/binutils-2.19.50.0.1-output-format.sed @@ -0,0 +1,38 @@ +# Generate OUTPUT_FORMAT line for .so files from the system linker output. +# Imported from glibc/Makerules. + +/ld.*[ ]-E[BL]/b f +/collect.*[ ]-E[BL]/b f +/OUTPUT_FORMAT[^)]*$/{N +s/\n[ ]*/ / +} +t o +: o +s/^.*OUTPUT_FORMAT(\([^,]*\), \1, \1).*$/OUTPUT_FORMAT(\1)/ +t q +s/^.*OUTPUT_FORMAT(\([^,]*\), \([^,]*\), \([^,]*\)).*$/\1,\2,\3/ +t s +s/^.*OUTPUT_FORMAT(\([^,)]*\).*$)/OUTPUT_FORMAT(\1)/ +t q +d +: s +s/"//g +G +s/\n// +s/^\([^,]*\),\([^,]*\),\([^,]*\),B/OUTPUT_FORMAT(\2)/p +s/^\([^,]*\),\([^,]*\),\([^,]*\),L/OUTPUT_FORMAT(\3)/p +s/^\([^,]*\),\([^,]*\),\([^,]*\)/OUTPUT_FORMAT(\1)/p +/,/s|^|*** BUG in libc/scripts/output-format.sed *** |p +q +: q +s/"//g +p +q +: f +s/^.*[ ]-E\([BL]\)[ ].*$/,\1/ +t h +s/^.*[ ]-E\([BL]\)$/,\1/ +t h +d +: h +h diff --git a/SOURCES/binutils-2.20.51.0.10-ppc64-pie.patch b/SOURCES/binutils-2.20.51.0.10-ppc64-pie.patch new file mode 100644 index 0000000..8862d18 --- /dev/null +++ b/SOURCES/binutils-2.20.51.0.10-ppc64-pie.patch @@ -0,0 +1,14 @@ +*** ../binutils-2.23.51.0.2.orig/bfd/elf64-ppc.c 2012-09-11 12:13:00.637448573 +0100 +--- bfd/elf64-ppc.c 2012-09-11 12:13:17.922449052 +0100 +*************** ppc64_elf_relocate_section (bfd *output_ +*** 13523,13528 **** +--- 13523,13531 ---- + { + BFD_ASSERT (h->elf.dynindx != -1); + outrel.r_info = ELF64_R_INFO (h->elf.dynindx, r_type); ++ if (h->elf.dynindx == -1 ++ && h->elf.root.type == bfd_link_hash_undefweak) ++ memset (&outrel, 0, sizeof outrel); + } + else + { diff --git a/SOURCES/binutils-2.20.51.0.10-sec-merge-emit.patch b/SOURCES/binutils-2.20.51.0.10-sec-merge-emit.patch new file mode 100644 index 0000000..238beb3 --- /dev/null +++ b/SOURCES/binutils-2.20.51.0.10-sec-merge-emit.patch @@ -0,0 +1,11 @@ +--- binutils-2.26.orig/bfd/merge.c 2016-01-25 10:11:33.505289018 +0000 ++++ binutils-2.26/bfd/merge.c 2016-01-25 10:19:56.961381656 +0000 +@@ -334,7 +334,7 @@ sec_merge_emit (bfd *abfd, struct sec_me + + /* Trailing alignment needed? */ + off = sec->size - off; +- if (off != 0) ++ if (off != 0 && alignment_power) + { + if (contents) + memcpy (contents + offset, pad, off); diff --git a/SOURCES/binutils-2.20.51.0.2-libtool-lib64.patch b/SOURCES/binutils-2.20.51.0.2-libtool-lib64.patch new file mode 100644 index 0000000..0c61a11 --- /dev/null +++ b/SOURCES/binutils-2.20.51.0.2-libtool-lib64.patch @@ -0,0 +1,302 @@ +diff -rcp ../binutils-2.20.51.0.7.original/bfd/configure ./bfd/configure +*** ../binutils-2.20.51.0.7.original/bfd/configure 2010-04-08 14:53:48.000000000 +0100 +--- ./bfd/configure 2010-04-08 14:56:50.000000000 +0100 +*************** fi +*** 10762,10771 **** + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +! sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +--- 10762,10795 ---- + # before this can be enabled. + hardcode_into_libs=yes + ++ # find out which ABI we are using ++ libsuff= ++ case "$host_cpu" in ++ x86_64*|s390*|powerpc*|ppc*|sparc*) ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *64-bit*) ++ libsuff=64 ++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then ++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ++ fi ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ esac ++ + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +! sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +diff -rcp ../binutils-2.20.51.0.7.original/binutils/configure ./binutils/configure +*** ../binutils-2.20.51.0.7.original/binutils/configure 2010-04-08 14:53:45.000000000 +0100 +--- ./binutils/configure 2010-04-08 14:56:21.000000000 +0100 +*************** fi +*** 10560,10569 **** + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +! sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +--- 10560,10593 ---- + # before this can be enabled. + hardcode_into_libs=yes + ++ # find out which ABI we are using ++ libsuff= ++ case "$host_cpu" in ++ x86_64*|s390*|powerpc*|ppc*|sparc*) ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *64-bit*) ++ libsuff=64 ++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then ++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ++ fi ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ esac ++ + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +! sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +diff -rcp ../binutils-2.20.51.0.7.original/gas/configure ./gas/configure +*** ../binutils-2.20.51.0.7.original/gas/configure 2010-04-08 14:53:47.000000000 +0100 +--- ./gas/configure 2010-04-08 14:57:24.000000000 +0100 +*************** fi +*** 10547,10556 **** + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +! sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +--- 10547,10580 ---- + # before this can be enabled. + hardcode_into_libs=yes + ++ # find out which ABI we are using ++ libsuff= ++ case "$host_cpu" in ++ x86_64*|s390*|powerpc*|ppc*|sparc*) ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *64-bit*) ++ libsuff=64 ++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then ++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ++ fi ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ esac ++ + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +! sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +diff -rcp ../binutils-2.20.51.0.7.original/gprof/configure ./gprof/configure +*** ../binutils-2.20.51.0.7.original/gprof/configure 2010-04-08 14:53:45.000000000 +0100 +--- ./gprof/configure 2010-04-08 14:57:50.000000000 +0100 +*************** fi +*** 10485,10494 **** + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +! sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +--- 10485,10518 ---- + # before this can be enabled. + hardcode_into_libs=yes + ++ # find out which ABI we are using ++ libsuff= ++ case "$host_cpu" in ++ x86_64*|s390*|powerpc*|ppc*|sparc*) ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *64-bit*) ++ libsuff=64 ++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then ++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ++ fi ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ esac ++ + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +! sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +diff -rcp ../binutils-2.20.51.0.7.original/ld/configure ./ld/configure +*** ../binutils-2.20.51.0.7.original/ld/configure 2010-04-08 14:53:44.000000000 +0100 +--- ./ld/configure 2010-04-08 14:58:21.000000000 +0100 +*************** fi +*** 10966,10975 **** + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +! sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +--- 10966,10999 ---- + # before this can be enabled. + hardcode_into_libs=yes + ++ # find out which ABI we are using ++ libsuff= ++ case "$host_cpu" in ++ x86_64*|s390*|powerpc*|ppc*|sparc*) ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *64-bit*) ++ libsuff=64 ++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then ++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ++ fi ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ esac ++ + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +! sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +Only in .: .#libtool.m4 +Only in .: #libtool.m4# +diff -rcp ../binutils-2.20.51.0.7.original/opcodes/configure ./opcodes/configure +*** ../binutils-2.20.51.0.7.original/opcodes/configure 2010-04-08 14:53:45.000000000 +0100 +--- ./opcodes/configure 2010-04-08 14:59:10.000000000 +0100 +*************** fi +*** 10496,10505 **** + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +! sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on +--- 10496,10529 ---- + # before this can be enabled. + hardcode_into_libs=yes + ++ # find out which ABI we are using ++ libsuff= ++ case "$host_cpu" in ++ x86_64*|s390*|powerpc*|ppc*|sparc*) ++ echo 'int i;' > conftest.$ac_ext ++ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *64-bit*) ++ libsuff=64 ++ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then ++ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ++ fi ++ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ esac ++ + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` +! sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on diff --git a/SOURCES/binutils-2.22.52.0.1-export-demangle.h.patch b/SOURCES/binutils-2.22.52.0.1-export-demangle.h.patch new file mode 100644 index 0000000..84f82cd --- /dev/null +++ b/SOURCES/binutils-2.22.52.0.1-export-demangle.h.patch @@ -0,0 +1,21 @@ +--- a/bfd/Makefile.am 2012-03-06 14:00:33.229957572 +0000 ++++ b/bfd/Makefile.am 2012-04-27 16:46:05.410974817 +0100 +@@ -18,7 +18,7 @@ + bfdlibdir = @bfdlibdir@ + bfdincludedir = @bfdincludedir@ + bfdlib_LTLIBRARIES = libbfd.la +-bfdinclude_HEADERS = $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/bfdlink.h ++bfdinclude_HEADERS = $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/bfdlink.h $(INCDIR)/demangle.h + else !INSTALL_LIBBFD + # Empty these so that the respective installation directories will not be created. + bfdlibdir = +--- binutils-2.26.orig/bfd/Makefile.in 2016-01-25 10:23:35.054721634 +0000 ++++ binutils-2.26/bfd/Makefile.in 2016-01-25 10:25:59.292607840 +0000 +@@ -350,6 +350,7 @@ libbfd_la_LDFLAGS = $(am__append_1) -rel + @INSTALL_LIBBFD_FALSE@bfdinclude_HEADERS = $(am__append_2) + @INSTALL_LIBBFD_TRUE@bfdinclude_HEADERS = $(BFD_H) \ + @INSTALL_LIBBFD_TRUE@ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \ ++@INSTALL_LIBBFD_TRUE@ $(INCDIR)/demangle.h \ + @INSTALL_LIBBFD_TRUE@ $(INCDIR)/bfdlink.h $(am__append_2) + @INSTALL_LIBBFD_FALSE@rpath_bfdlibdir = @bfdlibdir@ + @INSTALL_LIBBFD_FALSE@noinst_LTLIBRARIES = libbfd.la diff --git a/SOURCES/binutils-2.22.52.0.4-no-config-h-check.patch b/SOURCES/binutils-2.22.52.0.4-no-config-h-check.patch new file mode 100644 index 0000000..2fc32e3 --- /dev/null +++ b/SOURCES/binutils-2.22.52.0.4-no-config-h-check.patch @@ -0,0 +1,32 @@ +*** ../binutils-2.22.52.0.4.orig/bfd/bfd-in.h 2012-08-02 10:56:34.561769686 +0100 +--- bfd/bfd-in.h 2012-08-02 11:13:27.134797755 +0100 +*************** +*** 25,35 **** + #ifndef __BFD_H_SEEN__ + #define __BFD_H_SEEN__ + +- /* PR 14072: Ensure that config.h is included first. */ +- #if !defined PACKAGE && !defined PACKAGE_VERSION +- #error config.h must be included before this header +- #endif +- + #ifdef __cplusplus + extern "C" { + #endif +--- 25,30 ---- +*** ../binutils-2.22.52.0.4.orig/bfd/bfd-in2.h 2012-08-02 10:56:34.349769680 +0100 +--- bfd/bfd-in2.h 2012-08-02 11:13:40.015798113 +0100 +*************** +*** 32,42 **** + #ifndef __BFD_H_SEEN__ + #define __BFD_H_SEEN__ + +- /* PR 14072: Ensure that config.h is included first. */ +- #if !defined PACKAGE && !defined PACKAGE_VERSION +- #error config.h must be included before this header +- #endif +- + #ifdef __cplusplus + extern "C" { + #endif +--- 32,37 ---- diff --git a/SOURCES/binutils-2.23.52.0.1-find-separate-debug-file.patch b/SOURCES/binutils-2.23.52.0.1-find-separate-debug-file.patch new file mode 100644 index 0000000..944f4fd --- /dev/null +++ b/SOURCES/binutils-2.23.52.0.1-find-separate-debug-file.patch @@ -0,0 +1,38 @@ +--- a/bfd/opncls.c 2013-03-14 11:25:30.338306122 +0000 ++++ b/bfd/opncls.c 2013-03-14 12:20:21.686397360 +0000 +@@ -1297,6 +1297,8 @@ + bfd_malloc (strlen (debug_file_directory) + 1 + + (canon_dirlen > dirlen ? canon_dirlen : dirlen) + + strlen (".debug/") ++#define FEDORA_LIB_DEBUG_DIR "/usr/lib/debug/" ++ + strlen (FEDORA_LIB_DEBUG_DIR) + strlen ("usr/") + + strlen (base) + + 1); + if (debugfile == NULL) +@@ -1332,6 +1334,26 @@ + if (check_func (debugfile, crc32)) + goto found; + ++ /* Then try in the global debug dir for Fedora libraries. */ ++ sprintf (debugfile, "%s%s%s", FEDORA_LIB_DEBUG_DIR, dir, base); ++ if (separate_debug_file_exists (debugfile, crc32)) ++ { ++ free (base); ++ free (dir); ++ free (canon_dir); ++ return debugfile; ++ } ++ ++ /* Then try in the usr subdirectory of the global debug dir for Fedora libraries. */ ++ sprintf (debugfile, "%s/usr%s%s", FEDORA_LIB_DEBUG_DIR, dir, base); ++ if (separate_debug_file_exists (debugfile, crc32)) ++ { ++ free (base); ++ free (dir); ++ free (canon_dir); ++ return debugfile; ++ } ++ + /* Then try in the global debugfile directory. */ + strcpy (debugfile, debug_file_directory); + dirlen = strlen (debug_file_directory) - 1; diff --git a/SOURCES/binutils-2.25-set-long-long.patch b/SOURCES/binutils-2.25-set-long-long.patch new file mode 100644 index 0000000..1ea7418 --- /dev/null +++ b/SOURCES/binutils-2.25-set-long-long.patch @@ -0,0 +1,38 @@ +diff -up binutils-2.25.orig/bfd/configure.ac binutils-2.25/bfd/configure.ac +--- binutils-2.25.orig/bfd/configure.ac 2014-12-24 10:34:45.590491143 +0000 ++++ binutils-2.25/bfd/configure.ac 2014-12-24 10:36:12.997981992 +0000 +@@ -183,11 +183,13 @@ if test "x${ac_cv_sizeof_long}" = "x8"; + BFD_HOST_64BIT_LONG=1 + test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long" + test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long" +-elif test "x${ac_cv_sizeof_long_long}" = "x8"; then ++fi ++if test "x${ac_cv_sizeof_long_long}" = "x8"; then + BFD_HOST_64BIT_LONG_LONG=1 + test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long long" + test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long long" +- if test "x${ac_cv_sizeof_void_p}" = "x8"; then ++ if test "x${ac_cv_sizeof_void_p}" = "x8" \ ++ -a "x${ac_cv_sizeof_long}" != "x8"; then + BFD_HOSTPTR_T="unsigned long long" + fi + fi +diff -up ../binutils-2.20.51.0.7.original/bfd/configure ./bfd/configure +--- a/bfd/configure 2010-04-08 15:23:58.000000000 +0100 ++++ b/bfd/configure 2010-04-08 15:24:06.000000000 +0100 +@@ -12819,11 +12819,13 @@ + BFD_HOST_64BIT_LONG=1 + test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long" + test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long" +-elif test "x${ac_cv_sizeof_long_long}" = "x8"; then ++fi ++if test "x${ac_cv_sizeof_long_long}" = "x8"; then + BFD_HOST_64BIT_LONG_LONG=1 + test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long long" + test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long long" +- if test "x${ac_cv_sizeof_void_p}" = "x8"; then ++ if test "x${ac_cv_sizeof_void_p}" = "x8" \ ++ -a "x${ac_cv_sizeof_long}" != "x8"; then + BFD_HOSTPTR_T="unsigned long long" + fi + fi diff --git a/SOURCES/binutils-2.25-version.patch b/SOURCES/binutils-2.25-version.patch new file mode 100644 index 0000000..d97e81b --- /dev/null +++ b/SOURCES/binutils-2.25-version.patch @@ -0,0 +1,44 @@ +--- binutils-2.26.orig/bfd/Makefile.am 2016-01-25 10:11:33.505289018 +0000 ++++ binutils-2.26/bfd/Makefile.am 2016-01-25 10:13:23.489964145 +0000 +@@ -1043,8 +1043,8 @@ DISTCLEANFILES = $(BUILD_CFILES) $(BUILD + bfdver.h: $(srcdir)/version.h $(srcdir)/development.sh $(srcdir)/Makefile.in + @echo "creating $@" + @bfd_version=`echo "$(VERSION)" | $(SED) -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\ +- bfd_version_string="\"$(VERSION)\"" ;\ +- bfd_soversion="$(VERSION)" ;\ ++ bfd_version_string="\"$(VERSION)-%{release}\"" ;\ ++ bfd_soversion="$(VERSION)-%{release}" ;\ + bfd_version_package="\"$(PKGVERSION)\"" ;\ + report_bugs_to="\"$(REPORT_BUGS_TO)\"" ;\ + . $(srcdir)/development.sh ;\ +@@ -1055,7 +1055,7 @@ bfdver.h: $(srcdir)/version.h $(srcdir)/ + fi ;\ + $(SED) -e "s,@bfd_version@,$$bfd_version," \ + -e "s,@bfd_version_string@,$$bfd_version_string," \ +- -e "s,@bfd_version_package@,$$bfd_version_package," \ ++ -e "s,@bfd_version_package@,\"version \"," \ + -e "s,@report_bugs_to@,$$report_bugs_to," \ + < $(srcdir)/version.h > $@; \ + echo "$${bfd_soversion}" > libtool-soversion +--- binutils-2.26.orig/bfd/Makefile.in 2016-01-25 10:11:33.505289018 +0000 ++++ binutils-2.26/bfd/Makefile.in 2016-01-25 10:14:17.818297941 +0000 +@@ -2111,8 +2111,8 @@ stmp-lcoff-h: $(LIBCOFF_H_FILES) + bfdver.h: $(srcdir)/version.h $(srcdir)/development.sh $(srcdir)/Makefile.in + @echo "creating $@" + @bfd_version=`echo "$(VERSION)" | $(SED) -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\ +- bfd_version_string="\"$(VERSION)\"" ;\ +- bfd_soversion="$(VERSION)" ;\ ++ bfd_version_string="\"$(VERSION)-%{release}\"" ;\ ++ bfd_soversion="$(VERSION)-%{release}" ;\ + bfd_version_package="\"$(PKGVERSION)\"" ;\ + report_bugs_to="\"$(REPORT_BUGS_TO)\"" ;\ + . $(srcdir)/development.sh ;\ +@@ -2123,7 +2123,7 @@ bfdver.h: $(srcdir)/version.h $(srcdir)/ + fi ;\ + $(SED) -e "s,@bfd_version@,$$bfd_version," \ + -e "s,@bfd_version_string@,$$bfd_version_string," \ +- -e "s,@bfd_version_package@,$$bfd_version_package," \ ++ -e "s,@bfd_version_package@,\"version \"," \ + -e "s,@report_bugs_to@,$$report_bugs_to," \ + < $(srcdir)/version.h > $@; \ + echo "$${bfd_soversion}" > libtool-soversion diff --git a/SOURCES/binutils-2.25.1-objdump-speedup.patch b/SOURCES/binutils-2.25.1-objdump-speedup.patch new file mode 100644 index 0000000..97f503d --- /dev/null +++ b/SOURCES/binutils-2.25.1-objdump-speedup.patch @@ -0,0 +1,845 @@ +diff -rup binutils.orig/bfd/dwarf2.c binutils-2.25.1/bfd/dwarf2.c +--- binutils.orig/bfd/dwarf2.c 2017-01-16 14:48:05.110778762 +0000 ++++ binutils-2.25.1/bfd/dwarf2.c 2017-01-16 14:51:04.915885225 +0000 +@@ -144,16 +144,16 @@ struct dwarf2_debug + /* Length of the loaded .debug_str section. */ + bfd_size_type dwarf_str_size; + +- /* Pointer to the .debug_ranges section loaded into memory. */ ++ /* Pointer to the .debug_ranges section loaded into memory. */ + bfd_byte *dwarf_ranges_buffer; + +- /* Length of the loaded .debug_ranges section. */ ++ /* Length of the loaded .debug_ranges section. */ + bfd_size_type dwarf_ranges_size; + + /* If the most recent call to bfd_find_nearest_line was given an + address in an inlined function, preserve a pointer into the + calling chain for subsequent calls to bfd_find_inliner_info to +- use. */ ++ use. */ + struct funcinfo *inliner_chain; + + /* Section VMAs at the time the stash was built. */ +@@ -212,9 +212,12 @@ struct comp_unit + /* Keep the bfd convenient (for memory allocation). */ + bfd *abfd; + +- /* The lowest and highest addresses contained in this compilation +- unit as specified in the compilation unit header. */ ++ /* Linked list of the low and high address ranges contained in this ++ compilation unit as specified in the compilation unit header. */ + struct arange arange; ++ /* A single arange containing the lowest and highest ++ addresses covered by the compilation unit. */ ++ struct arange minmax; + + /* The DW_AT_name attribute (for error messages). */ + char *name; +@@ -256,6 +259,12 @@ struct comp_unit + /* A list of the functions found in this comp. unit. */ + struct funcinfo *function_table; + ++ /* A table of function information references searchable by address. */ ++ struct lookup_funcinfo *lookup_funcinfo_table; ++ ++ /* Number of functions in the function_table and sorted_function_table. */ ++ bfd_size_type number_of_functions; ++ + /* A list of the variables found in this comp. unit. */ + struct varinfo *variable_table; + +@@ -390,7 +399,7 @@ struct info_hash_table + struct bfd_hash_table base; + }; + +-/* Function to create a new entry in info hash table. */ ++/* Function to create a new entry in info hash table. */ + + static struct bfd_hash_entry * + info_hash_table_newfunc (struct bfd_hash_entry *entry, +@@ -476,7 +485,7 @@ insert_info_hash_table (struct info_hash + } + + /* Look up an info entry list from an info hash table. Return NULL +- if there is none. */ ++ if there is none. */ + + static struct info_list_node * + lookup_info_hash_table (struct info_hash_table *hash_table, const char *key) +@@ -517,8 +526,8 @@ read_section (bfd * abfd, + } + if (! msec) + { +- (*_bfd_error_handler) (_("Dwarf Error: Can't find %s section."), +- sec->uncompressed_name); ++ _bfd_error_handler (_("Dwarf Error: Can't find %s section."), ++ sec->uncompressed_name); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } +@@ -546,9 +555,10 @@ read_section (bfd * abfd, + that the client wants. Validate it here to avoid trouble later. */ + if (offset != 0 && offset >= *section_size) + { +- (*_bfd_error_handler) (_("Dwarf Error: Offset (%lu)" +- " greater than or equal to %s size (%lu)."), +- (long) offset, section_name, *section_size); ++ /* xgettext: c-format */ ++ _bfd_error_handler (_("Dwarf Error: Offset (%lu)" ++ " greater than or equal to %s size (%lu)."), ++ (long) offset, section_name, *section_size); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } +@@ -1157,8 +1167,8 @@ read_attribute_value (struct attribute * + info_ptr = read_attribute_value (attr, form, unit, info_ptr, info_ptr_end); + break; + default: +- (*_bfd_error_handler) (_("Dwarf Error: Invalid or unhandled FORM value: %#x."), +- form); ++ _bfd_error_handler (_("Dwarf Error: Invalid or unhandled FORM value: %#x."), ++ form); + bfd_set_error (bfd_error_bad_value); + return NULL; + } +@@ -1213,22 +1223,22 @@ non_mangled (int lang) + + struct line_info + { +- struct line_info* prev_line; +- bfd_vma address; +- char *filename; +- unsigned int line; +- unsigned int column; +- unsigned int discriminator; +- unsigned char op_index; +- unsigned char end_sequence; /* End of (sequential) code sequence. */ ++ struct line_info * prev_line; ++ bfd_vma address; ++ char * filename; ++ unsigned int line; ++ unsigned int column; ++ unsigned int discriminator; ++ unsigned char op_index; ++ unsigned char end_sequence; /* End of (sequential) code sequence. */ + }; + + struct fileinfo + { +- char *name; +- unsigned int dir; +- unsigned int time; +- unsigned int size; ++ char * name; ++ unsigned int dir; ++ unsigned int time; ++ unsigned int size; + }; + + struct line_sequence +@@ -1236,11 +1246,13 @@ struct line_sequence + bfd_vma low_pc; + struct line_sequence* prev_sequence; + struct line_info* last_line; /* Largest VMA. */ ++ struct line_info** line_info_lookup; ++ bfd_size_type num_lines; + }; + + struct line_info_table + { +- bfd* abfd; ++ bfd * abfd; + unsigned int num_files; + unsigned int num_dirs; + unsigned int num_sequences; +@@ -1259,23 +1271,37 @@ struct line_info_table + struct funcinfo + { + /* Pointer to previous function in list of all functions. */ +- struct funcinfo *prev_func; ++ struct funcinfo * prev_func; + /* Pointer to function one scope higher. */ +- struct funcinfo *caller_func; ++ struct funcinfo * caller_func; + /* Source location file name where caller_func inlines this func. */ +- char *caller_file; ++ char * caller_file; + /* Source location file name. */ +- char *file; ++ char * file; + /* Source location line number where caller_func inlines this func. */ +- int caller_line; ++ int caller_line; + /* Source location line number. */ +- int line; +- int tag; +- bfd_boolean is_linkage; +- const char *name; +- struct arange arange; ++ int line; ++ int tag; ++ bfd_boolean is_linkage; ++ const char * name; ++ struct arange arange; + /* Where the symbol is defined. */ +- asection *sec; ++ asection * sec; ++}; ++ ++struct lookup_funcinfo ++{ ++ /* Function information corresponding to this lookup table entry. */ ++ struct funcinfo * funcinfo; ++ ++ /* The lowest address for this specific function. */ ++ bfd_vma low_addr; ++ ++ /* The highest address of this function before the lookup table is sorted. ++ The highest address of all prior functions after the lookup table is ++ sorted, which is used for binary search. */ ++ bfd_vma high_addr; + }; + + struct varinfo +@@ -1446,7 +1472,7 @@ concat_filename (struct line_info_table + { + /* FILE == 0 means unknown. */ + if (file) +- (*_bfd_error_handler) ++ _bfd_error_handler + (_("Dwarf Error: mangled line number section (bad file number).")); + return strdup ("<unknown>"); + } +@@ -1502,7 +1528,7 @@ concat_filename (struct line_info_table + } + + static bfd_boolean +-arange_add (const struct comp_unit *unit, struct arange *first_arange, ++arange_add (struct comp_unit *unit, struct arange *first_arange, + bfd_vma low_pc, bfd_vma high_pc) + { + struct arange *arange; +@@ -1514,11 +1540,16 @@ arange_add (const struct comp_unit *unit + /* If the first arange is empty, use it. */ + if (first_arange->high == 0) + { +- first_arange->low = low_pc; +- first_arange->high = high_pc; ++ unit->minmax.low = first_arange->low = low_pc; ++ unit->minmax.high = first_arange->high = high_pc; + return TRUE; + } + ++ if (unit->minmax.low > low_pc) ++ unit->minmax.low = low_pc; ++ if (unit->minmax.high < high_pc) ++ unit->minmax.high = high_pc; ++ + /* Next see if we can cheaply extend an existing range. */ + arange = first_arange; + do +@@ -1538,7 +1569,7 @@ arange_add (const struct comp_unit *unit + while (arange); + + /* Need to allocate a new arange and insert it into the arange list. +- Order isn't significant, so just insert after the first arange. */ ++ Order isn't significant, so just insert after the first arange. */ + arange = (struct arange *) bfd_alloc (unit->abfd, sizeof (*arange)); + if (arange == NULL) + return FALSE; +@@ -1578,17 +1609,62 @@ compare_sequences (const void* a, const + return 0; + } + ++/* Construct the line information table for quick lookup. */ ++ ++static bfd_boolean ++build_line_info_table (struct line_info_table * table, ++ struct line_sequence * seq) ++{ ++ bfd_size_type amt; ++ struct line_info** line_info_lookup; ++ struct line_info* each_line; ++ unsigned int num_lines; ++ unsigned int line_index; ++ ++ if (seq->line_info_lookup != NULL) ++ return TRUE; ++ ++ /* Count the number of line information entries. We could do this while ++ scanning the debug information, but some entries may be added via ++ lcl_head without having a sequence handy to increment the number of ++ lines. */ ++ num_lines = 0; ++ for (each_line = seq->last_line; each_line; each_line = each_line->prev_line) ++ num_lines++; ++ ++ if (num_lines == 0) ++ return TRUE; ++ ++ /* Allocate space for the line information lookup table. */ ++ amt = sizeof (struct line_info*) * num_lines; ++ line_info_lookup = (struct line_info**) bfd_alloc (table->abfd, amt); ++ if (line_info_lookup == NULL) ++ return FALSE; ++ ++ /* Create the line information lookup table. */ ++ line_index = num_lines; ++ for (each_line = seq->last_line; each_line; each_line = each_line->prev_line) ++ line_info_lookup[--line_index] = each_line; ++ ++ BFD_ASSERT (line_index == 0); ++ ++ seq->num_lines = num_lines; ++ seq->line_info_lookup = line_info_lookup; ++ ++ return TRUE; ++} ++ + /* Sort the line sequences for quick lookup. */ + + static bfd_boolean + sort_line_sequences (struct line_info_table* table) + { +- bfd_size_type amt; +- struct line_sequence* sequences; +- struct line_sequence* seq; +- unsigned int n = 0; +- unsigned int num_sequences = table->num_sequences; +- bfd_vma last_high_pc; ++ bfd_size_type amt; ++ struct line_sequence* sequences; ++ struct line_sequence* seq; ++ unsigned int n = 0; ++ unsigned int num_sequences = table->num_sequences; ++ bfd_vma last_high_pc; + + if (num_sequences == 0) + return TRUE; +@@ -1609,6 +1685,8 @@ sort_line_sequences (struct line_info_ta + sequences[n].low_pc = seq->low_pc; + sequences[n].prev_sequence = NULL; + sequences[n].last_line = seq->last_line; ++ sequences[n].line_info_lookup = NULL; ++ sequences[n].num_lines = 0; + seq = seq->prev_sequence; + free (last_seq); + } +@@ -1687,7 +1765,7 @@ decode_line_info (struct comp_unit *unit + + if (stash->dwarf_line_size < 16) + { +- (*_bfd_error_handler) ++ _bfd_error_handler + (_("Dwarf Error: Line info section is too small (%ld)"), + (long) stash->dwarf_line_size); + bfd_set_error (bfd_error_bad_value); +@@ -1716,7 +1794,8 @@ decode_line_info (struct comp_unit *unit + + if (lh.total_length > stash->dwarf_line_size) + { +- (*_bfd_error_handler) ++ _bfd_error_handler ++ /* xgettext: c-format */ + (_("Dwarf Error: Line info data is bigger (0x%lx) than the section (0x%lx)"), + (long) lh.total_length, (long) stash->dwarf_line_size); + bfd_set_error (bfd_error_bad_value); +@@ -1728,7 +1807,7 @@ decode_line_info (struct comp_unit *unit + lh.version = read_2_bytes (abfd, line_ptr, line_end); + if (lh.version < 2 || lh.version > 4) + { +- (*_bfd_error_handler) ++ _bfd_error_handler + (_("Dwarf Error: Unhandled .debug_line version %d."), lh.version); + bfd_set_error (bfd_error_bad_value); + return NULL; +@@ -1737,7 +1816,7 @@ decode_line_info (struct comp_unit *unit + + if (line_ptr + offset_size + (lh.version >=4 ? 6 : 5) >= line_end) + { +- (*_bfd_error_handler) ++ _bfd_error_handler + (_("Dwarf Error: Ran out of room reading prologue")); + bfd_set_error (bfd_error_bad_value); + return NULL; +@@ -1762,7 +1841,7 @@ decode_line_info (struct comp_unit *unit + + if (lh.maximum_ops_per_insn == 0) + { +- (*_bfd_error_handler) ++ _bfd_error_handler + (_("Dwarf Error: Invalid maximum operations per instruction.")); + bfd_set_error (bfd_error_bad_value); + return NULL; +@@ -1782,7 +1861,7 @@ decode_line_info (struct comp_unit *unit + + if (line_ptr + (lh.opcode_base - 1) >= line_end) + { +- (*_bfd_error_handler) (_("Dwarf Error: Ran out of room reading opcodes")); ++ _bfd_error_handler (_("Dwarf Error: Ran out of room reading opcodes")); + bfd_set_error (bfd_error_bad_value); + return NULL; + } +@@ -1969,7 +2048,7 @@ decode_line_info (struct comp_unit *unit + line_ptr += exop_len - 1; + break; + default: +- (*_bfd_error_handler) ++ _bfd_error_handler + (_("Dwarf Error: mangled line number section.")); + bfd_set_error (bfd_error_bad_value); + line_fail: +@@ -2089,7 +2168,7 @@ lookup_address_in_line_info_table (struc + unsigned int *discriminator_ptr) + { + struct line_sequence *seq = NULL; +- struct line_info *each_line; ++ struct line_info *info; + int low, high, mid; + + /* Binary search the array of sequences. */ +@@ -2107,26 +2186,43 @@ lookup_address_in_line_info_table (struc + break; + } + +- if (seq && addr >= seq->low_pc && addr < seq->last_line->address) ++ /* Check for a valid sequence. */ ++ if (!seq || addr < seq->low_pc || addr >= seq->last_line->address) ++ goto fail; ++ ++ if (!build_line_info_table (table, seq)) ++ goto fail; ++ ++ /* Binary search the array of line information. */ ++ low = 0; ++ high = seq->num_lines; ++ info = NULL; ++ while (low < high) + { +- /* Note: seq->last_line should be a descendingly sorted list. */ +- for (each_line = seq->last_line; +- each_line; +- each_line = each_line->prev_line) +- if (addr >= each_line->address) +- break; ++ mid = (low + high) / 2; ++ info = seq->line_info_lookup[mid]; ++ if (addr < info->address) ++ high = mid; ++ else if (addr >= seq->line_info_lookup[mid + 1]->address) ++ low = mid + 1; ++ else ++ break; ++ } + +- if (each_line +- && !(each_line->end_sequence || each_line == seq->last_line)) +- { +- *filename_ptr = each_line->filename; +- *linenumber_ptr = each_line->line; +- if (discriminator_ptr) +- *discriminator_ptr = each_line->discriminator; +- return seq->last_line->address - seq->low_pc; +- } ++ /* Check for a valid line information entry. */ ++ if (info ++ && addr >= info->address ++ && addr < seq->line_info_lookup[mid + 1]->address ++ && !(info->end_sequence || info == seq->last_line)) ++ { ++ *filename_ptr = info->filename; ++ *linenumber_ptr = info->line; ++ if (discriminator_ptr) ++ *discriminator_ptr = info->discriminator; ++ return seq->last_line->address - seq->low_pc; + } + ++fail: + *filename_ptr = NULL; + return 0; + } +@@ -2134,16 +2230,102 @@ lookup_address_in_line_info_table (struc + /* Read in the .debug_ranges section for future reference. */ + + static bfd_boolean +-read_debug_ranges (struct comp_unit *unit) ++read_debug_ranges (struct comp_unit * unit) + { +- struct dwarf2_debug *stash = unit->stash; ++ struct dwarf2_debug * stash = unit->stash; ++ + return read_section (unit->abfd, &stash->debug_sections[debug_ranges], + stash->syms, 0, +- &stash->dwarf_ranges_buffer, &stash->dwarf_ranges_size); ++ &stash->dwarf_ranges_buffer, ++ &stash->dwarf_ranges_size); + } + + /* Function table functions. */ + ++static int ++compare_lookup_funcinfos (const void * a, const void * b) ++{ ++ const struct lookup_funcinfo * lookup1 = a; ++ const struct lookup_funcinfo * lookup2 = b; ++ ++ if (lookup1->low_addr < lookup2->low_addr) ++ return -1; ++ if (lookup1->low_addr > lookup2->low_addr) ++ return 1; ++ if (lookup1->high_addr < lookup2->high_addr) ++ return -1; ++ if (lookup1->high_addr > lookup2->high_addr) ++ return 1; ++ ++ return 0; ++} ++ ++static bfd_boolean ++build_lookup_funcinfo_table (struct comp_unit * unit) ++{ ++ struct lookup_funcinfo *lookup_funcinfo_table = unit->lookup_funcinfo_table; ++ unsigned int number_of_functions = unit->number_of_functions; ++ struct funcinfo *each; ++ struct lookup_funcinfo *entry; ++ size_t func_index; ++ struct arange *range; ++ bfd_vma low_addr, high_addr; ++ ++ if (lookup_funcinfo_table || number_of_functions == 0) ++ return TRUE; ++ ++ /* Create the function info lookup table. */ ++ lookup_funcinfo_table = (struct lookup_funcinfo *) ++ bfd_malloc (number_of_functions * sizeof (struct lookup_funcinfo)); ++ if (lookup_funcinfo_table == NULL) ++ return FALSE; ++ ++ /* Populate the function info lookup table. */ ++ func_index = number_of_functions; ++ for (each = unit->function_table; each; each = each->prev_func) ++ { ++ entry = &lookup_funcinfo_table[--func_index]; ++ entry->funcinfo = each; ++ ++ /* Calculate the lowest and highest address for this function entry. */ ++ low_addr = entry->funcinfo->arange.low; ++ high_addr = entry->funcinfo->arange.high; ++ ++ for (range = entry->funcinfo->arange.next; range; range = range->next) ++ { ++ if (range->low < low_addr) ++ low_addr = range->low; ++ if (range->high > high_addr) ++ high_addr = range->high; ++ } ++ ++ entry->low_addr = low_addr; ++ entry->high_addr = high_addr; ++ } ++ ++ BFD_ASSERT (func_index == 0); ++ ++ /* Sort the function by address. */ ++ qsort (lookup_funcinfo_table, ++ number_of_functions, ++ sizeof (struct lookup_funcinfo), ++ compare_lookup_funcinfos); ++ ++ /* Calculate the high watermark for each function in the lookup table. */ ++ high_addr = lookup_funcinfo_table[0].high_addr; ++ for (func_index = 1; func_index < number_of_functions; func_index++) ++ { ++ entry = &lookup_funcinfo_table[func_index]; ++ if (entry->high_addr > high_addr) ++ high_addr = entry->high_addr; ++ else ++ entry->high_addr = high_addr; ++ } ++ ++ unit->lookup_funcinfo_table = lookup_funcinfo_table; ++ return TRUE; ++} ++ + /* If ADDR is within UNIT's function tables, set FUNCTION_PTR, and return + TRUE. Note that we need to find the function that has the smallest range + that contains ADDR, to handle inlined functions without depending upon +@@ -2154,37 +2336,77 @@ lookup_address_in_function_table (struct + bfd_vma addr, + struct funcinfo **function_ptr) + { +- struct funcinfo* each_func; ++ unsigned int number_of_functions = unit->number_of_functions; ++ struct lookup_funcinfo* lookup_funcinfo = NULL; ++ struct funcinfo* funcinfo = NULL; + struct funcinfo* best_fit = NULL; + bfd_vma best_fit_len = 0; ++ bfd_size_type low, high, mid, first; + struct arange *arange; + +- for (each_func = unit->function_table; +- each_func; +- each_func = each_func->prev_func) ++ if (number_of_functions == 0) ++ return FALSE; ++ ++ if (!build_lookup_funcinfo_table (unit)) ++ return FALSE; ++ ++ if (unit->lookup_funcinfo_table[number_of_functions - 1].high_addr < addr) ++ return FALSE; ++ ++ /* Find the first function in the lookup table which may contain the ++ specified address. */ ++ low = 0; ++ high = number_of_functions; ++ first = high; ++ while (low < high) + { +- for (arange = &each_func->arange; +- arange; +- arange = arange->next) ++ mid = (low + high) / 2; ++ lookup_funcinfo = &unit->lookup_funcinfo_table[mid]; ++ if (addr < lookup_funcinfo->low_addr) ++ high = mid; ++ else if (addr >= lookup_funcinfo->high_addr) ++ low = mid + 1; ++ else ++ high = first = mid; ++ } ++ ++ /* Find the 'best' match for the address. The prior algorithm defined the ++ best match as the function with the smallest address range containing ++ the specified address. This definition should probably be changed to the ++ innermost inline routine containing the address, but right now we want ++ to get the same results we did before. */ ++ while (first < number_of_functions) ++ { ++ if (addr < unit->lookup_funcinfo_table[first].low_addr) ++ break; ++ funcinfo = unit->lookup_funcinfo_table[first].funcinfo; ++ ++ for (arange = &funcinfo->arange; arange; arange = arange->next) + { +- if (addr >= arange->low && addr < arange->high) ++ if (addr < arange->low || addr >= arange->high) ++ continue; ++ ++ if (!best_fit ++ || arange->high - arange->low < best_fit_len ++ /* The following comparison is designed to return the same ++ match as the previous algorithm for routines which have the ++ same best fit length. */ ++ || (arange->high - arange->low == best_fit_len ++ && funcinfo > best_fit)) + { +- if (!best_fit +- || arange->high - arange->low < best_fit_len) +- { +- best_fit = each_func; +- best_fit_len = arange->high - arange->low; +- } ++ best_fit = funcinfo; ++ best_fit_len = arange->high - arange->low; + } + } +- } + +- if (best_fit) +- { +- *function_ptr = best_fit; +- return TRUE; ++ first++; + } +- return FALSE; ++ ++ if (!best_fit) ++ return FALSE; ++ ++ *function_ptr = best_fit; ++ return TRUE; + } + + /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR +@@ -2269,8 +2491,8 @@ lookup_symbol_in_variable_table (struct + *linenumber_ptr = each->line; + return TRUE; + } +- else +- return FALSE; ++ ++ return FALSE; + } + + static char * +@@ -2326,7 +2548,7 @@ find_abstract_instance_name (struct comp + info_ptr = read_alt_indirect_ref (unit, die_ref); + if (info_ptr == NULL) + { +- (*_bfd_error_handler) ++ _bfd_error_handler + (_("Dwarf Error: Unable to read alt ref %u."), die_ref); + bfd_set_error (bfd_error_bad_value); + return NULL; +@@ -2350,7 +2572,7 @@ find_abstract_instance_name (struct comp + abbrev = lookup_abbrev (abbrev_number, unit->abbrevs); + if (! abbrev) + { +- (*_bfd_error_handler) ++ _bfd_error_handler + (_("Dwarf Error: Could not find abbrev number %u."), abbrev_number); + bfd_set_error (bfd_error_bad_value); + } +@@ -2494,7 +2716,7 @@ scan_unit_for_symbols (struct comp_unit + abbrev = lookup_abbrev (abbrev_number,unit->abbrevs); + if (! abbrev) + { +- (*_bfd_error_handler) ++ _bfd_error_handler + (_("Dwarf Error: Could not find abbrev number %u."), + abbrev_number); + bfd_set_error (bfd_error_bad_value); +@@ -2513,6 +2735,7 @@ scan_unit_for_symbols (struct comp_unit + func->tag = abbrev->tag; + func->prev_func = unit->function_table; + unit->function_table = func; ++ unit->number_of_functions++; + BFD_ASSERT (!unit->cached); + + if (func->tag == DW_TAG_inlined_subroutine) +@@ -2766,7 +2989,8 @@ parse_comp_unit (struct dwarf2_debug *st + + if (addr_size > sizeof (bfd_vma)) + { +- (*_bfd_error_handler) ++ _bfd_error_handler ++ /* xgettext: c-format */ + (_("Dwarf Error: found address size '%u', this reader" + " can not handle sizes greater than '%u'."), + addr_size, +@@ -2777,7 +3001,7 @@ parse_comp_unit (struct dwarf2_debug *st + + if (addr_size != 2 && addr_size != 4 && addr_size != 8) + { +- (*_bfd_error_handler) ++ _bfd_error_handler + ("Dwarf Error: found address size '%u', this reader" + " can only handle address sizes '2', '4' and '8'.", addr_size); + bfd_set_error (bfd_error_bad_value); +@@ -2845,7 +3069,7 @@ parse_comp_unit (struct dwarf2_debug *st + low_pc = attr.u.val; + /* If the compilation unit DIE has a DW_AT_low_pc attribute, + this is the base address to use when reading location +- lists or range lists. */ ++ lists or range lists. */ + if (abbrev->tag == DW_TAG_compile_unit) + unit->base_address = low_pc; + break; +@@ -2867,7 +3091,7 @@ parse_comp_unit (struct dwarf2_debug *st + /* PR 17512: file: 1fe726be. */ + if (! is_str_attr (attr.form)) + { +- (*_bfd_error_handler) ++ _bfd_error_handler + (_("Dwarf Error: DW_AT_comp_dir attribute encountered with a non-string form.")); + comp_dir = NULL; + } +@@ -2919,6 +3143,11 @@ comp_unit_contains_address (struct comp_ + if (unit->error) + return FALSE; + ++ if (unit->minmax.high < addr || unit->minmax.low > addr) ++ return FALSE; ++ ++ /* We know that the address *might* be contained within this comp ++ unit, but we cannot be sure until we check the specific ranges. */ + arange = &unit->arange; + do + { +@@ -3116,7 +3345,7 @@ comp_unit_hash_info (struct dwarf2_debug + each_func && okay; + each_func = each_func->prev_func) + { +- /* Skip nameless functions. */ ++ /* Skip nameless functions. */ + if (each_func->name) + /* There is no need to copy name string into hash table as + name string is either in the dwarf string buffer or +@@ -3498,7 +3727,7 @@ stash_maybe_update_info_hash_tables (str + return TRUE; + } + +-/* Check consistency of info hash tables. This is for debugging only. */ ++/* Check consistency of info hash tables. This is for debugging only. */ + + static void ATTRIBUTE_UNUSED + stash_verify_info_hash_table (struct dwarf2_debug *stash) +@@ -3930,7 +4159,7 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd + stash_maybe_enable_info_hash_tables (abfd, stash); + + /* Keep info hash table up to date if they are available. Note that we +- may disable the hash tables if there is any error duing update. */ ++ may disable the hash tables if there is any error duing update. */ + if (stash->info_hash_status == STASH_INFO_HASH_ON) + stash_maybe_update_info_hash_tables (stash); + +@@ -4222,6 +4451,12 @@ _bfd_dwarf2_cleanup_debug_info (bfd *abf + function_table = function_table->prev_func; + } + ++ if (each->lookup_funcinfo_table) ++ { ++ free (each->lookup_funcinfo_table); ++ each->lookup_funcinfo_table = NULL; ++ } ++ + while (variable_table) + { + if (variable_table->file) +diff -rup binutils.orig/binutils/objdump.c binutils-2.25.1/binutils/objdump.c +--- binutils.orig/binutils/objdump.c 2017-01-16 14:48:06.214761408 +0000 ++++ binutils-2.25.1/binutils/objdump.c 2017-01-16 14:50:19.313618730 +0000 +@@ -3439,7 +3439,7 @@ display_any_bfd (bfd *file, int level) + } + + static void +-display_file (char *filename, char *target) ++display_file (char *filename, char *target, bfd_boolean last_file) + { + bfd *file; + +@@ -3458,7 +3458,14 @@ display_file (char *filename, char *targ + + display_any_bfd (file, 0); + +- bfd_close (file); ++ /* This is an optimization to improve the speed of objdump, especially when ++ dumping a file with lots of associated debug informatiom. Closing such ++ a file can take a non-trivial amount of time as there are lots of lists ++ to walk and buffers to free. This is only really necessary however if ++ we are about to load another file. Otherwise, if we are about to exit, ++ then we can save (a lot of) time by not bothering to do any tidying up. */ ++ if (! last_file) ++ bfd_close (file); + } + + int +@@ -3736,10 +3743,13 @@ main (int argc, char **argv) + else + { + if (optind == argc) +- display_file ("a.out", target); ++ display_file ("a.out", target, TRUE); + else + for (; optind < argc;) +- display_file (argv[optind++], target); ++ { ++ display_file (argv[optind], target, optind == argc - 1); ++ optind++; ++ } + } + + free_only_list (); + diff --git a/SOURCES/binutils-2.27-ARMv8.2.patch b/SOURCES/binutils-2.27-ARMv8.2.patch new file mode 100644 index 0000000..63a54eb --- /dev/null +++ b/SOURCES/binutils-2.27-ARMv8.2.patch @@ -0,0 +1,3590 @@ +diff -rup binutils.orig/gas/config/tc-arm.c binutils-2.27/gas/config/tc-arm.c +--- binutils.orig/gas/config/tc-arm.c 2017-08-09 10:26:30.032741952 +0100 ++++ binutils-2.27/gas/config/tc-arm.c 2017-08-09 11:17:17.747598541 +0100 +@@ -147,8 +147,10 @@ static const arm_feature_set *legacy_cpu + static const arm_feature_set *legacy_fpu = NULL; + + static const arm_feature_set *mcpu_cpu_opt = NULL; ++static arm_feature_set *dyn_mcpu_ext_opt = NULL; + static const arm_feature_set *mcpu_fpu_opt = NULL; + static const arm_feature_set *march_cpu_opt = NULL; ++static arm_feature_set *dyn_march_ext_opt = NULL; + static const arm_feature_set *march_fpu_opt = NULL; + static const arm_feature_set *mfpu_opt = NULL; + static const arm_feature_set *object_arch = NULL; +@@ -187,7 +189,6 @@ static const arm_feature_set arm_ext_v5j + static const arm_feature_set arm_ext_v6 = ARM_FEATURE_CORE_LOW (ARM_EXT_V6); + static const arm_feature_set arm_ext_v6k = ARM_FEATURE_CORE_LOW (ARM_EXT_V6K); + static const arm_feature_set arm_ext_v6t2 = ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2); +-static const arm_feature_set arm_ext_v6m = ARM_FEATURE_CORE_LOW (ARM_EXT_V6M); + static const arm_feature_set arm_ext_v6_notm = + ARM_FEATURE_CORE_LOW (ARM_EXT_V6_NOTM); + static const arm_feature_set arm_ext_v6_dsp = +@@ -201,11 +202,11 @@ static const arm_feature_set arm_ext_v7 + static const arm_feature_set arm_ext_v7a = ARM_FEATURE_CORE_LOW (ARM_EXT_V7A); + static const arm_feature_set arm_ext_v7r = ARM_FEATURE_CORE_LOW (ARM_EXT_V7R); + #ifdef OBJ_ELF +-static const arm_feature_set arm_ext_v7m = ARM_FEATURE_CORE_LOW (ARM_EXT_V7M); ++static const arm_feature_set ATTRIBUTE_UNUSED arm_ext_v7m = ARM_FEATURE_CORE_LOW (ARM_EXT_V7M); + #endif + static const arm_feature_set arm_ext_v8 = ARM_FEATURE_CORE_LOW (ARM_EXT_V8); + static const arm_feature_set arm_ext_m = +- ARM_FEATURE_CORE (ARM_EXT_V6M | ARM_EXT_OS | ARM_EXT_V7M, ++ ARM_FEATURE_CORE (ARM_EXT_V6M | ARM_EXT_V7M, + ARM_EXT2_V8M | ARM_EXT2_V8M_MAIN); + static const arm_feature_set arm_ext_mp = ARM_FEATURE_CORE_LOW (ARM_EXT_MP); + static const arm_feature_set arm_ext_sec = ARM_FEATURE_CORE_LOW (ARM_EXT_SEC); +@@ -234,14 +235,16 @@ static const arm_feature_set arm_ext_ras + /* FP16 instructions. */ + static const arm_feature_set arm_ext_fp16 = + ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST); ++static const arm_feature_set arm_ext_v8_3 = ++ ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A); + + static const arm_feature_set arm_arch_any = ARM_ANY; ++#ifdef OBJ_ELF ++static const arm_feature_set fpu_any = FPU_ANY; ++#endif + static const arm_feature_set arm_arch_full ATTRIBUTE_UNUSED = ARM_FEATURE (-1, -1, -1); + static const arm_feature_set arm_arch_t2 = ARM_ARCH_THUMB2; + static const arm_feature_set arm_arch_none = ARM_ARCH_NONE; +-#ifdef OBJ_ELF +-static const arm_feature_set arm_arch_v6m_only = ARM_ARCH_V6M_ONLY; +-#endif + + static const arm_feature_set arm_cext_iwmmxt2 = + ARM_FEATURE_COPROC (ARM_CEXT_IWMMXT2); +@@ -291,6 +294,8 @@ static const arm_feature_set crc_ext_arm + ARM_FEATURE_COPROC (CRC_EXT_ARMV8); + static const arm_feature_set fpu_neon_ext_v8_1 = + ARM_FEATURE_COPROC (FPU_NEON_EXT_RDMA); ++static const arm_feature_set fpu_neon_ext_dotprod = ++ ARM_FEATURE_COPROC (FPU_NEON_EXT_DOTPROD); + + static int mfloat_abi_opt = -1; + /* Record user cpu selection for object attributes. */ +@@ -685,9 +690,11 @@ struct asm_opcode + #define T2_SUBS_PC_LR 0xf3de8f00 + + #define DATA_OP_SHIFT 21 ++#define SBIT_SHIFT 20 + + #define T2_OPCODE_MASK 0xfe1fffff + #define T2_DATA_OP_SHIFT 21 ++#define T2_SBIT_SHIFT 20 + + #define A_COND_MASK 0xf0000000 + #define A_PUSH_POP_OP_MASK 0x0fff0000 +@@ -1276,6 +1283,7 @@ arm_reg_alt_syntax (char **ccp, char *st + if (*ccp != start && processor <= 15) + return processor; + } ++ /* Fall through. */ + + case REG_TYPE_MMXWC: + /* WC includes WCG. ??? I'm not sure this is true for all +@@ -2705,7 +2713,7 @@ mapping_state (enum mstate state) + + Some Thumb instructions are alignment-sensitive modulo 4 bytes, + but themselves require 2-byte alignment; this applies to some +- PC- relative forms. However, these cases will invovle implicit ++ PC- relative forms. However, these cases will involve implicit + literal pool generation or an explicit .align >=2, both of + which will cause the section to me marked with sufficient + alignment. Thus, we don't handle those cases here. */ +@@ -3042,7 +3050,7 @@ s_ccs_ref (int unused ATTRIBUTE_UNUSED) + } + + /* If name is not NULL, then it is used for marking the beginning of a +- function, wherease if it is NULL then it means the function end. */ ++ function, whereas if it is NULL then it means the function end. */ + static void + asmfunc_debug (const char * name) + { +@@ -3375,7 +3383,7 @@ tc_start_label_without_colon (void) + } + + /* Can't use symbol_new here, so have to create a symbol and then at +- a later date assign it a value. Thats what these functions do. */ ++ a later date assign it a value. That's what these functions do. */ + + static void + symbol_locate (symbolS * symbolP, +@@ -4964,9 +4972,13 @@ parse_ifimm_zero (char **in) + int error_code; + + if (!is_immediate_prefix (**in)) +- return FALSE; +- +- ++*in; ++ { ++ /* In unified syntax, all prefixes are optional. */ ++ if (!unified_syntax) ++ return FALSE; ++ } ++ else ++ ++*in; + + /* Accept #0x0 as a synonym for #0. */ + if (strncmp (*in, "0x", 2) == 0) +@@ -6530,6 +6542,8 @@ enum operand_parse_code + OP_EXPi, /* same, with optional immediate prefix */ + OP_EXPr, /* same, with optional relocation suffix */ + OP_HALF, /* 0 .. 65535 or low/high reloc. */ ++ OP_IROT1, /* VCADD rotate immediate: 90, 270. */ ++ OP_IROT2, /* VCMLA rotate immediate: 0, 90, 180, 270. */ + + OP_CPSF, /* CPS flags */ + OP_ENDI, /* Endianness specifier */ +@@ -6541,7 +6555,7 @@ enum operand_parse_code + OP_APSR_RR, /* ARM register or "APSR_nzcv". */ + + OP_RRnpc_I0, /* ARM register or literal 0 */ +- OP_RR_EXr, /* ARM register or expression with opt. reloc suff. */ ++ OP_RR_EXr, /* ARM register or expression with opt. reloc stuff. */ + OP_RR_EXi, /* ARM register or expression with imm prefix */ + OP_RF_IF, /* FPA register or immediate */ + OP_RIWR_RIWC, /* iWMMXt R or C reg */ +@@ -7178,8 +7192,14 @@ parse_operands (char *str, const unsigne + { + if (inst.operands[i].reg == REG_PC) + inst.error = BAD_PC; +- else if (inst.operands[i].reg == REG_SP) +- inst.error = BAD_SP; ++ else if (inst.operands[i].reg == REG_SP ++ /* The restriction on Rd/Rt/Rt2 on Thumb mode has been ++ relaxed since ARMv8-A. */ ++ && !ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v8)) ++ { ++ gas_assert (thumb); ++ inst.error = BAD_SP; ++ } + } + break; + +@@ -7277,14 +7297,23 @@ parse_operands (char *str, const unsigne + + /* Reject "bad registers" for Thumb-2 instructions. Many Thumb-2 + instructions are unpredictable if these registers are used. This +- is the BadReg predicate in ARM's Thumb-2 documentation. */ +-#define reject_bad_reg(reg) \ +- do \ +- if (reg == REG_SP || reg == REG_PC) \ +- { \ +- inst.error = (reg == REG_SP) ? BAD_SP : BAD_PC; \ +- return; \ +- } \ ++ is the BadReg predicate in ARM's Thumb-2 documentation. ++ ++ Before ARMv8-A, REG_PC and REG_SP were not allowed in quite a few ++ places, while the restriction on REG_SP was relaxed since ARMv8-A. */ ++#define reject_bad_reg(reg) \ ++ do \ ++ if (reg == REG_PC) \ ++ { \ ++ inst.error = BAD_PC; \ ++ return; \ ++ } \ ++ else if (reg == REG_SP \ ++ && !ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v8)) \ ++ { \ ++ inst.error = BAD_SP; \ ++ return; \ ++ } \ + while (0) + + /* If REG is R13 (the stack pointer), warn that its use is +@@ -7303,7 +7332,7 @@ parse_operands (char *str, const unsigne + + The only binary encoding difference is the Coprocessor number. Coprocessor + 9 is used for half-precision calculations or conversions. The format of the +- instruction is the same as the equivalent Coprocessor 10 instuction that ++ instruction is the same as the equivalent Coprocessor 10 instruction that + exists for Single-Precision operation. */ + + static void +@@ -7426,6 +7455,24 @@ encode_arm_vfp_reg (int reg, enum vfp_re + static void + encode_arm_shift (int i) + { ++ /* Register-shifted register. */ ++ if (inst.operands[i].immisreg) ++ { ++ int op_index; ++ for (op_index = 0; op_index <= i; ++op_index) ++ { ++ /* Check the operand only when it's presented. In pre-UAL syntax, ++ if the destination register is the same as the first operand, two ++ register form of the instruction can be used. */ ++ if (inst.operands[op_index].present && inst.operands[op_index].isreg ++ && inst.operands[op_index].reg == REG_PC) ++ as_warn (UNPRED_REG ("r15")); ++ } ++ ++ if (inst.operands[i].imm == REG_PC) ++ as_warn (UNPRED_REG ("r15")); ++ } ++ + if (inst.operands[i].shift_kind == SHIFT_RRX) + inst.instruction |= SHIFT_ROR << 5; + else +@@ -7930,17 +7977,13 @@ move_or_literal_pool (int i, enum lit_ty + { + if (thumb_p) + { +- /* This can be encoded only for a low register. */ +- if ((v & ~0xFF) == 0 && (inst.operands[i].reg < 8)) +- { +- /* This can be done with a mov(1) instruction. */ +- inst.instruction = T_OPCODE_MOV_I8 | (inst.operands[i].reg << 8); +- inst.instruction |= v; +- return TRUE; +- } ++ /* LDR should not use lead in a flag-setting instruction being ++ chosen so we do not check whether movs can be used. */ + +- if (ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v6t2) ++ if ((ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v6t2) + || ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v6t2_v8m)) ++ && inst.operands[i].reg != 13 ++ && inst.operands[i].reg != 15) + { + /* Check if on thumb2 it can be done with a mov.w, mvn or + movw instruction. */ +@@ -8326,6 +8369,12 @@ do_adr (void) + inst.reloc.type = BFD_RELOC_ARM_IMMEDIATE; + inst.reloc.pc_rel = 1; + inst.reloc.exp.X_add_number -= 8; ++ ++ if (inst.reloc.exp.X_op == O_symbol ++ && inst.reloc.exp.X_add_symbol != NULL ++ && S_IS_DEFINED (inst.reloc.exp.X_add_symbol) ++ && THUMB_IS_FUNC (inst.reloc.exp.X_add_symbol)) ++ inst.reloc.exp.X_add_number += 1; + } + + /* This is a pseudo-op of the form "adrl rd, label" to be converted +@@ -8344,6 +8393,12 @@ do_adrl (void) + inst.reloc.pc_rel = 1; + inst.size = INSN_SIZE * 2; + inst.reloc.exp.X_add_number -= 8; ++ ++ if (inst.reloc.exp.X_op == O_symbol ++ && inst.reloc.exp.X_add_symbol != NULL ++ && S_IS_DEFINED (inst.reloc.exp.X_add_symbol) ++ && THUMB_IS_FUNC (inst.reloc.exp.X_add_symbol)) ++ inst.reloc.exp.X_add_number += 1; + } + + static void +@@ -8622,7 +8677,7 @@ do_co_reg (void) + || inst.instruction == 0xfe000010) + /* MCR, MCR2 */ + reject_bad_reg (Rd); +- else ++ else if (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v8)) + /* MRC, MRC2 */ + constraint (Rd == REG_SP, BAD_SP); + } +@@ -8691,6 +8746,14 @@ do_co_reg2c (void) + constraint (Rn == REG_PC, BAD_PC); + } + ++ /* Only check the MRRC{2} variants. */ ++ if ((inst.instruction & 0x0FF00000) == 0x0C500000) ++ { ++ /* If Rd == Rn, error that the operation is ++ unpredictable (example MRRC p3,#1,r1,r1,c4). */ ++ constraint (Rd == Rn, BAD_OVERLAP); ++ } ++ + inst.instruction |= inst.operands[0].reg << 8; + inst.instruction |= inst.operands[1].imm << 4; + inst.instruction |= Rd << 12; +@@ -8916,7 +8979,7 @@ check_ldr_r15_aligned (void) + && (inst.operands[0].reg == REG_PC + && inst.operands[1].reg == REG_PC + && (inst.reloc.exp.X_add_number & 0x3)), +- _("ldr to register 15 must be 4-byte alligned")); ++ _("ldr to register 15 must be 4-byte aligned")); + } + + static void +@@ -9025,9 +9088,9 @@ do_mov16 (void) + + top = (inst.instruction & 0x00400000) != 0; + constraint (top && inst.reloc.type == BFD_RELOC_ARM_MOVW, +- _(":lower16: not allowed this instruction")); ++ _(":lower16: not allowed in this instruction")); + constraint (!top && inst.reloc.type == BFD_RELOC_ARM_MOVT, +- _(":upper16: not allowed instruction")); ++ _(":upper16: not allowed in this instruction")); + inst.instruction |= inst.operands[0].reg << 12; + if (inst.reloc.type == BFD_RELOC_UNUSED) + { +@@ -9079,6 +9142,11 @@ do_vmrs (void) + return; + } + ++ /* MVFR2 is only valid at ARMv8-A. */ ++ if (inst.operands[1].reg == 5) ++ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_armv8), ++ _(BAD_FPU)); ++ + /* APSR_ sets isvec. All other refs to PC are illegal. */ + if (!inst.operands[0].isvec && Rt == REG_PC) + { +@@ -9105,6 +9173,11 @@ do_vmsr (void) + return; + } + ++ /* MVFR2 is only valid for ARMv8-A. */ ++ if (inst.operands[0].reg == 5) ++ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_armv8), ++ _(BAD_FPU)); ++ + /* If we get through parsing the register name, we just insert the number + generated into the instruction without further validation. */ + inst.instruction |= (inst.operands[0].reg << 16); +@@ -10453,7 +10526,7 @@ do_t_add_sub_w (void) + } + + /* Parse an add or subtract instruction. We get here with inst.instruction +- equalling any of THUMB_OPCODE_add, adds, sub, or subs. */ ++ equaling any of THUMB_OPCODE_add, adds, sub, or subs. */ + + static void + do_t_add_sub (void) +@@ -10484,7 +10557,8 @@ do_t_add_sub (void) + { + int add; + +- constraint (Rd == REG_SP && Rs != REG_SP, BAD_SP); ++ if (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v8)) ++ constraint (Rd == REG_SP && Rs != REG_SP, BAD_SP); + + add = (inst.instruction == T_MNEM_add + || inst.instruction == T_MNEM_adds); +@@ -10608,7 +10682,8 @@ do_t_add_sub (void) + } + + constraint (Rd == REG_PC, BAD_PC); +- constraint (Rd == REG_SP && Rs != REG_SP, BAD_SP); ++ if (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v8)) ++ constraint (Rd == REG_SP && Rs != REG_SP, BAD_SP); + constraint (Rs == REG_PC, BAD_PC); + reject_bad_reg (Rn); + +@@ -10701,9 +10776,14 @@ do_t_adr (void) + inst.reloc.type = BFD_RELOC_ARM_THUMB_ADD; + inst.reloc.exp.X_add_number -= 4; /* PC relative adjust. */ + inst.reloc.pc_rel = 1; +- + inst.instruction |= Rd << 4; + } ++ ++ if (inst.reloc.exp.X_op == O_symbol ++ && inst.reloc.exp.X_add_symbol != NULL ++ && S_IS_DEFINED (inst.reloc.exp.X_add_symbol) ++ && THUMB_IS_FUNC (inst.reloc.exp.X_add_symbol)) ++ inst.reloc.exp.X_add_number += 1; + } + + /* Arithmetic instructions for which there is just one 16-bit +@@ -11856,7 +11936,8 @@ do_t_mov_cmp (void) + /* This is mov.w. */ + constraint (Rn == REG_PC, BAD_PC); + constraint (Rm == REG_PC, BAD_PC); +- constraint (Rn == REG_SP && Rm == REG_SP, BAD_SP); ++ if (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v8)) ++ constraint (Rn == REG_SP && Rm == REG_SP, BAD_SP); + } + } + else +@@ -12082,12 +12163,12 @@ do_t_mov16 (void) + top = (inst.instruction & 0x00800000) != 0; + if (inst.reloc.type == BFD_RELOC_ARM_MOVW) + { +- constraint (top, _(":lower16: not allowed this instruction")); ++ constraint (top, _(":lower16: not allowed in this instruction")); + inst.reloc.type = BFD_RELOC_ARM_THUMB_MOVW; + } + else if (inst.reloc.type == BFD_RELOC_ARM_MOVT) + { +- constraint (!top, _(":upper16: not allowed this instruction")); ++ constraint (!top, _(":upper16: not allowed in this instruction")); + inst.reloc.type = BFD_RELOC_ARM_THUMB_MOVT; + } + +@@ -13049,17 +13130,6 @@ do_t_sxth (void) + static void + do_t_swi (void) + { +- /* We have to do the following check manually as ARM_EXT_OS only applies +- to ARM_EXT_V6M. */ +- if (ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v6m)) +- { +- if (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_os) +- /* This only applies to the v6m howver, not later architectures. */ +- && ! ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v7)) +- as_bad (_("SVC is not permitted on this architecture")); +- ARM_MERGE_FEATURE_SETS (thumb_arch_used, thumb_arch_used, arm_ext_os); +- } +- + inst.reloc.type = BFD_RELOC_ARM_SWI; + } + +@@ -13077,7 +13147,8 @@ do_t_tb (void) + Rn = inst.operands[0].reg; + Rm = inst.operands[0].imm; + +- constraint (Rn == REG_SP, BAD_SP); ++ if (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v8)) ++ constraint (Rn == REG_SP, BAD_SP); + reject_bad_reg (Rm); + + constraint (!half && inst.operands[0].shifted, +@@ -13317,6 +13388,8 @@ NEON_ENC_TAB + X(3, (D, Q, S), MIXED), \ + X(4, (D, D, D, I), DOUBLE), \ + X(4, (Q, Q, Q, I), QUAD), \ ++ X(4, (D, D, S, I), DOUBLE), \ ++ X(4, (Q, Q, S, I), QUAD), \ + X(2, (F, F), SINGLE), \ + X(3, (F, F, F), SINGLE), \ + X(2, (F, I), SINGLE), \ +@@ -14390,6 +14463,11 @@ static void + do_vfp_nsyn_push (void) + { + nsyn_insert_sp (); ++ ++ constraint (inst.operands[1].imm < 1 || inst.operands[1].imm > 16, ++ _("register list must contain at least 1 and at most 16 " ++ "registers")); ++ + if (inst.operands[1].issingle) + do_vfp_nsyn_opcode ("fstmdbs"); + else +@@ -14400,6 +14478,11 @@ static void + do_vfp_nsyn_pop (void) + { + nsyn_insert_sp (); ++ ++ constraint (inst.operands[1].imm < 1 || inst.operands[1].imm > 16, ++ _("register list must contain at least 1 and at most 16 " ++ "registers")); ++ + if (inst.operands[1].issingle) + do_vfp_nsyn_opcode ("fldmias"); + else +@@ -14952,7 +15035,14 @@ do_neon_ceq (void) + scalars, which are encoded in 5 bits, M : Rm. + For 16-bit scalars, the register is encoded in Rm[2:0] and the index in + M:Rm[3], and for 32-bit scalars, the register is encoded in Rm[3:0] and the +- index in M. */ ++ index in M. ++ ++ Dot Product instructions are similar to multiply instructions except elsize ++ should always be 32. ++ ++ This function translates SCALAR, which is GAS's internal encoding of indexed ++ scalar register, to raw encoding. There is also register and index range ++ check based on ELSIZE. */ + + static unsigned + neon_scalar_for_mul (unsigned scalar, unsigned elsize) +@@ -17220,6 +17310,153 @@ do_vrintm (void) + do_vrint_1 (neon_cvt_mode_m); + } + ++static unsigned ++neon_scalar_for_vcmla (unsigned opnd, unsigned elsize) ++{ ++ unsigned regno = NEON_SCALAR_REG (opnd); ++ unsigned elno = NEON_SCALAR_INDEX (opnd); ++ ++ if (elsize == 16 && elno < 2 && regno < 16) ++ return regno | (elno << 4); ++ else if (elsize == 32 && elno == 0) ++ return regno; ++ ++ first_error (_("scalar out of range")); ++ return 0; ++} ++ ++static void ++do_vcmla (void) ++{ ++ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_neon_ext_armv8), ++ _(BAD_FPU)); ++ constraint (inst.reloc.exp.X_op != O_constant, _("expression too complex")); ++ unsigned rot = inst.reloc.exp.X_add_number; ++ constraint (rot != 0 && rot != 90 && rot != 180 && rot != 270, ++ _("immediate out of range")); ++ rot /= 90; ++ if (inst.operands[2].isscalar) ++ { ++ enum neon_shape rs = neon_select_shape (NS_DDSI, NS_QQSI, NS_NULL); ++ unsigned size = neon_check_type (3, rs, N_EQK, N_EQK, ++ N_KEY | N_F16 | N_F32).size; ++ unsigned m = neon_scalar_for_vcmla (inst.operands[2].reg, size); ++ inst.is_neon = 1; ++ inst.instruction = 0xfe000800; ++ inst.instruction |= LOW4 (inst.operands[0].reg) << 12; ++ inst.instruction |= HI1 (inst.operands[0].reg) << 22; ++ inst.instruction |= LOW4 (inst.operands[1].reg) << 16; ++ inst.instruction |= HI1 (inst.operands[1].reg) << 7; ++ inst.instruction |= LOW4 (m); ++ inst.instruction |= HI1 (m) << 5; ++ inst.instruction |= neon_quad (rs) << 6; ++ inst.instruction |= rot << 20; ++ inst.instruction |= (size == 32) << 23; ++ } ++ else ++ { ++ enum neon_shape rs = neon_select_shape (NS_DDDI, NS_QQQI, NS_NULL); ++ unsigned size = neon_check_type (3, rs, N_EQK, N_EQK, ++ N_KEY | N_F16 | N_F32).size; ++ neon_three_same (neon_quad (rs), 0, -1); ++ inst.instruction &= 0x00ffffff; /* Undo neon_dp_fixup. */ ++ inst.instruction |= 0xfc200800; ++ inst.instruction |= rot << 23; ++ inst.instruction |= (size == 32) << 20; ++ } ++} ++ ++static void ++do_vcadd (void) ++{ ++ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_neon_ext_armv8), ++ _(BAD_FPU)); ++ constraint (inst.reloc.exp.X_op != O_constant, _("expression too complex")); ++ unsigned rot = inst.reloc.exp.X_add_number; ++ constraint (rot != 90 && rot != 270, _("immediate out of range")); ++ enum neon_shape rs = neon_select_shape (NS_DDDI, NS_QQQI, NS_NULL); ++ unsigned size = neon_check_type (3, rs, N_EQK, N_EQK, ++ N_KEY | N_F16 | N_F32).size; ++ neon_three_same (neon_quad (rs), 0, -1); ++ inst.instruction &= 0x00ffffff; /* Undo neon_dp_fixup. */ ++ inst.instruction |= 0xfc800800; ++ inst.instruction |= (rot == 270) << 24; ++ inst.instruction |= (size == 32) << 20; ++} ++ ++/* Dot Product instructions encoding support. */ ++ ++static void ++do_neon_dotproduct (int unsigned_p) ++{ ++ enum neon_shape rs; ++ unsigned scalar_oprd2 = 0; ++ int high8; ++ ++ if (inst.cond != COND_ALWAYS) ++ as_warn (_("Dot Product instructions cannot be conditional, the behaviour " ++ "is UNPREDICTABLE")); ++ ++ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_neon_ext_armv8), ++ _(BAD_FPU)); ++ ++ /* Dot Product instructions are in three-same D/Q register format or the third ++ operand can be a scalar index register. */ ++ if (inst.operands[2].isscalar) ++ { ++ scalar_oprd2 = neon_scalar_for_mul (inst.operands[2].reg, 32); ++ high8 = 0xfe000000; ++ rs = neon_select_shape (NS_DDS, NS_QQS, NS_NULL); ++ } ++ else ++ { ++ high8 = 0xfc000000; ++ rs = neon_select_shape (NS_DDD, NS_QQQ, NS_NULL); ++ } ++ ++ if (unsigned_p) ++ neon_check_type (3, rs, N_EQK, N_EQK, N_KEY | N_U8); ++ else ++ neon_check_type (3, rs, N_EQK, N_EQK, N_KEY | N_S8); ++ ++ /* The "U" bit in traditional Three Same encoding is fixed to 0 for Dot ++ Product instruction, so we pass 0 as the "ubit" parameter. And the ++ "Size" field are fixed to 0x2, so we pass 32 as the "size" parameter. */ ++ neon_three_same (neon_quad (rs), 0, 32); ++ ++ /* Undo neon_dp_fixup. Dot Product instructions are using a slightly ++ different NEON three-same encoding. */ ++ inst.instruction &= 0x00ffffff; ++ inst.instruction |= high8; ++ /* Encode 'U' bit which indicates signedness. */ ++ inst.instruction |= (unsigned_p ? 1 : 0) << 4; ++ /* Re-encode operand2 if it's indexed scalar operand. What has been encoded ++ from inst.operand[2].reg in neon_three_same is GAS's internal encoding, not ++ the instruction encoding. */ ++ if (inst.operands[2].isscalar) ++ { ++ inst.instruction &= 0xffffffd0; ++ inst.instruction |= LOW4 (scalar_oprd2); ++ inst.instruction |= HI1 (scalar_oprd2) << 5; ++ } ++} ++ ++/* Dot Product instructions for signed integer. */ ++ ++static void ++do_neon_dotproduct_s (void) ++{ ++ return do_neon_dotproduct (0); ++} ++ ++/* Dot Product instructions for unsigned integer. */ ++ ++static void ++do_neon_dotproduct_u (void) ++{ ++ return do_neon_dotproduct (1); ++} ++ + /* Crypto v1 instructions. */ + static void + do_crypto_2op_1 (unsigned elttype, int op) +@@ -17401,6 +17638,16 @@ do_crc32cw (void) + do_crc32_1 (1, 2); + } + ++static void ++do_vjcvt (void) ++{ ++ constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_armv8), ++ _(BAD_FPU)); ++ neon_check_type (2, NS_FD, N_S32, N_F64); ++ do_vfp_sp_dp_cvt (); ++ do_vfp_cond_or_thumb (); ++} ++ + + /* Overall per-instruction processing. */ + +@@ -17755,7 +18002,7 @@ opcode_lookup (char **str) + case OT_odd_infix_unc: + if (!unified_syntax) + return 0; +- /* else fall through */ ++ /* Fall through. */ + + case OT_csuffix: + case OT_csuffixF: +@@ -17878,7 +18125,7 @@ now_it_add_mask (int cond) + set_it_insn_type_last () ditto + in_it_block () ditto + it_fsm_post_encode () from md_assemble () +- force_automatic_it_block_close () from label habdling functions ++ force_automatic_it_block_close () from label handling functions + + Rationale: + 1) md_assemble () calls it_fsm_pre_encode () before calling tencode (), +@@ -17911,7 +18158,7 @@ now_it_add_mask (int cond) + for covering other cases. + + Calling handle_it_state () may not transition the IT block state to +- OUTSIDE_IT_BLOCK immediatelly, since the (current) state could be ++ OUTSIDE_IT_BLOCK immediately, since the (current) state could be + still queried. Instead, if the FSM determines that the state should + be transitioned to OUTSIDE_IT_BLOCK, a flag is marked to be closed + after the tencode () function: that's what it_fsm_post_encode () does. +@@ -18002,7 +18249,7 @@ handle_it_state (void) + switch (inst.it_insn_type) + { + case OUTSIDE_IT_INSN: +- /* The closure of the block shall happen immediatelly, ++ /* The closure of the block shall happen immediately, + so any in_it_block () call reports the block as closed. */ + force_automatic_it_block_close (); + break; +@@ -18236,6 +18483,13 @@ t32_insn_ok (arm_feature_set arch, const + && opcode->tencode == do_t_branch) + return TRUE; + ++ /* MOV accepts T1/T3 encodings under Baseline, T3 encoding is 32bit. */ ++ if (ARM_CPU_HAS_FEATURE (arch, arm_ext_v8m) ++ && opcode->tencode == do_t_mov_cmp ++ /* Make sure CMP instruction is not affected. */ ++ && opcode->aencode == do_mov) ++ return TRUE; ++ + /* Wide instruction variants of all instructions with narrow *and* wide + variants become available with ARMv6t2. Other opcodes are either + narrow-only or wide-only and are thus available if OPCODE is valid. */ +@@ -18296,7 +18550,10 @@ md_assemble (char *str) + || (thumb_mode == 1 + && !ARM_CPU_HAS_FEATURE (variant, *opcode->tvariant))) + { +- as_bad (_("selected processor does not support `%s' in Thumb mode"), str); ++ if (opcode->tencode == do_t_swi) ++ as_bad (_("SVC is not permitted on this architecture")); ++ else ++ as_bad (_("selected processor does not support `%s' in Thumb mode"), str); + return; + } + if (inst.cond != COND_ALWAYS && !unified_syntax +@@ -18663,6 +18920,7 @@ static const struct reg_entry reg_names[ + REGDEF(FPINST,9,VFC), REGDEF(FPINST2,10,VFC), + REGDEF(mvfr0,7,VFC), REGDEF(mvfr1,6,VFC), + REGDEF(MVFR0,7,VFC), REGDEF(MVFR1,6,VFC), ++ REGDEF(mvfr2,5,VFC), REGDEF(MVFR2,5,VFC), + + /* Maverick DSP coprocessor registers. */ + REGSET(mvf,MVF), REGSET(mvd,MVD), REGSET(mvfx,MVFX), REGSET(mvdx,MVDX), +@@ -18780,24 +19038,32 @@ static const struct asm_psr psrs[] = + /* Table of V7M psr names. */ + static const struct asm_psr v7m_psrs[] = + { +- {"apsr", 0 }, {"APSR", 0 }, +- {"iapsr", 1 }, {"IAPSR", 1 }, +- {"eapsr", 2 }, {"EAPSR", 2 }, +- {"psr", 3 }, {"PSR", 3 }, +- {"xpsr", 3 }, {"XPSR", 3 }, {"xPSR", 3 }, +- {"ipsr", 5 }, {"IPSR", 5 }, +- {"epsr", 6 }, {"EPSR", 6 }, +- {"iepsr", 7 }, {"IEPSR", 7 }, +- {"msp", 8 }, {"MSP", 8 }, {"msp_s", 8 }, {"MSP_S", 8 }, +- {"psp", 9 }, {"PSP", 9 }, {"psp_s", 9 }, {"PSP_S", 9 }, +- {"primask", 16}, {"PRIMASK", 16}, +- {"basepri", 17}, {"BASEPRI", 17}, +- {"basepri_max", 18}, {"BASEPRI_MAX", 18}, +- {"basepri_max", 18}, {"BASEPRI_MASK", 18}, /* Typo, preserved for backwards compatibility. */ +- {"faultmask", 19}, {"FAULTMASK", 19}, +- {"control", 20}, {"CONTROL", 20}, +- {"msp_ns", 0x88}, {"MSP_NS", 0x88}, +- {"psp_ns", 0x89}, {"PSP_NS", 0x89} ++ {"apsr", 0x0 }, {"APSR", 0x0 }, ++ {"iapsr", 0x1 }, {"IAPSR", 0x1 }, ++ {"eapsr", 0x2 }, {"EAPSR", 0x2 }, ++ {"psr", 0x3 }, {"PSR", 0x3 }, ++ {"xpsr", 0x3 }, {"XPSR", 0x3 }, {"xPSR", 3 }, ++ {"ipsr", 0x5 }, {"IPSR", 0x5 }, ++ {"epsr", 0x6 }, {"EPSR", 0x6 }, ++ {"iepsr", 0x7 }, {"IEPSR", 0x7 }, ++ {"msp", 0x8 }, {"MSP", 0x8 }, ++ {"psp", 0x9 }, {"PSP", 0x9 }, ++ {"msplim", 0xa }, {"MSPLIM", 0xa }, ++ {"psplim", 0xb }, {"PSPLIM", 0xb }, ++ {"primask", 0x10}, {"PRIMASK", 0x10}, ++ {"basepri", 0x11}, {"BASEPRI", 0x11}, ++ {"basepri_max", 0x12}, {"BASEPRI_MAX", 0x12}, ++ {"faultmask", 0x13}, {"FAULTMASK", 0x13}, ++ {"control", 0x14}, {"CONTROL", 0x14}, ++ {"msp_ns", 0x88}, {"MSP_NS", 0x88}, ++ {"psp_ns", 0x89}, {"PSP_NS", 0x89}, ++ {"msplim_ns", 0x8a}, {"MSPLIM_NS", 0x8a}, ++ {"psplim_ns", 0x8b}, {"PSPLIM_NS", 0x8b}, ++ {"primask_ns", 0x90}, {"PRIMASK_NS", 0x90}, ++ {"basepri_ns", 0x91}, {"BASEPRI_NS", 0x91}, ++ {"faultmask_ns", 0x93}, {"FAULTMASK_NS", 0x93}, ++ {"control_ns", 0x94}, {"CONTROL_NS", 0x94}, ++ {"sp_ns", 0x98}, {"SP_NS", 0x98 } + }; + + /* Table of all shift-in-operand names. */ +@@ -19112,8 +19378,6 @@ static const struct asm_opcode insns[] = + tC3("ldmia", 8900000, _ldmia, 2, (RRw, REGLST), ldmstm, t_ldmstm), + tC3("ldmfd", 8900000, _ldmia, 2, (RRw, REGLST), ldmstm, t_ldmstm), + +- TCE("swi", f000000, df00, 1, (EXPi), swi, t_swi), +- TCE("svc", f000000, df00, 1, (EXPi), swi, t_swi), + tCE("b", a000000, _b, 1, (EXPr), branch, t_branch), + TCE("bl", b000000, f000f800, 1, (EXPr), bl, t_branch23), + +@@ -19142,6 +19406,12 @@ static const struct asm_opcode insns[] = + TC3("rsbs", 0700000, ebd00000, 3, (RR, oRR, SH), arit, t_rsb), + + #undef THUMB_VARIANT ++#define THUMB_VARIANT & arm_ext_os ++ ++ TCE("swi", f000000, df00, 1, (EXPi), swi, t_swi), ++ TCE("svc", f000000, df00, 1, (EXPi), swi, t_swi), ++ ++#undef THUMB_VARIANT + #define THUMB_VARIANT & arm_ext_v6 + + TCE("cpy", 1a00000, 4600, 2, (RR, RR), rd_rm, t_cpy), +@@ -19729,6 +19999,21 @@ static const struct asm_opcode insns[] = + TUE ("esb", 320f010, f3af8010, 0, (), noargs, noargs), + + #undef ARM_VARIANT ++#define ARM_VARIANT & arm_ext_v8_3 ++#undef THUMB_VARIANT ++#define THUMB_VARIANT & arm_ext_v8_3 ++ NCE (vjcvt, eb90bc0, 2, (RVS, RVD), vjcvt), ++ NUF (vcmla, 0, 4, (RNDQ, RNDQ, RNDQ_RNSC, EXPi), vcmla), ++ NUF (vcadd, 0, 4, (RNDQ, RNDQ, RNDQ, EXPi), vcadd), ++ ++#undef ARM_VARIANT ++#define ARM_VARIANT & fpu_neon_ext_dotprod ++#undef THUMB_VARIANT ++#define THUMB_VARIANT & fpu_neon_ext_dotprod ++ NUF (vsdot, d00, 3, (RNDQ, RNDQ, RNDQ_RNSC), neon_dotproduct_s), ++ NUF (vudot, d00, 3, (RNDQ, RNDQ, RNDQ_RNSC), neon_dotproduct_u), ++ ++#undef ARM_VARIANT + #define ARM_VARIANT & fpu_fpa_ext_v1 /* Core FPA instruction set (V1). */ + #undef THUMB_VARIANT + #define THUMB_VARIANT NULL +@@ -21706,7 +21991,7 @@ arm_frag_align_code (int n, int max) + Note - despite the name this initialisation is not done when the frag + is created, but only when its type is assigned. A frag can be created + and used a long time before its type is set, so beware of assuming that +- this initialisationis performed first. */ ++ this initialisation is performed first. */ + + #ifndef OBJ_ELF + void +@@ -21720,7 +22005,7 @@ arm_init_frag (fragS * fragP, int max_ch + void + arm_init_frag (fragS * fragP, int max_chars) + { +- int frag_thumb_mode; ++ bfd_boolean frag_thumb_mode; + + /* If the current ARM vs THUMB mode has not already + been recorded into this frag then do so now. */ +@@ -22731,6 +23016,23 @@ md_apply_fix (fixS * fixP, + changing the opcode. */ + if (newimm == (unsigned int) FAIL) + newimm = negate_data_op (&temp, value); ++ /* MOV accepts both ARM modified immediate (A1 encoding) and ++ UINT16 (A2 encoding) when possible, MOVW only accepts UINT16. ++ When disassembling, MOV is preferred when there is no encoding ++ overlap. */ ++ if (newimm == (unsigned int) FAIL ++ && ((temp >> DATA_OP_SHIFT) & 0xf) == OPCODE_MOV ++ && ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v6t2) ++ && !((temp >> SBIT_SHIFT) & 0x1) ++ && value >= 0 && value <= 0xffff) ++ { ++ /* Clear bits[23:20] to change encoding from A1 to A2. */ ++ temp &= 0xff0fffff; ++ /* Encoding high 4bits imm. Code below will encode the remaining ++ low 12bits. */ ++ temp |= (value & 0x0000f000) << 4; ++ newimm = value & 0x00000fff; ++ } + } + + if (newimm == (unsigned int) FAIL) +@@ -22816,6 +23118,7 @@ md_apply_fix (fixS * fixP, + case BFD_RELOC_ARM_OFFSET_IMM: + if (!fixP->fx_done && seg->use_rela_p) + value = 0; ++ /* Fall through. */ + + case BFD_RELOC_ARM_LITERAL: + sign = value > 0; +@@ -23046,32 +23349,59 @@ md_apply_fix (fixS * fixP, + newval |= md_chars_to_number (buf+2, THUMB_SIZE); + + newimm = FAIL; +- if (fixP->fx_r_type == BFD_RELOC_ARM_T32_IMMEDIATE ++ if ((fixP->fx_r_type == BFD_RELOC_ARM_T32_IMMEDIATE ++ /* ARMv8-M Baseline MOV will reach here, but it doesn't support ++ Thumb2 modified immediate encoding (T2). */ ++ && ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v6t2)) + || fixP->fx_r_type == BFD_RELOC_ARM_T32_ADD_IMM) + { + newimm = encode_thumb32_immediate (value); + if (newimm == (unsigned int) FAIL) + newimm = thumb32_negate_data_op (&newval, value); + } +- if (fixP->fx_r_type != BFD_RELOC_ARM_T32_IMMEDIATE +- && newimm == (unsigned int) FAIL) ++ if (newimm == (unsigned int) FAIL) + { +- /* Turn add/sum into addw/subw. */ +- if (fixP->fx_r_type == BFD_RELOC_ARM_T32_ADD_IMM) +- newval = (newval & 0xfeffffff) | 0x02000000; +- /* No flat 12-bit imm encoding for addsw/subsw. */ +- if ((newval & 0x00100000) == 0) ++ if (fixP->fx_r_type != BFD_RELOC_ARM_T32_IMMEDIATE) + { +- /* 12 bit immediate for addw/subw. */ +- if (value < 0) ++ /* Turn add/sum into addw/subw. */ ++ if (fixP->fx_r_type == BFD_RELOC_ARM_T32_ADD_IMM) ++ newval = (newval & 0xfeffffff) | 0x02000000; ++ /* No flat 12-bit imm encoding for addsw/subsw. */ ++ if ((newval & 0x00100000) == 0) + { +- value = -value; +- newval ^= 0x00a00000; ++ /* 12 bit immediate for addw/subw. */ ++ if (value < 0) ++ { ++ value = -value; ++ newval ^= 0x00a00000; ++ } ++ if (value > 0xfff) ++ newimm = (unsigned int) FAIL; ++ else ++ newimm = value; ++ } ++ } ++ else ++ { ++ /* MOV accepts both Thumb2 modified immediate (T2 encoding) and ++ UINT16 (T3 encoding), MOVW only accepts UINT16. When ++ disassembling, MOV is preferred when there is no encoding ++ overlap. ++ NOTE: MOV is using ORR opcode under Thumb 2 mode. */ ++ if (((newval >> T2_DATA_OP_SHIFT) & 0xf) == T2_OPCODE_ORR ++ && ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v6t2_v8m) ++ && !((newval >> T2_SBIT_SHIFT) & 0x1) ++ && value >= 0 && value <=0xffff) ++ { ++ /* Toggle bit[25] to change encoding from T2 to T3. */ ++ newval ^= 1 << 25; ++ /* Clear bits[19:16]. */ ++ newval &= 0xfff0ffff; ++ /* Encoding high 4bits imm. Code below will encode the ++ remaining low 12bits. */ ++ newval |= (value & 0x0000f000) << 4; ++ newimm = value & 0x00000fff; + } +- if (value > 0xfff) +- newimm = (unsigned int) FAIL; +- else +- newimm = value; + } + } + +@@ -23174,6 +23504,7 @@ md_apply_fix (fixS * fixP, + newval = md_chars_to_number (buf, INSN_SIZE); + fixP->fx_done = 0; + } ++ /* Fall through. */ + + case BFD_RELOC_ARM_PLT32: + #endif +@@ -23210,7 +23541,7 @@ md_apply_fix (fixS * fixP, + /* We are going to store value (shifted right by two) in the + instruction, in a 24 bit, signed field. Bits 26 through 32 either + all clear or all set and bit 0 must be clear. For B/BL bit 1 must +- also be be clear. */ ++ also be clear. */ + if (value & temp) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("misaligned branch destination")); +@@ -24066,6 +24397,7 @@ tc_gen_reloc (asection *section, fixS *f + code = BFD_RELOC_8_PCREL; + break; + } ++ /* Fall through. */ + + case BFD_RELOC_16: + if (fixp->fx_pcrel) +@@ -24073,6 +24405,7 @@ tc_gen_reloc (asection *section, fixS *f + code = BFD_RELOC_16_PCREL; + break; + } ++ /* Fall through. */ + + case BFD_RELOC_32: + if (fixp->fx_pcrel) +@@ -24080,6 +24413,7 @@ tc_gen_reloc (asection *section, fixS *f + code = BFD_RELOC_32_PCREL; + break; + } ++ /* Fall through. */ + + case BFD_RELOC_ARM_MOVW: + if (fixp->fx_pcrel) +@@ -24087,6 +24421,7 @@ tc_gen_reloc (asection *section, fixS *f + code = BFD_RELOC_ARM_MOVW_PCREL; + break; + } ++ /* Fall through. */ + + case BFD_RELOC_ARM_MOVT: + if (fixp->fx_pcrel) +@@ -24094,6 +24429,7 @@ tc_gen_reloc (asection *section, fixS *f + code = BFD_RELOC_ARM_MOVT_PCREL; + break; + } ++ /* Fall through. */ + + case BFD_RELOC_ARM_THUMB_MOVW: + if (fixp->fx_pcrel) +@@ -24101,6 +24437,7 @@ tc_gen_reloc (asection *section, fixS *f + code = BFD_RELOC_ARM_THUMB_MOVW_PCREL; + break; + } ++ /* Fall through. */ + + case BFD_RELOC_ARM_THUMB_MOVT: + if (fixp->fx_pcrel) +@@ -24108,6 +24445,7 @@ tc_gen_reloc (asection *section, fixS *f + code = BFD_RELOC_ARM_THUMB_MOVT_PCREL; + break; + } ++ /* Fall through. */ + + case BFD_RELOC_NONE: + case BFD_RELOC_ARM_PCREL_BRANCH: +@@ -24791,7 +25129,12 @@ md_begin (void) + mcpu_cpu_opt = legacy_cpu; + } + else if (!mcpu_cpu_opt) +- mcpu_cpu_opt = march_cpu_opt; ++ { ++ mcpu_cpu_opt = march_cpu_opt; ++ dyn_mcpu_ext_opt = dyn_march_ext_opt; ++ /* Avoid double free in arm_md_end. */ ++ dyn_march_ext_opt = NULL; ++ } + + if (legacy_fpu) + { +@@ -24831,16 +25174,22 @@ md_begin (void) + mcpu_cpu_opt = &cpu_default; + selected_cpu = cpu_default; + } +- else if (no_cpu_selected ()) +- selected_cpu = cpu_default; ++ else if (dyn_mcpu_ext_opt) ++ ARM_MERGE_FEATURE_SETS (selected_cpu, *mcpu_cpu_opt, *dyn_mcpu_ext_opt); ++ else ++ selected_cpu = *mcpu_cpu_opt; + #else +- if (mcpu_cpu_opt) ++ if (mcpu_cpu_opt && dyn_mcpu_ext_opt) ++ ARM_MERGE_FEATURE_SETS (selected_cpu, *mcpu_cpu_opt, *dyn_mcpu_ext_opt); ++ else if (mcpu_cpu_opt) + selected_cpu = *mcpu_cpu_opt; + else + mcpu_cpu_opt = &arm_arch_any; + #endif + + ARM_MERGE_FEATURE_SETS (cpu_variant, *mcpu_cpu_opt, *mfpu_opt); ++ if (dyn_mcpu_ext_opt) ++ ARM_MERGE_FEATURE_SETS (cpu_variant, cpu_variant, *dyn_mcpu_ext_opt); + + autoselect_thumb_from_cpu_variant (); + +@@ -25215,6 +25564,7 @@ struct arm_cpu_option_table + const char *name; + size_t name_len; + const arm_feature_set value; ++ const arm_feature_set ext; + /* For some CPUs we assume an FPU unless the user explicitly sets + -mfpu=... */ + const arm_feature_set default_fpu; +@@ -25225,174 +25575,387 @@ struct arm_cpu_option_table + + /* This list should, at a minimum, contain all the cpu names + recognized by GCC. */ +-#define ARM_CPU_OPT(N, V, DF, CN) { N, sizeof (N) - 1, V, DF, CN } ++#define ARM_CPU_OPT(N, CN, V, E, DF) { N, sizeof (N) - 1, V, E, DF, CN } + static const struct arm_cpu_option_table arm_cpus[] = + { +- ARM_CPU_OPT ("all", ARM_ANY, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm1", ARM_ARCH_V1, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm2", ARM_ARCH_V2, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm250", ARM_ARCH_V2S, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm3", ARM_ARCH_V2S, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm6", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm60", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm600", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm610", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm620", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm7", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm7m", ARM_ARCH_V3M, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm7d", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm7dm", ARM_ARCH_V3M, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm7di", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm7dmi", ARM_ARCH_V3M, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm70", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm700", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm700i", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm710", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm710t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm720", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm720t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm740t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm710c", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm7100", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm7500", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm7500fe", ARM_ARCH_V3, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm7t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm7tdmi", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm7tdmi-s", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm8", ARM_ARCH_V4, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm810", ARM_ARCH_V4, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("strongarm", ARM_ARCH_V4, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("strongarm1", ARM_ARCH_V4, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("strongarm110", ARM_ARCH_V4, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("strongarm1100", ARM_ARCH_V4, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("strongarm1110", ARM_ARCH_V4, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm9", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm920", ARM_ARCH_V4T, FPU_ARCH_FPA, "ARM920T"), +- ARM_CPU_OPT ("arm920t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm922t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm940t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("arm9tdmi", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("fa526", ARM_ARCH_V4, FPU_ARCH_FPA, NULL), +- ARM_CPU_OPT ("fa626", ARM_ARCH_V4, FPU_ARCH_FPA, NULL), ++ ARM_CPU_OPT ("all", NULL, ARM_ANY, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm1", NULL, ARM_ARCH_V1, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm2", NULL, ARM_ARCH_V2, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm250", NULL, ARM_ARCH_V2S, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm3", NULL, ARM_ARCH_V2S, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm6", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm60", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm600", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm610", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm620", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm7", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm7m", NULL, ARM_ARCH_V3M, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm7d", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm7dm", NULL, ARM_ARCH_V3M, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm7di", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm7dmi", NULL, ARM_ARCH_V3M, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm70", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm700", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm700i", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm710", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm710t", NULL, ARM_ARCH_V4T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm720", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm720t", NULL, ARM_ARCH_V4T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm740t", NULL, ARM_ARCH_V4T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm710c", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm7100", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm7500", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm7500fe", NULL, ARM_ARCH_V3, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm7t", NULL, ARM_ARCH_V4T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm7tdmi", NULL, ARM_ARCH_V4T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm7tdmi-s", NULL, ARM_ARCH_V4T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm8", NULL, ARM_ARCH_V4, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm810", NULL, ARM_ARCH_V4, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("strongarm", NULL, ARM_ARCH_V4, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("strongarm1", NULL, ARM_ARCH_V4, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("strongarm110", NULL, ARM_ARCH_V4, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("strongarm1100", NULL, ARM_ARCH_V4, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("strongarm1110", NULL, ARM_ARCH_V4, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm9", NULL, ARM_ARCH_V4T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm920", "ARM920T", ARM_ARCH_V4T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm920t", NULL, ARM_ARCH_V4T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm922t", NULL, ARM_ARCH_V4T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm940t", NULL, ARM_ARCH_V4T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("arm9tdmi", NULL, ARM_ARCH_V4T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("fa526", NULL, ARM_ARCH_V4, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ ARM_CPU_OPT ("fa626", NULL, ARM_ARCH_V4, ++ ARM_ARCH_NONE, ++ FPU_ARCH_FPA), ++ + /* For V5 or later processors we default to using VFP; but the user + should really set the FPU type explicitly. */ +- ARM_CPU_OPT ("arm9e-r0", ARM_ARCH_V5TExP, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("arm9e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("arm926ej", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, "ARM926EJ-S"), +- ARM_CPU_OPT ("arm926ejs", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, "ARM926EJ-S"), +- ARM_CPU_OPT ("arm926ej-s", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("arm946e-r0", ARM_ARCH_V5TExP, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("arm946e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, "ARM946E-S"), +- ARM_CPU_OPT ("arm946e-s", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("arm966e-r0", ARM_ARCH_V5TExP, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("arm966e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, "ARM966E-S"), +- ARM_CPU_OPT ("arm966e-s", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("arm968e-s", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("arm10t", ARM_ARCH_V5T, FPU_ARCH_VFP_V1, NULL), +- ARM_CPU_OPT ("arm10tdmi", ARM_ARCH_V5T, FPU_ARCH_VFP_V1, NULL), +- ARM_CPU_OPT ("arm10e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("arm1020", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, "ARM1020E"), +- ARM_CPU_OPT ("arm1020t", ARM_ARCH_V5T, FPU_ARCH_VFP_V1, NULL), +- ARM_CPU_OPT ("arm1020e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("arm1022e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("arm1026ejs", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, +- "ARM1026EJ-S"), +- ARM_CPU_OPT ("arm1026ej-s", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("fa606te", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("fa616te", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("fa626te", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("fmp626", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("fa726te", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("arm1136js", ARM_ARCH_V6, FPU_NONE, "ARM1136J-S"), +- ARM_CPU_OPT ("arm1136j-s", ARM_ARCH_V6, FPU_NONE, NULL), +- ARM_CPU_OPT ("arm1136jfs", ARM_ARCH_V6, FPU_ARCH_VFP_V2, +- "ARM1136JF-S"), +- ARM_CPU_OPT ("arm1136jf-s", ARM_ARCH_V6, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("mpcore", ARM_ARCH_V6K, FPU_ARCH_VFP_V2, "MPCore"), +- ARM_CPU_OPT ("mpcorenovfp", ARM_ARCH_V6K, FPU_NONE, "MPCore"), +- ARM_CPU_OPT ("arm1156t2-s", ARM_ARCH_V6T2, FPU_NONE, NULL), +- ARM_CPU_OPT ("arm1156t2f-s", ARM_ARCH_V6T2, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("arm1176jz-s", ARM_ARCH_V6KZ, FPU_NONE, NULL), +- ARM_CPU_OPT ("arm1176jzf-s", ARM_ARCH_V6KZ, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("cortex-a5", ARM_ARCH_V7A_MP_SEC, +- FPU_NONE, "Cortex-A5"), +- ARM_CPU_OPT ("cortex-a7", ARM_ARCH_V7VE, FPU_ARCH_NEON_VFP_V4, +- "Cortex-A7"), +- ARM_CPU_OPT ("cortex-a8", ARM_ARCH_V7A_SEC, +- ARM_FEATURE_COPROC (FPU_VFP_V3 +- | FPU_NEON_EXT_V1), +- "Cortex-A8"), +- ARM_CPU_OPT ("cortex-a9", ARM_ARCH_V7A_MP_SEC, +- ARM_FEATURE_COPROC (FPU_VFP_V3 +- | FPU_NEON_EXT_V1), +- "Cortex-A9"), +- ARM_CPU_OPT ("cortex-a12", ARM_ARCH_V7VE, FPU_ARCH_NEON_VFP_V4, +- "Cortex-A12"), +- ARM_CPU_OPT ("cortex-a15", ARM_ARCH_V7VE, FPU_ARCH_NEON_VFP_V4, +- "Cortex-A15"), +- ARM_CPU_OPT ("cortex-a17", ARM_ARCH_V7VE, FPU_ARCH_NEON_VFP_V4, +- "Cortex-A17"), +- ARM_CPU_OPT ("cortex-a32", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, +- "Cortex-A32"), +- ARM_CPU_OPT ("cortex-a35", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, +- "Cortex-A35"), +- ARM_CPU_OPT ("cortex-a53", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, +- "Cortex-A53"), +- ARM_CPU_OPT ("cortex-a57", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, +- "Cortex-A57"), +- ARM_CPU_OPT ("cortex-a72", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, +- "Cortex-A72"), +- ARM_CPU_OPT ("cortex-a73", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, +- "Cortex-A73"), +- ARM_CPU_OPT ("cortex-r4", ARM_ARCH_V7R, FPU_NONE, "Cortex-R4"), +- ARM_CPU_OPT ("cortex-r4f", ARM_ARCH_V7R, FPU_ARCH_VFP_V3D16, +- "Cortex-R4F"), +- ARM_CPU_OPT ("cortex-r5", ARM_ARCH_V7R_IDIV, +- FPU_NONE, "Cortex-R5"), +- ARM_CPU_OPT ("cortex-r7", ARM_ARCH_V7R_IDIV, +- FPU_ARCH_VFP_V3D16, +- "Cortex-R7"), +- ARM_CPU_OPT ("cortex-r8", ARM_ARCH_V7R_IDIV, +- FPU_ARCH_VFP_V3D16, +- "Cortex-R8"), +- ARM_CPU_OPT ("cortex-m7", ARM_ARCH_V7EM, FPU_NONE, "Cortex-M7"), +- ARM_CPU_OPT ("cortex-m4", ARM_ARCH_V7EM, FPU_NONE, "Cortex-M4"), +- ARM_CPU_OPT ("cortex-m3", ARM_ARCH_V7M, FPU_NONE, "Cortex-M3"), +- ARM_CPU_OPT ("cortex-m1", ARM_ARCH_V6SM, FPU_NONE, "Cortex-M1"), +- ARM_CPU_OPT ("cortex-m0", ARM_ARCH_V6SM, FPU_NONE, "Cortex-M0"), +- ARM_CPU_OPT ("cortex-m0plus", ARM_ARCH_V6SM, FPU_NONE, "Cortex-M0+"), +- ARM_CPU_OPT ("exynos-m1", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, +- "Samsung " \ +- "Exynos M1"), +- ARM_CPU_OPT ("qdf24xx", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, +- "Qualcomm " +- "QDF24XX"), ++ ARM_CPU_OPT ("arm9e-r0", NULL, ARM_ARCH_V5TExP, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm9e", NULL, ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm926ej", "ARM926EJ-S", ARM_ARCH_V5TEJ, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm926ejs", "ARM926EJ-S", ARM_ARCH_V5TEJ, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm926ej-s", NULL, ARM_ARCH_V5TEJ, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm946e-r0", NULL, ARM_ARCH_V5TExP, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm946e", "ARM946E-S", ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm946e-s", NULL, ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm966e-r0", NULL, ARM_ARCH_V5TExP, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm966e", "ARM966E-S", ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm966e-s", NULL, ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm968e-s", NULL, ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm10t", NULL, ARM_ARCH_V5T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V1), ++ ARM_CPU_OPT ("arm10tdmi", NULL, ARM_ARCH_V5T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V1), ++ ARM_CPU_OPT ("arm10e", NULL, ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm1020", "ARM1020E", ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm1020t", NULL, ARM_ARCH_V5T, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V1), ++ ARM_CPU_OPT ("arm1020e", NULL, ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm1022e", NULL, ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm1026ejs", "ARM1026EJ-S", ARM_ARCH_V5TEJ, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm1026ej-s", NULL, ARM_ARCH_V5TEJ, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("fa606te", NULL, ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("fa616te", NULL, ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("fa626te", NULL, ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("fmp626", NULL, ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("fa726te", NULL, ARM_ARCH_V5TE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm1136js", "ARM1136J-S", ARM_ARCH_V6, ++ ARM_ARCH_NONE, ++ FPU_NONE), ++ ARM_CPU_OPT ("arm1136j-s", NULL, ARM_ARCH_V6, ++ ARM_ARCH_NONE, ++ FPU_NONE), ++ ARM_CPU_OPT ("arm1136jfs", "ARM1136JF-S", ARM_ARCH_V6, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm1136jf-s", NULL, ARM_ARCH_V6, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("mpcore", "MPCore", ARM_ARCH_V6K, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("mpcorenovfp", "MPCore", ARM_ARCH_V6K, ++ ARM_ARCH_NONE, ++ FPU_NONE), ++ ARM_CPU_OPT ("arm1156t2-s", NULL, ARM_ARCH_V6T2, ++ ARM_ARCH_NONE, ++ FPU_NONE), ++ ARM_CPU_OPT ("arm1156t2f-s", NULL, ARM_ARCH_V6T2, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("arm1176jz-s", NULL, ARM_ARCH_V6KZ, ++ ARM_ARCH_NONE, ++ FPU_NONE), ++ ARM_CPU_OPT ("arm1176jzf-s", NULL, ARM_ARCH_V6KZ, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("cortex-a5", "Cortex-A5", ARM_ARCH_V7A, ++ ARM_FEATURE_CORE_LOW (ARM_EXT_MP | ARM_EXT_SEC), ++ FPU_NONE), ++ ARM_CPU_OPT ("cortex-a7", "Cortex-A7", ARM_ARCH_V7VE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_NEON_VFP_V4), ++ ARM_CPU_OPT ("cortex-a8", "Cortex-A8", ARM_ARCH_V7A, ++ ARM_FEATURE_CORE_LOW (ARM_EXT_SEC), ++ ARM_FEATURE_COPROC (FPU_VFP_V3 | FPU_NEON_EXT_V1)), ++ ARM_CPU_OPT ("cortex-a9", "Cortex-A9", ARM_ARCH_V7A, ++ ARM_FEATURE_CORE_LOW (ARM_EXT_MP | ARM_EXT_SEC), ++ ARM_FEATURE_COPROC (FPU_VFP_V3 | FPU_NEON_EXT_V1)), ++ ARM_CPU_OPT ("cortex-a12", "Cortex-A12", ARM_ARCH_V7VE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_NEON_VFP_V4), ++ ARM_CPU_OPT ("cortex-a15", "Cortex-A15", ARM_ARCH_V7VE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_NEON_VFP_V4), ++ ARM_CPU_OPT ("cortex-a17", "Cortex-A17", ARM_ARCH_V7VE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_NEON_VFP_V4), ++ ARM_CPU_OPT ("cortex-a32", "Cortex-A32", ARM_ARCH_V8A, ++ ARM_FEATURE_COPROC (CRC_EXT_ARMV8), ++ FPU_ARCH_CRYPTO_NEON_VFP_ARMV8), ++ ARM_CPU_OPT ("cortex-a35", "Cortex-A35", ARM_ARCH_V8A, ++ ARM_FEATURE_COPROC (CRC_EXT_ARMV8), ++ FPU_ARCH_CRYPTO_NEON_VFP_ARMV8), ++ ARM_CPU_OPT ("cortex-a53", "Cortex-A53", ARM_ARCH_V8A, ++ ARM_FEATURE_COPROC (CRC_EXT_ARMV8), ++ FPU_ARCH_CRYPTO_NEON_VFP_ARMV8), ++ ARM_CPU_OPT ("cortex-a55", "Cortex-A55", ARM_ARCH_V8_2A, ++ ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST), ++ FPU_ARCH_CRYPTO_NEON_VFP_ARMV8), ++ ARM_CPU_OPT ("cortex-a57", "Cortex-A57", ARM_ARCH_V8A, ++ ARM_FEATURE_COPROC (CRC_EXT_ARMV8), ++ FPU_ARCH_CRYPTO_NEON_VFP_ARMV8), ++ ARM_CPU_OPT ("cortex-a72", "Cortex-A72", ARM_ARCH_V8A, ++ ARM_FEATURE_COPROC (CRC_EXT_ARMV8), ++ FPU_ARCH_CRYPTO_NEON_VFP_ARMV8), ++ ARM_CPU_OPT ("cortex-a73", "Cortex-A73", ARM_ARCH_V8A, ++ ARM_FEATURE_COPROC (CRC_EXT_ARMV8), ++ FPU_ARCH_CRYPTO_NEON_VFP_ARMV8), ++ ARM_CPU_OPT ("cortex-a75", "Cortex-A75", ARM_ARCH_V8_2A, ++ ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST), ++ FPU_ARCH_CRYPTO_NEON_VFP_ARMV8), ++ ARM_CPU_OPT ("cortex-r4", "Cortex-R4", ARM_ARCH_V7R, ++ ARM_ARCH_NONE, ++ FPU_NONE), ++ ARM_CPU_OPT ("cortex-r4f", "Cortex-R4F", ARM_ARCH_V7R, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V3D16), ++ ARM_CPU_OPT ("cortex-r5", "Cortex-R5", ARM_ARCH_V7R, ++ ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV), ++ FPU_NONE), ++ ARM_CPU_OPT ("cortex-r7", "Cortex-R7", ARM_ARCH_V7R, ++ ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV), ++ FPU_ARCH_VFP_V3D16), ++ ARM_CPU_OPT ("cortex-r8", "Cortex-R8", ARM_ARCH_V7R, ++ ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV), ++ FPU_ARCH_VFP_V3D16), ++ ARM_CPU_OPT ("cortex-r52", "Cortex-R52", ARM_ARCH_V8R, ++ ARM_FEATURE_COPROC (CRC_EXT_ARMV8), ++ FPU_ARCH_NEON_VFP_ARMV8), ++ ARM_CPU_OPT ("cortex-m33", "Cortex-M33", ARM_ARCH_V8M_MAIN, ++ ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP | ARM_EXT_V6_DSP), ++ FPU_NONE), ++ ARM_CPU_OPT ("cortex-m23", "Cortex-M23", ARM_ARCH_V8M_BASE, ++ ARM_ARCH_NONE, ++ FPU_NONE), ++ ARM_CPU_OPT ("cortex-m7", "Cortex-M7", ARM_ARCH_V7EM, ++ ARM_ARCH_NONE, ++ FPU_NONE), ++ ARM_CPU_OPT ("cortex-m4", "Cortex-M4", ARM_ARCH_V7EM, ++ ARM_ARCH_NONE, ++ FPU_NONE), ++ ARM_CPU_OPT ("cortex-m3", "Cortex-M3", ARM_ARCH_V7M, ++ ARM_ARCH_NONE, ++ FPU_NONE), ++ ARM_CPU_OPT ("cortex-m1", "Cortex-M1", ARM_ARCH_V6SM, ++ ARM_ARCH_NONE, ++ FPU_NONE), ++ ARM_CPU_OPT ("cortex-m0", "Cortex-M0", ARM_ARCH_V6SM, ++ ARM_ARCH_NONE, ++ FPU_NONE), ++ ARM_CPU_OPT ("cortex-m0plus", "Cortex-M0+", ARM_ARCH_V6SM, ++ ARM_ARCH_NONE, ++ FPU_NONE), ++ ARM_CPU_OPT ("exynos-m1", "Samsung Exynos M1", ARM_ARCH_V8A, ++ ARM_FEATURE_COPROC (CRC_EXT_ARMV8), ++ FPU_ARCH_CRYPTO_NEON_VFP_ARMV8), + + /* ??? XSCALE is really an architecture. */ +- ARM_CPU_OPT ("xscale", ARM_ARCH_XSCALE, FPU_ARCH_VFP_V2, NULL), ++ ARM_CPU_OPT ("xscale", NULL, ARM_ARCH_XSCALE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ + /* ??? iwmmxt is not a processor. */ +- ARM_CPU_OPT ("iwmmxt", ARM_ARCH_IWMMXT, FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("iwmmxt2", ARM_ARCH_IWMMXT2,FPU_ARCH_VFP_V2, NULL), +- ARM_CPU_OPT ("i80200", ARM_ARCH_XSCALE, FPU_ARCH_VFP_V2, NULL), ++ ARM_CPU_OPT ("iwmmxt", NULL, ARM_ARCH_IWMMXT, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("iwmmxt2", NULL, ARM_ARCH_IWMMXT2, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ ARM_CPU_OPT ("i80200", NULL, ARM_ARCH_XSCALE, ++ ARM_ARCH_NONE, ++ FPU_ARCH_VFP_V2), ++ + /* Maverick */ +- ARM_CPU_OPT ("ep9312", ARM_FEATURE_LOW (ARM_AEXT_V4T, ARM_CEXT_MAVERICK), +- FPU_ARCH_MAVERICK, "ARM920T"), ++ ARM_CPU_OPT ("ep9312", "ARM920T", ++ ARM_FEATURE_LOW (ARM_AEXT_V4T, ARM_CEXT_MAVERICK), ++ ARM_ARCH_NONE, FPU_ARCH_MAVERICK), ++ + /* Marvell processors. */ +- ARM_CPU_OPT ("marvell-pj4", ARM_FEATURE_CORE (ARM_AEXT_V7A | ARM_EXT_MP +- | ARM_EXT_SEC, +- ARM_EXT2_V6T2_V8M), +- FPU_ARCH_VFP_V3D16, NULL), +- ARM_CPU_OPT ("marvell-whitney", ARM_FEATURE_CORE (ARM_AEXT_V7A | ARM_EXT_MP +- | ARM_EXT_SEC, +- ARM_EXT2_V6T2_V8M), +- FPU_ARCH_NEON_VFP_V4, NULL), ++ ARM_CPU_OPT ("marvell-pj4", NULL, ARM_ARCH_V7A, ++ ARM_FEATURE_CORE_LOW (ARM_EXT_MP | ARM_EXT_SEC), ++ FPU_ARCH_VFP_V3D16), ++ ARM_CPU_OPT ("marvell-whitney", NULL, ARM_ARCH_V7A, ++ ARM_FEATURE_CORE_LOW (ARM_EXT_MP | ARM_EXT_SEC), ++ FPU_ARCH_NEON_VFP_V4), ++ + /* APM X-Gene family. */ +- ARM_CPU_OPT ("xgene1", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, +- "APM X-Gene 1"), +- ARM_CPU_OPT ("xgene2", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, +- "APM X-Gene 2"), ++ ARM_CPU_OPT ("xgene1", "APM X-Gene 1", ARM_ARCH_V8A, ++ ARM_ARCH_NONE, ++ FPU_ARCH_CRYPTO_NEON_VFP_ARMV8), ++ ARM_CPU_OPT ("xgene2", "APM X-Gene 2", ARM_ARCH_V8A, ++ ARM_FEATURE_COPROC (CRC_EXT_ARMV8), ++ FPU_ARCH_CRYPTO_NEON_VFP_ARMV8), + +- { NULL, 0, ARM_ARCH_NONE, ARM_ARCH_NONE, NULL } ++ { NULL, 0, ARM_ARCH_NONE, ARM_ARCH_NONE, ARM_ARCH_NONE, NULL } + }; + #undef ARM_CPU_OPT + +@@ -25459,6 +26022,8 @@ static const struct arm_arch_option_tabl + ARM_ARCH_OPT ("armv8-a", ARM_ARCH_V8A, FPU_ARCH_VFP), + ARM_ARCH_OPT ("armv8.1-a", ARM_ARCH_V8_1A, FPU_ARCH_VFP), + ARM_ARCH_OPT ("armv8.2-a", ARM_ARCH_V8_2A, FPU_ARCH_VFP), ++ ARM_ARCH_OPT ("armv8.3-a", ARM_ARCH_V8_3A, FPU_ARCH_VFP), ++ ARM_ARCH_OPT ("armv8-r", ARM_ARCH_V8R, FPU_ARCH_VFP), + ARM_ARCH_OPT ("xscale", ARM_ARCH_XSCALE, FPU_ARCH_VFP), + ARM_ARCH_OPT ("iwmmxt", ARM_ARCH_IWMMXT, FPU_ARCH_VFP), + ARM_ARCH_OPT ("iwmmxt2", ARM_ARCH_IWMMXT2,FPU_ARCH_VFP), +@@ -25490,6 +26055,9 @@ static const struct arm_option_extension + ARM_EXT_OPT ("crypto", FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, + ARM_FEATURE_COPROC (FPU_CRYPTO_ARMV8), + ARM_FEATURE_CORE_LOW (ARM_EXT_V8)), ++ ARM_EXT_OPT ("dotprod", FPU_ARCH_DOTPROD_NEON_VFP_ARMV8, ++ ARM_FEATURE_COPROC (FPU_NEON_EXT_DOTPROD), ++ ARM_ARCH_V8_2A), + ARM_EXT_OPT ("dsp", ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP | ARM_EXT_V6_DSP), + ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP | ARM_EXT_V6_DSP), + ARM_FEATURE_CORE (ARM_EXT_V7M, ARM_EXT2_V8M)), +@@ -25502,6 +26070,13 @@ static const struct arm_option_extension + ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV | ARM_EXT_DIV), + ARM_FEATURE_CORE_LOW (ARM_EXT_V7A), + ARM_FEATURE_CORE_LOW (ARM_EXT_V7R)), ++ /* Duplicate entry for the purpose of allowing ARMv7 to match in presence of ++ Thumb divide instruction. Due to this having the same name as the ++ previous entry, this will be ignored when doing command-line parsing and ++ only considered by build attribute selection code. */ ++ ARM_EXT_OPT ("idiv", ARM_FEATURE_CORE_LOW (ARM_EXT_DIV), ++ ARM_FEATURE_CORE_LOW (ARM_EXT_DIV), ++ ARM_FEATURE_CORE_LOW (ARM_EXT_V7)), + ARM_EXT_OPT ("iwmmxt",ARM_FEATURE_COPROC (ARM_CEXT_IWMMXT), + ARM_FEATURE_COPROC (ARM_CEXT_IWMMXT), ARM_ARCH_NONE), + ARM_EXT_OPT ("iwmmxt2", ARM_FEATURE_COPROC (ARM_CEXT_IWMMXT2), +@@ -25517,13 +26092,13 @@ static const struct arm_option_extension + ARM_FEATURE_CORE_LOW (ARM_EXT_V6M)), + ARM_EXT_OPT ("pan", ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN), + ARM_FEATURE (ARM_EXT_V8, ARM_EXT2_PAN, 0), +- ARM_FEATURE_CORE_LOW (ARM_EXT_V8)), ++ ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8A)), + ARM_EXT_OPT ("ras", ARM_FEATURE_CORE_HIGH (ARM_EXT2_RAS), + ARM_FEATURE (ARM_EXT_V8, ARM_EXT2_RAS, 0), +- ARM_FEATURE_CORE_LOW (ARM_EXT_V8)), ++ ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8A)), + ARM_EXT_OPT ("rdma", FPU_ARCH_NEON_VFP_ARMV8_1, + ARM_FEATURE_COPROC (FPU_NEON_ARMV8 | FPU_NEON_EXT_RDMA), +- ARM_FEATURE_CORE_LOW (ARM_EXT_V8)), ++ ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8A)), + ARM_EXT_OPT2 ("sec", ARM_FEATURE_CORE_LOW (ARM_EXT_SEC), + ARM_FEATURE_CORE_LOW (ARM_EXT_SEC), + ARM_FEATURE_CORE_LOW (ARM_EXT_V6K), +@@ -25581,6 +26156,7 @@ static const struct arm_option_fpu_value + {"arm1136jf-s", FPU_ARCH_VFP_V2}, + {"maverick", FPU_ARCH_MAVERICK}, + {"neon", FPU_ARCH_VFP_V3_PLUS_NEON_V1}, ++ {"neon-vfpv3", FPU_ARCH_VFP_V3_PLUS_NEON_V1}, + {"neon-fp16", FPU_ARCH_NEON_FP16}, + {"vfpv4", FPU_ARCH_VFP_V4}, + {"vfpv4-d16", FPU_ARCH_VFP_V4D16}, +@@ -25632,10 +26208,9 @@ struct arm_long_option_table + }; + + static bfd_boolean +-arm_parse_extension (const char *str, const arm_feature_set **opt_p) ++arm_parse_extension (const char *str, const arm_feature_set *opt_set, ++ arm_feature_set **ext_set_p) + { +- arm_feature_set *ext_set = XNEW (arm_feature_set); +- + /* We insist on extensions being specified in alphabetical order, and with + extensions being added before being removed. We achieve this by having + the global ARM_EXTENSIONS table in alphabetical order, and using the +@@ -25646,9 +26221,11 @@ arm_parse_extension (const char *str, co + const arm_feature_set arm_any = ARM_ANY; + int adding_value = -1; + +- /* Copy the feature set, so that we can modify it. */ +- *ext_set = **opt_p; +- *opt_p = ext_set; ++ if (!*ext_set_p) ++ { ++ *ext_set_p = XNEW (arm_feature_set); ++ **ext_set_p = arm_arch_none; ++ } + + while (str != NULL && *str != 0) + { +@@ -25716,7 +26293,7 @@ arm_parse_extension (const char *str, co + /* Empty entry. */ + if (ARM_FEATURE_EQUAL (opt->allowed_archs[i], arm_any)) + continue; +- if (ARM_FSET_CPU_SUBSET (opt->allowed_archs[i], *ext_set)) ++ if (ARM_FSET_CPU_SUBSET (opt->allowed_archs[i], *opt_set)) + break; + } + if (i == nb_allowed_archs) +@@ -25727,10 +26304,15 @@ arm_parse_extension (const char *str, co + + /* Add or remove the extension. */ + if (adding_value) +- ARM_MERGE_FEATURE_SETS (*ext_set, *ext_set, opt->merge_value); ++ ARM_MERGE_FEATURE_SETS (**ext_set_p, **ext_set_p, ++ opt->merge_value); + else +- ARM_CLEAR_FEATURE (*ext_set, *ext_set, opt->clear_value); ++ ARM_CLEAR_FEATURE (**ext_set_p, **ext_set_p, opt->clear_value); + ++ /* Allowing Thumb division instructions for ARMv7 in autodetection ++ rely on this break so that duplicate extensions (extensions ++ with the same name as a previous extension in the list) are not ++ considered for command-line parsing. */ + break; + } + +@@ -25786,6 +26368,9 @@ arm_parse_cpu (const char *str) + if (opt->name_len == len && strncmp (opt->name, str, len) == 0) + { + mcpu_cpu_opt = &opt->value; ++ if (!dyn_mcpu_ext_opt) ++ dyn_mcpu_ext_opt = XNEW (arm_feature_set); ++ *dyn_mcpu_ext_opt = opt->ext; + mcpu_fpu_opt = &opt->default_fpu; + if (opt->canonical_name) + { +@@ -25805,7 +26390,7 @@ arm_parse_cpu (const char *str) + } + + if (ext != NULL) +- return arm_parse_extension (ext, &mcpu_cpu_opt); ++ return arm_parse_extension (ext, mcpu_cpu_opt, &dyn_mcpu_ext_opt); + + return TRUE; + } +@@ -25840,7 +26425,7 @@ arm_parse_arch (const char *str) + strcpy (selected_cpu_name, opt->name); + + if (ext != NULL) +- return arm_parse_extension (ext, &march_cpu_opt); ++ return arm_parse_extension (ext, march_cpu_opt, &dyn_march_ext_opt); + + return TRUE; + } +@@ -26080,30 +26665,62 @@ typedef struct + arm_feature_set flags; + } cpu_arch_ver_table; + +-/* Mapping from CPU features to EABI CPU arch values. As a general rule, table +- must be sorted least features first but some reordering is needed, eg. for +- Thumb-2 instructions to be detected as coming from ARMv6T2. */ ++/* Mapping from CPU features to EABI CPU arch values. Table must be sorted ++ chronologically for architectures, with an exception for ARMv6-M and ++ ARMv6S-M due to legacy reasons. No new architecture should have a ++ special case. This allows for build attribute selection results to be ++ stable when new architectures are added. */ + static const cpu_arch_ver_table cpu_arch_ver[] = + { ++ {0, ARM_ARCH_V1}, ++ {0, ARM_ARCH_V2}, ++ {0, ARM_ARCH_V2S}, ++ {0, ARM_ARCH_V3}, ++ {0, ARM_ARCH_V3M}, ++ {1, ARM_ARCH_V4xM}, + {1, ARM_ARCH_V4}, ++ {2, ARM_ARCH_V4TxM}, + {2, ARM_ARCH_V4T}, ++ {3, ARM_ARCH_V5xM}, + {3, ARM_ARCH_V5}, ++ {3, ARM_ARCH_V5TxM}, + {3, ARM_ARCH_V5T}, ++ {4, ARM_ARCH_V5TExP}, + {4, ARM_ARCH_V5TE}, + {5, ARM_ARCH_V5TEJ}, + {6, ARM_ARCH_V6}, +- {9, ARM_ARCH_V6K}, + {7, ARM_ARCH_V6Z}, ++ {7, ARM_ARCH_V6KZ}, ++ {9, ARM_ARCH_V6K}, ++ {8, ARM_ARCH_V6T2}, ++ {8, ARM_ARCH_V6KT2}, ++ {8, ARM_ARCH_V6ZT2}, ++ {8, ARM_ARCH_V6KZT2}, ++ ++ /* When assembling a file with only ARMv6-M or ARMv6S-M instruction, GNU as ++ always selected build attributes to match those of ARMv6-M ++ (resp. ARMv6S-M). However, due to these architectures being a strict ++ subset of ARMv7-M in terms of instructions available, ARMv7-M attributes ++ would be selected when fully respecting chronology of architectures. ++ It is thus necessary to make a special case of ARMv6-M and ARMv6S-M and ++ move them before ARMv7 architectures. */ + {11, ARM_ARCH_V6M}, + {12, ARM_ARCH_V6SM}, +- {8, ARM_ARCH_V6T2}, +- {10, ARM_ARCH_V7VE}, ++ ++ {10, ARM_ARCH_V7}, ++ {10, ARM_ARCH_V7A}, + {10, ARM_ARCH_V7R}, + {10, ARM_ARCH_V7M}, ++ {10, ARM_ARCH_V7VE}, ++ {13, ARM_ARCH_V7EM}, + {14, ARM_ARCH_V8A}, ++ {14, ARM_ARCH_V8_1A}, ++ {14, ARM_ARCH_V8_2A}, ++ {14, ARM_ARCH_V8_3A}, + {16, ARM_ARCH_V8M_BASE}, + {17, ARM_ARCH_V8M_MAIN}, +- {0, ARM_ARCH_NONE} ++ {15, ARM_ARCH_V8R}, ++ {-1, ARM_ARCH_NONE} + }; + + /* Set an attribute if it has not already been set by the user. */ +@@ -26125,92 +26742,210 @@ aeabi_set_attribute_string (int tag, con + bfd_elf_add_proc_attr_string (stdoutput, tag, value); + } + +-/* Set the public EABI object attributes. */ +-void +-aeabi_set_public_attributes (void) ++/* Return whether features in the *NEEDED feature set are available via ++ extensions for the architecture whose feature set is *ARCH_FSET. */ ++static bfd_boolean ++have_ext_for_needed_feat_p (const arm_feature_set *arch_fset, ++ const arm_feature_set *needed) + { +- int arch; +- char profile; +- int virt_sec = 0; +- int fp16_optional = 0; +- arm_feature_set arm_arch = ARM_ARCH_NONE; +- arm_feature_set flags; +- arm_feature_set tmp; +- arm_feature_set arm_arch_v8m_base = ARM_ARCH_V8M_BASE; +- const cpu_arch_ver_table *p; +- +- /* Choose the architecture based on the capabilities of the requested cpu +- (if any) and/or the instructions actually used. */ +- ARM_MERGE_FEATURE_SETS (flags, arm_arch_used, thumb_arch_used); +- ARM_MERGE_FEATURE_SETS (flags, flags, *mfpu_opt); +- ARM_MERGE_FEATURE_SETS (flags, flags, selected_cpu); ++ int i, nb_allowed_archs; ++ arm_feature_set ext_fset; ++ const struct arm_option_extension_value_table *opt; + +- if (ARM_CPU_HAS_FEATURE (arm_arch_used, arm_arch_any)) +- ARM_MERGE_FEATURE_SETS (flags, flags, arm_ext_v1); ++ ext_fset = arm_arch_none; ++ for (opt = arm_extensions; opt->name != NULL; opt++) ++ { ++ /* Extension does not provide any feature we need. */ ++ if (!ARM_CPU_HAS_FEATURE (*needed, opt->merge_value)) ++ continue; + +- if (ARM_CPU_HAS_FEATURE (thumb_arch_used, arm_arch_any)) +- ARM_MERGE_FEATURE_SETS (flags, flags, arm_ext_v4t); ++ nb_allowed_archs = ++ sizeof (opt->allowed_archs) / sizeof (opt->allowed_archs[0]); ++ for (i = 0; i < nb_allowed_archs; i++) ++ { ++ /* Empty entry. */ ++ if (ARM_FEATURE_EQUAL (opt->allowed_archs[i], arm_arch_any)) ++ break; + +- selected_cpu = flags; ++ /* Extension is available, add it. */ ++ if (ARM_FSET_CPU_SUBSET (opt->allowed_archs[i], *arch_fset)) ++ ARM_MERGE_FEATURE_SETS (ext_fset, ext_fset, opt->merge_value); ++ } ++ } + +- /* Allow the user to override the reported architecture. */ +- if (object_arch) ++ /* Can we enable all features in *needed? */ ++ return ARM_FSET_CPU_SUBSET (*needed, ext_fset); ++} ++ ++/* Select value for Tag_CPU_arch and Tag_CPU_arch_profile build attributes for ++ a given architecture feature set *ARCH_EXT_FSET including extension feature ++ set *EXT_FSET. Selection logic used depend on EXACT_MATCH: ++ - if true, check for an exact match of the architecture modulo extensions; ++ - otherwise, select build attribute value of the first superset ++ architecture released so that results remains stable when new architectures ++ are added. ++ For -march/-mcpu=all the build attribute value of the most featureful ++ architecture is returned. Tag_CPU_arch_profile result is returned in ++ PROFILE. */ ++static int ++get_aeabi_cpu_arch_from_fset (const arm_feature_set *arch_ext_fset, ++ const arm_feature_set *ext_fset, ++ char *profile, int exact_match) ++{ ++ arm_feature_set arch_fset; ++ const cpu_arch_ver_table *p_ver, *p_ver_ret = NULL; ++ ++ /* Select most featureful architecture with all its extensions if building ++ for -march=all as the feature sets used to set build attributes. */ ++ if (ARM_FEATURE_EQUAL (*arch_ext_fset, arm_arch_any)) + { +- ARM_CLEAR_FEATURE (flags, flags, arm_arch_any); +- ARM_MERGE_FEATURE_SETS (flags, flags, *object_arch); ++ /* Force revisiting of decision for each new architecture. */ ++ gas_assert (MAX_TAG_CPU_ARCH <= TAG_CPU_ARCH_V8M_MAIN); ++ *profile = 'A'; ++ return TAG_CPU_ARCH_V8; + } + +- /* We need to make sure that the attributes do not identify us as v6S-M +- when the only v6S-M feature in use is the Operating System Extensions. */ +- if (ARM_CPU_HAS_FEATURE (flags, arm_ext_os)) +- if (!ARM_CPU_HAS_FEATURE (flags, arm_arch_v6m_only)) +- ARM_CLEAR_FEATURE (flags, flags, arm_ext_os); ++ ARM_CLEAR_FEATURE (arch_fset, *arch_ext_fset, *ext_fset); + +- tmp = flags; +- arch = 0; +- for (p = cpu_arch_ver; p->val; p++) ++ for (p_ver = cpu_arch_ver; p_ver->val != -1; p_ver++) + { +- if (ARM_CPU_HAS_FEATURE (tmp, p->flags)) ++ arm_feature_set known_arch_fset; ++ ++ ARM_CLEAR_FEATURE (known_arch_fset, p_ver->flags, fpu_any); ++ if (exact_match) + { +- arch = p->val; +- arm_arch = p->flags; +- ARM_CLEAR_FEATURE (tmp, tmp, p->flags); ++ /* Base architecture match user-specified architecture and ++ extensions, eg. ARMv6S-M matching -march=armv6-m+os. */ ++ if (ARM_FEATURE_EQUAL (*arch_ext_fset, known_arch_fset)) ++ { ++ p_ver_ret = p_ver; ++ goto found; ++ } ++ /* Base architecture match user-specified architecture only ++ (eg. ARMv6-M in the same case as above). Record it in case we ++ find a match with above condition. */ ++ else if (p_ver_ret == NULL ++ && ARM_FEATURE_EQUAL (arch_fset, known_arch_fset)) ++ p_ver_ret = p_ver; + } +- } ++ else ++ { + +- /* The table lookup above finds the last architecture to contribute +- a new feature. Unfortunately, Tag13 is a subset of the union of +- v6T2 and v7-M, so it is never seen as contributing a new feature. +- We can not search for the last entry which is entirely used, +- because if no CPU is specified we build up only those flags +- actually used. Perhaps we should separate out the specified +- and implicit cases. Avoid taking this path for -march=all by +- checking for contradictory v7-A / v7-M features. */ +- if (arch == TAG_CPU_ARCH_V7 +- && !ARM_CPU_HAS_FEATURE (flags, arm_ext_v7a) +- && ARM_CPU_HAS_FEATURE (flags, arm_ext_v7m) +- && ARM_CPU_HAS_FEATURE (flags, arm_ext_v6_dsp)) +- { +- arch = TAG_CPU_ARCH_V7E_M; +- arm_arch = (arm_feature_set) ARM_ARCH_V7EM; ++ /* Architecture has all features wanted. */ ++ if (ARM_FSET_CPU_SUBSET (arch_fset, known_arch_fset)) ++ { ++ arm_feature_set added_fset; ++ ++ /* Compute features added by this architecture over the one ++ recorded in p_ver_ret. */ ++ if (p_ver_ret != NULL) ++ ARM_CLEAR_FEATURE (added_fset, known_arch_fset, ++ p_ver_ret->flags); ++ /* First architecture that match incl. with extensions, or the ++ only difference in features over the recorded match is ++ features that were optional and are now mandatory. */ ++ if (p_ver_ret == NULL ++ || ARM_FSET_CPU_SUBSET (added_fset, arch_fset)) ++ { ++ p_ver_ret = p_ver; ++ goto found; ++ } ++ } ++ else if (p_ver_ret == NULL) ++ { ++ arm_feature_set needed_ext_fset; ++ ++ ARM_CLEAR_FEATURE (needed_ext_fset, arch_fset, known_arch_fset); ++ ++ /* Architecture has all features needed when using some ++ extensions. Record it and continue searching in case there ++ exist an architecture providing all needed features without ++ the need for extensions (eg. ARMv6S-M Vs ARMv6-M with ++ OS extension). */ ++ if (have_ext_for_needed_feat_p (&known_arch_fset, ++ &needed_ext_fset)) ++ p_ver_ret = p_ver; ++ } ++ } + } + +- ARM_CLEAR_FEATURE (tmp, flags, arm_arch_v8m_base); +- if (arch == TAG_CPU_ARCH_V8M_BASE && ARM_CPU_HAS_FEATURE (tmp, arm_arch_any)) ++ if (p_ver_ret == NULL) ++ return -1; ++ ++found: ++ /* Tag_CPU_arch_profile. */ ++ if (ARM_CPU_HAS_FEATURE (p_ver_ret->flags, arm_ext_v7a) ++ || ARM_CPU_HAS_FEATURE (p_ver_ret->flags, arm_ext_v8) ++ || (ARM_CPU_HAS_FEATURE (p_ver_ret->flags, arm_ext_atomics) ++ && !ARM_CPU_HAS_FEATURE (p_ver_ret->flags, arm_ext_v8m_m_only))) ++ *profile = 'A'; ++ else if (ARM_CPU_HAS_FEATURE (p_ver_ret->flags, arm_ext_v7r)) ++ *profile = 'R'; ++ else if (ARM_CPU_HAS_FEATURE (p_ver_ret->flags, arm_ext_m)) ++ *profile = 'M'; ++ else ++ *profile = '\0'; ++ return p_ver_ret->val; ++} ++ ++/* Set the public EABI object attributes. */ ++static void ++aeabi_set_public_attributes (void) ++{ ++ char profile; ++ int arch = -1; ++ int virt_sec = 0; ++ int fp16_optional = 0; ++ int skip_exact_match = 0; ++ arm_feature_set flags, flags_arch, flags_ext; ++ ++ /* Autodetection mode, choose the architecture based the instructions ++ actually used. */ ++ if (no_cpu_selected ()) + { +- arch = TAG_CPU_ARCH_V8M_MAIN; +- arm_arch = (arm_feature_set) ARM_ARCH_V8M_MAIN; ++ ARM_MERGE_FEATURE_SETS (flags, arm_arch_used, thumb_arch_used); ++ ++ if (ARM_CPU_HAS_FEATURE (arm_arch_used, arm_arch_any)) ++ ARM_MERGE_FEATURE_SETS (flags, flags, arm_ext_v1); ++ ++ if (ARM_CPU_HAS_FEATURE (thumb_arch_used, arm_arch_any)) ++ ARM_MERGE_FEATURE_SETS (flags, flags, arm_ext_v4t); ++ ++ /* Code run during relaxation relies on selected_cpu being set. */ ++ selected_cpu = flags; + } ++ /* Otherwise, choose the architecture based on the capabilities of the ++ requested cpu. */ ++ else ++ flags = selected_cpu; ++ ARM_MERGE_FEATURE_SETS (flags, flags, *mfpu_opt); + +- /* In cpu_arch_ver ARMv8-A is before ARMv8-M for atomics to be detected as +- coming from ARMv8-A. However, since ARMv8-A has more instructions than +- ARMv8-M, -march=all must be detected as ARMv8-A. */ +- if (arch == TAG_CPU_ARCH_V8M_MAIN +- && ARM_FEATURE_CORE_EQUAL (selected_cpu, arm_arch_any)) ++ /* Allow the user to override the reported architecture. */ ++ if (object_arch) + { +- arch = TAG_CPU_ARCH_V8; +- arm_arch = (arm_feature_set) ARM_ARCH_V8A; ++ ARM_CLEAR_FEATURE (flags_arch, *object_arch, fpu_any); ++ flags_ext = arm_arch_none; + } ++ else ++ { ++ ARM_CLEAR_FEATURE (flags_arch, flags, fpu_any); ++ flags_ext = dyn_mcpu_ext_opt ? *dyn_mcpu_ext_opt : arm_arch_none; ++ skip_exact_match = ARM_FEATURE_EQUAL (selected_cpu, arm_arch_any); ++ } ++ ++ /* When this function is run again after relaxation has happened there is no ++ way to determine whether an architecture or CPU was specified by the user: ++ - selected_cpu is set above for relaxation to work; ++ - march_cpu_opt is not set if only -mcpu or .cpu is used; ++ - mcpu_cpu_opt is set to arm_arch_any for autodetection. ++ Therefore, if not in -march=all case we first try an exact match and fall ++ back to autodetection. */ ++ if (!skip_exact_match) ++ arch = get_aeabi_cpu_arch_from_fset (&flags_arch, &flags_ext, &profile, 1); ++ if (arch == -1) ++ arch = get_aeabi_cpu_arch_from_fset (&flags_arch, &flags_ext, &profile, 0); ++ if (arch == -1) ++ as_bad (_("no architecture contains all the instructions used\n")); + + /* Tag_CPU_name. */ + if (selected_cpu_name[0]) +@@ -26233,40 +26968,22 @@ aeabi_set_public_attributes (void) + aeabi_set_attribute_int (Tag_CPU_arch, arch); + + /* Tag_CPU_arch_profile. */ +- if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v7a) +- || ARM_CPU_HAS_FEATURE (flags, arm_ext_v8) +- || (ARM_CPU_HAS_FEATURE (flags, arm_ext_atomics) +- && !ARM_CPU_HAS_FEATURE (flags, arm_ext_v8m_m_only))) +- profile = 'A'; +- else if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v7r)) +- profile = 'R'; +- else if (ARM_CPU_HAS_FEATURE (flags, arm_ext_m)) +- profile = 'M'; +- else +- profile = '\0'; +- + if (profile != '\0') + aeabi_set_attribute_int (Tag_CPU_arch_profile, profile); + + /* Tag_DSP_extension. */ +- if (ARM_CPU_HAS_FEATURE (flags, arm_ext_dsp)) +- { +- arm_feature_set ext; +- +- /* DSP instructions not in architecture. */ +- ARM_CLEAR_FEATURE (ext, flags, arm_arch); +- if (ARM_CPU_HAS_FEATURE (ext, arm_ext_dsp)) +- aeabi_set_attribute_int (Tag_DSP_extension, 1); +- } ++ if (dyn_mcpu_ext_opt && ARM_CPU_HAS_FEATURE (*dyn_mcpu_ext_opt, arm_ext_dsp)) ++ aeabi_set_attribute_int (Tag_DSP_extension, 1); + ++ ARM_CLEAR_FEATURE (flags_arch, flags, fpu_any); + /* Tag_ARM_ISA_use. */ + if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v1) +- || arch == 0) ++ || ARM_FEATURE_ZERO (flags_arch)) + aeabi_set_attribute_int (Tag_ARM_ISA_use, 1); + + /* Tag_THUMB_ISA_use. */ + if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v4t) +- || arch == 0) ++ || ARM_FEATURE_ZERO (flags_arch)) + { + int thumb_isa_use; + +@@ -26348,9 +27065,7 @@ aeabi_set_public_attributes (void) + by the base architecture. + + For new architectures we will have to check these tests. */ +- gas_assert (arch <= TAG_CPU_ARCH_V8 +- || (arch >= TAG_CPU_ARCH_V8M_BASE +- && arch <= TAG_CPU_ARCH_V8M_MAIN)); ++ gas_assert (arch <= TAG_CPU_ARCH_V8M_MAIN); + if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v8) + || ARM_CPU_HAS_FEATURE (flags, arm_ext_v8m)) + aeabi_set_attribute_int (Tag_DIV_use, 0); +@@ -26373,6 +27088,18 @@ aeabi_set_public_attributes (void) + aeabi_set_attribute_int (Tag_Virtualization_use, virt_sec); + } + ++/* Post relaxation hook. Recompute ARM attributes now that relaxation is ++ finished and free extension feature bits which will not be used anymore. */ ++void ++arm_md_post_relax (void) ++{ ++ aeabi_set_public_attributes (); ++ XDELETE (dyn_mcpu_ext_opt); ++ dyn_mcpu_ext_opt = NULL; ++ XDELETE (dyn_march_ext_opt); ++ dyn_march_ext_opt = NULL; ++} ++ + /* Add the default contents for the .ARM.attributes section. */ + void + arm_md_end (void) +@@ -26405,7 +27132,10 @@ s_arm_cpu (int ignored ATTRIBUTE_UNUSED) + if (streq (opt->name, name)) + { + mcpu_cpu_opt = &opt->value; +- selected_cpu = opt->value; ++ if (!dyn_mcpu_ext_opt) ++ dyn_mcpu_ext_opt = XNEW (arm_feature_set); ++ *dyn_mcpu_ext_opt = opt->ext; ++ ARM_MERGE_FEATURE_SETS (selected_cpu, *mcpu_cpu_opt, *dyn_mcpu_ext_opt); + if (opt->canonical_name) + strcpy (selected_cpu_name, opt->canonical_name); + else +@@ -26417,6 +27147,8 @@ s_arm_cpu (int ignored ATTRIBUTE_UNUSED) + selected_cpu_name[i] = 0; + } + ARM_MERGE_FEATURE_SETS (cpu_variant, *mcpu_cpu_opt, *mfpu_opt); ++ if (dyn_mcpu_ext_opt) ++ ARM_MERGE_FEATURE_SETS (cpu_variant, cpu_variant, *dyn_mcpu_ext_opt); + *input_line_pointer = saved_char; + demand_empty_rest_of_line (); + return; +@@ -26447,9 +27179,11 @@ s_arm_arch (int ignored ATTRIBUTE_UNUSED + if (streq (opt->name, name)) + { + mcpu_cpu_opt = &opt->value; +- selected_cpu = opt->value; ++ XDELETE (dyn_mcpu_ext_opt); ++ dyn_mcpu_ext_opt = NULL; ++ selected_cpu = *mcpu_cpu_opt; + strcpy (selected_cpu_name, opt->name); +- ARM_MERGE_FEATURE_SETS (cpu_variant, *mcpu_cpu_opt, *mfpu_opt); ++ ARM_MERGE_FEATURE_SETS (cpu_variant, selected_cpu, *mfpu_opt); + *input_line_pointer = saved_char; + demand_empty_rest_of_line (); + return; +@@ -26536,16 +27270,26 @@ s_arm_arch_extension (int ignored ATTRIB + break; + } + ++ if (!dyn_mcpu_ext_opt) ++ { ++ dyn_mcpu_ext_opt = XNEW (arm_feature_set); ++ *dyn_mcpu_ext_opt = arm_arch_none; ++ } + if (adding_value) +- ARM_MERGE_FEATURE_SETS (selected_cpu, selected_cpu, ++ ARM_MERGE_FEATURE_SETS (*dyn_mcpu_ext_opt, *dyn_mcpu_ext_opt, + opt->merge_value); + else +- ARM_CLEAR_FEATURE (selected_cpu, selected_cpu, opt->clear_value); ++ ARM_CLEAR_FEATURE (*dyn_mcpu_ext_opt, *dyn_mcpu_ext_opt, ++ opt->clear_value); + +- mcpu_cpu_opt = &selected_cpu; +- ARM_MERGE_FEATURE_SETS (cpu_variant, *mcpu_cpu_opt, *mfpu_opt); ++ ARM_MERGE_FEATURE_SETS (selected_cpu, *mcpu_cpu_opt, *dyn_mcpu_ext_opt); ++ ARM_MERGE_FEATURE_SETS (cpu_variant, selected_cpu, *mfpu_opt); + *input_line_pointer = saved_char; + demand_empty_rest_of_line (); ++ /* Allowing Thumb division instructions for ARMv7 in autodetection rely ++ on this return so that duplicate extensions (extensions with the ++ same name as a previous extension in the list) are not considered ++ for command-line parsing. */ + return; + } + +@@ -26576,6 +27320,8 @@ s_arm_fpu (int ignored ATTRIBUTE_UNUSED) + { + mfpu_opt = &opt->value; + ARM_MERGE_FEATURE_SETS (cpu_variant, *mcpu_cpu_opt, *mfpu_opt); ++ if (dyn_mcpu_ext_opt) ++ ARM_MERGE_FEATURE_SETS (cpu_variant, cpu_variant, *dyn_mcpu_ext_opt); + *input_line_pointer = saved_char; + demand_empty_rest_of_line (); + return; +diff -rup binutils.orig/gas/config/tc-arm.h binutils-2.27/gas/config/tc-arm.h +--- binutils.orig/gas/config/tc-arm.h 2017-08-09 10:26:30.032741952 +0100 ++++ binutils-2.27/gas/config/tc-arm.h 2017-08-09 11:17:35.442400257 +0100 +@@ -118,8 +118,8 @@ extern bfd_boolean tc_start_label_withou + extern void arm_md_end (void); + bfd_boolean arm_is_eabi (void); + +-#define md_post_relax_hook aeabi_set_public_attributes () +-extern void aeabi_set_public_attributes (void); ++#define md_post_relax_hook arm_md_post_relax () ++extern void arm_md_post_relax (void); + #endif + + /* NOTE: The fake label creation in stabs.c:s_stab_generic() has +diff -rup binutils.orig/gas/doc/c-arm.texi binutils-2.27/gas/doc/c-arm.texi +--- binutils.orig/gas/doc/c-arm.texi 2017-08-09 10:26:30.039741874 +0100 ++++ binutils-2.27/gas/doc/c-arm.texi 2017-08-09 10:28:00.216732329 +0100 +@@ -172,6 +172,7 @@ been added, again in ascending alphabeti + The following extensions are currently supported: + @code{crc} + @code{crypto} (Cryptography Extensions for v8-A architecture, implies @code{fp+simd}), ++@code{dotprod} (Dot Product Extensions for v8.2-A architecture, implies @code{fp+simd}), + @code{fp} (Floating Point Extensions for v8-A architecture), + @code{idiv} (Integer Divide Extensions for v7-A and v7-R architectures), + @code{iwmmxt}, +@@ -185,7 +186,7 @@ architectures), + @code{simd} (Advanced SIMD Extensions for v8-A architecture, implies @code{fp}), + @code{virt} (Virtualization Extensions for v7-A architecture, implies + @code{idiv}), +-@code{pan} (Priviliged Access Never Extensions for v8-A architecture), ++@code{pan} (Privileged Access Never Extensions for v8-A architecture), + @code{ras} (Reliability, Availability and Serviceability extensions + for v8-A architecture), + @code{rdma} (ARMv8.1 Advanced SIMD extensions for v8-A architecture, implies +@@ -230,6 +231,8 @@ names are recognized: + @code{armv8-a}, + @code{armv8.1-a}, + @code{armv8.2-a}, ++@code{armv8.3-a}, ++@code{armv8-r}, + @code{iwmmxt} + @code{iwmmxt2} + and +@@ -281,7 +284,7 @@ The following format options are recogni + @code{arm1136jf-s}, + @code{maverick}, + @code{neon}, +-@code{neon-vfpv4}, ++@code{neon-vfpv3}, + @code{neon-fp-armv8}, + @code{crypto-neon-fp-armv8}, + @code{neon-fp-armv8.1} +@@ -293,7 +296,7 @@ also affects the way in which the @code{ + when assembling little-endian code. + + The default is dependent on the processor selected. For Architecture 5 or +-later, the default is to assembler for VFP instructions; for earlier ++later, the default is to assemble for VFP instructions; for earlier + architectures the default is to assemble for FPA instructions. + + @cindex @code{-mthumb} command line option, ARM +@@ -931,7 +934,7 @@ between Arm and Thumb instructions and s + interworking is not going to be performed. The presence of this + directive also implies @code{.thumb} + +-This directive is not neccessary when generating EABI objects. On these ++This directive is not necessary when generating EABI objects. On these + targets the encoding is implicit when generating Thumb code. + + @cindex @code{.thumb_set} directive, ARM +@@ -966,7 +969,7 @@ should only be done if it is really nece + + @cindex @code{.unwind_raw} directive, ARM + @item .unwind_raw @var{offset}, @var{byte1}, @dots{} +-Insert one of more arbitary unwind opcode bytes, which are known to adjust ++Insert one of more arbitrary unwind opcode bytes, which are known to adjust + the stack pointer by @var{offset} bytes. + + For example @code{.unwind_raw 4, 0xb1, 0x01} is equivalent to +diff -rup binutils.orig/gas/testsuite/gas/arm/archv8m-cmse-msr-base.d binutils-2.27/gas/testsuite/gas/arm/archv8m-cmse-msr-base.d +--- binutils.orig/gas/testsuite/gas/arm/archv8m-cmse-msr-base.d 2017-08-09 10:26:30.056741684 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/archv8m-cmse-msr-base.d 2017-08-09 11:51:59.357287965 +0100 +@@ -6,27 +6,71 @@ + .*: +file format .*arm.* + + Disassembly of section .text: +-0+.* <[^>]*> f380 8808 msr MSP, r0 +-0+.* <[^>]*> f380 8808 msr MSP, r0 +-0+.* <[^>]*> f380 8888 msr MSP_NS, r0 +-0+.* <[^>]*> f380 8809 msr PSP, r0 +-0+.* <[^>]*> f380 8809 msr PSP, r0 +-0+.* <[^>]*> f380 8889 msr PSP_NS, r0 +-0+.* <[^>]*> f380 8808 msr MSP, r0 +-0+.* <[^>]*> f380 8808 msr MSP, r0 +-0+.* <[^>]*> f380 8888 msr MSP_NS, r0 +-0+.* <[^>]*> f380 8809 msr PSP, r0 +-0+.* <[^>]*> f380 8809 msr PSP, r0 +-0+.* <[^>]*> f380 8889 msr PSP_NS, r0 +-0+.* <[^>]*> f3ef 8008 mrs r0, MSP + 0+.* <[^>]*> f3ef 8008 mrs r0, MSP + 0+.* <[^>]*> f3ef 8088 mrs r0, MSP_NS +-0+.* <[^>]*> f3ef 8009 mrs r0, PSP +-0+.* <[^>]*> f3ef 8009 mrs r0, PSP +-0+.* <[^>]*> f3ef 8089 mrs r0, PSP_NS +-0+.* <[^>]*> f3ef 8008 mrs r0, MSP + 0+.* <[^>]*> f3ef 8008 mrs r0, MSP + 0+.* <[^>]*> f3ef 8088 mrs r0, MSP_NS +-0+.* <[^>]*> f3ef 8009 mrs r0, PSP +-0+.* <[^>]*> f3ef 8009 mrs r0, PSP +-0+.* <[^>]*> f3ef 8089 mrs r0, PSP_NS ++0+.* <[^>]*> f3ef 8109 mrs r1, PSP ++0+.* <[^>]*> f3ef 8189 mrs r1, PSP_NS ++0+.* <[^>]*> f3ef 8109 mrs r1, PSP ++0+.* <[^>]*> f3ef 8189 mrs r1, PSP_NS ++0+.* <[^>]*> f3ef 820a mrs r2, MSPLIM ++0+.* <[^>]*> f3ef 828a mrs r2, MSPLIM_NS ++0+.* <[^>]*> f3ef 820a mrs r2, MSPLIM ++0+.* <[^>]*> f3ef 828a mrs r2, MSPLIM_NS ++0+.* <[^>]*> f3ef 830b mrs r3, PSPLIM ++0+.* <[^>]*> f3ef 838b mrs r3, PSPLIM_NS ++0+.* <[^>]*> f3ef 830b mrs r3, PSPLIM ++0+.* <[^>]*> f3ef 838b mrs r3, PSPLIM_NS ++0+.* <[^>]*> f3ef 8410 mrs r4, PRIMASK ++0+.* <[^>]*> f3ef 8490 mrs r4, PRIMASK_NS ++0+.* <[^>]*> f3ef 8410 mrs r4, PRIMASK ++0+.* <[^>]*> f3ef 8490 mrs r4, PRIMASK_NS ++0+.* <[^>]*> f3ef 8511 mrs r5, BASEPRI ++0+.* <[^>]*> f3ef 8591 mrs r5, BASEPRI_NS ++0+.* <[^>]*> f3ef 8511 mrs r5, BASEPRI ++0+.* <[^>]*> f3ef 8591 mrs r5, BASEPRI_NS ++0+.* <[^>]*> f3ef 8613 mrs r6, FAULTMASK ++0+.* <[^>]*> f3ef 8693 mrs r6, FAULTMASK_NS ++0+.* <[^>]*> f3ef 8613 mrs r6, FAULTMASK ++0+.* <[^>]*> f3ef 8693 mrs r6, FAULTMASK_NS ++0+.* <[^>]*> f3ef 8714 mrs r7, CONTROL ++0+.* <[^>]*> f3ef 8794 mrs r7, CONTROL_NS ++0+.* <[^>]*> f3ef 8714 mrs r7, CONTROL ++0+.* <[^>]*> f3ef 8794 mrs r7, CONTROL_NS ++0+.* <[^>]*> f3ef 8898 mrs r8, SP_NS ++0+.* <[^>]*> f3ef 8898 mrs r8, SP_NS ++0+.* <[^>]*> f380 8808 msr MSP, r0 ++0+.* <[^>]*> f380 8888 msr MSP_NS, r0 ++0+.* <[^>]*> f380 8808 msr MSP, r0 ++0+.* <[^>]*> f380 8888 msr MSP_NS, r0 ++0+.* <[^>]*> f381 8809 msr PSP, r1 ++0+.* <[^>]*> f381 8889 msr PSP_NS, r1 ++0+.* <[^>]*> f381 8809 msr PSP, r1 ++0+.* <[^>]*> f381 8889 msr PSP_NS, r1 ++0+.* <[^>]*> f382 880a msr MSPLIM, r2 ++0+.* <[^>]*> f382 888a msr MSPLIM_NS, r2 ++0+.* <[^>]*> f382 880a msr MSPLIM, r2 ++0+.* <[^>]*> f382 888a msr MSPLIM_NS, r2 ++0+.* <[^>]*> f383 880b msr PSPLIM, r3 ++0+.* <[^>]*> f383 888b msr PSPLIM_NS, r3 ++0+.* <[^>]*> f383 880b msr PSPLIM, r3 ++0+.* <[^>]*> f383 888b msr PSPLIM_NS, r3 ++0+.* <[^>]*> f384 8810 msr PRIMASK, r4 ++0+.* <[^>]*> f384 8890 msr PRIMASK_NS, r4 ++0+.* <[^>]*> f384 8810 msr PRIMASK, r4 ++0+.* <[^>]*> f384 8890 msr PRIMASK_NS, r4 ++0+.* <[^>]*> f385 8811 msr BASEPRI, r5 ++0+.* <[^>]*> f385 8891 msr BASEPRI_NS, r5 ++0+.* <[^>]*> f385 8811 msr BASEPRI, r5 ++0+.* <[^>]*> f385 8891 msr BASEPRI_NS, r5 ++0+.* <[^>]*> f386 8813 msr FAULTMASK, r6 ++0+.* <[^>]*> f386 8893 msr FAULTMASK_NS, r6 ++0+.* <[^>]*> f386 8813 msr FAULTMASK, r6 ++0+.* <[^>]*> f386 8893 msr FAULTMASK_NS, r6 ++0+.* <[^>]*> f387 8814 msr CONTROL, r7 ++0+.* <[^>]*> f387 8894 msr CONTROL_NS, r7 ++0+.* <[^>]*> f387 8814 msr CONTROL, r7 ++0+.* <[^>]*> f387 8894 msr CONTROL_NS, r7 ++0+.* <[^>]*> f388 8898 msr SP_NS, r8 ++0+.* <[^>]*> f388 8898 msr SP_NS, r8 +diff -rup binutils.orig/gas/testsuite/gas/arm/archv8m-cmse-msr-main.d binutils-2.27/gas/testsuite/gas/arm/archv8m-cmse-msr-main.d +--- binutils.orig/gas/testsuite/gas/arm/archv8m-cmse-msr-main.d 2017-08-09 10:26:30.056741684 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/archv8m-cmse-msr-main.d 2017-08-09 11:52:33.776902849 +0100 +@@ -6,27 +6,71 @@ + .*: +file format .*arm.* + + Disassembly of section .text: +-0+.* <[^>]*> f380 8808 msr MSP, r0 +-0+.* <[^>]*> f380 8808 msr MSP, r0 +-0+.* <[^>]*> f380 8888 msr MSP_NS, r0 +-0+.* <[^>]*> f380 8809 msr PSP, r0 +-0+.* <[^>]*> f380 8809 msr PSP, r0 +-0+.* <[^>]*> f380 8889 msr PSP_NS, r0 +-0+.* <[^>]*> f380 8808 msr MSP, r0 +-0+.* <[^>]*> f380 8808 msr MSP, r0 +-0+.* <[^>]*> f380 8888 msr MSP_NS, r0 +-0+.* <[^>]*> f380 8809 msr PSP, r0 +-0+.* <[^>]*> f380 8809 msr PSP, r0 +-0+.* <[^>]*> f380 8889 msr PSP_NS, r0 +-0+.* <[^>]*> f3ef 8008 mrs r0, MSP + 0+.* <[^>]*> f3ef 8008 mrs r0, MSP + 0+.* <[^>]*> f3ef 8088 mrs r0, MSP_NS +-0+.* <[^>]*> f3ef 8009 mrs r0, PSP +-0+.* <[^>]*> f3ef 8009 mrs r0, PSP +-0+.* <[^>]*> f3ef 8089 mrs r0, PSP_NS +-0+.* <[^>]*> f3ef 8008 mrs r0, MSP + 0+.* <[^>]*> f3ef 8008 mrs r0, MSP + 0+.* <[^>]*> f3ef 8088 mrs r0, MSP_NS +-0+.* <[^>]*> f3ef 8009 mrs r0, PSP +-0+.* <[^>]*> f3ef 8009 mrs r0, PSP +-0+.* <[^>]*> f3ef 8089 mrs r0, PSP_NS ++0+.* <[^>]*> f3ef 8109 mrs r1, PSP ++0+.* <[^>]*> f3ef 8189 mrs r1, PSP_NS ++0+.* <[^>]*> f3ef 8109 mrs r1, PSP ++0+.* <[^>]*> f3ef 8189 mrs r1, PSP_NS ++0+.* <[^>]*> f3ef 820a mrs r2, MSPLIM ++0+.* <[^>]*> f3ef 828a mrs r2, MSPLIM_NS ++0+.* <[^>]*> f3ef 820a mrs r2, MSPLIM ++0+.* <[^>]*> f3ef 828a mrs r2, MSPLIM_NS ++0+.* <[^>]*> f3ef 830b mrs r3, PSPLIM ++0+.* <[^>]*> f3ef 838b mrs r3, PSPLIM_NS ++0+.* <[^>]*> f3ef 830b mrs r3, PSPLIM ++0+.* <[^>]*> f3ef 838b mrs r3, PSPLIM_NS ++0+.* <[^>]*> f3ef 8410 mrs r4, PRIMASK ++0+.* <[^>]*> f3ef 8490 mrs r4, PRIMASK_NS ++0+.* <[^>]*> f3ef 8410 mrs r4, PRIMASK ++0+.* <[^>]*> f3ef 8490 mrs r4, PRIMASK_NS ++0+.* <[^>]*> f3ef 8511 mrs r5, BASEPRI ++0+.* <[^>]*> f3ef 8591 mrs r5, BASEPRI_NS ++0+.* <[^>]*> f3ef 8511 mrs r5, BASEPRI ++0+.* <[^>]*> f3ef 8591 mrs r5, BASEPRI_NS ++0+.* <[^>]*> f3ef 8613 mrs r6, FAULTMASK ++0+.* <[^>]*> f3ef 8693 mrs r6, FAULTMASK_NS ++0+.* <[^>]*> f3ef 8613 mrs r6, FAULTMASK ++0+.* <[^>]*> f3ef 8693 mrs r6, FAULTMASK_NS ++0+.* <[^>]*> f3ef 8714 mrs r7, CONTROL ++0+.* <[^>]*> f3ef 8794 mrs r7, CONTROL_NS ++0+.* <[^>]*> f3ef 8714 mrs r7, CONTROL ++0+.* <[^>]*> f3ef 8794 mrs r7, CONTROL_NS ++0+.* <[^>]*> f3ef 8898 mrs r8, SP_NS ++0+.* <[^>]*> f3ef 8898 mrs r8, SP_NS ++0+.* <[^>]*> f380 8808 msr MSP, r0 ++0+.* <[^>]*> f380 8888 msr MSP_NS, r0 ++0+.* <[^>]*> f380 8808 msr MSP, r0 ++0+.* <[^>]*> f380 8888 msr MSP_NS, r0 ++0+.* <[^>]*> f381 8809 msr PSP, r1 ++0+.* <[^>]*> f381 8889 msr PSP_NS, r1 ++0+.* <[^>]*> f381 8809 msr PSP, r1 ++0+.* <[^>]*> f381 8889 msr PSP_NS, r1 ++0+.* <[^>]*> f382 880a msr MSPLIM, r2 ++0+.* <[^>]*> f382 888a msr MSPLIM_NS, r2 ++0+.* <[^>]*> f382 880a msr MSPLIM, r2 ++0+.* <[^>]*> f382 888a msr MSPLIM_NS, r2 ++0+.* <[^>]*> f383 880b msr PSPLIM, r3 ++0+.* <[^>]*> f383 888b msr PSPLIM_NS, r3 ++0+.* <[^>]*> f383 880b msr PSPLIM, r3 ++0+.* <[^>]*> f383 888b msr PSPLIM_NS, r3 ++0+.* <[^>]*> f384 8810 msr PRIMASK, r4 ++0+.* <[^>]*> f384 8890 msr PRIMASK_NS, r4 ++0+.* <[^>]*> f384 8810 msr PRIMASK, r4 ++0+.* <[^>]*> f384 8890 msr PRIMASK_NS, r4 ++0+.* <[^>]*> f385 8811 msr BASEPRI, r5 ++0+.* <[^>]*> f385 8891 msr BASEPRI_NS, r5 ++0+.* <[^>]*> f385 8811 msr BASEPRI, r5 ++0+.* <[^>]*> f385 8891 msr BASEPRI_NS, r5 ++0+.* <[^>]*> f386 8813 msr FAULTMASK, r6 ++0+.* <[^>]*> f386 8893 msr FAULTMASK_NS, r6 ++0+.* <[^>]*> f386 8813 msr FAULTMASK, r6 ++0+.* <[^>]*> f386 8893 msr FAULTMASK_NS, r6 ++0+.* <[^>]*> f387 8814 msr CONTROL, r7 ++0+.* <[^>]*> f387 8894 msr CONTROL_NS, r7 ++0+.* <[^>]*> f387 8814 msr CONTROL, r7 ++0+.* <[^>]*> f387 8894 msr CONTROL_NS, r7 ++0+.* <[^>]*> f388 8898 msr SP_NS, r8 ++0+.* <[^>]*> f388 8898 msr SP_NS, r8 +diff -rup binutils.orig/gas/testsuite/gas/arm/archv8m-cmse-msr.s binutils-2.27/gas/testsuite/gas/arm/archv8m-cmse-msr.s +--- binutils.orig/gas/testsuite/gas/arm/archv8m-cmse-msr.s 2017-08-09 10:26:30.056741684 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/archv8m-cmse-msr.s 2017-08-09 11:50:44.728124484 +0100 +@@ -1,25 +1,109 @@ + T: +-msr MSP, r0 +-msr MSP_S, r0 +-msr MSP_NS, r0 +-msr PSP, r0 +-msr PSP_S, r0 +-msr PSP_NS, r0 +-msr msp, r0 +-msr msp_s, r0 +-msr msp_ns, r0 +-msr psp, r0 +-msr psp_s, r0 +-msr psp_ns, r0 ++## MRS ## ++ ++# MSP + mrs r0, MSP +-mrs r0, MSP_S + mrs r0, MSP_NS +-mrs r0, PSP +-mrs r0, PSP_S +-mrs r0, PSP_NS + mrs r0, msp +-mrs r0, msp_s + mrs r0, msp_ns +-mrs r0, psp +-mrs r0, psp_s +-mrs r0, psp_ns ++ ++# PSP ++mrs r1, PSP ++mrs r1, PSP_NS ++mrs r1, psp ++mrs r1, psp_ns ++ ++# MSPLIM ++mrs r2, MSPLIM ++mrs r2, MSPLIM_NS ++mrs r2, msplim ++mrs r2, msplim_ns ++ ++# PSPLIM ++mrs r3, PSPLIM ++mrs r3, PSPLIM_NS ++mrs r3, psplim ++mrs r3, psplim_ns ++ ++# PRIMASK ++mrs r4, PRIMASK ++mrs r4, PRIMASK_NS ++mrs r4, primask ++mrs r4, primask_ns ++ ++# BASEPRI ++mrs r5, BASEPRI ++mrs r5, BASEPRI_NS ++mrs r5, basepri ++mrs r5, basepri_ns ++ ++# FAULTMASK ++mrs r6, FAULTMASK ++mrs r6, FAULTMASK_NS ++mrs r6, faultmask ++mrs r6, faultmask_ns ++ ++# CONTROL ++mrs r7, CONTROL ++mrs r7, CONTROL_NS ++mrs r7, control ++mrs r7, control_ns ++ ++# SP_NS ++mrs r8, SP_NS ++mrs r8, sp_ns ++ ++ ++## MSR ## ++ ++# MSP ++msr MSP, r0 ++msr MSP_NS, r0 ++msr msp, r0 ++msr msp_ns, r0 ++ ++# PSP ++msr PSP, r1 ++msr PSP_NS, r1 ++msr psp, r1 ++msr psp_ns, r1 ++ ++# MSPLIM ++msr MSPLIM, r2 ++msr MSPLIM_NS, r2 ++msr msplim, r2 ++msr msplim_ns, r2 ++ ++# PSPLIM ++msr PSPLIM, r3 ++msr PSPLIM_NS, r3 ++msr psplim, r3 ++msr psplim_ns, r3 ++ ++# PRIMASK ++msr PRIMASK, r4 ++msr PRIMASK_NS, r4 ++msr primask, r4 ++msr primask_ns, r4 ++ ++# BASEPRI ++msr BASEPRI, r5 ++msr BASEPRI_NS, r5 ++msr basepri, r5 ++msr basepri_ns, r5 ++ ++# FAULTMASK ++msr FAULTMASK, r6 ++msr FAULTMASK_NS, r6 ++msr faultmask, r6 ++msr faultmask_ns, r6 ++ ++# CONTROL ++msr CONTROL, r7 ++msr CONTROL_NS, r7 ++msr control, r7 ++msr control_ns, r7 ++ ++# SP_NS ++msr SP_NS, r8 ++msr sp_ns, r8 +diff -rup binutils.orig/gas/testsuite/gas/arm/archv8m-main-dsp-4.d binutils-2.27/gas/testsuite/gas/arm/archv8m-main-dsp-4.d +--- binutils.orig/gas/testsuite/gas/arm/archv8m-main-dsp-4.d 2017-08-09 10:26:30.056741684 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/archv8m-main-dsp-4.d 2017-08-09 11:54:37.162524973 +0100 +@@ -6,27 +6,71 @@ + .*: +file format .*arm.* + + Disassembly of section .text: +-0+.* <[^>]*> f380 8808 msr MSP, r0 +-0+.* <[^>]*> f380 8808 msr MSP, r0 +-0+.* <[^>]*> f380 8888 msr MSP_NS, r0 +-0+.* <[^>]*> f380 8809 msr PSP, r0 +-0+.* <[^>]*> f380 8809 msr PSP, r0 +-0+.* <[^>]*> f380 8889 msr PSP_NS, r0 +-0+.* <[^>]*> f380 8808 msr MSP, r0 +-0+.* <[^>]*> f380 8808 msr MSP, r0 +-0+.* <[^>]*> f380 8888 msr MSP_NS, r0 +-0+.* <[^>]*> f380 8809 msr PSP, r0 +-0+.* <[^>]*> f380 8809 msr PSP, r0 +-0+.* <[^>]*> f380 8889 msr PSP_NS, r0 +-0+.* <[^>]*> f3ef 8008 mrs r0, MSP + 0+.* <[^>]*> f3ef 8008 mrs r0, MSP + 0+.* <[^>]*> f3ef 8088 mrs r0, MSP_NS +-0+.* <[^>]*> f3ef 8009 mrs r0, PSP +-0+.* <[^>]*> f3ef 8009 mrs r0, PSP +-0+.* <[^>]*> f3ef 8089 mrs r0, PSP_NS +-0+.* <[^>]*> f3ef 8008 mrs r0, MSP + 0+.* <[^>]*> f3ef 8008 mrs r0, MSP + 0+.* <[^>]*> f3ef 8088 mrs r0, MSP_NS +-0+.* <[^>]*> f3ef 8009 mrs r0, PSP +-0+.* <[^>]*> f3ef 8009 mrs r0, PSP +-0+.* <[^>]*> f3ef 8089 mrs r0, PSP_NS ++0+.* <[^>]*> f3ef 8109 mrs r1, PSP ++0+.* <[^>]*> f3ef 8189 mrs r1, PSP_NS ++0+.* <[^>]*> f3ef 8109 mrs r1, PSP ++0+.* <[^>]*> f3ef 8189 mrs r1, PSP_NS ++0+.* <[^>]*> f3ef 820a mrs r2, MSPLIM ++0+.* <[^>]*> f3ef 828a mrs r2, MSPLIM_NS ++0+.* <[^>]*> f3ef 820a mrs r2, MSPLIM ++0+.* <[^>]*> f3ef 828a mrs r2, MSPLIM_NS ++0+.* <[^>]*> f3ef 830b mrs r3, PSPLIM ++0+.* <[^>]*> f3ef 838b mrs r3, PSPLIM_NS ++0+.* <[^>]*> f3ef 830b mrs r3, PSPLIM ++0+.* <[^>]*> f3ef 838b mrs r3, PSPLIM_NS ++0+.* <[^>]*> f3ef 8410 mrs r4, PRIMASK ++0+.* <[^>]*> f3ef 8490 mrs r4, PRIMASK_NS ++0+.* <[^>]*> f3ef 8410 mrs r4, PRIMASK ++0+.* <[^>]*> f3ef 8490 mrs r4, PRIMASK_NS ++0+.* <[^>]*> f3ef 8511 mrs r5, BASEPRI ++0+.* <[^>]*> f3ef 8591 mrs r5, BASEPRI_NS ++0+.* <[^>]*> f3ef 8511 mrs r5, BASEPRI ++0+.* <[^>]*> f3ef 8591 mrs r5, BASEPRI_NS ++0+.* <[^>]*> f3ef 8613 mrs r6, FAULTMASK ++0+.* <[^>]*> f3ef 8693 mrs r6, FAULTMASK_NS ++0+.* <[^>]*> f3ef 8613 mrs r6, FAULTMASK ++0+.* <[^>]*> f3ef 8693 mrs r6, FAULTMASK_NS ++0+.* <[^>]*> f3ef 8714 mrs r7, CONTROL ++0+.* <[^>]*> f3ef 8794 mrs r7, CONTROL_NS ++0+.* <[^>]*> f3ef 8714 mrs r7, CONTROL ++0+.* <[^>]*> f3ef 8794 mrs r7, CONTROL_NS ++0+.* <[^>]*> f3ef 8898 mrs r8, SP_NS ++0+.* <[^>]*> f3ef 8898 mrs r8, SP_NS ++0+.* <[^>]*> f380 8808 msr MSP, r0 ++0+.* <[^>]*> f380 8888 msr MSP_NS, r0 ++0+.* <[^>]*> f380 8808 msr MSP, r0 ++0+.* <[^>]*> f380 8888 msr MSP_NS, r0 ++0+.* <[^>]*> f381 8809 msr PSP, r1 ++0+.* <[^>]*> f381 8889 msr PSP_NS, r1 ++0+.* <[^>]*> f381 8809 msr PSP, r1 ++0+.* <[^>]*> f381 8889 msr PSP_NS, r1 ++0+.* <[^>]*> f382 880a msr MSPLIM, r2 ++0+.* <[^>]*> f382 888a msr MSPLIM_NS, r2 ++0+.* <[^>]*> f382 880a msr MSPLIM, r2 ++0+.* <[^>]*> f382 888a msr MSPLIM_NS, r2 ++0+.* <[^>]*> f383 880b msr PSPLIM, r3 ++0+.* <[^>]*> f383 888b msr PSPLIM_NS, r3 ++0+.* <[^>]*> f383 880b msr PSPLIM, r3 ++0+.* <[^>]*> f383 888b msr PSPLIM_NS, r3 ++0+.* <[^>]*> f384 8810 msr PRIMASK, r4 ++0+.* <[^>]*> f384 8890 msr PRIMASK_NS, r4 ++0+.* <[^>]*> f384 8810 msr PRIMASK, r4 ++0+.* <[^>]*> f384 8890 msr PRIMASK_NS, r4 ++0+.* <[^>]*> f385 8811 msr BASEPRI, r5 ++0+.* <[^>]*> f385 8891 msr BASEPRI_NS, r5 ++0+.* <[^>]*> f385 8811 msr BASEPRI, r5 ++0+.* <[^>]*> f385 8891 msr BASEPRI_NS, r5 ++0+.* <[^>]*> f386 8813 msr FAULTMASK, r6 ++0+.* <[^>]*> f386 8893 msr FAULTMASK_NS, r6 ++0+.* <[^>]*> f386 8813 msr FAULTMASK, r6 ++0+.* <[^>]*> f386 8893 msr FAULTMASK_NS, r6 ++0+.* <[^>]*> f387 8814 msr CONTROL, r7 ++0+.* <[^>]*> f387 8894 msr CONTROL_NS, r7 ++0+.* <[^>]*> f387 8814 msr CONTROL, r7 ++0+.* <[^>]*> f387 8894 msr CONTROL_NS, r7 ++0+.* <[^>]*> f388 8898 msr SP_NS, r8 ++0+.* <[^>]*> f388 8898 msr SP_NS, r8 +diff -rup binutils.orig/gas/testsuite/gas/arm/attr-march-armv1.d binutils-2.27/gas/testsuite/gas/arm/attr-march-armv1.d +--- binutils.orig/gas/testsuite/gas/arm/attr-march-armv1.d 2017-08-09 10:26:30.058741661 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/attr-march-armv1.d 2017-08-09 11:56:00.992588823 +0100 +@@ -8,5 +8,4 @@ + Attribute Section: aeabi + File Attributes + Tag_CPU_name: "1" +- Tag_CPU_arch: v4 + Tag_ARM_ISA_use: Yes +diff -rup binutils.orig/gas/testsuite/gas/arm/attr-march-armv2a.d binutils-2.27/gas/testsuite/gas/arm/attr-march-armv2a.d +--- binutils.orig/gas/testsuite/gas/arm/attr-march-armv2a.d 2017-08-09 10:26:30.058741661 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/attr-march-armv2a.d 2017-08-09 11:56:27.548292268 +0100 +@@ -8,5 +8,4 @@ + Attribute Section: aeabi + File Attributes + Tag_CPU_name: "2A" +- Tag_CPU_arch: v4 + Tag_ARM_ISA_use: Yes +diff -rup binutils.orig/gas/testsuite/gas/arm/attr-march-armv2.d binutils-2.27/gas/testsuite/gas/arm/attr-march-armv2.d +--- binutils.orig/gas/testsuite/gas/arm/attr-march-armv2.d 2017-08-09 10:26:30.058741661 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/attr-march-armv2.d 2017-08-09 11:56:09.713491434 +0100 +@@ -8,5 +8,4 @@ + Attribute Section: aeabi + File Attributes + Tag_CPU_name: "2" +- Tag_CPU_arch: v4 + Tag_ARM_ISA_use: Yes +diff -rup binutils.orig/gas/testsuite/gas/arm/attr-march-armv2s.d binutils-2.27/gas/testsuite/gas/arm/attr-march-armv2s.d +--- binutils.orig/gas/testsuite/gas/arm/attr-march-armv2s.d 2017-08-09 10:26:30.058741661 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/attr-march-armv2s.d 2017-08-09 11:56:35.794200184 +0100 +@@ -8,5 +8,4 @@ + Attribute Section: aeabi + File Attributes + Tag_CPU_name: "2S" +- Tag_CPU_arch: v4 + Tag_ARM_ISA_use: Yes +diff -rup binutils.orig/gas/testsuite/gas/arm/attr-march-armv3.d binutils-2.27/gas/testsuite/gas/arm/attr-march-armv3.d +--- binutils.orig/gas/testsuite/gas/arm/attr-march-armv3.d 2017-08-09 10:26:30.058741661 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/attr-march-armv3.d 2017-08-09 11:56:52.435014353 +0100 +@@ -8,5 +8,4 @@ + Attribute Section: aeabi + File Attributes + Tag_CPU_name: "3" +- Tag_CPU_arch: v4 + Tag_ARM_ISA_use: Yes +diff -rup binutils.orig/gas/testsuite/gas/arm/attr-march-armv3m.d binutils-2.27/gas/testsuite/gas/arm/attr-march-armv3m.d +--- binutils.orig/gas/testsuite/gas/arm/attr-march-armv3m.d 2017-08-09 10:26:30.058741661 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/attr-march-armv3m.d 2017-08-09 11:56:57.715955379 +0100 +@@ -8,5 +8,4 @@ + Attribute Section: aeabi + File Attributes + Tag_CPU_name: "3M" +- Tag_CPU_arch: v4 + Tag_ARM_ISA_use: Yes +diff -rup binutils.orig/gas/testsuite/gas/arm/ldr-bad.l binutils-2.27/gas/testsuite/gas/arm/ldr-bad.l +--- binutils.orig/gas/testsuite/gas/arm/ldr-bad.l 2017-08-09 10:26:30.062741616 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/ldr-bad.l 2017-08-09 11:59:45.777078600 +0100 +@@ -1,7 +1,7 @@ + [^:]*: Assembler messages: + [^:]*:5: Warning: destination register same as write-back base +-[^:]*:9: Error: ldr to register 15 must be 4-byte alligned -- `ldr r15,\[r15,#5\]' +-[^:]*:12: Error: ldr to register 15 must be 4-byte alligned -- `ldr r15,.-0xab7' ++[^:]*:9: Error: ldr to register 15 must be 4-byte aligned -- `ldr r15,\[r15,#5\]' ++[^:]*:12: Error: ldr to register 15 must be 4-byte aligned -- `ldr r15,.-0xab7' + [^:]*:15: Warning: destination register same as write-back base + [^:]*:16: Error: cannot use register index with PC-relative addressing -- `ldr r2,\[r15,r2\]!' + [^:]*:19: Error: cannot use register index with PC-relative addressing -- `ldr r1,\[r1,r15\]' +diff -rup binutils.orig/gas/testsuite/gas/arm/ldr-t-bad.l binutils-2.27/gas/testsuite/gas/arm/ldr-t-bad.l +--- binutils.orig/gas/testsuite/gas/arm/ldr-t-bad.l 2017-08-09 10:26:30.062741616 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/ldr-t-bad.l 2017-08-09 12:00:06.268849764 +0100 +@@ -1,9 +1,9 @@ + [^:]*: Assembler messages: + [^:]*:8: Error: registers may not be the same -- `ldr r1,\[r1,#5\]!' +-[^:]*:12: Error: ldr to register 15 must be 4-byte alligned -- `ldr r15,\[r15,#5\]' ++[^:]*:12: Error: ldr to register 15 must be 4-byte aligned -- `ldr r15,\[r15,#5\]' + [^:]*:16: Error: branch must be last instruction in IT block -- `ldrge r15,\[r15,#4\]' + [^:]*:25: Error: branch must be last instruction in IT block -- `ldrge r15,.0x4' +-[^:]*:30: Error: ldr to register 15 must be 4-byte alligned -- `ldr r15,.-0xab7' ++[^:]*:30: Error: ldr to register 15 must be 4-byte aligned -- `ldr r15,.-0xab7' + [^:]*:36: Error: branch must be last instruction in IT block -- `ldrge r15,\[r15,r1\]' + [^:]*:41: Error: r13 not allowed here -- `ldr r1,\[r2,r13\]' + [^:]*:42: Error: r15 not allowed here -- `ldr r2,\[r2,r15\]' +diff -rup binutils.orig/gas/testsuite/gas/arm/ld-sp-warn.l binutils-2.27/gas/testsuite/gas/arm/ld-sp-warn.l +--- binutils.orig/gas/testsuite/gas/arm/ld-sp-warn.l 2017-08-09 10:26:30.062741616 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/ld-sp-warn.l 2017-08-09 11:59:02.223564973 +0100 +@@ -2,4 +2,3 @@ + [^:]*:3: Warning: This instruction may be unpredictable if executed on M-profile cores with interrupts enabled. + [^:]*:4: Warning: This instruction may be unpredictable if executed on M-profile cores with interrupts enabled. + [^:]*:7: Error: Thumb does not support register indexing with writeback -- `ldr r1,\[r0,r1\]!' +-[^:]*:8: Error: r13 not allowed here -- `ldrsb sp,\[r2,#16\]!' +diff -rup binutils.orig/gas/testsuite/gas/arm/strex-bad-t.d binutils-2.27/gas/testsuite/gas/arm/strex-bad-t.d +--- binutils.orig/gas/testsuite/gas/arm/strex-bad-t.d 2017-08-09 10:26:30.066741571 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/strex-bad-t.d 2017-08-09 12:01:22.679996462 +0100 +@@ -1,3 +1,4 @@ + # name: Bad addressing modes STREXH/STREXB. - THUMB ++# as: -march=armv7-a + # error-output: strex-bad-t.l + +diff -rup binutils.orig/gas/testsuite/gas/arm/thumb2_ldr_immediate_highregs_armv6t2.d binutils-2.27/gas/testsuite/gas/arm/thumb2_ldr_immediate_highregs_armv6t2.d +--- binutils.orig/gas/testsuite/gas/arm/thumb2_ldr_immediate_highregs_armv6t2.d 2017-08-09 10:26:30.067741560 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/thumb2_ldr_immediate_highregs_armv6t2.d 2017-08-09 11:57:45.943416812 +0100 +@@ -6,19 +6,23 @@ + .*: +file format .*arm.* + + Disassembly of section \.text: +-0[0-9a-f]+ <[^>]+> 2000[[:space:]]+movs[[:space:]]+r0, #0.* +-0[0-9a-f]+ <[^>]+> 2108[[:space:]]+movs[[:space:]]+r1, #8.* +-0[0-9a-f]+ <[^>]+> 2251[[:space:]]+movs[[:space:]]+r2, #81.* +-0[0-9a-f]+ <[^>]+> 231f[[:space:]]+movs[[:space:]]+r3, #31.* +-0[0-9a-f]+ <[^>]+> 242f[[:space:]]+movs[[:space:]]+r4, #47.* +-0[0-9a-f]+ <[^>]+> 253f[[:space:]]+movs[[:space:]]+r5, #63.* +-0[0-9a-f]+ <[^>]+> 2680[[:space:]]+movs[[:space:]]+r6, #128.* +-0[0-9a-f]+ <[^>]+> 27ff[[:space:]]+movs[[:space:]]+r7, #255.* ++0[0-9a-f]+ <[^>]+> f04f 0000[[:space:]]+mov\.w[[:space:]]+r0, #0.* ++0[0-9a-f]+ <[^>]+> f04f 0108[[:space:]]+mov\.w[[:space:]]+r1, #8.* ++0[0-9a-f]+ <[^>]+> f04f 0251[[:space:]]+mov\.w[[:space:]]+r2, #81.* ++0[0-9a-f]+ <[^>]+> f04f 031f[[:space:]]+mov\.w[[:space:]]+r3, #31.* ++0[0-9a-f]+ <[^>]+> f04f 042f[[:space:]]+mov\.w[[:space:]]+r4, #47.* ++0[0-9a-f]+ <[^>]+> f04f 053f[[:space:]]+mov\.w[[:space:]]+r5, #63.* ++0[0-9a-f]+ <[^>]+> f04f 0680[[:space:]]+mov\.w[[:space:]]+r6, #128.* ++0[0-9a-f]+ <[^>]+> f04f 07ff[[:space:]]+mov\.w[[:space:]]+r7, #255.* + 0[0-9a-f]+ <[^>]+> f04f 0800[[:space:]]+mov\.w[[:space:]]+r8, #0.* + 0[0-9a-f]+ <[^>]+> f04f 0908[[:space:]]+mov\.w[[:space:]]+r9, #8.* + 0[0-9a-f]+ <[^>]+> f04f 0a51[[:space:]]+mov\.w[[:space:]]+sl, #81.* + 0[0-9a-f]+ <[^>]+> f04f 0b1f[[:space:]]+mov\.w[[:space:]]+fp, #31.* + 0[0-9a-f]+ <[^>]+> f04f 0c2f[[:space:]]+mov\.w[[:space:]]+ip, #47.* +-0[0-9a-f]+ <[^>]+> f04f 0d3f[[:space:]]+mov\.w[[:space:]]+sp, #63.* + 0[0-9a-f]+ <[^>]+> f04f 0e80[[:space:]]+mov\.w[[:space:]]+lr, #128.* +-0[0-9a-f]+ <[^>]+> f04f 0fff[[:space:]]+mov\.w[[:space:]]+pc, #255.* ++0[0-9a-f]+ <[^>]+> f64f 78ff[[:space:]]+movw[[:space:]]+r8, #65535.* ++0[0-9a-f]+ <[^>]+> f24f 09f0[[:space:]]+movw[[:space:]]+r9, #61680.* ++0[0-9a-f]+ <[^>]+> f8df d004[[:space:]]+ldr\.w[[:space:]]+sp, \[pc, #4\].* ++0[0-9a-f]+ <[^>]+> f8df f004[[:space:]]+ldr\.w[[:space:]]+pc, \[pc, #4\].* ++0[0-9a-f]+ <[^>]+> 0000003f[[:space:]]+.word[[:space:]]+0x0000003f.* ++0[0-9a-f]+ <[^>]+> 000000ff[[:space:]]+.word[[:space:]]+0x000000ff.* +diff -rup binutils.orig/gas/testsuite/gas/arm/thumb2_ldr_immediate_highregs_armv6t2.s binutils-2.27/gas/testsuite/gas/arm/thumb2_ldr_immediate_highregs_armv6t2.s +--- binutils.orig/gas/testsuite/gas/arm/thumb2_ldr_immediate_highregs_armv6t2.s 2017-08-09 10:26:30.067741560 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/thumb2_ldr_immediate_highregs_armv6t2.s 2017-08-09 11:58:27.561952048 +0100 +@@ -2,8 +2,8 @@ + .syntax unified + .thumb_func + thumb2_ldr: +- # These can be encoded into movs since constant is small +- # And register can be encoded in 3 bits ++ # These must be encoded into mov.w despite constant and register being ++ # small enough as ldr should not generate a flag-setting instruction. + ldr r0,=0x00 + ldr r1,=0x08 + ldr r2,=0x51 +@@ -12,13 +12,19 @@ thumb2_ldr: + ldr r5,=0x3F + ldr r6,=0x80 + ldr r7,=0xFF +- # These shall be encoded into mov.w +- # Since register cannot be encoded in 3 bits ++ # These shall be encoded into mov.w since register cannot be encoded in ++ # 3 bits + ldr r8,=0x00 + ldr r9,=0x08 + ldr r10,=0x51 + ldr r11,=0x1F + ldr r12,=0x2F +- ldr r13,=0x3F + ldr r14,=0x80 ++ # These shall be encoded into movw since immediate cannot be encoded ++ # with mov.w ++ ldr r8,=0xFFFF ++ ldr r9,=0xF0F0 ++ # These should be encoded as ldr since mov immediate is unpredictable ++ # for sp and pc ++ ldr r13,=0x3F + ldr r15,=0xFF +diff -rup binutils.orig/include/opcode/arm.h binutils-2.27/include/opcode/arm.h +--- binutils.orig/include/opcode/arm.h 2017-08-09 10:26:30.209739969 +0100 ++++ binutils-2.27/include/opcode/arm.h 2017-08-09 11:11:08.487736404 +0100 +@@ -64,6 +64,8 @@ + #define ARM_EXT2_FP16_INST 0x00000020 /* ARM V8.2A FP16 instructions. */ + #define ARM_EXT2_V8M_MAIN 0x00000040 /* ARMv8-M Mainline. */ + #define ARM_EXT2_RAS 0x00000080 /* RAS extension. */ ++#define ARM_EXT2_V8_3A 0x00000100 /* ARM V8.3A. */ ++#define ARM_EXT2_V8A 0x00000200 /* ARMv8-A. */ + + /* Co-processor space extensions. */ + #define ARM_CEXT_XSCALE 0x00000001 /* Allow MIA etc. */ +@@ -92,6 +94,7 @@ + #define CRC_EXT_ARMV8 0x00004000 /* CRC32 for ARMv8. */ + #define FPU_VFP_EXT_ARMV8xD 0x00002000 /* Single-precision FP for ARMv8. */ + #define FPU_NEON_EXT_RDMA 0x00001000 /* v8.1 Adv.SIMD extensions. */ ++#define FPU_NEON_EXT_DOTPROD 0x00000800 /* Dot Product extension. */ + + /* Architectures are the sum of the base and extensions. The ARM ARM (rev E) + defines the following: ARMv3, ARMv3M, ARMv4xM, ARMv4, ARMv4TxM, ARMv4T, +@@ -105,12 +108,14 @@ + #define ARM_AEXT_V3M (ARM_AEXT_V3 | ARM_EXT_V3M) + #define ARM_AEXT_V4xM (ARM_AEXT_V3 | ARM_EXT_V4) + #define ARM_AEXT_V4 (ARM_AEXT_V3M | ARM_EXT_V4) +-#define ARM_AEXT_V4TxM (ARM_AEXT_V4xM | ARM_EXT_V4T) +-#define ARM_AEXT_V4T (ARM_AEXT_V4 | ARM_EXT_V4T) ++#define ARM_AEXT_V4TxM (ARM_AEXT_V4xM | ARM_EXT_V4T | ARM_EXT_OS) ++#define ARM_AEXT_V4T (ARM_AEXT_V4 | ARM_EXT_V4T | ARM_EXT_OS) + #define ARM_AEXT_V5xM (ARM_AEXT_V4xM | ARM_EXT_V5) + #define ARM_AEXT_V5 (ARM_AEXT_V4 | ARM_EXT_V5) +-#define ARM_AEXT_V5TxM (ARM_AEXT_V5xM | ARM_EXT_V4T | ARM_EXT_V5T) +-#define ARM_AEXT_V5T (ARM_AEXT_V5 | ARM_EXT_V4T | ARM_EXT_V5T) ++#define ARM_AEXT_V5TxM (ARM_AEXT_V5xM | ARM_EXT_V4T | ARM_EXT_V5T \ ++ | ARM_EXT_OS) ++#define ARM_AEXT_V5T (ARM_AEXT_V5 | ARM_EXT_V4T | ARM_EXT_V5T \ ++ | ARM_EXT_OS) + #define ARM_AEXT_V5TExP (ARM_AEXT_V5T | ARM_EXT_V5ExP) + #define ARM_AEXT_V5TE (ARM_AEXT_V5TExP | ARM_EXT_V5E) + #define ARM_AEXT_V5TEJ (ARM_AEXT_V5TE | ARM_EXT_V5J) +@@ -135,7 +140,7 @@ + #define ARM_AEXT_V6M_ONLY \ + ((ARM_EXT_BARRIER | ARM_EXT_V6M | ARM_EXT_THUMB_MSR) & ~(ARM_AEXT_NOTM)) + #define ARM_AEXT_V6M \ +- ((ARM_AEXT_V6K | ARM_AEXT_V6M_ONLY) & ~(ARM_AEXT_NOTM)) ++ ((ARM_AEXT_V6K | ARM_AEXT_V6M_ONLY) & ~(ARM_AEXT_NOTM | ARM_EXT_OS)) + #define ARM_AEXT_V6SM (ARM_AEXT_V6M | ARM_EXT_OS) + #define ARM_AEXT_V7M \ + ((ARM_AEXT_V7_ARM | ARM_EXT_V6M | ARM_EXT_V7M | ARM_EXT_DIV) \ +@@ -146,13 +151,19 @@ + #define ARM_AEXT_V8A \ + (ARM_AEXT_V7A | ARM_EXT_MP | ARM_EXT_SEC | ARM_EXT_DIV | ARM_EXT_ADIV \ + | ARM_EXT_VIRT | ARM_EXT_V8) +-#define ARM_AEXT2_V8A (ARM_EXT2_V6T2_V8M | ARM_EXT2_ATOMICS) ++#define ARM_AEXT2_V8AR (ARM_EXT2_V6T2_V8M | ARM_EXT2_ATOMICS) ++#define ARM_AEXT2_V8A (ARM_AEXT2_V8AR | ARM_EXT2_V8A) + #define ARM_AEXT2_V8_1A (ARM_AEXT2_V8A | ARM_EXT2_PAN) + #define ARM_AEXT2_V8_2A (ARM_AEXT2_V8_1A | ARM_EXT2_V8_2A | ARM_EXT2_RAS) ++#define ARM_AEXT2_V8_3A (ARM_AEXT2_V8_2A | ARM_EXT2_V8_3A) + #define ARM_AEXT_V8M_BASE (ARM_AEXT_V6SM | ARM_EXT_DIV) + #define ARM_AEXT_V8M_MAIN ARM_AEXT_V7M ++#define ARM_AEXT_V8M_MAIN_DSP ARM_AEXT_V7EM + #define ARM_AEXT2_V8M (ARM_EXT2_V8M | ARM_EXT2_ATOMICS | ARM_EXT2_V6T2_V8M) + #define ARM_AEXT2_V8M_MAIN (ARM_AEXT2_V8M | ARM_EXT2_V8M_MAIN) ++#define ARM_AEXT2_V8M_MAIN_DSP ARM_AEXT2_V8M_MAIN ++#define ARM_AEXT_V8R ARM_AEXT_V8A ++#define ARM_AEXT2_V8R ARM_AEXT2_V8AR + + /* Processors with specific extensions in the co-processor space. */ + #define ARM_ARCH_XSCALE ARM_FEATURE_LOW (ARM_AEXT_V5TE, ARM_CEXT_XSCALE) +@@ -224,6 +235,8 @@ + #define FPU_ARCH_CRYPTO_NEON_VFP_ARMV8_1 \ + ARM_FEATURE_COPROC (FPU_CRYPTO_ARMV8 | FPU_NEON_ARMV8 | FPU_VFP_ARMV8 \ + | FPU_NEON_EXT_RDMA) ++#define FPU_ARCH_DOTPROD_NEON_VFP_ARMV8 \ ++ ARM_FEATURE_COPROC (FPU_NEON_EXT_DOTPROD | FPU_NEON_ARMV8 | FPU_VFP_ARMV8) + + + #define FPU_ARCH_ENDIAN_PURE ARM_FEATURE_COPROC (FPU_ENDIAN_PURE) +@@ -263,18 +276,26 @@ + #define ARM_ARCH_V7M ARM_FEATURE_CORE (ARM_AEXT_V7M, ARM_EXT2_V6T2_V8M) + #define ARM_ARCH_V7EM ARM_FEATURE_CORE (ARM_AEXT_V7EM, ARM_EXT2_V6T2_V8M) + #define ARM_ARCH_V8A ARM_FEATURE_CORE (ARM_AEXT_V8A, ARM_AEXT2_V8A) ++#define ARM_ARCH_V8A_CRC ARM_FEATURE (ARM_AEXT_V8A, ARM_AEXT2_V8A, \ ++ CRC_EXT_ARMV8) + #define ARM_ARCH_V8_1A ARM_FEATURE (ARM_AEXT_V8A, ARM_AEXT2_V8_1A, \ + CRC_EXT_ARMV8 | FPU_NEON_EXT_RDMA) + #define ARM_ARCH_V8_2A ARM_FEATURE (ARM_AEXT_V8A, ARM_AEXT2_V8_2A, \ + CRC_EXT_ARMV8 | FPU_NEON_EXT_RDMA) ++#define ARM_ARCH_V8_3A ARM_FEATURE (ARM_AEXT_V8A, ARM_AEXT2_V8_3A, \ ++ CRC_EXT_ARMV8 | FPU_NEON_EXT_RDMA) + #define ARM_ARCH_V8M_BASE ARM_FEATURE_CORE (ARM_AEXT_V8M_BASE, ARM_AEXT2_V8M) + #define ARM_ARCH_V8M_MAIN ARM_FEATURE_CORE (ARM_AEXT_V8M_MAIN, \ + ARM_AEXT2_V8M_MAIN) ++#define ARM_ARCH_V8M_MAIN_DSP ARM_FEATURE_CORE (ARM_AEXT_V8M_MAIN_DSP, \ ++ ARM_AEXT2_V8M_MAIN_DSP) ++#define ARM_ARCH_V8R ARM_FEATURE_CORE (ARM_AEXT_V8R, ARM_AEXT2_V8R) + + /* Some useful combinations: */ + #define ARM_ARCH_NONE ARM_FEATURE_LOW (0, 0) + #define FPU_NONE ARM_FEATURE_LOW (0, 0) + #define ARM_ANY ARM_FEATURE (-1, -1, 0) /* Any basic core. */ ++#define FPU_ANY ARM_FEATURE_COPROC (-1) /* Any FPU. */ + #define ARM_FEATURE_ALL ARM_FEATURE (-1, -1, -1)/* All CPU and FPU features. */ + #define FPU_ANY_HARD ARM_FEATURE_COPROC (FPU_FPA | FPU_VFP_HARD | FPU_MAVERICK) + /* Extensions containing some Thumb-2 instructions. If any is present, Thumb +diff -rup binutils.orig/opcodes/arm-dis.c binutils-2.27/opcodes/arm-dis.c +--- binutils.orig/opcodes/arm-dis.c 2017-08-09 10:26:30.352738367 +0100 ++++ binutils-2.27/opcodes/arm-dis.c 2017-08-09 11:44:50.913090391 +0100 +@@ -26,6 +26,7 @@ + #include "opcode/arm.h" + #include "opintl.h" + #include "safe-ctype.h" ++#include "libiberty.h" + #include "floatformat.h" + + /* FIXME: This shouldn't be done here. */ +@@ -41,10 +42,6 @@ + #define strneq(a,b,n) (strncmp ((a), (b), (n)) == 0) + #endif + +-#ifndef NUM_ELEM +-#define NUM_ELEM(a) (sizeof (a) / sizeof (a)[0]) +-#endif +- + /* Cached mapping symbol state. */ + enum map_type + { +@@ -116,6 +113,7 @@ struct opcode16 + %<bitfield>G print as an iWMMXt general purpose or control register + %<bitfield>D print as a NEON D register + %<bitfield>Q print as a NEON Q register ++ %<bitfield>V print as a NEON D or Q register + %<bitfield>E print a quarter-float immediate value + + %y<code> print a single precision VFP reg. +@@ -505,6 +503,8 @@ static const struct opcode32 coprocessor + 0x0ee60a10, 0x0fff0fff, "vmsr%c\tmvfr1, %12-15r"}, + {ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD), + 0x0ee70a10, 0x0fff0fff, "vmsr%c\tmvfr0, %12-15r"}, ++ {ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8), ++ 0x0ee50a10, 0x0fff0fff, "vmsr%c\tmvfr2, %12-15r"}, + {ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD), + 0x0ee80a10, 0x0fff0fff, "vmsr%c\tfpexc, %12-15r"}, + {ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD), +@@ -517,6 +517,8 @@ static const struct opcode32 coprocessor + 0x0ef1fa10, 0x0fffffff, "vmrs%c\tAPSR_nzcv, fpscr"}, + {ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD), + 0x0ef10a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpscr"}, ++ {ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8), ++ 0x0ef50a10, 0x0fff0fff, "vmrs%c\t%12-15r, mvfr2"}, + {ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD), + 0x0ef60a10, 0x0fff0fff, "vmrs%c\t%12-15r, mvfr1"}, + {ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD), +@@ -882,6 +884,34 @@ static const struct opcode32 coprocessor + 0xfc400000, 0xfff00000, + "mcrr2%c\t%8-11d, %4-7d, %12-15R, %16-19R, cr%0-3d"}, + ++ /* ARMv8.3 AdvSIMD instructions in the space of coprocessor 8. */ ++ {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A), ++ 0xfc800800, 0xfeb00f10, "vcadd%c.f16\t%12-15,22V, %16-19,7V, %0-3,5V, #%24?29%24'70"}, ++ {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A), ++ 0xfc900800, 0xfeb00f10, "vcadd%c.f32\t%12-15,22V, %16-19,7V, %0-3,5V, #%24?29%24'70"}, ++ {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A), ++ 0xfc200800, 0xff300f10, "vcmla%c.f16\t%12-15,22V, %16-19,7V, %0-3,5V, #%23'90"}, ++ {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A), ++ 0xfd200800, 0xff300f10, "vcmla%c.f16\t%12-15,22V, %16-19,7V, %0-3,5V, #%23?21%23?780"}, ++ {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A), ++ 0xfc300800, 0xff300f10, "vcmla%c.f32\t%12-15,22V, %16-19,7V, %0-3,5V, #%23'90"}, ++ {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A), ++ 0xfd300800, 0xff300f10, "vcmla%c.f32\t%12-15,22V, %16-19,7V, %0-3,5V, #%23?21%23?780"}, ++ {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A), ++ 0xfe000800, 0xffa00f10, "vcmla%c.f16\t%12-15,22V, %16-19,7V, %0-3D[%5?10], #%20'90"}, ++ {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A), ++ 0xfe200800, 0xffa00f10, "vcmla%c.f16\t%12-15,22V, %16-19,7V, %0-3D[%5?10], #%20?21%20?780"}, ++ {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A), ++ 0xfe800800, 0xffa00f10, "vcmla%c.f32\t%12-15,22V, %16-19,7V, %0-3,5D[0], #%20'90"}, ++ {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A), ++ 0xfea00800, 0xffa00f10, "vcmla%c.f32\t%12-15,22V, %16-19,7V, %0-3,5D[0], #%20?21%20?780"}, ++ ++ /* Dot Product instructions in the space of coprocessor 13. */ ++ {ARM_FEATURE_COPROC (FPU_NEON_EXT_DOTPROD), ++ 0xfc200d00, 0xffb00f00, "v%4?usdot.%4?us8\t%12-15,22V, %16-19,7V, %0-3,5V"}, ++ {ARM_FEATURE_COPROC (FPU_NEON_EXT_DOTPROD), ++ 0xfe000d00, 0xff000f00, "v%4?usdot.%4?us8\t%12-15,22V, %16-19,7V, %0-3D[%5?10]"}, ++ + /* V5 coprocessor instructions. */ + {ARM_FEATURE_CORE_LOW (ARM_EXT_V5), + 0xfc100000, 0xfe100000, "ldc2%22'l%c\t%8-11d, cr%12-15d, %A"}, +@@ -971,6 +1001,10 @@ static const struct opcode32 coprocessor + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST), + 0x0e300940, 0x0fb00f50, "vsub%c.f16\t%y1, %y2, %y0"}, + ++ /* ARMv8.3 javascript conversion instruction. */ ++ {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A), ++ 0x0eb90bc0, 0x0fbf0fd0, "vjcvt%c.s32.f64\t%y1, %z0"}, ++ + {ARM_FEATURE_CORE_LOW (0), 0, 0, 0} + }; + +@@ -2286,8 +2320,6 @@ static const struct opcode32 arm_opcodes + 0x01300000, 0x0ff00010, "teq%p%c\t%16-19r, %o"}, + {ARM_FEATURE_CORE_LOW (ARM_EXT_V1), + 0x01300010, 0x0ff00010, "teq%p%c\t%16-19R, %o"}, +- {ARM_FEATURE_CORE_LOW (ARM_EXT_V5), +- 0x0130f000, 0x0ff0f010, "bx%c\t%0-3r"}, + + {ARM_FEATURE_CORE_LOW (ARM_EXT_V1), + 0x03400000, 0x0fe00000, "cmp%p%c\t%16-19r, %o"}, +@@ -3171,18 +3203,20 @@ arm_regname; + + static const arm_regname regnames[] = + { +- { "raw" , "Select raw register names", ++ { "reg-names-raw", N_("Select raw register names"), + { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"}}, +- { "gcc", "Select register names used by GCC", ++ { "reg-names-gcc", N_("Select register names used by GCC"), + { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "sl", "fp", "ip", "sp", "lr", "pc" }}, +- { "std", "Select register names used in ARM's ISA documentation", ++ { "reg-names-std", N_("Select register names used in ARM's ISA documentation"), + { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc" }}, +- { "apcs", "Select register names used in the APCS", ++ { "force-thumb", N_("Assume all insns are Thumb insns"), {NULL} }, ++ { "no-force-thumb", N_("Examine preceding label to determine an insn's type"), {NULL} }, ++ { "reg-names-apcs", N_("Select register names used in the APCS"), + { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "sl", "fp", "ip", "sp", "lr", "pc" }}, +- { "atpcs", "Select register names used in the ATPCS", ++ { "reg-names-atpcs", N_("Select register names used in the ATPCS"), + { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "IP", "SP", "LR", "PC" }}, +- { "special-atpcs", "Select special register names used in the ATPCS", +- { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "WR", "v5", "SB", "SL", "FP", "IP", "SP", "LR", "PC" }}, ++ { "reg-names-special-atpcs", N_("Select special register names used in the ATPCS"), ++ { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "WR", "v5", "SB", "SL", "FP", "IP", "SP", "LR", "PC" }} + }; + + static const char *const iwmmxt_wwnames[] = +@@ -3208,7 +3242,7 @@ static const char *const iwmmxt_cregname + /* Default to GCC register name set. */ + static unsigned int regname_selected = 1; + +-#define NUM_ARM_REGNAMES NUM_ELEM (regnames) ++#define NUM_ARM_REGNAMES ARRAY_SIZE (regnames) + #define arm_regnames regnames[regname_selected].reg_names + + static bfd_boolean force_thumb = FALSE; +@@ -3227,31 +3261,6 @@ static bfd_vma ifthen_address; + + + /* Functions. */ +-int +-get_arm_regname_num_options (void) +-{ +- return NUM_ARM_REGNAMES; +-} +- +-int +-set_arm_regname_option (int option) +-{ +- int old = regname_selected; +- regname_selected = option; +- return old; +-} +- +-int +-get_arm_regnames (int option, +- const char **setname, +- const char **setdescription, +- const char *const **register_names) +-{ +- *setname = regnames[option].name; +- *setdescription = regnames[option].description; +- *register_names = regnames[option].reg_names; +- return 16; +-} + + /* Decode a bitfield of the form matching regexp (N(-N)?,)*N(-N)?. + Returns pointer to following character of the format string and +@@ -3669,10 +3678,15 @@ print_insn_coprocessor (bfd_vma pc, + } + func (stream, "%s", arm_regnames[value]); + break; ++ case 'V': ++ if (given & (1 << 6)) ++ goto Q; ++ /* FALLTHROUGH */ + case 'D': + func (stream, "d%ld", value); + break; + case 'Q': ++ Q: + if (value & 1) + func (stream, "<illegal reg q%ld.5>", value >> 1); + else +@@ -4686,6 +4700,7 @@ print_insn_arm (bfd_vma pc, struct disas + + case 'S': + allow_unpredictable = TRUE; ++ /* Fall through. */ + case 's': + if ((given & 0x004f0000) == 0x004f0000) + { +@@ -5427,22 +5442,31 @@ psr_name (int regno) + { + switch (regno) + { +- case 0: return "APSR"; +- case 1: return "IAPSR"; +- case 2: return "EAPSR"; +- case 3: return "PSR"; +- case 5: return "IPSR"; +- case 6: return "EPSR"; +- case 7: return "IEPSR"; +- case 8: return "MSP"; +- case 9: return "PSP"; +- case 16: return "PRIMASK"; +- case 17: return "BASEPRI"; +- case 18: return "BASEPRI_MAX"; +- case 19: return "FAULTMASK"; +- case 20: return "CONTROL"; ++ case 0x0: return "APSR"; ++ case 0x1: return "IAPSR"; ++ case 0x2: return "EAPSR"; ++ case 0x3: return "PSR"; ++ case 0x5: return "IPSR"; ++ case 0x6: return "EPSR"; ++ case 0x7: return "IEPSR"; ++ case 0x8: return "MSP"; ++ case 0x9: return "PSP"; ++ case 0xa: return "MSPLIM"; ++ case 0xb: return "PSPLIM"; ++ case 0x10: return "PRIMASK"; ++ case 0x11: return "BASEPRI"; ++ case 0x12: return "BASEPRI_MAX"; ++ case 0x13: return "FAULTMASK"; ++ case 0x14: return "CONTROL"; + case 0x88: return "MSP_NS"; + case 0x89: return "PSP_NS"; ++ case 0x8a: return "MSPLIM_NS"; ++ case 0x8b: return "PSPLIM_NS"; ++ case 0x90: return "PRIMASK_NS"; ++ case 0x91: return "BASEPRI_NS"; ++ case 0x93: return "FAULTMASK_NS"; ++ case 0x94: return "CONTROL_NS"; ++ case 0x98: return "SP_NS"; + default: return "<unknown>"; + } + } +@@ -5717,7 +5741,7 @@ print_insn_thumb32 (bfd_vma pc, struct d + if (off || !U) + { + func (stream, ", #%c%u", U ? '+' : '-', off * 4); +- value_in_comment = off * 4 * U ? 1 : -1; ++ value_in_comment = off * 4 * (U ? 1 : -1); + } + func (stream, "]"); + if (W) +@@ -5729,7 +5753,7 @@ print_insn_thumb32 (bfd_vma pc, struct d + if (W) + { + func (stream, "#%c%u", U ? '+' : '-', off * 4); +- value_in_comment = off * 4 * U ? 1 : -1; ++ value_in_comment = off * 4 * (U ? 1 : -1); + } + else + { +diff -rupN binutils.orig/gas/testsuite/gas/arm/armv8_3-a-fp-bad.d binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-fp-bad.d +--- binutils.orig/gas/testsuite/gas/arm/armv8_3-a-fp-bad.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-fp-bad.d 2017-08-09 12:10:22.428965485 +0100 +@@ -0,0 +1,2 @@ ++#as: -march=armv8.3-a+fp ++#error-output: armv8_3-a-fp-bad.l +diff -rupN binutils.orig/gas/testsuite/gas/arm/armv8_3-a-fp-bad.l binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-fp-bad.l +--- binutils.orig/gas/testsuite/gas/arm/armv8_3-a-fp-bad.l 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-fp-bad.l 2017-08-09 12:10:22.428965485 +0100 +@@ -0,0 +1,7 @@ ++[^:]+: Assembler messages: ++[^:]+:3: Error: operand types can't be inferred -- `vjcvt s0,d1' ++[^:]+:4: Error: VFP single precision register expected -- `vjcvt\.s32\.f64 r0,d1' ++[^:]+:5: Error: VFP/Neon double precision register expected -- `vjcvt\.s32\.f64 s0,s1' ++[^:]+:6: Error: VFP/Neon double precision register expected -- `vjcvt\.s32\.f32 s0,s1' ++[^:]+:7: Error: bad type in Neon instruction -- `vjcvt\.s32\.f32 s0,d1' ++[^:]+:8: Error: bad type in Neon instruction -- `vjcvt\.f32\.f64 s0,d1' +diff -rupN binutils.orig/gas/testsuite/gas/arm/armv8_3-a-fp-bad.s binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-fp-bad.s +--- binutils.orig/gas/testsuite/gas/arm/armv8_3-a-fp-bad.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-fp-bad.s 2017-08-09 12:10:22.428965485 +0100 +@@ -0,0 +1,8 @@ ++ .text ++ .arm ++ vjcvt s0, d1 ++ vjcvt.s32.f64 r0, d1 ++ vjcvt.s32.f64 s0, s1 ++ vjcvt.s32.f32 s0, s1 ++ vjcvt.s32.f32 s0, d1 ++ vjcvt.f32.f64 s0, d1 +diff -rupN binutils.orig/gas/testsuite/gas/arm/armv8_3-a-fp.d binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-fp.d +--- binutils.orig/gas/testsuite/gas/arm/armv8_3-a-fp.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-fp.d 2017-08-09 12:10:22.428965485 +0100 +@@ -0,0 +1,15 @@ ++#as: -march=armv8.3-a+fp ++#objdump: -dr ++#skip: *-*-pe *-wince-* *-*-coff ++ ++.*: +file format .*arm.* ++ ++Disassembly of section .text: ++ ++[0-9a-f]+ <.*>: ++ [0-9a-f]+: eef90bc7 vjcvt.s32.f64 s1, d7 ++ [0-9a-f]+: eef90bc7 vjcvt.s32.f64 s1, d7 ++ ++[0-9a-f]+ <.*>: ++ [0-9a-f]+: eef9 0bc7 vjcvt.s32.f64 s1, d7 ++ +diff -rupN binutils.orig/gas/testsuite/gas/arm/armv8_3-a-fp.s binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-fp.s +--- binutils.orig/gas/testsuite/gas/arm/armv8_3-a-fp.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-fp.s 2017-08-09 12:10:22.428965485 +0100 +@@ -0,0 +1,8 @@ ++ .text ++A1: ++ .arm ++ vjcvt.s32.f64 s1, d7 ++ vjcvtal.s32.f64 s1, d7 ++T1: ++ .thumb ++ vjcvt.s32.f64 s1, d7 +diff -rupN binutils.orig/gas/testsuite/gas/arm/armv8_3-a-simd-bad.d binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-simd-bad.d +--- binutils.orig/gas/testsuite/gas/arm/armv8_3-a-simd-bad.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-simd-bad.d 2017-08-09 12:10:22.428965485 +0100 +@@ -0,0 +1,2 @@ ++#as: -march=armv8.3-a+fp16+simd ++#error-output: armv8_3-a-simd-bad.l +diff -rupN binutils.orig/gas/testsuite/gas/arm/armv8_3-a-simd-bad.l binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-simd-bad.l +--- binutils.orig/gas/testsuite/gas/arm/armv8_3-a-simd-bad.l 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-simd-bad.l 2017-08-09 12:10:22.428965485 +0100 +@@ -0,0 +1,39 @@ ++[^:]+: Assembler messages: ++[^:]+:6: Error: operand types can't be inferred -- `vcadd d0,d1,d2,#90' ++[^:]+:7: Error: immediate out of range -- `vcadd\.f32 q0,q1,q2,#0' ++[^:]+:8: Error: immediate out of range -- `vcadd\.f32 q0,q1,q2,#180' ++[^:]+:9: Error: Neon double or quad precision register expected -- `vcadd\.f16 s0,s1,s2,#90' ++[^:]+:10: Error: bad type in Neon instruction -- `vcadd\.f64 d0,d1,d2,#90' ++[^:]+:11: Error: bad type in Neon instruction -- `vcadd\.f64 q0,q1,q2,#90' ++[^:]+:13: Error: operand types can't be inferred -- `vcmla d0,d1,d2,#90' ++[^:]+:14: Error: immediate out of range -- `vcmla\.f32 q0,q1,q2,#-90' ++[^:]+:15: Error: immediate out of range -- `vcmla\.f32 q0,q1,q2,#120' ++[^:]+:16: Error: immediate out of range -- `vcmla\.f32 q0,q1,q2,#360' ++[^:]+:17: Error: Neon double or quad precision register expected -- `vcmla\.f16 s0,s1,s2,#90' ++[^:]+:18: Error: bad type in Neon instruction -- `vcmla\.f64 d0,d1,d2,#90' ++[^:]+:19: Error: bad type in Neon instruction -- `vcmla\.f64 q0,q1,q2,#90' ++[^:]+:21: Error: only D registers may be indexed -- `vcmla\.f16 q0,q1,q2\[0\],#90' ++[^:]+:22: Error: only D registers may be indexed -- `vcmla\.f32 q0,q1,q2\[0\],#90' ++[^:]+:23: Error: scalar out of range -- `vcmla\.f16 d0,d1,d2\[2\],#90' ++[^:]+:24: Error: scalar out of range -- `vcmla\.f16 q0,q1,d2\[2\],#90' ++[^:]+:25: Error: scalar out of range -- `vcmla\.f16 q0,q1,d16\[1\],#90' ++[^:]+:26: Error: scalar out of range -- `vcmla\.f32 q0,q1,d2\[1\],#90' ++[^:]+:31: Error: operand types can't be inferred -- `vcadd d0,d1,d2,#90' ++[^:]+:32: Error: immediate out of range -- `vcadd\.f32 q0,q1,q2,#0' ++[^:]+:33: Error: immediate out of range -- `vcadd\.f32 q0,q1,q2,#180' ++[^:]+:34: Error: Neon double or quad precision register expected -- `vcadd\.f16 s0,s1,s2,#90' ++[^:]+:35: Error: bad type in Neon instruction -- `vcadd\.f64 d0,d1,d2,#90' ++[^:]+:36: Error: bad type in Neon instruction -- `vcadd\.f64 q0,q1,q2,#90' ++[^:]+:38: Error: operand types can't be inferred -- `vcmla d0,d1,d2,#90' ++[^:]+:39: Error: immediate out of range -- `vcmla\.f32 q0,q1,q2,#-90' ++[^:]+:40: Error: immediate out of range -- `vcmla\.f32 q0,q1,q2,#120' ++[^:]+:41: Error: immediate out of range -- `vcmla\.f32 q0,q1,q2,#360' ++[^:]+:42: Error: Neon double or quad precision register expected -- `vcmla\.f16 s0,s1,s2,#90' ++[^:]+:43: Error: bad type in Neon instruction -- `vcmla\.f64 d0,d1,d2,#90' ++[^:]+:44: Error: bad type in Neon instruction -- `vcmla\.f64 q0,q1,q2,#90' ++[^:]+:46: Error: only D registers may be indexed -- `vcmla\.f16 q0,q1,q2\[0\],#90' ++[^:]+:47: Error: only D registers may be indexed -- `vcmla\.f32 q0,q1,q2\[0\],#90' ++[^:]+:48: Error: scalar out of range -- `vcmla\.f16 d0,d1,d2\[2\],#90' ++[^:]+:49: Error: scalar out of range -- `vcmla\.f16 q0,q1,d2\[2\],#90' ++[^:]+:50: Error: scalar out of range -- `vcmla\.f16 q0,q1,d16\[1\],#90' ++[^:]+:51: Error: scalar out of range -- `vcmla\.f32 q0,q1,d2\[1\],#90' +diff -rupN binutils.orig/gas/testsuite/gas/arm/armv8_3-a-simd-bad.s binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-simd-bad.s +--- binutils.orig/gas/testsuite/gas/arm/armv8_3-a-simd-bad.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-simd-bad.s 2017-08-09 12:10:22.428965485 +0100 +@@ -0,0 +1,51 @@ ++ .text ++ ++A1: ++ .arm ++ ++ vcadd d0,d1,d2,#90 ++ vcadd.f32 q0,q1,q2,#0 ++ vcadd.f32 q0,q1,q2,#180 ++ vcadd.f16 s0,s1,s2,#90 ++ vcadd.f64 d0,d1,d2,#90 ++ vcadd.f64 q0,q1,q2,#90 ++ ++ vcmla d0,d1,d2,#90 ++ vcmla.f32 q0,q1,q2,#-90 ++ vcmla.f32 q0,q1,q2,#120 ++ vcmla.f32 q0,q1,q2,#360 ++ vcmla.f16 s0,s1,s2,#90 ++ vcmla.f64 d0,d1,d2,#90 ++ vcmla.f64 q0,q1,q2,#90 ++ ++ vcmla.f16 q0,q1,q2[0],#90 ++ vcmla.f32 q0,q1,q2[0],#90 ++ vcmla.f16 d0,d1,d2[2],#90 ++ vcmla.f16 q0,q1,d2[2],#90 ++ vcmla.f16 q0,q1,d16[1],#90 ++ vcmla.f32 q0,q1,d2[1],#90 ++ ++T1: ++ .thumb ++ ++ vcadd d0,d1,d2,#90 ++ vcadd.f32 q0,q1,q2,#0 ++ vcadd.f32 q0,q1,q2,#180 ++ vcadd.f16 s0,s1,s2,#90 ++ vcadd.f64 d0,d1,d2,#90 ++ vcadd.f64 q0,q1,q2,#90 ++ ++ vcmla d0,d1,d2,#90 ++ vcmla.f32 q0,q1,q2,#-90 ++ vcmla.f32 q0,q1,q2,#120 ++ vcmla.f32 q0,q1,q2,#360 ++ vcmla.f16 s0,s1,s2,#90 ++ vcmla.f64 d0,d1,d2,#90 ++ vcmla.f64 q0,q1,q2,#90 ++ ++ vcmla.f16 q0,q1,q2[0],#90 ++ vcmla.f32 q0,q1,q2[0],#90 ++ vcmla.f16 d0,d1,d2[2],#90 ++ vcmla.f16 q0,q1,d2[2],#90 ++ vcmla.f16 q0,q1,d16[1],#90 ++ vcmla.f32 q0,q1,d2[1],#90 +diff -rupN binutils.orig/gas/testsuite/gas/arm/armv8_3-a-simd.d binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-simd.d +--- binutils.orig/gas/testsuite/gas/arm/armv8_3-a-simd.d 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-simd.d 2017-08-09 12:10:22.428965485 +0100 +@@ -0,0 +1,59 @@ ++#as: -march=armv8.3-a+fp16+simd ++#objdump: -dr ++#skip: *-*-pe *-wince-* *-*-coff ++ ++.*: +file format .*arm.* ++ ++Disassembly of section .text: ++ ++[0-9a-f]+ <.*>: ++ +[0-9a-f]+: fc942846 vcadd.f32 q1, q2, q3, #90 ++ +[0-9a-f]+: fd942846 vcadd.f32 q1, q2, q3, #270 ++ +[0-9a-f]+: fcc658a7 vcadd.f16 d21, d22, d23, #90 ++ +[0-9a-f]+: fc842846 vcadd.f16 q1, q2, q3, #90 ++ +[0-9a-f]+: fcd658a7 vcadd.f32 d21, d22, d23, #90 ++ +[0-9a-f]+: fc342846 vcmla.f32 q1, q2, q3, #0 ++ +[0-9a-f]+: fcb42846 vcmla.f32 q1, q2, q3, #90 ++ +[0-9a-f]+: fd342846 vcmla.f32 q1, q2, q3, #180 ++ +[0-9a-f]+: fdb42846 vcmla.f32 q1, q2, q3, #270 ++ +[0-9a-f]+: fce658a7 vcmla.f16 d21, d22, d23, #90 ++ +[0-9a-f]+: fca42846 vcmla.f16 q1, q2, q3, #90 ++ +[0-9a-f]+: fcf658a7 vcmla.f32 d21, d22, d23, #90 ++ +[0-9a-f]+: fe565883 vcmla.f16 d21, d22, d3\[0\], #90 ++ +[0-9a-f]+: fe5658a3 vcmla.f16 d21, d22, d3\[1\], #90 ++ +[0-9a-f]+: fe142843 vcmla.f16 q1, q2, d3\[0\], #90 ++ +[0-9a-f]+: fe142863 vcmla.f16 q1, q2, d3\[1\], #90 ++ +[0-9a-f]+: fed658a7 vcmla.f32 d21, d22, d23\[0\], #90 ++ +[0-9a-f]+: fe942867 vcmla.f32 q1, q2, d23\[0\], #90 ++ +[0-9a-f]+: fe042863 vcmla.f16 q1, q2, d3\[1\], #0 ++ +[0-9a-f]+: fe242863 vcmla.f16 q1, q2, d3\[1\], #180 ++ +[0-9a-f]+: fe342863 vcmla.f16 q1, q2, d3\[1\], #270 ++ +[0-9a-f]+: fe842843 vcmla.f32 q1, q2, d3\[0\], #0 ++ +[0-9a-f]+: fea42843 vcmla.f32 q1, q2, d3\[0\], #180 ++ +[0-9a-f]+: feb42843 vcmla.f32 q1, q2, d3\[0\], #270 ++ ++[0-9a-f]+ <.*>: ++ +[0-9a-f]+: fc94 2846 vcadd.f32 q1, q2, q3, #90 ++ +[0-9a-f]+: fd94 2846 vcadd.f32 q1, q2, q3, #270 ++ +[0-9a-f]+: fcc6 58a7 vcadd.f16 d21, d22, d23, #90 ++ +[0-9a-f]+: fc84 2846 vcadd.f16 q1, q2, q3, #90 ++ +[0-9a-f]+: fcd6 58a7 vcadd.f32 d21, d22, d23, #90 ++ +[0-9a-f]+: fc34 2846 vcmla.f32 q1, q2, q3, #0 ++ +[0-9a-f]+: fcb4 2846 vcmla.f32 q1, q2, q3, #90 ++ +[0-9a-f]+: fd34 2846 vcmla.f32 q1, q2, q3, #180 ++ +[0-9a-f]+: fdb4 2846 vcmla.f32 q1, q2, q3, #270 ++ +[0-9a-f]+: fce6 58a7 vcmla.f16 d21, d22, d23, #90 ++ +[0-9a-f]+: fca4 2846 vcmla.f16 q1, q2, q3, #90 ++ +[0-9a-f]+: fcf6 58a7 vcmla.f32 d21, d22, d23, #90 ++ +[0-9a-f]+: fe56 5883 vcmla.f16 d21, d22, d3\[0\], #90 ++ +[0-9a-f]+: fe56 58a3 vcmla.f16 d21, d22, d3\[1\], #90 ++ +[0-9a-f]+: fe14 2843 vcmla.f16 q1, q2, d3\[0\], #90 ++ +[0-9a-f]+: fe14 2863 vcmla.f16 q1, q2, d3\[1\], #90 ++ +[0-9a-f]+: fed6 58a7 vcmla.f32 d21, d22, d23\[0\], #90 ++ +[0-9a-f]+: fe94 2867 vcmla.f32 q1, q2, d23\[0\], #90 ++ +[0-9a-f]+: fe04 2863 vcmla.f16 q1, q2, d3\[1\], #0 ++ +[0-9a-f]+: fe24 2863 vcmla.f16 q1, q2, d3\[1\], #180 ++ +[0-9a-f]+: fe34 2863 vcmla.f16 q1, q2, d3\[1\], #270 ++ +[0-9a-f]+: fe84 2843 vcmla.f32 q1, q2, d3\[0\], #0 ++ +[0-9a-f]+: fea4 2843 vcmla.f32 q1, q2, d3\[0\], #180 ++ +[0-9a-f]+: feb4 2843 vcmla.f32 q1, q2, d3\[0\], #270 +diff -rupN binutils.orig/gas/testsuite/gas/arm/armv8_3-a-simd.s binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-simd.s +--- binutils.orig/gas/testsuite/gas/arm/armv8_3-a-simd.s 1970-01-01 01:00:00.000000000 +0100 ++++ binutils-2.27/gas/testsuite/gas/arm/armv8_3-a-simd.s 2017-08-09 12:10:22.428965485 +0100 +@@ -0,0 +1,63 @@ ++ .text ++ ++A1: ++ .arm ++ ++ vcadd.f32 q1,q2,q3,#90 ++ vcadd.f32 q1,q2,q3,#270 ++ vcadd.f16 d21,d22,d23,#90 ++ vcadd.f16 q1,q2,q3,#90 ++ vcadd.f32 d21,d22,d23,#90 ++ ++ vcmla.f32 q1,q2,q3,#0 ++ vcmla.f32 q1,q2,q3,#90 ++ vcmla.f32 q1,q2,q3,#180 ++ vcmla.f32 q1,q2,q3,#270 ++ vcmla.f16 d21,d22,d23,#90 ++ vcmla.f16 q1,q2,q3,#90 ++ vcmla.f32 d21,d22,d23,#90 ++ ++ vcmla.f16 d21,d22,d3[0],#90 ++ vcmla.f16 d21,d22,d3[1],#90 ++ vcmla.f16 q1,q2,d3[0],#90 ++ vcmla.f16 q1,q2,d3[1],#90 ++ vcmla.f32 d21,d22,d23[0],#90 ++ vcmla.f32 q1,q2,d23[0],#90 ++ ++ vcmla.f16 q1,q2,d3[1],#0 ++ vcmla.f16 q1,q2,d3[1],#180 ++ vcmla.f16 q1,q2,d3[1],#270 ++ vcmla.f32 q1,q2,d3[0],#0 ++ vcmla.f32 q1,q2,d3[0],#180 ++ vcmla.f32 q1,q2,d3[0],#270 ++ ++T1: ++ .thumb ++ ++ vcadd.f32 q1,q2,q3,#90 ++ vcadd.f32 q1,q2,q3,#270 ++ vcadd.f16 d21,d22,d23,#90 ++ vcadd.f16 q1,q2,q3,#90 ++ vcadd.f32 d21,d22,d23,#90 ++ ++ vcmla.f32 q1,q2,q3,#0 ++ vcmla.f32 q1,q2,q3,#90 ++ vcmla.f32 q1,q2,q3,#180 ++ vcmla.f32 q1,q2,q3,#270 ++ vcmla.f16 d21,d22,d23,#90 ++ vcmla.f16 q1,q2,q3,#90 ++ vcmla.f32 d21,d22,d23,#90 ++ ++ vcmla.f16 d21,d22,d3[0],#90 ++ vcmla.f16 d21,d22,d3[1],#90 ++ vcmla.f16 q1,q2,d3[0],#90 ++ vcmla.f16 q1,q2,d3[1],#90 ++ vcmla.f32 d21,d22,d23[0],#90 ++ vcmla.f32 q1,q2,d23[0],#90 ++ ++ vcmla.f16 q1,q2,d3[1],#0 ++ vcmla.f16 q1,q2,d3[1],#180 ++ vcmla.f16 q1,q2,d3[1],#270 ++ vcmla.f32 q1,q2,d3[0],#0 ++ vcmla.f32 q1,q2,d3[0],#180 ++ vcmla.f32 q1,q2,d3[0],#270 diff --git a/SOURCES/binutils-2.27-DW_AT_export_symbols.patch b/SOURCES/binutils-2.27-DW_AT_export_symbols.patch new file mode 100644 index 0000000..5994f60 --- /dev/null +++ b/SOURCES/binutils-2.27-DW_AT_export_symbols.patch @@ -0,0 +1,10 @@ +--- binutils.orig/include/dwarf2.def 2017-08-08 17:40:39.295382994 +0100 ++++ binutils-2.27/include/dwarf2.def 2017-08-08 17:44:03.672045965 +0100 +@@ -310,6 +310,7 @@ DW_AT (DW_AT_enum_class, 0x6d) + DW_AT (DW_AT_linkage_name, 0x6e) + /* DWARF 5. */ + DW_AT (DW_AT_noreturn, 0x87) ++DW_AT (DW_AT_export_symbols, 0x89) + + DW_AT_DUP (DW_AT_lo_user, 0x2000) /* Implementation-defined range start. */ + DW_AT_DUP (DW_AT_hi_user, 0x3fff) /* Implementation-defined range end. */ diff --git a/SOURCES/binutils-2.27-aarch64-copy-relocs.patch b/SOURCES/binutils-2.27-aarch64-copy-relocs.patch new file mode 100644 index 0000000..b8102b2 --- /dev/null +++ b/SOURCES/binutils-2.27-aarch64-copy-relocs.patch @@ -0,0 +1,367 @@ +diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c +index 1edf2a0..e27f067 100644 (file) +--- a/bfd/elfnn-aarch64.c ++++ b/bfd/elfnn-aarch64.c +@@ -6869,6 +6889,31 @@ elfNN_aarch64_gc_sweep_hook (bfd *abfd, + return TRUE; + } + ++/* Return true if we need copy relocation against EH. */ ++ ++static bfd_boolean ++need_copy_relocation_p (struct elf_aarch64_link_hash_entry *eh) ++{ ++ struct elf_dyn_relocs *p; ++ asection *s; ++ ++ for (p = eh->dyn_relocs; p != NULL; p = p->next) ++ { ++ /* If there is any pc-relative reference, we need to keep copy relocation ++ to avoid propagating the relocation into runtime that current glibc ++ does not support. */ ++ if (p->pc_count) ++ return TRUE; ++ ++ s = p->sec->output_section; ++ /* Need copy relocation if it's against read-only section. */ ++ if (s != NULL && (s->flags & SEC_READONLY) != 0) ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++ + /* Adjust a symbol defined by a dynamic object and referenced by a + regular object. The current definition is in some section of the + dynamic object, but we're not including those sections. We have to +@@ -6942,6 +6987,19 @@ elfNN_aarch64_adjust_dynamic_symbol (struct bfd_link_info *info, + return TRUE; + } + ++ if (ELIMINATE_COPY_RELOCS) ++ { ++ struct elf_aarch64_link_hash_entry *eh; ++ /* If we didn't find any dynamic relocs in read-only sections, then ++ we'll be keeping the dynamic relocs and avoiding the copy reloc. */ ++ eh = (struct elf_aarch64_link_hash_entry *) h; ++ if (!need_copy_relocation_p (eh)) ++ { ++ h->non_got_ref = 0; ++ return TRUE; ++ } ++ } ++ + /* We must allocate the symbol in our .dynbss section, which will + become part of the .bss section of the executable. There will be + an entry for this symbol in the .dynsym section. The dynamic +diff --git a/ld/testsuite/ld-aarch64/copy-reloc-2.d b/ld/testsuite/ld-aarch64/copy-reloc-2.d +new file mode 100644 (file) +index 0000000..87ddccd +--- /dev/null ++++ b/ld/testsuite/ld-aarch64/copy-reloc-2.d +@@ -0,0 +1,7 @@ ++.* ++DYNAMIC RELOCATION RECORDS ++OFFSET.*TYPE.*VALUE.* ++.*R_AARCH64_COPY.*global_[abcd] ++.*R_AARCH64_COPY.*global_[abcd] ++.*R_AARCH64_COPY.*global_[abcd] ++.*R_AARCH64_COPY.*global_[abcd] +diff --git a/ld/testsuite/ld-aarch64/copy-reloc-eliminate.d b/ld/testsuite/ld-aarch64/copy-reloc-eliminate.d +new file mode 100644 (file) +index 0000000..9657d65 +--- /dev/null ++++ b/ld/testsuite/ld-aarch64/copy-reloc-eliminate.d +@@ -0,0 +1,4 @@ ++.* ++DYNAMIC RELOCATION RECORDS ++OFFSET.*TYPE.*VALUE.* ++.*R_AARCH64_ABS64.*global_a +diff --git a/ld/testsuite/ld-aarch64/copy-reloc-exe-2.s b/ld/testsuite/ld-aarch64/copy-reloc-exe-2.s +new file mode 100644 (file) +index 0000000..d83658c +--- /dev/null ++++ b/ld/testsuite/ld-aarch64/copy-reloc-exe-2.s +@@ -0,0 +1,32 @@ ++ # expect copy relocation for all these scenarios. ++ .global p ++ .global q ++ .global r ++ .section .data.rel.ro,"aw",%progbits ++ .align 3 ++ .type p, %object ++ .size p, 8 ++p: ++ .xword global_a ++ ++ .type q, %object ++ .size q, 8 ++q: ++ .xword global_b ++ ++ .type r, %object ++ .size r, 8 ++r: ++ # Any pc-rel relocation as no dynamic linker support on AArch64. ++ .xword global_c - . ++ ++ .text ++ .global main ++main: ++ # Symbols are referenced by any other relocation against read-only ++ # section. ++ movz x0, :abs_g0_nc:global_a ++ adrp x1, global_b ++ # pc-rel. ++ adrp x2, global_d ++ add x2, x2, #:lo12:global_c +diff --git a/ld/testsuite/ld-aarch64/copy-reloc-exe-eliminate.s b/ld/testsuite/ld-aarch64/copy-reloc-exe-eliminate.s +new file mode 100644 (file) +index 0000000..33227aa +--- /dev/null ++++ b/ld/testsuite/ld-aarch64/copy-reloc-exe-eliminate.s +@@ -0,0 +1,7 @@ ++ .global p ++ .section .data.rel.ro,"aw",%progbits ++ .align 3 ++ .type p, %object ++ .size p, 8 ++p: ++ .xword global_a +--- binutils.orig/ld/testsuite/ld-aarch64/copy-reloc-so.s 2017-10-10 16:56:06.347550451 +0100 ++++ binutils-2.27/ld/testsuite/ld-aarch64/copy-reloc-so.s 2017-10-10 16:56:25.926321182 +0100 +@@ -1,6 +1,25 @@ + .global global_a + .type global_a, %object + .size global_a, 4 ++ ++ .global global_b ++ .type global_b, %object ++ .size global_b, 4 ++ ++ .global global_c ++ .type global_c, %object ++ .size global_c, 4 ++ ++ .global global_d ++ .type global_d, %object ++ .size global_d, 4 ++ + .data + global_a: + .word 0xcafedead ++global_b: ++ .word 0xcafecafe ++global_c: ++ .word 0xdeadcafe ++global_d: ++ .word 0xdeaddead +--- binutils.orig/ld/testsuite/ld-aarch64/aarch64-elf.exp 2017-10-10 16:56:06.347550451 +0100 ++++ binutils-2.27/ld/testsuite/ld-aarch64/aarch64-elf.exp 2017-10-10 16:58:19.629989701 +0100 +@@ -292,6 +292,10 @@ set aarch64elflinktests { + {} "copy-reloc-so.so"} + {"ld-aarch64/exe with copy relocation" "-e0 tmpdir/copy-reloc-so.so" "" "" + {copy-reloc-exe.s} {{objdump -R copy-reloc.d}} "copy-reloc"} ++ {"ld-aarch64/exe with copy relocation 2" "-e0 tmpdir/copy-reloc-so.so" "" "" ++ {copy-reloc-exe-2.s} {{objdump -R copy-reloc-2.d}} "copy-reloc-2"} ++ {"ld-aarch64/exe with copy relocation elimination" "-e0 tmpdir/copy-reloc-so.so" "" "" ++ {copy-reloc-exe-eliminate.s} {{objdump -R copy-reloc-eliminate.d}} "copy-reloc-elimination"} + } + + run_ld_link_tests $aarch64elflinktests +--- binutils.orig/bfd/elfnn-aarch64.c 2017-10-10 16:56:05.783557056 +0100 ++++ binutils-2.27/bfd/elfnn-aarch64.c 2017-10-10 17:15:02.559298576 +0100 +@@ -246,7 +246,7 @@ + || (R_TYPE) == BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC \ + || (R_TYPE) == BFD_RELOC_AARCH64_TLSDESC_OFF_G1) + +-#define ELIMINATE_COPY_RELOCS 0 ++#define ELIMINATE_COPY_RELOCS 1 + + /* Return size of a relocation entry. HTAB is the bfd's + elf_aarch64_link_hash_entry. */ +@@ -5154,12 +5154,25 @@ elfNN_aarch64_final_link_relocate (reloc + /* When generating a shared object or relocatable executable, these + relocations are copied into the output file to be resolved at + run time. */ +- if (((bfd_link_pic (info) == TRUE) +- || globals->root.is_relocatable_executable) +- && (input_section->flags & SEC_ALLOC) +- && (h == NULL +- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT +- || h->root.type != bfd_link_hash_undefweak)) ++ if ((((bfd_link_pic (info) == TRUE) ++ || globals->root.is_relocatable_executable) ++ && (input_section->flags & SEC_ALLOC) ++ && (h == NULL ++ || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT ++ || h->root.type != bfd_link_hash_undefweak)) ++ /* Or we are creating an executable, we may need to keep relocations ++ for symbols satisfied by a dynamic library if we manage to avoid ++ copy relocs for the symbol. */ ++ || (ELIMINATE_COPY_RELOCS ++ && !bfd_link_pic (info) ++ && h != NULL ++ && (input_section->flags & SEC_ALLOC) ++ && h->dynindx != -1 ++ && !h->non_got_ref ++ && ((h->def_dynamic ++ && !h->def_regular) ++ || h->root.type == bfd_link_hash_undefweak ++ || h->root.type == bfd_link_hash_undefined))) + { + Elf_Internal_Rela outrel; + bfd_byte *loc; +@@ -6777,15 +6790,22 @@ elfNN_aarch64_gc_sweep_hook (bfd *abfd, + h->plt.refcount -= 1; + break; + ++ case BFD_RELOC_AARCH64_ADD_LO12: + case BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL: + case BFD_RELOC_AARCH64_ADR_HI21_PCREL: + case BFD_RELOC_AARCH64_ADR_LO21_PCREL: ++ case BFD_RELOC_AARCH64_LDST128_LO12: ++ case BFD_RELOC_AARCH64_LDST16_LO12: ++ case BFD_RELOC_AARCH64_LDST32_LO12: ++ case BFD_RELOC_AARCH64_LDST64_LO12: ++ case BFD_RELOC_AARCH64_LDST8_LO12: ++ case BFD_RELOC_AARCH64_LD_LO19_PCREL: + case BFD_RELOC_AARCH64_MOVW_G0_NC: + case BFD_RELOC_AARCH64_MOVW_G1_NC: + case BFD_RELOC_AARCH64_MOVW_G2_NC: + case BFD_RELOC_AARCH64_MOVW_G3: + case BFD_RELOC_AARCH64_NN: +- if (h != NULL && bfd_link_executable (info)) ++ if (h != NULL && bfd_link_pic (info)) + { + if (h->plt.refcount > 0) + h->plt.refcount -= 1; +@@ -7158,6 +7178,41 @@ elfNN_aarch64_check_relocs (bfd *abfd, s + + switch (bfd_r_type) + { ++ case BFD_RELOC_AARCH64_MOVW_G0_NC: ++ case BFD_RELOC_AARCH64_MOVW_G1_NC: ++ case BFD_RELOC_AARCH64_MOVW_G2_NC: ++ case BFD_RELOC_AARCH64_MOVW_G3: ++ if (bfd_link_pic (info)) ++ { ++ int howto_index = bfd_r_type - BFD_RELOC_AARCH64_RELOC_START; ++ _bfd_error_handler ++ /* xgettext:c-format */ ++ (_("%B: relocation %s against `%s' can not be used when making " ++ "a shared object; recompile with -fPIC"), ++ abfd, elfNN_aarch64_howto_table[howto_index].name, ++ (h) ? h->root.root.string : "a local symbol"); ++ bfd_set_error (bfd_error_bad_value); ++ return FALSE; ++ } ++ /* Fall through. */ ++ ++ case BFD_RELOC_AARCH64_16_PCREL: ++ case BFD_RELOC_AARCH64_32_PCREL: ++ case BFD_RELOC_AARCH64_64_PCREL: ++ case BFD_RELOC_AARCH64_ADD_LO12: ++ case BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL: ++ case BFD_RELOC_AARCH64_ADR_HI21_PCREL: ++ case BFD_RELOC_AARCH64_ADR_LO21_PCREL: ++ case BFD_RELOC_AARCH64_LDST128_LO12: ++ case BFD_RELOC_AARCH64_LDST16_LO12: ++ case BFD_RELOC_AARCH64_LDST32_LO12: ++ case BFD_RELOC_AARCH64_LDST64_LO12: ++ case BFD_RELOC_AARCH64_LDST8_LO12: ++ case BFD_RELOC_AARCH64_LD_LO19_PCREL: ++ if (h == NULL || bfd_link_pic (info)) ++ break; ++ /* Fall through. */ ++ + case BFD_RELOC_AARCH64_NN: + + /* We don't need to handle relocs into sections not going into +@@ -7176,12 +7231,32 @@ elfNN_aarch64_check_relocs (bfd *abfd, s + + /* No need to do anything if we're not creating a shared + object. */ +- if (! bfd_link_pic (info)) +- break; ++ if (!(bfd_link_pic (info) ++ /* If on the other hand, we are creating an executable, we ++ may need to keep relocations for symbols satisfied by a ++ dynamic library if we manage to avoid copy relocs for the ++ symbol. ++ ++ NOTE: Currently, there is no support of copy relocs ++ elimination on pc-relative relocation types, because there is ++ no dynamic relocation support for them in glibc. We still ++ record the dynamic symbol reference for them. This is ++ because one symbol may be referenced by both absolute ++ relocation (for example, BFD_RELOC_AARCH64_NN) and ++ pc-relative relocation. We need full symbol reference ++ information to make correct decision later in ++ elfNN_aarch64_adjust_dynamic_symbol. */ ++ || (ELIMINATE_COPY_RELOCS ++ && !bfd_link_pic (info) ++ && h != NULL ++ && (h->root.type == bfd_link_hash_defweak ++ || !h->def_regular)))) ++ break; + + { + struct elf_dyn_relocs *p; + struct elf_dyn_relocs **head; ++ int howto_index = bfd_r_type - BFD_RELOC_AARCH64_RELOC_START; + + /* We must copy these reloc types into the output file. + Create a reloc section in dynobj and make room for +@@ -7245,6 +7320,8 @@ elfNN_aarch64_check_relocs (bfd *abfd, s + + p->count += 1; + ++ if (elfNN_aarch64_howto_table[howto_index].pc_relative) ++ p->pc_count += 1; + } + break; + +@@ -7348,42 +7425,6 @@ elfNN_aarch64_check_relocs (bfd *abfd, s + break; + } + +- case BFD_RELOC_AARCH64_MOVW_G0_NC: +- case BFD_RELOC_AARCH64_MOVW_G1_NC: +- case BFD_RELOC_AARCH64_MOVW_G2_NC: +- case BFD_RELOC_AARCH64_MOVW_G3: +- if (bfd_link_pic (info)) +- { +- int howto_index = bfd_r_type - BFD_RELOC_AARCH64_RELOC_START; +- (*_bfd_error_handler) +- (_("%B: relocation %s against `%s' can not be used when making " +- "a shared object; recompile with -fPIC"), +- abfd, elfNN_aarch64_howto_table[howto_index].name, +- (h) ? h->root.root.string : "a local symbol"); +- bfd_set_error (bfd_error_bad_value); +- return FALSE; +- } +- +- case BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL: +- case BFD_RELOC_AARCH64_ADR_HI21_PCREL: +- case BFD_RELOC_AARCH64_ADR_LO21_PCREL: +- if (h != NULL && bfd_link_executable (info)) +- { +- /* If this reloc is in a read-only section, we might +- need a copy reloc. We can't check reliably at this +- stage whether the section is read-only, as input +- sections have not yet been mapped to output sections. +- Tentatively set the flag for now, and correct in +- adjust_dynamic_symbol. */ +- h->non_got_ref = 1; +- h->plt.refcount += 1; +- h->pointer_equality_needed = 1; +- } +- /* FIXME:: RR need to handle these in shared libraries +- and essentially bomb out as these being non-PIC +- relocations in shared libraries. */ +- break; +- + case BFD_RELOC_AARCH64_CALL26: + case BFD_RELOC_AARCH64_JUMP26: + /* If this is a local symbol then we resolve it diff --git a/SOURCES/binutils-2.27-aarch64-ifunc.patch b/SOURCES/binutils-2.27-aarch64-ifunc.patch new file mode 100644 index 0000000..89e6ea3 --- /dev/null +++ b/SOURCES/binutils-2.27-aarch64-ifunc.patch @@ -0,0 +1,25 @@ +diff -rup binutils.orig/bfd/elfnn-aarch64.c binutils-2.27/bfd/elfnn-aarch64.c +--- binutils.orig/bfd/elfnn-aarch64.c 2017-02-21 10:45:19.311956006 +0000 ++++ binutils-2.27/bfd/elfnn-aarch64.c 2017-02-21 11:55:07.517922655 +0000 +@@ -4947,6 +4947,7 @@ elfNN_aarch64_final_link_relocate (reloc + it here if it is defined in a non-shared object. */ + if (h != NULL + && h->type == STT_GNU_IFUNC ++ && (input_section->flags & SEC_ALLOC) + && h->def_regular) + { + asection *plt; +Only in binutils.orig/ld/testsuite/ld-ifunc: .#pr18808b.c +Only in binutils.orig/ld/testsuite/ld-ifunc: #pr18808b.c# +diff -rup binutils.orig/ld/testsuite/ld-ifunc/pr18808b.c binutils-2.27/ld/testsuite/ld-ifunc/pr18808b.c +--- binutils.orig/ld/testsuite/ld-ifunc/pr18808b.c 2017-02-21 10:45:27.418826491 +0000 ++++ binutils-2.27/ld/testsuite/ld-ifunc/pr18808b.c 2017-02-21 10:45:41.049608726 +0000 +@@ -6,7 +6,7 @@ static int foo_impl(int x) + return x; + } + +-int bar() ++void bar () + { + int (*f)(int) = foo; + diff --git a/SOURCES/binutils-2.27-add-globalaudit-support.patch b/SOURCES/binutils-2.27-add-globalaudit-support.patch new file mode 100644 index 0000000..3eb29b8 --- /dev/null +++ b/SOURCES/binutils-2.27-add-globalaudit-support.patch @@ -0,0 +1,67 @@ +diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em +index 9ac1840316..748f56b844 100644 +--- a/ld/emultempl/elf32.em ++++ b/ld/emultempl/elf32.em +@@ -2676,6 +2676,10 @@ fragment <<EOF + link_info.noexecstack = TRUE; + link_info.execstack = FALSE; + } ++ else if (strcmp (optarg, "globalaudit") == 0) ++ { ++ link_info.flags_1 |= DF_1_GLOBAUDIT; ++ } + EOF + + if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then +diff --git a/ld/ld.texinfo b/ld/ld.texinfo +index ebe7e7b7bd..bbfa9fd4f4 100644 +--- a/ld/ld.texinfo ++++ b/ld/ld.texinfo +@@ -1136,6 +1136,14 @@ This option is only meaningful when building a shared object. It makes + the symbols defined by this shared object available for symbol resolution + of subsequently loaded libraries. + ++@item globalaudit ++This option is only meaningful when building a dynamic executable. ++This option marks the executable as requiring global auditing by ++setting the @code{DF_1_GLOBAUDIT} bit in the @code{DT_FLAGS_1} dynamic ++tag. Global auditing requires that any auditing library defined via ++the @option{--depaudit} or @option{-P} command line options be run for ++all dynamic objects loaded by the application. ++ + @item initfirst + This option is only meaningful when building a shared object. + It marks the object so that its runtime initialization will occur +diff --git a/ld/lexsup.c b/ld/lexsup.c +index effa277b16..1adb302a14 100644 +--- a/ld/lexsup.c ++++ b/ld/lexsup.c +@@ -1828,6 +1828,8 @@ elf_static_list_options (FILE *file) + -z execstack Mark executable as requiring executable stack\n")); + fprintf (file, _("\ + -z noexecstack Mark executable as not requiring executable stack\n")); ++ fprintf (file, _("\ ++ -z globalaudit Mark executable requiring global auditing\n")); + } + + static void +diff --git a/ld/testsuite/ld-elf/audit.exp b/ld/testsuite/ld-elf/audit.exp +index 83ee35582e..b7af4b72cf 100644 +--- a/ld/testsuite/ld-elf/audit.exp ++++ b/ld/testsuite/ld-elf/audit.exp +@@ -60,6 +60,9 @@ set build_tests { + {"Run with -lusesaudit -lusesaudit2" + "-Ltmpdir/ -lusesaudit -lusesaudit2" "" + {main.c} {{"readelf" {-d} "depaudit2.rd"}} "useslibusesaudit2.out"} ++ {"Link with -z globalaudit" ++ "-Wl,-Paudit.so -Wl,-z,globalaudit" "" ++ {main.c} {{"readelf" {-d} "globalaudit.rd"}} "globalaudit.out"} + } + + run_cc_link_tests $build_tests +--- /dev/null 2017-08-11 08:05:42.291658471 +0100 ++++ ld/testsuite/ld-elf/globalaudit.rd 2017-08-11 15:32:41.009073026 +0100 +@@ -0,0 +1,3 @@ ++#... ++.*\(FLAGS_1\).*Flags: GLOBAUDIT ++#pass diff --git a/SOURCES/binutils-2.27-cve-bugs.patch b/SOURCES/binutils-2.27-cve-bugs.patch new file mode 100644 index 0000000..f835e1e --- /dev/null +++ b/SOURCES/binutils-2.27-cve-bugs.patch @@ -0,0 +1,2317 @@ +diff -rup binutils.orig/bfd/aoutx.h binutils-2.27/bfd/aoutx.h +--- binutils.orig/bfd/aoutx.h 2017-03-24 13:50:55.358188013 +0000 ++++ binutils-2.27/bfd/aoutx.h 2017-03-24 14:26:38.438542134 +0000 +@@ -2807,9 +2807,17 @@ NAME (aout, find_nearest_line) (bfd *abf + *filename_ptr = main_file_name; + else + { +- sprintf (buf, "%s%s", directory_name, main_file_name); +- *filename_ptr = buf; +- buf += filelen + 1; ++ if (buf == NULL) ++ /* PR binutils/20891: In a corrupt input file both ++ main_file_name and directory_name can be empty... */ ++ * filename_ptr = NULL; ++ else ++ { ++ snprintf (buf, filelen + 1, "%s%s", directory_name, ++ main_file_name); ++ *filename_ptr = buf; ++ buf += filelen + 1; ++ } + } + } + +@@ -2818,6 +2826,13 @@ NAME (aout, find_nearest_line) (bfd *abf + const char *function = func->name; + char *colon; + ++ if (buf == NULL) ++ { ++ /* PR binutils/20892: In a corrupt input file func can be empty. */ ++ * functionname_ptr = NULL; ++ return TRUE; ++ } ++ + /* The caller expects a symbol name. We actually have a + function name, without the leading underscore. Put the + underscore back in, so that the caller gets a symbol name. */ +diff -rup binutils.orig/bfd/compress.c binutils-2.27/bfd/compress.c +--- binutils.orig/bfd/compress.c 2017-03-24 13:50:55.362187961 +0000 ++++ binutils-2.27/bfd/compress.c 2017-03-24 14:17:49.075366778 +0000 +@@ -292,7 +292,7 @@ bfd_get_full_section_contents (bfd *abfd + SHF_COMPRESSED section. */ + compression_header_size = 12; + if (!decompress_contents (compressed_buffer + compression_header_size, +- sec->compressed_size, p, sz)) ++ sec->compressed_size - compression_header_size, p, sz)) + { + bfd_set_error (bfd_error_bad_value); + if (p != *ptr) +diff -rup binutils.orig/bfd/peicode.h binutils-2.27/bfd/peicode.h +--- binutils.orig/bfd/peicode.h 2017-03-24 13:50:55.374187806 +0000 ++++ binutils-2.27/bfd/peicode.h 2017-03-24 14:22:36.326663483 +0000 +@@ -1264,7 +1264,8 @@ pe_ILF_object_p (bfd * abfd) + } + + symbol_name = (char *) ptr; +- source_dll = symbol_name + strlen (symbol_name) + 1; ++ /* See PR 20905 for an example of where the strnlen is necessary. */ ++ source_dll = symbol_name + strnlen (symbol_name, size - 1) + 1; + + /* Verify that the strings are null terminated. */ + if (ptr[size - 1] != 0 +diff -rup binutils.orig/binutils/dwarf.c binutils-2.27/binutils/dwarf.c +--- binutils.orig/binutils/dwarf.c 2017-03-24 13:50:55.381187716 +0000 ++++ binutils-2.27/binutils/dwarf.c 2017-03-24 13:58:05.061648769 +0000 +@@ -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 +@@ -2713,7 +2712,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)) +@@ -7302,21 +7301,27 @@ process_cu_tu_index (struct dwarf_sectio + 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 (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)) +- process_cu_tu_index (&debug_displays [dwp_tu_index].section, 0); ++ 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. */ +@@ -7326,7 +7331,8 @@ find_cu_tu_set (void *file, unsigned int + { + 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++) +diff -rup binutils.orig/binutils/readelf.c binutils-2.27/binutils/readelf.c +--- binutils.orig/binutils/readelf.c 2017-03-24 13:50:55.390187599 +0000 ++++ binutils-2.27/binutils/readelf.c 2017-03-24 14:16:39.008271196 +0000 +@@ -674,8 +674,14 @@ find_section_in_set (const char * name, + 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); +@@ -11342,16 +11348,32 @@ process_syminfo (FILE * file ATTRIBUTE_U + return 1; + } + ++#define IN_RANGE(START,END,ADDR,OFF) \ ++ (((ADDR) >= (START)) && ((ADDR) + (OFF) < (END))) ++ + /* 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, +- Elf_Internal_Sym * symtab) ++ unsigned char * end, ++ 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) + { +@@ -11360,13 +11382,25 @@ target_specific_reloc_handling (Elf_Inte + { + static Elf_Internal_Sym * saved_sym = NULL; + ++ if (reloc == NULL) ++ { ++ saved_sym = NULL; ++ return TRUE; ++ } ++ + switch (reloc_type) + { + case 10: /* R_MSP430_SYM_DIFF */ + if (uses_msp430x_relocs ()) + 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 */ +@@ -11388,13 +11422,24 @@ target_specific_reloc_handling (Elf_Inte + 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); ++ if (sym_index >= num_syms) ++ error (_("MSP430 reloc contains invalid symbol index %lu\n"), ++ sym_index); ++ else ++ { ++ value = reloc->r_addend + (symtab[sym_index].st_value ++ - saved_sym->st_value); + +- byte_put (start + reloc->r_offset, value, reloc_type == 1 ? 4 : 2); ++ if (IN_RANGE (start, end, start + reloc->r_offset, reloc_size)) ++ byte_put (start + reloc->r_offset, value, reloc_size); ++ else ++ /* PR 21137 */ ++ error (_("MSP430 sym diff reloc contains invalid offset: 0x%lx\n"), ++ (long) reloc->r_offset); ++ } + + saved_sym = NULL; + return TRUE; +@@ -11414,24 +11459,46 @@ target_specific_reloc_handling (Elf_Inte + { + 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) + { ++ 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 (sym_index >= num_syms) ++ error (_("MN10300 reloc contains invalid symbol index %lu\n"), ++ sym_index); ++ else ++ { ++ value = reloc->r_addend + (symtab[sym_index].st_value ++ - saved_sym->st_value); + +- byte_put (start + reloc->r_offset, value, reloc_type == 1 ? 4 : 2); ++ if (IN_RANGE (start, end, start + reloc->r_offset, reloc_size)) ++ byte_put (start + reloc->r_offset, value, reloc_size); ++ else ++ error (_("MN10300 sym diff reloc contains invalid offset: 0x%lx\n"), ++ (long) reloc->r_offset); ++ } + + saved_sym = NULL; + return TRUE; +@@ -11451,12 +11518,24 @@ target_specific_reloc_handling (Elf_Inte + 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. */ +@@ -11466,12 +11545,20 @@ target_specific_reloc_handling (Elf_Inte + break; + + case 0x41: /* R_RL78_ABS32. */ +- byte_put (start + reloc->r_offset, value, 4); ++ if (IN_RANGE (start, end, start + reloc->r_offset, 4)) ++ byte_put (start + reloc->r_offset, value, 4); ++ else ++ error (_("RL78 sym diff reloc contains invalid offset: 0x%lx\n"), ++ (long) reloc->r_offset); + value = 0; + return TRUE; + + case 0x43: /* R_RL78_ABS16. */ +- byte_put (start + reloc->r_offset, value, 2); ++ if (IN_RANGE (start, end, start + reloc->r_offset, 2)) ++ byte_put (start + reloc->r_offset, value, 2); ++ else ++ error (_("RL78 sym diff reloc contains invalid offset: 0x%lx\n"), ++ (long) reloc->r_offset); + value = 0; + return TRUE; + +@@ -12078,7 +12165,7 @@ apply_relocations (void * + + 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, num_syms)) + continue; + else if (is_none_reloc (reloc_type)) + continue; +@@ -12174,6 +12261,9 @@ apply_relocations (void * + } + + 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) + { +@@ -12471,10 +12561,18 @@ dump_section_as_bytes (Elf_Internal_Shdr + 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) +diff -rup binutils.orig/binutils/stabs.c binutils-2.27/binutils/stabs.c +--- binutils.orig/binutils/stabs.c 2017-03-24 13:50:55.386187651 +0000 ++++ binutils-2.27/binutils/stabs.c 2017-03-24 14:14:20.823055085 +0000 +@@ -232,6 +232,10 @@ parse_number (const char **pp, bfd_boole + + 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, con + 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; +diff -rup binutils.orig/gas/app.c binutils-2.27/gas/app.c +--- binutils.orig/gas/app.c 2017-03-24 13:50:55.395187534 +0000 ++++ binutils-2.27/gas/app.c 2017-03-24 13:52:02.141327121 +0000 +@@ -1187,7 +1187,7 @@ do_scrub_chars (size_t (*get) (char *, s + state = -2; + break; + } +- else ++ else if (ch2 != EOF) + { + UNGET (ch2); + } +diff -rup binutils.orig/ld/ldlex.c binutils-2.27/ld/ldlex.c +--- binutils.orig/ld/ldlex.c 2017-03-24 13:50:55.613184724 +0000 ++++ binutils-2.27/ld/ldlex.c 2017-03-24 14:20:47.319068827 +0000 +@@ -1,5 +1,5 @@ + +-#line 3 "ldlex.c" ++#line 3 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.c" + + #define YY_INT_ALIGNED short int + +@@ -7,8 +7,8 @@ + + #define FLEX_SCANNER + #define YY_FLEX_MAJOR_VERSION 2 +-#define YY_FLEX_MINOR_VERSION 5 +-#define YY_FLEX_SUBMINOR_VERSION 35 ++#define YY_FLEX_MINOR_VERSION 6 ++#define YY_FLEX_SUBMINOR_VERSION 0 + #if YY_FLEX_SUBMINOR_VERSION > 0 + #define FLEX_BETA + #endif +@@ -46,7 +46,6 @@ typedef int16_t flex_int16_t; + typedef uint16_t flex_uint16_t; + typedef int32_t flex_int32_t; + typedef uint32_t flex_uint32_t; +-typedef uint64_t flex_uint64_t; + #else + typedef signed char flex_int8_t; + typedef short int flex_int16_t; +@@ -54,7 +53,6 @@ typedef int flex_int32_t; + typedef unsigned char flex_uint8_t; + typedef unsigned short int flex_uint16_t; + typedef unsigned int flex_uint32_t; +-#endif /* ! C99 */ + + /* Limits of integral types. */ + #ifndef INT8_MIN +@@ -85,6 +83,8 @@ typedef unsigned int flex_uint32_t; + #define UINT32_MAX (4294967295U) + #endif + ++#endif /* ! C99 */ ++ + #endif /* ! FLEXINT_H */ + + #ifdef __cplusplus +@@ -141,7 +141,15 @@ typedef unsigned int flex_uint32_t; + + /* Size of default input buffer. */ + #ifndef YY_BUF_SIZE ++#ifdef __ia64__ ++/* On IA-64, the buffer size is 16k, not 8k. ++ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. ++ * Ditto for the __ia64__ case accordingly. ++ */ ++#define YY_BUF_SIZE 32768 ++#else + #define YY_BUF_SIZE 16384 ++#endif /* __ia64__ */ + #endif + + /* The state buf must be large enough to hold one state per character in the main buffer. +@@ -167,13 +175,14 @@ extern FILE *yyin, *yyout; + #define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) ++ #define YY_LINENO_REWIND_TO(ptr) + + /* Return all but the first "n" matched characters back to the input stream. */ + #define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ +- int yyless_macro_arg = (n); \ ++ yy_size_t yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ +@@ -343,11 +352,17 @@ extern int yylineno; + int yylineno = 1; + + extern char *yytext; ++#ifdef yytext_ptr ++#undef yytext_ptr ++#endif + #define yytext_ptr yytext + + static yy_state_type yy_get_previous_state (void ); + static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); + static int yy_get_next_buffer (void ); ++#if defined(__GNUC__) && __GNUC__ >= 3 ++__attribute__((__noreturn__)) ++#endif + static void yy_fatal_error (yyconst char msg[] ); + + /* Done after the current pattern has been matched and before the +@@ -355,7 +370,7 @@ static void yy_fatal_error (yyconst char + */ + #define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ +- yyleng = (yy_size_t) (yy_cp - yy_bp); \ ++ yyleng = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; +@@ -568,7 +583,7 @@ static yyconst flex_int16_t yy_accept[17 + 174, 84, 84, 0 + } ; + +-static yyconst flex_int32_t yy_ec[256] = ++static yyconst YY_CHAR yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, +@@ -600,7 +615,7 @@ static yyconst flex_int32_t yy_ec[256] = + 1, 1, 1, 1, 1 + } ; + +-static yyconst flex_int32_t yy_meta[83] = ++static yyconst YY_CHAR yy_meta[83] = + { 0, + 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, + 1, 3, 5, 6, 7, 8, 9, 10, 10, 10, +@@ -613,7 +628,7 @@ static yyconst flex_int32_t yy_meta[83] + 1, 9 + } ; + +-static yyconst flex_int16_t yy_base[1807] = ++static yyconst flex_uint16_t yy_base[1807] = + { 0, + 0, 0, 0, 0, 82, 163, 244, 0, 326, 0, + 408, 489, 570, 0, 112, 114, 652, 734, 816, 898, +@@ -1019,7 +1034,7 @@ static yyconst flex_int16_t yy_def[1807] + 1774, 1774, 1774, 1774, 1774, 1774 + } ; + +-static yyconst flex_int16_t yy_nxt[2940] = ++static yyconst flex_uint16_t yy_nxt[2940] = + { 0, + 23, 24, 25, 26, 27, 23, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 40, +@@ -1687,8 +1702,8 @@ int yy_flex_debug = 0; + #define YY_MORE_ADJ 0 + #define YY_RESTORE_YY_MORE_OFFSET + char *yytext; +-#line 1 "ldlex.l" +-#line 4 "ldlex.l" ++#line 1 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" ++#line 4 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + + /* Copyright (C) 1991-2016 Free Software Foundation, Inc. + Written by Steve Chamberlain of Cygnus Support. +@@ -1788,7 +1803,7 @@ int yywrap (void) { return 1; } + + + +-#line 1792 "ldlex.c" ++#line 1807 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.c" + + #define INITIAL 0 + #define SCRIPT 1 +@@ -1830,11 +1845,11 @@ void yyset_extra (YY_EXTRA_TYPE user_def + + FILE *yyget_in (void ); + +-void yyset_in (FILE * in_str ); ++void yyset_in (FILE * _in_str ); + + FILE *yyget_out (void ); + +-void yyset_out (FILE * out_str ); ++void yyset_out (FILE * _out_str ); + + yy_size_t yyget_leng (void ); + +@@ -1842,7 +1857,7 @@ char *yyget_text (void ); + + int yyget_lineno (void ); + +-void yyset_lineno (int line_number ); ++void yyset_lineno (int _line_number ); + + /* Macros after this point can all be overridden by user definitions in + * section 1. +@@ -1856,6 +1871,10 @@ extern int yywrap (void ); + #endif + #endif + ++#ifndef YY_NO_UNPUT ++ ++#endif ++ + #ifndef yytext_ptr + static void yy_flex_strncpy (char *,yyconst char *,int ); + #endif +@@ -1876,7 +1895,12 @@ static int input (void ); + + /* Amount of stuff to slurp up with each read. */ + #ifndef YY_READ_BUF_SIZE ++#ifdef __ia64__ ++/* On IA-64, the buffer size is 16k, not 8k */ ++#define YY_READ_BUF_SIZE 16384 ++#else + #define YY_READ_BUF_SIZE 8192 ++#endif /* __ia64__ */ + #endif + + /* Copy whatever the last rule matched to the standard output. */ +@@ -1884,7 +1908,7 @@ static int input (void ); + /* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +-#define ECHO fwrite( yytext, yyleng, 1, yyout ) ++#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) + #endif + + /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, +@@ -1895,7 +1919,7 @@ static int input (void ); + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ +- yy_size_t n; \ ++ size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ +@@ -1963,7 +1987,7 @@ extern int yylex (void); + + /* Code executed at the end of each rule. */ + #ifndef YY_BREAK +-#define YY_BREAK break; ++#define YY_BREAK /*LINTED*/break; + #endif + + #define YY_RULE_SETUP \ +@@ -1973,31 +1997,10 @@ extern int yylex (void); + */ + YY_DECL + { +- register yy_state_type yy_current_state; +- register char *yy_cp, *yy_bp; +- register int yy_act; ++ yy_state_type yy_current_state; ++ char *yy_cp, *yy_bp; ++ int yy_act; + +-#line 121 "ldlex.l" +- +- +- if (parser_input != input_selected) +- { +- /* The first token of the input determines the initial parser state. */ +- input_type t = parser_input; +- parser_input = input_selected; +- switch (t) +- { +- case input_script: return INPUT_SCRIPT; break; +- case input_mri_script: return INPUT_MRI_SCRIPT; break; +- case input_version_script: return INPUT_VERSION_SCRIPT; break; +- case input_dynamic_list: return INPUT_DYNAMIC_LIST; break; +- case input_defsym: return INPUT_DEFSYM; break; +- default: abort (); +- } +- } +- +-#line 2000 "ldlex.c" +- + if ( !(yy_init) ) + { + (yy_init) = 1; +@@ -2024,7 +2027,29 @@ YY_DECL + yy_load_buffer_state( ); + } + +- while ( 1 ) /* loops until end-of-file is reached */ ++ { ++#line 121 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" ++ ++ ++ if (parser_input != input_selected) ++ { ++ /* The first token of the input determines the initial parser state. */ ++ input_type t = parser_input; ++ parser_input = input_selected; ++ switch (t) ++ { ++ case input_script: return INPUT_SCRIPT; break; ++ case input_mri_script: return INPUT_MRI_SCRIPT; break; ++ case input_version_script: return INPUT_VERSION_SCRIPT; break; ++ case input_dynamic_list: return INPUT_DYNAMIC_LIST; break; ++ case input_defsym: return INPUT_DEFSYM; break; ++ default: abort (); ++ } ++ } ++ ++#line 2051 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.c" ++ ++ while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + +@@ -2040,7 +2065,7 @@ YY_DECL + yy_match: + do + { +- register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; ++ YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; +@@ -2081,32 +2106,32 @@ do_action: /* This label is used only to + + case 1: + YY_RULE_SETUP +-#line 139 "ldlex.l" ++#line 139 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { comment (); } + YY_BREAK + case 2: + YY_RULE_SETUP +-#line 142 "ldlex.l" ++#line 142 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('-');} + YY_BREAK + case 3: + YY_RULE_SETUP +-#line 143 "ldlex.l" ++#line 143 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('+');} + YY_BREAK + case 4: + YY_RULE_SETUP +-#line 144 "ldlex.l" ++#line 144 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { yylval.name = xstrdup (yytext); return NAME; } + YY_BREAK + case 5: + YY_RULE_SETUP +-#line 145 "ldlex.l" ++#line 145 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('='); } + YY_BREAK + case 6: + YY_RULE_SETUP +-#line 147 "ldlex.l" ++#line 147 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { + yylval.integer = bfd_scan_vma (yytext + 1, 0, 16); + yylval.bigint.str = NULL; +@@ -2115,7 +2140,7 @@ YY_RULE_SETUP + YY_BREAK + case 7: + YY_RULE_SETUP +-#line 153 "ldlex.l" ++#line 153 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { + int ibase ; + switch (yytext[yyleng - 1]) { +@@ -2144,7 +2169,7 @@ YY_RULE_SETUP + YY_BREAK + case 8: + YY_RULE_SETUP +-#line 178 "ldlex.l" ++#line 178 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { + char *s = yytext; + int ibase = 0; +@@ -2177,829 +2202,829 @@ YY_RULE_SETUP + YY_BREAK + case 9: + YY_RULE_SETUP +-#line 207 "ldlex.l" ++#line 207 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(']');} + YY_BREAK + case 10: + YY_RULE_SETUP +-#line 208 "ldlex.l" ++#line 208 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('[');} + YY_BREAK + case 11: + YY_RULE_SETUP +-#line 209 "ldlex.l" ++#line 209 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(LSHIFTEQ);} + YY_BREAK + case 12: + YY_RULE_SETUP +-#line 210 "ldlex.l" ++#line 210 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(RSHIFTEQ);} + YY_BREAK + case 13: + YY_RULE_SETUP +-#line 211 "ldlex.l" ++#line 211 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(OROR);} + YY_BREAK + case 14: + YY_RULE_SETUP +-#line 212 "ldlex.l" ++#line 212 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(EQ);} + YY_BREAK + case 15: + YY_RULE_SETUP +-#line 213 "ldlex.l" ++#line 213 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(NE);} + YY_BREAK + case 16: + YY_RULE_SETUP +-#line 214 "ldlex.l" ++#line 214 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(GE);} + YY_BREAK + case 17: + YY_RULE_SETUP +-#line 215 "ldlex.l" ++#line 215 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(LE);} + YY_BREAK + case 18: + YY_RULE_SETUP +-#line 216 "ldlex.l" ++#line 216 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(LSHIFT);} + YY_BREAK + case 19: + YY_RULE_SETUP +-#line 217 "ldlex.l" ++#line 217 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(RSHIFT);} + YY_BREAK + case 20: + YY_RULE_SETUP +-#line 218 "ldlex.l" ++#line 218 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(PLUSEQ);} + YY_BREAK + case 21: + YY_RULE_SETUP +-#line 219 "ldlex.l" ++#line 219 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(MINUSEQ);} + YY_BREAK + case 22: + YY_RULE_SETUP +-#line 220 "ldlex.l" ++#line 220 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(MULTEQ);} + YY_BREAK + case 23: + YY_RULE_SETUP +-#line 221 "ldlex.l" ++#line 221 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(DIVEQ);} + YY_BREAK + case 24: + YY_RULE_SETUP +-#line 222 "ldlex.l" ++#line 222 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ANDEQ);} + YY_BREAK + case 25: + YY_RULE_SETUP +-#line 223 "ldlex.l" ++#line 223 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(OREQ);} + YY_BREAK + case 26: + YY_RULE_SETUP +-#line 224 "ldlex.l" ++#line 224 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ANDAND);} + YY_BREAK + case 27: + YY_RULE_SETUP +-#line 225 "ldlex.l" ++#line 225 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('>');} + YY_BREAK + case 28: + YY_RULE_SETUP +-#line 226 "ldlex.l" ++#line 226 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(',');} + YY_BREAK + case 29: + YY_RULE_SETUP +-#line 227 "ldlex.l" ++#line 227 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('&');} + YY_BREAK + case 30: + YY_RULE_SETUP +-#line 228 "ldlex.l" ++#line 228 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('|');} + YY_BREAK + case 31: + YY_RULE_SETUP +-#line 229 "ldlex.l" ++#line 229 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('~');} + YY_BREAK + case 32: + YY_RULE_SETUP +-#line 230 "ldlex.l" ++#line 230 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('!');} + YY_BREAK + case 33: + YY_RULE_SETUP +-#line 231 "ldlex.l" ++#line 231 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('?');} + YY_BREAK + case 34: + YY_RULE_SETUP +-#line 232 "ldlex.l" ++#line 232 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('*');} + YY_BREAK + case 35: + YY_RULE_SETUP +-#line 233 "ldlex.l" ++#line 233 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('+');} + YY_BREAK + case 36: + YY_RULE_SETUP +-#line 234 "ldlex.l" ++#line 234 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('-');} + YY_BREAK + case 37: + YY_RULE_SETUP +-#line 235 "ldlex.l" ++#line 235 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('/');} + YY_BREAK + case 38: + YY_RULE_SETUP +-#line 236 "ldlex.l" ++#line 236 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('%');} + YY_BREAK + case 39: + YY_RULE_SETUP +-#line 237 "ldlex.l" ++#line 237 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('<');} + YY_BREAK + case 40: + YY_RULE_SETUP +-#line 238 "ldlex.l" ++#line 238 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('=');} + YY_BREAK + case 41: + YY_RULE_SETUP +-#line 239 "ldlex.l" ++#line 239 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('}') ; } + YY_BREAK + case 42: + YY_RULE_SETUP +-#line 240 "ldlex.l" ++#line 240 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('{'); } + YY_BREAK + case 43: + YY_RULE_SETUP +-#line 241 "ldlex.l" ++#line 241 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(')');} + YY_BREAK + case 44: + YY_RULE_SETUP +-#line 242 "ldlex.l" ++#line 242 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN('(');} + YY_BREAK + case 45: + YY_RULE_SETUP +-#line 243 "ldlex.l" ++#line 243 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(':'); } + YY_BREAK + case 46: + YY_RULE_SETUP +-#line 244 "ldlex.l" ++#line 244 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(';');} + YY_BREAK + case 47: + YY_RULE_SETUP +-#line 245 "ldlex.l" ++#line 245 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(MEMORY);} + YY_BREAK + case 48: + YY_RULE_SETUP +-#line 246 "ldlex.l" ++#line 246 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(REGION_ALIAS);} + YY_BREAK + case 49: + YY_RULE_SETUP +-#line 247 "ldlex.l" ++#line 247 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(LD_FEATURE);} + YY_BREAK + case 50: + YY_RULE_SETUP +-#line 248 "ldlex.l" ++#line 248 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ORIGIN);} + YY_BREAK + case 51: + YY_RULE_SETUP +-#line 249 "ldlex.l" ++#line 249 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(VERSIONK);} + YY_BREAK + case 52: + YY_RULE_SETUP +-#line 250 "ldlex.l" ++#line 250 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(BLOCK);} + YY_BREAK + case 53: + YY_RULE_SETUP +-#line 251 "ldlex.l" ++#line 251 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(BIND);} + YY_BREAK + case 54: + YY_RULE_SETUP +-#line 252 "ldlex.l" ++#line 252 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(LENGTH);} + YY_BREAK + case 55: + YY_RULE_SETUP +-#line 253 "ldlex.l" ++#line 253 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ALIGN_K);} + YY_BREAK + case 56: + YY_RULE_SETUP +-#line 254 "ldlex.l" ++#line 254 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(DATA_SEGMENT_ALIGN);} + YY_BREAK + case 57: + YY_RULE_SETUP +-#line 255 "ldlex.l" ++#line 255 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(DATA_SEGMENT_RELRO_END);} + YY_BREAK + case 58: + YY_RULE_SETUP +-#line 256 "ldlex.l" ++#line 256 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(DATA_SEGMENT_END);} + YY_BREAK + case 59: + YY_RULE_SETUP +-#line 257 "ldlex.l" ++#line 257 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ADDR);} + YY_BREAK + case 60: + YY_RULE_SETUP +-#line 258 "ldlex.l" ++#line 258 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(LOADADDR);} + YY_BREAK + case 61: + YY_RULE_SETUP +-#line 259 "ldlex.l" ++#line 259 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ALIGNOF); } + YY_BREAK + case 62: + YY_RULE_SETUP +-#line 260 "ldlex.l" ++#line 260 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(MAX_K); } + YY_BREAK + case 63: + YY_RULE_SETUP +-#line 261 "ldlex.l" ++#line 261 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(MIN_K); } + YY_BREAK + case 64: + YY_RULE_SETUP +-#line 262 "ldlex.l" ++#line 262 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(LOG2CEIL); } + YY_BREAK + case 65: + YY_RULE_SETUP +-#line 263 "ldlex.l" ++#line 263 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ASSERT_K); } + YY_BREAK + case 66: + YY_RULE_SETUP +-#line 264 "ldlex.l" ++#line 264 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ENTRY);} + YY_BREAK + case 67: + YY_RULE_SETUP +-#line 265 "ldlex.l" ++#line 265 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(EXTERN);} + YY_BREAK + case 68: + YY_RULE_SETUP +-#line 266 "ldlex.l" ++#line 266 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(NEXT);} + YY_BREAK + case 69: + YY_RULE_SETUP +-#line 267 "ldlex.l" ++#line 267 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SIZEOF_HEADERS);} + YY_BREAK + case 70: + YY_RULE_SETUP +-#line 268 "ldlex.l" ++#line 268 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SIZEOF_HEADERS);} + YY_BREAK + case 71: + YY_RULE_SETUP +-#line 269 "ldlex.l" ++#line 269 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SEGMENT_START);} + YY_BREAK + case 72: + YY_RULE_SETUP +-#line 270 "ldlex.l" ++#line 270 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(MAP);} + YY_BREAK + case 73: + YY_RULE_SETUP +-#line 271 "ldlex.l" ++#line 271 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SIZEOF);} + YY_BREAK + case 74: + YY_RULE_SETUP +-#line 272 "ldlex.l" ++#line 272 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(TARGET_K);} + YY_BREAK + case 75: + YY_RULE_SETUP +-#line 273 "ldlex.l" ++#line 273 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SEARCH_DIR);} + YY_BREAK + case 76: + YY_RULE_SETUP +-#line 274 "ldlex.l" ++#line 274 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(OUTPUT);} + YY_BREAK + case 77: + YY_RULE_SETUP +-#line 275 "ldlex.l" ++#line 275 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(INPUT);} + YY_BREAK + case 78: + YY_RULE_SETUP +-#line 276 "ldlex.l" ++#line 276 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(GROUP);} + YY_BREAK + case 79: + YY_RULE_SETUP +-#line 277 "ldlex.l" ++#line 277 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(AS_NEEDED);} + YY_BREAK + case 80: + YY_RULE_SETUP +-#line 278 "ldlex.l" ++#line 278 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(DEFINED);} + YY_BREAK + case 81: + YY_RULE_SETUP +-#line 279 "ldlex.l" ++#line 279 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(CREATE_OBJECT_SYMBOLS);} + YY_BREAK + case 82: + YY_RULE_SETUP +-#line 280 "ldlex.l" ++#line 280 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN( CONSTRUCTORS);} + YY_BREAK + case 83: + YY_RULE_SETUP +-#line 281 "ldlex.l" ++#line 281 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(FORCE_COMMON_ALLOCATION);} + YY_BREAK + case 84: + YY_RULE_SETUP +-#line 282 "ldlex.l" ++#line 282 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(INHIBIT_COMMON_ALLOCATION);} + YY_BREAK + case 85: + YY_RULE_SETUP +-#line 283 "ldlex.l" ++#line 283 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SECTIONS);} + YY_BREAK + case 86: + YY_RULE_SETUP +-#line 284 "ldlex.l" ++#line 284 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(INSERT_K);} + YY_BREAK + case 87: + YY_RULE_SETUP +-#line 285 "ldlex.l" ++#line 285 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(AFTER);} + YY_BREAK + case 88: + YY_RULE_SETUP +-#line 286 "ldlex.l" ++#line 286 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(BEFORE);} + YY_BREAK + case 89: + YY_RULE_SETUP +-#line 287 "ldlex.l" ++#line 287 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(FILL);} + YY_BREAK + case 90: + YY_RULE_SETUP +-#line 288 "ldlex.l" ++#line 288 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(STARTUP);} + YY_BREAK + case 91: + YY_RULE_SETUP +-#line 289 "ldlex.l" ++#line 289 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(OUTPUT_FORMAT);} + YY_BREAK + case 92: + YY_RULE_SETUP +-#line 290 "ldlex.l" ++#line 290 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN( OUTPUT_ARCH);} + YY_BREAK + case 93: + YY_RULE_SETUP +-#line 291 "ldlex.l" ++#line 291 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(HLL);} + YY_BREAK + case 94: + YY_RULE_SETUP +-#line 292 "ldlex.l" ++#line 292 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SYSLIB);} + YY_BREAK + case 95: + YY_RULE_SETUP +-#line 293 "ldlex.l" ++#line 293 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(FLOAT);} + YY_BREAK + case 96: + YY_RULE_SETUP +-#line 294 "ldlex.l" ++#line 294 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN( QUAD);} + YY_BREAK + case 97: + YY_RULE_SETUP +-#line 295 "ldlex.l" ++#line 295 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN( SQUAD);} + YY_BREAK + case 98: + YY_RULE_SETUP +-#line 296 "ldlex.l" ++#line 296 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN( LONG);} + YY_BREAK + case 99: + YY_RULE_SETUP +-#line 297 "ldlex.l" ++#line 297 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN( SHORT);} + YY_BREAK + case 100: + YY_RULE_SETUP +-#line 298 "ldlex.l" ++#line 298 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN( BYTE);} + YY_BREAK + case 101: + YY_RULE_SETUP +-#line 299 "ldlex.l" ++#line 299 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(NOFLOAT);} + YY_BREAK + case 102: + YY_RULE_SETUP +-#line 300 "ldlex.l" ++#line 300 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(NOCROSSREFS);} + YY_BREAK + case 103: + YY_RULE_SETUP +-#line 301 "ldlex.l" ++#line 301 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(NOCROSSREFS_TO);} + YY_BREAK + case 104: + YY_RULE_SETUP +-#line 302 "ldlex.l" ++#line 302 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(OVERLAY); } + YY_BREAK + case 105: + YY_RULE_SETUP +-#line 303 "ldlex.l" ++#line 303 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SORT_BY_NAME); } + YY_BREAK + case 106: + YY_RULE_SETUP +-#line 304 "ldlex.l" ++#line 304 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SORT_BY_ALIGNMENT); } + YY_BREAK + case 107: + YY_RULE_SETUP +-#line 305 "ldlex.l" ++#line 305 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SORT_BY_NAME); } + YY_BREAK + case 108: + YY_RULE_SETUP +-#line 306 "ldlex.l" ++#line 306 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SORT_BY_INIT_PRIORITY); } + YY_BREAK + case 109: + YY_RULE_SETUP +-#line 307 "ldlex.l" ++#line 307 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SORT_NONE); } + YY_BREAK + case 110: + YY_RULE_SETUP +-#line 308 "ldlex.l" ++#line 308 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(NOLOAD);} + YY_BREAK + case 111: + YY_RULE_SETUP +-#line 309 "ldlex.l" ++#line 309 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(DSECT);} + YY_BREAK + case 112: + YY_RULE_SETUP +-#line 310 "ldlex.l" ++#line 310 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(COPY);} + YY_BREAK + case 113: + YY_RULE_SETUP +-#line 311 "ldlex.l" ++#line 311 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(INFO);} + YY_BREAK + case 114: + YY_RULE_SETUP +-#line 312 "ldlex.l" ++#line 312 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(OVERLAY);} + YY_BREAK + case 115: + YY_RULE_SETUP +-#line 313 "ldlex.l" ++#line 313 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ONLY_IF_RO); } + YY_BREAK + case 116: + YY_RULE_SETUP +-#line 314 "ldlex.l" ++#line 314 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ONLY_IF_RW); } + YY_BREAK + case 117: + YY_RULE_SETUP +-#line 315 "ldlex.l" ++#line 315 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SPECIAL); } + YY_BREAK + case 118: + YY_RULE_SETUP +-#line 316 "ldlex.l" ++#line 316 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ORIGIN);} + YY_BREAK + case 119: + YY_RULE_SETUP +-#line 317 "ldlex.l" ++#line 317 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ORIGIN);} + YY_BREAK + case 120: + YY_RULE_SETUP +-#line 318 "ldlex.l" ++#line 318 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN( LENGTH);} + YY_BREAK + case 121: + YY_RULE_SETUP +-#line 319 "ldlex.l" ++#line 319 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN( LENGTH);} + YY_BREAK + case 122: + YY_RULE_SETUP +-#line 320 "ldlex.l" ++#line 320 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(INPUT_SECTION_FLAGS); } + YY_BREAK + case 123: + YY_RULE_SETUP +-#line 321 "ldlex.l" ++#line 321 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(INCLUDE);} + YY_BREAK + case 124: + YY_RULE_SETUP +-#line 322 "ldlex.l" ++#line 322 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN (PHDRS); } + YY_BREAK + case 125: + YY_RULE_SETUP +-#line 323 "ldlex.l" ++#line 323 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(AT);} + YY_BREAK + case 126: + YY_RULE_SETUP +-#line 324 "ldlex.l" ++#line 324 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ALIGN_WITH_INPUT);} + YY_BREAK + case 127: + YY_RULE_SETUP +-#line 325 "ldlex.l" ++#line 325 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SUBALIGN);} + YY_BREAK + case 128: + YY_RULE_SETUP +-#line 326 "ldlex.l" ++#line 326 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(HIDDEN); } + YY_BREAK + case 129: + YY_RULE_SETUP +-#line 327 "ldlex.l" ++#line 327 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(PROVIDE); } + YY_BREAK + case 130: + YY_RULE_SETUP +-#line 328 "ldlex.l" ++#line 328 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(PROVIDE_HIDDEN); } + YY_BREAK + case 131: + YY_RULE_SETUP +-#line 329 "ldlex.l" ++#line 329 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(KEEP); } + YY_BREAK + case 132: + YY_RULE_SETUP +-#line 330 "ldlex.l" ++#line 330 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(EXCLUDE_FILE); } + YY_BREAK + case 133: + YY_RULE_SETUP +-#line 331 "ldlex.l" ++#line 331 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(CONSTANT);} + YY_BREAK + case 134: + /* rule 134 can match eol */ + YY_RULE_SETUP +-#line 332 "ldlex.l" ++#line 332 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { ++ lineno; } + YY_BREAK + case 135: + /* rule 135 can match eol */ + YY_RULE_SETUP +-#line 333 "ldlex.l" ++#line 333 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { ++ lineno; RTOKEN(NEWLINE); } + YY_BREAK + case 136: + YY_RULE_SETUP +-#line 334 "ldlex.l" ++#line 334 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { /* Mri comment line */ } + YY_BREAK + case 137: + YY_RULE_SETUP +-#line 335 "ldlex.l" ++#line 335 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { /* Mri comment line */ } + YY_BREAK + case 138: + YY_RULE_SETUP +-#line 336 "ldlex.l" ++#line 336 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ENDWORD); } + YY_BREAK + case 139: + YY_RULE_SETUP +-#line 337 "ldlex.l" ++#line 337 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ALIGNMOD);} + YY_BREAK + case 140: + YY_RULE_SETUP +-#line 338 "ldlex.l" ++#line 338 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ALIGN_K);} + YY_BREAK + case 141: + YY_RULE_SETUP +-#line 339 "ldlex.l" ++#line 339 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(CHIP); } + YY_BREAK + case 142: + YY_RULE_SETUP +-#line 340 "ldlex.l" ++#line 340 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(BASE); } + YY_BREAK + case 143: + YY_RULE_SETUP +-#line 341 "ldlex.l" ++#line 341 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ALIAS); } + YY_BREAK + case 144: + YY_RULE_SETUP +-#line 342 "ldlex.l" ++#line 342 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(TRUNCATE); } + YY_BREAK + case 145: + YY_RULE_SETUP +-#line 343 "ldlex.l" ++#line 343 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(LOAD); } + YY_BREAK + case 146: + YY_RULE_SETUP +-#line 344 "ldlex.l" ++#line 344 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(PUBLIC); } + YY_BREAK + case 147: + YY_RULE_SETUP +-#line 345 "ldlex.l" ++#line 345 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ORDER); } + YY_BREAK + case 148: + YY_RULE_SETUP +-#line 346 "ldlex.l" ++#line 346 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(NAMEWORD); } + YY_BREAK + case 149: + YY_RULE_SETUP +-#line 347 "ldlex.l" ++#line 347 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(FORMAT); } + YY_BREAK + case 150: + YY_RULE_SETUP +-#line 348 "ldlex.l" ++#line 348 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(CASE); } + YY_BREAK + case 151: + YY_RULE_SETUP +-#line 349 "ldlex.l" ++#line 349 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(START); } + YY_BREAK + case 152: + YY_RULE_SETUP +-#line 350 "ldlex.l" ++#line 350 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(LIST); /* LIST and ignore to end of line */ } + YY_BREAK + case 153: + YY_RULE_SETUP +-#line 351 "ldlex.l" ++#line 351 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SECT); } + YY_BREAK + case 154: + YY_RULE_SETUP +-#line 352 "ldlex.l" ++#line 352 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ABSOLUTE); } + YY_BREAK + case 155: + YY_RULE_SETUP +-#line 353 "ldlex.l" ++#line 353 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ENDWORD); } + YY_BREAK + case 156: + YY_RULE_SETUP +-#line 354 "ldlex.l" ++#line 354 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ALIGNMOD);} + YY_BREAK + case 157: + YY_RULE_SETUP +-#line 355 "ldlex.l" ++#line 355 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ALIGN_K);} + YY_BREAK + case 158: + YY_RULE_SETUP +-#line 356 "ldlex.l" ++#line 356 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(CHIP); } + YY_BREAK + case 159: + YY_RULE_SETUP +-#line 357 "ldlex.l" ++#line 357 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(BASE); } + YY_BREAK + case 160: + YY_RULE_SETUP +-#line 358 "ldlex.l" ++#line 358 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ALIAS); } + YY_BREAK + case 161: + YY_RULE_SETUP +-#line 359 "ldlex.l" ++#line 359 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(TRUNCATE); } + YY_BREAK + case 162: + YY_RULE_SETUP +-#line 360 "ldlex.l" ++#line 360 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(LOAD); } + YY_BREAK + case 163: + YY_RULE_SETUP +-#line 361 "ldlex.l" ++#line 361 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(PUBLIC); } + YY_BREAK + case 164: + YY_RULE_SETUP +-#line 362 "ldlex.l" ++#line 362 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ORDER); } + YY_BREAK + case 165: + YY_RULE_SETUP +-#line 363 "ldlex.l" ++#line 363 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(NAMEWORD); } + YY_BREAK + case 166: + YY_RULE_SETUP +-#line 364 "ldlex.l" ++#line 364 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(FORMAT); } + YY_BREAK + case 167: + YY_RULE_SETUP +-#line 365 "ldlex.l" ++#line 365 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(CASE); } + YY_BREAK + case 168: + YY_RULE_SETUP +-#line 366 "ldlex.l" ++#line 366 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(EXTERN); } + YY_BREAK + case 169: + YY_RULE_SETUP +-#line 367 "ldlex.l" ++#line 367 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(START); } + YY_BREAK + case 170: + YY_RULE_SETUP +-#line 368 "ldlex.l" ++#line 368 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(LIST); /* LIST and ignore to end of line */ } + YY_BREAK + case 171: + YY_RULE_SETUP +-#line 369 "ldlex.l" ++#line 369 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(SECT); } + YY_BREAK + case 172: + YY_RULE_SETUP +-#line 370 "ldlex.l" ++#line 370 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(ABSOLUTE); } + YY_BREAK + case 173: + YY_RULE_SETUP +-#line 372 "ldlex.l" ++#line 372 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { + /* Filename without commas, needed to parse mri stuff */ + yylval.name = xstrdup (yytext); +@@ -3008,7 +3033,7 @@ YY_RULE_SETUP + YY_BREAK + case 174: + YY_RULE_SETUP +-#line 379 "ldlex.l" ++#line 379 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { + yylval.name = xstrdup (yytext); + return NAME; +@@ -3016,7 +3041,7 @@ YY_RULE_SETUP + YY_BREAK + case 175: + YY_RULE_SETUP +-#line 383 "ldlex.l" ++#line 383 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { + /* Filename to be prefixed by --sysroot or when non-sysrooted, nothing. */ + yylval.name = xstrdup (yytext); +@@ -3025,7 +3050,7 @@ YY_RULE_SETUP + YY_BREAK + case 176: + YY_RULE_SETUP +-#line 388 "ldlex.l" ++#line 388 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { + yylval.name = xstrdup (yytext + 2); + return LNAME; +@@ -3033,7 +3058,7 @@ YY_RULE_SETUP + YY_BREAK + case 177: + YY_RULE_SETUP +-#line 392 "ldlex.l" ++#line 392 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { + yylval.name = xstrdup (yytext); + return NAME; +@@ -3041,7 +3066,7 @@ YY_RULE_SETUP + YY_BREAK + case 178: + YY_RULE_SETUP +-#line 396 "ldlex.l" ++#line 396 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { + yylval.name = xstrdup (yytext + 2); + return LNAME; +@@ -3049,7 +3074,7 @@ YY_RULE_SETUP + YY_BREAK + case 179: + YY_RULE_SETUP +-#line 400 "ldlex.l" ++#line 400 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { + /* Annoyingly, this pattern can match comments, and we have + longest match issues to consider. So if the first two +@@ -3070,66 +3095,72 @@ YY_RULE_SETUP + case 180: + /* rule 180 can match eol */ + YY_RULE_SETUP +-#line 417 "ldlex.l" ++#line 417 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { + /* No matter the state, quotes +- give what's inside */ ++ give what's inside. */ ++ bfd_size_type len; + yylval.name = xstrdup (yytext + 1); +- yylval.name[yyleng - 2] = 0; ++ /* PR ld/20906. A corrupt input file ++ can contain bogus strings. */ ++ len = strlen (yylval.name); ++ if (len > yyleng - 2) ++ len = yyleng - 2; ++ yylval.name[len] = 0; + return NAME; + } + YY_BREAK + case 181: + /* rule 181 can match eol */ + YY_RULE_SETUP +-#line 424 "ldlex.l" ++#line 430 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { lineno++;} + YY_BREAK + case 182: + YY_RULE_SETUP +-#line 425 "ldlex.l" ++#line 431 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { } + YY_BREAK + case 183: + YY_RULE_SETUP +-#line 427 "ldlex.l" ++#line 433 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { return *yytext; } + YY_BREAK + case 184: + YY_RULE_SETUP +-#line 429 "ldlex.l" ++#line 435 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(GLOBAL); } + YY_BREAK + case 185: + YY_RULE_SETUP +-#line 431 "ldlex.l" ++#line 437 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(LOCAL); } + YY_BREAK + case 186: + YY_RULE_SETUP +-#line 433 "ldlex.l" ++#line 439 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { RTOKEN(EXTERN); } + YY_BREAK + case 187: + YY_RULE_SETUP +-#line 435 "ldlex.l" ++#line 441 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { yylval.name = xstrdup (yytext); + return VERS_IDENTIFIER; } + YY_BREAK + case 188: + YY_RULE_SETUP +-#line 438 "ldlex.l" ++#line 444 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { yylval.name = xstrdup (yytext); + return VERS_TAG; } + YY_BREAK + case 189: + YY_RULE_SETUP +-#line 441 "ldlex.l" ++#line 447 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { BEGIN(VERS_SCRIPT); return *yytext; } + YY_BREAK + case 190: + YY_RULE_SETUP +-#line 443 "ldlex.l" ++#line 449 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { BEGIN(VERS_NODE); + vers_node_nesting = 0; + return *yytext; +@@ -3137,17 +3168,17 @@ YY_RULE_SETUP + YY_BREAK + case 191: + YY_RULE_SETUP +-#line 447 "ldlex.l" ++#line 453 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { return *yytext; } + YY_BREAK + case 192: + YY_RULE_SETUP +-#line 448 "ldlex.l" ++#line 454 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { vers_node_nesting++; return *yytext; } + YY_BREAK + case 193: + YY_RULE_SETUP +-#line 449 "ldlex.l" ++#line 455 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { if (--vers_node_nesting < 0) + BEGIN(VERS_SCRIPT); + return *yytext; +@@ -3156,17 +3187,17 @@ YY_RULE_SETUP + case 194: + /* rule 194 can match eol */ + YY_RULE_SETUP +-#line 454 "ldlex.l" ++#line 460 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { lineno++; } + YY_BREAK + case 195: + YY_RULE_SETUP +-#line 456 "ldlex.l" ++#line 462 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { /* Eat up comments */ } + YY_BREAK + case 196: + YY_RULE_SETUP +-#line 458 "ldlex.l" ++#line 464 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { /* Eat up whitespace */ } + YY_BREAK + case YY_STATE_EOF(INITIAL): +@@ -3179,7 +3210,7 @@ case YY_STATE_EOF(MRI): + case YY_STATE_EOF(VERS_START): + case YY_STATE_EOF(VERS_SCRIPT): + case YY_STATE_EOF(VERS_NODE): +-#line 460 "ldlex.l" ++#line 466 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + { + include_stack_ptr--; + if (include_stack_ptr == 0) +@@ -3195,20 +3226,20 @@ case YY_STATE_EOF(VERS_NODE): + YY_BREAK + case 197: + YY_RULE_SETUP +-#line 473 "ldlex.l" ++#line 479 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + lex_warn_invalid (" in script", yytext); + YY_BREAK + case 198: + YY_RULE_SETUP +-#line 474 "ldlex.l" ++#line 480 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + lex_warn_invalid (" in expression", yytext); + YY_BREAK + case 199: + YY_RULE_SETUP +-#line 476 "ldlex.l" ++#line 482 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + ECHO; + YY_BREAK +-#line 3212 "ldlex.c" ++#line 3243 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.c" + + case YY_END_OF_BUFFER: + { +@@ -3337,6 +3368,7 @@ ECHO; + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ ++ } /* end of user's declarations */ + } /* end of yylex */ + + /* yy_get_next_buffer - try to read in a new buffer +@@ -3348,9 +3380,9 @@ ECHO; + */ + static int yy_get_next_buffer (void) + { +- register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; +- register char *source = (yytext_ptr); +- register int number_to_move, i; ++ char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; ++ char *source = (yytext_ptr); ++ yy_size_t number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) +@@ -3379,7 +3411,7 @@ static int yy_get_next_buffer (void) + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ +- number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; ++ number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); +@@ -3392,14 +3424,14 @@ static int yy_get_next_buffer (void) + + else + { +- yy_size_t num_to_read = ++ int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ +- YY_BUFFER_STATE b = YY_CURRENT_BUFFER; ++ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); +@@ -3482,14 +3514,14 @@ static int yy_get_next_buffer (void) + + static yy_state_type yy_get_previous_state (void) + { +- register yy_state_type yy_current_state; +- register char *yy_cp; ++ yy_state_type yy_current_state; ++ char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { +- register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); ++ YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; +@@ -3514,10 +3546,10 @@ static int yy_get_next_buffer (void) + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) + { +- register int yy_is_jam; +- register char *yy_cp = (yy_c_buf_p); ++ int yy_is_jam; ++ char *yy_cp = (yy_c_buf_p); + +- register YY_CHAR yy_c = 1; ++ YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; +@@ -3532,9 +3564,13 @@ static int yy_get_next_buffer (void) + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 1774); + +- return yy_is_jam ? 0 : yy_current_state; ++ return yy_is_jam ? 0 : yy_current_state; + } + ++#ifndef YY_NO_UNPUT ++ ++#endif ++ + #ifndef YY_NO_INPUT + #ifdef __cplusplus + static int yyinput (void) +@@ -3583,7 +3619,7 @@ static int yy_get_next_buffer (void) + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( ) ) +- return 0; ++ return EOF; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +@@ -3684,7 +3720,7 @@ static void yy_load_buffer_state (void) + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + +- b->yy_buf_size = size; ++ b->yy_buf_size = (yy_size_t)size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. +@@ -3719,10 +3755,6 @@ static void yy_load_buffer_state (void) + yyfree((void *) b ); + } + +-#ifndef __cplusplus +-extern int isatty (int ); +-#endif /* __cplusplus */ +- + /* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. +@@ -3843,7 +3875,7 @@ static void yyensure_buffer_stack (void) + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ +- num_to_alloc = 1; ++ num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); +@@ -3860,7 +3892,7 @@ static void yyensure_buffer_stack (void) + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ +- int grow_size = 8 /* arbitrary grow size */; ++ yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc +@@ -3927,8 +3959,8 @@ YY_BUFFER_STATE yy_scan_string (yyconst + + /** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. +- * @param bytes the byte buffer to scan +- * @param len the number of bytes in the buffer pointed to by @a bytes. ++ * @param yybytes the byte buffer to scan ++ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +@@ -3936,7 +3968,8 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst + { + YY_BUFFER_STATE b; + char *buf; +- yy_size_t n, i; ++ yy_size_t n; ++ yy_size_t i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; +@@ -3967,7 +4000,7 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst + + static void yy_fatal_error (yyconst char* msg ) + { +- (void) fprintf( stderr, "%s\n", msg ); ++ (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); + } + +@@ -3978,7 +4011,7 @@ static void yy_fatal_error (yyconst char + do \ + { \ + /* Undo effects of setting up yytext. */ \ +- int yyless_macro_arg = (n); \ ++ yy_size_t yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ +@@ -4033,29 +4066,29 @@ char *yyget_text (void) + } + + /** Set the current line number. +- * @param line_number ++ * @param _line_number line number + * + */ +-void yyset_lineno (int line_number ) ++void yyset_lineno (int _line_number ) + { + +- yylineno = line_number; ++ yylineno = _line_number; + } + + /** Set the input stream. This does not discard the current + * input buffer. +- * @param in_str A readable stream. ++ * @param _in_str A readable stream. + * + * @see yy_switch_to_buffer + */ +-void yyset_in (FILE * in_str ) ++void yyset_in (FILE * _in_str ) + { +- yyin = in_str ; ++ yyin = _in_str ; + } + +-void yyset_out (FILE * out_str ) ++void yyset_out (FILE * _out_str ) + { +- yyout = out_str ; ++ yyout = _out_str ; + } + + int yyget_debug (void) +@@ -4063,9 +4096,9 @@ int yyget_debug (void) + return yy_flex_debug; + } + +-void yyset_debug (int bdebug ) ++void yyset_debug (int _bdebug ) + { +- yy_flex_debug = bdebug ; ++ yy_flex_debug = _bdebug ; + } + + static int yy_init_globals (void) +@@ -4125,7 +4158,8 @@ int yylex_destroy (void) + #ifndef yytext_ptr + static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) + { +- register int i; ++ ++ int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; + } +@@ -4134,7 +4168,7 @@ static void yy_flex_strncpy (char* s1, y + #ifdef YY_NEED_STRLEN + static int yy_flex_strlen (yyconst char * s ) + { +- register int n; ++ int n; + for ( n = 0; s[n]; ++n ) + ; + +@@ -4144,11 +4178,12 @@ static int yy_flex_strlen (yyconst char + + void *yyalloc (yy_size_t size ) + { +- return (void *) malloc( size ); ++ return (void *) malloc( size ); + } + + void *yyrealloc (void * ptr, yy_size_t size ) + { ++ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter +@@ -4161,12 +4196,12 @@ void *yyrealloc (void * ptr, yy_size_t + + void yyfree (void * ptr ) + { +- free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ ++ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ + } + + #define YYTABLES_NAME "yytables" + +-#line 476 "ldlex.l" ++#line 482 "/work/sources/rhel/binutils/rhel-7.4/binutils-2.27/ld/ldlex.l" + + + +diff -rup binutils.orig/ld/ldlex.l binutils-2.27/ld/ldlex.l +--- binutils.orig/ld/ldlex.l 2017-03-24 13:50:55.613184724 +0000 ++++ binutils-2.27/ld/ldlex.l 2017-03-24 14:20:35.039227142 +0000 +@@ -416,9 +416,15 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([ + + <EXPRESSION,BOTH,SCRIPT,VERS_NODE,INPUTLIST>"\""[^\"]*"\"" { + /* No matter the state, quotes +- give what's inside */ ++ give what's inside. */ ++ bfd_size_type len; + yylval.name = xstrdup (yytext + 1); +- yylval.name[yyleng - 2] = 0; ++ /* PR ld/20906. A corrupt input file ++ can contain bogus strings. */ ++ len = strlen (yylval.name); ++ if (len > yyleng - 2) ++ len = yyleng - 2; ++ yylval.name[len] = 0; + return NAME; + } + <BOTH,SCRIPT,EXPRESSION>"\n" { lineno++;} diff --git a/SOURCES/binutils-2.27-filename-in-error-messages.patch b/SOURCES/binutils-2.27-filename-in-error-messages.patch new file mode 100644 index 0000000..19654c7 --- /dev/null +++ b/SOURCES/binutils-2.27-filename-in-error-messages.patch @@ -0,0 +1,84 @@ +--- binutils-2.27.orig/binutils/readelf.c 2017-01-16 11:51:05.043922264 +0000 ++++ binutils-2.27/binutils/readelf.c 2017-01-16 12:01:34.389053872 +0000 +@@ -16733,39 +16733,49 @@ process_archive (char * file_name, FILE + static int + process_file (char * file_name) + { ++ char * name; ++ char * saved_program_name; + FILE * file; + struct stat statbuf; + char armag[SARMAG]; +- int ret; ++ int ret = 1; ++ ++ /* Overload program_name to include file_name. Doing this means ++ that warning/error messages will positively identify the file ++ concerned even when multiple instances of readelf are running. */ ++ name = xmalloc (strlen (program_name) + strlen (file_name) + 3); ++ sprintf (name, "%s: %s", program_name, file_name); ++ saved_program_name = program_name; ++ program_name = name; + + if (stat (file_name, &statbuf) < 0) + { + if (errno == ENOENT) +- error (_("'%s': No such file\n"), file_name); ++ error (_("No such file\n")); + else +- error (_("Could not locate '%s'. System error message: %s\n"), +- file_name, strerror (errno)); +- return 1; ++ error (_("Could not locate file. System error message: %s\n"), ++ strerror (errno)); ++ goto done; + } + + if (! S_ISREG (statbuf.st_mode)) + { +- error (_("'%s' is not an ordinary file\n"), file_name); +- return 1; ++ error (_("Not an ordinary file\n")); ++ goto done; + } + + file = fopen (file_name, "rb"); + if (file == NULL) + { +- error (_("Input file '%s' is not readable.\n"), file_name); +- return 1; ++ error (_("Not readable\n")); ++ goto done; + } + + if (fread (armag, SARMAG, 1, file) != 1) + { +- error (_("%s: Failed to read file's magic number\n"), file_name); ++ error (_("Failed to read file's magic number\n")); + fclose (file); +- return 1; ++ goto done; + } + + current_file_size = (bfd_size_type) statbuf.st_size; +@@ -16777,8 +16787,7 @@ process_file (char * file_name) + else + { + if (do_archive_index) +- error (_("File %s is not an archive so its index cannot be displayed.\n"), +- file_name); ++ error (_("Not an archive so its index cannot be displayed\n")); + + rewind (file); + archive_file_size = archive_file_offset = 0; +@@ -16787,7 +16796,10 @@ process_file (char * file_name) + + fclose (file); + ++ done: + current_file_size = 0; ++ free (program_name); ++ program_name = saved_program_name; + return ret; + } + diff --git a/SOURCES/binutils-2.27-gold.patch b/SOURCES/binutils-2.27-gold.patch new file mode 100644 index 0000000..96fef02 --- /dev/null +++ b/SOURCES/binutils-2.27-gold.patch @@ -0,0 +1,1717 @@ +diff -rup ../binutils-2.27/gold/aarch64.cc gold/aarch64.cc +--- ../binutils-2.27/gold/aarch64.cc 2016-09-26 11:22:18.728811436 +0100 ++++ gold/aarch64.cc 2016-11-03 15:05:31.000000000 +0000 +@@ -6026,6 +6026,23 @@ Target_aarch64<size, big_endian>::Scan:: + } + break; + ++ case elfcpp::R_AARCH64_MOVW_UABS_G0: // 263 ++ case elfcpp::R_AARCH64_MOVW_UABS_G0_NC: // 264 ++ case elfcpp::R_AARCH64_MOVW_UABS_G1: // 265 ++ case elfcpp::R_AARCH64_MOVW_UABS_G1_NC: // 266 ++ case elfcpp::R_AARCH64_MOVW_UABS_G2: // 267 ++ case elfcpp::R_AARCH64_MOVW_UABS_G2_NC: // 268 ++ case elfcpp::R_AARCH64_MOVW_UABS_G3: // 269 ++ case elfcpp::R_AARCH64_MOVW_SABS_G0: // 270 ++ case elfcpp::R_AARCH64_MOVW_SABS_G1: // 271 ++ case elfcpp::R_AARCH64_MOVW_SABS_G2: // 272 ++ if (parameters->options().output_is_position_independent()) ++ { ++ gold_error(_("%s: unsupported reloc %u in pos independent link."), ++ object->name().c_str(), r_type); ++ } ++ break; ++ + case elfcpp::R_AARCH64_LD_PREL_LO19: // 273 + case elfcpp::R_AARCH64_ADR_PREL_LO21: // 274 + case elfcpp::R_AARCH64_ADR_PREL_PG_HI21: // 275 +@@ -6311,6 +6328,23 @@ Target_aarch64<size, big_endian>::Scan:: + } + break; + ++ case elfcpp::R_AARCH64_MOVW_UABS_G0: // 263 ++ case elfcpp::R_AARCH64_MOVW_UABS_G0_NC: // 264 ++ case elfcpp::R_AARCH64_MOVW_UABS_G1: // 265 ++ case elfcpp::R_AARCH64_MOVW_UABS_G1_NC: // 266 ++ case elfcpp::R_AARCH64_MOVW_UABS_G2: // 267 ++ case elfcpp::R_AARCH64_MOVW_UABS_G2_NC: // 268 ++ case elfcpp::R_AARCH64_MOVW_UABS_G3: // 269 ++ case elfcpp::R_AARCH64_MOVW_SABS_G0: // 270 ++ case elfcpp::R_AARCH64_MOVW_SABS_G1: // 271 ++ case elfcpp::R_AARCH64_MOVW_SABS_G2: // 272 ++ if (parameters->options().output_is_position_independent()) ++ { ++ gold_error(_("%s: unsupported reloc %u in pos independent link."), ++ object->name().c_str(), r_type); ++ } ++ break; ++ + case elfcpp::R_AARCH64_LD_PREL_LO19: // 273 + case elfcpp::R_AARCH64_ADR_PREL_LO21: // 274 + case elfcpp::R_AARCH64_ADR_PREL_PG_HI21: // 275 +@@ -6993,6 +7027,23 @@ Target_aarch64<size, big_endian>::Reloca + view, object, psymval, addend, address, reloc_property); + break; + ++ case elfcpp::R_AARCH64_MOVW_UABS_G0: ++ case elfcpp::R_AARCH64_MOVW_UABS_G0_NC: ++ case elfcpp::R_AARCH64_MOVW_UABS_G1: ++ case elfcpp::R_AARCH64_MOVW_UABS_G1_NC: ++ case elfcpp::R_AARCH64_MOVW_UABS_G2: ++ case elfcpp::R_AARCH64_MOVW_UABS_G2_NC: ++ case elfcpp::R_AARCH64_MOVW_UABS_G3: ++ reloc_status = Reloc::template rela_general<32>( ++ view, object, psymval, addend, reloc_property); ++ break; ++ case elfcpp::R_AARCH64_MOVW_SABS_G0: ++ case elfcpp::R_AARCH64_MOVW_SABS_G1: ++ case elfcpp::R_AARCH64_MOVW_SABS_G2: ++ reloc_status = Reloc::movnz(view, psymval->value(object, addend), ++ reloc_property); ++ break; ++ + case elfcpp::R_AARCH64_LD_PREL_LO19: + reloc_status = Reloc::template pcrela_general<32>( + view, object, psymval, addend, address, reloc_property); +@@ -8075,7 +8126,7 @@ Target_aarch64<size, big_endian>::is_err + typename elfcpp::Swap<32,big_endian>::Valtype insn2) + { + uint32_t rt; +- uint32_t rt2; ++ uint32_t rt2 = 0; + uint32_t rn; + uint32_t rm; + uint32_t ra; +diff -rup ../binutils-2.27/gold/aarch64-reloc.def gold/aarch64-reloc.def +--- ../binutils-2.27/gold/aarch64-reloc.def 2016-08-03 08:36:53.000000000 +0100 ++++ gold/aarch64-reloc.def 2016-11-03 14:38:22.000000000 +0000 +@@ -43,6 +43,20 @@ ARD(PREL32 , STATI + ARD(PREL16 , STATIC , DATA , Y, -1, 15,16 , 0,0 , Symbol::RELATIVE_REF , DATA ) + // Above is from Table 4-6, Data relocations, 257-262. + ++ARD(MOVW_UABS_G0 , STATIC , AARCH64 , Y, 0, 0,16 , 0,15 , Symbol::ABSOLUTE_REF , MOVW ) ++ARD(MOVW_UABS_G0_NC , STATIC , AARCH64 , Y, 0, 0,0 , 0,15 , Symbol::ABSOLUTE_REF , MOVW ) ++ARD(MOVW_UABS_G1 , STATIC , AARCH64 , Y, 0, 0,32 , 16,31 , Symbol::ABSOLUTE_REF , MOVW ) ++ARD(MOVW_UABS_G1_NC , STATIC , AARCH64 , Y, 0, 0,0 , 16,31 , Symbol::ABSOLUTE_REF , MOVW ) ++ARD(MOVW_UABS_G2 , STATIC , AARCH64 , Y, 0, 0,48 , 32,47 , Symbol::ABSOLUTE_REF , MOVW ) ++ARD(MOVW_UABS_G2_NC , STATIC , AARCH64 , Y, 0, 0,0 , 32,47 , Symbol::ABSOLUTE_REF , MOVW ) ++ARD(MOVW_UABS_G3 , STATIC , AARCH64 , Y, 0, 0,0 , 48,63 , Symbol::ABSOLUTE_REF , MOVW ) ++// Above is from Table 4-7, Group relocations to create a 16-, 32-, 48-, or 64-bit unsigned data value or address inline. ++ ++ARD(MOVW_SABS_G0 , STATIC , AARCH64 , Y, 0, 16,16 , 0,15 , Symbol::ABSOLUTE_REF , MOVW ) ++ARD(MOVW_SABS_G1 , STATIC , AARCH64 , Y, 0, 32,32 , 16,31 , Symbol::ABSOLUTE_REF , MOVW ) ++ARD(MOVW_SABS_G2 , STATIC , AARCH64 , Y, 0, 48,48 , 32,47 , Symbol::ABSOLUTE_REF , MOVW ) ++// Above is from Table 4-8, Group relocations to create a 16, 32, 48, or 64 bit signed data or offset value inline. ++ + ARD(LD_PREL_LO19 , STATIC , AARCH64 , Y, -1, 20,20 , 2,20 , Symbol::RELATIVE_REF , LDST ) + ARD(ADR_PREL_LO21 , STATIC , AARCH64 , Y, -1, 20,20 , 0,20 , Symbol::RELATIVE_REF , ADR ) + ARD(ADR_PREL_PG_HI21 , STATIC , AARCH64 , Y, -1, 32,32 , 12,32 , Symbol::RELATIVE_REF , ADRP ) +diff -rup ../binutils-2.27/gold/aarch64-reloc-property.cc gold/aarch64-reloc-property.cc +--- ../binutils-2.27/gold/aarch64-reloc-property.cc 2016-08-03 08:36:53.000000000 +0100 ++++ gold/aarch64-reloc-property.cc 2016-11-03 15:05:32.000000000 +0000 +@@ -59,17 +59,51 @@ template<> + bool + rvalue_checkup<0, 0>(int64_t) { return true; } + ++namespace ++{ ++ + template<int L, int U> +-uint64_t +-rvalue_bit_select(uint64_t x) ++class Rvalue_bit_select_impl + { +- if (U == 63) return x >> L; +- return (x & (((uint64_t)1 << (U+1)) - 1)) >> L; +-} ++public: ++ static uint64_t ++ calc(uint64_t x) ++ { ++ return (x & ((1ULL << (U+1)) - 1)) >> L; ++ } ++}; ++ ++template<int L> ++class Rvalue_bit_select_impl<L, 63> ++{ ++public: ++ static uint64_t ++ calc(uint64_t x) ++ { ++ return x >> L; ++ } ++}; + ++// By our convention, L=U=0 means that the whole value should be retrieved. + template<> ++class Rvalue_bit_select_impl<0, 0> ++{ ++public: ++ static uint64_t ++ calc(uint64_t x) ++ { ++ return x; ++ } ++}; ++ ++} // End anonymous namespace. ++ ++template<int L, int U> + uint64_t +-rvalue_bit_select<0, 0>(uint64_t x) { return x; } ++rvalue_bit_select(uint64_t x) ++{ ++ return Rvalue_bit_select_impl<L, U>::calc(x); ++} + + AArch64_reloc_property::AArch64_reloc_property( + unsigned int code, +diff -rup ../binutils-2.27/gold/arm.cc gold/arm.cc +--- ../binutils-2.27/gold/arm.cc 2016-09-26 11:22:18.629810833 +0100 ++++ gold/arm.cc 2016-11-03 15:05:33.000000000 +0000 +@@ -2128,8 +2128,36 @@ class Target_arm : public Sized_target<3 + stub_tables_(), stub_factory_(Stub_factory::get_instance()), + should_force_pic_veneer_(false), + arm_input_section_map_(), attributes_section_data_(NULL), +- fix_cortex_a8_(false), cortex_a8_relocs_info_() +- { } ++ fix_cortex_a8_(false), cortex_a8_relocs_info_(), ++ target1_reloc_(elfcpp::R_ARM_ABS32), ++ // This can be any reloc type but usually is R_ARM_GOT_PREL. ++ target2_reloc_(elfcpp::R_ARM_GOT_PREL) ++ { ++ if (parameters->options().user_set_target1_rel()) ++ { ++ // FIXME: This is not strictly compatible with ld, which allows both ++ // --target1-abs and --target-rel to be given. ++ if (parameters->options().user_set_target1_abs()) ++ gold_error(_("Cannot use both --target1-abs and --target1-rel.")); ++ else ++ this->target1_reloc_ = elfcpp::R_ARM_REL32; ++ } ++ // We don't need to handle --target1-abs because target1_reloc_ is set ++ // to elfcpp::R_ARM_ABS32 in the member initializer list. ++ ++ if (parameters->options().user_set_target2()) ++ { ++ const char* target2 = parameters->options().target2(); ++ if (strcmp(target2, "rel") == 0) ++ this->target2_reloc_ = elfcpp::R_ARM_REL32; ++ else if (strcmp(target2, "abs") == 0) ++ this->target2_reloc_ = elfcpp::R_ARM_ABS32; ++ else if (strcmp(target2, "got-rel") == 0) ++ this->target2_reloc_ = elfcpp::R_ARM_GOT_PREL; ++ else ++ gold_unreachable(); ++ } ++ } + + // Whether we force PCI branch veneers. + bool +@@ -2391,8 +2419,8 @@ class Target_arm : public Sized_target<3 + rel_irelative_section(Layout*); + + // Map platform-specific reloc types +- static unsigned int +- get_real_reloc_type(unsigned int r_type); ++ unsigned int ++ get_real_reloc_type(unsigned int r_type) const; + + // + // Methods to support stub-generations. +@@ -3002,6 +3030,11 @@ class Target_arm : public Sized_target<3 + bool fix_cortex_a8_; + // Map addresses to relocs for Cortex-A8 erratum. + Cortex_a8_relocs_info cortex_a8_relocs_info_; ++ // What R_ARM_TARGET1 maps to. It can be R_ARM_REL32 or R_ARM_ABS32. ++ unsigned int target1_reloc_; ++ // What R_ARM_TARGET2 maps to. It should be one of R_ARM_REL32, R_ARM_ABS32 ++ // and R_ARM_GOT_PREL. ++ unsigned int target2_reloc_; + }; + + template<bool big_endian> +@@ -6639,6 +6672,80 @@ Arm_relobj<big_endian>::do_relocate_sect + section_address, + section_size); + } ++ // BE8 swapping ++ if (parameters->options().be8()) ++ { ++ section_size_type span_start, span_end; ++ elfcpp::Shdr<32, big_endian> ++ shdr(pshdrs + i * elfcpp::Elf_sizes<32>::shdr_size); ++ Mapping_symbol_position section_start(i, 0); ++ typename Mapping_symbols_info::const_iterator p = ++ this->mapping_symbols_info_.lower_bound(section_start); ++ unsigned char* view = (*pviews)[i].view; ++ Arm_address view_address = (*pviews)[i].address; ++ section_size_type view_size = (*pviews)[i].view_size; ++ while (p != this->mapping_symbols_info_.end() ++ && p->first.first == i) ++ { ++ typename Mapping_symbols_info::const_iterator next = ++ this->mapping_symbols_info_.upper_bound(p->first); ++ ++ // Only swap arm or thumb code. ++ if ((p->second == 'a') || (p->second == 't')) ++ { ++ Output_section* os = this->output_section(i); ++ gold_assert(os != NULL); ++ Arm_address section_address = ++ this->simple_input_section_output_address(i, os); ++ span_start = convert_to_section_size_type(p->first.second); ++ if (next != this->mapping_symbols_info_.end() ++ && next->first.first == i) ++ span_end = ++ convert_to_section_size_type(next->first.second); ++ else ++ span_end = ++ convert_to_section_size_type(shdr.get_sh_size()); ++ unsigned char* section_view = ++ view + (section_address - view_address); ++ uint64_t section_size = this->section_size(i); ++ ++ gold_assert(section_address >= view_address ++ && ((section_address + section_size) ++ <= (view_address + view_size))); ++ ++ // Set Output view for swapping ++ unsigned char *oview = section_view + span_start; ++ unsigned int index = 0; ++ if (p->second == 'a') ++ { ++ while (index + 3 < (span_end - span_start)) ++ { ++ typedef typename elfcpp::Swap<32, big_endian> ++ ::Valtype Valtype; ++ Valtype* wv = ++ reinterpret_cast<Valtype*>(oview+index); ++ uint32_t val = elfcpp::Swap<32, false>::readval(wv); ++ elfcpp::Swap<32, true>::writeval(wv, val); ++ index += 4; ++ } ++ } ++ else if (p->second == 't') ++ { ++ while (index + 1 < (span_end - span_start)) ++ { ++ typedef typename elfcpp::Swap<16, big_endian> ++ ::Valtype Valtype; ++ Valtype* wv = ++ reinterpret_cast<Valtype*>(oview+index); ++ uint16_t val = elfcpp::Swap<16, false>::readval(wv); ++ elfcpp::Swap<16, true>::writeval(wv, val); ++ index += 2; ++ } ++ } ++ } ++ p = next; ++ } ++ } + } + } + +@@ -7785,7 +7892,18 @@ Output_data_plt_arm_standard<big_endian> + const size_t num_first_plt_words = (sizeof(first_plt_entry) + / sizeof(first_plt_entry[0])); + for (size_t i = 0; i < num_first_plt_words - 1; i++) +- elfcpp::Swap<32, big_endian>::writeval(pov + i * 4, first_plt_entry[i]); ++ { ++ if (parameters->options().be8()) ++ { ++ elfcpp::Swap<32, false>::writeval(pov + i * 4, ++ first_plt_entry[i]); ++ } ++ else ++ { ++ elfcpp::Swap<32, big_endian>::writeval(pov + i * 4, ++ first_plt_entry[i]); ++ } ++ } + // Last word in first PLT entry is &GOT[0] - . + elfcpp::Swap<32, big_endian>::writeval(pov + 16, + got_address - (plt_address + 16)); +@@ -7846,11 +7964,21 @@ Output_data_plt_arm_short<big_endian>::d + gold_error(_("PLT offset too large, try linking with --long-plt")); + + uint32_t plt_insn0 = plt_entry[0] | ((offset >> 20) & 0xff); +- elfcpp::Swap<32, big_endian>::writeval(pov, plt_insn0); + uint32_t plt_insn1 = plt_entry[1] | ((offset >> 12) & 0xff); +- elfcpp::Swap<32, big_endian>::writeval(pov + 4, plt_insn1); + uint32_t plt_insn2 = plt_entry[2] | (offset & 0xfff); +- elfcpp::Swap<32, big_endian>::writeval(pov + 8, plt_insn2); ++ ++ if (parameters->options().be8()) ++ { ++ elfcpp::Swap<32, false>::writeval(pov, plt_insn0); ++ elfcpp::Swap<32, false>::writeval(pov + 4, plt_insn1); ++ elfcpp::Swap<32, false>::writeval(pov + 8, plt_insn2); ++ } ++ else ++ { ++ elfcpp::Swap<32, big_endian>::writeval(pov, plt_insn0); ++ elfcpp::Swap<32, big_endian>::writeval(pov + 4, plt_insn1); ++ elfcpp::Swap<32, big_endian>::writeval(pov + 8, plt_insn2); ++ } + } + + // This class generates long (16-byte) entries, for arbitrary displacements. +@@ -7906,13 +8034,24 @@ Output_data_plt_arm_long<big_endian>::do + - (plt_address + plt_offset + 8)); + + uint32_t plt_insn0 = plt_entry[0] | (offset >> 28); +- elfcpp::Swap<32, big_endian>::writeval(pov, plt_insn0); + uint32_t plt_insn1 = plt_entry[1] | ((offset >> 20) & 0xff); +- elfcpp::Swap<32, big_endian>::writeval(pov + 4, plt_insn1); + uint32_t plt_insn2 = plt_entry[2] | ((offset >> 12) & 0xff); +- elfcpp::Swap<32, big_endian>::writeval(pov + 8, plt_insn2); + uint32_t plt_insn3 = plt_entry[3] | (offset & 0xfff); +- elfcpp::Swap<32, big_endian>::writeval(pov + 12, plt_insn3); ++ ++ if (parameters->options().be8()) ++ { ++ elfcpp::Swap<32, false>::writeval(pov, plt_insn0); ++ elfcpp::Swap<32, false>::writeval(pov + 4, plt_insn1); ++ elfcpp::Swap<32, false>::writeval(pov + 8, plt_insn2); ++ elfcpp::Swap<32, false>::writeval(pov + 12, plt_insn3); ++ } ++ else ++ { ++ elfcpp::Swap<32, big_endian>::writeval(pov, plt_insn0); ++ elfcpp::Swap<32, big_endian>::writeval(pov + 4, plt_insn1); ++ elfcpp::Swap<32, big_endian>::writeval(pov + 8, plt_insn2); ++ elfcpp::Swap<32, big_endian>::writeval(pov + 12, plt_insn3); ++ } + } + + // Write out the PLT. This uses the hand-coded instructions above, +@@ -8414,7 +8553,7 @@ Target_arm<big_endian>::Scan::local(Symb + if (is_discarded) + return; + +- r_type = get_real_reloc_type(r_type); ++ r_type = target->get_real_reloc_type(r_type); + + // A local STT_GNU_IFUNC symbol may require a PLT entry. + bool is_ifunc = lsym.get_st_type() == elfcpp::STT_GNU_IFUNC; +@@ -8820,7 +8959,7 @@ Target_arm<big_endian>::Scan::global(Sym + && this->reloc_needs_plt_for_ifunc(object, r_type)) + target->make_plt_entry(symtab, layout, gsym); + +- r_type = get_real_reloc_type(r_type); ++ r_type = target->get_real_reloc_type(r_type); + switch (r_type) + { + case elfcpp::R_ARM_NONE: +@@ -9446,7 +9585,7 @@ Target_arm<big_endian>::Relocate::reloca + + const elfcpp::Rel<32, big_endian> rel(preloc); + unsigned int r_type = elfcpp::elf_r_type<32>(rel.get_r_info()); +- r_type = get_real_reloc_type(r_type); ++ r_type = target->get_real_reloc_type(r_type); + const Arm_reloc_property* reloc_property = + arm_reloc_property_table->get_implemented_static_reloc_property(r_type); + if (reloc_property == NULL) +@@ -10156,7 +10295,9 @@ Target_arm<big_endian>::Classify_reloc:: + unsigned int r_type, + Relobj* object) + { +- r_type = get_real_reloc_type(r_type); ++ Target_arm<big_endian>* arm_target = ++ Target_arm<big_endian>::default_target(); ++ r_type = arm_target->get_real_reloc_type(r_type); + const Arm_reloc_property* arp = + arm_reloc_property_table->get_implemented_static_reloc_property(r_type); + if (arp != NULL) +@@ -10580,17 +10721,15 @@ Target_arm<big_endian>::do_dynsym_value( + // + template<bool big_endian> + unsigned int +-Target_arm<big_endian>::get_real_reloc_type(unsigned int r_type) ++Target_arm<big_endian>::get_real_reloc_type(unsigned int r_type) const + { + switch (r_type) + { + case elfcpp::R_ARM_TARGET1: +- // This is either R_ARM_ABS32 or R_ARM_REL32; +- return elfcpp::R_ARM_ABS32; ++ return this->target1_reloc_; + + case elfcpp::R_ARM_TARGET2: +- // This can be any reloc type but usually is R_ARM_GOT_PREL +- return elfcpp::R_ARM_GOT_PREL; ++ return this->target2_reloc_; + + default: + return r_type; +@@ -10683,7 +10822,14 @@ Target_arm<big_endian>::do_adjust_elf_he + e_ident[elfcpp::EI_OSABI] = 0; + e_ident[elfcpp::EI_ABIVERSION] = 0; + +- // FIXME: Do EF_ARM_BE8 adjustment. ++ // Do EF_ARM_BE8 adjustment. ++ if (parameters->options().be8() && !big_endian) ++ gold_error("BE8 images only valid in big-endian mode."); ++ if (parameters->options().be8()) ++ { ++ flags |= elfcpp::EF_ARM_BE8; ++ this->set_processor_specific_flags(flags); ++ } + + // If we're working in EABI_VER5, set the hard/soft float ABI flags + // as appropriate. +diff -rup ../binutils-2.27/gold/configure gold/configure +--- ../binutils-2.27/gold/configure 2016-09-26 11:22:19.027813254 +0100 ++++ gold/configure 2016-11-03 14:38:22.000000000 +0000 +@@ -609,6 +609,7 @@ GOLD_LDFLAGS + WARN_CXXFLAGS + WARN_WRITE_STRINGS + NO_WERROR ++WARN_CFLAGS_FOR_BUILD + WARN_CFLAGS + IFUNC_STATIC_FALSE + IFUNC_STATIC_TRUE +@@ -6723,8 +6724,12 @@ fi + # Set the 'development' global. + . $srcdir/../bfd/development.sh + ++# Set acp_cpp_for_build variable ++ac_cpp_for_build="$CC_FOR_BUILD -E $CPPFLAGS_FOR_BUILD" ++ + # Default set of GCC warnings to enable. + GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" ++GCC_WARN_CFLAGS_FOR_BUILD="-W -Wall -Wstrict-prototypes -Wmissing-prototypes" + + # Add -Wshadow if the compiler is a sufficiently recent version of GCC. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +@@ -6769,6 +6774,36 @@ fi + rm -f conftest* + + ++# Verify CC_FOR_BUILD to be compatible with waring flags ++ ++# Add -Wshadow if the compiler is a sufficiently recent version of GCC. ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++__GNUC__ ++_ACEOF ++if (eval "$ac_cpp_for_build conftest.$ac_ext") 2>&5 | ++ $EGREP "^[0-3]$" >/dev/null 2>&1; then : ++ ++else ++ GCC_WARN_CFLAGS_FOR_BUILD="$GCC_WARN_CFLAGS_FOR_BUILD -Wshadow" ++fi ++rm -f conftest* ++ ++ ++# Add -Wstack-usage if the compiler is a sufficiently recent version of GCC. ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++__GNUC__ ++_ACEOF ++if (eval "$ac_cpp_for_build conftest.$ac_ext") 2>&5 | ++ $EGREP "^[0-4]$" >/dev/null 2>&1; then : ++ ++else ++ GCC_WARN_CFLAGS_FOR_BUILD="$GCC_WARN_CFLAGS_FOR_BUILD -Wstack-usage=262144" ++fi ++rm -f conftest* ++ ++ + # Check whether --enable-werror was given. + if test "${enable_werror+set}" = set; then : + enableval=$enable_werror; case "${enableval}" in +@@ -6784,6 +6819,7 @@ case "${host}" in + *-*-mingw32*) + if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then + GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Wno-format" ++ GCC_WARN_CFLAGS_FOR_BUILD="$GCC_WARN_CFLAGS_FOR_BUILD -Wno-format" + fi + ;; + *) ;; +@@ -6797,25 +6833,32 @@ fi + NO_WERROR= + if test "${ERROR_ON_WARNING}" = yes ; then + GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Werror" ++ GCC_WARN_CFLAGS_FOR_BUILD="$GCC_WARN_CFLAGS_FOR_BUILD -Werror" + NO_WERROR="-Wno-error" + fi + + if test "${GCC}" = yes ; then + WARN_CFLAGS="${GCC_WARN_CFLAGS}" ++ WARN_CFLAGS_FOR_BUILD="${GCC_WARN_CFLAGS_FOR_BUILD}" + fi + + # Check whether --enable-build-warnings was given. + if test "${enable_build_warnings+set}" = set; then : + enableval=$enable_build_warnings; case "${enableval}" in +- yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";; ++ yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}" ++ WARN_CFLAGS_FOR_BUILD="${GCC_WARN_CFLAGS_FOR_BUILD}";; + no) if test "${GCC}" = yes ; then + WARN_CFLAGS="-w" ++ WARN_CFLAGS_FOR_BUILD="-w" + fi;; + ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` +- WARN_CFLAGS="${GCC_WARN_CFLAGS} ${t}";; ++ WARN_CFLAGS="${GCC_WARN_CFLAGS} ${t}" ++ WARN_CFLAGS_FOR_BUILD="${GCC_WARN_CFLAGS_FOR_BUILD} ${t}";; + *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` +- WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}";; +- *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"`;; ++ WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}" ++ WARN_CFLAGS_FOR_BUILD="${t} ${GCC_WARN_CFLAGS_FOR_BUILD}";; ++ *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"` ++ WARN_CFLAGS_FOR_BUILD=`echo "${enableval}" | sed -e "s/,/ /g"`;; + esac + fi + +diff -rup ../binutils-2.27/gold/debug.h gold/debug.h +--- ../binutils-2.27/gold/debug.h 2016-08-03 08:36:53.000000000 +0100 ++++ gold/debug.h 2016-11-03 15:05:05.000000000 +0000 +@@ -39,10 +39,11 @@ const int DEBUG_FILES = 0x4; + const int DEBUG_RELAXATION = 0x8; + const int DEBUG_INCREMENTAL = 0x10; + const int DEBUG_LOCATION = 0x20; ++const int DEBUG_TARGET = 0x40; + + const int DEBUG_ALL = (DEBUG_TASK | DEBUG_SCRIPT | DEBUG_FILES + | DEBUG_RELAXATION | DEBUG_INCREMENTAL +- | DEBUG_LOCATION); ++ | DEBUG_LOCATION | DEBUG_TARGET); + + // Convert a debug string to the appropriate enum. + inline int +@@ -57,6 +58,7 @@ debug_string_to_enum(const char* arg) + { "relaxation", DEBUG_RELAXATION }, + { "incremental", DEBUG_INCREMENTAL }, + { "location", DEBUG_LOCATION }, ++ { "target", DEBUG_TARGET }, + { "all", DEBUG_ALL } + }; + +@@ -70,11 +72,11 @@ debug_string_to_enum(const char* arg) + // Print a debug message if TYPE is enabled. This is a macro so that + // we only evaluate the arguments if necessary. + +-#define gold_debug(TYPE, FORMAT, ...) \ ++#define gold_debug(TYPE, ...) \ + do \ + { \ + if (is_debugging_enabled(TYPE)) \ +- parameters->errors()->debug(FORMAT, __VA_ARGS__); \ ++ parameters->errors()->debug(__VA_ARGS__); \ + } \ + while (0) + +diff -rup ../binutils-2.27/gold/i386.cc gold/i386.cc +--- ../binutils-2.27/gold/i386.cc 2016-08-03 08:36:53.000000000 +0100 ++++ gold/i386.cc 2016-11-03 15:05:40.000000000 +0000 +@@ -2794,8 +2794,11 @@ Target_i386::Relocate::relocate(const Re + && r_type != elfcpp::R_386_PC32) + || gsym == NULL + || strcmp(gsym->name(), "___tls_get_addr") != 0) +- gold_error_at_location(relinfo, relnum, rel.get_r_offset(), +- _("missing expected TLS relocation")); ++ { ++ gold_error_at_location(relinfo, relnum, rel.get_r_offset(), ++ _("missing expected TLS relocation")); ++ this->skip_call_tls_get_addr_ = false; ++ } + else + { + this->skip_call_tls_get_addr_ = false; +diff -rup ../binutils-2.27/gold/icf.cc gold/icf.cc +--- ../binutils-2.27/gold/icf.cc 2016-08-03 08:36:53.000000000 +0100 ++++ gold/icf.cc 2016-11-03 15:05:40.000000000 +0000 +@@ -590,6 +590,7 @@ match_sections(unsigned int iteration_nu + std::vector<unsigned int>* num_tracked_relocs, + std::vector<unsigned int>* kept_section_id, + const std::vector<Section_id>& id_section, ++ const std::vector<uint64_t>& section_addraligns, + std::vector<bool>* is_secn_or_group_unique, + std::vector<std::string>* section_contents) + { +@@ -630,13 +631,7 @@ match_sections(unsigned int iteration_nu + { + if ((*kept_section_id)[i] != i) + { +- // This section is already folded into something. See +- // if it should point to a different kept section. +- unsigned int kept_section = (*kept_section_id)[i]; +- if (kept_section != (*kept_section_id)[kept_section]) +- { +- (*kept_section_id)[i] = (*kept_section_id)[kept_section]; +- } ++ // This section is already folded into something. + continue; + } + this_secn_contents = get_section_contents(false, secn, i, NULL, +@@ -671,7 +666,25 @@ match_sections(unsigned int iteration_nu + this_secn_contents.c_str(), + this_secn_contents.length()) != 0) + continue; +- (*kept_section_id)[i] = kept_section; ++ ++ // Check section alignment here. ++ // The section with the larger alignment requirement ++ // should be kept. We assume alignment can only be ++ // zero or postive integral powers of two. ++ uint64_t align_i = section_addraligns[i]; ++ uint64_t align_kept = section_addraligns[kept_section]; ++ if (align_i <= align_kept) ++ { ++ (*kept_section_id)[i] = kept_section; ++ } ++ else ++ { ++ (*kept_section_id)[kept_section] = i; ++ it->second = i; ++ full_section_contents[kept_section].swap( ++ full_section_contents[i]); ++ } ++ + converged = false; + break; + } +@@ -688,6 +701,26 @@ match_sections(unsigned int iteration_nu + (*is_secn_or_group_unique)[i] = true; + } + ++ // If a section was folded into another section that was later folded ++ // again then the former has to be updated. ++ for (unsigned int i = 0; i < id_section.size(); i++) ++ { ++ // Find the end of the folding chain ++ unsigned int kept = i; ++ while ((*kept_section_id)[kept] != kept) ++ { ++ kept = (*kept_section_id)[kept]; ++ } ++ // Update every element of the chain ++ unsigned int current = i; ++ while ((*kept_section_id)[current] != kept) ++ { ++ unsigned int next = (*kept_section_id)[current]; ++ (*kept_section_id)[current] = kept; ++ current = next; ++ } ++ } ++ + return converged; + } + +@@ -719,6 +752,7 @@ Icf::find_identical_sections(const Input + { + unsigned int section_num = 0; + std::vector<unsigned int> num_tracked_relocs; ++ std::vector<uint64_t> section_addraligns; + std::vector<bool> is_secn_or_group_unique; + std::vector<std::string> section_contents; + const Target& target = parameters->target(); +@@ -759,6 +793,7 @@ Icf::find_identical_sections(const Input + this->section_id_[Section_id(*p, i)] = section_num; + this->kept_section_id_.push_back(section_num); + num_tracked_relocs.push_back(0); ++ section_addraligns.push_back((*p)->section_addralign(i)); + is_secn_or_group_unique.push_back(false); + section_contents.push_back(""); + section_num++; +@@ -779,8 +814,8 @@ Icf::find_identical_sections(const Input + num_iterations++; + converged = match_sections(num_iterations, symtab, + &num_tracked_relocs, &this->kept_section_id_, +- this->id_section_, &is_secn_or_group_unique, +- §ion_contents); ++ this->id_section_, section_addraligns, ++ &is_secn_or_group_unique, §ion_contents); + } + + if (parameters->options().print_icf_sections()) +diff -rup ../binutils-2.27/gold/layout.cc gold/layout.cc +--- ../binutils-2.27/gold/layout.cc 2016-08-03 08:36:53.000000000 +0100 ++++ gold/layout.cc 2016-11-03 15:05:42.000000000 +0000 +@@ -2135,7 +2135,7 @@ void + Layout::create_notes() + { + this->create_gold_note(); +- this->create_executable_stack_info(); ++ this->create_stack_segment(); + this->create_build_id(); + } + +@@ -2785,7 +2785,7 @@ Layout::finalize(const Input_objects* in + if (load_seg != NULL) + ehdr_start->set_output_segment(load_seg, Symbol::SEGMENT_START); + else +- ehdr_start->set_undefined(); ++ ehdr_start->set_undefined(); + } + + // Set the file offsets of all the non-data sections we've seen so +@@ -2985,25 +2985,29 @@ Layout::create_gold_note() + // executable. Otherwise, if at least one input file a + // .note.GNU-stack section, and some input file has no .note.GNU-stack + // section, we use the target default for whether the stack should be +-// executable. Otherwise, we don't generate a stack note. When +-// generating a object file, we create a .note.GNU-stack section with +-// the appropriate marking. When generating an executable or shared +-// library, we create a PT_GNU_STACK segment. ++// executable. If -z stack-size was used to set a p_memsz value for ++// PT_GNU_STACK, we generate the segment regardless. Otherwise, we ++// don't generate a stack note. When generating a object file, we ++// create a .note.GNU-stack section with the appropriate marking. ++// When generating an executable or shared library, we create a ++// PT_GNU_STACK segment. + + void +-Layout::create_executable_stack_info() ++Layout::create_stack_segment() + { + bool is_stack_executable; + if (parameters->options().is_execstack_set()) + { + is_stack_executable = parameters->options().is_stack_executable(); + if (!is_stack_executable +- && this->input_requires_executable_stack_ +- && parameters->options().warn_execstack()) ++ && this->input_requires_executable_stack_ ++ && parameters->options().warn_execstack()) + gold_warning(_("one or more inputs require executable stack, " +- "but -z noexecstack was given")); ++ "but -z noexecstack was given")); + } +- else if (!this->input_with_gnu_stack_note_) ++ else if (!this->input_with_gnu_stack_note_ ++ && (!parameters->options().user_set_stack_size() ++ || parameters->options().relocatable())) + return; + else + { +@@ -3032,7 +3036,12 @@ Layout::create_executable_stack_info() + int flags = elfcpp::PF_R | elfcpp::PF_W; + if (is_stack_executable) + flags |= elfcpp::PF_X; +- this->make_output_segment(elfcpp::PT_GNU_STACK, flags); ++ Output_segment* seg = ++ this->make_output_segment(elfcpp::PT_GNU_STACK, flags); ++ seg->set_size(parameters->options().stack_size()); ++ // BFD lets targets override this default alignment, but the only ++ // targets that do so are ones that Gold does not support so far. ++ seg->set_minimum_p_align(16); + } + } + +@@ -3718,7 +3727,9 @@ Layout::set_segment_offsets(const Target + p != this->segment_list_.end(); + ++p) + { +- if ((*p)->type() != elfcpp::PT_LOAD) ++ // PT_GNU_STACK was set up correctly when it was created. ++ if ((*p)->type() != elfcpp::PT_LOAD ++ && (*p)->type() != elfcpp::PT_GNU_STACK) + (*p)->set_offset((*p)->type() == elfcpp::PT_GNU_RELRO + ? increase_relro + : 0); +diff -rup ../binutils-2.27/gold/layout.h gold/layout.h +--- ../binutils-2.27/gold/layout.h 2016-08-03 08:36:53.000000000 +0100 ++++ gold/layout.h 2016-11-03 15:05:12.000000000 +0000 +@@ -1037,9 +1037,9 @@ class Layout + void + create_gold_note(); + +- // Record whether the stack must be executable. ++ // Record whether the stack must be executable, and a user-supplied size. + void +- create_executable_stack_info(); ++ create_stack_segment(); + + // Create a build ID note if needed. + void +diff -rup ../binutils-2.27/gold/Makefile.in gold/Makefile.in +--- ../binutils-2.27/gold/Makefile.in 2016-08-03 08:36:53.000000000 +0100 ++++ gold/Makefile.in 2016-11-03 14:38:22.000000000 +0000 +@@ -87,8 +87,8 @@ subdir = . + DIST_COMMON = NEWS README ChangeLog $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(srcdir)/config.in \ +- $(srcdir)/../mkinstalldirs $(top_srcdir)/po/Make-in \ +- ftruncate.c pread.c mremap.c ffsll.c yyscript.h yyscript.c \ ++ $(srcdir)/../mkinstalldirs $(top_srcdir)/po/Make-in ffsll.c \ ++ mremap.c ftruncate.c pread.c yyscript.h yyscript.c \ + $(srcdir)/../depcomp $(srcdir)/../ylwrap + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 + am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \ +@@ -409,6 +409,7 @@ TARGETOBJS = @TARGETOBJS@ + USE_NLS = @USE_NLS@ + VERSION = @VERSION@ + WARN_CFLAGS = @WARN_CFLAGS@ ++WARN_CFLAGS_FOR_BUILD = @WARN_CFLAGS_FOR_BUILD@ + WARN_CXXFLAGS = @WARN_CXXFLAGS@ + WARN_WRITE_STRINGS = @WARN_WRITE_STRINGS@ + XGETTEXT = @XGETTEXT@ +diff -rup ../binutils-2.27/gold/options.h gold/options.h +--- ../binutils-2.27/gold/options.h 2016-08-03 08:36:53.000000000 +0100 ++++ gold/options.h 2016-11-03 15:05:13.000000000 +0000 +@@ -647,7 +647,7 @@ class General_options + DEFINE_bool(apply_dynamic_relocs, options::TWO_DASHES, '\0', true, + N_("Apply link-time values for dynamic relocations (default)"), + N_("(aarch64 only) Do not apply link-time values " +- "for dynamic relocations")); ++ "for dynamic relocations")); + + DEFINE_bool(as_needed, options::TWO_DASHES, '\0', false, + N_("Only set DT_NEEDED for shared libraries if used"), +@@ -674,6 +674,9 @@ class General_options + DEFINE_bool_alias(dn, Bdynamic, options::ONE_DASH, '\0', + N_("alias for -Bstatic"), NULL, true); + ++ DEFINE_bool(be8,options::TWO_DASHES, '\0', false, ++ N_("Output BE8 format image"), NULL); ++ + DEFINE_bool(Bgroup, options::ONE_DASH, '\0', false, + N_("Use group name lookup rules for shared library"), NULL); + +@@ -1152,6 +1155,17 @@ class General_options + DEFINE_string(sysroot, options::TWO_DASHES, '\0', "", + N_("Set target system root directory"), N_("DIR")); + ++ DEFINE_bool(target1_rel, options::TWO_DASHES, '\0', false, ++ N_("(ARM only) Force R_ARM_TARGET1 type to R_ARM_REL32"), ++ NULL); ++ DEFINE_bool(target1_abs, options::TWO_DASHES, '\0', false, ++ N_("(ARM only) Force R_ARM_TARGET1 type to R_ARM_ABS32"), ++ NULL); ++ DEFINE_enum(target2, options::TWO_DASHES, '\0', NULL, ++ N_("(ARM only) Set R_ARM_TARGET2 relocation type"), ++ N_("[rel, abs, got-rel"), ++ {"rel", "abs", "got-rel"}); ++ + DEFINE_bool(trace, options::TWO_DASHES, 't', false, + N_("Print the name of each input file"), NULL); + +@@ -1293,7 +1307,7 @@ class General_options + N_("Mark output as requiring executable stack"), NULL); + DEFINE_bool(global, options::DASH_Z, '\0', false, + N_("Make symbols in DSO available for subsequently loaded " +- "objects"), NULL); ++ "objects"), NULL); + DEFINE_bool(initfirst, options::DASH_Z, '\0', false, + N_("Mark DSO to be initialized first at runtime"), + NULL); +@@ -1339,6 +1353,8 @@ class General_options + DEFINE_bool(relro, options::DASH_Z, '\0', DEFAULT_LD_Z_RELRO, + N_("Where possible mark variables read-only after relocation"), + N_("Don't mark variables read-only after relocation")); ++ DEFINE_uint64(stack_size, options::DASH_Z, '\0', 0, ++ N_("Set PT_GNU_STACK segment p_memsz to SIZE"), N_("SIZE")); + DEFINE_bool(text, options::DASH_Z, '\0', false, + N_("Do not permit relocations in read-only segments"), + N_("Permit relocations in read-only segments (default)")); +diff -rup ../binutils-2.27/gold/output.cc gold/output.cc +--- ../binutils-2.27/gold/output.cc 2016-08-03 08:36:53.000000000 +0100 ++++ gold/output.cc 2016-11-03 15:05:44.000000000 +0000 +@@ -4398,7 +4398,7 @@ Output_segment::set_section_addresses(co + this->offset_ = orig_off; + + off_t off = 0; +- uint64_t ret; ++ uint64_t ret = 0; + for (int i = 0; i < static_cast<int>(ORDER_MAX); ++i) + { + if (i == static_cast<int>(ORDER_RELRO_LAST)) +diff -rup ../binutils-2.27/gold/output.h gold/output.h +--- ../binutils-2.27/gold/output.h 2016-08-03 08:36:53.000000000 +0100 ++++ gold/output.h 2016-11-03 15:05:14.000000000 +0000 +@@ -2499,7 +2499,7 @@ class Output_data_got : public Output_da + // entry. + bool + add_local(Relobj* object, unsigned int sym_index, unsigned int got_type, +- uint64_t addend); ++ uint64_t addend); + + // Like add_local, but use the PLT offset of the local symbol if it + // has one. +@@ -2643,7 +2643,7 @@ class Output_data_got : public Output_da + + // Create a local symbol entry plus addend. + Got_entry(Relobj* object, unsigned int local_sym_index, +- bool use_plt_or_tls_offset, uint64_t addend) ++ bool use_plt_or_tls_offset, uint64_t addend) + : local_sym_index_(local_sym_index), + use_plt_or_tls_offset_(use_plt_or_tls_offset), addend_(addend) + { +@@ -4796,6 +4796,13 @@ class Output_segment + this->min_p_align_ = align; + } + ++ // Set the memory size of this segment. ++ void ++ set_size(uint64_t size) ++ { ++ this->memsz_ = size; ++ } ++ + // Set the offset of this segment based on the section. This should + // only be called for a non-PT_LOAD segment. + void +diff -rup ../binutils-2.27/gold/powerpc.cc gold/powerpc.cc +--- ../binutils-2.27/gold/powerpc.cc 2016-09-26 11:22:18.717811369 +0100 ++++ gold/powerpc.cc 2016-11-03 15:05:45.000000000 +0000 +@@ -2439,9 +2439,8 @@ class Stub_control + // the stubbed branches. + Stub_control(int32_t size, bool no_size_errors) + : state_(NO_GROUP), stub_group_size_(abs(size)), +- stub14_group_size_(abs(size) >> 10), + stubs_always_before_branch_(size < 0), +- suppress_size_errors_(no_size_errors), ++ suppress_size_errors_(no_size_errors), group_size_(0), + group_end_addr_(0), owner_(NULL), output_section_(NULL) + { + } +@@ -2479,24 +2478,28 @@ class Stub_control + + State state_; + uint32_t stub_group_size_; +- uint32_t stub14_group_size_; + bool stubs_always_before_branch_; + bool suppress_size_errors_; ++ // Current max size of group. Starts at stub_group_size_ but is ++ // reduced to stub_group_size_/1024 on seeing a section with ++ // external conditional branches. ++ uint32_t group_size_; + uint64_t group_end_addr_; ++ // owner_ and output_section_ specify the section to which stubs are ++ // attached. The stubs are placed at the end of this section. + const Output_section::Input_section* owner_; + Output_section* output_section_; + }; + + // Return true iff input section can be handled by current stub +-// group. ++// group. Sections are presented to this function in reverse order, ++// so the first section is the tail of the group. + + bool + Stub_control::can_add_to_stub_group(Output_section* o, + const Output_section::Input_section* i, + bool has14) + { +- uint32_t group_size +- = has14 ? this->stub14_group_size_ : this->stub_group_size_; + bool whole_sec = o->order() == ORDER_INIT || o->order() == ORDER_FINI; + uint64_t this_size; + uint64_t start_addr = o->address(); +@@ -2510,46 +2513,90 @@ Stub_control::can_add_to_stub_group(Outp + start_addr += i->relobj()->output_section_offset(i->shndx()); + this_size = i->data_size(); + } +- uint64_t end_addr = start_addr + this_size; +- bool toobig = this_size > group_size; + +- if (toobig && !this->suppress_size_errors_) ++ uint32_t group_size = this->stub_group_size_; ++ if (has14) ++ this->group_size_ = group_size = group_size >> 10; ++ ++ if (this_size > group_size && !this->suppress_size_errors_) + gold_warning(_("%s:%s exceeds group size"), + i->relobj()->name().c_str(), + i->relobj()->section_name(i->shndx()).c_str()); + +- if (this->state_ != HAS_STUB_SECTION +- && (!whole_sec || this->output_section_ != o) +- && (this->state_ == NO_GROUP +- || this->group_end_addr_ - end_addr < group_size)) +- { +- this->owner_ = i; +- this->output_section_ = o; +- } +- +- if (this->state_ == NO_GROUP) +- { +- this->state_ = FINDING_STUB_SECTION; +- this->group_end_addr_ = end_addr; +- } +- else if (this->group_end_addr_ - start_addr < group_size) +- ; +- // Adding this section would make the group larger than GROUP_SIZE. +- else if (this->state_ == FINDING_STUB_SECTION +- && !this->stubs_always_before_branch_ +- && !toobig) +- { +- // But wait, there's more! Input sections up to GROUP_SIZE +- // bytes before the stub table can be handled by it too. +- this->state_ = HAS_STUB_SECTION; +- this->group_end_addr_ = end_addr; ++ gold_debug(DEBUG_TARGET, "maybe add%s %s:%s size=%#llx total=%#llx", ++ has14 ? " 14bit" : "", ++ i->relobj()->name().c_str(), ++ i->relobj()->section_name(i->shndx()).c_str(), ++ (long long) this_size, ++ (long long) this->group_end_addr_ - start_addr); ++ ++ uint64_t end_addr = start_addr + this_size; ++ if (this->state_ == HAS_STUB_SECTION) ++ { ++ // Can we add this section, which is before the stubs, to the ++ // group? ++ if (this->group_end_addr_ - start_addr <= this->group_size_) ++ return true; + } + else + { +- this->state_ = NO_GROUP; +- return false; ++ // Stubs are added at the end of "owner_". ++ // The current section can always be the stub owner, except when ++ // whole_sec is true and the current section isn't the last of ++ // the pasted sections. (This restriction for the whole_sec ++ // case is just to simplify the corner case mentioned in ++ // group_sections.) ++ // Note that "owner_" itself is not necessarily part of the ++ // group of sections served by these stubs! ++ if (!whole_sec || this->output_section_ != o) ++ { ++ this->owner_ = i; ++ this->output_section_ = o; ++ } ++ ++ if (this->state_ == FINDING_STUB_SECTION) ++ { ++ if (this->group_end_addr_ - start_addr <= this->group_size_) ++ return true; ++ // The group after the stubs has reached maximum size. ++ // Now see about adding sections before the stubs to the ++ // group. If the current section has a 14-bit branch and ++ // the group after the stubs exceeds group_size_ (because ++ // they didn't have 14-bit branches), don't add sections ++ // before the stubs: The size of stubs for such a large ++ // group may exceed the reach of a 14-bit branch. ++ if (!this->stubs_always_before_branch_ ++ && this_size <= this->group_size_ ++ && this->group_end_addr_ - end_addr <= this->group_size_) ++ { ++ gold_debug(DEBUG_TARGET, "adding before stubs"); ++ this->state_ = HAS_STUB_SECTION; ++ this->group_end_addr_ = end_addr; ++ return true; ++ } ++ } ++ else if (this->state_ == NO_GROUP) ++ { ++ // Only here on very first use of Stub_control ++ this->state_ = FINDING_STUB_SECTION; ++ this->group_size_ = group_size; ++ this->group_end_addr_ = end_addr; ++ return true; ++ } ++ else ++ gold_unreachable(); + } +- return true; ++ ++ gold_debug(DEBUG_TARGET, "nope, didn't fit\n"); ++ ++ // The section fails to fit in the current group. Set up a few ++ // things for the next group. owner_ and output_section_ will be ++ // set later after we've retrieved those values for the current ++ // group. ++ this->state_ = FINDING_STUB_SECTION; ++ this->group_size_ = group_size; ++ this->group_end_addr_ = end_addr; ++ return false; + } + + // Look over all the input sections, deciding where to place stubs. +@@ -2887,7 +2934,7 @@ Target_powerpc<size, big_endian>::do_rel + } + this->stub_tables_.clear(); + this->stub_group_size_ = this->stub_group_size_ / 4 * 3; +- gold_info(_("%s: stub group size is too large; retrying with %d"), ++ gold_info(_("%s: stub group size is too large; retrying with %#x"), + program_name, this->stub_group_size_); + this->group_sections(layout, task, true); + } +@@ -2982,7 +3029,13 @@ Target_powerpc<size, big_endian>::do_rel + Stub_table<size, big_endian>* stub_table + = static_cast<Stub_table<size, big_endian>*>( + i->relaxed_input_section()); +- off += stub_table->set_address_and_size(os, off); ++ Address stub_table_size = stub_table->set_address_and_size(os, off); ++ off += stub_table_size; ++ // After a few iterations, set current stub table size ++ // as min size threshold, so later stub tables can only ++ // grow in size. ++ if (pass >= 4) ++ stub_table->set_min_size_threshold(stub_table_size); + } + else + off += i->data_size(); +@@ -3634,8 +3687,8 @@ class Stub_table : public Output_relaxed + targ_(targ), plt_call_stubs_(), long_branch_stubs_(), + orig_data_size_(owner->current_data_size()), + plt_size_(0), last_plt_size_(0), +- branch_size_(0), last_branch_size_(0), eh_frame_added_(false), +- need_save_res_(false) ++ branch_size_(0), last_branch_size_(0), min_size_threshold_(0), ++ eh_frame_added_(false), need_save_res_(false) + { + this->set_output_section(output_section); + +@@ -3726,6 +3779,11 @@ class Stub_table : public Output_relaxed + off = align_address(off, this->stub_align()); + // Include original section size and alignment padding in size + my_size += off - start_off; ++ // Ensure new size is always larger than min size ++ // threshold. Alignment requirement is included in "my_size", so ++ // increase "my_size" does not invalidate alignment. ++ if (my_size < this->min_size_threshold_) ++ my_size = this->min_size_threshold_; + this->reset_address_and_file_offset(); + this->set_current_data_size(my_size); + this->set_address_and_file_offset(os->address() + start_off, +@@ -3751,6 +3809,9 @@ class Stub_table : public Output_relaxed + plt_size() const + { return this->plt_size_; } + ++ void set_min_size_threshold(Address min_size) ++ { this->min_size_threshold_ = min_size; } ++ + bool + size_update() + { +@@ -4015,6 +4076,13 @@ class Stub_table : public Output_relaxed + section_size_type orig_data_size_; + // size of stubs + section_size_type plt_size_, last_plt_size_, branch_size_, last_branch_size_; ++ // Some rare cases cause (PR/20529) fluctuation in stub table ++ // size, which leads to an endless relax loop. This is to be fixed ++ // by, after the first few iterations, allowing only increase of ++ // stub table size. This variable sets the minimal possible size of ++ // a stub table, it is zero for the first few iterations, then ++ // increases monotonically. ++ Address min_size_threshold_; + // Whether .eh_frame info has been created for this stub section. + bool eh_frame_added_; + // Set if this stub group needs a copy of out-of-line register +@@ -6024,7 +6092,7 @@ Target_powerpc<size, big_endian>::Scan:: + ppc_object->set_opd_discard(reloc.get_r_offset()); + break; + } +- // Fall thru ++ // Fall through. + case elfcpp::R_PPC64_UADDR64: + case elfcpp::R_POWERPC_ADDR32: + case elfcpp::R_POWERPC_UADDR32: +@@ -6131,7 +6199,7 @@ Target_powerpc<size, big_endian>::Scan:: + || gsym->is_preemptible()))) + target->make_plt_entry(symtab, layout, gsym); + } +- // Fall thru ++ // Fall through. + + case elfcpp::R_PPC64_REL64: + case elfcpp::R_POWERPC_REL32: +@@ -7521,6 +7589,7 @@ Target_powerpc<size, big_endian>::Reloca + if (size != 64) + // R_PPC_TLSGD, R_PPC_TLSLD, R_PPC_EMB_RELST_LO, R_PPC_EMB_RELST_HI + break; ++ // Fall through. + case elfcpp::R_POWERPC_TPREL16: + case elfcpp::R_POWERPC_TPREL16_LO: + case elfcpp::R_POWERPC_TPREL16_HI: +@@ -7544,6 +7613,7 @@ Target_powerpc<size, big_endian>::Reloca + // R_PPC_EMB_NADDR32, R_PPC_EMB_NADDR16, R_PPC_EMB_NADDR16_LO + // R_PPC_EMB_NADDR16_HI, R_PPC_EMB_NADDR16_HA, R_PPC_EMB_SDAI16 + break; ++ // Fall through. + case elfcpp::R_POWERPC_DTPREL16: + case elfcpp::R_POWERPC_DTPREL16_LO: + case elfcpp::R_POWERPC_DTPREL16_HI: +@@ -7572,6 +7642,7 @@ Target_powerpc<size, big_endian>::Reloca + case elfcpp::R_POWERPC_ADDR14_BRTAKEN: + case elfcpp::R_POWERPC_REL14_BRTAKEN: + branch_bit = 1 << 21; ++ // Fall through. + case elfcpp::R_POWERPC_ADDR14_BRNTAKEN: + case elfcpp::R_POWERPC_REL14_BRNTAKEN: + { +@@ -7936,6 +8007,7 @@ Target_powerpc<size, big_endian>::Reloca + maybe_dq_reloc = true; + break; + } ++ // Fall through. + case elfcpp::R_POWERPC_ADDR16: + case elfcpp::R_POWERPC_REL16: + case elfcpp::R_PPC64_TOC16: +@@ -7970,6 +8042,7 @@ Target_powerpc<size, big_endian>::Reloca + if (size == 32) + // R_PPC_EMB_MRKREF, R_PPC_EMB_RELST_LO, R_PPC_EMB_RELST_HA + goto unsupp; ++ // Fall through. + case elfcpp::R_POWERPC_ADDR16_HI: + case elfcpp::R_POWERPC_REL16_HI: + case elfcpp::R_PPC64_TOC16_HI: +@@ -7990,6 +8063,7 @@ Target_powerpc<size, big_endian>::Reloca + if (size == 32) + // R_PPC_EMB_RELSEC16, R_PPC_EMB_RELST_HI, R_PPC_EMB_BIT_FLD + goto unsupp; ++ // Fall through. + case elfcpp::R_POWERPC_ADDR16_HA: + case elfcpp::R_POWERPC_REL16_HA: + case elfcpp::R_PPC64_TOC16_HA: +@@ -8012,6 +8086,7 @@ Target_powerpc<size, big_endian>::Reloca + if (size == 32) + // R_PPC_EMB_NADDR16_LO + goto unsupp; ++ // Fall through. + case elfcpp::R_PPC64_ADDR16_HIGHER: + case elfcpp::R_PPC64_TPREL16_HIGHER: + Reloc::addr16_hi2(view, value); +@@ -8021,6 +8096,7 @@ Target_powerpc<size, big_endian>::Reloca + if (size == 32) + // R_PPC_EMB_NADDR16_HI + goto unsupp; ++ // Fall through. + case elfcpp::R_PPC64_ADDR16_HIGHERA: + case elfcpp::R_PPC64_TPREL16_HIGHERA: + Reloc::addr16_ha2(view, value); +@@ -8030,6 +8106,7 @@ Target_powerpc<size, big_endian>::Reloca + if (size == 32) + // R_PPC_EMB_NADDR16_HA + goto unsupp; ++ // Fall through. + case elfcpp::R_PPC64_ADDR16_HIGHEST: + case elfcpp::R_PPC64_TPREL16_HIGHEST: + Reloc::addr16_hi3(view, value); +@@ -8039,6 +8116,7 @@ Target_powerpc<size, big_endian>::Reloca + if (size == 32) + // R_PPC_EMB_SDAI16 + goto unsupp; ++ // Fall through. + case elfcpp::R_PPC64_ADDR16_HIGHESTA: + case elfcpp::R_PPC64_TPREL16_HIGHESTA: + Reloc::addr16_ha3(view, value); +@@ -8049,11 +8127,13 @@ Target_powerpc<size, big_endian>::Reloca + if (size == 32) + // R_PPC_EMB_NADDR32, R_PPC_EMB_NADDR16 + goto unsupp; ++ // Fall through. + case elfcpp::R_PPC64_TPREL16_DS: + case elfcpp::R_PPC64_TPREL16_LO_DS: + if (size == 32) + // R_PPC_TLSGD, R_PPC_TLSLD + break; ++ // Fall through. + case elfcpp::R_PPC64_ADDR16_DS: + case elfcpp::R_PPC64_ADDR16_LO_DS: + case elfcpp::R_PPC64_TOC16_DS: +diff -rup ../binutils-2.27/gold/resolve.cc gold/resolve.cc +--- ../binutils-2.27/gold/resolve.cc 2016-08-03 08:36:53.000000000 +0100 ++++ gold/resolve.cc 2016-11-03 15:05:47.000000000 +0000 +@@ -193,6 +193,7 @@ symbol_to_bits(elfcpp::STB binding, bool + // table. + gold_error(_("invalid STB_LOCAL symbol in external symbols")); + bits = global_flag; ++ break; + + default: + // Any target which wants to handle STB_LOOS, etc., needs to +diff -rup ../binutils-2.27/gold/script.cc gold/script.cc +--- ../binutils-2.27/gold/script.cc 2016-08-03 08:36:53.000000000 +0100 ++++ gold/script.cc 2016-11-03 15:05:47.000000000 +0000 +@@ -1755,6 +1755,7 @@ script_keyword_parsecodes[] = + { "FLOAT", FLOAT }, + { "FORCE_COMMON_ALLOCATION", FORCE_COMMON_ALLOCATION }, + { "GROUP", GROUP }, ++ { "HIDDEN", HIDDEN }, + { "HLL", HLL }, + { "INCLUDE", INCLUDE }, + { "INFO", INFO }, +diff -rup ../binutils-2.27/gold/script-sections.cc gold/script-sections.cc +--- ../binutils-2.27/gold/script-sections.cc 2016-08-03 08:36:53.000000000 +0100 ++++ gold/script-sections.cc 2016-11-03 15:05:48.000000000 +0000 +@@ -1503,7 +1503,7 @@ class Input_section_info + private: + // Input section, can be a relaxed section. + Output_section::Input_section input_section_; +- // Name of the section. ++ // Name of the section. + std::string section_name_; + // Section size. + uint64_t size_; +@@ -1545,7 +1545,7 @@ Input_section_sorter::get_init_priority( + // GCC uses the following section names for the init_priority + // attribute with numerical values 101 and 65535 inclusive. A + // lower value means a higher priority. +- // ++ // + // 1: .init_array.NNNN/.fini_array.NNNN: Where NNNN is the + // decimal numerical value of the init_priority attribute. + // The order of execution in .init_array is forward and +@@ -1666,7 +1666,7 @@ Output_section_element_input::set_sectio + while (p != input_sections->end()) + { + Relobj* relobj = p->relobj(); +- unsigned int shndx = p->shndx(); ++ unsigned int shndx = p->shndx(); + Input_section_info isi(*p); + + // Calling section_name and section_addralign is not very +@@ -1758,7 +1758,7 @@ Output_section_element_input::set_sectio + + uint64_t this_subalign = sis.addralign(); + if (!sis.is_input_section()) +- sis.output_section_data()->finalize_data_size(); ++ sis.output_section_data()->finalize_data_size(); + uint64_t data_size = sis.data_size(); + if (this_subalign < subalign) + { +@@ -2029,7 +2029,7 @@ class Output_section_definition : public + void + set_section_vma(Expression* address) + { this->address_ = address; } +- ++ + void + set_section_lma(Expression* address) + { this->load_address_ = address; } +@@ -2037,7 +2037,7 @@ class Output_section_definition : public + const std::string& + get_section_name() const + { return this->name_; } +- ++ + private: + static const char* + script_section_type_name(Script_section_type); +@@ -2402,9 +2402,9 @@ Output_section_definition::set_section_a + uint64_t old_load_address = *load_address; + + // If input section sorting is requested via --section-ordering-file or +- // linker plugins, then do it here. This is important because we want ++ // linker plugins, then do it here. This is important because we want + // any sorting specified in the linker scripts, which will be done after +- // this, to take precedence. The final order of input sections is then ++ // this, to take precedence. The final order of input sections is then + // guaranteed to be according to the linker script specification. + if (this->output_section_ != NULL + && this->output_section_->input_section_order_specified()) +@@ -2495,7 +2495,7 @@ Output_section_definition::set_section_a + // The LMA address was explicitly set to the given region. + laddr = lma_region->get_current_address()->eval(symtab, layout, + false); +- else ++ else + { + // We are not going to use the discovered lma_region, so + // make sure that we do not update it in the code below. +@@ -2987,9 +2987,9 @@ Orphan_output_section::set_section_addre + address = align_address(address, this->os_->addralign()); + + // If input section sorting is requested via --section-ordering-file or +- // linker plugins, then do it here. This is important because we want ++ // linker plugins, then do it here. This is important because we want + // any sorting specified in the linker scripts, which will be done after +- // this, to take precedence. The final order of input sections is then ++ // this, to take precedence. The final order of input sections is then + // guaranteed to be according to the linker script specification. + if (this->os_ != NULL + && this->os_->input_section_order_specified()) +@@ -3023,7 +3023,7 @@ Orphan_output_section::set_section_addre + { + uint64_t addralign = p->addralign(); + if (!p->is_input_section()) +- p->output_section_data()->finalize_data_size(); ++ p->output_section_data()->finalize_data_size(); + uint64_t size = p->data_size(); + address = align_address(address, addralign); + this->os_->add_script_input_section(*p); +@@ -3605,7 +3605,7 @@ Output_segment* + Script_sections::set_section_addresses(Symbol_table* symtab, Layout* layout) + { + gold_assert(this->saw_sections_clause_); +- ++ + // Implement ONLY_IF_RO/ONLY_IF_RW constraints. These are a pain + // for our representation. + for (Sections_elements::iterator p = this->sections_elements_->begin(); +@@ -3674,7 +3674,7 @@ Script_sections::set_section_addresses(S + Output_section* os = (*p)->get_output_section(); + + // Handle -Ttext, -Tdata and -Tbss options. We do this by looking for +- // the special sections by names and doing dot assignments. ++ // the special sections by names and doing dot assignments. + if (use_tsection_options + && os != NULL + && (os->flags() & elfcpp::SHF_ALLOC) != 0) +@@ -3703,7 +3703,7 @@ Script_sections::set_section_addresses(S + + (*p)->set_section_addresses(symtab, layout, &dot_value, &dot_alignment, + &load_address); +- } ++ } + + if (this->phdrs_elements_ != NULL) + { +@@ -3890,7 +3890,7 @@ Script_sections::create_segments(Layout* + layout->get_allocated_sections(§ions); + + // Sort the sections by address. +- std::stable_sort(sections.begin(), sections.end(), ++ std::stable_sort(sections.begin(), sections.end(), + Sort_output_sections(this->sections_elements_)); + + this->create_note_and_tls_segments(layout, §ions); +@@ -4217,7 +4217,7 @@ Script_sections::attach_sections_using_p + // Output sections in the script which do not list segments are + // attached to the same set of segments as the immediately preceding + // output section. +- ++ + String_list* phdr_names = NULL; + bool load_segments_only = false; + for (Sections_elements::const_iterator p = this->sections_elements_->begin(); +@@ -4262,7 +4262,7 @@ Script_sections::attach_sections_using_p + // filtering. + if (old_phdr_names != phdr_names) + load_segments_only = false; +- ++ + // If this is an orphan section--one that was not explicitly + // mentioned in the linker script--then it should not inherit + // any segment type other than PT_LOAD. Otherwise, e.g., the +@@ -4459,6 +4459,7 @@ Script_sections::release_segments() + ++p) + (*p)->release_segment(); + } ++ this->segments_created_ = false; + } + + // Print the SECTIONS clause to F for debugging. +diff -rup ../binutils-2.27/gold/sparc.cc gold/sparc.cc +--- ../binutils-2.27/gold/sparc.cc 2016-08-03 08:36:53.000000000 +0100 ++++ gold/sparc.cc 2016-11-03 15:05:48.000000000 +0000 +@@ -2150,6 +2150,7 @@ Target_sparc<size, big_endian>::Scan::ch + case elfcpp::R_SPARC_RELATIVE: + case elfcpp::R_SPARC_IRELATIVE: + case elfcpp::R_SPARC_COPY: ++ case elfcpp::R_SPARC_32: + case elfcpp::R_SPARC_64: + case elfcpp::R_SPARC_GLOB_DAT: + case elfcpp::R_SPARC_JMP_SLOT: +@@ -2304,7 +2305,7 @@ Target_sparc<size, big_endian>::Scan::lo + reloc.get_r_addend(), is_ifunc); + break; + } +- /* Fall through. */ ++ // Fall through. + + case elfcpp::R_SPARC_HIX22: + case elfcpp::R_SPARC_LOX10: +@@ -2814,6 +2815,7 @@ Target_sparc<size, big_endian>::Scan::gl + // and code transform the GOT load into an addition. + break; + } ++ // Fall through. + case elfcpp::R_SPARC_GOT10: + case elfcpp::R_SPARC_GOT13: + case elfcpp::R_SPARC_GOT22: +@@ -3353,6 +3355,7 @@ Target_sparc<size, big_endian>::Relocate + gdop_valid = true; + break; + } ++ // Fall through. + case elfcpp::R_SPARC_GOT10: + case elfcpp::R_SPARC_GOT13: + case elfcpp::R_SPARC_GOT22: +@@ -3468,6 +3471,13 @@ Target_sparc<size, big_endian>::Relocate + Reloc::lo10(view, object, psymval, addend); + break; + ++ case elfcpp::R_SPARC_GOTDATA_OP_LOX10: ++ if (gdop_valid) ++ { ++ Reloc::gdop_lox10(view, got_offset); ++ break; ++ } ++ // Fall through. + case elfcpp::R_SPARC_GOT10: + Reloc::lo10(view, got_offset, addend); + break; +@@ -3486,13 +3496,6 @@ Target_sparc<size, big_endian>::Relocate + } + break; + +- case elfcpp::R_SPARC_GOTDATA_OP_LOX10: +- if (gdop_valid) +- { +- Reloc::gdop_lox10(view, got_offset); +- break; +- } +- /* Fall through. */ + case elfcpp::R_SPARC_GOT13: + Reloc::rela32_13(view, got_offset, addend); + break; +@@ -3503,7 +3506,7 @@ Target_sparc<size, big_endian>::Relocate + Reloc::gdop_hix22(view, got_offset); + break; + } +- /* Fall through. */ ++ // Fall through. + case elfcpp::R_SPARC_GOT22: + Reloc::hi22(view, got_offset, addend); + break; +diff -rup ../binutils-2.27/gold/symtab.cc gold/symtab.cc +--- ../binutils-2.27/gold/symtab.cc 2016-08-03 08:36:53.000000000 +0100 ++++ gold/symtab.cc 2016-11-03 15:05:49.000000000 +0000 +@@ -882,6 +882,7 @@ Symbol_table::define_default_version(Siz + ; + else if (pdef->second->is_from_dynobj() + && sym->is_from_dynobj() ++ && pdef->second->is_defined() + && pdef->second->object() != sym->object()) + ; + else +@@ -1325,6 +1326,9 @@ Symbol_table::add_from_relobj( + res = this->add_from_object(relobj, name, name_key, ver, ver_key, + is_default_version, *psym, st_shndx, + is_ordinary, orig_st_shndx); ++ ++ if (res == NULL) ++ continue; + + if (is_forced_local) + this->force_local(res); +@@ -1406,6 +1410,9 @@ Symbol_table::add_from_pluginobj( + is_default_version, *sym, st_shndx, + is_ordinary, st_shndx); + ++ if (res == NULL) ++ return NULL; ++ + if (is_forced_local) + this->force_local(res); + +@@ -1602,6 +1609,9 @@ Symbol_table::add_from_dynobj( + } + } + ++ if (res == NULL) ++ continue; ++ + // Note that it is possible that RES was overridden by an + // earlier object, in which case it can't be aliased here. + if (st_shndx != elfcpp::SHN_UNDEF +@@ -1640,7 +1650,6 @@ Symbol_table::add_from_incrobj( + + Stringpool::Key ver_key = 0; + bool is_default_version = false; +- bool is_forced_local = false; + + Stringpool::Key name_key; + name = this->namepool_.add(name, true, &name_key); +@@ -1650,9 +1659,6 @@ Symbol_table::add_from_incrobj( + is_default_version, *sym, st_shndx, + is_ordinary, st_shndx); + +- if (is_forced_local) +- this->force_local(res); +- + return res; + } + +diff -rup ../binutils-2.27/gold/tilegx.cc gold/tilegx.cc +--- ../binutils-2.27/gold/tilegx.cc 2016-08-03 08:36:53.000000000 +0100 ++++ gold/tilegx.cc 2016-11-03 15:05:50.000000000 +0000 +@@ -4428,6 +4428,7 @@ Target_tilegx<size, big_endian>::Relocat + psymval = &symval; + always_apply_relocation = true; + addend = 0; ++ // Fall through. + + // when under PIC mode, these relocations are deferred to rtld + case elfcpp::R_TILEGX_IMM16_X0_HW0: +@@ -4618,6 +4619,7 @@ Target_tilegx<size, big_endian>::Relocat + got_type = GOT_TYPE_TLS_OFFSET; + have_got_offset = true; + } ++ // Fall through. + do_update_value: + if (have_got_offset) { + if (gsym != NULL) { +@@ -4647,10 +4649,8 @@ Target_tilegx<size, big_endian>::Relocat + } // else if (opt_t == tls::TLSOPT_TO_LE) + // both GD/IE are turned into LE, which + // is absolute relocation. +- // +- // | go through +- // | +- // V ++ // Fall through. ++ + // LE + // + // tp +diff -rup ../binutils-2.27/gold/x86_64.cc gold/x86_64.cc +--- ../binutils-2.27/gold/x86_64.cc 2016-08-03 08:36:53.000000000 +0100 ++++ gold/x86_64.cc 2016-11-03 15:05:52.000000000 +0000 +@@ -2361,7 +2361,7 @@ Target_x86_64<size>::Scan::check_non_pic + && !gsym->is_undefined() + && !gsym->is_preemptible())) + return; +- /* Fall through. */ ++ // Fall through. + case elfcpp::R_X86_64_32: + // R_X86_64_32 is OK for x32. + if (size == 32 && r_type == elfcpp::R_X86_64_32) +@@ -3505,6 +3505,7 @@ Target_x86_64<size>::Relocate::relocate( + if (this->skip_call_tls_get_addr_) + { + if ((r_type != elfcpp::R_X86_64_PLT32 ++ && r_type != elfcpp::R_X86_64_GOTPCREL + && r_type != elfcpp::R_X86_64_GOTPCRELX + && r_type != elfcpp::R_X86_64_PLT32_BND + && r_type != elfcpp::R_X86_64_PC32_BND +@@ -3514,6 +3515,7 @@ Target_x86_64<size>::Relocate::relocate( + { + gold_error_at_location(relinfo, relnum, rela.get_r_offset(), + _("missing expected TLS relocation")); ++ this->skip_call_tls_get_addr_ = false; + } + else + { +diff -rup ../binutils-2.27/gold/yyscript.y gold/yyscript.y +--- ../binutils-2.27/gold/yyscript.y 2016-08-03 08:36:53.000000000 +0100 ++++ gold/yyscript.y 2016-11-03 15:05:59.000000000 +0000 +@@ -137,6 +137,7 @@ + %token FORCE_COMMON_ALLOCATION + %token GLOBAL /* global */ + %token GROUP ++%token HIDDEN + %token HLL + %token INCLUDE + %token INHIBIT_COMMON_ALLOCATION +@@ -864,6 +865,8 @@ assignment: + Expression_ptr e = script_exp_binary_bitwise_or(s, $3); + script_set_symbol(closure, $1.value, $1.length, e, 0, 0); + } ++ | HIDDEN '(' string '=' parse_exp ')' ++ { script_set_symbol(closure, $3.value, $3.length, $5, 0, 1); } + | PROVIDE '(' string '=' parse_exp ')' + { script_set_symbol(closure, $3.value, $3.length, $5, 1, 0); } + | PROVIDE_HIDDEN '(' string '=' parse_exp ')' +diff -rup binutils.orig/gold/testsuite/pr18689.sh binutils-2.27/gold/testsuite/pr18689.sh +--- binutils.orig/gold/testsuite/pr18689.sh 2017-01-17 10:17:46.062813402 +0000 ++++ gold/testsuite/pr18689.sh 2017-01-17 10:30:51.583556117 +0000 +@@ -23,6 +23,6 @@ + + set -e + +-egrep -q "..debug_mac[ro|info][ ]+*" pr18689.stdout ++egrep -q "..debug_str[ ]+*" pr18689.stdout + + exit 0 diff --git a/SOURCES/binutils-2.27-local-dynsym-count.patch b/SOURCES/binutils-2.27-local-dynsym-count.patch new file mode 100644 index 0000000..7b27255 --- /dev/null +++ b/SOURCES/binutils-2.27-local-dynsym-count.patch @@ -0,0 +1,271 @@ +diff -rup binutils-2.27.orig/bfd/ChangeLog binutils-2.27/bfd/ChangeLog +--- binutils-2.27.orig/bfd/ChangeLog 2016-08-12 17:14:07.621773233 +0100 ++++ binutils-2.27/bfd/ChangeLog 2016-08-12 17:17:32.408119156 +0100 +@@ -1,3 +1,9 @@ ++2016-08-12 Alan Modra <amodra@gmail.com> ++ ++ * elf-bfd.h (struct elf_link_hash_table): Add local_dynsymcount. ++ * elflink.c (_bfd_elf_link_renumber_dynsyms): Set local_dynsymcount. ++ (bfd_elf_final_link): Set .dynsym sh_info from local_dynsymcount. ++ + 2016-08-03 Tristan Gingold <gingold@adacore.com> + + * version.m4: Bump version to 2.27 +Only in binutils-2.27/bfd: ChangeLog.orig +Only in binutils-2.27/bfd: ChangeLog.rej +diff -rup binutils-2.27.orig/bfd/elf-bfd.h binutils-2.27/bfd/elf-bfd.h +--- binutils-2.27.orig/bfd/elf-bfd.h 2016-08-12 17:14:07.630773290 +0100 ++++ binutils-2.27/bfd/elf-bfd.h 2016-08-12 17:16:08.519549845 +0100 +@@ -524,6 +524,7 @@ struct elf_link_hash_table + /* The number of symbols found in the link which is intended for the + mandatory DT_SYMTAB tag (.dynsym section) in .dynamic section. */ + bfd_size_type dynsymcount; ++ bfd_size_type local_dynsymcount; + + /* The string table of dynamic symbols, which becomes the .dynstr + section. */ +diff -rup binutils-2.27.orig/bfd/elflink.c binutils-2.27/bfd/elflink.c +--- binutils-2.27.orig/bfd/elflink.c 2016-08-12 17:14:07.637773334 +0100 ++++ binutils-2.27/bfd/elflink.c 2016-08-12 17:16:08.521549858 +0100 +@@ -903,6 +903,7 @@ _bfd_elf_link_renumber_dynsyms (bfd *out + for (p = elf_hash_table (info)->dynlocal; p ; p = p->next) + p->dynindx = ++dynsymcount; + } ++ elf_hash_table (info)->local_dynsymcount = dynsymcount; + + elf_link_hash_traverse (elf_hash_table (info), + elf_link_renumber_hash_table_dynsyms, +@@ -11678,7 +11679,10 @@ bfd_elf_final_link (bfd *abfd, struct bf + { + Elf_Internal_Sym sym; + bfd_byte *dynsym = elf_hash_table (info)->dynsym->contents; +- long last_local = 0; ++ ++ o = elf_hash_table (info)->dynsym->output_section; ++ elf_section_data (o)->this_hdr.sh_info ++ = elf_hash_table (info)->local_dynsymcount + 1; + + /* Write out the section symbols for the output sections. */ + if (bfd_link_pic (info) +@@ -11708,8 +11712,6 @@ bfd_elf_final_link (bfd *abfd, struct bf + return FALSE; + sym.st_value = s->vma; + dest = dynsym + dynindx * bed->s->sizeof_sym; +- if (last_local < dynindx) +- last_local = dynindx; + bed->s->swap_symbol_out (abfd, &sym, dest, 0); + } + } +@@ -11742,16 +11744,10 @@ bfd_elf_final_link (bfd *abfd, struct bf + + e->isym.st_value); + } + +- if (last_local < e->dynindx) +- last_local = e->dynindx; +- + dest = dynsym + e->dynindx * bed->s->sizeof_sym; + bed->s->swap_symbol_out (abfd, &sym, dest, 0); + } + } +- +- elf_section_data (elf_hash_table (info)->dynsym->output_section)->this_hdr.sh_info = +- last_local + 1; + } + + /* We get the global symbols from the hash table. */ +Only in binutils-2.27/bfd: elflink.c.orig +diff -rup binutils-2.27.orig/ld/ChangeLog binutils-2.27/ld/ChangeLog +--- binutils-2.27.orig/ld/ChangeLog 2016-08-12 17:14:08.064776041 +0100 ++++ binutils-2.27/ld/ChangeLog 2016-08-12 17:17:00.166900351 +0100 +@@ -1,3 +1,19 @@ ++2016-08-12 Alan Modra <amodra@gmail.com> ++ ++ * testsuite/ld-tic6x/shlib-1.rd: Correct expected .dynsym sh_info. ++ * testsuite/ld-tic6x/shlib-1b.rd: Likewise. ++ * testsuite/ld-tic6x/shlib-1r.rd: Likewise. ++ * testsuite/ld-tic6x/shlib-1rb.rd: Likewise. ++ * testsuite/ld-tic6x/shlib-app-1.rd: Likewise. ++ * testsuite/ld-tic6x/shlib-app-1b.rd: Likewise. ++ * testsuite/ld-tic6x/shlib-app-1r.rd: Likewise. ++ * testsuite/ld-tic6x/shlib-app-1rb.rd: Likewise. ++ * testsuite/ld-tic6x/shlib-noindex.rd: Likewise. ++ * testsuite/ld-tic6x/static-app-1.rd: Likewise. ++ * testsuite/ld-tic6x/static-app-1b.rd: Likewise. ++ * testsuite/ld-tic6x/static-app-1r.rd: Likewise. ++ * testsuite/ld-tic6x/static-app-1rb.rd: Likewise. ++ + 2016-08-03 Tristan Gingold <gingold@adacore.com> + + * configure: Regenerate. +Only in binutils-2.27/ld: ChangeLog.orig +Only in binutils-2.27/ld: ChangeLog.rej +diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1b.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-1b.rd +--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1b.rd 2016-08-12 17:14:08.200776903 +0100 ++++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-1b.rd 2016-08-12 17:16:08.522549865 +0100 +@@ -4,7 +4,7 @@ Section Headers: + \[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al + \[ 0\] NULL 00000000 000000 000000 00 0 0 0 + \[ 1\] \.hash HASH 00008000 001000 000048 04 A 2 0 4 +- \[ 2\] \.dynsym DYNSYM 00008048 001048 0000d0 10 A 3 6 4 ++ \[ 2\] \.dynsym DYNSYM 00008048 001048 0000d0 10 A 3 7 4 + \[ 3\] \.dynstr STRTAB 00008118 001118 000025 00 A 0 0 1 + \[ 4\] \.rela\.got RELA 00008140 001140 000024 0c AI 2 10 4 + \[ 5\] \.rela\.neardata RELA 00008164 001164 000018 0c AI 2 11 4 +diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1rb.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-1rb.rd +--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1rb.rd 2016-08-12 17:14:08.200776903 +0100 ++++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-1rb.rd 2016-08-12 17:16:08.522549865 +0100 +@@ -4,7 +4,7 @@ Section Headers: + \[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al + \[ 0\] NULL 00000000 000000 000000 00 0 0 0 + \[ 1\] \.hash HASH 00008000 001000 000048 04 A 2 0 4 +- \[ 2\] \.dynsym DYNSYM 00008048 001048 0000d0 10 A 3 6 4 ++ \[ 2\] \.dynsym DYNSYM 00008048 001048 0000d0 10 A 3 7 4 + \[ 3\] \.dynstr STRTAB 00008118 001118 000025 00 A 0 0 1 + \[ 4\] \.rela\.got RELA 00008140 001140 000024 0c AI 2 10 4 + \[ 5\] \.rela\.neardata RELA 00008164 001164 000018 0c AI 2 11 4 +diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-1.rd +--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1.rd 2016-08-12 17:14:08.200776903 +0100 ++++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-1.rd 2016-08-12 17:16:08.522549865 +0100 +@@ -4,7 +4,7 @@ Section Headers: + \[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al + \[ 0\] NULL 00000000 000000 000000 00 0 0 0 + \[ 1\] \.hash HASH 00008000 001000 000048 04 A 2 0 4 +- \[ 2\] \.dynsym DYNSYM 00008048 001048 0000d0 10 A 3 6 4 ++ \[ 2\] \.dynsym DYNSYM 00008048 001048 0000d0 10 A 3 7 4 + \[ 3\] \.dynstr STRTAB 00008118 001118 000025 00 A 0 0 1 + \[ 4\] \.rela\.got RELA 00008140 001140 000024 0c AI 2 10 4 + \[ 5\] \.rela\.neardata RELA 00008164 001164 000018 0c AI 2 11 4 +diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1r.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-1r.rd +--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-1r.rd 2016-08-12 17:14:08.200776903 +0100 ++++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-1r.rd 2016-08-12 17:16:08.522549865 +0100 +@@ -4,7 +4,7 @@ Section Headers: + \[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al + \[ 0\] NULL 00000000 000000 000000 00 0 0 0 + \[ 1\] \.hash HASH 00008000 001000 000048 04 A 2 0 4 +- \[ 2\] \.dynsym DYNSYM 00008048 001048 0000d0 10 A 3 6 4 ++ \[ 2\] \.dynsym DYNSYM 00008048 001048 0000d0 10 A 3 7 4 + \[ 3\] \.dynstr STRTAB 00008118 001118 000025 00 A 0 0 1 + \[ 4\] \.rela\.got RELA 00008140 001140 000024 0c AI 2 10 4 + \[ 5\] \.rela\.neardata RELA 00008164 001164 000018 0c AI 2 11 4 +diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1b.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1b.rd +--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1b.rd 2016-08-12 17:14:08.200776903 +0100 ++++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1b.rd 2016-08-12 17:16:08.522549865 +0100 +@@ -4,7 +4,7 @@ Section Headers: + \[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al + \[ 0\] NULL 00000000 000000 000000 00 0 0 0 + \[ 1\] \.hash HASH 00008000 001000 000044 04 A 2 0 4 +- \[ 2\] \.dynsym DYNSYM 00008044 001044 0000c0 10 A 3 6 4 ++ \[ 2\] \.dynsym DYNSYM 00008044 001044 0000c0 10 A 3 7 4 + \[ 3\] \.dynstr STRTAB 00008104 001104 000036 00 A 0 0 1 + \[ 4\] \.rela\.got RELA 0000813c 00113c 000018 0c AI 2 11 4 + \[ 5\] \.rela\.neardata RELA 00008154 001154 000018 0c AI 2 12 4 +diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1rb.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1rb.rd +--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1rb.rd 2016-08-12 17:14:08.201776909 +0100 ++++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1rb.rd 2016-08-12 17:16:08.522549865 +0100 +@@ -4,7 +4,7 @@ Section Headers: + \[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al + \[ 0\] NULL 00000000 000000 000000 00 0 0 0 + \[ 1\] \.hash HASH 00008000 001000 00003c 04 A 2 0 4 +- \[ 2\] \.dynsym DYNSYM 0000803c 00103c 0000a0 10 A 3 6 4 ++ \[ 2\] \.dynsym DYNSYM 0000803c 00103c 0000a0 10 A 3 7 4 + \[ 3\] \.dynstr STRTAB 000080dc 0010dc 000031 00 A 0 0 1 + \[ 4\] \.rela\.got RELA 00008110 001110 000018 0c AI 2 10 4 + \[ 5\] \.rela\.bss RELA 00008128 001128 00000c 0c AI 2 12 4 +diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1.rd +--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1.rd 2016-08-12 17:14:08.200776903 +0100 ++++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1.rd 2016-08-12 17:16:08.522549865 +0100 +@@ -4,7 +4,7 @@ Section Headers: + \[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al + \[ 0\] NULL 00000000 000000 000000 00 0 0 0 + \[ 1\] \.hash HASH 00008000 001000 000044 04 A 2 0 4 +- \[ 2\] \.dynsym DYNSYM 00008044 001044 0000c0 10 A 3 6 4 ++ \[ 2\] \.dynsym DYNSYM 00008044 001044 0000c0 10 A 3 7 4 + \[ 3\] \.dynstr STRTAB 00008104 001104 000035 00 A 0 0 1 + \[ 4\] \.rela\.got RELA 0000813c 00113c 000018 0c AI 2 11 4 + \[ 5\] \.rela\.neardata RELA 00008154 001154 000018 0c AI 2 12 4 +diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1r.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1r.rd +--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-app-1r.rd 2016-08-12 17:14:08.200776903 +0100 ++++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-app-1r.rd 2016-08-12 17:16:08.522549865 +0100 +@@ -4,7 +4,7 @@ Section Headers: + \[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al + \[ 0\] NULL 00000000 000000 000000 00 0 0 0 + \[ 1\] \.hash HASH 00008000 001000 00003c 04 A 2 0 4 +- \[ 2\] \.dynsym DYNSYM 0000803c 00103c 0000a0 10 A 3 6 4 ++ \[ 2\] \.dynsym DYNSYM 0000803c 00103c 0000a0 10 A 3 7 4 + \[ 3\] \.dynstr STRTAB 000080dc 0010dc 000030 00 A 0 0 1 + \[ 4\] \.rela\.got RELA 0000810c 00110c 000018 0c AI 2 10 4 + \[ 5\] \.rela\.bss RELA 00008124 001124 00000c 0c AI 2 12 4 +diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-noindex.rd binutils-2.27/ld/testsuite/ld-tic6x/shlib-noindex.rd +--- binutils-2.27.orig/ld/testsuite/ld-tic6x/shlib-noindex.rd 2016-08-12 17:14:08.201776909 +0100 ++++ binutils-2.27/ld/testsuite/ld-tic6x/shlib-noindex.rd 2016-08-12 17:16:08.522549865 +0100 +@@ -4,7 +4,7 @@ Section Headers: + \[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al + \[ 0\] NULL 00000000 000000 000000 00 0 0 0 + \[ 1\] \.hash HASH 00008000 001000 000048 04 A 2 0 4 +- \[ 2\] \.dynsym DYNSYM 00008048 001048 0000d0 10 A 3 6 4 ++ \[ 2\] \.dynsym DYNSYM 00008048 001048 0000d0 10 A 3 7 4 + \[ 3\] \.dynstr STRTAB 00008118 001118 000025 00 A 0 0 1 + \[ 4\] \.rela\.text RELA 00008140 001140 00000c 0c AI 2 10 4 + \[ 5\] \.rela\.got RELA 0000814c 00114c 000024 0c AI 2 11 4 +diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1b.rd binutils-2.27/ld/testsuite/ld-tic6x/static-app-1b.rd +--- binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1b.rd 2016-08-12 17:14:08.201776909 +0100 ++++ binutils-2.27/ld/testsuite/ld-tic6x/static-app-1b.rd 2016-08-12 17:16:08.522549865 +0100 +@@ -4,7 +4,7 @@ Section Headers: + \[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al + \[ 0\] NULL 00000000 000000 000000 00 0 0 0 + \[ 1\] \.hash HASH 00008000 001000 00003c 04 A 2 0 4 +- \[ 2\] \.dynsym DYNSYM 0000803c 00103c 0000a0 10 A 3 5 4 ++ \[ 2\] \.dynsym DYNSYM 0000803c 00103c 0000a0 10 A 3 7 4 + \[ 3\] \.dynstr STRTAB 000080dc 0010dc 00001d 00 A 0 0 1 + \[ 4\] \.rela\.got RELA 000080fc 0010fc 000024 0c AI 2 8 4 + \[ 5\] \.rela\.neardata RELA 00008120 001120 000030 0c AI 2 9 4 +diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1rb.rd binutils-2.27/ld/testsuite/ld-tic6x/static-app-1rb.rd +--- binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1rb.rd 2016-08-12 17:14:08.201776909 +0100 ++++ binutils-2.27/ld/testsuite/ld-tic6x/static-app-1rb.rd 2016-08-12 17:16:08.523549872 +0100 +@@ -4,7 +4,7 @@ Section Headers: + \[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al + \[ 0\] NULL 00000000 000000 000000 00 0 0 0 + \[ 1\] \.hash HASH 00008000 001000 00003c 04 A 2 0 4 +- \[ 2\] \.dynsym DYNSYM 0000803c 00103c 0000a0 10 A 3 5 4 ++ \[ 2\] \.dynsym DYNSYM 0000803c 00103c 0000a0 10 A 3 7 4 + \[ 3\] \.dynstr STRTAB 000080dc 0010dc 00001d 00 A 0 0 1 + \[ 4\] \.rela\.got RELA 000080fc 0010fc 000024 0c AI 2 8 4 + \[ 5\] \.rela\.neardata RELA 00008120 001120 000018 0c AI 2 9 4 +diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1.rd binutils-2.27/ld/testsuite/ld-tic6x/static-app-1.rd +--- binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1.rd 2016-08-12 17:14:08.201776909 +0100 ++++ binutils-2.27/ld/testsuite/ld-tic6x/static-app-1.rd 2016-08-12 17:16:08.522549865 +0100 +@@ -4,7 +4,7 @@ Section Headers: + \[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al + \[ 0\] NULL 00000000 000000 000000 00 0 0 0 + \[ 1\] \.hash HASH 00008000 001000 00003c 04 A 2 0 4 +- \[ 2\] \.dynsym DYNSYM 0000803c 00103c 0000a0 10 A 3 5 4 ++ \[ 2\] \.dynsym DYNSYM 0000803c 00103c 0000a0 10 A 3 7 4 + \[ 3\] \.dynstr STRTAB 000080dc 0010dc 00001d 00 A 0 0 1 + \[ 4\] \.rela\.got RELA 000080fc 0010fc 000024 0c AI 2 8 4 + \[ 5\] \.rela\.neardata RELA 00008120 001120 000030 0c AI 2 9 4 +diff -rup binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1r.rd binutils-2.27/ld/testsuite/ld-tic6x/static-app-1r.rd +--- binutils-2.27.orig/ld/testsuite/ld-tic6x/static-app-1r.rd 2016-08-12 17:14:08.201776909 +0100 ++++ binutils-2.27/ld/testsuite/ld-tic6x/static-app-1r.rd 2016-08-12 17:16:08.523549872 +0100 +@@ -4,7 +4,7 @@ Section Headers: + \[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al + \[ 0\] NULL 00000000 000000 000000 00 0 0 0 + \[ 1\] \.hash HASH 00008000 001000 00003c 04 A 2 0 4 +- \[ 2\] \.dynsym DYNSYM 0000803c 00103c 0000a0 10 A 3 5 4 ++ \[ 2\] \.dynsym DYNSYM 0000803c 00103c 0000a0 10 A 3 7 4 + \[ 3\] \.dynstr STRTAB 000080dc 0010dc 00001d 00 A 0 0 1 + \[ 4\] \.rela\.got RELA 000080fc 0010fc 000024 0c AI 2 8 4 + \[ 5\] \.rela\.neardata RELA 00008120 001120 000018 0c AI 2 9 4 +--- binutils-2.27.orig/binutils/readelf.c 2016-08-12 17:14:07.717773841 +0100 ++++ binutils-2.27/binutils/readelf.c 2016-08-12 17:24:25.007897415 +0100 +@@ -11110,6 +11110,11 @@ process_symbol_table (FILE * file) + } + + putchar ('\n'); ++ ++ if (ELF_ST_BIND (psym->st_info) == STB_LOCAL ++ && si >= section->sh_info) ++ warn (_("local symbol %u found at index >= %s's sh_info value of %u\n"), ++ si, printable_section_name (section), section->sh_info); + } + + free (symtab); diff --git a/SOURCES/binutils-2.27-monotonic-section-offsets.patch b/SOURCES/binutils-2.27-monotonic-section-offsets.patch new file mode 100644 index 0000000..932df8b --- /dev/null +++ b/SOURCES/binutils-2.27-monotonic-section-offsets.patch @@ -0,0 +1,2097 @@ +diff --git a/bfd/elf.c b/bfd/elf.c +index 274cd53..c3630d2 100644 +--- a/bfd/elf.c ++++ b/bfd/elf.c +@@ -3093,7 +3093,7 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg) + compressed. */ + asect->flags |= SEC_ELF_COMPRESS; + +- /* If this section will be compressed, delay adding setion ++ /* If this section will be compressed, delay adding section + name to section name section after it is compressed in + _bfd_elf_assign_file_positions_for_non_load. */ + delay_st_name_p = TRUE; +@@ -3595,10 +3595,6 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info) + d->rela.idx = 0; + } + +- elf_shstrtab_sec (abfd) = section_number++; +- _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name); +- elf_elfheader (abfd)->e_shstrndx = elf_shstrtab_sec (abfd); +- + need_symtab = (bfd_get_symcount (abfd) > 0 + || (link_info == NULL + && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC)) +@@ -3626,6 +3622,10 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info) + _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name); + } + ++ elf_shstrtab_sec (abfd) = section_number++; ++ _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name); ++ elf_elfheader (abfd)->e_shstrndx = elf_shstrtab_sec (abfd); ++ + if (section_number >= SHN_LORESERVE) + { + _bfd_error_handler (_("%B: too many sections: %u"), +@@ -6028,7 +6028,7 @@ _bfd_elf_assign_file_positions_for_non_load (bfd *abfd) + return FALSE; + name = new_name; + } +- /* Add setion name to section name section. */ ++ /* Add section name to section name section. */ + if (shdrp->sh_name != (unsigned int) -1) + abort (); + shdrp->sh_name +@@ -6036,7 +6036,7 @@ _bfd_elf_assign_file_positions_for_non_load (bfd *abfd) + name, FALSE); + d = elf_section_data (sec); + +- /* Add reloc setion name to section name section. */ ++ /* Add reloc section name to section name section. */ + if (d->rel.hdr + && !_bfd_elf_set_reloc_sh_name (abfd, + d->rel.hdr, +diff --git a/binutils/testsuite/binutils-all/readelf.s b/binutils/testsuite/binutils-all/readelf.s +index fd62fda..5aae0ce 100644 +--- a/binutils/testsuite/binutils-all/readelf.s ++++ b/binutils/testsuite/binutils-all/readelf.s +@@ -14,8 +14,8 @@ Section Headers: + # MIPS targets put .reginfo, .mdebug, .MIPS.abiflags and .gnu.attributes here. + # v850 targets put .call_table_data and .call_table_text here. + #... +- +\[ .\] .shstrtab +STRTAB +00000000 0+.* 0+.* 00 .* +0 +0 +. + +\[..\] .symtab +SYMTAB +00000000 0+.* 0+.* 10 +.. +.+ +4 + +\[..\] .strtab +STRTAB +00000000 0+.* 0+.* 00 .* +0 +0 +1 ++ +\[..\] .shstrtab +STRTAB +00000000 0+.* 0+.* 00 .* +0 +0 +. + Key to Flags: + #... +diff --git a/binutils/testsuite/binutils-all/readelf.s-64 b/binutils/testsuite/binutils-all/readelf.s-64 +index d198300..622b314 100644 +--- a/binutils/testsuite/binutils-all/readelf.s-64 ++++ b/binutils/testsuite/binutils-all/readelf.s-64 +@@ -13,12 +13,12 @@ Section Headers: + +000000000000000[48] +0000000000000000 +WA +0 +0 +.* + +\[ 4\] .bss +NOBITS +0000000000000000 +000000(4c|50|54|58) + +0000000000000000 +0000000000000000 +WA +0 +0 +.* +- +\[ 5\] .shstrtab +STRTAB +0000000000000000 +[0-9a-f]+ +- +00000000000000.. +0000000000000000 .* +0 +0 +.* +- +\[ 6\] .symtab +SYMTAB +0000000000000000 +0+.* ++ +\[ 5\] .symtab +SYMTAB +0000000000000000 +0+.* + # aarch64-elf targets have one more data symbol. +- +0+.* +0000000000000018 +7 +(6|7) +8 +- +\[ 7\] .strtab +STRTAB +0000000000000000 +0+.* ++ +0+.* +0000000000000018 +6 +(6|7) +8 ++ +\[ 6\] .strtab +STRTAB +0000000000000000 +0+.* + +0+.* +0000000000000000 .* +0 +0 +1 ++ +\[ 7\] .shstrtab +STRTAB +0000000000000000 +[0-9a-f]+ ++ +00000000000000.. +0000000000000000 .* +0 +0 +.* + Key to Flags: + #... +diff --git a/gas/testsuite/gas/i386/ilp32/x86-64-unwind.d b/gas/testsuite/gas/i386/ilp32/x86-64-unwind.d +index 5cea05e..5dc74d6 100644 +--- a/gas/testsuite/gas/i386/ilp32/x86-64-unwind.d ++++ b/gas/testsuite/gas/i386/ilp32/x86-64-unwind.d +@@ -11,8 +11,8 @@ Section Headers: + \[ 2\] .data PROGBITS 00000000 000034 000000 00 WA 0 0 1 + \[ 3\] .bss NOBITS 00000000 000034 000000 00 WA 0 0 1 + \[ 4\] .eh_frame X86_64_UNWIND 00000000 000034 000008 00 A 0 0 1 +- \[ 5\] .shstrtab STRTAB 00000000 [0-9a-f]+ 000036 00 . 0 0 1 +- \[ 6\] .symtab SYMTAB 00000000 [0-9a-f]+ 000050 10 7 5 4 +- \[ 7\] .strtab STRTAB 00000000 [0-9a-f]+ 000001 00 . 0 0 1 ++ \[ 5\] .symtab SYMTAB 00000000 [0-9a-f]+ 000050 10 6 5 4 ++ \[ 6\] .strtab STRTAB 00000000 [0-9a-f]+ 000001 00 . 0 0 1 ++ \[ 7\] .shstrtab STRTAB 00000000 [0-9a-f]+ 000036 00 . 0 0 1 + Key to Flags: + #pass +diff --git a/gas/testsuite/gas/i386/x86-64-unwind.d b/gas/testsuite/gas/i386/x86-64-unwind.d +index 7a4c64c..89f1a65 100644 +--- a/gas/testsuite/gas/i386/x86-64-unwind.d ++++ b/gas/testsuite/gas/i386/x86-64-unwind.d +@@ -16,11 +16,11 @@ Section Headers: + 0000000000000000 0000000000000000 WA 0 0 1 + \[ 4\] \.eh_frame X86_64_UNWIND 0000000000000000 00000040 + 0000000000000008 0000000000000000 A 0 0 1 +- \[ 5\] \.shstrtab STRTAB 0000000000000000 [0-9a-f]+ +- 0000000000000036 0000000000000000 . 0 0 1 +- \[ 6\] \.symtab SYMTAB 0000000000000000 [0-9a-f]+ +- 0000000000000078 0000000000000018 7 5 8 +- \[ 7\] \.strtab STRTAB 0000000000000000 [0-9a-f]+ ++ \[ 5\] \.symtab SYMTAB 0000000000000000 [0-9a-f]+ ++ 0000000000000078 0000000000000018 6 5 8 ++ \[ 6\] \.strtab STRTAB 0000000000000000 [0-9a-f]+ + 0000000000000001 0000000000000000 . 0 0 1 ++ \[ 7\] \.shstrtab STRTAB 0000000000000000 [0-9a-f]+ ++ 0000000000000036 0000000000000000 . 0 0 1 + Key to Flags: + #... +diff --git a/gas/testsuite/gas/ia64/alias-ilp32.d b/gas/testsuite/gas/ia64/alias-ilp32.d +index d882b3c..df05d36 100644 +--- a/gas/testsuite/gas/ia64/alias-ilp32.d ++++ b/gas/testsuite/gas/ia64/alias-ilp32.d +@@ -12,9 +12,9 @@ Section Headers: + +\[ 2\] .data +PROGBITS +00000000 000040 000000 00 +WA +0 +0 +1 + +\[ 3\] .bss +NOBITS +00000000 000040 000000 00 +WA +0 +0 +1 + +\[ 4\] 1234 +PROGBITS +00000000 000040 000005 00 +WA +0 +0 +1 +- +\[ 5\] .shstrtab +STRTAB +00000000 [0-9a-f]+ 000031 00 +0 +0 +1 +- +\[ 6\] .symtab +SYMTAB +00000000 [0-9a-f]+ 000060 10 +7 +6 +4 +- +\[ 7\] .strtab +STRTAB +00000000 [0-9a-f]+ 000006 00 +0 +0 +1 ++ +\[ 5\] .symtab +SYMTAB +00000000 [0-9a-f]+ 000060 10 +6 +6 +4 ++ +\[ 6\] .strtab +STRTAB +00000000 [0-9a-f]+ 000006 00 +0 +0 +1 ++ +\[ 7\] .shstrtab +STRTAB +00000000 [0-9a-f]+ 000031 00 +0 +0 +1 + Key to Flags: + #... + +diff --git a/gas/testsuite/gas/ia64/alias.d b/gas/testsuite/gas/ia64/alias.d +index 398bff4..23b9330 100644 +--- a/gas/testsuite/gas/ia64/alias.d ++++ b/gas/testsuite/gas/ia64/alias.d +@@ -16,12 +16,12 @@ Section Headers: + +0000000000000000 +0000000000000000 +WA +0 +0 +1 + +\[ 4\] 1234 +PROGBITS +0000000000000000 +00000040 + +0000000000000005 +0000000000000000 +WA +0 +0 +1 +- +\[ 5\] \.shstrtab +STRTAB +0000000000000000 +[0-9a-f]+ +- +0000000000000031 +0000000000000000 +0 +0 +1 +- +\[ 6\] \.symtab +SYMTAB +0000000000000000 .* +- +0000000000000090 +0000000000000018 +7 +6 +8 +- +\[ 7\] \.strtab +STRTAB +0000000000000000 .* ++ +\[ 5\] \.symtab +SYMTAB +0000000000000000 .* ++ +0000000000000090 +0000000000000018 +6 +6 +8 ++ +\[ 6\] \.strtab +STRTAB +0000000000000000 .* + +0000000000000006 +0000000000000000 +0 +0 +1 ++ +\[ 7\] \.shstrtab +STRTAB +0000000000000000 +[0-9a-f]+ ++ +0000000000000031 +0000000000000000 +0 +0 +1 + Key to Flags: + #... + +diff --git a/gas/testsuite/gas/ia64/group-1.d b/gas/testsuite/gas/ia64/group-1.d +index b4eab14..b90bd88 100644 +--- a/gas/testsuite/gas/ia64/group-1.d ++++ b/gas/testsuite/gas/ia64/group-1.d +@@ -18,12 +18,12 @@ Section Headers: + 0000000000000000 0000000000000000 WA 0 0 1 + \[ 5\] \.text PROGBITS 0000000000000000 00000050 + 0000000000000010 0000000000000000 AXG 0 0 16 +- \[ 6\] \.shstrtab STRTAB 0000000000000000 [0-9a-f]+ +- 0000000000000033 0000000000000000 0 0 1 +- \[ 7\] \.symtab SYMTAB 0000000000000000 .* +- 00000000000000c0 0000000000000018 8 8 8 +- \[ 8\] \.strtab STRTAB 0000000000000000 .* ++ \[ 6\] \.symtab SYMTAB 0000000000000000 .* ++ 00000000000000c0 0000000000000018 7 8 8 ++ \[ 7\] \.strtab STRTAB 0000000000000000 .* + 000000000000000[7c] 0000000000000000 0 0 1 ++ \[ 8\] \.shstrtab STRTAB 0000000000000000 [0-9a-f]+ ++ 0000000000000033 0000000000000000 0 0 1 + Key to Flags: + #... + +diff --git a/gas/testsuite/gas/ia64/group-2.d b/gas/testsuite/gas/ia64/group-2.d +index 7370367..cc8413f 100644 +--- a/gas/testsuite/gas/ia64/group-2.d ++++ b/gas/testsuite/gas/ia64/group-2.d +@@ -25,12 +25,12 @@ Section Headers: + 0000000000000018 0000000000000000 ALG 5 5 8 + \[ 8\] \.rela\.gnu\.linkonc RELA 0000000000000000 .* + 0000000000000048 0000000000000018 I 10 7 8 +- \[ 9\] \.shstrtab STRTAB 0000000000000000 [0-9a-f]+ +- 0000000000000081 0000000000000000 0 0 1 +- \[10\] \.symtab SYMTAB 0000000000000000 .* +- 00000000000000d8 0000000000000018 11 9 8 +- \[11\] \.strtab STRTAB 0000000000000000 .* ++ \[ 9\] \.symtab SYMTAB 0000000000000000 .* ++ 00000000000000d8 0000000000000018 10 9 8 ++ \[10\] \.strtab STRTAB 0000000000000000 .* + 0000000000000005 0000000000000000 0 0 1 ++ \[11\] \.shstrtab STRTAB 0000000000000000 [0-9a-f]+ ++ 0000000000000081 0000000000000000 0 0 1 + Key to Flags: + #... + +diff --git a/gas/testsuite/gas/ia64/secname-ilp32.d b/gas/testsuite/gas/ia64/secname-ilp32.d +index 4146307..0b8a771 100644 +--- a/gas/testsuite/gas/ia64/secname-ilp32.d ++++ b/gas/testsuite/gas/ia64/secname-ilp32.d +@@ -12,8 +12,8 @@ Section Headers: + \[ 2\] .data PROGBITS 00000000 000040 000000 00 WA 0 0 1 + \[ 3\] .bss NOBITS 00000000 000040 000000 00 WA 0 0 1 + \[ 4\] .foo PROGBITS 00000000 000040 000008 00 WA 0 0 8 +- \[ 5\] .shstrtab STRTAB 00000000 [0-9a-f]+ 000031 00 0 0 1 +- \[ 6\] .symtab SYMTAB 00000000 [0-9a-f]+ 000050 10 7 5 4 +- \[ 7\] .strtab STRTAB 00000000 [0-9a-f]+ 000001 00 0 0 1 ++ \[ 5\] .symtab SYMTAB 00000000 [0-9a-f]+ 000050 10 6 5 4 ++ \[ 6\] .strtab STRTAB 00000000 [0-9a-f]+ 000001 00 0 0 1 ++ \[ 7\] .shstrtab STRTAB 00000000 [0-9a-f]+ 000031 00 0 0 1 + Key to Flags: + #... +diff --git a/gas/testsuite/gas/ia64/secname.d b/gas/testsuite/gas/ia64/secname.d +index 79f1e33..9d02e1a 100644 +--- a/gas/testsuite/gas/ia64/secname.d ++++ b/gas/testsuite/gas/ia64/secname.d +@@ -16,11 +16,11 @@ Section Headers: + 0000000000000000 0000000000000000 WA 0 0 1 + \[ 4\] \.foo PROGBITS 0000000000000000 00000040 + 0000000000000008 0000000000000000 WA 0 0 8 +- \[ 5\] \.shstrtab STRTAB 0000000000000000 [0-9a-f]+ +- 0000000000000031 0000000000000000 0 0 1 +- \[ 6\] \.symtab SYMTAB 0000000000000000 .* +- 0000000000000078 0000000000000018 7 5 8 +- \[ 7\] \.strtab STRTAB 0000000000000000 .* ++ \[ 5\] \.symtab SYMTAB 0000000000000000 .* ++ 0000000000000078 0000000000000018 6 5 8 ++ \[ 6\] \.strtab STRTAB 0000000000000000 .* + 0000000000000001 0000000000000000 0 0 1 ++ \[ 7\] \.shstrtab STRTAB 0000000000000000 [0-9a-f]+ ++ 0000000000000031 0000000000000000 0 0 1 + Key to Flags: + #... +diff --git a/gas/testsuite/gas/ia64/unwind-ilp32.d b/gas/testsuite/gas/ia64/unwind-ilp32.d +index cd25b0d..e96f89b 100644 +--- a/gas/testsuite/gas/ia64/unwind-ilp32.d ++++ b/gas/testsuite/gas/ia64/unwind-ilp32.d +@@ -13,8 +13,8 @@ Section Headers: + \[ 3\] .bss NOBITS 00000000 000040 000000 00 WA 0 0 1 + \[ 4\] .IA_64.unwind_inf PROGBITS 00000000 000040 000008 00 A 0 0 8 + \[ 5\] .IA_64.unwind IA_64_UNWIND 00000000 000048 000008 00 AL 1 1 8 +- \[ 6\] .shstrtab STRTAB 00000000 [0-9a-f]+ 00004d 00 0 0 1 +- \[ 7\] .symtab SYMTAB 00000000 [0-9a-f]+ 000060 10 8 6 4 +- \[ 8\] .strtab STRTAB 00000000 [0-9a-f]+ 000001 00 0 0 1 ++ \[ 6\] .symtab SYMTAB 00000000 [0-9a-f]+ 000060 10 7 6 4 ++ \[ 7\] .strtab STRTAB 00000000 [0-9a-f]+ 000001 00 0 0 1 ++ \[ 8\] .shstrtab STRTAB 00000000 [0-9a-f]+ 00004d 00 0 0 1 + Key to Flags: + #... +diff --git a/gas/testsuite/gas/ia64/unwind.d b/gas/testsuite/gas/ia64/unwind.d +index ce71a7a..bdb7af8 100644 +--- a/gas/testsuite/gas/ia64/unwind.d ++++ b/gas/testsuite/gas/ia64/unwind.d +@@ -18,11 +18,11 @@ Section Headers: + 0000000000000008 0000000000000000 A 0 0 8 + \[ 5\] \.IA_64\.unwind IA_64_UNWIND 0000000000000000 00000048 + 0000000000000008 0000000000000000 AL 1 1 8 +- \[ 6\] \.shstrtab STRTAB 0000000000000000 [0-9a-f]+ +- 000000000000004d 0000000000000000 0 0 1 +- \[ 7\] \.symtab SYMTAB 0000000000000000 .* +- 0000000000000090 0000000000000018 8 6 8 +- \[ 8\] \.strtab STRTAB 0000000000000000 .* ++ \[ 6\] \.symtab SYMTAB 0000000000000000 .* ++ 0000000000000090 0000000000000018 7 6 8 ++ \[ 7\] \.strtab STRTAB 0000000000000000 .* + 0000000000000001 0000000000000000 0 0 1 ++ \[ 8\] \.shstrtab STRTAB 0000000000000000 [0-9a-f]+ ++ 000000000000004d 0000000000000000 0 0 1 + Key to Flags: + #... +diff --git a/gas/testsuite/gas/ia64/xdata-ilp32.d b/gas/testsuite/gas/ia64/xdata-ilp32.d +index 8c0bb30..e5dd507 100644 +--- a/gas/testsuite/gas/ia64/xdata-ilp32.d ++++ b/gas/testsuite/gas/ia64/xdata-ilp32.d +@@ -23,7 +23,7 @@ Section Headers: + \[13\] \.xreal\[4\] PROGBITS 00000000 [[:xdigit:]]+ 000020 00 A 0 0 16 + \[14\] \.xstr<1> PROGBITS 00000000 [[:xdigit:]]+ 000003 00 A 0 0 1 + \[15\] \.xstr\{2\} PROGBITS 00000000 [[:xdigit:]]+ 000004 00 A 0 0 1 +- \[16\] .shstrtab STRTAB 00000000 [[:xdigit:]]+ [[:xdigit:]]+ 00 0 0 1 +- \[17\] .symtab SYMTAB 00000000 [[:xdigit:]]+ [[:xdigit:]]+ 10 18 15 4 +- \[18\] .strtab STRTAB 00000000 [[:xdigit:]]+ [[:xdigit:]]+ 00 0 0 1 ++ \[16\] .symtab SYMTAB 00000000 [[:xdigit:]]+ [[:xdigit:]]+ 10 17 15 4 ++ \[17\] .strtab STRTAB 00000000 [[:xdigit:]]+ [[:xdigit:]]+ 00 0 0 1 ++ \[18\] .shstrtab STRTAB 00000000 [[:xdigit:]]+ [[:xdigit:]]+ 00 0 0 1 + #pass +diff --git a/gas/testsuite/gas/ia64/xdata.d b/gas/testsuite/gas/ia64/xdata.d +index dc23b78..eb12819 100644 +--- a/gas/testsuite/gas/ia64/xdata.d ++++ b/gas/testsuite/gas/ia64/xdata.d +@@ -38,10 +38,10 @@ Section Headers: + 0000000000000003 0000000000000000 A 0 0 1 + \[15\] \.xstr\{2\} PROGBITS 0000000000000000 [[:xdigit:]]+ + 0000000000000004 0000000000000000 A 0 0 1 +- \[16\] \.shstrtab STRTAB 0000000000000000 [[:xdigit:]]+ ++ \[16\] \.symtab SYMTAB 0000000000000000 [[:xdigit:]]+ ++ [[:xdigit:]]+ 0000000000000018 17 15 8 ++ \[17\] \.strtab STRTAB 0000000000000000 [[:xdigit:]]+ + [[:xdigit:]]+ 0000000000000000 0 0 1 +- \[17\] \.symtab SYMTAB 0000000000000000 [[:xdigit:]]+ +- [[:xdigit:]]+ 0000000000000018 18 15 8 +- \[18\] \.strtab STRTAB 0000000000000000 [[:xdigit:]]+ ++ \[18\] \.shstrtab STRTAB 0000000000000000 [[:xdigit:]]+ + [[:xdigit:]]+ 0000000000000000 0 0 1 + #pass +diff --git a/gas/testsuite/gas/mmix/bspec-1.d b/gas/testsuite/gas/mmix/bspec-1.d +index a18d242..4bbda8d 100644 +--- a/gas/testsuite/gas/mmix/bspec-1.d ++++ b/gas/testsuite/gas/mmix/bspec-1.d +@@ -4,7 +4,7 @@ There are 9 section headers, starting at offset .*: + +\[ 4\] \.MMIX\.spec_data\.2 +PROGBITS +0+ +0+44 + +0+4 +0+ +0 +0 +4 + +\[ 5\] \.rela\.MMIX\.spec_d +RELA +0+ +.* +- +0+18 +0+18 +I +7 +4 +8 ++ +0+18 +0+18 +I +6 +4 +8 + #... + Relocation section '\.rela\.MMIX\.spec_data\.2' at offset 0x[0-9a-f]+ contains 1 entries: + .* +diff --git a/gas/testsuite/gas/mmix/bspec-2.d b/gas/testsuite/gas/mmix/bspec-2.d +index a9ce03d..ab3afd3 100644 +--- a/gas/testsuite/gas/mmix/bspec-2.d ++++ b/gas/testsuite/gas/mmix/bspec-2.d +@@ -4,11 +4,11 @@ There are 11 section headers, starting at offset .*: + \[ 4\] \.MMIX\.spec_data\.2 PROGBITS 0+ 0+48 + 0+10 0+ 0 0 8 + \[ 5\] \.rela\.MMIX\.spec_d RELA 0+ .* +- +0+30 0+18 +I +9 +4 +8 ++ +0+30 0+18 +I +8 +4 +8 + \[ 6\] \.MMIX\.spec_data\.3 PROGBITS 0+ 0+58 + 0+8 0+ 0 0 8 + \[ 7\] \.rela\.MMIX\.spec_d RELA 0+ .* +- +0+18 +0+18 +I +9 +6 +8 ++ +0+18 +0+18 +I +8 +6 +8 + #... + Relocation section '\.rela\.MMIX\.spec_data\.2' at offset .* contains 2 entries: + .* +diff --git a/gas/testsuite/gas/mmix/byte-1.d b/gas/testsuite/gas/mmix/byte-1.d +index b6c2768..a77eb08 100644 +--- a/gas/testsuite/gas/mmix/byte-1.d ++++ b/gas/testsuite/gas/mmix/byte-1.d +@@ -12,12 +12,12 @@ Section Headers: + +0000000000000000 +0000000000000000 +WA +0 +0 +1 + +\[ 3\] \.bss +NOBITS +0000000000000000 +00000056 + +0000000000000000 +0000000000000000 +WA +0 +0 +1 +- +\[ 4\] \.shstrtab +STRTAB +0000000000000000 +[0-9a-f]+ +- +000000000000002c +0000000000000000 +0 +0 +1 +- +\[ 5\] \.symtab +SYMTAB +0000000000000000 .* +- +00000000000000c0 +0000000000000018 +6 +7 +8 +- +\[ 6\] \.strtab +STRTAB +0000000000000000 .* ++ +\[ 4\] \.symtab +SYMTAB +0000000000000000 .* ++ +00000000000000c0 +0000000000000018 +5 +7 +8 ++ +\[ 5\] \.strtab +STRTAB +0000000000000000 .* + +0000000000000018 +0000000000000000 +0 +0 +1 ++ +\[ 6\] \.shstrtab +STRTAB +0000000000000000 +[0-9a-f]+ ++ +000000000000002c +0000000000000000 +0 +0 +1 + Key to Flags: + #... + +diff --git a/gas/testsuite/gas/mmix/loc-1.d b/gas/testsuite/gas/mmix/loc-1.d +index e45b1d5..e46247d 100644 +--- a/gas/testsuite/gas/mmix/loc-1.d ++++ b/gas/testsuite/gas/mmix/loc-1.d +@@ -13,12 +13,12 @@ Section Headers: + +0000000000000004 +0000000000000000 +WA +0 +0 +4 + +\[ 3\] \.bss +NOBITS +0000000000000000 +00000064 + +0000000000000000 +0000000000000000 +WA +0 +0 +1 +- +\[ 4\] \.shstrtab +STRTAB +0000000000000000 +[0-9a-f]+ +- +000000000000002c +0000000000000000 +0 +0 +1 +- +\[ 5\] \.symtab +SYMTAB +0000000000000000 .* +- +00000000000000c0 +0000000000000018 +6 +6 +8 +- +\[ 6\] \.strtab +STRTAB +0000000000000000 .* ++ +\[ 4\] \.symtab +SYMTAB +0000000000000000 .* ++ +00000000000000c0 +0000000000000018 +5 +6 +8 ++ +\[ 5\] \.strtab +STRTAB +0000000000000000 .* + +000000000000002a +0000000000000000 +0 +0 +1 ++ +\[ 6\] \.shstrtab +STRTAB +0000000000000000 +[0-9a-f]+ ++ +000000000000002c +0000000000000000 +0 +0 +1 + Key to Flags: + #... + +diff --git a/gas/testsuite/gas/mmix/loc-2.d b/gas/testsuite/gas/mmix/loc-2.d +index b92cabb..8d7ec8b 100644 +--- a/gas/testsuite/gas/mmix/loc-2.d ++++ b/gas/testsuite/gas/mmix/loc-2.d +@@ -13,12 +13,12 @@ Section Headers: + +0000000000000000 +0000000000000000 +WA +0 +0 +1 + +\[ 3\] \.bss +NOBITS +0000000000000000 +00000048 + +0000000000000000 +0000000000000000 +WA +0 +0 +1 +- +\[ 4\] \.shstrtab +STRTAB +0000000000000000 +[0-9a-f]+ +- +000000000000002c +0000000000000000 +0 +0 +1 +- +\[ 5\] \.symtab +SYMTAB +0000000000000000 .* +- +0000000000000090 +0000000000000018 +6 +4 +8 +- +\[ 6\] \.strtab +STRTAB +0000000000000000 .* ++ +\[ 4\] \.symtab +SYMTAB +0000000000000000 .* ++ +0000000000000090 +0000000000000018 +5 +4 +8 ++ +\[ 5\] \.strtab +STRTAB +0000000000000000 .* + +000000000000001a +0000000000000000 +0 +0 +1 ++ +\[ 6\] \.shstrtab +STRTAB +0000000000000000 +[0-9a-f]+ ++ +000000000000002c +0000000000000000 +0 +0 +1 + Key to Flags: + #... + +diff --git a/gas/testsuite/gas/mmix/loc-3.d b/gas/testsuite/gas/mmix/loc-3.d +index 2c477db..14a68fa 100644 +--- a/gas/testsuite/gas/mmix/loc-3.d ++++ b/gas/testsuite/gas/mmix/loc-3.d +@@ -12,12 +12,12 @@ Section Headers: + +0000000000000008 +0000000000000000 +WA +0 +0 +4 + +\[ 3\] \.bss +NOBITS +0000000000000000 +00000054 + +0000000000000000 +0000000000000000 +WA +0 +0 +1 +- +\[ 4\] \.shstrtab +STRTAB +0000000000000000 +[0-9a-f]+ +- +000000000000002c +0000000000000000 +0 +0 +1 +- +\[ 5\] \.symtab +SYMTAB +0000000000000000 .* +- +00000000000000c0 +0000000000000018 +6 +5 +8 +- +\[ 6\] \.strtab +STRTAB +0000000000000000 .* ++ +\[ 4\] \.symtab +SYMTAB +0000000000000000 .* ++ +00000000000000c0 +0000000000000018 +5 +5 +8 ++ +\[ 5\] \.strtab +STRTAB +0000000000000000 .* + +000000000000002e +0000000000000000 +0 +0 +1 ++ +\[ 6\] \.shstrtab +STRTAB +0000000000000000 +[0-9a-f]+ ++ +000000000000002c +0000000000000000 +0 +0 +1 + Key to Flags: + #... + +diff --git a/gas/testsuite/gas/mmix/loc-4.d b/gas/testsuite/gas/mmix/loc-4.d +index 1efc084..935cc18 100644 +--- a/gas/testsuite/gas/mmix/loc-4.d ++++ b/gas/testsuite/gas/mmix/loc-4.d +@@ -12,12 +12,12 @@ Section Headers: + +0000000000000004 +0000000000000000 +WA +0 +0 +4 + +\[ 3\] \.bss +NOBITS +0000000000000000 +0000005c + +0000000000000000 +0000000000000000 +WA +0 +0 +1 +- +\[ 4\] \.shstrtab +STRTAB +0000000000000000 +[0-9a-f]+ +- +000000000000002c +0000000000000000 +0 +0 +1 +- +\[ 5\] \.symtab +SYMTAB +0000000000000000 .* +- +00000000000000c0 +0000000000000018 +6 +5 +8 +- +\[ 6\] \.strtab +STRTAB +0000000000000000 .* ++ +\[ 4\] \.symtab +SYMTAB +0000000000000000 .* ++ +00000000000000c0 +0000000000000018 +5 +5 +8 ++ +\[ 5\] \.strtab +STRTAB +0000000000000000 .* + +000000000000003b +0000000000000000 +0 +0 +1 ++ +\[ 6\] \.shstrtab +STRTAB +0000000000000000 +[0-9a-f]+ ++ +000000000000002c +0000000000000000 +0 +0 +1 + Key to Flags: + #... + +diff --git a/gas/testsuite/gas/mmix/loc-5.d b/gas/testsuite/gas/mmix/loc-5.d +index fa80a86..a8e7545 100644 +--- a/gas/testsuite/gas/mmix/loc-5.d ++++ b/gas/testsuite/gas/mmix/loc-5.d +@@ -12,12 +12,12 @@ Section Headers: + +0+24 +0+ +WA +0 +0 +4 + +\[ 3\] \.bss +NOBITS +0+ +0+6c + +0+ +0+ +WA +0 +0 +1 +- +\[ 4\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ +- +0+2c +0+ +0 +0 +1 +- +\[ 5\] \.symtab +SYMTAB +0+ .* +- +0+c0 +0+18 +6 +6 +8 +- +\[ 6\] \.strtab +STRTAB +0+ .* ++ +\[ 4\] \.symtab +SYMTAB +0+ .* ++ +0+c0 +0+18 +5 +6 +8 ++ +\[ 5\] \.strtab +STRTAB +0+ .* + +0+27 +0+ +0 +0 +1 ++ +\[ 6\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ ++ +0+2c +0+ +0 +0 +1 + Key to Flags: + #... + +diff --git a/gas/testsuite/gas/tic6x/scomm-directive-4.d b/gas/testsuite/gas/tic6x/scomm-directive-4.d +index 7822e8f..219673d 100644 +--- a/gas/testsuite/gas/tic6x/scomm-directive-4.d ++++ b/gas/testsuite/gas/tic6x/scomm-directive-4.d +@@ -12,9 +12,9 @@ Section Headers: + \[ 2\] \.data PROGBITS 00000000 000034 000000 00 WA 0 0 1 + \[ 3\] \.bss NOBITS 00000000 000034 000000 00 WA 0 0 1 + \[ 4\] \.c6xabi\.attribute C6000_ATTRIBUTE 00000000 000034 000013 00 0 0 1 +- \[ 5\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 00003f 00 0 0 1 +- \[ 6\] \.symtab SYMTAB 00000000 [0-9a-f]+ 0000d0 10 7 5 4 +- \[ 7\] \.strtab STRTAB 00000000 [0-9a-f]+ 00001d 00 0 0 1 ++ \[ 5\] \.symtab SYMTAB 00000000 [0-9a-f]+ 0000d0 10 6 5 4 ++ \[ 6\] \.strtab STRTAB 00000000 [0-9a-f]+ 00001d 00 0 0 1 ++ \[ 7\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 00003f 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-alpha/tlsbin.rd b/ld/testsuite/ld-alpha/tlsbin.rd +index 2184e5e..21fb11a 100644 +--- a/ld/testsuite/ld-alpha/tlsbin.rd ++++ b/ld/testsuite/ld-alpha/tlsbin.rd +@@ -24,9 +24,9 @@ Section Headers: + +\[[ 0-9]+\] .tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 WAT +0 +0 +1 + +\[[ 0-9]+\] .dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 10 +WA +4 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + #... + + Elf file type is EXEC \(Executable file\) +diff --git a/ld/testsuite/ld-alpha/tlsbinr.rd b/ld/testsuite/ld-alpha/tlsbinr.rd +index 0329ba9..8b7b76a 100644 +--- a/ld/testsuite/ld-alpha/tlsbinr.rd ++++ b/ld/testsuite/ld-alpha/tlsbinr.rd +@@ -24,9 +24,9 @@ Section Headers: + +\[[ 0-9]+\] \.tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ WAT +0 +0 +1 + +\[[ 0-9]+\] \.dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 10 +WA +4 +0 +8 + +\[[ 0-9]+\] \.got +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ +WA +0 +0 +8 +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + #... + + Elf file type is EXEC \(Executable file\) +diff --git a/ld/testsuite/ld-alpha/tlspic.rd b/ld/testsuite/ld-alpha/tlspic.rd +index 7a97847..f1fb974 100644 +--- a/ld/testsuite/ld-alpha/tlspic.rd ++++ b/ld/testsuite/ld-alpha/tlspic.rd +@@ -23,9 +23,9 @@ Section Headers: + +\[[ 0-9]+\] .tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ WAT +0 +0 +1 + +\[[ 0-9]+\] .dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 10 +WA +3 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + #... + + Elf file type is DYN \(Shared object file\) +diff --git a/ld/testsuite/ld-cris/libdso-2.d b/ld/testsuite/ld-cris/libdso-2.d +index 3b4777a..aa4a7c8 100644 +--- a/ld/testsuite/ld-cris/libdso-2.d ++++ b/ld/testsuite/ld-cris/libdso-2.d +@@ -21,9 +21,9 @@ There are 13 section headers.* + +\[ 7\] \.text +PROGBITS .* + +\[ 8\] \.dynamic +DYNAMIC +.* + +\[ 9\] \.got +PROGBITS .* +- +\[10\] \.shstrtab +STRTAB +.* +- +\[11\] \.symtab +SYMTAB +.* +- +\[12\] \.strtab +STRTAB +.* ++ +\[10\] \.symtab +SYMTAB +.* ++ +\[11\] \.strtab +STRTAB +.* ++ +\[12\] \.shstrtab +STRTAB +.* + #... + Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 1 entries: + #... +diff --git a/ld/testsuite/ld-i386/nogot1.d b/ld/testsuite/ld-i386/nogot1.d +index a6c8832..018c24d 100644 +--- a/ld/testsuite/ld-i386/nogot1.d ++++ b/ld/testsuite/ld-i386/nogot1.d +@@ -4,5 +4,6 @@ + + #... + [ ]*\[.*\][ ]+\.dynamic[ ]+DYNAMIC.* ++#... + [ ]*\[.*\][ ]+.*STRTAB.* + #pass +diff --git a/ld/testsuite/ld-i386/pr12718.d b/ld/testsuite/ld-i386/pr12718.d +index 87905c3..ec51540 100644 +--- a/ld/testsuite/ld-i386/pr12718.d ++++ b/ld/testsuite/ld-i386/pr12718.d +@@ -9,8 +9,8 @@ Section Headers: + +\[Nr\] Name +Type +Addr +Off +Size +ES +Flg +Lk +Inf +Al + +\[ 0\] +NULL +0+ +0+ +0+ +0+ +0 +0 +0 + +\[ 1\] +.text +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +000006 00 +AX +0 +0 +1 +- +\[ 2\] +.shstrtab +STRTAB +0+ +[0-9a-f]+ +[0-9a-f]+ +0+ +0 +0 +1 +- +\[ 3\] +.symtab +SYMTAB +0+ +[0-9a-f]+ +[0-9a-f]+ 10 +4 +[0-9] +4 +- +\[ 4\] +.strtab +STRTAB +0+ +[0-9a-f]+ +[0-9a-f]+ 00 +0 +0 +1 ++ +\[ 2\] +.symtab +SYMTAB +0+ +[0-9a-f]+ +[0-9a-f]+ 10 +3 +[0-9] +4 ++ +\[ 3\] +.strtab +STRTAB +0+ +[0-9a-f]+ +[0-9a-f]+ 00 +0 +0 +1 ++ +\[ 4\] +.shstrtab +STRTAB +0+ +[0-9a-f]+ +[0-9a-f]+ +0+ +0 +0 +1 + Key to Flags: + #pass +diff --git a/ld/testsuite/ld-i386/pr12921.d b/ld/testsuite/ld-i386/pr12921.d +index c72b04c..e49079b 100644 +--- a/ld/testsuite/ld-i386/pr12921.d ++++ b/ld/testsuite/ld-i386/pr12921.d +@@ -11,8 +11,8 @@ Section Headers: + +\[ 1\] .text +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+1 00 +AX +0 +0 +4096 + +\[ 2\] .data +PROGBITS +[0-9a-f]+ +[0-9a-f]+000 +0+20 +00 +WA +0 +0 +4096 + +\[ 3\] .bss +NOBITS +[0-9a-f]+ +[0-9a-f]+020 +0+10000 +00 +WA +0 +0 +4096 +- +\[ 4\] .shstrtab +STRTAB +0+ +[0-9a-f]+ +0+2c +00 +0 +0 +1 +- +\[ 5\] .symtab +SYMTAB +0+ +[0-9a-f]+ +[0-9a-f]+ +10 +6 +[0-9] +4 +- +\[ 6\] .strtab +STRTAB +0+ +[0-9a-f]+ +[0-9a-f]+ +00 +0 +0 +1 ++ +\[ 4\] .symtab +SYMTAB +0+ +[0-9a-f]+ +[0-9a-f]+ +10 +5 +[0-9] +4 ++ +\[ 5\] .strtab +STRTAB +0+ +[0-9a-f]+ +[0-9a-f]+ +00 +0 +0 +1 ++ +\[ 6\] .shstrtab +STRTAB +0+ +[0-9a-f]+ +0+2c +00 +0 +0 +1 + Key to Flags: + #pass +diff --git a/ld/testsuite/ld-i386/tlsbin-nacl.rd b/ld/testsuite/ld-i386/tlsbin-nacl.rd +index 1e1cf7c..89a0673 100644 +--- a/ld/testsuite/ld-i386/tlsbin-nacl.rd ++++ b/ld/testsuite/ld-i386/tlsbin-nacl.rd +@@ -23,9 +23,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +DYNAMIC +0*10031060 .* + +\[[ 0-9]+\] \.got +PROGBITS +0*10031100 .* + +\[[ 0-9]+\] \.got\.plt +PROGBITS +0*10031124 .* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlsbin.rd b/ld/testsuite/ld-i386/tlsbin.rd +index 12b3e81..23fffd1 100644 +--- a/ld/testsuite/ld-i386/tlsbin.rd ++++ b/ld/testsuite/ld-i386/tlsbin.rd +@@ -23,9 +23,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +DYNAMIC +0+804a060 .* + +\[[ 0-9]+\] \.got +PROGBITS +0+804a100 .* + +\[[ 0-9]+\] \.got\.plt +PROGBITS +0+804a124 .* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlsbin2-nacl.rd b/ld/testsuite/ld-i386/tlsbin2-nacl.rd +index b23bfe0..0011716 100644 +--- a/ld/testsuite/ld-i386/tlsbin2-nacl.rd ++++ b/ld/testsuite/ld-i386/tlsbin2-nacl.rd +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +DYNAMIC +0*10031060 .* + +\[[ 0-9]+\] \.got +PROGBITS +0*100310e0 .* + +\[[ 0-9]+\] \.got\.plt +PROGBITS +0*10031108 .* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlsbin2.rd b/ld/testsuite/ld-i386/tlsbin2.rd +index 05d4ddb..e34d167 100644 +--- a/ld/testsuite/ld-i386/tlsbin2.rd ++++ b/ld/testsuite/ld-i386/tlsbin2.rd +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +DYNAMIC +0+804a060 .* + +\[[ 0-9]+\] \.got +PROGBITS +0+804a0e0 .* + +\[[ 0-9]+\] \.got\.plt +PROGBITS +0+804a108 .* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlsbindesc-nacl.rd b/ld/testsuite/ld-i386/tlsbindesc-nacl.rd +index 51cffc0..39c60a5 100644 +--- a/ld/testsuite/ld-i386/tlsbindesc-nacl.rd ++++ b/ld/testsuite/ld-i386/tlsbindesc-nacl.rd +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +DYNAMIC +0*10031060 .* + +\[[ 0-9]+\] \.got +PROGBITS +0*100310e0 .* + +\[[ 0-9]+\] \.got\.plt +PROGBITS +0*10031104 .* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlsbindesc.rd b/ld/testsuite/ld-i386/tlsbindesc.rd +index 7f7194c..7cc85f1 100644 +--- a/ld/testsuite/ld-i386/tlsbindesc.rd ++++ b/ld/testsuite/ld-i386/tlsbindesc.rd +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +DYNAMIC +0+804a060 .* + +\[[ 0-9]+\] \.got +PROGBITS +0+804a0e0 .* + +\[[ 0-9]+\] \.got\.plt +PROGBITS +0+804a104 .* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlsdesc-nacl.rd b/ld/testsuite/ld-i386/tlsdesc-nacl.rd +index b28744f..20c8ea2 100644 +--- a/ld/testsuite/ld-i386/tlsdesc-nacl.rd ++++ b/ld/testsuite/ld-i386/tlsdesc-nacl.rd +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +.* + +\[[ 0-9]+\] \.got +.* + +\[[ 0-9]+\] \.got.plt +.* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlsdesc.rd b/ld/testsuite/ld-i386/tlsdesc.rd +index 68695ff..3486847 100644 +--- a/ld/testsuite/ld-i386/tlsdesc.rd ++++ b/ld/testsuite/ld-i386/tlsdesc.rd +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +.* + +\[[ 0-9]+\] \.got +.* + +\[[ 0-9]+\] \.got.plt +.* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlsgdesc-nacl.rd b/ld/testsuite/ld-i386/tlsgdesc-nacl.rd +index ba5fa62..407bf2c 100644 +--- a/ld/testsuite/ld-i386/tlsgdesc-nacl.rd ++++ b/ld/testsuite/ld-i386/tlsgdesc-nacl.rd +@@ -19,9 +19,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +.* + +\[[ 0-9]+\] \.got +.* + +\[[ 0-9]+\] \.got.plt +.* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlsgdesc.rd b/ld/testsuite/ld-i386/tlsgdesc.rd +index 929ffa2..269cede 100644 +--- a/ld/testsuite/ld-i386/tlsgdesc.rd ++++ b/ld/testsuite/ld-i386/tlsgdesc.rd +@@ -19,9 +19,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +.* + +\[[ 0-9]+\] \.got +.* + +\[[ 0-9]+\] \.got.plt +.* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlsnopic-nacl.rd b/ld/testsuite/ld-i386/tlsnopic-nacl.rd +index b14164a..15e7eea 100644 +--- a/ld/testsuite/ld-i386/tlsnopic-nacl.rd ++++ b/ld/testsuite/ld-i386/tlsnopic-nacl.rd +@@ -19,9 +19,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +DYNAMIC +0*10010284 .* + +\[[ 0-9]+\] \.got +PROGBITS +0*10010304 .* + +\[[ 0-9]+\] \.got.plt +PROGBITS +0*1001031c .* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlsnopic.rd b/ld/testsuite/ld-i386/tlsnopic.rd +index b754158..b60fb1d 100644 +--- a/ld/testsuite/ld-i386/tlsnopic.rd ++++ b/ld/testsuite/ld-i386/tlsnopic.rd +@@ -19,9 +19,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +DYNAMIC +0+20f4 .* + +\[[ 0-9]+\] \.got +PROGBITS +0+2174 .* + +\[[ 0-9]+\] \.got.plt +PROGBITS +0+218c .* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlspic-nacl.rd b/ld/testsuite/ld-i386/tlspic-nacl.rd +index b7d3e35..9645e35 100644 +--- a/ld/testsuite/ld-i386/tlspic-nacl.rd ++++ b/ld/testsuite/ld-i386/tlspic-nacl.rd +@@ -22,9 +22,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +.* + +\[[ 0-9]+\] \.got +.* + +\[[ 0-9]+\] \.got.plt +.* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlspic.rd b/ld/testsuite/ld-i386/tlspic.rd +index f693760..6b915e5 100644 +--- a/ld/testsuite/ld-i386/tlspic.rd ++++ b/ld/testsuite/ld-i386/tlspic.rd +@@ -22,9 +22,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +.* + +\[[ 0-9]+\] \.got +.* + +\[[ 0-9]+\] \.got.plt +.* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlspic2-nacl.rd b/ld/testsuite/ld-i386/tlspic2-nacl.rd +index 560e840..5fb6ba6 100644 +--- a/ld/testsuite/ld-i386/tlspic2-nacl.rd ++++ b/ld/testsuite/ld-i386/tlspic2-nacl.rd +@@ -20,9 +20,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +.* + +\[[ 0-9]+\] \.got +.* + +\[[ 0-9]+\] \.got.plt +.* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-i386/tlspic2.rd b/ld/testsuite/ld-i386/tlspic2.rd +index a135547..ab00063 100644 +--- a/ld/testsuite/ld-i386/tlspic2.rd ++++ b/ld/testsuite/ld-i386/tlspic2.rd +@@ -20,9 +20,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +.* + +\[[ 0-9]+\] \.got +.* + +\[[ 0-9]+\] \.got.plt +.* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-ia64/tlsbin.rd b/ld/testsuite/ld-ia64/tlsbin.rd +index ab2dacd..08c6a59 100644 +--- a/ld/testsuite/ld-ia64/tlsbin.rd ++++ b/ld/testsuite/ld-ia64/tlsbin.rd +@@ -25,9 +25,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +60+1[0-9a-f]+ 0+1[0-9a-f]+ 0+150 10 +WA +4 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +60+1318 0+1318 0+48 00 WAp +0 +0 +8 + +\[[ 0-9]+\] .IA_64.pltoff +.* +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + #... + + Elf file type is EXEC \(Executable file\) +diff --git a/ld/testsuite/ld-ia64/tlspic.rd b/ld/testsuite/ld-ia64/tlspic.rd +index 9666f86..cfcf8ed 100644 +--- a/ld/testsuite/ld-ia64/tlspic.rd ++++ b/ld/testsuite/ld-ia64/tlspic.rd +@@ -24,9 +24,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+11[0-9a-f]+ 0+1[0-9a-f]+ 0+140 10 +WA +3 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+112d8 0+12d8 0+50 00 WAp +0 +0 +8 + +\[[ 0-9]+\] .IA_64.pltoff +.* +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-10.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-10.d +index e3a1c9c..8827e41 100644 +--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-10.d ++++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-10.d +@@ -22,7 +22,7 @@ ELF Header: + Number of program headers: 0 + Size of section headers: 40 \(bytes\) + Number of section headers: 11 +- Section header string table index: 8 ++ Section header string table index: 10 + + Attribute Section: gnu + File Attributes +diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-50.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-50.d +index 5dc46d3..1fcab63 100644 +--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-50.d ++++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-50.d +@@ -22,7 +22,7 @@ ELF Header: + Number of program headers: 0 + Size of section headers: 40 \(bytes\) + Number of section headers: 11 +- Section header string table index: 8 ++ Section header string table index: 10 + Attribute Section: gnu + File Attributes + Tag_GNU_MIPS_ABI_FP: Hard float \(32-bit CPU, Any FPU\) +diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-60.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-60.d +index ea80c18..48a9839 100644 +--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-60.d ++++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-60.d +@@ -22,7 +22,7 @@ ELF Header: + Number of program headers: 0 + Size of section headers: 40 \(bytes\) + Number of section headers: 11 +- Section header string table index: 8 ++ Section header string table index: 10 + Attribute Section: gnu + File Attributes + Tag_GNU_MIPS_ABI_FP: Hard float \(32-bit CPU, 64-bit FPU\) +diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-70.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-70.d +index edbd61f..ca17421 100644 +--- a/ld/testsuite/ld-mips-elf/attr-gnu-4-70.d ++++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-70.d +@@ -22,7 +22,7 @@ ELF Header: + Number of program headers: 0 + Size of section headers: 40 \(bytes\) + Number of section headers: 11 +- Section header string table index: 8 ++ Section header string table index: 10 + Attribute Section: gnu + File Attributes + Tag_GNU_MIPS_ABI_FP: Hard float compat \(32-bit CPU, 64-bit FPU\) +diff --git a/ld/testsuite/ld-mmix/bspec1.d b/ld/testsuite/ld-mmix/bspec1.d +index 6440bbe..3d07d2d 100644 +--- a/ld/testsuite/ld-mmix/bspec1.d ++++ b/ld/testsuite/ld-mmix/bspec1.d +@@ -14,12 +14,12 @@ Section Headers: + +0+4 +0+ +AX +0 +0 +4 + +\[ 2\] \.MMIX\.spec_data\.2 PROGBITS +0+ +0+7c + +0+4 +0+ +0 +0 +4 +- +\[ 3\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ +- +0+33 +0+ +0 +0 +1 +- +\[ 4\] \.symtab +SYMTAB +0+ .* +- +0+d8 +0+18 +5 +3 +8 +- +\[ 5\] \.strtab +STRTAB +0+ .* ++ +\[ 3\] \.symtab +SYMTAB +0+ .* ++ +0+d8 +0+18 +4 +3 +8 ++ +\[ 4\] \.strtab +STRTAB +0+ .* + +0+26 +0+ +0 +0 +1 ++ +\[ 5\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ ++ +0+33 +0+ +0 +0 +1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-mmix/bspec2.d b/ld/testsuite/ld-mmix/bspec2.d +index e881b08..b18fe47 100644 +--- a/ld/testsuite/ld-mmix/bspec2.d ++++ b/ld/testsuite/ld-mmix/bspec2.d +@@ -19,12 +19,12 @@ Section Headers: + +0+8 +0+ +0 +0 +4 + +\[ 3\] \.MMIX\.spec_data\.3 PROGBITS +0+ +0+84 + +0+4 +0+ +0 +0 +4 +- +\[ 4\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ +- +0+45 +0+ +0 +0 +1 +- +\[ 5\] \.symtab +SYMTAB +0+ .* +- +0+108 +0+18 +6 +4 +8 +- +\[ 6\] \.strtab +STRTAB +0+ .* ++ +\[ 4\] \.symtab +SYMTAB +0+ .* ++ +0+108 +0+18 +5 +4 +8 ++ +\[ 5\] \.strtab +STRTAB +0+ .* + +0+2b +0+ +0 +0 +1 ++ +\[ 6\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ ++ +0+45 +0+ +0 +0 +1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-mmix/local1.d b/ld/testsuite/ld-mmix/local1.d +index 478d17b..41a67c2 100644 +--- a/ld/testsuite/ld-mmix/local1.d ++++ b/ld/testsuite/ld-mmix/local1.d +@@ -21,12 +21,12 @@ Section Headers: + +0+8 +0+ +AX +0 +0 +4 + +\[ 2\] \.MMIX\.reg_content PROGBITS +0+7e8 +0+80 + +0+10 +0+ +W +0 +0 +1 +- +\[ 3\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ +- +0+34 +0+ +0 +0 +1 +- +\[ 4\] \.symtab +SYMTAB +0+ +[0-9a-f]+ +- +[0-9a-f]+ +0+18 +5 +[0-9] +8 +- +\[ 5\] \.strtab +STRTAB +0+ +[0-9a-f]+ ++ +\[ 3\] \.symtab +SYMTAB +0+ +[0-9a-f]+ ++ +[0-9a-f]+ +0+18 +4 +[0-9] +8 ++ +\[ 4\] \.strtab +STRTAB +0+ +[0-9a-f]+ + +[0-9a-f]+ +0+ +0 +0 +1 ++ +\[ 5\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ ++ +0+34 +0+ +0 +0 +1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-mmix/local3.d b/ld/testsuite/ld-mmix/local3.d +index 9b9001a..74840d3 100644 +--- a/ld/testsuite/ld-mmix/local3.d ++++ b/ld/testsuite/ld-mmix/local3.d +@@ -19,12 +19,12 @@ Section Headers: + +0+8 +0+ +AX +0 +0 +4 + +\[ 2\] \.MMIX\.reg_content PROGBITS +0+7e8 +0+80 + +0+10 +0+ +W +0 +0 +1 +- +\[ 3\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ +- +0+34 +0+ +0 +0 +1 +- +\[ 4\] \.symtab +SYMTAB +0+ +[0-9a-f]+ +- +[0-9a-f]+ +0+18 +5 +[0-9] +8 +- +\[ 5\] \.strtab +STRTAB +0+ +[0-9a-f]+ ++ +\[ 3\] \.symtab +SYMTAB +0+ +[0-9a-f]+ ++ +[0-9a-f]+ +0+18 +4 +[0-9] +8 ++ +\[ 4\] \.strtab +STRTAB +0+ +[0-9a-f]+ + +[0-9a-f]+ +0+ +0 +0 +1 ++ +\[ 5\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ ++ +0+34 +0+ +0 +0 +1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-mmix/local5.d b/ld/testsuite/ld-mmix/local5.d +index 93bacd3..ae81364 100644 +--- a/ld/testsuite/ld-mmix/local5.d ++++ b/ld/testsuite/ld-mmix/local5.d +@@ -20,12 +20,12 @@ Section Headers: + +0+c +0+ +AX +0 +0 +4 + +\[ 2\] \.MMIX\.reg_content PROGBITS +0+7e8 +0+84 + +0+10 +0+ +W +0 +0 +1 +- +\[ 3\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ +- +0+34 +0+ +0 +0 +1 +- +\[ 4\] \.symtab +SYMTAB +0+ +[0-9a-f]+ +- +[0-9a-f]+ +0+18 +5 +[0-9] +8 +- +\[ 5\] \.strtab +STRTAB +0+ +[0-9a-f]+ ++ +\[ 3\] \.symtab +SYMTAB +0+ +[0-9a-f]+ ++ +[0-9a-f]+ +0+18 +4 +[0-9] +8 ++ +\[ 4\] \.strtab +STRTAB +0+ +[0-9a-f]+ + +[0-9a-f]+ +0+ +0 +0 +1 ++ +\[ 5\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ ++ +0+34 +0+ +0 +0 +1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-mmix/local7.d b/ld/testsuite/ld-mmix/local7.d +index 1495bf1..6d80cc9 100644 +--- a/ld/testsuite/ld-mmix/local7.d ++++ b/ld/testsuite/ld-mmix/local7.d +@@ -21,12 +21,12 @@ Section Headers: + +0+c +0+ +AX +0 +0 +4 + +\[ 2\] \.MMIX\.reg_content PROGBITS +0+7e8 +0+84 + +0+10 +0+ +W +0 +0 +1 +- +\[ 3\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ +- +0+34 +0+ +0 +0 +1 +- +\[ 4\] \.symtab +SYMTAB +0+ +[0-9a-f]+ +- +[0-9a-f]+ +0+18 +5 +[0-9] +8 +- +\[ 5\] \.strtab +STRTAB +0+ +[0-9a-f]+ ++ +\[ 3\] \.symtab +SYMTAB +0+ +[0-9a-f]+ ++ +[0-9a-f]+ +0+18 +4 +[0-9] +8 ++ +\[ 4\] \.strtab +STRTAB +0+ +[0-9a-f]+ + +[0-9a-f]+ +0+ +0 +0 +1 ++ +\[ 5\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ ++ +0+34 +0+ +0 +0 +1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-mmix/undef-3.d b/ld/testsuite/ld-mmix/undef-3.d +index 94eeeaa..6afb52b 100644 +--- a/ld/testsuite/ld-mmix/undef-3.d ++++ b/ld/testsuite/ld-mmix/undef-3.d +@@ -11,11 +11,11 @@ Section Headers: + +0+ +0+ +0 +0 +0 + +\[ 1\] \.text +PROGBITS +0+ +0+78 + +0+4 +0+ +AX +0 +0 +4 +- +\[ 2\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ ++ +\[ 2\] \.symtab +SYMTAB +0+ .* ++ +0+a8 +0+18 +3 +2 +8 ++ +\[ 3\] \.strtab +STRTAB +0+ .* + +0+21 +0+ +0 +0 +1 +- +\[ 3\] \.symtab +SYMTAB +0+ .* +- +0+a8 +0+18 +4 +2 +8 +- +\[ 4\] \.strtab +STRTAB +0+ .* ++ +\[ 4\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ + +0+21 +0+ +0 +0 +1 + Key to Flags: + #... +diff --git a/ld/testsuite/ld-powerpc/tlsexe.r b/ld/testsuite/ld-powerpc/tlsexe.r +index db72ad7..11da4a8 100644 +--- a/ld/testsuite/ld-powerpc/tlsexe.r ++++ b/ld/testsuite/ld-powerpc/tlsexe.r +@@ -23,9 +23,9 @@ Section Headers: + +\[[ 0-9]+\] \.opd .* + +\[[ 0-9]+\] \.got +PROGBITS .* 0+30 08 +WA +0 +0 +256 + +\[[ 0-9]+\] \.plt +.* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + #... + + Elf file type is EXEC \(Executable file\) +diff --git a/ld/testsuite/ld-powerpc/tlsexetoc.r b/ld/testsuite/ld-powerpc/tlsexetoc.r +index 56716bb..5c4a490 100644 +--- a/ld/testsuite/ld-powerpc/tlsexetoc.r ++++ b/ld/testsuite/ld-powerpc/tlsexetoc.r +@@ -23,9 +23,9 @@ Section Headers: + +\[[ 0-9]+\] \.opd .* + +\[[ 0-9]+\] \.got +PROGBITS .* 0+58 08 +WA +0 +0 +256 + +\[[ 0-9]+\] \.plt +.* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + #... + + Elf file type is EXEC \(Executable file\) +diff --git a/ld/testsuite/ld-powerpc/tlsso.r b/ld/testsuite/ld-powerpc/tlsso.r +index fd3002b..4ba6173 100644 +--- a/ld/testsuite/ld-powerpc/tlsso.r ++++ b/ld/testsuite/ld-powerpc/tlsso.r +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] \.opd .* + +\[[ 0-9]+\] \.got .* + +\[[ 0-9]+\] \.plt .* +- +\[[ 0-9]+\] \.shstrtab .* + +\[[ 0-9]+\] \.symtab .* + +\[[ 0-9]+\] \.strtab .* ++ +\[[ 0-9]+\] \.shstrtab .* + #... + + Elf file type is DYN \(Shared object file\) +diff --git a/ld/testsuite/ld-s390/tlsbin.rd b/ld/testsuite/ld-s390/tlsbin.rd +index 32c883a..b45fc29 100644 +--- a/ld/testsuite/ld-s390/tlsbin.rd ++++ b/ld/testsuite/ld-s390/tlsbin.rd +@@ -22,9 +22,9 @@ Section Headers: + +\[[ 0-9]+\] .tbss +NOBITS .* 0+40 00 WAT +0 +0 +1 + +\[[ 0-9]+\] .dynamic +DYNAMIC .* + +\[[ 0-9]+\] .got +PROGBITS .* +- +\[[ 0-9]+\] .shstrtab .* + +\[[ 0-9]+\] .symtab .* + +\[[ 0-9]+\] .strtab .* ++ +\[[ 0-9]+\] .shstrtab .* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-s390/tlsbin_64.rd b/ld/testsuite/ld-s390/tlsbin_64.rd +index 38d5789..f7caa16 100644 +--- a/ld/testsuite/ld-s390/tlsbin_64.rd ++++ b/ld/testsuite/ld-s390/tlsbin_64.rd +@@ -22,9 +22,9 @@ Section Headers: + +\[[ 0-9]+\] .tbss +NOBITS .* 0+40 00 WAT +0 +0 +1 + +\[[ 0-9]+\] .dynamic +DYNAMIC .* + +\[[ 0-9]+\] .got +PROGBITS .* +- +\[[ 0-9]+\] .shstrtab .* + +\[[ 0-9]+\] .symtab .* + +\[[ 0-9]+\] .strtab .* ++ +\[[ 0-9]+\] .shstrtab .* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-s390/tlspic.rd b/ld/testsuite/ld-s390/tlspic.rd +index 07d29c2..5159863 100644 +--- a/ld/testsuite/ld-s390/tlspic.rd ++++ b/ld/testsuite/ld-s390/tlspic.rd +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] .tbss +NOBITS .* 0+20 00 WAT +0 +0 +1 + +\[[ 0-9]+\] .dynamic +DYNAMIC .* + +\[[ 0-9]+\] .got +PROGBITS .* +- +\[[ 0-9]+\] .shstrtab .* + +\[[ 0-9]+\] .symtab .* + +\[[ 0-9]+\] .strtab .* ++ +\[[ 0-9]+\] .shstrtab .* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-s390/tlspic_64.rd b/ld/testsuite/ld-s390/tlspic_64.rd +index 6197f8a..7f8dc1b 100644 +--- a/ld/testsuite/ld-s390/tlspic_64.rd ++++ b/ld/testsuite/ld-s390/tlspic_64.rd +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] .tbss +NOBITS .* 0+20 00 WAT +0 +0 +1 + +\[[ 0-9]+\] .dynamic +DYNAMIC .* + +\[[ 0-9]+\] .got +PROGBITS .* +- +\[[ 0-9]+\] .shstrtab .* + +\[[ 0-9]+\] .symtab .* + +\[[ 0-9]+\] .strtab .* ++ +\[[ 0-9]+\] .shstrtab .* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-sh/sh64/crange1.rd b/ld/testsuite/ld-sh/sh64/crange1.rd +index e22d502..83c1e9b 100644 +--- a/ld/testsuite/ld-sh/sh64/crange1.rd ++++ b/ld/testsuite/ld-sh/sh64/crange1.rd +@@ -7,9 +7,9 @@ Section Headers: + +\[ 2\] \.text +PROGBITS +00001004 000084 000018 00 AXp +0 +0 +4 + +\[ 3\] \.stack +PROGBITS +00080000 000100 000004 00 +WA +0 +0 +1 + +\[ 4\] \.cranges +LOUSER\+1 +00000000 000104 00001e 00 +W +0 +0 +1 +- +\[ 5\] \.shstrtab +STRTAB +.* +- +\[ 6\] \.symtab +SYMTAB +.* +- +\[ 7\] \.strtab +STRTAB +.* ++ +\[ 5\] \.symtab +SYMTAB +.* ++ +\[ 6\] \.strtab +STRTAB +.* ++ +\[ 7\] \.shstrtab +STRTAB +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-sh/sh64/crange2.rd b/ld/testsuite/ld-sh/sh64/crange2.rd +index 5074087..e7416e1 100644 +--- a/ld/testsuite/ld-sh/sh64/crange2.rd ++++ b/ld/testsuite/ld-sh/sh64/crange2.rd +@@ -7,9 +7,9 @@ Section Headers: + +\[ 2\] \.text +PROGBITS +00001004 000084 00005c 00 AXp +0 +0 +4 + +\[ 3\] \.stack +PROGBITS +00080000 000100 000004 00 +WA +0 +0 +1 + +\[ 4\] \.cranges +LOUSER\+1 +00000000 000104 000046 00 +W +0 +0 +1 +- +\[ 5\] \.shstrtab +STRTAB +.* +- +\[ 6\] \.symtab +SYMTAB +.* +- +\[ 7\] \.strtab +STRTAB +.* ++ +\[ 5\] \.symtab +SYMTAB +.* ++ +\[ 6\] \.strtab +STRTAB +.* ++ +\[ 7\] \.shstrtab +STRTAB +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd b/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd +index d4f090e..9f5f595 100644 +--- a/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd ++++ b/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd +@@ -17,7 +17,7 @@ ELF Header: + +Number of program headers: +2 + +Size of section headers: +40 \(bytes\) + +Number of section headers: +8 +- +Section header string table index: 5 ++ +Section header string table index: 7 + + Section Headers: + +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al +@@ -26,9 +26,9 @@ Section Headers: + +\[ 2\] \.text +PROGBITS +00001004 000084 0000d8 00 AXp +0 +0 +4 + +\[ 3\] \.stack +PROGBITS +00080000 000180 000004 00 +WA +0 +0 +1 + +\[ 4\] \.cranges +LOUSER\+1 +00000000 000184 00003c 00 +W +0 +0 +1 +- +\[ 5\] \.shstrtab +STRTAB +.* +- +\[ 6\] \.symtab +SYMTAB +.* +- +\[ 7\] \.strtab +STRTAB +.* ++ +\[ 5\] \.symtab +SYMTAB +.* ++ +\[ 6\] \.strtab +STRTAB +.* ++ +\[ 7\] \.shstrtab +STRTAB +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-sh/sh64/crange3-media.rd b/ld/testsuite/ld-sh/sh64/crange3-media.rd +index 5a856d4..926925c 100644 +--- a/ld/testsuite/ld-sh/sh64/crange3-media.rd ++++ b/ld/testsuite/ld-sh/sh64/crange3-media.rd +@@ -17,7 +17,7 @@ ELF Header: + +Number of program headers: +2 + +Size of section headers: +40 \(bytes\) + +Number of section headers: +8 +- +Section header string table index: 5 ++ +Section header string table index: 7 + + Section Headers: + +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al +@@ -26,9 +26,9 @@ Section Headers: + +\[ 2\] \.text +PROGBITS +00001004 000084 0000d8 00 AXp +0 +0 +4 + +\[ 3\] \.stack +PROGBITS +00080000 000180 000004 00 +WA +0 +0 +1 + +\[ 4\] \.cranges +LOUSER\+1 +00000000 000184 00003c 00 +W +0 +0 +1 +- +\[ 5\] \.shstrtab +STRTAB +.* +- +\[ 6\] \.symtab +SYMTAB +.* +- +\[ 7\] \.strtab +STRTAB +.* ++ +\[ 5\] \.symtab +SYMTAB +.* ++ +\[ 6\] \.strtab +STRTAB +.* ++ +\[ 7\] \.shstrtab +STRTAB +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-sh/sh64/crange3.rd b/ld/testsuite/ld-sh/sh64/crange3.rd +index b495861..8870e0b 100644 +--- a/ld/testsuite/ld-sh/sh64/crange3.rd ++++ b/ld/testsuite/ld-sh/sh64/crange3.rd +@@ -7,9 +7,9 @@ Section Headers: + +\[ 2\] \.text +PROGBITS +00001004 000084 0000d8 00 AXp +0 +0 +4 + +\[ 3\] \.stack +PROGBITS +00080000 000180 000004 00 +WA +0 +0 +1 + +\[ 4\] \.cranges +LOUSER\+1 +00000000 000184 00003c 00 +W +0 +0 +1 +- +\[ 5\] \.shstrtab +STRTAB +.* +- +\[ 6\] \.symtab +SYMTAB +.* +- +\[ 7\] \.strtab +STRTAB +.* ++ +\[ 5\] \.symtab +SYMTAB +.* ++ +\[ 6\] \.strtab +STRTAB +.* ++ +\[ 7\] \.shstrtab +STRTAB +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-sh/sh64/crangerel1.rd b/ld/testsuite/ld-sh/sh64/crangerel1.rd +index 90d71c5..3443f2a 100644 +--- a/ld/testsuite/ld-sh/sh64/crangerel1.rd ++++ b/ld/testsuite/ld-sh/sh64/crangerel1.rd +@@ -10,9 +10,9 @@ Section Headers: + +\[ 5\] \.stack +PROGBITS +00000000 00004c 000004 00 +WA +0 +0 +1 + +\[ 6\] \.cranges +PROGBITS +00000000 000050 00001e 00 +W +0 +0 +1 + +\[ 7\] \.rela\.cranges +RELA +00000000 [0-9a-f]+ 000024 0c +I +9 +6 +4 +- +\[ 8\] \.shstrtab +STRTAB +00000000 [0-9a-f]+ 00004d 00 +0 +0 +1 +- +\[ 9\] \.symtab +SYMTAB .* +- +\[10\] \.strtab +STRTAB .* ++ +\[ 8\] \.symtab +SYMTAB .* ++ +\[ 9\] \.strtab +STRTAB .* ++ +\[10\] \.shstrtab +STRTAB +00000000 [0-9a-f]+ 00004d 00 +0 +0 +1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-sh/sh64/crangerel2.rd b/ld/testsuite/ld-sh/sh64/crangerel2.rd +index 2daede7..a1674b5 100644 +--- a/ld/testsuite/ld-sh/sh64/crangerel2.rd ++++ b/ld/testsuite/ld-sh/sh64/crangerel2.rd +@@ -10,9 +10,9 @@ Section Headers: + +\[ 5\] \.stack +PROGBITS +00000000 000090 000004 00 +WA +0 +0 +1 + +\[ 6\] \.cranges +PROGBITS +00000000 000094 000046 00 +W +0 +0 +1 + +\[ 7\] \.rela\.cranges +RELA +00000000 [0-9a-f]+ 000054 0c +I +9 +6 +4 +- +\[ 8\] \.shstrtab +STRTAB +00000000 [0-9a-f]+ 00004d 00 +0 +0 +1 +- +\[ 9\] \.symtab +SYMTAB +00000000 [0-9a-f]+ [0-9a-f]+ 10 +10 +[0-9]+ +4 +- +\[10\] \.strtab +STRTAB +00000000 [0-9a-f]+ [0-9a-f]+ 00 +0 +0 +1 ++ +\[ 8\] \.symtab +SYMTAB +00000000 [0-9a-f]+ [0-9a-f]+ 10 +8 +[0-9]+ +4 ++ +\[ 9\] \.strtab +STRTAB +00000000 [0-9a-f]+ [0-9a-f]+ 00 +0 +0 +1 ++ +\[10\] \.shstrtab +STRTAB +00000000 [0-9a-f]+ 00004d 00 +0 +0 +1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-sh/tlsbin-2.d b/ld/testsuite/ld-sh/tlsbin-2.d +index 167270f..6958e45 100644 +--- a/ld/testsuite/ld-sh/tlsbin-2.d ++++ b/ld/testsuite/ld-sh/tlsbin-2.d +@@ -23,9 +23,9 @@ Section Headers: + #... + +\[[0-9a-f]+\] \.got +PROGBITS .* + #... +- +\[[0-9a-f]+\] \.shstrtab .* + +\[[0-9a-f]+\] \.symtab .* + +\[[0-9a-f]+\] \.strtab .* ++ +\[[0-9a-f]+\] \.shstrtab .* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-sh/tlspic-2.d b/ld/testsuite/ld-sh/tlspic-2.d +index 0b47878..42baf1d 100644 +--- a/ld/testsuite/ld-sh/tlspic-2.d ++++ b/ld/testsuite/ld-sh/tlspic-2.d +@@ -22,9 +22,9 @@ Section Headers: + #... + +\[[0-9a-f]+\] \.got +PROGBITS .* + #... +- +\[[0-9a-f]+\] \.shstrtab .* + +\[[0-9a-f]+\] \.symtab .* + +\[[0-9a-f]+\] \.strtab .* ++ +\[[0-9a-f]+\] \.shstrtab .* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-sparc/gotop32.rd b/ld/testsuite/ld-sparc/gotop32.rd +index 3b5b942..1813719 100644 +--- a/ld/testsuite/ld-sparc/gotop32.rd ++++ b/ld/testsuite/ld-sparc/gotop32.rd +@@ -17,9 +17,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+12000 0+2000 0+70 08 +WA +3 +0 +4 + +\[[ 0-9]+\] .got +PROGBITS +0+12070 0+2070 0+8 04 +WA +0 +0 +4 + +\[[ 0-9]+\] .data +PROGBITS +0+13000 0+3000 0+8 00 +WA +0 +0 4096 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + #... + + Elf file type is DYN \(Shared object file\) +diff --git a/ld/testsuite/ld-sparc/gotop64.rd b/ld/testsuite/ld-sparc/gotop64.rd +index 2d3ffec..578fb2b 100644 +--- a/ld/testsuite/ld-sparc/gotop64.rd ++++ b/ld/testsuite/ld-sparc/gotop64.rd +@@ -17,9 +17,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+102000 0+2000 0+e0 10 +WA +3 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+1020e0 0+20e0 0+10 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .data +PROGBITS +0+103000 0+3000 0+8 00 +WA +0 +0 4096 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + #... + + Elf file type is DYN \(Shared object file\) +diff --git a/ld/testsuite/ld-sparc/tlssunbin32.rd b/ld/testsuite/ld-sparc/tlssunbin32.rd +index 7212732..3de615f 100644 +--- a/ld/testsuite/ld-sparc/tlssunbin32.rd ++++ b/ld/testsuite/ld-sparc/tlssunbin32.rd +@@ -19,9 +19,9 @@ Section Headers: + +\[[ 0-9]+\] .tbss +NOBITS +0+231f4 0+31f4 0+40 00 WAT +0 +0 +4 + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+231f4 0+31f4 0+80 08 +WA +4 +0 +4 + +\[[ 0-9]+\] .got +PROGBITS +0+23274 0+3274 0+14 04 +WA +0 +0 +4 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + #... + + Elf file type is EXEC \(Executable file\) +diff --git a/ld/testsuite/ld-sparc/tlssunbin64.rd b/ld/testsuite/ld-sparc/tlssunbin64.rd +index 5480dab..2297d2e 100644 +--- a/ld/testsuite/ld-sparc/tlssunbin64.rd ++++ b/ld/testsuite/ld-sparc/tlssunbin64.rd +@@ -19,9 +19,9 @@ Section Headers: + +\[[ 0-9]+\] .tbss +NOBITS +0+202204 0+2204 0+40 00 WAT +0 +0 +4 + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+202208 0+2208 0+100 10 +WA +4 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+202308 0+2308 0+28 08 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + #... + + Elf file type is EXEC \(Executable file\) +diff --git a/ld/testsuite/ld-sparc/tlssunnopic32.rd b/ld/testsuite/ld-sparc/tlssunnopic32.rd +index 21d07c0..bfb7cb8 100644 +--- a/ld/testsuite/ld-sparc/tlssunnopic32.rd ++++ b/ld/testsuite/ld-sparc/tlssunnopic32.rd +@@ -18,9 +18,9 @@ Section Headers: + +\[[ 0-9]+\] .tbss +NOBITS +0+12000 0+2000 0+24 0+ WAT +0 +0 +4 + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+12000 0+2000 0+80 08 +WA +3 +0 +4 + +\[[ 0-9]+\] .got +PROGBITS +0+12080 0+2080 0+1c 04 +WA +0 +0 +4 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + #... + Elf file type is DYN \(Shared object file\) + Entry point 0x1000 +diff --git a/ld/testsuite/ld-sparc/tlssunnopic64.rd b/ld/testsuite/ld-sparc/tlssunnopic64.rd +index 6825aa9..88fe05f 100644 +--- a/ld/testsuite/ld-sparc/tlssunnopic64.rd ++++ b/ld/testsuite/ld-sparc/tlssunnopic64.rd +@@ -18,9 +18,9 @@ Section Headers: + +\[[ 0-9]+\] .tbss +NOBITS +0+102000 0+2000 0+24 0+ WAT +0 +0 +4 + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+102000 0+2000 0+100 10 +WA +3 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+102100 0+2100 0+38 08 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + #... + Elf file type is DYN \(Shared object file\) + Entry point 0x1000 +diff --git a/ld/testsuite/ld-sparc/tlssunpic32.rd b/ld/testsuite/ld-sparc/tlssunpic32.rd +index 4d96736..519b5df 100644 +--- a/ld/testsuite/ld-sparc/tlssunpic32.rd ++++ b/ld/testsuite/ld-sparc/tlssunpic32.rd +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+12060 0+2060 0+98 08 +WA +3 +0 +4 + +\[[ 0-9]+\] .got +PROGBITS +0+120f8 0+20f8 0+4c 04 +WA +0 +0 +4 + +\[[ 0-9]+\] .plt +.* +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + #... + + Elf file type is DYN \(Shared object file\) +diff --git a/ld/testsuite/ld-sparc/tlssunpic64.rd b/ld/testsuite/ld-sparc/tlssunpic64.rd +index 6f91fee..fa00bbf 100644 +--- a/ld/testsuite/ld-sparc/tlssunpic64.rd ++++ b/ld/testsuite/ld-sparc/tlssunpic64.rd +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+102060 0+2060 0+130 10 +WA +3 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+102190 0+2190 0+98 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .plt +.* +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + #... + + Elf file type is DYN \(Shared object file\) +diff --git a/ld/testsuite/ld-tic6x/common.d b/ld/testsuite/ld-tic6x/common.d +index 30521fc..f2a7b1b 100644 +--- a/ld/testsuite/ld-tic6x/common.d ++++ b/ld/testsuite/ld-tic6x/common.d +@@ -11,9 +11,9 @@ Section Headers: + \[ 0\] NULL 00000000 000000 000000 00 0 0 0 + \[ 1\] \.far NOBITS 00000080 000080 000008 00 WA 0 0 4 + \[ 2\] \.bss NOBITS 00000100 000080 000004 00 WA 0 0 4 +- \[ 3\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000025 00 0 0 1 +- \[ 4\] \.symtab SYMTAB 00000000 [0-9a-f]+ 000050 10 5 3 4 +- \[ 5\] \.strtab STRTAB 00000000 [0-9a-f]+ 000005 00 0 0 1 ++ \[ 3\] \.symtab SYMTAB 00000000 [0-9a-f]+ 000050 10 4 3 4 ++ \[ 4\] \.strtab STRTAB 00000000 [0-9a-f]+ 000005 00 0 0 1 ++ \[ 5\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000025 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-tic6x/shlib-1.rd b/ld/testsuite/ld-tic6x/shlib-1.rd +index a07ddca..77ec3d7 100644 +--- a/ld/testsuite/ld-tic6x/shlib-1.rd ++++ b/ld/testsuite/ld-tic6x/shlib-1.rd +@@ -16,9 +16,9 @@ Section Headers: + \[11\] \.neardata PROGBITS 10000128 002128 000008 00 WA 0 0 4 + \[12\] \.bss NOBITS 10000130 002130 000004 00 WA 0 0 4 + \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 002130 000019 00 0 0 1 +- \[14\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 00007b 00 0 0 1 +- \[15\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 16 [0-9]+ 4 +- \[16\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[14\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 15 [0-9]+ 4 ++ \[15\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[16\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 00007b 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-tic6x/shlib-1b.rd b/ld/testsuite/ld-tic6x/shlib-1b.rd +index a07ddca..77ec3d7 100644 +--- a/ld/testsuite/ld-tic6x/shlib-1b.rd ++++ b/ld/testsuite/ld-tic6x/shlib-1b.rd +@@ -16,9 +16,9 @@ Section Headers: + \[11\] \.neardata PROGBITS 10000128 002128 000008 00 WA 0 0 4 + \[12\] \.bss NOBITS 10000130 002130 000004 00 WA 0 0 4 + \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 002130 000019 00 0 0 1 +- \[14\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 00007b 00 0 0 1 +- \[15\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 16 [0-9]+ 4 +- \[16\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[14\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 15 [0-9]+ 4 ++ \[15\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[16\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 00007b 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-tic6x/shlib-1r.rd b/ld/testsuite/ld-tic6x/shlib-1r.rd +index a07ddca..77ec3d7 100644 +--- a/ld/testsuite/ld-tic6x/shlib-1r.rd ++++ b/ld/testsuite/ld-tic6x/shlib-1r.rd +@@ -16,9 +16,9 @@ Section Headers: + \[11\] \.neardata PROGBITS 10000128 002128 000008 00 WA 0 0 4 + \[12\] \.bss NOBITS 10000130 002130 000004 00 WA 0 0 4 + \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 002130 000019 00 0 0 1 +- \[14\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 00007b 00 0 0 1 +- \[15\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 16 [0-9]+ 4 +- \[16\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[14\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 15 [0-9]+ 4 ++ \[15\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[16\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 00007b 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-tic6x/shlib-1rb.rd b/ld/testsuite/ld-tic6x/shlib-1rb.rd +index a07ddca..77ec3d7 100644 +--- a/ld/testsuite/ld-tic6x/shlib-1rb.rd ++++ b/ld/testsuite/ld-tic6x/shlib-1rb.rd +@@ -16,9 +16,9 @@ Section Headers: + \[11\] \.neardata PROGBITS 10000128 002128 000008 00 WA 0 0 4 + \[12\] \.bss NOBITS 10000130 002130 000004 00 WA 0 0 4 + \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 002130 000019 00 0 0 1 +- \[14\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 00007b 00 0 0 1 +- \[15\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 16 [0-9]+ 4 +- \[16\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[14\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 15 [0-9]+ 4 ++ \[15\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[16\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 00007b 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-tic6x/shlib-app-1.rd b/ld/testsuite/ld-tic6x/shlib-app-1.rd +index f0e67c9..c3ddcd3 100644 +--- a/ld/testsuite/ld-tic6x/shlib-app-1.rd ++++ b/ld/testsuite/ld-tic6x/shlib-app-1.rd +@@ -17,9 +17,9 @@ Section Headers: + \[12\] \.neardata PROGBITS 100000c0 0020c0 00000c 00 WA 0 0 4 + \[13\] \.bss NOBITS 100000cc 0020cc 000004 00 WA 0 0 4 + \[14\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020cc 000019 00 0 0 1 +- \[15\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000080 00 0 0 1 +- \[16\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 17 [0-9]+ 4 +- \[17\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[15\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 16 [0-9]+ 4 ++ \[16\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[17\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000080 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-tic6x/shlib-app-1b.rd b/ld/testsuite/ld-tic6x/shlib-app-1b.rd +index 19a7371..2f9d0f6 100644 +--- a/ld/testsuite/ld-tic6x/shlib-app-1b.rd ++++ b/ld/testsuite/ld-tic6x/shlib-app-1b.rd +@@ -17,9 +17,9 @@ Section Headers: + \[12\] \.neardata PROGBITS 100000c0 0020c0 00000c 00 WA 0 0 4 + \[13\] \.bss NOBITS 100000cc 0020cc 000004 00 WA 0 0 4 + \[14\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020cc 000019 00 0 0 1 +- \[15\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000080 00 0 0 1 +- \[16\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 17 [0-9]+ 4 +- \[17\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[15\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 16 [0-9]+ 4 ++ \[16\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[17\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000080 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-tic6x/shlib-app-1r.rd b/ld/testsuite/ld-tic6x/shlib-app-1r.rd +index f4fcf6b..2cf8c58 100644 +--- a/ld/testsuite/ld-tic6x/shlib-app-1r.rd ++++ b/ld/testsuite/ld-tic6x/shlib-app-1r.rd +@@ -16,9 +16,9 @@ Section Headers: + \[11\] \.neardata PROGBITS 100000c0 0020c0 000004 00 WA 0 0 4 + \[12\] \.bss NOBITS 100000c4 0020c4 000004 00 WA 0 0 4 + \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020c4 000019 00 0 0 1 +- \[14\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 00007b 00 0 0 1 +- \[15\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 16 [0-9]+ 4 +- \[16\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[14\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 15 [0-9]+ 4 ++ \[15\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[16\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 00007b 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-tic6x/shlib-app-1rb.rd b/ld/testsuite/ld-tic6x/shlib-app-1rb.rd +index 3b7b6a9..3cb0256 100644 +--- a/ld/testsuite/ld-tic6x/shlib-app-1rb.rd ++++ b/ld/testsuite/ld-tic6x/shlib-app-1rb.rd +@@ -16,9 +16,9 @@ Section Headers: + \[11\] \.neardata PROGBITS 100000c0 0020c0 000004 00 WA 0 0 4 + \[12\] \.bss NOBITS 100000c4 0020c4 000004 00 WA 0 0 4 + \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020c4 000019 00 0 0 1 +- \[14\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 00007b 00 0 0 1 +- \[15\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 16 [0-9]+ 4 +- \[16\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[14\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 15 [0-9]+ 4 ++ \[15\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[16\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 00007b 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-tic6x/shlib-noindex.rd b/ld/testsuite/ld-tic6x/shlib-noindex.rd +index fa03130..0a29c63 100644 +--- a/ld/testsuite/ld-tic6x/shlib-noindex.rd ++++ b/ld/testsuite/ld-tic6x/shlib-noindex.rd +@@ -17,9 +17,9 @@ Section Headers: + \[12\] \.neardata PROGBITS 10000128 002128 000008 00 WA 0 0 4 + \[13\] \.bss NOBITS 10000130 002130 000004 00 WA 0 0 4 + \[14\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 002130 000019 00 0 0 1 +- \[15\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000080 00 0 0 1 +- \[16\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 17 [0-9]+ 4 +- \[17\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[15\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 16 [0-9]+ 4 ++ \[16\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[17\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000080 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-tic6x/static-app-1.rd b/ld/testsuite/ld-tic6x/static-app-1.rd +index c1bfc2f..27d2d23 100644 +--- a/ld/testsuite/ld-tic6x/static-app-1.rd ++++ b/ld/testsuite/ld-tic6x/static-app-1.rd +@@ -14,9 +14,9 @@ Section Headers: + \[ 9\] \.neardata PROGBITS 100000e0 0020e0 000014 00 WA 0 0 4 + \[10\] \.bss NOBITS 100000f4 0020f4 000004 00 WA 0 0 4 + \[11\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020f4 000019 00 0 0 1 +- \[12\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000071 00 0 0 1 +- \[13\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 14 [0-9]+ 4 +- \[14\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[12\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 13 [0-9]+ 4 ++ \[13\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[14\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000071 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-tic6x/static-app-1b.rd b/ld/testsuite/ld-tic6x/static-app-1b.rd +index c1bfc2f..27d2d23 100644 +--- a/ld/testsuite/ld-tic6x/static-app-1b.rd ++++ b/ld/testsuite/ld-tic6x/static-app-1b.rd +@@ -14,9 +14,9 @@ Section Headers: + \[ 9\] \.neardata PROGBITS 100000e0 0020e0 000014 00 WA 0 0 4 + \[10\] \.bss NOBITS 100000f4 0020f4 000004 00 WA 0 0 4 + \[11\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020f4 000019 00 0 0 1 +- \[12\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000071 00 0 0 1 +- \[13\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 14 [0-9]+ 4 +- \[14\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[12\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 13 [0-9]+ 4 ++ \[13\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[14\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000071 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-tic6x/static-app-1r.rd b/ld/testsuite/ld-tic6x/static-app-1r.rd +index af8341e..9f3ed9b 100644 +--- a/ld/testsuite/ld-tic6x/static-app-1r.rd ++++ b/ld/testsuite/ld-tic6x/static-app-1r.rd +@@ -14,9 +14,9 @@ Section Headers: + \[ 9\] \.neardata PROGBITS 100000e0 0020e0 00000c 00 WA 0 0 4 + \[10\] \.bss NOBITS 100000ec 0020ec 000004 00 WA 0 0 4 + \[11\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020ec 000019 00 0 0 1 +- \[12\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000071 00 0 0 1 +- \[13\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 14 [0-9]+ 4 +- \[14\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[12\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 13 [0-9]+ 4 ++ \[13\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[14\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000071 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-tic6x/static-app-1rb.rd b/ld/testsuite/ld-tic6x/static-app-1rb.rd +index af8341e..9f3ed9b 100644 +--- a/ld/testsuite/ld-tic6x/static-app-1rb.rd ++++ b/ld/testsuite/ld-tic6x/static-app-1rb.rd +@@ -14,9 +14,9 @@ Section Headers: + \[ 9\] \.neardata PROGBITS 100000e0 0020e0 00000c 00 WA 0 0 4 + \[10\] \.bss NOBITS 100000ec 0020ec 000004 00 WA 0 0 4 + \[11\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020ec 000019 00 0 0 1 +- \[12\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000071 00 0 0 1 +- \[13\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 14 [0-9]+ 4 +- \[14\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[12\] \.symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 13 [0-9]+ 4 ++ \[13\] \.strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[14\] \.shstrtab STRTAB 00000000 [0-9a-f]+ 000071 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/ilp32-4-nacl.d b/ld/testsuite/ld-x86-64/ilp32-4-nacl.d +index 296c406..f560ae3 100644 +--- a/ld/testsuite/ld-x86-64/ilp32-4-nacl.d ++++ b/ld/testsuite/ld-x86-64/ilp32-4-nacl.d +@@ -14,9 +14,9 @@ Section Headers: + +\[ 3\] \.dynsym +DYNSYM +100000dc +0+dc +0+50 +10 +A +4 +1 +4 + +\[ 4\] \.dynstr +STRTAB +1000012c +0+12c +0+19 +00 +A +0 +0 +1 + +\[ 5\] \.dynamic +DYNAMIC +10010148 +0+148 +0+58 +08 +WA +4 +0 +4 +- +\[ 6\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ +0+40 +00 +0 +0 +1 +- +\[ 7\] \.symtab +SYMTAB +0+0 +[0-9a-f]+ +[0-9a-f]+ +10 +8 +[0-9] +4 +- +\[ 8\] \.strtab +STRTAB +0+ +[0-9a-f]+ +[0-9a-f]+ +00 +0 +0 +1 ++ +\[ 6\] \.symtab +SYMTAB +0+0 +[0-9a-f]+ +[0-9a-f]+ +10 +7 +[0-9] +4 ++ +\[ 7\] \.strtab +STRTAB +0+ +[0-9a-f]+ +[0-9a-f]+ +00 +0 +0 +1 ++ +\[ 8\] \.shstrtab +STRTAB +0+ +[0-9a-f]+ +0+40 +00 +0 +0 +1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/ilp32-4.d b/ld/testsuite/ld-x86-64/ilp32-4.d +index 7f1391f..658ad49 100644 +--- a/ld/testsuite/ld-x86-64/ilp32-4.d ++++ b/ld/testsuite/ld-x86-64/ilp32-4.d +@@ -13,9 +13,9 @@ Section Headers: + \[ 3\] .dynstr STRTAB 0000010c 00010c 000019 00 A 0 0 1 + \[ 4\] .text PROGBITS 00000125 000125 000001 00 AX 0 0 1 + \[ 5\] .dynamic DYNAMIC 00200128 000128 000058 08 WA 3 0 4 +- \[ 6\] .shstrtab STRTAB 00000000 [0-9a-f]+ 000040 00 0 0 1 +- \[ 7\] .symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 8 [0-9] 4 +- \[ 8\] .strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[ 6\] .symtab SYMTAB 00000000 [0-9a-f]+ [0-9a-f]+ 10 7 [0-9] 4 ++ \[ 7\] .strtab STRTAB 00000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[ 8\] .shstrtab STRTAB 00000000 [0-9a-f]+ 000040 00 0 0 1 + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/nogot1.d b/ld/testsuite/ld-x86-64/nogot1.d +index f6c4cf1..823a28a 100644 +--- a/ld/testsuite/ld-x86-64/nogot1.d ++++ b/ld/testsuite/ld-x86-64/nogot1.d +@@ -4,5 +4,6 @@ + + #... + [ ]*\[.*\][ ]+\.dynamic[ ]+DYNAMIC.* ++#... + [ ]*\[.*\][ ]+.*STRTAB.* + #pass +diff --git a/ld/testsuite/ld-x86-64/pr12718.d b/ld/testsuite/ld-x86-64/pr12718.d +index 4b81d71..07d1732 100644 +--- a/ld/testsuite/ld-x86-64/pr12718.d ++++ b/ld/testsuite/ld-x86-64/pr12718.d +@@ -9,8 +9,8 @@ Section Headers: + +\[Nr\] Name +Type +Address +Off +Size +ES +Flg +Lk +Inf +Al + +\[ 0\] +NULL +0+ +0+ +0+ +0+ +0 +0 +0 + +\[ 1\] +.text +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +000006 00 +AX +0 +0 +1 +- +\[ 2\] +.shstrtab +STRTAB +0+ +[0-9a-f]+ +[0-9a-f]+ +0+ +0 +0 +1 +- +\[ 3\] +.symtab +SYMTAB +0+ +[0-9a-f]+ +[0-9a-f]+ 18 +4 +[0-9] +8 +- +\[ 4\] +.strtab +STRTAB +0+ +[0-9a-f]+ +[0-9a-f]+ 00 +0 +0 +1 ++ +\[ 2\] +.symtab +SYMTAB +0+ +[0-9a-f]+ +[0-9a-f]+ 18 +3 +[0-9] +8 ++ +\[ 3\] +.strtab +STRTAB +0+ +[0-9a-f]+ +[0-9a-f]+ 00 +0 +0 +1 ++ +\[ 4\] +.shstrtab +STRTAB +0+ +[0-9a-f]+ +[0-9a-f]+ +0+ +0 +0 +1 + Key to Flags: + #pass +diff --git a/ld/testsuite/ld-x86-64/pr12921.d b/ld/testsuite/ld-x86-64/pr12921.d +index 8d09616..6fe6abe 100644 +--- a/ld/testsuite/ld-x86-64/pr12921.d ++++ b/ld/testsuite/ld-x86-64/pr12921.d +@@ -11,8 +11,8 @@ Section Headers: + +\[ 1\] .text +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+1 00 +AX +0 +0 +4096 + +\[ 2\] .data +PROGBITS +[0-9a-f]+ +[0-9a-f]+000 +0+28 +00 +WA +0 +0 +4096 + +\[ 3\] .bss +NOBITS +[0-9a-f]+ +[0-9a-f]+028 +0+10000 +00 +WA +0 +0 +4096 +- +\[ 4\] .shstrtab +STRTAB +0+ +[0-9a-f]+ +0+2c +00 +0 +0 +1 +- +\[ 5\] .symtab +SYMTAB +0+ +[0-9a-f]+ +[0-9a-f]+ +18 +6 +[0-9] +8 +- +\[ 6\] .strtab +STRTAB +0+ +[0-9a-f]+ +[0-9a-f]+ +00 +0 +0 +1 ++ +\[ 4\] .symtab +SYMTAB +0+ +[0-9a-f]+ +[0-9a-f]+ +18 +5 +[0-9] +8 ++ +\[ 5\] .strtab +STRTAB +0+ +[0-9a-f]+ +[0-9a-f]+ +00 +0 +0 +1 ++ +\[ 6\] .shstrtab +STRTAB +0+ +[0-9a-f]+ +0+2c +00 +0 +0 +1 + Key to Flags: + #pass +diff --git a/ld/testsuite/ld-x86-64/split-by-file-nacl.rd b/ld/testsuite/ld-x86-64/split-by-file-nacl.rd +index d11988a..4e3e74a 100644 +--- a/ld/testsuite/ld-x86-64/split-by-file-nacl.rd ++++ b/ld/testsuite/ld-x86-64/split-by-file-nacl.rd +@@ -8,8 +8,8 @@ Section Headers: + \[ 3\] .data PROGBITS 0000000000000000 000043 000000 00 WA 0 0 1 + \[ 4\] .bss NOBITS 0000000000000000 000043 000000 00 WA 0 0 1 + \[ 5\] .foo.0 PROGBITS 0000000000000003 000043 000003 00 AXl 0 0 1 +- \[ 6\] .shstrtab STRTAB 0000000000000000 [0-9a-f]+ 000038 00 0 0 1 +- \[ 7\] .symtab SYMTAB 0000000000000000 [0-9a-f]+ [0-9a-f]+ 18 8 [0-9] 8 +- \[ 8\] .strtab STRTAB 0000000000000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[ 6\] .symtab SYMTAB 0000000000000000 [0-9a-f]+ [0-9a-f]+ 18 7 [0-9] 8 ++ \[ 7\] .strtab STRTAB 0000000000000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[ 8\] .shstrtab STRTAB 0000000000000000 [0-9a-f]+ 000038 00 0 0 1 + Key to Flags: + #pass +diff --git a/ld/testsuite/ld-x86-64/split-by-file.rd b/ld/testsuite/ld-x86-64/split-by-file.rd +index d11988a..4e3e74a 100644 +--- a/ld/testsuite/ld-x86-64/split-by-file.rd ++++ b/ld/testsuite/ld-x86-64/split-by-file.rd +@@ -8,8 +8,8 @@ Section Headers: + \[ 3\] .data PROGBITS 0000000000000000 000043 000000 00 WA 0 0 1 + \[ 4\] .bss NOBITS 0000000000000000 000043 000000 00 WA 0 0 1 + \[ 5\] .foo.0 PROGBITS 0000000000000003 000043 000003 00 AXl 0 0 1 +- \[ 6\] .shstrtab STRTAB 0000000000000000 [0-9a-f]+ 000038 00 0 0 1 +- \[ 7\] .symtab SYMTAB 0000000000000000 [0-9a-f]+ [0-9a-f]+ 18 8 [0-9] 8 +- \[ 8\] .strtab STRTAB 0000000000000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[ 6\] .symtab SYMTAB 0000000000000000 [0-9a-f]+ [0-9a-f]+ 18 7 [0-9] 8 ++ \[ 7\] .strtab STRTAB 0000000000000000 [0-9a-f]+ [0-9a-f]+ 00 0 0 1 ++ \[ 8\] .shstrtab STRTAB 0000000000000000 [0-9a-f]+ 000038 00 0 0 1 + Key to Flags: + #pass +diff --git a/ld/testsuite/ld-x86-64/tlsbin-nacl.rd b/ld/testsuite/ld-x86-64/tlsbin-nacl.rd +index 5de5e1a..4284644 100644 +--- a/ld/testsuite/ld-x86-64/tlsbin-nacl.rd ++++ b/ld/testsuite/ld-x86-64/tlsbin-nacl.rd +@@ -23,9 +23,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+10030410 [0-9a-f]+ 0+140 10 +WA +6 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+10030550 [0-9a-f]+ 0+20 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .got.plt +PROGBITS +0+10030570 [0-9a-f]+ 0+20 08 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/tlsbin.rd b/ld/testsuite/ld-x86-64/tlsbin.rd +index 6f73b98..a34775d 100644 +--- a/ld/testsuite/ld-x86-64/tlsbin.rd ++++ b/ld/testsuite/ld-x86-64/tlsbin.rd +@@ -23,9 +23,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+601298 0+1298 0+140 10 +WA +4 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+6013d8 0+13d8 0+20 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .got.plt +PROGBITS +0+6013f8 0+13f8 0+20 08 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/tlsbin2-nacl.rd b/ld/testsuite/ld-x86-64/tlsbin2-nacl.rd +index 110927b..1f5b782 100644 +--- a/ld/testsuite/ld-x86-64/tlsbin2-nacl.rd ++++ b/ld/testsuite/ld-x86-64/tlsbin2-nacl.rd +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+10030410 [0-9a-f]+ 0+100 10 +WA +5 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+10030510 [0-9a-f]+ 0+28 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .got.plt +PROGBITS +0+10030538 [0-9a-f]+ 0+18 08 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/tlsbin2.rd b/ld/testsuite/ld-x86-64/tlsbin2.rd +index b283648..5fb1599 100644 +--- a/ld/testsuite/ld-x86-64/tlsbin2.rd ++++ b/ld/testsuite/ld-x86-64/tlsbin2.rd +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+601298 0+1298 0+100 10 +WA +4 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+601398 0+1398 0+28 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .got.plt +PROGBITS +0+6013c0 0+13c0 0+18 08 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/tlsbindesc-nacl.rd b/ld/testsuite/ld-x86-64/tlsbindesc-nacl.rd +index 39a5abe..2c046f4 100644 +--- a/ld/testsuite/ld-x86-64/tlsbindesc-nacl.rd ++++ b/ld/testsuite/ld-x86-64/tlsbindesc-nacl.rd +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+100303d0 0+3d0 0+100 10 +WA +5 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+100304d0 0+4d0 0+20 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .got.plt +PROGBITS +0+100304f0 0+4f0 0+18 08 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/tlsbindesc.rd b/ld/testsuite/ld-x86-64/tlsbindesc.rd +index 8c9a342..c94014a 100644 +--- a/ld/testsuite/ld-x86-64/tlsbindesc.rd ++++ b/ld/testsuite/ld-x86-64/tlsbindesc.rd +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+601260 0+1260 0+100 10 +WA +4 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+601360 0+1360 0+20 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .got.plt +PROGBITS +0+601380 0+1380 0+18 08 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/tlsdesc-nacl.rd b/ld/testsuite/ld-x86-64/tlsdesc-nacl.rd +index db196a5..7c9d77a 100644 +--- a/ld/testsuite/ld-x86-64/tlsdesc-nacl.rd ++++ b/ld/testsuite/ld-x86-64/tlsdesc-nacl.rd +@@ -22,9 +22,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+100104b0 [0-9a-f]+ 0+150 10 +WA +5 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+10010600 [0-9a-f]+ 0+48 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .got.plt +PROGBITS +0+10010648 [0-9a-f]+ 0+68 08 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/tlsdesc.rd b/ld/testsuite/ld-x86-64/tlsdesc.rd +index 6a636a0..18060c0 100644 +--- a/ld/testsuite/ld-x86-64/tlsdesc.rd ++++ b/ld/testsuite/ld-x86-64/tlsdesc.rd +@@ -22,9 +22,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+2011b8 0+11b8 0+150 10 +WA +3 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+201308 0+1308 0+48 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .got.plt +PROGBITS +0+201350 0+1350 0+68 08 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/tlsgdesc-nacl.rd b/ld/testsuite/ld-x86-64/tlsgdesc-nacl.rd +index 8614af5..934ba03 100644 +--- a/ld/testsuite/ld-x86-64/tlsgdesc-nacl.rd ++++ b/ld/testsuite/ld-x86-64/tlsgdesc-nacl.rd +@@ -19,9 +19,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +.* + +\[[ 0-9]+\] \.got +.* + +\[[ 0-9]+\] \.got.plt +.* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/tlsgdesc.rd b/ld/testsuite/ld-x86-64/tlsgdesc.rd +index 5d845c7..729d12e6 100644 +--- a/ld/testsuite/ld-x86-64/tlsgdesc.rd ++++ b/ld/testsuite/ld-x86-64/tlsgdesc.rd +@@ -19,9 +19,9 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +.* + +\[[ 0-9]+\] \.got +.* + +\[[ 0-9]+\] \.got.plt +.* +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/tlspic-nacl.rd b/ld/testsuite/ld-x86-64/tlspic-nacl.rd +index f98e39b..740e399 100644 +--- a/ld/testsuite/ld-x86-64/tlspic-nacl.rd ++++ b/ld/testsuite/ld-x86-64/tlspic-nacl.rd +@@ -22,9 +22,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+10010510 [0-9a-f]+ 0+130 10 +WA +5 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+10010640 [0-9a-f]+ 0+90 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .got.plt +PROGBITS +0+100106d0 [0-9a-f]+ 0+20 08 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/tlspic.rd b/ld/testsuite/ld-x86-64/tlspic.rd +index 589666b..3f5d544 100644 +--- a/ld/testsuite/ld-x86-64/tlspic.rd ++++ b/ld/testsuite/ld-x86-64/tlspic.rd +@@ -22,9 +22,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+201380 0+1380 0+130 10 +WA +3 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+2014b0 0+14b0 0+90 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .got.plt +PROGBITS +0+201540 0+1540 0+20 08 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/tlspic2-nacl.rd b/ld/testsuite/ld-x86-64/tlspic2-nacl.rd +index 1919b3f..cbc0a75 100644 +--- a/ld/testsuite/ld-x86-64/tlspic2-nacl.rd ++++ b/ld/testsuite/ld-x86-64/tlspic2-nacl.rd +@@ -22,9 +22,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+10010528 [0-9a-f]+ 0+130 10 +WA +5 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+10010658 [0-9a-f]+ 0+98 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .got.plt +PROGBITS +0+100106f0 [0-9a-f]+ 0+20 08 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-x86-64/tlspic2.rd b/ld/testsuite/ld-x86-64/tlspic2.rd +index 3c7b8c1..684ae21 100644 +--- a/ld/testsuite/ld-x86-64/tlspic2.rd ++++ b/ld/testsuite/ld-x86-64/tlspic2.rd +@@ -22,9 +22,9 @@ Section Headers: + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+201380 0+1380 0+100 10 +WA +3 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+201480 0+1480 0+98 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .got.plt +PROGBITS +0+201518 0+1518 0+18 08 +WA +0 +0 +8 +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-xtensa/tlsbin.rd b/ld/testsuite/ld-xtensa/tlsbin.rd +index 2361139..dcd2b04 100644 +--- a/ld/testsuite/ld-xtensa/tlsbin.rd ++++ b/ld/testsuite/ld-xtensa/tlsbin.rd +@@ -22,9 +22,9 @@ Section Headers: + +\[[ 0-9]+\] .xtensa.info +NOTE +0+ .* + +\[[ 0-9]+\] .xt.lit +PROGBITS +0+ .* + +\[[ 0-9]+\] .xt.prop +PROGBITS +0+ .* +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff --git a/ld/testsuite/ld-xtensa/tlspic.rd b/ld/testsuite/ld-xtensa/tlspic.rd +index 379334c..b6f7067 100644 +--- a/ld/testsuite/ld-xtensa/tlspic.rd ++++ b/ld/testsuite/ld-xtensa/tlspic.rd +@@ -23,9 +23,9 @@ Section Headers: + +\[[ 0-9]+\] .xtensa.info +NOTE +0+ .* + +\[[ 0-9]+\] .xt.lit +PROGBITS +0+ .* + +\[[ 0-9]+\] .xt.prop +PROGBITS +0+ .* +- +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* ++ +\[[ 0-9]+\] .shstrtab +.* + Key to Flags: + #... + +diff -rup binutils-2.27.orig/ld/testsuite/ld-powerpc/tlsexe32.r binutils-2.27/ld/testsuite/ld-powerpc/tlsexe32.r +--- binutils-2.27.orig/ld/testsuite/ld-powerpc/tlsexe32.r 2017-01-17 09:30:06.631463387 +0000 ++++ binutils-2.27/ld/testsuite/ld-powerpc/tlsexe32.r 2017-01-17 09:30:34.074140629 +0000 +@@ -23,9 +23,9 @@ Section Headers: + +\[[ 0-9]+\] \.got +PROGBITS +[0-9a-f]+ [0-9a-f]+ 000018 04 +WA +0 +0 +4 + +\[[ 0-9]+\] \.plt +PROGBITS +[0-9a-f]+ [0-9a-f]+ 000004 00 +WA +0 +0 +4 + #... +- +\[[ 0-9]+\] \.shstrtab +STRTAB +.* + +\[[ 0-9]+\] \.symtab +SYMTAB +.* + +\[[ 0-9]+\] \.strtab +STRTAB +.* ++ +\[[ 0-9]+\] \.shstrtab +STRTAB +.* + #... + + Elf file type is EXEC \(Executable file\) +diff -rup binutils-2.27.orig/ld/testsuite/ld-powerpc/tlsso32.r binutils-2.27/ld/testsuite/ld-powerpc/tlsso32.r +--- binutils-2.27.orig/ld/testsuite/ld-powerpc/tlsso32.r 2017-01-17 09:30:06.632463375 +0000 ++++ binutils-2.27/ld/testsuite/ld-powerpc/tlsso32.r 2017-01-17 09:30:18.506323674 +0000 +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] \.got +PROGBITS .* 0+30 04 +WA +0 +0 +4 + +\[[ 0-9]+\] \.plt +PROGBITS .* 0+4 00 +WA +0 +0 +4 + #... +- +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* ++ +\[[ 0-9]+\] \.shstrtab +.* + #... + + Elf file type is DYN \(Shared object file\) +diff -rup binutils-2.27.orig/ld/testsuite/ld-powerpc/tlstocso.r binutils-2.27/ld/testsuite/ld-powerpc/tlstocso.r +--- binutils-2.27.orig/ld/testsuite/ld-powerpc/tlstocso.r 2017-01-17 09:30:06.631463387 +0000 ++++ binutils-2.27/ld/testsuite/ld-powerpc/tlstocso.r 2017-01-17 09:32:37.080695394 +0000 +@@ -21,9 +21,9 @@ Section Headers: + +\[[ 0-9]+\] \.opd .* + +\[[ 0-9]+\] \.got .* + +\[[ 0-9]+\] \.plt .* +- +\[[ 0-9]+\] \.shstrtab .* + +\[[ 0-9]+\] \.symtab .* + +\[[ 0-9]+\] \.strtab .* ++ +\[[ 0-9]+\] \.shstrtab .* + #... + + Elf file type is DYN \(Shared object file\) diff --git a/SOURCES/binutils-2.27-objdump-improvements.patch b/SOURCES/binutils-2.27-objdump-improvements.patch new file mode 100644 index 0000000..ee2418a --- /dev/null +++ b/SOURCES/binutils-2.27-objdump-improvements.patch @@ -0,0 +1,4350 @@ +--- binutils-2.27.orig/binutils/objdump.c 2016-11-08 15:39:41.094551341 +0000 ++++ binutils-2.27/binutils/objdump.c 2016-11-08 16:04:52.433507357 +0000 +@@ -620,6 +620,18 @@ slurp_dynamic_symtab (bfd *abfd) + return sy; + } + ++/* Some symbol names are significant and should be kept in the ++ table of sorted symbol names, even if they are marked as ++ debugging/section symbols. */ ++ ++static bfd_boolean ++is_significant_symbol_name (const char * name) ++{ ++ return strcmp (name, ".plt") == 0 ++ || strcmp (name, ".got") == 0 ++ || strcmp (name, ".plt.got") == 0; ++} ++ + /* Filter out (in place) symbols that are useless for disassembly. + COUNT is the number of elements in SYMBOLS. + Return the number of useful symbols. */ +@@ -635,7 +647,8 @@ remove_useless_symbols (asymbol **symbol + + if (sym->name == NULL || sym->name[0] == '\0') + continue; +- if (sym->flags & (BSF_DEBUGGING | BSF_SECTION_SYM)) ++ if ((sym->flags & (BSF_DEBUGGING | BSF_SECTION_SYM)) ++ && ! is_significant_symbol_name (sym->name)) + continue; + if (bfd_is_und_section (sym->section) + || bfd_is_com_section (sym->section)) +@@ -903,11 +916,13 @@ find_symbol_for_address (bfd_vma vma, + + /* The symbol we want is now in min, the low end of the range we + were searching. If there are several symbols with the same +- value, we want the first one. */ ++ value, we want the first (non-section/non-debugging) one. */ + thisplace = min; + while (thisplace > 0 + && (bfd_asymbol_value (sorted_syms[thisplace]) +- == bfd_asymbol_value (sorted_syms[thisplace - 1]))) ++ == bfd_asymbol_value (sorted_syms[thisplace - 1])) ++ && ((sorted_syms[thisplace - 1]->flags ++ & (BSF_SECTION_SYM | BSF_DEBUGGING)) == 0)) + --thisplace; + + /* Prefer a symbol in the current section if we have multple symbols +@@ -993,6 +1008,41 @@ find_symbol_for_address (bfd_vma vma, + return NULL; + } + ++ /* If we have not found an exact match for the specified address ++ and we have dynamic relocations available, then we can produce ++ a better result by matching a relocation to the address and ++ using the symbol associated with that relocation. */ ++ if (!want_section ++ && aux->dynrelbuf != NULL ++ && sorted_syms[thisplace]->value != vma ++ /* If we have matched a synthetic symbol, then stick with that. */ ++ && (sorted_syms[thisplace]->flags & BSF_SYNTHETIC) == 0) ++ { ++ arelent ** rel_pp; ++ long rel_count; ++ ++ for (rel_count = aux->dynrelcount, rel_pp = aux->dynrelbuf; ++ rel_count--;) ++ { ++ arelent * rel = rel_pp[rel_count]; ++ ++ if (rel->address == vma ++ && rel->sym_ptr_ptr != NULL ++ /* Absolute relocations do not provide a more helpful symbolic address. */ ++ && ! bfd_is_abs_section ((* rel->sym_ptr_ptr)->section)) ++ { ++ if (place != NULL) ++ * place = thisplace; ++ return * rel->sym_ptr_ptr; ++ } ++ ++ /* We are scanning backwards, so if we go below the target address ++ we have failed. */ ++ if (rel_pp[rel_count]->address < vma) ++ break; ++ } ++ } ++ + if (place != NULL) + *place = thisplace; + +@@ -1031,7 +1081,19 @@ objdump_print_addr_with_sym (bfd *abfd, + { + (*inf->fprintf_func) (inf->stream, " <"); + objdump_print_symname (abfd, inf, sym); +- if (bfd_asymbol_value (sym) > vma) ++ ++ if (bfd_asymbol_value (sym) == vma) ++ ; ++ /* Undefined symbols in an executables and dynamic objects do not have ++ a value associated with them, so it does not make sense to display ++ an offset relative to them. Normally we would not be provided with ++ this kind of symbol, but the target backend might choose to do so, ++ and the code in find_symbol_for_address might return an as yet ++ unresolved symbol associated with a dynamic reloc. */ ++ else if ((bfd_get_file_flags (abfd) & (EXEC_P | DYNAMIC)) ++ && bfd_is_und_section (sym->section)) ++ ; ++ else if (bfd_asymbol_value (sym) > vma) + { + (*inf->fprintf_func) (inf->stream, "-0x"); + objdump_print_value (bfd_asymbol_value (sym) - vma, inf, TRUE); +@@ -1996,7 +2058,7 @@ disassemble_section (bfd *abfd, asection + + /* Decide which set of relocs to use. Load them if necessary. */ + paux = (struct objdump_disasm_info *) pinfo->application_data; +- if (paux->dynrelbuf) ++ if (paux->dynrelbuf && dump_dynamic_reloc_info) + { + rel_pp = paux->dynrelbuf; + rel_count = paux->dynrelcount; +@@ -2273,13 +2335,11 @@ disassemble_data (bfd *abfd) + /* Allow the target to customize the info structure. */ + disassemble_init_for_target (& disasm_info); + +- /* Pre-load the dynamic relocs if we are going +- to be dumping them along with the disassembly. */ +- if (dump_dynamic_reloc_info) ++ /* Pre-load the dynamic relocs as we may need them during the disassembly. */ + { + long relsize = bfd_get_dynamic_reloc_upper_bound (abfd); + +- if (relsize < 0) ++ if (relsize < 0 && dump_dynamic_reloc_info) + bfd_fatal (bfd_get_filename (abfd)); + + if (relsize > 0) +--- binutils-2.27/gas/testsuite/gas/arm/tls.d 2015-11-13 08:27:41.000000000 +0000 ++++ /work/sources/binutils/current/gas/testsuite/gas/arm/tls.d 2016-10-11 12:14:08.383657767 +0100 +@@ -15,7 +15,7 @@ Disassembly of section .text: + 0: e1a00000 nop ; .* + 0: R_ARM_TLS_DESCSEQ af + 4: e59f0014 ldr r0, \[pc, #20\] ; 20 .* +- 8: fa000000 blx 8 <ae\+.*> ++ 8: fa000000 blx 8 <ae.*> + 8: R_ARM_TLS_CALL ae + c: e1a00000 nop ; .* + 0+10 <.arm_pool>: +@@ -34,7 +34,7 @@ Disassembly of section .text: + 26: 46c0 nop ; .* + 26: R_ARM_THM_TLS_DESCSEQ tf + 28: 4805 ldr r0, \[pc, #20\] ; \(40 .*\) +- 2a: f000 e800 blx 4 <te\+0x4> ++ 2a: f000 e800 blx 4 <te.*> + 2a: R_ARM_THM_TLS_CALL te + 2e: 46c0 nop ; .* + 30: 00000002 .word 0x00000002 +diff --git a/ld/testsuite/ld-aarch64/emit-relocs-515-be.d b/ld/testsuite/ld-aarch64/emit-relocs-515-be.d +index 0bd39e3..82d5bd6 100644 +--- a/ld/testsuite/ld-aarch64/emit-relocs-515-be.d ++++ b/ld/testsuite/ld-aarch64/emit-relocs-515-be.d +@@ -12,7 +12,7 @@ Disassembly of section .text: + 10008: 8b020021 add x1, x1, x2 + 1000c: d2a00000 movz x0, #0x0, lsl #16 + 10010: 8b000020 add x0, x1, x0 +- 10014: 9400000c bl 10044 \<test\+0x44\> ++ 10014: 9400000c bl 10044 \<.*\> + 10018: d503201f nop + 1001c: 00000000 .word 0x00000000 + 10020: 0000ffe4 .word 0x0000ffe4 +diff --git a/ld/testsuite/ld-aarch64/emit-relocs-515.d b/ld/testsuite/ld-aarch64/emit-relocs-515.d +index 67f436b..9d84bf1 100644 +--- a/ld/testsuite/ld-aarch64/emit-relocs-515.d ++++ b/ld/testsuite/ld-aarch64/emit-relocs-515.d +@@ -12,7 +12,7 @@ Disassembly of section .text: + 10008: 8b020021 add x1, x1, x2 + 1000c: d2a00000 movz x0, #0x0, lsl #16 + 10010: 8b000020 add x0, x1, x0 +- 10014: 9400000c bl 10044 \<test\+0x44\> ++ 10014: 9400000c bl 10044 \<.*\> + 10018: d503201f nop + 1001c: 0000ffe4 .word 0x0000ffe4 + 10020: 00000000 .word 0x00000000 +diff --git a/ld/testsuite/ld-aarch64/emit-relocs-516-be.d b/ld/testsuite/ld-aarch64/emit-relocs-516-be.d +index e3b528d..23332b0 100644 +--- a/ld/testsuite/ld-aarch64/emit-relocs-516-be.d ++++ b/ld/testsuite/ld-aarch64/emit-relocs-516-be.d +@@ -13,7 +13,7 @@ Disassembly of section .text: + 1000c: f2800100 movk x0, #0x8 + 10010: f2800300 movk x0, #0x18 + 10014: 8b000020 add x0, x1, x0 +- 10018: 9400000c bl 10048 \<test\+0x48\> ++ 10018: 9400000c bl 10048 \<.*\> + 1001c: d503201f nop + 10020: 00000000 .word 0x00000000 + 10024: 0000ffe0 .word 0x0000ffe0 +diff --git a/ld/testsuite/ld-aarch64/emit-relocs-516.d b/ld/testsuite/ld-aarch64/emit-relocs-516.d +index 2ace032..e2ad1d6 100644 +--- a/ld/testsuite/ld-aarch64/emit-relocs-516.d ++++ b/ld/testsuite/ld-aarch64/emit-relocs-516.d +@@ -13,7 +13,7 @@ Disassembly of section .text: + 1000c: f2800100 movk x0, #0x8 + 10010: f2800300 movk x0, #0x18 + 10014: 8b000020 add x0, x1, x0 +- 10018: 9400000c bl 10048 \<test\+0x48\> ++ 10018: 9400000c bl 10048 \<.*\> + 1001c: d503201f nop + 10020: 0000ffe0 .word 0x0000ffe0 + 10024: 00000000 .word 0x00000000 +diff --git a/ld/testsuite/ld-aarch64/gc-plt-relocs.d b/ld/testsuite/ld-aarch64/gc-plt-relocs.d +index 086968c..d9f9413 100644 +--- a/ld/testsuite/ld-aarch64/gc-plt-relocs.d ++++ b/ld/testsuite/ld-aarch64/gc-plt-relocs.d +@@ -20,7 +20,7 @@ DYNAMIC SYMBOL TABLE: + Disassembly of section .text: + + 0+8000 \<_start\>: +- 8000: 9400000c bl 8030 \<foo\+0x24\> ++ 8000: 9400000c bl 8030 \<.*> + + 0+8004 \<hidfn\>: + 8004: 8a000000 and x0, x0, x0 +diff --git a/ld/testsuite/ld-aarch64/tls-tiny-desc.d b/ld/testsuite/ld-aarch64/tls-tiny-desc.d +index 7b88786..c17c448 100644 +--- a/ld/testsuite/ld-aarch64/tls-tiny-desc.d ++++ b/ld/testsuite/ld-aarch64/tls-tiny-desc.d +@@ -6,8 +6,8 @@ + Disassembly of section .text: + + 0000000000010000 \<test\>: +- +10000: 58080141 ldr x1, 20028 \<_GLOBAL_OFFSET_TABLE_\+0x28\> +- +10004: 10080120 adr x0, 20028 \<_GLOBAL_OFFSET_TABLE_\+0x28\> ++ +10000: 58080141 ldr x1, 20028 \<var> ++ +10004: 10080120 adr x0, 20028 \<var> + +10008: d63f0020 blr x1 + + Disassembly of section .plt: +diff --git a/ld/testsuite/ld-aarch64/tls-tiny-gd.d b/ld/testsuite/ld-aarch64/tls-tiny-gd.d +index 2f55f7b..9133492 100644 +--- a/ld/testsuite/ld-aarch64/tls-tiny-gd.d ++++ b/ld/testsuite/ld-aarch64/tls-tiny-gd.d +@@ -6,8 +6,8 @@ + Disassembly of section .text: + + 0000000000010000 \<test\>: +- +10000: 10080040 adr x0, 20008 \<_GLOBAL_OFFSET_TABLE_\+0x8\> +- +10004: 9400000a bl 1002c \<test\+0x2c\> ++ +10000: 10080040 adr x0, 20008 \<var> ++ +10004: 9400000a bl 1002c \<.*> + +10008: d503201f nop + + Disassembly of section .plt: +diff --git a/ld/testsuite/ld-aarch64/tls-tiny-ie.d b/ld/testsuite/ld-aarch64/tls-tiny-ie.d +index 02aff35..849e73d 100644 +--- a/ld/testsuite/ld-aarch64/tls-tiny-ie.d ++++ b/ld/testsuite/ld-aarch64/tls-tiny-ie.d +@@ -3,6 +3,6 @@ + #objdump: -dr + #... + +10000: d53bd042 mrs x2, tpidr_el0 +- +10004: 58080020 ldr x0, 20008 <_GLOBAL_OFFSET_TABLE_\+0x8> ++ +10004: 58080020 ldr x0, 20008 <.*> + +10008: 8b000040 add x0, x2, x0 + +1000c: b9400000 ldr w0, \[x0\] +diff --git a/ld/testsuite/ld-arm/arm-app-abs32.d b/ld/testsuite/ld-arm/arm-app-abs32.d +index 13221f0..d888929 100644 +--- a/ld/testsuite/ld-arm/arm-app-abs32.d ++++ b/ld/testsuite/ld-arm/arm-app-abs32.d +@@ -6,9 +6,9 @@ start address .* + + Disassembly of section .plt: + +-.* <lib_func1@plt-0x14>: ++.* <.plt>: + +.*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- +.*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1@plt-0x4> ++ +.*: e59fe004 ldr lr, \[pc, #4\] ; .* <.*> + +.*: e08fe00e add lr, pc, lr + +.*: e5bef008 ldr pc, \[lr, #8\]! + +.*: .* .* +diff --git a/ld/testsuite/ld-arm/arm-app.d b/ld/testsuite/ld-arm/arm-app.d +index 98fc899..dd4cf81 100644 +--- a/ld/testsuite/ld-arm/arm-app.d ++++ b/ld/testsuite/ld-arm/arm-app.d +@@ -6,9 +6,9 @@ start address 0x.* + + Disassembly of section .plt: + +-.* <lib_func1@plt-0x14>: ++.* <.plt>: + .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1@plt-0x4> ++ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <.*> + .*: e08fe00e add lr, pc, lr + .*: e5bef008 ldr pc, \[lr, #8\]! + .*: .* +diff --git a/ld/testsuite/ld-arm/arm-lib-plt32.d b/ld/testsuite/ld-arm/arm-lib-plt32.d +index ecc2cf2..2eaf89a 100644 +--- a/ld/testsuite/ld-arm/arm-lib-plt32.d ++++ b/ld/testsuite/ld-arm/arm-lib-plt32.d +@@ -6,9 +6,9 @@ start address 0x.* + + Disassembly of section .plt: + +-.* <app_func2@plt-0x14>: ++.* <.plt>: + .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <app_func2@plt-0x4> ++ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <.*> + .*: e08fe00e add lr, pc, lr + .*: e5bef008 ldr pc, \[lr, #8\]! + .*: .* +diff --git a/ld/testsuite/ld-arm/arm-lib.d b/ld/testsuite/ld-arm/arm-lib.d +index 0e2a7aa..ac439ea 100644 +--- a/ld/testsuite/ld-arm/arm-lib.d ++++ b/ld/testsuite/ld-arm/arm-lib.d +@@ -6,9 +6,9 @@ start address 0x.* + + Disassembly of section .plt: + +-.* <app_func2@plt-0x14>: ++.* <.plt>: + .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <app_func2@plt-0x4> ++ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <.*> + .*: e08fe00e add lr, pc, lr + .*: e5bef008 ldr pc, \[lr, #8\]! + .*: .* +diff --git a/ld/testsuite/ld-arm/armthumb-lib.d b/ld/testsuite/ld-arm/armthumb-lib.d +index 9a5dea8..4f43b8e 100644 +--- a/ld/testsuite/ld-arm/armthumb-lib.d ++++ b/ld/testsuite/ld-arm/armthumb-lib.d +@@ -6,9 +6,9 @@ start address 0x.* + + Disassembly of section .plt: + +-.* <app_func2@plt-0x14>: ++.* <.plt>: + .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <app_func2@plt-0x4> ++ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <.*> + .*: e08fe00e add lr, pc, lr + .*: e5bef008 ldr pc, \[lr, #8\]! + .*: .* +diff --git a/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.d b/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.d +index 0f40861..bbf6839 100644 +--- a/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.d ++++ b/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.d +@@ -4,9 +4,9 @@ + + Disassembly of section \.plt: + +-00008000 <bar@plt-0x14>: ++00008000 <.*>: + 8000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- 8004: e59fe004 ldr lr, \[pc, #4\] ; 8010 <bar@plt-0x4> ++ 8004: e59fe004 ldr lr, \[pc, #4\] ; 8010 <.*> + 8008: e08fe00e add lr, pc, lr + 800c: e5bef008 ldr pc, \[lr, #8\]! + 8010: 00000ffc \.word 0x00000ffc +diff --git a/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.d b/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.d +index b6e6fff..079c928 100644 +--- a/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.d ++++ b/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.d +@@ -4,9 +4,9 @@ + + Disassembly of section \.plt: + +-00008000 <bar@plt-0x14>: ++00008000 <.plt>: + 8000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- 8004: e59fe004 ldr lr, \[pc, #4\] ; 8010 <bar@plt-0x4> ++ 8004: e59fe004 ldr lr, \[pc, #4\] ; 8010 <.*> + 8008: e08fe00e add lr, pc, lr + 800c: e5bef008 ldr pc, \[lr, #8\]! + 8010: 00001004 \.word 0x00001004 +diff --git a/ld/testsuite/ld-arm/cortex-a8-fix-bl-plt.d b/ld/testsuite/ld-arm/cortex-a8-fix-bl-plt.d +index baad3d0..e4e6760 100644 +--- a/ld/testsuite/ld-arm/cortex-a8-fix-bl-plt.d ++++ b/ld/testsuite/ld-arm/cortex-a8-fix-bl-plt.d +@@ -4,9 +4,9 @@ + + Disassembly of section \.plt: + +-00008000 <bar@plt-0x14>: ++00008000 <.plt>: + 8000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- 8004: e59fe004 ldr lr, \[pc, #4\] ; 8010 <bar@plt-0x4> ++ 8004: e59fe004 ldr lr, \[pc, #4\] ; 8010 <.*> + 8008: e08fe00e add lr, pc, lr + 800c: e5bef008 ldr pc, \[lr, #8\]! + 8010: 00000ffc \.word 0x00000ffc +diff --git a/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-plt.d b/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-plt.d +index c504f79..4a5be27 100644 +--- a/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-plt.d ++++ b/ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-plt.d +@@ -4,9 +4,9 @@ + + Disassembly of section \.plt: + +-00008e00 <targetfn@plt-0x14>: ++00008e00 <.plt>: + 8e00: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- 8e04: e59fe004 ldr lr, \[pc, #4\] ; 8e10 <targetfn@plt-0x4> ++ 8e04: e59fe004 ldr lr, \[pc, #4\] ; 8e10 <.*> + 8e08: e08fe00e add lr, pc, lr + 8e0c: e5bef008 ldr pc, \[lr, #8\]! + 8e10: 0001027c \.word 0x0001027c +diff --git a/ld/testsuite/ld-arm/cortex-a8-fix-blx-plt.d b/ld/testsuite/ld-arm/cortex-a8-fix-blx-plt.d +index baad3d0..e4e6760 100644 +--- a/ld/testsuite/ld-arm/cortex-a8-fix-blx-plt.d ++++ b/ld/testsuite/ld-arm/cortex-a8-fix-blx-plt.d +@@ -4,9 +4,9 @@ + + Disassembly of section \.plt: + +-00008000 <bar@plt-0x14>: ++00008000 <.plt>: + 8000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- 8004: e59fe004 ldr lr, \[pc, #4\] ; 8010 <bar@plt-0x4> ++ 8004: e59fe004 ldr lr, \[pc, #4\] ; 8010 <.*> + 8008: e08fe00e add lr, pc, lr + 800c: e5bef008 ldr pc, \[lr, #8\]! + 8010: 00000ffc \.word 0x00000ffc +diff --git a/ld/testsuite/ld-arm/farcall-mixed-app-v5.d b/ld/testsuite/ld-arm/farcall-mixed-app-v5.d +index ea0e823..b570bad 100644 +--- a/ld/testsuite/ld-arm/farcall-mixed-app-v5.d ++++ b/ld/testsuite/ld-arm/farcall-mixed-app-v5.d +@@ -6,9 +6,9 @@ start address 0x.* + + Disassembly of section .plt: + +-.* <lib_func2@plt-0x14>: ++.* <.plt>: + .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func2@plt-0x4> ++ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <.*> + .*: e08fe00e add lr, pc, lr + .*: e5bef008 ldr pc, \[lr, #8\]! + .*: .* +diff --git a/ld/testsuite/ld-arm/farcall-mixed-app.d b/ld/testsuite/ld-arm/farcall-mixed-app.d +index 86127ef..9fa97dc 100644 +--- a/ld/testsuite/ld-arm/farcall-mixed-app.d ++++ b/ld/testsuite/ld-arm/farcall-mixed-app.d +@@ -6,9 +6,9 @@ start address 0x.* + + Disassembly of section .plt: + +-.* <lib_func2@plt-0x14>: ++.* <.plt>: + .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func2@plt-0x4> ++ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <.*> + .*: e08fe00e add lr, pc, lr + .*: e5bef008 ldr pc, \[lr, #8\]! + .*: .* +diff --git a/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d b/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d +index e2dbc1b..fa52ad1 100644 +--- a/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d ++++ b/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d +@@ -5,9 +5,9 @@ start address 0x.* + + Disassembly of section .plt: + +-.* <app_func@plt-0x14>: ++.* <.plt>: + .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <app_func@plt-0x4> ++ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <.*> + .*: e08fe00e add lr, pc, lr + .*: e5bef008 ldr pc, \[lr, #8\]! + .*: .* .word .* +diff --git a/ld/testsuite/ld-arm/farcall-mixed-lib.d b/ld/testsuite/ld-arm/farcall-mixed-lib.d +index b736983..ad7352b 100644 +--- a/ld/testsuite/ld-arm/farcall-mixed-lib.d ++++ b/ld/testsuite/ld-arm/farcall-mixed-lib.d +@@ -5,9 +5,9 @@ start address 0x.* + + Disassembly of section .plt: + +-.* <app_func@plt-0x14>: ++.* <.plt>: + .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <app_func@plt-0x4> ++ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <.*> + .*: e08fe00e add lr, pc, lr + .*: e5bef008 ldr pc, \[lr, #8\]! + .*: .* +diff --git a/ld/testsuite/ld-arm/ifunc-10.dd b/ld/testsuite/ld-arm/ifunc-10.dd +index d96c086..05e4be5 100644 +--- a/ld/testsuite/ld-arm/ifunc-10.dd ++++ b/ld/testsuite/ld-arm/ifunc-10.dd +@@ -4,9 +4,9 @@ + + Disassembly of section \.plt: + +-00009000 <atf2@plt-0x14>: ++00009000 <.plt>: + 9000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <atf2@plt-0x4> ++ 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <.*> + 9008: e08fe00e add lr, pc, lr + 900c: e5bef008 ldr pc, \[lr, #8\]! + #------------------------------------------------------------------------------ +diff --git a/ld/testsuite/ld-arm/ifunc-14.dd b/ld/testsuite/ld-arm/ifunc-14.dd +index cbad1c8..281373c 100644 +--- a/ld/testsuite/ld-arm/ifunc-14.dd ++++ b/ld/testsuite/ld-arm/ifunc-14.dd +@@ -4,9 +4,9 @@ + + Disassembly of section \.plt: + +-00009000 <f2t@plt-0x14>: ++00009000 <.plt>: + 9000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <__irel_end\+0xff0> ++ 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <.*> + 9008: e08fe00e add lr, pc, lr + 900c: e5bef008 ldr pc, \[lr, #8\]! + #------------------------------------------------------------------------------ +diff --git a/ld/testsuite/ld-arm/ifunc-15.dd b/ld/testsuite/ld-arm/ifunc-15.dd +index f23e8e8..d3fbf9d 100644 +--- a/ld/testsuite/ld-arm/ifunc-15.dd ++++ b/ld/testsuite/ld-arm/ifunc-15.dd +@@ -4,9 +4,9 @@ + + Disassembly of section \.plt: + +-00009000 <f2t@plt-0x14>: ++00009000 <.plt>: + 9000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <__irel_end\+0xff0> ++ 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <.*> + 9008: e08fe00e add lr, pc, lr + 900c: e5bef008 ldr pc, \[lr, #8\]! + #------------------------------------------------------------------------------ +diff --git a/ld/testsuite/ld-arm/ifunc-3.dd b/ld/testsuite/ld-arm/ifunc-3.dd +index b267bf1..2297e5a 100644 +--- a/ld/testsuite/ld-arm/ifunc-3.dd ++++ b/ld/testsuite/ld-arm/ifunc-3.dd +@@ -4,9 +4,9 @@ + + Disassembly of section \.plt: + +-00009000 <f2@plt-0x14>: ++00009000 <.plt>: + 9000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <f2@plt-0x4> ++ 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <.*> + 9008: e08fe00e add lr, pc, lr + 900c: e5bef008 ldr pc, \[lr, #8\]! + #------------------------------------------------------------------------------ +diff --git a/ld/testsuite/ld-arm/ifunc-4.dd b/ld/testsuite/ld-arm/ifunc-4.dd +index 6ce996b..647a340 100644 +--- a/ld/testsuite/ld-arm/ifunc-4.dd ++++ b/ld/testsuite/ld-arm/ifunc-4.dd +@@ -4,9 +4,9 @@ + + Disassembly of section \.plt: + +-00009000 <atf2@plt-0x14>: ++00009000 <.plt>: + 9000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <atf2@plt-0x4> ++ 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <.*> + 9008: e08fe00e add lr, pc, lr + 900c: e5bef008 ldr pc, \[lr, #8\]! + #------------------------------------------------------------------------------ +diff --git a/ld/testsuite/ld-arm/ifunc-9.dd b/ld/testsuite/ld-arm/ifunc-9.dd +index af7ec4b..cc4afa8 100644 +--- a/ld/testsuite/ld-arm/ifunc-9.dd ++++ b/ld/testsuite/ld-arm/ifunc-9.dd +@@ -4,9 +4,9 @@ + + Disassembly of section \.plt: + +-00009000 <f2@plt-0x14>: ++00009000 <.plt>: + 9000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <f2@plt-0x4> ++ 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <.*> + 9008: e08fe00e add lr, pc, lr + 900c: e5bef008 ldr pc, \[lr, #8\]! + #------------------------------------------------------------------------------ +diff --git a/ld/testsuite/ld-arm/long-plt-format.d b/ld/testsuite/ld-arm/long-plt-format.d +index b0a1abc..b14d9b5 100644 +--- a/ld/testsuite/ld-arm/long-plt-format.d ++++ b/ld/testsuite/ld-arm/long-plt-format.d +@@ -3,7 +3,7 @@ + + Disassembly of section .plt: + +-.* <foo@plt-0x14>: ++.* <.plt>: + .*: .* + .*: .* + .*: .* +diff --git a/ld/testsuite/ld-arm/mixed-app-v5.d b/ld/testsuite/ld-arm/mixed-app-v5.d +index 0ad39e6..9c734a9 100644 +--- a/ld/testsuite/ld-arm/mixed-app-v5.d ++++ b/ld/testsuite/ld-arm/mixed-app-v5.d +@@ -6,9 +6,9 @@ start address 0x.* + + Disassembly of section .plt: + +-.* <lib_func2@plt-0x14>: ++.* <.plt>: + .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func2@plt-0x4> ++ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <.*> + .*: e08fe00e add lr, pc, lr + .*: e5bef008 ldr pc, \[lr, #8\]! + .*: .* +diff --git a/ld/testsuite/ld-arm/mixed-app.d b/ld/testsuite/ld-arm/mixed-app.d +index 6083161..4bcbdad 100644 +--- a/ld/testsuite/ld-arm/mixed-app.d ++++ b/ld/testsuite/ld-arm/mixed-app.d +@@ -6,9 +6,9 @@ start address 0x.* + + Disassembly of section .plt: + +-.* <lib_func2@plt-0x14>: ++.* <.plt>: + .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func2@plt-0x4> ++ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <.*> + .*: e08fe00e add lr, pc, lr + .*: e5bef008 ldr pc, \[lr, #8\]! + .*: .* +diff --git a/ld/testsuite/ld-arm/mixed-lib.d b/ld/testsuite/ld-arm/mixed-lib.d +index 271692c..a4bb26b 100644 +--- a/ld/testsuite/ld-arm/mixed-lib.d ++++ b/ld/testsuite/ld-arm/mixed-lib.d +@@ -6,9 +6,9 @@ start address 0x.* + + Disassembly of section .plt: + +-.* <app_func2@plt-0x14>: ++.* <.plt>: + .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) +- .*: e59fe004 ldr lr, \[pc, #4\] ; .* <app_func2@plt-0x4> ++ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <.*> + .*: e08fe00e add lr, pc, lr + .*: e5bef008 ldr pc, \[lr, #8\]! + .*: .* +diff --git a/ld/testsuite/ld-arm/tls-lib-loc.d b/ld/testsuite/ld-arm/tls-lib-loc.d +index 27789b4..2e641b3 100644 +--- a/ld/testsuite/ld-arm/tls-lib-loc.d ++++ b/ld/testsuite/ld-arm/tls-lib-loc.d +@@ -28,6 +28,6 @@ Disassembly of section .text: + + [0-9a-f]+ <foo>: + [0-9a-f]+: e59f0004 ldr r0, \[pc, #4\] ; 818c .* +- [0-9a-f]+: fafffff2 blx 8154 <.*\+0x8154> ++ [0-9a-f]+: fafffff2 blx 8154 <.*> + [0-9a-f]+: e1a00000 nop ; .* + 818c: 000080a0 .word 0x000080a0 +diff --git a/ld/testsuite/ld-cris/dso-pltdis1.d b/ld/testsuite/ld-cris/dso-pltdis1.d +index 4bc3c70..e2c0f93 100644 +--- a/ld/testsuite/ld-cris/dso-pltdis1.d ++++ b/ld/testsuite/ld-cris/dso-pltdis1.d +@@ -20,7 +20,7 @@ + + Disassembly of section \.plt: + +-0+1b4 <(dsofn4@plt-0x1a|dsofn@plt-0x34)>: ++0+1b4 <.*>: + 1b4: 84e2 subq 4,\$sp + 1b6: 0401 addoq 4,\$r0,\$acr + 1b8: 7e7a move \$mof,\[\$sp\] +@@ -45,7 +45,7 @@ Disassembly of section \.plt: + 1f0: bf09 jump \$acr + 1f2: b005 nop + 1f4: 3f7e .... .... move .*,\$mof +- 1fa: bf0e baff ffff ba 1b4 <(dsofn4@plt-0x1a|dsofn@plt-0x34)> ++ 1fa: bf0e baff ffff ba 1b4 <.*> + 200: b005 nop + + Disassembly of section \.text: +@@ -57,5 +57,5 @@ Disassembly of section \.text: + 0+20a <dsofn4>: + 20a: 7f0d ae20 0000 lapc 22b8 <_GLOBAL_OFFSET_TABLE_>,\$r0 + 210: 5f0d 1400 addo\.w 0x14,\$r0,\$acr +- 214: bfbe baff ffff bsr 1ce <(dsofn4@plt|dsofn@plt-0x1a)> ++ 214: bfbe baff ffff bsr 1ce <.*> + #pass +diff --git a/ld/testsuite/ld-cris/dso-pltdis2.d b/ld/testsuite/ld-cris/dso-pltdis2.d +index 5348a8a..24da97a 100644 +--- a/ld/testsuite/ld-cris/dso-pltdis2.d ++++ b/ld/testsuite/ld-cris/dso-pltdis2.d +@@ -12,7 +12,7 @@ + + Disassembly of section \.plt: + +-0+1b4 <(dsofn4@plt-0x1a|dsofn@plt-0x34)>: ++0+1b4 <.*>: + + 1b4: 84e2 subq 4,\$sp + 1b6: 0401 addoq 4,\$r0,\$acr +@@ -44,7 +44,7 @@ Disassembly of section \.plt: + Disassembly of section \.text: + #... + 0+202 <dsofn3>: +- 202: bfbe e6ff ffff bsr 1e8 <(dsofn@plt|dsofn4@plt\+0x1a)> ++ 202: bfbe e6ff ffff bsr 1e8 <.*> + 208: b005 nop + + 0+20a <dsofn4>: +diff --git a/ld/testsuite/ld-cris/dso12-pltdis.d b/ld/testsuite/ld-cris/dso12-pltdis.d +index 71a1748..187730b 100644 +--- a/ld/testsuite/ld-cris/dso12-pltdis.d ++++ b/ld/testsuite/ld-cris/dso12-pltdis.d +@@ -11,7 +11,7 @@ + + Disassembly of section \.plt: + +-0+1e4 <dsofn4@plt-0x1a>: ++0+1e4 <.plt>: + + 1e4: 84e2 subq 4,\$sp + 1e6: 0401 addoq 4,\$r0,\$acr +@@ -24,21 +24,21 @@ Disassembly of section \.plt: + \.\.\. + + 0+1fe <dsofn4@plt>: +- 1fe: 6f0d 0c00 0000 addo\.d c <dsofn4@plt-0x1f2>,\$r0,\$acr ++ 1fe: 6f0d 0c00 0000 addo\.d c <.*>,\$r0,\$acr + 204: 6ffa move\.d \[\$acr\],\$acr + 206: bf09 jump \$acr + 208: b005 nop +- 20a: 3f7e 0000 0000 move 0 <dsofn4@plt-0x1fe>,\$mof +- 210: bf0e d4ff ffff ba 1e4 <dsofn4@plt-0x1a> ++ 20a: 3f7e 0000 0000 move 0 <.*>,\$mof ++ 210: bf0e d4ff ffff ba 1e4 <.*> + 216: b005 nop + + 0+218 <dsofn@plt>: +- 218: 6f0d 1000 0000 addo\.d 10 <dsofn4@plt-0x1ee>,\$r0,\$acr ++ 218: 6f0d 1000 0000 addo\.d 10 <.*>,\$r0,\$acr + 21e: 6ffa move\.d \[\$acr\],\$acr + 220: bf09 jump \$acr + 222: b005 nop +- 224: 3f7e 0c00 0000 move c <dsofn4@plt-0x1f2>,\$mof +- 22a: bf0e baff ffff ba 1e4 <dsofn4@plt-0x1a> ++ 224: 3f7e 0c00 0000 move c <.*>,\$mof ++ 22a: bf0e baff ffff ba 1e4 <.*> + 230: b005 nop + + Disassembly of section \.text: +diff --git a/ld/testsuite/ld-elf/symbolic-func.r b/ld/testsuite/ld-elf/symbolic-func.r +index 3d31f8f..448b01a 100644 +--- a/ld/testsuite/ld-elf/symbolic-func.r ++++ b/ld/testsuite/ld-elf/symbolic-func.r +@@ -14,5 +14,5 @@ + + Relocation section.* + *Offset.* +-0*[1-9a-f][0-9a-f]* +[^ ]+ +[^ ]+ +([0-9a-f]+( +\.text( \+ [0-9a-f]+)?)?)? ++0*[1-9a-f][0-9a-f]* +[^ ]+ +[^ ]+ +([0-9a-f]+( +(\.text|fun)( \+ [0-9a-f]+)?)?)? + #pass +diff --git a/ld/testsuite/ld-frv/fdpic-pie-1.d b/ld/testsuite/ld-frv/fdpic-pie-1.d +index 0e37324..5369d07 100644 +--- a/ld/testsuite/ld-frv/fdpic-pie-1.d ++++ b/ld/testsuite/ld-frv/fdpic-pie-1.d +@@ -42,7 +42,7 @@ Disassembly of section \.data: + [0-9a-f ]+: R_FRV_32 \.text + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x8>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0 + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text + [0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0 +diff --git a/ld/testsuite/ld-frv/fdpic-pie-2.d b/ld/testsuite/ld-frv/fdpic-pie-2.d +index 3583a3b..40c1532 100644 +--- a/ld/testsuite/ld-frv/fdpic-pie-2.d ++++ b/ld/testsuite/ld-frv/fdpic-pie-2.d +@@ -42,7 +42,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: R_FRV_32 \.text + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x18>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0 + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text + [0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0 +diff --git a/ld/testsuite/ld-frv/fdpic-pie-6.d b/ld/testsuite/ld-frv/fdpic-pie-6.d +index c59b304..743166e 100644 +--- a/ld/testsuite/ld-frv/fdpic-pie-6.d ++++ b/ld/testsuite/ld-frv/fdpic-pie-6.d +@@ -9,11 +9,11 @@ Disassembly of section \.plt: + + [0-9a-f ]+<\.plt>: + [0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0 +-[0-9a-f ]+: c0 1a 00 06 bra [0-9a-f]+ <F6-0x10> ++[0-9a-f ]+: c0 1a 00 06 bra [0-9a-f]+ <.*> + [0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0 +-[0-9a-f ]+: c0 1a 00 04 bra [0-9a-f]+ <F6-0x10> ++[0-9a-f ]+: c0 1a 00 04 bra [0-9a-f]+ <.*> + [0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0 +-[0-9a-f ]+: c0 1a 00 02 bra [0-9a-f]+ <F6-0x10> ++[0-9a-f ]+: c0 1a 00 02 bra [0-9a-f]+ <.*> + [0-9a-f ]+: 00 00 00 18 add\.p gr0,gr24,gr0 + [0-9a-f ]+: 88 08 f1 40 ldd @\(gr15,gr0\),gr4 + [0-9a-f ]+: 80 30 40 00 jmpl @\(gr4,gr0\) +@@ -22,7 +22,7 @@ Disassembly of section \.plt: + Disassembly of section \.text: + + [0-9a-f ]+<F6>: +-[0-9a-f ]+: fe 3f ff fe call [0-9a-f]+ <F6-0x8> ++[0-9a-f ]+: fe 3f ff fe call [0-9a-f]+ <.*> + [0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0 + [0-9a-f ]+: 80 fc 00 24 setlos 0x24,gr0 + [0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0 +@@ -48,7 +48,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: R_FRV_32 WFb + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x20>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 03 b0 .* + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF9 + [0-9a-f ]+: 00 00 00 02 .* +diff --git a/ld/testsuite/ld-frv/fdpic-pie-7.d b/ld/testsuite/ld-frv/fdpic-pie-7.d +index 7ebd0b7..7eceec2 100644 +--- a/ld/testsuite/ld-frv/fdpic-pie-7.d ++++ b/ld/testsuite/ld-frv/fdpic-pie-7.d +@@ -42,7 +42,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: R_FRV_32 \.text + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x8>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0 + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text + [0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0 +diff --git a/ld/testsuite/ld-frv/fdpic-pie-8.d b/ld/testsuite/ld-frv/fdpic-pie-8.d +index 0de4a81..8f7c344 100644 +--- a/ld/testsuite/ld-frv/fdpic-pie-8.d ++++ b/ld/testsuite/ld-frv/fdpic-pie-8.d +@@ -42,7 +42,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: R_FRV_32 \.text + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x18>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0 + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text + [0-9a-f ]+: 00 00 00 02 add\.p gr0,fp,gr0 +diff --git a/ld/testsuite/ld-frv/fdpic-shared-1.d b/ld/testsuite/ld-frv/fdpic-shared-1.d +index 7f88e18..4968deb 100644 +--- a/ld/testsuite/ld-frv/fdpic-shared-1.d ++++ b/ld/testsuite/ld-frv/fdpic-shared-1.d +@@ -42,7 +42,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: R_FRV_32 \.text + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x8>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0 + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text + [0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0 +diff --git a/ld/testsuite/ld-frv/fdpic-shared-2.d b/ld/testsuite/ld-frv/fdpic-shared-2.d +index cb4b68d..13e140a 100644 +--- a/ld/testsuite/ld-frv/fdpic-shared-2.d ++++ b/ld/testsuite/ld-frv/fdpic-shared-2.d +@@ -9,11 +9,11 @@ Disassembly of section \.plt: + + [0-9a-f ]+ <\.plt>: + [0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0 +-[0-9a-f ]+: c0 1a 00 06 bra [0-9a-f]+ <F2-0x10> ++[0-9a-f ]+: c0 1a 00 06 bra [0-9a-f]+ <.*> + [0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0 +-[0-9a-f ]+: c0 1a 00 04 bra [0-9a-f]+ <F2-0x10> ++[0-9a-f ]+: c0 1a 00 04 bra [0-9a-f]+ <.*> + [0-9a-f ]+: 00 00 00 18 add\.p gr0,gr24,gr0 +-[0-9a-f ]+: c0 1a 00 02 bra [0-9a-f]+ <F2-0x10> ++[0-9a-f ]+: c0 1a 00 02 bra [0-9a-f]+ <.*> + [0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0 + [0-9a-f ]+: 88 08 f1 40 ldd @\(gr15,gr0\),gr4 + [0-9a-f ]+: 80 30 40 00 jmpl @\(gr4,gr0\) +@@ -22,7 +22,7 @@ Disassembly of section \.plt: + Disassembly of section \.text: + + [0-9a-f ]+<F2>: +-[0-9a-f ]+: fe 3f ff fe call [0-9a-f]+ <F2-0x8> ++[0-9a-f ]+: fe 3f ff fe call [0-9a-f]+ <.*> + + [0-9a-f ]+<GF0>: + [0-9a-f ]+: 80 40 f0 10 addi gr15,16,gr0 +@@ -55,7 +55,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: R_FRV_32 GFb + [0-9A-F ]+isassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x20>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 04 a4 .* + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE GF9 + [0-9a-f ]+: 00 00 00 00 .* +diff --git a/ld/testsuite/ld-frv/fdpic-shared-3.d b/ld/testsuite/ld-frv/fdpic-shared-3.d +index fceb16a..fc59185 100644 +--- a/ld/testsuite/ld-frv/fdpic-shared-3.d ++++ b/ld/testsuite/ld-frv/fdpic-shared-3.d +@@ -42,7 +42,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: R_FRV_32 \.text + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x38>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0 + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text + [0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0 +diff --git a/ld/testsuite/ld-frv/fdpic-shared-4.d b/ld/testsuite/ld-frv/fdpic-shared-4.d +index 4045562..298ae28 100644 +--- a/ld/testsuite/ld-frv/fdpic-shared-4.d ++++ b/ld/testsuite/ld-frv/fdpic-shared-4.d +@@ -42,7 +42,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: R_FRV_32 \.text + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x18>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0 + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text + [0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0 +diff --git a/ld/testsuite/ld-frv/fdpic-shared-5.d b/ld/testsuite/ld-frv/fdpic-shared-5.d +index 009c62c..dbfd143 100644 +--- a/ld/testsuite/ld-frv/fdpic-shared-5.d ++++ b/ld/testsuite/ld-frv/fdpic-shared-5.d +@@ -9,11 +9,11 @@ Disassembly of section \.plt: + + [0-9a-f ]+<\.plt>: + [0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0 +-[0-9a-f ]+: c0 1a 00 06 bra [0-9a-f]+ <F5-0x10> ++[0-9a-f ]+: c0 1a 00 06 bra [0-9a-f]+ <.*> + [0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0 +-[0-9a-f ]+: c0 1a 00 04 bra [0-9a-f]+ <F5-0x10> ++[0-9a-f ]+: c0 1a 00 04 bra [0-9a-f]+ <.*> + [0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0 +-[0-9a-f ]+: c0 1a 00 02 bra [0-9a-f]+ <F5-0x10> ++[0-9a-f ]+: c0 1a 00 02 bra [0-9a-f]+ <.*> + [0-9a-f ]+: 00 00 00 18 add\.p gr0,gr24,gr0 + [0-9a-f ]+: 88 08 f1 40 ldd @\(gr15,gr0\),gr4 + [0-9a-f ]+: 80 30 40 00 jmpl @\(gr4,gr0\) +@@ -22,7 +22,7 @@ Disassembly of section \.plt: + Disassembly of section \.text: + + [0-9a-f ]+<F5>: +-[0-9a-f ]+: fe 3f ff fe call [0-9a-f]+ <F5-0x8> ++[0-9a-f ]+: fe 3f ff fe call [0-9a-f]+ <.*> + [0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0 + [0-9a-f ]+: 80 fc 00 24 setlos 0x24,gr0 + [0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0 +@@ -48,7 +48,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: R_FRV_32 UFb + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x20>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 04 7c .* + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE UF9 + [0-9a-f ]+: 00 00 00 00 .* +diff --git a/ld/testsuite/ld-frv/fdpic-shared-6.d b/ld/testsuite/ld-frv/fdpic-shared-6.d +index 06a335f..2191af8 100644 +--- a/ld/testsuite/ld-frv/fdpic-shared-6.d ++++ b/ld/testsuite/ld-frv/fdpic-shared-6.d +@@ -9,11 +9,11 @@ Disassembly of section \.plt: + + [0-9a-f ]+<\.plt>: + [0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0 +-[0-9a-f ]+: c0 1a 00 06 bra [0-9a-f]+ <F6-0x10> ++[0-9a-f ]+: c0 1a 00 06 bra [0-9a-f]+ <.*> + [0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0 +-[0-9a-f ]+: c0 1a 00 04 bra [0-9a-f]+ <F6-0x10> ++[0-9a-f ]+: c0 1a 00 04 bra [0-9a-f]+ <.*> + [0-9a-f ]+: 00 00 00 10 add\.p gr0,gr16,gr0 +-[0-9a-f ]+: c0 1a 00 02 bra [0-9a-f]+ <F6-0x10> ++[0-9a-f ]+: c0 1a 00 02 bra [0-9a-f]+ <.*> + [0-9a-f ]+: 00 00 00 18 add\.p gr0,gr24,gr0 + [0-9a-f ]+: 88 08 f1 40 ldd @\(gr15,gr0\),gr4 + [0-9a-f ]+: 80 30 40 00 jmpl @\(gr4,gr0\) +@@ -22,7 +22,7 @@ Disassembly of section \.plt: + Disassembly of section \.text: + + [0-9a-f ]+<F6>: +-[0-9a-f ]+: fe 3f ff fe call [0-9a-f]+ <F6-0x8> ++[0-9a-f ]+: fe 3f ff fe call [0-9a-f]+ <.*> + [0-9a-f ]+: 80 40 f0 0c addi gr15,12,gr0 + [0-9a-f ]+: 80 fc 00 24 setlos 0x24,gr0 + [0-9a-f ]+: 80 f4 00 20 setlo 0x20,gr0 +@@ -48,7 +48,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: R_FRV_32 WFb + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x20>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 03 60 .* + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF9 + [0-9a-f ]+: 00 00 00 00 .* +diff --git a/ld/testsuite/ld-frv/fdpic-shared-7.d b/ld/testsuite/ld-frv/fdpic-shared-7.d +index 2004a84..071dd8f 100644 +--- a/ld/testsuite/ld-frv/fdpic-shared-7.d ++++ b/ld/testsuite/ld-frv/fdpic-shared-7.d +@@ -42,7 +42,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: R_FRV_32 \.text + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x8>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0 + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text + [0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0 +diff --git a/ld/testsuite/ld-frv/fdpic-shared-8.d b/ld/testsuite/ld-frv/fdpic-shared-8.d +index 543d313..e50e7b9 100644 +--- a/ld/testsuite/ld-frv/fdpic-shared-8.d ++++ b/ld/testsuite/ld-frv/fdpic-shared-8.d +@@ -42,7 +42,7 @@ Disassembly of section \.text: + [0-9a-f ]+: R_FRV_32 \.text + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x38>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0 + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text + [0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0 +diff --git a/ld/testsuite/ld-frv/fdpic-shared-local-2.d b/ld/testsuite/ld-frv/fdpic-shared-local-2.d +index 51ca126..0074172 100644 +--- a/ld/testsuite/ld-frv/fdpic-shared-local-2.d ++++ b/ld/testsuite/ld-frv/fdpic-shared-local-2.d +@@ -42,7 +42,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: R_FRV_32 \.text + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x38>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 00 04 add\.p gr0,gr4,gr0 + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text + [0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0 +diff --git a/ld/testsuite/ld-frv/fdpic-shared-local-8.d b/ld/testsuite/ld-frv/fdpic-shared-local-8.d +index 8d2c67e..7d238e9 100644 +--- a/ld/testsuite/ld-frv/fdpic-shared-local-8.d ++++ b/ld/testsuite/ld-frv/fdpic-shared-local-8.d +@@ -42,7 +42,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: R_FRV_32 \.text + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x38>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 00 00 08 add\.p gr0,gr8,gr0 + [0-9a-f ]+: R_FRV_FUNCDESC_VALUE \.text + [0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0 +diff --git a/ld/testsuite/ld-frv/fdpic-static-1.d b/ld/testsuite/ld-frv/fdpic-static-1.d +index 1c4dce1..9bab5d7 100644 +--- a/ld/testsuite/ld-frv/fdpic-static-1.d ++++ b/ld/testsuite/ld-frv/fdpic-static-1.d +@@ -51,7 +51,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0 + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x8>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0 + [0-9a-f ]+: 00 01 41 18 sub\.p gr20,gr24,gr0 + +diff --git a/ld/testsuite/ld-frv/fdpic-static-2.d b/ld/testsuite/ld-frv/fdpic-static-2.d +index d2b794f..e388e2c 100644 +--- a/ld/testsuite/ld-frv/fdpic-static-2.d ++++ b/ld/testsuite/ld-frv/fdpic-static-2.d +@@ -67,7 +67,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0 + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x38>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0 + [0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0 + [0-9a-f ]+: 00 01 00 98 addx\.p gr16,gr24,gr0,icc0 +diff --git a/ld/testsuite/ld-frv/fdpic-static-6.d b/ld/testsuite/ld-frv/fdpic-static-6.d +index 491b7c7..1c197a2 100644 +--- a/ld/testsuite/ld-frv/fdpic-static-6.d ++++ b/ld/testsuite/ld-frv/fdpic-static-6.d +@@ -36,7 +36,7 @@ Disassembly of section \.dat[0-9a-f ]+: + \.\.\. + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x38>: ++[0-9a-f ]+<.got>: + \.\.\. + + [0-9a-f ]+<_GLOBAL_OFFSET_TABLE_>: +diff --git a/ld/testsuite/ld-frv/fdpic-static-7.d b/ld/testsuite/ld-frv/fdpic-static-7.d +index 6f8313c..77899f6 100644 +--- a/ld/testsuite/ld-frv/fdpic-static-7.d ++++ b/ld/testsuite/ld-frv/fdpic-static-7.d +@@ -51,7 +51,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0 + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x8>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0 + [0-9a-f ]+: 00 01 41 18 sub\.p gr20,gr24,gr0 + +diff --git a/ld/testsuite/ld-frv/fdpic-static-8.d b/ld/testsuite/ld-frv/fdpic-static-8.d +index c0cc732..03e795e 100644 +--- a/ld/testsuite/ld-frv/fdpic-static-8.d ++++ b/ld/testsuite/ld-frv/fdpic-static-8.d +@@ -67,7 +67,7 @@ Disassembly of section \.dat[0-9a-f ]+: + [0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0 + Disassembly of section \.got: + +-[0-9a-f ]+<_GLOBAL_OFFSET_TABLE_-0x38>: ++[0-9a-f ]+<.got>: + [0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0 + [0-9a-f ]+: 00 01 41 88 subx\.p gr20,gr8,gr0,icc0 + [0-9a-f ]+: 00 01 00 9c addx\.p gr16,gr28,gr0,icc0 +diff --git a/ld/testsuite/ld-frv/tls-dynamic-2.d b/ld/testsuite/ld-frv/tls-dynamic-2.d +index 07bf332..d943e86 100644 +--- a/ld/testsuite/ld-frv/tls-dynamic-2.d ++++ b/ld/testsuite/ld-frv/tls-dynamic-2.d +@@ -155,7 +155,7 @@ Disassembly of section \.text: + [0-9a-f ]+: 80 88 00 00 nop + Disassembly of section \.got: + +-[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_-0x60)>: ++[0-9a-f ]+<.*>: + [0-9a-f ]+: 00 01 02 c0 .* + [0-9a-f ]+: 00 00 08 21 .* + [0-9a-f ]+: 00 01 02 c0 .* +diff --git a/ld/testsuite/ld-frv/tls-initial-shared-2.d b/ld/testsuite/ld-frv/tls-initial-shared-2.d +index e4ea6a1..7f73c27 100644 +--- a/ld/testsuite/ld-frv/tls-initial-shared-2.d ++++ b/ld/testsuite/ld-frv/tls-initial-shared-2.d +@@ -149,7 +149,7 @@ Disassembly of section \.text: + [0-9a-f ]+: 92 c8 f0 5c ldi @\(gr15,92\),gr9 + Disassembly of section \.got: + +-[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_-0x20)>: ++[0-9a-f ]+<.*>: + [0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0 + [0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss + [0-9a-f ]+: 00 00 10 11 add\.p sp,gr17,gr0 +diff --git a/ld/testsuite/ld-frv/tls-relax-shared-2.d b/ld/testsuite/ld-frv/tls-relax-shared-2.d +index c07bb35..7519247 100644 +--- a/ld/testsuite/ld-frv/tls-relax-shared-2.d ++++ b/ld/testsuite/ld-frv/tls-relax-shared-2.d +@@ -151,7 +151,7 @@ Disassembly of section \.text: + [0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\) + Disassembly of section \.got: + +-[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_-0x60)>: ++[0-9a-f ]+<.*>: + [0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0 + [0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss + [0-9a-f ]+: 00 00 17 f3 \*unknown\* +diff --git a/ld/testsuite/ld-frv/tls-shared-2.d b/ld/testsuite/ld-frv/tls-shared-2.d +index bd92cdb..1e6b533 100644 +--- a/ld/testsuite/ld-frv/tls-shared-2.d ++++ b/ld/testsuite/ld-frv/tls-shared-2.d +@@ -151,7 +151,7 @@ Disassembly of section \.text: + [0-9a-f ]+: 82 30 80 00 calll @\(gr8,gr0\) + Disassembly of section \.got: + +-[0-9a-f ]+<(__data_start|_GLOBAL_OFFSET_TABLE_-0x60)>: ++[0-9a-f ]+<.*>: + [0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0 + [0-9a-f ]+: R_FRV_TLSDESC_VALUE \.tbss + [0-9a-f ]+: 00 00 17 f3 \*unknown\* +diff --git a/ld/testsuite/ld-i386/plt-nacl.pd b/ld/testsuite/ld-i386/plt-nacl.pd +index 0f8e114..d95e888e 100644 +--- a/ld/testsuite/ld-i386/plt-nacl.pd ++++ b/ld/testsuite/ld-i386/plt-nacl.pd +@@ -8,7 +8,7 @@ + + Disassembly of section .plt: + +-[0-9a-f]+ <fn1@plt-0x40>: ++[0-9a-f]+ <.plt>: + +[0-9a-f]+: ff 35 ([0-9a-f]{2} ){4} * pushl 0x[0-9a-f]+ + +[0-9a-f]+: 8b 0d ([0-9a-f]{2} ){4} * mov 0x[0-9a-f]+,%ecx + +[0-9a-f]+: 83 e1 e0 and \$0xffffffe0,%ecx +@@ -87,7 +87,7 @@ Disassembly of section .plt: + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 68 00 00 00 00 push \$0x0 +- +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <fn1@plt-0x40> ++ +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <.plt> + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 90 nop +@@ -137,7 +137,7 @@ Disassembly of section .plt: + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 68 08 00 00 00 push \$0x8 +- +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <fn1@plt-0x40> ++ +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <.plt> + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 90 nop +diff --git a/ld/testsuite/ld-i386/plt-pic-nacl.pd b/ld/testsuite/ld-i386/plt-pic-nacl.pd +index 77e8a2a..03aa007 100644 +--- a/ld/testsuite/ld-i386/plt-pic-nacl.pd ++++ b/ld/testsuite/ld-i386/plt-pic-nacl.pd +@@ -8,7 +8,7 @@ + + Disassembly of section .plt: + +-[0-9a-f]+ <fn1@plt-0x40>: ++[0-9a-f]+ <.plt>: + +[0-9a-f]+: ff 73 04 pushl 0x4\(%ebx\) + +[0-9a-f]+: 8b 4b 08 mov 0x8\(%ebx\),%ecx + +[0-9a-f]+: 83 e1 e0 and \$0xffffffe0,%ecx +@@ -93,7 +93,7 @@ Disassembly of section .plt: + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 68 00 00 00 00 push \$0x0 +- +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <fn1@plt-0x40> ++ +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <.plt> + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 90 nop +@@ -143,7 +143,7 @@ Disassembly of section .plt: + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 68 08 00 00 00 push \$0x8 +- +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <fn1@plt-0x40> ++ +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <.plt> + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 90 nop + +[0-9a-f]+: 90 nop +diff --git a/ld/testsuite/ld-i386/plt-pic.pd b/ld/testsuite/ld-i386/plt-pic.pd +index 5fe2930..4122c46 100644 +--- a/ld/testsuite/ld-i386/plt-pic.pd ++++ b/ld/testsuite/ld-i386/plt-pic.pd +@@ -8,7 +8,7 @@ + + Disassembly of section .plt: + +-[0-9a-f]+ <fn1@plt-0x10>: ++[0-9a-f]+ <.plt>: + +[0-9a-f]+: ff b3 04 00 00 00 pushl 0x4\(%ebx\) + +[0-9a-f]+: ff a3 08 00 00 00 jmp \*0x8\(%ebx\) + #... +@@ -16,9 +16,9 @@ Disassembly of section .plt: + [0-9a-f]+ <fn1@plt>: + +[0-9a-f]+: ff a3 ([0-9a-f]{2} ){4} * jmp \*0x[0-9a-f]+\(%ebx\) + +[0-9a-f]+: 68 00 00 00 00 push \$0x0 +- +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <fn1@plt-0x10> ++ +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <.plt> + + [0-9a-f]+ <fn2@plt>: + +[0-9a-f]+: ff a3 ([0-9a-f]{2} ){4} * jmp \*0x[0-9a-f]+\(%ebx\) + +[0-9a-f]+: 68 08 00 00 00 push \$0x8 +- +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <fn1@plt-0x10> ++ +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <.plt> +diff --git a/ld/testsuite/ld-i386/plt.pd b/ld/testsuite/ld-i386/plt.pd +index 1b1f57d..a6e6d35 100644 +--- a/ld/testsuite/ld-i386/plt.pd ++++ b/ld/testsuite/ld-i386/plt.pd +@@ -8,7 +8,7 @@ + + Disassembly of section .plt: + +-[0-9a-f]+ <fn1@plt-0x10>: ++[0-9a-f]+ <.plt>: + +[0-9a-f]+: ff 35 ([0-9a-f]{2} ){4} * pushl 0x[0-9a-f]+ + +[0-9a-f]+: ff 25 ([0-9a-f]{2} ){4} * jmp \*0x[0-9a-f]+ + #... +@@ -16,9 +16,9 @@ Disassembly of section .plt: + [0-9a-f]+ <fn1@plt>: + +[0-9a-f]+: ff 25 ([0-9a-f]{2} ){4} * jmp \*0x[0-9a-f]+ + +[0-9a-f]+: 68 00 00 00 00 push \$0x0 +- +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <fn1@plt-0x10> ++ +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <.plt> + + [0-9a-f]+ <fn2@plt>: + +[0-9a-f]+: ff 25 ([0-9a-f]{2} ){4} * jmp \*0x[0-9a-f]+ + +[0-9a-f]+: 68 08 00 00 00 push \$0x8 +- +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <fn1@plt-0x10> ++ +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmp [0-9a-f]+ <.plt> +diff --git a/ld/testsuite/ld-i386/pr19636-1d-nacl.d b/ld/testsuite/ld-i386/pr19636-1d-nacl.d +index fef5eea..489eab6 100644 +--- a/ld/testsuite/ld-i386/pr19636-1d-nacl.d ++++ b/ld/testsuite/ld-i386/pr19636-1d-nacl.d +@@ -121,4 +121,4 @@ Disassembly of section .text: + 0+80 <_start>: + [ ]*[a-f0-9]+: 3b 80 f8 ff ff ff cmp -0x8\(%eax\),%eax + [ ]*[a-f0-9]+: ff a0 fc ff ff ff jmp \*-0x4\(%eax\) +-[ ]*[a-f0-9]+: e8 af ff ff ff call 40 <_start-0x40> ++[ ]*[a-f0-9]+: e8 af ff ff ff call 40 <.*> +diff --git a/ld/testsuite/ld-i386/pr19636-1d.d b/ld/testsuite/ld-i386/pr19636-1d.d +index 16e316c..ac86786 100644 +--- a/ld/testsuite/ld-i386/pr19636-1d.d ++++ b/ld/testsuite/ld-i386/pr19636-1d.d +@@ -23,4 +23,4 @@ Disassembly of section .text: + 0+e0 <_start>: + [ ]*[a-f0-9]+: 3b 80 f8 ff ff ff cmp -0x8\(%eax\),%eax + [ ]*[a-f0-9]+: ff a0 fc ff ff ff jmp \*-0x4\(%eax\) +-[ ]*[a-f0-9]+: e8 df ff ff ff call d0 <_start-0x10> ++[ ]*[a-f0-9]+: e8 df ff ff ff call d0 <.*> +diff --git a/ld/testsuite/ld-i386/pr19636-2c-nacl.d b/ld/testsuite/ld-i386/pr19636-2c-nacl.d +index 7543e0e..7a6cce1 100644 +--- a/ld/testsuite/ld-i386/pr19636-2c-nacl.d ++++ b/ld/testsuite/ld-i386/pr19636-2c-nacl.d +@@ -121,6 +121,6 @@ Disassembly of section .text: + 0+80 <_start>: + [ ]*[a-f0-9]+: 3b 80 fc ff ff ff cmp -0x4\(%eax\),%eax + [ ]*[a-f0-9]+: ff a0 fc ff ff ff jmp \*-0x4\(%eax\) +-[ ]*[a-f0-9]+: e8 af ff ff ff call 40 <_start-0x40> ++[ ]*[a-f0-9]+: e8 af ff ff ff call 40 <.*> + [ ]*[a-f0-9]+: 3d 00 00 00 00 cmp \$0x0,%eax +-[ ]*[a-f0-9]+: e8 fc ff ff ff call 97 <_start\+0x17> ++[ ]*[a-f0-9]+: e8 fc ff ff ff call 97 <.*> +diff --git a/ld/testsuite/ld-i386/pr19636-2c.d b/ld/testsuite/ld-i386/pr19636-2c.d +index 98b53aa..08db119 100644 +--- a/ld/testsuite/ld-i386/pr19636-2c.d ++++ b/ld/testsuite/ld-i386/pr19636-2c.d +@@ -23,6 +23,6 @@ Disassembly of section .text: + 0+150 <_start>: + [ ]*[a-f0-9]+: 3b 80 fc ff ff ff cmp -0x4\(%eax\),%eax + [ ]*[a-f0-9]+: ff a0 fc ff ff ff jmp \*-0x4\(%eax\) +-[ ]*[a-f0-9]+: e8 df ff ff ff call 140 <_start-0x10> ++[ ]*[a-f0-9]+: e8 df ff ff ff call 140 <.*> + [ ]*[a-f0-9]+: 3d 00 00 00 00 cmp \$0x0,%eax +-[ ]*[a-f0-9]+: e8 fc ff ff ff call 167 <_start\+0x17> ++[ ]*[a-f0-9]+: e8 fc ff ff ff call 167 <.*> +diff --git a/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d b/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d +index 4e3582d..fd42acc 100644 +--- a/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d ++++ b/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d +@@ -9,11 +9,11 @@ + Disassembly of section .text: + + 0+4000c8 <__start>: +- +[a-f0-9]+: ff 15 2a 00 20 00 callq \*0x20002a\(%rip\) # 6000f8 <bar\+0x200007> +- +[a-f0-9]+: ff 25 24 00 20 00 jmpq \*0x200024\(%rip\) # 6000f8 <bar\+0x200007> +- +[a-f0-9]+: 48 03 05 1d 00 20 00 add 0x20001d\(%rip\),%rax # 6000f8 <bar\+0x200007> +- +[a-f0-9]+: 48 8b 05 16 00 20 00 mov 0x200016\(%rip\),%rax # 6000f8 <bar\+0x200007> +- +[a-f0-9]+: 48 85 05 0f 00 20 00 test %rax,0x20000f\(%rip\) # 6000f8 <bar\+0x200007> ++ +[a-f0-9]+: ff 15 2a 00 20 00 callq \*0x20002a\(%rip\) # 6000f8 <.got> ++ +[a-f0-9]+: ff 25 24 00 20 00 jmpq \*0x200024\(%rip\) # 6000f8 <.got> ++ +[a-f0-9]+: 48 03 05 1d 00 20 00 add 0x20001d\(%rip\),%rax # 6000f8 <.got> ++ +[a-f0-9]+: 48 8b 05 16 00 20 00 mov 0x200016\(%rip\),%rax # 6000f8 <.got> ++ +[a-f0-9]+: 48 85 05 0f 00 20 00 test %rax,0x20000f\(%rip\) # 6000f8 <.got> + +[a-f0-9]+: 48 c7 c0 f1 00 40 00 mov \$0x4000f1,%rax + + 0+4000f0 <foo>: +diff --git a/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d b/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d +index 4e3582d..fd42acc 100644 +--- a/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d ++++ b/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d +@@ -9,11 +9,11 @@ + Disassembly of section .text: + + 0+4000c8 <__start>: +- +[a-f0-9]+: ff 15 2a 00 20 00 callq \*0x20002a\(%rip\) # 6000f8 <bar\+0x200007> +- +[a-f0-9]+: ff 25 24 00 20 00 jmpq \*0x200024\(%rip\) # 6000f8 <bar\+0x200007> +- +[a-f0-9]+: 48 03 05 1d 00 20 00 add 0x20001d\(%rip\),%rax # 6000f8 <bar\+0x200007> +- +[a-f0-9]+: 48 8b 05 16 00 20 00 mov 0x200016\(%rip\),%rax # 6000f8 <bar\+0x200007> +- +[a-f0-9]+: 48 85 05 0f 00 20 00 test %rax,0x20000f\(%rip\) # 6000f8 <bar\+0x200007> ++ +[a-f0-9]+: ff 15 2a 00 20 00 callq \*0x20002a\(%rip\) # 6000f8 <.got> ++ +[a-f0-9]+: ff 25 24 00 20 00 jmpq \*0x200024\(%rip\) # 6000f8 <.got> ++ +[a-f0-9]+: 48 03 05 1d 00 20 00 add 0x20001d\(%rip\),%rax # 6000f8 <.got> ++ +[a-f0-9]+: 48 8b 05 16 00 20 00 mov 0x200016\(%rip\),%rax # 6000f8 <.got> ++ +[a-f0-9]+: 48 85 05 0f 00 20 00 test %rax,0x20000f\(%rip\) # 6000f8 <.got> + +[a-f0-9]+: 48 c7 c0 f1 00 40 00 mov \$0x4000f1,%rax + + 0+4000f0 <foo>: +diff --git a/ld/testsuite/ld-ifunc/pr17154-i386.d b/ld/testsuite/ld-ifunc/pr17154-i386.d +index e526223..16fcd4e 100644 +--- a/ld/testsuite/ld-ifunc/pr17154-i386.d ++++ b/ld/testsuite/ld-ifunc/pr17154-i386.d +@@ -5,7 +5,7 @@ + #target: x86_64-*-* i?86-*-* + + #... +-0+1d0 <\*ABS\*@plt-0x10>: ++0+1d0 <.*>: + [ ]*[a-f0-9]+: ff b3 04 00 00 00 pushl 0x4\(%ebx\) + [ ]*[a-f0-9]+: ff a3 08 00 00 00 jmp \*0x8\(%ebx\) + [ ]*[a-f0-9]+: 00 00 add %al,\(%eax\) +@@ -14,22 +14,22 @@ + 0+1e0 <\*ABS\*@plt>: + [ ]*[a-f0-9]+: ff a3 0c 00 00 00 jmp \*0xc\(%ebx\) + [ ]*[a-f0-9]+: 68 18 00 00 00 push \$0x18 +-[ ]*[a-f0-9]+: e9 e0 ff ff ff jmp 1d0 <\*ABS\*@plt-0x10> ++[ ]*[a-f0-9]+: e9 e0 ff ff ff jmp 1d0 <.*> + + 0+1f0 <func1@plt>: + [ ]*[a-f0-9]+: ff a3 10 00 00 00 jmp \*0x10\(%ebx\) + [ ]*[a-f0-9]+: 68 00 00 00 00 push \$0x0 +-[ ]*[a-f0-9]+: e9 d0 ff ff ff jmp 1d0 <\*ABS\*@plt-0x10> ++[ ]*[a-f0-9]+: e9 d0 ff ff ff jmp 1d0 <.*> + + 0+200 <func2@plt>: + [ ]*[a-f0-9]+: ff a3 14 00 00 00 jmp \*0x14\(%ebx\) + [ ]*[a-f0-9]+: 68 08 00 00 00 push \$0x8 +-[ ]*[a-f0-9]+: e9 c0 ff ff ff jmp 1d0 <\*ABS\*@plt-0x10> ++[ ]*[a-f0-9]+: e9 c0 ff ff ff jmp 1d0 <.*> + + 0+210 <\*ABS\*@plt>: + [ ]*[a-f0-9]+: ff a3 18 00 00 00 jmp \*0x18\(%ebx\) + [ ]*[a-f0-9]+: 68 10 00 00 00 push \$0x10 +-[ ]*[a-f0-9]+: e9 b0 ff ff ff jmp 1d0 <\*ABS\*@plt-0x10> ++[ ]*[a-f0-9]+: e9 b0 ff ff ff jmp 1d0 <.*> + + Disassembly of section .text: + +diff --git a/ld/testsuite/ld-ifunc/pr17154-x86-64.d b/ld/testsuite/ld-ifunc/pr17154-x86-64.d +index 9d2a688..1cdcf50 100644 +--- a/ld/testsuite/ld-ifunc/pr17154-x86-64.d ++++ b/ld/testsuite/ld-ifunc/pr17154-x86-64.d +@@ -5,30 +5,30 @@ + #target: x86_64-*-* + + #... +-0+2b0 <\*ABS\*\+0x30a@plt-0x10>: +-[ ]*[a-f0-9]+: ff 35 5a 01 20 00 pushq 0x20015a\(%rip\) # 200410 <_GLOBAL_OFFSET_TABLE_\+0x8> +-[ ]*[a-f0-9]+: ff 25 5c 01 20 00 jmpq \*0x20015c\(%rip\) # 200418 <_GLOBAL_OFFSET_TABLE_\+0x10> ++0+2b0 <.*>: ++[ ]*[a-f0-9]+: ff 35 5a 01 20 00 pushq 0x20015a\(%rip\) # 200410 <.*> ++[ ]*[a-f0-9]+: ff 25 5c 01 20 00 jmpq \*0x20015c\(%rip\) # 200418 <.*> + [ ]*[a-f0-9]+: 0f 1f 40 00 nopl 0x0\(%rax\) + + 0+2c0 <\*ABS\*\+0x30a@plt>: +-[ ]*[a-f0-9]+: ff 25 5a 01 20 00 jmpq \*0x20015a\(%rip\) # 200420 <_GLOBAL_OFFSET_TABLE_\+0x18> ++[ ]*[a-f0-9]+: ff 25 5a 01 20 00 jmpq \*0x20015a\(%rip\) # 200420 <.*> + [ ]*[a-f0-9]+: 68 03 00 00 00 pushq \$0x3 +-[ ]*[a-f0-9]+: e9 e0 ff ff ff jmpq 2b0 <\*ABS\*\+0x30a@plt-0x10> ++[ ]*[a-f0-9]+: e9 e0 ff ff ff jmpq 2b0 <.*> + + 0+2d0 <func1@plt>: +-[ ]*[a-f0-9]+: ff 25 52 01 20 00 jmpq \*0x200152\(%rip\) # 200428 <_GLOBAL_OFFSET_TABLE_\+0x20> ++[ ]*[a-f0-9]+: ff 25 52 01 20 00 jmpq \*0x200152\(%rip\) # 200428 <.*> + [ ]*[a-f0-9]+: 68 00 00 00 00 pushq \$0x0 +-[ ]*[a-f0-9]+: e9 d0 ff ff ff jmpq 2b0 <\*ABS\*\+0x30a@plt-0x10> ++[ ]*[a-f0-9]+: e9 d0 ff ff ff jmpq 2b0 <.*> + + 0+2e0 <func2@plt>: +-[ ]*[a-f0-9]+: ff 25 4a 01 20 00 jmpq \*0x20014a\(%rip\) # 200430 <_GLOBAL_OFFSET_TABLE_\+0x28> ++[ ]*[a-f0-9]+: ff 25 4a 01 20 00 jmpq \*0x20014a\(%rip\) # 200430 <.*> + [ ]*[a-f0-9]+: 68 01 00 00 00 pushq \$0x1 +-[ ]*[a-f0-9]+: e9 c0 ff ff ff jmpq 2b0 <\*ABS\*\+0x30a@plt-0x10> ++[ ]*[a-f0-9]+: e9 c0 ff ff ff jmpq 2b0 <.*> + + 0+2f0 <\*ABS\*\+0x300@plt>: +-[ ]*[a-f0-9]+: ff 25 42 01 20 00 jmpq \*0x200142\(%rip\) # 200438 <_GLOBAL_OFFSET_TABLE_\+0x30> ++[ ]*[a-f0-9]+: ff 25 42 01 20 00 jmpq \*0x200142\(%rip\) # 200438 <.*> + [ ]*[a-f0-9]+: 68 02 00 00 00 pushq \$0x2 +-[ ]*[a-f0-9]+: e9 b0 ff ff ff jmpq 2b0 <\*ABS\*\+0x30a@plt-0x10> ++[ ]*[a-f0-9]+: e9 b0 ff ff ff jmpq 2b0 <.*> + + Disassembly of section .text: + +diff --git a/ld/testsuite/ld-m68k/plt1-68020.d b/ld/testsuite/ld-m68k/plt1-68020.d +index 54463b9..ed3e1c1 100644 +--- a/ld/testsuite/ld-m68k/plt1-68020.d ++++ b/ld/testsuite/ld-m68k/plt1-68020.d +@@ -3,7 +3,7 @@ + + Disassembly of section \.plt: + +-00020800 <f.@plt-0x14>: ++00020800 <.plt>: + 20800: 2f3b 0170 0000 movel %pc@\(30404 <_GLOBAL_OFFSET_TABLE_\+0x4>\),%sp@- + 20806: fc02 + 20808: 4efb 0171 0000 jmp %pc@\(30408 <_GLOBAL_OFFSET_TABLE_\+0x8>\)@\(0*\) +@@ -11,22 +11,22 @@ Disassembly of section \.plt: + 20810: 0000 0000 orib #0,%d0 + + 00020814 <f.@plt>: +- 20814: 4efb 0171 0000 jmp %pc@\(3040c <_GLOBAL_OFFSET_TABLE_\+0xc>\)@\(0*\) ++ 20814: 4efb 0171 0000 jmp %pc@\(3040c <f3>\)@\(0*\) + 2081a: fbf6 + 2081c: 2f3c 0000 0000 movel #0,%sp@- +- 20822: 60ff ffff ffdc bral 20800 <f.@plt-0x14> ++ 20822: 60ff ffff ffdc bral 20800 <.plt> + + 00020828 <f.@plt>: +- 20828: 4efb 0171 0000 jmp %pc@\(30410 <_GLOBAL_OFFSET_TABLE_\+0x10>\)@\(0*\) ++ 20828: 4efb 0171 0000 jmp %pc@\(30410 <f2>\)@\(0*\) + 2082e: fbe6 + 20830: 2f3c 0000 000c movel #12,%sp@- +- 20836: 60ff ffff ffc8 bral 20800 <f.@plt-0x14> ++ 20836: 60ff ffff ffc8 bral 20800 <.plt> + + 0002083c <f.@plt>: +- 2083c: 4efb 0171 0000 jmp %pc@\(30414 <_GLOBAL_OFFSET_TABLE_\+0x14>\)@\(0*\) ++ 2083c: 4efb 0171 0000 jmp %pc@\(30414 <f1>\)@\(0*\) + 20842: fbd6 + 20844: 2f3c 0000 0018 movel #24,%sp@- +- 2084a: 60ff ffff ffb4 bral 20800 <f.@plt-0x14> ++ 2084a: 60ff ffff ffb4 bral 20800 <.plt> + Disassembly of section \.text: + + 00020c00 <.*>: +diff --git a/ld/testsuite/ld-m68k/plt1-cpu32.d b/ld/testsuite/ld-m68k/plt1-cpu32.d +index a497740..e303cd1 100644 +--- a/ld/testsuite/ld-m68k/plt1-cpu32.d ++++ b/ld/testsuite/ld-m68k/plt1-cpu32.d +@@ -3,7 +3,7 @@ + + Disassembly of section \.plt: + +-00020800 <f.@plt-0x18>: ++00020800 <.plt>: + 20800: 2f3b 0170 0000 movel %pc@\(30404 <_GLOBAL_OFFSET_TABLE_\+0x4>\),%sp@- + 20806: fc02 + 20808: 227b 0170 0000 moveal %pc@\(30408 <_GLOBAL_OFFSET_TABLE_\+0x8>\),%a1 +@@ -13,27 +13,27 @@ Disassembly of section \.plt: + \.\.\. + + 00020818 <f.@plt>: +- 20818: 227b 0170 0000 moveal %pc@\(3040c <_GLOBAL_OFFSET_TABLE_\+0xc>\),%a1 ++ 20818: 227b 0170 0000 moveal %pc@\(3040c <f3>\),%a1 + 2081e: fbf2 + 20820: 4ed1 jmp %a1@ + 20822: 2f3c 0000 0000 movel #0,%sp@- +- 20828: 60ff ffff ffd6 bral 20800 <f.@plt-0x18> ++ 20828: 60ff ffff ffd6 bral 20800 <.plt> + \.\.\. + + 00020830 <f.@plt>: +- 20830: 227b 0170 0000 moveal %pc@\(30410 <_GLOBAL_OFFSET_TABLE_\+0x10>\),%a1 ++ 20830: 227b 0170 0000 moveal %pc@\(30410 <f2>\),%a1 + 20836: fbde + 20838: 4ed1 jmp %a1@ + 2083a: 2f3c 0000 000c movel #12,%sp@- +- 20840: 60ff ffff ffbe bral 20800 <f.@plt-0x18> ++ 20840: 60ff ffff ffbe bral 20800 <.plt> + \.\.\. + + 00020848 <f.@plt>: +- 20848: 227b 0170 0000 moveal %pc@\(30414 <_GLOBAL_OFFSET_TABLE_\+0x14>\),%a1 ++ 20848: 227b 0170 0000 moveal %pc@\(30414 <f1>\),%a1 + 2084e: fbca + 20850: 4ed1 jmp %a1@ + 20852: 2f3c 0000 0018 movel #24,%sp@- +- 20858: 60ff ffff ffa6 bral 20800 <f.@plt-0x18> ++ 20858: 60ff ffff ffa6 bral 20800 <.plt> + \.\.\. + Disassembly of section \.text: + +diff --git a/ld/testsuite/ld-m68k/plt1-isab.d b/ld/testsuite/ld-m68k/plt1-isab.d +index a9aeacb..00e88b7 100644 +--- a/ld/testsuite/ld-m68k/plt1-isab.d ++++ b/ld/testsuite/ld-m68k/plt1-isab.d +@@ -3,23 +3,23 @@ + + Disassembly of section \.plt: + +-00020800 <f.@plt-0x18>: ++00020800 <.plt>: + # _GLOBAL_OFFSET_TABLE_ + 4 == 0x30404 == 0x20802 + 0xfc02 + 20800: 203c 0000 fc02 movel #64514,%d0 +- 20806: 2f3b 08fa movel %pc@\(20802 <f.@plt-0x16>,%d0:l\),%sp@- ++ 20806: 2f3b 08fa movel %pc@\(20802 <.*>,%d0:l\),%sp@- + # _GLOBAL_OFFSET_TABLE_ + 8 == 0x30408 == 0x2080c + 0xfbfc + 2080a: 203c 0000 fbfc movel #64508,%d0 +- 20810: 207b 08fa moveal %pc@\(2080c <f.@plt-0xc>,%d0:l\),%a0 ++ 20810: 207b 08fa moveal %pc@\(2080c <.*>,%d0:l\),%a0 + 20814: 4ed0 jmp %a0@ + 20816: 4e71 nop + + 00020818 <f.@plt>: + # _GLOBAL_OFFSET_TABLE_ + 12 == 0x3040c == 0x2081a + 0xfbf2 + 20818: 203c 0000 fbf2 movel #64498,%d0 +- 2081e: 207b 08fa moveal %pc@\(2081a <f.@plt\+0x2>,%d0:l\),%a0 ++ 2081e: 207b 08fa moveal %pc@\(2081a <.*>,%d0:l\),%a0 + 20822: 4ed0 jmp %a0@ + 20824: 2f3c 0000 0000 movel #0,%sp@- +- 2082a: 60ff ffff ffd4 bral 20800 <f.@plt-0x18> ++ 2082a: 60ff ffff ffd4 bral 20800 <.plt> + + 00020830 <f.@plt>: + # _GLOBAL_OFFSET_TABLE_ + 16 == 0x30410 == 0x20832 + 0xfbde +@@ -27,7 +27,7 @@ Disassembly of section \.plt: + 20836: 207b 08fa moveal %pc@\(20832 <f.@plt\+0x2>,%d0:l\),%a0 + 2083a: 4ed0 jmp %a0@ + 2083c: 2f3c 0000 000c movel #12,%sp@- +- 20842: 60ff ffff ffbc bral 20800 <f.@plt-0x18> ++ 20842: 60ff ffff ffbc bral 20800 <.*> + + 00020848 <f.@plt>: + # _GLOBAL_OFFSET_TABLE_ + 20 == 0x30414 == 0x2084a + 0xfbca +@@ -35,7 +35,7 @@ Disassembly of section \.plt: + 2084e: 207b 08fa moveal %pc@\(2084a <f.@plt\+0x2>,%d0:l\),%a0 + 20852: 4ed0 jmp %a0@ + 20854: 2f3c 0000 0018 movel #24,%sp@- +- 2085a: 60ff ffff ffa4 bral 20800 <f.@plt-0x18> ++ 2085a: 60ff ffff ffa4 bral 20800 <.*> + Disassembly of section \.text: + + 00020c00 <.*>: +diff --git a/ld/testsuite/ld-m68k/plt1-isac.d b/ld/testsuite/ld-m68k/plt1-isac.d +index ae299ce..d3d775e 100644 +--- a/ld/testsuite/ld-m68k/plt1-isac.d ++++ b/ld/testsuite/ld-m68k/plt1-isac.d +@@ -3,13 +3,13 @@ + + Disassembly of section \.plt: + +-00020800 <f.@plt-0x18>: ++00020800 <.plt>: + # _GLOBAL_OFFSET_TABLE_ + 4 == 0x30404 == 0x20802 + 0xfc02 + 20800: 203c 0000 fc02 movel #64514,%d0 +- 20806: 2ebb 08fa movel %pc@\(20802 <f.@plt-0x16>,%d0:l\),%sp@ ++ 20806: 2ebb 08fa movel %pc@\(20802 <.*>,%d0:l\),%sp@ + # _GLOBAL_OFFSET_TABLE_ + 8 == 0x30408 == 0x2080c + 0xfbfc + 2080a: 203c 0000 fbfc movel #64508,%d0 +- 20810: 207b 08fa moveal %pc@\(2080c <f.@plt-0xc>,%d0:l\),%a0 ++ 20810: 207b 08fa moveal %pc@\(2080c <.*>,%d0:l\),%a0 + 20814: 4ed0 jmp %a0@ + 20816: 4e71 nop + +@@ -19,7 +19,7 @@ Disassembly of section \.plt: + 2081e: 207b 08fa moveal %pc@\(2081a <f.@plt\+0x2>,%d0:l\),%a0 + 20822: 4ed0 jmp %a0@ + 20824: 2f3c 0000 0000 movel #0,%sp@- +- 2082a: 61ff ffff ffd4 bsrl 20800 <f.@plt-0x18> ++ 2082a: 61ff ffff ffd4 bsrl 20800 <.plt> + + 00020830 <f.@plt>: + # _GLOBAL_OFFSET_TABLE_ + 16 == 0x30410 == 0x20832 + 0xfbde +@@ -27,7 +27,7 @@ Disassembly of section \.plt: + 20836: 207b 08fa moveal %pc@\(20832 <f.@plt\+0x2>,%d0:l\),%a0 + 2083a: 4ed0 jmp %a0@ + 2083c: 2f3c 0000 000c movel #12,%sp@- +- 20842: 61ff ffff ffbc bsrl 20800 <f.@plt-0x18> ++ 20842: 61ff ffff ffbc bsrl 20800 <.plt> + + 00020848 <f.@plt>: + # _GLOBAL_OFFSET_TABLE_ + 20 == 0x30414 == 0x2084a + 0xfbca +@@ -35,7 +35,7 @@ Disassembly of section \.plt: + 2084e: 207b 08fa moveal %pc@\(2084a <f.@plt\+0x2>,%d0:l\),%a0 + 20852: 4ed0 jmp %a0@ + 20854: 2f3c 0000 0018 movel #24,%sp@- +- 2085a: 61ff ffff ffa4 bsrl 20800 <f.@plt-0x18> ++ 2085a: 61ff ffff ffa4 bsrl 20800 <.plt> + Disassembly of section \.text: + + 00020c00 <.*>: +diff --git a/ld/testsuite/ld-metag/shared.d b/ld/testsuite/ld-metag/shared.d +index 7662dbc..94e48c0 100644 +--- a/ld/testsuite/ld-metag/shared.d ++++ b/ld/testsuite/ld-metag/shared.d +@@ -17,7 +17,7 @@ Disassembly of section .plt: + .*: 82120780 ADD A0.2,A0.2,#0x40f0 + .*: c600806a GETD PC,\[A0.2\] + .*: 03000004 MOV D1Re0,#0 +- .*: a0fffee0 B 184 <app_func2@plt-0x14> ++ .*: a0fffee0 B 184 <.*> + Disassembly of section .text: + + .* <lib_func1>: +diff --git a/ld/testsuite/ld-metag/stub_pic_app.d b/ld/testsuite/ld-metag/stub_pic_app.d +index 7a763b9..a6cf3d4 100644 +--- a/ld/testsuite/ld-metag/stub_pic_app.d ++++ b/ld/testsuite/ld-metag/stub_pic_app.d +@@ -16,7 +16,7 @@ Disassembly of section .plt: + .*: 821496e0 ADD A0.2,A0.2,#0x92dc + .*: c600806a GETD PC,\[A0.2\] + .*: 03000004 MOV D1Re0,#0 +-.*: a0fffee0 B .* <_lib_func@plt-0x14> ++.*: a0fffee0 B .* <.*> + Disassembly of section .text: + .* <__start-0x10>: + .*: 82188105 MOVT A0.3,#0x1020 +diff --git a/ld/testsuite/ld-metag/stub_pic_shared.d b/ld/testsuite/ld-metag/stub_pic_shared.d +index 41129c3..c422b09 100644 +--- a/ld/testsuite/ld-metag/stub_pic_shared.d ++++ b/ld/testsuite/ld-metag/stub_pic_shared.d +@@ -16,7 +16,7 @@ Disassembly of section .plt: + .*: 82120580 ADD A0.2,A0.2,#0x40b0 + .*: c600806a GETD PC,\[A0.2\] + .*: 03000004 MOV D1Re0,#0 +- .*: a0fffee0 B .* <_far2@plt-0x14> ++ .*: a0fffee0 B .* <.*> + Disassembly of section .text: + .* <__start-0xc>: + .*: 82980101 ADDT A0.3,CPC0,#0x20 +diff --git a/ld/testsuite/ld-metag/stub_shared.d b/ld/testsuite/ld-metag/stub_shared.d +index e937f1e..dbcd4b9 100644 +--- a/ld/testsuite/ld-metag/stub_shared.d ++++ b/ld/testsuite/ld-metag/stub_shared.d +@@ -17,7 +17,7 @@ Disassembly of section .plt: + .*: 82120620 ADD A0.2,A0.2,#0x40c4 + .*: c600806a GETD PC,\[A0.2\] + .*: 03000004 MOV D1Re0,#0 +- .*: a0fffee0 B .* <_far2@plt-0x14> ++ .*: a0fffee0 B .* <.*> + Disassembly of section .text: + + .* <_lib_func>: +diff --git a/ld/testsuite/ld-s390/tlsbin_64.dd b/ld/testsuite/ld-s390/tlsbin_64.dd +index eac7f41..fe11a23 100644 +--- a/ld/testsuite/ld-s390/tlsbin_64.dd ++++ b/ld/testsuite/ld-s390/tlsbin_64.dd +@@ -129,7 +129,7 @@ Disassembly of section .text: + +[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0 + +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\) + # IE against global var with larl got access +- +[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x28> ++ +[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <.*> + +[0-9a-f]+: e3 33 c0 00 00 04 lg %r3,0\(%r3,%r12\) + +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\) + # IE against global var defined in exec with larl got access +diff --git a/ld/testsuite/ld-s390/tlspic_64.dd b/ld/testsuite/ld-s390/tlspic_64.dd +index 274cd16..86fdbbd 100644 +--- a/ld/testsuite/ld-s390/tlspic_64.dd ++++ b/ld/testsuite/ld-s390/tlspic_64.dd +@@ -160,7 +160,7 @@ Disassembly of section .text: + +[0-9a-f]+: e3 43 c0 00 00 04 lg %r4,0\(%r3,%r12\) + +[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\) + # IE against global var with larl got access +- +[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <\_GLOBAL\_OFFSET\_TABLE\_\+0x68> ++ +[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <.*> + +[0-9a-f]+: e3 33 c0 00 00 04 lg %r3,0\(%r3,%r12\) + +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\) + # IE against local var with larl got access +diff --git a/ld/testsuite/ld-tic6x/shlib-1.dd b/ld/testsuite/ld-tic6x/shlib-1.dd +index d33887e..a00c136 100644 +--- a/ld/testsuite/ld-tic6x/shlib-1.dd ++++ b/ld/testsuite/ld-tic6x/shlib-1.dd +@@ -4,7 +4,7 @@ tmpdir/libtest\.so: file format elf32-tic6x-le + + Disassembly of section \.plt: + +-10000020 <sub0@plt-0x18>: ++10000020 <.plt>: + 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2 + 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1 + 10000028:[ \t]*00004000[ \t]*nop 3 +diff --git a/ld/testsuite/ld-tic6x/shlib-1b.dd b/ld/testsuite/ld-tic6x/shlib-1b.dd +index 658da73..fa597d6 100644 +--- a/ld/testsuite/ld-tic6x/shlib-1b.dd ++++ b/ld/testsuite/ld-tic6x/shlib-1b.dd +@@ -4,7 +4,7 @@ tmpdir/libtestb\.so: file format elf32-tic6x-be + + Disassembly of section \.plt: + +-10000020 <sub0@plt-0x18>: ++10000020 <.plt>: + 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2 + 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1 + 10000028:[ \t]*00004000[ \t]*nop 3 +diff --git a/ld/testsuite/ld-tic6x/shlib-1rb.dd b/ld/testsuite/ld-tic6x/shlib-1rb.dd +index ee1a607..6b3a2c2 100644 +--- a/ld/testsuite/ld-tic6x/shlib-1rb.dd ++++ b/ld/testsuite/ld-tic6x/shlib-1rb.dd +@@ -4,7 +4,7 @@ tmpdir/libtestrb\.so: file format elf32-tic6x-be + + Disassembly of section \.plt: + +-10000020 <sub0@plt-0x18>: ++10000020 <.plt>: + 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2 + 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1 + 10000028:[ \t]*00004000[ \t]*nop 3 +diff --git a/ld/testsuite/ld-tic6x/shlib-app-1.dd b/ld/testsuite/ld-tic6x/shlib-app-1.dd +index 411d47f..9e437bb 100644 +--- a/ld/testsuite/ld-tic6x/shlib-app-1.dd ++++ b/ld/testsuite/ld-tic6x/shlib-app-1.dd +@@ -4,7 +4,7 @@ tmpdir/shlib-dynapp-1: file format elf32-tic6x-le + + Disassembly of section \.plt: + +-10000020 <sub0@plt-0x18>: ++10000020 <.plt>: + 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2 + 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1 + 10000028:[ \t]*00004000[ \t]*nop 3 +diff --git a/ld/testsuite/ld-tic6x/shlib-app-1b.dd b/ld/testsuite/ld-tic6x/shlib-app-1b.dd +index 5312ff8..b7cb86b 100644 +--- a/ld/testsuite/ld-tic6x/shlib-app-1b.dd ++++ b/ld/testsuite/ld-tic6x/shlib-app-1b.dd +@@ -4,7 +4,7 @@ tmpdir/shlib-dynapp-1b: file format elf32-tic6x-be + + Disassembly of section \.plt: + +-10000020 <sub0@plt-0x18>: ++10000020 <.plt>: + 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2 + 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1 + 10000028:[ \t]*00004000[ \t]*nop 3 +diff --git a/ld/testsuite/ld-tic6x/shlib-app-1r.dd b/ld/testsuite/ld-tic6x/shlib-app-1r.dd +index 3e68bf2..6d7cd09 100644 +--- a/ld/testsuite/ld-tic6x/shlib-app-1r.dd ++++ b/ld/testsuite/ld-tic6x/shlib-app-1r.dd +@@ -4,7 +4,7 @@ tmpdir/shlib-dynapp-1r: file format elf32-tic6x-le + + Disassembly of section \.plt: + +-10000020 <sub0@plt-0x18>: ++10000020 <.plt>: + 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2 + 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1 + 10000028:[ \t]*00004000[ \t]*nop 3 +diff --git a/ld/testsuite/ld-tic6x/shlib-app-1rb.dd b/ld/testsuite/ld-tic6x/shlib-app-1rb.dd +index ad1f28e..57809ab 100644 +--- a/ld/testsuite/ld-tic6x/shlib-app-1rb.dd ++++ b/ld/testsuite/ld-tic6x/shlib-app-1rb.dd +@@ -4,7 +4,7 @@ tmpdir/shlib-dynapp-1rb: file format elf32-tic6x-be + + Disassembly of section \.plt: + +-10000020 <sub0@plt-0x18>: ++10000020 <.plt>: + 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2 + 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1 + 10000028:[ \t]*00004000[ \t]*nop 3 +diff --git a/ld/testsuite/ld-tic6x/shlib-noindex.dd b/ld/testsuite/ld-tic6x/shlib-noindex.dd +index bfdf499..fd37bac 100644 +--- a/ld/testsuite/ld-tic6x/shlib-noindex.dd ++++ b/ld/testsuite/ld-tic6x/shlib-noindex.dd +@@ -4,7 +4,7 @@ tmpdir/libtestn\.so: file format elf32-tic6x-le + + Disassembly of section \.plt: + +-10000020 <sub0@plt-0x18>: ++10000020 <.plt>: + 10000020: 0100036e ldw \.D2T2 \*\+b14\(12\),b2 + 10000024: 0080046e ldw \.D2T2 \*\+b14\(16\),b1 + 10000028: 00004000 nop 3 +diff --git a/ld/testsuite/ld-vax-elf/export-class-data.dd b/ld/testsuite/ld-vax-elf/export-class-data.dd +index c2be30c..7d152c8 100644 +--- a/ld/testsuite/ld-vax-elf/export-class-data.dd ++++ b/ld/testsuite/ld-vax-elf/export-class-data.dd +@@ -5,7 +5,7 @@ Disassembly of section \.text: + + 12340000 <foo>: + 12340000: 00 00 \.word 0x0000 # Entry mask: < > +-12340002: 9e ff 2c 00 movab \*12340034 <_GLOBAL_OFFSET_TABLE_\+0x10>,r0 ++12340002: 9e ff 2c 00 movab \*12340034 <.*>,r0 + 12340006: 00 00 50 + 12340009: 9e ef 0c 00 movab 1234001b <hidden_foo>,r0 + 1234000d: 00 00 50 +diff --git a/ld/testsuite/ld-vax-elf/plt-local-lib.dd b/ld/testsuite/ld-vax-elf/plt-local-lib.dd +index 95e8176..3c1268c 100644 +--- a/ld/testsuite/ld-vax-elf/plt-local-lib.dd ++++ b/ld/testsuite/ld-vax-elf/plt-local-lib.dd +@@ -2,7 +2,7 @@ + + Disassembly of section \.plt: + +-00001000 <foo_local@plt-0xc>: ++00001000 <.plt>: + 1000: dd ef 76 20 pushl 307c <_GLOBAL_OFFSET_TABLE_\+0x4> + 1004: 00 00 + 1006: 17 ff 74 20 jmp \*3080 <_GLOBAL_OFFSET_TABLE_\+0x8> +@@ -10,25 +10,25 @@ Disassembly of section \.plt: + + 0000100c <foo_local@plt>: + 100c: fc 0f \.word 0x0ffc # Entry mask: < r11 r10 r9 r8 r7 r6 r5 r4 r3 r2 > +- 100e: 16 ef ec ff jsb 1000 <foo_local@plt-0xc> ++ 100e: 16 ef ec ff jsb 1000 <.plt> + 1012: ff ff + 1014: 00 00 00 00 \.long 0x00000000 + + 00001018 <foo_extern@plt>: + 1018: fc 0f \.word 0x0ffc # Entry mask: < r11 r10 r9 r8 r7 r6 r5 r4 r3 r2 > +- 101a: 16 ef e0 ff jsb 1000 <foo_local@plt-0xc> ++ 101a: 16 ef e0 ff jsb 1000 <.plt> + 101e: ff ff + 1020: 0c 00 00 00 \.long 0x0000000c + + 00001024 <foo_rehidden@plt>: + 1024: fc 0f \.word 0x0ffc # Entry mask: < r11 r10 r9 r8 r7 r6 r5 r4 r3 r2 > +- 1026: 16 ef d4 ff jsb 1000 <foo_local@plt-0xc> ++ 1026: 16 ef d4 ff jsb 1000 <.plt> + 102a: ff ff + 102c: 18 00 00 00 \.long 0x00000018 + + 00001030 <foo_global@plt>: + 1030: fc 0f \.word 0x0ffc # Entry mask: < r11 r10 r9 r8 r7 r6 r5 r4 r3 r2 > +- 1032: 16 ef c8 ff jsb 1000 <foo_local@plt-0xc> ++ 1032: 16 ef c8 ff jsb 1000 <.plt> + 1036: ff ff + 1038: 24 00 00 00 \.long 0x00000024 + +@@ -36,56 +36,56 @@ Disassembly of section \.text: + + 00002000 <foo_extern>: + 2000: 00 00 \.word 0x0000 # Entry mask: < > +- 2002: fb 00 ff 7f calls \$0x0,\*3088 <_GLOBAL_OFFSET_TABLE_\+0x10> ++ 2002: fb 00 ff 7f calls \$0x0,\*3088 <.*> + 2006: 10 00 00 +- 2009: fb 00 ff 80 calls \$0x0,\*3090 <_GLOBAL_OFFSET_TABLE_\+0x18> ++ 2009: fb 00 ff 80 calls \$0x0,\*3090 <.*> + 200d: 10 00 00 +- 2010: fb 00 ff 6d calls \$0x0,\*3084 <_GLOBAL_OFFSET_TABLE_\+0xc> ++ 2010: fb 00 ff 6d calls \$0x0,\*3084 <.*> + 2014: 10 00 00 + 2017: fb 00 ef 2e calls \$0x0,204c <foo_hidden> + 201b: 00 00 00 +- 201e: fb 00 ff 67 calls \$0x0,\*308c <_GLOBAL_OFFSET_TABLE_\+0x14> ++ 201e: fb 00 ff 67 calls \$0x0,\*308c <.*> + 2022: 10 00 00 + 2025: 04 ret + + 00002026 <foo_local>: + 2026: 00 00 \.word 0x0000 # Entry mask: < > +- 2028: fb 00 ff 59 calls \$0x0,\*3088 <_GLOBAL_OFFSET_TABLE_\+0x10> ++ 2028: fb 00 ff 59 calls \$0x0,\*3088 <.*> + 202c: 10 00 00 +- 202f: fb 00 ff 5a calls \$0x0,\*3090 <_GLOBAL_OFFSET_TABLE_\+0x18> ++ 202f: fb 00 ff 5a calls \$0x0,\*3090 <.*> + 2033: 10 00 00 +- 2036: fb 00 ff 47 calls \$0x0,\*3084 <_GLOBAL_OFFSET_TABLE_\+0xc> ++ 2036: fb 00 ff 47 calls \$0x0,\*3084 <.*> + 203a: 10 00 00 + 203d: fb 00 ef 08 calls \$0x0,204c <foo_hidden> + 2041: 00 00 00 +- 2044: fb 00 ff 41 calls \$0x0,\*308c <_GLOBAL_OFFSET_TABLE_\+0x14> ++ 2044: fb 00 ff 41 calls \$0x0,\*308c <.*> + 2048: 10 00 00 + 204b: 04 ret + + 0000204c <foo_hidden>: + 204c: 00 00 \.word 0x0000 # Entry mask: < > +- 204e: fb 00 ff 33 calls \$0x0,\*3088 <_GLOBAL_OFFSET_TABLE_\+0x10> ++ 204e: fb 00 ff 33 calls \$0x0,\*3088 <.*> + 2052: 10 00 00 +- 2055: fb 00 ff 34 calls \$0x0,\*3090 <_GLOBAL_OFFSET_TABLE_\+0x18> ++ 2055: fb 00 ff 34 calls \$0x0,\*3090 <.*> + 2059: 10 00 00 +- 205c: fb 00 ff 21 calls \$0x0,\*3084 <_GLOBAL_OFFSET_TABLE_\+0xc> ++ 205c: fb 00 ff 21 calls \$0x0,\*3084 <.*> + 2060: 10 00 00 + 2063: fb 00 ef e2 calls \$0x0,204c <foo_hidden> + 2067: ff ff ff +- 206a: fb 00 ff 1b calls \$0x0,\*308c <_GLOBAL_OFFSET_TABLE_\+0x14> ++ 206a: fb 00 ff 1b calls \$0x0,\*308c <.*> + 206e: 10 00 00 + 2071: 04 ret + + 00002072 <foo_rehidden>: + 2072: 00 00 \.word 0x0000 # Entry mask: < > +- 2074: fb 00 ff 0d calls \$0x0,\*3088 <_GLOBAL_OFFSET_TABLE_\+0x10> ++ 2074: fb 00 ff 0d calls \$0x0,\*3088 <.*> + 2078: 10 00 00 +- 207b: fb 00 ff 0e calls \$0x0,\*3090 <_GLOBAL_OFFSET_TABLE_\+0x18> ++ 207b: fb 00 ff 0e calls \$0x0,\*3090 <.*> + 207f: 10 00 00 +- 2082: fb 00 ff fb calls \$0x0,\*3084 <_GLOBAL_OFFSET_TABLE_\+0xc> ++ 2082: fb 00 ff fb calls \$0x0,\*3084 <.*> + 2086: 0f 00 00 + 2089: fb 00 ef bc calls \$0x0,204c <foo_hidden> + 208d: ff ff ff +- 2090: fb 00 ff f5 calls \$0x0,\*308c <_GLOBAL_OFFSET_TABLE_\+0x14> ++ 2090: fb 00 ff f5 calls \$0x0,\*308c <.*> + 2094: 0f 00 00 + 2097: 04 ret +diff --git a/ld/testsuite/ld-vax-elf/plt-local.dd b/ld/testsuite/ld-vax-elf/plt-local.dd +index 84eca55..94fbadd 100644 +--- a/ld/testsuite/ld-vax-elf/plt-local.dd ++++ b/ld/testsuite/ld-vax-elf/plt-local.dd +@@ -2,7 +2,7 @@ + + Disassembly of section \.plt: + +-00001000 <foo_extern@plt-0xc>: ++00001000 <.plt>: + 1000: dd ef 86 20 pushl 308c <_GLOBAL_OFFSET_TABLE_\+0x4> + 1004: 00 00 + 1006: 17 ff 84 20 jmp \*3090 <_GLOBAL_OFFSET_TABLE_\+0x8> +@@ -10,7 +10,7 @@ Disassembly of section \.plt: + + 0000100c <foo_extern@plt>: + 100c: fc 0f \.word 0x0ffc # Entry mask: < r11 r10 r9 r8 r7 r6 r5 r4 r3 r2 > +- 100e: 16 ef ec ff jsb 1000 <foo_extern@plt-0xc> ++ 100e: 16 ef ec ff jsb 1000 <.plt> + 1012: ff ff + 1014: 00 00 00 00 \.long 0x00000000 + +@@ -18,7 +18,7 @@ Disassembly of section \.text: + + 00002000 <foo_hidden>: + 2000: 00 00 \.word 0x0000 # Entry mask: < > +- 2002: fb 00 ff 8b calls \$0x0,\*3094 <_GLOBAL_OFFSET_TABLE_\+0xc> ++ 2002: fb 00 ff 8b calls \$0x0,\*3094 <foo_extern> + 2006: 10 00 00 + 2009: fb 00 ef 3c calls \$0x0,204c <foo_global> + 200d: 00 00 00 +@@ -32,7 +32,7 @@ Disassembly of section \.text: + + 00002026 <foo_rehidden>: + 2026: 00 00 \.word 0x0000 # Entry mask: < > +- 2028: fb 00 ff 65 calls \$0x0,\*3094 <_GLOBAL_OFFSET_TABLE_\+0xc> ++ 2028: fb 00 ff 65 calls \$0x0,\*3094 <foo_extern> + 202c: 10 00 00 + 202f: fb 00 ef 16 calls \$0x0,204c <foo_global> + 2033: 00 00 00 +@@ -46,7 +46,7 @@ Disassembly of section \.text: + + 0000204c <foo_global>: + 204c: 00 00 \.word 0x0000 # Entry mask: < > +- 204e: fb 00 ff 3f calls \$0x0,\*3094 <_GLOBAL_OFFSET_TABLE_\+0xc> ++ 204e: fb 00 ff 3f calls \$0x0,\*3094 <foo_extern> + 2052: 10 00 00 + 2055: fb 00 ef f0 calls \$0x0,204c <foo_global> + 2059: ff ff ff +@@ -60,7 +60,7 @@ Disassembly of section \.text: + + 00002072 <foo_local>: + 2072: 00 00 \.word 0x0000 # Entry mask: < > +- 2074: fb 00 ff 19 calls \$0x0,\*3094 <_GLOBAL_OFFSET_TABLE_\+0xc> ++ 2074: fb 00 ff 19 calls \$0x0,\*3094 <foo_extern> + 2078: 10 00 00 + 207b: fb 00 ef ca calls \$0x0,204c <foo_global> + 207f: ff ff ff +diff --git a/ld/testsuite/ld-x86-64/bnd-ifunc-2.d b/ld/testsuite/ld-x86-64/bnd-ifunc-2.d +index 61750c9..306a17d 100644 +--- a/ld/testsuite/ld-x86-64/bnd-ifunc-2.d ++++ b/ld/testsuite/ld-x86-64/bnd-ifunc-2.d +@@ -8,16 +8,16 @@ + [ ]*[a-f0-9]+: f2 ff 25 7b 01 20 00 bnd jmpq \*0x20017b\(%rip\) # 200438 <_GLOBAL_OFFSET_TABLE_\+0x10> + [ ]*[a-f0-9]+: 0f 1f 00 nopl \(%rax\) + [ ]*[a-f0-9]+: 68 03 00 00 00 pushq \$0x3 +-[ ]*[a-f0-9]+: f2 e9 e5 ff ff ff bnd jmpq 2b0 <\*ABS\*\+0x32c@plt-0x50> ++[ ]*[a-f0-9]+: f2 e9 e5 ff ff ff bnd jmpq 2b0 <.*> + [ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) + [ ]*[a-f0-9]+: 68 00 00 00 00 pushq \$0x0 +-[ ]*[a-f0-9]+: f2 e9 d5 ff ff ff bnd jmpq 2b0 <\*ABS\*\+0x32c@plt-0x50> ++[ ]*[a-f0-9]+: f2 e9 d5 ff ff ff bnd jmpq 2b0 <.*> + [ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) + [ ]*[a-f0-9]+: 68 01 00 00 00 pushq \$0x1 +-[ ]*[a-f0-9]+: f2 e9 c5 ff ff ff bnd jmpq 2b0 <\*ABS\*\+0x32c@plt-0x50> ++[ ]*[a-f0-9]+: f2 e9 c5 ff ff ff bnd jmpq 2b0 <.*> + [ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) + [ ]*[a-f0-9]+: 68 02 00 00 00 pushq \$0x2 +-[ ]*[a-f0-9]+: f2 e9 b5 ff ff ff bnd jmpq 2b0 <\*ABS\*\+0x32c@plt-0x50> ++[ ]*[a-f0-9]+: f2 e9 b5 ff ff ff bnd jmpq 2b0 <.*> + [ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) + + Disassembly of section .plt.bnd: +@@ -27,11 +27,11 @@ Disassembly of section .plt.bnd: + [ ]*[a-f0-9]+: 90 nop + + 0+308 <func1@plt>: +-[ ]*[a-f0-9]+: f2 ff 25 39 01 20 00 bnd jmpq \*0x200139\(%rip\) # 200448 <_GLOBAL_OFFSET_TABLE_\+0x20> ++[ ]*[a-f0-9]+: f2 ff 25 39 01 20 00 bnd jmpq \*0x200139\(%rip\) # 200448 <func1> + [ ]*[a-f0-9]+: 90 nop + + 0+310 <func2@plt>: +-[ ]*[a-f0-9]+: f2 ff 25 39 01 20 00 bnd jmpq \*0x200139\(%rip\) # 200450 <_GLOBAL_OFFSET_TABLE_\+0x28> ++[ ]*[a-f0-9]+: f2 ff 25 39 01 20 00 bnd jmpq \*0x200139\(%rip\) # 200450 <func2> + [ ]*[a-f0-9]+: 90 nop + + 0+318 <\*ABS\*\+0x320@plt>: +diff --git a/ld/testsuite/ld-x86-64/bnd-plt-1.d b/ld/testsuite/ld-x86-64/bnd-plt-1.d +index 1c1f2d3..6bd50b2 100644 +--- a/ld/testsuite/ld-x86-64/bnd-plt-1.d ++++ b/ld/testsuite/ld-x86-64/bnd-plt-1.d +@@ -13,34 +13,34 @@ Disassembly of section .plt: + [ ]*[a-f0-9]+: f2 ff 25 83 01 20 00 bnd jmpq \*0x200183\(%rip\) # 200420 <_GLOBAL_OFFSET_TABLE_\+0x10> + [ ]*[a-f0-9]+: 0f 1f 00 nopl \(%rax\) + [ ]*[a-f0-9]+: 68 00 00 00 00 pushq \$0x0 +-[ ]*[a-f0-9]+: f2 e9 e5 ff ff ff bnd jmpq 290 <foo2@plt-0x50> ++[ ]*[a-f0-9]+: f2 e9 e5 ff ff ff bnd jmpq 290 <.*> + [ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) + [ ]*[a-f0-9]+: 68 01 00 00 00 pushq \$0x1 +-[ ]*[a-f0-9]+: f2 e9 d5 ff ff ff bnd jmpq 290 <foo2@plt-0x50> ++[ ]*[a-f0-9]+: f2 e9 d5 ff ff ff bnd jmpq 290 <.*> + [ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) + [ ]*[a-f0-9]+: 68 02 00 00 00 pushq \$0x2 +-[ ]*[a-f0-9]+: f2 e9 c5 ff ff ff bnd jmpq 290 <foo2@plt-0x50> ++[ ]*[a-f0-9]+: f2 e9 c5 ff ff ff bnd jmpq 290 <.*> + [ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) + [ ]*[a-f0-9]+: 68 03 00 00 00 pushq \$0x3 +-[ ]*[a-f0-9]+: f2 e9 b5 ff ff ff bnd jmpq 290 <foo2@plt-0x50> ++[ ]*[a-f0-9]+: f2 e9 b5 ff ff ff bnd jmpq 290 <.*> + [ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) + + Disassembly of section .plt.bnd: + + 0+2e0 <foo2@plt>: +-[ ]*[a-f0-9]+: f2 ff 25 41 01 20 00 bnd jmpq \*0x200141\(%rip\) # 200428 <_GLOBAL_OFFSET_TABLE_\+0x18> ++[ ]*[a-f0-9]+: f2 ff 25 41 01 20 00 bnd jmpq \*0x200141\(%rip\) # 200428 <foo2> + [ ]*[a-f0-9]+: 90 nop + + 0+2e8 <foo3@plt>: +-[ ]*[a-f0-9]+: f2 ff 25 41 01 20 00 bnd jmpq \*0x200141\(%rip\) # 200430 <_GLOBAL_OFFSET_TABLE_\+0x20> ++[ ]*[a-f0-9]+: f2 ff 25 41 01 20 00 bnd jmpq \*0x200141\(%rip\) # 200430 <foo3> + [ ]*[a-f0-9]+: 90 nop + + 0+2f0 <foo1@plt>: +-[ ]*[a-f0-9]+: f2 ff 25 41 01 20 00 bnd jmpq \*0x200141\(%rip\) # 200438 <_GLOBAL_OFFSET_TABLE_\+0x28> ++[ ]*[a-f0-9]+: f2 ff 25 41 01 20 00 bnd jmpq \*0x200141\(%rip\) # 200438 <foo1> + [ ]*[a-f0-9]+: 90 nop + + 0+2f8 <foo4@plt>: +-[ ]*[a-f0-9]+: f2 ff 25 41 01 20 00 bnd jmpq \*0x200141\(%rip\) # 200440 <_GLOBAL_OFFSET_TABLE_\+0x30> ++[ ]*[a-f0-9]+: f2 ff 25 41 01 20 00 bnd jmpq \*0x200141\(%rip\) # 200440 <foo4> + [ ]*[a-f0-9]+: 90 nop + + Disassembly of section .text: +diff --git a/ld/testsuite/ld-x86-64/gotpcrel1.dd b/ld/testsuite/ld-x86-64/gotpcrel1.dd +index 46321db..58450bd 100644 +--- a/ld/testsuite/ld-x86-64/gotpcrel1.dd ++++ b/ld/testsuite/ld-x86-64/gotpcrel1.dd +@@ -2,13 +2,13 @@ + [a-f0-9]+ <main>: + [ ]*[a-f0-9]+: 48 83 ec 08 sub \$0x8,%rsp + [ ]*[a-f0-9]+: [ a-f0-9]+ addr32 callq [a-f0-9]+ <foo> +-[ ]*[a-f0-9]+: [ a-f0-9]+ callq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: [ a-f0-9]+ callq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: [ a-f0-9]+ callq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: [ a-f0-9]+ callq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> + [ ]*[a-f0-9]+: [ a-f0-9]+ (rex mov|mov ) \$0x[a-f0-9]+,%(r|e)ax + [ ]*[a-f0-9]+: ff d0 callq \*%rax +-[ ]*[a-f0-9]+: [ a-f0-9]+ mov 0x[a-f0-9]+\(%rip\),%rcx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: [ a-f0-9]+ mov 0x[a-f0-9]+\(%rip\),%rcx # [a-f0-9]+ <.*> + [ ]*[a-f0-9]+: ff d1 callq \*%rcx +-[ ]*[a-f0-9]+: [ a-f0-9]+ mov 0x[a-f0-9]+\(%rip\),%rdx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: [ a-f0-9]+ mov 0x[a-f0-9]+\(%rip\),%rdx # [a-f0-9]+ <.*> + [ ]*[a-f0-9]+: ff d2 callq \*%rdx + [ ]*[a-f0-9]+: 31 ff xor %edi,%edi + [ ]*[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp +diff --git a/ld/testsuite/ld-x86-64/libno-plt-1b.dd b/ld/testsuite/ld-x86-64/libno-plt-1b.dd +index 2892ce4..93d8a7b 100644 +--- a/ld/testsuite/ld-x86-64/libno-plt-1b.dd ++++ b/ld/testsuite/ld-x86-64/libno-plt-1b.dd +@@ -7,9 +7,9 @@ Disassembly of section .text: + + #... + [0-9a-f]+ <get_func>: +- +[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + +[a-f0-9]+: c3 retq + #... + [0-9a-f]+ <call_func>: +- +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/load1c-nacl.d b/ld/testsuite/ld-x86-64/load1c-nacl.d +index be90480..57bc2c2 100644 +--- a/ld/testsuite/ld-x86-64/load1c-nacl.d ++++ b/ld/testsuite/ld-x86-64/load1c-nacl.d +@@ -9,40 +9,40 @@ + Disassembly of section .text: + + 0+ <_start>: +-[ ]*[a-f0-9]+: 13 05 0a 03 01 10 adc 0x1001030a\(%rip\),%eax # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 03 1d 04 03 01 10 add 0x10010304\(%rip\),%ebx # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 23 0d fe 02 01 10 and 0x100102fe\(%rip\),%ecx # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 3b 15 f8 02 01 10 cmp 0x100102f8\(%rip\),%edx # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 0b 35 f2 02 01 10 or 0x100102f2\(%rip\),%esi # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 1b 3d ec 02 01 10 sbb 0x100102ec\(%rip\),%edi # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 2b 2d e6 02 01 10 sub 0x100102e6\(%rip\),%ebp # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 44 33 05 df 02 01 10 xor 0x100102df\(%rip\),%r8d # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 44 85 3d d8 02 01 10 test %r15d,0x100102d8\(%rip\) # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 48 13 05 d1 02 01 10 adc 0x100102d1\(%rip\),%rax # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 48 03 1d ca 02 01 10 add 0x100102ca\(%rip\),%rbx # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 48 23 0d c3 02 01 10 and 0x100102c3\(%rip\),%rcx # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 48 3b 15 bc 02 01 10 cmp 0x100102bc\(%rip\),%rdx # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 48 0b 3d b5 02 01 10 or 0x100102b5\(%rip\),%rdi # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 48 1b 35 ae 02 01 10 sbb 0x100102ae\(%rip\),%rsi # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 48 2b 2d a7 02 01 10 sub 0x100102a7\(%rip\),%rbp # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 4c 33 05 a0 02 01 10 xor 0x100102a0\(%rip\),%r8 # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 4c 85 3d 99 02 01 10 test %r15,0x10010299\(%rip\) # 10010310 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 13 05 9b 02 01 10 adc 0x1001029b\(%rip\),%eax # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 03 1d 95 02 01 10 add 0x10010295\(%rip\),%ebx # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 23 0d 8f 02 01 10 and 0x1001028f\(%rip\),%ecx # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 3b 15 89 02 01 10 cmp 0x10010289\(%rip\),%edx # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 0b 35 83 02 01 10 or 0x10010283\(%rip\),%esi # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 1b 3d 7d 02 01 10 sbb 0x1001027d\(%rip\),%edi # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 2b 2d 77 02 01 10 sub 0x10010277\(%rip\),%ebp # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 44 33 05 70 02 01 10 xor 0x10010270\(%rip\),%r8d # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 44 85 3d 69 02 01 10 test %r15d,0x10010269\(%rip\) # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 48 13 05 62 02 01 10 adc 0x10010262\(%rip\),%rax # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 48 03 1d 5b 02 01 10 add 0x1001025b\(%rip\),%rbx # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 48 23 0d 54 02 01 10 and 0x10010254\(%rip\),%rcx # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 48 3b 15 4d 02 01 10 cmp 0x1001024d\(%rip\),%rdx # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 48 0b 3d 46 02 01 10 or 0x10010246\(%rip\),%rdi # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 48 1b 35 3f 02 01 10 sbb 0x1001023f\(%rip\),%rsi # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 48 2b 2d 38 02 01 10 sub 0x10010238\(%rip\),%rbp # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 4c 33 05 31 02 01 10 xor 0x10010231\(%rip\),%r8 # 10010318 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 4c 85 3d 2a 02 01 10 test %r15,0x1001022a\(%rip\) # 10010318 <_DYNAMIC\+0xe8> ++[ ]*[a-f0-9]+: 13 05 0a 03 01 10 adc 0x1001030a\(%rip\),%eax # 10010310 <.*> ++[ ]*[a-f0-9]+: 03 1d 04 03 01 10 add 0x10010304\(%rip\),%ebx # 10010310 <.*> ++[ ]*[a-f0-9]+: 23 0d fe 02 01 10 and 0x100102fe\(%rip\),%ecx # 10010310 <.*> ++[ ]*[a-f0-9]+: 3b 15 f8 02 01 10 cmp 0x100102f8\(%rip\),%edx # 10010310 <.*> ++[ ]*[a-f0-9]+: 0b 35 f2 02 01 10 or 0x100102f2\(%rip\),%esi # 10010310 <.*> ++[ ]*[a-f0-9]+: 1b 3d ec 02 01 10 sbb 0x100102ec\(%rip\),%edi # 10010310 <.*> ++[ ]*[a-f0-9]+: 2b 2d e6 02 01 10 sub 0x100102e6\(%rip\),%ebp # 10010310 <.*> ++[ ]*[a-f0-9]+: 44 33 05 df 02 01 10 xor 0x100102df\(%rip\),%r8d # 10010310 <.*> ++[ ]*[a-f0-9]+: 44 85 3d d8 02 01 10 test %r15d,0x100102d8\(%rip\) # 10010310 <.*> ++[ ]*[a-f0-9]+: 48 13 05 d1 02 01 10 adc 0x100102d1\(%rip\),%rax # 10010310 <.*> ++[ ]*[a-f0-9]+: 48 03 1d ca 02 01 10 add 0x100102ca\(%rip\),%rbx # 10010310 <.*> ++[ ]*[a-f0-9]+: 48 23 0d c3 02 01 10 and 0x100102c3\(%rip\),%rcx # 10010310 <.*> ++[ ]*[a-f0-9]+: 48 3b 15 bc 02 01 10 cmp 0x100102bc\(%rip\),%rdx # 10010310 <.*> ++[ ]*[a-f0-9]+: 48 0b 3d b5 02 01 10 or 0x100102b5\(%rip\),%rdi # 10010310 <.*> ++[ ]*[a-f0-9]+: 48 1b 35 ae 02 01 10 sbb 0x100102ae\(%rip\),%rsi # 10010310 <.*> ++[ ]*[a-f0-9]+: 48 2b 2d a7 02 01 10 sub 0x100102a7\(%rip\),%rbp # 10010310 <.*> ++[ ]*[a-f0-9]+: 4c 33 05 a0 02 01 10 xor 0x100102a0\(%rip\),%r8 # 10010310 <.*> ++[ ]*[a-f0-9]+: 4c 85 3d 99 02 01 10 test %r15,0x10010299\(%rip\) # 10010310 <.*> ++[ ]*[a-f0-9]+: 13 05 9b 02 01 10 adc 0x1001029b\(%rip\),%eax # 10010318 <.*> ++[ ]*[a-f0-9]+: 03 1d 95 02 01 10 add 0x10010295\(%rip\),%ebx # 10010318 <.*> ++[ ]*[a-f0-9]+: 23 0d 8f 02 01 10 and 0x1001028f\(%rip\),%ecx # 10010318 <.*> ++[ ]*[a-f0-9]+: 3b 15 89 02 01 10 cmp 0x10010289\(%rip\),%edx # 10010318 <.*> ++[ ]*[a-f0-9]+: 0b 35 83 02 01 10 or 0x10010283\(%rip\),%esi # 10010318 <.*> ++[ ]*[a-f0-9]+: 1b 3d 7d 02 01 10 sbb 0x1001027d\(%rip\),%edi # 10010318 <.*> ++[ ]*[a-f0-9]+: 2b 2d 77 02 01 10 sub 0x10010277\(%rip\),%ebp # 10010318 <.*> ++[ ]*[a-f0-9]+: 44 33 05 70 02 01 10 xor 0x10010270\(%rip\),%r8d # 10010318 <.*> ++[ ]*[a-f0-9]+: 44 85 3d 69 02 01 10 test %r15d,0x10010269\(%rip\) # 10010318 <.*> ++[ ]*[a-f0-9]+: 48 13 05 62 02 01 10 adc 0x10010262\(%rip\),%rax # 10010318 <.*> ++[ ]*[a-f0-9]+: 48 03 1d 5b 02 01 10 add 0x1001025b\(%rip\),%rbx # 10010318 <.*> ++[ ]*[a-f0-9]+: 48 23 0d 54 02 01 10 and 0x10010254\(%rip\),%rcx # 10010318 <.*> ++[ ]*[a-f0-9]+: 48 3b 15 4d 02 01 10 cmp 0x1001024d\(%rip\),%rdx # 10010318 <.*> ++[ ]*[a-f0-9]+: 48 0b 3d 46 02 01 10 or 0x10010246\(%rip\),%rdi # 10010318 <.*> ++[ ]*[a-f0-9]+: 48 1b 35 3f 02 01 10 sbb 0x1001023f\(%rip\),%rsi # 10010318 <.*> ++[ ]*[a-f0-9]+: 48 2b 2d 38 02 01 10 sub 0x10010238\(%rip\),%rbp # 10010318 <.*> ++[ ]*[a-f0-9]+: 4c 33 05 31 02 01 10 xor 0x10010231\(%rip\),%r8 # 10010318 <.*> ++[ ]*[a-f0-9]+: 4c 85 3d 2a 02 01 10 test %r15,0x1001022a\(%rip\) # 10010318 <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/load1c.d b/ld/testsuite/ld-x86-64/load1c.d +index d4bf277..a4f7d8a 100644 +--- a/ld/testsuite/ld-x86-64/load1c.d ++++ b/ld/testsuite/ld-x86-64/load1c.d +@@ -9,40 +9,40 @@ + Disassembly of section .text: + + [a-f0-9]+ <_start>: +-[ ]*[a-f0-9]+: 13 05 ca 01 20 00 adc 0x2001ca\(%rip\),%eax # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 03 1d c4 01 20 00 add 0x2001c4\(%rip\),%ebx # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 23 0d be 01 20 00 and 0x2001be\(%rip\),%ecx # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 3b 15 b8 01 20 00 cmp 0x2001b8\(%rip\),%edx # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 0b 35 b2 01 20 00 or 0x2001b2\(%rip\),%esi # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 1b 3d ac 01 20 00 sbb 0x2001ac\(%rip\),%edi # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 2b 2d a6 01 20 00 sub 0x2001a6\(%rip\),%ebp # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 44 33 05 9f 01 20 00 xor 0x20019f\(%rip\),%r8d # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 44 85 3d 98 01 20 00 test %r15d,0x200198\(%rip\) # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 48 13 05 91 01 20 00 adc 0x200191\(%rip\),%rax # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 48 03 1d 8a 01 20 00 add 0x20018a\(%rip\),%rbx # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 48 23 0d 83 01 20 00 and 0x200183\(%rip\),%rcx # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 48 3b 15 7c 01 20 00 cmp 0x20017c\(%rip\),%rdx # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 48 0b 3d 75 01 20 00 or 0x200175\(%rip\),%rdi # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 48 1b 35 6e 01 20 00 sbb 0x20016e\(%rip\),%rsi # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 48 2b 2d 67 01 20 00 sub 0x200167\(%rip\),%rbp # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 4c 33 05 60 01 20 00 xor 0x200160\(%rip\),%r8 # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 4c 85 3d 59 01 20 00 test %r15,0x200159\(%rip\) # 2003c8 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: 13 05 5b 01 20 00 adc 0x20015b\(%rip\),%eax # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 03 1d 55 01 20 00 add 0x200155\(%rip\),%ebx # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 23 0d 4f 01 20 00 and 0x20014f\(%rip\),%ecx # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 3b 15 49 01 20 00 cmp 0x200149\(%rip\),%edx # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 0b 35 43 01 20 00 or 0x200143\(%rip\),%esi # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 1b 3d 3d 01 20 00 sbb 0x20013d\(%rip\),%edi # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 2b 2d 37 01 20 00 sub 0x200137\(%rip\),%ebp # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 44 33 05 30 01 20 00 xor 0x200130\(%rip\),%r8d # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 44 85 3d 29 01 20 00 test %r15d,0x200129\(%rip\) # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 48 13 05 22 01 20 00 adc 0x200122\(%rip\),%rax # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 48 03 1d 1b 01 20 00 add 0x20011b\(%rip\),%rbx # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 48 23 0d 14 01 20 00 and 0x200114\(%rip\),%rcx # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 48 3b 15 0d 01 20 00 cmp 0x20010d\(%rip\),%rdx # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 48 0b 3d 06 01 20 00 or 0x200106\(%rip\),%rdi # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 48 1b 35 ff 00 20 00 sbb 0x2000ff\(%rip\),%rsi # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 48 2b 2d f8 00 20 00 sub 0x2000f8\(%rip\),%rbp # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 4c 33 05 f1 00 20 00 xor 0x2000f1\(%rip\),%r8 # 2003d0 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: 4c 85 3d ea 00 20 00 test %r15,0x2000ea\(%rip\) # 2003d0 <_DYNAMIC\+0xe8> ++[ ]*[a-f0-9]+: 13 05 ca 01 20 00 adc 0x2001ca\(%rip\),%eax # 2003c8 <.*> ++[ ]*[a-f0-9]+: 03 1d c4 01 20 00 add 0x2001c4\(%rip\),%ebx # 2003c8 <.*> ++[ ]*[a-f0-9]+: 23 0d be 01 20 00 and 0x2001be\(%rip\),%ecx # 2003c8 <.*> ++[ ]*[a-f0-9]+: 3b 15 b8 01 20 00 cmp 0x2001b8\(%rip\),%edx # 2003c8 <.*> ++[ ]*[a-f0-9]+: 0b 35 b2 01 20 00 or 0x2001b2\(%rip\),%esi # 2003c8 <.*> ++[ ]*[a-f0-9]+: 1b 3d ac 01 20 00 sbb 0x2001ac\(%rip\),%edi # 2003c8 <.*> ++[ ]*[a-f0-9]+: 2b 2d a6 01 20 00 sub 0x2001a6\(%rip\),%ebp # 2003c8 <.*> ++[ ]*[a-f0-9]+: 44 33 05 9f 01 20 00 xor 0x20019f\(%rip\),%r8d # 2003c8 <.*> ++[ ]*[a-f0-9]+: 44 85 3d 98 01 20 00 test %r15d,0x200198\(%rip\) # 2003c8 <.*> ++[ ]*[a-f0-9]+: 48 13 05 91 01 20 00 adc 0x200191\(%rip\),%rax # 2003c8 <.*> ++[ ]*[a-f0-9]+: 48 03 1d 8a 01 20 00 add 0x20018a\(%rip\),%rbx # 2003c8 <.*> ++[ ]*[a-f0-9]+: 48 23 0d 83 01 20 00 and 0x200183\(%rip\),%rcx # 2003c8 <.*> ++[ ]*[a-f0-9]+: 48 3b 15 7c 01 20 00 cmp 0x20017c\(%rip\),%rdx # 2003c8 <.*> ++[ ]*[a-f0-9]+: 48 0b 3d 75 01 20 00 or 0x200175\(%rip\),%rdi # 2003c8 <.*> ++[ ]*[a-f0-9]+: 48 1b 35 6e 01 20 00 sbb 0x20016e\(%rip\),%rsi # 2003c8 <.*> ++[ ]*[a-f0-9]+: 48 2b 2d 67 01 20 00 sub 0x200167\(%rip\),%rbp # 2003c8 <.*> ++[ ]*[a-f0-9]+: 4c 33 05 60 01 20 00 xor 0x200160\(%rip\),%r8 # 2003c8 <.*> ++[ ]*[a-f0-9]+: 4c 85 3d 59 01 20 00 test %r15,0x200159\(%rip\) # 2003c8 <.*> ++[ ]*[a-f0-9]+: 13 05 5b 01 20 00 adc 0x20015b\(%rip\),%eax # 2003d0 <.*> ++[ ]*[a-f0-9]+: 03 1d 55 01 20 00 add 0x200155\(%rip\),%ebx # 2003d0 <.*> ++[ ]*[a-f0-9]+: 23 0d 4f 01 20 00 and 0x20014f\(%rip\),%ecx # 2003d0 <.*> ++[ ]*[a-f0-9]+: 3b 15 49 01 20 00 cmp 0x200149\(%rip\),%edx # 2003d0 <.*> ++[ ]*[a-f0-9]+: 0b 35 43 01 20 00 or 0x200143\(%rip\),%esi # 2003d0 <.*> ++[ ]*[a-f0-9]+: 1b 3d 3d 01 20 00 sbb 0x20013d\(%rip\),%edi # 2003d0 <.*> ++[ ]*[a-f0-9]+: 2b 2d 37 01 20 00 sub 0x200137\(%rip\),%ebp # 2003d0 <.*> ++[ ]*[a-f0-9]+: 44 33 05 30 01 20 00 xor 0x200130\(%rip\),%r8d # 2003d0 <.*> ++[ ]*[a-f0-9]+: 44 85 3d 29 01 20 00 test %r15d,0x200129\(%rip\) # 2003d0 <.*> ++[ ]*[a-f0-9]+: 48 13 05 22 01 20 00 adc 0x200122\(%rip\),%rax # 2003d0 <.*> ++[ ]*[a-f0-9]+: 48 03 1d 1b 01 20 00 add 0x20011b\(%rip\),%rbx # 2003d0 <.*> ++[ ]*[a-f0-9]+: 48 23 0d 14 01 20 00 and 0x200114\(%rip\),%rcx # 2003d0 <.*> ++[ ]*[a-f0-9]+: 48 3b 15 0d 01 20 00 cmp 0x20010d\(%rip\),%rdx # 2003d0 <.*> ++[ ]*[a-f0-9]+: 48 0b 3d 06 01 20 00 or 0x200106\(%rip\),%rdi # 2003d0 <.*> ++[ ]*[a-f0-9]+: 48 1b 35 ff 00 20 00 sbb 0x2000ff\(%rip\),%rsi # 2003d0 <.*> ++[ ]*[a-f0-9]+: 48 2b 2d f8 00 20 00 sub 0x2000f8\(%rip\),%rbp # 2003d0 <.*> ++[ ]*[a-f0-9]+: 4c 33 05 f1 00 20 00 xor 0x2000f1\(%rip\),%r8 # 2003d0 <.*> ++[ ]*[a-f0-9]+: 4c 85 3d ea 00 20 00 test %r15,0x2000ea\(%rip\) # 2003d0 <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/load1d-nacl.d b/ld/testsuite/ld-x86-64/load1d-nacl.d +index 3e9b144..b741917 100644 +--- a/ld/testsuite/ld-x86-64/load1d-nacl.d ++++ b/ld/testsuite/ld-x86-64/load1d-nacl.d +@@ -9,40 +9,40 @@ + Disassembly of section .text: + + 0+ <_start>: +-[ ]*[a-f0-9]+: 13 05 e2 01 01 10 adc 0x100101e2\(%rip\),%eax # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 03 1d dc 01 01 10 add 0x100101dc\(%rip\),%ebx # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 23 0d d6 01 01 10 and 0x100101d6\(%rip\),%ecx # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 3b 15 d0 01 01 10 cmp 0x100101d0\(%rip\),%edx # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 0b 35 ca 01 01 10 or 0x100101ca\(%rip\),%esi # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 1b 3d c4 01 01 10 sbb 0x100101c4\(%rip\),%edi # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 2b 2d be 01 01 10 sub 0x100101be\(%rip\),%ebp # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 44 33 05 b7 01 01 10 xor 0x100101b7\(%rip\),%r8d # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 44 85 3d b0 01 01 10 test %r15d,0x100101b0\(%rip\) # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 48 13 05 a9 01 01 10 adc 0x100101a9\(%rip\),%rax # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 48 03 1d a2 01 01 10 add 0x100101a2\(%rip\),%rbx # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 48 23 0d 9b 01 01 10 and 0x1001019b\(%rip\),%rcx # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 48 3b 15 94 01 01 10 cmp 0x10010194\(%rip\),%rdx # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 48 0b 3d 8d 01 01 10 or 0x1001018d\(%rip\),%rdi # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 48 1b 35 86 01 01 10 sbb 0x10010186\(%rip\),%rsi # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 48 2b 2d 7f 01 01 10 sub 0x1001017f\(%rip\),%rbp # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 4c 33 05 78 01 01 10 xor 0x10010178\(%rip\),%r8 # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 4c 85 3d 71 01 01 10 test %r15,0x10010171\(%rip\) # 100101e8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 13 05 73 01 01 10 adc 0x10010173\(%rip\),%eax # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 03 1d 6d 01 01 10 add 0x1001016d\(%rip\),%ebx # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 23 0d 67 01 01 10 and 0x10010167\(%rip\),%ecx # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 3b 15 61 01 01 10 cmp 0x10010161\(%rip\),%edx # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 0b 35 5b 01 01 10 or 0x1001015b\(%rip\),%esi # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 1b 3d 55 01 01 10 sbb 0x10010155\(%rip\),%edi # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 2b 2d 4f 01 01 10 sub 0x1001014f\(%rip\),%ebp # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 44 33 05 48 01 01 10 xor 0x10010148\(%rip\),%r8d # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 44 85 3d 41 01 01 10 test %r15d,0x10010141\(%rip\) # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 48 13 05 3a 01 01 10 adc 0x1001013a\(%rip\),%rax # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 48 03 1d 33 01 01 10 add 0x10010133\(%rip\),%rbx # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 48 23 0d 2c 01 01 10 and 0x1001012c\(%rip\),%rcx # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 48 3b 15 25 01 01 10 cmp 0x10010125\(%rip\),%rdx # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 48 0b 3d 1e 01 01 10 or 0x1001011e\(%rip\),%rdi # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 48 1b 35 17 01 01 10 sbb 0x10010117\(%rip\),%rsi # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 48 2b 2d 10 01 01 10 sub 0x10010110\(%rip\),%rbp # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 4c 33 05 09 01 01 10 xor 0x10010109\(%rip\),%r8 # 100101f0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 4c 85 3d 02 01 01 10 test %r15,0x10010102\(%rip\) # 100101f0 <_DYNAMIC\+0x78> ++[ ]*[a-f0-9]+: 13 05 e2 01 01 10 adc 0x100101e2\(%rip\),%eax # 100101e8 <.*> ++[ ]*[a-f0-9]+: 03 1d dc 01 01 10 add 0x100101dc\(%rip\),%ebx # 100101e8 <.*> ++[ ]*[a-f0-9]+: 23 0d d6 01 01 10 and 0x100101d6\(%rip\),%ecx # 100101e8 <.*> ++[ ]*[a-f0-9]+: 3b 15 d0 01 01 10 cmp 0x100101d0\(%rip\),%edx # 100101e8 <.*> ++[ ]*[a-f0-9]+: 0b 35 ca 01 01 10 or 0x100101ca\(%rip\),%esi # 100101e8 <.*> ++[ ]*[a-f0-9]+: 1b 3d c4 01 01 10 sbb 0x100101c4\(%rip\),%edi # 100101e8 <.*> ++[ ]*[a-f0-9]+: 2b 2d be 01 01 10 sub 0x100101be\(%rip\),%ebp # 100101e8 <.*> ++[ ]*[a-f0-9]+: 44 33 05 b7 01 01 10 xor 0x100101b7\(%rip\),%r8d # 100101e8 <.*> ++[ ]*[a-f0-9]+: 44 85 3d b0 01 01 10 test %r15d,0x100101b0\(%rip\) # 100101e8 <.*> ++[ ]*[a-f0-9]+: 48 13 05 a9 01 01 10 adc 0x100101a9\(%rip\),%rax # 100101e8 <.*> ++[ ]*[a-f0-9]+: 48 03 1d a2 01 01 10 add 0x100101a2\(%rip\),%rbx # 100101e8 <.*> ++[ ]*[a-f0-9]+: 48 23 0d 9b 01 01 10 and 0x1001019b\(%rip\),%rcx # 100101e8 <.*> ++[ ]*[a-f0-9]+: 48 3b 15 94 01 01 10 cmp 0x10010194\(%rip\),%rdx # 100101e8 <.*> ++[ ]*[a-f0-9]+: 48 0b 3d 8d 01 01 10 or 0x1001018d\(%rip\),%rdi # 100101e8 <.*> ++[ ]*[a-f0-9]+: 48 1b 35 86 01 01 10 sbb 0x10010186\(%rip\),%rsi # 100101e8 <.*> ++[ ]*[a-f0-9]+: 48 2b 2d 7f 01 01 10 sub 0x1001017f\(%rip\),%rbp # 100101e8 <.*> ++[ ]*[a-f0-9]+: 4c 33 05 78 01 01 10 xor 0x10010178\(%rip\),%r8 # 100101e8 <.*> ++[ ]*[a-f0-9]+: 4c 85 3d 71 01 01 10 test %r15,0x10010171\(%rip\) # 100101e8 <.*> ++[ ]*[a-f0-9]+: 13 05 73 01 01 10 adc 0x10010173\(%rip\),%eax # 100101f0 <.*> ++[ ]*[a-f0-9]+: 03 1d 6d 01 01 10 add 0x1001016d\(%rip\),%ebx # 100101f0 <.*> ++[ ]*[a-f0-9]+: 23 0d 67 01 01 10 and 0x10010167\(%rip\),%ecx # 100101f0 <.*> ++[ ]*[a-f0-9]+: 3b 15 61 01 01 10 cmp 0x10010161\(%rip\),%edx # 100101f0 <.*> ++[ ]*[a-f0-9]+: 0b 35 5b 01 01 10 or 0x1001015b\(%rip\),%esi # 100101f0 <.*> ++[ ]*[a-f0-9]+: 1b 3d 55 01 01 10 sbb 0x10010155\(%rip\),%edi # 100101f0 <.*> ++[ ]*[a-f0-9]+: 2b 2d 4f 01 01 10 sub 0x1001014f\(%rip\),%ebp # 100101f0 <.*> ++[ ]*[a-f0-9]+: 44 33 05 48 01 01 10 xor 0x10010148\(%rip\),%r8d # 100101f0 <.*> ++[ ]*[a-f0-9]+: 44 85 3d 41 01 01 10 test %r15d,0x10010141\(%rip\) # 100101f0 <.*> ++[ ]*[a-f0-9]+: 48 13 05 3a 01 01 10 adc 0x1001013a\(%rip\),%rax # 100101f0 <.*> ++[ ]*[a-f0-9]+: 48 03 1d 33 01 01 10 add 0x10010133\(%rip\),%rbx # 100101f0 <.*> ++[ ]*[a-f0-9]+: 48 23 0d 2c 01 01 10 and 0x1001012c\(%rip\),%rcx # 100101f0 <.*> ++[ ]*[a-f0-9]+: 48 3b 15 25 01 01 10 cmp 0x10010125\(%rip\),%rdx # 100101f0 <.*> ++[ ]*[a-f0-9]+: 48 0b 3d 1e 01 01 10 or 0x1001011e\(%rip\),%rdi # 100101f0 <.*> ++[ ]*[a-f0-9]+: 48 1b 35 17 01 01 10 sbb 0x10010117\(%rip\),%rsi # 100101f0 <.*> ++[ ]*[a-f0-9]+: 48 2b 2d 10 01 01 10 sub 0x10010110\(%rip\),%rbp # 100101f0 <.*> ++[ ]*[a-f0-9]+: 4c 33 05 09 01 01 10 xor 0x10010109\(%rip\),%r8 # 100101f0 <.*> ++[ ]*[a-f0-9]+: 4c 85 3d 02 01 01 10 test %r15,0x10010102\(%rip\) # 100101f0 <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/load1d.d b/ld/testsuite/ld-x86-64/load1d.d +index 2987048..ee1e3f0 100644 +--- a/ld/testsuite/ld-x86-64/load1d.d ++++ b/ld/testsuite/ld-x86-64/load1d.d +@@ -9,40 +9,40 @@ + Disassembly of section .text: + + 0+[a-f0-9]+ <_start>: +-[ ]*[a-f0-9]+: 13 05 5a 01 20 00 adc 0x20015a\(%rip\),%eax # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 03 1d 54 01 20 00 add 0x200154\(%rip\),%ebx # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 23 0d 4e 01 20 00 and 0x20014e\(%rip\),%ecx # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 3b 15 48 01 20 00 cmp 0x200148\(%rip\),%edx # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 0b 35 42 01 20 00 or 0x200142\(%rip\),%esi # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 1b 3d 3c 01 20 00 sbb 0x20013c\(%rip\),%edi # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 2b 2d 36 01 20 00 sub 0x200136\(%rip\),%ebp # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 44 33 05 2f 01 20 00 xor 0x20012f\(%rip\),%r8d # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 44 85 3d 28 01 20 00 test %r15d,0x200128\(%rip\) # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 48 13 05 21 01 20 00 adc 0x200121\(%rip\),%rax # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 48 03 1d 1a 01 20 00 add 0x20011a\(%rip\),%rbx # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 48 23 0d 13 01 20 00 and 0x200113\(%rip\),%rcx # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 48 3b 15 0c 01 20 00 cmp 0x20010c\(%rip\),%rdx # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 48 0b 3d 05 01 20 00 or 0x200105\(%rip\),%rdi # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 48 1b 35 fe 00 20 00 sbb 0x2000fe\(%rip\),%rsi # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 48 2b 2d f7 00 20 00 sub 0x2000f7\(%rip\),%rbp # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 4c 33 05 f0 00 20 00 xor 0x2000f0\(%rip\),%r8 # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 4c 85 3d e9 00 20 00 test %r15,0x2000e9\(%rip\) # 2002b8 <_DYNAMIC\+0x70> +-[ ]*[a-f0-9]+: 13 05 eb 00 20 00 adc 0x2000eb\(%rip\),%eax # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 03 1d e5 00 20 00 add 0x2000e5\(%rip\),%ebx # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 23 0d df 00 20 00 and 0x2000df\(%rip\),%ecx # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 3b 15 d9 00 20 00 cmp 0x2000d9\(%rip\),%edx # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 0b 35 d3 00 20 00 or 0x2000d3\(%rip\),%esi # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 1b 3d cd 00 20 00 sbb 0x2000cd\(%rip\),%edi # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 2b 2d c7 00 20 00 sub 0x2000c7\(%rip\),%ebp # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 44 33 05 c0 00 20 00 xor 0x2000c0\(%rip\),%r8d # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 44 85 3d b9 00 20 00 test %r15d,0x2000b9\(%rip\) # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 48 13 05 b2 00 20 00 adc 0x2000b2\(%rip\),%rax # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 48 03 1d ab 00 20 00 add 0x2000ab\(%rip\),%rbx # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 48 23 0d a4 00 20 00 and 0x2000a4\(%rip\),%rcx # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 48 3b 15 9d 00 20 00 cmp 0x20009d\(%rip\),%rdx # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 48 0b 3d 96 00 20 00 or 0x200096\(%rip\),%rdi # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 48 1b 35 8f 00 20 00 sbb 0x20008f\(%rip\),%rsi # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 48 2b 2d 88 00 20 00 sub 0x200088\(%rip\),%rbp # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 4c 33 05 81 00 20 00 xor 0x200081\(%rip\),%r8 # 2002c0 <_DYNAMIC\+0x78> +-[ ]*[a-f0-9]+: 4c 85 3d 7a 00 20 00 test %r15,0x20007a\(%rip\) # 2002c0 <_DYNAMIC\+0x78> ++[ ]*[a-f0-9]+: 13 05 5a 01 20 00 adc 0x20015a\(%rip\),%eax # 2002b8 <.*> ++[ ]*[a-f0-9]+: 03 1d 54 01 20 00 add 0x200154\(%rip\),%ebx # 2002b8 <.*> ++[ ]*[a-f0-9]+: 23 0d 4e 01 20 00 and 0x20014e\(%rip\),%ecx # 2002b8 <.*> ++[ ]*[a-f0-9]+: 3b 15 48 01 20 00 cmp 0x200148\(%rip\),%edx # 2002b8 <.*> ++[ ]*[a-f0-9]+: 0b 35 42 01 20 00 or 0x200142\(%rip\),%esi # 2002b8 <.*> ++[ ]*[a-f0-9]+: 1b 3d 3c 01 20 00 sbb 0x20013c\(%rip\),%edi # 2002b8 <.*> ++[ ]*[a-f0-9]+: 2b 2d 36 01 20 00 sub 0x200136\(%rip\),%ebp # 2002b8 <.*> ++[ ]*[a-f0-9]+: 44 33 05 2f 01 20 00 xor 0x20012f\(%rip\),%r8d # 2002b8 <.*> ++[ ]*[a-f0-9]+: 44 85 3d 28 01 20 00 test %r15d,0x200128\(%rip\) # 2002b8 <.*> ++[ ]*[a-f0-9]+: 48 13 05 21 01 20 00 adc 0x200121\(%rip\),%rax # 2002b8 <.*> ++[ ]*[a-f0-9]+: 48 03 1d 1a 01 20 00 add 0x20011a\(%rip\),%rbx # 2002b8 <.*> ++[ ]*[a-f0-9]+: 48 23 0d 13 01 20 00 and 0x200113\(%rip\),%rcx # 2002b8 <.*> ++[ ]*[a-f0-9]+: 48 3b 15 0c 01 20 00 cmp 0x20010c\(%rip\),%rdx # 2002b8 <.*> ++[ ]*[a-f0-9]+: 48 0b 3d 05 01 20 00 or 0x200105\(%rip\),%rdi # 2002b8 <.*> ++[ ]*[a-f0-9]+: 48 1b 35 fe 00 20 00 sbb 0x2000fe\(%rip\),%rsi # 2002b8 <.*> ++[ ]*[a-f0-9]+: 48 2b 2d f7 00 20 00 sub 0x2000f7\(%rip\),%rbp # 2002b8 <.*> ++[ ]*[a-f0-9]+: 4c 33 05 f0 00 20 00 xor 0x2000f0\(%rip\),%r8 # 2002b8 <.*> ++[ ]*[a-f0-9]+: 4c 85 3d e9 00 20 00 test %r15,0x2000e9\(%rip\) # 2002b8 <.*> ++[ ]*[a-f0-9]+: 13 05 eb 00 20 00 adc 0x2000eb\(%rip\),%eax # 2002c0 <.*> ++[ ]*[a-f0-9]+: 03 1d e5 00 20 00 add 0x2000e5\(%rip\),%ebx # 2002c0 <.*> ++[ ]*[a-f0-9]+: 23 0d df 00 20 00 and 0x2000df\(%rip\),%ecx # 2002c0 <.*> ++[ ]*[a-f0-9]+: 3b 15 d9 00 20 00 cmp 0x2000d9\(%rip\),%edx # 2002c0 <.*> ++[ ]*[a-f0-9]+: 0b 35 d3 00 20 00 or 0x2000d3\(%rip\),%esi # 2002c0 <.*> ++[ ]*[a-f0-9]+: 1b 3d cd 00 20 00 sbb 0x2000cd\(%rip\),%edi # 2002c0 <.*> ++[ ]*[a-f0-9]+: 2b 2d c7 00 20 00 sub 0x2000c7\(%rip\),%ebp # 2002c0 <.*> ++[ ]*[a-f0-9]+: 44 33 05 c0 00 20 00 xor 0x2000c0\(%rip\),%r8d # 2002c0 <.*> ++[ ]*[a-f0-9]+: 44 85 3d b9 00 20 00 test %r15d,0x2000b9\(%rip\) # 2002c0 <.*> ++[ ]*[a-f0-9]+: 48 13 05 b2 00 20 00 adc 0x2000b2\(%rip\),%rax # 2002c0 <.*> ++[ ]*[a-f0-9]+: 48 03 1d ab 00 20 00 add 0x2000ab\(%rip\),%rbx # 2002c0 <.*> ++[ ]*[a-f0-9]+: 48 23 0d a4 00 20 00 and 0x2000a4\(%rip\),%rcx # 2002c0 <.*> ++[ ]*[a-f0-9]+: 48 3b 15 9d 00 20 00 cmp 0x20009d\(%rip\),%rdx # 2002c0 <.*> ++[ ]*[a-f0-9]+: 48 0b 3d 96 00 20 00 or 0x200096\(%rip\),%rdi # 2002c0 <.*> ++[ ]*[a-f0-9]+: 48 1b 35 8f 00 20 00 sbb 0x20008f\(%rip\),%rsi # 2002c0 <.*> ++[ ]*[a-f0-9]+: 48 2b 2d 88 00 20 00 sub 0x200088\(%rip\),%rbp # 2002c0 <.*> ++[ ]*[a-f0-9]+: 4c 33 05 81 00 20 00 xor 0x200081\(%rip\),%r8 # 2002c0 <.*> ++[ ]*[a-f0-9]+: 4c 85 3d 7a 00 20 00 test %r15,0x20007a\(%rip\) # 2002c0 <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/mov1a.d b/ld/testsuite/ld-x86-64/mov1a.d +index 4ac6d7e..4c26d6f 100644 +--- a/ld/testsuite/ld-x86-64/mov1a.d ++++ b/ld/testsuite/ld-x86-64/mov1a.d +@@ -9,7 +9,7 @@ + Disassembly of section .text: + + #... +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/mov1b.d b/ld/testsuite/ld-x86-64/mov1b.d +index 7421853..51a9190 100644 +--- a/ld/testsuite/ld-x86-64/mov1b.d ++++ b/ld/testsuite/ld-x86-64/mov1b.d +@@ -9,7 +9,7 @@ + Disassembly of section .text: + + #... +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> + [ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 * mov \$0x0,%rax + [ ]*[a-f0-9]+: 48 c7 c0 00 00 00 00 * mov \$0x0,%rax + #pass +diff --git a/ld/testsuite/ld-x86-64/mov1c.d b/ld/testsuite/ld-x86-64/mov1c.d +index bb7bab1..be3337a 100644 +--- a/ld/testsuite/ld-x86-64/mov1c.d ++++ b/ld/testsuite/ld-x86-64/mov1c.d +@@ -9,7 +9,7 @@ + Disassembly of section .text: + + #... +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/mov1d.d b/ld/testsuite/ld-x86-64/mov1d.d +index 7cdab0c..720b150 100644 +--- a/ld/testsuite/ld-x86-64/mov1d.d ++++ b/ld/testsuite/ld-x86-64/mov1d.d +@@ -9,7 +9,7 @@ + Disassembly of section .text: + + #... +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> + [ ]*[a-f0-9]+: 40 c7 c0 00 00 00 00 * rex mov \$0x0,%eax + [ ]*[a-f0-9]+: 40 c7 c0 00 00 00 00 * rex mov \$0x0,%eax + #pass +diff --git a/ld/testsuite/ld-x86-64/mov2a.d b/ld/testsuite/ld-x86-64/mov2a.d +index aaf5707..09f8790 100644 +--- a/ld/testsuite/ld-x86-64/mov2a.d ++++ b/ld/testsuite/ld-x86-64/mov2a.d +@@ -9,7 +9,7 @@ + Disassembly of section .text: + + #... +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/mov2b.d b/ld/testsuite/ld-x86-64/mov2b.d +index ee1b308..41d4b95 100644 +--- a/ld/testsuite/ld-x86-64/mov2b.d ++++ b/ld/testsuite/ld-x86-64/mov2b.d +@@ -9,7 +9,7 @@ + Disassembly of section .text: + + #... +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/mov2c.d b/ld/testsuite/ld-x86-64/mov2c.d +index 8991121..766584c 100644 +--- a/ld/testsuite/ld-x86-64/mov2c.d ++++ b/ld/testsuite/ld-x86-64/mov2c.d +@@ -9,7 +9,7 @@ + Disassembly of section .text: + + #... +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/mov2d.d b/ld/testsuite/ld-x86-64/mov2d.d +index 744028e..6b93947 100644 +--- a/ld/testsuite/ld-x86-64/mov2d.d ++++ b/ld/testsuite/ld-x86-64/mov2d.d +@@ -9,7 +9,7 @@ + Disassembly of section .text: + + #... +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/mpx3.dd b/ld/testsuite/ld-x86-64/mpx3.dd +index eb529f4..d5d8049 100644 +--- a/ld/testsuite/ld-x86-64/mpx3.dd ++++ b/ld/testsuite/ld-x86-64/mpx3.dd +@@ -8,13 +8,13 @@ Disassembly of section .plt: + [ ]*[a-f0-9]+: f2 ff ([0-9a-f]{2} ){5} bnd jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x10> + [ ]*[a-f0-9]+: 0f 1f 00 nopl \(%rax\) + [ ]*[a-f0-9]+: 68 00 00 00 00 pushq \$0x0 +-[ ]*[a-f0-9]+: f2 e9 ([0-9a-f]{2} ){4} bnd jmpq [a-f0-9]+ <call1@plt-0x20> ++[ ]*[a-f0-9]+: f2 e9 ([0-9a-f]{2} ){4} bnd jmpq [a-f0-9]+ <.plt> + [ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) + + Disassembly of section .plt.bnd: + + 0+[a-f0-9]+ <call1@plt>: +-[ ]*[a-f0-9]+: f2 ff ([0-9a-f]{2} ){5} bnd jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x18> ++[ ]*[a-f0-9]+: f2 ff ([0-9a-f]{2} ){5} bnd jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <call1> + [ ]*[a-f0-9]+: 90 nop + + Disassembly of section .text: +@@ -22,7 +22,7 @@ Disassembly of section .text: + 0+[a-f0-9]+ <_start>: + [ ]*[a-f0-9]+: bf ([0-9a-f]{2} ){4} mov \$0x[a-f0-9]+,%edi + [ ]*[a-f0-9]+: f2 ff d7 bnd callq \*%rdi +-[ ]*[a-f0-9]+: 48 8b ([0-9a-f]{2} ){5} mov 0x[a-f0-9]+\(%rip\),%rdi # [a-f0-9]+ <func> ++[ ]*[a-f0-9]+: 48 8b ([0-9a-f]{2} ){5} mov 0x[a-f0-9]+\(%rip\),%rdi # [a-f0-9]+ <call2> + [ ]*[a-f0-9]+: f2 ff d7 bnd callq \*%rdi + [ ]*[a-f0-9]+: c3 retq + #pass +diff --git a/ld/testsuite/ld-x86-64/mpx4.dd b/ld/testsuite/ld-x86-64/mpx4.dd +index 0cf0f75..1bcb13b 100644 +--- a/ld/testsuite/ld-x86-64/mpx4.dd ++++ b/ld/testsuite/ld-x86-64/mpx4.dd +@@ -8,13 +8,13 @@ Disassembly of section .plt: + [ ]*[a-f0-9]+: f2 ff 25 43 01 20 00 bnd jmpq \*0x200143\(%rip\) # 6003b0 <_GLOBAL_OFFSET_TABLE_\+0x10> + [ ]*[a-f0-9]+: 0f 1f 00 nopl \(%rax\) + [ ]*[a-f0-9]+: 68 00 00 00 00 pushq \$0x0 +-[ ]*[a-f0-9]+: f2 e9 e5 ff ff ff bnd jmpq 400260 <call1@plt-0x20> ++[ ]*[a-f0-9]+: f2 e9 e5 ff ff ff bnd jmpq 400260 <.plt> + [ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) + + Disassembly of section .plt.bnd: + + 0+400280 <call1@plt>: +-[ ]*[a-f0-9]+: f2 ff 25 31 01 20 00 bnd jmpq \*0x200131\(%rip\) # 6003b8 <_GLOBAL_OFFSET_TABLE_\+0x18> ++[ ]*[a-f0-9]+: f2 ff 25 31 01 20 00 bnd jmpq \*0x200131\(%rip\) # 6003b8 <call1> + [ ]*[a-f0-9]+: 90 nop + + Disassembly of section .text: +diff --git a/ld/testsuite/ld-x86-64/no-plt-1a.dd b/ld/testsuite/ld-x86-64/no-plt-1a.dd +index 7c2f5b2..a8445c7 100644 +--- a/ld/testsuite/ld-x86-64/no-plt-1a.dd ++++ b/ld/testsuite/ld-x86-64/no-plt-1a.dd +@@ -21,8 +21,8 @@ Disassembly of section .text: + +[a-f0-9]+: 75 11 jne [0-9a-f]+ <check\+0x[0-9a-f]+> + +[a-f0-9]+: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[a-f0-9]+\(%rip\),%rdi +# [a-f0-9]+.* + +[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp +- +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + #... + [0-9a-f]+ <get_func>: + +[a-f0-9]+: 4(0|8) c7 c0 ([0-9a-f]{2} ){4}[ ]+(rex |)mov +\$0x[0-9a-f]+,%(e|r)ax +diff --git a/ld/testsuite/ld-x86-64/no-plt-1b.dd b/ld/testsuite/ld-x86-64/no-plt-1b.dd +index 13d24b8..c21e912 100644 +--- a/ld/testsuite/ld-x86-64/no-plt-1b.dd ++++ b/ld/testsuite/ld-x86-64/no-plt-1b.dd +@@ -8,19 +8,19 @@ Disassembly of section .text: + #... + [0-9a-f]+ <check>: + +[a-f0-9]+: 48 83 ec 08 sub \$0x8,%rsp +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> +- +[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4}[ ]+cmp 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> ++ +[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4}[ ]+cmp 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + +[a-f0-9]+: 75 34 jne [0-9a-f]+ <check\+0x[0-9a-f]+> + +[a-f0-9]+: 4(0|8) 39 05 ([0-9a-f]{2} ){4}[ ]+(rex |)cmp +%(e|r)ax,0x[0-9a-f]+\(%rip\) +# [a-f0-9]+ <.*> + +[a-f0-9]+: 75 2b jne [0-9a-f]+ <check\+0x[0-9a-f]+> +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + +[a-f0-9]+: 3d 78 56 34 12 cmp \$0x12345678,%eax + +[a-f0-9]+: 75 1e jne [0-9a-f]+ <check\+0x[0-9a-f]+> +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + +[a-f0-9]+: 3d 78 56 34 12 cmp \$0x12345678,%eax + +[a-f0-9]+: 75 11 jne [0-9a-f]+ <check\+0x[0-9a-f]+> + +[a-f0-9]+: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[a-f0-9]+\(%rip\),%rdi +# [a-f0-9]+.* + +[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp +- +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/no-plt-1c.dd b/ld/testsuite/ld-x86-64/no-plt-1c.dd +index 75287c9..b41246b 100644 +--- a/ld/testsuite/ld-x86-64/no-plt-1c.dd ++++ b/ld/testsuite/ld-x86-64/no-plt-1c.dd +@@ -8,7 +8,7 @@ Disassembly of section .text: + #... + [0-9a-f]+ <check>: + +[a-f0-9]+: 48 83 ec 08 sub \$0x8,%rsp +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + +[a-f0-9]+: 48 81 f8 ([0-9a-f]{2} ){4}[ ]+cmp \$0x[0-9a-f]+,%rax + +[a-f0-9]+: 75 34 jne [0-9a-f]+ <check\+0x[0-9a-f]+> + +[a-f0-9]+: 4(0|8) 39 05 ([0-9a-f]{2} ){4}[ ]+(rex |)cmp +%(e|r)ax,0x[0-9a-f]+\(%rip\) +# [a-f0-9]+ <.*> +@@ -16,11 +16,11 @@ Disassembly of section .text: + +[a-f0-9]+: 67 e8 ([0-9a-f]{2} ){4}[ ]+addr32 callq [0-9a-f]+ <func> + +[a-f0-9]+: 3d 78 56 34 12 cmp \$0x12345678,%eax + +[a-f0-9]+: 75 1e jne [0-9a-f]+ <check\+0x[0-9a-f]+> +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + +[a-f0-9]+: 3d 78 56 34 12 cmp \$0x12345678,%eax + +[a-f0-9]+: 75 11 jne [0-9a-f]+ <check\+0x[0-9a-f]+> + +[a-f0-9]+: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[a-f0-9]+\(%rip\),%rdi +# [a-f0-9]+.* + +[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp +- +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/no-plt-1e.dd b/ld/testsuite/ld-x86-64/no-plt-1e.dd +index 0126abe..f3b07ab 100644 +--- a/ld/testsuite/ld-x86-64/no-plt-1e.dd ++++ b/ld/testsuite/ld-x86-64/no-plt-1e.dd +@@ -9,7 +9,7 @@ Disassembly of section .text: + [0-9a-f]+ <check>: + +[a-f0-9]+: 48 83 ec 08 sub \$0x8,%rsp + +[a-f0-9]+: 67 e8 ([0-9a-f]{2} ){4}[ ]+addr32 callq [0-9a-f]+ <get_func> +- +[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4}[ ]+cmp 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4}[ ]+cmp 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + +[a-f0-9]+: 75 34 jne [0-9a-f]+ <check\+0x[0-9a-f]+> + +[a-f0-9]+: 4(0|8) 39 05 ([0-9a-f]{2} ){4}[ ]+(rex |)cmp +%(e|r)ax,0x[0-9a-f]+\(%rip\) +# [a-f0-9]+ <func_p> + +[a-f0-9]+: 75 2b jne [0-9a-f]+ <check\+0x[0-9a-f]+> +@@ -21,8 +21,8 @@ Disassembly of section .text: + +[a-f0-9]+: 75 11 jne [0-9a-f]+ <check\+0x[0-9a-f]+> + +[a-f0-9]+: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[a-f0-9]+\(%rip\),%rdi +# [a-f0-9]+.* + +[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp +- +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + #... + [0-9a-f]+ <get_func>: + +[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4}[ ]+lea -0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <func> +diff --git a/ld/testsuite/ld-x86-64/no-plt-1f.dd b/ld/testsuite/ld-x86-64/no-plt-1f.dd +index 13d24b8..c21e912 100644 +--- a/ld/testsuite/ld-x86-64/no-plt-1f.dd ++++ b/ld/testsuite/ld-x86-64/no-plt-1f.dd +@@ -8,19 +8,19 @@ Disassembly of section .text: + #... + [0-9a-f]+ <check>: + +[a-f0-9]+: 48 83 ec 08 sub \$0x8,%rsp +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> +- +[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4}[ ]+cmp 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> ++ +[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4}[ ]+cmp 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + +[a-f0-9]+: 75 34 jne [0-9a-f]+ <check\+0x[0-9a-f]+> + +[a-f0-9]+: 4(0|8) 39 05 ([0-9a-f]{2} ){4}[ ]+(rex |)cmp +%(e|r)ax,0x[0-9a-f]+\(%rip\) +# [a-f0-9]+ <.*> + +[a-f0-9]+: 75 2b jne [0-9a-f]+ <check\+0x[0-9a-f]+> +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + +[a-f0-9]+: 3d 78 56 34 12 cmp \$0x12345678,%eax + +[a-f0-9]+: 75 1e jne [0-9a-f]+ <check\+0x[0-9a-f]+> +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + +[a-f0-9]+: 3d 78 56 34 12 cmp \$0x12345678,%eax + +[a-f0-9]+: 75 11 jne [0-9a-f]+ <check\+0x[0-9a-f]+> + +[a-f0-9]+: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[a-f0-9]+\(%rip\),%rdi +# [a-f0-9]+.* + +[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp +- +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/no-plt-1g.dd b/ld/testsuite/ld-x86-64/no-plt-1g.dd +index 5a3dd17..ca4eb59 100644 +--- a/ld/testsuite/ld-x86-64/no-plt-1g.dd ++++ b/ld/testsuite/ld-x86-64/no-plt-1g.dd +@@ -8,19 +8,19 @@ Disassembly of section .text: + #... + [0-9a-f]+ <check>: + +[a-f0-9]+: 48 83 ec 08 sub \$0x8,%rsp +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> +- +[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4}[ ]+cmp 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> ++ +[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4}[ ]+cmp 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + +[a-f0-9]+: 75 34 jne [0-9a-f]+ <check\+0x[0-9a-f]+> + +[a-f0-9]+: 4(0|8) 39 05 ([0-9a-f]{2} ){4}[ ]+(rex |)cmp +%(e|r)ax,0x[0-9a-f]+\(%rip\) +# [a-f0-9]+ <.*> + +[a-f0-9]+: 75 2b jne [0-9a-f]+ <check\+0x[0-9a-f]+> + +[a-f0-9]+: 67 e8 ([0-9a-f]{2} ){4}[ ]+addr32 callq [0-9a-f]+ <func> + +[a-f0-9]+: 3d 78 56 34 12 cmp \$0x12345678,%eax + +[a-f0-9]+: 75 1e jne [0-9a-f]+ <check\+0x[0-9a-f]+> +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + +[a-f0-9]+: 3d 78 56 34 12 cmp \$0x12345678,%eax + +[a-f0-9]+: 75 11 jne [0-9a-f]+ <check\+0x[0-9a-f]+> + +[a-f0-9]+: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[a-f0-9]+\(%rip\),%rdi +# [a-f0-9]+.* + +[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp +- +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> +- +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> ++ +[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4}[ ]+callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/plt-main-bnd.dd b/ld/testsuite/ld-x86-64/plt-main-bnd.dd +index 8598e30..91fc945 100644 +--- a/ld/testsuite/ld-x86-64/plt-main-bnd.dd ++++ b/ld/testsuite/ld-x86-64/plt-main-bnd.dd +@@ -2,6 +2,6 @@ + Disassembly of section .plt.got: + + [a-f0-9]+ <.plt.got>: +-[ ]*[a-f0-9]+: f2 ff 25 .. .. 20 00 bnd jmpq \*0x20....\(%rip\) # ...... <_DYNAMIC\+0x...> ++[ ]*[a-f0-9]+: f2 ff 25 .. .. 20 00 bnd jmpq \*0x20....\(%rip\) # ...... <.*> + [ ]*[a-f0-9]+: 90 nop + #pass +diff --git a/ld/testsuite/ld-x86-64/plt-nacl.pd b/ld/testsuite/ld-x86-64/plt-nacl.pd +index b17bf71..e0ff471 100644 +--- a/ld/testsuite/ld-x86-64/plt-nacl.pd ++++ b/ld/testsuite/ld-x86-64/plt-nacl.pd +@@ -8,7 +8,7 @@ + + Disassembly of section .plt: + +-[0-9a-f]+ <fn1@plt-0x40>: ++[0-9a-f]+ <.plt>: + +[0-9a-f]+: ff 35 ([0-9a-f]{2} ){4} * pushq 0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x8> + +[0-9a-f]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov 0x[0-9a-f]+\(%rip\),%r11 +# [0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x10> + +[0-9a-f]+: 41 83 e3 e0 and \$0xffffffe0,%r11d +@@ -33,7 +33,7 @@ Disassembly of section .plt: + +[0-9a-f]+: 0f 1f 84 00 00 00 00 * + +[0-9a-f]+: 00 * + +[0-9a-f]+: 68 00 00 00 00 pushq \$0x0 +- +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmpq [0-9a-f]+ <fn1@plt-0x40> ++ +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmpq [0-9a-f]+ <.plt> + +[0-9a-f]+: 66 66 66 66 66 66 2e data16 data16 data16 data16 data16 nopw %cs:0x0\(%rax,%rax,1\) + +[0-9a-f]+: 0f 1f 84 00 00 00 00 * + +[0-9a-f]+: 00 * +@@ -48,7 +48,7 @@ Disassembly of section .plt: + +[0-9a-f]+: 0f 1f 84 00 00 00 00 * + +[0-9a-f]+: 00 * + +[0-9a-f]+: 68 01 00 00 00 pushq \$0x1 +- +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmpq [0-9a-f]+ <fn1@plt-0x40> ++ +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmpq [0-9a-f]+ <.plt> + +[0-9a-f]+: 66 66 66 66 66 66 2e data16 data16 data16 data16 data16 nopw %cs:0x0\(%rax,%rax,1\) + +[0-9a-f]+: 0f 1f 84 00 00 00 00 * + +[0-9a-f]+: 00 * +diff --git a/ld/testsuite/ld-x86-64/plt.pd b/ld/testsuite/ld-x86-64/plt.pd +index b11cc22..b303d36 100644 +--- a/ld/testsuite/ld-x86-64/plt.pd ++++ b/ld/testsuite/ld-x86-64/plt.pd +@@ -8,17 +8,17 @@ + + Disassembly of section .plt: + +-[0-9a-f]+ <fn1@plt-0x10>: ++[0-9a-f]+ <.plt>: + +[0-9a-f]+: ff 35 ([0-9a-f]{2} ){4} * pushq 0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x8> + +[0-9a-f]+: ff 25 ([0-9a-f]{2} ){4} * jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x10> + +[0-9a-f]+: 0f 1f 40 00 nopl 0x0\(%rax\) + + [0-9a-f]+ <fn1@plt>: +- +[0-9a-f]+: ff 25 ([0-9a-f]{2} ){4} * jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x18> ++ +[0-9a-f]+: ff 25 ([0-9a-f]{2} ){4} * jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <fn1> + +[0-9a-f]+: 68 00 00 00 00 pushq \$0x0 +- +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmpq [0-9a-f]+ <fn1@plt-0x10> ++ +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmpq [0-9a-f]+ <.plt> + + [0-9a-f]+ <fn2@plt>: +- +[0-9a-f]+: ff 25 ([0-9a-f]{2} ){4} * jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x20> ++ +[0-9a-f]+: ff 25 ([0-9a-f]{2} ){4} * jmpq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <fn2> + +[0-9a-f]+: 68 01 00 00 00 pushq \$0x1 +- +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmpq [0-9a-f]+ <fn1@plt-0x10> ++ +[0-9a-f]+: e9 ([0-9a-f]{2} ){4} * jmpq [0-9a-f]+ <.plt> +diff --git a/ld/testsuite/ld-x86-64/pr18591.d b/ld/testsuite/ld-x86-64/pr18591.d +index d5c2150..af930f6 100644 +--- a/ld/testsuite/ld-x86-64/pr18591.d ++++ b/ld/testsuite/ld-x86-64/pr18591.d +@@ -8,5 +8,5 @@ + Disassembly of section .text: + + [a-f0-9]+ <bar>: +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/pr19609-1c.d b/ld/testsuite/ld-x86-64/pr19609-1c.d +index 3b1e98d..32bf67a 100644 +--- a/ld/testsuite/ld-x86-64/pr19609-1c.d ++++ b/ld/testsuite/ld-x86-64/pr19609-1c.d +@@ -9,15 +9,15 @@ + Disassembly of section .text: + + [a-f0-9]+ <_start>: +-[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 8b 0d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 44 8b 25 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 8b 0d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 44 8b 25 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> +diff --git a/ld/testsuite/ld-x86-64/pr19609-1e.d b/ld/testsuite/ld-x86-64/pr19609-1e.d +index dac5fef..4edc56e 100644 +--- a/ld/testsuite/ld-x86-64/pr19609-1e.d ++++ b/ld/testsuite/ld-x86-64/pr19609-1e.d +@@ -9,15 +9,15 @@ + Disassembly of section .text: + + [a-f0-9]+ <_start>: +-[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 8b 0d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 44 8b 25 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 8b 0d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 44 8b 25 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> +diff --git a/ld/testsuite/ld-x86-64/pr19609-1j.d b/ld/testsuite/ld-x86-64/pr19609-1j.d +index 4a36a70..c8b940a 100644 +--- a/ld/testsuite/ld-x86-64/pr19609-1j.d ++++ b/ld/testsuite/ld-x86-64/pr19609-1j.d +@@ -9,15 +9,15 @@ + Disassembly of section .text: + + [a-f0-9]+ <_start>: +-[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 8b 0d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 44 8b 25 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 8b 0d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 44 8b 25 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> +diff --git a/ld/testsuite/ld-x86-64/pr19609-1l.d b/ld/testsuite/ld-x86-64/pr19609-1l.d +index aedf5d8..5559399 100644 +--- a/ld/testsuite/ld-x86-64/pr19609-1l.d ++++ b/ld/testsuite/ld-x86-64/pr19609-1l.d +@@ -9,15 +9,15 @@ + Disassembly of section .text: + + [a-f0-9]+ <_start>: +-[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_start\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_start\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_start\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_start\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <.*> + [ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%rax # 0 <_start-0x[a-f0-9]+> + [ ]*[a-f0-9]+: 8d 0d ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%ecx # 0 <_start-0x[a-f0-9]+> + [ ]*[a-f0-9]+: 4c 8d 1d ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%r11 # 0 <_start-0x[a-f0-9]+> + [ ]*[a-f0-9]+: 44 8d 25 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%r12d # 0 <_start-0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_start\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_start\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_start\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_start\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> +diff --git a/ld/testsuite/ld-x86-64/pr19609-1m.d b/ld/testsuite/ld-x86-64/pr19609-1m.d +index 8e80cbb..c6831d8 100644 +--- a/ld/testsuite/ld-x86-64/pr19609-1m.d ++++ b/ld/testsuite/ld-x86-64/pr19609-1m.d +@@ -9,15 +9,15 @@ + Disassembly of section .text: + + [a-f0-9]+ <_start>: +-[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 8b 0d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 44 8b 25 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> +-[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 3b 05 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 3b 0d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 4c 3b 1d ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 44 3b 25 ([0-9a-f]{2} ){4} * cmp 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 8b 0d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%ecx # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 4c 8b 1d ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 44 8b 25 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%r12d # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 48 85 05 ([0-9a-f]{2} ){4} * test %rax,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 85 0d ([0-9a-f]{2} ){4} * test %ecx,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 4c 85 1d ([0-9a-f]{2} ){4} * test %r11,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> ++[ ]*[a-f0-9]+: 44 85 25 ([0-9a-f]{2} ){4} * test %r12d,0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> +diff --git a/ld/testsuite/ld-x86-64/pr19609-5b.d b/ld/testsuite/ld-x86-64/pr19609-5b.d +index 4183d56..257fa63 100644 +--- a/ld/testsuite/ld-x86-64/pr19609-5b.d ++++ b/ld/testsuite/ld-x86-64/pr19609-5b.d +@@ -9,4 +9,4 @@ + Disassembly of section .text: + + [a-f0-9]+ <_start>: +-[ ]+[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]+[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> +diff --git a/ld/testsuite/ld-x86-64/pr19609-5c.d b/ld/testsuite/ld-x86-64/pr19609-5c.d +index 4eaeb2b..1de68b4 100644 +--- a/ld/testsuite/ld-x86-64/pr19609-5c.d ++++ b/ld/testsuite/ld-x86-64/pr19609-5c.d +@@ -9,4 +9,4 @@ + Disassembly of section .text: + + [a-f0-9]+ <_start>: +-[ ]+[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]+[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <bar> +diff --git a/ld/testsuite/ld-x86-64/pr19609-5e.d b/ld/testsuite/ld-x86-64/pr19609-5e.d +index b6b6c65..90bdb3d 100644 +--- a/ld/testsuite/ld-x86-64/pr19609-5e.d ++++ b/ld/testsuite/ld-x86-64/pr19609-5e.d +@@ -9,4 +9,4 @@ + Disassembly of section .text: + + [a-f0-9]+ <_start>: +-[ ]+[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <[0-9a-zA-Z_]+[\+\-]+0x[a-f0-9]+> ++[ ]+[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*> +diff --git a/ld/testsuite/ld-x86-64/pr19609-6b.d b/ld/testsuite/ld-x86-64/pr19609-6b.d +index 64e1f5b..810023b 100644 +--- a/ld/testsuite/ld-x86-64/pr19609-6b.d ++++ b/ld/testsuite/ld-x86-64/pr19609-6b.d +@@ -9,5 +9,5 @@ + Disassembly of section .text: + + [a-f0-9]+ <_start>: +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_start\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.got> + #pass +diff --git a/ld/testsuite/ld-x86-64/pr19609-7b.d b/ld/testsuite/ld-x86-64/pr19609-7b.d +index 2e8fd35..898a5df 100644 +--- a/ld/testsuite/ld-x86-64/pr19609-7b.d ++++ b/ld/testsuite/ld-x86-64/pr19609-7b.d +@@ -9,5 +9,5 @@ + Disassembly of section .text: + + [a-f0-9]+ <_start>: +-[ ]*[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*0x[a-f0-9]+> ++[ ]*[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.got> + #pass +diff --git a/ld/testsuite/ld-x86-64/pr19609-7d.d b/ld/testsuite/ld-x86-64/pr19609-7d.d +index ba28828..476cafa 100644 +--- a/ld/testsuite/ld-x86-64/pr19609-7d.d ++++ b/ld/testsuite/ld-x86-64/pr19609-7d.d +@@ -9,5 +9,5 @@ + Disassembly of section .text: + + [a-f0-9]+ <_start>: +-[ ]*[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.*0x[a-f0-9]+> ++[ ]*[a-f0-9]+: ff 15 ([0-9a-f]{2} ){4} * callq \*-?0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <.got> + #pass +diff --git a/ld/testsuite/ld-x86-64/pr19636-2d.d b/ld/testsuite/ld-x86-64/pr19636-2d.d +index ff25ec1..4f5c1f0 100644 +--- a/ld/testsuite/ld-x86-64/pr19636-2d.d ++++ b/ld/testsuite/ld-x86-64/pr19636-2d.d +@@ -20,6 +20,6 @@ Disassembly of section .plt: + Disassembly of section .text: + + 0+140 <_start>: +-[ ]*[a-f0-9]+: 48 3b 05 f1 00 20 00 cmp 0x2000f1\(%rip\),%rax # 200238 <_DYNAMIC\+0xe0> +-[ ]*[a-f0-9]+: ff 25 f3 00 20 00 jmpq \*0x2000f3\(%rip\) # 200240 <_DYNAMIC\+0xe8> +-[ ]*[a-f0-9]+: e8 de ff ff ff callq 130 <_start-0x10> ++[ ]*[a-f0-9]+: 48 3b 05 f1 00 20 00 cmp 0x2000f1\(%rip\),%rax # 200238 <.*> ++[ ]*[a-f0-9]+: ff 25 f3 00 20 00 jmpq \*0x2000f3\(%rip\) # 200240 <.*> ++[ ]*[a-f0-9]+: e8 de ff ff ff callq 130 <.*> +diff --git a/ld/testsuite/ld-x86-64/pr20093-1.d b/ld/testsuite/ld-x86-64/pr20093-1.d +index de81443..90bb3ab 100644 +--- a/ld/testsuite/ld-x86-64/pr20093-1.d ++++ b/ld/testsuite/ld-x86-64/pr20093-1.d +@@ -8,4 +8,4 @@ + Disassembly of section .text: + + [a-f0-9]+ <_start>: +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> +diff --git a/ld/testsuite/ld-x86-64/pr20093-2.d b/ld/testsuite/ld-x86-64/pr20093-2.d +index de81443..90bb3ab 100644 +--- a/ld/testsuite/ld-x86-64/pr20093-2.d ++++ b/ld/testsuite/ld-x86-64/pr20093-2.d +@@ -8,4 +8,4 @@ + Disassembly of section .text: + + [a-f0-9]+ <_start>: +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> +diff --git a/ld/testsuite/ld-x86-64/pr20253-1b.d b/ld/testsuite/ld-x86-64/pr20253-1b.d +index 247e042..d68dd46 100644 +--- a/ld/testsuite/ld-x86-64/pr20253-1b.d ++++ b/ld/testsuite/ld-x86-64/pr20253-1b.d +@@ -16,10 +16,10 @@ Disassembly of section .text: + +[a-f0-9]+: c3 retq + + 0+4000e2 <_start>: +- +[a-f0-9]+: ff 15 28 00 20 00 callq \*0x200028\(%rip\) # 600110 <_start\+0x20002e> +- +[a-f0-9]+: ff 25 2a 00 20 00 jmpq \*0x20002a\(%rip\) # 600118 <_start\+0x200036> +- +[a-f0-9]+: 48 c7 05 1f 00 20 00 00 00 00 00 movq \$0x0,0x20001f\(%rip\) # 600118 <_start\+0x200036> +- +[a-f0-9]+: 48 83 3d 0f 00 20 00 00 cmpq \$0x0,0x20000f\(%rip\) # 600110 <_start\+0x20002e> +- +[a-f0-9]+: 48 3b 0d 08 00 20 00 cmp 0x200008\(%rip\),%rcx # 600110 <_start\+0x20002e> +- +[a-f0-9]+: 48 3b 0d 09 00 20 00 cmp 0x200009\(%rip\),%rcx # 600118 <_start\+0x200036> ++ +[a-f0-9]+: ff 15 28 00 20 00 callq \*0x200028\(%rip\) # 600110 <.*> ++ +[a-f0-9]+: ff 25 2a 00 20 00 jmpq \*0x20002a\(%rip\) # 600118 <.*> ++ +[a-f0-9]+: 48 c7 05 1f 00 20 00 00 00 00 00 movq \$0x0,0x20001f\(%rip\) # 600118 <.*> ++ +[a-f0-9]+: 48 83 3d 0f 00 20 00 00 cmpq \$0x0,0x20000f\(%rip\) # 600110 <.*> ++ +[a-f0-9]+: 48 3b 0d 08 00 20 00 cmp 0x200008\(%rip\),%rcx # 600110 <.*> ++ +[a-f0-9]+: 48 3b 0d 09 00 20 00 cmp 0x200009\(%rip\),%rcx # 600118 <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/pr20253-1d.d b/ld/testsuite/ld-x86-64/pr20253-1d.d +index 35c04f8..6953c79 100644 +--- a/ld/testsuite/ld-x86-64/pr20253-1d.d ++++ b/ld/testsuite/ld-x86-64/pr20253-1d.d +@@ -16,10 +16,10 @@ Disassembly of section .text: + +[a-f0-9]+: c3 retq + + 0+1ca <_start>: +- +[a-f0-9]+: ff 15 28 01 20 00 callq \*0x200128\(%rip\) # 2002f8 <_DYNAMIC\+0x100> +- +[a-f0-9]+: ff 25 2a 01 20 00 jmpq \*0x20012a\(%rip\) # 200300 <_DYNAMIC\+0x108> +- +[a-f0-9]+: 48 c7 05 1f 01 20 00 00 00 00 00 movq \$0x0,0x20011f\(%rip\) # 200300 <_DYNAMIC\+0x108> +- +[a-f0-9]+: 48 83 3d 0f 01 20 00 00 cmpq \$0x0,0x20010f\(%rip\) # 2002f8 <_DYNAMIC\+0x100> +- +[a-f0-9]+: 48 3b 0d 08 01 20 00 cmp 0x200108\(%rip\),%rcx # 2002f8 <_DYNAMIC\+0x100> +- +[a-f0-9]+: 48 3b 0d 09 01 20 00 cmp 0x200109\(%rip\),%rcx # 200300 <_DYNAMIC\+0x108> ++ +[a-f0-9]+: ff 15 28 01 20 00 callq \*0x200128\(%rip\) # 2002f8 <.got> ++ +[a-f0-9]+: ff 25 2a 01 20 00 jmpq \*0x20012a\(%rip\) # 200300 <.got\+0x8> ++ +[a-f0-9]+: 48 c7 05 1f 01 20 00 00 00 00 00 movq \$0x0,0x20011f\(%rip\) # 200300 <.got\+0x8> ++ +[a-f0-9]+: 48 83 3d 0f 01 20 00 00 cmpq \$0x0,0x20010f\(%rip\) # 2002f8 <.got> ++ +[a-f0-9]+: 48 3b 0d 08 01 20 00 cmp 0x200108\(%rip\),%rcx # 2002f8 <.got> ++ +[a-f0-9]+: 48 3b 0d 09 01 20 00 cmp 0x200109\(%rip\),%rcx # 200300 <.got\+0x8> + #pass +diff --git a/ld/testsuite/ld-x86-64/pr20253-1f.d b/ld/testsuite/ld-x86-64/pr20253-1f.d +index d84b60e..9319350 100644 +--- a/ld/testsuite/ld-x86-64/pr20253-1f.d ++++ b/ld/testsuite/ld-x86-64/pr20253-1f.d +@@ -16,10 +16,10 @@ Disassembly of section .text: + +[a-f0-9]+: c3 retq + + 0+1fa <_start>: +- +[a-f0-9]+: ff 15 08 01 20 00 callq \*0x200108\(%rip\) # 200308 <_DYNAMIC\+0xe0> +- +[a-f0-9]+: ff 25 0a 01 20 00 jmpq \*0x20010a\(%rip\) # 200310 <_DYNAMIC\+0xe8> +- +[a-f0-9]+: 48 c7 05 ff 00 20 00 00 00 00 00 movq \$0x0,0x2000ff\(%rip\) # 200310 <_DYNAMIC\+0xe8> +- +[a-f0-9]+: 48 83 3d ef 00 20 00 00 cmpq \$0x0,0x2000ef\(%rip\) # 200308 <_DYNAMIC\+0xe0> +- +[a-f0-9]+: 48 3b 0d e8 00 20 00 cmp 0x2000e8\(%rip\),%rcx # 200308 <_DYNAMIC\+0xe0> +- +[a-f0-9]+: 48 3b 0d e9 00 20 00 cmp 0x2000e9\(%rip\),%rcx # 200310 <_DYNAMIC\+0xe8> ++ +[a-f0-9]+: ff 15 08 01 20 00 callq \*0x200108\(%rip\) # 200308 <.*> ++ +[a-f0-9]+: ff 25 0a 01 20 00 jmpq \*0x20010a\(%rip\) # 200310 <.*> ++ +[a-f0-9]+: 48 c7 05 ff 00 20 00 00 00 00 00 movq \$0x0,0x2000ff\(%rip\) # 200310 <.*> ++ +[a-f0-9]+: 48 83 3d ef 00 20 00 00 cmpq \$0x0,0x2000ef\(%rip\) # 200308 <.*> ++ +[a-f0-9]+: 48 3b 0d e8 00 20 00 cmp 0x2000e8\(%rip\),%rcx # 200308 <.*> ++ +[a-f0-9]+: 48 3b 0d e9 00 20 00 cmp 0x2000e9\(%rip\),%rcx # 200310 <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/pr20253-1h.d b/ld/testsuite/ld-x86-64/pr20253-1h.d +index 77ff100..14a8f1b 100644 +--- a/ld/testsuite/ld-x86-64/pr20253-1h.d ++++ b/ld/testsuite/ld-x86-64/pr20253-1h.d +@@ -16,10 +16,10 @@ Disassembly of section .text: + +[a-f0-9]+: c3 retq + + 0+40008e <_start>: +- +[a-f0-9]+: ff 15 28 00 20 00 callq \*0x200028\(%rip\) # 6000bc <_start\+0x20002e> +- +[a-f0-9]+: ff 25 2a 00 20 00 jmpq \*0x20002a\(%rip\) # 6000c4 <_start\+0x200036> +- +[a-f0-9]+: 48 c7 05 1f 00 20 00 00 00 00 00 movq \$0x0,0x20001f\(%rip\) # 6000c4 <_start\+0x200036> +- +[a-f0-9]+: 48 83 3d 0f 00 20 00 00 cmpq \$0x0,0x20000f\(%rip\) # 6000bc <_start\+0x20002e> +- +[a-f0-9]+: 48 3b 0d 08 00 20 00 cmp 0x200008\(%rip\),%rcx # 6000bc <_start\+0x20002e> +- +[a-f0-9]+: 48 3b 0d 09 00 20 00 cmp 0x200009\(%rip\),%rcx # 6000c4 <_start\+0x200036> ++ +[a-f0-9]+: ff 15 28 00 20 00 callq \*0x200028\(%rip\) # 6000bc <.*> ++ +[a-f0-9]+: ff 25 2a 00 20 00 jmpq \*0x20002a\(%rip\) # 6000c4 <.*> ++ +[a-f0-9]+: 48 c7 05 1f 00 20 00 00 00 00 00 movq \$0x0,0x20001f\(%rip\) # 6000c4 <.*> ++ +[a-f0-9]+: 48 83 3d 0f 00 20 00 00 cmpq \$0x0,0x20000f\(%rip\) # 6000bc <.*> ++ +[a-f0-9]+: 48 3b 0d 08 00 20 00 cmp 0x200008\(%rip\),%rcx # 6000bc <.*> ++ +[a-f0-9]+: 48 3b 0d 09 00 20 00 cmp 0x200009\(%rip\),%rcx # 6000c4 <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/pr20253-1j.d b/ld/testsuite/ld-x86-64/pr20253-1j.d +index 6f5d666..5662e0c 100644 +--- a/ld/testsuite/ld-x86-64/pr20253-1j.d ++++ b/ld/testsuite/ld-x86-64/pr20253-1j.d +@@ -16,10 +16,10 @@ Disassembly of section .text: + +[a-f0-9]+: c3 retq + + 0+122 <_start>: +- +[a-f0-9]+: ff 15 a8 00 20 00 callq \*0x2000a8\(%rip\) # 2001d0 <_DYNAMIC\+0x80> +- +[a-f0-9]+: ff 25 aa 00 20 00 jmpq \*0x2000aa\(%rip\) # 2001d8 <_DYNAMIC\+0x88> +- +[a-f0-9]+: 48 c7 05 9f 00 20 00 00 00 00 00 movq \$0x0,0x20009f\(%rip\) # 2001d8 <_DYNAMIC\+0x88> +- +[a-f0-9]+: 48 83 3d 8f 00 20 00 00 cmpq \$0x0,0x20008f\(%rip\) # 2001d0 <_DYNAMIC\+0x80> +- +[a-f0-9]+: 48 3b 0d 88 00 20 00 cmp 0x200088\(%rip\),%rcx # 2001d0 <_DYNAMIC\+0x80> +- +[a-f0-9]+: 48 3b 0d 89 00 20 00 cmp 0x200089\(%rip\),%rcx # 2001d8 <_DYNAMIC\+0x88> ++ +[a-f0-9]+: ff 15 a8 00 20 00 callq \*0x2000a8\(%rip\) # 2001d0 <.*> ++ +[a-f0-9]+: ff 25 aa 00 20 00 jmpq \*0x2000aa\(%rip\) # 2001d8 <.*> ++ +[a-f0-9]+: 48 c7 05 9f 00 20 00 00 00 00 00 movq \$0x0,0x20009f\(%rip\) # 2001d8 <.*> ++ +[a-f0-9]+: 48 83 3d 8f 00 20 00 00 cmpq \$0x0,0x20008f\(%rip\) # 2001d0 <.*> ++ +[a-f0-9]+: 48 3b 0d 88 00 20 00 cmp 0x200088\(%rip\),%rcx # 2001d0 <.*> ++ +[a-f0-9]+: 48 3b 0d 89 00 20 00 cmp 0x200089\(%rip\),%rcx # 2001d8 <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/pr20253-1l.d b/ld/testsuite/ld-x86-64/pr20253-1l.d +index 0276558..83a61db 100644 +--- a/ld/testsuite/ld-x86-64/pr20253-1l.d ++++ b/ld/testsuite/ld-x86-64/pr20253-1l.d +@@ -16,10 +16,10 @@ Disassembly of section .text: + +[a-f0-9]+: c3 retq + + 0+15a <_start>: +- +[a-f0-9]+: ff 15 98 00 20 00 callq \*0x200098\(%rip\) # 2001f8 <_DYNAMIC\+0x70> +- +[a-f0-9]+: ff 25 9a 00 20 00 jmpq \*0x20009a\(%rip\) # 200200 <_DYNAMIC\+0x78> +- +[a-f0-9]+: 48 c7 05 8f 00 20 00 00 00 00 00 movq \$0x0,0x20008f\(%rip\) # 200200 <_DYNAMIC\+0x78> +- +[a-f0-9]+: 48 83 3d 7f 00 20 00 00 cmpq \$0x0,0x20007f\(%rip\) # 2001f8 <_DYNAMIC\+0x70> +- +[a-f0-9]+: 48 3b 0d 78 00 20 00 cmp 0x200078\(%rip\),%rcx # 2001f8 <_DYNAMIC\+0x70> +- +[a-f0-9]+: 48 3b 0d 79 00 20 00 cmp 0x200079\(%rip\),%rcx # 200200 <_DYNAMIC\+0x78> ++ +[a-f0-9]+: ff 15 98 00 20 00 callq \*0x200098\(%rip\) # 2001f8 <.*> ++ +[a-f0-9]+: ff 25 9a 00 20 00 jmpq \*0x20009a\(%rip\) # 200200 <.*> ++ +[a-f0-9]+: 48 c7 05 8f 00 20 00 00 00 00 00 movq \$0x0,0x20008f\(%rip\) # 200200 <.*> ++ +[a-f0-9]+: 48 83 3d 7f 00 20 00 00 cmpq \$0x0,0x20007f\(%rip\) # 2001f8 <.*> ++ +[a-f0-9]+: 48 3b 0d 78 00 20 00 cmp 0x200078\(%rip\),%rcx # 2001f8 <.*> ++ +[a-f0-9]+: 48 3b 0d 79 00 20 00 cmp 0x200079\(%rip\),%rcx # 200200 <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/protected3.d b/ld/testsuite/ld-x86-64/protected3.d +index d8f09da..0c60167 100644 +--- a/ld/testsuite/ld-x86-64/protected3.d ++++ b/ld/testsuite/ld-x86-64/protected3.d +@@ -8,7 +8,7 @@ + Disassembly of section .text: + + 0+[a-f0-9]+ <bar>: +-[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <.*> + [ ]*[a-f0-9]+: 8b 00 mov \(%rax\),%eax + [ ]*[a-f0-9]+: c3 retq * + #pass +diff --git a/ld/testsuite/ld-x86-64/tlsbin.dd b/ld/testsuite/ld-x86-64/tlsbin.dd +index c89e7ee..6bc7ca2 100644 +--- a/ld/testsuite/ld-x86-64/tlsbin.dd ++++ b/ld/testsuite/ld-x86-64/tlsbin.dd +@@ -24,7 +24,7 @@ Disassembly of section .text: + # GD -> IE because variable is not defined in executable + +[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +[0-9a-f]+: 00 00 * +- +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x158> ++ +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG1 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -34,7 +34,7 @@ Disassembly of section .text: + # the variable is referenced through IE too + +[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +[0-9a-f]+: 00 00 * +- +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x148> ++ +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG2 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -102,7 +102,7 @@ Disassembly of section .text: + +[0-9a-f]+: 00 00 * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 4c 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r9 +# [0-9a-f]+ <_DYNAMIC\+0x148> ++ +[0-9a-f]+: 4c 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r9 +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG2 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -143,7 +143,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + # Direct access through %fs + # IE against global var +- +[0-9a-f]+: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x140> ++ +[0-9a-f]+: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG5 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -183,7 +183,7 @@ Disassembly of section .text: + +[0-9a-f]+: 00 00 * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 4c 03 1d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r11 +# [0-9a-f]+ <_DYNAMIC\+0x150> ++ +[0-9a-f]+: 4c 03 1d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r11 +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG6 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +diff --git a/ld/testsuite/ld-x86-64/tlsbin2.dd b/ld/testsuite/ld-x86-64/tlsbin2.dd +index a73fcef..0010d38 100644 +--- a/ld/testsuite/ld-x86-64/tlsbin2.dd ++++ b/ld/testsuite/ld-x86-64/tlsbin2.dd +@@ -24,7 +24,7 @@ Disassembly of section .text: + # GD -> IE because variable is not defined in executable + +[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +[0-9a-f]+: 00 00 * +- +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG1 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -34,7 +34,7 @@ Disassembly of section .text: + # the variable is referenced through IE too + +[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +[0-9a-f]+: 00 00 * +- +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x108> ++ +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG2 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -102,7 +102,7 @@ Disassembly of section .text: + +[0-9a-f]+: 00 00 * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 4c 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r9 +# [0-9a-f]+ <_DYNAMIC\+0x108> ++ +[0-9a-f]+: 4c 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r9 +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG2 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -143,7 +143,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + # Direct access through %fs + # IE against global var +- +[0-9a-f]+: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x100> ++ +[0-9a-f]+: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG5 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -183,7 +183,7 @@ Disassembly of section .text: + +[0-9a-f]+: 00 00 * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 4c 03 1d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r11 +# [0-9a-f]+ <_DYNAMIC\+0x118> ++ +[0-9a-f]+: 4c 03 1d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r11 +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG6 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +diff --git a/ld/testsuite/ld-x86-64/tlsbindesc.dd b/ld/testsuite/ld-x86-64/tlsbindesc.dd +index f77ebf2..50dc6d1 100644 +--- a/ld/testsuite/ld-x86-64/tlsbindesc.dd ++++ b/ld/testsuite/ld-x86-64/tlsbindesc.dd +@@ -22,7 +22,7 @@ Disassembly of section .text: + +[0-9a-f]+: 55[ ]+push %rbp + +[0-9a-f]+: 48 89 e5[ ]+mov %rsp,%rbp + # GD -> IE because variable is not defined in executable +- +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x118> ++ +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG1 + +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax + +[0-9a-f]+: 90[ ]+nop * +@@ -31,7 +31,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + # GD -> IE because variable is not defined in executable where + # the variable is referenced through IE too +- +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x108> ++ +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG2 + +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax + +[0-9a-f]+: 90[ ]+nop * +@@ -93,7 +93,7 @@ Disassembly of section .text: + +[0-9a-f]+: 00 00 * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 4c 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r9 +# [0-9a-f]+ <_DYNAMIC\+0x108> ++ +[0-9a-f]+: 4c 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r9 +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG2 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -134,7 +134,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + # Direct access through %fs + # IE against global var +- +[0-9a-f]+: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x100> ++ +[0-9a-f]+: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG5 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -174,7 +174,7 @@ Disassembly of section .text: + +[0-9a-f]+: 00 00 * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 4c 03 1d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r11 +# [0-9a-f]+ <_DYNAMIC\+0x110> ++ +[0-9a-f]+: 4c 03 1d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r11 +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG6 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +diff --git a/ld/testsuite/ld-x86-64/tlsdesc-nacl.pd b/ld/testsuite/ld-x86-64/tlsdesc-nacl.pd +index eff90a8..f744f0e 100644 +--- a/ld/testsuite/ld-x86-64/tlsdesc-nacl.pd ++++ b/ld/testsuite/ld-x86-64/tlsdesc-nacl.pd +@@ -25,7 +25,7 @@ Disassembly of section .plt: + +[0-9a-f]+: 00 * + +[0-9a-f]+: 66 90 xchg %ax,%ax + +[0-9a-f]+: ff 35 .. .. .. .. pushq 0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x8> +- +[0-9a-f]+: 4c 8b 1d .. .. .. .. mov 0x[0-9a-f]+\(%rip\),%r11 +# [0-9a-f]+ <_DYNAMIC\+0x190> ++ +[0-9a-f]+: 4c 8b 1d .. .. .. .. mov 0x[0-9a-f]+\(%rip\),%r11 +# [0-9a-f]+ <.*> + +[0-9a-f]+: 41 83 e3 e0 and \$0xffffffe0,%r11d + +[0-9a-f]+: 4d 01 fb add %r15,%r11 + +[0-9a-f]+: 41 ff e3 jmpq \*%r11 +diff --git a/ld/testsuite/ld-x86-64/tlsdesc.dd b/ld/testsuite/ld-x86-64/tlsdesc.dd +index a6f22b6..c9b1cf8 100644 +--- a/ld/testsuite/ld-x86-64/tlsdesc.dd ++++ b/ld/testsuite/ld-x86-64/tlsdesc.dd +@@ -17,7 +17,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + # GD +- +[0-9a-f]+: 48 8d 05 ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x48> ++ +[0-9a-f]+: 48 8d 05 ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TLSDESC sg1 + +[0-9a-f]+: ff 10[ ]+callq \*\(%rax\) + +[0-9a-f]+: 90[ ]+nop * +@@ -25,7 +25,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + # GD -> IE because variable is referenced through IE too +- +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x180> ++ +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sg2 + +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax + +[0-9a-f]+: 90[ ]+nop * +@@ -41,7 +41,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + # GD -> IE against local variable referenced through IE too +- +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x150> ++ +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x24 + +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax + +[0-9a-f]+: 90[ ]+nop * +@@ -57,7 +57,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + # GD -> IE against hidden and local variable referenced through IE too +- +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x188> ++ +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x44 + +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax + +[0-9a-f]+: 90[ ]+nop * +@@ -73,7 +73,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + # GD -> IE against hidden but not local variable referenced through IE too +- +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x160> ++ +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x64 + +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax + +[0-9a-f]+: 90[ ]+nop * +@@ -115,7 +115,7 @@ Disassembly of section .text: + +[0-9a-f]+: 00 00 * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x180> ++ +[0-9a-f]+: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sg2 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -126,7 +126,7 @@ Disassembly of section .text: + +[0-9a-f]+: 00 00 * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 4c 03 35 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r14 +# [0-9a-f]+ <_DYNAMIC\+0x150> ++ +[0-9a-f]+: 4c 03 35 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r14 +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x24 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -137,7 +137,7 @@ Disassembly of section .text: + +[0-9a-f]+: 00 00 * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x188> ++ +[0-9a-f]+: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x44 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -148,7 +148,7 @@ Disassembly of section .text: + +[0-9a-f]+: 00 00 * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x160> ++ +[0-9a-f]+: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x64 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -156,7 +156,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + # Direct access through %fs + # IE against global var +- +[0-9a-f]+: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x168> ++ +[0-9a-f]+: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sg5 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -166,7 +166,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + # IE against local var +- +[0-9a-f]+: 4c 8b 15 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%r10 +# [0-9a-f]+ <_DYNAMIC\+0x158> ++ +[0-9a-f]+: 4c 8b 15 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%r10 +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x30 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -176,7 +176,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + # IE against hidden and local var +- +[0-9a-f]+: 48 8b 15 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rdx +# [0-9a-f]+ <_DYNAMIC\+0x170> ++ +[0-9a-f]+: 48 8b 15 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rdx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x50 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -186,7 +186,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + # IE against hidden but not local var +- +[0-9a-f]+: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x178> ++ +[0-9a-f]+: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x70 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +diff --git a/ld/testsuite/ld-x86-64/tlsdesc.pd b/ld/testsuite/ld-x86-64/tlsdesc.pd +index c24403c..0fa36f3 100644 +--- a/ld/testsuite/ld-x86-64/tlsdesc.pd ++++ b/ld/testsuite/ld-x86-64/tlsdesc.pd +@@ -14,6 +14,6 @@ Disassembly of section .plt: + [0-9a-f]+: ff 25 .. .. 20 00 jmpq \*.*\(%rip\) # 201360 <_GLOBAL_OFFSET_TABLE_\+0x10> + [0-9a-f]+: 0f 1f 40 00 nopl 0x0\(%rax\) + [0-9a-f]+: ff 35 .. .. 20 00 pushq .*\(%rip\) # 201358 <_GLOBAL_OFFSET_TABLE_\+0x8> +- [0-9a-f]+: ff 25 .. .. 20 00 jmpq \*.*\(%rip\) # 201348 <_DYNAMIC\+0x190> ++ [0-9a-f]+: ff 25 .. .. 20 00 jmpq \*.*\(%rip\) # 201348 <.*> + [0-9a-f]+: 0f 1f 40 00 nopl 0x0\(%rax\) + +diff --git a/ld/testsuite/ld-x86-64/tlsgd10.dd b/ld/testsuite/ld-x86-64/tlsgd10.dd +index 448015e..6c3ca5c 100644 +--- a/ld/testsuite/ld-x86-64/tlsgd10.dd ++++ b/ld/testsuite/ld-x86-64/tlsgd10.dd +@@ -15,7 +15,7 @@ Disassembly of section .text: + [ ]*[a-f0-9]+: 4c 8d 3d eb ff ff ff lea -0x15\(%rip\),%r15 # [0-9a-f]+ <_start> + [ ]*[a-f0-9]+: 4d 01 df add %r11,%r15 + [ ]*[a-f0-9]+: 64 48 8b 04 25 00 00 00 00 mov %fs:0x0,%rax +-[ ]*[a-f0-9]+: 48 03 05 ([0-9a-f]{2} ){4} add 0x[0-9a-f]+\(%rip\),%rax # [0-9a-f]+ <_DYNAMIC\+0x140> ++[ ]*[a-f0-9]+: 48 03 05 ([0-9a-f]{2} ){4} add 0x[0-9a-f]+\(%rip\),%rax # [0-9a-f]+ <.*> + [ ]*[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\) + [ ]*[a-f0-9]+: 41 5f pop %r15 + [ ]*[a-f0-9]+: 41 5f pop %r15 +diff --git a/ld/testsuite/ld-x86-64/tlsgd5.dd b/ld/testsuite/ld-x86-64/tlsgd5.dd +index 54cf357..c2e2621 100644 +--- a/ld/testsuite/ld-x86-64/tlsgd5.dd ++++ b/ld/testsuite/ld-x86-64/tlsgd5.dd +@@ -10,5 +10,5 @@ Disassembly of section .text: + + [a-f0-9]+ <_start>: + [ ]*[a-f0-9]+: 64 48 8b 04 25 00 00 00 00 mov %fs:0x0,%rax +-[ ]*[a-f0-9]+: 48 03 05 ([0-9a-f]{2} ){4} * add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 03 05 ([0-9a-f]{2} ){4} * add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + #pass +diff --git a/ld/testsuite/ld-x86-64/tlsgd6.dd b/ld/testsuite/ld-x86-64/tlsgd6.dd +index 2cbfda6..08e3b99 100644 +--- a/ld/testsuite/ld-x86-64/tlsgd6.dd ++++ b/ld/testsuite/ld-x86-64/tlsgd6.dd +@@ -10,5 +10,5 @@ Disassembly of section .text: + + [a-f0-9]+ <_start>: + [ ]*[a-f0-9]+: 64 8b 04 25 00 00 00 00 mov %fs:0x0,%eax +-[ ]*[a-f0-9]+: 48 03 05 ([0-9a-f]{2} ){4} * add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[a-f0-9]+> ++[ ]*[a-f0-9]+: 48 03 05 ([0-9a-f]{2} ){4} * add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <foo> + #pass +diff --git a/ld/testsuite/ld-x86-64/tlsgd8.dd b/ld/testsuite/ld-x86-64/tlsgd8.dd +index 1055052..2bb1132 100644 +--- a/ld/testsuite/ld-x86-64/tlsgd8.dd ++++ b/ld/testsuite/ld-x86-64/tlsgd8.dd +@@ -15,7 +15,7 @@ Disassembly of section .text: + [ ]*[a-f0-9]+: 48 8d 1d ed ff ff ff lea -0x13\(%rip\),%rbx # [0-9a-f]+ <_start> + [ ]*[a-f0-9]+: 4c 01 db add %r11,%rbx + [ ]*[a-f0-9]+: 64 48 8b 04 25 00 00 00 00 mov %fs:0x0,%rax +-[ ]*[a-f0-9]+: 48 03 05 ([0-9a-f]{2} ){4} add 0x[0-9a-f]+\(%rip\),%rax # [0-9a-f]+ <_DYNAMIC\+0x140> ++[ ]*[a-f0-9]+: 48 03 05 ([0-9a-f]{2} ){4} add 0x[0-9a-f]+\(%rip\),%rax # [0-9a-f]+ <foo> + [ ]*[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\) + [ ]*[a-f0-9]+: 5b pop %rbx + [ ]*[a-f0-9]+: 5b pop %rbx +diff --git a/ld/testsuite/ld-x86-64/tlsgdesc.dd b/ld/testsuite/ld-x86-64/tlsgdesc.dd +index a983a75..d0a274b 100644 +--- a/ld/testsuite/ld-x86-64/tlsgdesc.dd ++++ b/ld/testsuite/ld-x86-64/tlsgdesc.dd +@@ -20,7 +20,7 @@ Disassembly of section .text: + +[0-9a-f]+: 00 00 * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x150> ++ +[0-9a-f]+: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG3 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -31,14 +31,14 @@ Disassembly of section .text: + +[0-9a-f]+: 00 00 * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x170> ++ +[0-9a-f]+: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG4 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + # GD, gd first +- +[0-9a-f]+: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x180> ++ +[0-9a-f]+: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + +[0-9a-f]+: [0-9a-f]{2} * + # -> R_X86_64_DTPMOD64 sG1 + +[0-9a-f]+: 66 66 48 e8 ([0-9a-f]{2} ){3}[ ]+data16 data16 rex.W callq [0-9a-f]+ <__tls_get_addr@plt> +@@ -48,7 +48,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 48 8d 05 ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x30> ++ +[0-9a-f]+: 48 8d 05 ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TLSDESC sG1 + +[0-9a-f]+: ff 10[ ]+callq \*\(%rax\) + +[0-9a-f]+: 90[ ]+nop * +@@ -56,14 +56,14 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + # GD, desc first +- +[0-9a-f]+: 48 8d 05 ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x20> ++ +[0-9a-f]+: 48 8d 05 ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TLSDESC sG2 + +[0-9a-f]+: ff 10[ ]+callq \*\(%rax\) + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x160> ++ +[0-9a-f]+: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + +[0-9a-f]+: [0-9a-f]{2} * + # -> R_X86_64_DTPMOD64 sG2 + +[0-9a-f]+: 66 66 48 e8 ([0-9a-f]{2} ){3}[ ]+data16 data16 rex.W callq [0-9a-f]+ <__tls_get_addr@plt> +@@ -76,13 +76,13 @@ Disassembly of section .text: + # GD -> IE, gd first, after IE use + +[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +[0-9a-f]+: 00 00 * +- +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x150> ++ +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG3 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x150> ++ +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG3 + +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax + +[0-9a-f]+: 90[ ]+nop * +@@ -90,7 +90,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + # GD -> IE, desc first, after IE use +- +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x170> ++ +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG4 + +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax + +[0-9a-f]+: 90[ ]+nop * +@@ -99,7 +99,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +[0-9a-f]+: 00 00 * +- +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x170> ++ +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG4 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -108,13 +108,13 @@ Disassembly of section .text: + # GD -> IE, gd first, before IE use + +[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +[0-9a-f]+: 00 00 * +- +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x158> ++ +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG5 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x158> ++ +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG5 + +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax + +[0-9a-f]+: 90[ ]+nop * +@@ -122,7 +122,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * + # GD -> IE, desc first, before IE use +- +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x178> ++ +[0-9a-f]+: 48 8b 05 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG6 + +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax + +[0-9a-f]+: 90[ ]+nop * +@@ -131,7 +131,7 @@ Disassembly of section .text: + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +[0-9a-f]+: 00 00 * +- +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x178> ++ +[0-9a-f]+: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG6 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -142,7 +142,7 @@ Disassembly of section .text: + +[0-9a-f]+: 00 00 * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x158> ++ +[0-9a-f]+: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG5 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +@@ -153,7 +153,7 @@ Disassembly of section .text: + +[0-9a-f]+: 00 00 * + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +- +[0-9a-f]+: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x178> ++ +[0-9a-f]+: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sG6 + +[0-9a-f]+: 90[ ]+nop * + +[0-9a-f]+: 90[ ]+nop * +diff --git a/ld/testsuite/ld-x86-64/tlspic.dd b/ld/testsuite/ld-x86-64/tlspic.dd +index bf3ba69..88026c1 100644 +--- a/ld/testsuite/ld-x86-64/tlspic.dd ++++ b/ld/testsuite/ld-x86-64/tlspic.dd +@@ -17,7 +17,7 @@ Disassembly of section .text: + +1006: 90[ ]+nop * + +1007: 90[ ]+nop * + # GD +- +1008: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x180> ++ +1008: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + +100f: [0-9a-f ]+ + # -> R_X86_64_DTPMOD64 sg1 + +1010: 66 66 48 e8 [0-9a-f ]+data16 data16 rex.W callq [0-9a-f]+ <.*> +@@ -30,14 +30,14 @@ Disassembly of section .text: + # GD -> IE because variable is referenced through IE too + +101c: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +1023: 00 00 * +- +1025: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x1a0> ++ +1025: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sg2 + +102c: 90[ ]+nop * + +102d: 90[ ]+nop * + +102e: 90[ ]+nop * + +102f: 90[ ]+nop * + # GD against local variable +- +1030: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x130> ++ +1030: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + +1037: [0-9a-f ]+ + # -> R_X86_64_DTPMOD64 [0 0x2000000000000000] + +1038: 66 66 48 e8 [0-9a-f ]+data16 data16 rex.W callq [0-9a-f]+ <.*> +@@ -50,14 +50,14 @@ Disassembly of section .text: + # GD -> IE against local variable referenced through IE too + +1044: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +104b: 00 00 * +- +104d: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x140> ++ +104d: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x24 + +1054: 90[ ]+nop * + +1055: 90[ ]+nop * + +1056: 90[ ]+nop * + +1057: 90[ ]+nop * + # GD against hidden and local variable +- +1058: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x1a8> ++ +1058: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + +105f: [0-9a-f ]+ + # -> R_X86_64_DTPMOD64 [0 0x4000000000000000] + +1060: 66 66 48 e8 [0-9a-f ]+data16 data16 rex.W callq [0-9a-f]+ <.*> +@@ -70,14 +70,14 @@ Disassembly of section .text: + # GD -> IE against hidden and local variable referenced through IE too + +106c: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +1073: 00 00 * +- +1075: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x1b8> ++ +1075: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x44 + +107c: 90[ ]+nop * + +107d: 90[ ]+nop * + +107e: 90[ ]+nop * + +107f: 90[ ]+nop * + # GD against hidden but not local variable +- +1080: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x160> ++ +1080: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + +1087: [0-9a-f ]+ + # -> R_X86_64_DTPMOD64 [0 0x6000000000000000] + +1088: 66 66 48 e8 [0-9a-f ]+data16 data16 rex.W callq [0-9a-f]+ <.*> +@@ -90,14 +90,14 @@ Disassembly of section .text: + # GD -> IE against hidden but not local variable referenced through IE too + +1094: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +109b: 00 00 * +- +109d: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x170> ++ +109d: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x64 + +10a4: 90[ ]+nop * + +10a5: 90[ ]+nop * + +10a6: 90[ ]+nop * + +10a7: 90[ ]+nop * + # LD +- +10a8: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x150> ++ +10a8: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x000000000000000] + +10af: e8 [0-9a-f ]+callq [0-9a-f]+ <.*> + # -> R_X86_64_JUMP_SLOT __tls_get_addr +@@ -112,7 +112,7 @@ Disassembly of section .text: + +10c8: 90[ ]+nop * + +10c9: 90[ ]+nop * + # LD against hidden and local variables +- +10ca: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x150> ++ +10ca: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x000000000000000] + +10d1: e8 [0-9a-f ]+callq [0-9a-f]+ <.*> + # -> R_X86_64_JUMP_SLOT __tls_get_addr +@@ -127,7 +127,7 @@ Disassembly of section .text: + +10ea: 90[ ]+nop * + +10eb: 90[ ]+nop * + # LD against hidden but not local variables +- +10ec: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x150> ++ +10ec: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x000000000000000] + +10f3: e8 [0-9a-f ]+callq [0-9a-f]+ <.*> + # -> R_X86_64_JUMP_SLOT __tls_get_addr +@@ -144,7 +144,7 @@ Disassembly of section .text: + +1113: 00 00 * + +1115: 90[ ]+nop * + +1116: 90[ ]+nop * +- +1117: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x1a0> ++ +1117: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sg2 + +111e: 90[ ]+nop * + +111f: 90[ ]+nop * +@@ -155,7 +155,7 @@ Disassembly of section .text: + +1129: 00 00 * + +112b: 90[ ]+nop * + +112c: 90[ ]+nop * +- +112d: 4c 03 35 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r14 +# [0-9a-f]+ <_DYNAMIC\+0x140> ++ +112d: 4c 03 35 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r14 +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x24 + +1134: 90[ ]+nop * + +1135: 90[ ]+nop * +@@ -166,7 +166,7 @@ Disassembly of section .text: + +113f: 00 00 * + +1141: 90[ ]+nop * + +1142: 90[ ]+nop * +- +1143: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x1b8> ++ +1143: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x44 + +114a: 90[ ]+nop * + +114b: 90[ ]+nop * +@@ -177,7 +177,7 @@ Disassembly of section .text: + +1155: 00 00 * + +1157: 90[ ]+nop * + +1158: 90[ ]+nop * +- +1159: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x170> ++ +1159: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x64 + +1160: 90[ ]+nop * + +1161: 90[ ]+nop * +@@ -185,7 +185,7 @@ Disassembly of section .text: + +1163: 90[ ]+nop * + # Direct access through %fs + # IE against global var +- +1164: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x178> ++ +1164: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sg5 + +116b: 90[ ]+nop * + +116c: 90[ ]+nop * +@@ -195,7 +195,7 @@ Disassembly of section .text: + +1173: 90[ ]+nop * + +1174: 90[ ]+nop * + # IE against local var +- +1175: 4c 8b 15 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%r10 +# [0-9a-f]+ <_DYNAMIC\+0x148> ++ +1175: 4c 8b 15 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%r10 +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x30 + +117c: 90[ ]+nop * + +117d: 90[ ]+nop * +@@ -205,7 +205,7 @@ Disassembly of section .text: + +1184: 90[ ]+nop * + +1185: 90[ ]+nop * + # IE against hidden and local var +- +1186: 48 8b 15 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rdx +# [0-9a-f]+ <_DYNAMIC\+0x190> ++ +1186: 48 8b 15 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rdx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x50 + +118d: 90[ ]+nop * + +118e: 90[ ]+nop * +@@ -215,7 +215,7 @@ Disassembly of section .text: + +1195: 90[ ]+nop * + +1196: 90[ ]+nop * + # IE against hidden but not local var +- +1197: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x198> ++ +1197: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x70 + +119e: 90[ ]+nop * + +119f: 90[ ]+nop * +@@ -237,7 +237,7 @@ Disassembly of section .text: + # -mcmodel=large sequences + # + # -mcmodel=large GD +- +11c2: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x180> ++ +11c2: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 sg1 + +11c9: 48 b8 ([0-9a-f]{2} ){5}[ ]+movabs \$0x[0-9a-f]+,%rax + # -> R_X86_64_JUMP_SLOT __tls_get_addr +@@ -252,7 +252,7 @@ Disassembly of section .text: + # -> R_X86_64_TPOFF64 sg2 + +11dc: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +11e3: 00 00 +- +11e5: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x1a0> ++ +11e5: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sg2 + +11ec: 66 0f 1f 44 00 00[ ]+nopw 0x0\(%rax,%rax,1\) + +11f2: 90[ ]+nop * +@@ -260,7 +260,7 @@ Disassembly of section .text: + +11f4: 90[ ]+nop * + +11f5: 90[ ]+nop * + # -mcmodel=large GD against local variable +- +11f6: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x130> ++ +11f6: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x2000000000000000] + +11fd: 48 b8 ([0-9a-f]{2} ){5}[ ]+movabs \$0x[0-9a-f]+,%rax + # -> R_X86_64_JUMP_SLOT __tls_get_addr +@@ -274,7 +274,7 @@ Disassembly of section .text: + # -mcmodel=large GD -> IE against local variable referenced through IE too + +1210: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +1217: 00 00 +- +1219: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x140> ++ +1219: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x24 + +1220: 66 0f 1f 44 00 00[ ]+nopw 0x0\(%rax,%rax,1\) + +1226: 90[ ]+nop * +@@ -282,7 +282,7 @@ Disassembly of section .text: + +1228: 90[ ]+nop * + +1229: 90[ ]+nop * + # -mcmodel=large GD against hidden and local variable +- +122a: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x1a8> ++ +122a: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x4000000000000000] + +1231: 48 b8 ([0-9a-f]{2} ){5}[ ]+movabs \$0x[0-9a-f]+,%rax + # -> R_X86_64_JUMP_SLOT __tls_get_addr +@@ -296,7 +296,7 @@ Disassembly of section .text: + # -mcmodel=large GD -> IE against hidden and local variable referenced through IE too + +1244: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +124b: 00 00 +- +124d: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x1b8> ++ +124d: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x44 + +1254: 66 0f 1f 44 00 00[ ]+nopw 0x0\(%rax,%rax,1\) + +125a: 90[ ]+nop * +@@ -304,7 +304,7 @@ Disassembly of section .text: + +125c: 90[ ]+nop * + +125d: 90[ ]+nop * + # -mcmodel=large GD against hidden but not local variable +- +125e: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x160> ++ +125e: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x6000000000000000] + +1265: 48 b8 ([0-9a-f]{2} ){5}[ ]+movabs \$0x[0-9a-f]+,%rax + # -> R_X86_64_JUMP_SLOT __tls_get_addr +@@ -318,7 +318,7 @@ Disassembly of section .text: + # -mcmodel=large GD -> IE against hidden but not local variable referenced through IE too + +1278: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +127f: 00 00 +- +1281: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x170> ++ +1281: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x64 + +1288: 66 0f 1f 44 00 00[ ]+nopw 0x0\(%rax,%rax,1\) + +128e: 90[ ]+nop * +@@ -326,7 +326,7 @@ Disassembly of section .text: + +1290: 90[ ]+nop * + +1291: 90[ ]+nop * + # -mcmodel=large LD +- +1292: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x150> ++ +1292: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x000000000000000] + +1299: 48 b8 ([0-9a-f]{2} ){5}[ ]+movabs \$0x[0-9a-f]+,%rax + # -> R_X86_64_JUMP_SLOT __tls_get_addr +@@ -344,7 +344,7 @@ Disassembly of section .text: + +12bc: 90[ ]+nop * + +12bd: 90[ ]+nop * + # -mcmodel=large LD against hidden and local variables +- +12be: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x150> ++ +12be: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x000000000000000] + +12c5: 48 b8 ([0-9a-f]{2} ){5}[ ]+movabs \$0x[0-9a-f]+,%rax + # -> R_X86_64_JUMP_SLOT __tls_get_addr +@@ -362,7 +362,7 @@ Disassembly of section .text: + +12e8: 90[ ]+nop * + +12e9: 90[ ]+nop * + # -mcmodel=large LD against hidden but not local variables +- +12ea: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x150> ++ +12ea: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x000000000000000] + +12f1: 48 b8 ([0-9a-f]{2} ){5}[ ]+movabs \$0x[0-9a-f]+,%rax + # -> R_X86_64_JUMP_SLOT __tls_get_addr +diff --git a/ld/testsuite/ld-x86-64/tlspic2.dd b/ld/testsuite/ld-x86-64/tlspic2.dd +index 18358f1..596fcb4 100644 +--- a/ld/testsuite/ld-x86-64/tlspic2.dd ++++ b/ld/testsuite/ld-x86-64/tlspic2.dd +@@ -17,10 +17,10 @@ Disassembly of section .text: + +1006: 90[ ]+nop * + +1007: 90[ ]+nop * + # GD +- +1008: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1008: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + +100f: [0-9a-f ]+ + # -> R_X86_64_DTPMOD64 sg1 +- +1010: 66 48 ff [0-9a-f ]+data16 rex\.W callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1010: 66 48 ff [0-9a-f ]+data16 rex\.W callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + # -> R_X86_64_GLOB_DAT __tls_get_addr + +1017: [0-9a-f ]+ + +1018: 90[ ]+nop * +@@ -30,17 +30,17 @@ Disassembly of section .text: + # GD -> IE because variable is referenced through IE too + +101c: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +1023: 00 00 * +- +1025: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1025: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sg2 + +102c: 90[ ]+nop * + +102d: 90[ ]+nop * + +102e: 90[ ]+nop * + +102f: 90[ ]+nop * + # GD against local variable +- +1030: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1030: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + +1037: [0-9a-f ]+ + # -> R_X86_64_DTPMOD64 [0 0x2000000000000000] +- +1038: 66 48 ff [0-9a-f ]+data16 rex\.W callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1038: 66 48 ff [0-9a-f ]+data16 rex\.W callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + # -> R_X86_64_GLOB_DAT __tls_get_addr + +103f: [0-9a-f ]+ + +1040: 90[ ]+nop * +@@ -50,17 +50,17 @@ Disassembly of section .text: + # GD -> IE against local variable referenced through IE too + +1044: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +104b: 00 00 * +- +104d: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +104d: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x24 + +1054: 90[ ]+nop * + +1055: 90[ ]+nop * + +1056: 90[ ]+nop * + +1057: 90[ ]+nop * + # GD against hidden and local variable +- +1058: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1058: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + +105f: [0-9a-f ]+ + # -> R_X86_64_DTPMOD64 [0 0x4000000000000000] +- +1060: 66 48 ff [0-9a-f ]+data16 rex\.W callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1060: 66 48 ff [0-9a-f ]+data16 rex\.W callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + # -> R_X86_64_GLOB_DAT __tls_get_addr + +1067: [0-9a-f ]+ + +1068: 90[ ]+nop * +@@ -70,17 +70,17 @@ Disassembly of section .text: + # GD -> IE against hidden and local variable referenced through IE too + +106c: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +1073: 00 00 * +- +1075: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1075: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x44 + +107c: 90[ ]+nop * + +107d: 90[ ]+nop * + +107e: 90[ ]+nop * + +107f: 90[ ]+nop * + # GD against hidden but not local variable +- +1080: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1080: 66 48 8d 3d ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + +1087: [0-9a-f ]+ + # -> R_X86_64_DTPMOD64 [0 0x6000000000000000] +- +1088: 66 48 ff [0-9a-f ]+data16 rex\.W callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1088: 66 48 ff [0-9a-f ]+data16 rex\.W callq \*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + # -> R_X86_64_GLOB_DAT __tls_get_addr + +108f: [0-9a-f ]+ + +1090: 90[ ]+nop * +@@ -90,16 +90,16 @@ Disassembly of section .text: + # GD -> IE against hidden but not local variable referenced through IE too + +1094: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +109b: 00 00 * +- +109d: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +109d: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x64 + +10a4: 90[ ]+nop * + +10a5: 90[ ]+nop * + +10a6: 90[ ]+nop * + +10a7: 90[ ]+nop * + # LD +- +10a8: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +10a8: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x000000000000000] +- +10af: ff [0-9a-f ]+callq[ ]+\*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +10af: ff [0-9a-f ]+callq[ ]+\*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + # -> R_X86_64_GLOB_DAT __tls_get_addr + +10b5: 90[ ]+nop * + +10b6: 48 8d 90 20 00 00 00[ ]+lea 0x20\(%rax\),%rdx +@@ -111,9 +111,9 @@ Disassembly of section .text: + +10c8: 90[ ]+nop * + +10c9: 90[ ]+nop * + # LD against hidden and local variables +- +10ca: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +10ca: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x000000000000000] +- +10d1: ff [0-9a-f ]+callq[ ]+\*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +10d1: ff [0-9a-f ]+callq[ ]+\*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + # -> R_X86_64_GLOB_DAT __tls_get_addr + +10d7: 90[ ]+nop * + +10d8: 48 8d 90 40 00 00 00[ ]+lea 0x40\(%rax\),%rdx +@@ -125,9 +125,9 @@ Disassembly of section .text: + +10ea: 90[ ]+nop * + +10eb: 90[ ]+nop * + # LD against hidden but not local variables +- +10ec: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +10ec: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x000000000000000] +- +10f3: ff [0-9a-f ]+callq[ ]+\*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +10f3: ff [0-9a-f ]+callq[ ]+\*0x[0-9a-f]+\(%rip\) +# [0-9a-f]+ <.*> + # -> R_X86_64_GLOB_DAT __tls_get_addr + +10f9: 90[ ]+nop * + +10fa: 4c 8d a0 60 00 00 00[ ]+lea 0x60\(%rax\),%r12 +@@ -141,7 +141,7 @@ Disassembly of section .text: + +1113: 00 00 * + +1115: 90[ ]+nop * + +1116: 90[ ]+nop * +- +1117: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1117: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sg2 + +111e: 90[ ]+nop * + +111f: 90[ ]+nop * +@@ -152,7 +152,7 @@ Disassembly of section .text: + +1129: 00 00 * + +112b: 90[ ]+nop * + +112c: 90[ ]+nop * +- +112d: 4c 03 35 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r14 +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +112d: 4c 03 35 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%r14 +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x24 + +1134: 90[ ]+nop * + +1135: 90[ ]+nop * +@@ -163,7 +163,7 @@ Disassembly of section .text: + +113f: 00 00 * + +1141: 90[ ]+nop * + +1142: 90[ ]+nop * +- +1143: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1143: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x44 + +114a: 90[ ]+nop * + +114b: 90[ ]+nop * +@@ -174,7 +174,7 @@ Disassembly of section .text: + +1155: 00 00 * + +1157: 90[ ]+nop * + +1158: 90[ ]+nop * +- +1159: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1159: 48 03 0d ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x64 + +1160: 90[ ]+nop * + +1161: 90[ ]+nop * +@@ -182,7 +182,7 @@ Disassembly of section .text: + +1163: 90[ ]+nop * + # Direct access through %fs + # IE against global var +- +1164: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1164: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sg5 + +116b: 90[ ]+nop * + +116c: 90[ ]+nop * +@@ -192,7 +192,7 @@ Disassembly of section .text: + +1173: 90[ ]+nop * + +1174: 90[ ]+nop * + # IE against local var +- +1175: 4c 8b 15 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%r10 +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1175: 4c 8b 15 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%r10 +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x30 + +117c: 90[ ]+nop * + +117d: 90[ ]+nop * +@@ -202,7 +202,7 @@ Disassembly of section .text: + +1184: 90[ ]+nop * + +1185: 90[ ]+nop * + # IE against hidden and local var +- +1186: 48 8b 15 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rdx +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1186: 48 8b 15 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rdx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x50 + +118d: 90[ ]+nop * + +118e: 90[ ]+nop * +@@ -212,7 +212,7 @@ Disassembly of section .text: + +1195: 90[ ]+nop * + +1196: 90[ ]+nop * + # IE against hidden but not local var +- +1197: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1197: 48 8b 0d ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x70 + +119e: 90[ ]+nop * + +119f: 90[ ]+nop * +@@ -232,7 +232,7 @@ Disassembly of section .text: + # -mcmodel=large sequences + # + # -mcmodel=large GD +- +11c2: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +11c2: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 sg1 + +11c9: 48 b8 ([0-9a-f]{2} ){5}[ ]+movabs \$0x[0-9a-f]+,%rax + # -> R_X86_64_GLOB_DAT __tls_get_addr +@@ -247,7 +247,7 @@ Disassembly of section .text: + # -> R_X86_64_TPOFF64 sg2 + +11dc: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +11e3: 00 00 +- +11e5: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +11e5: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 sg2 + +11ec: 66 0f 1f 44 00 00[ ]+nopw 0x0\(%rax,%rax,1\) + +11f2: 90[ ]+nop * +@@ -255,7 +255,7 @@ Disassembly of section .text: + +11f4: 90[ ]+nop * + +11f5: 90[ ]+nop * + # -mcmodel=large GD against local variable +- +11f6: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +11f6: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x2000000000000000] + +11fd: 48 b8 ([0-9a-f]{2} ){5}[ ]+movabs \$0x[0-9a-f]+,%rax + # -> R_X86_64_GLOB_DAT __tls_get_addr +@@ -269,7 +269,7 @@ Disassembly of section .text: + # -mcmodel=large GD -> IE against local variable referenced through IE too + +1210: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +1217: 00 00 +- +1219: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1219: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x24 + +1220: 66 0f 1f 44 00 00[ ]+nopw 0x0\(%rax,%rax,1\) + +1226: 90[ ]+nop * +@@ -277,7 +277,7 @@ Disassembly of section .text: + +1228: 90[ ]+nop * + +1229: 90[ ]+nop * + # -mcmodel=large GD against hidden and local variable +- +122a: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +122a: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x4000000000000000] + +1231: 48 b8 ([0-9a-f]{2} ){5}[ ]+movabs \$0x[0-9a-f]+,%rax + # -> R_X86_64_GLOB_DAT __tls_get_addr +@@ -291,7 +291,7 @@ Disassembly of section .text: + # -mcmodel=large GD -> IE against hidden and local variable referenced through IE too + +1244: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +124b: 00 00 +- +124d: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +124d: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x44 + +1254: 66 0f 1f 44 00 00[ ]+nopw 0x0\(%rax,%rax,1\) + +125a: 90[ ]+nop * +@@ -299,7 +299,7 @@ Disassembly of section .text: + +125c: 90[ ]+nop * + +125d: 90[ ]+nop * + # -mcmodel=large GD against hidden but not local variable +- +125e: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +125e: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x6000000000000000] + +1265: 48 b8 ([0-9a-f]{2} ){5}[ ]+movabs \$0x[0-9a-f]+,%rax + # -> R_X86_64_GLOB_DAT __tls_get_addr +@@ -313,7 +313,7 @@ Disassembly of section .text: + # -mcmodel=large GD -> IE against hidden but not local variable referenced through IE too + +1278: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax + +127f: 00 00 +- +1281: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1281: 48 03 05 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*> + # -> R_X86_64_TPOFF64 *ABS*+0x64 + +1288: 66 0f 1f 44 00 00[ ]+nopw 0x0\(%rax,%rax,1\) + +128e: 90[ ]+nop * +@@ -321,7 +321,7 @@ Disassembly of section .text: + +1290: 90[ ]+nop * + +1291: 90[ ]+nop * + # -mcmodel=large LD +- +1292: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +1292: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x000000000000000] + +1299: 48 b8 ([0-9a-f]{2} ){5}[ ]+movabs \$0x[0-9a-f]+,%rax + # -> R_X86_64_GLOB_DAT __tls_get_addr +@@ -339,7 +339,7 @@ Disassembly of section .text: + +12bc: 90[ ]+nop * + +12bd: 90[ ]+nop * + # -mcmodel=large LD against hidden and local variables +- +12be: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +12be: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x000000000000000] + +12c5: 48 b8 ([0-9a-f]{2} ){5}[ ]+movabs \$0x[0-9a-f]+,%rax + # -> R_X86_64_GLOB_DAT __tls_get_addr +@@ -357,7 +357,7 @@ Disassembly of section .text: + +12e8: 90[ ]+nop * + +12e9: 90[ ]+nop * + # -mcmodel=large LD against hidden but not local variables +- +12ea: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <_DYNAMIC\+0x[0-9a-f]+> ++ +12ea: 48 8d 3d ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*> + # -> R_X86_64_DTPMOD64 [0 0x000000000000000] + +12f1: 48 b8 ([0-9a-f]{2} ){5}[ ]+movabs \$0x[0-9a-f]+,%rax + # -> R_X86_64_GLOB_DAT __tls_get_addr +--- binutils-2.27.orig/ld/testsuite/ld-aarch64/farcall-bl-plt.d 2016-11-08 15:39:42.082556640 +0000 ++++ binutils-2.27/ld/testsuite/ld-aarch64/farcall-bl-plt.d 2016-11-08 16:56:38.410233674 +0000 +@@ -7,7 +7,7 @@ + + Disassembly of section .plt: + +-.* <foo@plt.*>: ++.* <.plt>: + .*: a9bf7bf0 stp x16, x30, \[sp,#-16\]! + .*: .* adrp x16, .* <__foo_veneer\+.*> + .*: .* ldr x17, \[x16,#.*\] +@@ -32,7 +32,7 @@ Disassembly of section .text: + .*: .* b .* <__foo_veneer\+.*> + + .* <__foo_veneer>: +-.*: .* adrp x16, 0 <foo@plt.*> ++.*: .* adrp x16, 0 <.*> + .*: .* add x16, x16, #.* + .*: d61f0200 br x16 + ... +--- binutils-2.27.orig/ld/testsuite/ld-aarch64/farcall-b-plt.d 2016-11-08 15:39:42.082556640 +0000 ++++ binutils-2.27/ld/testsuite/ld-aarch64/farcall-b-plt.d 2016-11-08 16:59:06.733057238 +0000 +@@ -7,7 +7,7 @@ + + Disassembly of section .plt: + +-.* <foo@plt.*>: ++.* <.plt>: + .*: a9bf7bf0 stp x16, x30, \[sp,#-16\]! + .*: .* adrp x16, .* <__foo_veneer\+.*> + .*: .* ldr x17, \[x16,#.*\] +@@ -32,7 +32,7 @@ Disassembly of section .text: + .*: .* b .* <__foo_veneer\+.*> + + .* <__foo_veneer>: +-.*: .* adrp x16, 0 <foo@plt.*> ++.*: .* adrp x16, 0 <.*> + .*: .* add x16, x16, #.* + .*: d61f0200 br x16 + ... +--- binutils-2.27.orig/ld/testsuite/ld-aarch64/tls-desc-ie.d 2016-11-08 15:39:42.091556688 +0000 ++++ binutils-2.27/ld/testsuite/ld-aarch64/tls-desc-ie.d 2016-11-08 17:00:23.757503387 +0000 +@@ -4,7 +4,7 @@ + #... + +10000: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_> + +10004: 91004000 add x0, x0, #0x10 +- +10008: 94000016 bl 10060 <v1\+0x10060> ++ +10008: 94000016 bl 10060 <.*> + +1000c: d503201f nop + +10010: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_> + +10014: f9400400 ldr x0, \[x0,#8\] diff --git a/SOURCES/binutils-2.27-power9.2.patch b/SOURCES/binutils-2.27-power9.2.patch new file mode 100644 index 0000000..5bc33c5 --- /dev/null +++ b/SOURCES/binutils-2.27-power9.2.patch @@ -0,0 +1,606 @@ +diff -rup binutils.orig/gas/config/tc-ppc.c binutils-2.27/gas/config/tc-ppc.c +--- binutils.orig/gas/config/tc-ppc.c 2017-01-17 10:34:39.694867665 +0000 ++++ binutils-2.27/gas/config/tc-ppc.c 2017-01-17 10:49:40.367225030 +0000 +@@ -2671,7 +2671,8 @@ md_assemble (char *str) + const struct powerpc_operand *operand; + + operand = &powerpc_operands[*opindex_ptr]; +- if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0) ++ if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0 ++ && !((operand->flags & PPC_OPERAND_OPTIONAL32) != 0 && ppc_obj64)) + { + unsigned int opcount; + unsigned int num_operands_expected; +@@ -2741,6 +2742,7 @@ md_assemble (char *str) + /* If this is an optional operand, and we are skipping it, just + insert a zero. */ + if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0 ++ && !((operand->flags & PPC_OPERAND_OPTIONAL32) != 0 && ppc_obj64) + && skip_optional) + { + long val = ppc_optional_operand_value (operand); +@@ -2942,7 +2944,7 @@ md_assemble (char *str) + } + break; + } +- /* Fall thru */ ++ /* Fallthru */ + + case BFD_RELOC_PPC64_ADDR16_HIGH: + ex.X_add_number = PPC_HI (ex.X_add_number); +@@ -2964,7 +2966,7 @@ md_assemble (char *str) + } + break; + } +- /* Fall thru */ ++ /* Fallthru */ + + case BFD_RELOC_PPC64_ADDR16_HIGHA: + ex.X_add_number = PPC_HA (ex.X_add_number); +@@ -3087,14 +3089,14 @@ md_assemble (char *str) + { + int tmp_insn = insn & opcode->mask; + +- int use_d_reloc = (tmp_insn == E_OR2I_INSN ++ int use_a_reloc = (tmp_insn == E_OR2I_INSN + || tmp_insn == E_AND2I_DOT_INSN + || tmp_insn == E_OR2IS_INSN + || tmp_insn == E_LIS_INSN + || tmp_insn == E_AND2IS_DOT_INSN); + + +- int use_a_reloc = (tmp_insn == E_ADD2I_DOT_INSN ++ int use_d_reloc = (tmp_insn == E_ADD2I_DOT_INSN + || tmp_insn == E_ADD2IS_INSN + || tmp_insn == E_CMP16I_INSN + || tmp_insn == E_MULL2I_INSN +@@ -3377,13 +3379,17 @@ md_assemble (char *str) + however it'll remain clear for dual-mode instructions on + dual-mode and, more importantly, standard-mode processors. */ + if ((ppc_cpu & opcode->flags) == PPC_OPCODE_VLE) +- ppc_apuinfo_section_add (PPC_APUINFO_VLE, 1); ++ { ++ ppc_apuinfo_section_add (PPC_APUINFO_VLE, 1); ++ if (elf_section_data (now_seg) != NULL) ++ elf_section_data (now_seg)->this_hdr.sh_flags |= SHF_PPC_VLE; ++ } + } + #endif + + /* Write out the instruction. */ + /* Differentiate between two and four byte insns. */ +- if (ppc_mach () == bfd_mach_ppc_vle) ++ if ((ppc_cpu & PPC_OPCODE_VLE) != 0) + { + if (PPC_OP_SE_VLE (insn)) + insn_length = 2; +@@ -3400,7 +3406,7 @@ md_assemble (char *str) + f = frag_more (insn_length); + if (frag_now->has_code && frag_now->insn_addr != addr_mod) + { +- if (ppc_mach() == bfd_mach_ppc_vle) ++ if ((ppc_cpu & PPC_OPCODE_VLE) != 0) + as_bad (_("instruction address is not a multiple of 2")); + else + as_bad (_("instruction address is not a multiple of 4")); +@@ -6346,7 +6352,7 @@ ppc_frag_check (struct frag *fragP) + if (!fragP->has_code) + return; + +- if (ppc_mach() == bfd_mach_ppc_vle) ++ if ((ppc_cpu & PPC_OPCODE_VLE) != 0) + { + if (((fragP->fr_address + fragP->insn_addr) & 1) != 0) + as_bad (_("instruction address is not a multiple of 2")); +@@ -6367,7 +6373,7 @@ ppc_handle_align (struct frag *fragP) + valueT count = (fragP->fr_next->fr_address + - (fragP->fr_address + fragP->fr_fix)); + +- if (ppc_mach() == bfd_mach_ppc_vle && count != 0 && (count & 1) == 0) ++ if ((ppc_cpu & PPC_OPCODE_VLE) != 0 && count != 0 && (count & 1) == 0) + { + char *dest = fragP->fr_literal + fragP->fr_fix; + +@@ -6565,7 +6571,7 @@ md_apply_fix (fixS *fixP, valueT *valP, + } + break; + } +- /* Fall thru */ ++ /* Fallthru */ + + case BFD_RELOC_PPC_VLE_HI16A: + case BFD_RELOC_PPC_VLE_HI16D: +@@ -6588,7 +6594,7 @@ md_apply_fix (fixS *fixP, valueT *valP, + } + break; + } +- /* Fall thru */ ++ /* Fallthru */ + + case BFD_RELOC_PPC_VLE_HA16A: + case BFD_RELOC_PPC_VLE_HA16D: +@@ -6730,7 +6736,7 @@ md_apply_fix (fixS *fixP, valueT *valP, + case BFD_RELOC_PPC_VLE_SDAREL_HA16A: + case BFD_RELOC_PPC_VLE_SDAREL_HA16D: + gas_assert (fixP->fx_addsy != NULL); +- /* Fall thru */ ++ /* Fallthru */ + + case BFD_RELOC_PPC_TLS: + case BFD_RELOC_PPC_TLSGD: +@@ -6854,7 +6860,7 @@ md_apply_fix (fixS *fixP, valueT *valP, + && !S_IS_DEFINED (fixP->fx_addsy) + && !S_IS_WEAK (fixP->fx_addsy)) + S_SET_WEAK (fixP->fx_addsy); +- /* Fall thru */ ++ /* Fallthru */ + + case BFD_RELOC_VTABLE_ENTRY: + fixP->fx_done = 0; +diff -rup binutils.orig/gas/testsuite/gas/ppc/power9.d binutils-2.27/gas/testsuite/gas/ppc/power9.d +--- binutils.orig/gas/testsuite/gas/ppc/power9.d 2017-01-17 10:34:39.823866144 +0000 ++++ binutils-2.27/gas/testsuite/gas/ppc/power9.d 2017-01-17 10:55:45.214908333 +0000 +@@ -274,8 +274,8 @@ Disassembly of section \.text: + .*: (f3 89 ef 6f|6f ef 89 f3) xvxsigsp vs60,vs61 + .*: (7c 06 39 c0|c0 39 06 7c) cmpeqb cr0,r6,r7 + .*: (7f 86 39 c0|c0 39 86 7f) cmpeqb cr7,r6,r7 +-.*: (7c 08 49 80|80 49 08 7c) cmprb cr0,r8,r9 +-.*: (7f 88 49 80|80 49 88 7f) cmprb cr7,r8,r9 ++.*: (7c 08 49 80|80 49 08 7c) cmprb cr0,0,r8,r9 ++.*: (7f 88 49 80|80 49 88 7f) cmprb cr7,0,r8,r9 + .*: (7c 28 49 80|80 49 28 7c) cmprb cr0,1,r8,r9 + .*: (7f a8 49 80|80 49 a8 7f) cmprb cr7,1,r8,r9 + .*: (7d e0 01 00|00 01 e0 7d) setb r15,cr0 +diff -rup binutils.orig/gas/testsuite/gas/ppc/vle-reloc.d binutils-2.27/gas/testsuite/gas/ppc/vle-reloc.d +--- binutils.orig/gas/testsuite/gas/ppc/vle-reloc.d 2017-01-17 10:34:39.822866157 +0000 ++++ binutils-2.27/gas/testsuite/gas/ppc/vle-reloc.d 2017-01-17 10:53:43.744345513 +0000 +@@ -25,148 +25,148 @@ Disassembly of section \.text: + 14: R_PPC_VLE_REL15 sub5 + + 18: 70 20 c0 00 e_or2i r1,0 +- 18: R_PPC_VLE_LO16D low ++ 18: R_PPC_VLE_LO16A low + 1c: 70 40 c0 00 e_or2i r2,0 +- 1c: R_PPC_VLE_HI16D high ++ 1c: R_PPC_VLE_HI16A high + 20: 70 60 c0 00 e_or2i r3,0 +- 20: R_PPC_VLE_HA16D high_adjust ++ 20: R_PPC_VLE_HA16A high_adjust + 24: 70 80 c0 00 e_or2i r4,0 +- 24: R_PPC_VLE_SDAREL_LO16D low_sdarel ++ 24: R_PPC_VLE_SDAREL_LO16A low_sdarel + 28: 70 a0 c0 00 e_or2i r5,0 +- 28: R_PPC_VLE_SDAREL_HI16D high_sdarel ++ 28: R_PPC_VLE_SDAREL_HI16A high_sdarel + 2c: 70 40 c0 00 e_or2i r2,0 +- 2c: R_PPC_VLE_SDAREL_HA16D high_adjust_sdarel ++ 2c: R_PPC_VLE_SDAREL_HA16A high_adjust_sdarel + 30: 70 20 c8 00 e_and2i. r1,0 +- 30: R_PPC_VLE_LO16D low ++ 30: R_PPC_VLE_LO16A low + 34: 70 40 c8 00 e_and2i. r2,0 +- 34: R_PPC_VLE_HI16D high ++ 34: R_PPC_VLE_HI16A high + 38: 70 60 c8 00 e_and2i. r3,0 +- 38: R_PPC_VLE_HA16D high_adjust ++ 38: R_PPC_VLE_HA16A high_adjust + 3c: 70 80 c8 00 e_and2i. r4,0 +- 3c: R_PPC_VLE_SDAREL_LO16D low_sdarel ++ 3c: R_PPC_VLE_SDAREL_LO16A low_sdarel + 40: 70 a0 c8 00 e_and2i. r5,0 +- 40: R_PPC_VLE_SDAREL_HI16D high_sdarel ++ 40: R_PPC_VLE_SDAREL_HI16A high_sdarel + 44: 70 40 c8 00 e_and2i. r2,0 +- 44: R_PPC_VLE_SDAREL_HA16D high_adjust_sdarel ++ 44: R_PPC_VLE_SDAREL_HA16A high_adjust_sdarel + 48: 70 40 c8 00 e_and2i. r2,0 +- 48: R_PPC_VLE_SDAREL_HA16D high_adjust_sdarel ++ 48: R_PPC_VLE_SDAREL_HA16A high_adjust_sdarel + 4c: 70 20 d0 00 e_or2is r1,0 +- 4c: R_PPC_VLE_LO16D low ++ 4c: R_PPC_VLE_LO16A low + 50: 70 40 d0 00 e_or2is r2,0 +- 50: R_PPC_VLE_HI16D high ++ 50: R_PPC_VLE_HI16A high + 54: 70 60 d0 00 e_or2is r3,0 +- 54: R_PPC_VLE_HA16D high_adjust ++ 54: R_PPC_VLE_HA16A high_adjust + 58: 70 80 d0 00 e_or2is r4,0 +- 58: R_PPC_VLE_SDAREL_LO16D low_sdarel ++ 58: R_PPC_VLE_SDAREL_LO16A low_sdarel + 5c: 70 a0 d0 00 e_or2is r5,0 +- 5c: R_PPC_VLE_SDAREL_HI16D high_sdarel ++ 5c: R_PPC_VLE_SDAREL_HI16A high_sdarel + 60: 70 40 d0 00 e_or2is r2,0 +- 60: R_PPC_VLE_SDAREL_HA16D high_adjust_sdarel ++ 60: R_PPC_VLE_SDAREL_HA16A high_adjust_sdarel + 64: 70 20 e0 00 e_lis r1,0 +- 64: R_PPC_VLE_LO16D low ++ 64: R_PPC_VLE_LO16A low + 68: 70 40 e0 00 e_lis r2,0 +- 68: R_PPC_VLE_HI16D high ++ 68: R_PPC_VLE_HI16A high + 6c: 70 60 e0 00 e_lis r3,0 +- 6c: R_PPC_VLE_HA16D high_adjust ++ 6c: R_PPC_VLE_HA16A high_adjust + 70: 70 80 e0 00 e_lis r4,0 +- 70: R_PPC_VLE_SDAREL_LO16D low_sdarel ++ 70: R_PPC_VLE_SDAREL_LO16A low_sdarel + 74: 70 a0 e0 00 e_lis r5,0 +- 74: R_PPC_VLE_SDAREL_HI16D high_sdarel ++ 74: R_PPC_VLE_SDAREL_HI16A high_sdarel + 78: 70 40 e0 00 e_lis r2,0 +- 78: R_PPC_VLE_SDAREL_HA16D high_adjust_sdarel ++ 78: R_PPC_VLE_SDAREL_HA16A high_adjust_sdarel + 7c: 70 20 e8 00 e_and2is. r1,0 +- 7c: R_PPC_VLE_LO16D low ++ 7c: R_PPC_VLE_LO16A low + 80: 70 40 e8 00 e_and2is. r2,0 +- 80: R_PPC_VLE_HI16D high ++ 80: R_PPC_VLE_HI16A high + 84: 70 60 e8 00 e_and2is. r3,0 +- 84: R_PPC_VLE_HA16D high_adjust ++ 84: R_PPC_VLE_HA16A high_adjust + 88: 70 80 e8 00 e_and2is. r4,0 +- 88: R_PPC_VLE_SDAREL_LO16D low_sdarel ++ 88: R_PPC_VLE_SDAREL_LO16A low_sdarel + 8c: 70 a0 e8 00 e_and2is. r5,0 +- 8c: R_PPC_VLE_SDAREL_HI16D high_sdarel ++ 8c: R_PPC_VLE_SDAREL_HI16A high_sdarel + 90: 70 40 e8 00 e_and2is. r2,0 +- 90: R_PPC_VLE_SDAREL_HA16D high_adjust_sdarel ++ 90: R_PPC_VLE_SDAREL_HA16A high_adjust_sdarel + 94: 70 01 98 00 e_cmp16i r1,0 +- 94: R_PPC_VLE_LO16A low ++ 94: R_PPC_VLE_LO16D low + 98: 70 02 98 00 e_cmp16i r2,0 +- 98: R_PPC_VLE_HI16A high ++ 98: R_PPC_VLE_HI16D high + 9c: 70 03 98 00 e_cmp16i r3,0 +- 9c: R_PPC_VLE_HA16A high_adjust ++ 9c: R_PPC_VLE_HA16D high_adjust + a0: 70 04 98 00 e_cmp16i r4,0 +- a0: R_PPC_VLE_SDAREL_LO16A low_sdarel ++ a0: R_PPC_VLE_SDAREL_LO16D low_sdarel + a4: 70 05 98 00 e_cmp16i r5,0 +- a4: R_PPC_VLE_SDAREL_HI16A high_sdarel ++ a4: R_PPC_VLE_SDAREL_HI16D high_sdarel + a8: 70 02 98 00 e_cmp16i r2,0 +- a8: R_PPC_VLE_SDAREL_HA16A high_adjust_sdarel ++ a8: R_PPC_VLE_SDAREL_HA16D high_adjust_sdarel + ac: 70 01 a8 00 e_cmpl16i r1,0 +- ac: R_PPC_VLE_LO16A low ++ ac: R_PPC_VLE_LO16D low + b0: 70 02 a8 00 e_cmpl16i r2,0 +- b0: R_PPC_VLE_HI16A high ++ b0: R_PPC_VLE_HI16D high + b4: 70 03 a8 00 e_cmpl16i r3,0 +- b4: R_PPC_VLE_HA16A high_adjust ++ b4: R_PPC_VLE_HA16D high_adjust + b8: 70 04 a8 00 e_cmpl16i r4,0 +- b8: R_PPC_VLE_SDAREL_LO16A low_sdarel ++ b8: R_PPC_VLE_SDAREL_LO16D low_sdarel + bc: 70 05 a8 00 e_cmpl16i r5,0 +- bc: R_PPC_VLE_SDAREL_HI16A high_sdarel ++ bc: R_PPC_VLE_SDAREL_HI16D high_sdarel + c0: 70 02 a8 00 e_cmpl16i r2,0 +- c0: R_PPC_VLE_SDAREL_HA16A high_adjust_sdarel ++ c0: R_PPC_VLE_SDAREL_HA16D high_adjust_sdarel + c4: 70 01 b0 00 e_cmph16i r1,0 +- c4: R_PPC_VLE_LO16A low ++ c4: R_PPC_VLE_LO16D low + c8: 70 02 b0 00 e_cmph16i r2,0 +- c8: R_PPC_VLE_HI16A high ++ c8: R_PPC_VLE_HI16D high + cc: 70 03 b0 00 e_cmph16i r3,0 +- cc: R_PPC_VLE_HA16A high_adjust ++ cc: R_PPC_VLE_HA16D high_adjust + d0: 70 04 b0 00 e_cmph16i r4,0 +- d0: R_PPC_VLE_SDAREL_LO16A low_sdarel ++ d0: R_PPC_VLE_SDAREL_LO16D low_sdarel + d4: 70 05 b0 00 e_cmph16i r5,0 +- d4: R_PPC_VLE_SDAREL_HI16A high_sdarel ++ d4: R_PPC_VLE_SDAREL_HI16D high_sdarel + d8: 70 02 b0 00 e_cmph16i r2,0 +- d8: R_PPC_VLE_SDAREL_HA16A high_adjust_sdarel ++ d8: R_PPC_VLE_SDAREL_HA16D high_adjust_sdarel + dc: 70 01 b8 00 e_cmphl16i r1,0 +- dc: R_PPC_VLE_LO16A low ++ dc: R_PPC_VLE_LO16D low + e0: 70 02 b8 00 e_cmphl16i r2,0 +- e0: R_PPC_VLE_HI16A high ++ e0: R_PPC_VLE_HI16D high + e4: 70 03 b8 00 e_cmphl16i r3,0 +- e4: R_PPC_VLE_HA16A high_adjust ++ e4: R_PPC_VLE_HA16D high_adjust + e8: 70 04 b8 00 e_cmphl16i r4,0 +- e8: R_PPC_VLE_SDAREL_LO16A low_sdarel ++ e8: R_PPC_VLE_SDAREL_LO16D low_sdarel + ec: 70 05 b8 00 e_cmphl16i r5,0 +- ec: R_PPC_VLE_SDAREL_HI16A high_sdarel ++ ec: R_PPC_VLE_SDAREL_HI16D high_sdarel + f0: 70 02 b8 00 e_cmphl16i r2,0 +- f0: R_PPC_VLE_SDAREL_HA16A high_adjust_sdarel ++ f0: R_PPC_VLE_SDAREL_HA16D high_adjust_sdarel + f4: 70 01 88 00 e_add2i. r1,0 +- f4: R_PPC_VLE_LO16A low ++ f4: R_PPC_VLE_LO16D low + f8: 70 02 88 00 e_add2i. r2,0 +- f8: R_PPC_VLE_HI16A high ++ f8: R_PPC_VLE_HI16D high + fc: 70 03 88 00 e_add2i. r3,0 +- fc: R_PPC_VLE_HA16A high_adjust ++ fc: R_PPC_VLE_HA16D high_adjust + 100: 70 04 88 00 e_add2i. r4,0 +- 100: R_PPC_VLE_SDAREL_LO16A low_sdarel ++ 100: R_PPC_VLE_SDAREL_LO16D low_sdarel + 104: 70 05 88 00 e_add2i. r5,0 +- 104: R_PPC_VLE_SDAREL_HI16A high_sdarel ++ 104: R_PPC_VLE_SDAREL_HI16D high_sdarel + 108: 70 02 88 00 e_add2i. r2,0 +- 108: R_PPC_VLE_SDAREL_HA16A high_adjust_sdarel ++ 108: R_PPC_VLE_SDAREL_HA16D high_adjust_sdarel + 10c: 70 01 90 00 e_add2is r1,0 +- 10c: R_PPC_VLE_LO16A low ++ 10c: R_PPC_VLE_LO16D low + 110: 70 02 90 00 e_add2is r2,0 +- 110: R_PPC_VLE_HI16A high ++ 110: R_PPC_VLE_HI16D high + 114: 70 03 90 00 e_add2is r3,0 +- 114: R_PPC_VLE_HA16A high_adjust ++ 114: R_PPC_VLE_HA16D high_adjust + 118: 70 04 90 00 e_add2is r4,0 +- 118: R_PPC_VLE_SDAREL_LO16A low_sdarel ++ 118: R_PPC_VLE_SDAREL_LO16D low_sdarel + 11c: 70 05 90 00 e_add2is r5,0 +- 11c: R_PPC_VLE_SDAREL_HI16A high_sdarel ++ 11c: R_PPC_VLE_SDAREL_HI16D high_sdarel + 120: 70 02 90 00 e_add2is r2,0 +- 120: R_PPC_VLE_SDAREL_HA16A high_adjust_sdarel ++ 120: R_PPC_VLE_SDAREL_HA16D high_adjust_sdarel + 124: 70 01 a0 00 e_mull2i r1,0 +- 124: R_PPC_VLE_LO16A low ++ 124: R_PPC_VLE_LO16D low + 128: 70 02 a0 00 e_mull2i r2,0 +- 128: R_PPC_VLE_HI16A high ++ 128: R_PPC_VLE_HI16D high + 12c: 70 03 a0 00 e_mull2i r3,0 +- 12c: R_PPC_VLE_HA16A high_adjust ++ 12c: R_PPC_VLE_HA16D high_adjust + 130: 70 04 a0 00 e_mull2i r4,0 +- 130: R_PPC_VLE_SDAREL_LO16A low_sdarel ++ 130: R_PPC_VLE_SDAREL_LO16D low_sdarel + 134: 70 05 a0 00 e_mull2i r5,0 +- 134: R_PPC_VLE_SDAREL_HI16A high_sdarel ++ 134: R_PPC_VLE_SDAREL_HI16D high_sdarel + 138: 70 02 a0 00 e_mull2i r2,0 +- 138: R_PPC_VLE_SDAREL_HA16A high_adjust_sdarel ++ 138: R_PPC_VLE_SDAREL_HA16D high_adjust_sdarel +diff -rup binutils.orig/include/opcode/ppc.h binutils-2.27/include/opcode/ppc.h +--- binutils.orig/include/opcode/ppc.h 2017-01-17 10:34:39.864865661 +0000 ++++ binutils-2.27/include/opcode/ppc.h 2017-01-17 10:49:40.367225030 +0000 +@@ -407,6 +407,10 @@ extern const unsigned int num_powerpc_op + is omitted, then the value it should use for the operand is stored + in the SHIFT field of the immediatly following operand field. */ + #define PPC_OPERAND_OPTIONAL_VALUE (0x400000) ++ ++/* This flag is only used with PPC_OPERAND_OPTIONAL. The operand is ++ only optional when generating 32-bit code. */ ++#define PPC_OPERAND_OPTIONAL32 (0x800000) + + /* The POWER and PowerPC assemblers use a few macros. We keep them + with the operands table for simplicity. The macro table is an +@@ -444,6 +448,23 @@ ppc_optional_operand_value (const struct + return 0; + } + ++/* PowerPC VLE insns. */ ++/* Form I16L, uses 16A relocs. */ ++#define E_OR2I_INSN 0x7000C000 ++#define E_AND2I_DOT_INSN 0x7000C800 ++#define E_OR2IS_INSN 0x7000D000 ++#define E_LIS_INSN 0x7000E000 ++#define E_AND2IS_DOT_INSN 0x7000E800 ++ ++/* Form I16A, uses 16D relocs. */ ++#define E_ADD2I_DOT_INSN 0x70008800 ++#define E_ADD2IS_INSN 0x70009000 ++#define E_CMP16I_INSN 0x70009800 ++#define E_MULL2I_INSN 0x7000A000 ++#define E_CMPL16I_INSN 0x7000A800 ++#define E_CMPH16I_INSN 0x7000B000 ++#define E_CMPHL16I_INSN 0x7000B800 ++ + #ifdef __cplusplus + } + #endif +diff -rup binutils.orig/opcodes/ppc-dis.c binutils-2.27/opcodes/ppc-dis.c +--- binutils.orig/opcodes/ppc-dis.c 2017-01-17 10:34:40.064863304 +0000 ++++ binutils-2.27/opcodes/ppc-dis.c 2017-01-17 10:49:40.391224746 +0000 +@@ -236,7 +236,7 @@ get_powerpc_dialect (struct disassemble_ + + /* Disassemble according to the section headers flags for VLE-mode. */ + if (dialect & PPC_OPCODE_VLE +- && info->section->owner != NULL ++ && info->section != NULL && info->section->owner != NULL + && bfd_get_flavour (info->section->owner) == bfd_target_elf_flavour + && elf_object_id (info->section->owner) == PPC32_ELF_DATA + && (elf_section_flags (info->section) & SHF_PPC_VLE) != 0) +diff -rup binutils.orig/opcodes/ppc-opc.c binutils-2.27/opcodes/ppc-opc.c +--- binutils.orig/opcodes/ppc-opc.c 2017-01-17 10:34:40.064863304 +0000 ++++ binutils-2.27/opcodes/ppc-opc.c 2017-01-17 10:49:40.393224722 +0000 +@@ -62,10 +62,6 @@ static unsigned long insert_dxdn (unsign + static long extract_dxdn (unsigned long, ppc_cpu_t, int *); + static unsigned long insert_fxm (unsigned long, long, ppc_cpu_t, const char **); + static long extract_fxm (unsigned long, ppc_cpu_t, int *); +-static unsigned long insert_l0 (unsigned long, long, ppc_cpu_t, const char **); +-static long extract_l0 (unsigned long, ppc_cpu_t, int *); +-static unsigned long insert_l1 (unsigned long, long, ppc_cpu_t, const char **); +-static long extract_l1 (unsigned long, ppc_cpu_t, int *); + static unsigned long insert_li20 (unsigned long, long, ppc_cpu_t, const char **); + static long extract_li20 (unsigned long, ppc_cpu_t, int *); + static unsigned long insert_ls (unsigned long, long, ppc_cpu_t, const char **); +@@ -429,20 +425,24 @@ const struct powerpc_operand powerpc_ope + + /* The L field in a D or X form instruction. */ + #define L IMM20 + 1 ++ { 0x1, 21, NULL, NULL, 0 }, ++ ++ /* The optional L field in tlbie and tlbiel instructions. */ ++#define LOPT L + 1 + /* The R field in a HTM X form instruction. */ +-#define HTM_R L ++#define HTM_R LOPT + { 0x1, 21, NULL, NULL, PPC_OPERAND_OPTIONAL }, + +- /* The L field in an X form instruction which must be zero. */ +-#define L0 L + 1 +- { 0x1, 21, insert_l0, extract_l0, PPC_OPERAND_OPTIONAL }, +- +- /* The L field in an X form instruction which must be one. */ +-#define L1 L0 + 1 +- { 0x1, 21, insert_l1, extract_l1, 0 }, ++ /* The optional (for 32-bit) L field in cmp[l][i] instructions. */ ++#define L32OPT LOPT + 1 ++ { 0x1, 21, NULL, NULL, PPC_OPERAND_OPTIONAL | PPC_OPERAND_OPTIONAL32 }, ++ ++ /* The L field in dcbf instruction. */ ++#define L2OPT L32OPT + 1 ++ { 0x3, 21, NULL, NULL, PPC_OPERAND_OPTIONAL }, + + /* The LEV field in a POWER SVC form instruction. */ +-#define SVC_LEV L1 + 1 ++#define SVC_LEV L2OPT + 1 + { 0x7f, 5, NULL, NULL, 0 }, + + /* The LEV field in an SC form instruction. */ +@@ -688,6 +688,8 @@ const struct powerpc_operand powerpc_ope + #define STRM SR + 1 + /* The T field in a tlbilx form instruction. */ + #define T STRM ++ /* The L field in wclr instructions. */ ++#define L2 STRM + { 0x3, 21, NULL, NULL, 0 }, + + /* The ESYNC field in an X (sync) form instruction. */ +@@ -1483,58 +1485,6 @@ extract_fxm (unsigned long insn, + return mask; + } + +-/* The L field in an X form instruction which must have the value zero. */ +- +-static unsigned long +-insert_l0 (unsigned long insn, +- long value, +- ppc_cpu_t dialect ATTRIBUTE_UNUSED, +- const char **errmsg) +-{ +- if (value != 0) +- *errmsg = _("invalid operand constant"); +- return insn & ~(0x1 << 21); +-} +- +-static long +-extract_l0 (unsigned long insn, +- ppc_cpu_t dialect ATTRIBUTE_UNUSED, +- int *invalid) +-{ +- long value; +- +- value = (insn >> 21) & 0x1; +- if (value != 0) +- *invalid = 1; +- return value; +-} +- +-/* The L field in an X form instruction which must have the value one. */ +- +-static unsigned long +-insert_l1 (unsigned long insn, +- long value, +- ppc_cpu_t dialect ATTRIBUTE_UNUSED, +- const char **errmsg) +-{ +- if (value != 1) +- *errmsg = _("invalid operand constant"); +- return insn | (0x1 << 21); +-} +- +-static long +-extract_l1 (unsigned long insn, +- ppc_cpu_t dialect ATTRIBUTE_UNUSED, +- int *invalid) +-{ +- long value; +- +- value = (insn >> 21) & 0x1; +- if (value != 1) +- *invalid = 1; +- return value; +-} +- + static unsigned long + insert_li20 (unsigned long insn, + long value, +@@ -3890,12 +3840,12 @@ const struct powerpc_opcode powerpc_opco + + {"cmplwi", OPL(10,0), OPL_MASK, PPCCOM, PPCVLE, {OBF, RA, UISIGNOPT}}, + {"cmpldi", OPL(10,1), OPL_MASK, PPC64, PPCVLE, {OBF, RA, UISIGNOPT}}, +-{"cmpli", OP(10), OP_MASK, PPC, PPCVLE, {BF, L, RA, UISIGNOPT}}, ++{"cmpli", OP(10), OP_MASK, PPC, PPCVLE, {BF, L32OPT, RA, UISIGNOPT}}, + {"cmpli", OP(10), OP_MASK, PWRCOM, PPC|PPCVLE, {BF, RA, UISIGNOPT}}, + + {"cmpwi", OPL(11,0), OPL_MASK, PPCCOM, PPCVLE, {OBF, RA, SI}}, + {"cmpdi", OPL(11,1), OPL_MASK, PPC64, PPCVLE, {OBF, RA, SI}}, +-{"cmpi", OP(11), OP_MASK, PPC, PPCVLE, {BF, L, RA, SI}}, ++{"cmpi", OP(11), OP_MASK, PPC, PPCVLE, {BF, L32OPT, RA, SI}}, + {"cmpi", OP(11), OP_MASK, PWRCOM, PPC|PPCVLE, {BF, RA, SI}}, + + {"addic", OP(12), OP_MASK, PPCCOM, PPCVLE, {RT, RA, SI}}, +@@ -4713,7 +4663,7 @@ const struct powerpc_opcode powerpc_opco + + {"cmpw", XOPL(31,0,0), XCMPL_MASK, PPCCOM, 0, {OBF, RA, RB}}, + {"cmpd", XOPL(31,0,1), XCMPL_MASK, PPC64, 0, {OBF, RA, RB}}, +-{"cmp", X(31,0), XCMP_MASK, PPC, 0, {BF, L, RA, RB}}, ++{"cmp", X(31,0), XCMP_MASK, PPC, 0, {BF, L32OPT, RA, RB}}, + {"cmp", X(31,0), XCMPL_MASK, PWRCOM, PPC, {BF, RA, RB}}, + + {"twlgt", XTO(31,4,TOLGT), XTO_MASK, PPCCOM, 0, {RA, RB}}, +@@ -4821,7 +4771,7 @@ const struct powerpc_opcode powerpc_opco + + {"cmplw", XOPL(31,32,0), XCMPL_MASK, PPCCOM, 0, {OBF, RA, RB}}, + {"cmpld", XOPL(31,32,1), XCMPL_MASK, PPC64, 0, {OBF, RA, RB}}, +-{"cmpl", X(31,32), XCMP_MASK, PPC, 0, {BF, L, RA, RB}}, ++{"cmpl", X(31,32), XCMP_MASK, PPC, 0, {BF, L32OPT, RA, RB}}, + {"cmpl", X(31,32), XCMPL_MASK, PWRCOM, PPC, {BF, RA, RB}}, + + {"lvsr", X(31,38), X_MASK, PPCVEC, 0, {VD, RA0, RB}}, +@@ -4907,7 +4857,7 @@ const struct powerpc_opcode powerpc_opco + {"ldarx", X(31,84), XEH_MASK, PPC64, 0, {RT, RA0, RB, EH}}, + + {"dcbfl", XOPL(31,86,1), XRT_MASK, POWER5, PPC476, {RA0, RB}}, +-{"dcbf", X(31,86), XLRT_MASK, PPC, 0, {RA0, RB, L}}, ++{"dcbf", X(31,86), XLRT_MASK, PPC, 0, {RA0, RB, L2OPT}}, + + {"lbzx", X(31,87), X_MASK, COM, 0, {RT, RA0, RB}}, + +@@ -5149,7 +5099,7 @@ const struct powerpc_opcode powerpc_opco + {"ehpriv", X(31,270), 0xffffffff, E500MC|PPCA2, 0, {0}}, + + {"tlbiel", X(31,274), X_MASK|1<<20,POWER9, PPC476, {RB, RSO, RIC, PRS, X_R}}, +-{"tlbiel", X(31,274), XRTLRA_MASK, POWER4, POWER9|PPC476, {RB, L}}, ++{"tlbiel", X(31,274), XRTLRA_MASK, POWER4, POWER9|PPC476, {RB, LOPT}}, + + {"mfapidi", X(31,275), X_MASK, BOOKE, E500|TITAN, {RT, RA}}, + +@@ -6233,8 +6183,8 @@ const struct powerpc_opcode powerpc_opco + {"stvfrxl", X(31,933), X_MASK, PPCVEC2, 0, {VS, RA0, RB}}, + + {"wclrone", XOPL2(31,934,2),XRT_MASK, PPCA2, 0, {RA0, RB}}, +-{"wclrall", X(31,934), XRARB_MASK, PPCA2, 0, {L}}, +-{"wclr", X(31,934), X_MASK, PPCA2, 0, {L, RA0, RB}}, ++{"wclrall", X(31,934), XRARB_MASK, PPCA2, 0, {L2}}, ++{"wclr", X(31,934), X_MASK, PPCA2, 0, {L2, RA0, RB}}, + + {"stvrxl", X(31,935), X_MASK, CELL, 0, {VS, RA0, RB}}, + diff --git a/SOURCES/binutils-2.27-power9.3.patch b/SOURCES/binutils-2.27-power9.3.patch new file mode 100644 index 0000000..8c6ad4f --- /dev/null +++ b/SOURCES/binutils-2.27-power9.3.patch @@ -0,0 +1,87 @@ +diff -rup binutils.orig/gas/testsuite/gas/ppc/power9.d binutils-2.27/gas/testsuite/gas/ppc/power9.d +--- binutils.orig/gas/testsuite/gas/ppc/power9.d 2017-09-13 09:46:21.695333611 +0100 ++++ binutils-2.27/gas/testsuite/gas/ppc/power9.d 2017-09-13 09:53:46.594277167 +0100 +@@ -312,8 +312,9 @@ Disassembly of section \.text: + .*: (f1 31 9d 6f|6f 9d 31 f1) xscvdphp vs41,vs51 + .*: (f1 58 a7 6f|6f a7 58 f1) xvcvhpsp vs42,vs52 + .*: (f1 79 af 6f|6f af 79 f1) xvcvsphp vs43,vs53 +-.*: (4c 60 00 04|04 00 60 4c) addpcis r3,0 +-.*: (4c 60 00 04|04 00 60 4c) addpcis r3,0 ++.*: (4c 60 00 04|04 00 60 4c) lnia r3 ++.*: (4c 60 00 04|04 00 60 4c) lnia r3 ++.*: (4c 60 00 04|04 00 60 4c) lnia r3 + .*: (4c 80 00 05|05 00 80 4c) addpcis r4,1 + .*: (4c 80 00 05|05 00 80 4c) addpcis r4,1 + .*: (4c bf ff c4|c4 ff bf 4c) addpcis r5,-2 +@@ -391,4 +392,7 @@ Disassembly of section \.text: + .*: (ff d7 04 8e|8e 04 d7 ff) mffscrni f30,0 + .*: (ff d7 1c 8e|8e 1c d7 ff) mffscrni f30,3 + .*: (ff f8 04 8e|8e 04 f8 ff) mffsl f31 ++.*: (01 00 00 44|44 00 00 01) scv 0 ++.*: (e1 0f 00 44|44 00 0f e1) scv 127 ++.*: (a4 00 00 4c|4c 00 00 a4) rfscv + #pass +diff -rup binutils.orig/gas/testsuite/gas/ppc/power9.s binutils-2.27/gas/testsuite/gas/ppc/power9.s +--- binutils.orig/gas/testsuite/gas/ppc/power9.s 2017-09-13 09:46:21.694333623 +0100 ++++ binutils-2.27/gas/testsuite/gas/ppc/power9.s 2017-09-13 09:54:01.747104949 +0100 +@@ -303,6 +303,7 @@ power9: + xscvdphp 41,51 + xvcvhpsp 42,52 + xvcvsphp 43,53 ++ lnia 3 + addpcis 3,0 + subpcis 3,0 + addpcis 4,1 +@@ -382,3 +383,6 @@ power9: + mffscrni 30,0 + mffscrni 30,3 + mffsl 31 ++ scv 0 ++ scv 127 ++ rfscv +diff -rup binutils.orig/opcodes/ppc-opc.c binutils-2.27/opcodes/ppc-opc.c +--- binutils.orig/opcodes/ppc-opc.c 2017-09-13 09:46:21.874331577 +0100 ++++ binutils-2.27/opcodes/ppc-opc.c 2017-09-13 09:55:18.745229836 +0100 +@@ -441,7 +441,7 @@ const struct powerpc_operand powerpc_ope + #define L2OPT L32OPT + 1 + { 0x3, 21, NULL, NULL, PPC_OPERAND_OPTIONAL }, + +- /* The LEV field in a POWER SVC form instruction. */ ++ /* The LEV field in a POWER SVC / POWER9 SCV form instruction. */ + #define SVC_LEV L2OPT + 1 + { 0x7f, 5, NULL, NULL, 0 }, + +@@ -2447,6 +2447,9 @@ extract_vleil (unsigned long insn, + #define DX(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1)) + #define DX_MASK DX (0x3f, 0x1f) + ++/* An DX form instruction with the D bits specified. */ ++#define NODX_MASK (DX_MASK | 0x1fffc1) ++ + /* An EVSEL form instruction. */ + #define EVSEL(op, xop) (OP (op) | (((unsigned long)(xop)) & 0xff) << 3) + #define EVSEL_MASK EVSEL(0x3f, 0xff) +@@ -4145,6 +4148,7 @@ const struct powerpc_opcode powerpc_opco + {"bcla", B(16,1,1), B_MASK, COM, PPCVLE, {BO, BI, BDA}}, + + {"svc", SC(17,0,0), SC_MASK, POWER, PPCVLE, {SVC_LEV, FL1, FL2}}, ++{"scv", SC(17,0,1), SC_MASK, POWER9, PPCVLE, {SVC_LEV}}, + {"svcl", SC(17,0,1), SC_MASK, POWER, PPCVLE, {SVC_LEV, FL1, FL2}}, + {"sc", SC(17,1,0), SC_MASK, PPC, PPCVLE, {LEV}}, + {"svca", SC(17,1,0), SC_MASK, PWRCOM, PPCVLE, {SV}}, +@@ -4157,6 +4161,7 @@ const struct powerpc_opcode powerpc_opco + + {"mcrf", XL(19,0), XLBB_MASK|(3<<21)|(3<<16), COM, PPCVLE, {BF, BFA}}, + ++{"lnia", DX(19,2), NODX_MASK, POWER9, PPCVLE, {RT}}, + {"addpcis", DX(19,2), DX_MASK, POWER9, PPCVLE, {RT, DXD}}, + {"subpcis", DX(19,2), DX_MASK, POWER9, PPCVLE, {RT, NDXD}}, + +@@ -4394,6 +4399,7 @@ const struct powerpc_opcode powerpc_opco + {"rfi", XL(19,50), 0xffffffff, COM, PPCVLE, {0}}, + {"rfci", XL(19,51), 0xffffffff, PPC403|BOOKE|PPCE300|PPCA2|PPC476, PPCVLE, {0}}, + ++{"rfscv", XL(19,82), 0xffffffff, POWER9, PPCVLE, {0}}, + {"rfsvc", XL(19,82), 0xffffffff, POWER, PPCVLE, {0}}, + + {"rfgi", XL(19,102), 0xffffffff, E500MC|PPCA2, PPCVLE, {0}}, diff --git a/SOURCES/binutils-2.27-power9.patch b/SOURCES/binutils-2.27-power9.patch new file mode 100644 index 0000000..e632e80 --- /dev/null +++ b/SOURCES/binutils-2.27-power9.patch @@ -0,0 +1,452 @@ +diff -rup binutils-2.27.orig/bfd/elf32-ppc.c binutils-2.27/bfd/elf32-ppc.c +--- binutils-2.27.orig/bfd/elf32-ppc.c 2016-09-28 08:49:28.280430815 +0100 ++++ binutils-2.27/bfd/elf32-ppc.c 2016-09-28 08:53:48.133843615 +0100 +@@ -3946,7 +3946,8 @@ is_branch_reloc (enum elf_ppc_reloc_type + || r_type == R_PPC_ADDR24 + || r_type == R_PPC_ADDR14 + || r_type == R_PPC_ADDR14_BRTAKEN +- || r_type == R_PPC_ADDR14_BRNTAKEN); ++ || r_type == R_PPC_ADDR14_BRNTAKEN ++ || r_type == R_PPC_VLE_REL24); + } + + static void +@@ -4897,6 +4898,7 @@ ppc_elf_vle_split16 (bfd *output_bfd, bf + insn = bfd_get_32 (output_bfd, loc); + top5 = value & 0xf800; + top5 = top5 << (split16_format == split16a_type ? 9 : 5); ++ insn &= (split16_format == split16a_type ? ~0x1f007ff : ~0x1f07ff); + insn |= top5; + insn |= value & 0x7ff; + bfd_put_32 (output_bfd, insn, loc); +diff -rup binutils-2.27.orig/gas/testsuite/gas/ppc/power9.d binutils-2.27/gas/testsuite/gas/ppc/power9.d +--- binutils-2.27.orig/gas/testsuite/gas/ppc/power9.d 2016-09-28 08:49:28.783433550 +0100 ++++ binutils-2.27/gas/testsuite/gas/ppc/power9.d 2016-09-28 08:53:47.423839755 +0100 +@@ -280,14 +280,6 @@ Disassembly of section \.text: + .*: (7f a8 49 80|80 49 a8 7f) cmprb cr7,1,r8,r9 + .*: (7d e0 01 00|00 01 e0 7d) setb r15,cr0 + .*: (7d fc 01 00|00 01 fc 7d) setb r15,cr7 +-.*: (7e 00 01 01|01 01 00 7e) setbool r16,lt +-.*: (7e 01 01 01|01 01 01 7e) setbool r16,gt +-.*: (7e 02 01 01|01 01 02 7e) setbool r16,eq +-.*: (7e 03 01 01|01 01 03 7e) setbool r16,so +-.*: (7e 1c 01 01|01 01 1c 7e) setbool r16,4\*cr7\+lt +-.*: (7e 1d 01 01|01 01 1d 7e) setbool r16,4\*cr7\+gt +-.*: (7e 1e 01 01|01 01 1e 7e) setbool r16,4\*cr7\+eq +-.*: (7e 1f 01 01|01 01 1f 7e) setbool r16,4\*cr7\+so + .*: (7f 40 52 1a|1a 52 40 7f) lxvl vs26,0,r10 + .*: (7f 14 52 1b|1b 52 14 7f) lxvl vs56,r20,r10 + .*: (7f 60 5b 1a|1a 5b 60 7f) stxvl vs27,0,r11 +@@ -331,6 +323,7 @@ Disassembly of section \.text: + .*: (4c e0 80 04|04 80 e0 4c) addpcis r7,-32768 + .*: (4c e0 80 04|04 80 e0 4c) addpcis r7,-32768 + .*: (7c 00 02 a4|a4 02 00 7c) slbsync ++.*: (7d 40 06 a4|a4 06 40 7d) slbiag r10 + .*: (7d 40 5b a4|a4 5b 40 7d) slbieg r10,r11 + .*: (7c 60 27 26|26 27 60 7c) slbmfee r3,r4 + .*: (7c 60 27 26|26 27 60 7c) slbmfee r3,r4 +@@ -344,14 +337,9 @@ Disassembly of section \.text: + .*: (7c 00 1a 24|24 1a 00 7c) tlbiel r3 + .*: (7c 00 1a 24|24 1a 00 7c) tlbiel r3 + .*: (7c 8f 1a 24|24 1a 8f 7c) tlbiel r3,r4,3,1,1 +-.*: (7c 0c 6e 0c|0c 6e 0c 7c) copy r12,r13 +-.*: (7c 2c 6e 0c|0c 6e 2c 7c) copy_first r12,r13 +-.*: (7c 2c 6e 0c|0c 6e 2c 7c) copy_first r12,r13 +-.*: (7c 0a 5f 0c|0c 5f 0a 7c) paste r10,r11 +-.*: (7c 0a 5f 0c|0c 5f 0a 7c) paste r10,r11 +-.*: (7c 2a 5f 0d|0d 5f 2a 7c) paste_last r10,r11 +-.*: (7c 2a 5f 0d|0d 5f 2a 7c) paste_last r10,r11 +-.*: (7c 00 06 8c|8c 06 00 7c) cp_abort ++.*: (7c 2c 6e 0c|0c 6e 2c 7c) copy r12,r13 ++.*: (7c 2a 5f 0d|0d 5f 2a 7c) paste\. r10,r11 ++.*: (7c 00 06 8c|8c 06 00 7c) cpabort + .*: (7c 00 04 ac|ac 04 00 7c) hwsync + .*: (7c 00 04 ac|ac 04 00 7c) hwsync + .*: (7c 00 04 ac|ac 04 00 7c) hwsync +@@ -359,8 +347,6 @@ Disassembly of section \.text: + .*: (7c 20 04 ac|ac 04 20 7c) lwsync + .*: (7c 40 04 ac|ac 04 40 7c) ptesync + .*: (7c 40 04 ac|ac 04 40 7c) ptesync +-.*: (7c 07 04 ac|ac 04 07 7c) sync 0,7 +-.*: (7c 28 04 ac|ac 04 28 7c) sync 1,8 + .*: (7e 80 04 cc|cc 04 80 7e) ldat r20,0,0 + .*: (7e 8a e4 cc|cc e4 8a 7e) ldat r20,r10,28 + .*: (7e a0 04 8c|8c 04 a0 7e) lwat r21,0,0 +@@ -373,8 +359,6 @@ Disassembly of section \.text: + .*: (7c 00 f6 e4|e4 f6 00 7c) rmieg r30 + .*: (7d 40 7a 6a|6a 7a 40 7d) ldmx r10,0,r15 + .*: (7d 43 7a 6a|6a 7a 43 7d) ldmx r10,r3,r15 +-.*: (7d 60 83 6a|6a 83 60 7d) lwzmx r11,0,r16 +-.*: (7d 63 83 6a|6a 83 63 7d) lwzmx r11,r3,r16 + .*: (4c 00 02 e4|e4 02 00 4c) stop + .*: (7c 00 00 3c|3c 00 00 7c) wait + .*: (7c 00 00 3c|3c 00 00 7c) wait +@@ -397,9 +381,6 @@ Disassembly of section \.text: + .*: (7d 6c 69 54|54 69 6c 7d) addex r11,r12,r13,0 + .*: (7d 6c 6b 54|54 6b 6c 7d) addex r11,r12,r13,1 + .*: (7d 6c 6d 54|54 6d 6c 7d) addex r11,r12,r13,2 +-.*: (7e b6 b9 55|55 b9 b6 7e) addex\. r21,r22,r23,0 +-.*: (7e b6 bb 55|55 bb b6 7e) addex\. r21,r22,r23,1 +-.*: (7e b6 bd 55|55 bd b6 7e) addex\. r21,r22,r23,2 + .*: (ff 20 04 8e|8e 04 20 ff) mffs f25 + .*: (ff 20 04 8f|8f 04 20 ff) mffs\. f25 + .*: (ff 41 04 8e|8e 04 41 ff) mffsce f26 +@@ -410,12 +391,4 @@ Disassembly of section \.text: + .*: (ff d7 04 8e|8e 04 d7 ff) mffscrni f30,0 + .*: (ff d7 1c 8e|8e 1c d7 ff) mffscrni f30,3 + .*: (ff f8 04 8e|8e 04 f8 ff) mffsl f31 +-.*: (7e 8a 01 76|76 01 8a 7e) brd r10,r20 +-.*: (7e ab 01 b6|b6 01 ab 7e) brh r11,r21 +-.*: (7e cc 01 36|36 01 cc 7e) brw r12,r22 +-.*: (11 6a 63 77|77 63 6a 11) nandxor r10,r11,r12,r13 +-.*: (12 b4 b5 f6|f6 b5 b4 12) xor3 r20,r21,r22,r23 +-.*: (11 6a 60 34|34 60 6a 11) rldixor r10,r11,0,r12 +-.*: (11 6a 66 f4|f4 66 6a 11) rldixor r10,r11,27,r12 +-.*: (11 6a 67 f5|f5 67 6a 11) rldixor r10,r11,63,r12 + #pass +diff -rup binutils-2.27.orig/gas/testsuite/gas/ppc/power9.s binutils-2.27/gas/testsuite/gas/ppc/power9.s +--- binutils-2.27.orig/gas/testsuite/gas/ppc/power9.s 2016-09-28 08:49:28.783433550 +0100 ++++ binutils-2.27/gas/testsuite/gas/ppc/power9.s 2016-09-28 08:53:47.424839761 +0100 +@@ -271,14 +271,6 @@ power9: + cmprb 7,1,8,9 + setb 15,0 + setb 15,7 +- setbool 16,0 +- setbool 16,1 +- setbool 16,2 +- setbool 16,3 +- setbool 16,28 +- setbool 16,29 +- setbool 16,30 +- setbool 16,31 + lxvl 26,0,10 + lxvl 56,20,10 + stxvl 27,0,11 +@@ -322,6 +314,7 @@ power9: + addpcis 7,-0x8000 + subpcis 7,0x8000 + slbsync ++ slbiag 10 + slbieg 10,11 + slbmfee 3,4 + slbmfee 3,4,0 +@@ -335,23 +328,16 @@ power9: + tlbiel 3 + tlbiel 3,0,0,0,0 + tlbiel 3,4,3,1,1 +- copy 12,13,0 +- copy_first 12,13 +- copy 12,13,1 +- paste 10,11,0 +- paste 10,11 +- paste. 10,11,1 +- paste_last 10,11 +- cp_abort ++ copy 12,13 ++ paste. 10,11 ++ cpabort + hwsync + sync +- sync 0,0x0 ++ sync 0 + lwsync +- sync 1,0x0 ++ sync 1 + ptesync +- sync 2,0x0 +- sync 0,0x7 +- sync 1,0x8 ++ sync 2 + ldat 20,0,0x0 + ldat 20,10,0x1c + lwat 21,0,0x0 +@@ -364,8 +350,6 @@ power9: + rmieg 30 + ldmx 10,0,15 + ldmx 10,3,15 +- lwzmx 11,0,16 +- lwzmx 11,3,16 + stop + wait + wait 0 +@@ -388,9 +372,6 @@ power9: + addex 11,12,13,0 + addex 11,12,13,1 + addex 11,12,13,2 +- addex. 21,22,23,0 +- addex. 21,22,23,1 +- addex. 21,22,23,2 + mffs 25 + mffs. 25 + mffsce 26 +@@ -401,11 +382,3 @@ power9: + mffscrni 30,0 + mffscrni 30,3 + mffsl 31 +- brd 10,20 +- brh 11,21 +- brw 12,22 +- nandxor 10,11,12,13 +- xor3 20,21,22,23 +- rldixor 10,11,0,12 +- rldixor 10,11,27,12 +- rldixor 10,11,63,12 +diff -rup binutils-2.27.orig/include/opcode/ppc.h binutils-2.27/include/opcode/ppc.h +--- binutils-2.27.orig/include/opcode/ppc.h 2016-09-28 08:49:28.845433887 +0100 ++++ binutils-2.27/include/opcode/ppc.h 2016-09-28 08:53:48.132843610 +0100 +@@ -214,6 +214,9 @@ extern const int vle_num_opcodes; + /* Opcode is supported by Vector-Scalar (VSX) Unit from ISA 2.08. */ + #define PPC_OPCODE_VSX3 0x40000000000ull + ++/* Opcode is supported by e200z4. */ ++#define PPC_OPCODE_E200Z4 0x80000000000ull ++ + /* A macro to extract the major opcode from an instruction. */ + #define PPC_OP(i) (((i) >> 26) & 0x3f) + +diff -rup binutils-2.27.orig/opcodes/ppc-dis.c binutils-2.27/opcodes/ppc-dis.c +--- binutils-2.27.orig/opcodes/ppc-dis.c 2016-09-28 08:49:29.236436013 +0100 ++++ binutils-2.27/opcodes/ppc-dis.c 2016-09-28 08:58:35.525406139 +0100 +@@ -105,6 +105,11 @@ struct ppc_mopt ppc_opts[] = { + 0 }, + { "com", PPC_OPCODE_COMMON, + 0 }, ++ { "e200z4", (PPC_OPCODE_PPC | PPC_OPCODE_BOOKE| PPC_OPCODE_SPE ++ | PPC_OPCODE_ISEL | PPC_OPCODE_EFS | PPC_OPCODE_BRLOCK ++ | PPC_OPCODE_PMR | PPC_OPCODE_CACHELCK | PPC_OPCODE_RFMCI ++ | PPC_OPCODE_E500 | PPC_OPCODE_E200Z4), ++ PPC_OPCODE_VLE }, + { "e300", PPC_OPCODE_PPC | PPC_OPCODE_E300, + 0 }, + { "e500", (PPC_OPCODE_PPC | PPC_OPCODE_BOOKE | PPC_OPCODE_SPE +diff -rup binutils-2.27.orig/opcodes/ppc-opc.c binutils-2.27/opcodes/ppc-opc.c +--- binutils-2.27.orig/opcodes/ppc-opc.c 2016-09-28 08:49:29.236436013 +0100 ++++ binutils-2.27/opcodes/ppc-opc.c 2016-09-28 08:58:16.374302016 +0100 +@@ -2374,6 +2374,12 @@ extract_vleil (unsigned long insn, + #define OPVUP(x,vup) (OP (x) | ((((unsigned long)(vup)) & 0xff) << 8)) + #define OPVUP_MASK OPVUP (0x3f, 0xff) + ++/* The main opcode combined with an update code and the RT fields specified in ++ D form instruction. Used for VLE volatile context save/restore ++ instructions. */ ++#define OPVUPRT(x,vup,rt) (OPVUP (x, vup) | ((((unsigned long)(rt)) & 0x1f) << 21)) ++#define OPVUPRT_MASK OPVUPRT (0x3f, 0xff, 0x1f) ++ + /* An A form instruction. */ + #define A(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1) | (((unsigned long)(rc)) & 1)) + #define A_MASK A (0x3f, 0x1f, 1) +@@ -3055,6 +3061,7 @@ extract_vleil (unsigned long insn, + #define E6500 PPC_OPCODE_E6500 + #define PPCVLE PPC_OPCODE_VLE + #define PPCHTM PPC_OPCODE_HTM ++#define E200Z4 PPC_OPCODE_E200Z4 + /* The list of embedded processors that use the embedded operand ordering + for the 3 operand dcbt and dcbtst instructions. */ + #define DCBT_EO (PPC_OPCODE_E500 | PPC_OPCODE_E500MC | PPC_OPCODE_476 \ +@@ -3161,7 +3168,6 @@ const struct powerpc_opcode powerpc_opco + {"machhwu.", XO (4, 12,0,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, + {"ps_muls1", A (4, 13,0), AFRB_MASK, PPCPS, 0, {FRT, FRA, FRC}}, + {"ps_muls1.", A (4, 13,1), AFRB_MASK, PPCPS, 0, {FRT, FRA, FRC}}, +-{"rldixor", VXASH(4,26), VXASH_MASK, POWER9, 0, {RA, RS, SH6, RB}}, + {"ps_madds0", A (4, 14,0), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, + {"ps_madds0.", A (4, 14,1), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, + {"ps_madds1", A (4, 15,0), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, +@@ -3203,8 +3209,6 @@ const struct powerpc_opcode powerpc_opco + {"ps_msub.", A (4, 28,1), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, + {"ps_madd", A (4, 29,0), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, + {"ps_madd.", A (4, 29,1), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, +-{"xor3", VXA(4, 54), VXA_MASK, POWER9, 0, {RA, RS, RB, RC}}, +-{"nandxor", VXA(4, 55), VXA_MASK, POWER9, 0, {RA, RS, RB, RC}}, + {"vpermr", VXA(4, 59), VXA_MASK, PPCVEC3, 0, {VD, VA, VB, VC}}, + {"ps_nmsub", A (4, 30,0), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, + {"vaddeuqm", VXA(4, 60), VXA_MASK, PPCVEC2, 0, {VD, VA, VB, VC}}, +@@ -4943,8 +4947,7 @@ const struct powerpc_opcode powerpc_opco + + {"dcbfep", XRT(31,127,0), XRT_MASK, E500MC|PPCA2, 0, {RA0, RB}}, + +-{"setb", VX(31,256), VXVB_MASK|(3<<16), POWER9, 0, {RT, BFA}}, +-{"setbool", VX(31,257), VXVB_MASK, POWER9, 0, {RT, BA}}, ++{"setb", X(31,128), XRB_MASK|(3<<16), POWER9, 0, {RT, BFA}}, + + {"wrtee", X(31,131), XRARB_MASK, PPC403|BOOKE|PPCA2|PPC476, 0, {RS}}, + +@@ -4994,8 +4997,6 @@ const struct powerpc_opcode powerpc_opco + + {"prtyw", X(31,154), XRB_MASK, POWER6|PPCA2|PPC476, 0, {RA, RS}}, + +-{"brw", X(31,155), XRB_MASK, POWER9, 0, {RA, RS}}, +- + {"stdepx", X(31,157), X_MASK, E500MC|PPCA2, 0, {RS, RA0, RB}}, + + {"stwepx", X(31,159), X_MASK, E500MC|PPCA2, 0, {RS, RA0, RB}}, +@@ -5008,7 +5009,6 @@ const struct powerpc_opcode powerpc_opco + {"sthfcmx", APU(31,167,0), APU_MASK, PPC405, 0, {FCRT, RA, RB}}, + + {"addex", ZRC(31,170,0), Z2_MASK, POWER9, 0, {RT, RA, RB, CY}}, +-{"addex.", ZRC(31,170,1), Z2_MASK, POWER9, 0, {RT, RA, RB, CY}}, + + {"msgclrp", XRTRA(31,174,0,0), XRTRA_MASK, POWER8, 0, {RB}}, + {"dcbtlse", X(31,174), X_MASK, PPCCHLK, E500MC, {CT, RA0, RB}}, +@@ -5033,8 +5033,6 @@ const struct powerpc_opcode powerpc_opco + + {"prtyd", X(31,186), XRB_MASK, POWER6|PPCA2, 0, {RA, RS}}, + +-{"brd", X(31,187), XRB_MASK, POWER9, 0, {RA, RS}}, +- + {"cmprb", X(31,192), XCMP_MASK, POWER9, 0, {BF, L, RA, RB}}, + + {"icblq.", XRC(31,198,1), X_MASK, E6500, 0, {CT, RA0, RB}}, +@@ -5073,8 +5071,6 @@ const struct powerpc_opcode powerpc_opco + {"sleq", XRC(31,217,0), X_MASK, M601, 0, {RA, RS, RB}}, + {"sleq.", XRC(31,217,1), X_MASK, M601, 0, {RA, RS, RB}}, + +-{"brh", X(31,219), XRB_MASK, POWER9, 0, {RA, RS}}, +- + {"stbepx", X(31,223), X_MASK, E500MC|PPCA2, 0, {RS, RA0, RB}}, + + {"cmpeqb", X(31,224), XCMPL_MASK, POWER9, 0, {BF, RA, RB}}, +@@ -5541,8 +5537,6 @@ const struct powerpc_opcode powerpc_opco + + {"mtvsrdd", X(31,435), XX1_MASK, PPCVSX3, 0, {XT6, RA0, RB}}, + +-{"lwzmx", X(31,437), X_MASK, POWER9, 0, {RT, RA0, RB}}, +- + {"ecowx", X(31,438), X_MASK, PPC, E500|TITAN, {RT, RA0, RB}}, + + {"sthux", X(31,439), X_MASK, COM, 0, {RS, RAS, RB}}, +@@ -5815,6 +5809,7 @@ const struct powerpc_opcode powerpc_opco + + {"mcrxr", X(31,512), XBFRARB_MASK, COM, POWER7, {BF}}, + ++{"lbdcbx", X(31,514), X_MASK, E200Z4, 0, {RT, RA, RB}}, + {"lbdx", X(31,515), X_MASK, E500MC, 0, {RT, RA, RB}}, + + {"bblels", X(31,518), X_MASK, PPCBRLK, 0, {0}}, +@@ -5865,6 +5860,7 @@ const struct powerpc_opcode powerpc_opco + {"maskir", XRC(31,541,0), X_MASK, M601, 0, {RA, RS, RB}}, + {"maskir.", XRC(31,541,1), X_MASK, M601, 0, {RA, RS, RB}}, + ++{"lhdcbx", X(31,546), X_MASK, E200Z4, 0, {RT, RA, RB}}, + {"lhdx", X(31,547), X_MASK, E500MC, 0, {RT, RA, RB}}, + + {"lvtrx", X(31,549), X_MASK, PPCVEC2, 0, {VD, RA0, RB}}, +@@ -5888,6 +5884,7 @@ const struct powerpc_opcode powerpc_opco + + {"mcrxrx", X(31,576), XBFRARB_MASK, POWER9, 0, {BF}}, + ++{"lwdcbx", X(31,578), X_MASK, E200Z4, 0, {RT, RA, RB}}, + {"lwdx", X(31,579), X_MASK, E500MC, 0, {RT, RA, RB}}, + + {"lvtlx", X(31,581), X_MASK, PPCVEC2, 0, {VD, RA0, RB}}, +@@ -5906,8 +5903,8 @@ const struct powerpc_opcode powerpc_opco + {"hwsync", XSYNC(31,598,0), 0xffffffff, POWER4, BOOKE|PPC476, {0}}, + {"lwsync", XSYNC(31,598,1), 0xffffffff, PPC, E500, {0}}, + {"ptesync", XSYNC(31,598,2), 0xffffffff, PPC64, 0, {0}}, +-{"sync", X(31,598), XSYNCLE_MASK, POWER9|E6500, 0, {LS, ESYNC}}, +-{"sync", X(31,598), XSYNC_MASK, PPCCOM, BOOKE|PPC476|POWER9, {LS}}, ++{"sync", X(31,598), XSYNCLE_MASK, E6500, 0, {LS, ESYNC}}, ++{"sync", X(31,598), XSYNC_MASK, PPCCOM, BOOKE|PPC476, {LS}}, + {"msync", X(31,598), 0xffffffff, BOOKE|PPCA2|PPC476, 0, {0}}, + {"sync", X(31,598), 0xffffffff, BOOKE|PPC476, E6500, {0}}, + {"lwsync", X(31,598), 0xffffffff, E500, 0, {0}}, +@@ -5938,6 +5935,7 @@ const struct powerpc_opcode powerpc_opco + + {"lfdux", X(31,631), X_MASK, COM, PPCEFS, {FRT, RAS, RB}}, + ++{"stbdcbx", X(31,642), X_MASK, E200Z4, 0, {RS, RA, RB}}, + {"stbdx", X(31,643), X_MASK, E500MC, 0, {RS, RA, RB}}, + + {"stvlx", X(31,647), X_MASK, CELL, 0, {VS, RA0, RB}}, +@@ -5975,6 +5973,7 @@ const struct powerpc_opcode powerpc_opco + {"sre", XRC(31,665,0), X_MASK, M601, 0, {RA, RS, RB}}, + {"sre.", XRC(31,665,1), X_MASK, M601, 0, {RA, RS, RB}}, + ++{"sthdcbx", X(31,674), X_MASK, E200Z4, 0, {RS, RA, RB}}, + {"sthdx", X(31,675), X_MASK, E500MC, 0, {RS, RA, RB}}, + + {"stvfrx", X(31,677), X_MASK, PPCVEC2, 0, {VS, RA0, RB}}, +@@ -5992,6 +5991,7 @@ const struct powerpc_opcode powerpc_opco + {"sriq", XRC(31,696,0), X_MASK, M601, 0, {RA, RS, SH}}, + {"sriq.", XRC(31,696,1), X_MASK, M601, 0, {RA, RS, SH}}, + ++{"stwdcbx", X(31,706), X_MASK, E200Z4, 0, {RS, RA, RB}}, + {"stwdx", X(31,707), X_MASK, E500MC, 0, {RS, RA, RB}}, + + {"stvflx", X(31,709), X_MASK, PPCVEC2, 0, {VS, RA0, RB}}, +@@ -6072,8 +6072,7 @@ const struct powerpc_opcode powerpc_opco + + {"lvsm", X(31,773), X_MASK, PPCVEC2, 0, {VD, RA0, RB}}, + +-{"copy_first", XOPL(31,774,1), XRT_MASK, POWER9, 0, {RA0, RB}}, +-{"copy", X(31,774), XLRT_MASK, POWER9, 0, {RA0, RB, L}}, ++{"copy", XOPL(31,774,1), XRT_MASK, POWER9, 0, {RA0, RB}}, + + {"stvepxl", X(31,775), X_MASK, PPCVEC2, 0, {VS, RA0, RB}}, + {"lvlxl", X(31,775), X_MASK, CELL, 0, {VD, RA0, RB}}, +@@ -6143,7 +6142,7 @@ const struct powerpc_opcode powerpc_opco + + {"lvtlxl", X(31,837), X_MASK, PPCVEC2, 0, {VD, RA0, RB}}, + +-{"cp_abort", X(31,838), XRTRARB_MASK,POWER9, 0, {0}}, ++{"cpabort", X(31,838), XRTRARB_MASK,POWER9, 0, {0}}, + + {"divo", XO(31,331,1,0), XO_MASK, M601, 0, {RT, RA, RB}}, + {"divo.", XO(31,331,1,1), XO_MASK, M601, 0, {RT, RA, RB}}, +@@ -6155,6 +6154,7 @@ const struct powerpc_opcode powerpc_opco + + {"tlbsrx.", XRC(31,850,1), XRT_MASK, PPCA2, 0, {RA0, RB}}, + ++{"slbiag", X(31,850), XRARB_MASK, POWER9, 0, {RS}}, + {"slbmfev", X(31,851), XRLA_MASK, POWER9, 0, {RT, RB, A_L}}, + {"slbmfev", X(31,851), XRA_MASK, PPC64, POWER9, {RT, RB}}, + +@@ -6190,9 +6190,7 @@ const struct powerpc_opcode powerpc_opco + {"extswsli", XS(31,445,0), XS_MASK, POWER9, 0, {RA, RS, SH6}}, + {"extswsli.", XS(31,445,1), XS_MASK, POWER9, 0, {RA, RS, SH6}}, + +-{"paste", XRC(31,902,0), XLRT_MASK, POWER9, 0, {RA0, RB, L0}}, +-{"paste_last", XRCL(31,902,1,1),XRT_MASK, POWER9, 0, {RA0, RB}}, +-{"paste.", XRC(31,902,1), XLRT_MASK, POWER9, 0, {RA0, RB, L1}}, ++{"paste.", XRCL(31,902,1,1),XRT_MASK, POWER9, 0, {RA0, RB}}, + + {"stvlxl", X(31,903), X_MASK, CELL, 0, {VS, RA0, RB}}, + {"stdfcmux", APU(31,903,0), APU_MASK, PPC405, 0, {FCRT, RA, RB}}, +@@ -7070,7 +7068,9 @@ const struct powerpc_opcode vle_opcodes[ + {"se_cmphl", SE_RR(3,3), SE_RR_MASK, PPCVLE, 0, {RX, RY}}, + + {"e_cmpi", SCI8BF(6,0,21), SCI8BF_MASK, PPCVLE, 0, {CRD32, RA, SCLSCI8}}, ++{"e_cmpwi", SCI8BF(6,0,21), SCI8BF_MASK, PPCVLE, 0, {CRD32, RA, SCLSCI8}}, + {"e_cmpli", SCI8BF(6,1,21), SCI8BF_MASK, PPCVLE, 0, {CRD32, RA, SCLSCI8}}, ++{"e_cmplwi", SCI8BF(6,1,21), SCI8BF_MASK, PPCVLE, 0, {CRD32, RA, SCLSCI8}}, + {"e_addi", SCI8(6,16), SCI8_MASK, PPCVLE, 0, {RT, RA, SCLSCI8}}, + {"e_subi", SCI8(6,16), SCI8_MASK, PPCVLE, 0, {RT, RA, SCLSCI8N}}, + {"e_addi.", SCI8(6,17), SCI8_MASK, PPCVLE, 0, {RT, RA, SCLSCI8}}, +@@ -7097,6 +7097,16 @@ const struct powerpc_opcode vle_opcodes[ + {"e_sthu", OPVUP(6,5), OPVUP_MASK, PPCVLE, 0, {RT, D8, RA0}}, + {"e_stwu", OPVUP(6,6), OPVUP_MASK, PPCVLE, 0, {RT, D8, RA0}}, + {"e_stmw", OPVUP(6,9), OPVUP_MASK, PPCVLE, 0, {RT, D8, RA0}}, ++{"e_ldmvgprw", OPVUPRT(6,16,0),OPVUPRT_MASK, PPCVLE, 0, {D8, RA0}}, ++{"e_stmvgprw", OPVUPRT(6,17,0),OPVUPRT_MASK, PPCVLE, 0, {D8, RA0}}, ++{"e_ldmvsprw", OPVUPRT(6,16,1),OPVUPRT_MASK, PPCVLE, 0, {D8, RA0}}, ++{"e_stmvsprw", OPVUPRT(6,17,1),OPVUPRT_MASK, PPCVLE, 0, {D8, RA0}}, ++{"e_ldmvsrrw", OPVUPRT(6,16,4),OPVUPRT_MASK, PPCVLE, 0, {D8, RA0}}, ++{"e_stmvsrrw", OPVUPRT(6,17,4),OPVUPRT_MASK, PPCVLE, 0, {D8, RA0}}, ++{"e_ldmvcsrrw", OPVUPRT(6,16,5),OPVUPRT_MASK, PPCVLE, 0, {D8, RA0}}, ++{"e_stmvcsrrw", OPVUPRT(6,17,5),OPVUPRT_MASK, PPCVLE, 0, {D8, RA0}}, ++{"e_ldmvdsrrw", OPVUPRT(6,16,6),OPVUPRT_MASK, PPCVLE, 0, {D8, RA0}}, ++{"e_stmvdsrrw", OPVUPRT(6,17,6),OPVUPRT_MASK, PPCVLE, 0, {D8, RA0}}, + {"e_add16i", OP(7), OP_MASK, PPCVLE, 0, {RT, RA, SI}}, + {"e_la", OP(7), OP_MASK, PPCVLE, 0, {RT, D, RA0}}, + {"e_sub16i", OP(7), OP_MASK, PPCVLE, 0, {RT, RA, NSI}}, +@@ -7144,10 +7154,8 @@ const struct powerpc_opcode vle_opcodes[ + {"e_cmphl16i", IA16(28,23), IA16_MASK, PPCVLE, 0, {RA, VLEUIMM}}, + {"e_cmph16i", IA16(28,22), IA16_MASK, PPCVLE, 0, {RA, VLESIMM}}, + {"e_cmpl16i", I16A(28,21), I16A_MASK, PPCVLE, 0, {RA, VLEUIMM}}, +-{"e_cmplwi", I16A(28,21), I16A_MASK, PPCVLE, 0, {RA, VLESIMM}}, + {"e_mull2i", I16A(28,20), I16A_MASK, PPCVLE, 0, {RA, VLESIMM}}, + {"e_cmp16i", IA16(28,19), IA16_MASK, PPCVLE, 0, {RA, VLESIMM}}, +-{"e_cmpwi", IA16(28,19), IA16_MASK, PPCVLE, 0, {RA, VLESIMM}}, + {"e_sub2is", I16A(28,18), I16A_MASK, PPCVLE, 0, {RA, VLENSIMM}}, + {"e_add2is", I16A(28,18), I16A_MASK, PPCVLE, 0, {RA, VLESIMM}}, + {"e_sub2i.", I16A(28,17), I16A_MASK, PPCVLE, 0, {RA, VLENSIMM}}, + diff --git a/SOURCES/binutils-2.27-ppc-stubs.patch b/SOURCES/binutils-2.27-ppc-stubs.patch new file mode 100644 index 0000000..76bd5ed --- /dev/null +++ b/SOURCES/binutils-2.27-ppc-stubs.patch @@ -0,0 +1,14 @@ +--- binutils.orig/bfd/elf64-ppc.c 2017-03-08 13:43:51.185482217 +0000 ++++ binutils-2.27/bfd/elf64-ppc.c 2017-03-08 13:44:28.403034088 +0000 +@@ -12514,7 +12514,10 @@ ppc64_elf_size_stubs (struct bfd_link_in + stub_sec = stub_sec->next) + if ((stub_sec->flags & SEC_LINKER_CREATED) == 0) + { +- stub_sec->rawsize = stub_sec->size; ++ if (htab->stub_iteration <= STUB_SHRINK_ITER ++ || stub_sec->rawsize < stub_sec->size) ++ /* Past STUB_SHRINK_ITER, rawsize is the max size seen. */ ++ stub_sec->rawsize = stub_sec->size; + stub_sec->size = 0; + stub_sec->reloc_count = 0; + stub_sec->flags &= ~SEC_RELOC; diff --git a/SOURCES/binutils-2.27-ppc64-discarded-plt-sections.patch b/SOURCES/binutils-2.27-ppc64-discarded-plt-sections.patch new file mode 100644 index 0000000..dc40f0e --- /dev/null +++ b/SOURCES/binutils-2.27-ppc64-discarded-plt-sections.patch @@ -0,0 +1,79 @@ +diff -rup binutils.orig/bfd/elf64-ppc.c binutils-2.27/bfd/elf64-ppc.c +--- binutils.orig/bfd/elf64-ppc.c 2017-11-16 10:35:34.873666405 +0000 ++++ binutils-2.27/bfd/elf64-ppc.c 2017-11-16 10:39:54.037530964 +0000 +@@ -10105,6 +10105,10 @@ ppc64_elf_size_dynamic_sections (bfd *ou + continue; + } + ++ if (bfd_is_abs_section (s->output_section)) ++ _bfd_error_handler (_("warning: discarding dynamic section %s"), ++ s->name); ++ + if ((s->flags & SEC_HAS_CONTENTS) == 0) + continue; + +@@ -10875,7 +10879,7 @@ ppc_build_one_stub (struct bfd_hash_entr + + htab->brlt->output_section->vma); + + off = (dest +- - elf_gp (htab->brlt->output_section->owner) ++ - elf_gp (info->output_bfd) + - htab->sec_info[stub_entry->group->link_sec->id].toc_off); + + if (off + 0x80008000 > 0xffffffff || (off & 7) != 0) +@@ -11025,7 +11029,7 @@ ppc_build_one_stub (struct bfd_hash_entr + } + + off = (dest +- - elf_gp (plt->output_section->owner) ++ - elf_gp (info->output_bfd) + - htab->sec_info[stub_entry->group->link_sec->id].toc_off); + + if (off + 0x80008000 > 0xffffffff || (off & 7) != 0) +@@ -11172,7 +11176,7 @@ ppc_size_one_stub (struct bfd_hash_entry + plt = htab->elf.iplt; + off += (plt->output_offset + + plt->output_section->vma +- - elf_gp (plt->output_section->owner) ++ - elf_gp (info->output_bfd) + - htab->sec_info[stub_entry->group->link_sec->id].toc_off); + + size = plt_stub_size (htab, stub_entry, off); +@@ -11266,7 +11270,7 @@ ppc_size_one_stub (struct bfd_hash_entry + off = (br_entry->offset + + htab->brlt->output_offset + + htab->brlt->output_section->vma +- - elf_gp (htab->brlt->output_section->owner) ++ - elf_gp (info->output_bfd) + - htab->sec_info[stub_entry->group->link_sec->id].toc_off); + + if (info->emitrelocations) +@@ -11386,7 +11390,7 @@ ppc64_elf_next_toc_section (struct bfd_l + output toc base plus 0x8000. Making the input elf_gp an + offset allows us to move the toc as a whole without + recalculating input elf_gp. */ +- off = htab->toc_curr - elf_gp (isec->output_section->owner); ++ off = htab->toc_curr - elf_gp (info->output_bfd); + off += TOC_BASE_OFF; + + /* Die if someone uses a linker script that doesn't keep input +@@ -11415,7 +11419,7 @@ ppc64_elf_next_toc_section (struct bfd_l + } + addr = (htab->toc_first_sec->output_offset + + htab->toc_first_sec->output_section->vma); +- off = addr - elf_gp (isec->output_section->owner) + TOC_BASE_OFF; ++ off = addr - elf_gp (info->output_bfd) + TOC_BASE_OFF; + elf_gp (isec->owner) = off; + + return TRUE; +diff -rup binutils.orig/ld/testsuite/ld-elf/note-3.t binutils-2.27/ld/testsuite/ld-elf/note-3.t +--- binutils.orig/ld/testsuite/ld-elf/note-3.t 2017-11-16 10:35:35.670656893 +0000 ++++ binutils-2.27/ld/testsuite/ld-elf/note-3.t 2017-11-16 10:59:06.352286215 +0000 +@@ -17,6 +17,7 @@ SECTIONS + + .dynstr : { *(.dynstr) } + .dynsym : { *(.dynsym) } ++ .got : { *(.got .toc) *(.igot) } + .got.plt : { *(.got.plt) *(.igot.plt) } + /DISCARD/ : { *(*) } + } diff --git a/SOURCES/binutils-2.27-remove-dwarf2-minmax.patch b/SOURCES/binutils-2.27-remove-dwarf2-minmax.patch new file mode 100644 index 0000000..c65dbe2 --- /dev/null +++ b/SOURCES/binutils-2.27-remove-dwarf2-minmax.patch @@ -0,0 +1,41 @@ +--- binutils.orig/bfd/dwarf2.c 2017-08-08 17:40:39.084385407 +0100 ++++ binutils-2.27/bfd/dwarf2.c 2017-08-08 17:41:34.237754733 +0100 +@@ -215,9 +215,6 @@ struct comp_unit + /* Linked list of the low and high address ranges contained in this + compilation unit as specified in the compilation unit header. */ + struct arange arange; +- /* A single arange containing the lowest and highest +- addresses covered by the compilation unit. */ +- struct arange minmax; + + /* The DW_AT_name attribute (for error messages). */ + char *name; +@@ -1540,16 +1537,11 @@ arange_add (struct comp_unit *unit, stru + /* If the first arange is empty, use it. */ + if (first_arange->high == 0) + { +- unit->minmax.low = first_arange->low = low_pc; +- unit->minmax.high = first_arange->high = high_pc; ++ first_arange->low = low_pc; ++ first_arange->high = high_pc; + return TRUE; + } + +- if (unit->minmax.low > low_pc) +- unit->minmax.low = low_pc; +- if (unit->minmax.high < high_pc) +- unit->minmax.high = high_pc; +- + /* Next see if we can cheaply extend an existing range. */ + arange = first_arange; + do +@@ -3151,9 +3143,6 @@ comp_unit_contains_address (struct comp_ + if (unit->error) + return FALSE; + +- if (unit->minmax.high < addr || unit->minmax.low > addr) +- return FALSE; +- + /* We know that the address *might* be contained within this comp + unit, but we cannot be sure until we check the specific ranges. */ + arange = &unit->arange; diff --git a/SOURCES/binutils-2.27-remove-pr19784-test.patch b/SOURCES/binutils-2.27-remove-pr19784-test.patch new file mode 100644 index 0000000..06afe28 --- /dev/null +++ b/SOURCES/binutils-2.27-remove-pr19784-test.patch @@ -0,0 +1,24 @@ +diff -rup binutils.orig/ld/testsuite/ld-ifunc/ifunc.exp binutils-2.27/ld/testsuite/ld-ifunc/ifunc.exp +--- binutils.orig/ld/testsuite/ld-ifunc/ifunc.exp 2017-02-21 16:23:38.051305028 +0000 ++++ binutils-2.27/ld/testsuite/ld-ifunc/ifunc.exp 2017-02-21 16:59:09.769220809 +0000 +@@ -563,20 +563,4 @@ run_ld_link_exec_tests [] [list \ + "pr18841c" \ + "pr18841.out" \ + ] \ +- [list \ +- "Run pr19784a" \ +- "tmpdir/pr19784a.o tmpdir/libpr19784a.so" \ +- "" \ +- { dummy.c } \ +- "pr19784a" \ +- "pass.out" \ +- ] \ +- [list \ +- "Run pr19784b" \ +- "--as-needed tmpdir/pr19784a.o tmpdir/libpr19784b.so" \ +- "" \ +- { dummy.c } \ +- "pr19784b" \ +- "pass.out" \ +- ] \ + ] diff --git a/SOURCES/binutils-2.27-revert-PLT-elision.patch b/SOURCES/binutils-2.27-revert-PLT-elision.patch new file mode 100644 index 0000000..3eb828f --- /dev/null +++ b/SOURCES/binutils-2.27-revert-PLT-elision.patch @@ -0,0 +1,76 @@ +diff -rup binutils.orig/bfd/elf32-i386.c binutils-2.27/bfd/elf32-i386.c +--- binutils.orig/bfd/elf32-i386.c 2017-05-17 11:22:32.393303573 +0100 ++++ binutils-2.27/bfd/elf32-i386.c 2017-05-17 11:25:33.097138811 +0100 +@@ -2322,8 +2322,7 @@ do_size: + if (use_plt_got + && h != NULL + && h->plt.refcount > 0 +- && (((info->flags & DF_BIND_NOW) && !h->pointer_equality_needed) +- || h->got.refcount > 0) ++ && h->got.refcount > 0 + && htab->plt_got == NULL) + { + /* Create the GOT procedure linkage table. */ +@@ -2672,16 +2671,6 @@ elf_i386_allocate_dynrelocs (struct elf_ + if PLT is used. */ + eh->func_pointer_refcount = 0; + +- if ((info->flags & DF_BIND_NOW) && !h->pointer_equality_needed) +- { +- /* Don't use the regular PLT for DF_BIND_NOW. */ +- h->plt.offset = (bfd_vma) -1; +- +- /* Use the GOT PLT. */ +- h->got.refcount = 1; +- eh->plt_got.refcount = 1; +- } +- + use_plt_got = eh->plt_got.refcount > 0; + + /* Make sure this symbol is output as a dynamic symbol. +diff -rup binutils.orig/bfd/elf64-x86-64.c binutils-2.27/bfd/elf64-x86-64.c +--- binutils.orig/bfd/elf64-x86-64.c 2017-05-17 11:22:32.396303537 +0100 ++++ binutils-2.27/bfd/elf64-x86-64.c 2017-05-17 11:26:00.250813521 +0100 +@@ -2722,8 +2722,7 @@ do_size: + if (use_plt_got + && h != NULL + && h->plt.refcount > 0 +- && (((info->flags & DF_BIND_NOW) && !h->pointer_equality_needed) +- || h->got.refcount > 0) ++ && h->got.refcount > 0 + && htab->plt_got == NULL) + { + /* Create the GOT procedure linkage table. */ +@@ -3094,16 +3093,6 @@ elf_x86_64_allocate_dynrelocs (struct el + if PLT is used. */ + eh->func_pointer_refcount = 0; + +- if ((info->flags & DF_BIND_NOW) && !h->pointer_equality_needed) +- { +- /* Don't use the regular PLT for DF_BIND_NOW. */ +- h->plt.offset = (bfd_vma) -1; +- +- /* Use the GOT PLT. */ +- h->got.refcount = 1; +- eh->plt_got.refcount = 1; +- } +- + use_plt_got = eh->plt_got.refcount > 0; + + /* Make sure this symbol is output as a dynamic symbol. +diff -rup binutils.orig/ld/testsuite/ld-i386/pr17689now.rd binutils-2.27/ld/testsuite/ld-i386/pr17689now.rd +--- binutils.orig/ld/testsuite/ld-i386/pr17689now.rd 2017-05-17 11:22:32.677300171 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/pr17689now.rd 2017-05-17 11:39:36.097021963 +0100 +@@ -1,4 +1,3 @@ +-#failif + #... + [0-9a-f ]+R_386_JUMP_SLOT +0+.* + #... +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr17689now.rd binutils-2.27/ld/testsuite/ld-x86-64/pr17689now.rd +--- binutils.orig/ld/testsuite/ld-x86-64/pr17689now.rd 2017-05-17 11:22:32.734299489 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr17689now.rd 2017-05-17 11:39:53.071818174 +0100 +@@ -1,4 +1,3 @@ +-#failif + #... + [0-9a-f ]+R_X86_64_JUMP_SLOT +0+ +.* + #... diff --git a/SOURCES/binutils-2.27-s390-pgste-marker.patch b/SOURCES/binutils-2.27-s390-pgste-marker.patch new file mode 100644 index 0000000..e864c39 --- /dev/null +++ b/SOURCES/binutils-2.27-s390-pgste-marker.patch @@ -0,0 +1,354 @@ +diff -rup binutils.orig/bfd/elf64-s390.c binutils-2.27/bfd/elf64-s390.c +--- binutils.orig/bfd/elf64-s390.c 2017-08-29 13:09:44.135143399 +0100 ++++ binutils-2.27/bfd/elf64-s390.c 2017-08-29 13:10:37.272554164 +0100 +@@ -25,6 +25,7 @@ + #include "libbfd.h" + #include "elf-bfd.h" + #include "elf/s390.h" ++#include "elf-s390.h" + + /* In case we're on a 32-bit machine, construct a 64-bit "-1" value + from smaller values. Start with zero, widen, *then* decrement. */ +@@ -660,6 +661,9 @@ struct elf_s390_link_hash_table + + /* Small local sym cache. */ + struct sym_cache sym_cache; ++ ++ /* Options passed from the linker. */ ++ struct s390_elf_params *params; + }; + + /* Get the s390 ELF linker hash table from a link_info structure. */ +@@ -3883,6 +3887,70 @@ elf64_s390_merge_private_bfd_data (bfd * + return TRUE; + } + ++/* We may add a PT_S390_PGSTE program header. */ ++ ++static int ++elf_s390_additional_program_headers (bfd *abfd ATTRIBUTE_UNUSED, ++ struct bfd_link_info *info) ++{ ++ struct elf_s390_link_hash_table *htab; ++ ++ htab = elf_s390_hash_table (info); ++ return htab->params->pgste; ++} ++ ++ ++/* Add the PT_S390_PGSTE program header. */ ++ ++static bfd_boolean ++elf_s390_modify_segment_map (bfd *abfd ATTRIBUTE_UNUSED, ++ struct bfd_link_info *info) ++{ ++ struct elf_s390_link_hash_table *htab; ++ struct elf_segment_map *m, *pm = NULL; ++ ++ htab = elf_s390_hash_table (info); ++ if (!htab->params->pgste) ++ return TRUE; ++ ++ /* If there is already a PT_S390_PGSTE header, avoid adding ++ another. */ ++ m = elf_seg_map (abfd); ++ while (m && m->p_type != PT_S390_PGSTE) ++ { ++ pm = m; ++ m = m->next; ++ } ++ ++ if (m) ++ return TRUE; ++ ++ m = (struct elf_segment_map *) ++ bfd_zalloc (abfd, sizeof (struct elf_segment_map)); ++ if (m == NULL) ++ return FALSE; ++ m->p_type = PT_S390_PGSTE; ++ m->count = 0; ++ m->next = NULL; ++ if (pm) ++ pm->next = m; ++ ++ return TRUE; ++} ++ ++bfd_boolean ++bfd_elf_s390_set_options (struct bfd_link_info *info, ++ struct s390_elf_params *params) ++{ ++ struct elf_s390_link_hash_table *htab; ++ ++ htab = elf_s390_hash_table (info); ++ htab->params = params; ++ ++ return TRUE; ++} ++ ++ + /* Why was the hash table entry size definition changed from + ARCH_SIZE/8 to 4? This breaks the 64 bit dynamic linker and + this is the only reason for the s390_elf64_size_info structure. */ +@@ -3959,6 +4027,8 @@ const struct elf_size_info s390_elf64_si + #define elf_backend_plt_sym_val elf_s390_plt_sym_val + #define elf_backend_add_symbol_hook elf_s390_add_symbol_hook + #define elf_backend_sort_relocs_p elf_s390_elf_sort_relocs_p ++#define elf_backend_additional_program_headers elf_s390_additional_program_headers ++#define elf_backend_modify_segment_map elf_s390_modify_segment_map + + #define bfd_elf64_mkobject elf_s390_mkobject + #define elf_backend_object_p elf_s390_object_p +diff -rup binutils.orig/binutils/readelf.c binutils-2.27/binutils/readelf.c +--- binutils.orig/binutils/readelf.c 2017-08-29 13:09:44.138143366 +0100 ++++ binutils-2.27/binutils/readelf.c 2017-08-29 13:09:53.384040839 +0100 +@@ -3610,6 +3610,16 @@ get_arm_segment_type (unsigned long type + } + + static const char * ++get_s390_segment_type (unsigned long type) ++{ ++ switch (type) ++ { ++ case PT_S390_PGSTE: return "S390_PGSTE"; ++ default: return NULL; ++ } ++} ++ ++static const char * + get_mips_segment_type (unsigned long type) + { + switch (type) +@@ -3755,6 +3765,10 @@ get_segment_type (unsigned long p_type) + case EM_TI_C6000: + result = get_tic6x_segment_type (p_type); + break; ++ case EM_S390: ++ case EM_S390_OLD: ++ result = get_s390_segment_type (p_type); ++ break; + default: + result = NULL; + break; +diff -rup binutils.orig/elfcpp/elfcpp.h binutils-2.27/elfcpp/elfcpp.h +--- binutils.orig/elfcpp/elfcpp.h 2017-08-29 13:09:44.182142878 +0100 ++++ binutils-2.27/elfcpp/elfcpp.h 2017-08-29 13:09:53.385040828 +0100 +@@ -514,7 +514,9 @@ enum PT + // Platform architecture compatibility information + PT_AARCH64_ARCHEXT = 0x70000000, + // Exception unwind tables +- PT_AARCH64_UNWIND = 0x70000001 ++ PT_AARCH64_UNWIND = 0x70000001, ++ // 4k page table size ++ PT_S390_PGSTE = 0x70000000, + }; + + // The valid bit flags found in the Phdr p_flags field. +diff -rup binutils.orig/include/elf/s390.h binutils-2.27/include/elf/s390.h +--- binutils.orig/include/elf/s390.h 2017-08-29 13:09:44.434140083 +0100 ++++ binutils-2.27/include/elf/s390.h 2017-08-29 13:09:53.385040828 +0100 +@@ -37,6 +37,9 @@ + + #define EF_S390_HIGH_GPRS 0x00000001 + ++/* Request 4k page table size. */ ++#define PT_S390_PGSTE (PT_LOPROC + 0) ++ + /* Relocation types. */ + + START_RELOC_NUMBERS (elf_s390_reloc_type) +diff -rup binutils.orig/ld/emulparams/elf64_s390.sh binutils-2.27/ld/emulparams/elf64_s390.sh +--- binutils.orig/ld/emulparams/elf64_s390.sh 2017-08-29 13:09:44.441140006 +0100 ++++ binutils-2.27/ld/emulparams/elf64_s390.sh 2017-08-29 13:09:53.385040828 +0100 +@@ -12,6 +12,7 @@ TEMPLATE_NAME=elf32 + GENERATE_SHLIB_SCRIPT=yes + GENERATE_PIE_SCRIPT=yes + NO_SMALL_DATA=yes ++EXTRA_EM_FILE=s390 + IREL_IN_PLT= + + # Treat a host that matches the target with the possible exception of "x" +diff -rup binutils.orig/ld/gen-doc.texi binutils-2.27/ld/gen-doc.texi +--- binutils.orig/ld/gen-doc.texi 2017-08-29 13:09:44.445139961 +0100 ++++ binutils-2.27/ld/gen-doc.texi 2017-08-29 13:09:53.385040828 +0100 +@@ -21,6 +21,7 @@ + @set POWERPC + @set POWERPC64 + @set Renesas ++@set S/390 + @set SPU + @set TICOFF + @set WIN32 +diff -rup binutils.orig/ld/ld.texinfo binutils-2.27/ld/ld.texinfo +--- binutils.orig/ld/ld.texinfo 2017-08-29 13:09:44.445139961 +0100 ++++ binutils-2.27/ld/ld.texinfo 2017-08-29 13:09:53.385040828 +0100 +@@ -34,6 +34,7 @@ + @set POWERPC + @set POWERPC64 + @set Renesas ++@set S/390 + @set SPU + @set TICOFF + @set WIN32 +@@ -158,6 +159,9 @@ in the section entitled ``GNU Free Docum + @ifset POWERPC64 + * PowerPC64 ELF64:: ld and PowerPC64 64-bit ELF Support + @end ifset ++@ifset S/390 ++* S/390 ELF:: ld and S/390 ELF Support ++@end ifset + @ifset SPU + * SPU ELF:: ld and SPU ELF Support + @end ifset +@@ -6380,6 +6384,9 @@ functionality are not listed. + @ifset POWERPC64 + * PowerPC64 ELF64:: @command{ld} and PowerPC64 64-bit ELF Support + @end ifset ++@ifset S/390 ++* S/390 ELF:: @command{ld} and S/390 ELF Support ++@end ifset + @ifset SPU + * SPU ELF:: @command{ld} and SPU ELF Support + @end ifset +@@ -7373,6 +7380,30 @@ default behaviour. + @end table + + @ifclear GENERIC ++@lowersections ++@end ifclear ++@end ifset ++ ++@ifset S/390 ++@ifclear GENERIC ++@raisesections ++@end ifclear ++ ++@node S/390 ELF ++@section @command{ld} and S/390 ELF Support ++ ++@cindex S/390 ELF options ++@table @option ++ ++@cindex S/390 ++@kindex --s390-pgste ++@item --s390-pgste ++This option marks the result file with a @code{PT_S390_PGSTE} ++segment. The Linux kernel is supposed to allocate 4k page tables for ++binaries marked that way. ++@end table ++ ++@ifclear GENERIC + @lowersections + @end ifclear + @end ifset +diff -rup binutils.orig/ld/Makefile.in binutils-2.27/ld/Makefile.in +--- binutils.orig/ld/Makefile.in 2017-08-29 13:09:44.446139950 +0100 ++++ binutils-2.27/ld/Makefile.in 2017-08-29 13:09:53.385040828 +0100 +@@ -3490,6 +3490,7 @@ eelf64_ia64_vms.c: $(srcdir)/emulparams/ + $(srcdir)/scripttempl/ia64vms.sc ${GEN_DEPENDS} + + eelf64_s390.c: $(srcdir)/emulparams/elf64_s390.sh \ ++ $(srcdir)/emultempl/s390.em \ + $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + + eelf64_sparc.c: $(srcdir)/emulparams/elf64_sparc.sh \ + +--- /dev/null 2017-08-29 08:03:33.387685165 +0100 ++++ binutils-2.27/bfd/elf-s390.h 2017-08-29 13:19:31.705627899 +0100 +@@ -0,0 +1,29 @@ ++/* S/390-specific support for ELF. ++ Copyright (C) 2017 Free Software Foundation, Inc. ++ ++ This file is part of BFD, the Binary File Descriptor library. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, ++ MA 02110-1301, USA. */ ++ ++/* Used to pass info between ld and bfd. */ ++struct s390_elf_params ++{ ++ /* Tell the kernel to allocate 4k page tables. */ ++ int pgste; ++}; ++ ++bfd_boolean bfd_elf_s390_set_options (struct bfd_link_info *info, ++ struct s390_elf_params *params); +--- /dev/null 2017-08-29 08:03:33.387685165 +0100 ++++ binutils-2.27/ld/emultempl/s390.em 2017-08-29 13:26:01.797302217 +0100 +@@ -0,0 +1,64 @@ ++# This shell script emits a C file. -*- C -*- ++# Copyright (C) 2017 Free Software Foundation, Inc. ++# ++# This file is part of the GNU Binutils. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 3 of the license, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; see the file COPYING3. If not, ++# see <http://www.gnu.org/licenses/>. ++# ++ ++# This file is sourced from elf-generic.em, and defines S/390 ++# specific routines. ++# ++fragment <<EOF ++ ++#include "ldctor.h" ++#include "elf-s390.h" ++ ++static struct s390_elf_params params = { 0 }; ++ ++/* This is a convenient point to tell BFD about target specific flags. ++ After the output has been created, but before inputs are read. */ ++static void ++s390_elf_create_output_section_statements (void) ++{ ++ if (!bfd_elf_s390_set_options (&link_info, ¶ms)) ++ einfo ("%F%P: can not init BFD: %E\n"); ++} ++ ++EOF ++ ++# Define some shell vars to insert bits of code into the standard elf ++# parse_args and list_options functions. ++# ++PARSE_AND_LIST_PROLOGUE=' ++#define OPTION_PGSTE 301 ++' ++ ++PARSE_AND_LIST_LONGOPTS=' ++ { "s390-pgste", no_argument, NULL, OPTION_PGSTE}, ++' ++ ++PARSE_AND_LIST_OPTIONS=' ++ fprintf (file, _(" --s390-pgste Tell the kernel to " ++ "allocate 4k page tables\n")); ++' ++ ++PARSE_AND_LIST_ARGS_CASES=' ++ case OPTION_PGSTE: ++ params.pgste = 1; ++ break; ++' ++ ++LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=s390_elf_create_output_section_statements diff --git a/SOURCES/binutils-2.27-s390-plt.patch b/SOURCES/binutils-2.27-s390-plt.patch new file mode 100644 index 0000000..5e9a866 --- /dev/null +++ b/SOURCES/binutils-2.27-s390-plt.patch @@ -0,0 +1,44 @@ +diff -rup binutils.orig/bfd/elf32-s390.c binutils-2.27/bfd/elf32-s390.c +--- binutils.orig/bfd/elf32-s390.c 2017-05-12 13:00:01.697650210 +0100 ++++ binutils-2.27/bfd/elf32-s390.c 2017-05-12 13:01:05.223988744 +0100 +@@ -2809,7 +2809,7 @@ elf_s390_relocate_section (bfd *output_b + && s390_is_ifunc_symbol_p (h) + && h->def_regular) + { +- if (!bfd_link_pic (info) || !h->non_got_ref) ++ if (!bfd_link_pic (info)) + { + /* For a non-shared object STT_GNU_IFUNC symbol must + go through PLT. */ +diff -rup binutils.orig/bfd/elf64-s390.c binutils-2.27/bfd/elf64-s390.c +--- binutils.orig/bfd/elf64-s390.c 2017-05-12 13:00:01.699650190 +0100 ++++ binutils-2.27/bfd/elf64-s390.c 2017-05-12 13:01:31.017720167 +0100 +@@ -2768,10 +2768,11 @@ elf_s390_relocate_section (bfd *output_b + && s390_is_ifunc_symbol_p (h) + && h->def_regular) + { +- if (!bfd_link_pic (info) || !h->non_got_ref) ++ if (!bfd_link_pic (info)) + { +- /* For a non-shared object STT_GNU_IFUNC symbol must +- go through PLT. */ ++ /* For a non-shared object the symbol will not ++ change. Hence we can write the address of the ++ target IPLT slot now. */ + relocation = (htab->elf.iplt->output_section->vma + + htab->elf.iplt->output_offset + + h ->plt.offset); +diff -rup binutils.orig/bfd/elf-s390-common.c binutils-2.27/bfd/elf-s390-common.c +--- binutils.orig/bfd/elf-s390-common.c 2017-05-12 13:00:01.695650231 +0100 ++++ binutils-2.27/bfd/elf-s390-common.c 2017-05-12 13:01:54.347477247 +0100 +@@ -161,9 +161,7 @@ keep: + h->type = STT_FUNC; + } + +- /* We need dynamic relocation for STT_GNU_IFUNC symbol only when +- there is a non-GOT reference in a shared object. */ +- if (!bfd_link_pic (info) || !h->non_got_ref) ++ if (!bfd_link_pic (info)) + *head = NULL; + + /* Finally, allocate space. */ diff --git a/SOURCES/binutils-2.27-s390-pr19719.patch b/SOURCES/binutils-2.27-s390-pr19719.patch new file mode 100644 index 0000000..4feacac --- /dev/null +++ b/SOURCES/binutils-2.27-s390-pr19719.patch @@ -0,0 +1,10 @@ +diff -rup binutils.orig/ld/testsuite/ld-elf/shared.exp binutils-2.27/ld/testsuite/ld-elf/shared.exp +--- binutils.orig/ld/testsuite/ld-elf/shared.exp 2017-02-21 15:00:21.788036974 +0000 ++++ binutils-2.27/ld/testsuite/ld-elf/shared.exp 2017-02-21 16:18:12.497641235 +0000 +@@ -665,5 +665,5 @@ proc mix_pic_and_non_pic {xfails cflags + } + } + +-mix_pic_and_non_pic [list "arm*-*-*" "aarch64*-*-*"] "" "" "pr19719" ++mix_pic_and_non_pic [list "arm*-*-*" "aarch64*-*-*" "s390*-*-*"] "" "" "pr19719" + mix_pic_and_non_pic [] "-fPIE" "-pie" "pr19719pie" diff --git a/SOURCES/binutils-2.27-s390x-arch12.patch b/SOURCES/binutils-2.27-s390x-arch12.patch new file mode 100644 index 0000000..2293c10 --- /dev/null +++ b/SOURCES/binutils-2.27-s390x-arch12.patch @@ -0,0 +1,1064 @@ +diff -rup binutils.orig/gas/config/tc-s390.c binutils-2.27/gas/config/tc-s390.c +--- binutils.orig/gas/config/tc-s390.c 2017-03-24 14:50:52.004815587 +0000 ++++ binutils-2.27/gas/config/tc-s390.c 2017-03-24 14:55:19.129377655 +0000 +@@ -282,7 +282,8 @@ s390_parse_cpu (const char * arg + { STRING_COMMA_LEN ("z10"), 0 }, + { STRING_COMMA_LEN ("z196"), 0 }, + { STRING_COMMA_LEN ("zEC12"), S390_INSTR_FLAG_HTM }, +- { STRING_COMMA_LEN ("z13"), S390_INSTR_FLAG_HTM | S390_INSTR_FLAG_VX } ++ { STRING_COMMA_LEN ("z13"), S390_INSTR_FLAG_HTM | S390_INSTR_FLAG_VX }, ++ { STRING_COMMA_LEN ("arch12"), S390_INSTR_FLAG_HTM | S390_INSTR_FLAG_VX | S390_INSTR_FLAG_VX2 } + }; + static struct + { +@@ -294,7 +295,9 @@ s390_parse_cpu (const char * arg + { "htm", S390_INSTR_FLAG_HTM, TRUE }, + { "nohtm", S390_INSTR_FLAG_HTM, FALSE }, + { "vx", S390_INSTR_FLAG_VX, TRUE }, +- { "novx", S390_INSTR_FLAG_VX, FALSE } ++ { "novx", S390_INSTR_FLAG_VX, FALSE }, ++ { "vx2", S390_INSTR_FLAG_VX2, TRUE }, ++ { "novx2", S390_INSTR_FLAG_VX2, FALSE } + }; + unsigned int icpu; + char *ilp_bak; +diff -rup binutils.orig/gas/doc/as.texinfo binutils-2.27/gas/doc/as.texinfo +--- binutils.orig/gas/doc/as.texinfo 2017-03-24 14:50:52.037815161 +0000 ++++ binutils-2.27/gas/doc/as.texinfo 2017-03-24 14:56:29.325474523 +0000 +@@ -1656,7 +1656,7 @@ Architecture (esa) or the z/Architecture + @item -march=@var{processor} + Specify which s390 processor variant is the target, @samp{g6}, @samp{g6}, + @samp{z900}, @samp{z990}, @samp{z9-109}, @samp{z9-ec}, @samp{z10}, +-@samp{z196}, @samp{zEC12}, or @samp{z13}. ++@samp{z196}, @samp{zEC12}, or @samp{z13} (or @samp{arch11}), or @samp{arch12}. + @item -mregnames + @itemx -mno-regnames + Allow or disallow symbolic names for registers. +diff -rup binutils.orig/gas/doc/c-s390.texi binutils-2.27/gas/doc/c-s390.texi +--- binutils.orig/gas/doc/c-s390.texi 2017-03-24 14:50:52.053814956 +0000 ++++ binutils-2.27/gas/doc/c-s390.texi 2017-03-24 14:57:53.010397844 +0000 +@@ -14,9 +14,11 @@ + @cindex s390 support + + The s390 version of @code{@value{AS}} supports two architectures modes +-and seven chip levels. The architecture modes are the Enterprise System ++and eleven chip levels. The architecture modes are the Enterprise System + Architecture (ESA) and the newer z/Architecture mode. The chip levels +-are g5, g6, z900, z990, z9-109, z9-ec, z10, z196, zEC12, and z13. ++are g5 (or arch3), g6, z900 (or arch5), z990 (or arch6), z9-109, z9-ec ++(or arch7), z10 (or arch8), z196 (or arch9), zEC12 (or arch10), z13 ++(or arch11), and arch12. + + @menu + * s390 Options:: Command-line Options. +diff -rup binutils.orig/gas/testsuite/gas/s390/s390.exp binutils-2.27/gas/testsuite/gas/s390/s390.exp +--- binutils.orig/gas/testsuite/gas/s390/s390.exp 2017-03-24 14:50:54.051789225 +0000 ++++ binutils-2.27/gas/testsuite/gas/s390/s390.exp 2017-03-24 14:54:05.065330554 +0000 +@@ -28,6 +28,7 @@ if [expr [istarget "s390-*-*"] || [ista + run_dump_test "zarch-z196" "{as -m64} {as -march=z196}" + run_dump_test "zarch-zEC12" "{as -m64} {as -march=zEC12}" + run_dump_test "zarch-z13" "{as -m64} {as -march=z13}" ++ run_dump_test "zarch-arch12" "{as -m64} {as -march=arch12}" + run_dump_test "zarch-reloc" "{as -m64}" + run_dump_test "zarch-operands" "{as -m64} {as -march=z9-109}" + run_dump_test "zarch-machine" "{as -m64} {as -march=z900}" +diff --git a/gas/testsuite/gas/s390/zarch-arch12.d b/gas/testsuite/gas/s390/zarch-arch12.d +new file mode 100644 +index 0000000..bc2ce18 +--- /dev/null ++++ b/gas/testsuite/gas/s390/zarch-arch12.d +@@ -0,0 +1,200 @@ ++#name: s390x opcode ++#objdump: -dr ++ ++.*: +file format .* ++ ++Disassembly of section .text: ++ ++.* <foo>: ++.*: e7 f1 40 00 06 85 [ ]*vbperm %v15,%v17,%v20 ++.*: e7 f6 9f a0 60 04 [ ]*vllezlf %v15,4000\(%r6,%r9\) ++.*: e7 f1 4d c0 87 b8 [ ]*vmsl %v15,%v17,%v20,%v24,13,12 ++.*: e7 f1 43 d0 87 b8 [ ]*vmslg %v15,%v17,%v20,%v24,13 ++.*: e7 f1 40 00 06 6c [ ]*vnx %v15,%v17,%v20 ++.*: e7 f1 40 00 06 6e [ ]*vnn %v15,%v17,%v20 ++.*: e7 f1 40 00 06 6f [ ]*voc %v15,%v17,%v20 ++.*: e7 f1 00 00 04 50 [ ]*vpopctb %v15,%v17 ++.*: e7 f1 00 00 14 50 [ ]*vpopcth %v15,%v17 ++.*: e7 f1 00 00 24 50 [ ]*vpopctf %v15,%v17 ++.*: e7 f1 00 00 34 50 [ ]*vpopctg %v15,%v17 ++.*: e7 f1 40 00 26 e3 [ ]*vfasb %v15,%v17,%v20 ++.*: e7 f1 40 08 26 e3 [ ]*wfasb %v15,%v17,%v20 ++.*: e7 f1 40 08 46 e3 [ ]*wfaxb %v15,%v17,%v20 ++.*: e7 f1 00 00 24 cb [ ]*wfcsb %v15,%v17 ++.*: e7 f1 00 00 44 cb [ ]*wfcxb %v15,%v17 ++.*: e7 f1 00 00 24 ca [ ]*wfksb %v15,%v17 ++.*: e7 f1 00 00 44 ca [ ]*wfkxb %v15,%v17 ++.*: e7 f1 40 00 26 e8 [ ]*vfcesb %v15,%v17,%v20 ++.*: e7 f1 40 10 26 e8 [ ]*vfcesbs %v15,%v17,%v20 ++.*: e7 f1 40 08 26 e8 [ ]*wfcesb %v15,%v17,%v20 ++.*: e7 f1 40 18 26 e8 [ ]*wfcesbs %v15,%v17,%v20 ++.*: e7 f1 40 08 46 e8 [ ]*wfcexb %v15,%v17,%v20 ++.*: e7 f1 40 18 46 e8 [ ]*wfcexbs %v15,%v17,%v20 ++.*: e7 f1 40 04 26 e8 [ ]*vfkesb %v15,%v17,%v20 ++.*: e7 f1 40 14 26 e8 [ ]*vfkesbs %v15,%v17,%v20 ++.*: e7 f1 40 0c 26 e8 [ ]*wfkesb %v15,%v17,%v20 ++.*: e7 f1 40 1c 26 e8 [ ]*wfkesbs %v15,%v17,%v20 ++.*: e7 f1 40 04 36 e8 [ ]*vfkedb %v15,%v17,%v20 ++.*: e7 f1 40 14 36 e8 [ ]*vfkedbs %v15,%v17,%v20 ++.*: e7 f1 40 0c 36 e8 [ ]*wfkedb %v15,%v17,%v20 ++.*: e7 f1 40 1c 36 e8 [ ]*wfkedbs %v15,%v17,%v20 ++.*: e7 f1 40 0c 46 e8 [ ]*wfkexb %v15,%v17,%v20 ++.*: e7 f1 40 1c 46 e8 [ ]*wfkexbs %v15,%v17,%v20 ++.*: e7 f1 40 00 26 eb [ ]*vfchsb %v15,%v17,%v20 ++.*: e7 f1 40 10 26 eb [ ]*vfchsbs %v15,%v17,%v20 ++.*: e7 f1 40 08 26 eb [ ]*wfchsb %v15,%v17,%v20 ++.*: e7 f1 40 18 26 eb [ ]*wfchsbs %v15,%v17,%v20 ++.*: e7 f1 40 08 46 eb [ ]*wfchxb %v15,%v17,%v20 ++.*: e7 f1 40 18 46 eb [ ]*wfchxbs %v15,%v17,%v20 ++.*: e7 f1 40 04 26 eb [ ]*vfkhsb %v15,%v17,%v20 ++.*: e7 f1 40 14 26 eb [ ]*vfkhsbs %v15,%v17,%v20 ++.*: e7 f1 40 0c 26 eb [ ]*wfkhsb %v15,%v17,%v20 ++.*: e7 f1 40 1c 26 eb [ ]*wfkhsbs %v15,%v17,%v20 ++.*: e7 f1 40 04 36 eb [ ]*vfkhdb %v15,%v17,%v20 ++.*: e7 f1 40 14 36 eb [ ]*vfkhdbs %v15,%v17,%v20 ++.*: e7 f1 40 0c 36 eb [ ]*wfkhdb %v15,%v17,%v20 ++.*: e7 f1 40 1c 36 eb [ ]*wfkhdbs %v15,%v17,%v20 ++.*: e7 f1 40 0c 46 eb [ ]*wfkhxb %v15,%v17,%v20 ++.*: e7 f1 40 1c 46 eb [ ]*wfkhxbs %v15,%v17,%v20 ++.*: e7 f1 40 00 26 ea [ ]*vfchesb %v15,%v17,%v20 ++.*: e7 f1 40 10 26 ea [ ]*vfchesbs %v15,%v17,%v20 ++.*: e7 f1 40 08 26 ea [ ]*wfchesb %v15,%v17,%v20 ++.*: e7 f1 40 18 26 ea [ ]*wfchesbs %v15,%v17,%v20 ++.*: e7 f1 40 08 46 ea [ ]*wfchexb %v15,%v17,%v20 ++.*: e7 f1 40 18 46 ea [ ]*wfchexbs %v15,%v17,%v20 ++.*: e7 f1 40 04 26 ea [ ]*vfkhesb %v15,%v17,%v20 ++.*: e7 f1 40 14 26 ea [ ]*vfkhesbs %v15,%v17,%v20 ++.*: e7 f1 40 0c 26 ea [ ]*wfkhesb %v15,%v17,%v20 ++.*: e7 f1 40 1c 26 ea [ ]*wfkhesbs %v15,%v17,%v20 ++.*: e7 f1 40 04 36 ea [ ]*vfkhedb %v15,%v17,%v20 ++.*: e7 f1 40 14 36 ea [ ]*vfkhedbs %v15,%v17,%v20 ++.*: e7 f1 40 0c 36 ea [ ]*wfkhedb %v15,%v17,%v20 ++.*: e7 f1 40 1c 36 ea [ ]*wfkhedbs %v15,%v17,%v20 ++.*: e7 f1 40 0c 46 ea [ ]*wfkhexb %v15,%v17,%v20 ++.*: e7 f1 40 1c 46 ea [ ]*wfkhexbs %v15,%v17,%v20 ++.*: e7 f1 40 00 26 e5 [ ]*vfdsb %v15,%v17,%v20 ++.*: e7 f1 40 08 26 e5 [ ]*wfdsb %v15,%v17,%v20 ++.*: e7 f1 40 08 46 e5 [ ]*wfdxb %v15,%v17,%v20 ++.*: e7 f1 00 cd 24 c7 [ ]*wfisb %v15,%v17,5,12 ++.*: e7 f1 00 cd 24 c7 [ ]*wfisb %v15,%v17,5,12 ++.*: e7 f1 00 cd 44 c7 [ ]*wfixb %v15,%v17,5,12 ++.*: e7 f1 00 0c d4 c4 [ ]*vfll %v15,%v17,13,12 ++.*: e7 f1 00 00 24 c4 [ ]*vflls %v15,%v17 ++.*: e7 f1 00 08 24 c4 [ ]*wflls %v15,%v17 ++.*: e7 f1 00 08 34 c4 [ ]*wflld %v15,%v17 ++.*: e7 f1 00 bc d4 c5 [ ]*vflr %v15,%v17,13,12,11 ++.*: e7 f1 00 cd 34 c5 [ ]*wflrd %v15,%v17,5,12 ++.*: e7 f1 00 cd 34 c5 [ ]*wflrd %v15,%v17,5,12 ++.*: e7 f1 00 cd 44 c5 [ ]*wflrx %v15,%v17,5,12 ++.*: e7 f1 40 bc d6 ef [ ]*vfmax %v15,%v17,%v20,13,12,11 ++.*: e7 f1 40 d0 26 ef [ ]*vfmaxsb %v15,%v17,%v20,13 ++.*: e7 f1 40 d0 36 ef [ ]*vfmaxdb %v15,%v17,%v20,13 ++.*: e7 f1 40 d8 26 ef [ ]*wfmaxsb %v15,%v17,%v20,13 ++.*: e7 f1 40 d8 36 ef [ ]*wfmaxdb %v15,%v17,%v20,13 ++.*: e7 f1 40 d8 46 ef [ ]*wfmaxxb %v15,%v17,%v20,13 ++.*: e7 f1 40 bc d6 ee [ ]*vfmin %v15,%v17,%v20,13,12,11 ++.*: e7 f1 40 d0 26 ee [ ]*vfminsb %v15,%v17,%v20,13 ++.*: e7 f1 40 d0 36 ee [ ]*vfmindb %v15,%v17,%v20,13 ++.*: e7 f1 40 d8 26 ee [ ]*wfminsb %v15,%v17,%v20,13 ++.*: e7 f1 40 d8 36 ee [ ]*wfmindb %v15,%v17,%v20,13 ++.*: e7 f1 40 d8 46 ee [ ]*wfminxb %v15,%v17,%v20,13 ++.*: e7 f1 40 00 26 e7 [ ]*vfmsb %v15,%v17,%v20 ++.*: e7 f1 40 08 26 e7 [ ]*wfmsb %v15,%v17,%v20 ++.*: e7 f1 40 08 46 e7 [ ]*wfmxb %v15,%v17,%v20 ++.*: e7 f1 42 00 87 8f [ ]*vfmasb %v15,%v17,%v20,%v24 ++.*: e7 f1 42 08 87 8f [ ]*wfmasb %v15,%v17,%v20,%v24 ++.*: e7 f1 44 08 87 8f [ ]*wfmaxb %v15,%v17,%v20,%v24 ++.*: e7 f1 42 00 87 8e [ ]*vfmssb %v15,%v17,%v20,%v24 ++.*: e7 f1 42 08 87 8e [ ]*wfmssb %v15,%v17,%v20,%v24 ++.*: e7 f1 44 08 87 8e [ ]*wfmsxb %v15,%v17,%v20,%v24 ++.*: e7 f1 4c 0d 87 9f [ ]*vfnma %v15,%v17,%v20,%v24,13,12 ++.*: e7 f1 42 00 87 9f [ ]*vfnmasb %v15,%v17,%v20,%v24 ++.*: e7 f1 42 08 87 9f [ ]*wfnmasb %v15,%v17,%v20,%v24 ++.*: e7 f1 43 00 87 9f [ ]*vfnmadb %v15,%v17,%v20,%v24 ++.*: e7 f1 43 08 87 9f [ ]*wfnmadb %v15,%v17,%v20,%v24 ++.*: e7 f1 44 08 87 9f [ ]*wfnmaxb %v15,%v17,%v20,%v24 ++.*: e7 f1 4c 0d 87 9e [ ]*vfnms %v15,%v17,%v20,%v24,13,12 ++.*: e7 f1 42 00 87 9e [ ]*vfnmssb %v15,%v17,%v20,%v24 ++.*: e7 f1 42 08 87 9e [ ]*wfnmssb %v15,%v17,%v20,%v24 ++.*: e7 f1 43 00 87 9e [ ]*vfnmsdb %v15,%v17,%v20,%v24 ++.*: e7 f1 43 08 87 9e [ ]*wfnmsdb %v15,%v17,%v20,%v24 ++.*: e7 f1 44 08 87 9e [ ]*wfnmsxb %v15,%v17,%v20,%v24 ++.*: e7 f1 00 d0 24 cc [ ]*vfpsosb %v15,%v17,13 ++.*: e7 f1 00 d8 24 cc [ ]*wfpsosb %v15,%v17,13 ++.*: e7 f1 00 00 24 cc [ ]*vflcsb %v15,%v17 ++.*: e7 f1 00 08 24 cc [ ]*wflcsb %v15,%v17 ++.*: e7 f1 00 10 24 cc [ ]*vflnsb %v15,%v17 ++.*: e7 f1 00 18 24 cc [ ]*wflnsb %v15,%v17 ++.*: e7 f1 00 20 24 cc [ ]*vflpsb %v15,%v17 ++.*: e7 f1 00 28 24 cc [ ]*wflpsb %v15,%v17 ++.*: e7 f1 00 d8 44 cc [ ]*wfpsoxb %v15,%v17,13 ++.*: e7 f1 00 08 44 cc [ ]*wflcxb %v15,%v17 ++.*: e7 f1 00 18 44 cc [ ]*wflnxb %v15,%v17 ++.*: e7 f1 00 28 44 cc [ ]*wflpxb %v15,%v17 ++.*: e7 f1 00 00 24 ce [ ]*vfsqsb %v15,%v17 ++.*: e7 f1 00 08 24 ce [ ]*wfsqsb %v15,%v17 ++.*: e7 f1 00 08 44 ce [ ]*wfsqxb %v15,%v17 ++.*: e7 f1 40 00 26 e2 [ ]*vfssb %v15,%v17,%v20 ++.*: e7 f1 40 08 26 e2 [ ]*wfssb %v15,%v17,%v20 ++.*: e7 f1 40 08 46 e2 [ ]*wfsxb %v15,%v17,%v20 ++.*: e7 f1 ff d0 24 4a [ ]*vftcisb %v15,%v17,4093 ++.*: e7 f1 ff d8 24 4a [ ]*wftcisb %v15,%v17,4093 ++.*: e7 f1 ff d8 44 4a [ ]*wftcixb %v15,%v17,4093 ++.*: e3 69 b8 f0 fd 38 [ ]*agh %r6,-10000\(%r9,%r11\) ++.*: e3 d6 98 f0 fd 47 [ ]*binh -10000\(%r6,%r9\) ++.*: e3 f6 98 f0 fd 47 [ ]*bi -10000\(%r6,%r9\) ++.*: e3 16 98 f0 fd 47 [ ]*bio -10000\(%r6,%r9\) ++.*: e3 26 98 f0 fd 47 [ ]*bih -10000\(%r6,%r9\) ++.*: e3 26 98 f0 fd 47 [ ]*bih -10000\(%r6,%r9\) ++.*: e3 36 98 f0 fd 47 [ ]*binle -10000\(%r6,%r9\) ++.*: e3 46 98 f0 fd 47 [ ]*bil -10000\(%r6,%r9\) ++.*: e3 46 98 f0 fd 47 [ ]*bil -10000\(%r6,%r9\) ++.*: e3 56 98 f0 fd 47 [ ]*binhe -10000\(%r6,%r9\) ++.*: e3 66 98 f0 fd 47 [ ]*bilh -10000\(%r6,%r9\) ++.*: e3 76 98 f0 fd 47 [ ]*bine -10000\(%r6,%r9\) ++.*: e3 76 98 f0 fd 47 [ ]*bine -10000\(%r6,%r9\) ++.*: e3 86 98 f0 fd 47 [ ]*bie -10000\(%r6,%r9\) ++.*: e3 86 98 f0 fd 47 [ ]*bie -10000\(%r6,%r9\) ++.*: e3 96 98 f0 fd 47 [ ]*binlh -10000\(%r6,%r9\) ++.*: e3 a6 98 f0 fd 47 [ ]*bihe -10000\(%r6,%r9\) ++.*: e3 b6 98 f0 fd 47 [ ]*binl -10000\(%r6,%r9\) ++.*: e3 b6 98 f0 fd 47 [ ]*binl -10000\(%r6,%r9\) ++.*: e3 c6 98 f0 fd 47 [ ]*bile -10000\(%r6,%r9\) ++.*: e3 d6 98 f0 fd 47 [ ]*binh -10000\(%r6,%r9\) ++.*: e3 d6 98 f0 fd 47 [ ]*binh -10000\(%r6,%r9\) ++.*: e3 e6 98 f0 fd 47 [ ]*bino -10000\(%r6,%r9\) ++.*: b9 ec b0 69 [ ]*mgrk %r6,%r9,%r11 ++.*: e3 69 b8 f0 fd 84 [ ]*mg %r6,-10000\(%r9,%r11\) ++.*: e3 69 b8 f0 fd 3c [ ]*mgh %r6,-10000\(%r9,%r11\) ++.*: b9 fd b0 69 [ ]*msrkc %r6,%r9,%r11 ++.*: b9 ed b0 69 [ ]*msgrkc %r6,%r9,%r11 ++.*: e3 69 b8 f0 fd 53 [ ]*msc %r6,-10000\(%r9,%r11\) ++.*: e3 69 b8 f0 fd 83 [ ]*msgc %r6,-10000\(%r9,%r11\) ++.*: e3 69 b8 f0 fd 39 [ ]*sgh %r6,-10000\(%r9,%r11\) ++.*: e6 06 9f a0 f0 37 [ ]*vlrlr %v15,%r6,4000\(%r9\) ++.*: e6 fd 6f a0 f0 35 [ ]*vlrl %v15,4000\(%r6\),253 ++.*: e6 06 9f a0 f0 3f [ ]*vstrlr %v15,%r6,4000\(%r9\) ++.*: e6 fd 6f a0 f0 3d [ ]*vstrl %v15,4000\(%r6\),253 ++.*: e6 f1 40 cf d6 71 [ ]*vap %v15,%v17,%v20,253,12 ++.*: e6 0f 10 d0 02 77 [ ]*vcp %v15,%v17,13 ++.*: e6 6f 00 d0 00 50 [ ]*vcvb %r6,%v15,13 ++.*: e6 6f 00 d0 00 52 [ ]*vcvbg %r6,%v15,13 ++.*: e6 f6 00 cf d0 58 [ ]*vcvd %v15,%r6,253,12 ++.*: e6 f6 00 cf d0 5a [ ]*vcvdg %v15,%r6,253,12 ++.*: e6 f1 40 cf d6 7a [ ]*vdp %v15,%v17,%v20,253,12 ++.*: e6 f0 ff fd c0 49 [ ]*vlip %v15,65533,12 ++.*: e6 f1 40 cf d6 78 [ ]*vmp %v15,%v17,%v20,253,12 ++.*: e6 f1 40 cf d6 79 [ ]*vmsp %v15,%v17,%v20,253,12 ++.*: e6 fd 6f a0 f0 34 [ ]*vpkz %v15,4000\(%r6\),253 ++.*: e6 f1 fc bf d4 5b [ ]*vpsop %v15,%v17,253,252,11 ++.*: e6 f1 40 cf d6 7b [ ]*vrp %v15,%v17,%v20,253,12 ++.*: e6 f1 40 cf d6 7e [ ]*vsdp %v15,%v17,%v20,253,12 ++.*: e6 f1 fc bf d4 59 [ ]*vsrp %v15,%v17,253,252,11 ++.*: e6 f1 40 cf d6 73 [ ]*vsp %v15,%v17,%v20,253,12 ++.*: e6 0f 00 00 00 5f [ ]*vtp %v15 ++.*: e6 fd 6f a0 f0 3c [ ]*vupkz %v15,4000\(%r6\),253 ++.*: e3 69 b8 f0 fd 4c [ ]*lgg %r6,-10000\(%r9,%r11\) ++.*: e3 69 b8 f0 fd 48 [ ]*llgfsg %r6,-10000\(%r9,%r11\) ++.*: e3 69 b8 f0 fd 4d [ ]*lgsc %r6,-10000\(%r9,%r11\) ++.*: e3 69 b8 f0 fd 49 [ ]*stgsc %r6,-10000\(%r9,%r11\) ++.*: b9 29 90 6b [ ]*kma %r6,%r9,%r11 +diff --git a/gas/testsuite/gas/s390/zarch-arch12.s b/gas/testsuite/gas/s390/zarch-arch12.s +new file mode 100644 +index 0000000..6ebd2fd +--- /dev/null ++++ b/gas/testsuite/gas/s390/zarch-arch12.s +@@ -0,0 +1,194 @@ ++.text ++foo: ++ vbperm %v15,%v17,%v20 ++ vllezlf %v15,4000(%r6,%r9) ++ vmsl %v15,%v17,%v20,%v24,13,12 ++ vmslg %v15,%v17,%v20,%v24,13 ++ vnx %v15,%v17,%v20 ++ vnn %v15,%v17,%v20 ++ voc %v15,%v17,%v20 ++ vpopctb %v15,%v17 ++ vpopcth %v15,%v17 ++ vpopctf %v15,%v17 ++ vpopctg %v15,%v17 ++ vfasb %v15,%v17,%v20 ++ wfasb %v15,%v17,%v20 ++ wfaxb %v15,%v17,%v20 ++ wfcsb %v15,%v17 ++ wfcxb %v15,%v17 ++ wfksb %v15,%v17 ++ wfkxb %v15,%v17 ++ vfcesb %v15,%v17,%v20 ++ vfcesbs %v15,%v17,%v20 ++ wfcesb %v15,%v17,%v20 ++ wfcesbs %v15,%v17,%v20 ++ wfcexb %v15,%v17,%v20 ++ wfcexbs %v15,%v17,%v20 ++ vfkesb %v15,%v17,%v20 ++ vfkesbs %v15,%v17,%v20 ++ wfkesb %v15,%v17,%v20 ++ wfkesbs %v15,%v17,%v20 ++ vfkedb %v15,%v17,%v20 ++ vfkedbs %v15,%v17,%v20 ++ wfkedb %v15,%v17,%v20 ++ wfkedbs %v15,%v17,%v20 ++ wfkexb %v15,%v17,%v20 ++ wfkexbs %v15,%v17,%v20 ++ vfchsb %v15,%v17,%v20 ++ vfchsbs %v15,%v17,%v20 ++ wfchsb %v15,%v17,%v20 ++ wfchsbs %v15,%v17,%v20 ++ wfchxb %v15,%v17,%v20 ++ wfchxbs %v15,%v17,%v20 ++ vfkhsb %v15,%v17,%v20 ++ vfkhsbs %v15,%v17,%v20 ++ wfkhsb %v15,%v17,%v20 ++ wfkhsbs %v15,%v17,%v20 ++ vfkhdb %v15,%v17,%v20 ++ vfkhdbs %v15,%v17,%v20 ++ wfkhdb %v15,%v17,%v20 ++ wfkhdbs %v15,%v17,%v20 ++ wfkhxb %v15,%v17,%v20 ++ wfkhxbs %v15,%v17,%v20 ++ vfchesb %v15,%v17,%v20 ++ vfchesbs %v15,%v17,%v20 ++ wfchesb %v15,%v17,%v20 ++ wfchesbs %v15,%v17,%v20 ++ wfchexb %v15,%v17,%v20 ++ wfchexbs %v15,%v17,%v20 ++ vfkhesb %v15,%v17,%v20 ++ vfkhesbs %v15,%v17,%v20 ++ wfkhesb %v15,%v17,%v20 ++ wfkhesbs %v15,%v17,%v20 ++ vfkhedb %v15,%v17,%v20 ++ vfkhedbs %v15,%v17,%v20 ++ wfkhedb %v15,%v17,%v20 ++ wfkhedbs %v15,%v17,%v20 ++ wfkhexb %v15,%v17,%v20 ++ wfkhexbs %v15,%v17,%v20 ++ vfdsb %v15,%v17,%v20 ++ wfdsb %v15,%v17,%v20 ++ wfdxb %v15,%v17,%v20 ++ vfisb %v15,%v17,13,12 ++ wfisb %v15,%v17,13,12 ++ wfixb %v15,%v17,13,12 ++ vfll %v15,%v17,13,12 ++ vflls %v15,%v17 ++ wflls %v15,%v17 ++ wflld %v15,%v17 ++ vflr %v15,%v17,13,12,11 ++ vflrd %v15,%v17,13,12 ++ wflrd %v15,%v17,13,12 ++ wflrx %v15,%v17,13,12 ++ vfmax %v15,%v17,%v20,13,12,11 ++ vfmaxsb %v15,%v17,%v20,13 ++ vfmaxdb %v15,%v17,%v20,13 ++ wfmaxsb %v15,%v17,%v20,13 ++ wfmaxdb %v15,%v17,%v20,13 ++ wfmaxxb %v15,%v17,%v20,13 ++ vfmin %v15,%v17,%v20,13,12,11 ++ vfminsb %v15,%v17,%v20,13 ++ vfmindb %v15,%v17,%v20,13 ++ wfminsb %v15,%v17,%v20,13 ++ wfmindb %v15,%v17,%v20,13 ++ wfminxb %v15,%v17,%v20,13 ++ vfmsb %v15,%v17,%v20 ++ wfmsb %v15,%v17,%v20 ++ wfmxb %v15,%v17,%v20 ++ vfmasb %v15,%v17,%v20,%v24 ++ wfmasb %v15,%v17,%v20,%v24 ++ wfmaxb %v15,%v17,%v20,%v24 ++ vfmssb %v15,%v17,%v20,%v24 ++ wfmssb %v15,%v17,%v20,%v24 ++ wfmsxb %v15,%v17,%v20,%v24 ++ vfnma %v15,%v17,%v20,%v24,13,12 ++ vfnmasb %v15,%v17,%v20,%v24 ++ wfnmasb %v15,%v17,%v20,%v24 ++ vfnmadb %v15,%v17,%v20,%v24 ++ wfnmadb %v15,%v17,%v20,%v24 ++ wfnmaxb %v15,%v17,%v20,%v24 ++ vfnms %v15,%v17,%v20,%v24,13,12 ++ vfnmssb %v15,%v17,%v20,%v24 ++ wfnmssb %v15,%v17,%v20,%v24 ++ vfnmsdb %v15,%v17,%v20,%v24 ++ wfnmsdb %v15,%v17,%v20,%v24 ++ wfnmsxb %v15,%v17,%v20,%v24 ++ vfpsosb %v15,%v17,13 ++ wfpsosb %v15,%v17,13 ++ vflcsb %v15,%v17 ++ wflcsb %v15,%v17 ++ vflnsb %v15,%v17 ++ wflnsb %v15,%v17 ++ vflpsb %v15,%v17 ++ wflpsb %v15,%v17 ++ wfpsoxb %v15,%v17,13 ++ wflcxb %v15,%v17 ++ wflnxb %v15,%v17 ++ wflpxb %v15,%v17 ++ vfsqsb %v15,%v17 ++ wfsqsb %v15,%v17 ++ wfsqxb %v15,%v17 ++ vfssb %v15,%v17,%v20 ++ wfssb %v15,%v17,%v20 ++ wfsxb %v15,%v17,%v20 ++ vftcisb %v15,%v17,4093 ++ wftcisb %v15,%v17,4093 ++ wftcixb %v15,%v17,4093 ++ agh %r6,-10000(%r9,%r11) ++ bic 13,-10000(%r6,%r9) ++ bi -10000(%r6,%r9) ++ bio -10000(%r6,%r9) ++ bih -10000(%r6,%r9) ++ bip -10000(%r6,%r9) ++ binle -10000(%r6,%r9) ++ bil -10000(%r6,%r9) ++ bim -10000(%r6,%r9) ++ binhe -10000(%r6,%r9) ++ bilh -10000(%r6,%r9) ++ bine -10000(%r6,%r9) ++ binz -10000(%r6,%r9) ++ bie -10000(%r6,%r9) ++ biz -10000(%r6,%r9) ++ binlh -10000(%r6,%r9) ++ bihe -10000(%r6,%r9) ++ binl -10000(%r6,%r9) ++ binm -10000(%r6,%r9) ++ bile -10000(%r6,%r9) ++ binh -10000(%r6,%r9) ++ binp -10000(%r6,%r9) ++ bino -10000(%r6,%r9) ++ mgrk %r6,%r9,%r11 ++ mg %r6,-10000(%r9,%r11) ++ mgh %r6,-10000(%r9,%r11) ++ msrkc %r6,%r9,%r11 ++ msgrkc %r6,%r9,%r11 ++ msc %r6,-10000(%r9,%r11) ++ msgc %r6,-10000(%r9,%r11) ++ sgh %r6,-10000(%r9,%r11) ++ vlrlr %v15,%r6,4000(%r9) ++ vlrl %v15,4000(%r6),253 ++ vstrlr %v15,%r6,4000(%r9) ++ vstrl %v15,4000(%r6),253 ++ vap %v15,%v17,%v20,253,12 ++ vcp %v15,%v17,13 ++ vcvb %r6,%v15,13 ++ vcvbg %r6,%v15,13 ++ vcvd %v15,%r6,253,12 ++ vcvdg %v15,%r6,253,12 ++ vdp %v15,%v17,%v20,253,12 ++ vlip %v15,65533,12 ++ vmp %v15,%v17,%v20,253,12 ++ vmsp %v15,%v17,%v20,253,12 ++ vpkz %v15,4000(%r6),253 ++ vpsop %v15,%v17,253,252,11 ++ vrp %v15,%v17,%v20,253,12 ++ vsdp %v15,%v17,%v20,253,12 ++ vsrp %v15,%v17,253,252,11 ++ vsp %v15,%v17,%v20,253,12 ++ vtp %v15 ++ vupkz %v15,4000(%r6),253 ++ lgg %r6,-10000(%r9,%r11) ++ llgfsg %r6,-10000(%r9,%r11) ++ lgsc %r6,-10000(%r9,%r11) ++ stgsc %r6,-10000(%r9,%r11) ++ kma %r6,%r9,%r11 +diff -rup binutils.orig/gas/testsuite/gas/s390/zarch-z13.d binutils-2.27/gas/testsuite/gas/s390/zarch-z13.d +--- binutils.orig/gas/testsuite/gas/s390/zarch-z13.d 2017-03-24 14:50:54.052789212 +0000 ++++ binutils-2.27/gas/testsuite/gas/s390/zarch-z13.d 2017-03-24 14:54:05.065330554 +0000 +@@ -513,12 +513,12 @@ Disassembly of section .text: + .*: e7 f1 00 bc d4 c7 [ ]*vfi %v15,%v17,13,12,11 + .*: e7 f1 00 cd 34 c7 [ ]*wfidb %v15,%v17,5,12 + .*: e7 f1 00 cd 34 c7 [ ]*wfidb %v15,%v17,5,12 +-.*: e7 f1 00 0c d4 c4 [ ]*vlde %v15,%v17,13,12 +-.*: e7 f1 00 00 24 c4 [ ]*vldeb %v15,%v17 +-.*: e7 f1 00 08 24 c4 [ ]*wldeb %v15,%v17 +-.*: e7 f1 00 bc d4 c5 [ ]*vled %v15,%v17,13,12,11 +-.*: e7 f1 00 cd 34 c5 [ ]*wledb %v15,%v17,5,12 +-.*: e7 f1 00 cd 34 c5 [ ]*wledb %v15,%v17,5,12 ++.*: e7 f1 00 0c d4 c4 [ ]*vfll %v15,%v17,13,12 ++.*: e7 f1 00 00 24 c4 [ ]*vflls %v15,%v17 ++.*: e7 f1 00 08 24 c4 [ ]*wflls %v15,%v17 ++.*: e7 f1 00 bc d4 c5 [ ]*vflr %v15,%v17,13,12,11 ++.*: e7 f1 00 cd 34 c5 [ ]*wflrd %v15,%v17,5,12 ++.*: e7 f1 00 cd 34 c5 [ ]*wflrd %v15,%v17,5,12 + .*: e7 f1 40 0c d6 e7 [ ]*vfm %v15,%v17,%v20,13,12 + .*: e7 f1 40 00 36 e7 [ ]*vfmdb %v15,%v17,%v20 + .*: e7 f1 40 08 36 e7 [ ]*wfmdb %v15,%v17,%v20 +diff -rup binutils.orig/include/opcode/s390.h binutils-2.27/include/opcode/s390.h +--- binutils.orig/include/opcode/s390.h 2017-03-24 14:51:01.896688195 +0000 ++++ binutils-2.27/include/opcode/s390.h 2017-03-24 14:54:05.065330554 +0000 +@@ -42,14 +42,17 @@ enum s390_opcode_cpu_val + S390_OPCODE_Z196, + S390_OPCODE_ZEC12, + S390_OPCODE_Z13, ++ S390_OPCODE_ARCH12, + S390_OPCODE_MAXCPU + }; + + /* Instruction specific flags. */ + #define S390_INSTR_FLAG_OPTPARM 0x1 ++ + #define S390_INSTR_FLAG_HTM 0x2 + #define S390_INSTR_FLAG_VX 0x4 +-#define S390_INSTR_FLAG_FACILITY_MASK 0x6 ++#define S390_INSTR_FLAG_VX2 0x8 ++#define S390_INSTR_FLAG_FACILITY_MASK 0xe + + /* The opcode table is an array of struct s390_opcode. */ + +diff -rup binutils.orig/opcodes/s390-mkopc.c binutils-2.27/opcodes/s390-mkopc.c +--- binutils.orig/opcodes/s390-mkopc.c 2017-03-24 14:50:54.849778948 +0000 ++++ binutils-2.27/opcodes/s390-mkopc.c 2017-03-24 14:54:05.065330554 +0000 +@@ -366,6 +366,8 @@ main (void) + min_cpu = S390_OPCODE_ZEC12; + else if (strcmp (cpu_string, "z13") == 0) + min_cpu = S390_OPCODE_Z13; ++ else if (strcmp (cpu_string, "arch12") == 0) ++ min_cpu = S390_OPCODE_ARCH12; + else { + fprintf (stderr, "Couldn't parse cpu string %s\n", cpu_string); + exit (1); +@@ -409,6 +411,10 @@ main (void) + && (str[2] == 0 || str[2] == ',')) { + flag_bits |= S390_INSTR_FLAG_VX; + str += 2; ++ } else if (strncmp (str, "vx2", 3) == 0 ++ && (str[3] == 0 || str[3] == ',')) { ++ flag_bits |= S390_INSTR_FLAG_VX2; ++ str += 3; + } else { + fprintf (stderr, "Couldn't parse flags string %s\n", + flags_string); +diff -rup binutils.orig/opcodes/s390-opc.c binutils-2.27/opcodes/s390-opc.c +--- binutils.orig/opcodes/s390-opc.c 2017-03-24 14:50:54.850778935 +0000 ++++ binutils-2.27/opcodes/s390-opc.c 2017-03-24 14:54:05.065330554 +0000 +@@ -220,28 +220,30 @@ const struct s390_operand s390_operands[ + { 8, 16, 0 }, + #define U8_24 69 /* 8 bit unsigned value starting at 24 */ + { 8, 24, 0 }, +-#define U8_32 70 /* 8 bit unsigned value starting at 32 */ ++#define U8_28 70 /* 8 bit unsigned value starting at 28 */ ++ { 8, 28, 0 }, ++#define U8_32 71 /* 8 bit unsigned value starting at 32 */ + { 8, 32, 0 }, +-#define U12_16 71 /* 12 bit unsigned value starting at 16 */ ++#define U12_16 72 /* 12 bit unsigned value starting at 16 */ + { 12, 16, 0 }, +-#define U16_16 72 /* 16 bit unsigned value starting at 16 */ ++#define U16_16 73 /* 16 bit unsigned value starting at 16 */ + { 16, 16, 0 }, +-#define U16_32 73 /* 16 bit unsigned value starting at 32 */ ++#define U16_32 74 /* 16 bit unsigned value starting at 32 */ + { 16, 32, 0 }, +-#define U32_16 74 /* 32 bit unsigned value starting at 16 */ ++#define U32_16 75 /* 32 bit unsigned value starting at 16 */ + { 32, 16, 0 }, + + /* PC-relative address operands. */ + +-#define J12_12 75 /* 12 bit PC relative offset at 12 */ ++#define J12_12 76 /* 12 bit PC relative offset at 12 */ + { 12, 12, S390_OPERAND_PCREL }, +-#define J16_16 76 /* 16 bit PC relative offset at 16 */ ++#define J16_16 77 /* 16 bit PC relative offset at 16 */ + { 16, 16, S390_OPERAND_PCREL }, +-#define J16_32 77 /* 16 bit PC relative offset at 32 */ ++#define J16_32 78 /* 16 bit PC relative offset at 32 */ + { 16, 32, S390_OPERAND_PCREL }, +-#define J24_24 78 /* 24 bit PC relative offset at 24 */ ++#define J24_24 79 /* 24 bit PC relative offset at 24 */ + { 24, 24, S390_OPERAND_PCREL }, +-#define J32_16 79 /* 32 bit PC relative offset at 16 */ ++#define J32_16 80 /* 32 bit PC relative offset at 16 */ + { 32, 16, S390_OPERAND_PCREL }, + + }; +@@ -425,6 +427,7 @@ const struct s390_operand s390_operands[ + #define INSTR_RXY_RERRD 6, { RE_8,D20_20,X_12,B_16,0,0 } /* e.g. dsg */ + #define INSTR_RXY_FRRD 6, { F_8,D20_20,X_12,B_16,0,0 } /* e.g. ley */ + #define INSTR_RXY_URRD 6, { U4_8,D20_20,X_12,B_16,0,0 } /* e.g. pfd */ ++#define INSTR_RXY_0RRD 6, { D20_20,X_12,B_16,0,0 } /* e.g. bic */ + #define INSTR_RX_0RRD 4, { D_20,X_12,B_16,0,0,0 } /* e.g. be */ + #define INSTR_RX_FRRD 4, { F_8,D_20,X_12,B_16,0,0 } /* e.g. ae */ + #define INSTR_RX_FERRD 4, { FE_8,D_20,X_12,B_16,0,0 } /* e.g. mxd */ +@@ -454,23 +457,29 @@ const struct s390_operand s390_operands[ + #define INSTR_VRI_V 6, { V_8,0,0,0,0,0 } /* e.g. vzero */ + #define INSTR_VRI_V0UUU 6, { V_8,U8_16,U8_24,U4_32,0,0 } /* e.g. vgm */ + #define INSTR_VRI_V0UU 6, { V_8,U8_16,U8_24,0,0,0 } /* e.g. vgmb */ ++#define INSTR_VRI_V0UU2 6, { V_8,U16_16,U4_32,0,0,0 } /* e.g. vlip */ + #define INSTR_VRI_VVUU 6, { V_8,V_12,U16_16,U4_32,0,0 } /* e.g. vrep */ + #define INSTR_VRI_VVU 6, { V_8,V_12,U16_16,0,0,0 } /* e.g. vrepb */ + #define INSTR_VRI_VVU2 6, { V_8,V_12,U12_16,0,0,0 } /* e.g. vftcidb */ + #define INSTR_VRI_V0IU 6, { V_8,I16_16,U4_32,0,0,0 } /* e.g. vrepi */ + #define INSTR_VRI_V0I 6, { V_8,I16_16,0,0,0,0 } /* e.g. vrepib */ + #define INSTR_VRI_VVV0UU 6, { V_8,V_12,V_16,U8_24,U4_32,0 } /* e.g. verim */ ++#define INSTR_VRI_VVV0UU2 6, { V_8,V_12,V_16,U8_28,U4_24,0 } /* e.g. vap */ + #define INSTR_VRI_VVV0U 6, { V_8,V_12,V_16,U8_24,0,0 } /* e.g. verimb*/ + #define INSTR_VRI_VVUUU 6, { V_8,V_12,U12_16,U4_32,U4_28,0 } /* e.g. vftci */ ++#define INSTR_VRI_VVUUU2 6, { V_8,V_12,U8_28,U8_16,U4_24,0 } /* e.g. vpsop */ ++#define INSTR_VRI_VR0UU 6, { V_8,R_12,U8_28,U4_24,0,0 } /* e.g. vcvd */ + #define INSTR_VRX_VRRD 6, { V_8,D_20,X_12,B_16,0,0 } /* e.g. vl */ + #define INSTR_VRX_VV 6, { V_8,V_12,0,0,0,0 } /* e.g. vlr */ +-#define INSTR_VRX_VRRDU 6, { V_8,D_20,X_12,B_16,U4_32,0 } /* e.g. vlrp */ ++#define INSTR_VRX_VRRDU 6, { V_8,D_20,X_12,B_16,U4_32,0 } /* e.g. vlrep */ + #define INSTR_VRS_RVRDU 6, { R_8,V_12,D_20,B_16,U4_32,0 } /* e.g. vlgv */ + #define INSTR_VRS_RVRD 6, { R_8,V_12,D_20,B_16,0,0 } /* e.g. vlgvb */ + #define INSTR_VRS_VVRDU 6, { V_8,V_12,D_20,B_16,U4_32,0 } /* e.g. verll */ + #define INSTR_VRS_VVRD 6, { V_8,V_12,D_20,B_16,0,0 } /* e.g. vlm */ + #define INSTR_VRS_VRRDU 6, { V_8,R_12,D_20,B_16,U4_32,0 } /* e.g. vlvg */ + #define INSTR_VRS_VRRD 6, { V_8,R_12,D_20,B_16,0,0 } /* e.g. vlvgb */ ++#define INSTR_VRS_RRDV 6, { V_32,R_12,D_20,B_16,0,0 } /* e.g. vlrlr */ ++#define INSTR_VRR_0V 6, { V_12,0,0,0,0,0 } /* e.g. vtp */ + #define INSTR_VRR_VRR 6, { V_8,R_12,R_16,0,0,0 } /* e.g. vlvgp */ + #define INSTR_VRR_VVV0U 6, { V_8,V_12,V_16,U4_32,0,0 } /* e.g. vmrh */ + #define INSTR_VRR_VVV0U0 6, { V_8,V_12,V_16,U4_24,0,0 } /* e.g. vfaeb */ +@@ -499,6 +508,9 @@ const struct s390_operand s390_operands[ + #define INSTR_VRR_VV0UUU 6, { V_8,V_12,U4_32,U4_28,U4_24,0 } /* e.g. vcdg */ + #define INSTR_VRR_VVVU0UV 6, { V_8,V_12,V_16,V_32,U4_28,U4_20 } /* e.g. vfma */ + #define INSTR_VRR_VV0U0U 6, { V_8,V_12,U4_32,U4_24,0,0 } /* e.g. vistr */ ++#define INSTR_VRR_0VV0U 6, { V_12,V_16,U4_24,0,0,0 } /* e.g. vcp */ ++#define INSTR_VRR_RV0U 6, { R_8,V_12,U4_24,0,0,0 } /* e.g. vcvb */ ++#define INSTR_VSI_URDV 6, { V_32,D_20,B_16,U8_8,0,0 } /* e.g. vlrl */ + + #define MASK_E { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 } + #define MASK_IE_UU { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 } +@@ -631,6 +643,7 @@ const struct s390_operand s390_operands[ + #define MASK_RXY_RERRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff } + #define MASK_RXY_FRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff } + #define MASK_RXY_URRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff } ++#define MASK_RXY_0RRD { 0xff, 0xf0, 0x00, 0x00, 0x00, 0xff } + #define MASK_RX_0RRD { 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00 } + #define MASK_RX_FRRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 } + #define MASK_RX_FERRD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 } +@@ -660,14 +673,18 @@ const struct s390_operand s390_operands[ + #define MASK_VRI_V { 0xff, 0x0f, 0xff, 0xff, 0xf0, 0xff } + #define MASK_VRI_V0UUU { 0xff, 0x0f, 0x00, 0x00, 0x00, 0xff } + #define MASK_VRI_V0UU { 0xff, 0x0f, 0x00, 0x00, 0xf0, 0xff } ++#define MASK_VRI_V0UU2 { 0xff, 0x0f, 0x00, 0x00, 0x00, 0xff } + #define MASK_VRI_VVUU { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff } + #define MASK_VRI_VVU { 0xff, 0x00, 0x00, 0x00, 0xf0, 0xff } + #define MASK_VRI_VVU2 { 0xff, 0x00, 0x00, 0x0f, 0xf0, 0xff } + #define MASK_VRI_V0IU { 0xff, 0x0f, 0x00, 0x00, 0x00, 0xff } + #define MASK_VRI_V0I { 0xff, 0x0f, 0x00, 0x00, 0xf0, 0xff } + #define MASK_VRI_VVV0UU { 0xff, 0x00, 0x0f, 0x00, 0x00, 0xff } ++#define MASK_VRI_VVV0UU2 { 0xff, 0x00, 0x0f, 0x00, 0x00, 0xff } + #define MASK_VRI_VVV0U { 0xff, 0x00, 0x0f, 0x00, 0xf0, 0xff } + #define MASK_VRI_VVUUU { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff } ++#define MASK_VRI_VVUUU2 { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff } ++#define MASK_VRI_VR0UU { 0xff, 0x00, 0xff, 0x00, 0x00, 0xff } + #define MASK_VRX_VRRD { 0xff, 0x00, 0x00, 0x00, 0xf0, 0xff } + #define MASK_VRX_VV { 0xff, 0x00, 0xff, 0xff, 0xf0, 0xff } + #define MASK_VRX_VRRDU { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff } +@@ -677,6 +694,8 @@ const struct s390_operand s390_operands[ + #define MASK_VRS_VVRD { 0xff, 0x00, 0x00, 0x00, 0xf0, 0xff } + #define MASK_VRS_VRRDU { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff } + #define MASK_VRS_VRRD { 0xff, 0x00, 0x00, 0x00, 0xf0, 0xff } ++#define MASK_VRS_RRDV { 0xff, 0xf0, 0x00, 0x00, 0x00, 0xff } ++#define MASK_VRR_0V { 0xff, 0xf0, 0xff, 0xff, 0xf0, 0xff } + #define MASK_VRR_VRR { 0xff, 0x00, 0x0f, 0xff, 0xf0, 0xff } + #define MASK_VRR_VVV0U { 0xff, 0x00, 0x0f, 0xff, 0x00, 0xff } + #define MASK_VRR_VVV0U0 { 0xff, 0x00, 0x0f, 0x0f, 0xf0, 0xff } +@@ -705,36 +724,46 @@ const struct s390_operand s390_operands[ + #define MASK_VRR_VV0UUU { 0xff, 0x00, 0xff, 0x00, 0x00, 0xff } + #define MASK_VRR_VVVU0UV { 0xff, 0x00, 0x00, 0xf0, 0x00, 0xff } + #define MASK_VRR_VV0U0U { 0xff, 0x00, 0xff, 0x0f, 0x00, 0xff } ++#define MASK_VRR_0VV0U { 0xff, 0xf0, 0x0f, 0x0f, 0xf0, 0xff } ++#define MASK_VRR_RV0U { 0xff, 0x00, 0xff, 0x0f, 0xf0, 0xff } ++#define MASK_VSI_URDV { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff } ++ + + /* The opcode formats table (blueprints for .insn pseudo mnemonic). */ + + const struct s390_opcode s390_opformats[] = + { +- { "e", OP8(0x00LL), MASK_E, INSTR_E, 3, 0 ,0 }, +- { "ri", OP8(0x00LL), MASK_RI_RI, INSTR_RI_RI, 3, 0 ,0 }, +- { "rie", OP8(0x00LL), MASK_RIE_RRP, INSTR_RIE_RRP, 3, 0 ,0 }, +- { "ril", OP8(0x00LL), MASK_RIL_RP, INSTR_RIL_RP, 3, 0 ,0 }, +- { "rilu", OP8(0x00LL), MASK_RIL_RU, INSTR_RIL_RU, 3, 0 ,0 }, +- { "ris", OP8(0x00LL), MASK_RIS_RURDI, INSTR_RIS_RURDI,3, 6 ,0 }, +- { "rr", OP8(0x00LL), MASK_RR_RR, INSTR_RR_RR, 3, 0 ,0 }, +- { "rre", OP8(0x00LL), MASK_RRE_RR, INSTR_RRE_RR, 3, 0 ,0 }, +- { "rrf", OP8(0x00LL), MASK_RRF_RURR, INSTR_RRF_RURR, 3, 0 ,0 }, +- { "rrs", OP8(0x00LL), MASK_RRS_RRRDU, INSTR_RRS_RRRDU,3, 6 ,0 }, +- { "rs", OP8(0x00LL), MASK_RS_RRRD, INSTR_RS_RRRD, 3, 0 ,0 }, +- { "rse", OP8(0x00LL), MASK_RSE_RRRD, INSTR_RSE_RRRD, 3, 0 ,0 }, +- { "rsi", OP8(0x00LL), MASK_RSI_RRP, INSTR_RSI_RRP, 3, 0 ,0 }, +- { "rsy", OP8(0x00LL), MASK_RSY_RRRD, INSTR_RSY_RRRD, 3, 3 ,0 }, +- { "rx", OP8(0x00LL), MASK_RX_RRRD, INSTR_RX_RRRD, 3, 0 ,0 }, +- { "rxe", OP8(0x00LL), MASK_RXE_RRRD, INSTR_RXE_RRRD, 3, 0 ,0 }, +- { "rxf", OP8(0x00LL), MASK_RXF_RRRDR, INSTR_RXF_RRRDR,3, 0 ,0 }, +- { "rxy", OP8(0x00LL), MASK_RXY_RRRD, INSTR_RXY_RRRD, 3, 3 ,0 }, +- { "s", OP8(0x00LL), MASK_S_RD, INSTR_S_RD, 3, 0 ,0 }, +- { "si", OP8(0x00LL), MASK_SI_URD, INSTR_SI_URD, 3, 0 ,0 }, +- { "siy", OP8(0x00LL), MASK_SIY_URD, INSTR_SIY_URD, 3, 3 ,0 }, +- { "sil", OP8(0x00LL), MASK_SIL_RDI, INSTR_SIL_RDI, 3, 6 ,0 }, +- { "ss", OP8(0x00LL), MASK_SS_RRRDRD, INSTR_SS_RRRDRD,3, 0 ,0 }, +- { "sse", OP8(0x00LL), MASK_SSE_RDRD, INSTR_SSE_RDRD, 3, 0 ,0 }, +- { "ssf", OP8(0x00LL), MASK_SSF_RRDRD, INSTR_SSF_RRDRD,3, 0 ,0 }, ++ { "e", OP8(0x00LL), MASK_E, INSTR_E, 3, 0 ,0 }, ++ { "ri", OP8(0x00LL), MASK_RI_RI, INSTR_RI_RI, 3, 0 ,0 }, ++ { "rie", OP8(0x00LL), MASK_RIE_RRP, INSTR_RIE_RRP, 3, 0 ,0 }, ++ { "ril", OP8(0x00LL), MASK_RIL_RP, INSTR_RIL_RP, 3, 0 ,0 }, ++ { "rilu", OP8(0x00LL), MASK_RIL_RU, INSTR_RIL_RU, 3, 0 ,0 }, ++ { "ris", OP8(0x00LL), MASK_RIS_RURDI, INSTR_RIS_RURDI, 3, 6 ,0 }, ++ { "rr", OP8(0x00LL), MASK_RR_RR, INSTR_RR_RR, 3, 0 ,0 }, ++ { "rre", OP8(0x00LL), MASK_RRE_RR, INSTR_RRE_RR, 3, 0 ,0 }, ++ { "rrf", OP8(0x00LL), MASK_RRF_RURR, INSTR_RRF_RURR, 3, 0 ,0 }, ++ { "rrs", OP8(0x00LL), MASK_RRS_RRRDU, INSTR_RRS_RRRDU, 3, 6 ,0 }, ++ { "rs", OP8(0x00LL), MASK_RS_RRRD, INSTR_RS_RRRD, 3, 0 ,0 }, ++ { "rse", OP8(0x00LL), MASK_RSE_RRRD, INSTR_RSE_RRRD, 3, 0 ,0 }, ++ { "rsi", OP8(0x00LL), MASK_RSI_RRP, INSTR_RSI_RRP, 3, 0 ,0 }, ++ { "rsy", OP8(0x00LL), MASK_RSY_RRRD, INSTR_RSY_RRRD, 3, 3 ,0 }, ++ { "rx", OP8(0x00LL), MASK_RX_RRRD, INSTR_RX_RRRD, 3, 0 ,0 }, ++ { "rxe", OP8(0x00LL), MASK_RXE_RRRD, INSTR_RXE_RRRD, 3, 0 ,0 }, ++ { "rxf", OP8(0x00LL), MASK_RXF_RRRDR, INSTR_RXF_RRRDR, 3, 0 ,0 }, ++ { "rxy", OP8(0x00LL), MASK_RXY_RRRD, INSTR_RXY_RRRD, 3, 3 ,0 }, ++ { "s", OP8(0x00LL), MASK_S_RD, INSTR_S_RD, 3, 0 ,0 }, ++ { "si", OP8(0x00LL), MASK_SI_URD, INSTR_SI_URD, 3, 0 ,0 }, ++ { "siy", OP8(0x00LL), MASK_SIY_URD, INSTR_SIY_URD, 3, 3 ,0 }, ++ { "sil", OP8(0x00LL), MASK_SIL_RDI, INSTR_SIL_RDI, 3, 6 ,0 }, ++ { "ss", OP8(0x00LL), MASK_SS_RRRDRD, INSTR_SS_RRRDRD, 3, 0 ,0 }, ++ { "sse", OP8(0x00LL), MASK_SSE_RDRD, INSTR_SSE_RDRD, 3, 0 ,0 }, ++ { "ssf", OP8(0x00LL), MASK_SSF_RRDRD, INSTR_SSF_RRDRD, 3, 0 ,0 }, ++ { "vrv", OP8(0x00LL), MASK_VRV_VVXRDU, INSTR_VRV_VVXRDU, 3, 9 ,0 }, ++ { "vri", OP8(0x00LL), MASK_VRI_VVUUU, INSTR_VRI_VVUUU, 3, 9 ,0 }, ++ { "vrx", OP8(0x00LL), MASK_VRX_VRRDU, INSTR_VRX_VRRDU, 3, 9 ,0 }, ++ { "vrs", OP8(0x00LL), MASK_VRS_RVRDU, INSTR_VRS_RVRDU, 3, 9 ,0 }, ++ { "vrr", OP8(0x00LL), MASK_VRR_VVV0UUU, INSTR_VRR_VVV0UUU, 3, 9 ,0 }, ++ { "vsi", OP8(0x00LL), MASK_VSI_URDV, INSTR_VSI_URDV, 3, 10 ,0 }, + }; + + const int s390_num_opformats = +diff -rup binutils.orig/opcodes/s390-opc.txt binutils-2.27/opcodes/s390-opc.txt +--- binutils.orig/opcodes/s390-opc.txt 2017-03-24 14:50:54.851778922 +0000 ++++ binutils-2.27/opcodes/s390-opc.txt 2017-03-24 14:54:05.066330541 +0000 +@@ -630,7 +630,7 @@ eb0000000051 tmy SIY_URD "test under mas + # 'old' instructions extended to long displacement + # these instructions are entered into the opcode table twice. + e30000000003 lrag RXY_RRRD "load real address with long offset 64" z990 zarch +-e30000000004 lg RXY_RRRD " load 64" z990 zarch ++e30000000004 lg RXY_RRRD "load 64" z990 zarch + e30000000008 ag RXY_RRRD "add with long offset 64" z990 zarch + e30000000009 sg RXY_RRRD "subtract with long offset 64" z990 zarch + e3000000000a alg RXY_RRRD "add logical with long offset 64" z990 zarch +@@ -1584,27 +1584,27 @@ e7000230008a vstrczfs VRR_VVVU0VB3 "vect + + # Chapter 24 + e700000000e3 vfa VRR_VVV0UU "vector fp add" z13 zarch vx +-e700000030e3 vfadb VRR_VVV "vector fp add" z13 zarch vx +-e700000830e3 wfadb VRR_VVV "vector fp add" z13 zarch vx ++e700000030e3 vfadb VRR_VVV "vector fp add long" z13 zarch vx ++e700000830e3 wfadb VRR_VVV "vector fp add long" z13 zarch vx + e700000000cb wfc VRR_VV0UU2 "vector fp compare scalar" z13 zarch vx +-e700000030cb wfcdb VRR_VV "vector fp compare scalar" z13 zarch vx ++e700000030cb wfcdb VRR_VV "vector fp compare scalar long" z13 zarch vx + e700000000ca wfk VRR_VV0UU2 "vector fp compare and signal scalar" z13 zarch vx +-e700000030ca wfkdb VRR_VV "vector fp compare and signal scalar" z13 zarch vx ++e700000030ca wfkdb VRR_VV "vector fp compare and signal scalar long" z13 zarch vx + e700000000e8 vfce VRR_VVV0UUU "vector fp compare equal" z13 zarch vx +-e700000030e8 vfcedb VRR_VVV "vector fp compare equal" z13 zarch vx +-e700001030e8 vfcedbs VRR_VVV "vector fp compare equal" z13 zarch vx +-e700000830e8 wfcedb VRR_VVV "vector fp compare equal" z13 zarch vx +-e700001830e8 wfcedbs VRR_VVV "vector fp compare equal" z13 zarch vx ++e700000030e8 vfcedb VRR_VVV "vector fp compare equal long" z13 zarch vx ++e700001030e8 vfcedbs VRR_VVV "vector fp compare equal long" z13 zarch vx ++e700000830e8 wfcedb VRR_VVV "vector fp compare equal long" z13 zarch vx ++e700001830e8 wfcedbs VRR_VVV "vector fp compare equal long" z13 zarch vx + e700000000eb vfch VRR_VVV0UUU "vector fp compare high" z13 zarch vx +-e700000030eb vfchdb VRR_VVV "vector fp compare high" z13 zarch vx +-e700001030eb vfchdbs VRR_VVV "vector fp compare high" z13 zarch vx +-e700000830eb wfchdb VRR_VVV "vector fp compare high" z13 zarch vx +-e700001830eb wfchdbs VRR_VVV "vector fp compare high" z13 zarch vx ++e700000030eb vfchdb VRR_VVV "vector fp compare high long" z13 zarch vx ++e700001030eb vfchdbs VRR_VVV "vector fp compare high long" z13 zarch vx ++e700000830eb wfchdb VRR_VVV "vector fp compare high long" z13 zarch vx ++e700001830eb wfchdbs VRR_VVV "vector fp compare high long" z13 zarch vx + e700000000ea vfche VRR_VVV0UUU "vector fp compare high or equal" z13 zarch vx +-e700000030ea vfchedb VRR_VVV "vector fp compare high or equal" z13 zarch vx +-e700001030ea vfchedbs VRR_VVV "vector fp compare high or equal" z13 zarch vx +-e700000830ea wfchedb VRR_VVV "vector fp compare high or equal" z13 zarch vx +-e700001830ea wfchedbs VRR_VVV "vector fp compare high or equal" z13 zarch vx ++e700000030ea vfchedb VRR_VVV "vector fp compare high or equal long" z13 zarch vx ++e700001030ea vfchedbs VRR_VVV "vector fp compare high or equal long" z13 zarch vx ++e700000830ea wfchedb VRR_VVV "vector fp compare high or equal long" z13 zarch vx ++e700001830ea wfchedbs VRR_VVV "vector fp compare high or equal long" z13 zarch vx + e700000000c3 vcdg VRR_VV0UUU "vector fp convert from fixed 64 bit" z13 zarch vx + e700000030c3 vcdgb VRR_VV0UU "vector fp convert from fixed 64 bit" z13 zarch vx + e700000830c3 wcdgb VRR_VV0UU8 "vector fp convert from fixed 64 bit" z13 zarch vx +@@ -1618,41 +1618,41 @@ e700000000c0 vclgd VRR_VV0UUU "vector fp + e700000030c0 vclgdb VRR_VV0UU "vector fp convert to logical 64 bit" z13 zarch vx + e700000830c0 wclgdb VRR_VV0UU8 "vector fp convert to logical 64 bit" z13 zarch vx + e700000000e5 vfd VRR_VVV0UU "vector fp divide" z13 zarch vx +-e700000030e5 vfddb VRR_VVV "vector fp divide" z13 zarch vx +-e700000830e5 wfddb VRR_VVV "vector fp divide" z13 zarch vx ++e700000030e5 vfddb VRR_VVV "vector fp divide long" z13 zarch vx ++e700000830e5 wfddb VRR_VVV "vector fp divide long" z13 zarch vx + e700000000c7 vfi VRR_VV0UUU "vector load fp integer" z13 zarch vx +-e700000030c7 vfidb VRR_VV0UU "vector load fp integer" z13 zarch vx +-e700000830c7 wfidb VRR_VV0UU8 "vector load fp integer" z13 zarch vx ++e700000030c7 vfidb VRR_VV0UU "vector load fp integer long" z13 zarch vx ++e700000830c7 wfidb VRR_VV0UU8 "vector load fp integer long" z13 zarch vx + e700000000c4 vlde VRR_VV0UU2 "vector fp load lengthened" z13 zarch vx +-e700000020c4 vldeb VRR_VV "vector fp load lengthened" z13 zarch vx +-e700000820c4 wldeb VRR_VV "vector fp load lengthened" z13 zarch vx ++e700000020c4 vldeb VRR_VV "vector fp load lengthened short to long" z13 zarch vx ++e700000820c4 wldeb VRR_VV "vector fp load lengthened short to long" z13 zarch vx + e700000000c5 vled VRR_VV0UUU "vector fp load rounded" z13 zarch vx +-e700000030c5 vledb VRR_VV0UU "vector fp load rounded" z13 zarch vx +-e700000830c5 wledb VRR_VV0UU8 "vector fp load rounded" z13 zarch vx ++e700000030c5 vledb VRR_VV0UU "vector fp load rounded long to short" z13 zarch vx ++e700000830c5 wledb VRR_VV0UU8 "vector fp load rounded long to short" z13 zarch vx + e700000000e7 vfm VRR_VVV0UU "vector fp multiply" z13 zarch vx +-e700000030e7 vfmdb VRR_VVV "vector fp multiply" z13 zarch vx +-e700000830e7 wfmdb VRR_VVV "vector fp multiply" z13 zarch vx ++e700000030e7 vfmdb VRR_VVV "vector fp multiply long" z13 zarch vx ++e700000830e7 wfmdb VRR_VVV "vector fp multiply long" z13 zarch vx + e7000000008f vfma VRR_VVVU0UV "vector fp multiply and add" z13 zarch vx +-e7000300008f vfmadb VRR_VVVV "vector fp multiply and add" z13 zarch vx +-e7000308008f wfmadb VRR_VVVV "vector fp multiply and add" z13 zarch vx ++e7000300008f vfmadb VRR_VVVV "vector fp multiply and add long" z13 zarch vx ++e7000308008f wfmadb VRR_VVVV "vector fp multiply and add long" z13 zarch vx + e7000000008e vfms VRR_VVVU0UV "vector fp multiply and subtract" z13 zarch vx +-e7000300008e vfmsdb VRR_VVVV "vector fp multiply and subtract" z13 zarch vx +-e7000308008e wfmsdb VRR_VVVV "vector fp multiply and subtract" z13 zarch vx ++e7000300008e vfmsdb VRR_VVVV "vector fp multiply and subtract long" z13 zarch vx ++e7000308008e wfmsdb VRR_VVVV "vector fp multiply and subtract long" z13 zarch vx + e700000000cc vfpso VRR_VV0UUU "vector fp perform sign operation" z13 zarch vx +-e700000030cc vfpsodb VRR_VV0U2 "vector fp perform sign operation" z13 zarch vx +-e700000830cc wfpsodb VRR_VV0U2 "vector fp perform sign operation" z13 zarch vx +-e700000030cc vflcdb VRR_VV "vector fp perform sign operation" z13 zarch vx +-e700000830cc wflcdb VRR_VV "vector fp perform sign operation" z13 zarch vx +-e700001030cc vflndb VRR_VV "vector fp perform sign operation" z13 zarch vx +-e700001830cc wflndb VRR_VV "vector fp perform sign operation" z13 zarch vx +-e700002030cc vflpdb VRR_VV "vector fp perform sign operation" z13 zarch vx +-e700002830cc wflpdb VRR_VV "vector fp perform sign operation" z13 zarch vx ++e700000030cc vfpsodb VRR_VV0U2 "vector fp perform sign operation long" z13 zarch vx ++e700000830cc wfpsodb VRR_VV0U2 "vector fp perform sign operation long" z13 zarch vx ++e700000030cc vflcdb VRR_VV "vector fp perform sign operation long" z13 zarch vx ++e700000830cc wflcdb VRR_VV "vector fp perform sign operation long" z13 zarch vx ++e700001030cc vflndb VRR_VV "vector fp perform sign operation long" z13 zarch vx ++e700001830cc wflndb VRR_VV "vector fp perform sign operation long" z13 zarch vx ++e700002030cc vflpdb VRR_VV "vector fp perform sign operation long" z13 zarch vx ++e700002830cc wflpdb VRR_VV "vector fp perform sign operation long" z13 zarch vx + e700000000ce vfsq VRR_VV0UU2 "vector fp square root" z13 zarch vx +-e700000030ce vfsqdb VRR_VV "vector fp square root" z13 zarch vx +-e700000830ce wfsqdb VRR_VV "vector fp square root" z13 zarch vx ++e700000030ce vfsqdb VRR_VV "vector fp square root long" z13 zarch vx ++e700000830ce wfsqdb VRR_VV "vector fp square root long" z13 zarch vx + e700000000e2 vfs VRR_VVV0UU "vector fp subtract" z13 zarch vx +-e700000030e2 vfsdb VRR_VVV "vector fp subtract" z13 zarch vx +-e700000830e2 wfsdb VRR_VVV "vector fp subtract" z13 zarch vx ++e700000030e2 vfsdb VRR_VVV "vector fp subtract long" z13 zarch vx ++e700000830e2 wfsdb VRR_VVV "vector fp subtract long" z13 zarch vx + e7000000004a vftci VRI_VVUUU "vector fp test data class immediate" z13 zarch vx + e7000000304a vftcidb VRI_VVU2 "vector fp test data class immediate" z13 zarch vx + e7000008304a wftcidb VRI_VVU2 "vector fp test data class immediate" z13 zarch vx +@@ -1679,3 +1679,200 @@ e3000000003a llzrgf RXY_RRRD "load logic + e3000000003b lzrf RXY_RRRD "load and zero rightmost byte 32->32" z13 zarch + e3000000002a lzrg RXY_RRRD "load and zero rightmost byte 64->64" z13 zarch + b93c ppno RRE_RR "perform pseudorandom number operation" z13 zarch ++ ++# arch12 instructions ++ ++# Vector Enhancements Facility 1 ++ ++e70000000085 vbperm VRR_VVV "vector bit permute" arch12 zarch ++e70000006004 vllezlf VRX_VRRD "vector load logical word element and zero - left aligned" arch12 zarch vx2 ++e700000000b8 vmsl VRR_VVVUU0V "vector multiply sum logical" arch12 zarch vx2 ++e700030000b8 vmslg VRR_VVVU0VB "vector multiply sum logical double word" arch12 zarch vx2 ++e7000000006c vnx VRR_VVV "vector not exclusive or" arch12 zarch vx2 ++e7000000006e vnn VRR_VVV "vector nand" arch12 zarch ++e7000000006f voc VRR_VVV "vector or with complement" arch12 zarch vx2 ++e70000000050 vpopctb VRR_VV "vector population count byte" arch12 zarch vx2 ++e70000001050 vpopcth VRR_VV "vector population count halfword" arch12 zarch vx2 ++e70000002050 vpopctf VRR_VV "vector population count word" arch12 zarch vx2 ++e70000003050 vpopctg VRR_VV "vector population count double word" arch12 zarch vx2 ++e700000020e3 vfasb VRR_VVV "vector fp add short" arch12 zarch vx2 ++e700000820e3 wfasb VRR_VVV "scalar vector fp add scalar short" arch12 zarch vx2 ++e700000840e3 wfaxb VRR_VVV "scalar vector fp add scalar extended" arch12 zarch vx2 ++e700000020cb wfcsb VRR_VV "scalar vector fp compare scalar short" arch12 zarch vx2 ++e700000040cb wfcxb VRR_VV "scalar vector fp compare scalar extended" arch12 zarch vx2 ++e700000020ca wfksb VRR_VV "scalar vector fp compare and signal scalar short" arch12 zarch vx2 ++e700000040ca wfkxb VRR_VV "scalar vector fp compare and signal scalar extended" arch12 zarch vx2 ++ ++e700000020e8 vfcesb VRR_VVV "vector fp compare equal short" arch12 zarch vx2 ++e700001020e8 vfcesbs VRR_VVV "vector fp compare equal short" arch12 zarch vx2 ++e700000820e8 wfcesb VRR_VVV "scalar vector fp compare equal scalar short" arch12 zarch vx2 ++e700001820e8 wfcesbs VRR_VVV "scalar fp compare equal scalar short" arch12 zarch vx2 ++e700000840e8 wfcexb VRR_VVV "scalar vector fp compare equal scalar extended" arch12 zarch vx2 ++e700001840e8 wfcexbs VRR_VVV "scalar vector fp compare equal scalar extended" arch12 zarch vx2 ++ ++e700000420e8 vfkesb VRR_VVV "vector fp compare and signal equal short" arch12 zarch vx2 ++e700001420e8 vfkesbs VRR_VVV "vector fp compare and signal equal short" arch12 zarch vx2 ++e700000c20e8 wfkesb VRR_VVV "scalar vector fp compare and signal equal scalar short" arch12 zarch vx2 ++e700001c20e8 wfkesbs VRR_VVV "scalar fp compare and signal equal scalar short" arch12 zarch vx2 ++e700000430e8 vfkedb VRR_VVV "vector fp compare and signal equal long" arch12 zarch vx ++e700001430e8 vfkedbs VRR_VVV "vector fp compare and signal equal long" arch12 zarch vx ++e700000c30e8 wfkedb VRR_VVV "vector fp compare and signal equal long" arch12 zarch vx ++e700001c30e8 wfkedbs VRR_VVV "vector fp compare and signal equal long" arch12 zarch vx ++e700000c40e8 wfkexb VRR_VVV "scalar vector fp compare and signal equal scalar extended" arch12 zarch vx2 ++e700001c40e8 wfkexbs VRR_VVV "scalar vector fp compare and signal equal scalar extended" arch12 zarch vx2 ++ ++e700000020eb vfchsb VRR_VVV "vector fp compare high short" arch12 zarch vx2 ++e700001020eb vfchsbs VRR_VVV "vector fp compare high short" arch12 zarch vx2 ++e700000820eb wfchsb VRR_VVV "scalar vector fp compare high scalar short" arch12 zarch vx2 ++e700001820eb wfchsbs VRR_VVV "scalar vector fp compare high scalar short" arch12 zarch vx2 ++e700000840eb wfchxb VRR_VVV "scalar vector fp compare high scalar extended" arch12 zarch vx2 ++e700001840eb wfchxbs VRR_VVV "scalar vector fp compare high scalar extended" arch12 zarch vx2 ++ ++e700000420eb vfkhsb VRR_VVV "vector fp compare and signal high short" arch12 zarch vx2 ++e700001420eb vfkhsbs VRR_VVV "vector fp compare and signal high short" arch12 zarch vx2 ++e700000c20eb wfkhsb VRR_VVV "scalar vector fp compare and signal high scalar short" arch12 zarch vx2 ++e700001c20eb wfkhsbs VRR_VVV "scalar vector fp compare and signal high scalar short" arch12 zarch vx2 ++e700000430eb vfkhdb VRR_VVV "vector fp compare and signal high long" arch12 zarch vx ++e700001430eb vfkhdbs VRR_VVV "vector fp compare and signal high long" arch12 zarch vx ++e700000c30eb wfkhdb VRR_VVV "vector fp compare and signal high long" arch12 zarch vx ++e700001c30eb wfkhdbs VRR_VVV "vector fp compare and signal high long" arch12 zarch vx ++e700000c40eb wfkhxb VRR_VVV "scalar vector fp compare and signal high scalar extended" arch12 zarch vx2 ++e700001c40eb wfkhxbs VRR_VVV "scalar vector fp compare and signal high scalar extended" arch12 zarch vx2 ++ ++e700000020ea vfchesb VRR_VVV "vector fp compare high or equal short" arch12 zarch vx2 ++e700001020ea vfchesbs VRR_VVV "vector fp compare high or equal short" arch12 zarch vx2 ++e700000820ea wfchesb VRR_VVV "scalar vector fp compare high or equal scalar short" arch12 zarch vx2 ++e700001820ea wfchesbs VRR_VVV "scalar vector fp compare high or equal scalar short" arch12 zarch vx2 ++e700000840ea wfchexb VRR_VVV "scalar vector fp compare high or equal scalar extended" arch12 zarch vx2 ++e700001840ea wfchexbs VRR_VVV "scalar vector fp compare high or equal scalar extended" arch12 zarch vx2 ++ ++e700000420ea vfkhesb VRR_VVV "vector fp compare and signal high or equal short" arch12 zarch vx2 ++e700001420ea vfkhesbs VRR_VVV "vector fp compare and signal high or equal short" arch12 zarch vx2 ++e700000c20ea wfkhesb VRR_VVV "scalar vector fp compare and signal high or equal scalar short" arch12 zarch vx2 ++e700001c20ea wfkhesbs VRR_VVV "scalar vector fp compare and signal high or equal scalar short" arch12 zarch vx2 ++e700000430ea vfkhedb VRR_VVV "vector fp compare and signal high or equal long" arch12 zarch vx ++e700001430ea vfkhedbs VRR_VVV "vector fp compare and signal high or equal long" arch12 zarch vx ++e700000c30ea wfkhedb VRR_VVV "vector fp compare and signal high or equal long" arch12 zarch vx ++e700001c30ea wfkhedbs VRR_VVV "vector fp compare and signal high or equal long" arch12 zarch vx ++e700000c40ea wfkhexb VRR_VVV "scalar vector fp compare and signal high or equal scalar extended" arch12 zarch vx2 ++e700001c40ea wfkhexbs VRR_VVV "scalar vector fp compare and signal high or equal scalar extended" arch12 zarch vx2 ++ ++e700000020e5 vfdsb VRR_VVV "vector fp divide short" arch12 zarch vx2 ++e700000820e5 wfdsb VRR_VVV "scalar vector fp divide scalar short" arch12 zarch vx2 ++e700000840e5 wfdxb VRR_VVV "scalar vector fp divide scalar extended" arch12 zarch vx2 ++e700000020c7 vfisb VRR_VV0UU "vector load fp integer short" arch12 zarch vx2 ++e700000820c7 wfisb VRR_VV0UU8 "scalar vector load fp integer scalar short" arch12 zarch vx2 ++e700000840c7 wfixb VRR_VV0UU8 "scalar vector load fp integer scalar extended" arch12 zarch vx2 ++e700000000c4 vfll VRR_VV0UU2 "vector fp load lengthened" arch12 zarch vx2 ++e700000020c4 vflls VRR_VV "vector fp load lengthened" arch12 zarch vx2 ++e700000820c4 wflls VRR_VV "scalar vector fp load lengthened short" arch12 zarch vx2 ++e700000830c4 wflld VRR_VV "scalar vector fp load lengthened long" arch12 zarch vx2 ++e700000000c5 vflr VRR_VV0UUU "vector fp load rounded" arch12 zarch vx2 ++e700000030c5 vflrd VRR_VV0UU "vector fp load rounded long" arch12 zarch vx2 ++e700000830c5 wflrd VRR_VV0UU8 "scalar vector fp load rounded long" arch12 zarch vx2 ++e700000840c5 wflrx VRR_VV0UU8 "scalar vector fp load rounded extended" arch12 zarch vx2 ++e700000000ef vfmax VRR_VVV0UUU "vector fp maximum" arch12 zarch vx2 ++e700000020ef vfmaxsb VRR_VVV0U0 "vector fp maximum short" arch12 zarch vx2 ++e700000030ef vfmaxdb VRR_VVV0U0 "vector fp maximum long" arch12 zarch vx2 ++e700000820ef wfmaxsb VRR_VVV0U0 "scalar fp maximum scalar short" arch12 zarch vx2 ++e700000830ef wfmaxdb VRR_VVV0U0 "scalar fp maximum scalar long" arch12 zarch vx2 ++e700000840ef wfmaxxb VRR_VVV0U0 "scalar fp maximum scalar extended" arch12 zarch vx2 ++e700000000ee vfmin VRR_VVV0UUU "vector fp minimum" arch12 zarch vx2 ++e700000020ee vfminsb VRR_VVV0U0 "vector fp minimum short" arch12 zarch vx2 ++e700000030ee vfmindb VRR_VVV0U0 "vector fp minimum long" arch12 zarch vx2 ++e700000820ee wfminsb VRR_VVV0U0 "scalar fp minimum scalar short" arch12 zarch vx2 ++e700000830ee wfmindb VRR_VVV0U0 "scalar fp minimum scalar long" arch12 zarch vx2 ++e700000840ee wfminxb VRR_VVV0U0 "scalar fp minimum scalar extended" arch12 zarch vx2 ++e700000020e7 vfmsb VRR_VVV "vector fp multiply short" arch12 zarch vx2 ++e700000820e7 wfmsb VRR_VVV "scalar vector fp multiply scalar short" arch12 zarch vx2 ++e700000840e7 wfmxb VRR_VVV "scalar vector fp multiply scalar extended" arch12 zarch vx2 ++e7000200008f vfmasb VRR_VVVV "vector fp multiply and add short" arch12 zarch vx2 ++e7000208008f wfmasb VRR_VVVV "scalar vector fp multiply and add scalar short" arch12 zarch vx2 ++e7000408008f wfmaxb VRR_VVVV "scalar vector fp multiply and add scalar extended" arch12 zarch vx2 ++e7000200008e vfmssb VRR_VVVV "vector fp multiply and subtract short" arch12 zarch vx2 ++e7000208008e wfmssb VRR_VVVV "scalar vector fp multiply and subtract scalar short" arch12 zarch vx2 ++e7000408008e wfmsxb VRR_VVVV "scalar vector fp multiply and subtract scalar extended" arch12 zarch vx2 ++e7000000009f vfnma VRR_VVVU0UV "vector fp negative multiply and add" arch12 zarch vx2 ++e7000200009f vfnmasb VRR_VVVV "vector fp negative multiply and add short" arch12 zarch vx2 ++e7000208009f wfnmasb VRR_VVVV "scalar vector fp negative multiply and add scalar short" arch12 zarch vx2 ++e7000300009f vfnmadb VRR_VVVV "vector fp negative multiply and add long" arch12 zarch vx2 ++e7000308009f wfnmadb VRR_VVVV "scalar vector fp negative multiply and add scalar long" arch12 zarch vx2 ++e7000408009f wfnmaxb VRR_VVVV "scalar vector fp negative multiply and add scalar extended" arch12 zarch vx2 ++e7000000009e vfnms VRR_VVVU0UV "vector fp negative multiply and subtract" arch12 zarch vx2 ++e7000200009e vfnmssb VRR_VVVV "vector fp negative multiply and subtract short" arch12 zarch vx2 ++e7000208009e wfnmssb VRR_VVVV "scalar vector fp negative multiply and subtract scalar short" arch12 zarch vx2 ++e7000300009e vfnmsdb VRR_VVVV "vector fp negative multiply and subtract long" arch12 zarch vx2 ++e7000308009e wfnmsdb VRR_VVVV "scalar vector fp negative multiply and subtract scalar long" arch12 zarch vx2 ++e7000408009e wfnmsxb VRR_VVVV "scalar vector fp negative multiply and subtract scalar extended" arch12 zarch vx2 ++e700000020cc vfpsosb VRR_VV0U2 "vector fp perform sign operation short" arch12 zarch vx2 ++e700000820cc wfpsosb VRR_VV0U2 "scalar vector fp perform sign operation scalar short" arch12 zarch vx2 ++e700000020cc vflcsb VRR_VV "vector fp perform sign operation short" arch12 zarch vx2 ++e700000820cc wflcsb VRR_VV "scalar vector fp perform sign operation scalar short" arch12 zarch vx2 ++e700001020cc vflnsb VRR_VV "vector fp perform sign operation short" arch12 zarch vx2 ++e700001820cc wflnsb VRR_VV "scalar vector fp perform sign operation scalar short" arch12 zarch vx2 ++e700002020cc vflpsb VRR_VV "vector fp perform sign operation short" arch12 zarch vx2 ++e700002820cc wflpsb VRR_VV "scalar vector fp perform sign operation scalar short" arch12 zarch vx2 ++e700000840cc wfpsoxb VRR_VV0U2 "scalar vector fp perform sign operation scalar extended" arch12 zarch vx2 ++e700000840cc wflcxb VRR_VV "scalar vector fp perform sign operation scalar extended" arch12 zarch vx2 ++e700001840cc wflnxb VRR_VV "scalar vector fp perform sign operation scalar extended" arch12 zarch vx2 ++e700002840cc wflpxb VRR_VV "scalar vector fp perform sign operation scalar extended" arch12 zarch vx2 ++e700000020ce vfsqsb VRR_VV "vector fp square root short" arch12 zarch vx2 ++e700000820ce wfsqsb VRR_VV "scalar vector fp square root scalar short" arch12 zarch vx2 ++e700000840ce wfsqxb VRR_VV "scalar vector fp square root scalar extended" arch12 zarch vx2 ++e700000020e2 vfssb VRR_VVV "vector fp subtract short" arch12 zarch vx2 ++e700000820e2 wfssb VRR_VVV "scalar vector fp subtract scalar short" arch12 zarch vx2 ++e700000840e2 wfsxb VRR_VVV "scalar vector fp subtract scalar extended" arch12 zarch vx2 ++e7000000204a vftcisb VRI_VVU2 "vector fp test data class immediate short" arch12 zarch vx2 ++e7000008204a wftcisb VRI_VVU2 "scalar vector fp test data class immediate scalar short" arch12 zarch vx2 ++e7000008404a wftcixb VRI_VVU2 "scalar vector fp test data class immediate scalar extended" arch12 zarch vx2 ++ ++# Miscellaneous Instruction Extensions Facility 2 ++ ++e30000000038 agh RXY_RRRD "add halfword to 64 bit value" arch12 zarch ++e30000000047 bic RXY_URRD "branch indirect on condition" arch12 zarch ++e3f000000047 bi RXY_0RRD "unconditional indirect branch" arch12 zarch ++e30000000047 bi*8 RXY_0RRD "branch indirect on condition" arch12 zarch ++b9ec mgrk RRF_R0RR2 "multiply 64x64reg -> 128" arch12 zarch ++e30000000084 mg RXY_RRRD "multiply 64x64mem -> 128" arch12 zarch ++e3000000003c mgh RXY_RRRD "multiply halfword 64x16mem -> 64" arch12 zarch ++b9fd msrkc RRF_R0RR2 "multiply single 32x32 -> 32" arch12 zarch ++b9ed msgrkc RRF_R0RR2 "multiply single 64x64 -> 64" arch12 zarch ++e30000000053 msc RXY_RRRD "multiply single 32x32mem -> 32" arch12 zarch ++e30000000083 msgc RXY_RRRD "multiply single 64x64mem -> 64" arch12 zarch ++e30000000039 sgh RXY_RRRD "subtract halfword from 64 bit value" arch12 zarch ++ ++# Vector packed decimal facility ++ ++e60000000037 vlrlr VRS_RRDV "vector load rightmost with length" arch12 zarch vx2 ++e60000000035 vlrl VSI_URDV "vector load rightmost with immediate length" arch12 zarch vx2 ++e6000000003f vstrlr VRS_RRDV "vector store rightmost with length" arch12 zarch vx2 ++e6000000003d vstrl VSI_URDV "vector store rightmost with immediate length" arch12 zarch vx2 ++e60000000071 vap VRI_VVV0UU2 "vector add decimal" arch12 zarch vx2 ++e60000000077 vcp VRR_0VV0U "vector compare decimal" arch12 zarch vx2 ++e60000000050 vcvb VRR_RV0U "vector convert to binary 32 bit" arch12 zarch vx2 ++e60000000052 vcvbg VRR_RV0U "vector convert to binary 64 bit" arch12 zarch vx2 ++e60000000058 vcvd VRI_VR0UU "vector convert to decimal 32 bit" arch12 zarch vx2 ++e6000000005a vcvdg VRI_VR0UU "vector convert to decimal 64 bit" arch12 zarch vx2 ++e6000000007a vdp VRI_VVV0UU2 "vector divide decimal" arch12 zarch vx2 ++e60000000049 vlip VRI_V0UU2 "vector load immediate decimal" arch12 zarch vx2 ++e60000000078 vmp VRI_VVV0UU2 "vector multiply decimal" arch12 zarch vx2 ++e60000000079 vmsp VRI_VVV0UU2 "vector multiply and shift decimal" arch12 zarch vx2 ++e60000000034 vpkz VSI_URDV "vector pack zoned" arch12 zarch vx2 ++e6000000005b vpsop VRI_VVUUU2 "vector perform sign operation decimal" arch12 zarch vx2 ++e6000000007b vrp VRI_VVV0UU2 "vector remainder decimal" arch12 zarch vx2 ++e6000000007e vsdp VRI_VVV0UU2 "vector shift and divide decimal" arch12 zarch vx2 ++e60000000059 vsrp VRI_VVUUU2 "vector shift and round decimal" arch12 zarch vx2 ++e60000000073 vsp VRI_VVV0UU2 "vector subtract decimal" arch12 zarch vx2 ++e6000000005f vtp VRR_0V "vector test decimal" arch12 zarch vx2 ++e6000000003c vupkz VSI_URDV "vector unpack zoned" arch12 zarch vx2 ++ ++# Guarded storage facility ++ ++e3000000004c lgg RXY_RRRD "load guarded 64 bit" arch12 zarch ++e30000000048 llgfsg RXY_RRRD "load logical and shift guarded 64 bit" arch12 zarch ++e3000000004d lgsc RXY_RRRD "load guarded storage controls" arch12 zarch ++e30000000049 stgsc RXY_RRRD "store guarded storage controls" arch12 zarch ++ ++# Message-Security-Assist Extension 8 ++ ++b929 kma RRF_R0RR "cipher message with galois counter mode" arch12 zarch + diff --git a/SOURCES/binutils-2.27-s390x-check-for-NULL-pointers.patch b/SOURCES/binutils-2.27-s390x-check-for-NULL-pointers.patch new file mode 100644 index 0000000..bcc7d22 --- /dev/null +++ b/SOURCES/binutils-2.27-s390x-check-for-NULL-pointers.patch @@ -0,0 +1,43 @@ +--- binutils.orig/bfd/elf64-s390.c 2017-09-06 09:03:23.142216202 +0100 ++++ binutils-2.27/bfd/elf64-s390.c 2017-09-06 09:11:05.209080947 +0100 +@@ -3895,8 +3895,13 @@ elf_s390_additional_program_headers (bfd + { + struct elf_s390_link_hash_table *htab; + +- htab = elf_s390_hash_table (info); +- return htab->params->pgste; ++ if (info) ++ { ++ htab = elf_s390_hash_table (info); ++ if (htab) ++ return htab->params->pgste; ++ } ++ return 0; + } + + +@@ -3909,6 +3914,9 @@ elf_s390_modify_segment_map (bfd *abfd A + struct elf_s390_link_hash_table *htab; + struct elf_segment_map *m, *pm = NULL; + ++ if (!abfd || !info) ++ return TRUE; ++ + htab = elf_s390_hash_table (info); + if (!htab->params->pgste) + return TRUE; +@@ -3944,8 +3952,12 @@ bfd_elf_s390_set_options (struct bfd_lin + { + struct elf_s390_link_hash_table *htab; + +- htab = elf_s390_hash_table (info); +- htab->params = params; ++ if (info) ++ { ++ htab = elf_s390_hash_table (info); ++ if (htab) ++ htab->params = params; ++ } + + return TRUE; + } diff --git a/SOURCES/binutils-2.27-s390x-complain-missing-fPIC.patch b/SOURCES/binutils-2.27-s390x-complain-missing-fPIC.patch new file mode 100644 index 0000000..373391b --- /dev/null +++ b/SOURCES/binutils-2.27-s390x-complain-missing-fPIC.patch @@ -0,0 +1,22 @@ +--- binutils.orig/bfd/elf64-s390.c 2017-08-11 11:09:23.264667227 +0000 ++++ binutils-2.27/bfd/elf64-s390.c 2017-08-11 11:15:07.510029088 +0000 +@@ -2745,6 +2745,19 @@ elf_s390_relocate_section (bfd *output_b + case R_390_PC32: + case R_390_PC32DBL: + case R_390_PC64: ++ if (h != NULL ++ && bfd_link_pie (info) ++ && !h->def_regular) ++ { ++ _bfd_error_handler (_("%B: `%s' non-PLT reloc for symbol defined " ++ "in shared library and accessed " ++ "from executable " ++ "(rebuild file with -fPIC ?)"), ++ input_bfd, h->root.root.string); ++ bfd_set_error (bfd_error_bad_value); ++ return FALSE; ++ } ++ + /* The target of these relocs are instruction operands + residing in read-only sections. We cannot emit a runtime + reloc for it. */ diff --git a/SOURCES/binutils-2.27-skip-ld-aarch64-ifunc-exec-tests.patch b/SOURCES/binutils-2.27-skip-ld-aarch64-ifunc-exec-tests.patch new file mode 100644 index 0000000..dfa6ee1 --- /dev/null +++ b/SOURCES/binutils-2.27-skip-ld-aarch64-ifunc-exec-tests.patch @@ -0,0 +1,18 @@ +Only in binutils.orig/ld/testsuite/ld-ifunc: .#ifunc.exp +diff -rup binutils.orig/ld/testsuite/ld-ifunc/ifunc.exp binutils-2.27/ld/testsuite/ld-ifunc/ifunc.exp +--- binutils.orig/ld/testsuite/ld-ifunc/ifunc.exp 2017-02-21 15:00:21.802036746 +0000 ++++ binutils-2.27/ld/testsuite/ld-ifunc/ifunc.exp 2017-02-21 15:06:32.730980432 +0000 +@@ -531,6 +531,13 @@ run_cc_link_tests [list \ + ] \ + ] + ++# IFUNC support for AArch64 is still experimental, and in particular ++# function resolution is not yet stable. So skip these tests for now. ++# NC Feb 2017. ++if {[istarget "aarch64-*-*"]} { ++ return ++} ++ + run_ld_link_exec_tests [] [list \ + [list \ + "Run pr18808" \ diff --git a/SOURCES/binutils-2.27-skip-rp14918-test-for-arm.patch b/SOURCES/binutils-2.27-skip-rp14918-test-for-arm.patch new file mode 100644 index 0000000..6c62b50 --- /dev/null +++ b/SOURCES/binutils-2.27-skip-rp14918-test-for-arm.patch @@ -0,0 +1,26 @@ +--- binutils-2.27.orig/ld/testsuite/ld-plugin/lto.exp 2016-09-20 14:11:51.866711051 +0100 ++++ binutils-2.27/ld/testsuite/ld-plugin/lto.exp 2016-09-20 14:18:28.528223979 +0100 +@@ -287,11 +287,21 @@ set lto_link_elf_tests [list \ + {dummy.c} {} "pr16746a.exe"] \ + [list "PR ld/16746 (2)" \ + "-O2 -flto -fuse-linker-plugin tmpdir/pr16746c.o tmpdir/pr16746a.o" "-O2 -flto" \ +- {dummy.c} {} "pr16746b.exe"] \ ++ {dummy.c} {} "pr16746b.exe"] \ ++] ++ ++# PR 14918 checks that libgcc is not spuriously included in a shared link of ++# an empty program. The ARM crt1.o startup code however calls __libc_csu_init ++# in /usr/lib/libc_nonshared.a(elf-init.oS). This in turn needs ++# __aeabi_unwind_cpp_pr0@@GCC_3.5 which is provided by libgcc_s.so.1, so the ++# test fails. Hence this code to skip the test. ++if { ! [istarget "arm*-*-*"] } { ++ set lto_link_elf_tests [concat $lto_link_elf_tests [list \ + [list "PR ld/14918" \ + "-flto" "-flto" \ + {pr14918.c} {{"readelf" {-d --wide} "pr14918.d"}} "pr14918.exe" "c"] \ +-] ++ ]] ++} + + # Check final symbols in executables. + set lto_link_symbol_tests [list \ diff --git a/SOURCES/binutils-2.27-suppress-R_X86_64_GOTPCRELX.patch b/SOURCES/binutils-2.27-suppress-R_X86_64_GOTPCRELX.patch new file mode 100644 index 0000000..39bb368 --- /dev/null +++ b/SOURCES/binutils-2.27-suppress-R_X86_64_GOTPCRELX.patch @@ -0,0 +1,1561 @@ +--- binutils.orig/gas/config/tc-i386.c 2017-10-25 12:52:19.977290474 +0100 ++++ binutils-2.27/gas/config/tc-i386.c 2017-10-25 15:09:15.572415126 +0100 +@@ -10655,14 +10655,7 @@ i386_validate_fix (fixS *fixp) + { + if (!object_64bit) + abort (); +-#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) +- if (fixp->fx_tcbit2) +- fixp->fx_r_type = (fixp->fx_tcbit +- ? BFD_RELOC_X86_64_REX_GOTPCRELX +- : BFD_RELOC_X86_64_GOTPCRELX); +- else +-#endif +- fixp->fx_r_type = BFD_RELOC_X86_64_GOTPCREL; ++ fixp->fx_r_type = BFD_RELOC_X86_64_GOTPCREL; + } + else + { +@@ -10674,14 +10667,6 @@ i386_validate_fix (fixS *fixp) + fixp->fx_subsy = 0; + } + } +-#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) +- else if (!object_64bit) +- { +- if (fixp->fx_r_type == BFD_RELOC_386_GOT32 +- && fixp->fx_tcbit2) +- fixp->fx_r_type = BFD_RELOC_386_GOT32X; +- } +-#endif + } + + arelent * +diff -rup binutils.orig/gas/testsuite/gas/i386/got.d binutils-2.27/gas/testsuite/gas/i386/got.d +--- binutils.orig/gas/testsuite/gas/i386/got.d 2017-10-25 12:52:20.045289685 +0100 ++++ binutils-2.27/gas/testsuite/gas/i386/got.d 2017-10-25 15:19:02.458621604 +0100 +@@ -8,23 +8,23 @@ Disassembly of section .text: + + 0+ <_start>: + [ ]*[a-f0-9]+: b8 00 00 00 00 mov \$0x0,%eax 1: R_386_GOT32 foo +-[ ]*[a-f0-9]+: 8b 05 00 00 00 00 mov 0x0,%eax 7: R_386_GOT32X foo +-[ ]*[a-f0-9]+: 8b 80 00 00 00 00 mov 0x0\(%eax\),%eax d: R_386_GOT32X foo ++[ ]*[a-f0-9]+: 8b 05 00 00 00 00 mov 0x0,%eax 7: R_386_GOT32 foo ++[ ]*[a-f0-9]+: 8b 80 00 00 00 00 mov 0x0\(%eax\),%eax d: R_386_GOT32 foo + [ ]*[a-f0-9]+: 05 00 00 00 00 add \$0x0,%eax 12: R_386_GOT32 foo +-[ ]*[a-f0-9]+: 03 05 00 00 00 00 add 0x0,%eax 18: R_386_GOT32X foo +-[ ]*[a-f0-9]+: 03 80 00 00 00 00 add 0x0\(%eax\),%eax 1e: R_386_GOT32X foo +-[ ]*[a-f0-9]+: ff 15 00 00 00 00 call \*0x0 24: R_386_GOT32X foo +-[ ]*[a-f0-9]+: ff 90 00 00 00 00 call \*0x0\(%eax\) 2a: R_386_GOT32X foo +-[ ]*[a-f0-9]+: ff 25 00 00 00 00 jmp \*0x0 30: R_386_GOT32X foo +-[ ]*[a-f0-9]+: ff a0 00 00 00 00 jmp \*0x0\(%eax\) 36: R_386_GOT32X foo ++[ ]*[a-f0-9]+: 03 05 00 00 00 00 add 0x0,%eax 18: R_386_GOT32 foo ++[ ]*[a-f0-9]+: 03 80 00 00 00 00 add 0x0\(%eax\),%eax 1e: R_386_GOT32 foo ++[ ]*[a-f0-9]+: ff 15 00 00 00 00 call \*0x0 24: R_386_GOT32 foo ++[ ]*[a-f0-9]+: ff 90 00 00 00 00 call \*0x0\(%eax\) 2a: R_386_GOT32 foo ++[ ]*[a-f0-9]+: ff 25 00 00 00 00 jmp \*0x0 30: R_386_GOT32 foo ++[ ]*[a-f0-9]+: ff a0 00 00 00 00 jmp \*0x0\(%eax\) 36: R_386_GOT32 foo + [ ]*[a-f0-9]+: b8 00 00 00 00 mov \$0x0,%eax 3b: R_386_GOT32 foo +-[ ]*[a-f0-9]+: 8b 05 00 00 00 00 mov 0x0,%eax 41: R_386_GOT32X foo +-[ ]*[a-f0-9]+: 8b 80 00 00 00 00 mov 0x0\(%eax\),%eax 47: R_386_GOT32X foo ++[ ]*[a-f0-9]+: 8b 05 00 00 00 00 mov 0x0,%eax 41: R_386_GOT32 foo ++[ ]*[a-f0-9]+: 8b 80 00 00 00 00 mov 0x0\(%eax\),%eax 47: R_386_GOT32 foo + [ ]*[a-f0-9]+: 05 00 00 00 00 add \$0x0,%eax 4c: R_386_GOT32 foo +-[ ]*[a-f0-9]+: 03 05 00 00 00 00 add 0x0,%eax 52: R_386_GOT32X foo +-[ ]*[a-f0-9]+: 03 80 00 00 00 00 add 0x0\(%eax\),%eax 58: R_386_GOT32X foo +-[ ]*[a-f0-9]+: ff 90 00 00 00 00 call \*0x0\(%eax\) 5e: R_386_GOT32X foo +-[ ]*[a-f0-9]+: ff 15 00 00 00 00 call \*0x0 64: R_386_GOT32X foo +-[ ]*[a-f0-9]+: ff a0 00 00 00 00 jmp \*0x0\(%eax\) 6a: R_386_GOT32X foo +-[ ]*[a-f0-9]+: ff 25 00 00 00 00 jmp \*0x0 70: R_386_GOT32X foo ++[ ]*[a-f0-9]+: 03 05 00 00 00 00 add 0x0,%eax 52: R_386_GOT32 foo ++[ ]*[a-f0-9]+: 03 80 00 00 00 00 add 0x0\(%eax\),%eax 58: R_386_GOT32 foo ++[ ]*[a-f0-9]+: ff 90 00 00 00 00 call \*0x0\(%eax\) 5e: R_386_GOT32 foo ++[ ]*[a-f0-9]+: ff 15 00 00 00 00 call \*0x0 64: R_386_GOT32 foo ++[ ]*[a-f0-9]+: ff a0 00 00 00 00 jmp \*0x0\(%eax\) 6a: R_386_GOT32 foo ++[ ]*[a-f0-9]+: ff 25 00 00 00 00 jmp \*0x0 70: R_386_GOT32 foo + #pass +diff -rup binutils.orig/gas/testsuite/gas/i386/got-no-relax.d binutils-2.27/gas/testsuite/gas/i386/got-no-relax.d +--- binutils.orig/gas/testsuite/gas/i386/got-no-relax.d 2017-10-25 12:52:20.045289685 +0100 ++++ binutils-2.27/gas/testsuite/gas/i386/got-no-relax.d 2017-10-25 15:18:30.398991961 +0100 +@@ -9,23 +9,23 @@ Disassembly of section .text: + + 0+ <_start>: + [ ]*[a-f0-9]+: b8 00 00 00 00 mov \$0x0,%eax 1: R_386_GOT32 foo +-[ ]*[a-f0-9]+: 8b 05 00 00 00 00 mov 0x0,%eax 7: R_386_GOT32X foo ++[ ]*[a-f0-9]+: 8b 05 00 00 00 00 mov 0x0,%eax 7: R_386_GOT32 foo + [ ]*[a-f0-9]+: 8b 80 00 00 00 00 mov 0x0\(%eax\),%eax d: R_386_GOT32 foo + [ ]*[a-f0-9]+: 05 00 00 00 00 add \$0x0,%eax 12: R_386_GOT32 foo +-[ ]*[a-f0-9]+: 03 05 00 00 00 00 add 0x0,%eax 18: R_386_GOT32X foo ++[ ]*[a-f0-9]+: 03 05 00 00 00 00 add 0x0,%eax 18: R_386_GOT32 foo + [ ]*[a-f0-9]+: 03 80 00 00 00 00 add 0x0\(%eax\),%eax 1e: R_386_GOT32 foo +-[ ]*[a-f0-9]+: ff 15 00 00 00 00 call \*0x0 24: R_386_GOT32X foo ++[ ]*[a-f0-9]+: ff 15 00 00 00 00 call \*0x0 24: R_386_GOT32 foo + [ ]*[a-f0-9]+: ff 90 00 00 00 00 call \*0x0\(%eax\) 2a: R_386_GOT32 foo +-[ ]*[a-f0-9]+: ff 25 00 00 00 00 jmp \*0x0 30: R_386_GOT32X foo ++[ ]*[a-f0-9]+: ff 25 00 00 00 00 jmp \*0x0 30: R_386_GOT32 foo + [ ]*[a-f0-9]+: ff a0 00 00 00 00 jmp \*0x0\(%eax\) 36: R_386_GOT32 foo + [ ]*[a-f0-9]+: b8 00 00 00 00 mov \$0x0,%eax 3b: R_386_GOT32 foo +-[ ]*[a-f0-9]+: 8b 05 00 00 00 00 mov 0x0,%eax 41: R_386_GOT32X foo ++[ ]*[a-f0-9]+: 8b 05 00 00 00 00 mov 0x0,%eax 41: R_386_GOT32 foo + [ ]*[a-f0-9]+: 8b 80 00 00 00 00 mov 0x0\(%eax\),%eax 47: R_386_GOT32 foo + [ ]*[a-f0-9]+: 05 00 00 00 00 add \$0x0,%eax 4c: R_386_GOT32 foo +-[ ]*[a-f0-9]+: 03 05 00 00 00 00 add 0x0,%eax 52: R_386_GOT32X foo ++[ ]*[a-f0-9]+: 03 05 00 00 00 00 add 0x0,%eax 52: R_386_GOT32 foo + [ ]*[a-f0-9]+: 03 80 00 00 00 00 add 0x0\(%eax\),%eax 58: R_386_GOT32 foo + [ ]*[a-f0-9]+: ff 90 00 00 00 00 call \*0x0\(%eax\) 5e: R_386_GOT32 foo +-[ ]*[a-f0-9]+: ff 15 00 00 00 00 call \*0x0 64: R_386_GOT32X foo ++[ ]*[a-f0-9]+: ff 15 00 00 00 00 call \*0x0 64: R_386_GOT32 foo + [ ]*[a-f0-9]+: ff a0 00 00 00 00 jmp \*0x0\(%eax\) 6a: R_386_GOT32 foo +-[ ]*[a-f0-9]+: ff 25 00 00 00 00 jmp \*0x0 70: R_386_GOT32X foo ++[ ]*[a-f0-9]+: ff 25 00 00 00 00 jmp \*0x0 70: R_386_GOT32 foo + #pass +diff -rup binutils.orig/gas/testsuite/gas/i386/ilp32/x86-64-gotpcrel.d binutils-2.27/gas/testsuite/gas/i386/ilp32/x86-64-gotpcrel.d +--- binutils.orig/gas/testsuite/gas/i386/ilp32/x86-64-gotpcrel.d 2017-10-25 12:52:20.047289662 +0100 ++++ binutils-2.27/gas/testsuite/gas/i386/ilp32/x86-64-gotpcrel.d 2017-10-25 15:12:35.549099037 +0100 +@@ -2,6 +2,8 @@ + #as: --x32 -mrelax-relocations=yes + #objdump: -dwr + #name: x86-64 (ILP32) gotpcrel ++#skip: *-*-* ++# SKIPed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/gas/testsuite/gas/i386/ilp32/x86-64-localpic.d binutils-2.27/gas/testsuite/gas/i386/ilp32/x86-64-localpic.d +--- binutils.orig/gas/testsuite/gas/i386/ilp32/x86-64-localpic.d 2017-10-25 12:52:20.047289662 +0100 ++++ binutils-2.27/gas/testsuite/gas/i386/ilp32/x86-64-localpic.d 2017-10-25 15:12:35.549099037 +0100 +@@ -2,6 +2,8 @@ + #as: --x32 -mrelax-relocations=yes + #readelf: -rsW + #name: x86-64 (ILP32) local PIC ++#skip: *-*-* ++# SKIPed because generation of the R_X86_64_REX_GOTPCRELX reloc is currently suppressed. + + Relocation section '.rela.text' at offset 0x[0-9a-f]+ contains 1 entries: + +Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend +diff -rup binutils.orig/gas/testsuite/gas/i386/localpic.d binutils-2.27/gas/testsuite/gas/i386/localpic.d +--- binutils.orig/gas/testsuite/gas/i386/localpic.d 2017-10-25 12:52:20.049289639 +0100 ++++ binutils-2.27/gas/testsuite/gas/i386/localpic.d 2017-10-25 15:18:13.799183724 +0100 +@@ -4,7 +4,7 @@ + + Relocation section '.rel.text' at offset 0x[0-9a-f]+ contains 1 entries: + Offset Info Type Sym.Value Sym. Name +-[0-9a-f]+ +[0-9a-f]+ R_386_GOT32X +[0-9a-f]+ +foo ++[0-9a-f]+ +[0-9a-f]+ R_386_GOT32 +[0-9a-f]+ +foo + #... + +[0-9]+: +[0-9a-f]+ +[0-9a-f]+ +NOTYPE +LOCAL +DEFAULT +[0-9]+ +foo + #pass +diff -rup binutils.orig/gas/testsuite/gas/i386/mixed-mode-reloc32.d binutils-2.27/gas/testsuite/gas/i386/mixed-mode-reloc32.d +--- binutils.orig/gas/testsuite/gas/i386/mixed-mode-reloc32.d 2017-10-25 12:52:20.050289627 +0100 ++++ binutils-2.27/gas/testsuite/gas/i386/mixed-mode-reloc32.d 2017-10-25 15:18:02.186317878 +0100 +@@ -7,9 +7,9 @@ + + RELOCATION RECORDS FOR \[.text\]: + OFFSET[ ]+TYPE[ ]+VALUE[ ]* +-[0-9a-f]+[ ]+R_386_GOT32X[ ]+xtrn[ ]* ++[0-9a-f]+[ ]+R_386_GOT32[ ]+xtrn[ ]* + [0-9a-f]+[ ]+R_386_PLT32[ ]+xtrn[ ]* +-[0-9a-f]+[ ]+R_386_GOT32X[ ]+xtrn[ ]* ++[0-9a-f]+[ ]+R_386_GOT32[ ]+xtrn[ ]* + [0-9a-f]+[ ]+R_386_PLT32[ ]+xtrn[ ]* +-[0-9a-f]+[ ]+R_386_GOT32X[ ]+xtrn[ ]* ++[0-9a-f]+[ ]+R_386_GOT32[ ]+xtrn[ ]* + [0-9a-f]+[ ]+R_386_PLT32[ ]+xtrn[ ]* +diff -rup binutils.orig/gas/testsuite/gas/i386/reloc32.d binutils-2.27/gas/testsuite/gas/i386/reloc32.d +--- binutils.orig/gas/testsuite/gas/i386/reloc32.d 2017-10-25 12:52:20.052289604 +0100 ++++ binutils-2.27/gas/testsuite/gas/i386/reloc32.d 2017-10-25 15:16:06.161659763 +0100 +@@ -19,7 +19,7 @@ Disassembly of section \.text: + .*[ ]+R_386_PC32[ ]+xtrn + .*[ ]+R_386_PC8[ ]+xtrn + .*[ ]+R_386_GOT32[ ]+xtrn +-.*[ ]+R_386_GOT32X[ ]+xtrn ++.*[ ]+R_386_GOT32[ ]+xtrn + .*[ ]+R_386_GOTOFF[ ]+xtrn + .*[ ]+R_386_GOTOFF[ ]+xtrn + .*[ ]+R_386_GOTPC[ ]+_GLOBAL_OFFSET_TABLE_ +diff -rup binutils.orig/gas/testsuite/gas/i386/x86-64-gotpcrel.d binutils-2.27/gas/testsuite/gas/i386/x86-64-gotpcrel.d +--- binutils.orig/gas/testsuite/gas/i386/x86-64-gotpcrel.d 2017-10-25 12:52:20.063289476 +0100 ++++ binutils-2.27/gas/testsuite/gas/i386/x86-64-gotpcrel.d 2017-10-25 15:12:35.549099037 +0100 +@@ -1,5 +1,7 @@ + #as: -mrelax-relocations=yes + #objdump: -dwr ++#skip: *-*-* ++# SKIPed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/gas/testsuite/gas/i386/x86-64-localpic.d binutils-2.27/gas/testsuite/gas/i386/x86-64-localpic.d +--- binutils.orig/gas/testsuite/gas/i386/x86-64-localpic.d 2017-10-25 12:52:20.064289465 +0100 ++++ binutils-2.27/gas/testsuite/gas/i386/x86-64-localpic.d 2017-10-25 15:12:35.549099037 +0100 +@@ -1,6 +1,8 @@ + #as: -mrelax-relocations=yes + #readelf: -rsW + #name: x86-64 local PIC ++#skip: *-*-* ++# SKIPed because generation of the R_X86_64_REX_GOTPCRELX reloc is currently suppressed. + + Relocation section '.rela.text' at offset 0x[0-9a-f]+ contains 1 entries: + +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend +diff -rup binutils.orig/ld/testsuite/ld-cdtest/cdtest-foo.cc binutils-2.27/ld/testsuite/ld-cdtest/cdtest-foo.cc +--- binutils.orig/ld/testsuite/ld-cdtest/cdtest-foo.cc 2017-10-25 12:52:20.549283841 +0100 ++++ binutils-2.27/ld/testsuite/ld-cdtest/cdtest-foo.cc 2017-10-25 15:12:35.549099037 +0100 +@@ -8,7 +8,7 @@ + #if (__GNUG__ == 2) + typedef __SIZE_TYPE__ size_t; + #else +-typedef unsigned int size_t; ++typedef unsigned long size_t; + #endif + + extern "C" { +diff -rup binutils.orig/ld/testsuite/ld-elf/shared.exp binutils-2.27/ld/testsuite/ld-elf/shared.exp +--- binutils.orig/ld/testsuite/ld-elf/shared.exp 2017-10-25 12:52:20.578283504 +0100 ++++ binutils-2.27/ld/testsuite/ld-elf/shared.exp 2017-10-25 15:45:58.374968233 +0100 +@@ -483,10 +483,10 @@ set build_cxx_tests { + "-shared -Wl,--dynamic-list-cpp-typeinfo" "-fPIC" + {dl3.cc} {} "libdl3c.so" "c++"} + {"Build libdnew1a.so with --Bsymbolic-functions --dynamic-list-cpp-new" +- "-shared -Wl,-Bsymbolic-functions,--dynamic-list-cpp-new" "-fPIC" ++ "-shared -Wl,-Bsymbolic-functions,--dynamic-list-cpp-new" "-fPIC -ansi" + {del.cc new.cc} {} "libnew1a.so" "c++"} + {"Build libdnew1b.so with --dynamic-list-data --dynamic-list-cpp-new" +- "-shared -Wl,--dynamic-list-data,--dynamic-list-cpp-new" "-fPIC" ++ "-shared -Wl,--dynamic-list-data,--dynamic-list-cpp-new" "-fPIC -ansi" + {del.cc new.cc} {} "libnew1b.so" "c++"} + } + +@@ -503,10 +503,10 @@ set run_cxx_tests { + {dl3main.cc} "dl3c" "dl3a.out" "" "c++"} + {"Run with libnew1a.so" + "tmpdir/libnew1a.so" "" +- {dl5.cc} "dl5a" "dl5.out" "" "c++"} ++ {dl5.cc} "dl5a" "dl5.out" "-ansi" "c++"} + {"Run with libnew1b.so" + "tmpdir/libnew1b.so" "" +- {dl5.cc} "dl5b" "dl5.out" "" "c++"} ++ {dl5.cc} "dl5b" "dl5.out" "-ansi" "c++"} + } + + run_cc_link_tests $build_cxx_tests +diff -rup binutils.orig/ld/testsuite/ld-i386/branch1.d binutils-2.27/ld/testsuite/ld-i386/branch1.d +--- binutils.orig/ld/testsuite/ld-i386/branch1.d 2017-10-25 12:52:20.657282588 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/branch1.d 2017-10-25 15:26:26.015497567 +0100 +@@ -1,6 +1,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/call1.d binutils-2.27/ld/testsuite/ld-i386/call1.d +--- binutils.orig/ld/testsuite/ld-i386/call1.d 2017-10-25 12:52:20.658282576 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/call1.d 2017-10-25 15:26:33.407412174 +0100 +@@ -1,3 +1,5 @@ + #as: --32 -mrelax-relocations=yes + #ld: -shared -melf_i386 + #error: direct GOT relocation R_386_GOT32X against `foo' without base register can not be used when making a shared object ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. +diff -rup binutils.orig/ld/testsuite/ld-i386/call2.d binutils-2.27/ld/testsuite/ld-i386/call2.d +--- binutils.orig/ld/testsuite/ld-i386/call2.d 2017-10-25 12:52:20.658282576 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/call2.d 2017-10-25 15:26:43.024301080 +0100 +@@ -1,3 +1,5 @@ + #as: --32 -mrelax-relocations=yes + #ld: -shared -melf_i386 + #error: direct GOT relocation R_386_GOT32X against `foo' without base register can not be used when making a shared object ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. +diff -rup binutils.orig/ld/testsuite/ld-i386/call3a.d binutils-2.27/ld/testsuite/ld-i386/call3a.d +--- binutils.orig/ld/testsuite/ld-i386/call3a.d 2017-10-25 12:52:20.658282576 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/call3a.d 2017-10-25 15:29:17.042521838 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/call3b.d binutils-2.27/ld/testsuite/ld-i386/call3b.d +--- binutils.orig/ld/testsuite/ld-i386/call3b.d 2017-10-25 12:52:20.658282576 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/call3b.d 2017-10-25 15:29:21.756467382 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 -z call-nop=prefix-addr + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/call3c.d binutils-2.27/ld/testsuite/ld-i386/call3c.d +--- binutils.orig/ld/testsuite/ld-i386/call3c.d 2017-10-25 12:52:20.658282576 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/call3c.d 2017-10-25 15:29:26.457413076 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 -z call-nop=prefix-nop + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/call3d.d binutils-2.27/ld/testsuite/ld-i386/call3d.d +--- binutils.orig/ld/testsuite/ld-i386/call3d.d 2017-10-25 12:52:20.658282576 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/call3d.d 2017-10-25 15:29:30.925361461 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 -z call-nop=suffix-nop + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/call3e.d binutils-2.27/ld/testsuite/ld-i386/call3e.d +--- binutils.orig/ld/testsuite/ld-i386/call3e.d 2017-10-25 12:52:20.658282576 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/call3e.d 2017-10-25 15:29:38.894269403 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 -z call-nop=prefix-0x67 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/call3f.d binutils-2.27/ld/testsuite/ld-i386/call3f.d +--- binutils.orig/ld/testsuite/ld-i386/call3f.d 2017-10-25 12:52:20.658282576 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/call3f.d 2017-10-25 15:29:47.134174215 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 -z call-nop=prefix-0x90 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/call3g.d binutils-2.27/ld/testsuite/ld-i386/call3g.d +--- binutils.orig/ld/testsuite/ld-i386/call3g.d 2017-10-25 12:52:20.658282576 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/call3g.d 2017-10-25 15:29:52.341114063 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 -z call-nop=suffix-0x90 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/call3h.d binutils-2.27/ld/testsuite/ld-i386/call3h.d +--- binutils.orig/ld/testsuite/ld-i386/call3h.d 2017-10-25 12:52:20.658282576 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/call3h.d 2017-10-25 15:29:57.237057504 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 -z call-nop=suffix-144 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/i386.exp binutils-2.27/ld/testsuite/ld-i386/i386.exp +--- binutils.orig/ld/testsuite/ld-i386/i386.exp 2017-10-25 12:52:20.661282542 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/i386.exp 2017-10-25 15:42:06.083647050 +0100 +@@ -133,13 +133,6 @@ set i386tests { + {{readelf -Ssrl tlspic.rd} {objdump -drj.text tlspic.dd} + {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}} + "libtlspic.so"} +- {"TLS -fpic -shared transitions without PLT" +- "-shared -melf_i386 --no-ld-generated-unwind-info" "" +- "-mrelax-relocations=yes --32" +- {tlspic3.s tlspic2.s} +- {{readelf -Ssrl tlspic2.rd} {objdump -drj.text tlspic2.dd} +- {objdump -sj.got tlspic2.sd} {objdump -sj.tdata tlspic2.td}} +- "libtlspic2.so"} + {"TLS descriptor -fpic -shared transitions" + "-shared -melf_i386 --no-ld-generated-unwind-info" "" + "--32" {tlsdesc.s tlspic2.s} +@@ -154,13 +147,6 @@ set i386tests { + {{readelf -Ssrl tlsbin.rd} {objdump -drj.text tlsbin.dd} + {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}} + "tlsbin"} +- {"TLS -fpic and -fno-pic exec transitions without PLT" +- "-melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info" "" +- "-mrelax-relocations=yes --32" +- {tlsbinpic2.s tlsbin.s} +- {{readelf -Ssrl tlsbin2.rd} {objdump -drj.text tlsbin2.dd} +- {objdump -sj.got tlsbin2.sd} {objdump -sj.tdata tlsbin2.td}} +- "tlsbin2"} + {"TLS descriptor -fpic and -fno-pic exec transitions" + "-melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info" "" + "--32" {tlsbindesc.s tlsbin.s} +@@ -191,17 +177,9 @@ set i386tests { + {"TLS GD->LE transition" "-melf_i386" "" + "--32" {tlsgd1.s} + {{objdump -dwr tlsgd1.dd}} "tlsgd1"} +- {"TLS GD->LE transition without PLT" "-melf_i386" "" +- "-mrelax-relocations=yes --32" +- {tlsgd3.s} +- {{objdump -dwr tlsgd3.dd}} "tlsgd3"} + {"TLS LD->LE transition" "-melf_i386" "" + "--32" {tlsld1.s} + {{objdump -dwr tlsld1.dd}} "tlsld1"} +- {"TLS LD->LE transition without PLT" "-melf_i386" "" +- "-mrelax-relocations=yes --32" +- {tlsld2.s} +- {{objdump -dwr tlsld2.dd}} "tlsld2"} + {"TLS IE->LE transition" "-melf_i386" "" + "--32" {tlsie1.s} + {{objdump -dwr tlsie1.dd}} "tlsie1"} +diff -rup binutils.orig/ld/testsuite/ld-i386/jmp1.d binutils-2.27/ld/testsuite/ld-i386/jmp1.d +--- binutils.orig/ld/testsuite/ld-i386/jmp1.d 2017-10-25 12:52:20.661282542 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/jmp1.d 2017-10-25 15:30:06.805946963 +0100 +@@ -1,3 +1,5 @@ + #as: --32 -mrelax-relocations=yes + #ld: -shared -melf_i386 + #error: direct GOT relocation R_386_GOT32X against `foo' without base register can not be used when making a shared object ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. +diff -rup binutils.orig/ld/testsuite/ld-i386/jmp2.d binutils-2.27/ld/testsuite/ld-i386/jmp2.d +--- binutils.orig/ld/testsuite/ld-i386/jmp2.d 2017-10-25 12:52:20.662282530 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/jmp2.d 2017-10-25 15:30:14.181861755 +0100 +@@ -1,3 +1,5 @@ + #as: --32 -mrelax-relocations=yes + #ld: -shared -melf_i386 + #error: direct GOT relocation R_386_GOT32X against `foo' without base register can not be used when making a shared object ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. +diff -rup binutils.orig/ld/testsuite/ld-i386/lea1a.d binutils-2.27/ld/testsuite/ld-i386/lea1a.d +--- binutils.orig/ld/testsuite/ld-i386/lea1a.d 2017-10-25 12:52:20.662282530 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/lea1a.d 2017-10-25 15:25:33.592103171 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -Bsymbolic -shared -melf_i386 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/lea1b.d binutils-2.27/ld/testsuite/ld-i386/lea1b.d +--- binutils.orig/ld/testsuite/ld-i386/lea1b.d 2017-10-25 12:52:20.662282530 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/lea1b.d 2017-10-25 15:25:39.289037359 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -pie -melf_i386 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/lea1c.d binutils-2.27/ld/testsuite/ld-i386/lea1c.d +--- binutils.orig/ld/testsuite/ld-i386/lea1c.d 2017-10-25 12:52:20.662282530 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/lea1c.d 2017-10-25 15:25:46.777950846 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/lea1d.d binutils-2.27/ld/testsuite/ld-i386/lea1d.d +--- binutils.orig/ld/testsuite/ld-i386/lea1d.d 2017-10-25 12:52:20.662282530 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/lea1d.d 2017-10-25 15:25:55.802846589 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -Bsymbolic -shared -melf_i386 + #readelf: -Sw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + #failif + #... +diff -rup binutils.orig/ld/testsuite/ld-i386/lea1e.d binutils-2.27/ld/testsuite/ld-i386/lea1e.d +--- binutils.orig/ld/testsuite/ld-i386/lea1e.d 2017-10-25 12:52:20.662282530 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/lea1e.d 2017-10-25 15:26:03.115762109 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -pie -melf_i386 + #readelf: -Sw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + #failif + #... +diff -rup binutils.orig/ld/testsuite/ld-i386/lea1f.d binutils-2.27/ld/testsuite/ld-i386/lea1f.d +--- binutils.orig/ld/testsuite/ld-i386/lea1f.d 2017-10-25 12:52:20.662282530 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/lea1f.d 2017-10-25 15:26:09.485688523 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 + #readelf: -Sw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + #failif + #... +diff -rup binutils.orig/ld/testsuite/ld-i386/load1.d binutils-2.27/ld/testsuite/ld-i386/load1.d +--- binutils.orig/ld/testsuite/ld-i386/load1.d 2017-10-25 12:52:20.662282530 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/load1.d 2017-10-25 15:30:23.543753605 +0100 +@@ -2,6 +2,8 @@ + #ld: -melf_i386 + #objdump: -dw --sym + #notarget: i?86-*-nacl* x86_64-*-nacl* ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/load2.d binutils-2.27/ld/testsuite/ld-i386/load2.d +--- binutils.orig/ld/testsuite/ld-i386/load2.d 2017-10-25 12:52:20.662282530 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/load2.d 2017-10-25 15:31:10.090215894 +0100 +@@ -1,3 +1,3 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 -shared +-#error: direct GOT relocation R_386_GOT32X against `foo' without base register can not be used when making a shared object ++#error: direct GOT relocation R_386_GOT32 against `foo' without base register can not be used when making a shared object +diff -rup binutils.orig/ld/testsuite/ld-i386/load3.d binutils-2.27/ld/testsuite/ld-i386/load3.d +--- binutils.orig/ld/testsuite/ld-i386/load3.d 2017-10-25 12:52:20.663282518 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/load3.d 2017-10-25 15:31:24.220052664 +0100 +@@ -1,3 +1,3 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 -shared +-#error: direct GOT relocation R_386_GOT32X against `foo' without base register can not be used when making a shared object ++#error: direct GOT relocation R_386_GOT32 against `foo' without base register can not be used when making a shared object +diff -rup binutils.orig/ld/testsuite/ld-i386/load4a.d binutils-2.27/ld/testsuite/ld-i386/load4a.d +--- binutils.orig/ld/testsuite/ld-i386/load4a.d 2017-10-25 12:52:20.663282518 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/load4a.d 2017-10-25 15:31:33.802941960 +0100 +@@ -1,4 +1,4 @@ + #source: load4.s + #as: --32 -mrelax-relocations=yes + #ld: -Bsymbolic -shared -melf_i386 +-#error: direct GOT relocation R_386_GOT32X against `foo' without base register can not be used when making a shared object ++#error: direct GOT relocation R_386_GOT32 against `foo' without base register can not be used when making a shared object +diff -rup binutils.orig/ld/testsuite/ld-i386/load4b.d binutils-2.27/ld/testsuite/ld-i386/load4b.d +--- binutils.orig/ld/testsuite/ld-i386/load4b.d 2017-10-25 12:52:20.663282518 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/load4b.d 2017-10-25 15:31:50.701746743 +0100 +@@ -2,6 +2,8 @@ + #as: --32 + #ld: -melf_i386 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/load5a.d binutils-2.27/ld/testsuite/ld-i386/load5a.d +--- binutils.orig/ld/testsuite/ld-i386/load5a.d 2017-10-25 12:52:20.663282518 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/load5a.d 2017-10-25 15:31:59.182648770 +0100 +@@ -1,4 +1,4 @@ + #source: load5.s + #as: --32 -mrelax-relocations=yes + #ld: -Bsymbolic -shared -melf_i386 +-#error: direct GOT relocation R_386_GOT32X against `foo' without base register can not be used when making a shared object ++#error: direct GOT relocation R_386_GOT32 against `foo' without base register can not be used when making a shared object +diff -rup binutils.orig/ld/testsuite/ld-i386/load5b.d binutils-2.27/ld/testsuite/ld-i386/load5b.d +--- binutils.orig/ld/testsuite/ld-i386/load5b.d 2017-10-25 12:52:20.663282518 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/load5b.d 2017-10-25 15:32:05.614574468 +0100 +@@ -2,6 +2,8 @@ + #as: --32 + #ld: -melf_i386 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/load7.d binutils-2.27/ld/testsuite/ld-i386/load7.d +--- binutils.orig/ld/testsuite/ld-i386/load7.d 2017-10-25 12:52:20.663282518 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/load7.d 2017-10-25 15:32:15.231463372 +0100 +@@ -1,6 +1,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -shared -melf_i386 --version-script load7.map + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/mov1b.d binutils-2.27/ld/testsuite/ld-i386/mov1b.d +--- binutils.orig/ld/testsuite/ld-i386/mov1b.d 2017-10-25 12:52:20.664282507 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/mov1b.d 2017-10-25 15:26:17.582594986 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -pie -melf_i386 --no-dynamic-linker + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/pr19175.d binutils-2.27/ld/testsuite/ld-i386/pr19175.d +--- binutils.orig/ld/testsuite/ld-i386/pr19175.d 2017-10-25 12:52:20.671282426 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/pr19175.d 2017-10-25 15:34:05.638187937 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -Bsymbolic -shared -melf_i386 -T pr19175.t + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/pr19609-1a.d binutils-2.27/ld/testsuite/ld-i386/pr19609-1a.d +--- binutils.orig/ld/testsuite/ld-i386/pr19609-1a.d 2017-10-25 12:52:20.672282414 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/pr19609-1a.d 2017-10-25 15:34:17.143055031 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/pr19609-1b.d binutils-2.27/ld/testsuite/ld-i386/pr19609-1b.d +--- binutils.orig/ld/testsuite/ld-i386/pr19609-1b.d 2017-10-25 12:52:20.672282414 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/pr19609-1b.d 2017-10-25 15:34:25.735955848 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -pie -melf_i386 --no-dynamic-linker + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/pr19609-1d.d binutils-2.27/ld/testsuite/ld-i386/pr19609-1d.d +--- binutils.orig/ld/testsuite/ld-i386/pr19609-1d.d 2017-10-25 12:52:20.673282403 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/pr19609-1d.d 2017-10-25 15:35:05.258500067 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -E -melf_i386 --no-dynamic-linker + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/pr19609-1f.d binutils-2.27/ld/testsuite/ld-i386/pr19609-1f.d +--- binutils.orig/ld/testsuite/ld-i386/pr19609-1f.d 2017-10-25 12:52:20.673282403 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/pr19609-1f.d 2017-10-25 15:35:18.620345975 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -pie --dynamic-list-data -melf_i386 --no-dynamic-linker + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/pr19609-1g.d binutils-2.27/ld/testsuite/ld-i386/pr19609-1g.d +--- binutils.orig/ld/testsuite/ld-i386/pr19609-1g.d 2017-10-25 12:52:20.673282403 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/pr19609-1g.d 2017-10-25 15:35:26.379256499 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -pie -E -melf_i386 --no-dynamic-linker + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/pr19609-1h.d binutils-2.27/ld/testsuite/ld-i386/pr19609-1h.d +--- binutils.orig/ld/testsuite/ld-i386/pr19609-1h.d 2017-10-25 12:52:20.673282403 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/pr19609-1h.d 2017-10-25 15:35:33.308176593 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -pie -E -Bsymbolic-functions -melf_i386 --no-dynamic-linker + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/pr19609-2a.d binutils-2.27/ld/testsuite/ld-i386/pr19609-2a.d +--- binutils.orig/ld/testsuite/ld-i386/pr19609-2a.d 2017-10-25 12:52:20.673282403 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/pr19609-2a.d 2017-10-25 15:35:46.253027313 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/pr20244-2d.d binutils-2.27/ld/testsuite/ld-i386/pr20244-2d.d +--- binutils.orig/ld/testsuite/ld-i386/pr20244-2d.d 2017-10-25 12:52:20.677282356 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/pr20244-2d.d 2017-10-25 15:38:34.521086821 +0100 +@@ -1,4 +1,4 @@ + #source: pr20244-2.s + #as: --32 + #ld: -pie -m elf_i386 +-#error: direct GOT relocation R_386_GOT32X against `foo' without base register can not be used when making a shared object ++#error: direct GOT relocation R_386_GOT32 against `foo' without base register can not be used when making a shared object +diff -rup binutils.orig/ld/testsuite/ld-i386/pr20253-4b.d binutils-2.27/ld/testsuite/ld-i386/pr20253-4b.d +--- binutils.orig/ld/testsuite/ld-i386/pr20253-4b.d 2017-10-25 12:52:20.678282345 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/pr20253-4b.d 2017-10-25 15:36:45.185347695 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -pie -melf_i386 + #readelf: -r --wide ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 1 entries: + +Offset +Info +Type +Sym.* Value +Symbol's Name +diff -rup binutils.orig/ld/testsuite/ld-i386/tlspie3a.d binutils-2.27/ld/testsuite/ld-i386/tlspie3a.d +--- binutils.orig/ld/testsuite/ld-i386/tlspie3a.d 2017-10-25 12:52:20.682282298 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/tlspie3a.d 2017-10-25 15:25:02.726459735 +0100 +@@ -2,5 +2,7 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 -pie + #readelf: -r ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + There are no relocations in this file. +diff -rup binutils.orig/ld/testsuite/ld-i386/tlspie3b.d binutils-2.27/ld/testsuite/ld-i386/tlspie3b.d +--- binutils.orig/ld/testsuite/ld-i386/tlspie3b.d 2017-10-25 12:52:20.682282298 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/tlspie3b.d 2017-10-25 15:25:10.854365839 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 -pie + #objdump: -dwr ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-i386/tlspie3c.d binutils-2.27/ld/testsuite/ld-i386/tlspie3c.d +--- binutils.orig/ld/testsuite/ld-i386/tlspie3c.d 2017-10-25 12:52:20.682282298 +0100 ++++ binutils-2.27/ld/testsuite/ld-i386/tlspie3c.d 2017-10-25 15:25:21.319244949 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #ld: -melf_i386 -pie -z call-nop=suffix-nop + #objdump: -dwr ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-ifunc/ifunc-13-i386.d binutils-2.27/ld/testsuite/ld-ifunc/ifunc-13-i386.d +--- binutils.orig/ld/testsuite/ld-ifunc/ifunc-13-i386.d 2017-10-25 12:52:20.686282252 +0100 ++++ binutils-2.27/ld/testsuite/ld-ifunc/ifunc-13-i386.d 2017-10-25 15:22:29.230232946 +0100 +@@ -4,6 +4,8 @@ + #as: --32 -mrelax-relocations=yes + #readelf: -r --wide + #target: x86_64-*-* i?86-*-* ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + Relocation section '.rel.ifunc' at offset 0x[0-9a-f]+ contains 1 entries: + [ ]+Offset[ ]+Info[ ]+Type[ ]+.* +diff -rup binutils.orig/ld/testsuite/ld-ifunc/ifunc-21-i386.d binutils-2.27/ld/testsuite/ld-ifunc/ifunc-21-i386.d +--- binutils.orig/ld/testsuite/ld-ifunc/ifunc-21-i386.d 2017-10-25 12:52:20.688282229 +0100 ++++ binutils-2.27/ld/testsuite/ld-ifunc/ifunc-21-i386.d 2017-10-25 15:23:08.637777705 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #objdump: -dw + #target: x86_64-*-* i?86-*-* ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d binutils-2.27/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d +--- binutils.orig/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d 2017-10-25 12:52:20.690282205 +0100 ++++ binutils-2.27/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d 2017-10-25 15:12:35.549099037 +0100 +@@ -2,6 +2,8 @@ + #ld: -melf_x86_64 + #objdump: -dw + #target: x86_64-*-* ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-ifunc/ifunc-22-i386.d binutils-2.27/ld/testsuite/ld-ifunc/ifunc-22-i386.d +--- binutils.orig/ld/testsuite/ld-ifunc/ifunc-22-i386.d 2017-10-25 12:52:20.688282229 +0100 ++++ binutils-2.27/ld/testsuite/ld-ifunc/ifunc-22-i386.d 2017-10-25 15:23:00.698869415 +0100 +@@ -2,6 +2,8 @@ + #as: --32 -mrelax-relocations=yes + #objdump: -dw + #target: x86_64-*-* i?86-*-* ++#xfail: *-*-* ++# XFAILed because generation of the R_386_GOT32X relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d binutils-2.27/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d +--- binutils.orig/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d 2017-10-25 12:52:20.690282205 +0100 ++++ binutils-2.27/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d 2017-10-25 15:12:35.549099037 +0100 +@@ -2,6 +2,8 @@ + #ld: -melf_x86_64 + #objdump: -dw + #target: x86_64-*-* ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d binutils-2.27/ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d +--- binutils.orig/ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d 2017-10-25 12:52:20.689282217 +0100 ++++ binutils-2.27/ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d 2017-10-25 15:12:35.549099037 +0100 +@@ -3,6 +3,8 @@ + #ld: -r -melf_x86_64 + #readelf: -r --wide + #target: x86_64-*-* ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + Relocation section '.rela.text' at .* + [ ]+Offset[ ]+Info[ ]+Type[ ]+.* +diff -rup binutils.orig/ld/testsuite/ld-selective/selective.exp binutils-2.27/ld/testsuite/ld-selective/selective.exp +--- binutils.orig/ld/testsuite/ld-selective/selective.exp 2017-10-25 12:52:20.872280095 +0100 ++++ binutils-2.27/ld/testsuite/ld-selective/selective.exp 2017-10-25 15:21:30.397912586 +0100 +@@ -102,7 +102,7 @@ foreach testitem $seltests { + # the functionality we try to test for cannot be expected to work. + set version [remote_exec host "$CXX -dumpversion"] + set version [lindex $version 1] +- if [regexp "^(\[1-9\]\[0-9\]+|\[4-9\]|3.(\[1-9\]\[0-9\]+|\[4-9\]))\\." $version] { ++ if [regexp "^(\[1-9\]\[0-9\]+|\[4-9\]|3.(\[1-9\]\[0-9\]+|\[4-9\]))" $version] { + set testflags "$cflags $cxxflags" + setup_xfail {*-*-*} + } else { +diff -rup binutils.orig/ld/testsuite/ld-x86-64/call1a.d binutils-2.27/ld/testsuite/ld-x86-64/call1a.d +--- binutils.orig/ld/testsuite/ld-x86-64/call1a.d 2017-10-25 12:52:21.010278494 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/call1a.d 2017-10-25 15:12:35.550099025 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/call1b.d binutils-2.27/ld/testsuite/ld-x86-64/call1b.d +--- binutils.orig/ld/testsuite/ld-x86-64/call1b.d 2017-10-25 12:52:21.010278494 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/call1b.d 2017-10-25 15:12:35.550099025 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 -z call-nop=prefix-addr + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/call1c.d binutils-2.27/ld/testsuite/ld-x86-64/call1c.d +--- binutils.orig/ld/testsuite/ld-x86-64/call1c.d 2017-10-25 12:52:21.010278494 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/call1c.d 2017-10-25 15:12:35.550099025 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 -z call-nop=prefix-nop + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/call1d.d binutils-2.27/ld/testsuite/ld-x86-64/call1d.d +--- binutils.orig/ld/testsuite/ld-x86-64/call1d.d 2017-10-25 12:52:21.011278483 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/call1d.d 2017-10-25 15:12:35.550099025 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 -z call-nop=suffix-nop + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/call1e.d binutils-2.27/ld/testsuite/ld-x86-64/call1e.d +--- binutils.orig/ld/testsuite/ld-x86-64/call1e.d 2017-10-25 12:52:21.011278483 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/call1e.d 2017-10-25 15:12:35.550099025 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 -z call-nop=prefix-0x67 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/call1f.d binutils-2.27/ld/testsuite/ld-x86-64/call1f.d +--- binutils.orig/ld/testsuite/ld-x86-64/call1f.d 2017-10-25 12:52:21.011278483 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/call1f.d 2017-10-25 15:12:35.550099025 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 -z call-nop=prefix-0x90 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/call1g.d binutils-2.27/ld/testsuite/ld-x86-64/call1g.d +--- binutils.orig/ld/testsuite/ld-x86-64/call1g.d 2017-10-25 12:52:21.011278483 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/call1g.d 2017-10-25 15:12:35.550099025 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 -z call-nop=suffix-0x90 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/call1h.d binutils-2.27/ld/testsuite/ld-x86-64/call1h.d +--- binutils.orig/ld/testsuite/ld-x86-64/call1h.d 2017-10-25 12:52:21.011278483 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/call1h.d 2017-10-25 15:12:35.550099025 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 -z call-nop=suffix-144 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/call1i.d binutils-2.27/ld/testsuite/ld-x86-64/call1i.d +--- binutils.orig/ld/testsuite/ld-x86-64/call1i.d 2017-10-25 12:52:21.011278483 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/call1i.d 2017-10-25 15:12:35.550099025 +0100 +@@ -2,6 +2,8 @@ + #as: --x32 -mrelax-relocations=yes + #ld: -melf32_x86_64 -z call-nop=suffix-0x90 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/lea1c.d binutils-2.27/ld/testsuite/ld-x86-64/lea1c.d +--- binutils.orig/ld/testsuite/ld-x86-64/lea1c.d 2017-10-25 12:52:21.015278436 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/lea1c.d 2017-10-25 15:12:35.550099025 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/lea1f.d binutils-2.27/ld/testsuite/ld-x86-64/lea1f.d +--- binutils.orig/ld/testsuite/ld-x86-64/lea1f.d 2017-10-25 12:52:21.016278425 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/lea1f.d 2017-10-25 15:12:35.550099025 +0100 +@@ -2,6 +2,8 @@ + #as: --x32 -mrelax-relocations=yes + #ld: -melf32_x86_64 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/load1a.d binutils-2.27/ld/testsuite/ld-x86-64/load1a.d +--- binutils.orig/ld/testsuite/ld-x86-64/load1a.d 2017-10-25 12:52:21.016278425 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/load1a.d 2017-10-25 15:12:35.550099025 +0100 +@@ -3,6 +3,8 @@ + #ld: -melf_x86_64 + #objdump: -dw --sym + #notarget: x86_64-*-nacl* ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/load1b.d binutils-2.27/ld/testsuite/ld-x86-64/load1b.d +--- binutils.orig/ld/testsuite/ld-x86-64/load1b.d 2017-10-25 12:52:21.017278414 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/load1b.d 2017-10-25 15:12:35.550099025 +0100 +@@ -3,6 +3,8 @@ + #ld: -melf32_x86_64 + #objdump: -dw --sym + #notarget: x86_64-*-nacl* ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/mov1b.d binutils-2.27/ld/testsuite/ld-x86-64/mov1b.d +--- binutils.orig/ld/testsuite/ld-x86-64/mov1b.d 2017-10-25 12:52:21.041278135 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/mov1b.d 2017-10-25 15:12:35.550099025 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -pie -melf_x86_64 --no-dynamic-linker + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/mov1d.d binutils-2.27/ld/testsuite/ld-x86-64/mov1d.d +--- binutils.orig/ld/testsuite/ld-x86-64/mov1d.d 2017-10-25 12:52:21.041278135 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/mov1d.d 2017-10-25 15:12:35.551099013 +0100 +@@ -2,6 +2,8 @@ + #as: --x32 -mrelax-relocations=yes + #ld: -pie -melf32_x86_64 --no-dynamic-linker + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/no-plt.exp binutils-2.27/ld/testsuite/ld-x86-64/no-plt.exp +--- binutils.orig/ld/testsuite/ld-x86-64/no-plt.exp 2017-10-25 12:52:21.020278378 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/no-plt.exp 2017-10-25 15:12:35.551099013 +0100 +@@ -70,15 +70,6 @@ run_cc_link_tests [list \ + "libno-plt-1b.so" \ + ] \ + [list \ +- "No PLT (dynamic 1a)" \ +- "tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ +- tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \ +- "" \ +- {dummy.s} \ +- {{readelf -Wr no-plt-1a.rd} {objdump -dwrj.text no-plt-1a.dd}} \ +- "no-plt-1a" \ +- ] \ +- [list \ + "No PLT (dynamic 1b)" \ + "tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ + tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \ +@@ -88,33 +79,6 @@ run_cc_link_tests [list \ + "no-plt-1b" \ + ] \ + [list \ +- "No PLT (dynamic 1c)" \ +- "tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ +- tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \ +- "" \ +- {dummy.s} \ +- {{readelf -Wr no-plt-1c.rd} {objdump -dwrj.text no-plt-1c.dd}} \ +- "no-plt-1c" \ +- ] \ +- [list \ +- "No PLT (static 1d)" \ +- "-static tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ +- tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \ +- "" \ +- {dummy.s} \ +- {{readelf -Wr no-plt-1d.rd} {objdump -dwrj.text no-plt-1d.dd}} \ +- "no-plt-1d" \ +- ] \ +- [list \ +- "No PLT (PIE 1e)" \ +- "-pie tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ +- tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \ +- "" \ +- {dummy.s} \ +- {{readelf -Wr no-plt-1e.rd} {objdump -dwrj.text no-plt-1e.dd}} \ +- "no-plt-1e" \ +- ] \ +- [list \ + "No PLT (PIE 1f)" \ + "-pie tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ + tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \ +@@ -123,15 +87,6 @@ run_cc_link_tests [list \ + {{readelf -Wr no-plt-1f.rd} {objdump -dwrj.text no-plt-1f.dd}} \ + "no-plt-1f" \ + ] \ +- [list \ +- "No PLT (PIE 1g)" \ +- "-pie tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ +- tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \ +- "" \ +- { dummy.s } \ +- {{readelf -Wr no-plt-1g.rd} {objdump -dwrj.text no-plt-1g.dd}} \ +- "no-plt-1g" \ +- ] \ + ] + + run_ld_link_exec_tests [] [list \ +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-1a.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1a.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-1a.d 2017-10-25 12:52:21.029278274 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1a.d 2017-10-25 15:12:35.551099013 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 --no-relax + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-1b.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1b.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-1b.d 2017-10-25 12:52:21.029278274 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1b.d 2017-10-25 15:12:35.551099013 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -pie -melf_x86_64 --no-dynamic-linker + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-1d.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1d.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-1d.d 2017-10-25 12:52:21.029278274 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1d.d 2017-10-25 15:12:35.551099013 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -E -melf_x86_64 --no-dynamic-linker + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-1f.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1f.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-1f.d 2017-10-25 12:52:21.029278274 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1f.d 2017-10-25 15:12:35.551099013 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -pie --dynamic-list-data -melf_x86_64 --no-dynamic-linker + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-1g.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1g.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-1g.d 2017-10-25 12:52:21.029278274 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1g.d 2017-10-25 15:12:35.551099013 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -pie -E -melf_x86_64 --no-dynamic-linker + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-1h.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1h.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-1h.d 2017-10-25 12:52:21.029278274 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1h.d 2017-10-25 15:12:35.551099013 +0100 +@@ -2,6 +2,8 @@ + #as: --x32 -mrelax-relocations=yes + #ld: -melf32_x86_64 --no-relax + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-1i.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1i.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-1i.d 2017-10-25 12:52:21.029278274 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1i.d 2017-10-25 15:12:35.551099013 +0100 +@@ -2,6 +2,8 @@ + #as: --x32 -mrelax-relocations=yes + #ld: -pie -melf32_x86_64 --no-dynamic-linker + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-1k.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1k.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-1k.d 2017-10-25 12:52:21.029278274 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-1k.d 2017-10-25 15:12:35.551099013 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -pie -E -Bsymbolic-functions -melf_x86_64 --no-dynamic-linker + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-2a.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-2a.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-2a.d 2017-10-25 12:52:21.029278274 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-2a.d 2017-10-25 15:12:35.551099013 +0100 +@@ -2,3 +2,5 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 + #error: .*relocation truncated to fit: R_X86_64_32S .* ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-2b.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-2b.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-2b.d 2017-10-25 12:52:21.029278274 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-2b.d 2017-10-25 15:12:35.551099013 +0100 +@@ -2,3 +2,5 @@ + #as: --x32 -mrelax-relocations=yes + #ld: -melf32_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 + #error: .*relocation truncated to fit: R_X86_64_32S .* ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-3a.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-3a.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-3a.d 2017-10-25 12:52:21.030278263 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-3a.d 2017-10-25 15:12:35.551099013 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-3b.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-3b.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-3b.d 2017-10-25 12:52:21.030278263 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-3b.d 2017-10-25 15:12:35.552099002 +0100 +@@ -2,6 +2,8 @@ + #as: --x32 -mrelax-relocations=yes + #ld: -melf32_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-4a.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-4a.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-4a.d 2017-10-25 12:52:21.030278263 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-4a.d 2017-10-25 15:12:35.552099002 +0100 +@@ -3,3 +3,5 @@ + #ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 + #error: .*relocation truncated to fit: R_X86_64_32S .* + #error: .*relocation truncated to fit: R_X86_64_32S .* ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-4b.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-4b.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-4b.d 2017-10-25 12:52:21.030278263 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-4b.d 2017-10-25 15:12:35.552099002 +0100 +@@ -2,6 +2,8 @@ + #as: --x32 -mrelax-relocations=yes + #ld: -melf32_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-4c.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-4c.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-4c.d 2017-10-25 12:52:21.030278263 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-4c.d 2017-10-25 15:12:35.552099002 +0100 +@@ -3,3 +3,5 @@ + #ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 + #error: .*relocation truncated to fit: R_X86_64_32S .* + #error: .*relocation truncated to fit: R_X86_64_32S .* ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-4d.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-4d.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-4d.d 2017-10-25 12:52:21.030278263 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-4d.d 2017-10-25 15:12:35.552099002 +0100 +@@ -2,6 +2,8 @@ + #as: --x32 -mrelax-relocations=yes + #ld: -melf32_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-5a.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-5a.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-5a.d 2017-10-25 12:52:21.030278263 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-5a.d 2017-10-25 15:12:35.552099002 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-5d.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-5d.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-5d.d 2017-10-25 12:52:21.030278263 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-5d.d 2017-10-25 15:12:35.552099002 +0100 +@@ -2,3 +2,5 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 -Ttext=0x80000000 + #error: .*relocation truncated to fit: R_X86_64_PC32 .* ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-6a.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-6a.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-6a.d 2017-10-25 12:52:21.031278251 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-6a.d 2017-10-25 15:12:35.552099002 +0100 +@@ -2,3 +2,5 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 --defsym foobar=0x80000000 + #error: .*relocation truncated to fit: R_X86_64_32S .* ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-6c.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-6c.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-6c.d 2017-10-25 12:52:21.031278251 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-6c.d 2017-10-25 15:12:35.552099002 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 --defsym foobar=0x70000000 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-6d.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-6d.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-6d.d 2017-10-25 12:52:21.031278251 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-6d.d 2017-10-25 15:12:35.552099002 +0100 +@@ -2,6 +2,8 @@ + #as: --x32 -mrelax-relocations=yes + #ld: -melf32_x86_64 --defsym foobar=0x80000000 + #objdump: -dw ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-7a.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-7a.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-7a.d 2017-10-25 12:52:21.031278251 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-7a.d 2017-10-25 15:12:35.552099002 +0100 +@@ -2,3 +2,5 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 -Ttext=0x80000000 + #error: .*relocation truncated to fit: R_X86_64_PC32 .* ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. +diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19609-7c.d binutils-2.27/ld/testsuite/ld-x86-64/pr19609-7c.d +--- binutils.orig/ld/testsuite/ld-x86-64/pr19609-7c.d 2017-10-25 12:52:21.031278251 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/pr19609-7c.d 2017-10-25 15:12:35.552099002 +0100 +@@ -2,3 +2,5 @@ + #as: --x32 -mrelax-relocations=yes + #ld: -melf32_x86_64 -Ttext=0x80000000 + #error: .*relocation truncated to fit: R_X86_64_PC32 .* ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. +diff -rup binutils.orig/ld/testsuite/ld-x86-64/tls.exp binutils-2.27/ld/testsuite/ld-x86-64/tls.exp +--- binutils.orig/ld/testsuite/ld-x86-64/tls.exp 2017-10-25 12:52:21.036278193 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/tls.exp 2017-10-25 15:12:35.552099002 +0100 +@@ -69,42 +69,6 @@ run_cc_link_tests [list \ + + run_ld_link_exec_tests [] [list \ + [list \ +- "TLS GD/LD -> LE transition without PLT (dynamic)" \ +- "tmpdir/tls-def1.o tmpdir/tls-main1.o tmpdir/tls-gd1.o \ +- tmpdir/tls-ld1.o" \ +- "" \ +- { dummy.s } \ +- "tls-1a" \ +- "pass.out" \ +- ] \ +- [list \ +- "TLS GD/LD -> LE transition without PLT (PIE)" \ +- "-pie tmpdir/tls-def1.o tmpdir/tls-main1.o tmpdir/tls-gd1.o \ +- tmpdir/tls-ld1.o" \ +- "" \ +- { dummy.s } \ +- "tls-1b" \ +- "pass.out" \ +- ] \ +- [list \ +- "TLS GD/LD -> LE transition without PLT (static)" \ +- "-static tmpdir/tls-def1.o tmpdir/tls-main1.o tmpdir/tls-gd1.o \ +- tmpdir/tls-ld1.o" \ +- "" \ +- { dummy.s } \ +- "tls-1c" \ +- "pass.out" \ +- ] \ +- [list \ +- "TLS GD/LD -> IE transition without PLT" \ +- "tmpdir/tls-main1.o tmpdir/tls-gd1.o tmpdir/tls-ld1.o \ +- tmpdir/libtls-1a.so -R tmpdir" \ +- "" \ +- { dummy.s } \ +- "tls-1d" \ +- "pass.out" \ +- ] \ +- [list \ + "TLS without PLT (1)" \ + "tmpdir/tls-main1.o \ + tmpdir/libtls-1a.so tmpdir/libtls-1b.so -R tmpdir" \ +diff -rup binutils.orig/ld/testsuite/ld-x86-64/tlspie2a.d binutils-2.27/ld/testsuite/ld-x86-64/tlspie2a.d +--- binutils.orig/ld/testsuite/ld-x86-64/tlspie2a.d 2017-10-25 12:52:21.039278158 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/tlspie2a.d 2017-10-25 15:12:35.552099002 +0100 +@@ -2,5 +2,7 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 -pie + #readelf: -r ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + There are no relocations in this file. +diff -rup binutils.orig/ld/testsuite/ld-x86-64/tlspie2b.d binutils-2.27/ld/testsuite/ld-x86-64/tlspie2b.d +--- binutils.orig/ld/testsuite/ld-x86-64/tlspie2b.d 2017-10-25 12:52:21.039278158 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/tlspie2b.d 2017-10-25 15:12:35.552099002 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 -pie + #objdump: -dwr ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/tlspie2c.d binutils-2.27/ld/testsuite/ld-x86-64/tlspie2c.d +--- binutils.orig/ld/testsuite/ld-x86-64/tlspie2c.d 2017-10-25 12:52:21.039278158 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/tlspie2c.d 2017-10-25 15:12:35.553098990 +0100 +@@ -2,6 +2,8 @@ + #as: --64 -mrelax-relocations=yes + #ld: -melf_x86_64 -pie -z call-nop=suffix-nop + #objdump: -dwr ++#xfail: *-*-* ++# XFAILed because generation of the R_X86_64_REX_GOTPCRELX and R_X86_64_GOTPCRELX relocs is currently suppressed. + + .*: +file format .* + +diff -rup binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp binutils-2.27/ld/testsuite/ld-x86-64/x86-64.exp +--- binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp 2017-10-25 12:52:21.040278147 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/x86-64.exp 2017-10-25 15:12:35.553098990 +0100 +@@ -55,13 +55,6 @@ set x86_64tests { + {{readelf -WSsrl tlspic.rd} {objdump -drj.text\ -Mintel64 tlspic.dd} + {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}} + "libtlspic.so"} +- {"TLS -fpic -shared transitions with r15 as GOT base" +- "-shared -melf_x86_64 --no-ld-generated-unwind-info" "" +- "--64 -mrelax-relocations=yes" +- {tlspic3.s tlspic2.s} +- {{readelf -WSsrl tlspic2.rd} {objdump -drj.text\ -Mintel64 tlspic2.dd} +- {objdump -sj.got tlspic2.sd} {objdump -sj.tdata tlspic2.td}} +- "libtlspic2.so"} + {"TLS descriptor -fpic -shared transitions" + "-shared -melf_x86_64 --no-ld-generated-unwind-info" "" + "--64" {tlsdesc.s tlspic2.s} +@@ -76,12 +69,6 @@ set x86_64tests { + {{readelf -WSsrl tlsbin.rd} {objdump -drj.text tlsbin.dd} + {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}} + "tlsbin"} +- {"TLS -fpic and -fno-pic exec transitions without PLT" +- "-melf_x86_64 tmpdir/libtlslib.so --no-ld-generated-unwind-info" "" +- "-mrelax-relocations=yes --64" {tlsbinpic2.s tlsbin.s} +- {{readelf -WSsrl tlsbin2.rd} {objdump -drj.text tlsbin2.dd} +- {objdump -sj.got tlsbin2.sd} {objdump -sj.tdata tlsbin2.td}} +- "tlsbin2"} + {"TLS descriptor -fpic and -fno-pic exec transitions" + "-melf_x86_64 tmpdir/libtlslib.so --no-ld-generated-unwind-info" "" + "--64" {tlsbindesc.s tlsbin.s} +@@ -128,19 +115,11 @@ set x86_64tests { + {"TLS GD->IE transition" "-melf_x86_64 tmpdir/libtlsgd5.so" "" + "--64" {tlsgd5a.s} + {{objdump -dwr tlsgd5.dd}} "tlsgd5a"} +- {"TLS GD->IE transition without PLT" +- "-melf_x86_64 tmpdir/libtlsgd5.so" "" +- "-mrelax-relocations=yes --64" {tlsgd5c.s} +- {{objdump -dwr tlsgd5.dd}} "tlsgd5b"} + {"Helper TLS X32 GD->IE transition DSO" "-shared -melf32_x86_64" "" + "--x32" {tlsgd6b.s} {} "libtlsgd6.so"} + {"TLS X32 GD->IE transition" "-melf32_x86_64 tmpdir/libtlsgd6.so" "" + "--x32" {tlsgd6a.s} + {{objdump -dwr tlsgd6.dd}} "tlsgd6a"} +- {"TLS X32 GD->IE transition without PLT" +- "-melf32_x86_64 tmpdir/libtlsgd6.so" "" +- "-mrelax-relocations=yes --x32" {tlsgd6c.s} +- {{objdump -dwr tlsgd6.dd}} "tlsgd6b"} + {"TLS X32 LD->LE transition" "-melf32_x86_64" "" + "--x32" {tlsld2.s} + {{objdump -dwr tlsld2.dd}} "tlsld2"} +@@ -154,15 +133,6 @@ set x86_64tests { + "-melf_x86_64" "" + "--64" {tlsld4.s} + {{objdump -dwr tlsld4.dd}} "tlsld4"} +- {"TLS LD->LE transition without PLT" +- "-melf_x86_64" "" +- "--64 -mrelax-relocations=yes" +- {tlsld5.s} +- {{objdump -dwr tlsld5.dd}} "tlsld5"} +- {"TLS X32 LD->LE transition without PLT" "-melf32_x86_64" "" +- "--x32 -mrelax-relocations=yes" +- {tlsld6.s} +- {{objdump -dwr tlsld6.dd}} "tlsld6"} + {"TLS -mcmodel=large GD->IE transition" "-melf_x86_64 tmpdir/libtlsgd5.so" "" + "--64" {tlsgd8.s} + {{objdump -dwrj.text tlsgd8.dd}} "tlsgd8"} +@@ -620,7 +590,7 @@ if { [isnative] && [which $CC] != 0 } { + "" \ + "-fPIC -Wa,-mrelax-relocations=yes" \ + { plt-main1.c } \ +- {{readelf {-Wr} plt-main1.rd}} \ ++ {} \ + "libplt-main1.a" \ + ] \ + [list \ +@@ -644,7 +614,7 @@ if { [isnative] && [which $CC] != 0 } { + "" \ + "-fPIC -Wa,-mrelax-relocations=yes $PLT_CFLAGS" \ + { plt-main4.c } \ +- {{readelf {-Wr} plt-main4.rd}} \ ++ {} \ + "libplt-main4.a" \ + ] \ + [list \ +@@ -799,14 +769,6 @@ if { [isnative] && [which $CC] != 0 } { + { gotpcrel1a.S gotpcrel1b.c gotpcrel1c.c } \ + ] \ + [list \ +- "Build gotpcrel1" \ +- "-Wl,--as-needed tmpdir/gotpcrel1a.o tmpdir/gotpcrel1b.o tmpdir/gotpcrel1c.o tmpdir/gotpcrel1d.so" \ +- { dummy.s } \ +- "" \ +- {{objdump {-dw} gotpcrel1.dd}} \ +- "gotpcrel1" \ +- ] \ +- [list \ + "Build pr19319.so" \ + "-shared" \ + "" \ +--- binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp 2019-04-15 13:13:09.203928459 +0100 ++++ binutils-2.27/ld/testsuite/ld-x86-64/x86-64.exp 2019-04-15 13:15:31.960858042 +0100 +@@ -623,7 +623,7 @@ if { [isnative] && [which $CC] != 0 } { + tmpdir/plt-main4.o tmpdir/libplt-lib.so" \ + "" \ + { plt-main5.c } \ +- {{readelf {-Wr} plt-main.rd}} \ ++ {} \ + "plt-main" \ + ] \ + [list \ +@@ -632,7 +632,7 @@ if { [isnative] && [which $CC] != 0 } { + tmpdir/plt-main4.o tmpdir/libplt-lib.so -pie" \ + "-fPIC" \ + { plt-main5.c } \ +- {{readelf {-Wr} plt-main.rd}} \ ++ {} \ + "plt-main" \ + ] \ + [list \ +@@ -866,7 +866,7 @@ if { [isnative] && [which $CC] != 0 } { + tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt" \ + "" \ + { plt-main5.c } \ +- {{objdump {-drw} plt-main-bnd.dd}} \ ++ {} \ + "plt-main-bnd" \ + ] \ + [list \ +@@ -875,7 +875,7 @@ if { [isnative] && [which $CC] != 0 } { + tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt -pie" \ + "-fPIC" \ + { plt-main5.c } \ +- {{objdump {-drw} plt-main-bnd.dd}} \ ++ {} \ + "plt-main-pie-bnd" \ + ] \ + ] +@@ -916,5 +916,5 @@ if { ![istarget "x86_64-*-linux*"]} { + + # Linux only tests + run_dump_test "pr17618" +-run_dump_test "pltgot-1" +-run_dump_test "pltgot-2" ++# run_dump_test "pltgot-1" ++# run_dump_test "pltgot-2" diff --git a/SOURCES/binutils-CVE-2018-1000876.patch b/SOURCES/binutils-CVE-2018-1000876.patch new file mode 100644 index 0000000..caf1f63 --- /dev/null +++ b/SOURCES/binutils-CVE-2018-1000876.patch @@ -0,0 +1,151 @@ +diff -rup binutils.orig/bfd/aoutx.h binutils-2.27/bfd/aoutx.h +--- binutils.orig/bfd/aoutx.h 2019-01-14 16:10:59.344958851 +0000 ++++ binutils-2.27/bfd/aoutx.h 2019-01-14 16:11:46.893598783 +0000 +@@ -118,6 +118,7 @@ DESCRIPTION + #define KEEPIT udata.i + + #include "sysdep.h" ++#include <limits.h> + #include "bfd.h" + #include "safe-ctype.h" + #include "bfdlink.h" +@@ -2465,6 +2466,8 @@ NAME (aout, canonicalize_reloc) (bfd *ab + long + NAME (aout, get_reloc_upper_bound) (bfd *abfd, sec_ptr asect) + { ++ bfd_size_type count; ++ + if (bfd_get_format (abfd) != bfd_object) + { + bfd_set_error (bfd_error_invalid_operation); +@@ -2472,26 +2475,25 @@ NAME (aout, get_reloc_upper_bound) (bfd + } + + if (asect->flags & SEC_CONSTRUCTOR) +- return sizeof (arelent *) * (asect->reloc_count + 1); +- +- if (asect == obj_datasec (abfd)) +- return sizeof (arelent *) +- * ((exec_hdr (abfd)->a_drsize / obj_reloc_entry_size (abfd)) +- + 1); +- +- if (asect == obj_textsec (abfd)) +- return sizeof (arelent *) +- * ((exec_hdr (abfd)->a_trsize / obj_reloc_entry_size (abfd)) +- + 1); +- +- if (asect == obj_bsssec (abfd)) +- return sizeof (arelent *); +- +- if (asect == obj_bsssec (abfd)) +- return 0; ++ count = asect->reloc_count; ++ else if (asect == obj_datasec (abfd)) ++ count = exec_hdr (abfd)->a_drsize / obj_reloc_entry_size (abfd); ++ else if (asect == obj_textsec (abfd)) ++ count = exec_hdr (abfd)->a_trsize / obj_reloc_entry_size (abfd); ++ else if (asect == obj_bsssec (abfd)) ++ count = 0; ++ else ++ { ++ bfd_set_error (bfd_error_invalid_operation); ++ return -1; ++ } + +- bfd_set_error (bfd_error_invalid_operation); +- return -1; ++ if (count >= LONG_MAX / sizeof (arelent *)) ++ { ++ bfd_set_error (bfd_error_file_too_big); ++ return -1; ++ } ++ return (count + 1) * sizeof (arelent *); + } + + long +diff -rup binutils.orig/bfd/elf.c binutils-2.27/bfd/elf.c +--- binutils.orig/bfd/elf.c 2019-01-14 16:10:59.331958950 +0000 ++++ binutils-2.27/bfd/elf.c 2019-01-14 16:11:52.525556135 +0000 +@@ -35,6 +35,7 @@ SECTION + /* For sparc64-cross-sparc32. */ + #define _SYSCALL32 + #include "sysdep.h" ++#include <limits.h> + #include "bfd.h" + #include "bfdlink.h" + #include "libbfd.h" +@@ -7769,11 +7770,16 @@ Unable to find equivalent output section + long + _bfd_elf_get_symtab_upper_bound (bfd *abfd) + { +- long symcount; ++ bfd_size_type symcount; + long symtab_size; + Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr; + + symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym; ++ if (symcount >= LONG_MAX / sizeof (asymbol *)) ++ { ++ bfd_set_error (bfd_error_file_too_big); ++ return -1; ++ } + symtab_size = (symcount + 1) * (sizeof (asymbol *)); + if (symcount > 0) + symtab_size -= sizeof (asymbol *); +@@ -7784,7 +7790,7 @@ _bfd_elf_get_symtab_upper_bound (bfd *ab + long + _bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd) + { +- long symcount; ++ bfd_size_type symcount; + long symtab_size; + Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr; + +@@ -7795,6 +7801,11 @@ _bfd_elf_get_dynamic_symtab_upper_bound + } + + symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym; ++ if (symcount >= LONG_MAX / sizeof (asymbol *)) ++ { ++ bfd_set_error (bfd_error_file_too_big); ++ return -1; ++ } + symtab_size = (symcount + 1) * (sizeof (asymbol *)); + if (symcount > 0) + symtab_size -= sizeof (asymbol *); +@@ -7864,7 +7875,7 @@ _bfd_elf_canonicalize_dynamic_symtab (bf + long + _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd) + { +- long ret; ++ bfd_size_type count; + asection *s; + + if (elf_dynsymtab (abfd) == 0) +@@ -7873,15 +7884,20 @@ _bfd_elf_get_dynamic_reloc_upper_bound ( + return -1; + } + +- ret = sizeof (arelent *); ++ count = 1; + for (s = abfd->sections; s != NULL; s = s->next) + if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd) + && (elf_section_data (s)->this_hdr.sh_type == SHT_REL + || elf_section_data (s)->this_hdr.sh_type == SHT_RELA)) +- ret += ((s->size / elf_section_data (s)->this_hdr.sh_entsize) +- * sizeof (arelent *)); +- +- return ret; ++ { ++ count += s->size / elf_section_data (s)->this_hdr.sh_entsize; ++ if (count > LONG_MAX / sizeof (arelent *)) ++ { ++ bfd_set_error (bfd_error_file_too_big); ++ return -1; ++ } ++ } ++ return count * sizeof (arelent *); + } + + /* Canonicalize the dynamic relocation entries. Note that we return the + diff --git a/SOURCES/binutils-CVE-2018-10372.patch b/SOURCES/binutils-CVE-2018-10372.patch new file mode 100644 index 0000000..073a407 --- /dev/null +++ b/SOURCES/binutils-CVE-2018-10372.patch @@ -0,0 +1,22 @@ +--- binutils.orig/binutils/dwarf.c 2018-05-01 11:42:02.656431736 +0100 ++++ binutils-2.30/binutils/dwarf.c 2018-05-01 11:43:24.210383020 +0100 +@@ -9244,7 +9244,18 @@ process_cu_tu_index (struct dwarf_sectio + } + + if (!do_display) +- memcpy (&this_set[row - 1].signature, ph, sizeof (uint64_t)); ++ { ++ size_t num_copy = sizeof (uint64_t); ++ ++ /* PR 23064: Beware of buffer overflow. */ ++ if (ph + num_copy < limit) ++ memcpy (&this_set[row - 1].signature, ph, num_copy); ++ else ++ { ++ warn (_("Signature (%p) extends beyond end of space in section\n"), ph); ++ return 0; ++ } ++ } + + prow = poffsets + (row - 1) * ncols * 4; + /* PR 17531: file: b8ce60a8. */ diff --git a/SOURCES/binutils-CVE-2018-10373.patch b/SOURCES/binutils-CVE-2018-10373.patch new file mode 100644 index 0000000..239f257 --- /dev/null +++ b/SOURCES/binutils-CVE-2018-10373.patch @@ -0,0 +1,11 @@ +--- binutils.orig/bfd/dwarf2.c 2018-05-17 11:46:03.916280930 +0100 ++++ binutils-2.27/bfd/dwarf2.c 2018-05-17 12:11:45.193856898 +0100 +@@ -1471,7 +1471,7 @@ concat_filename (struct line_info_table + { + char *filename; + +- if (file - 1 >= table->num_files) ++ if (table == NULL || file - 1 >= table->num_files) + { + /* FILE == 0 means unknown. */ + if (file) diff --git a/SOURCES/binutils-CVE-2018-10534.patch b/SOURCES/binutils-CVE-2018-10534.patch new file mode 100644 index 0000000..4a1fc8a --- /dev/null +++ b/SOURCES/binutils-CVE-2018-10534.patch @@ -0,0 +1,18 @@ +--- binutils.orig/bfd/peXXigen.c 2018-05-17 11:46:03.979280220 +0100 ++++ binutils-2.27/bfd/peXXigen.c 2018-05-17 12:56:36.402304487 +0100 +@@ -2964,6 +2964,15 @@ _bfd_XX_bfd_copy_private_bfd_data_common + bfd_get_section_size (section) - (addr - section->vma)); + return FALSE; + } ++ /* PR 23110. */ ++ else if (ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size < 0) ++ { ++ /* xgettext:c-format */ ++ _bfd_error_handler ++ (_("%pB: Data Directory size (%#lx) is negative"), ++ obfd, ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size); ++ return FALSE; ++ } + + for (i = 0; i < ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size + / sizeof (struct external_IMAGE_DEBUG_DIRECTORY); i++) diff --git a/SOURCES/binutils-CVE-2018-10535.patch b/SOURCES/binutils-CVE-2018-10535.patch new file mode 100644 index 0000000..212d53c --- /dev/null +++ b/SOURCES/binutils-CVE-2018-10535.patch @@ -0,0 +1,28 @@ +--- binutils.orig/bfd/elf.c 2018-05-17 11:46:03.983280175 +0100 ++++ binutils-2.27/bfd/elf.c 2018-05-17 11:48:01.560955253 +0100 +@@ -3878,16 +3878,23 @@ ignore_section_sym (bfd *abfd, asymbol * + { + elf_symbol_type *type_ptr; + ++ if (sym == NULL) ++ return FALSE; ++ + if ((sym->flags & BSF_SECTION_SYM) == 0) + return FALSE; + ++ if (sym->section == NULL) ++ return TRUE; ++ + type_ptr = elf_symbol_from (abfd, sym); + return ((type_ptr != NULL + && type_ptr->internal_elf_sym.st_shndx != 0 + && bfd_is_abs_section (sym->section)) + || !(sym->section->owner == abfd +- || (sym->section->output_section->owner == abfd +- && sym->section->output_offset == 0) ++ || (sym->section->output_section != NULL ++ && sym->section->output_section->owner == abfd ++ && sym->section->output_offset == 0) + || bfd_is_abs_section (sym->section))); + } + diff --git a/SOURCES/binutils-CVE-2018-7208.patch b/SOURCES/binutils-CVE-2018-7208.patch new file mode 100644 index 0000000..98f0a6b --- /dev/null +++ b/SOURCES/binutils-CVE-2018-7208.patch @@ -0,0 +1,12 @@ +--- binutils.orig/bfd/coffgen.c 2018-05-15 17:25:27.653131326 +0100 ++++ binutils-2.27/bfd/coffgen.c 2018-05-15 17:41:49.604116561 +0100 +@@ -1552,7 +1552,8 @@ coff_pointerize_aux (bfd *abfd, + } + /* A negative tagndx is meaningless, but the SCO 3.2v4 cc can + generate one, so we must be careful to ignore it. */ +- if (auxent->u.auxent.x_sym.x_tagndx.l > 0) ++ if ((unsigned long) auxent->u.auxent.x_sym.x_tagndx.l ++ < obj_raw_syment_count (abfd)) + { + auxent->u.auxent.x_sym.x_tagndx.p = + table_base + auxent->u.auxent.x_sym.x_tagndx.l; diff --git a/SOURCES/binutils-CVE-2018-7568.patch b/SOURCES/binutils-CVE-2018-7568.patch new file mode 100644 index 0000000..481ea14 --- /dev/null +++ b/SOURCES/binutils-CVE-2018-7568.patch @@ -0,0 +1,80 @@ +--- binutils.orig/bfd/dwarf1.c 2018-05-15 17:25:27.656131299 +0100 ++++ binutils-2.27/bfd/dwarf1.c 2018-05-15 17:29:04.176057372 +0100 +@@ -208,6 +208,7 @@ parse_die (bfd * abfd, + /* Then the attributes. */ + while (xptr < (this_die + aDieInfo->length)) + { ++ unsigned int block_len; + unsigned short attr; + + /* Parse the attribute based on its form. This section +@@ -223,12 +224,15 @@ parse_die (bfd * abfd, + break; + case FORM_DATA4: + case FORM_REF: +- if (attr == AT_sibling) +- aDieInfo->sibling = bfd_get_32 (abfd, (bfd_byte *) xptr); +- else if (attr == AT_stmt_list) ++ if (xptr + 4 <= aDiePtrEnd) + { +- aDieInfo->stmt_list_offset = bfd_get_32 (abfd, (bfd_byte *) xptr); +- aDieInfo->has_stmt_list = 1; ++ if (attr == AT_sibling) ++ aDieInfo->sibling = bfd_get_32 (abfd, xptr); ++ else if (attr == AT_stmt_list) ++ { ++ aDieInfo->stmt_list_offset = bfd_get_32 (abfd, xptr); ++ aDieInfo->has_stmt_list = 1; ++ } + } + xptr += 4; + break; +@@ -236,22 +240,41 @@ parse_die (bfd * abfd, + xptr += 8; + break; + case FORM_ADDR: +- if (attr == AT_low_pc) +- aDieInfo->low_pc = bfd_get_32 (abfd, (bfd_byte *) xptr); +- else if (attr == AT_high_pc) +- aDieInfo->high_pc = bfd_get_32 (abfd, (bfd_byte *) xptr); ++ if (xptr + 4 <= aDiePtrEnd) ++ { ++ if (attr == AT_low_pc) ++ aDieInfo->low_pc = bfd_get_32 (abfd, xptr); ++ else if (attr == AT_high_pc) ++ aDieInfo->high_pc = bfd_get_32 (abfd, xptr); ++ } + xptr += 4; + break; + case FORM_BLOCK2: +- xptr += 2 + bfd_get_16 (abfd, (bfd_byte *) xptr); ++ if (xptr + 2 <= aDiePtrEnd) ++ { ++ block_len = bfd_get_16 (abfd, xptr); ++ if (xptr + block_len > aDiePtrEnd ++ || xptr + block_len < xptr) ++ return FALSE; ++ xptr += block_len; ++ } ++ xptr += 2; + break; + case FORM_BLOCK4: +- xptr += 4 + bfd_get_32 (abfd, (bfd_byte *) xptr); ++ if (xptr + 4 <= aDiePtrEnd) ++ { ++ block_len = bfd_get_32 (abfd, xptr); ++ if (xptr + block_len > aDiePtrEnd ++ || xptr + block_len < xptr) ++ return FALSE; ++ xptr += block_len; ++ } ++ xptr += 4; + break; + case FORM_STRING: + if (attr == AT_name) + aDieInfo->name = (char *) xptr; +- xptr += strlen ((char *) xptr) + 1; ++ xptr += strnlen ((char *) xptr, aDiePtrEnd - xptr) + 1; + break; + } + } diff --git a/SOURCES/binutils-CVE-2018-7569.patch b/SOURCES/binutils-CVE-2018-7569.patch new file mode 100644 index 0000000..3141bd9 --- /dev/null +++ b/SOURCES/binutils-CVE-2018-7569.patch @@ -0,0 +1,74 @@ +--- binutils.orig/bfd/dwarf2.c 2018-05-15 17:25:27.661131255 +0100 ++++ binutils-2.27/bfd/dwarf2.c 2018-05-15 17:38:16.900598281 +0100 +@@ -606,14 +606,24 @@ read_8_bytes (bfd *abfd, bfd_byte *buf, + } + + static bfd_byte * +-read_n_bytes (bfd *abfd ATTRIBUTE_UNUSED, +- bfd_byte *buf, +- bfd_byte *end, +- unsigned int size ATTRIBUTE_UNUSED) ++read_n_bytes (bfd_byte * buf, ++ bfd_byte * end, ++ struct dwarf_block * block) + { +- if (buf + size > end) +- return NULL; +- return buf; ++ unsigned int size = block->size; ++ bfd_byte * block_end = buf + size; ++ ++ if (block_end > end || block_end < buf) ++ { ++ block->data = NULL; ++ block->size = 0; ++ return end; ++ } ++ else ++ { ++ block->data = buf; ++ return block_end; ++ } + } + + /* Scans a NUL terminated string starting at BUF, returning a pointer to it. +@@ -1053,8 +1063,7 @@ read_attribute_value (struct attribute * + return NULL; + blk->size = read_2_bytes (abfd, info_ptr, info_ptr_end); + info_ptr += 2; +- blk->data = read_n_bytes (abfd, info_ptr, info_ptr_end, blk->size); +- info_ptr += blk->size; ++ info_ptr = read_n_bytes (info_ptr, info_ptr_end, blk); + attr->u.blk = blk; + break; + case DW_FORM_block4: +@@ -1064,8 +1073,7 @@ read_attribute_value (struct attribute * + return NULL; + blk->size = read_4_bytes (abfd, info_ptr, info_ptr_end); + info_ptr += 4; +- blk->data = read_n_bytes (abfd, info_ptr, info_ptr_end, blk->size); +- info_ptr += blk->size; ++ info_ptr = read_n_bytes (info_ptr, info_ptr_end, blk); + attr->u.blk = blk; + break; + case DW_FORM_data2: +@@ -1100,8 +1108,7 @@ read_attribute_value (struct attribute * + return NULL; + blk->size = safe_read_leb128 (abfd, info_ptr, &bytes_read, FALSE, info_ptr_end); + info_ptr += bytes_read; +- blk->data = read_n_bytes (abfd, info_ptr, info_ptr_end, blk->size); +- info_ptr += blk->size; ++ info_ptr = read_n_bytes (info_ptr, info_ptr_end, blk); + attr->u.blk = blk; + break; + case DW_FORM_block1: +@@ -1111,8 +1118,7 @@ read_attribute_value (struct attribute * + return NULL; + blk->size = read_1_byte (abfd, info_ptr, info_ptr_end); + info_ptr += 1; +- blk->data = read_n_bytes (abfd, info_ptr, info_ptr_end, blk->size); +- info_ptr += blk->size; ++ info_ptr = read_n_bytes (info_ptr, info_ptr_end, blk); + attr->u.blk = blk; + break; + case DW_FORM_data1: diff --git a/SOURCES/binutils-CVE-2018-7642.patch b/SOURCES/binutils-CVE-2018-7642.patch new file mode 100644 index 0000000..dd690ec --- /dev/null +++ b/SOURCES/binutils-CVE-2018-7642.patch @@ -0,0 +1,32 @@ +--- binutils.orig/bfd/aoutx.h 2018-05-29 17:35:09.220062492 +0100 ++++ binutils-2.27/bfd/aoutx.h 2018-05-29 17:37:09.131765293 +0100 +@@ -1713,7 +1713,13 @@ NAME (aout, translate_symbol_table) (bfd + else if (x < strsize) + in->symbol.name = str + x; + else +- return FALSE; ++ { ++ _bfd_error_handler ++ (_("%B: invalid string offset %lx >= %lx"), ++ abfd, (long) x, (long) strsize); ++ bfd_set_error (bfd_error_bad_value); ++ return FALSE; ++ } + + in->symbol.value = GET_SWORD (abfd, ext->e_value); + in->desc = H_GET_16 (abfd, ext->e_desc); +@@ -2261,10 +2267,12 @@ NAME (aout, swap_std_reloc_in) (bfd *abf + if (r_baserel) + r_extern = 1; + +- if (r_extern && r_index > symcount) ++ if (r_extern && r_index >= symcount) + { + /* We could arrange to return an error, but it might be useful +- to see the file even if it is bad. */ ++ to see the file even if it is bad. FIXME: Of course this ++ means that objdump -r *doesn't* see the actual reloc, and ++ objcopy silently writes a different reloc. */ + r_extern = 0; + r_index = N_ABS; + } diff --git a/SOURCES/binutils-CVE-2018-7643.patch b/SOURCES/binutils-CVE-2018-7643.patch new file mode 100644 index 0000000..7a4ed19 --- /dev/null +++ b/SOURCES/binutils-CVE-2018-7643.patch @@ -0,0 +1,17 @@ +diff -rup binutils.orig/binutils/dwarf.c binutils-2.27/binutils/dwarf.c +--- binutils.orig/binutils/dwarf.c 2018-05-30 09:57:23.401080405 +0100 ++++ binutils-2.27/binutils/dwarf.c 2018-05-30 09:57:33.578971357 +0100 +@@ -5195,6 +5195,13 @@ display_debug_ranges (struct dwarf_secti + continue; + } + ++ if (next < section_begin || next >= finish) ++ { ++ warn (_("Corrupt offset (%#8.8lx) in range entry %u\n"), ++ (unsigned long) offset, i); ++ continue; ++ } ++ + if (dwarf_check != 0 && i > 0) + { + if (start < next) diff --git a/SOURCES/binutils-CVE-2018-8945.patch b/SOURCES/binutils-CVE-2018-8945.patch new file mode 100644 index 0000000..de25cba --- /dev/null +++ b/SOURCES/binutils-CVE-2018-8945.patch @@ -0,0 +1,30 @@ +diff -rup binutils.orig/bfd/elf-attrs.c binutils-2.27/bfd/elf-attrs.c +--- binutils.orig/bfd/elf-attrs.c 2018-05-30 09:57:23.385080577 +0100 ++++ binutils-2.27/bfd/elf-attrs.c 2018-05-30 10:01:03.528712202 +0100 +@@ -438,6 +438,15 @@ _bfd_elf_parse_attributes (bfd *abfd, El + /* PR 17512: file: 2844a11d. */ + if (hdr->sh_size == 0) + return; ++ if (hdr->sh_size > bfd_get_size (abfd)) ++ { ++ /* xgettext:c-format */ ++ _bfd_error_handler (_("%B: error: attribute section '%A' too big: %#llx"), ++ abfd, hdr->bfd_section, (long long) hdr->sh_size); ++ bfd_set_error (bfd_error_invalid_operation); ++ return; ++ } ++ + contents = (bfd_byte *) bfd_malloc (hdr->sh_size); + if (!contents) + return; +diff -rup binutils.orig/bfd/elf.c binutils-2.27/bfd/elf.c +--- binutils.orig/bfd/elf.c 2018-05-30 09:57:23.382080610 +0100 ++++ binutils-2.27/bfd/elf.c 2018-05-30 10:01:52.766182199 +0100 +@@ -297,6 +297,7 @@ bfd_elf_get_str_section (bfd *abfd, unsi + /* Allocate and clear an extra byte at the end, to prevent crashes + in case the string table is not terminated. */ + if (shstrtabsize + 1 <= 1 ++ || shstrtabsize > bfd_get_size (abfd) + || bfd_seek (abfd, offset, SEEK_SET) != 0 + || (shstrtab = (bfd_byte *) bfd_alloc (abfd, shstrtabsize + 1)) == NULL) + shstrtab = NULL; diff --git a/SOURCES/binutils-SUPPRESS-PPC-TLBIE-CHECK.patch b/SOURCES/binutils-SUPPRESS-PPC-TLBIE-CHECK.patch new file mode 100644 index 0000000..449f681 --- /dev/null +++ b/SOURCES/binutils-SUPPRESS-PPC-TLBIE-CHECK.patch @@ -0,0 +1,141 @@ +--- binutils-2.25.1/gas/testsuite/gas/ppc/power7.s 2015-07-21 09:20:58.000000000 +0100 ++++ binutils-2.25.1.new/gas/testsuite/gas/ppc/power7.s 2016-03-01 14:08:17.020136029 +0000 +@@ -98,4 +98,4 @@ power7: + mfppr32 11 + mtppr 12 + mtppr32 13 +- tlbie 10,11 ++ tlbie 10 +--- binutils-2.25.1/gas/testsuite/gas/ppc/power7.d 2015-07-21 09:20:58.000000000 +0100 ++++ binutils-2.25.1.new/gas/testsuite/gas/ppc/power7.d 2016-03-01 14:08:17.020136029 +0000 +@@ -107,5 +107,5 @@ Disassembly of section \.text: + .*: (7d 62 e2 a6|a6 e2 62 7d) mfppr32 r11 + .*: (7d 80 e3 a6|a6 e3 80 7d) mtppr r12 + .*: (7d a2 e3 a6|a6 e3 a2 7d) mtppr32 r13 +-.*: (7d 60 52 64|64 52 60 7d) tlbie r10,r11 ++.*: (7c 00 52 64|64 52 00 7c) tlbie r10 + #pass +--- binutils.orig/opcodes/ppc-opc.c 2017-01-17 09:44:23.341397357 +0000 ++++ binutils-2.27/opcodes/ppc-opc.c 2017-01-17 09:45:24.000684653 +0000 +@@ -5182,8 +5182,7 @@ const struct powerpc_opcode powerpc_opco + {"mfbhrbe", X(31,302), X_MASK, POWER8, 0, {RT, BHRBE}}, + + {"tlbie", X(31,306), X_MASK|1<<20,POWER9, TITAN, {RB, RS, RIC, PRS, X_R}}, +-{"tlbie", X(31,306), XRA_MASK, POWER7, POWER9|TITAN, {RB, RS}}, +-{"tlbie", X(31,306), XRTLRA_MASK, PPC, E500|POWER7|TITAN, {RB, L}}, ++{"tlbie", X(31,306), XRTLRA_MASK, PPC, POWER9|TITAN, {RB, L}}, + {"tlbi", X(31,306), XRT_MASK, POWER, 0, {RA0, RB}}, + + {"mfvsrld", X(31,307), XX1RB_MASK, PPCVSX3, 0, {RA, XS6}}, +--- binutils.orig/gas/testsuite/gas/ppc/e500-ill.s 2017-01-17 10:34:39.821866168 +0000 ++++ binutils-2.27/gas/testsuite/gas/ppc/e500-ill.s 2017-01-17 10:56:56.766061777 +0000 +@@ -7,4 +7,4 @@ start: + mfdcr 5, 234 + mtdcr 432, 8 + tlbia +- tlbie 3 ++ +--- binutils.orig/gas/testsuite/gas/ppc/e500-ill.l 2017-01-17 10:34:39.821866168 +0000 ++++ binutils-2.27/gas/testsuite/gas/ppc/e500-ill.l 2017-01-17 10:57:09.021915557 +0000 +@@ -5,4 +5,3 @@ + .*: Error: unrecognized opcode: `mfdcr' + .*: Error: unrecognized opcode: `mtdcr' + .*: Error: unrecognized opcode: `tlbia' +-.*: Error: unrecognized opcode: `tlbie' +--- binutils.orig/gas/testsuite/gas/ppc/power6.s 2017-01-17 10:34:39.822866157 +0000 ++++ binutils-2.27/gas/testsuite/gas/ppc/power6.s 2017-01-17 10:58:38.316849143 +0000 +@@ -69,6 +69,5 @@ start: + slbia + slbia 0 + slbia 7 +- tlbie 10 + tlbie 10,0 + tlbie 10,1 +--- binutils.orig/gas/testsuite/gas/ppc/power6.d 2017-01-17 10:34:39.822866157 +0000 ++++ binutils-2.27/gas/testsuite/gas/ppc/power6.d 2017-01-17 10:59:24.780294250 +0000 +@@ -74,7 +74,6 @@ Disassembly of section \.text: + .*: (7c 00 03 e4|e4 03 00 7c) slbia + .*: (7c 00 03 e4|e4 03 00 7c) slbia + .*: (7c e0 03 e4|e4 03 e0 7c) slbia 7 +-.*: (7c 00 52 64|64 52 00 7c) tlbie r10 +-.*: (7c 00 52 64|64 52 00 7c) tlbie r10 ++.*: (7c 00 52 64|64 52 00 7c) tlbie r10,0 + .*: (7c 20 52 64|64 52 20 7c) tlbie r10,1 + #pass +--- binutils.orig/gas/testsuite/gas/ppc/power7.s 2017-01-17 10:34:39.823866144 +0000 ++++ binutils-2.27/gas/testsuite/gas/ppc/power7.s 2017-01-17 11:00:19.835636746 +0000 +@@ -98,4 +98,4 @@ power7: + mfppr32 11 + mtppr 12 + mtppr32 13 +- tlbie 10 ++ +--- binutils.orig/gas/testsuite/gas/ppc/power7.d 2017-01-17 10:34:39.822866157 +0000 ++++ binutils-2.27/gas/testsuite/gas/ppc/power7.d 2017-01-17 11:00:27.995539295 +0000 +@@ -107,5 +107,4 @@ Disassembly of section \.text: + .*: (7d 62 e2 a6|a6 e2 62 7d) mfppr32 r11 + .*: (7d 80 e3 a6|a6 e3 80 7d) mtppr r12 + .*: (7d a2 e3 a6|a6 e3 a2 7d) mtppr32 r13 +-.*: (7c 00 52 64|64 52 00 7c) tlbie r10 + #pass +diff -rup binutils.orig/gas/config/tc-ppc.c binutils-2.27/gas/config/tc-ppc.c +--- binutils.orig/gas/config/tc-ppc.c 2017-02-02 12:21:55.246930313 +0000 ++++ binutils-2.27/gas/config/tc-ppc.c 2017-02-02 12:29:13.568862941 +0000 +@@ -2672,7 +2672,7 @@ md_assemble (char *str) + + operand = &powerpc_operands[*opindex_ptr]; + if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0 +- && !((operand->flags & PPC_OPERAND_OPTIONAL32) != 0 && ppc_obj64)) ++ || (operand->flags & PPC_OPERAND_OPTIONAL32)) + { + unsigned int opcount; + unsigned int num_operands_expected; +@@ -2741,8 +2741,8 @@ md_assemble (char *str) + + /* If this is an optional operand, and we are skipping it, just + insert a zero. */ +- if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0 +- && !((operand->flags & PPC_OPERAND_OPTIONAL32) != 0 && ppc_obj64) ++ if (((operand->flags & PPC_OPERAND_OPTIONAL) != 0 ++ || (operand->flags & PPC_OPERAND_OPTIONAL32) != 0) + && skip_optional) + { + long val = ppc_optional_operand_value (operand); +diff -rup binutils-2.27.orig/gas/testsuite/gas/ppc/power6.d binutils-2.27/gas/testsuite/gas/ppc/power6.d +--- binutils-2.27.orig/gas/testsuite/gas/ppc/power6.d 2017-02-14 10:17:21.352033787 +0000 ++++ binutils-2.27/gas/testsuite/gas/ppc/power6.d 2017-02-14 11:54:36.643091777 +0000 +@@ -74,6 +74,6 @@ Disassembly of section \.text: + .*: (7c 00 03 e4|e4 03 00 7c) slbia + .*: (7c 00 03 e4|e4 03 00 7c) slbia + .*: (7c e0 03 e4|e4 03 e0 7c) slbia 7 +-.*: (7c 00 52 64|64 52 00 7c) tlbie r10,0 ++.*: (7c 00 52 64|64 52 00 7c) tlbie r10 + .*: (7c 20 52 64|64 52 20 7c) tlbie r10,1 + #pass +diff -rup binutils-2.27.orig/opcodes/ppc-opc.c binutils-2.27/opcodes/ppc-opc.c +--- binutils-2.27.orig/opcodes/ppc-opc.c 2017-02-14 10:17:22.281021961 +0000 ++++ binutils-2.27/opcodes/ppc-opc.c 2017-02-14 11:58:50.035840144 +0000 +@@ -576,9 +576,12 @@ const struct powerpc_operand powerpc_ope + #define RD RS + { 0x1f, 21, NULL, NULL, PPC_OPERAND_GPR }, + ++#define RSLL RS + 1 ++ { 0x1f, 21, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL32 }, ++ + /* The RS and RT fields of the DS form stq and DQ form lq instructions, + which have special value restrictions. */ +-#define RSQ RS + 1 ++#define RSQ RSLL + 1 + #define RTQ RSQ + { 0x1e, 21, NULL, NULL, PPC_OPERAND_GPR }, + +@@ -5132,7 +5135,8 @@ const struct powerpc_opcode powerpc_opco + {"mfbhrbe", X(31,302), X_MASK, POWER8, 0, {RT, BHRBE}}, + + {"tlbie", X(31,306), X_MASK|1<<20,POWER9, TITAN, {RB, RS, RIC, PRS, X_R}}, +-{"tlbie", X(31,306), XRTLRA_MASK, PPC, POWER9|TITAN, {RB, L}}, ++{"tlbie", X(31,306), XRA_MASK, POWER7, POWER9|TITAN, {RB, RSLL}}, ++{"tlbie", X(31,306), XRTLRA_MASK, PPC, E500|POWER7|TITAN, {RB, LOPT}}, + {"tlbi", X(31,306), XRT_MASK, POWER, 0, {RA0, RB}}, + + {"mfvsrld", X(31,307), XX1RB_MASK, PPCVSX3, 0, {RA, XS6}}, diff --git a/SOURCES/binutils-attach-to-group.patch b/SOURCES/binutils-attach-to-group.patch new file mode 100644 index 0000000..9883f68 --- /dev/null +++ b/SOURCES/binutils-attach-to-group.patch @@ -0,0 +1,67 @@ +diff -rup binutils.orig/gas/config/obj-elf.c binutils-2.27/gas/config/obj-elf.c +--- binutils.orig/gas/config/obj-elf.c 2019-01-08 13:52:32.758716536 +0000 ++++ binutils-2.27/gas/config/obj-elf.c 2019-01-08 15:05:34.705763638 +0000 +@@ -78,9 +78,11 @@ static void obj_elf_gnu_attribute (int); + static void obj_elf_tls_common (int); + static void obj_elf_lcomm (int); + static void obj_elf_struct (int); ++static void obj_elf_attach_to_group (int); + + static const pseudo_typeS elf_pseudo_table[] = + { ++ {"attach_to_group", obj_elf_attach_to_group, 0}, + {"comm", obj_elf_common, 0}, + {"common", obj_elf_common, 1}, + {"ident", obj_elf_ident, 0}, +@@ -980,6 +982,27 @@ obj_elf_section_name (void) + return name; + } + ++static void ++obj_elf_attach_to_group (int dummy ATTRIBUTE_UNUSED) ++{ ++ const char * gname = obj_elf_section_name (); ++ ++ if (gname == NULL) ++ { ++ as_warn ("group name not parseable"); ++ return; ++ } ++ ++ if (elf_group_name (now_seg)) ++ { ++ as_warn ("already has a group"); ++ return; ++ } ++ ++ elf_group_name (now_seg) = xstrdup (gname); ++ elf_section_flags (now_seg) |= SHF_GROUP; ++} ++ + void + obj_elf_section (int push) + { +diff -rup binutils.orig/gas/doc/as.texinfo binutils-2.27/gas/doc/as.texinfo +--- binutils.orig/gas/doc/as.texinfo 2019-01-08 13:52:32.766716472 +0000 ++++ binutils-2.27/gas/doc/as.texinfo 2019-01-08 15:05:34.707763621 +0000 +@@ -4312,6 +4312,7 @@ Some machine configurations provide addi + * Altmacro:: @code{.altmacro} + * Ascii:: @code{.ascii "@var{string}"}@dots{} + * Asciz:: @code{.asciz "@var{string}"}@dots{} ++* Attach_to_group:: @code{.attach_to_group @var{name}} + * Balign:: @code{.balign @var{abs-expr} , @var{abs-expr}} + * Bundle directives:: @code{.bundle_align_mode @var{abs-expr}}, etc + * Byte:: @code{.byte @var{expressions}} +@@ -4603,6 +4604,12 @@ trailing zero byte) into consecutive add + @code{.asciz} is just like @code{.ascii}, but each string is followed by + a zero byte. The ``z'' in @samp{.asciz} stands for ``zero''. + ++@node Attach_to_group ++@section @code{.attach_to_group @var{name}} ++Attaches the current section to the named group. This is like declaring ++the section with the @code{G} attribute, but can be done after the section ++has been created. ++ + @node Balign + @section @code{.balign[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}} + diff --git a/SOURCES/binutils-coverty-fixes.patch b/SOURCES/binutils-coverty-fixes.patch new file mode 100644 index 0000000..52791b0 --- /dev/null +++ b/SOURCES/binutils-coverty-fixes.patch @@ -0,0 +1,104 @@ +--- binutils.orig/gold/aarch64.cc 2017-01-18 16:05:12.747684566 +0000 ++++ binutils-2.27/gold/aarch64.cc 2017-01-18 16:05:23.128501011 +0000 +@@ -784,8 +784,14 @@ Stub_template_repertoire<big_endian>::St + 0x14000000, /* b <label> */ + }; + +- // ST_E_835769 has the same stub template as ST_E_843419. +- const static Insntype* ST_E_835769_INSNS = ST_E_843419_INSNS; ++ // ST_E_835769 has the same stub template as ST_E_843419 ++ // but we reproduce the array here so that the sizeof ++ // expressions in install_insn_template will work. ++ const static Insntype ST_E_835769_INSNS[] = ++ { ++ 0x00000000, /* Placeholder for erratum insn. */ ++ 0x14000000, /* b <label> */ ++ }; + + #define install_insn_template(T) \ + const static Stub_template<big_endian> template_##T = { \ +--- binutils.orig/gas/config/tc-i386.c 2017-01-18 16:05:12.533688350 +0000 ++++ binutils-2.27/gas/config/tc-i386.c 2017-01-18 16:11:29.828016979 +0000 +@@ -4120,13 +4120,13 @@ parse_operands (char *l, const char *mne + { /* Yes, we've read in another operand. */ + unsigned int operand_ok; + this_operand = i.operands++; +- i.types[this_operand].bitfield.unspecified = 1; + if (i.operands > MAX_OPERANDS) + { + as_bad (_("spurious operands; (%d operands/instruction max)"), + MAX_OPERANDS); + return NULL; + } ++ i.types[this_operand].bitfield.unspecified = 1; + /* Now parse operand adding info to 'i' as we go along. */ + END_STRING_AND_SAVE (l); + +diff -rup binutils.orig/ld/testplug2.c binutils-2.27/ld/testplug2.c +--- binutils.orig/ld/testplug2.c 2017-01-18 16:05:12.777684035 +0000 ++++ binutils-2.27/ld/testplug2.c 2017-01-18 16:18:39.437420563 +0000 +@@ -242,10 +242,11 @@ parse_symdefstr (const char *str, struct + sym->version = NULL; + if (colon5 && colon5[1]) + { +- sym->comdat_key = malloc (strlen (colon5 + 1) + 1); ++ ++colon5; ++ sym->comdat_key = malloc (strlen (colon5) + 1); + if (!sym->comdat_key) + return LDPS_ERR; +- strcpy (sym->comdat_key, colon5 + 1); ++ strcpy (sym->comdat_key, colon5); + } + else + sym->comdat_key = 0; +diff -rup binutils.orig/ld/testplug3.c binutils-2.27/ld/testplug3.c +--- binutils.orig/ld/testplug3.c 2017-01-18 16:05:12.777684035 +0000 ++++ binutils-2.27/ld/testplug3.c 2017-01-18 16:17:48.878314557 +0000 +@@ -241,10 +241,11 @@ parse_symdefstr (const char *str, struct + sym->version = NULL; + if (colon5 && colon5[1]) + { +- sym->comdat_key = malloc (strlen (colon5 + 1) + 1); ++ ++colon5; ++ sym->comdat_key = malloc (strlen (colon5) + 1); + if (!sym->comdat_key) + return LDPS_ERR; +- strcpy (sym->comdat_key, colon5 + 1); ++ strcpy (sym->comdat_key, colon5); + } + else + sym->comdat_key = 0; +diff -rup binutils.orig/ld/testplug4.c binutils-2.27/ld/testplug4.c +--- binutils.orig/ld/testplug4.c 2017-01-18 16:05:12.777684035 +0000 ++++ binutils-2.27/ld/testplug4.c 2017-01-18 16:16:34.751625275 +0000 +@@ -242,10 +242,11 @@ parse_symdefstr (const char *str, struct + sym->version = NULL; + if (colon5 && colon5[1]) + { +- sym->comdat_key = malloc (strlen (colon5 + 1) + 1); ++ ++colon5; ++ sym->comdat_key = malloc (strlen (colon5) + 1); + if (!sym->comdat_key) + return LDPS_ERR; +- strcpy (sym->comdat_key, colon5 + 1); ++ strcpy (sym->comdat_key, colon5); + } + else + sym->comdat_key = 0; +diff -rup binutils.orig/ld/testplug.c binutils-2.27/ld/testplug.c +--- binutils.orig/ld/testplug.c 2017-01-18 16:05:12.777684035 +0000 ++++ binutils-2.27/ld/testplug.c 2017-01-18 16:19:22.460659820 +0000 +@@ -238,10 +238,11 @@ parse_symdefstr (const char *str, struct + sym->version = NULL; + if (colon5 && colon5[1]) + { +- sym->comdat_key = malloc (strlen (colon5 + 1) + 1); ++ ++colon5; ++ sym->comdat_key = malloc (strlen (colon5) + 1); + if (!sym->comdat_key) + return LDPS_ERR; +- strcpy (sym->comdat_key, colon5 + 1); ++ strcpy (sym->comdat_key, colon5); + } + else + sym->comdat_key = 0; diff --git a/SOURCES/binutils-libiberty-demangler.patch b/SOURCES/binutils-libiberty-demangler.patch new file mode 100644 index 0000000..883dff5 --- /dev/null +++ b/SOURCES/binutils-libiberty-demangler.patch @@ -0,0 +1,257 @@ +diff -rup binutils.orig/include/demangle.h binutils-2.27/include/demangle.h +--- binutils.orig/include/demangle.h 2019-01-08 13:52:32.990714670 +0000 ++++ binutils-2.27/include/demangle.h 2019-01-08 13:58:42.269743403 +0000 +@@ -64,9 +64,20 @@ extern "C" { + #define DMGL_GNAT (1 << 15) + #define DMGL_DLANG (1 << 16) + ++/* Disable a limit on the depth of recursion in mangled strings. ++ Note if this limit is disabled then stack exhaustion is possible when ++ demangling pathologically complicated strings. Bug reports about stack ++ exhaustion when the option is enabled will be rejected. */ ++#define DMGL_NO_RECURSE_LIMIT (1 << 17) ++ + /* If none of these are set, use 'current_demangling_style' as the default. */ + #define DMGL_STYLE_MASK (DMGL_AUTO|DMGL_GNU|DMGL_LUCID|DMGL_ARM|DMGL_HP|DMGL_EDG|DMGL_GNU_V3|DMGL_JAVA|DMGL_GNAT|DMGL_DLANG) + ++/* If DMGL_NO_RECURSE_LIMIT is not enabled, then this is the value used as ++ the maximum depth of recursion allowed. It should be enough for any ++ real-world mangled name. */ ++#define DEMANGLE_RECURSION_LIMIT 2048 ++ + /* Enumeration of possible demangling styles. + + Lucid and ARM styles are still kept logically distinct, even though +Only in binutils-2.27/include: demangle.h.orig +Only in binutils-2.27/include: #demangle.h.rej# +Only in binutils-2.27/include: .#demangle.h.rej +Only in binutils-2.27/include: demangle.h.rej +diff -rup binutils.orig/libiberty/cp-demangle.c binutils-2.27/libiberty/cp-demangle.c +--- binutils.orig/libiberty/cp-demangle.c 2019-01-08 13:52:33.161713294 +0000 ++++ binutils-2.27/libiberty/cp-demangle.c 2019-01-08 13:53:30.002255949 +0000 +@@ -2725,21 +2725,35 @@ d_ref_qualifier (struct d_info *di, stru + static struct demangle_component * + d_function_type (struct d_info *di) + { +- struct demangle_component *ret; ++ struct demangle_component *ret = NULL; + +- if (! d_check_char (di, 'F')) +- return NULL; +- if (d_peek_char (di) == 'Y') ++ if ((di->options & DMGL_NO_RECURSE_LIMIT) == 0) + { +- /* Function has C linkage. We don't print this information. +- FIXME: We should print it in verbose mode. */ +- d_advance (di, 1); ++ if (di->recursion_level > DEMANGLE_RECURSION_LIMIT) ++ /* FIXME: There ought to be a way to report ++ that the recursion limit has been reached. */ ++ return NULL; ++ ++ di->recursion_level ++; + } +- ret = d_bare_function_type (di, 1); +- ret = d_ref_qualifier (di, ret); + +- if (! d_check_char (di, 'E')) +- return NULL; ++ if (d_check_char (di, 'F')) ++ { ++ if (d_peek_char (di) == 'Y') ++ { ++ /* Function has C linkage. We don't print this information. ++ FIXME: We should print it in verbose mode. */ ++ d_advance (di, 1); ++ } ++ ret = d_bare_function_type (di, 1); ++ ret = d_ref_qualifier (di, ret); ++ ++ if (! d_check_char (di, 'E')) ++ ret = NULL; ++ } ++ ++ if ((di->options & DMGL_NO_RECURSE_LIMIT) == 0) ++ di->recursion_level --; + return ret; + } + +@@ -5898,6 +5912,7 @@ cplus_demangle_init_info (const char *ma + di->expansion = 0; + di->is_expression = 0; + di->is_conversion = 0; ++ di->recursion_level = 0; + } + + /* Internal implementation for the demangler. If MANGLED is a g++ v3 ABI +@@ -5937,6 +5952,20 @@ d_demangle_callback (const char *mangled + + cplus_demangle_init_info (mangled, options, strlen (mangled), &di); + ++ /* PR 87675 - Check for a mangled string that is so long ++ that we do not have enough stack space to demangle it. */ ++ if (((options & DMGL_NO_RECURSE_LIMIT) == 0) ++ /* This check is a bit arbitrary, since what we really want to do is to ++ compare the sizes of the di.comps and di.subs arrays against the ++ amount of stack space remaining. But there is no portable way to do ++ this, so instead we use the recursion limit as a guide to the maximum ++ size of the arrays. */ ++ && (unsigned long) di.num_comps > DEMANGLE_RECURSION_LIMIT) ++ { ++ /* FIXME: We need a way to indicate that a stack limit has been reached. */ ++ return 0; ++ } ++ + { + #ifdef CP_DYNAMIC_ARRAYS + __extension__ struct demangle_component comps[di.num_comps]; +Only in binutils-2.27/libiberty: cp-demangle.c.orig +diff -rup binutils.orig/libiberty/cp-demangle.h binutils-2.27/libiberty/cp-demangle.h +--- binutils.orig/libiberty/cp-demangle.h 2019-01-08 13:52:33.161713294 +0000 ++++ binutils-2.27/libiberty/cp-demangle.h 2019-01-08 13:53:30.003255941 +0000 +@@ -127,6 +127,9 @@ struct d_info + /* Non-zero if we are parsing the type operand of a conversion + operator, but not when in an expression. */ + int is_conversion; ++ /* If DMGL_NO_RECURSE_LIMIT is not active then this is set to ++ the current recursion level. */ ++ unsigned int recursion_level; + }; + + /* To avoid running past the ending '\0', don't: +Only in binutils-2.27/libiberty: cp-demangle.h.orig +diff -rup binutils.orig/libiberty/cplus-dem.c binutils-2.27/libiberty/cplus-dem.c +--- binutils.orig/libiberty/cplus-dem.c 2019-01-08 13:52:33.161713294 +0000 ++++ binutils-2.27/libiberty/cplus-dem.c 2019-01-08 14:10:00.057340821 +0000 +@@ -137,6 +137,7 @@ struct work_stuff + string* previous_argument; /* The last function argument demangled. */ + int nrepeats; /* The number of times to repeat the previous + argument. */ ++ unsigned int recursion_level; + }; + + #define PRINT_ANSI_QUALIFIERS (work -> options & DMGL_ANSI) +@@ -1237,11 +1238,15 @@ squangle_mop_up (struct work_stuff *work + { + free ((char *) work -> btypevec); + work->btypevec = NULL; ++ work->bsize = 0; ++ work->numb = 0; + } + if (work -> ktypevec != NULL) + { + free ((char *) work -> ktypevec); + work->ktypevec = NULL; ++ work->ksize = 0; ++ work->numk = 0; + } + } + +@@ -1275,8 +1280,15 @@ work_stuff_copy_to_from (struct work_stu + + for (i = 0; i < from->numk; i++) + { +- int len = strlen (from->ktypevec[i]) + 1; ++ int len; + ++ if (from->ktypevec[i] == NULL) ++ { ++ to->ktypevec[i] = NULL; ++ continue; ++ } ++ ++ len = strlen (from->ktypevec[i]) + 1; + to->ktypevec[i] = XNEWVEC (char, len); + memcpy (to->ktypevec[i], from->ktypevec[i], len); + } +@@ -1286,8 +1298,15 @@ work_stuff_copy_to_from (struct work_stu + + for (i = 0; i < from->numb; i++) + { +- int len = strlen (from->btypevec[i]) + 1; ++ int len; + ++ if (from->btypevec[i] == NULL) ++ { ++ to->btypevec[i] = NULL; ++ continue; ++ } ++ ++ len = strlen (from->btypevec[i]) + 1; + to->btypevec[i] = XNEWVEC (char , len); + memcpy (to->btypevec[i], from->btypevec[i], len); + } +@@ -1335,6 +1354,7 @@ delete_non_B_K_work_stuff (struct work_s + + free ((char*) work->tmpl_argvec); + work->tmpl_argvec = NULL; ++ work->ntmpl_args = 0; + } + if (work->previous_argument) + { +@@ -3347,6 +3367,20 @@ demangle_qualified (struct work_stuff *w + success = 0; + } + ++ if ((work->options & DMGL_NO_RECURSE_LIMIT) == 0) ++ { ++ /* PR 87241: Catch malicious input that will try to trick this code into ++ allocating a ridiculous amount of memory via the remember_Ktype() ++ function. ++ The choice of DEMANGLE_RECURSION_LIMIT is somewhat arbitrary. Possibly ++ a better solution would be to track how much memory remember_Ktype ++ allocates and abort when some upper limit is reached. */ ++ if (qualifiers > DEMANGLE_RECURSION_LIMIT) ++ /* FIXME: We ought to have some way to tell the user that ++ this limit has been reached. */ ++ success = 0; ++ } ++ + if (!success) + return success; + +@@ -4335,6 +4369,7 @@ remember_Btype (struct work_stuff *work, + } + + /* Lose all the info related to B and K type codes. */ ++ + static void + forget_B_and_K_types (struct work_stuff *work) + { +@@ -4360,6 +4395,7 @@ forget_B_and_K_types (struct work_stuff + } + } + } ++ + /* Forget the remembered types, but not the type vector itself. */ + + static void +@@ -4551,6 +4587,16 @@ demangle_nested_args (struct work_stuff + int result; + int saved_nrepeats; + ++ if ((work->options & DMGL_NO_RECURSE_LIMIT) == 0) ++ { ++ if (work->recursion_level > DEMANGLE_RECURSION_LIMIT) ++ /* FIXME: There ought to be a way to report ++ that the recursion limit has been reached. */ ++ return 0; ++ ++ work->recursion_level ++; ++ } ++ + /* The G++ name-mangling algorithm does not remember types on nested + argument lists, unless -fsquangling is used, and in that case the + type vector updated by remember_type is not used. So, we turn +@@ -4577,6 +4623,9 @@ demangle_nested_args (struct work_stuff + --work->forgetting_types; + work->nrepeats = saved_nrepeats; + ++ if ((work->options & DMGL_NO_RECURSE_LIMIT) == 0) ++ --work->recursion_level; ++ + return result; + } + +Only in binutils-2.27/libiberty: cplus-dem.c.orig +Only in binutils-2.27/libiberty: cplus-dem.c.rej diff --git a/SOURCES/binutils-multiple-relocs-for-same-section.patch b/SOURCES/binutils-multiple-relocs-for-same-section.patch new file mode 100644 index 0000000..165c743 --- /dev/null +++ b/SOURCES/binutils-multiple-relocs-for-same-section.patch @@ -0,0 +1,23 @@ +--- binutils.orig/bfd/elf.c 2019-09-10 10:57:33.391081672 +0100 ++++ binutils-2.27/bfd/elf.c 2019-09-10 10:59:55.355010766 +0100 +@@ -2324,9 +2324,18 @@ bfd_section_from_shdr (bfd *abfd, unsign + else + p_hdr = &esdt->rel.hdr; + +- /* PR 17512: file: 0b4f81b7. */ ++ /* PR 17512: file: 0b4f81b7. ++ Also see PR 24456, for a file which deliberately has two reloc ++ sections. */ + if (*p_hdr != NULL) +- goto fail; ++ { ++ _bfd_error_handler ++ /* xgettext:c-format */ ++ (_("%B: warning: multiple relocation sections for section %A \ ++found - ignoring all but the first"), ++ abfd, target_sect); ++ goto success; ++ } + hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2)); + if (hdr2 == NULL) + goto fail; diff --git a/SOURCES/binutils-rh1203449.patch b/SOURCES/binutils-rh1203449.patch new file mode 100644 index 0000000..009cefd --- /dev/null +++ b/SOURCES/binutils-rh1203449.patch @@ -0,0 +1,20 @@ +--- ld/emultempl/armelf.em~ 2015-03-18 17:32:36.436208938 -0400 ++++ ld/emultempl/armelf.em 2015-03-18 17:32:54.455591126 -0400 +@@ -53,6 +53,7 @@ + input_flags.dynamic = ${DYNAMIC_LINK-TRUE}; + config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`; + config.separate_code = `if test "x${SEPARATE_CODE}" = xyes ; then echo TRUE ; else echo FALSE ; fi`; ++ link_info.relro = TRUE; + } + + static void +--- ld/emultempl/aarch64elf.em~ 2015-03-18 17:32:08.347172011 -0400 ++++ ld/emultempl/aarch64elf.em 2015-03-18 17:32:30.866399906 -0400 +@@ -40,6 +40,7 @@ + input_flags.dynamic = ${DYNAMIC_LINK-TRUE}; + config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`; + config.separate_code = `if test "x${SEPARATE_CODE}" = xyes ; then echo TRUE ; else echo FALSE ; fi`; ++ link_info.relro = TRUE; + } + + static void diff --git a/SOURCES/binutils-rh1300603.patch b/SOURCES/binutils-rh1300603.patch new file mode 100644 index 0000000..2df8c35 --- /dev/null +++ b/SOURCES/binutils-rh1300603.patch @@ -0,0 +1,20 @@ +diff -rup binutils-2.27.orig/bfd/elf-eh-frame.c binutils-2.27/bfd/elf-eh-frame.c +--- binutils-2.27.orig/bfd/elf-eh-frame.c 2017-01-16 17:27:46.411632857 +0000 ++++ binutils-2.27/bfd/elf-eh-frame.c 2017-01-16 17:30:03.663437755 +0000 +@@ -2296,7 +2296,15 @@ write_dwarf_eh_frame_hdr (bfd *abfd, str + != sec->output_section->vma + val)) + overflow = TRUE; + bfd_put_32 (abfd, val, contents + EH_FRAME_HDR_SIZE + i * 8 + 8); +- if (i != 0 ++ if (i > 0 ++ && hdr_info->u.dwarf.array[i].initial_loc ++ == hdr_info->u.dwarf.array[i - 1].initial_loc ++ && hdr_info->u.dwarf.array[i].range ++ == hdr_info->u.dwarf.array[i - 1].range) ++ /* Duplicate FDE entry. We should probably discard it ++ but for now just ignore it. */ ++ ; ++ else if (i != 0 + && (hdr_info->u.dwarf.array[i].initial_loc + < (hdr_info->u.dwarf.array[i - 1].initial_loc + + hdr_info->u.dwarf.array[i - 1].range))) diff --git a/SOURCES/binutils-rh1312876.patch b/SOURCES/binutils-rh1312876.patch new file mode 100644 index 0000000..2ef6cb5 --- /dev/null +++ b/SOURCES/binutils-rh1312876.patch @@ -0,0 +1,139 @@ +--- binutils-2.25.1.new/ld/testsuite/ld-powerpc/tlsso32.r 2016-03-01 14:08:17.249137110 +0000 ++++ binutils-2.25.1/ld/testsuite/ld-powerpc/tlsso32.r 2016-03-01 15:10:02.847812018 +0000 +@@ -20,6 +20,7 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +DYNAMIC .* 08 +WA +3 +0 +4 + +\[[ 0-9]+\] \.got +PROGBITS .* 0+30 04 +WA +0 +0 +4 + +\[[ 0-9]+\] \.plt +PROGBITS .* 0+4 00 +WA +0 +0 +4 ++#... + +\[[ 0-9]+\] \.shstrtab +.* + +\[[ 0-9]+\] \.symtab +.* + +\[[ 0-9]+\] \.strtab +.* +@@ -80,12 +81,12 @@ Symbol table '\.dynsym' contains [0-9]+ + .* TLS +GLOBAL +DEFAULT +8 le1 + .* TLS +GLOBAL +DEFAULT +UND ld + .* NOTYPE +GLOBAL +DEFAULT +6 _start +-.* NOTYPE +GLOBAL +DEFAULT +11 __end ++.* NOTYPE +GLOBAL +DEFAULT +.. __end + .* TLS +GLOBAL +DEFAULT +8 ld2 + .* TLS +GLOBAL +DEFAULT +8 ld1 +-.* NOTYPE +GLOBAL +DEFAULT +11 __bss_start +-.* NOTYPE +GLOBAL +DEFAULT +11 _edata +-.* NOTYPE +GLOBAL +DEFAULT +11 _end ++.* NOTYPE +GLOBAL +DEFAULT +.. __bss_start ++.* NOTYPE +GLOBAL +DEFAULT +.. _edata ++.* NOTYPE +GLOBAL +DEFAULT +.. _end + .* TLS +GLOBAL +DEFAULT +8 gd0 + .* TLS +GLOBAL +DEFAULT +8 ie0 + +@@ -103,32 +104,4 @@ Symbol table '\.symtab' contains [0-9]+ + .* SECTION +LOCAL +DEFAULT +9 + .* SECTION +LOCAL +DEFAULT +10 + .* SECTION +LOCAL +DEFAULT +11 +-.* FILE +LOCAL +DEFAULT +ABS .* +-.* TLS +LOCAL +DEFAULT +7 gd4 +-.* TLS +LOCAL +DEFAULT +7 ld4 +-.* TLS +LOCAL +DEFAULT +7 ld5 +-.* TLS +LOCAL +DEFAULT +7 ld6 +-.* TLS +LOCAL +DEFAULT +7 ie4 +-.* TLS +LOCAL +DEFAULT +7 le4 +-.* TLS +LOCAL +DEFAULT +7 le5 +-.* FILE +LOCAL +DEFAULT +ABS .* +-.* OBJECT +LOCAL +DEFAULT +9 _DYNAMIC +-.* NOTYPE +LOCAL +DEFAULT +6 0+8000\.got2\.plt_pic32\.__tls_get_addr +-.* NOTYPE +LOCAL +DEFAULT +6 __glink_PLTresolve +-.* NOTYPE +LOCAL +DEFAULT +6 __glink +-.* OBJECT +LOCAL +DEFAULT +10 _GLOBAL_OFFSET_TABLE_ +-.* TLS +GLOBAL +DEFAULT +UND gd +-.* TLS +GLOBAL +DEFAULT +8 le0 +-.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr +-.* TLS +GLOBAL +DEFAULT +8 ld0 +-.* TLS +GLOBAL +DEFAULT +8 le1 +-.* TLS +GLOBAL +DEFAULT +UND ld +-.* NOTYPE +GLOBAL +DEFAULT +6 _start +-.* NOTYPE +GLOBAL +DEFAULT +11 __end +-.* TLS +GLOBAL +DEFAULT +8 ld2 +-.* TLS +GLOBAL +DEFAULT +8 ld1 +-.* NOTYPE +GLOBAL +DEFAULT +11 __bss_start +-.* NOTYPE +GLOBAL +DEFAULT +11 _edata +-.* NOTYPE +GLOBAL +DEFAULT +11 _end +-.* TLS +GLOBAL +DEFAULT +8 gd0 +-.* TLS +GLOBAL +DEFAULT +8 ie0 ++#pass +--- binutils-2.25.1.new/ld/testsuite/ld-powerpc/tlsexe32.r 2016-03-01 14:08:17.248137105 +0000 ++++ binutils-2.25.1/ld/testsuite/ld-powerpc/tlsexe32.r 2016-03-01 15:08:57.693493230 +0000 +@@ -22,6 +22,7 @@ Section Headers: + +\[[ 0-9]+\] \.dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 08 +WA +4 +0 +4 + +\[[ 0-9]+\] \.got +PROGBITS +[0-9a-f]+ [0-9a-f]+ 000018 04 +WA +0 +0 +4 + +\[[ 0-9]+\] \.plt +PROGBITS +[0-9a-f]+ [0-9a-f]+ 000004 00 +WA +0 +0 +4 ++#... + +\[[ 0-9]+\] \.shstrtab +STRTAB +.* + +\[[ 0-9]+\] \.symtab +SYMTAB +.* + +\[[ 0-9]+\] \.strtab +STRTAB +.* +@@ -64,11 +65,11 @@ Symbol table '\.dynsym' contains [0-9]+ + .* NOTYPE +LOCAL +DEFAULT +UND + .* TLS +GLOBAL +DEFAULT +UND gd + .* TLS +GLOBAL +DEFAULT +UND ld +-.* NOTYPE +GLOBAL +DEFAULT +12 __end +-.* NOTYPE +GLOBAL +DEFAULT +12 __bss_start ++.* NOTYPE +GLOBAL +DEFAULT +.. __end ++.* NOTYPE +GLOBAL +DEFAULT +.. __bss_start + .* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr_opt +-.* NOTYPE +GLOBAL +DEFAULT +12 _edata +-.* NOTYPE +GLOBAL +DEFAULT +12 _end ++.* NOTYPE +GLOBAL +DEFAULT +.. _edata ++.* NOTYPE +GLOBAL +DEFAULT +.. _end + + Symbol table '\.symtab' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +@@ -85,29 +86,5 @@ Symbol table '\.symtab' contains [0-9]+ + .* SECTION +LOCAL +DEFAULT +10 + .* SECTION +LOCAL +DEFAULT +11 + .* SECTION +LOCAL +DEFAULT +12 +-.* FILE +LOCAL +DEFAULT +ABS .* +-.* TLS +LOCAL +DEFAULT +8 gd4 +-.* TLS +LOCAL +DEFAULT +8 ld4 +-.* TLS +LOCAL +DEFAULT +8 ld5 +-.* TLS +LOCAL +DEFAULT +8 ld6 +-.* TLS +LOCAL +DEFAULT +8 ie4 +-.* TLS +LOCAL +DEFAULT +8 le4 +-.* TLS +LOCAL +DEFAULT +8 le5 +-.* FILE +LOCAL +DEFAULT +ABS .* +-.* OBJECT +LOCAL +DEFAULT +10 _DYNAMIC +-.* OBJECT +LOCAL +DEFAULT +11 _GLOBAL_OFFSET_TABLE_ +-.* TLS +GLOBAL +DEFAULT +UND gd +-.* TLS +GLOBAL +DEFAULT +9 le0 +-.* TLS +GLOBAL +DEFAULT +9 ld0 +-.* TLS +GLOBAL +DEFAULT +9 le1 +-.* TLS +GLOBAL +DEFAULT +UND ld +-.* NOTYPE +GLOBAL +DEFAULT +7 _start +-.* NOTYPE +GLOBAL +DEFAULT +12 __end +-.* TLS +GLOBAL +DEFAULT +9 ld2 +-.* TLS +GLOBAL +DEFAULT +9 ld1 +-.* NOTYPE +GLOBAL +DEFAULT +12 __bss_start +-.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr_opt +-.* NOTYPE +GLOBAL +DEFAULT +12 _edata +-.* NOTYPE +GLOBAL +DEFAULT +12 _end +-.* TLS +GLOBAL +DEFAULT +9 gd0 +-.* TLS +GLOBAL +DEFAULT +9 ie0 ++#pass ++ +diff -rup binutils-2.27.orig/ld/testsuite/ld-powerpc/powerpc.exp binutils-2.27/ld/testsuite/ld-powerpc/powerpc.exp +--- binutils-2.27.orig/ld/testsuite/ld-powerpc/powerpc.exp 2017-01-16 17:27:46.697628285 +0000 ++++ binutils-2.27/ld/testsuite/ld-powerpc/powerpc.exp 2017-01-16 17:34:34.684104074 +0000 +@@ -102,13 +102,13 @@ set ppcelftests { + {{objdump -hw reloc.d}} "reloc.so"} + {"APUinfo section processing" "-melf32ppc" "" + "-a32 -me500" {apuinfo1.s apuinfo-nul.s apuinfo2.s} +- {{readelf -x2 apuinfo.rd}} "apuinfo"} ++ {{readelf -x.PPC.EMB.apuinfo apuinfo.rd}} "apuinfo"} + {"APUinfo VLE section processing" "-melf32ppc" "" + "-a32 -me500 -mvle" {apuinfo1.s apuinfo-vle.s apuinfo-vle2.s} +- {{readelf -x2 apuinfo-vle.rd}} "apuinfo-vle"} ++ {{readelf -x.PPC.EMB.apuinfo apuinfo-vle.rd}} "apuinfo-vle"} + {"APUinfo NULL section processing" "-melf32ppc" "" + "-a32 -me500" {apuinfo-nul1.s apuinfo-nul.s} +- {{readelf -x2 apuinfo-nul.rd}} "apuinfo"} ++ {{readelf -x.PPC.EMB.apuinfo apuinfo-nul.rd}} "apuinfo"} + {"TLS32 static exec" "-melf32ppc" "" "-a32" {tls32.s tlslib32.s} + {{objdump -dr tls32.d} {objdump -sj.got tls32.g} + {objdump -sj.tdata tls32.t}} diff --git a/SOURCES/binutils-strip-fix.patch b/SOURCES/binutils-strip-fix.patch new file mode 100644 index 0000000..f6737b5 --- /dev/null +++ b/SOURCES/binutils-strip-fix.patch @@ -0,0 +1,23 @@ +--- b/bfd/elf.c 2018-10-31 12:25:51.693217184 +0530 ++++ a/bfd/elf.c 2018-10-31 12:27:54.243952676 +0530 +@@ -1249,13 +1249,19 @@ + Elf_Internal_Shdr ** oheaders = elf_elfsections (obfd); + unsigned int i; + +- if (section_match (oheaders[hint], iheader)) ++ BFD_ASSERT (iheader != NULL); ++ ++ /* See PR 20922 for a reproducer of the NULL test. */ ++ if (oheaders[hint] != NULL ++ && section_match (oheaders[hint], iheader)) + return hint; + + for (i = 1; i < elf_numsections (obfd); i++) + { + Elf_Internal_Shdr * oheader = oheaders[i]; + ++ if (oheader == NULL) ++ continue; + if (section_match (oheader, iheader)) + /* FIXME: Do we care if there is a potential for + multiple matches ? */ diff --git a/SOURCES/binutils-strip-unknown-relocs.patch b/SOURCES/binutils-strip-unknown-relocs.patch new file mode 100644 index 0000000..73f6912 --- /dev/null +++ b/SOURCES/binutils-strip-unknown-relocs.patch @@ -0,0 +1,544 @@ +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 + { + (*_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,12 @@ ppc64_elf_info_to_howto (bfd *abfd, arel + { + (*_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]; ++ if (cache_ptr->howto == NULL || cache_ptr->howto->name == NULL) ++ _bfd_error_handler (_("%B: invalid relocation type %d"), abfd, 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 + { + (*_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 + { + (*_bfd_error_handler) (_("%B: invalid relocation type %d"), + abfd, (int) r_type); +- r_type = R_X86_64_NONE; ++ return NULL; + } + i = r_type; + } +@@ -347,7 +347,6 @@ elf_x86_64_info_to_howto (bfd *abfd ATTR + + r_type = ELF32_R_TYPE (dst->r_info); + cache_ptr->howto = elf_x86_64_rtype_to_howto (abfd, r_type); +- BFD_ASSERT (r_type == cache_ptr->howto->type); + } + + /* 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); + } +diff -rup binutils.orig/binutils/testsuite/binutils-all/objcopy.exp binutils-2.27/binutils/testsuite/binutils-all/objcopy.exp +--- binutils.orig/binutils/testsuite/binutils-all/objcopy.exp 2018-04-11 12:34:04.671683298 +0100 ++++ binutils-2.27/binutils/testsuite/binutils-all/objcopy.exp 2018-04-11 12:36:50.053734109 +0100 +@@ -1083,6 +1083,29 @@ if [is_elf_format] { + } + run_dump_test "strip-11" $extra_strip11 + ++ if { [istarget "mips64*-*-openbsd*"] } { ++ set reloc_format mips64 ++ } elseif { [istarget "arm-*"] \ ++ || [istarget "d10v-*"] \ ++ || [istarget "dlx-*"] \ ++ || [istarget "i*86-*"] \ ++ || [istarget "i960-*"] \ ++ || [istarget "m681*-*"] \ ++ || [istarget "m68hc1*-*"] \ ++ || ([istarget "mips*-*"] \ ++ && ![istarget "mips64*-ps2-elf*"] \ ++ && ![istarget "*-*-irix6*"] \ ++ && ![istarget "mips64*-*-freebsd*"] \ ++ && ![istarget "mips64*-*-kfreebsd*-gnu"] \ ++ && ![istarget "mips64*-*-linux*"]) \ ++ || [istarget "score*-*"] \ ++ || [istarget "xgate-*"] } { ++ set reloc_format rel ++ } else { ++ set reloc_format rela ++ } ++ run_dump_test "strip-13" [list [list source strip-13${reloc_format}.s]] ++ + if { [istarget "i*86-*"] || [istarget "x86_64-*-*"] } { + # Check to make sure we don't strip a symbol named in relocations. + set test "objcopy keeps symbols needed by relocs" +diff -rup binutils.orig/binutils/testsuite/lib/utils-lib.exp binutils-2.27/binutils/testsuite/lib/utils-lib.exp +--- binutils.orig/binutils/testsuite/lib/utils-lib.exp 2018-04-11 12:34:04.674683263 +0100 ++++ binutils-2.27/binutils/testsuite/lib/utils-lib.exp 2018-04-11 12:54:56.097850613 +0100 +@@ -1,4 +1,4 @@ +-# Copyright (C) 1993-2016 Free Software Foundation, Inc. ++# Copyright (C) 1993-2018 Free Software Foundation, Inc. + + # This program is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +@@ -51,12 +51,17 @@ proc binutil_version { prog } { + # default_binutils_run + # run a program, returning the output + # sets binutils_run_failed if the program does not exist ++# sets binutils_run_status to the exit status of the program + # + proc default_binutils_run { prog progargs } { + global binutils_run_failed ++ global binutils_run_status + global host_triplet + + set binutils_run_failed 0 ++ if [info exists binutils_run_status] { ++ unset binutils_run_status ++ } + + if ![is_remote host] { + if {[which $prog] == 0} then { +@@ -83,6 +88,7 @@ proc default_binutils_run { prog progarg + regsub -all "\\$" "$progargs" "\\$" progargs + + set state [remote_exec host $prog $progargs] ++ set binutils_run_status [lindex $state 0] + set exec_output [prune_warnings [lindex $state 1]] + if {![string match "" $exec_output]} then { + send_log "$exec_output\n" +@@ -127,7 +133,6 @@ proc default_binutils_assemble_flags { s + } else { + send_log "$exec_output\n" + verbose "$exec_output" +- perror "$source: assembly failed" + return 0 + } + } +@@ -214,6 +219,11 @@ proc exe_ext {} { + # Assemble the file SOURCE.s. If omitted, this defaults to FILE.s. + # This is useful if several .d files want to share a .s file. + # ++# dump: DUMP ++# Match against DUMP.d. If omitted, this defaults to FILE.d. This ++# is useful if several .d files differ by options only. Options are ++# always read from FILE.d. ++# + # target: GLOBS... + # Run this test only on a specified list of targets. More precisely, + # each glob in the space-separated list is passed to "istarget"; if +@@ -237,22 +247,22 @@ proc exe_ext {} { + # + # error: REGEX + # An error with message matching REGEX must be emitted for the test +-# to pass. The PROG, objdump, nm and objcopy options have no +-# meaning and need not supplied if this is present. ++# to pass. The DUMPPROG, addr2line, nm, objdump, readelf and size ++# options have no meaning and need not supplied if this is present. ++# Multiple "error" directives append to the expected error message. ++# ++# error_output: FILE ++# Means the same as 'error', except the regular expression lines ++# are contains in FILE. + # + # warning: REGEX +-# Expect a gas warning matching REGEX. It is an error to issue +-# both "error" and "warning". +-# +-# stderr: FILE +-# FILE contains regexp lines to be matched against the diagnostic +-# output of the assembler. This does not preclude the use of +-# PROG, nm, objdump, or objcopy. +-# +-# error-output: FILE +-# Means the same as 'stderr', but also indicates that the assembler +-# is expected to exit unsuccessfully (therefore PROG, objdump, nm, +-# and objcopy have no meaning and should not be supplied). ++# Expect a warning matching REGEX. It is an error to issue both ++# "error" and "warning". Multiple "warning" directives append to ++# the expected linker warning message. ++# ++# warning_output: FILE ++# Means the same as 'warning', except the regular expression ++# lines are contains in FILE. + # + # Each option may occur at most once. + # +@@ -266,6 +276,7 @@ proc run_dump_test { name {extra_options + global OBJDUMP NM OBJCOPY READELF STRIP + global OBJDUMPFLAGS NMFLAGS OBJCOPYFLAGS READELFFLAGS STRIPFLAGS + global ELFEDIT ELFEDITFLAGS ++ global binutils_run_status + global host_triplet + global env + global copyfile +@@ -299,6 +310,11 @@ proc run_dump_test { name {extra_options + set opts(PROG) {} + set opts(DUMPPROG) {} + set opts(source) {} ++ set opts(dump) {} ++ set opts(error) {} ++ set opts(warning) {} ++ set opts(error_output) {} ++ set opts(warning_output) {} + set opts(target) {} + set opts(not-target) {} + set opts(skip) {} +@@ -317,12 +333,18 @@ proc run_dump_test { name {extra_options + # directory. + regsub -all "\\\$srcdir" "$opt_val" "$srcdir/$subdir" opt_val + +- if [string length $opts($opt_name)] { +- perror "option $opt_name multiply set in $file.d" +- unresolved $subdir/$name +- return ++ switch -- $opt_name { ++ warning {} ++ error {} ++ default { ++ if [string length $opts($opt_name)] { ++ perror "option $opt_name multiply set in $file.d" ++ unresolved $subdir/$name ++ return ++ } ++ } + } +- set opts($opt_name) $opt_val ++ append opts($opt_name) $opt_val + } + + foreach i $extra_options { +@@ -340,7 +362,8 @@ proc run_dump_test { name {extra_options + + # add extra option to end of existing option, adding space + # if necessary. +- if [string length $opts($opt_name)] { ++ if { ![regexp "warning|error" $opt_name] ++ && [string length $opts($opt_name)] } { + append opts($opt_name) " " + } + append opts($opt_name) $opt_val +@@ -378,28 +401,35 @@ proc run_dump_test { name {extra_options + } + + set dumpprogram "" +- if { $opts(DUMPPROG) != "" } { +- switch -- $opts(DUMPPROG) { +- addr2line { set dumpprogram addr2line } +- nm { set dumpprogram nm } +- objdump { set dumpprogram objdump } +- readelf { set dumpprogram readelf } +- size { set dumpprogram size } +- default { +- perror "unrecognized dump program option $opts(DUMPPROG) in $file.d" +- unresolved $testname +- return } +- } +- } else { +- # Guess which program to run, by seeing which option was specified. +- foreach p {addr2line nm objdump readelf size} { +- if {$opts($p) != ""} { +- if {$dumpprogram != ""} { +- perror "more than one possible dump program specified in $file.d" ++ # It's meaningless to require an output-testing method when we ++ # expect an error. ++ if { $opts(error) == "" && $opts(error_output) == "" } { ++ if { $opts(DUMPPROG) != "" } { ++ switch -- $opts(DUMPPROG) { ++ addr2line { set dumpprogram addr2line } ++ nm { set dumpprogram nm } ++ objdump { set dumpprogram objdump } ++ readelf { set dumpprogram readelf } ++ size { set dumpprogram size } ++ default { ++ perror "unrecognized dump program option $opts(DUMPPROG)\ ++ in $file.d" + unresolved $testname + return +- } else { +- set dumpprogram $p ++ } ++ } ++ } else { ++ # Guess which program to run, by seeing which option was specified. ++ foreach p {addr2line nm objdump readelf size} { ++ if {$opts($p) != ""} { ++ if {$dumpprogram != ""} { ++ perror "more than one possible dump program specified\ ++ in $file.d" ++ unresolved $testname ++ return ++ } else { ++ set dumpprogram $p ++ } + } + } + } +@@ -456,6 +486,12 @@ proc run_dump_test { name {extra_options + set srcfile $srcdir/$subdir/$opts(source) + } + ++ if { $opts(dump) == "" } { ++ set dumpfile ${file}.d ++ } else { ++ set dumpfile $srcdir/$subdir/$opts(dump) ++ } ++ + if { $opts(as) == "binary" } { + while {[file type $srcfile] eq "link"} { + set newfile [file readlink $srcfile] +@@ -464,7 +500,8 @@ proc run_dump_test { name {extra_options + } + set srcfile $newfile + } +- file copy -force ${srcfile} $tempfile ++ # Make sure we copy the file if we are doing remote host testing. ++ remote_download host ${srcfile} $tempfile + } else { + set exec_output [binutils_assemble_flags ${srcfile} $tempfile $opts(as)] + if [string match "" $exec_output] then { +@@ -475,16 +512,95 @@ proc run_dump_test { name {extra_options + } + } + ++ if { (($opts(warning) != "") && ($opts(error) != "")) \ ++ || (($opts(warning) != "") && ($opts(error_output) != "")) \ ++ || (($opts(warning) != "") && ($opts(warning_output) != "")) \ ++ || (($opts(error) != "") && ($opts(warning_output) != "")) \ ++ || (($opts(error) != "") && ($opts(error_output) != "")) \ ++ || (($opts(warning_output) != "") && ($opts(error_output) != "")) } { ++ perror "bad mix of warning, error, warning_output, and error_output\ ++ test-directives" ++ unresolved $testname ++ return ++ } ++ ++ set check_prog(source) "" ++ set check_prog(terminal) 0 ++ if { $opts(error) != "" \ ++ || $opts(warning) != "" \ ++ || $opts(error_output) != "" \ ++ || $opts(warning_output) != "" } { ++ ++ if { $opts(error) != "" || $opts(error_output) != "" } { ++ set check_prog(terminal) 1 ++ } else { ++ set check_prog(terminal) 0 ++ } ++ ++ if { $opts(error) != "" || $opts(warning) != "" } { ++ set check_prog(source) "regex" ++ if { $opts(error) != "" } { ++ set check_prog(regex) $opts(error) ++ } else { ++ set check_prog(regex) $opts(warning) ++ } ++ } else { ++ set check_prog(source) "file" ++ if { $opts(error_output) != "" } { ++ set check_prog(file) $opts(error_output) ++ } else { ++ set check_prog(file) $opts(warning_output) ++ } ++ } ++ } ++ + set progopts1 $opts($program) + eval set progopts \$[string toupper $program]FLAGS + eval set binary \$[string toupper $program] + + set exec_output [binutils_run $binary "$progopts $progopts1 $tempfile $destopt ${copyfile}.o"] +- if ![string match "" $exec_output] { +- send_log "$exec_output\n" ++ set cmdret 0 ++ if [info exists binutils_run_status] { ++ set cmdret $binutils_run_status ++ } ++ ++ regsub "\n$" $exec_output "" exec_output ++ if { $cmdret != 0 || $exec_output != "" || $check_prog(source) != "" } { ++ set exitstat "succeeded" ++ if { $cmdret != 0 } { ++ set exitstat "failed" ++ } ++ ++ if { $check_prog(source) == "regex" } { ++ verbose -log "$exitstat with: <$exec_output>,\ ++ expected: <$check_prog(regex)>" ++ } elseif { $check_prog(source) == "file" } { ++ verbose -log "$exitstat with: <$exec_output>,\ ++ expected in file $check_prog(file)" ++ set_file_contents "tmpdir/prog.messages" "$exec_output" ++ } else { ++ verbose -log "$exitstat with: <$exec_output>, no expected output" ++ } ++ send_log -- "$exec_output\n" + verbose "$exec_output" +- fail $testname +- return ++ ++ if { (($check_prog(source) == "") == ($exec_output == "")) \ ++ && (($cmdret == 0) == ($check_prog(terminal) == 0)) \ ++ && ((($check_prog(source) == "regex") \ ++ && ($check_prog(regex) == "") == ($exec_output == "") \ ++ && [regexp -- $check_prog(regex) $exec_output]) \ ++ || (($check_prog(source) == "file") \ ++ && (![regexp_diff "tmpdir/prog.messages" \ ++ "$srcdir/$subdir/$check_prog(file)"]))) } { ++ # We have the expected output from prog. ++ if { $check_prog(terminal) || $program == "" } { ++ pass $testname ++ return ++ } ++ } else { ++ fail $testname ++ return ++ } + } + + set progopts1 $opts($dumpprogram) +@@ -534,7 +650,7 @@ proc run_dump_test { name {extra_options + } + + verbose_eval {[file_contents "tmpdir/dump.out"]} 3 +- if { [regexp_diff "tmpdir/dump.out" "${file}.d"] } then { ++ if { [regexp_diff "tmpdir/dump.out" "${dumpfile}"] } then { + fail $testname + verbose "output is [file_contents "tmpdir/dump.out"]" 2 + return +--- /dev/null 2018-04-11 08:10:00.466225454 +0100 ++++ binutils-2.27/binutils/testsuite/binutils-all/strip-13.d 2018-04-11 12:55:42.481306111 +0100 +@@ -0,0 +1,10 @@ ++#PROG: strip ++#strip: -g ++#error: \A[^\n]*: invalid relocation type 143\n ++#error: [^\n]*: Bad value\Z ++#not-target: h8300-* ip2k-* m6811-* m68hc11-* rx-* ++# The H8300-*, IP2K and 68HC11 targets use 16-bit addressing, so `.dc.a' ++# does not work for manual relocation data construction. ++# The RX targets do not complain about unrecognised relocs, unless they ++# are actually used ++# (which is what should really happen with the other targets...) +--- /dev/null 2018-04-11 08:10:00.466225454 +0100 ++++ binutils-2.27/binutils/testsuite/binutils-all/strip-13mips64.s 2018-04-11 12:37:17.195412074 +0100 +@@ -0,0 +1,14 @@ ++ .text ++foo: ++ .dc.l 0x12345678 ++ ++ .section .rela.text ++ .dc.a 0 ++ .dc.l 0 ++ .dc.b 0, 0, 0, 0x8f ++ .dc.a 0x0000008f ++ ++ .dc.a 0 ++ .dc.l 0 ++ .dc.b 0, 0, 0, 0 ++ .dc.a 0 +--- /dev/null 2018-04-11 08:10:00.466225454 +0100 ++++ binutils-2.27/binutils/testsuite/binutils-all/strip-13rela.s 2018-04-11 12:37:17.195412074 +0100 +@@ -0,0 +1,12 @@ ++ .text ++foo: ++ .dc.l 0x12345678 ++ ++ .section .rela.text ++ .dc.a 0 ++ .dc.a 0x0000008f ++ .dc.a 0x0000008f ++ ++ .dc.a 0 ++ .dc.a 0 ++ .dc.a 0 +--- /dev/null 2018-04-11 08:10:00.466225454 +0100 ++++ binutils-2.27/binutils/testsuite/binutils-all/strip-13rel.s 2018-04-11 12:37:17.195412074 +0100 +@@ -0,0 +1,10 @@ ++ .text ++foo: ++ .dc.l 0x12345678 ++ ++ .section .rel.text ++ .dc.a 0 ++ .dc.a 0x0000008f ++ ++ .dc.a 0 ++ .dc.a 0 +--- binutils.orig/bfd/elfnn-aarch64.c 2018-04-11 12:34:04.649683557 +0100 ++++ binutils-2.27/bfd/elfnn-aarch64.c 2018-04-11 13:33:08.539305994 +0100 +@@ -1977,6 +1977,8 @@ elfNN_aarch64_info_to_howto (bfd *abfd A + + r_type = ELFNN_R_TYPE (elf_reloc->r_info); + bfd_reloc->howto = elfNN_aarch64_howto_from_type (r_type); ++ if (bfd_reloc->howto == NULL) ++ _bfd_error_handler (_("%B: invalid relocation type %d"), abfd, r_type); + } + + static reloc_howto_type * diff --git a/SOURCES/binutils-x86-lea-addressing.patch b/SOURCES/binutils-x86-lea-addressing.patch new file mode 100644 index 0000000..6380545 --- /dev/null +++ b/SOURCES/binutils-x86-lea-addressing.patch @@ -0,0 +1,24 @@ +--- binutils.orig/bfd/elf32-i386.c 2018-05-02 15:59:44.716210095 +0100 ++++ binutils-2.27/bfd/elf32-i386.c 2018-05-02 16:02:12.714435574 +0100 +@@ -3982,7 +3982,9 @@ elf_i386_relocate_section (bfd *output_b + - gotplt->output_section->vma + - gotplt->output_offset); + +- if ((*(contents + rel->r_offset - 1) & 0xc7) == 0x5) ++ if (rel->r_offset > 1 ++ && (*(contents + rel->r_offset - 1) & 0xc7) == 0x5 ++ && *(contents + rel->r_offset - 2) != 0x8d) + { + if (bfd_link_pic (info)) + goto disallow_got32; +@@ -4252,7 +4254,9 @@ r_386_got32: + + relocation = (htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off); +- if ((*(contents + rel->r_offset - 1) & 0xc7) == 0x5) ++ if (rel->r_offset > 1 ++ && (*(contents + rel->r_offset - 1) & 0xc7) == 0x5 ++ && *(contents + rel->r_offset - 2) != 0x8d) + { + if (bfd_link_pic (info)) + { diff --git a/SOURCES/binutils-x86_64-disable-PLT-elision.patch b/SOURCES/binutils-x86_64-disable-PLT-elision.patch new file mode 100644 index 0000000..070e7b7 --- /dev/null +++ b/SOURCES/binutils-x86_64-disable-PLT-elision.patch @@ -0,0 +1,20 @@ +diff -rup binutils.orig/bfd/elf64-x86-64.c binutils-2.27/bfd/elf64-x86-64.c +--- binutils.orig/bfd/elf64-x86-64.c 2019-01-08 15:54:01.806611101 +0000 ++++ binutils-2.27/bfd/elf64-x86-64.c 2019-01-08 15:55:30.790890607 +0000 +@@ -3032,7 +3032,7 @@ elf_x86_64_allocate_dynrelocs (struct el + resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, + eh->has_got_reloc, + eh); +- ++#if 0 + /* We can't use the GOT PLT if pointer equality is needed since + finish_dynamic_symbol won't clear symbol value and the dynamic + linker won't update the GOT slot. We will get into an infinite +@@ -3050,6 +3050,7 @@ elf_x86_64_allocate_dynrelocs (struct el + /* Use the GOT PLT. */ + eh->plt_got.refcount = 1; + } ++#endif + + /* Clear the reference count of function pointer relocations if + symbol isn't a normal function. */ diff --git a/SOURCES/binutils-x86_64-do-not-convert-abs-relocs.patch b/SOURCES/binutils-x86_64-do-not-convert-abs-relocs.patch new file mode 100644 index 0000000..f66fab7 --- /dev/null +++ b/SOURCES/binutils-x86_64-do-not-convert-abs-relocs.patch @@ -0,0 +1,12 @@ +--- binutils.orig/bfd/elf64-x86-64.c 2018-03-19 11:50:18.770407381 +0000 ++++ binutils-2.27/bfd/elf64-x86-64.c 2018-03-19 12:01:12.177534677 +0000 +@@ -1931,6 +1931,9 @@ elf_x86_64_convert_load_reloc (bfd *abfd + { + bfd_signed_vma distance; + ++ if (tsec->output_section == NULL) ++ return TRUE; ++ + /* At this point, we don't know the load addresses of TSEC + section nor SEC section. We estimate the distrance between + SEC and TSEC. We store the estimated distances in the diff --git a/SPECS/binutils.spec b/SPECS/binutils.spec new file mode 100644 index 0000000..1c10a3e --- /dev/null +++ b/SPECS/binutils.spec @@ -0,0 +1,2954 @@ +# rpmbuild parameters: +# --define "binutils_target arm-linux-gnu" to create arm-linux-gnu-binutils. +# --with=bootstrap: Build with minimal dependencies. +# --with=debug: Build without optimizations and without splitting the debuginfo. +# --without=docs: Skip building documentation. +# --without=testsuite: Do not run the testsuite. Default is to run it. +# --with=testsuite: Run the testsuite. Default when --with=debug is not to run it. + +%global _performance_build 1 + +%if 0%{!?binutils_target:1} +%define binutils_target %{_target_platform} +%define isnative 1 +%define enable_shared 1 +%else +%define cross %{binutils_target}- +%define isnative 0 +%define enable_shared 0 +%endif + +# Provide a way to enable deterministic archives. +# But do not do this by default. +%define enable_deterministic_archives 0 +# Enable support for GCC LTO compilation. +%define enable_lto 1 +# Disable the default generation of compressed debug sections. +%define default_compress_debug 0 +# Default to read-only-relocations (relro) in shared binaries. +%define default_relro 1 + +# Default: Not bootstrapping. +%bcond_with bootstrap +# Default: Not debug +%bcond_with debug +# Default: Always build documentation. +%bcond_without docs +# Default: Always run the testsuite. +%bcond_without testsuite + +%if %{with bootstrap} +%undefine with_docs +%undefine with_testsuite +%endif + +%if %{with debug} +%undefine with_testsuite +%endif + +#--------------------------------------------------------------------------------- + +Summary: A GNU collection of binary utilities +Name: %{?cross}binutils%{?_with_debug:-debug} +Version: 2.27 +# Note: The Release string *must* be different from that used by any of the +# devtoolset binutils associated with this release. That is why ".base" +# has been appended here. See BZ 1337617 for more details. +Release: 42.base%{?dist} +License: GPLv3+ +Group: Development/Tools +URL: http://sources.redhat.com/binutils + +# Note - the Linux Kernel binutils releases are too unstable and contain +# too many controversial patches so we stick with the official FSF version +# instead. + +Source: http://ftp.gnu.org/gnu/binutils/binutils-%{version}.tar.bz2 +Source2: binutils-2.19.50.0.1-output-format.sed +%if %{with docs} +# Strictly speaking this next file is not part of the binutils distribution. +# But the emacs info system expects it to be present on any system where +# emacs is installed, and old binutils distributions used to include it by +# mistake. Since there is no suitable 'documentation files' component to +# current RHEL releases, it is included here, but to save time and complexity +# it is stored as a pre-built, compressed, info file. +# The upstream version of the original source file can be found here: +# http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;f=doc/standards.texi;hb=HEAD +# For more information see: https://bugzilla.redhat.com/show_bug.cgi?id=1467390 +Source3: standards.info.gz +%endif + +#----------------------Patches---------------------------------------------------- + +# Purpose: Use /lib64 and /usr/lib64 instead of /lib and /usr/lib in the +# default library search path of 64-bit targets. +# Lifetime: Permanent, but it should not be. This is a bug in the libtool +# sources used in both binutils and gcc, (specifically the +# libtool.m4 file). These are based on a version released in 2009 +# (2.2.6?) rather than the latest version. (Definitely fixed in +# libtool version 2.4.6). +Patch01: binutils-2.20.51.0.2-libtool-lib64.patch + +# Purpose: Prevents the generation of a spurious relocation in PPC64 PEI +# executables. +# Lifetime: Redundant - should be deleted. +Patch02: binutils-2.20.51.0.10-ppc64-pie.patch + +# Purpose: Appends a RHEL or Fedora release string to the generic binutils +# version string. +# Lifetime: Permanent. This is a RHEL/Fedora specific patch. +Patch03: binutils-2.25-version.patch + +# Purpose: Use the "unsigned long long" type for pointers on hosts where +# long is a 32-bit type but pointers are a 64-bit type. +# Lifetime: Redundant - should be deleted. +Patch04: binutils-2.25-set-long-long.patch + +# Purpose: Prevent a seg-fault when attempting to pad a section with a NULL +# padding pointer. +# Lifetime: Fixed in 2.30. +Patch05: binutils-2.20.51.0.10-sec-merge-emit.patch + +# Purpose: Exports the demangle.h header file (associated with the libiberty +# sources) with the binutils-devel rpm. +# Lifetime: Permanent. This is a RHEL/Fedora specific patch. +Patch07: binutils-2.22.52.0.1-export-demangle.h.patch + +# Purpose: Disables the check in the BFD library's header file that config.h +# has been included before the bfd.h header. See BZ #845084 for +# more details. +# Lifetime: Permanent - but it should not be. The bfd.h header defines +# various types that are dependent upon configuration options, so +# the order of inclusion is important. +# FIXME: It would be better if the packages using the BFD header were +# fixed so that they do include the header files in the correct +# order. It may also be necessary to add a way for a package to +# tell the bfd.h header that this check is not necessary. +Patch08: binutils-2.22.52.0.4-no-config-h-check.patch + +# Purpose: Enables RELRO by default for AArch64 and ARM targets. +# See BZ 1203449. +# Lifetime: Fixed in FSF binutils 2.28. +Patch09: binutils-rh1203449.patch + +# Purpose: Stops the linker from issuing a warning message when it +# encounters an FDE entry that duplicates another FDE entry. These +# can be generated by linker garbage collection eliminating a +# section but not its FDE data. See BZ 1300603 for more details. +# Lifetime: Permanent - for now. Ideally the linker should be improved so +# that these duplicate entries are eliminated at an earlier stage +# of the link process. +Patch10: binutils-rh1300603.patch + +# Purpose: Fix linker testsuite failures for PPC64. +# Lifetime: Redundant. These failures should be fixed in the upstream +# sources now. +# FIXME: Need to test that failures are fixed and then remove this patch. +Patch11: binutils-rh1312876.patch + +# Purpose: Add /usr/lib/debug to the list of directories searched for +# separate debug info files. +# Lifetime: Fixed in 2.28. +Patch12: binutils-2.23.52.0.1-find-separate-debug-file.patch + +# Purpose: Speed up combining source code listings with disassembly output. +# Lifetime: Fixed in 2.28. +Patch14: binutils-2.25.1-objdump-speedup.patch + +# Purpose: Fix computation of sh_info field for .dynsym sections +# Lifetime: Fixed in 2.28. +Patch15: binutils-2.27-local-dynsym-count.patch + +# Purpose: Ensure that sections are placed in a monotonically increasing +# order of file offset. +# Lifetime: Fixed in 2.28. +Patch16: binutils-2.27-monotonic-section-offsets.patch + +# Purpose: Skip PR14918 linker test for ARM native targets. +# Lifetime: Fixed in 2.30. +Patch17: binutils-2.27-skip-rp14918-test-for-arm.patch + +# Purpose: Fixes compile time errors building GOLD for the AArch64 and ARM +# targets. +# Lifetime: Fixed in 2.28. +Patch18: binutils-2.27-gold.patch + +# Purpose: Improve objdump's disassembly of dynamic executables. +# Lifetime: Fixed in 2.28. +# FIXME: Contains a bug. See entry for +# binutils-2.27-remove-dwarf2-minmax.patch +Patch19: binutils-2.27-objdump-improvements.patch + +# Purpose: Include the filename concerned in readelf error messages. +# Lifetime: Permanent. This patch changes the format of readelf's output, +# making it better (IMHO) but also potentially breaking tools that +# depend upon readelf's current format. Hence it remains a local +# patch. +Patch20: binutils-2.27-filename-in-error-messages.patch + +# Purpose: Add support for the Power9 architecture. +# Lifetime: Fixed in 2.28. +Patch21: binutils-2.27-power9.patch + +# Purpose: And some Power9 bug fixes. +# Lifetime: Fixed in 2.28. +Patch22: binutils-2.27-power9.2.patch + +# Purpose: Fix up errors detected by Coverty. +# Lifetime: Fixed in 2.29. +Patch23: binutils-coverty-fixes.patch + +# Purpose: Do not create PLT entries for AARCH64 IFUNC symbols referenced in +# debug sections. +# Lifetime: Permanent. +# FIXME: Find related bug. Decide on permanency. +Patch24: binutils-2.27-aarch64-ifunc.patch + +# Purpose: Skip ifunc exec tests for AArch64. +# Lifetime: Fixed in 2.28. +Patch25: binutils-2.27-skip-ld-aarch64-ifunc-exec-tests.patch + +# Purpose: Expect linker test PR19719 to fail for the S390. +# Lifetime: Permanent. +# FIXME: Check to see if this test still fails, and delete patch when it +# passes. +Patch26: binutils-2.27-s390-pr19719.patch + +# Purpose: Delete linker tests for PR 19784. +# Lifetime: Fixed in 2.28. +Patch27: binutils-2.27-remove-pr19784-test.patch + +# Purpose: Fix computing stub sizes on PowerPC. +# Lifetime: Fixed in 2.28. +Patch28: binutils-2.27-ppc-stubs.patch + +# Purpose: Fix s390 PLT entry allocation. +# Lifetime: Fixed in 2.29. +Patch29: binutils-2.27-s390-plt.patch + +# Purpose: Revert H.J/s PLT elision patch. +# Lifetime: Permanent. +# FIXME: We should add a configure time option to enable/disable this +# optimization. +Patch30: binutils-2.27-revert-PLT-elision.patch + +# Purpose: Add support for new DWARF5 tag: DW_AT_export_symbols. +# Lifetime: Fixed in 2.29. +Patch31: binutils-2.27-DW_AT_export_symbols.patch + +# Purpose: Fixes a bug in binutils-2.25.1-objdump-speedup.patch that +# prevents address to function name lookup from working properly +# in some circumstances. +# Lifetime: Retire when binutils-2.25.1-objdump-speedup.ptch is retired. +# Ie when rebasing to 2.28. +Patch32: binutils-2.27-remove-dwarf2-minmax.patch + +# Purpose: Add support for the arch12 s390x ISA extensions. +# Lifetime: Fixed in 2.28. +Patch33: binutils-2.27-s390x-arch12.patch + +# Purpose: Fix various minor CVE bugs. +# Lifetime: Fixed in 2.28. +Patch34: binutils-2.27-cve-bugs.patch + +# Purpose: Add support for ARMv8.2a and ARMv8.3 ISA extensions. +# Lifetime: Fixewd in 2.29. +Patch35: binutils-2.27-ARMv8.2.patch + +# Purpose: Fix generation of COPY relocs on AArch64. +# Lifetime: Fixed in 2.29. +Patch36: binutils-2.27-aarch64-copy-relocs.patch + +# Purpose: Generate an error when attempting to link non-PIC s390 objects in +# PIE mode. +# Lifetime: Fixed in 2.28. +Patch37: binutils-2.27-s390x-complain-missing-fPIC.patch + +# Purpose: Add support for creating an PT_S390_PGSTE segment in s390 +# binaries. +# Lifetime: Fixed in 2.29. +Patch38: binutils-2.27-s390-pgste-marker.patch + +# Purpose: Fix seg-faults when stripping s390x binaries. +# Lifetime: Fixed in 2.29. +Patch39: binutils-2.27-s390x-check-for-NULL-pointers.patch + +# Purpose: Add support for the LNIA, SCV and RFSCV instructions in Power9 +# Lifetime: Fixed in 2.28. +Patch40: binutils-2.27-power9.3.patch + +# Purpose: Fix a seg-fault in the PowerPC linker when discarding .plt +# sections when -pie is used and undefined weak symbols are +# present. See PR 22431. +# Lifetime: Fixed in 2.30. +Patch41: binutils-2.27-ppc64-discarded-plt-sections.patch + +# Purpose: Fix a seg-fault in the x86_64 linker when attempting to convert +# relocations against the absolute section. +# Lifetime: Fixed in 2.30. +Patch42: binutils-x86_64-do-not-convert-abs-relocs.patch + +# Purpose: Add support for a "-z globalaudit" linker command line option. +# Lifetime: Fixed in 2.30. +Patch43: binutils-2.27-add-globalaudit-support.patch + +# Purpose: Stop strip from replacing unknown relocs with null relocs. Make +# it return an error status and not strip the file instead. +# Lifetime: Fixed in 2.31. +Patch44: binutils-strip-unknown-relocs.patch + +# Purpose: Allow "lea foo@GOT, %reg" in PIC mode on the x86. +# Lifetime: Fixed in 2.28 +Patch45: binutils-x86-lea-addressing.patch + +# Purpose: Fix seg-fault parsing corrupt DWARF1 debug information. +# Lifetime: Fixed in 2.31 +Patch46: binutils-CVE-2018-7568.patch + +# Purpose: Fix seg-fault parsing corrupt DWARF debug information. +# Lifetime: Fixed in 2.31 +Patch47: binutils-CVE-2018-7569.patch + +# Purpose: Fix seg-fault parsing corrupt COFF files. +# Lifetime: Fixed in 2.31 +Patch48: binutils-CVE-2018-7208.patch + +# Purpose: Fix seg-fault parsing corrupt ELF files. +# Lifetime: Fixed in 2.31 +Patch49: binutils-CVE-2018-10535.patch + +# Purpose: Fix seg-fault parsing corrupt DWARF debug information. +# Lifetime: Fixed in 2.31 +Patch50: binutils-CVE-2018-10373.patch + +# Purpose: Fix seg-fault parsing corrupt DWARF debug information. +# Lifetime: Fixed in 2.31 +Patch51: binutils-CVE-2018-10372.patch + +# Purpose: Fix seg-fault parsing a corrupt PE format file. +# Lifetime: Fixed in 2.31 +Patch52: binutils-CVE-2018-10534.patch + +# Purpose: Fix seg-fault parsing a corrupt AOUT format file. +# Lifetime: Fixed in 2.31 +Patch53: binutils-CVE-2018-7642.patch + +# Purpose: Fix seg-fault parsing corrupt DWARF debug information. +# Lifetime: Fixed in 2.31 +Patch54: binutils-CVE-2018-7643.patch + +# Purpose: Fix seg-fault parsing corrupt ELF files. +# Lifetime: Fixed in 2.31 +Patch55: binutils-CVE-2018-8945.patch + +# Purpose: Stop strip from crashing whilst removing .comment sections. +# Lifetime: Fixed in 2.31 +Patch56: binutils-strip-fix.patch + +# Purpose: Prevent resource exhaustion attacks on the libiberty name +# demangling code. +# Lifetime: Fixed in 2.32 +Patch57: binutils-libiberty-demangler.patch + +# Purpose: Add the .attach-to-group pseudo-op to the assembler. +# Lifetime: Permanent. +Patch58: binutils-attach-to-group.patch + +# Purpose: Stop the x86_64 linker from optimizing PLT entries. +# Lifetime: Permanent. +Patch59: binutils-x86_64-disable-PLT-elision.patch + +# Purpose: Fix a possible memory corruption due to an integer overflow +# when running the binutils as 32-bit binaries. +# Lifetime: Fixed in 2.32 +Patch60: binutils-CVE-2018-1000876.patch + +# Purpose: Stop the BFD library from complaining about files with multiple +# relocations against the same section. Allows examination of +# special kernel modules. +# Lifetime: Fixed in 2.33 +Patch61: binutils-multiple-relocs-for-same-section.patch + + +# Purpose: A *temporary* patch to disable the generation of +# R_X86_64_GOTPCRELX and R_X86_64_REX_GETPCRELX relocations by the +# x86_64 assembler and the generations of the R_386_GOT32X +# relocation by the x86 assembler. This is because these +# relocations are unknown to the 2.25 version of the linker, and so +# static libraries and object files built with the 2.27 assembler +# (and without this patch) are incompatible. Unfortunately we need +# to maintain backwards compatibility to the 2.25 linker for the +# RHEL 7 product. See BZ 1506004 for more defails. +# Lifetime: Keep in RHEL 7, discard for RHEL 8. +Patch998: binutils-2.27-suppress-R_X86_64_GOTPCRELX.patch + +# Purpose: A *temporary* patch to disable checking for valid PowerPC64 TLBIE +# instructions. This allows the PPC kernel to be built. See: +# https://sourceware.org/ml/binutils/2015-05/msg00133.html +# Lifetime: Delete in NEXT release. +Patch999: binutils-SUPPRESS-PPC-TLBIE-CHECK.patch + +#--------------------------------------------------------------------------------- + +Provides: bundled(libiberty) + +%define gold_arches %ix86 x86_64 %arm aarch64 %{power64} s390x + +%if %{with bootstrap} +%define build_gold no +%else +%ifarch %gold_arches +%define build_gold both +%else +%define build_gold no +%endif +%endif + +%if %{with debug} +# Define this if you want to skip the strip step and preserve debug info. +# Useful for testing. +%define __debug_install_post : > %{_builddir}/%{?buildsubdir}/debugfiles.list +%define debug_package %{nil} +%endif + +Buildroot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) + +BuildRequires: gcc + +# Gold needs bison in order to build gold/yyscript.c. +# Bison needs m4. +%if "%{build_gold}" == "both" +BuildRequires: bison, m4, gcc-c++ +%endif + +%if %{without bootstrap} +BuildRequires: gettext, flex, zlib-devel +%endif + +%if %{with docs} +BuildRequires: texinfo >= 4.0 +# BZ 920545: We need pod2man in order to build the manual pages. +BuildRequires: /usr/bin/pod2man +Requires(post): /sbin/install-info +Requires(preun): /sbin/install-info +%endif + +# Required for: ld-bootstrap/bootstrap.exp bootstrap with --static +# It should not be required for: ld-elf/elf.exp static {preinit,init,fini} array +%if %{with testsuite} +# relro_test.sh uses dc which is part of the bc rpm, hence its inclusion here. +BuildRequires: dejagnu, zlib-static, glibc-static, sharutils, bc +%if "%{build_gold}" == "both" +# The GOLD testsuite needs a static libc++ +BuildRequires: libstdc++-static +%endif +%endif + +Conflicts: gcc-c++ < 4.0.0 + +# The higher of these two numbers determines the default ld. +%{!?ld_bfd_priority: %global ld_bfd_priority 50} +%{!?ld_gold_priority:%global ld_gold_priority 30} + +%if "%{build_gold}" == "both" +Requires(post): coreutils +Requires(post): %{_sbindir}/alternatives +Requires(preun): %{_sbindir}/alternatives +%endif + +# On ARM EABI systems, we do want -gnueabi to be part of the +# target triple. +%ifnarch %{arm} +%define _gnu %{nil} +%endif + +#--------------------------------------------------------------------------------- + +%description +Binutils is a collection of binary utilities, including ar (for +creating, modifying and extracting from archives), as (a family of GNU +assemblers), gprof (for displaying call graph profile data), ld (the +GNU linker), nm (for listing symbols from object files), objcopy (for +copying and translating object files), objdump (for displaying +information from object files), ranlib (for generating an index for +the contents of an archive), readelf (for displaying detailed +information about binary files), size (for listing the section sizes +of an object or archive file), strings (for listing printable strings +from files), strip (for discarding symbols), and addr2line (for +converting addresses to file and line). + +#--------------------------------------------------------------------------------- + +%package devel +Summary: BFD and opcodes static and dynamic libraries and header files +Group: System Environment/Libraries +Provides: binutils-static = %{version}-%{release} +%if %{with docs} +Requires(post): /sbin/install-info +Requires(preun): /sbin/install-info +%endif +Requires: zlib-devel +Requires: binutils = %{version}-%{release} +Requires: coreutils + +%description devel +This package contains BFD and opcodes static and dynamic libraries. + +The dynamic libraries are in this package, rather than a seperate +base package because they are actually linker scripts that force +the use of the static libraries. This is because the API of the +BFD library is too unstable to be used dynamically. + +The static libraries are here because they are now needed by the +dynamic libraries. + +Developers starting new projects are strongly encouraged to consider +using libelf instead of BFD. + +#--------------------------------------------------------------------------------- + +%prep +%setup -q -n binutils-%{version} +%patch01 -p0 +%patch02 -p0 +%patch03 -p1 +%patch04 -p1 +%patch05 -p1 +%patch07 -p1 +%patch08 -p0 +%patch09 -p0 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 + +%patch14 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch18 -p0 +%patch19 -p1 +%patch20 -p1 +%patch21 -p1 +%patch22 -p1 +%patch23 -p1 +%patch24 -p1 +%patch25 -p1 +%patch26 -p1 +%patch27 -p1 +%patch28 -p1 +%patch29 -p1 +%patch30 -p1 +%patch31 -p1 +%patch32 -p1 +%patch33 -p1 +%patch34 -p1 +%patch35 -p1 +%patch36 -p1 +%patch37 -p1 +%patch38 -p1 +%patch39 -p1 +%patch40 -p1 +%patch41 -p1 +%patch42 -p1 +%patch43 -p1 +%patch44 -p1 +%patch45 -p1 +%patch46 -p1 +%patch47 -p1 +%patch48 -p1 +%patch49 -p1 +%patch50 -p1 +%patch51 -p1 +%patch52 -p1 +%patch53 -p1 +%patch54 -p1 +%patch55 -p1 +%patch56 -p1 +%patch57 -p1 +%patch58 -p1 +%patch59 -p1 +%patch60 -p1 +%patch61 -p1 + +# TEMPORARY patches. +%patch998 -p1 +%patch999 -p1 + +# We cannot run autotools as there is an exact requirement of autoconf-2.59. + +# On ppc64 and aarch64, we might use 64KiB pages +sed -i -e '/#define.*ELF_COMMONPAGESIZE/s/0x1000$/0x10000/' bfd/elf*ppc.c +sed -i -e '/#define.*ELF_COMMONPAGESIZE/s/0x1000$/0x10000/' bfd/elf*aarch64.c +sed -i -e '/common_pagesize/s/4 /64 /' gold/powerpc.cc +sed -i -e '/pagesize/s/0x1000,/0x10000,/' gold/aarch64.cc +# LTP sucks +perl -pi -e 's/i\[3-7\]86/i[34567]86/g' */conf* +sed -i -e 's/%''{release}/%{release}/g' bfd/Makefile{.am,.in} +sed -i -e '/^libopcodes_la_\(DEPENDENCIES\|LIBADD\)/s,$, ../bfd/libbfd.la,' opcodes/Makefile.{am,in} +# Build libbfd.so and libopcodes.so with -Bsymbolic-functions if possible. +if gcc %{optflags} -v --help 2>&1 | grep -q -- -Bsymbolic-functions; then +sed -i -e 's/^libbfd_la_LDFLAGS = /&-Wl,-Bsymbolic-functions /' bfd/Makefile.{am,in} +sed -i -e 's/^libopcodes_la_LDFLAGS = /&-Wl,-Bsymbolic-functions /' opcodes/Makefile.{am,in} +fi +# $PACKAGE is used for the gettext catalog name. +sed -i -e 's/^ PACKAGE=/ PACKAGE=%{?cross}/' */configure +# Undo the name change to run the testsuite. +for tool in binutils gas ld +do + sed -i -e "2aDEJATOOL = $tool" $tool/Makefile.am + sed -i -e "s/^DEJATOOL = .*/DEJATOOL = $tool/" $tool/Makefile.in +done +touch */configure +# Touch the .info files so that they are newer then the .texi files and +# hence do not need to be rebuilt. This eliminates the need for makeinfo. +# The -print is there just to confirm that the command is working. +%if %{without docs} + find . -name *.info -print -exec touch {} \; +%endif + +%ifarch %{power64} ppc64le +%define _target_platform %{_arch}-%{_vendor}-%{_host_os} +%endif + +#--------------------------------------------------------------------------------- + +%build +echo target is %{binutils_target} +export CFLAGS="$RPM_OPT_FLAGS" + +CARGS= + +case %{binutils_target} in i?86*|sparc*|ppc*|s390*|sh*|arm*|aarch64*) + CARGS="$CARGS --enable-64-bit-bfd" + ;; +esac + +case %{binutils_target} in ia64*) + CARGS="$CARGS --enable-targets=i386-linux" + ;; +esac + +case %{binutils_target} in ppc*|ppc64*) + CARGS="$CARGS --enable-targets=spu" + ;; +esac + +case %{binutils_target} in ppc64-*) + CARGS="$CARGS --enable-targets=powerpc64le-linux" + ;; +esac + +case %{binutils_target} in ppc64le*) + CARGS="$CARGS --enable-targets=powerpc-linux" + ;; +esac + +%if %{default_relro} + CARGS="$CARGS --enable-relro=yes" +%else + CARGS="$CARGS --enable-relro=no" +%endif + +%if 0%{?_with_debug:1} +CFLAGS="$CFLAGS -O0 -ggdb2 -Wno-error -D_FORTIFY_SOURCE=0" +%define enable_shared 0 +%endif + +# We could optimize the cross builds size by --enable-shared but the produced +# binaries may be less convenient in the embedded environment. +%configure \ + --quiet \ + --build=%{_target_platform} --host=%{_target_platform} \ + --target=%{binutils_target} \ +%ifarch %gold_arches +%if "%{build_gold}" == "both" + --enable-gold=default --enable-ld \ +%else + --enable-gold \ +%endif +%endif +%if %{isnative} + --with-sysroot=/ \ +%else + --enable-targets=%{_host} \ + --with-sysroot=%{_prefix}/%{binutils_target}/sys-root \ + --program-prefix=%{cross} \ +%endif +%if %{enable_shared} + --enable-shared \ +%else + --disable-shared \ +%endif +%if %{enable_deterministic_archives} + --enable-deterministic-archives \ +%else + --enable-deterministic-archives=no \ +%endif +%if %{enable_lto} + --enable-lto \ +%endif +%if %{default_compress_debug} + --enable-compressed-debug-sections=all \ +%else + --enable-compressed-debug-sections=none \ +%endif + $CARGS \ + --enable-plugins \ + --with-bugurl=http://bugzilla.redhat.com/bugzilla/ + +%if %{with docs} +make %{_smp_mflags} tooldir=%{_prefix} all +make %{_smp_mflags} tooldir=%{_prefix} info +%else +make %{_smp_mflags} tooldir=%{_prefix} MAKEINFO=true all +%endif + +# Do not use %%check as it is run after %%install where libbfd.so is rebuild +# with -fvisibility=hidden no longer being usable in its shared form. +%if %{without testsuite} +echo ====================TESTSUITE DISABLED========================= +%else +make -k check < /dev/null || : +echo ====================TESTING========================= +cat {gas/testsuite/gas,ld/ld,binutils/binutils}.sum +echo ====================TESTING END===================== +for file in {gas/testsuite/gas,ld/ld,binutils/binutils}.{sum,log} +do + ln $file binutils-%{_target_platform}-$(basename $file) || : +done +tar cjf binutils-%{_target_platform}.tar.bz2 binutils-%{_target_platform}-*.{sum,log} +uuencode binutils-%{_target_platform}.tar.bz2 binutils-%{_target_platform}.tar.bz2 +rm -f binutils-%{_target_platform}.tar.bz2 binutils-%{_target_platform}-*.{sum,log} +%endif + +#--------------------------------------------------------------------------------- + +%install +rm -rf %{buildroot} +%if %{with docs} +make install DESTDIR=%{buildroot} +%else +make install DESTDIR=%{buildroot} MAKEINFO=true +%endif + +%if %{isnative} +%if %{with docs} +make prefix=%{buildroot}%{_prefix} infodir=%{buildroot}%{_infodir} install-info +cp %{SOURCE3} %{buildroot}%{_infodir} +%endif + +# Rebuild libiberty.a with -fPIC. +# Future: Remove it together with its header file, projects should bundle it. +make -C libiberty clean +make CFLAGS="-g -fPIC $RPM_OPT_FLAGS" -C libiberty + +# Rebuild libbfd.a with -fPIC. +# Without the hidden visibility the 3rd party shared libraries would export +# the bfd non-stable ABI. +make -C bfd clean +make CFLAGS="-g -fPIC $RPM_OPT_FLAGS -fvisibility=hidden" -C bfd + +# Rebuild libopcodes.a with -fPIC. +make -C opcodes clean +make CFLAGS="-g -fPIC $RPM_OPT_FLAGS" -C opcodes + +install -m 644 bfd/libbfd.a %{buildroot}%{_libdir} +install -m 644 libiberty/libiberty.a %{buildroot}%{_libdir} +install -m 644 include/libiberty.h %{buildroot}%{_prefix}/include +install -m 644 opcodes/libopcodes.a %{buildroot}%{_libdir} +# Remove Windows/Novell only man pages +rm -f %{buildroot}%{_mandir}/man1/{dlltool,nlmconv,windres,windmc}* +%if %{without docs} +rm -f %{buildroot}%{_mandir}/man1/{addr2line,ar,as,c++filt,elfedit,gprof,ld,nm,objcopy,objdump,ranlib,readelf,size,strings,strip}* +rm -f %{buildroot}%{_infodir}/{as,bfd,binutils,gprof,ld}* +%endif + +%if %{enable_shared} +chmod +x %{buildroot}%{_libdir}/lib*.so* +%endif # isnative + +# Prevent programs from linking against libbfd and libopcodes +# dynamically, as they are change far too often. +rm -f %{buildroot}%{_libdir}/lib{bfd,opcodes}.so + +# Remove libtool files, which reference the .so libs +rm -f %{buildroot}%{_libdir}/lib{bfd,opcodes}.la + +# Sanity check --enable-64-bit-bfd really works. +grep '^#define BFD_ARCH_SIZE 64$' %{buildroot}%{_prefix}/include/bfd.h +# Fix multilib conflicts of generated values by __WORDSIZE-based expressions. +%ifarch %{ix86} x86_64 ppc %{power64} s390 s390x sh3 sh4 sparc sparc64 arm +sed -i -e '/^#include "ansidecl.h"/{p;s~^.*$~#include <bits/wordsize.h>~;}' \ + -e 's/^#define BFD_DEFAULT_TARGET_SIZE \(32\|64\) *$/#define BFD_DEFAULT_TARGET_SIZE __WORDSIZE/' \ + -e 's/^#define BFD_HOST_64BIT_LONG [01] *$/#define BFD_HOST_64BIT_LONG (__WORDSIZE == 64)/' \ + -e 's/^#define BFD_HOST_64_BIT \(long \)\?long *$/#if __WORDSIZE == 32\ +#define BFD_HOST_64_BIT long long\ +#else\ +#define BFD_HOST_64_BIT long\ +#endif/' \ + -e 's/^#define BFD_HOST_U_64_BIT unsigned \(long \)\?long *$/#define BFD_HOST_U_64_BIT unsigned BFD_HOST_64_BIT/' \ + %{buildroot}%{_prefix}/include/bfd.h +%endif +touch -r bfd/bfd-in2.h %{buildroot}%{_prefix}/include/bfd.h + +# Generate .so linker scripts for dependencies; imported from glibc/Makerules: + +# This fragment of linker script gives the OUTPUT_FORMAT statement +# for the configuration we are building. +OUTPUT_FORMAT="\ +/* Ensure this .so library will not be used by a link for a different format + on a multi-architecture system. */ +$(gcc $CFLAGS $LDFLAGS -shared -x c /dev/null -o /dev/null -Wl,--verbose -v 2>&1 | sed -n -f "%{SOURCE2}")" + +tee %{buildroot}%{_libdir}/libbfd.so <<EOH +/* GNU ld script */ + +$OUTPUT_FORMAT + +/* The libz dependency is unexpected by legacy build scripts. */ +/* The libdl dependency is for plugin support. (BZ 889134) */ +INPUT ( %{_libdir}/libbfd.a -liberty -lz -ldl ) +EOH + +tee %{buildroot}%{_libdir}/libopcodes.so <<EOH +/* GNU ld script */ + +$OUTPUT_FORMAT + +INPUT ( %{_libdir}/libopcodes.a -lbfd ) +EOH + +%else # !isnative +# For cross-binutils we drop the documentation. +rm -rf %{buildroot}%{_infodir} +# We keep these as one can have native + cross binutils of different versions. +#rm -rf {buildroot}{_prefix}/share/locale +#rm -rf {buildroot}{_mandir} +rm -rf %{buildroot}%{_libdir}/libiberty.a +%endif # !isnative + +# This one comes from gcc +rm -f %{buildroot}%{_infodir}/dir +rm -rf %{buildroot}%{_prefix}/%{binutils_target} + +%find_lang %{?cross}binutils +%find_lang %{?cross}opcodes +%find_lang %{?cross}bfd +%find_lang %{?cross}gas +%find_lang %{?cross}gprof +cat %{?cross}opcodes.lang >> %{?cross}binutils.lang +cat %{?cross}bfd.lang >> %{?cross}binutils.lang +cat %{?cross}gas.lang >> %{?cross}binutils.lang +cat %{?cross}gprof.lang >> %{?cross}binutils.lang + +if [ -x ld/ld-new ]; then + %find_lang %{?cross}ld + cat %{?cross}ld.lang >> %{?cross}binutils.lang +fi +if [ -x gold/ld-new ]; then + %find_lang %{?cross}gold + cat %{?cross}gold.lang >> %{?cross}binutils.lang +fi + +#--------------------------------------------------------------------------------- + +%clean +rm -rf %{buildroot} + +#--------------------------------------------------------------------------------- + +%post +%if "%{build_gold}" == "both" +%__rm -f %{_bindir}/%{?cross}ld +%{_sbindir}/alternatives --install %{_bindir}/%{?cross}ld %{?cross}ld \ + %{_bindir}/%{?cross}ld.bfd %{ld_bfd_priority} +%{_sbindir}/alternatives --install %{_bindir}/%{?cross}ld %{?cross}ld \ + %{_bindir}/%{?cross}ld.gold %{ld_gold_priority} +%{_sbindir}/alternatives --auto %{?cross}ld +%endif # both ld.gold and ld.bfd + +%if %{isnative} +/sbin/ldconfig + +%if %{with docs} + /sbin/install-info --info-dir=%{_infodir} %{_infodir}/as.info.gz + /sbin/install-info --info-dir=%{_infodir} %{_infodir}/binutils.info.gz + /sbin/install-info --info-dir=%{_infodir} %{_infodir}/gprof.info.gz + /sbin/install-info --info-dir=%{_infodir} %{_infodir}/ld.info.gz + /sbin/install-info --info-dir=%{_infodir} %{_infodir}/standards.info.gz +%endif # with docs +%endif # isnative + +exit 0 + +#--------------------------------------------------------------------------------- + +%preun +%if "%{build_gold}" == "both" +if [ $1 = 0 ]; then + %{_sbindir}/alternatives --remove %{?cross}ld %{_bindir}/%{?cross}ld.bfd + %{_sbindir}/alternatives --remove %{?cross}ld %{_bindir}/%{?cross}ld.gold +fi +%endif # both ld.gold and ld.bfd + +%if %{isnative} +if [ $1 = 0 ]; then + if [ -e %{_infodir}/binutils.info.gz ] + then + /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/as.info.gz + /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/binutils.info.gz + /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/gprof.info.gz + /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/ld.info.gz + fi + if [ -e %{_infodir}/standards.info.gz ] + then + /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/standards.info.gz + fi +fi +%endif # isnative + +exit 0 + +#--------------------------------------------------------------------------------- + +%if %{isnative} +%postun +/sbin/ldconfig + + if [ -e %{_infodir}/binutils.info.gz ] + then + /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/as.info.gz + /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/binutils.info.gz + /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/gprof.info.gz + /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/ld.info.gz + fi + if [ -e %{_infodir}/standards.info.gz ] + then + /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/standards.info.gz + fi +%endif # isnative + +#--------------------------------------------------------------------------------- + +%files -f %{?cross}binutils.lang +%defattr(-,root,root,-) +%license COPYING COPYING3 COPYING3.LIB COPYING.LIB +%doc README +%{_bindir}/%{?cross}[!l]* + +%if "%{build_gold}" == "both" +%{_bindir}/%{?cross}ld.* +%ghost %{_bindir}/%{?cross}ld +%else +%{_bindir}/%{?cross}ld* +%endif # both ld.gold and ld.bfd + +%if %{with docs} +%{_mandir}/man1/* +%{_infodir}/as.info.gz +%{_infodir}/binutils.info.gz +%{_infodir}/gprof.info.gz +%{_infodir}/ld.info.gz +%{_infodir}/standards.info.gz +%endif # with docs + +%if %{enable_shared} +%{_libdir}/lib*.so +%exclude %{_libdir}/libbfd.so +%exclude %{_libdir}/libopcodes.so +%endif # enable_shared + +%if %{isnative} + +%if %{with docs} +%{_infodir}/[^b]*info* +%{_infodir}/binutils*info* +%endif + +%files devel +%defattr(-,root,root,-) +%{_prefix}/include/* +%{_libdir}/lib*.a +%{_libdir}/libbfd.so +%{_libdir}/libopcodes.so + +%if %{with docs} +%{_infodir}/bfd*info* +%endif # with docs + +%endif # isnative + +#--------------------------------------------------------------------------------- +%changelog +* Tue Sep 10 2019 Nick Clifton <nickc@redhat.com> 2.27-42.base +- Stop the BFD library from complaining about sections with multiple sets of relocations. (#1749085) + +* Mon Apr 15 2019 Nick Clifton <nickc@redhat.com> 2.27-41.base +- Fix up some linker tests that fail because of the R_x86_64_GOTPCRELX patch. (#1699745) + +* Mon Jan 28 2019 Nick Clifton <nickc@redhat.com> 2.27-40.base +- Enable gold for PowerPC and s390x. (#1670014) + +* Mon Jan 14 2019 Nick Clifton <nickc@redhat.com> 2.27-39.base +- Fix a potential illegal memory access triggered by an integer overflow. (#1665884) + +* Tue Jan 08 2019 Nick Clifton <nickc@redhat.com> 2.27-38.base +- Disable optimizations of x06_64 PLT entries. (#1624779) + +* Tue Jan 08 2019 Nick Clifton <nickc@redhat.com> 2.27-37.base +- Add the .attach-to-group pseudo-op to the assembler. (#1652587) + +* Tue Jan 08 2019 Nick Clifton <nickc@redhat.com> 2.27-36.base +- Prevent resource exhaustion attacks on libiberty's name demangling code. (#1598561) + +* Tue Jan 08 2019 Nick Clifton <nickc@redhat.com> 2.27-35.base +- Stop strip crashing when removing .comment sections. (#1644632) + +* Wed May 30 2018 Nick Clifton <nickc@redhat.com> 2.27-34.base +- Fix seg-fault parsing corrupt AOUT format files. (#1579799) +- Fix seg-fault parsing corrupt DWARF2 debug information. (#1579802) +- Fix seg-fault parsing corrupt ELF format files. (#1579801) + +* Thu May 17 2018 Nick Clifton <nickc@redhat.com> 2.27-33.base +- Fix seg-fault parsing ELF files. (#1578979) +- Fix seg-fault parsing DWARF-2 information. (#1579065) +- Fix seg-fault parsing DWARF-2 information. (#1579051) +- Fix seg-fault parsing a PE format file. (#1579019) + +* Wed May 16 2018 Nick Clifton <nickc@redhat.com> 2.27-32.base +- Fix seg-fault parsing DWARF-1 information. (#1569580) +- Fix seg-fault parsing DWARF-2 information. (#1569891) +- Fix seg-fault parsing COFF files. (#1571917) + +* Wed May 02 2018 Nick Clifton <nickc@redhat.com> 2.27-31.base +- Allow "lea foo@GOT, %reg" in PIC mode on the x86. (#1573872) + +* Fri Apr 20 2018 Nick Clifton <nickc@redhat.com> 2.27-30.base +- Version bump in order to allow a rebuild, in order to work around a transient problem with the compose database. + +* Wed Apr 11 2018 Nick Clifton <nickc@redhat.com> 2.27-29.base +- Add support for the GLOBALAUDIT dynamic linker tag. + (#1439351) + +* Wed Apr 11 2018 Nick Clifton <nickc@redhat.com> 2.27-28.base +- Stop the x86_64 linker from crashing when asked to convert a reloc against the ABS section. + (#1557346) +- Stop strip from replacing unknown relocs with null relocs. + (#1545386) + +* Thu Jan 11 2018 Nick Clifton <nickc@redhat.com> 2.27-27.base +- Do enable relro by default for the PowerPC64 architecture. + (#1523946) + +* Thu Jan 04 2018 Nick Clifton <nickc@redhat.com> 2.27-26.base +- Fix thinko in post-uninstall section. + (#1520899) + +* Tue Jan 02 2018 Nick Clifton <nickc@redhat.com> 2.27-25.base +- Remove man and info files not needed when building without documentation. + (#1530339) + +* Tue Jan 02 2018 Nick Clifton <nickc@redhat.com> 2.27-24.base +- Check for the existance of standards.info.gz before attempting to uninstall it. + (#1520899) + +* Tue Dec 19 2017 Nick Clifton <nickc@redhat.com> 2.27-23.base +- Do not complain if the standards.info.gz file does not exist when uninstalling. + (#1520899) + +* Mon Dec 11 2017 Nick Clifton <nickc@redhat.com> 2.27-22.base +- Do not enable relro by default for the PowerPC64 architecture. + (#1523946) + +* Thu Nov 16 2017 Nick Clifton <nickc@redhat.com> 2.27-21.base +- Prevent the PowerPC64 linker from triggering a seg-fault when discarding dynamic sections. + (#1513014) + +* Thu Nov 02 2017 Nick Clifton <nickc@redhat.com> 2.27-20.base +- Bump NVR so that the binutils rpms will be rebuilt, since they also have files that contain the offending relocs. + (#1508954) + +* Wed Oct 25 2017 Nick Clifton <nickc@redhat.com> 2.27-19.base +- Suppress the generation of R_X86_64_GOTPCRELX, R_X86_64_REX_GETPCRELX and R_386_GOT32X relocations. + (#1506004) + +* Tue Oct 10 2017 Nick Clifton <nickc@redhat.com> 2.27-18.base +- Update AArch64 copy reloc patch. + (#1430743) + +* Mon Sep 18 2017 Nick Clifton <nickc@redhat.com> 2.27-17.base +- Add LNIA, SCV and RFSCV instructions from Power9. + (#1356856) + +* Wed Sep 06 2017 Nick Clifton <nickc@redhat.com> 2.27-16.base +- Fix seg-fault when stripping s390x binaries. + (#14888890) + +* Wed Aug 30 2017 Nick Clifton <nickc@redhat.com> 2.27-15.base +- Add support for creating a PT_S390_PGSTE segment in s390 binaries. + (#1485398) + +* Wed Aug 30 2017 Nick Clifton <nickc@redhat.com> 2.27-14.base +- Add standards.info file to documentation distributed with the binutils package. + (#1467390) + +* Fri Aug 11 2017 Nick Clifton <nickc@redhat.com> 2.27-12.base +- Generate an error when attempting to link non-PIC s390 objects in PIE mode. + (#1406430) + +* Fri Aug 11 2017 Nick Clifton <nickc@redhat.com> 2.27-11.base +- Fix generation of dynamic COPY relocs for the AArch64. + (#1452170) + +* Wed Aug 09 2017 Nick Clifton <nickc@redhat.com> 2.27-10.base +- Rebase to binutils 2.27 ++ Retire: binutils-2.20.51.0.2-ia64-lib64.patch ++ Retire: binutils-2.20.51.0.10-copy-osabi.patch ++ Retire: binutils-rh1260158.patch ++ Retire: binutils-rh1300734.patch ++ Retire: binutils-2.25.1-aarch64-overflow-warnings.patch ++ Retire: binutils-2.25-aarch64-pr18668.patch ++ Retire: binutils-2.25.1-aarch64-pagesize.patch ++ Retire: binutils-rh1304451.patch ++ Retire: binutils-2.25.1-x86-Zepplin.patch ++ Retire: binutils-2.25.1-power9.patch ++ Retire: binutils-2.25.1-x86-mwaitx.patch ++ Retire: binutils-rh1162655.patch ++ Retire: binutils-2.25.1-aarch64-arch-extension.patch ++ Retire: binutils-2.25.1-s390-z13.patch ++ Retire: binutils-2.25.1-gold-resolving-to-hidden-symbols.patch +- Sync with Pegas 1.1 binutils. +- Import patch to add support for DWARF5 tags. + (#1472955) +- Import patch to fix converting addresses into function names. + (#1465318)(#1452170) +- Add support for ARMv8.2 ISA extensions. + (#1385959) + +* Tue Jul 25 2017 Nick Clifton <nickc@redhat.com> 2.25.1-33.base +- Add support for new tags defined by version 5 of the DWARF standard. + (#1472955) + +* Tue Jul 25 2017 Nick Clifton <nickc@redhat.com> 2.25.1-32.base +- Remove the minmax part of the objdump speedup patch. + (#1465318) + +* Tue May 09 2017 Nick Clifton <nickc@redhat.com> 2.25.1-31.base +- Fix generation of PLT entries for s390 binaries. + (#1440168) + +* Thu May 04 2017 Nick Clifton <nickc@redhat.com> 2.25.1-28-base +- Disable fix for 1406430. It breaks building real s390 executables. + (#1447209) + (#1406430) + +* Thu Apr 27 2017 Nick Clifton <nickc@redhat.com> 2.25.1-27-base +- Fix infnite loop in linker when counting PowerPC stubs. + (#1406498) + +* Mon Jan 16 2017 Nick Clifton <nickc@redhat.com> 2.25.1-26-base +- Speed up displaying disassembly when mixed with source code. + (#1311352) + +* Mon Jan 16 2017 Nick Clifton <nickc@redhat.com> 2.25.1-25-base +- Fix GOLD so that it will not warn about references to hidden symbols in shared objects. + (#1326710) + +* Fri Jan 06 2017 Nick Clifton <nickc@redhat.com> 2.25.1-24-base +- Fix thinko in previous patch. + (#1406430) + +* Fri Jan 06 2017 Nick Clifton <nickc@redhat.com> 2.25.1-23-base +- Add code to detect attempts to link PIE and non-PIE S390 binaries. + (#1406430) + +* Mon Aug 08 2016 Nick Clifton <nickc@redhat.com> 2.25.1-22-base +- Fix date format bug in changelog which was preventing package build. + +* Mon Aug 08 2016 Nick Clifton <nickc@redhat.com> 2.25.1-21-base +- Add support for Z13 extensions to IBMs s390 architecture. + (#1364516) + +* Fri Jun 24 2016 Nick Clifton <nickc@redhat.com> 2.25.1-20-base +- Import new PPC ISA 3.0 patch from FSF binutils. + (#1341730) + +* Mon Jun 13 2016 Nick Clifton <nickc@redhat.com> 2.25.1-19-base +- Add support for the .arch_extension pseudo-op to the AArch64 port of GAS. + (#1276755) + +* Mon Jun 13 2016 Nick Clifton <nickc@redhat.com> 2.25.1-18-base +- Update patch to fix AArch64 stub generation. + (#1243559) + +* Thu Jun 02 2016 Nick Clifton <nickc@redhat.com> 2.25.1-17-base +- Close memory leak in "ar" archiver program. + (#1162655) +- Retire the copy-osabi patch. + (#1252066) + +* Thu Jun 02 2016 Nick Clifton <nickc@redhat.com> 2.25.1-16-base +- Version bump to allow adding 1300543 to the errata. + (#1300543) + +* Wed Jun 01 2016 Nick Clifton <nickc@redhat.com> 2.25.1-15-base +- Extend Power9 patch to add new ISA 3.0 instructions. + (#1341730) + +* Wed May 25 2016 Nick Clifton <nickc@redhat.com> 2.25.1-14-base +- Extend Release string to include ".base" thus ensuring that it + will not collide with a DTS release which might otherwise have + the same name. + (#1337617) + +* Mon May 23 2016 Nick Clifton <nickc@redhat.com> 2.25.1-13 +- Add support for Zeppelin x86 extensions. +- Add support for the AMD MWAITX extension. +- Add support for the PowerPC Power9 architecture. +- Remove spurious binutils document references. + (#1335313) + (#1335684) + (#1333305) + +* Wed Apr 13 2016 Nick Clifton <nickc@redhat.com> 2.25.1-10 +- Allow the BFD library to locate debug info files below the /usr/lib/debug directory. + (#1311352) + +* Mon Apr 11 2016 Nick Clifton <nickc@redhat.com> 2.25.1-9 +- Housekeeping: Delete unused patches. Renumber existing patches. + +* Tue Mar 01 2016 Nick Clifton <nickc@redhat.com> 2.25.1-8 +- Fix PowerPC gas and ld testsuite failures. + (#1312876) + +* Tue Feb 23 2016 Nick Clifton <nickc@redhat.com> 2.25.1-7 +- Extend fix for AArch64 call veneers. + (#1243559) + +* Wed Feb 17 2016 Nick Clifton <nickc@redhat.com> 2.25.1-6 +- Add support for Intel Memory Protection Key instructions. + (#1304451) + +* Mon Feb 08 2016 Nick Clifton <nickc@redhat.com> 2.25.1-4 +- Improve warning message for overflowing AArch64 relocs. +- Import patch to fix PR18668. +- Ignore warning messages about duplicate FDE entries + (#1300543) + (#1300603) + (#1285614) + (#1243559) + +* Fri Jan 29 2016 Nick Clifton <nickc@redhat.com> 2.25.1-3 +- Experimental rebase on FSF 2.25.1 sources. + (#1341730) +- Retire: patch11, patch12, patch13, patch14, patch15, + patch16, patch17, patch18, patch19, patch20, patch21, + patch22, patch23, patch24, patch25, patch26, patch27, + patch28, patch29, patch30, patch32, patch100, patch101, + patch102, patch110, patch111, patch112, patch113, patch114, + patch115, patch116, patch117, patch118, patch119, patch120, + patch121, patch201, patch202, patch203, patch204, patch205, + patch206, patch207, patch208, patch209, patch210, patch211, + patch212, patch300, patch301, patch302, patch303, patch304, + patch305, patch306, patch307, patch308, patch309, patch400, + patch401, patch402, patch403, patch404, patch405, patch406, + patch407, patch501 +- Add patch to suppress checking of PPC64 TLBIE instruction. [TEMPORARY] +- Add fix for FSF PR 18879 +- Add fix for s390x linker testsuite failure. + (#1276755) + (#1260158) + (#1300734) + (#1288068) + +* Thu Jan 14 2016 Nick Clifton <nickc@redhat.com> 2.23.52.0.1-56 +- Remove __PPC__ checks from BFD library. + (#1261016) + +* Tue Oct 13 2015 Nick Clifton <nickc@redhat.com> 2.23.52.0.1-55 +- Add missing delta to patch that fixes parsing corrupted archives. + (#1162666) + +* Wed Jul 29 2015 Nick Clifton <nickc@redhat.com> 2.23.52.0.1-54 +- Import patch for PR 18270: Create AArch64 GOT entries for local symbols. + (#1238783) + +* Tue Jul 28 2015 Jeff Law <law@redhat.com> - 2.23.52.0.1-51 +- Fix incorrectly generated binaries and DSOs on PPC platforms. + (#1247126) + +* Mon Jun 29 2015 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-50 +- Fix memory corruption parsing corrupt archives. + (#1162666) + +* Mon Jun 29 2015 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-49 +- Fix directory traversal vulnerability. + (#1162655) + +* Mon Jun 29 2015 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-48 +- Fix stack overflow in SREC parser. + (#1162621) + +* Mon Jun 29 2015 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-47 +- Fix stack overflow whilst parsing a corrupt iHex file. + (#1162607) + +* Mon Jun 29 2015 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-46 +- Fix out of bounds memory accesses when parsing corrupt PE binaries. + (#1162594, #1162570) + +* Mon Jun 29 2015 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-45 +- Change strings program to default to -a. Fix problems parsing + files containg corrupt ELF group sections. (#1157276) + +* Tue Jun 23 2015 Jeff Law <law@redhat.com> - 2.23.52.0.1-44 +- Avoid reading beyond function boundary when disassembling. + (#1060282) + +- For binary ouput, we don't have an ELF bfd output so can't access + elf_elfheader. (#1226864) + +* Thu May 28 2015 Jeff Law <law@redhat.com> - 2.23.52.0.1-43 +- Do not discard stap probe note sections on aarch64 (#1225091) + +* Tue May 26 2015 Jeff Law <law@redhat.com> - 2.23.52.0.1-42 +- Clamp maxpagesize at 1 (rather than 0) to avoid segfaults + in the linker when passed a bogus max-page-size argument. + (#1203449) + +* Thu May 21 2015 Martin Sebor <msebor@redhat.com> - 2.23.52.0.1-41 +- Fixup bfd elf_link_add_object_symbols for ppc64 to prevent subsequent + uninitialized accesses elsewhere. (#1172766) + +* Thu May 7 2015 Jeff Law <law@redhat.com> - 2.23.52.0.1-40 +- Minor testsuite adjustments for PPC changes in -38/-39. + (#1183838) + Fix md_assemble for PPC to handle arithmetic involving the TOC + better. (#1183838) + +* Wed May 6 2015 Martin Sebor <msebor@redhat.com> - 2.23.52.0.1-39 +- Fix ppc64: segv in libbfd (#1172766). + +* Wed May 6 2015 Martin Sebor <msebor@redhat.com> - 2.23.52.0.1-38 +- Unconditionally apply ppc64le patches (#1183838). + +* Mon May 4 2015 Jeff Law <law@redhat.com> - 2.23.52.0.1-37 +- Andreas's backport of z13 and dependent fixes for s390, + including tesetcase fix from Apr 27, 2015.' (#1182153) + +* Tue Apr 7 2015 Jeff Law <law@redhat.com> - 2.23.52.0.1-35 +- Fixup testsuite for AArch64 (#1182111) +- Add support for @localentry for LE PPC64 (#1194164) + +* Tue Mar 31 2015 Jeff Law <law@redhat.com> - 2.23.52.0.1-34 +- Do not install windmc(1) man page (#850832) + +* Fri Mar 27 2015 Jeff Law <law@redhat.com> - 2.23.52.0.1-33 +- Do not replace R_390_TLS_LE{32,64} with R_390_TLS_TPOFF for PIE + (#872148) +- Enable relro by default for arm and aarch64 (#1203449) +- Backport 3 RELRO improvements for ppc64/ppc64le from upstream + (#1175624) + +* Wed Mar 11 2015 Jeff Law <law@redhat.com> - 2.23.52.0.1-31 +- Backport upstream RELRO fixes. (#1200138) + +* Thu Jan 15 2015 Jeff Law <law@redhat.com> - 2.23.52.0.1-30 +- Fix syntax for multiple --enable-targets configure option. + (#1133147) + +* Thu Jan 8 2015 Jeff Law <law@redhat.com> - 2.23.52.0.1-29 +- Add support for crc instructions on aarch64 (#1179810) + +* Mon Jan 5 2015 Jeff Law <law@redhat.com> - 2.23.52.0.1-28 +- Bring back spu target for ppc64le which was accidentally lost + (#1133147) + +* Tue Dec 16 2014 Richard Henderson <rth@redhat.com> - 2.23.52.0.1-27 +- (Re-)Set ELF_COMMONPAGESIZE to 64k for ppc64le. + (#1174826) + +* Thu Sep 11 2014 Patsy Franklin <pfrankli@redhat.com> - 2.23.52.0.1-26 +- Enable Intel AVX-512VL, AVX-512BW, AVX-512DQ and SGX support. + (#1140375) + +* Wed Aug 27 2014 Jeff Law <law@redhat.com> - 2.23.52.0.1-25.9 + Revert this change (handled elsewhere): +- Additional patch from Alan to fix problems with ld --defsym. + (#1132732) + +* Mon Aug 25 2014 Jeff Law <law@redhat.com> - 2.23.52.0.1-23.9 +- Include powerpc-linux as a BFD target when building for ppc64le. + (#1133147). + +* Fri Aug 22 2014 Patsy Franklin <pfrankli@redhat.com> - 2.23.52.0.1-22.9 +- Reduce the size of aarch64 .debug_line; fix cfi encoding of fp registers; + add register names to dumping of aarch64 cfi data. Patch provided by rth. + Resolves: #1132641 + +* Fri Aug 22 2014 Patsy Franklin <pfrankli@redhat.com> - 2.23.52.0.1-21.9 +- This fixes a problem seen on powerpc64le ELFv2 when creating a + function symbol alias with ld --defsym. st_other needs to be copied + from the source symbol to the alias in order to set up the local entry + offset for the alias. + +* Mon Aug 18 2014 Patsy Franklin <pfrankli@redhat.com> - 2.23.52.0.1-20.9 +- Correct handling of strong followed by weak def merging of st_other + Resolves: #1130479 + +* Wed Aug 13 2014 Jeff Law <law@redhat.com> - 2.23.52.0.1-19.9 +- Add missing PPC opcodes + Resolves: #1090618 + +* Mon Aug 11 2014 Jeff Law <law@redhat.com> - 2.23.52.0.1-18.9 +- Do not overwrite valid SONAME with empty string. (#1128279) + Resolves: #1128280 + +* Mon Aug 4 2014 Aldy Hernandez <aldyh@redhat.com> - 2.23.52.0.1-17.9 +- Initial support for ppc64le. + Fix for bz#1125478 + +* Thu Jun 26 2014 Richard Henderson <rth@redhat.com> - 2.23.52.0.1-16.9 +- Backport fix for movi. + +* Tue Jun 24 2014 Richard Henderson <rth@redhat.com> - 2.23.52.0.1-16.8 +- Backport support for IFUNCs. + +* Sat Jun 14 2014 Mark Salter <msalter@redhat.com> - 2.23.52.0.1-16.7 +- Backport support for full range of CRn in AArch64 system registers. + Fix for bz#1109497 + +* Fri May 16 2014 Kyle McMartin <kyle@redhat.com> - 2.23.52.0.1-16.6 +- AArch64: Backport two patches from upstream fixing GOT handling. + +* Thu May 15 2014 Brendan Conoboy <blc@redhat.com> - 2.23.52.0.1-16.5 +- Rebuild for BZ#1098169 + +* Fri May 09 2014 Kyle McMartin <kyle@redhat.com> - 2.23.52.0.1-16.4 +- AArch64: Backport two fixes from upstream and add a draft patch to + set DF_STATIC_TLS when emitting IE relocs. Also increase + ELF_COMMONPAGESIZE to 64K to match the kernel. + +* Wed Apr 16 2014 Richard Henderson <rth@redhat.com> - 2.23.52.0.1-16.3 +- Backport tls-relax-gdesc-ie fix + +* Thu Mar 13 2014 Richard Henderson <rth@redhat.com> - 2.23.52.0.1-16.2 +- Fix for rh1075827 + +* Wed Feb 19 2014 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-16.1 +- Fix for rh1066712 + +* Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 2.23.52.0.1-16 +- Mass rebuild 2014-01-24 + +* Mon Jan 13 2014 Jeff Law <law@redhat.com> - 2.23.52.0.1-15 +- Set _performance_build to get -O3 builds (#1051060). + +* Mon Jan 6 2014 Jeff Law <law@redhat.com> - 2.23.52.0.1-14 +- Fix two may-be-uninitialized issues exposed by changes in + compiler flags used to build binutils (#1048848). + +* Fri Dec 27 2013 Daniel Mach <dmach@redhat.com> - 2.23.52.0.1-13 +- Mass rebuild 2013-12-27 + +* Thu Aug 29 2013 Jakub Jelinek <jakub@redhat.com> - 2.23.52.0.1-12 +- Add Intel AVX3, MPX and SHA support. +- Add support for x86-64 -mcmodel=large -fpic TLS transitions. (#994244) + +* Fri Jul 5 2013 Jeff Law <law@redhat.com> - 2.23.52.0.1-11 +- Add support for TDB notes section (#805115) +- Fix length operands for cdzt, cxzt czdt and czxt (#805115) + +* Wed Jul 3 2013 Jeff Law <law@redhat.com> - 2.23.52.0.1-10 +- Add libstdc++-static as a build requirement when running + the testsuite. +- Add remaining power8 support (#731883) + +* Tue Jun 04 2013 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-9 +- Add support for the alternative debuging files generated by the DWZ program. (#965255) + +* Wed Apr 17 2013 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-8 +- Import patch for FSF mainline PR 15371 to fix ifunc references in shared libraries. (#927818) + +* Tue Apr 09 2013 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-7 +- Fix library search paths for 64-bit aarch64 linux targets. (#950098) + +* Wed Mar 13 2013 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-6 +- Add explicit requirement of /usr/bin/pod2man. (#920545) + +* Fri Mar 08 2013 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-5 +- Reverts patch for PR15149 - prevents report weak DT_NEEDED symbols. (#918003) + +* Wed Mar 06 2013 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-4 +- Enable building of GOLD for the ARM. (#908966) + +* Mon Mar 04 2013 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-3 +- Fix errors reported by version 5.0 of texinfo. + +* Fri Mar 01 2013 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-2 +- Fix the creation of index tables in 64-bit thin archives. (#915411) + +* Thu Feb 28 2013 Nick Clifton <nickc@redhat.com> - 2.23.52.0.1-1 +- Rebase on 2.23.51.0.1 release. (#916516) + +* Fri Feb 08 2013 Nick Clifton <nickc@redhat.com> - 2.23.51.0.9-2 +- Enable 64-bit BFD for aarch64. (#908904) + +* Mon Feb 04 2013 Nick Clifton <nickc@redhat.com> - 2.23.51.0.9-1 +- Rebase on 2.23.51.0.9 release. (#907089) +- Retire binutils-2.23.51.0.8-arm-whitespace.patch. + +* Mon Jan 21 2013 Nick Clifton <nickc@redhat.com> - 2.23.51.0.8-4 +- Allow more whitespace in ARM instructions. (#892261) + +* Tue Jan 15 2013 Patsy Franklin <pfrankli@redhat.com> - 2.23.51.0.8-3 +- Add bc to BuildRequires when running the testsuite. (#895321) + +* Wed Jan 02 2013 Nick Clifton <nickc@redhat.com> - 2.23.51.0.8-2 +- Add runtime link with libdl. (#889134) + +* Wed Jan 02 2013 Nick Clifton <nickc@redhat.com> - 2.23.51.0.8-1 +- Rebase on 2.23.51.0.8 release. (#890382) + +* Fri Dec 21 2012 Nick Clifton <nickc@redhat.com> - 2.23.51.0.7-1 +- Rebase on 2.23.51.0.7 release. (#889432) + +* Tue Nov 27 2012 Nick Clifton <nickc@redhat.com> - 2.23.51.0.6-1 +- Rebase on 2.23.51.0.6 release. (#880508) + +* Tue Nov 13 2012 Nick Clifton <nickc@redhat.com> - 2.23.51.0.5-1 +- Rebase on 2.23.51.0.5 release. (#876141) +- Retire binutils-2.23.51.0.3-arm-ldralt.patch + +* Tue Oct 23 2012 Nick Clifton <nickc@redhat.com> - 2.23.51.0.3-3 +- Rename ARM LDRALT instruction to LDALT. (#869025) PR/14575 + +* Mon Oct 15 2012 Jon Ciesla <limburgher@gmail.com> - 2.23.51.0.3-2 +- Provides: bundled(libiberty) + +* Tue Oct 02 2012 Nick Clifton <nickc@redhat.com> - 2.23.51.0.3-1 +- Rebase on 2.23.51.0.3 release. (#858560) + +* Tue Sep 11 2012 Nick Clifton <nickc@redhat.com> - 2.23.51.0.2-1 +- Rebase on 2.23.51.0.2 release. (#856119) +- Retire binutils-2.23.51.0.1-gold-keep.patch and binutils-rh805974.patch. + +* Tue Sep 4 2012 Jeff Law <law@redhat.com> 2.23.51.0.1-4 +- Correctly handle PLTOFF relocs for s390 IFUNCs. + +* Tue Aug 14 2012 Karsten Hopp <karsten@redhat.com> 2.23.51.0.1-3 +- apply F17 commit cd2fda5 to honour {powerpc64} macro (#834651) + +* Tue Aug 14 2012 Nick Clifton <nickc@redhat.com> - 2.23.51.0.1-2 +- Make GOLD honour KEEP directives in linker scripts (#8333355) + +* Wed Aug 08 2012 Nick Clifton <nickc@redhat.com> - 2.23.51.0.1-1 +- Rebase on 2.23.51.0.1 release. (#846433) +- Retire binutils-2.22.52.0.4-dwz.patch, binutils-2.22.52.0.4-ar-4Gb.patch, binutils-2.22.52.0.4-arm-plt-refcount.patch, binutils-2.22.52.0.4-s390-64bit-archive.patch. + +* Thu Aug 02 2012 Nick Clifton <nickc@redhat.com> - 2.22.52.0.4-8 +- Make the binutils-devel package depend upon the binutils package. (#845082) + +* Thu Aug 02 2012 Nick Clifton <nickc@redhat.com> - 2.22.52.0.4-7 +- Disable checks that config.h is included before system headers. (#845084) + +* Tue Jul 17 2012 Nick Clifton <nickc@redhat.com> - 2.22.52.0.4-6 +- Use 64bit indicies in archives for s390 binaries. (#835957) + +* Thu Jul 05 2012 Nick Clifton <nickc@redhat.com> - 2.22.52.0.4-5 +- Catch attempts to create a broken symbol index with archives > 4Gb in size. (#835957) + +* Fri Jun 29 2012 Nick Clifton <nickc@redhat.com> - 2.22.52.0.4-4 +- Import fix for ld/14189. (#829311) + +* Fri Jun 29 2012 Nick Clifton <nickc@redhat.com> - 2.22.52.0.4-3 +- Fix handling of archives > 4Gb in size by importing patch for PR binutils/14302. (#835957) + +* Tue Jun 19 2012 Jakub Jelinek <jakub@redhat.com> - 2.22.52.0.4-2 +- Add minimal dwz -m support. + +* Wed Jun 06 2012 Nick Clifton <nickc@redhat.com> - 2.22.52.0.4-1 +- Rebase on 2.22.52.0.4 release. (#829027) + +* Tue May 08 2012 Nick Clifton <nickc@redhat.com> - 2.22.52.0.3-1 +- Rebase on 2.22.52.0.3 release. (#819823) + +* Mon Apr 30 2012 Nick Clifton <nickc@redhat.com> - 2.22.52.0.2-1 +- Rebase on 2.22.52.0.2 release. (#816514) +- Retire binutils-2.22.52.0.1-weakdef.patch, binutils-2.22.52.0.1-ld-13621.patch, binutils-rh797752.patch, binutils-2.22.52.0.1-x86_64-hidden-ifunc.patch, binutils-2.22.52.0.1-tsx.patch and binutils-2.22.52.0.1-hidden-ifunc.patch. +- Update binutils-2.22.52.0.1-reloc-on-by-default.patch. + +* Fri Apr 27 2012 Nick Clifton <nickc@redhat.com> - 2.22.52.0.1-12 +- Include demangle.h in the devel rpm. + +* Tue Apr 03 2012 Nick Clifton <nickc@redhat.com> - 2.22.52.0.1-11 +- Enable -zrelro by default for RHEL 7+. (#807831) + +* Fri Mar 16 2012 Jakub Jelinek <jakub@redhat.com> - 2.22.52.0.1-10 +- Fix up handling of hidden ifunc relocs on i?86 + +* Wed Mar 14 2012 Jeff Law <law@redhat.com> - 2.22.52.0.1-9 +- Fix c++filt docs (2nd instance) (#797752) + +* Wed Mar 07 2012 Jakub Jelinek <jakub@redhat.com> - 2.22.52.0.1-8 +- Fix up handling of hidden ifunc relocs on x86_64 +- Add Intel TSX support + +* Tue Mar 06 2012 Nick Clifton <nickc@redhat.com> - 2.22.52.0.1-7 +- Enable -zrelro by default. (#621983 #807831) + +* Mon Feb 27 2012 Jeff Law <law@redhat.com> - 2.22.52.0.1-6 +- Fix c++filt docs (#797752) + +* Wed Feb 15 2012 Mark Wielaard <mjw@redhat.com> - 2.22.52.0.1-5 +- Add upstream ld/13621 'dangling global hidden symbol in symtab' patch. + +* Wed Feb 08 2012 Adam Williamson <awilliam@redhat.com> - 2.22.52.0.1-4 +- Actually apply the patch + +* Wed Feb 08 2012 Adam Williamson <awilliam@redhat.com> - 2.22.52.0.1-3 +- Add upstream weakdef.patch to fix RH #788107 + +* Wed Feb 01 2012 Nick Clifton <nickc@redhat.com> - 2.22.52.0.1-2 +- Drat - forgot to upload the new tarball. Now done. + +* Wed Feb 01 2012 Nick Clifton <nickc@redhat.com> - 2.22.52.0.1-1 +- Rebase on 2.22.52 release. +- Remove build-id.patch and gold-casts.patch as they are included in the 2.22.52 sources. + +* Fri Jan 13 2012 Nick Clifton <nickc@redhat.com> - 2.22-4 +- Fix bug in GOLD sources parsing signed integers in command line options. + +* Fri Jan 13 2012 Nick Clifton <nickc@redhat.com> - 2.22-3 +- Add casts for building gold with 4.7 version of gcc. + +* Thu Jan 12 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.22-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Nov 22 2011 Nick Clifton <nickc@redhat.com> - 2.22-1 +- Rebase on 2.22 release. + +* Fri Sep 30 2011 Ricky Zhou <ricky@fedoraproject.org> - 2.21.53.0.2-2 +- Rebuild libopcodes.a with -fPIC. + +* Tue Aug 09 2011 Nick Clifton <nickc@redhat.com> - 2.21.53.0.2-1 +- Rebase on 2.21.53.0.2 tarball. Delete unneeded patches. (BZ 728677) + +* Tue Aug 02 2011 Nick Clifton <nickc@redhat.com> - 2.21.53.0.1-3 +- Update libiberty demangling. (BZ 727453) + +* Wed Jul 27 2011 Nick Clifton <nickc@redhat.com> - 2.21.53.0.1-2 +- Import Jakub Jelinek's patch to add support for displaying the contents of .debug_macro sections. + +* Tue Jul 19 2011 Nick Clifton <nickc@redhat.com> - 2.21.53.0.1-1 +- Rebase on 2.21.53.0.1 tarball. Delete unneeded patches. (BZ 712668) + +* Fri Jun 24 2011 Nick Clifton <nickc@redhat.com> - 2.21.52.0.1-5 +- Import fix for PR ld/12921. + +* Fri Jun 24 2011 Nick Clifton <nickc@redhat.com> - 2.21.52.0.1-4 +- Run "alternatives --auto" to restore ld symbolic link if it was manually configured. (BZ 661247) + +* Thu Jun 16 2011 Nick Clifton <nickc@redhat.com> - 2.21.52.0.1-3 +- Fix seg-fault attempting to find a function name without a symbol table. (BZ 713471) + +* Fri Jun 10 2011 Nick Clifton <nickc@redhat.com> - 2.21.52.0.1-2 +- Import fix for PR ld/12851 (BZ 711268) + +* Thu Jun 09 2011 Nick Clifton <nickc@redhat.com> - 2.21.52.0.1-1 +- Rebase on 2.21.52.0.1 tarball. (BZ 712025) + +* Tue May 17 2011 Nick Clifton <nickc@redhat.com> - 2.21.51.0.9-1 +- Rebase on 2.21.51.0.9 tarball. (BZ 703105) + +* Mon May 2 2011 Peter Robinson <pbrobinson@gmail.com> - 2.21.51.0.8-3 +- Add ARM to BFD checks + +* Mon Apr 11 2011 Nick Clifton <nickc@redhat.com> - 2.21.51.0.8-2 +- Delete plugins patch - enable plugins via configure option. + +* Mon Apr 11 2011 Nick Clifton <nickc@redhat.com> - 2.21.51.0.8-1 +- Rebase on 2.21.51.0.8 tarball. + +* Thu Mar 17 2011 Nick Clifton <nickc@redhat.com> - 2.21.51.0.7-1 +- Rebase on 2.21.51.0.7 tarball. + +* Tue Mar 08 2011 Nick Clifton <nickc@redhat.com> - 2.21.51.0.6-2 +- Enable gold plugins. (BZ 682852) + +* Thu Feb 10 2011 Nick Clifton <nickc@redhat.com> - 2.21.51.0.6-1 +- Rebase on 2.21.51.0.6 tarball. + +* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.21.51.0.5-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Fri Jan 28 2011 Jakub Jelinek <jakub@redhat.com> - 2.21.51.0.5-3 +- Readd --build-id fix patch. (PR ld/12451) + +* Thu Jan 6 2011 Dan Horák <dan[at]danny.cz> - 2.21.51.0.5-2 +- fix build on non-gold arches like s390(x) where both ld and ld.bfd is installed + +* Wed Jan 5 2011 Nick Clifton <nickc@redhat.com> - 2.21.51.0.5-1 +- Rebase on 2.21.51.0.5 tarball. +- Delete redundant patches. +- Fix gold+ld configure command line option. + +* Fri Nov 5 2010 Dan Horák <dan[at]danny.cz> - 2.20.51.0.12-2 +- "no" is not valid option for --enable-gold + +* Thu Oct 28 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.12-1 +- Rebase on 2.20.51.0.12 tarball. (BZ 582160) + +* Fri Sep 10 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.11-1 +- Rebase on 2.20.51.0.11 tarball. (BZ 631771) + +* Fri Aug 20 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.10-3 +- Allow ^ and ! characters in linker script wildcard patterns. (BZ 621742) + +* Fri Aug 20 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.10-2 +- Fix seg fault in sec_merge_emit(). (BZ 623687) + +* Tue Aug 10 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.10-1 +- Rebase on 2.20.51.0.10 tarball. +- Import GOLD sources from binutils mainline as of 10 Aug 2010. + +* Wed Jun 30 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.7-5 +- Rename the binutils-static package to binutils-devel in line with the Fedora packaging guidelines. + +* Wed Jun 9 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.7-4 +- Allow GOLD linker to parse "-l<name>" directives inside INPUT statements in linker scripts. (BZ 600553) + +* Tue May 4 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.7-3 +- Allow unique symbols in archive maps. + +* Tue Apr 20 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.7-2 +- Merge binutils-devel package into binutils-static package. (BZ 576300) + +* Thu Apr 8 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.7-1 +- Rebase on 2.20.51.0.7 tarball. +- Delete redundant patches: + binutils-2.20.51.0.2-add-needed.patch, + binutils-2.20.51.0.2-do-not-set-ifunc.patch, + binutils-2.20.51.0.2-enable-gold.patch, + binutils-2.20.51.0.2-gas-expr.patch, + binutils-2.20.51.0.2-ifunc-ld-s.patch, + binutils-2.20.51.0.2-lwp.patch, + binutils-2.20.51.0.2-ppc-hidden-plt-relocs.patch, + binutils-2.20.51.0.2-x86-hash-table.patch, +- Do not allow unique symbols to be bound locally. (PR ld/11434) +- Add support for DWARF4 debug information. + +* Thu Mar 4 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.2-17 +- Do not set ELFOSABI_LINUX on binaries which just link to IFUNC using DSOs. (BZ 568941) + +* Tue Mar 2 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.2-16 +- Copy the OSABI field in ELF headers, if set. (BZ 568921) + +* Fri Feb 12 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.2-15 +- Create separate static and devel sub-packages. (BZ 556040) + +* Tue Feb 2 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.2-14 +- Fix seg-fault when linking mixed x86 and x86_64 binaries. (BZ 487472) + +* Fri Jan 22 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.2-13 +- Add a requirement for the coreutils. (BZ 557006) + +* Wed Jan 20 2010 Nick Clifton <nickc@redhat.com> - 2.20.51.0.2-12 +- Fix --no-copy-dt-needed so that it will not complain about weak references. + +* Fri Dec 18 2009 Nick Clifton <nickc@redhat.com> - 2.20.51.0.2-11 +- Add missing part of PR 11088 patch. + +* Thu Dec 17 2009 Nick Clifton <nickc@redhat.com> - 2.20.51.0.2-10 +- Apply patch for PR 11088. (BZ 544149) + +* Wed Dec 9 2009 Nick Clifton <nickc@redhat.com> - 2.20.51.0.2-9 +- Apply patch for PR 10856. (BZ 544358) + +* Tue Dec 1 2009 Roland McGrath <roland@redhat.com> - 2.20.51.0.2-8 +- Build gold only for x86 flavors until others are tested. + +* Tue Nov 24 2009 Roland McGrath <roland@redhat.com> - 2.20.51.0.2-7 +- Add support for building gold. + +* Mon Nov 9 2009 Jakub Jelinek <jakub@redhat.com> 2.20.51.0.2-5 +- Fix up --copy-dt-needed-entries default. (Nick Clifton) + +* Mon Nov 9 2009 Jakub Jelinek <jakub@redhat.com> 2.20.51.0.2-4 +- Fix ld -s with IRELATIVE relocations. (BZ 533321, PR ld/10911) +- Add AMD Orochi LWP support, fix FMA4 support. + +* Thu Nov 05 2009 Nick CLifton <nickc@redhat.com> 2.20.51.0.2-3 +- Rename --add-needed to --copy-dt-needed-entries and improve error message about unresolved symbols in DT_NEEDED DSOs. + +* Tue Oct 27 2009 Jan Kratochvil <jan.kratochvil@redhat.com> 2.20.51.0.2-2 +- Fix rpm --excludedocs (BZ 515922). +- Fix spurious scriplet errors by `exit 0'. (BZ 517979, Nick Clifton) + +* Mon Oct 12 2009 Nick Clifton <nickc@redhat.com> 2.20.51.0.2-1 +- Rebase on 2.20 tarball. +- Remove redundant moxie patch. +- Remove redundant unique is global patch. +- Remove redundant cxxfilt java doc patch. + +* Tue Sep 29 2009 Jan Kratochvil <jan.kratochvil@redhat.com> 2.19.51.0.14-32 +- Remove spurious description of nonexistent --java switch for cxxfilt. + +* Thu Aug 6 2009 Jakub Jelinek <jakub@redhat.com> 2.19.51.0.14-31 +- Fix strip on objects with STB_GNU_UNIQUE symbols. (BZ 515700, PR binutils/10492) + +* Fri Jul 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.19.51.0.14-30 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Wed Jul 22 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.11-28 +- Rebase sources on 2.19.51.0.14 tarball. Gain fixes for PRs 10429 and 10433. + +* Wed Jul 22 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.11-28 +- Rebase sources on 2.19.51.0.13 tarball. Remove redundant orphan section placement patch. (BZ 512937) + +* Tue Jul 14 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.11-27 +- Add patch to allow moxie target to build, and hence --enable-targets=all to work. + +* Tue Jul 14 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.11-26 +- Import orphan section placement patch from mainline. (BZ 510384) + +* Tue Jul 14 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.11-25 +- Fix build-id patch to avoid memory corruption. (BZ 501582) + +* Sat Jul 11 2009 Jan Kratochvil <jan.kratochvil@redhat.com> 2.19.51.0.11-24 +- Provide uuencode output of the testsuite results. + +* Tue Jun 30 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.11-23 +- Rebase sources on the 2.19.51.0.11 tarball. + +* Mon Jun 22 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.10-22 +- Rebase sources on the 2.19.51.0.10 tarball. + +* Thu Jun 11 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.2-21 +- Do not attempt to set execute permission on non-regular files. (BZ 503426) + +* Tue Jun 9 2009 Jakub Jelinek <jakub@redhat.com> 2.19.51.0.2-20 +- Fix .cfi_* skip over >= 64KB of code. (PR gas/10255) + +* Wed May 27 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.2-19 +- Import fix for binutils PR #9938. (BZ 500295) + +* Wed Apr 15 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.2-18 +- Update IBM Power 7 support patch to fix tlbilx opcode. (BZ 494718) + +* Tue Mar 17 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.2-17 +- Add glibc-static to BuildRequires when running the testsuite. + +* Thu Mar 05 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.2-16 +- Add IBM Power7 support. (BZ 487887) + +* Mon Mar 02 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.2-15 +- Add IFUNC support. (BZ 465302) + +* Mon Feb 23 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.19.51.0.2-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 23 2009 Jan Kratochvil <jan.kratochvil@redhat.com> 2.19.50.0.2-13 +- Rediff the symbolic-envvar-revert patch to comply with rpm patch --fuzz=0. + +* Thu Feb 5 2009 Nick Clifton <nickc@redhat.com> 2.19.51.0.2-12 +- Rebase sources on 2.19.51.0.2 tarball. Remove linkonce-r-discard and + gcc-expect-table patches. + +* Mon Feb 2 2009 Jan Kratochvil <jan.kratochvil@redhat.com> 2.19.50.0.1-11 +- Fix .eh_frame_hdr build also for .gcc_except_table LSDA refs (BZ 461675). + +* Fri Jan 23 2009 Nick Clifton <nickc@redhat.com> 2.19.50.0.1-10 +- Only require dejagnu if the testsuites are going to be run. (BZ 481169) + +* Sat Nov 29 2008 Nick Clifton <nickc@redhat.com> 2.19.50.0.1-8 +- Add build-id patch to ensure that section contents are incorporated + into a build id. (BZ 472152) + +* Fri Nov 21 2008 Nick Clifton <nickc@redhat.com> 2.19.50.0.1 +- Rebase sources on 2.19.50.0.1 tarball. Update all patches, trimming + those that are no longer needed. + +* Thu Oct 30 2008 Jan Kratochvil <jan.kratochvil@redhat.com> 2.18.50.0.9-7 +- Fix %%{_prefix}/include/bfd.h on 32-bit hosts due the 64-bit BFD target + support from 2.18.50.0.8-2 (BZ 468495). + +* Thu Oct 30 2008 Jan Kratochvil <jan.kratochvil@redhat.com> 2.18.50.0.9-6 +- binutils-devel now requires zlib-devel (BZ 463101 comment 5). +- Fix complains on .gnu.linkonce.r relocations to their discarded + .gnu.linkonce.t counterparts. + +* Mon Sep 22 2008 Jan Kratochvil <jan.kratochvil@redhat.com> 2.18.50.0.9-5 +- Remove %%makeinstall to comply with the spu-binutils review (BZ 452211). + +* Mon Sep 22 2008 Jan Kratochvil <jan.kratochvil@redhat.com> 2.18.50.0.9-4 +- Fix *.so scripts for multilib linking (BZ 463101, suggested by Jakub Jelinek). + +* Sun Sep 21 2008 Jan Kratochvil <jan.kratochvil@redhat.com> 2.18.50.0.9-3 +- Provide libbfd.so and libopcodes.so for automatic dependencies (BZ 463101). +- Fix .eh_frame_hdr build on C++ files with discarded common groups (BZ 458950). +- Provide --build and --host to fix `rpmbuild --target' biarch builds. +- Include %%{binutils_target}- filename prefix for binaries for cross builds. +- Fix multilib conflict on %%{_prefix}/include/bfd.h's BFD_HOST_64BIT_LONG_LONG. + +* Mon Sep 15 2008 Jan Kratochvil <jan.kratochvil@redhat.com> 2.18.50.0.9-2 +- Package review, analysed by Jon Ciesla and Patrice Dumas (BZ 225615). + - build back in the sourcedir without problems as gasp is no longer included. + - Fix the install-info requirement. + - Drop the needless gzipping of the info files. + - Provide Obsoletes versions. + - Use the %%configure macro. + +* Sat Aug 30 2008 Jan Kratochvil <jan.kratochvil@redhat.com> 2.18.50.0.9-1 +- Update to 2.18.50.0.9. + - Drop the ppc-only spu target pre-build stage (BZ 455242). + - Drop parsing elf64-i386 files for kdump PAE vmcore dumps (BZ 457189). +- New .spec BuildRequires zlib-devel (/-static) for compressed sections. +- Update .spec Buildroot to be more unique. + +* Fri Aug 1 2008 Jan Kratochvil <jan.kratochvil@redhat.com> 2.18.50.0.8-2 +- Fix parsing elf64-i386 files for kdump PAE vmcore dumps (BZ 457189). +- Turn on 64-bit BFD support for i386, globally enable AC_SYS_LARGEFILE. +- `--with debug' builds now with --disable-shared. +- Removed a forgotten unused ld/eelf32_spu.c workaround from 2.18.50.0.8-1. + +* Thu Jul 31 2008 Jan Kratochvil <jan.kratochvil@redhat.com> 2.18.50.0.8-1 +- Update to 2.18.50.0.8. + - Drop the .clmul -> .pclmul renaming backport. +- Add %%{binutils_target} macro to support building cross-binutils. + (David Woodhouse) +- Support `--without testsuite' to suppress the testsuite run. +- Support `--with debug' to build without optimizations. +- Refresh the patchset with fuzz 0 (for new rpmbuild). +- Enable the spu target on ppc/ppc64 (BZ 455242). + +* Wed Jul 16 2008 Jan Kratochvil <jan.kratochvil@redhat.com> 2.18.50.0.6-4 +- include the `dist' tag in the Release number +- libbfd.a symbols visibility is now hidden (for #447426, suggested by Jakub) + +* Wed Jul 16 2008 Jan Kratochvil <jan.kratochvil@redhat.com> 2.18.50.0.6-3 +- rebuild libbfd.a with -fPIC for inclusion into shared libraries (#447426) + +* Tue Apr 8 2008 Jakub Jelinek <jakub@redhat.com> 2.18.50.0.6-2 +- backport .clmul -> .pclmul renaming + +* Fri Apr 4 2008 Jakub Jelinek <jakub@redhat.com> 2.18.50.0.6-1 +- update to 2.18.50.0.6 + - Intel AES, CLMUL, AVX/FMA support + +* Mon Mar 3 2008 Jakub Jelinek <jakub@redhat.com> 2.18.50.0.4-2 +- revert aranges optimization (Alan Modra, BZ#5303, BZ#5755) +- fix ld-shared testcase for GCC 4.3 (H.J. Lu) + +* Fri Feb 29 2008 Jakub Jelinek <jakub@redhat.com> 2.18.50.0.4-1 +- update to 2.18.50.0.4 + +* Tue Feb 19 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> 2.18.50.0.3-2 +- Autorebuild for GCC 4.3 + +* Wed Dec 12 2007 Jakub Jelinek <jakub@redhat.com> 2.18.50.0.3-1 +- update to 2.18.50.0.3 + - fix build with recent makeinfo (#415271) + +* Thu Aug 16 2007 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.18-1 +- update to 2.17.50.0.18 + - GPLv3+ + - preserve .note.gnu.build-id in objcopy --only-keep-debug (#251935) + - fix sparc64/alpha broken by --build-id patch (#252936) +- update License tag +- fix ld crash with --build-id and non-ELF output format (Alan Modra, BZ#4923) + +* Tue Jul 31 2007 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.17-7 +- fix ppc32 secure PLT detection (Alan Modra) + +* Wed Jul 25 2007 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.17-6 +- rebuilt to make sure even libbfd.so and libopcodes.so aren't + broken by #249435 + +* Tue Jul 24 2007 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.17-5 +- add .note.gnu.build-id into default linker script (#249435) + +* Tue Jul 24 2007 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.17-4 +- don't kill the %%{_gnu} part of target name on arm + (Lennert Buytenhek, #243516) +- create just one PT_NOTE segment header for all consecutive SHT_NOTE + sections + +* Wed Jul 18 2007 Roland McGrath <roland@redhat.com> 2.17.50.0.17-3 +- fix for ld --build-id + +* Sun Jul 15 2007 Roland McGrath <roland@redhat.com> 2.17.50.0.17-2 +- ld --build-id support + +* Wed Jun 27 2007 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.17-1 +- update to 2.17.50.0.17 + +* Tue Jun 12 2007 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.16-1 +- update to 2.17.50.0.16 + +* Sat Apr 14 2007 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.12-4 +- fix linking non-ELF input objects into ELF output (#235747) + +* Wed Mar 14 2007 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.12-3 +- don't require matching ELF_OSABI for target vecs with ELFOSABI_NONE, + only prefer specific osabi target vecs over the generic ones + (H.J.Lu, #230964, BZ#3826) +- build libbfd.so and libopcodes.so with -Bsymbolic-functions + +* Fri Mar 2 2007 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.12-2 +- ignore install-info errors from scriptlets (#223678) + +* Thu Mar 1 2007 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.12-1 +- update to 2.17.50.0.12 +- revert the misdesigned LD_SYMBOLIC{,_FUNCTIONS} env var support, + only support -Bsymbolic/-Bsymbolic-functions/--dynamic-list* + +* Mon Jan 8 2007 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.9-1 +- update to 2.17.50.0.9 +- fix tekhex reader + +* Sat Dec 23 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.8-2 +- fix --as-needed on ppc64 (#219629) + +* Sun Dec 3 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.8-1 +- update to 2.17.50.0.8 +- initialize frch_cfi_data (BZ#3607) + +* Fri Dec 1 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.7-1 +- update to 2.17.50.0.7 + - .cfi_personality and .cfi_lsda directives, per subsection .cfi_* + directives, better .eh_frame CIE merging + +* Thu Nov 9 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.6-3 +- fix popcnt instruction assembly and disassembly on amd64 (#214767) + +* Mon Oct 23 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.6-2 +- update to 2.17.50.0.6 + - fix for section relative linker script defined symbols in + empty sections (#207598, BZ#3267) + - fix handling of DW_CFA_set_loc in .eh_frame optimizations + - fix R_PPC_{PLT,GOT{,_TLSGD,_TLSLD,_TPREL,_DTPREL}}16_HA relocation + handling with weak undefined symbols (Alan Modra, #211094) + +* Tue Sep 12 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.3-6 +- fix multilib conflict in %%{_prefix}/include/bfd.h + +* Tue Sep 12 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.3-5 +- fix efi-app-ia64 magic number (#206002, BZ#3171) + +* Tue Sep 5 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.3-4 +- link libopcodes*.so against libbfd*.so (#202327) +- split *.a and header files into binutils-devel + +* Fri Aug 18 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.3-3 +- on ppc and ppc64 increase default -z commonpagesize to 64K (#203001) + +* Fri Jul 28 2006 Alexandre Oliva <aoliva@redhat.com> 2.17.50.0.3-2 +- do not infer x86 arch implicitly based on instruction in the input + (#200330) + +* Mon Jul 17 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.3-1 +- update to 2.17.50.0.3 + +* Fri Jul 14 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.2-8 +- add support for new AMDFAM10 instructions (#198281, IT#97662) +- add -march=/-mtune= gas support on x86/x86-64 +- x86/x86-64 nop insn improvements +- fix DT_GNU_HASH shift count value computation + +* Tue Jul 11 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.2-7 +- add DT_GNU_HASH support (--hash-style=gnu and --hash-style=both + ld options) + +* Thu Jun 29 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.2-4 +- fix i?86 TLS GD->IE transition in executables (#196157, BZ#2513) + +* Mon Jun 19 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.2-3 +- fix two places in ld that misbehaved with MALLOC_PERTURB_=N +- fix .tls_common handling in relocatable linking + +* Mon Jun 5 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.2-2 +- fix --as-needed (Alan Modra, #193689, BZ#2721) + +* Thu Jun 1 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.2-1 +- update to 2.17.50.0.2 +- update from CVS to 20060601 +- speed up the ELF linker by caching the result of kept section check + (H.J. Lu) + +* Tue May 9 2006 Jakub Jelinek <jakub@redhat.com> 2.17.50.0.1-1 +- update to 2.17.50.0.1 + +* Fri Mar 31 2006 Jakub Jelinek <jakub@redhat.com> 2.16.91.0.6-6 +- fix ld error message formatting, so that collect2 parser can + parse it again for g++ -frepo (#187142) + +* Thu Mar 9 2006 Alexandre Oliva <aoliva@redhat.com> 2.16.91.0.6-4 +- fix relaxation of TLS GD to LE on PPC (#184590) + +* Fri Mar 3 2006 Jakub Jelinek <jakub@redhat.com> 2.16.91.0.6-3 +- support DW_CFA_val_{offset,offset_sf,expression} in readelf/objdump + +* Tue Feb 28 2006 Jakub Jelinek <jakub@redhat.com> 2.16.91.0.6-2 +- add MNI support on i?86/x86_64 (#183080) +- support S signal frame augmentation flag in .eh_frame, + add .cfi_signal_frame support (#175951, PR other/26208, BZ#300) + +* Tue Feb 14 2006 Jakub Jelinek <jakub@redhat.com> 2.16.91.0.6-1 +- update to 2.16.91.0.6 + - fix ppc64 --gc-sections + - disassembler fixes for x86_64 cr/debug regs + - fix linker search order for DT_NEEDED libs + +* Mon Jan 02 2006 Jakub Jelinek <jakub@redhat.com> 2.16.91.0.5-1 +- update to 2.16.91.0.5 +- don't error about .toc1 references to discarded sectiosn on ppc64 + (#175944) + +* Wed Dec 14 2005 Jakub Jelinek <jakub@redhat.com> 2.16.91.0.3-2 +- put .gnu.linkonce.d.rel.ro.* sections into relro region + +* Fri Dec 09 2005 Jesse Keating <jkeating@redhat.com> +- rebuilt + +* Fri Nov 11 2005 Jakub Jelinek <jakub@redhat.com> 2.16.91.0.3-1 +- update to 2.16.91.0.3 +- add .weakref support (Alexandre Oliva, #115157, #165728) + +* Thu Aug 18 2005 Jakub Jelinek <jakub@redhat.com> 2.16.91.0.2-4 +- install-info also configure.info +- update standards.texi from gnulib (#165530) + +* Tue Aug 16 2005 Jakub Jelinek <jakub@redhat.com> 2.16.91.0.2-3 +- update to 20050816 CVS +- better fix for ld-cdtest +- fix symbol version script parsing + +* Fri Jul 29 2005 Jakub Jelinek <jakub@redhat.com> 2.16.91.0.2-2 +- don't complain about relocs to discarded sections in ppc32 + .got2 sections (Alan Modra, PR target/17828) + +* Fri Jul 22 2005 Jakub Jelinek <jakub@redhat.com> 2.16.91.0.2-1 +- update to 2.16.91.0.2 + +* Thu Jul 21 2005 Jakub Jelinek <jakub@redhat.com> 2.16.91.0.1-3 +- fix buffer overflow in readelf ia64 unwind printing code +- use vsnprintf rather than vsprintf in gas diagnostics (Tavis Ormandy) +- fix ld-cdtest when CFLAGS contains -fexceptions + +* Wed Jul 20 2005 Jakub Jelinek <jakub@redhat.com> 2.16.91.0.1-2 +- update to 20050720 CVS + +* Mon Jul 11 2005 Jakub Jelinek <jakub@redhat.com> 2.16.91.0.1-1 +- update to 2.16.91.0.1 plus 20050708 CVS + +* Wed Jun 15 2005 Jakub Jelinek <jakub@redhat.com> 2.16.90.0.3-1 +- update to 2.16.90.0.3 +- update to 20050615 CVS + - ppc32 secure PLT support (Alan Modra) +- further bfd/readelf robustification + +* Sat Jun 11 2005 Jakub Jelinek <jakub@redhat.com> 2.15.94.0.2.2-4 +- further bfd robustification (CAN-2005-1704, #158680) + +* Fri Jun 10 2005 Jakub Jelinek <jakub@redhat.com> 2.15.94.0.2.2-3 +- further objdump and readelf robustification (CAN-2005-1704, #158680) + +* Wed May 25 2005 Jakub Jelinek <jakub@redhat.com> 2.15.94.0.2.2-2 +- bfd and readelf robustification (CAN-2005-1704, #158680) + +* Tue Mar 29 2005 Jakub Jelinek <jakub@redhat.com> 2.15.94.0.2.2-1 +- update to 2.15.94.0.2.2 +- speed up walk_wild_section (Robert O'Callahan) + +* Mon Mar 7 2005 Jakub Jelinek <jakub@redhat.com> 2.15.94.0.2-4 +- rebuilt with GCC 4 + +* Mon Feb 28 2005 Jakub Jelinek <jakub@redhat.com> 2.15.94.0.2-3 +- fix buffer overflows in readelf (#149506) +- move c++filt to binutils from gcc-c++, conflict with gcc-c++ < 4.0 (#86333) + +* Thu Feb 10 2005 Jakub Jelinek <jakub@redhat.com> 2.15.94.0.2-1 +- update to 2.15.94.0.2 +- fix .note.GNU-stack/PT_GNU_STACK computation in linker on ppc64 (#147296) +- fix stripping of binaries/libraries that have empty sections right before + .dynamic section (with the same starting address; #144038) +- handle AS_NEEDED (...) in linker script INPUT/GROUP + +* Tue Dec 14 2004 Jakub Jelinek <jakub@redhat.com> 2.15.92.0.2-11 +- fix a longstanding -z relro bug + +* Mon Dec 13 2004 Jakub Jelinek <jakub@redhat.com> 2.15.92.0.2-10 +- avoid unnecessary gap with -z relro showing on i686 libc.so +- ppc64 --emit-relocs fix (Alan Modra) +- don't crash if STT_SECTION symbol has incorrect st_shndx (e.g. SHN_ABS, + as created by nasm; #142181) +- don't try to make absptr LSDAs relative if they don't have relocations + against them (Alan Modra, #141162) + +* Wed Oct 27 2004 Jakub Jelinek <jakub@redhat.com> 2.15.92.0.2-5.EL4 +- fix ar xo (#104344) + +* Wed Oct 20 2004 Jakub Jelinek <jakub@redhat.com> 2.15.92.0.2-5 +- fix --just-symbols on ppc64 (Alan Modra, #135498) + +* Fri Oct 15 2004 Jakub Jelinek <jakub@redhat.com> 2.15.92.0.2-4 +- fix code detecting matching linkonce and single member comdat + group sections (#133078) + +* Mon Oct 11 2004 Jakub Jelinek <jakub@redhat.com> 2.15.92.0.2-3 +- revert Sep 09 change to make ppc L second argument e.g. for tlbie + non-optional +- fix stripping of prelinked binaries and libraries (#133734) +- allow strings(1) on 32-bit arches to be used again with > 2GB + files (#133555) + +* Mon Oct 4 2004 Jakub Jelinek <jakub@redhat.com> 2.15.92.0.2-2 +- update to 2.15.92.0.2 +- change ld's ld.so.conf parser to match ldconfig's (#129340) + +* Mon Sep 20 2004 Jakub Jelinek <jakub@redhat.com> 2.15.91.0.2-9 +- avoid almost 1MB (sparse) gaps in the middle of -z relro + libraries on x86-64 (Andreas Schwab) +- fix -z relro to make sure end of PT_GNU_RELRO segment is always + COMMONPAGESIZE aligned + +* Wed Aug 18 2004 Jakub Jelinek <jakub@redhat.com> 2.15.91.0.2-8 +- fix linker segfaults on input objects with SHF_LINK_ORDER with + incorrect sh_link (H.J.Lu, Nick Clifton, #130198, BZ #290) + +* Wed Aug 18 2004 Jakub Jelinek <jakub@redhat.com> 2.15.91.0.2-7 +- resolve all undefined ppc64 .* syms to the function bodies through + .opd, not just those used in brach instructions (Alan Modra) + +* Tue Aug 17 2004 Jakub Jelinek <jakub@redhat.com> 2.15.91.0.2-6 +- fix ppc64 ld --dotsyms (Alan Modra) + +* Tue Aug 17 2004 Jakub Jelinek <jakub@redhat.com> 2.15.91.0.2-5 +- various ppc64 make check fixes when using non-dot-syms gcc (Alan Modra) +- fix --gc-sections +- on ia64 create empty .gnu.linkonce.ia64unw*.* sections for + .gnu.linkonce.t.* function doesn't need unwind info + +* Mon Aug 16 2004 Jakub Jelinek <jakub@redhat.com> 2.15.91.0.2-4 +- kill ppc64 dot symbols (Alan Modra) +- objdump -d support for objects without dot symbols +- support for overlapping ppc64 .opd entries + +* Mon Aug 9 2004 Jakub Jelinek <jakub@redhat.com> 2.15.91.0.2-3 +- fix a newly introduced linker crash on x86-64 + +* Sun Aug 8 2004 Alan Cox <alan@redhat.com> 2.15.91.0.2-2 +- BuildRequire bison and macroise buildroot - from Steve Grubb + +* Fri Jul 30 2004 Jakub Jelinek <jakub@redhat.com> 2.15.91.0.2-1 +- update to 2.15.91.0.2 +- BuildRequire flex (#117763) + +* Wed May 19 2004 Jakub Jelinek <jakub@redhat.com> 2.15.90.0.3-7 +- use lib64 instead of lib directories on ia64 if %%{_lib} is + set to lib64 by rpm + +* Sat May 15 2004 Jakub Jelinek <jakub@redhat.com> 2.15.90.0.3-6 +- fix a bug introduced in the ++/-- rejection patch + from 2.15.90.0.3 (Alan Modra) + +* Tue May 4 2004 Jakub Jelinek <jakub@redhat.com> 2.15.90.0.3-5 +- fix s390{,x} .{,b,p2}align handling +- ppc/ppc64 testsuite fix + +* Mon May 3 2004 Jakub Jelinek <jakub@redhat.com> 2.15.90.0.3-4 +- -z relro ppc/ppc64/ia64 fixes +- change x86-64 .plt symbol st_size handling to match ia32 +- prettify objdump -d output + +* Tue Apr 20 2004 Jakub Jelinek <jakub@redhat.com> 2.15.90.0.3-3 +- several SPARC fixes + +* Sun Apr 18 2004 Jakub Jelinek <jakub@redhat.com> 2.15.90.0.3-2 +- yet another fix for .tbss handling + +* Fri Apr 16 2004 Jakub Jelinek <jakub@redhat.com> 2.15.90.0.3-1 +- update to 2.15.90.0.3 + +* Fri Mar 26 2004 Jakub Jelinek <jakub@redhat.com> 2.15.90.0.1.1-2 +- update to 20040326 CVS + - fix ppc64 weak .opd symbol handling (Alan Modra, #119086) +- fix .tbss handling bug introduced + +* Fri Mar 26 2004 Jakub Jelinek <jakub@redhat.com> 2.15.90.0.1.1-1 +- update to 2.15.90.0.1.1 + +* Sat Feb 21 2004 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.8-8 +- with -z now without --enable-new-dtags create DT_BIND_NOW + dynamic entry in addition to DT_FLAGS_1 with DF_1_NOW bit set + +* Fri Feb 20 2004 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.8-7 +- fix -pie on ppc32 + +* Fri Feb 20 2004 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.8-6 +- clear .plt sh_entsize on sparc32 +- put whole .got into relro area with -z now -z relro + +* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com> +- rebuilt + +* Thu Jan 22 2004 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.8-4 +- fix -pie on IA64 + +* Mon Jan 19 2004 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.8-3 +- fix testcases on s390 and s390x + +* Fri Jan 16 2004 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.8-2 +- fix testcases on AMD64 +- fix .got's sh_entsize on IA32/AMD64 +- set COMMONPAGESIZE on s390/s390x +- set COMMONPAGESIZE on ppc32 (Alan Modra) + +* Fri Jan 16 2004 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.8-1 +- update to 2.14.90.0.8 + +* Tue Jan 13 2004 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.7-4 +- fix -z relro on 64-bit arches + +* Mon Jan 12 2004 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.7-3 +- fix some bugs in -z relro support + +* Fri Jan 9 2004 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.7-2 +- -z relro support, reordering of RW sections + +* Fri Jan 9 2004 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.7-1 +- update to 2.14.90.0.7 + +* Mon Nov 24 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.6-4 +- fix assembly parsing of foo=(.-bar)/4 (Alan Modra) +- fix IA-64 assembly parsing of (p7) hint @pause + +* Tue Sep 30 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.6-3 +- don't abort on some linker warnings/errors on IA-64 + +* Sat Sep 20 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.6-2 +- fix up merge2.s to use .p2align instead of .align + +* Sat Sep 20 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.6-1 +- update to 2.14.90.0.6 +- speed up string merging (Lars Knoll, Michael Matz, Alan Modra) +- speed up IA-64 local symbol handling during linking + +* Fri Sep 5 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.5-7 +- avoid ld -s segfaults introduced in 2.14.90.0.5-5 (Dmitry V. Levin, + #103180) + +* Fri Aug 29 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.5-6 +- build old demangler into libiberty.a (#102268) +- SPARC .cfi* support + +* Tue Aug 5 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.5-5 +- fix orphan section placement + +* Tue Jul 29 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.5-4 +- fix ppc64 elfvsb linker tests +- some more 64-bit cleanliness fixes, give ppc64 fdesc symbols + type and size (Alan Modra) + +* Tue Jul 29 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.5-3 +- fix 64-bit unclean code in ppc-opc.c + +* Mon Jul 28 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.5-2 +- fix 64-bit unclean code in tc-ppc.c + +* Mon Jul 28 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.5-1 +- update to 2.14.90.0.5 +- fix ld -r on ppc64 (Alan Modra) + +* Fri Jul 18 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-23 +- rebuilt + +* Thu Jul 17 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-22 +- fix elfNN_ia64_dynamic_symbol_p (Richard Henderson, #86661) +- don't access memory beyond what was allocated in readelf + (Richard Henderson) + +* Thu Jul 10 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-21 +- add .cfi_* support on ppc{,64} and s390{,x} + +* Tue Jul 8 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-20 +- remove lib{bfd,opcodes}.la (#98190) + +* Mon Jul 7 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-19 +- fix -pie support on amd64, s390, s390x and ppc64 +- issue relocation overflow errors for s390/s390x -fpic code when + accessing .got slots above 4096 bytes from .got start + +* Thu Jul 3 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-18 +- rebuilt + +* Thu Jul 3 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-17 +- fix ia64 -pie support +- require no undefined non-weak symbols in PIEs like required for normal + binaries + +* Wed Jul 2 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-16 +- fix readelf -d on IA-64 +- build libiberty.a with -fPIC, so that it can be lined into shared + libraries + +* Wed Jun 25 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-15 +- rebuilt + +* Wed Jun 25 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-14 +- added support for Intel Prescott instructions +- fix hint@pause for ia64 +- add workaround for LTP sillyness (#97934) + +* Wed Jun 18 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-13 +- update CFI stuff to 2003-06-18 +- make sure .eh_frame is aligned to 8 bytes on 64-bit arches, + remove padding within one .eh_frame section + +* Tue Jun 17 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-12 +- rebuilt + +* Tue Jun 17 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-11 +- one more fix for the same patch + +* Tue Jun 17 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-10 +- fix previous patch + +* Mon Jun 16 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-9 +- ensure R_PPC64_{RELATIVE,ADDR64} have *r_offset == r_addend + and the other relocs have *r_offset == 0 + +* Tue Jun 10 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-8 +- remove some unnecessary provides in ppc64 linker script + which were causing e.g. empty .ctors/.dtors section creation + +* Fri Jun 6 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-7 +- some CFI updates/fixes +- don't create dynamic relocations against symbols defined in PIE + exported from its .dynsym + +* Wed Jun 4 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-6 +- update gas to 20030604 +- PT_GNU_STACK support + +* Mon Jun 2 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-5 +- buildrequire gettext (#91838) + +* Sat May 31 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-4 +- fix shared libraries with >= 8192 .plt slots on ppc32 + +* Thu May 29 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-3 +- rebuilt + +* Thu May 29 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-2 +- rename ld --dynamic option to --pic-executable or --pie +- fix ld --help output +- document --pie/--pic-executable in ld.info and ld.1 + +* Wed May 28 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.4-1 +- update to 2.14.90.0.4-1 +- gas CFI updates (Richard Henderson) +- dynamic executables (Ulrich Drepper) + +* Tue May 20 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.2-2 +- fix ELF visibility handling +- tidy plt entries on IA-32, ppc and ppc64 + +* Mon May 19 2003 Jakub Jelinek <jakub@redhat.com> 2.14.90.0.2-1 +- update to 2.14.90.0.2-1 + +* Tue May 13 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.20-8 +- fix bfd_elf_hash on 64-bit arches (Andrew Haley) + +* Wed Apr 30 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.20-7 +- rebuilt + +* Mon Apr 14 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.20-6 +- optimize DW_CFA_advance_loc4 in gas even if there is 'z' augmentation + with size 0 in FDE + +* Fri Apr 11 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.20-5 +- fix SPARC build + +* Thu Apr 3 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.20-4 +- fix ppc32 plt reference counting +- don't include %%{_prefix}/%%{_lib}/debug in the non-debuginfo package + (#87729) + +* Mon Mar 31 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.20-3 +- make elf64ppc target native extra on ppc and elf32ppc native extra + on ppc64. + +* Fri Mar 28 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.20-2 +- fix TLS on IA-64 with ld relaxation + +* Sat Mar 22 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.20-1 +- update to 2.13.90.0.20 + +* Mon Feb 24 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.18-9 +- rebuilt + +* Mon Feb 24 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.18-8 +- don't strip binaries in %%install, so that there is non-empty + debuginfo + +* Mon Feb 24 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.18-7 +- don't optimize .eh_frame during ld -r + +* Thu Feb 13 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.18-6 +- don't clear elf_link_hash_flags in the .symver patch +- only use TC_FORCE_RELOCATION in s390's TC_FORCE_RELOCATION_SUB_SAME + (Alan Modra) + +* Mon Feb 10 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.18-5 +- fix the previous .symver change +- remove libbfd.so and libopcodes.so symlinks, so that other packages + link statically, not dynamically against libbfd and libopcodes + whose ABI is everything but stable + +* Mon Feb 10 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.18-4 +- do .symver x, x@FOO handling earlier +- support .file and .loc on s390* + +* Mon Feb 10 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.18-3 +- handle .symver x, x@FOO in ld such that relocs against x become + dynamic relocations against x@FOO (#83325) +- two PPC64 TLS patches (Alan Modra) + +* Sun Feb 09 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.18-2 +- fix SEARCH_DIR on x86_64/s390x +- fix Alpha --relax +- create DT_RELA{,SZ,ENT} on s390 even if there is just .rela.plt + and no .rela.dyn section +- support IA-32 on IA-64 (#83752) +- .eh_frame_hdr fix (Andreas Schwab) + +* Thu Feb 06 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.18-1 +- update to 2.13.90.0.18 + 20030121->20030206 CVS diff + +* Tue Feb 04 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.16-8 +- alpha TLS fixes +- use .debug_line directory table to make the section tiny bit smaller +- libtool fix from Jens Petersen + +* Sun Feb 02 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.16-7 +- sparc32 TLS + +* Fri Jan 24 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.16-6 +- s390{,x} TLS and two other mainframe patches + +* Fri Jan 17 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.16-5 +- fix IA-64 TLS IE in shared libs +- .{preinit,init,fini}_array compat hack from Alexandre Oliva + +* Thu Jan 16 2003 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.16-4 +- IA-64 TLS fixes +- fix .plt sh_entsize on Alpha +- build with %%_smp_mflags + +* Sat Nov 30 2002 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.16-3 +- fix strip on TLS binaries and libraries + +* Fri Nov 29 2002 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.16-2 +- fix IA-64 ld bootstrap + +* Thu Nov 28 2002 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.16-1 +- update to 2.13.90.0.16 +- STT_TLS SHN_UNDEF fix + +* Wed Nov 27 2002 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.10-4 +- pad .rodata.cstNN sections at the end if they aren't sized to multiple + of sh_entsize +- temporary patch to make .eh_frame and .gcc_except_table sections + readonly if possible (should be removed when AUTO_PLACE is implemented) +- fix .PPC.EMB.apuinfo section flags + +* Wed Oct 23 2002 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.10-3 +- fix names and content of alpha non-alloced .rela.* sections (#76583) +- delete unpackaged files from the buildroot + +* Tue Oct 15 2002 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.10-2 +- enable s390x resp. s390 emulation in linker too + +* Mon Oct 14 2002 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.10-1 +- update to 2.13.90.0.10 +- add a bi-arch patch for sparc/s390/x86_64 +- add --enable-64-bit-bfd on sparc, s390 and ppc + +* Thu Oct 10 2002 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.4-3 +- fix combreloc testcase + +* Thu Oct 10 2002 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.4-2 +- fix orphan .rel and .rela section placement with -z combreloc (Alan Modra) +- skip incompatible linker scripts when searching for libraries + +* Tue Oct 1 2002 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.4-1 +- update to 2.13.90.0.4 +- x86-64 TLS support +- some IA-32 TLS fixes +- some backported patches from trunk +- include opcodes, ld, gas and bfd l10n too + +* Thu Sep 19 2002 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.2-3 +- allow addends for IA-32 TLS @tpoff, @ntpoff and @dtpoff +- clear memory at *r_offset of dynamic relocs on PPC +- avoid ld crash if accessing non-local symbols through LE relocs +- new IA-32 TLS relocs, bugfixes and testcases +- use brl insn on IA-64 (Richard Henderson) +- fix R_IA64_PCREL21{M,F} handling (Richard Henderson) +- build in separate builddir, so that gasp tests don't fail +- include localization + +* Thu Aug 8 2002 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.2-2 +- fix R_386_TPOFF32 addends (#70824) + +* Sat Aug 3 2002 Jakub Jelinek <jakub@redhat.com> 2.13.90.0.2-1 +- update to 2.13.90.0.2 + - fix ld TLS assertion failure (#70084) + - fix readelf --debug-dump= handling to match man page and --help + (#68997) +- fix _GLOBAL_OFFSET_TABLE gas handling (#70241) + +* Wed Jul 24 2002 Jakub Jelinek <jakub@redhat.com> 2.12.90.0.15-1 +- update to 2.12.90.0.15 +- TLS .tbss fix +- don't use rpm %%configure macro, it is broken too often (#69366) + +* Thu May 30 2002 Jakub Jelinek <jakub@redhat.com> 2.12.90.0.9-1 +- update to 2.12.90.0.9 + - TLS support +- remove gasp.info from %%post/%%preun (#65400) + +* Mon Apr 29 2002 Jakub Jelinek <jakub@redhat.com> 2.12.90.0.7-1 +- update to 2.12.90.0.7 +- run make check + +* Mon Apr 29 2002 Jakub Jelinek <jakub@redhat.com> 2.11.93.0.2-12 +- fix .hidden handling on SPARC (Richard Henderson) +- don't crash when linking -shared non-pic code with SHF_MERGE +- fix .eh_frame_hdr for DW_EH_PE_aligned +- correctly adjust DW_EH_PE_pcrel encoded personalities in CIEs + +* Fri Apr 5 2002 Jakub Jelinek <jakub@redhat.com> 2.11.93.0.2-11 +- don't emit dynamic R_SPARC_DISP* relocs against STV_HIDDEN symbols + into shared libraries + +* Thu Mar 21 2002 Jakub Jelinek <jakub@redhat.com> 2.11.93.0.2-10 +- don't merge IA-64 unwind info sections together during ld -r + +* Mon Mar 11 2002 Jakub Jelinek <jakub@redhat.com> 2.11.93.0.2-9 +- fix DATA_SEGMENT_ALIGN on ia64/alpha/sparc/sparc64 + +* Fri Mar 8 2002 Jakub Jelinek <jakub@redhat.com> 2.11.93.0.2-8 +- don't crash on SHN_UNDEF local dynsyms (Andrew MacLeod) + +* Thu Mar 7 2002 Jakub Jelinek <jakub@redhat.com> 2.11.93.0.2-7 +- fix bfd configury bug (Alan Modra) + +* Tue Mar 5 2002 Jakub Jelinek <jakub@redhat.com> 2.11.93.0.2-6 +- don't copy visibility when equating symbols +- fix alpha .text/.data with .previous directive bug + +* Tue Mar 5 2002 Jakub Jelinek <jakub@redhat.com> 2.11.93.0.2-5 +- fix SHF_MERGE crash with --gc-sections (#60369) +- C++ symbol versioning patch + +* Fri Feb 22 2002 Jakub Jelinek <jakub@redhat.com> 2.11.93.0.2-4 +- add DW_EH_PE_absptr -> DW_EH_PE_pcrel optimization for shared libs, + if DW_EH_PE_absptr cannot be converted that way, don't build the + .eh_frame_hdr search table + +* Fri Feb 15 2002 Jakub Jelinek <jakub@redhat.com> 2.11.93.0.2-3 +- fix ld -N broken by last patch + +* Tue Feb 12 2002 Jakub Jelinek <jakub@redhat.com> 2.11.93.0.2-2 +- trade one saved runtime page for data segment (=almost always not shared) + for up to one page of disk space where possible + +* Fri Feb 8 2002 Jakub Jelinek <jakub@redhat.com> 2.11.93.0.2-1 +- update to 2.11.93.0.2 +- use %%{ix86} instead of i386 for -z combreloc default (#59086) + +* Thu Jan 31 2002 Jakub Jelinek <jakub@redhat.com> 2.11.92.0.12-10 +- don't create SHN_UNDEF STB_WEAK symbols unless there are any relocations + against them + +* Wed Jan 30 2002 Bill Nottingham <notting@redhat.com> 2.11.92.0.12-9.1 +- rebuild (fix ia64 miscompilation) + +* Wed Jan 09 2002 Tim Powers <timp@redhat.com> +- automated rebuild + +* Fri Dec 28 2001 Jakub Jelinek <jakub@redhat.com> 2.11.92.0.12-8 +- two further .eh_frame patch fixes + +* Wed Dec 19 2001 Jakub Jelinek <jakub@redhat.com> 2.11.92.0.12-7 +- as ld is currently not able to shrink input sections to zero size + during discard_info, build a fake minimal CIE in that case +- update elf-strtab patch to what was commited + +* Mon Dec 17 2001 Jakub Jelinek <jakub@redhat.com> 2.11.92.0.12-6 +- one more .eh_frame patch fix +- fix alpha .eh_frame handling +- optimize elf-strtab finalize + +* Sat Dec 15 2001 Jakub Jelinek <jakub@redhat.com> 2.11.92.0.12-5 +- yet another fix for the .eh_frame patch + +* Fri Dec 14 2001 Jakub Jelinek <jakub@redhat.com> 2.11.92.0.12-4 +- Alan Modra's patch to avoid crash if there is no dynobj + +* Thu Dec 13 2001 Jakub Jelinek <jakub@redhat.com> 2.11.92.0.12-3 +- H.J.'s patch to avoid crash if input files are not ELF +- don't crash if a SHF_MERGE for some reason could not be merged +- fix objcopy/strip to preserve SHF_MERGE sh_entsize +- optimize .eh_frame sections, add PT_GNU_EH_FRAME support +- support anonymous version tags in version script + +* Tue Nov 27 2001 Jakub Jelinek <jakub@redhat.com> 2.11.92.0.12-2 +- fix IA-64 SHF_MERGE handling + +* Tue Nov 27 2001 Jakub Jelinek <jakub@redhat.com> 2.11.92.0.12-1 +- update to 2.11.92.0.12 + - optimize .dynstr and .shstrtab sections (#55524) + - fix ld.1 glitch (#55459) +- turn relocs against SHF_MERGE local symbols with zero addend + into STT_SECTION + addend +- remove man pages for programs not included (nlmconv, windres, dlltool; + #55456, #55461) +- add BuildRequires for texinfo + +* Thu Oct 25 2001 Jakub Jelinek <jakub@redhat.com> 2.11.92.0.7-2 +- duh, fix strings on bfd objects (#55084) + +* Sat Oct 20 2001 Jakub Jelinek <jakub@redhat.com> 2.11.92.0.7-1 +- update to 2.11.92.0.7 +- remove .rel{,a}.dyn from output if it is empty + +* Thu Oct 11 2001 Jakub Jelinek <jakub@redhat.com> 2.11.92.0.5-2 +- fix strings patch +- use getc_unlocked in strings to speed it up by 50% on large files + +* Wed Oct 10 2001 Jakub Jelinek <jakub@redhat.com> 2.11.92.0.5-1 +- update to 2.11.92.0.5 + - binutils localization (#45148) + - fix typo in REPORT_BUGS_TO (#54325) +- support files bigger than 2GB in strings (#54406) + +* Wed Sep 26 2001 Jakub Jelinek <jakub@redhat.com> 2.11.90.0.8-12 +- on IA-64, don't mix R_IA64_IPLTLSB relocs with non-PLT relocs in + .rela.dyn section. + +* Tue Sep 25 2001 Jakub Jelinek <jakub@redhat.com> 2.11.90.0.8-11 +- add iplt support for IA-64 (Richard Henderson) +- switch to new section flags for SHF_MERGE and SHF_STRINGS, put + in compatibility code +- "s" section flag for small data sections on IA-64 and Alpha + (Richard Henderson) +- fix sparc64 .plt[32768+] handling +- don't emit .rela.stab on sparc + +* Mon Sep 10 2001 Jakub Jelinek <jakub@redhat.com> 2.11.90.0.8-10 +- fix SHF_MERGE on Sparc + +* Fri Aug 31 2001 Jakub Jelinek <jakub@redhat.com> 2.11.90.0.8-9 +- on Alpha, copy *r_offset to R_ALPHA_RELATIVE's r_addend + +* Thu Aug 30 2001 Jakub Jelinek <jakub@redhat.com> 2.11.90.0.8-8 +- on IA-64, put crtend{,S}.o's .IA_64.unwind section last in + .IA_64.unwind output section (for compatibility with 7.1 eh) + +* Fri Aug 24 2001 Jakub Jelinek <jakub@redhat.com> 2.11.90.0.8-7 +- put RELATIVE relocs first, not last +- enable -z combreloc by default on IA-{32,64}, Alpha, Sparc* + +* Thu Aug 23 2001 Jakub Jelinek <jakub@redhat.com> 2.11.90.0.8-6 +- support for -z combreloc +- remove .dynamic patch, -z combreloc patch does this better +- set STT_FUNC default symbol sizes in .endp directive on IA-64 + +* Mon Jul 16 2001 Jakub Jelinek <jakub@redhat.com> 2.11.90.0.8-5 +- fix last patch (H.J.Lu) + +* Fri Jul 13 2001 Jakub Jelinek <jakub@redhat.com> 2.11.90.0.8-4 +- fix placing of orphan sections + +* Sat Jun 23 2001 Jakub Jelinek <jakub@redhat.com> +- fix SHF_MERGE support on Alpha + +* Fri Jun 8 2001 Jakub Jelinek <jakub@redhat.com> +- 2.11.90.0.8 + - some SHF_MERGE suport fixes +- don't build with tooldir /usrusr instead of /usr (#40937) +- reserve few .dynamic entries for prelinking + +* Mon Apr 16 2001 Jakub Jelinek <jakub@redhat.com> +- 2.11.90.0.5 + - SHF_MERGE support + +* Tue Apr 3 2001 Jakub Jelinek <jakub@redhat.com> +- 2.11.90.0.4 + - fix uleb128 support, so that CVS gcc bootstraps + - some ia64 fixes + +* Mon Mar 19 2001 Jakub Jelinek <jakub@redhat.com> +- add -Bgroup support from Ulrich Drepper + +* Fri Mar 9 2001 Jakub Jelinek <jakub@redhat.com> +- hack - add elf_i386_glibc21 emulation + +* Fri Feb 16 2001 Jakub Jelinek <jakub@redhat.com> +- 2.10.91.0.2 + +* Fri Feb 9 2001 Jakub Jelinek <jakub@redhat.com> +- 2.10.1.0.7 +- remove ExcludeArch ia64 +- back out the -oformat, -omagic and -output change for now + +* Fri Dec 15 2000 Jakub Jelinek <jakub@redhat.com> +- Prereq /sbin/install-info + +* Tue Nov 21 2000 Jakub Jelinek <jakub@redhat.com> +- 2.10.1.0.2 + +* Tue Nov 21 2000 Jakub Jelinek <jakub@redhat.com> +- add one more alpha patch + +* Wed Nov 15 2000 Jakub Jelinek <jakub@redhat.com> +- fix alpha visibility as problem +- add support for Ultra-III + +* Fri Sep 15 2000 Jakub Jelinek <jakub@redhat.com> +- and one more alpha patch + +* Fri Sep 15 2000 Jakub Jelinek <jakub@redhat.com> +- two sparc patches + +* Mon Jul 24 2000 Jakub Jelinek <jakub@redhat.com> +- 2.10.0.18 + +* Mon Jul 10 2000 Jakub Jelinek <jakub@redhat.com> +- 2.10.0.12 + +* Mon Jun 26 2000 Jakub Jelinek <jakub@redhat.com> +- 2.10.0.9 + +* Thu Jun 15 2000 Jakub Jelinek <jakub@redhat.com> +- fix ld -r + +* Mon Jun 5 2000 Jakub Jelinek <jakub@redhat.com> +- 2.9.5.0.46 +- use _mandir/_infodir/_lib + +* Mon May 8 2000 Bernhard Rosenkraenzer <bero@redhat.com> +- 2.9.5.0.41 + +* Wed Apr 12 2000 Bernhard Rosenkraenzer <bero@redhat.com> +- 2.9.5.0.34 + +* Wed Mar 22 2000 Bernhard Rosenkraenzer <bero@redhat.com> +- 2.9.5.0.31 + +* Fri Feb 04 2000 Cristian Gafton <gafton@redhat.com> +- man pages are compressed +- apply kingdon's patch from #5031 + +* Wed Jan 19 2000 Jeff Johnson <jbj@redhat.com> +- Permit package to be built with a prefix other than /usr. + +* Thu Jan 13 2000 Cristian Gafton <gafton@redhat.com> +- add pacth from hjl to fix the versioning problems in ld + +* Tue Jan 11 2000 Bernhard Rosenkraenzer <bero@redhat.com> +- Add sparc patches from Jakub Jelinek <jakub@redhat.com> +- Add URL: + +* Tue Dec 14 1999 Bernhard Rosenkraenzer <bero@redhat.com> +- 2.9.5.0.22 + +* Wed Nov 24 1999 Bernhard Rosenkraenzer <bero@redhat.com> +- 2.9.5.0.19 + +* Sun Oct 24 1999 Bernhard Rosenkraenzer <bero@redhat.com> +- 2.9.5.0.16 + +* Mon Sep 06 1999 Jakub Jelinek <jj@ultra.linux.cz> +- make shared non-pic libraries work on sparc with glibc 2.1. + +* Fri Aug 27 1999 Jim Kingdon +- No source/spec changes, just rebuilding with egcs-1.1.2-18 because + the older egcs was miscompling gprof. + +* Mon Apr 26 1999 Cristian Gafton <gafton@redhat.com> +- back out very *stupid* sparc patch done by HJLu. People, keep out of + things you don't understand. +- add alpha relax patch from rth + +* Mon Apr 05 1999 Cristian Gafton <gafton@redhat.com> +- version 2.9.1.0.23 +- patch to make texinfo documentation compile +- auto rebuild in the new build environment (release 2) + +* Tue Feb 23 1999 Cristian Gafton <gafton@redhat.com> +- updated to 2.9.1.0.21 +- merged with UltraPenguin + +* Mon Jan 04 1999 Cristian Gafton <gafton@redhat.com> +- added ARM patch from philb +- version 2.9.1.0.19a +- added a patch to allow arm* arch to be identified as an ARM + +* Thu Oct 01 1998 Cristian Gafton <gafton@redhat.com> +- updated to 2.9.1.0.14. + +* Sat Sep 19 1998 Jeff Johnson <jbj@redhat.com> +- updated to 2.9.1.0.13. + +* Wed Sep 09 1998 Cristian Gafton <gafton@redhat.com> +- updated to 2.9.1.0.12 + +* Thu Jul 2 1998 Jeff Johnson <jbj@redhat.com> +- updated to 2.9.1.0.7. + +* Wed Jun 03 1998 Jeff Johnson <jbj@redhat.com> +- updated to 2.9.1.0.6. + +* Tue Jun 02 1998 Erik Troan <ewt@redhat.com> +- added patch from rth to get right offsets for sections in relocateable + objects on sparc32 + +* Thu May 07 1998 Prospector System <bugs@redhat.com> +- translations modified for de, fr, tr + +* Tue May 05 1998 Cristian Gafton <gafton@redhat.com> +- version 2.9.1.0.4 is out; even more, it is public ! + +* Tue May 05 1998 Jeff Johnson <jbj@redhat.com> +- updated to 2.9.1.0.3. + +* Mon Apr 20 1998 Cristian Gafton <gafton@redhat.com> +- updated to 2.9.0.3 + +* Tue Apr 14 1998 Cristian Gafton <gafton@redhat.com> +- upgraded to 2.9.0.2 + +* Sun Apr 05 1998 Cristian Gafton <gafton@redhat.com> +- updated to 2.8.1.0.29 (HJ warned me that this thing is a moving target... + :-) +- "fixed" the damn make install command so that all tools get installed + +* Thu Apr 02 1998 Cristian Gafton <gafton@redhat.com> +- upgraded again to 2.8.1.0.28 (at least on alpha now egcs will compile) +- added info packages handling + +* Tue Mar 10 1998 Cristian Gafton <gafton@redhat.com> +- upgraded to 2.8.1.0.23 + +* Mon Mar 02 1998 Cristian Gafton <gafton@redhat.com> +- updated to 2.8.1.0.15 (required to compile the newer glibc) +- all patches are obsoleted now + +* Wed Oct 22 1997 Erik Troan <ewt@redhat.com> +- added 2.8.1.0.1 patch from hj +- added patch for alpha palcode form rth