import binutils-2.30-57.el8
This commit is contained in:
commit
4a2e11d078
2
.binutils.metadata
Normal file
2
.binutils.metadata
Normal file
@ -0,0 +1,2 @@
|
||||
574d3b5650413d6ee65195a4f5ecbddc3a38f718 SOURCES/binutils-2.30.tar.xz
|
||||
d3e5c9fc829ed40648110da6fe46c2fb1ed8aadb SOURCES/standards.info.gz
|
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
SOURCES/binutils-2.30.tar.xz
|
||||
SOURCES/standards.info.gz
|
38
SOURCES/binutils-2.19.50.0.1-output-format.sed
Normal file
38
SOURCES/binutils-2.19.50.0.1-output-format.sed
Normal file
@ -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
|
236
SOURCES/binutils-2.20.51.0.2-libtool-lib64.patch
Normal file
236
SOURCES/binutils-2.20.51.0.2-libtool-lib64.patch
Normal file
@ -0,0 +1,236 @@
|
||||
diff -rcp ../binutils-2.20.51.0.7.original/bfd/configure ./bfd/configure
|
||||
--- a/bfd/configure 2010-04-08 14:53:48.000000000 +0100
|
||||
+++ b/bfd/configure 2010-04-08 14:56:50.000000000 +0100
|
||||
@@ -10762,10 +10762,34 @@
|
||||
# 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 /usr/lib $lt_ld_extra"
|
||||
+ 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
|
||||
--- a/binutils/configure 2010-04-08 14:53:45.000000000 +0100
|
||||
+++ b/binutils/configure 2010-04-08 14:56:21.000000000 +0100
|
||||
@@ -10560,10 +10560,34 @@
|
||||
# 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 /usr/lib $lt_ld_extra"
|
||||
+ 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
|
||||
--- a/gas/configure 2010-04-08 14:53:47.000000000 +0100
|
||||
+++ b/gas/configure 2010-04-08 14:57:24.000000000 +0100
|
||||
@@ -10547,10 +10547,34 @@
|
||||
# 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 /usr/lib $lt_ld_extra"
|
||||
+ 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
|
||||
--- a/gprof/configure 2010-04-08 14:53:45.000000000 +0100
|
||||
+++ b/gprof/configure 2010-04-08 14:57:50.000000000 +0100
|
||||
@@ -10485,10 +10485,34 @@
|
||||
# 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 /usr/lib $lt_ld_extra"
|
||||
+ 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
|
||||
--- a/ld/configure 2010-04-08 14:53:44.000000000 +0100
|
||||
+++ b/ld/configure 2010-04-08 14:58:21.000000000 +0100
|
||||
@@ -10966,10 +10966,34 @@
|
||||
# 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 /usr/lib $lt_ld_extra"
|
||||
+ 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
|
||||
--- a/opcodes/configure 2010-04-08 14:53:45.000000000 +0100
|
||||
+++ b/opcodes/configure 2010-04-08 14:59:10.000000000 +0100
|
||||
@@ -10496,10 +10496,34 @@
|
||||
# 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 /usr/lib $lt_ld_extra"
|
||||
+ 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
|
21
SOURCES/binutils-2.22.52.0.1-export-demangle.h.patch
Normal file
21
SOURCES/binutils-2.22.52.0.1-export-demangle.h.patch
Normal file
@ -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
|
28
SOURCES/binutils-2.22.52.0.4-no-config-h-check.patch
Normal file
28
SOURCES/binutils-2.22.52.0.4-no-config-h-check.patch
Normal file
@ -0,0 +1,28 @@
|
||||
--- a/bfd/bfd-in.h 2012-08-02 10:56:34.561769686 +0100
|
||||
+++ b/bfd/bfd-in.h 2012-08-02 11:13:27.134797755 +0100
|
||||
@@ -25,11 +25,6 @@
|
||||
#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
|
||||
--- a/bfd/bfd-in2.h 2012-08-02 10:56:34.349769680 +0100
|
||||
+++ b/bfd/bfd-in2.h 2012-08-02 11:13:40.015798113 +0100
|
||||
@@ -32,11 +32,6 @@
|
||||
#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
|
38
SOURCES/binutils-2.25-set-long-long.patch
Normal file
38
SOURCES/binutils-2.25-set-long-long.patch
Normal file
@ -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
|
44
SOURCES/binutils-2.25-version.patch
Normal file
44
SOURCES/binutils-2.25-version.patch
Normal file
@ -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
|
2439
SOURCES/binutils-2.26-lto.patch
Normal file
2439
SOURCES/binutils-2.26-lto.patch
Normal file
File diff suppressed because it is too large
Load Diff
11
SOURCES/binutils-2.27-aarch64-ifunc.patch
Normal file
11
SOURCES/binutils-2.27-aarch64-ifunc.patch
Normal file
@ -0,0 +1,11 @@
|
||||
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;
|
14
SOURCES/binutils-2.28-ignore-gold-duplicates.patch
Normal file
14
SOURCES/binutils-2.28-ignore-gold-duplicates.patch
Normal file
@ -0,0 +1,14 @@
|
||||
diff -rup binutils.orig/ld/ldmain.c binutils-2.28/ld/ldmain.c
|
||||
--- binutils.orig/ld/ldmain.c 2017-06-09 09:08:26.954016429 +0100
|
||||
+++ binutils-2.28/ld/ldmain.c 2017-06-09 09:09:11.307490976 +0100
|
||||
@@ -923,6 +923,10 @@ multiple_definition (struct bfd_link_inf
|
||||
obfd = h->u.def.section->owner;
|
||||
break;
|
||||
case bfd_link_hash_indirect:
|
||||
+ /* PR 21074: The GOLD linker can produce multiple indirect
|
||||
+ refences to the same symbol. These can be ignored. */
|
||||
+ if (bfd_is_ind_section (nsec))
|
||||
+ return;
|
||||
osec = bfd_ind_section_ptr;
|
||||
oval = 0;
|
||||
obfd = NULL;
|
124
SOURCES/binutils-2.29-filename-in-error-messages.patch
Normal file
124
SOURCES/binutils-2.29-filename-in-error-messages.patch
Normal file
@ -0,0 +1,124 @@
|
||||
--- binutils.orig/binutils/readelf.c 2018-01-22 15:48:10.450701702 +0000
|
||||
+++ binutils-2.30.0/binutils/readelf.c 2018-01-22 15:55:26.739588657 +0000
|
||||
@@ -19019,75 +19019,85 @@ process_file (char * file_name)
|
||||
Filedata * filedata = NULL;
|
||||
struct stat statbuf;
|
||||
char armag[SARMAG];
|
||||
- bfd_boolean ret = TRUE;
|
||||
+ bfd_boolean ret = FALSE;
|
||||
+ char * name;
|
||||
+ char * saved_program_name;
|
||||
+
|
||||
+ /* 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 FALSE;
|
||||
+ 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 FALSE;
|
||||
+ error (_("Not an ordinary file\n"));
|
||||
+ goto done;
|
||||
}
|
||||
|
||||
filedata = calloc (1, sizeof * filedata);
|
||||
if (filedata == NULL)
|
||||
{
|
||||
error (_("Out of memory allocating file data structure\n"));
|
||||
- return FALSE;
|
||||
+ goto done;
|
||||
}
|
||||
|
||||
filedata->file_name = file_name;
|
||||
filedata->handle = fopen (file_name, "rb");
|
||||
if (filedata->handle == NULL)
|
||||
{
|
||||
- error (_("Input file '%s' is not readable.\n"), file_name);
|
||||
- free (filedata);
|
||||
- return FALSE;
|
||||
+ error (_("Not readable\n"));
|
||||
+ goto done;
|
||||
}
|
||||
|
||||
if (fread (armag, SARMAG, 1, filedata->handle) != 1)
|
||||
{
|
||||
- error (_("%s: Failed to read file's magic number\n"), file_name);
|
||||
- fclose (filedata->handle);
|
||||
- free (filedata);
|
||||
- return FALSE;
|
||||
- }
|
||||
-
|
||||
- filedata->file_size = (bfd_size_type) statbuf.st_size;
|
||||
-
|
||||
- if (memcmp (armag, ARMAG, SARMAG) == 0)
|
||||
- {
|
||||
- if (! process_archive (filedata, FALSE))
|
||||
- ret = FALSE;
|
||||
- }
|
||||
- else if (memcmp (armag, ARMAGT, SARMAG) == 0)
|
||||
- {
|
||||
- if ( ! process_archive (filedata, TRUE))
|
||||
- ret = FALSE;
|
||||
+ error (_("Failed to read file's magic number\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
- if (do_archive_index)
|
||||
- error (_("File %s is not an archive so its index cannot be displayed.\n"),
|
||||
- file_name);
|
||||
+ filedata->file_size = (bfd_size_type) statbuf.st_size;
|
||||
|
||||
- rewind (filedata->handle);
|
||||
- archive_file_size = archive_file_offset = 0;
|
||||
-
|
||||
- if (! process_object (filedata))
|
||||
- ret = FALSE;
|
||||
+ if (memcmp (armag, ARMAG, SARMAG) == 0)
|
||||
+ {
|
||||
+ if (process_archive (filedata, FALSE))
|
||||
+ ret = TRUE;
|
||||
+ }
|
||||
+ else if (memcmp (armag, ARMAGT, SARMAG) == 0)
|
||||
+ {
|
||||
+ if (process_archive (filedata, TRUE))
|
||||
+ ret = TRUE;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if (do_archive_index)
|
||||
+ error (_("Not an archive so its index cannot be displayed.\n"));
|
||||
+
|
||||
+ rewind (filedata->handle);
|
||||
+ archive_file_size = archive_file_offset = 0;
|
||||
+
|
||||
+ if (process_object (filedata))
|
||||
+ ret = TRUE;
|
||||
+ }
|
||||
}
|
||||
|
||||
fclose (filedata->handle);
|
||||
+ done:
|
||||
free (filedata);
|
||||
+ free (program_name);
|
||||
+ program_name = saved_program_name;
|
||||
|
||||
return ret;
|
||||
}
|
147
SOURCES/binutils-2.30-allow_R_AARCH64-symbols.patch
Normal file
147
SOURCES/binutils-2.30-allow_R_AARCH64-symbols.patch
Normal file
@ -0,0 +1,147 @@
|
||||
From 279b2f94168ee91e02ccd070d27c983fc001fe12 Mon Sep 17 00:00:00 2001
|
||||
From: Renlin Li <renlin.li@arm.com>
|
||||
Date: Sat, 3 Feb 2018 13:18:17 +0000
|
||||
Subject: [PATCH] [PR22764][LD][AARCH64]Allow R_AARCH64_ABS16 and
|
||||
R_AARCH64_ABS32 against absolution symbol or undefine symbol in shared
|
||||
object.
|
||||
|
||||
The assumption that R_AARCH64_ABS16 and R_AARCH64_ABS32 relocation in LP64 abi
|
||||
will be used to generate an address does not hold for absolute symbol.
|
||||
In this case, it is a value fixed at static linking time.
|
||||
|
||||
The condition to check the relocations is relax to allow absolute symbol and
|
||||
undefined symbol case.
|
||||
|
||||
bfd/
|
||||
|
||||
2018-02-05 Renlin Li <renlin.li@arm.com>
|
||||
|
||||
PR ld/22764
|
||||
* elfnn-aarch64.c (elfNN_aarch64_check_relocs): Relax the
|
||||
R_AARCH64_ABS32 and R_AARCH64_ABS16 for absolute symbol. Apply the
|
||||
check for writeable section as well.
|
||||
|
||||
ld/
|
||||
|
||||
2018-02-05 Renlin Li <renlin.li@arm.com>
|
||||
|
||||
PR ld/22764
|
||||
* testsuite/ld-aarch64/emit-relocs-258.s: Define symbol as an address.
|
||||
* testsuite/ld-aarch64/emit-relocs-259.s: Likewise.
|
||||
* testsuite/ld-aarch64/aarch64-elf.exp: Run new test.
|
||||
* testsuite/ld-aarch64/pr22764.s: New.
|
||||
* testsuite/ld-aarch64/pr22764.d: New.
|
||||
---
|
||||
bfd/ChangeLog | 7 +++++++
|
||||
bfd/elfnn-aarch64.c | 15 ++++++++++++---
|
||||
ld/ChangeLog | 8 ++++++++
|
||||
ld/testsuite/ld-aarch64/aarch64-elf.exp | 1 +
|
||||
ld/testsuite/ld-aarch64/emit-relocs-258.s | 3 ++-
|
||||
ld/testsuite/ld-aarch64/emit-relocs-259.s | 3 ++-
|
||||
ld/testsuite/ld-aarch64/pr22764.d | 18 ++++++++++++++++++
|
||||
ld/testsuite/ld-aarch64/pr22764.s | 6 ++++++
|
||||
8 files changed, 56 insertions(+), 5 deletions(-)
|
||||
create mode 100644 ld/testsuite/ld-aarch64/pr22764.d
|
||||
create mode 100644 ld/testsuite/ld-aarch64/pr22764.s
|
||||
|
||||
diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
|
||||
index af448f9..2737773 100644
|
||||
--- a/bfd/elfnn-aarch64.c
|
||||
+++ b/bfd/elfnn-aarch64.c
|
||||
@@ -7189,10 +7189,19 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
#if ARCH_SIZE == 64
|
||||
case BFD_RELOC_AARCH64_32:
|
||||
#endif
|
||||
- if (bfd_link_pic (info)
|
||||
- && (sec->flags & SEC_ALLOC) != 0
|
||||
- && (sec->flags & SEC_READONLY) != 0)
|
||||
+ if (bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0)
|
||||
{
|
||||
+ if (h != NULL
|
||||
+ /* This is an absolute symbol. It represents a value instead
|
||||
+ of an address. */
|
||||
+ && ((h->root.type == bfd_link_hash_defined
|
||||
+ && bfd_is_abs_section (h->root.u.def.section))
|
||||
+ /* This is an undefined symbol. */
|
||||
+ || h->root.type == bfd_link_hash_undefined))
|
||||
+ break;
|
||||
+
|
||||
+ /* For local symbols, defined global symbols in a non-ABS section,
|
||||
+ it is assumed that the value is an address. */
|
||||
int howto_index = bfd_r_type - BFD_RELOC_AARCH64_RELOC_START;
|
||||
_bfd_error_handler
|
||||
/* xgettext:c-format */
|
||||
diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp
|
||||
index 2602a43..c67ffb1 100644
|
||||
--- a/ld/testsuite/ld-aarch64/aarch64-elf.exp
|
||||
+++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp
|
||||
@@ -285,6 +285,7 @@ run_dump_test "pr17415"
|
||||
run_dump_test_lp64 "tprel_g2_overflow"
|
||||
run_dump_test "tprel_add_lo12_overflow"
|
||||
run_dump_test "protected-data"
|
||||
+run_dump_test_lp64 "pr22764"
|
||||
|
||||
# ifunc tests
|
||||
run_dump_test "ifunc-1"
|
||||
diff --git a/ld/testsuite/ld-aarch64/emit-relocs-258.s b/ld/testsuite/ld-aarch64/emit-relocs-258.s
|
||||
index f724776..87bb657 100644
|
||||
--- a/ld/testsuite/ld-aarch64/emit-relocs-258.s
|
||||
+++ b/ld/testsuite/ld-aarch64/emit-relocs-258.s
|
||||
@@ -1,5 +1,6 @@
|
||||
+.global dummy
|
||||
.text
|
||||
-
|
||||
+dummy:
|
||||
ldr x0, .L1
|
||||
|
||||
.L1:
|
||||
diff --git a/ld/testsuite/ld-aarch64/emit-relocs-259.s b/ld/testsuite/ld-aarch64/emit-relocs-259.s
|
||||
index 7e1ba3c..0977c9d 100644
|
||||
--- a/ld/testsuite/ld-aarch64/emit-relocs-259.s
|
||||
+++ b/ld/testsuite/ld-aarch64/emit-relocs-259.s
|
||||
@@ -1,5 +1,6 @@
|
||||
+.global dummy
|
||||
.text
|
||||
-
|
||||
+dummy:
|
||||
ldr x0, .L1
|
||||
|
||||
.L1:
|
||||
diff --git a/ld/testsuite/ld-aarch64/pr22764.d b/ld/testsuite/ld-aarch64/pr22764.d
|
||||
new file mode 100644
|
||||
index 0000000..997519f
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-aarch64/pr22764.d
|
||||
@@ -0,0 +1,18 @@
|
||||
+#source: pr22764.s
|
||||
+#ld: -shared -T relocs.ld -defsym sym_abs1=0x1 -defsym sym_abs2=0x2 -defsym sym_abs3=0x3 -e0 --emit-relocs
|
||||
+#notarget: aarch64_be-*-*
|
||||
+#objdump: -dr
|
||||
+#...
|
||||
+
|
||||
+Disassembly of section \.text:
|
||||
+
|
||||
+0000000000010000 \<\.text\>:
|
||||
+ 10000: d503201f nop
|
||||
+ ...
|
||||
+ 10004: R_AARCH64_ABS64 sym_abs1
|
||||
+ 1000c: 00000002 \.word 0x00000002
|
||||
+ 1000c: R_AARCH64_ABS32 sym_abs2
|
||||
+ 10010: 0003 \.short 0x0003
|
||||
+ 10010: R_AARCH64_ABS16 sym_abs3
|
||||
+ 10012: 0000 \.short 0x0000
|
||||
+ 10014: d503201f nop
|
||||
diff --git a/ld/testsuite/ld-aarch64/pr22764.s b/ld/testsuite/ld-aarch64/pr22764.s
|
||||
new file mode 100644
|
||||
index 0000000..25e36b4
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-aarch64/pr22764.s
|
||||
@@ -0,0 +1,6 @@
|
||||
+ .text
|
||||
+ nop
|
||||
+ .xword sym_abs1
|
||||
+ .word sym_abs2
|
||||
+ .short sym_abs3
|
||||
+ nop
|
||||
--
|
||||
2.9.3
|
373
SOURCES/binutils-AArch64-gold.patch
Normal file
373
SOURCES/binutils-AArch64-gold.patch
Normal file
@ -0,0 +1,373 @@
|
||||
diff -pruN binutils-2.30.orig/gold/aarch64.cc binutils-2.30/gold/aarch64.cc
|
||||
--- binutils-2.30.orig/gold/aarch64.cc 2019-03-28 06:50:31.813828734 -0400
|
||||
+++ binutils-2.30/gold/aarch64.cc 2019-03-28 06:50:46.993954670 -0400
|
||||
@@ -6478,6 +6478,17 @@ Target_aarch64<size, big_endian>::Scan::
|
||||
gold_error(_("%s: unsupported reloc %u in pos independent link."),
|
||||
object->name().c_str(), r_type);
|
||||
}
|
||||
+ // Make a PLT entry if necessary.
|
||||
+ if (gsym->needs_plt_entry())
|
||||
+ {
|
||||
+ target->make_plt_entry(symtab, layout, gsym);
|
||||
+ // Since this is not a PC-relative relocation, we may be
|
||||
+ // taking the address of a function. In that case we need to
|
||||
+ // set the entry in the dynamic symbol table to the address of
|
||||
+ // the PLT entry.
|
||||
+ if (gsym->is_from_dynobj() && !parameters->options().shared())
|
||||
+ gsym->set_needs_dynsym_value();
|
||||
+ }
|
||||
break;
|
||||
|
||||
case elfcpp::R_AARCH64_LD_PREL_LO19: // 273
|
||||
diff -pruN binutils-2.30.orig/gold/ChangeLog binutils-2.30/gold/ChangeLog
|
||||
--- binutils-2.30.orig/gold/ChangeLog 2018-01-27 10:08:21.000000000 -0500
|
||||
+++ binutils-2.30/gold/ChangeLog 2019-03-28 06:52:51.924999245 -0400
|
||||
@@ -1,3 +1,14 @@
|
||||
+2019-02-19 Egeyar Bagcioglu <egeyar.bagcioglu@oracle.com>
|
||||
+
|
||||
+ PR gold/23870
|
||||
+ * aarch64.cc (Target_aarch64::Scan::global): Check if a symbol with
|
||||
+ R_AARCH64_MOVW_.ABS_* relocations requires a PLT entry.
|
||||
+ * testsuite/Makefile.am: Add aarch64_pr23870 test case.
|
||||
+ * testsuite/Makefile.in: Regenerate.
|
||||
+ * testsuite/aarch64_pr23870_bar.c: New file.
|
||||
+ * testsuite/aarch64_pr23870_foo.c: New file.
|
||||
+ * testsuite/aarch64_pr23870_main.S: New file.
|
||||
+
|
||||
2018-01-27 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
This is the 2.30 release:
|
||||
diff -pruN binutils-2.30.orig/gold/testsuite/aarch64_pr23870_bar.c binutils-2.30/gold/testsuite/aarch64_pr23870_bar.c
|
||||
--- binutils-2.30.orig/gold/testsuite/aarch64_pr23870_bar.c 1969-12-31 19:00:00.000000000 -0500
|
||||
+++ binutils-2.30/gold/testsuite/aarch64_pr23870_bar.c 2019-03-28 06:50:46.993954670 -0400
|
||||
@@ -0,0 +1,6 @@
|
||||
+void bar (void);
|
||||
+
|
||||
+void bar ()
|
||||
+{
|
||||
+ return;
|
||||
+}
|
||||
diff -pruN binutils-2.30.orig/gold/testsuite/aarch64_pr23870_foo.c binutils-2.30/gold/testsuite/aarch64_pr23870_foo.c
|
||||
--- binutils-2.30.orig/gold/testsuite/aarch64_pr23870_foo.c 1969-12-31 19:00:00.000000000 -0500
|
||||
+++ binutils-2.30/gold/testsuite/aarch64_pr23870_foo.c 2019-03-28 06:50:46.993954670 -0400
|
||||
@@ -0,0 +1,6 @@
|
||||
+void foo (void (*bar)(void));
|
||||
+
|
||||
+void foo (void (*bar)(void))
|
||||
+{
|
||||
+ bar();
|
||||
+}
|
||||
diff -pruN binutils-2.30.orig/gold/testsuite/aarch64_pr23870_main.S binutils-2.30/gold/testsuite/aarch64_pr23870_main.S
|
||||
--- binutils-2.30.orig/gold/testsuite/aarch64_pr23870_main.S 1969-12-31 19:00:00.000000000 -0500
|
||||
+++ binutils-2.30/gold/testsuite/aarch64_pr23870_main.S 2019-03-28 06:50:46.993954670 -0400
|
||||
@@ -0,0 +1,15 @@
|
||||
+
|
||||
+ .text
|
||||
+ .globl main
|
||||
+ .type main,#function
|
||||
+main:
|
||||
+ stp x29, x30, [sp,#-16]!
|
||||
+ mov x29, sp
|
||||
+ movz x0, #:abs_g3:bar
|
||||
+ movk x0, #:abs_g2_nc:bar
|
||||
+ movk x0, #:abs_g1_nc:bar
|
||||
+ movk x0, #:abs_g0_nc:bar
|
||||
+ add x0, x0, #0x0
|
||||
+ bl foo
|
||||
+ ldp x29, x30, [sp],#16
|
||||
+ ret
|
||||
diff -pruN binutils-2.30.orig/gold/testsuite/Makefile.am binutils-2.30/gold/testsuite/Makefile.am
|
||||
--- binutils-2.30.orig/gold/testsuite/Makefile.am 2019-03-28 06:50:31.563826660 -0400
|
||||
+++ binutils-2.30/gold/testsuite/Makefile.am 2019-03-28 06:50:46.993954670 -0400
|
||||
@@ -3144,6 +3144,26 @@ pr22266: pr22266_main.o pr22266_ar.o gcc
|
||||
pr22266_ar.o: pr22266_a.o gcctestdir/ld
|
||||
gcctestdir/ld -r -T $(srcdir)/pr22266_script.t -o $@ pr22266_a.o
|
||||
|
||||
+if DEFAULT_TARGET_AARCH64
|
||||
+
|
||||
+check_PROGRAMS += aarch64_pr23870
|
||||
+aarch64_pr23870_SOURCES = aarch64_pr23870_foo.c
|
||||
+aarch64_pr23870_DEPENDENCIES = \
|
||||
+ gcctestdir/ld gcctestdir/as aarch64_pr23870_main.o \
|
||||
+ aarch64_pr23870_foo.o aarch64_pr23870_bar.so
|
||||
+aarch64_pr23870_LDFLAGS = -Wl,-R,. -L. -Wl,-l:aarch64_pr23870_bar.so
|
||||
+aarch64_pr23870_LDADD = aarch64_pr23870_main.o
|
||||
+aarch64_pr23870_main.o: aarch64_pr23870_main.S
|
||||
+ $(COMPILE) -c -o $@ $<
|
||||
+aarch64_pr23870_foo.o: aarch64_pr23870_foo.c
|
||||
+ $(COMPILE) -c -o $@ $<
|
||||
+aarch64_pr23870_bar.o: aarch64_pr23870_bar.c
|
||||
+ $(COMPILE) -c -fPIC -o $@ $<
|
||||
+aarch64_pr23870_bar.so: aarch64_pr23870_bar.o
|
||||
+ $(COMPILE) -shared -o $@ $<
|
||||
+
|
||||
+endif DEFAULT_TARGET_AARCH64
|
||||
+
|
||||
endif GCC
|
||||
endif NATIVE_LINKER
|
||||
|
||||
diff -pruN binutils-2.30.orig/gold/testsuite/Makefile.in binutils-2.30/gold/testsuite/Makefile.in
|
||||
--- binutils-2.30.orig/gold/testsuite/Makefile.in 2019-03-28 06:50:31.573826743 -0400
|
||||
+++ binutils-2.30/gold/testsuite/Makefile.in 2019-03-28 06:59:26.518313455 -0400
|
||||
@@ -70,7 +70,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||
$(am__EXEEXT_31) $(am__EXEEXT_32) $(am__EXEEXT_33) \
|
||||
$(am__EXEEXT_34) $(am__EXEEXT_35) $(am__EXEEXT_36) \
|
||||
$(am__EXEEXT_37) $(am__EXEEXT_38) $(am__EXEEXT_39) \
|
||||
- $(am__EXEEXT_40) $(am__EXEEXT_41)
|
||||
+ $(am__EXEEXT_40) $(am__EXEEXT_41) $(am__EXEEXT_42)
|
||||
@NATIVE_OR_CROSS_LINKER_TRUE@am__append_1 = object_unittest \
|
||||
@NATIVE_OR_CROSS_LINKER_TRUE@ binary_unittest leb128_unittest \
|
||||
@NATIVE_OR_CROSS_LINKER_TRUE@ overflow_unittest
|
||||
@@ -817,27 +817,28 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_84 = gnu_property_test.sh
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_85 = gnu_property_test.stdout
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_86 = pr22266
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_87 = aarch64_pr23870
|
||||
|
||||
# These tests work with native and cross linkers.
|
||||
|
||||
# Test script section order.
|
||||
-@NATIVE_OR_CROSS_LINKER_TRUE@am__append_87 = script_test_10.sh
|
||||
-@NATIVE_OR_CROSS_LINKER_TRUE@am__append_88 = script_test_10.stdout
|
||||
-@NATIVE_OR_CROSS_LINKER_TRUE@am__append_89 = script_test_10
|
||||
+@NATIVE_OR_CROSS_LINKER_TRUE@am__append_88 = script_test_10.sh
|
||||
+@NATIVE_OR_CROSS_LINKER_TRUE@am__append_89 = script_test_10.stdout
|
||||
+@NATIVE_OR_CROSS_LINKER_TRUE@am__append_90 = script_test_10
|
||||
|
||||
# These tests work with cross linkers only.
|
||||
-@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_90 = split_i386.sh
|
||||
-@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_91 = split_i386_1.stdout split_i386_2.stdout \
|
||||
+@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_91 = split_i386.sh
|
||||
+@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_92 = split_i386_1.stdout split_i386_2.stdout \
|
||||
@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_i386_3.stdout split_i386_4.stdout split_i386_r.stdout
|
||||
|
||||
-@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_92 = split_i386_1 split_i386_2 split_i386_3 \
|
||||
+@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_93 = split_i386_1 split_i386_2 split_i386_3 \
|
||||
@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_i386_4 split_i386_r
|
||||
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_93 = split_x86_64.sh \
|
||||
+@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_94 = split_x86_64.sh \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_plt_1.sh \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_1.sh \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_2.sh
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_94 = split_x86_64_1.stdout \
|
||||
+@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_95 = split_x86_64_1.stdout \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_2.stdout \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_3.stdout \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_4.stdout \
|
||||
@@ -845,14 +846,14 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_plt_1.stdout \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_1.stdout \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_2.stdout
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_95 = split_x86_64_1 split_x86_64_2 split_x86_64_3 \
|
||||
+@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_96 = split_x86_64_1 split_x86_64_2 split_x86_64_3 \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_4 split_x86_64_r
|
||||
|
||||
-@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_96 = split_x32.sh
|
||||
-@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_97 = split_x32_1.stdout split_x32_2.stdout \
|
||||
+@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_97 = split_x32.sh
|
||||
+@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_98 = split_x32_1.stdout split_x32_2.stdout \
|
||||
@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x32_3.stdout split_x32_4.stdout split_x32_r.stdout
|
||||
|
||||
-@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_98 = split_x32_1 split_x32_2 split_x32_3 \
|
||||
+@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_99 = split_x32_1 split_x32_2 split_x32_3 \
|
||||
@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x32_4 split_x32_r
|
||||
|
||||
|
||||
@@ -873,7 +874,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||
# Check Thumb to ARM farcall veneers
|
||||
|
||||
# Check handling of --target1-abs, --target1-rel and --target2 options
|
||||
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_99 = arm_abs_global.sh \
|
||||
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_100 = arm_abs_global.sh \
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_branch_in_range.sh \
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_branch_out_of_range.sh \
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_v4bx.sh \
|
||||
@@ -896,7 +897,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_got_rel.sh
|
||||
|
||||
# The test demonstrates why the constructor of a target object should not access options.
|
||||
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_100 = arm_abs_global.stdout \
|
||||
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_101 = arm_abs_global.stdout \
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_in_range.stdout \
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_out_of_range.stdout \
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ thumb_bl_in_range.stdout \
|
||||
@@ -949,7 +950,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_abs.stdout \
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_got_rel.stdout \
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target_lazy_init
|
||||
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_101 = arm_abs_global \
|
||||
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_102 = arm_abs_global \
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_in_range \
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_out_of_range \
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ thumb_bl_in_range \
|
||||
@@ -1000,20 +1001,20 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_abs \
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_got_rel \
|
||||
@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target_lazy_init
|
||||
-@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_102 = aarch64_reloc_none.sh \
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_103 = aarch64_reloc_none.sh \
|
||||
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_relocs.sh \
|
||||
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ pr21430.sh \
|
||||
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_tlsdesc.sh
|
||||
-@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_103 = aarch64_reloc_none.stdout \
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_104 = aarch64_reloc_none.stdout \
|
||||
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_relocs.stdout \
|
||||
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ pr21430.stdout \
|
||||
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_tlsdesc.stdout
|
||||
-@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_104 = aarch64_reloc_none \
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_105 = aarch64_reloc_none \
|
||||
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_relocs \
|
||||
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ pr21430 \
|
||||
@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_tlsdesc
|
||||
-@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_105 = split_s390.sh
|
||||
-@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_106 = split_s390_z1.stdout split_s390_z2.stdout split_s390_z3.stdout \
|
||||
+@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_106 = split_s390.sh
|
||||
+@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_107 = split_s390_z1.stdout split_s390_z2.stdout split_s390_z3.stdout \
|
||||
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z4.stdout split_s390_n1.stdout split_s390_n2.stdout \
|
||||
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_a1.stdout split_s390_a2.stdout split_s390_z1_ns.stdout \
|
||||
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z2_ns.stdout split_s390_z3_ns.stdout split_s390_z4_ns.stdout \
|
||||
@@ -1025,7 +1026,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_z4_ns.stdout split_s390x_n1_ns.stdout \
|
||||
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_n2_ns.stdout split_s390x_r.stdout
|
||||
|
||||
-@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_107 = split_s390_z1 split_s390_z2 split_s390_z3 \
|
||||
+@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_108 = split_s390_z1 split_s390_z2 split_s390_z3 \
|
||||
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z4 split_s390_n1 split_s390_n2 split_s390_a1 \
|
||||
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_a2 split_s390_z1_ns split_s390_z2_ns split_s390_z3_ns \
|
||||
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z4_ns split_s390_n1_ns split_s390_n2_ns split_s390_r \
|
||||
@@ -1034,10 +1035,10 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_z1_ns split_s390x_z2_ns split_s390x_z3_ns \
|
||||
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_z4_ns split_s390x_n1_ns split_s390x_n2_ns split_s390x_r
|
||||
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@am__append_108 = *.dwo *.dwp
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@am__append_109 = dwp_test_1.sh \
|
||||
+@DEFAULT_TARGET_X86_64_TRUE@am__append_109 = *.dwo *.dwp
|
||||
+@DEFAULT_TARGET_X86_64_TRUE@am__append_110 = dwp_test_1.sh \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@ dwp_test_2.sh
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@am__append_110 = dwp_test_1.stdout \
|
||||
+@DEFAULT_TARGET_X86_64_TRUE@am__append_111 = dwp_test_1.stdout \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@ dwp_test_2.stdout
|
||||
subdir = testsuite
|
||||
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
|
||||
@@ -1243,6 +1244,11 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_40 = \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_x86_64_bnd_test$(EXEEXT)
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_41 = pr22266$(EXEEXT)
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_42 = aarch64_pr23870$(EXEEXT)
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am_aarch64_pr23870_OBJECTS = aarch64_pr23870_foo.$(OBJEXT)
|
||||
+aarch64_pr23870_OBJECTS = $(am_aarch64_pr23870_OBJECTS)
|
||||
+aarch64_pr23870_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
+ $(aarch64_pr23870_LDFLAGS) $(LDFLAGS) -o $@
|
||||
basic_pic_test_SOURCES = basic_pic_test.c
|
||||
basic_pic_test_OBJECTS = basic_pic_test.$(OBJEXT)
|
||||
basic_pic_test_LDADD = $(LDADD)
|
||||
@@ -2392,7 +2398,7 @@ am__depfiles_maybe = depfiles
|
||||
am__mv = mv -f
|
||||
CCLD = $(CC)
|
||||
CXXLD = $(CXX)
|
||||
-SOURCES = $(libgoldtest_a_SOURCES) basic_pic_test.c basic_pie_test.c \
|
||||
+SOURCES = $(libgoldtest_a_SOURCES) $(aarch64_pr23870_SOURCES) basic_pic_test.c basic_pie_test.c \
|
||||
basic_static_pic_test.c basic_static_test.c basic_test.c \
|
||||
$(binary_test_SOURCES) $(binary_unittest_SOURCES) \
|
||||
$(common_test_1_SOURCES) $(common_test_2_SOURCES) \
|
||||
@@ -2830,9 +2836,9 @@ MOSTLYCLEANFILES = *.so *.syms *.stdout
|
||||
$(am__append_34) $(am__append_37) $(am__append_41) \
|
||||
$(am__append_47) $(am__append_51) $(am__append_52) \
|
||||
$(am__append_58) $(am__append_78) $(am__append_81) \
|
||||
- $(am__append_83) $(am__append_89) $(am__append_92) \
|
||||
- $(am__append_95) $(am__append_98) $(am__append_101) \
|
||||
- $(am__append_104) $(am__append_107) $(am__append_108)
|
||||
+ $(am__append_83) $(am__append_90) $(am__append_93) \
|
||||
+ $(am__append_96) $(am__append_99) $(am__append_102) \
|
||||
+ $(am__append_105) $(am__append_108) $(am__append_109)
|
||||
|
||||
# We will add to these later, for each individual test. Note
|
||||
# that we add each test under check_SCRIPTS or check_PROGRAMS;
|
||||
@@ -2842,17 +2848,17 @@ check_SCRIPTS = $(am__append_2) $(am__ap
|
||||
$(am__append_45) $(am__append_49) $(am__append_53) \
|
||||
$(am__append_56) $(am__append_62) $(am__append_73) \
|
||||
$(am__append_76) $(am__append_79) $(am__append_84) \
|
||||
- $(am__append_87) $(am__append_90) $(am__append_93) \
|
||||
- $(am__append_96) $(am__append_99) $(am__append_102) \
|
||||
- $(am__append_105) $(am__append_109)
|
||||
+ $(am__append_88) $(am__append_91) $(am__append_94) \
|
||||
+ $(am__append_97) $(am__append_100) $(am__append_103) \
|
||||
+ $(am__append_106) $(am__append_110)
|
||||
check_DATA = $(am__append_3) $(am__append_20) $(am__append_24) \
|
||||
$(am__append_30) $(am__append_36) $(am__append_43) \
|
||||
$(am__append_46) $(am__append_50) $(am__append_54) \
|
||||
$(am__append_57) $(am__append_63) $(am__append_74) \
|
||||
$(am__append_77) $(am__append_80) $(am__append_85) \
|
||||
- $(am__append_88) $(am__append_91) $(am__append_94) \
|
||||
- $(am__append_97) $(am__append_100) $(am__append_103) \
|
||||
- $(am__append_106) $(am__append_110)
|
||||
+ $(am__append_89) $(am__append_92) $(am__append_95) \
|
||||
+ $(am__append_98) $(am__append_101) $(am__append_104) \
|
||||
+ $(am__append_107) $(am__append_111)
|
||||
BUILT_SOURCES = $(am__append_40)
|
||||
TESTS = $(check_SCRIPTS) $(check_PROGRAMS)
|
||||
|
||||
@@ -3408,6 +3414,13 @@ LDADD = libgoldtest.a ../libgold.a ../..
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_x86_64_bnd_test_DEPENDENCIES = gcctestdir/ld exception_x86_64_bnd_1.o exception_x86_64_bnd_2.o
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_x86_64_bnd_test_LDFLAGS = $(exception_test_LDFLAGS) -Wl,-z,bndplt
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_x86_64_bnd_test_LDADD = exception_x86_64_bnd_1.o exception_x86_64_bnd_2.o
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@aarch64_pr23870_SOURCES = aarch64_pr23870_foo.c
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@aarch64_pr23870_DEPENDENCIES = \
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld gcctestdir/as aarch64_pr23870_main.o \
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ aarch64_pr23870_foo.o aarch64_pr23870_bar.so
|
||||
+
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@aarch64_pr23870_LDFLAGS = -Wl,-R,. -L. -Wl,-l:aarch64_pr23870_bar.so
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@aarch64_pr23870_LDADD = aarch64_pr23870_main.o
|
||||
@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@SPLIT_DEFSYMS = --defsym __morestack=0x100 --defsym __morestack_non_split=0x200
|
||||
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@SPLIT_DEFSYMS = --defsym __morestack=0x100 --defsym __morestack_non_split=0x200
|
||||
@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@SPLIT_DEFSYMS = --defsym __morestack=0x100 --defsym __morestack_non_split=0x200
|
||||
@@ -3457,6 +3470,11 @@ libgoldtest.a: $(libgoldtest_a_OBJECTS)
|
||||
|
||||
clean-checkPROGRAMS:
|
||||
-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
|
||||
+
|
||||
+aarch64_pr23870$(EXEEXT): $(aarch64_pr23870_OBJECTS) $(aarch64_pr23870_DEPENDENCIES) $(EXTRA_aarch64_pr23870_DEPENDENCIES)
|
||||
+ @rm -f aarch64_pr23870$(EXEEXT)
|
||||
+ $(AM_V_CCLD)$(aarch64_pr23870_LINK) $(aarch64_pr23870_OBJECTS) $(aarch64_pr23870_LDADD) $(LIBS)
|
||||
+
|
||||
@GCC_FALSE@basic_pic_test$(EXEEXT): $(basic_pic_test_OBJECTS) $(basic_pic_test_DEPENDENCIES) $(EXTRA_basic_pic_test_DEPENDENCIES)
|
||||
@GCC_FALSE@ @rm -f basic_pic_test$(EXEEXT)
|
||||
@GCC_FALSE@ $(LINK) $(basic_pic_test_OBJECTS) $(basic_pic_test_LDADD) $(LIBS)
|
||||
@@ -4397,6 +4415,7 @@ mostlyclean-compile:
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aarch64_pr23870_foo.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic_pic_test.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic_pie_test.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic_static_pic_test.Po@am__quote@
|
||||
@@ -5741,6 +5760,13 @@ pr22266.log: pr22266$(EXEEXT)
|
||||
@p='pr22266$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
|
||||
gnu_property_test.sh.log: gnu_property_test.sh
|
||||
@p='gnu_property_test.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
|
||||
+aarch64_pr23870.log: aarch64_pr23870$(EXEEXT)
|
||||
+ @p='aarch64_pr23870$(EXEEXT)'; \
|
||||
+ b='aarch64_pr23870'; \
|
||||
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
|
||||
+ --log-file $$b.log --trs-file $$b.trs \
|
||||
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
|
||||
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
|
||||
.test.log:
|
||||
@p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post)
|
||||
@am__EXEEXT_TRUE@.test$(EXEEXT).log:
|
||||
@@ -7414,6 +7440,14 @@ uninstall-am:
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ pr22266_main.o pr22266_ar.o
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@pr22266_ar.o: pr22266_a.o gcctestdir/ld
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld -r -T $(srcdir)/pr22266_script.t -o $@ pr22266_a.o
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@aarch64_pr23870_main.o: aarch64_pr23870_main.S
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -o $@ $<
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@aarch64_pr23870_foo.o: aarch64_pr23870_foo.c
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -o $@ $<
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@aarch64_pr23870_bar.o: aarch64_pr23870_bar.c
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -fPIC -o $@ $<
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@aarch64_pr23870_bar.so: aarch64_pr23870_bar.o
|
||||
+@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -shared -o $@ $<
|
||||
@NATIVE_OR_CROSS_LINKER_TRUE@script_test_10.o: script_test_10.s
|
||||
@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -o $@ $<
|
||||
@NATIVE_OR_CROSS_LINKER_TRUE@script_test_10: $(srcdir)/script_test_10.t script_test_10.o gcctestdir/ld
|
22
SOURCES/binutils-CVE-2018-10372.patch
Normal file
22
SOURCES/binutils-CVE-2018-10372.patch
Normal file
@ -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. */
|
11
SOURCES/binutils-CVE-2018-10373.patch
Normal file
11
SOURCES/binutils-CVE-2018-10373.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- binutils.orig/bfd/dwarf2.c 2018-05-01 11:42:03.152425647 +0100
|
||||
+++ binutils-2.30/bfd/dwarf2.c 2018-05-01 12:03:27.533735710 +0100
|
||||
@@ -1559,7 +1559,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)
|
18
SOURCES/binutils-CVE-2018-10534.patch
Normal file
18
SOURCES/binutils-CVE-2018-10534.patch
Normal file
@ -0,0 +1,18 @@
|
||||
--- binutils.orig/bfd/peXXigen.c 2018-05-10 10:09:03.619147342 +0100
|
||||
+++ binutils-2.30/bfd/peXXigen.c 2018-05-10 10:20:20.884883540 +0100
|
||||
@@ -2991,6 +2991,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++)
|
28
SOURCES/binutils-CVE-2018-10535.patch
Normal file
28
SOURCES/binutils-CVE-2018-10535.patch
Normal file
@ -0,0 +1,28 @@
|
||||
--- binutils.orig/bfd/elf.c 2018-05-10 10:09:03.622147305 +0100
|
||||
+++ binutils-2.30/bfd/elf.c 2018-05-10 10:29:09.895577234 +0100
|
||||
@@ -4021,16 +4021,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)));
|
||||
}
|
||||
|
101
SOURCES/binutils-CVE-2018-17358.patch
Normal file
101
SOURCES/binutils-CVE-2018-17358.patch
Normal file
@ -0,0 +1,101 @@
|
||||
diff -rup binutils.orig/bfd/dwarf2.c binutils-2.30/bfd/dwarf2.c
|
||||
--- binutils.orig/bfd/dwarf2.c 2018-09-26 15:07:47.162863937 +0100
|
||||
+++ binutils-2.30/bfd/dwarf2.c 2018-09-26 15:08:50.868368183 +0100
|
||||
@@ -527,6 +527,7 @@ read_section (bfd * abfd,
|
||||
asection *msec;
|
||||
const char *section_name = sec->uncompressed_name;
|
||||
bfd_byte *contents = *section_buffer;
|
||||
+ bfd_size_type amt;
|
||||
|
||||
/* The section may have already been read. */
|
||||
if (contents == NULL)
|
||||
@@ -549,7 +550,14 @@ read_section (bfd * abfd,
|
||||
*section_size = msec->rawsize ? msec->rawsize : msec->size;
|
||||
/* Paranoia - alloc one extra so that we can make sure a string
|
||||
section is NUL terminated. */
|
||||
- contents = (bfd_byte *) bfd_malloc (*section_size + 1);
|
||||
+ amt = *section_size + 1;
|
||||
+ if (amt == 0)
|
||||
+ {
|
||||
+ bfd_set_error (bfd_error_no_memory);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ contents = (bfd_byte *) bfd_malloc (amt);
|
||||
+
|
||||
if (contents == NULL)
|
||||
return FALSE;
|
||||
if (syms
|
||||
diff -rup binutils.orig/bfd/syms.c binutils-2.30/bfd/syms.c
|
||||
--- binutils.orig/bfd/syms.c 2018-09-26 15:07:47.162863937 +0100
|
||||
+++ binutils-2.30/bfd/syms.c 2018-09-26 15:11:41.671038993 +0100
|
||||
@@ -1035,6 +1035,10 @@ _bfd_stab_section_find_nearest_line (bfd
|
||||
0, strsize))
|
||||
return FALSE;
|
||||
|
||||
+ /* Stab strings ought to be nul terminated. Ensure the last one
|
||||
+ is, to prevent running off the end of the buffer. */
|
||||
+ info->strs[strsize - 1] = 0;
|
||||
+
|
||||
/* If this is a relocatable object file, we have to relocate
|
||||
the entries in .stab. This should always be simple 32 bit
|
||||
relocations against symbols defined in this object file, so
|
||||
@@ -1073,7 +1077,8 @@ _bfd_stab_section_find_nearest_line (bfd
|
||||
|| r->howto->bitsize != 32
|
||||
|| r->howto->pc_relative
|
||||
|| r->howto->bitpos != 0
|
||||
- || r->howto->dst_mask != 0xffffffff)
|
||||
+ || r->howto->dst_mask != 0xffffffff
|
||||
+ || r->address * bfd_octets_per_byte (abfd) + 4 > stabsize)
|
||||
{
|
||||
_bfd_error_handler
|
||||
(_("Unsupported .stab relocation"));
|
||||
@@ -1195,7 +1200,8 @@ _bfd_stab_section_find_nearest_line (bfd
|
||||
{
|
||||
nul_fun = stab;
|
||||
nul_str = str;
|
||||
- if (file_name >= (char *) info->strs + strsize || file_name < (char *) str)
|
||||
+ if (file_name >= (char *) info->strs + strsize
|
||||
+ || file_name < (char *) str)
|
||||
file_name = NULL;
|
||||
if (stab + STABSIZE + TYPEOFF < info->stabs + stabsize
|
||||
&& *(stab + STABSIZE + TYPEOFF) == (bfd_byte) N_SO)
|
||||
@@ -1206,7 +1212,8 @@ _bfd_stab_section_find_nearest_line (bfd
|
||||
directory_name = file_name;
|
||||
file_name = ((char *) str
|
||||
+ bfd_get_32 (abfd, stab + STRDXOFF));
|
||||
- if (file_name >= (char *) info->strs + strsize || file_name < (char *) str)
|
||||
+ if (file_name >= (char *) info->strs + strsize
|
||||
+ || file_name < (char *) str)
|
||||
file_name = NULL;
|
||||
}
|
||||
}
|
||||
@@ -1217,7 +1224,8 @@ _bfd_stab_section_find_nearest_line (bfd
|
||||
file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
|
||||
/* PR 17512: file: 0c680a1f. */
|
||||
/* PR 17512: file: 5da8aec4. */
|
||||
- if (file_name >= (char *) info->strs + strsize || file_name < (char *) str)
|
||||
+ if (file_name >= (char *) info->strs + strsize
|
||||
+ || file_name < (char *) str)
|
||||
file_name = NULL;
|
||||
break;
|
||||
|
||||
@@ -1226,7 +1234,8 @@ _bfd_stab_section_find_nearest_line (bfd
|
||||
function_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
|
||||
if (function_name == (char *) str)
|
||||
continue;
|
||||
- if (function_name >= (char *) info->strs + strsize)
|
||||
+ if (function_name >= (char *) info->strs + strsize
|
||||
+ || function_name < (char *) str)
|
||||
function_name = NULL;
|
||||
|
||||
nul_fun = NULL;
|
||||
@@ -1335,7 +1344,8 @@ _bfd_stab_section_find_nearest_line (bfd
|
||||
if (val <= offset)
|
||||
{
|
||||
file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
|
||||
- if (file_name >= (char *) info->strs + strsize || file_name < (char *) str)
|
||||
+ if (file_name >= (char *) info->strs + strsize
|
||||
+ || file_name < (char *) str)
|
||||
file_name = NULL;
|
||||
*pline = 0;
|
||||
}
|
20
SOURCES/binutils-CVE-2018-6323.patch
Normal file
20
SOURCES/binutils-CVE-2018-6323.patch
Normal file
@ -0,0 +1,20 @@
|
||||
--- binutils.orig/bfd/elfcode.h 2018-05-01 11:42:03.250424443 +0100
|
||||
+++ binutils-2.30/bfd/elfcode.h 2018-05-01 12:41:00.745780026 +0100
|
||||
@@ -680,7 +680,7 @@ elf_object_p (bfd *abfd)
|
||||
if (i_ehdrp->e_shnum > ((bfd_size_type) -1) / sizeof (*i_shdrp))
|
||||
goto got_wrong_format_error;
|
||||
#endif
|
||||
- amt = sizeof (*i_shdrp) * i_ehdrp->e_shnum;
|
||||
+ amt = sizeof (*i_shdrp) * (bfd_size_type) i_ehdrp->e_shnum;
|
||||
i_shdrp = (Elf_Internal_Shdr *) bfd_alloc (abfd, amt);
|
||||
if (!i_shdrp)
|
||||
goto got_no_match;
|
||||
@@ -776,7 +776,7 @@ elf_object_p (bfd *abfd)
|
||||
if (i_ehdrp->e_phnum > ((bfd_size_type) -1) / sizeof (*i_phdr))
|
||||
goto got_wrong_format_error;
|
||||
#endif
|
||||
- amt = i_ehdrp->e_phnum * sizeof (*i_phdr);
|
||||
+ amt = (bfd_size_type) i_ehdrp->e_phnum * sizeof (*i_phdr);
|
||||
elf_tdata (abfd)->phdr = (Elf_Internal_Phdr *) bfd_alloc (abfd, amt);
|
||||
if (elf_tdata (abfd)->phdr == NULL)
|
||||
goto got_no_match;
|
69
SOURCES/binutils-CVE-2018-6759.patch
Normal file
69
SOURCES/binutils-CVE-2018-6759.patch
Normal file
@ -0,0 +1,69 @@
|
||||
--- binutils.orig/bfd/opncls.c 2018-05-01 11:42:03.266424248 +0100
|
||||
+++ binutils-2.30/bfd/opncls.c 2018-05-01 12:52:36.792579838 +0100
|
||||
@@ -1179,6 +1179,7 @@ bfd_get_debug_link_info_1 (bfd *abfd, vo
|
||||
bfd_byte *contents;
|
||||
unsigned int crc_offset;
|
||||
char *name;
|
||||
+ bfd_size_type size;
|
||||
|
||||
BFD_ASSERT (abfd);
|
||||
BFD_ASSERT (crc32_out);
|
||||
@@ -1188,6 +1189,12 @@ bfd_get_debug_link_info_1 (bfd *abfd, vo
|
||||
if (sect == NULL)
|
||||
return NULL;
|
||||
|
||||
+ size = bfd_get_section_size (sect);
|
||||
+
|
||||
+ /* PR 22794: Make sure that the section has a reasonable size. */
|
||||
+ if (size < 8 || size >= bfd_get_size (abfd))
|
||||
+ return NULL;
|
||||
+
|
||||
if (!bfd_malloc_and_get_section (abfd, sect, &contents))
|
||||
{
|
||||
if (contents != NULL)
|
||||
@@ -1198,9 +1205,9 @@ bfd_get_debug_link_info_1 (bfd *abfd, vo
|
||||
/* CRC value is stored after the filename, aligned up to 4 bytes. */
|
||||
name = (char *) contents;
|
||||
/* PR 17597: avoid reading off the end of the buffer. */
|
||||
- crc_offset = strnlen (name, bfd_get_section_size (sect)) + 1;
|
||||
+ crc_offset = strnlen (name, size) + 1;
|
||||
crc_offset = (crc_offset + 3) & ~3;
|
||||
- if (crc_offset + 4 > bfd_get_section_size (sect))
|
||||
+ if (crc_offset + 4 > size)
|
||||
return NULL;
|
||||
|
||||
*crc32 = bfd_get_32 (abfd, contents + crc_offset);
|
||||
@@ -1261,6 +1268,7 @@ bfd_get_alt_debug_link_info (bfd * abfd,
|
||||
bfd_byte *contents;
|
||||
unsigned int buildid_offset;
|
||||
char *name;
|
||||
+ bfd_size_type size;
|
||||
|
||||
BFD_ASSERT (abfd);
|
||||
BFD_ASSERT (buildid_len);
|
||||
@@ -1271,6 +1279,10 @@ bfd_get_alt_debug_link_info (bfd * abfd,
|
||||
if (sect == NULL)
|
||||
return NULL;
|
||||
|
||||
+ size = bfd_get_section_size (sect);
|
||||
+ if (size < 8 || size >= bfd_get_size (abfd))
|
||||
+ return NULL;
|
||||
+
|
||||
if (!bfd_malloc_and_get_section (abfd, sect, & contents))
|
||||
{
|
||||
if (contents != NULL)
|
||||
@@ -1280,11 +1292,11 @@ bfd_get_alt_debug_link_info (bfd * abfd,
|
||||
|
||||
/* BuildID value is stored after the filename. */
|
||||
name = (char *) contents;
|
||||
- buildid_offset = strnlen (name, bfd_get_section_size (sect)) + 1;
|
||||
- if (buildid_offset >= bfd_get_section_size (sect))
|
||||
+ buildid_offset = strnlen (name, size) + 1;
|
||||
+ if (buildid_offset >= size)
|
||||
return NULL;
|
||||
|
||||
- *buildid_len = bfd_get_section_size (sect) - buildid_offset;
|
||||
+ *buildid_len = size - buildid_offset;
|
||||
*buildid_out = bfd_malloc (*buildid_len);
|
||||
memcpy (*buildid_out, contents + buildid_offset, *buildid_len);
|
||||
|
12
SOURCES/binutils-CVE-2018-7208.patch
Normal file
12
SOURCES/binutils-CVE-2018-7208.patch
Normal file
@ -0,0 +1,12 @@
|
||||
--- binutils.orig/bfd/coffgen.c 2018-04-27 09:23:33.449859052 +0100
|
||||
+++ binutils-2.30/bfd/coffgen.c 2018-04-27 09:34:34.530135122 +0100
|
||||
@@ -1555,7 +1555,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;
|
37
SOURCES/binutils-CVE-2018-7568.patch
Normal file
37
SOURCES/binutils-CVE-2018-7568.patch
Normal file
@ -0,0 +1,37 @@
|
||||
--- binutils.orig/bfd/dwarf1.c 2018-05-01 13:04:35.060041875 +0100
|
||||
+++ binutils-2.30/bfd/dwarf1.c 2018-05-01 13:24:17.943833855 +0100
|
||||
@@ -213,6 +213,7 @@ parse_die (bfd * abfd,
|
||||
/* Then the attributes. */
|
||||
while (xptr + 2 <= aDiePtrEnd)
|
||||
{
|
||||
+ unsigned int block_len;
|
||||
unsigned short attr;
|
||||
|
||||
/* Parse the attribute based on its form. This section
|
||||
@@ -255,12 +256,24 @@ parse_die (bfd * abfd,
|
||||
break;
|
||||
case FORM_BLOCK2:
|
||||
if (xptr + 2 <= aDiePtrEnd)
|
||||
- xptr += bfd_get_16 (abfd, xptr);
|
||||
+ {
|
||||
+ 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:
|
||||
if (xptr + 4 <= aDiePtrEnd)
|
||||
- xptr += bfd_get_32 (abfd, xptr);
|
||||
+ {
|
||||
+ 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:
|
75
SOURCES/binutils-CVE-2018-7569.patch
Normal file
75
SOURCES/binutils-CVE-2018-7569.patch
Normal file
@ -0,0 +1,75 @@
|
||||
--- binutils.orig/bfd/dwarf2.c 2018-05-01 13:04:35.055041935 +0100
|
||||
+++ binutils-2.30/bfd/dwarf2.c 2018-05-01 13:31:32.882624448 +0100
|
||||
@@ -622,14 +622,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)
|
||||
-{
|
||||
- if (buf + size > end)
|
||||
- return NULL;
|
||||
- return buf;
|
||||
+read_n_bytes (bfd_byte * buf,
|
||||
+ bfd_byte * end,
|
||||
+ struct dwarf_block * block)
|
||||
+{
|
||||
+ 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.
|
||||
@@ -1127,8 +1137,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:
|
||||
@@ -1138,8 +1147,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:
|
||||
@@ -1179,8 +1187,7 @@ read_attribute_value (struct attribute *
|
||||
blk->size = _bfd_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:
|
||||
@@ -1190,8 +1197,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:
|
156
SOURCES/binutils-CVE-2018-7570.patch
Normal file
156
SOURCES/binutils-CVE-2018-7570.patch
Normal file
@ -0,0 +1,156 @@
|
||||
--- binutils.orig/bfd/elf.c 2018-05-01 11:42:03.151425659 +0100
|
||||
+++ binutils-2.30/bfd/elf.c 2018-05-01 12:30:42.129206856 +0100
|
||||
@@ -5713,6 +5713,9 @@ assign_file_positions_for_load_sections
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+#define IS_TBSS(s) \
|
||||
+ ((s->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) == SEC_THREAD_LOCAL)
|
||||
+
|
||||
/* Assign file positions for the other sections. */
|
||||
|
||||
static bfd_boolean
|
||||
@@ -5862,65 +5865,100 @@ assign_file_positions_for_non_load_secti
|
||||
{
|
||||
if (p->p_type == PT_GNU_RELRO)
|
||||
{
|
||||
- const Elf_Internal_Phdr *lp;
|
||||
- struct elf_segment_map *lm;
|
||||
+ bfd_vma start, end;
|
||||
+ bfd_boolean ok;
|
||||
|
||||
if (link_info != NULL)
|
||||
{
|
||||
/* During linking the range of the RELRO segment is passed
|
||||
- in link_info. */
|
||||
+ in link_info. Note that there may be padding between
|
||||
+ relro_start and the first RELRO section. */
|
||||
+ start = link_info->relro_start;
|
||||
+ end = link_info->relro_end;
|
||||
+ }
|
||||
+ else if (m->count != 0)
|
||||
+ {
|
||||
+ if (!m->p_size_valid)
|
||||
+ abort ();
|
||||
+ start = m->sections[0]->vma;
|
||||
+ end = start + m->p_size;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ start = 0;
|
||||
+ end = 0;
|
||||
+ }
|
||||
+
|
||||
+ ok = FALSE;
|
||||
+ if (start < end)
|
||||
+ {
|
||||
+ struct elf_segment_map *lm;
|
||||
+ const Elf_Internal_Phdr *lp;
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ /* Find a LOAD segment containing a section in the RELRO
|
||||
+ segment. */
|
||||
for (lm = elf_seg_map (abfd), lp = phdrs;
|
||||
lm != NULL;
|
||||
lm = lm->next, lp++)
|
||||
{
|
||||
if (lp->p_type == PT_LOAD
|
||||
- && lp->p_vaddr < link_info->relro_end
|
||||
&& lm->count != 0
|
||||
- && lm->sections[0]->vma >= link_info->relro_start)
|
||||
+ && (lm->sections[lm->count - 1]->vma
|
||||
+ + (!IS_TBSS (lm->sections[lm->count - 1])
|
||||
+ ? lm->sections[lm->count - 1]->size
|
||||
+ : 0)) > start
|
||||
+ && lm->sections[0]->vma < end)
|
||||
break;
|
||||
}
|
||||
|
||||
- BFD_ASSERT (lm != NULL);
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- /* Otherwise we are copying an executable or shared
|
||||
- library, but we need to use the same linker logic. */
|
||||
- for (lp = phdrs; lp < phdrs + count; ++lp)
|
||||
+ if (lm != NULL)
|
||||
{
|
||||
- if (lp->p_type == PT_LOAD
|
||||
- && lp->p_paddr == p->p_paddr)
|
||||
- break;
|
||||
+ /* Find the section starting the RELRO segment. */
|
||||
+ for (i = 0; i < lm->count; i++)
|
||||
+ {
|
||||
+ asection *s = lm->sections[i];
|
||||
+ if (s->vma >= start
|
||||
+ && s->vma < end
|
||||
+ && s->size != 0)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (i < lm->count)
|
||||
+ {
|
||||
+ p->p_vaddr = lm->sections[i]->vma;
|
||||
+ p->p_paddr = lm->sections[i]->lma;
|
||||
+ p->p_offset = lm->sections[i]->filepos;
|
||||
+ p->p_memsz = end - p->p_vaddr;
|
||||
+ p->p_filesz = p->p_memsz;
|
||||
+
|
||||
+ /* The RELRO segment typically ends a few bytes
|
||||
+ into .got.plt but other layouts are possible.
|
||||
+ In cases where the end does not match any
|
||||
+ loaded section (for instance is in file
|
||||
+ padding), trim p_filesz back to correspond to
|
||||
+ the end of loaded section contents. */
|
||||
+ if (p->p_filesz > lp->p_vaddr + lp->p_filesz - p->p_vaddr)
|
||||
+ p->p_filesz = lp->p_vaddr + lp->p_filesz - p->p_vaddr;
|
||||
+
|
||||
+ /* Preserve the alignment and flags if they are
|
||||
+ valid. The gold linker generates RW/4 for
|
||||
+ the PT_GNU_RELRO section. It is better for
|
||||
+ objcopy/strip to honor these attributes
|
||||
+ otherwise gdb will choke when using separate
|
||||
+ debug files. */
|
||||
+ if (!m->p_align_valid)
|
||||
+ p->p_align = 1;
|
||||
+ if (!m->p_flags_valid)
|
||||
+ p->p_flags = PF_R;
|
||||
+ ok = TRUE;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
-
|
||||
- if (lp < phdrs + count)
|
||||
- {
|
||||
- p->p_vaddr = lp->p_vaddr;
|
||||
- p->p_paddr = lp->p_paddr;
|
||||
- p->p_offset = lp->p_offset;
|
||||
- if (link_info != NULL)
|
||||
- p->p_filesz = link_info->relro_end - lp->p_vaddr;
|
||||
- else if (m->p_size_valid)
|
||||
- p->p_filesz = m->p_size;
|
||||
- else
|
||||
- abort ();
|
||||
- p->p_memsz = p->p_filesz;
|
||||
- /* Preserve the alignment and flags if they are valid. The
|
||||
- gold linker generates RW/4 for the PT_GNU_RELRO section.
|
||||
- It is better for objcopy/strip to honor these attributes
|
||||
- otherwise gdb will choke when using separate debug files.
|
||||
- */
|
||||
- if (!m->p_align_valid)
|
||||
- p->p_align = 1;
|
||||
- if (!m->p_flags_valid)
|
||||
- p->p_flags = PF_R;
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- memset (p, 0, sizeof *p);
|
||||
- p->p_type = PT_NULL;
|
||||
- }
|
||||
+ if (link_info != NULL)
|
||||
+ BFD_ASSERT (ok);
|
||||
+ if (!ok)
|
||||
+ memset (p, 0, sizeof *p);
|
||||
}
|
||||
else if (p->p_type == PT_GNU_STACK)
|
||||
{
|
17
SOURCES/binutils-CVE-2018-7642.patch
Normal file
17
SOURCES/binutils-CVE-2018-7642.patch
Normal file
@ -0,0 +1,17 @@
|
||||
--- binutils.orig/bfd/aoutx.h 2018-04-26 15:14:18.411450291 +0100
|
||||
+++ binutils-2.30/bfd/aoutx.h 2018-04-26 17:22:38.328770529 +0100
|
||||
@@ -2283,10 +2283,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;
|
||||
}
|
16
SOURCES/binutils-CVE-2018-7643.patch
Normal file
16
SOURCES/binutils-CVE-2018-7643.patch
Normal file
@ -0,0 +1,16 @@
|
||||
--- binutils.orig/binutils/dwarf.c 2018-04-27 09:22:07.402864408 +0100
|
||||
+++ binutils-2.30/binutils/dwarf.c 2018-04-27 09:24:26.794235786 +0100
|
||||
@@ -6810,6 +6810,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)
|
29
SOURCES/binutils-CVE-2018-8945.patch
Normal file
29
SOURCES/binutils-CVE-2018-8945.patch
Normal file
@ -0,0 +1,29 @@
|
||||
diff -rup binutils.orig/bfd/elf-attrs.c binutils-2.30/bfd/elf-attrs.c
|
||||
--- binutils.orig/bfd/elf-attrs.c 2018-05-17 14:14:04.341805666 +0100
|
||||
+++ binutils-2.30/bfd/elf-attrs.c 2018-05-17 14:15:19.729952453 +0100
|
||||
@@ -438,6 +438,14 @@ _bfd_elf_parse_attributes (bfd *abfd, El
|
||||
/* PR 17512: file: 2844a11d. */
|
||||
if (hdr->sh_size == 0)
|
||||
return;
|
||||
+ if (hdr->sh_size > bfd_get_file_size (abfd))
|
||||
+ {
|
||||
+ _bfd_error_handler (_("%pB: error: attribute section '%pA' 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 + 1);
|
||||
if (!contents)
|
||||
return;
|
||||
diff -rup binutils.orig/bfd/elf.c binutils-2.30/bfd/elf.c
|
||||
--- binutils.orig/bfd/elf.c 2018-05-17 14:14:04.326805836 +0100
|
||||
+++ binutils-2.30/bfd/elf.c 2018-05-17 14:15:59.412503342 +0100
|
||||
@@ -298,6 +298,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_file_size (abfd)
|
||||
|| bfd_seek (abfd, offset, SEEK_SET) != 0
|
||||
|| (shstrtab = (bfd_byte *) bfd_alloc (abfd, shstrtabsize + 1)) == NULL)
|
||||
shstrtab = NULL;
|
17
SOURCES/binutils-PowerPC-IEEE-long-double-warnings.patch
Normal file
17
SOURCES/binutils-PowerPC-IEEE-long-double-warnings.patch
Normal file
@ -0,0 +1,17 @@
|
||||
--- binutils.orig/bfd/elf32-ppc.c 2018-06-12 17:35:40.931551297 +0100
|
||||
+++ binutils-2.30/bfd/elf32-ppc.c 2018-06-12 17:37:22.252441292 +0100
|
||||
@@ -4677,12 +4677,12 @@ _bfd_elf_ppc_merge_fp_attributes (bfd *i
|
||||
_bfd_error_handler
|
||||
/* xgettext:c-format */
|
||||
(_("Warning: %B uses IBM long double, "
|
||||
- "%B uses IEEE long double"), ibfd, obfd);
|
||||
+ "%B uses IEEE long double"), obfd, ibfd);
|
||||
else if (out_fp == 3 * 4 && in_fp == 1 * 4)
|
||||
_bfd_error_handler
|
||||
/* xgettext:c-format */
|
||||
(_("Warning: %B uses IBM long double, "
|
||||
- "%B uses IEEE long double"), obfd, ibfd);
|
||||
+ "%B uses IEEE long double"), ibfd, obfd);
|
||||
}
|
||||
}
|
||||
|
68
SOURCES/binutils-attach-to-group.patch
Normal file
68
SOURCES/binutils-attach-to-group.patch
Normal file
@ -0,0 +1,68 @@
|
||||
diff -rup binutils.orig/gas/config/obj-elf.c binutils-2.30/gas/config/obj-elf.c
|
||||
--- binutils.orig/gas/config/obj-elf.c 2018-09-24 17:50:06.974172867 +0100
|
||||
+++ binutils-2.30/gas/config/obj-elf.c 2018-09-25 15:19:33.559830794 +0100
|
||||
@@ -82,9 +82,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},
|
||||
@@ -1007,6 +1009,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.30/gas/doc/as.texinfo
|
||||
--- binutils.orig/gas/doc/as.texinfo 2018-09-24 17:50:06.984172788 +0100
|
||||
+++ binutils-2.30/gas/doc/as.texinfo 2018-09-25 15:19:43.557748972 +0100
|
||||
@@ -4407,6 +4407,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}}
|
||||
@@ -4703,6 +4704,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}}
|
||||
|
||||
Only in binutils-2.30/gas/doc: as.texinfo.orig
|
39
SOURCES/binutils-debug-section-marking.patch
Normal file
39
SOURCES/binutils-debug-section-marking.patch
Normal file
@ -0,0 +1,39 @@
|
||||
--- binutils.orig/bfd/elflink.c 2018-03-14 10:14:49.729271271 +0000
|
||||
+++ binutils-2.30/bfd/elflink.c 2018-03-14 10:15:15.748967793 +0000
|
||||
@@ -12785,7 +12785,7 @@ _bfd_elf_gc_mark_hook (asection *sec,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
-/* Return the global debug definition section. */
|
||||
+/* Return the debug definition section. */
|
||||
|
||||
static asection *
|
||||
elf_gc_mark_debug_section (asection *sec ATTRIBUTE_UNUSED,
|
||||
@@ -12794,11 +12794,22 @@ elf_gc_mark_debug_section (asection *sec
|
||||
struct elf_link_hash_entry *h,
|
||||
Elf_Internal_Sym *sym ATTRIBUTE_UNUSED)
|
||||
{
|
||||
- if (h != NULL
|
||||
- && (h->root.type == bfd_link_hash_defined
|
||||
- || h->root.type == bfd_link_hash_defweak)
|
||||
- && (h->root.u.def.section->flags & SEC_DEBUGGING) != 0)
|
||||
- return h->root.u.def.section;
|
||||
+ if (h != NULL)
|
||||
+ {
|
||||
+ /* Return the global debug definition section. */
|
||||
+ if ((h->root.type == bfd_link_hash_defined
|
||||
+ || h->root.type == bfd_link_hash_defweak)
|
||||
+ && (h->root.u.def.section->flags & SEC_DEBUGGING) != 0)
|
||||
+ return h->root.u.def.section;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ /* Return the local debug definition section. */
|
||||
+ asection *isec = bfd_section_from_elf_index (sec->owner,
|
||||
+ sym->st_shndx);
|
||||
+ if ((isec->flags & SEC_DEBUGGING) != 0)
|
||||
+ return isec;
|
||||
+ }
|
||||
|
||||
return NULL;
|
||||
}
|
16
SOURCES/binutils-disable-readelf-gap-reports.patch
Normal file
16
SOURCES/binutils-disable-readelf-gap-reports.patch
Normal file
@ -0,0 +1,16 @@
|
||||
--- binutils.orig/binutils/readelf.c 2018-09-05 14:08:22.733186922 +0100
|
||||
+++ binutils-2.30/binutils/readelf.c 2018-09-05 15:35:38.009749485 +0100
|
||||
@@ -17634,11 +17634,12 @@ print_gnu_build_attribute_description (E
|
||||
|
||||
if (is_open_attr)
|
||||
{
|
||||
+#if 0
|
||||
/* FIXME: Need to properly allow for section alignment. 16 is just the alignment used on x86_64. */
|
||||
if (global_end > 0 && start > BFD_ALIGN (global_end, 16))
|
||||
warn (_("Gap in build notes detected from %#lx to %#lx\n"),
|
||||
global_end + 1, start - 1);
|
||||
-
|
||||
+#endif
|
||||
printf (_(" Applies to region from %#lx"), start);
|
||||
global_offset = start;
|
||||
|
83
SOURCES/binutils-do-not-link-with-static-libstdc++.patch
Normal file
83
SOURCES/binutils-do-not-link-with-static-libstdc++.patch
Normal file
@ -0,0 +1,83 @@
|
||||
diff -rup binutils.orig/configure binutils-2.30/configure
|
||||
--- binutils.orig/configure 2018-09-24 17:50:06.967172922 +0100
|
||||
+++ binutils-2.30/configure 2018-09-24 17:51:16.648624865 +0100
|
||||
@@ -4996,49 +4996,6 @@ if test -z "$LD"; then
|
||||
fi
|
||||
fi
|
||||
|
||||
-# Check whether -static-libstdc++ -static-libgcc is supported.
|
||||
-have_static_libs=no
|
||||
-if test "$GCC" = yes; then
|
||||
- saved_LDFLAGS="$LDFLAGS"
|
||||
-
|
||||
- LDFLAGS="$LDFLAGS -static-libstdc++ -static-libgcc"
|
||||
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether g++ accepts -static-libstdc++ -static-libgcc" >&5
|
||||
-$as_echo_n "checking whether g++ accepts -static-libstdc++ -static-libgcc... " >&6; }
|
||||
- ac_ext=cpp
|
||||
-ac_cpp='$CXXCPP $CPPFLAGS'
|
||||
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
||||
-
|
||||
-
|
||||
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
-/* end confdefs.h. */
|
||||
-
|
||||
-#if (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
|
||||
-#error -static-libstdc++ not implemented
|
||||
-#endif
|
||||
-int main() {}
|
||||
-_ACEOF
|
||||
-if ac_fn_cxx_try_link "$LINENO"; then :
|
||||
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
-$as_echo "yes" >&6; }; have_static_libs=yes
|
||||
-else
|
||||
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
-$as_echo "no" >&6; }
|
||||
-fi
|
||||
-rm -f core conftest.err conftest.$ac_objext \
|
||||
- conftest$ac_exeext conftest.$ac_ext
|
||||
- ac_ext=c
|
||||
-ac_cpp='$CPP $CPPFLAGS'
|
||||
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
-
|
||||
-
|
||||
- LDFLAGS="$saved_LDFLAGS"
|
||||
-fi
|
||||
-
|
||||
-
|
||||
|
||||
|
||||
if test -n "$ac_tool_prefix"; then
|
||||
diff -rup binutils.orig/configure.ac binutils-2.30/configure.ac
|
||||
--- binutils.orig/configure.ac 2018-09-24 17:50:07.241170767 +0100
|
||||
+++ binutils-2.30/configure.ac 2018-09-24 17:50:29.908992486 +0100
|
||||
@@ -1288,26 +1288,6 @@ if test -z "$LD"; then
|
||||
fi
|
||||
fi
|
||||
|
||||
-# Check whether -static-libstdc++ -static-libgcc is supported.
|
||||
-have_static_libs=no
|
||||
-if test "$GCC" = yes; then
|
||||
- saved_LDFLAGS="$LDFLAGS"
|
||||
-
|
||||
- LDFLAGS="$LDFLAGS -static-libstdc++ -static-libgcc"
|
||||
- AC_MSG_CHECKING([whether g++ accepts -static-libstdc++ -static-libgcc])
|
||||
- AC_LANG_PUSH(C++)
|
||||
- AC_LINK_IFELSE([
|
||||
-#if (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
|
||||
-#error -static-libstdc++ not implemented
|
||||
-#endif
|
||||
-int main() {}],
|
||||
- [AC_MSG_RESULT([yes]); have_static_libs=yes],
|
||||
- [AC_MSG_RESULT([no])])
|
||||
- AC_LANG_POP(C++)
|
||||
-
|
||||
- LDFLAGS="$saved_LDFLAGS"
|
||||
-fi
|
||||
-
|
||||
ACX_PROG_GNAT
|
||||
ACX_PROG_CMP_IGNORE_INITIAL
|
||||
|
755
SOURCES/binutils-fix-testsuite-failures.patch
Normal file
755
SOURCES/binutils-fix-testsuite-failures.patch
Normal file
@ -0,0 +1,755 @@
|
||||
diff -rup binutils.orig/gold/testsuite/Makefile.am binutils-2.30/gold/testsuite/Makefile.am
|
||||
--- binutils.orig/gold/testsuite/Makefile.am 2018-05-31 16:14:12.736538727 +0100
|
||||
+++ binutils-2.30/gold/testsuite/Makefile.am 2018-06-01 10:15:00.936103521 +0100
|
||||
@@ -393,7 +393,7 @@ icf_sht_rel_addend_test: icf_sht_rel_add
|
||||
icf_sht_rel_addend_test.stdout: icf_sht_rel_addend_test
|
||||
$(TEST_NM) icf_sht_rel_addend_test > icf_sht_rel_addend_test.stdout
|
||||
|
||||
-check_PROGRAMS += large_symbol_alignment
|
||||
+# check_PROGRAMS += large_symbol_alignment
|
||||
large_symbol_alignment_SOURCES = large_symbol_alignment.cc
|
||||
large_symbol_alignment_DEPENDENCIES = gcctestdir/ld
|
||||
large_symbol_alignment_LDFLAGS = -Bgcctestdir/
|
||||
@@ -783,7 +783,7 @@ weak_test_DEPENDENCIES = gcctestdir/ld
|
||||
weak_test_LDFLAGS = -Bgcctestdir/
|
||||
weak_test_LDADD =
|
||||
|
||||
-check_PROGRAMS += weak_undef_test
|
||||
+# check_PROGRAMS += weak_undef_test
|
||||
MOSTLYCLEANFILES += alt/weak_undef_lib.so
|
||||
weak_undef_test_SOURCES = weak_undef_test.cc
|
||||
weak_undef_test_DEPENDENCIES = gcctestdir/ld weak_undef_lib.so alt/weak_undef_lib.so
|
||||
@@ -1409,7 +1409,7 @@ initpri2_DEPENDENCIES = gcctestdir/ld
|
||||
initpri2_LDFLAGS = -Bgcctestdir/ -Wl,--ctors-in-init-array
|
||||
initpri2_LDADD =
|
||||
|
||||
-check_PROGRAMS += initpri3a
|
||||
+# check_PROGRAMS += initpri3a
|
||||
initpri3a_SOURCES = initpri3.c
|
||||
initpri3a_DEPENDENCIES = gcctestdir/ld
|
||||
initpri3a_LDFLAGS = -Bgcctestdir/
|
||||
@@ -1897,19 +1897,19 @@ relro_script_test_LDADD = relro_script_t
|
||||
relro_script_test.so: gcctestdir/ld relro_script_test.t relro_test_pic.o
|
||||
$(CXXLINK) -Bgcctestdir/ -shared -Wl,-z,relro -Wl,-T,$(srcdir)/relro_script_test.t relro_test_pic.o
|
||||
|
||||
-check_PROGRAMS += script_test_1
|
||||
+# check_PROGRAMS += script_test_1
|
||||
script_test_1_SOURCES = script_test_1a.cc script_test_1b.cc
|
||||
script_test_1_DEPENDENCIES = gcctestdir/ld script_test_1.t
|
||||
script_test_1_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -Wl,-T,$(srcdir)/script_test_1.t
|
||||
script_test_1_LDADD =
|
||||
|
||||
-check_PROGRAMS += script_test_2
|
||||
+# check_PROGRAMS += script_test_2
|
||||
script_test_2_SOURCES = script_test_2.cc script_test_2a.cc script_test_2b.cc
|
||||
script_test_2_DEPENDENCIES = gcctestdir/ld script_test_2.t
|
||||
script_test_2_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -Wl,-T,$(srcdir)/script_test_2.t
|
||||
script_test_2_LDADD =
|
||||
|
||||
-check_PROGRAMS += justsyms
|
||||
+# check_PROGRAMS += justsyms
|
||||
justsyms_SOURCES = justsyms_1.cc
|
||||
justsyms_DEPENDENCIES = gcctestdir/ld justsyms_2r.o
|
||||
justsyms_LDFLAGS = -Bgcctestdir/ -Wl,-R,justsyms_2r.o
|
||||
@@ -1919,7 +1919,7 @@ justsyms_2.o: justsyms_2.cc
|
||||
justsyms_2r.o: justsyms_2.o gcctestdir/ld $(srcdir)/justsyms.t
|
||||
gcctestdir/ld -o $@ -r -T $(srcdir)/justsyms.t justsyms_2.o
|
||||
|
||||
-check_PROGRAMS += justsyms_exec
|
||||
+# check_PROGRAMS += justsyms_exec
|
||||
justsyms_exec_SOURCES = justsyms_exec.c
|
||||
justsyms_exec_DEPENDENCIES = gcctestdir/ld justsyms_lib
|
||||
justsyms_exec_LDFLAGS = -Bgcctestdir/ -Wl,-R,justsyms_lib
|
||||
@@ -1930,7 +1930,7 @@ justsyms_lib.o: justsyms_lib.c
|
||||
justsyms_lib: justsyms_lib.o gcctestdir/ld
|
||||
gcctestdir/ld -o $@ -Ttext=0x1000200 -Tdata=0x2000000 -e exported_func justsyms_lib.o
|
||||
|
||||
-check_PROGRAMS += binary_test
|
||||
+# check_PROGRAMS += binary_test
|
||||
MOSTLYCLEANFILES += binary.txt
|
||||
binary_test_SOURCES = binary_test.cc
|
||||
binary_test_DEPENDENCIES = gcctestdir/ld binary.txt
|
||||
@@ -1952,7 +1952,7 @@ ver_matching_def_pic.o: ver_matching_def
|
||||
ver_matching_test.stdout: ver_matching_def.so
|
||||
$(TEST_OBJDUMP) -T ver_matching_def.so | $(TEST_CXXFILT) > ver_matching_test.stdout
|
||||
|
||||
-check_PROGRAMS += script_test_3
|
||||
+# check_PROGRAMS += script_test_3
|
||||
check_SCRIPTS += script_test_3.sh
|
||||
check_DATA += script_test_3.stdout
|
||||
MOSTLYCLEANFILES += script_test_3.stdout
|
||||
@@ -1961,7 +1961,7 @@ script_test_3: basic_test.o gcctestdir/l
|
||||
script_test_3.stdout: script_test_3
|
||||
$(TEST_READELF) -SlW script_test_3 > script_test_3.stdout
|
||||
|
||||
-check_PROGRAMS += tls_phdrs_script_test
|
||||
+# check_PROGRAMS += tls_phdrs_script_test
|
||||
tls_phdrs_script_test_SOURCES = $(tls_test_SOURCES)
|
||||
tls_phdrs_script_test_DEPENDENCIES = $(tls_test_DEPENDENCIES) $(srcdir)/script_test_3.t
|
||||
tls_phdrs_script_test_LDFLAGS = $(tls_test_LDFLAGS) -Wl,-T,$(srcdir)/script_test_3.t
|
||||
@@ -2043,7 +2043,7 @@ check_PROGRAMS += script_test_12
|
||||
script_test_12: gcctestdir/ld $(srcdir)/script_test_12.t script_test_12a.o script_test_12b.o
|
||||
$(LINK) -Bgcctestdir/ -Wl,-T,$(srcdir)/script_test_12.t script_test_12a.o script_test_12b.o
|
||||
|
||||
-check_PROGRAMS += script_test_12i
|
||||
+# check_PROGRAMS += script_test_12i
|
||||
script_test_12i: gcctestdir/ld $(srcdir)/script_test_12i.t script_test_12a.o script_test_12b.o
|
||||
$(LINK) -Bgcctestdir/ -Wl,-T,$(srcdir)/script_test_12i.t script_test_12a.o script_test_12b.o
|
||||
script_test_12a.o: script_test_12a.c
|
||||
@@ -3023,7 +3023,7 @@ two_file_test_2_ndebug.o: two_file_test_
|
||||
two_file_test_main_ndebug.o: two_file_test_main.cc
|
||||
$(CXXCOMPILE) -O0 -g0 -c -o $@ $<
|
||||
|
||||
-check_PROGRAMS += incremental_test_2
|
||||
+# check_PROGRAMS += incremental_test_2
|
||||
MOSTLYCLEANFILES += two_file_test_tmp_2.o
|
||||
incremental_test_2: two_file_test_1_v1_ndebug.o two_file_test_1_ndebug.o two_file_test_1b_ndebug.o \
|
||||
two_file_test_2_ndebug.o two_file_test_main_ndebug.o gcctestdir/ld
|
||||
@@ -3033,7 +3033,7 @@ incremental_test_2: two_file_test_1_v1_n
|
||||
cp -f two_file_test_1_ndebug.o two_file_test_tmp_2.o
|
||||
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro,-no-pie -Bgcctestdir/ two_file_test_tmp_2.o two_file_test_1b_ndebug.o two_file_test_2_ndebug.o two_file_test_main_ndebug.o
|
||||
|
||||
-check_PROGRAMS += incremental_test_3
|
||||
+# check_PROGRAMS += incremental_test_3
|
||||
MOSTLYCLEANFILES += two_file_test_tmp_3.o
|
||||
incremental_test_3: two_file_test_1.o two_file_test_1b_v1.o two_file_test_1b.o \
|
||||
two_file_test_2.o two_file_test_main.o gcctestdir/ld
|
||||
@@ -3043,7 +3043,7 @@ incremental_test_3: two_file_test_1.o tw
|
||||
cp -f two_file_test_1b.o two_file_test_tmp_3.o
|
||||
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro,-no-pie -Bgcctestdir/ two_file_test_1.o two_file_test_tmp_3.o two_file_test_2.o two_file_test_main.o
|
||||
|
||||
-check_PROGRAMS += incremental_test_4
|
||||
+# check_PROGRAMS += incremental_test_4
|
||||
MOSTLYCLEANFILES += incremental_test_4.base two_file_test_tmp_4.o
|
||||
incremental_test_4: two_file_test_1.o two_file_test_1b.o two_file_test_2_v1.o \
|
||||
two_file_test_2.o two_file_test_main.o gcctestdir/ld
|
||||
@@ -3054,7 +3054,7 @@ incremental_test_4: two_file_test_1.o tw
|
||||
cp -f two_file_test_2.o two_file_test_tmp_4.o
|
||||
$(CXXLINK) -Wl,--incremental-update,--incremental-base=incremental_test_4.base -Wl,-z,norelro,-no-pie -Bgcctestdir/ two_file_test_1.o two_file_test_1b.o two_file_test_tmp_4.o two_file_test_main.o
|
||||
|
||||
-check_PROGRAMS += incremental_test_5
|
||||
+# check_PROGRAMS += incremental_test_5
|
||||
MOSTLYCLEANFILES += two_file_test_5.a
|
||||
incremental_test_5: two_file_test_1.o two_file_test_1b_v1.o two_file_test_1b.o \
|
||||
two_file_test_2.o two_file_test_main.o gcctestdir/ld
|
||||
@@ -3068,7 +3068,7 @@ incremental_test_5: two_file_test_1.o tw
|
||||
|
||||
# Test the --incremental-unchanged flag with an archive library.
|
||||
# The second link should not update the library.
|
||||
-check_PROGRAMS += incremental_test_6
|
||||
+# check_PROGRAMS += incremental_test_6
|
||||
MOSTLYCLEANFILES += two_file_test_6.a
|
||||
incremental_test_6: two_file_test_1.o two_file_test_1b_v1.o two_file_test_1b.o \
|
||||
two_file_test_2.o two_file_test_main.o gcctestdir/ld
|
||||
@@ -3080,7 +3080,7 @@ incremental_test_6: two_file_test_1.o tw
|
||||
$(TEST_AR) rc two_file_test_6.a two_file_test_1.o two_file_test_tmp_6.o two_file_test_2.o
|
||||
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro,-no-pie -Bgcctestdir/ two_file_test_main.o -Wl,--incremental-unchanged two_file_test_6.a -Wl,--incremental-unknown
|
||||
|
||||
-check_PROGRAMS += incremental_copy_test
|
||||
+# check_PROGRAMS += incremental_copy_test
|
||||
incremental_copy_test: copy_test_v1.o copy_test.o copy_test_1.so copy_test_2.so
|
||||
cp -f copy_test_v1.o copy_test_tmp.o
|
||||
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro,-no-pie -Bgcctestdir/ -Wl,-R,. -Wl,--no-as-needed copy_test_tmp.o copy_test_1.so copy_test_2.so
|
||||
@@ -3088,7 +3088,7 @@ incremental_copy_test: copy_test_v1.o co
|
||||
cp -f copy_test.o copy_test_tmp.o
|
||||
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro,-no-pie -Bgcctestdir/ -Wl,-R,. -Wl,--no-as-needed copy_test_tmp.o copy_test_1.so copy_test_2.so
|
||||
|
||||
-check_PROGRAMS += incremental_common_test_1
|
||||
+# check_PROGRAMS += incremental_common_test_1
|
||||
incremental_common_test_1: common_test_1_v1.o common_test_1_v2.o gcctestdir/ld
|
||||
cp -f common_test_1_v1.o common_test_1_tmp.o
|
||||
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro,-no-pie -Bgcctestdir/ common_test_1_tmp.o
|
||||
@@ -3096,7 +3096,7 @@ incremental_common_test_1: common_test_1
|
||||
cp -f common_test_1_v2.o common_test_1_tmp.o
|
||||
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro,-no-pie -Bgcctestdir/ common_test_1_tmp.o
|
||||
|
||||
-check_PROGRAMS += incremental_comdat_test_1
|
||||
+# check_PROGRAMS += incremental_comdat_test_1
|
||||
incremental_comdat_test_1: incr_comdat_test_1.o incr_comdat_test_2_v1.o incr_comdat_test_2_v2.o incr_comdat_test_2_v3.o gcctestdir/ld
|
||||
cp -f incr_comdat_test_2_v1.o incr_comdat_test_1_tmp.o
|
||||
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro,-no-pie -Bgcctestdir/ incr_comdat_test_1.o incr_comdat_test_1_tmp.o
|
||||
diff -rup binutils.orig/gold/testsuite/Makefile.in binutils-2.30/gold/testsuite/Makefile.in
|
||||
--- binutils.orig/gold/testsuite/Makefile.in 2018-05-31 16:14:12.729538804 +0100
|
||||
+++ binutils-2.30/gold/testsuite/Makefile.in 2018-06-01 10:15:13.070965094 +0100
|
||||
@@ -166,7 +166,6 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ alt/weak_undef_lib.so \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ libweak_undef_2.a
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_5 = icf_virtual_function_folding_test \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ large_symbol_alignment \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ basic_test basic_pic_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ eh_test
|
||||
@GCC_FALSE@large_symbol_alignment_DEPENDENCIES =
|
||||
@@ -220,7 +219,6 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||
@NATIVE_LINKER_FALSE@exception_test_DEPENDENCIES =
|
||||
@GCC_TRUE@@HAVE_STATIC_TRUE@@NATIVE_LINKER_TRUE@am__append_14 = exception_static_test
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_15 = weak_test \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ weak_undef_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ weak_undef_test_2
|
||||
@GCC_FALSE@weak_test_DEPENDENCIES =
|
||||
@NATIVE_LINKER_FALSE@weak_test_DEPENDENCIES =
|
||||
@@ -334,7 +332,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||
# Test difference between "*(a b)" and "*(a) *(b)" in input section spec.
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_39 = many_sections_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ many_sections_r_test initpri1 \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri2 initpri3a \
|
||||
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri2 \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_o_specialfile \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_compress_debug_sections_none \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_compress_debug_sections \
|
||||
@@ -348,13 +346,9 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ ver_test_12 protected_1 \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ protected_2 relro_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ relro_now_test relro_strip_test \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ relro_script_test script_test_1 \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_2 justsyms \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ justsyms_exec binary_test \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_3 \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ tls_phdrs_script_test \
|
||||
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ relro_script_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ tls_script_test script_test_11 \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_12 script_test_12i \
|
||||
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_12 \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ dynamic_list_2 \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ thin_archive_test_1 \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ thin_archive_test_2
|
||||
@@ -813,15 +807,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||
|
||||
# Test the --incremental-unchanged flag with an archive library.
|
||||
# The second link should not update the library.
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_82 = incremental_test_2 \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_3 \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4 \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_5 \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_6 \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_copy_test \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_common_test_1 \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_comdat_test_1 \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_x86_64_bnd_test
|
||||
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_82 =
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_83 = two_file_test_tmp_2.o \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_tmp_3.o \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4.base \
|
||||
@@ -1082,7 +1068,6 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest
|
||||
@NATIVE_OR_CROSS_LINKER_TRUE@ leb128_unittest$(EXEEXT) \
|
||||
@NATIVE_OR_CROSS_LINKER_TRUE@ overflow_unittest$(EXEEXT)
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_2 = icf_virtual_function_folding_test$(EXEEXT) \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ large_symbol_alignment$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ basic_test$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ basic_pic_test$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ eh_test$(EXEEXT)
|
||||
@@ -1127,7 +1112,6 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_separate_shared_21_test$(EXEEXT)
|
||||
@GCC_TRUE@@HAVE_STATIC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_11 = exception_static_test$(EXEEXT)
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_12 = weak_test$(EXEEXT) \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ weak_undef_test$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ weak_undef_test_2$(EXEEXT)
|
||||
@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_13 = weak_undef_nonpic_test$(EXEEXT)
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_14 = \
|
||||
@@ -1164,7 +1148,6 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ many_sections_r_test$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri1$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri2$(EXEEXT) \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri3a$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_o_specialfile$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_compress_debug_sections_none$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_compress_debug_sections$(EXEEXT) \
|
||||
@@ -1186,17 +1169,9 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ relro_now_test$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ relro_strip_test$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ relro_script_test$(EXEEXT) \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_1$(EXEEXT) \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_2$(EXEEXT) \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ justsyms$(EXEEXT) \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ justsyms_exec$(EXEEXT) \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ binary_test$(EXEEXT) \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_3$(EXEEXT) \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ tls_phdrs_script_test$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ tls_script_test$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_11$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_12$(EXEEXT) \
|
||||
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_12i$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ dynamic_list_2$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ thin_archive_test_1$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ thin_archive_test_2$(EXEEXT)
|
||||
@@ -1263,14 +1238,7 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ ehdr_start_test_3$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ ehdr_start_test_5$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr20976$(EXEEXT)
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_40 = incremental_test_2$(EXEEXT) \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_3$(EXEEXT) \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4$(EXEEXT) \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_5$(EXEEXT) \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_6$(EXEEXT) \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_copy_test$(EXEEXT) \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_common_test_1$(EXEEXT) \
|
||||
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_comdat_test_1$(EXEEXT) \
|
||||
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_40 = \
|
||||
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_x86_64_bnd_test$(EXEEXT)
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_41 = pr22266$(EXEEXT)
|
||||
basic_pic_test_SOURCES = basic_pic_test.c
|
||||
--- binutils.orig/ld/testsuite/ld-elf/pr22269-1.c 2018-05-31 16:14:12.648539694 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-elf/pr22269-1.c 2018-06-01 10:55:24.284977908 +0100
|
||||
@@ -5,4 +5,5 @@ _start (void)
|
||||
{
|
||||
if (&foo)
|
||||
return foo;
|
||||
+ return 0;
|
||||
}
|
||||
--- binutils.orig/ld/testsuite/ld-scripts/cross3.t 2018-05-31 16:14:12.679539354 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-scripts/cross3.t 2018-06-01 10:59:46.109996654 +0100
|
||||
@@ -6,5 +6,6 @@ SECTIONS
|
||||
.nocrossrefs : { *(.nocrossrefs) }
|
||||
.data : { *(.data) *(.data.*) *(.sdata) *(.opd) *(.toc) }
|
||||
.bss : { *(.bss) *(COMMON) }
|
||||
+ .got.plt : { *(.got) *(.plt) *(.got.plt) }
|
||||
/DISCARD/ : { *(*) }
|
||||
}
|
||||
--- binutils.orig/ld/testsuite/ld-srec/srec.exp 2018-05-31 16:14:12.570540551 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-srec/srec.exp 2018-06-01 11:01:15.443979458 +0100
|
||||
@@ -19,6 +19,14 @@
|
||||
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
# MA 02110-1301, USA.
|
||||
|
||||
+if [istarget x86_64-*-*] {
|
||||
+ # The S-record tests are failing for some configurations
|
||||
+ # of x86_64-linux builds, but not others. Not worth
|
||||
+ # investigating however as S-record conversion can always
|
||||
+ # be done outside of the linker.
|
||||
+ return
|
||||
+}
|
||||
+
|
||||
# Get the offset from an S-record line to the start of the data.
|
||||
|
||||
proc srec_off { l } {
|
||||
--- binutils.orig/ld/testsuite/ld-x86-64/pr14207.d 2018-05-31 16:14:12.614540068 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/pr14207.d 2018-06-01 11:02:02.438444359 +0100
|
||||
@@ -13,7 +13,7 @@ Program Headers:
|
||||
LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x0001c8 0x0001c8 R 0x200000
|
||||
LOAD 0x000b.8 0x0000000000200b.8 0x0000000000200b.8 0x0004.0 0x000c.8 RW 0x200000
|
||||
DYNAMIC 0x000b.0 0x0000000000200b.0 0x0000000000200b.0 0x0001.0 0x0001.0 RW 0x8
|
||||
- GNU_RELRO 0x000b.8 0x0000000000200b.8 0x0000000000200b.8 0x0004.8 0x0004.8 R 0x1
|
||||
+ GNU_RELRO 0x000b.8 0x0000000000200b.8 0x0000000000200b.8 0x0004.. 0x0004.8 R 0x1
|
||||
|
||||
Section to Segment mapping:
|
||||
Segment Sections...
|
||||
--- binutils.orig/ld/testsuite/ld-x86-64/pr22001-1b.err 2018-05-31 16:14:12.621539991 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/pr22001-1b.err 2018-06-01 11:02:58.554805393 +0100
|
||||
@@ -1,2 +1,2 @@
|
||||
-.*relocation R_X86_64_32S against symbol `copy' can not be used when making a P(D|I)E object; recompile with -fPIC
|
||||
+.*relocation R_X86_64_(PC32|32S) against symbol `copy' can not be used when making a P(D|I)E object; recompile with -fPIC
|
||||
#...
|
||||
--- binutils.orig/ld/testsuite/ld-x86-64/pr21997-1b.err 2018-05-31 16:14:12.620540002 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/pr21997-1b.err 2018-06-01 11:04:01.535088273 +0100
|
||||
@@ -1,2 +1,2 @@
|
||||
-.*relocation R_X86_64_32S against protected symbol `protected' can not be used when making a P(D|I)E object; recompile with -fPIC
|
||||
+.*relocation R_X86_64_(PC32|32S) against protected symbol `protected' can not be used when making a P(D|I)E object; recompile with -fPIC
|
||||
#...
|
||||
--- binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp 2018-05-31 16:14:12.617540035 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/x86-64.exp 2018-06-01 11:05:46.005912951 +0100
|
||||
@@ -1792,7 +1792,7 @@ if { [isnative] && [which $CC] != 0 } {
|
||||
}
|
||||
}
|
||||
|
||||
- undefined_weak "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS"
|
||||
+ # undefined_weak "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS"
|
||||
undefined_weak "-fPIE" ""
|
||||
undefined_weak "-fPIE" "-pie"
|
||||
undefined_weak "-fPIE" "-Wl,-z,nodynamic-undefined-weak"
|
||||
--- binutils.orig/ld/testsuite/ld-size/size-7a.c 2018-05-31 16:14:12.569540562 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-size/size-7a.c 2018-06-01 11:06:44.106265741 +0100
|
||||
@@ -1,11 +1,12 @@
|
||||
#include <stdio.h>
|
||||
|
||||
-extern char size_of_bar asm ("bar@SIZE");
|
||||
+extern char size_of_bar asm ("bar@SIZE");
|
||||
+char * bar_size = & size_of_bar;
|
||||
|
||||
int
|
||||
-main ()
|
||||
+main (void)
|
||||
{
|
||||
- if (10 == (long) &size_of_bar)
|
||||
+ if (10L == (long) bar_size)
|
||||
printf ("OK\n");
|
||||
|
||||
return 0;
|
||||
--- binutils.orig/ld/testsuite/ld-size/size-8a.c 2018-05-31 16:14:12.568540573 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-size/size-8a.c 2018-06-01 11:07:54.926476839 +0100
|
||||
@@ -1,14 +1,15 @@
|
||||
#include <stdio.h>
|
||||
|
||||
extern __thread char bar[];
|
||||
-extern char size_of_bar asm ("bar@SIZE");
|
||||
-extern void set_bar (int, int);
|
||||
+extern char size_of_bar asm ("bar@SIZE");
|
||||
+extern void set_bar (int, int);
|
||||
+char * bar_size = & size_of_bar;
|
||||
|
||||
int
|
||||
-main ()
|
||||
+main (void)
|
||||
{
|
||||
set_bar (1, 20);
|
||||
- if (10 == (long) &size_of_bar && bar[1] == 20)
|
||||
+ if (10L == (long) bar_size && bar[1] == 20)
|
||||
printf ("OK\n");
|
||||
|
||||
return 0;
|
||||
--- binutils.orig/ld/testsuite/ld-size/size-4b.c 2018-05-31 16:14:12.569540562 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-size/size-4b.c 2018-06-01 11:09:00.979741038 +0100
|
||||
@@ -2,7 +2,7 @@ extern char bar[];
|
||||
extern char size_of_bar asm ("bar@SIZE");
|
||||
|
||||
char *bar_size_1 = &size_of_bar;
|
||||
-static char *bar_size_2 = &size_of_bar;
|
||||
+char *bar_size_2 = &size_of_bar;
|
||||
|
||||
char *
|
||||
bar_size1 (void)
|
||||
@@ -20,7 +20,7 @@ extern char foo[];
|
||||
extern char size_of_foo asm ("foo@SIZE");
|
||||
|
||||
char *foo_size_1 = &size_of_foo;
|
||||
-static char *foo_size_2 = &size_of_foo;
|
||||
+char *foo_size_2 = &size_of_foo;
|
||||
|
||||
char *
|
||||
foo_size1 (void)
|
||||
--- binutils.orig/ld/testsuite/ld-size/size-5b.c 2018-05-31 16:14:12.569540562 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-size/size-5b.c 2018-06-01 11:09:42.134282596 +0100
|
||||
@@ -2,7 +2,7 @@ extern __thread char bar[];
|
||||
extern char size_of_bar asm ("bar@SIZE");
|
||||
|
||||
char *bar_size_1 = &size_of_bar;
|
||||
-static char *bar_size_2 = &size_of_bar;
|
||||
+char *bar_size_2 = &size_of_bar;
|
||||
|
||||
char *
|
||||
bar_size1 (void)
|
||||
@@ -21,7 +21,7 @@ extern __thread char foo[];
|
||||
extern char size_of_foo asm ("foo@SIZE");
|
||||
|
||||
char *foo_size_1 = &size_of_foo;
|
||||
-static char *foo_size_2 = &size_of_foo;
|
||||
+char *foo_size_2 = &size_of_foo;
|
||||
|
||||
char *
|
||||
foo_size1 (void)
|
||||
--- binutils.orig/ld/testsuite/ld-size/size-6a.c 2018-05-31 16:14:12.568540573 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-size/size-6a.c 2018-06-01 11:11:42.478942015 +0100
|
||||
@@ -1,14 +1,15 @@
|
||||
#include <stdio.h>
|
||||
|
||||
-extern char bar[];
|
||||
-extern char size_of_bar asm ("bar@SIZE");
|
||||
-extern void set_bar (int, int);
|
||||
+extern char bar[];
|
||||
+extern char size_of_bar asm ("bar@SIZE");
|
||||
+extern void set_bar (int, int);
|
||||
+char * bar_size = & size_of_bar;
|
||||
|
||||
int
|
||||
-main ()
|
||||
+main (void)
|
||||
{
|
||||
set_bar (1, 20);
|
||||
- if (10 == (long) &size_of_bar && bar[1] == 20)
|
||||
+ if (10 == (long) bar_size && bar[1] == 20)
|
||||
printf ("OK\n");
|
||||
|
||||
return 0;
|
||||
--- binutils.orig/ld/testsuite/ld-s390/tlspic_64.dd 2018-05-31 16:14:12.579540452 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-s390/tlspic_64.dd 2018-06-01 13:20:16.509595466 +0100
|
||||
@@ -78,7 +78,7 @@ Disassembly of section .text:
|
||||
+[0-9a-f]+: 00 00 00 60 .long 0x00000060
|
||||
# function prolog
|
||||
+[0-9a-f]+: b9 04 00 ef lgr %r14,%r15
|
||||
- +[0-9a-f]+: c0 c0 [0-9a-f ]+ larl %r12,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_>
|
||||
+ +[0-9a-f]+: c0 c0 [0-9a-f ]+ larl %r12,[0-9a-f]+ <.*>
|
||||
+[0-9a-f]+: a7 fb ff 60 aghi %r15,-160
|
||||
+[0-9a-f]+: e3 e0 e0 00 00 24 stg %r14,0\(%r14\)
|
||||
# extract TCB
|
||||
--- binutils.orig/ld/testsuite/ld-srec/srec.exp 2018-05-31 16:14:12.570540551 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-srec/srec.exp 2018-06-01 13:24:35.262758291 +0100
|
||||
@@ -420,6 +420,8 @@ setup_xfail "bfin-*-linux-uclibc"
|
||||
# generate the format if need be).
|
||||
setup_xfail "tile*-*-*"
|
||||
|
||||
+setup_xfail "s390*-*-*"
|
||||
+
|
||||
run_srec_test $test1 "tmpdir/sr1.o tmpdir/sr2.o"
|
||||
|
||||
# Now try linking a C++ program with global constructors and
|
||||
--- binutils.orig/ld/testsuite/ld-elf/tls.exp 2018-05-31 16:14:12.665539507 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-elf/tls.exp 2018-06-01 14:17:13.223211181 +0100
|
||||
@@ -37,15 +37,18 @@ if { [which $CC] == 0 } {
|
||||
return
|
||||
}
|
||||
|
||||
-run_ld_link_tests [list \
|
||||
- [list \
|
||||
- "Build pr22263-1" \
|
||||
- "-pie -e _start -z text" \
|
||||
- "" \
|
||||
- "" \
|
||||
- { pr22263-1a.c pr22263-1b.c } \
|
||||
- {{readelf -r pr22263-1.rd}} \
|
||||
- "pr22263-1" \
|
||||
- "-fPIE -O2" \
|
||||
- ] \
|
||||
-]
|
||||
+# The s390x system compiler miscompiles these tests.
|
||||
+if { ! [istarget s390x-*-*] } {
|
||||
+ run_ld_link_tests [list \
|
||||
+ [list \
|
||||
+ "Build pr22263-1" \
|
||||
+ "-pie -e _start -z text" \
|
||||
+ "" \
|
||||
+ "" \
|
||||
+ { pr22263-1a.c pr22263-1b.c } \
|
||||
+ {{readelf -r pr22263-1.rd}} \
|
||||
+ "pr22263-1" \
|
||||
+ "-fPIE -O2" \
|
||||
+ ] \
|
||||
+ ]
|
||||
+}
|
||||
--- binutils.orig/ld/testsuite/ld-elf/indirect.exp 2018-05-31 16:14:12.649539683 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-elf/indirect.exp 2018-06-01 14:32:22.949232924 +0100
|
||||
@@ -156,12 +156,26 @@ set run_tests {
|
||||
{"Run with libindirect4c.so 4"
|
||||
"-Wl,--no-as-needed tmpdir/libindirect4c.so tmpdir/indirect4b.o tmpdir/indirect4a.o" ""
|
||||
{dummy.c} "indirect4d" "indirect4.out"}
|
||||
- {"Run indirect5 1"
|
||||
- "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libindirect5.so" ""
|
||||
- {indirect5a.c} "indirect5a" "indirect5.out" "$NOPIE_CFLAGS"}
|
||||
- {"Run indirect5 2"
|
||||
- "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/indirect5a.o tmpdir/libindirect5.so" ""
|
||||
- {dummy.c} "indirect5b" "indirect5.out" "$NOPIE_CFLAGS"}
|
||||
+}
|
||||
+
|
||||
+run_ld_link_exec_tests $run_tests
|
||||
+
|
||||
+# The s390x system compiler miscompiles these tests.
|
||||
+if { ! [istarget s390x-*-*] } {
|
||||
+
|
||||
+ set run_tests {
|
||||
+ {"Run indirect5 1"
|
||||
+ "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libindirect5.so" ""
|
||||
+ {indirect5a.c} "indirect5a" "indirect5.out" "$NOPIE_CFLAGS"}
|
||||
+ {"Run indirect5 2"
|
||||
+ "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/indirect5a.o tmpdir/libindirect5.so" ""
|
||||
+ {dummy.c} "indirect5b" "indirect5.out" "$NOPIE_CFLAGS"}
|
||||
+ }
|
||||
+
|
||||
+ run_ld_link_exec_tests $run_tests
|
||||
+}
|
||||
+
|
||||
+set run_tests {
|
||||
{"Run indirect6 1"
|
||||
"$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libindirect5.so" ""
|
||||
{indirect6a.c} "indirect6a" "indirect5.out" "$NOPIE_CFLAGS"}
|
||||
@@ -213,12 +227,15 @@ proc check_dynamic_syms { test } {
|
||||
return 1
|
||||
}
|
||||
|
||||
-foreach t [list indirect5a indirect5b indirect6a indirect6b] {
|
||||
- set testname [concat $t "dynsym"]
|
||||
- if { [check_dynamic_syms tmpdir/$t] } {
|
||||
- pass $testname
|
||||
- } else {
|
||||
- fail $testname
|
||||
+# The s390x system compiler miscompiles indirect5 tests.
|
||||
+if { ! [istarget s390x-*-*] } {
|
||||
+ foreach t [list indirect5a indirect5b indirect6a indirect6b] {
|
||||
+ set testname [concat $t "dynsym"]
|
||||
+ if { [check_dynamic_syms tmpdir/$t] } {
|
||||
+ pass $testname
|
||||
+ } else {
|
||||
+ fail $testname
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -229,13 +246,22 @@ if { ! [string match "" $exec_output] }
|
||||
return
|
||||
}
|
||||
|
||||
+
|
||||
+# The s390x system compiler miscompiles these tests.
|
||||
+if { ! [istarget s390x-*-*] } {
|
||||
+ set pie_tests {
|
||||
+ {"Run indirect5 3"
|
||||
+ "-pie -Wl,--no-as-needed tmpdir/libindirect5.so" ""
|
||||
+ {indirect5a.c} "indirect5c" "indirect5.out" "-fPIE"}
|
||||
+ {"Run indirect5 4"
|
||||
+ "-pie -Wl,--no-as-needed tmpdir/indirect5a.o tmpdir/libindirect5.so" ""
|
||||
+ {dummy.c} "indirect5d" "indirect5.out" "-fPIE"}
|
||||
+ }
|
||||
+
|
||||
+ run_ld_link_exec_tests $pie_tests
|
||||
+}
|
||||
+
|
||||
set pie_tests {
|
||||
- {"Run indirect5 3"
|
||||
- "-pie -Wl,--no-as-needed tmpdir/libindirect5.so" ""
|
||||
- {indirect5a.c} "indirect5c" "indirect5.out" "-fPIE"}
|
||||
- {"Run indirect5 4"
|
||||
- "-pie -Wl,--no-as-needed tmpdir/indirect5a.o tmpdir/libindirect5.so" ""
|
||||
- {dummy.c} "indirect5d" "indirect5.out" "-fPIE"}
|
||||
{"Run indirect6 3"
|
||||
"-pie -Wl,--no-as-needed tmpdir/libindirect5.so" ""
|
||||
{indirect6a.c} "indirect6c" "indirect5.out" "-fPIE"}
|
||||
@@ -246,11 +272,14 @@ set pie_tests {
|
||||
|
||||
run_ld_link_exec_tests $pie_tests
|
||||
|
||||
-foreach t [list indirect5c indirect5d indirect6c indirect6d] {
|
||||
- set testname [concat $t "dynsym"]
|
||||
- if { [check_dynamic_syms tmpdir/$t] } {
|
||||
- pass $testname
|
||||
- } else {
|
||||
- fail $testname
|
||||
+# The s390x system compiler miscompiles indirect5 tests.
|
||||
+if { ! [istarget s390x-*-*] } {
|
||||
+ foreach t [list indirect5c indirect5d indirect6c indirect6d] {
|
||||
+ set testname [concat $t "dynsym"]
|
||||
+ if { [check_dynamic_syms tmpdir/$t] } {
|
||||
+ pass $testname
|
||||
+ } else {
|
||||
+ fail $testname
|
||||
+ }
|
||||
}
|
||||
}
|
||||
--- binutils.orig/ld/testsuite/ld-elfvers/vers.exp 2018-05-31 16:14:12.572540529 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-elfvers/vers.exp 2018-06-01 15:23:36.518815276 +0100
|
||||
@@ -938,6 +938,7 @@ if [string match "yes" $pic] then {
|
||||
build_exec "vers23" vers23.c vers23 "-Wl,--no-as-needed tmpdir/vers23a.so tmpdir/vers23b.o tmpdir/vers23b.so" "" vers23.ver vers23.dsym ""
|
||||
}
|
||||
|
||||
+if {! [istarget ppc64*-*-*] && ![istarget "powerpc*-*-linux*"] } {
|
||||
# Test .symver x,x@VERS.0
|
||||
set as_pic_flags ""
|
||||
if [istarget sparc*-*-*] {
|
||||
@@ -955,6 +956,7 @@ run_ld_link_tests [list "\"vers24c\"
|
||||
\"-shared --version-script $srcdir/$subdir/vers24.map\" \"\"
|
||||
\"$as_pic_flags $as_options\" {vers24c.c} { { readelf -Wrs vers24.rd } }
|
||||
\"libvers24c.so\" \"-fpic\""]
|
||||
+}
|
||||
|
||||
# Test versioned definition vs. normal definition in different files.
|
||||
if [string match "yes" $pic] then {
|
||||
--- binutils.orig/ld/testsuite/ld-ifunc/ifunc.exp 2018-05-31 16:14:12.573540519 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-ifunc/ifunc.exp 2018-06-01 15:26:52.020691739 +0100
|
||||
@@ -284,11 +284,14 @@ if {! [check_osabi tmpdir/static_nonifun
|
||||
# The linked ifunc using executables and the shared library containing
|
||||
# ifunc should contain an IFUNC symbol. The non-ifunc using executable
|
||||
# should not.
|
||||
-
|
||||
+if { ![istarget "ppc*-*-*"] && ![istarget "powerpc*-*-linux*"] } {
|
||||
if {[contains_ifunc_symbol tmpdir/libshared_ifunc.so] != 1} {
|
||||
fail "Shared libraries containing ifunc does not contain an IFUNC symbol"
|
||||
set fails [expr $fails + 1]
|
||||
}
|
||||
+}
|
||||
+
|
||||
+if { ![istarget "ppc*-*-*"] && ![istarget "powerpc*-*-linux*"] } {
|
||||
if {[contains_ifunc_symbol tmpdir/local_prog] != 1} {
|
||||
fail "Local ifunc-using executable does not contain an IFUNC symbol"
|
||||
set fails [expr $fails + 1]
|
||||
@@ -297,6 +300,7 @@ if {[contains_ifunc_symbol tmpdir/static
|
||||
fail "Static ifunc-using executable does not contain an IFUNC symbol"
|
||||
set fails [expr $fails + 1]
|
||||
}
|
||||
+}
|
||||
if {[contains_ifunc_symbol tmpdir/dynamic_prog] != 0} {
|
||||
fail "Dynamic ifunc-using executable contains an IFUNC symbol"
|
||||
set fails [expr $fails + 1]
|
||||
--- binutils.orig/ld/testsuite/ld-plugin/plugin.exp 2018-05-31 16:14:12.580540442 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-plugin/plugin.exp 2018-06-01 15:29:44.048823172 +0100
|
||||
@@ -293,12 +293,14 @@ if { !$can_compile || $failed_compile }
|
||||
|
||||
run_ld_link_tests $plugin_tests
|
||||
|
||||
+if { ! [istarget "ppc*-*-*"] && ![istarget "powerpc*-*-linux*"] } {
|
||||
if { [is_elf_format] \
|
||||
&& [ld_compile "$CC $CFLAGS" $srcdir/$subdir/func1p.c tmpdir/func1p.o] \
|
||||
&& [ld_compile "$CC $CFLAGS" $srcdir/$subdir/func2i.c tmpdir/func2i.o] \
|
||||
&& [ld_compile "$CC $CFLAGS" $srcdir/$subdir/func3h.c tmpdir/func3h.o] } {
|
||||
run_ld_link_tests $plugin_extra_elf_tests
|
||||
}
|
||||
+}
|
||||
|
||||
if {![ar_simple_create $ar "" "tmpdir/libtext.a" "tmpdir/text.o"] || \
|
||||
![ar_simple_create $ar "" "tmpdir/libempty.a" ""]} {
|
||||
diff -rup binutils.orig/ld/testsuite/ld-elfvers/vers24.rd binutils-2.30/ld/testsuite/ld-elfvers/vers24.rd
|
||||
--- binutils.orig/ld/testsuite/ld-elfvers/vers24.rd 2018-09-05 09:45:44.013108697 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-elfvers/vers24.rd 2018-09-05 12:06:17.287425232 +0100
|
||||
@@ -7,9 +7,9 @@ Symbol table '.dynsym' contains [0-9]+ e
|
||||
# And ensure the dynamic symbol table contains at least x@VERS.0
|
||||
# and foo@@VERS.0 symbols
|
||||
#...
|
||||
- +[0-9]+: [0-9a-f]+ +(4 +OBJECT +GLOBAL +DEFAULT +[0-9]+ _?x|[0-9]+ +FUNC +GLOBAL +DEFAULT .* [0-9]+ _?foo@)@VERS\.0
|
||||
+ +[0-9]+: [0-9a-f]+ +(4 +OBJECT +GLOBAL +DEFAULT +[0-9]+ _?x|[0-9]+ +FUNC +GLOBAL +DEFAULT .* [0-9]+ _?foo@)@VERS\.0.*
|
||||
#...
|
||||
- +[0-9]+: [0-9a-f]+ +(4 +OBJECT +GLOBAL +DEFAULT +[0-9]+ _?x|[0-9]+ +FUNC +GLOBAL +DEFAULT .* [0-9]+ _?foo@)@VERS\.0
|
||||
+ +[0-9]+: [0-9a-f]+ +(4 +OBJECT +GLOBAL +DEFAULT +[0-9]+ _?x|[0-9]+ +FUNC +GLOBAL +DEFAULT .* [0-9]+ _?foo@)@VERS\.0.*
|
||||
#...
|
||||
Symbol table '.symtab' contains [0-9]+ entries:
|
||||
#pass
|
||||
diff -rup binutils.orig/ld/testsuite/ld-plugin/plugin-12.d binutils-2.30/ld/testsuite/ld-plugin/plugin-12.d
|
||||
--- binutils.orig/ld/testsuite/ld-plugin/plugin-12.d 2018-09-05 09:45:44.025108586 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-plugin/plugin-12.d 2018-09-05 11:50:14.911718048 +0100
|
||||
@@ -1,6 +1,6 @@
|
||||
#...
|
||||
-.*: symbol `func' definition: 0, visibility: 0, resolution: 2
|
||||
-.*: symbol `func1' definition: 0, visibility: 1, resolution: 3
|
||||
-.*: symbol `func2' definition: 0, visibility: 2, resolution: 3
|
||||
-.*: symbol `func3' definition: 0, visibility: 3, resolution: 3
|
||||
+.*: symbol `.*unc' definition: 0, visibility: 0, resolution: 2
|
||||
+.*: symbol `.*unc1' definition: 0, visibility: 1, resolution: 3
|
||||
+.*: symbol `.*unc2' definition: 0, visibility: 2, resolution: 3
|
||||
+.*: symbol `.*unc3' definition: 0, visibility: 3, resolution: 3
|
||||
#pass
|
||||
diff -rup binutils.orig/ld/testsuite/ld-plugin/plugin.exp binutils-2.30/ld/testsuite/ld-plugin/plugin.exp
|
||||
--- binutils.orig/ld/testsuite/ld-plugin/plugin.exp 2018-09-05 09:45:44.023108605 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-plugin/plugin.exp 2018-09-05 11:18:53.997202105 +0100
|
||||
@@ -118,6 +118,12 @@ if { $can_compile && !$failed_compile }
|
||||
}
|
||||
}
|
||||
|
||||
+# I do not know why, but the underscore prefix test is going
|
||||
+# wrong on ppc64le targets. So override it here.
|
||||
+if { [istarget powerpc*-*-linux*] || [istarget x86_64*-*-linux*] } {
|
||||
+ set _ ""
|
||||
+}
|
||||
+
|
||||
set testobjfiles "tmpdir/main.o tmpdir/func.o tmpdir/text.o"
|
||||
set testobjfiles_notext "tmpdir/main.o tmpdir/func.o"
|
||||
set testsrcfiles "tmpdir/main.o $srcdir/$subdir/func.c tmpdir/text.o"
|
||||
diff -rup binutils.orig/ld/testsuite/ld-x86-64/plt-main-bnd.dd binutils-2.30/ld/testsuite/ld-x86-64/plt-main-bnd.dd
|
||||
--- binutils.orig/ld/testsuite/ld-x86-64/plt-main-bnd.dd 2018-09-05 14:08:22.983184999 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/plt-main-bnd.dd 2018-09-05 16:19:36.033431902 +0100
|
||||
@@ -2,6 +2,6 @@
|
||||
Disassembly of section .plt.got:
|
||||
|
||||
[a-f0-9]+ <[a-z_]+@plt>:
|
||||
+#...
|
||||
[ ]*[a-f0-9]+: f2 ff 25 .. .. 20 00 bnd jmpq \*0x20....\(%rip\) # ...... <.*>
|
||||
-[ ]*[a-f0-9]+: 90 nop
|
||||
#pass
|
||||
diff -rup binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp binutils-2.30/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
--- binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp 2018-09-05 14:08:22.970185099 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/x86-64.exp 2018-09-05 16:22:30.064079063 +0100
|
||||
@@ -671,12 +671,6 @@ if { [isnative] && [which $CC] != 0 } {
|
||||
return
|
||||
}
|
||||
|
||||
- run_ld_link_tests {
|
||||
- {"X32 DSO from x86-64 object"
|
||||
- "-shared -melf32_x86_64 tmpdir/simple-x32.o" "" "--x32"
|
||||
- {dummy.s} {{readelf {-s --wide} x86-64-x32.rd}} "x86-64-x32"}
|
||||
- }
|
||||
-
|
||||
run_cc_link_tests [list \
|
||||
[list \
|
||||
"Build plt-lib.so" \
|
555
SOURCES/binutils-gas-build-notes.patch
Normal file
555
SOURCES/binutils-gas-build-notes.patch
Normal file
@ -0,0 +1,555 @@
|
||||
diff -rup binutils.orig/binutils/readelf.c binutils-2.30/binutils/readelf.c
|
||||
--- binutils.orig/binutils/readelf.c 2018-04-26 15:14:17.220464639 +0100
|
||||
+++ binutils-2.30/binutils/readelf.c 2018-04-26 15:14:31.927287474 +0100
|
||||
@@ -12294,7 +12294,8 @@ is_32bit_abs_reloc (Filedata * filedata,
|
||||
case EM_OR1K:
|
||||
return reloc_type == 1; /* R_OR1K_32. */
|
||||
case EM_PARISC:
|
||||
- return (reloc_type == 1 /* R_PARISC_DIR32. */
|
||||
+ return (reloc_type == 1 /* R_PARISC_DIR32. */
|
||||
+ || reloc_type == 2 /* R_PARISC_DIR21L. */
|
||||
|| reloc_type == 41); /* R_PARISC_SECREL32. */
|
||||
case EM_PJ:
|
||||
case EM_PJ_OLD:
|
||||
Only in binutils-2.30/binutils: readelf.c.orig
|
||||
diff -rup binutils.orig/binutils/testsuite/binutils-all/objcopy.exp binutils-2.30/binutils/testsuite/binutils-all/objcopy.exp
|
||||
--- binutils.orig/binutils/testsuite/binutils-all/objcopy.exp 2018-04-26 15:14:17.215464699 +0100
|
||||
+++ binutils-2.30/binutils/testsuite/binutils-all/objcopy.exp 2018-04-26 15:14:31.927287474 +0100
|
||||
@@ -1062,6 +1062,7 @@ if [is_elf_format] {
|
||||
run_dump_test "note-3-32"
|
||||
run_dump_test "note-4-32"
|
||||
}
|
||||
+ run_dump_test "note-5"
|
||||
}
|
||||
|
||||
run_dump_test "copy-2"
|
||||
Only in binutils-2.30/binutils/testsuite/binutils-all: objcopy.exp.orig
|
||||
diff -rup binutils.orig/gas/as.c binutils-2.30/gas/as.c
|
||||
--- binutils.orig/gas/as.c 2018-04-26 15:14:17.646459507 +0100
|
||||
+++ binutils-2.30/gas/as.c 2018-04-26 15:14:31.927287474 +0100
|
||||
@@ -97,6 +97,7 @@ int verbose = 0;
|
||||
|
||||
#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
|
||||
int flag_use_elf_stt_common = DEFAULT_GENERATE_ELF_STT_COMMON;
|
||||
+bfd_boolean flag_generate_build_notes = DEFAULT_GENERATE_BUILD_NOTES;
|
||||
#endif
|
||||
|
||||
/* Keep the output file. */
|
||||
@@ -304,8 +305,19 @@ Options:\n\
|
||||
generate ELF common symbols with STT_COMMON type\n"));
|
||||
fprintf (stream, _("\
|
||||
--sectname-subst enable section name substitution sequences\n"));
|
||||
+
|
||||
+ fprintf (stream, _("\
|
||||
+ --generate-missing-build-notes=[no|yes] "));
|
||||
+#if DEFAULT_GENERATE_BUILD_NOTES
|
||||
+ fprintf (stream, _("(default: yes)\n"));
|
||||
+#else
|
||||
+ fprintf (stream, _("(default: no)\n"));
|
||||
#endif
|
||||
fprintf (stream, _("\
|
||||
+ generate GNU Build notes if none are present in the input\n"));
|
||||
+#endif /* OBJ_ELF */
|
||||
+
|
||||
+ fprintf (stream, _("\
|
||||
-f skip whitespace and comment preprocessing\n"));
|
||||
fprintf (stream, _("\
|
||||
-g --gen-debug generate debugging information\n"));
|
||||
@@ -470,6 +482,7 @@ parse_args (int * pargc, char *** pargv)
|
||||
OPTION_NOEXECSTACK,
|
||||
OPTION_SIZE_CHECK,
|
||||
OPTION_ELF_STT_COMMON,
|
||||
+ OPTION_ELF_BUILD_NOTES,
|
||||
OPTION_SECTNAME_SUBST,
|
||||
OPTION_ALTERNATE,
|
||||
OPTION_AL,
|
||||
@@ -508,6 +521,7 @@ parse_args (int * pargc, char *** pargv)
|
||||
,{"size-check", required_argument, NULL, OPTION_SIZE_CHECK}
|
||||
,{"elf-stt-common", required_argument, NULL, OPTION_ELF_STT_COMMON}
|
||||
,{"sectname-subst", no_argument, NULL, OPTION_SECTNAME_SUBST}
|
||||
+ ,{"generate-missing-build-notes", required_argument, NULL, OPTION_ELF_BUILD_NOTES}
|
||||
#endif
|
||||
,{"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL}
|
||||
,{"gdwarf-2", no_argument, NULL, OPTION_GDWARF2}
|
||||
@@ -900,7 +914,19 @@ This program has absolutely no warranty.
|
||||
case OPTION_SECTNAME_SUBST:
|
||||
flag_sectname_subst = 1;
|
||||
break;
|
||||
-#endif
|
||||
+
|
||||
+ case OPTION_ELF_BUILD_NOTES:
|
||||
+ if (strcasecmp (optarg, "no") == 0)
|
||||
+ flag_generate_build_notes = FALSE;
|
||||
+ else if (strcasecmp (optarg, "yes") == 0)
|
||||
+ flag_generate_build_notes = TRUE;
|
||||
+ else
|
||||
+ as_fatal (_("Invalid --generate-missing-build-notes option: `%s'"),
|
||||
+ optarg);
|
||||
+ break;
|
||||
+
|
||||
+#endif /* OBJ_ELF */
|
||||
+
|
||||
case 'Z':
|
||||
flag_always_generate_output = 1;
|
||||
break;
|
||||
diff -rup binutils.orig/gas/as.h binutils-2.30/gas/as.h
|
||||
--- binutils.orig/gas/as.h 2018-04-26 15:14:17.654459410 +0100
|
||||
+++ binutils-2.30/gas/as.h 2018-04-26 15:14:31.927287474 +0100
|
||||
@@ -585,6 +585,10 @@ COMMON int flag_allow_nonconst_size;
|
||||
/* If we should generate ELF common symbols with the STT_COMMON type. */
|
||||
extern int flag_use_elf_stt_common;
|
||||
|
||||
+/* TRUE iff GNU Build attribute notes should
|
||||
+ be generated if none are in the input files. */
|
||||
+extern bfd_boolean flag_generate_build_notes;
|
||||
+
|
||||
/* If section name substitution sequences should be honored */
|
||||
COMMON int flag_sectname_subst;
|
||||
#endif
|
||||
Only in binutils-2.30/gas: as.h.orig
|
||||
diff -rup binutils.orig/gas/config.in binutils-2.30/gas/config.in
|
||||
--- binutils.orig/gas/config.in 2018-04-26 15:14:17.645459519 +0100
|
||||
+++ binutils-2.30/gas/config.in 2018-04-26 15:14:31.927287474 +0100
|
||||
@@ -39,6 +39,10 @@
|
||||
/* Define if you want compressed debug sections by default. */
|
||||
#undef DEFAULT_FLAG_COMPRESS_DEBUG
|
||||
|
||||
+/* Define to 1 if you want to generate GNU Build attribute notes by default,
|
||||
+ if none are contained in the input. */
|
||||
+#undef DEFAULT_GENERATE_BUILD_NOTES
|
||||
+
|
||||
/* Define to 1 if you want to generate ELF common symbols with the STT_COMMON
|
||||
type by default. */
|
||||
#undef DEFAULT_GENERATE_ELF_STT_COMMON
|
||||
diff -rup binutils.orig/gas/configure binutils-2.30/gas/configure
|
||||
--- binutils.orig/gas/configure 2018-04-26 15:14:17.645459519 +0100
|
||||
+++ binutils-2.30/gas/configure 2018-04-26 15:14:31.928287462 +0100
|
||||
@@ -771,6 +771,7 @@ enable_checking
|
||||
enable_compressed_debug_sections
|
||||
enable_x86_relax_relocations
|
||||
enable_elf_stt_common
|
||||
+enable_generate_build_notes
|
||||
enable_werror
|
||||
enable_build_warnings
|
||||
with_cpu
|
||||
@@ -1426,6 +1427,9 @@ Optional Features:
|
||||
generate x86 relax relocations by default
|
||||
--enable-elf-stt-common generate ELF common symbols with STT_COMMON type by
|
||||
default
|
||||
+ --enable-generate-build-notes
|
||||
+ generate GNU Build notes if none are provided by the
|
||||
+ input
|
||||
--enable-werror treat compile warnings as errors
|
||||
--enable-build-warnings enable build-time compiler warnings
|
||||
--disable-nls do not use Native Language Support
|
||||
@@ -11011,7 +11015,7 @@ else
|
||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
-#line 10990 "configure"
|
||||
+#line 10994 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
@@ -11117,7 +11121,7 @@ else
|
||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
-#line 11096 "configure"
|
||||
+#line 11100 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
@@ -11771,6 +11775,20 @@ if test "${enable_elf_stt_common+set}" =
|
||||
esac
|
||||
fi
|
||||
|
||||
+
|
||||
+# Decide if the ELF assembler should default to generating
|
||||
+# GNU Build notes if none are provided by the input.
|
||||
+ac_default_generate_build_notes=0
|
||||
+# Provide a configuration option to override the default.
|
||||
+# Check whether --enable-generate_build_notes was given.
|
||||
+if test "${enable_generate_build_notes+set}" = set; then :
|
||||
+ enableval=$enable_generate_build_notes; case "${enableval}" in
|
||||
+ yes) ac_default_generate_build_notes=1 ;;
|
||||
+ no) ac_default_generate_build_notes=0 ;;
|
||||
+esac
|
||||
+fi
|
||||
+
|
||||
+
|
||||
using_cgen=no
|
||||
|
||||
|
||||
@@ -12713,6 +12731,12 @@ cat >>confdefs.h <<_ACEOF
|
||||
_ACEOF
|
||||
|
||||
|
||||
+
|
||||
+cat >>confdefs.h <<_ACEOF
|
||||
+#define DEFAULT_GENERATE_BUILD_NOTES $ac_default_generate_build_notes
|
||||
+_ACEOF
|
||||
+
|
||||
+
|
||||
if test x$ac_default_compressed_debug_sections = xyes ; then
|
||||
|
||||
$as_echo "#define DEFAULT_FLAG_COMPRESS_DEBUG 1" >>confdefs.h
|
||||
diff -rup binutils.orig/gas/configure.ac binutils-2.30/gas/configure.ac
|
||||
--- binutils.orig/gas/configure.ac 2018-04-26 15:14:17.645459519 +0100
|
||||
+++ binutils-2.30/gas/configure.ac 2018-04-26 15:14:31.928287462 +0100
|
||||
@@ -100,6 +100,20 @@ AC_ARG_ENABLE(elf_stt_common,
|
||||
yes) ac_default_elf_stt_common=1 ;;
|
||||
esac])dnl
|
||||
|
||||
+
|
||||
+# Decide if the ELF assembler should default to generating
|
||||
+# GNU Build notes if none are provided by the input.
|
||||
+ac_default_generate_build_notes=0
|
||||
+# Provide a configuration option to override the default.
|
||||
+AC_ARG_ENABLE(generate_build_notes,
|
||||
+ AS_HELP_STRING([--enable-generate-build-notes],
|
||||
+ [generate GNU Build notes if none are provided by the input]),
|
||||
+[case "${enableval}" in
|
||||
+ yes) ac_default_generate_build_notes=1 ;;
|
||||
+ no) ac_default_generate_build_notes=0 ;;
|
||||
+esac])dnl
|
||||
+
|
||||
+
|
||||
using_cgen=no
|
||||
|
||||
AM_BINUTILS_WARNINGS
|
||||
@@ -610,6 +624,11 @@ AC_DEFINE_UNQUOTED(DEFAULT_GENERATE_ELF_
|
||||
[Define to 1 if you want to generate ELF common symbols with the
|
||||
STT_COMMON type by default.])
|
||||
|
||||
+AC_DEFINE_UNQUOTED(DEFAULT_GENERATE_BUILD_NOTES,
|
||||
+ $ac_default_generate_build_notes,
|
||||
+ [Define to 1 if you want to generate GNU Build attribute notes
|
||||
+ by default, if none are contained in the input.])
|
||||
+
|
||||
if test x$ac_default_compressed_debug_sections = xyes ; then
|
||||
AC_DEFINE(DEFAULT_FLAG_COMPRESS_DEBUG, 1, [Define if you want compressed debug sections by default.])
|
||||
fi
|
||||
Only in binutils-2.30/gas: configure.ac.orig
|
||||
Only in binutils-2.30/gas: configure.orig
|
||||
diff -rup binutils.orig/gas/doc/as.texinfo binutils-2.30/gas/doc/as.texinfo
|
||||
--- binutils.orig/gas/doc/as.texinfo 2018-04-26 15:14:17.665459278 +0100
|
||||
+++ binutils-2.30/gas/doc/as.texinfo 2018-04-26 15:14:31.929287450 +0100
|
||||
@@ -244,6 +244,7 @@ gcc(1), ld(1), and the Info entries for
|
||||
[@b{-Z}] [@b{@@@var{FILE}}]
|
||||
[@b{--sectname-subst}] [@b{--size-check=[error|warning]}]
|
||||
[@b{--elf-stt-common=[no|yes]}]
|
||||
+ [@b{--generate-missing-build-notes=[no|yes]}]
|
||||
[@b{--target-help}] [@var{target-options}]
|
||||
[@b{--}|@var{files} @dots{}]
|
||||
@c
|
||||
@@ -754,6 +755,14 @@ Issue an error or warning for invalid EL
|
||||
These options control whether the ELF assembler should generate common
|
||||
symbols with the @code{STT_COMMON} type. The default can be controlled
|
||||
by a configure option @option{--enable-elf-stt-common}.
|
||||
+
|
||||
+@item --generate-missing-build-notes=yes
|
||||
+@itemx --generate-missing-build-notes=no
|
||||
+These options control whether the ELF assembler should generate GNU Build
|
||||
+attribute notes if none are present in the input sources.
|
||||
+The default can be controlled by the @option{--enable-generate-build-notes}
|
||||
+configure option.
|
||||
+
|
||||
@end ifset
|
||||
|
||||
@item --help
|
||||
Only in binutils-2.30/gas/doc: as.texinfo.orig
|
||||
diff -rup binutils.orig/gas/NEWS binutils-2.30/gas/NEWS
|
||||
--- binutils.orig/gas/NEWS 2018-04-26 15:14:17.646459507 +0100
|
||||
+++ binutils-2.30/gas/NEWS 2018-04-26 15:15:32.276560482 +0100
|
||||
@@ -1,5 +1,11 @@
|
||||
-*- text -*-
|
||||
|
||||
+* Add --generate-missing-build-notes=[yes|no] option to create (or not) GNU
|
||||
+ Build Attribute notes if none are present in the input sources. Add a
|
||||
+ --enable-generate-build-notes=[yes|no] configure time option to set the
|
||||
+ default behaviour. Set the default if the configure option is not used
|
||||
+ to "no".
|
||||
+
|
||||
Changes in 2.30:
|
||||
|
||||
* Add support for loaction views in DWARF debug line information.
|
||||
Only in binutils-2.30/gas: NEWS.orig
|
||||
Only in binutils-2.30/gas: NEWS.rej
|
||||
diff -rup binutils.orig/gas/symbols.c binutils-2.30/gas/symbols.c
|
||||
--- binutils.orig/gas/symbols.c 2018-04-26 15:14:17.667459254 +0100
|
||||
+++ binutils-2.30/gas/symbols.c 2018-04-26 15:14:31.929287450 +0100
|
||||
@@ -108,6 +108,7 @@ save_symbol_name (const char *name)
|
||||
size_t name_length;
|
||||
char *ret;
|
||||
|
||||
+ gas_assert (name != NULL);
|
||||
name_length = strlen (name) + 1; /* +1 for \0. */
|
||||
obstack_grow (¬es, name, name_length);
|
||||
ret = (char *) obstack_finish (¬es);
|
||||
diff -rup binutils.orig/gas/write.c binutils-2.30/gas/write.c
|
||||
--- binutils.orig/gas/write.c 2018-04-26 15:14:18.296451677 +0100
|
||||
+++ binutils-2.30/gas/write.c 2018-04-26 15:14:31.929287450 +0100
|
||||
@@ -1822,25 +1822,200 @@ create_obj_attrs_section (void)
|
||||
const char *name;
|
||||
|
||||
size = bfd_elf_obj_attr_size (stdoutput);
|
||||
- if (size)
|
||||
+ if (size == 0)
|
||||
+ return;
|
||||
+
|
||||
+ name = get_elf_backend_data (stdoutput)->obj_attrs_section;
|
||||
+ if (!name)
|
||||
+ name = ".gnu.attributes";
|
||||
+ s = subseg_new (name, 0);
|
||||
+ elf_section_type (s)
|
||||
+ = get_elf_backend_data (stdoutput)->obj_attrs_section_type;
|
||||
+ bfd_set_section_flags (stdoutput, s, SEC_READONLY | SEC_DATA);
|
||||
+ frag_now_fix ();
|
||||
+ p = frag_more (size);
|
||||
+ bfd_elf_set_obj_attr_contents (stdoutput, (bfd_byte *)p, size);
|
||||
+
|
||||
+ subsegs_finish_section (s);
|
||||
+ relax_segment (seg_info (s)->frchainP->frch_root, s, 0);
|
||||
+ size_seg (stdoutput, s, NULL);
|
||||
+}
|
||||
+
|
||||
+#include "struc-symbol.h"
|
||||
+
|
||||
+/* Create a relocation against an entry in a GNU Build attribute section. */
|
||||
+
|
||||
+static void
|
||||
+create_note_reloc (segT sec,
|
||||
+ symbolS * sym,
|
||||
+ bfd_size_type offset,
|
||||
+ int reloc_type,
|
||||
+ bfd_vma addend,
|
||||
+ char * note)
|
||||
+{
|
||||
+ struct reloc_list * reloc;
|
||||
+
|
||||
+ reloc = XNEW (struct reloc_list);
|
||||
+
|
||||
+ /* We create a .b type reloc as resolve_reloc_expr_symbols() has already been called. */
|
||||
+ reloc->u.b.sec = sec;
|
||||
+ reloc->u.b.s = sym->bsym;
|
||||
+ reloc->u.b.r.sym_ptr_ptr = & reloc->u.b.s;
|
||||
+ reloc->u.b.r.address = offset;
|
||||
+ reloc->u.b.r.addend = addend;
|
||||
+ reloc->u.b.r.howto = bfd_reloc_type_lookup (stdoutput, reloc_type);
|
||||
+
|
||||
+ if (reloc->u.b.r.howto == NULL)
|
||||
{
|
||||
- name = get_elf_backend_data (stdoutput)->obj_attrs_section;
|
||||
- if (!name)
|
||||
- name = ".gnu.attributes";
|
||||
- s = subseg_new (name, 0);
|
||||
- elf_section_type (s)
|
||||
- = get_elf_backend_data (stdoutput)->obj_attrs_section_type;
|
||||
- bfd_set_section_flags (stdoutput, s, SEC_READONLY | SEC_DATA);
|
||||
- frag_now_fix ();
|
||||
- p = frag_more (size);
|
||||
- bfd_elf_set_obj_attr_contents (stdoutput, (bfd_byte *)p, size);
|
||||
-
|
||||
- subsegs_finish_section (s);
|
||||
- relax_segment (seg_info (s)->frchainP->frch_root, s, 0);
|
||||
- size_seg (stdoutput, s, NULL);
|
||||
+ as_bad (_("unable to create reloc for build note"));
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ reloc->file = N_("<gnu build note>");
|
||||
+ reloc->line = 0;
|
||||
+
|
||||
+ reloc->next = reloc_list;
|
||||
+ reloc_list = reloc;
|
||||
+
|
||||
+ /* For REL relocs, store the addend in the section. */
|
||||
+ if (! sec->use_rela_p
|
||||
+ /* The SH target is a special case that uses RELA relocs
|
||||
+ but still stores the addend in the word being relocated. */
|
||||
+ || strstr (bfd_get_target (stdoutput), "-sh") != NULL)
|
||||
+ {
|
||||
+ if (target_big_endian)
|
||||
+ {
|
||||
+ if (bfd_arch_bits_per_address (stdoutput) <= 32)
|
||||
+ note[offset + 3] = addend;
|
||||
+ else
|
||||
+ note[offset + 7] = addend;
|
||||
+ }
|
||||
+ else
|
||||
+ note[offset] = addend;
|
||||
}
|
||||
}
|
||||
-#endif
|
||||
+
|
||||
+static void
|
||||
+maybe_generate_build_notes (void)
|
||||
+{
|
||||
+ segT sec;
|
||||
+ char * note;
|
||||
+ offsetT note_size;
|
||||
+ offsetT desc_size;
|
||||
+ offsetT desc2_offset;
|
||||
+ int desc_reloc;
|
||||
+ symbolS * sym;
|
||||
+
|
||||
+ if (! flag_generate_build_notes
|
||||
+ || bfd_get_section_by_name (stdoutput,
|
||||
+ GNU_BUILD_ATTRS_SECTION_NAME) != NULL)
|
||||
+ return;
|
||||
+
|
||||
+ /* Create a GNU Build Attribute section. */
|
||||
+ sec = subseg_new (GNU_BUILD_ATTRS_SECTION_NAME, FALSE);
|
||||
+ elf_section_type (sec) = SHT_NOTE;
|
||||
+ bfd_set_section_flags (stdoutput, sec,
|
||||
+ SEC_READONLY | SEC_HAS_CONTENTS | SEC_DATA);
|
||||
+ bfd_set_section_alignment (stdoutput, sec, 2);
|
||||
+
|
||||
+ /* Create a version note. */
|
||||
+ if (bfd_arch_bits_per_address (stdoutput) <= 32)
|
||||
+ {
|
||||
+ note_size = 28;
|
||||
+ desc_size = 8; /* Two 4-byte offsets. */
|
||||
+ desc2_offset = 24;
|
||||
+
|
||||
+ /* FIXME: The BFD backend for the CRX target does not support the
|
||||
+ BFD_RELOC_32, even though it really should. Likewise for the
|
||||
+ CR16 target. So we have special case code here... */
|
||||
+ if (strstr (bfd_get_target (stdoutput), "-crx") != NULL)
|
||||
+ desc_reloc = BFD_RELOC_CRX_NUM32;
|
||||
+ else if (strstr (bfd_get_target (stdoutput), "-cr16") != NULL)
|
||||
+ desc_reloc = BFD_RELOC_CR16_NUM32;
|
||||
+ else
|
||||
+ desc_reloc = BFD_RELOC_32;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ note_size = 36;
|
||||
+ desc_size = 16; /* Two 8-byte offsets. */
|
||||
+ desc2_offset = 28;
|
||||
+ /* FIXME: The BFD backend for the IA64 target does not support the
|
||||
+ BFD_RELOC_64, even though it really should. The HPPA backend
|
||||
+ has a similar issue, although it does not support BFD_RELOCs at
|
||||
+ all! So we have special case code to handle these targets. */
|
||||
+ if (strstr (bfd_get_target (stdoutput), "-ia64") != NULL)
|
||||
+ desc_reloc = target_big_endian ? BFD_RELOC_IA64_DIR32MSB : BFD_RELOC_IA64_DIR32LSB;
|
||||
+ else if (strstr (bfd_get_target (stdoutput), "-hppa") != NULL)
|
||||
+ desc_reloc = 80; /* R_PARISC_DIR64. */
|
||||
+ else
|
||||
+ desc_reloc = BFD_RELOC_64;
|
||||
+ }
|
||||
+
|
||||
+ frag_now_fix ();
|
||||
+ note = frag_more (note_size);
|
||||
+ memset (note, 0, note_size);
|
||||
+
|
||||
+ if (target_big_endian)
|
||||
+ {
|
||||
+ note[3] = 8; /* strlen (name) + 1. */
|
||||
+ note[7] = desc_size; /* Two 8-byte offsets. */
|
||||
+ note[10] = NT_GNU_BUILD_ATTRIBUTE_OPEN >> 8;
|
||||
+ note[11] = NT_GNU_BUILD_ATTRIBUTE_OPEN & 0xff;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ note[0] = 8; /* strlen (name) + 1. */
|
||||
+ note[4] = desc_size; /* Two 8-byte offsets. */
|
||||
+ note[8] = NT_GNU_BUILD_ATTRIBUTE_OPEN & 0xff;
|
||||
+ note[9] = NT_GNU_BUILD_ATTRIBUTE_OPEN >> 8;
|
||||
+ }
|
||||
+
|
||||
+ /* The a1 version number indicates that this note was
|
||||
+ generated by the assembler and not the gcc annobin plugin. */
|
||||
+ memcpy (note + 12, "GA$3a1", 8);
|
||||
+
|
||||
+ /* Find the first code section symbol. */
|
||||
+ for (sym = symbol_rootP; sym != NULL; sym = sym->sy_next)
|
||||
+ if (sym->bsym != NULL
|
||||
+ && sym->bsym->flags & BSF_SECTION_SYM
|
||||
+ && sym->bsym->section != NULL
|
||||
+ && sym->bsym->section->flags & SEC_CODE)
|
||||
+ {
|
||||
+ /* Found one - now create a relocation against this symbol. */
|
||||
+ create_note_reloc (sec, sym, 20, desc_reloc, 0, note);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ /* Find the last code section symbol. */
|
||||
+ if (sym)
|
||||
+ {
|
||||
+ for (sym = symbol_lastP; sym != NULL; sym = sym->sy_previous)
|
||||
+ if (sym->bsym != NULL
|
||||
+ && sym->bsym->flags & BSF_SECTION_SYM
|
||||
+ && sym->bsym->section != NULL
|
||||
+ && sym->bsym->section->flags & SEC_CODE)
|
||||
+ {
|
||||
+ /* Create a relocation against the end of this symbol. */
|
||||
+ create_note_reloc (sec, sym, desc2_offset, desc_reloc,
|
||||
+ bfd_get_section_size (sym->bsym->section),
|
||||
+ note);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ /* else - if we were unable to find any code section symbols then
|
||||
+ probably there is no code in the output. So leaving the start
|
||||
+ and end values as zero in the note is OK. */
|
||||
+
|
||||
+ /* FIXME: Maybe add a note recording the assembler command line and version ? */
|
||||
+
|
||||
+ /* Install the note(s) into the section. */
|
||||
+ bfd_set_section_contents (stdoutput, sec, (bfd_byte *) note, 0, note_size);
|
||||
+ subsegs_finish_section (sec);
|
||||
+ relax_segment (seg_info (sec)->frchainP->frch_root, sec, 0);
|
||||
+ size_seg (stdoutput, sec, NULL);
|
||||
+}
|
||||
+#endif /* OBJ_ELF */
|
||||
|
||||
/* Write the object file. */
|
||||
|
||||
@@ -2052,6 +2227,11 @@ write_object_file (void)
|
||||
resolve_local_symbol_values ();
|
||||
resolve_reloc_expr_symbols ();
|
||||
|
||||
+#ifdef OBJ_ELF
|
||||
+ if (IS_ELF)
|
||||
+ maybe_generate_build_notes ();
|
||||
+#endif
|
||||
+
|
||||
PROGRESS (1);
|
||||
|
||||
#ifdef tc_frob_file_before_adjust
|
||||
Only in binutils-2.30/gas: write.c.orig
|
||||
Only in binutils-2.30: testsuite
|
||||
--- /dev/null 2018-04-26 08:07:19.307057583 +0100
|
||||
+++ binutils-2.30/binutils/testsuite/binutils-all/note-5.d 2018-04-26 15:17:06.318427614 +0100
|
||||
@@ -0,0 +1,11 @@
|
||||
+#PROG: objcopy
|
||||
+#as: --generate-missing-build-notes=yes
|
||||
+#readelf: --notes --wide
|
||||
+#name: assembler generated build notes
|
||||
+#source: note-5.s
|
||||
+
|
||||
+#...
|
||||
+Displaying notes found in: .gnu.build.attributes
|
||||
+[ ]+Owner[ ]+Data size[ ]+Description
|
||||
+[ ]+GA\$<version>3a1[ ]+0x000000(08|10)[ ]+OPEN[ ]+Applies to region from 0 to 0x.. \(note_5.s\)
|
||||
+#...
|
||||
--- /dev/null 2018-04-26 08:07:19.307057583 +0100
|
||||
+++ binutils-2.30/binutils/testsuite/binutils-all/note-5.s 2018-04-26 15:17:06.318427614 +0100
|
||||
@@ -0,0 +1,14 @@
|
||||
+ .text
|
||||
+ .global note_5.s
|
||||
+note_5.s:
|
||||
+ .dc.l 2
|
||||
+ .dc.l 4
|
||||
+ .dc.l 6
|
||||
+ .dc.l 8
|
||||
+ .dc.l 8
|
||||
+ .dc.l 8
|
||||
+ .dc.l 8
|
||||
+ .dc.l 8
|
||||
+ .dc.l 8
|
||||
+ .dc.l 8
|
||||
+
|
||||
\ No newline at end of file
|
99
SOURCES/binutils-gold-8-byte-note-segments.patch
Normal file
99
SOURCES/binutils-gold-8-byte-note-segments.patch
Normal file
@ -0,0 +1,99 @@
|
||||
diff -rup binutils.orig/gold/layout.cc binutils-2.30/gold/layout.cc
|
||||
--- binutils.orig/gold/layout.cc 2018-10-09 15:24:05.987282736 +0100
|
||||
+++ binutils-2.30/gold/layout.cc 2018-10-09 16:08:29.445946736 +0100
|
||||
@@ -2052,12 +2052,15 @@ Layout::attach_allocated_section_to_segm
|
||||
// segment.
|
||||
if (os->type() == elfcpp::SHT_NOTE)
|
||||
{
|
||||
+ uint64_t os_align = os->addralign();
|
||||
+
|
||||
// See if we already have an equivalent PT_NOTE segment.
|
||||
for (p = this->segment_list_.begin();
|
||||
p != segment_list_.end();
|
||||
++p)
|
||||
{
|
||||
if ((*p)->type() == elfcpp::PT_NOTE
|
||||
+ && (*p)->align() == os_align
|
||||
&& (((*p)->flags() & elfcpp::PF_W)
|
||||
== (seg_flags & elfcpp::PF_W)))
|
||||
{
|
||||
@@ -2071,6 +2074,7 @@ Layout::attach_allocated_section_to_segm
|
||||
Output_segment* oseg = this->make_output_segment(elfcpp::PT_NOTE,
|
||||
seg_flags);
|
||||
oseg->add_output_section_to_nonload(os, seg_flags);
|
||||
+ oseg->set_align(os_align);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3171,6 +3175,10 @@ Layout::create_note(const char* name, in
|
||||
#else
|
||||
const int size = 32;
|
||||
#endif
|
||||
+ // The NT_GNU_PROPERTY_TYPE_0 note conforms to gABI.
|
||||
+ const int addralign = ((note_type == elfcpp::NT_GNU_PROPERTY_TYPE_0
|
||||
+ ? parameters->target().get_size()
|
||||
+ : size) / 8);
|
||||
|
||||
// The contents of the .note section.
|
||||
size_t namesz = strlen(name) + 1;
|
||||
@@ -3234,7 +3242,7 @@ Layout::create_note(const char* name, in
|
||||
return NULL;
|
||||
|
||||
Output_section_data* posd = new Output_data_const_buffer(buffer, notehdrsz,
|
||||
- size / 8,
|
||||
+ addralign,
|
||||
"** note header");
|
||||
os->add_output_section_data(posd);
|
||||
|
||||
@@ -3692,6 +3700,11 @@ Layout::segment_precedes(const Output_se
|
||||
{
|
||||
if (type1 != type2)
|
||||
return type1 < type2;
|
||||
+ uint64_t align1 = seg1->align();
|
||||
+ uint64_t align2 = seg2->align();
|
||||
+ // Place segments with larger alignments first.
|
||||
+ if (align1 != align2)
|
||||
+ return align1 > align2;
|
||||
gold_assert(flags1 != flags2
|
||||
|| this->script_options_->saw_phdrs_clause());
|
||||
return flags1 < flags2;
|
||||
diff -rup binutils.orig/gold/output.cc binutils-2.30/gold/output.cc
|
||||
--- binutils.orig/gold/output.cc 2018-10-09 15:24:05.986282744 +0100
|
||||
+++ binutils-2.30/gold/output.cc 2018-10-09 16:09:03.749670846 +0100
|
||||
@@ -4107,6 +4107,7 @@ Output_segment::Output_segment(elfcpp::E
|
||||
: vaddr_(0),
|
||||
paddr_(0),
|
||||
memsz_(0),
|
||||
+ align_(0),
|
||||
max_align_(0),
|
||||
min_p_align_(0),
|
||||
offset_(0),
|
||||
diff -rup binutils.orig/gold/output.h binutils-2.30/gold/output.h
|
||||
--- binutils.orig/gold/output.h 2018-10-09 15:24:05.984282760 +0100
|
||||
+++ binutils-2.30/gold/output.h 2018-10-09 16:09:45.665333727 +0100
|
||||
@@ -4676,6 +4676,16 @@ class Output_segment
|
||||
offset() const
|
||||
{ return this->offset_; }
|
||||
|
||||
+ // Return the segment alignment.
|
||||
+ uint64_t
|
||||
+ align() const
|
||||
+ { return this->align_; }
|
||||
+
|
||||
+ // Set the segment alignment.
|
||||
+ void
|
||||
+ set_align(uint64_t align)
|
||||
+ { this->align_ = align; }
|
||||
+
|
||||
// Whether this is a segment created to hold large data sections.
|
||||
bool
|
||||
is_large_data_segment() const
|
||||
@@ -4898,6 +4908,8 @@ class Output_segment
|
||||
uint64_t paddr_;
|
||||
// The size of the segment in memory.
|
||||
uint64_t memsz_;
|
||||
+ // The segment alignment.
|
||||
+ uint64_t align_;
|
||||
// The maximum section alignment. The is_max_align_known_ field
|
||||
// indicates whether this has been finalized.
|
||||
uint64_t max_align_;
|
10
SOURCES/binutils-gold-ignore-discarded-note-relocs.patch
Normal file
10
SOURCES/binutils-gold-ignore-discarded-note-relocs.patch
Normal file
@ -0,0 +1,10 @@
|
||||
--- binutils.orig/gold/target-reloc.h 2018-07-25 08:29:41.347174442 +0100
|
||||
+++ binutils-2.30/gold/target-reloc.h 2018-07-25 08:30:47.390413706 +0100
|
||||
@@ -136,6 +136,7 @@ class Default_comdat_behavior
|
||||
if (Layout::is_debug_info_section(name))
|
||||
return CB_PRETEND;
|
||||
if (strcmp(name, ".eh_frame") == 0
|
||||
+ || strncmp(name, ".gnu.build.attributes", 21) == 0 // FIXME: We should really be checking the section type for SHT_NOTE.
|
||||
|| strcmp(name, ".gcc_except_table") == 0)
|
||||
return CB_IGNORE;
|
||||
return CB_WARNING;
|
16
SOURCES/binutils-gold-llvm-plugin.patch
Normal file
16
SOURCES/binutils-gold-llvm-plugin.patch
Normal file
@ -0,0 +1,16 @@
|
||||
--- binutils.orig/gold/resolve.cc 2018-03-22 16:52:11.746513638 +0000
|
||||
+++ binutils-2.30/gold/resolve.cc 2018-03-22 16:53:58.038192419 +0000
|
||||
@@ -265,10 +265,13 @@ Symbol_table::resolve(Sized_symbol<size>
|
||||
return;
|
||||
|
||||
// Likewise for an absolute symbol defined twice with the same value.
|
||||
+ // Plugin-symbols are always absolute with same value here, so ignore those.
|
||||
if (!is_ordinary
|
||||
&& st_shndx == elfcpp::SHN_ABS
|
||||
&& !to_is_ordinary
|
||||
&& to_shndx == elfcpp::SHN_ABS
|
||||
+ && object->pluginobj() == NULL
|
||||
+ && to->object()->pluginobj() == NULL
|
||||
&& to->value() == sym.get_st_value())
|
||||
return;
|
||||
|
1239
SOURCES/binutils-gold-note-segment.patch
Normal file
1239
SOURCES/binutils-gold-note-segment.patch
Normal file
File diff suppressed because it is too large
Load Diff
296
SOURCES/binutils-ifunc-relocs-in-notes.patch
Normal file
296
SOURCES/binutils-ifunc-relocs-in-notes.patch
Normal file
@ -0,0 +1,296 @@
|
||||
diff -rup binutils.orig/bfd/elf32-i386.c binutils-2.30/bfd/elf32-i386.c
|
||||
--- binutils.orig/bfd/elf32-i386.c 2018-03-09 14:43:05.324208873 +0000
|
||||
+++ binutils-2.30/bfd/elf32-i386.c 2018-03-09 14:43:23.158000456 +0000
|
||||
@@ -2202,12 +2202,19 @@ elf_i386_relocate_section (bfd *output_b
|
||||
|
||||
if ((input_section->flags & SEC_ALLOC) == 0)
|
||||
{
|
||||
+ /* If this is a SHT_NOTE section without SHF_ALLOC, treat
|
||||
+ STT_GNU_IFUNC symbol as STT_FUNC. */
|
||||
+ if (elf_section_type (input_section) == SHT_NOTE)
|
||||
+ goto skip_ifunc;
|
||||
/* Dynamic relocs are not propagated for SEC_DEBUGGING
|
||||
sections because such sections are not SEC_ALLOC and
|
||||
thus ld.so will not process them. */
|
||||
if ((input_section->flags & SEC_DEBUGGING) != 0)
|
||||
continue;
|
||||
- abort ();
|
||||
+ _bfd_error_handler (_("%B: error: relocation againt ifunc symbol in non-alloc section %A"),
|
||||
+ input_bfd, input_section);
|
||||
+ bfd_set_error (bfd_error_invalid_operation);
|
||||
+ return FALSE;
|
||||
}
|
||||
|
||||
/* STT_GNU_IFUNC symbol must go through PLT. */
|
||||
@@ -2421,6 +2428,7 @@ do_ifunc_pointer:
|
||||
}
|
||||
}
|
||||
|
||||
+ skip_ifunc:
|
||||
resolved_to_zero = (eh != NULL
|
||||
&& UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
|
||||
|
||||
diff -rup binutils.orig/bfd/elf32-s390.c binutils-2.30/bfd/elf32-s390.c
|
||||
--- binutils.orig/bfd/elf32-s390.c 2018-03-09 14:43:05.325208861 +0000
|
||||
+++ binutils-2.30/bfd/elf32-s390.c 2018-03-09 14:43:31.353904647 +0000
|
||||
@@ -2601,6 +2601,9 @@ elf_s390_relocate_section (bfd *output_b
|
||||
case R_390_8:
|
||||
case R_390_16:
|
||||
case R_390_32:
|
||||
+ if ((input_section->flags & SEC_ALLOC) == 0)
|
||||
+ break;
|
||||
+
|
||||
if (h != NULL
|
||||
&& s390_is_ifunc_symbol_p (h)
|
||||
&& h->def_regular)
|
||||
@@ -2662,9 +2665,6 @@ elf_s390_relocate_section (bfd *output_b
|
||||
}
|
||||
}
|
||||
|
||||
- if ((input_section->flags & SEC_ALLOC) == 0)
|
||||
- break;
|
||||
-
|
||||
if ((bfd_link_pic (info)
|
||||
&& (h == NULL
|
||||
|| (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||
Only in binutils-2.30/bfd: elf32-s390.c.orig
|
||||
diff -rup binutils.orig/bfd/elf64-s390.c binutils-2.30/bfd/elf64-s390.c
|
||||
--- binutils.orig/bfd/elf64-s390.c 2018-03-09 14:43:05.341208674 +0000
|
||||
+++ binutils-2.30/bfd/elf64-s390.c 2018-03-09 14:43:31.354904635 +0000
|
||||
@@ -2559,6 +2559,9 @@ elf_s390_relocate_section (bfd *output_b
|
||||
case R_390_32:
|
||||
case R_390_64:
|
||||
|
||||
+ if ((input_section->flags & SEC_ALLOC) == 0)
|
||||
+ break;
|
||||
+
|
||||
if (h != NULL
|
||||
&& s390_is_ifunc_symbol_p (h)
|
||||
&& h->def_regular)
|
||||
@@ -2621,9 +2624,6 @@ elf_s390_relocate_section (bfd *output_b
|
||||
}
|
||||
}
|
||||
|
||||
- if ((input_section->flags & SEC_ALLOC) == 0)
|
||||
- break;
|
||||
-
|
||||
if ((bfd_link_pic (info)
|
||||
&& (h == NULL
|
||||
|| (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||
Only in binutils-2.30/bfd: elf64-s390.c.orig
|
||||
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-03-09 14:43:05.344208639 +0000
|
||||
+++ binutils-2.30/bfd/elf64-x86-64.c 2018-03-09 14:43:23.161000420 +0000
|
||||
@@ -2499,12 +2499,19 @@ elf_x86_64_relocate_section (bfd *output
|
||||
|
||||
if ((input_section->flags & SEC_ALLOC) == 0)
|
||||
{
|
||||
+ /* If this is a SHT_NOTE section without SHF_ALLOC, treat
|
||||
+ STT_GNU_IFUNC symbol as STT_FUNC. */
|
||||
+ if (elf_section_type (input_section) == SHT_NOTE)
|
||||
+ goto skip_ifunc;
|
||||
/* Dynamic relocs are not propagated for SEC_DEBUGGING
|
||||
sections because such sections are not SEC_ALLOC and
|
||||
thus ld.so will not process them. */
|
||||
if ((input_section->flags & SEC_DEBUGGING) != 0)
|
||||
continue;
|
||||
- abort ();
|
||||
+ _bfd_error_handler (_("%B: error: relocation againt ifunc symbol in non-alloc section %A"),
|
||||
+ input_bfd, input_section);
|
||||
+ bfd_set_error (bfd_error_invalid_operation);
|
||||
+ return FALSE;
|
||||
}
|
||||
|
||||
switch (r_type)
|
||||
@@ -2722,6 +2729,7 @@ do_ifunc_pointer:
|
||||
}
|
||||
}
|
||||
|
||||
+ skip_ifunc:
|
||||
resolved_to_zero = (eh != NULL
|
||||
&& UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
|
||||
|
||||
diff -rup binutils.orig/bfd/elfnn-aarch64.c binutils-2.30/bfd/elfnn-aarch64.c
|
||||
--- binutils.orig/bfd/elfnn-aarch64.c 2018-03-09 14:43:05.337208721 +0000
|
||||
+++ binutils-2.30/bfd/elfnn-aarch64.c 2018-03-09 14:43:31.355904624 +0000
|
||||
@@ -4987,6 +4987,11 @@ elfNN_aarch64_final_link_relocate (reloc
|
||||
|
||||
if ((input_section->flags & SEC_ALLOC) == 0)
|
||||
{
|
||||
+ /* If this is a SHT_NOTE section without SHF_ALLOC, treat
|
||||
+ STT_GNU_IFUNC symbol as STT_FUNC. */
|
||||
+ if (elf_section_type (input_section) == SHT_NOTE)
|
||||
+ goto skip_ifunc;
|
||||
+
|
||||
/* Dynamic relocs are not propagated for SEC_DEBUGGING
|
||||
sections because such sections are not SEC_ALLOC and
|
||||
thus ld.so will not process them. */
|
||||
@@ -5180,6 +5185,7 @@ bad_ifunc_reloc:
|
||||
}
|
||||
}
|
||||
|
||||
+ skip_ifunc:
|
||||
resolved_to_zero = (h != NULL
|
||||
&& UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
|
||||
|
||||
Only in binutils-2.30/bfd: elfnn-aarch64.c.orig
|
||||
diff -rup binutils.orig/bfd/elfxx-sparc.c binutils-2.30/bfd/elfxx-sparc.c
|
||||
--- binutils.orig/bfd/elfxx-sparc.c 2018-03-09 14:43:05.333208768 +0000
|
||||
+++ binutils-2.30/bfd/elfxx-sparc.c 2018-03-09 14:43:31.355904624 +0000
|
||||
@@ -3026,7 +3026,13 @@ _bfd_sparc_elf_relocate_section (bfd *ou
|
||||
|
||||
if ((input_section->flags & SEC_ALLOC) == 0
|
||||
|| h->plt.offset == (bfd_vma) -1)
|
||||
- abort ();
|
||||
+ {
|
||||
+ /* If this is a SHT_NOTE section without SHF_ALLOC, treat
|
||||
+ STT_GNU_IFUNC symbol as STT_FUNC. */
|
||||
+ if (elf_section_type (input_section) == SHT_NOTE)
|
||||
+ goto skip_ifunc;
|
||||
+ abort ();
|
||||
+ }
|
||||
|
||||
plt_sec = htab->elf.splt;
|
||||
if (! plt_sec)
|
||||
@@ -3130,6 +3136,7 @@ _bfd_sparc_elf_relocate_section (bfd *ou
|
||||
}
|
||||
}
|
||||
|
||||
+ skip_ifunc:
|
||||
eh = (struct _bfd_sparc_elf_link_hash_entry *) h;
|
||||
resolved_to_zero = (eh != NULL
|
||||
&& UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
|
||||
Only in binutils-2.30/bfd: elfxx-sparc.c.orig
|
||||
diff -rup binutils.orig/ld/testsuite/ld-ifunc/ifunc.exp binutils-2.30/ld/testsuite/ld-ifunc/ifunc.exp
|
||||
--- binutils.orig/ld/testsuite/ld-ifunc/ifunc.exp 2018-03-09 14:43:04.844214486 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-ifunc/ifunc.exp 2018-03-09 14:43:31.355904624 +0000
|
||||
@@ -47,6 +47,9 @@ if ![check_shared_lib_support] {
|
||||
return
|
||||
}
|
||||
|
||||
+# This test does not need a compiler...
|
||||
+run_dump_test "ifuncmod5"
|
||||
+
|
||||
# We need a working compiler. (Strictly speaking this is
|
||||
# not true, we could use target specific assembler files).
|
||||
if { [which $CC] == 0 } {
|
||||
Only in binutils-2.30: testsuite
|
||||
--- /dev/null 2018-03-09 07:59:09.608015200 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-ifunc/ifuncmod5.s 2018-03-09 14:45:45.698334500 +0000
|
||||
@@ -0,0 +1,105 @@
|
||||
+ .file "ifuncmod5.c"
|
||||
+
|
||||
+ .text
|
||||
+ .type ifuncmod5.c, STT_NOTYPE
|
||||
+ifuncmod5.c:
|
||||
+ .size ifuncmod5.c, 0
|
||||
+
|
||||
+ .pushsection .gnu.build.attributes, "", %note
|
||||
+ .balign 4
|
||||
+ .dc.l 8
|
||||
+ .dc.l 16
|
||||
+ .dc.l 0x100
|
||||
+ .asciz "GA$3p4"
|
||||
+ .dc.a ifuncmod5.c
|
||||
+ .dc.a ifuncmod5.c_end
|
||||
+ .popsection
|
||||
+
|
||||
+.Ltext0:
|
||||
+#APP
|
||||
+ .protected global
|
||||
+ .type foo, %gnu_indirect_function
|
||||
+ .type foo_hidden, %gnu_indirect_function
|
||||
+ .type foo_protected, %gnu_indirect_function
|
||||
+ .hidden foo_hidden
|
||||
+ .protected foo_protected
|
||||
+#NO_APP
|
||||
+ .align 8
|
||||
+ .type one, %function
|
||||
+one:
|
||||
+ .dc.l 0
|
||||
+ .size one, .-one
|
||||
+ .align 8
|
||||
+
|
||||
+.globl foo
|
||||
+ .type foo, %function
|
||||
+foo:
|
||||
+ .dc.l 0
|
||||
+ .size foo, .-foo
|
||||
+
|
||||
+ .pushsection .gnu.build.attributes
|
||||
+ .dc.l 6
|
||||
+ .dc.l 16
|
||||
+ .dc.l 0x101
|
||||
+ .dc.b 0x47, 0x41, 0x2a, 0x2, 0, 0
|
||||
+ .dc.b 0, 0
|
||||
+ .dc.a foo
|
||||
+ .dc.a foo_end
|
||||
+ .popsection
|
||||
+
|
||||
+foo_end:
|
||||
+ .align 8
|
||||
+.globl foo_hidden
|
||||
+ .type foo_hidden, %function
|
||||
+foo_hidden:
|
||||
+ .dc.l 0
|
||||
+ .size foo_hidden, .-foo_hidden
|
||||
+
|
||||
+ .pushsection .gnu.build.attributes
|
||||
+ .dc.l 6
|
||||
+ .dc.l 16
|
||||
+ .dc.l 0x101
|
||||
+ .dc.b 0x47, 0x41, 0x2a, 0x2, 0, 0
|
||||
+ .dc.b 0, 0
|
||||
+ .dc.a foo_hidden
|
||||
+ .dc.a foo_hidden_end
|
||||
+ .popsection
|
||||
+
|
||||
+foo_hidden_end:
|
||||
+ .align 8
|
||||
+
|
||||
+ .globl foo_protected
|
||||
+ .type foo_protected, %function
|
||||
+foo_protected:
|
||||
+ .dc.l 0
|
||||
+
|
||||
+ .size foo_protected, .-foo_protected
|
||||
+
|
||||
+ .pushsection .gnu.build.attributes
|
||||
+ .dc.l 6
|
||||
+ .dc.l 16
|
||||
+ .dc.l 0x101
|
||||
+ .dc.b 0x47, 0x41, 0x2a, 0x2, 0, 0
|
||||
+ .dc.b 0, 0
|
||||
+ .dc.a foo_protected
|
||||
+ .dc.a foo_protected_end
|
||||
+ .popsection
|
||||
+
|
||||
+foo_protected_end:
|
||||
+ .globl global
|
||||
+
|
||||
+ .data
|
||||
+ .align 4
|
||||
+ .type global, %object
|
||||
+ .size global, 4
|
||||
+global:
|
||||
+ .long -1
|
||||
+
|
||||
+ .text
|
||||
+ .Letext0:
|
||||
+
|
||||
+ifuncmod5.c_end:
|
||||
+ .type ifuncmod5.c_end, STT_NOTYPE
|
||||
+ .size ifuncmod5.c_end, 0
|
||||
+
|
||||
+
|
||||
--- /dev/null 2018-03-09 07:59:09.608015200 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-ifunc/ifuncmod5.d 2018-03-09 14:45:45.698334500 +0000
|
||||
@@ -0,0 +1,8 @@
|
||||
+# name: Reloc against IFUNC symbol in NOTE section
|
||||
+# ld: -shared
|
||||
+# nm: -p
|
||||
+
|
||||
+# We do not actually care about the notes at the moment.
|
||||
+# The purpose of this test is to make sure that the link completes successfully.
|
||||
+#pass
|
||||
+
|
127
SOURCES/binutils-linkonce-notes.patch
Normal file
127
SOURCES/binutils-linkonce-notes.patch
Normal file
@ -0,0 +1,127 @@
|
||||
--- binutils.orig/gas/write.c 2018-05-14 12:22:27.893671804 +0100
|
||||
+++ binutils-2.30/gas/write.c 2018-05-14 15:39:03.900509629 +0100
|
||||
@@ -1901,6 +1901,7 @@ maybe_generate_build_notes (void)
|
||||
segT sec;
|
||||
char * note;
|
||||
offsetT note_size;
|
||||
+ offsetT total_size;
|
||||
offsetT desc_size;
|
||||
offsetT desc2_offset;
|
||||
int desc_reloc;
|
||||
@@ -1918,7 +1919,8 @@ maybe_generate_build_notes (void)
|
||||
SEC_READONLY | SEC_HAS_CONTENTS | SEC_DATA);
|
||||
bfd_set_section_alignment (stdoutput, sec, 2);
|
||||
|
||||
- /* Create a version note. */
|
||||
+ /* Work out the size of the notes that we will create,
|
||||
+ and the relocation we should use. */
|
||||
if (bfd_arch_bits_per_address (stdoutput) <= 32)
|
||||
{
|
||||
note_size = 28;
|
||||
@@ -1952,65 +1954,59 @@ maybe_generate_build_notes (void)
|
||||
desc_reloc = BFD_RELOC_64;
|
||||
}
|
||||
|
||||
- frag_now_fix ();
|
||||
- note = frag_more (note_size);
|
||||
- memset (note, 0, note_size);
|
||||
+ /* We have to create a note for *each* code section.
|
||||
+ Linker garbage collection might discard some. */
|
||||
+ total_size = 0;
|
||||
+ note = NULL;
|
||||
|
||||
- if (target_big_endian)
|
||||
- {
|
||||
- note[3] = 8; /* strlen (name) + 1. */
|
||||
- note[7] = desc_size; /* Two 8-byte offsets. */
|
||||
- note[10] = NT_GNU_BUILD_ATTRIBUTE_OPEN >> 8;
|
||||
- note[11] = NT_GNU_BUILD_ATTRIBUTE_OPEN & 0xff;
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- note[0] = 8; /* strlen (name) + 1. */
|
||||
- note[4] = desc_size; /* Two 8-byte offsets. */
|
||||
- note[8] = NT_GNU_BUILD_ATTRIBUTE_OPEN & 0xff;
|
||||
- note[9] = NT_GNU_BUILD_ATTRIBUTE_OPEN >> 8;
|
||||
- }
|
||||
-
|
||||
- /* The a1 version number indicates that this note was
|
||||
- generated by the assembler and not the gcc annobin plugin. */
|
||||
- memcpy (note + 12, "GA$3a1", 8);
|
||||
-
|
||||
- /* Find the first code section symbol. */
|
||||
for (sym = symbol_rootP; sym != NULL; sym = sym->sy_next)
|
||||
if (sym->bsym != NULL
|
||||
&& sym->bsym->flags & BSF_SECTION_SYM
|
||||
&& sym->bsym->section != NULL
|
||||
- && sym->bsym->section->flags & SEC_CODE)
|
||||
+ /* Skip linkonce sections - we cannot these section symbols as they may disappear. */
|
||||
+ && (sym->bsym->section->flags & (SEC_CODE | SEC_LINK_ONCE)) == SEC_CODE
|
||||
+ /* Not all linkonce sections are flagged... */
|
||||
+ && strncmp (S_GET_NAME (sym), ".gnu.linkonce", sizeof ".gnu.linkonce" - 1) != 0)
|
||||
{
|
||||
- /* Found one - now create a relocation against this symbol. */
|
||||
- create_note_reloc (sec, sym, 20, desc_reloc, 0, note);
|
||||
- break;
|
||||
- }
|
||||
+ /* Create a version note. */
|
||||
+ frag_now_fix ();
|
||||
+ note = frag_more (note_size);
|
||||
+ memset (note, 0, note_size);
|
||||
|
||||
- /* Find the last code section symbol. */
|
||||
- if (sym)
|
||||
- {
|
||||
- for (sym = symbol_lastP; sym != NULL; sym = sym->sy_previous)
|
||||
- if (sym->bsym != NULL
|
||||
- && sym->bsym->flags & BSF_SECTION_SYM
|
||||
- && sym->bsym->section != NULL
|
||||
- && sym->bsym->section->flags & SEC_CODE)
|
||||
+ if (target_big_endian)
|
||||
{
|
||||
- /* Create a relocation against the end of this symbol. */
|
||||
- create_note_reloc (sec, sym, desc2_offset, desc_reloc,
|
||||
- bfd_get_section_size (sym->bsym->section),
|
||||
- note);
|
||||
- break;
|
||||
+ note[3] = 8; /* strlen (name) + 1. */
|
||||
+ note[7] = desc_size; /* Two 8-byte offsets. */
|
||||
+ note[10] = NT_GNU_BUILD_ATTRIBUTE_OPEN >> 8;
|
||||
+ note[11] = NT_GNU_BUILD_ATTRIBUTE_OPEN & 0xff;
|
||||
}
|
||||
- }
|
||||
- /* else - if we were unable to find any code section symbols then
|
||||
- probably there is no code in the output. So leaving the start
|
||||
- and end values as zero in the note is OK. */
|
||||
+ else
|
||||
+ {
|
||||
+ note[0] = 8; /* strlen (name) + 1. */
|
||||
+ note[4] = desc_size; /* Two 8-byte offsets. */
|
||||
+ note[8] = NT_GNU_BUILD_ATTRIBUTE_OPEN & 0xff;
|
||||
+ note[9] = NT_GNU_BUILD_ATTRIBUTE_OPEN >> 8;
|
||||
+ }
|
||||
+
|
||||
+ /* The a1 version number indicates that this note was
|
||||
+ generated by the assembler and not the gcc annobin plugin. */
|
||||
+ memcpy (note + 12, "GA$3a1", 8);
|
||||
|
||||
- /* FIXME: Maybe add a note recording the assembler command line and version ? */
|
||||
+ /* Create a relocation to install the start address of the note... */
|
||||
+ create_note_reloc (sec, sym, 20, desc_reloc, 0, note);
|
||||
+
|
||||
+ /* ...and another one to install the end address. */
|
||||
+ create_note_reloc (sec, sym, desc2_offset, desc_reloc,
|
||||
+ bfd_get_section_size (sym->bsym->section),
|
||||
+ note);
|
||||
+
|
||||
+ total_size += note_size;
|
||||
+ /* FIXME: Maybe add a note recording the assembler command line and version ? */
|
||||
+ }
|
||||
|
||||
/* Install the note(s) into the section. */
|
||||
- bfd_set_section_contents (stdoutput, sec, (bfd_byte *) note, 0, note_size);
|
||||
+ if (total_size)
|
||||
+ bfd_set_section_contents (stdoutput, sec, (bfd_byte *) note, 0, total_size);
|
||||
subsegs_finish_section (sec);
|
||||
relax_segment (seg_info (sec)->frchainP->frch_root, sec, 0);
|
||||
size_seg (stdoutput, sec, NULL);
|
23
SOURCES/binutils-merge-attribute-sections.patch
Normal file
23
SOURCES/binutils-merge-attribute-sections.patch
Normal file
@ -0,0 +1,23 @@
|
||||
diff -rup binutils.orig/gold/layout.cc binutils-2.30/gold/layout.cc
|
||||
--- binutils.orig/gold/layout.cc 2018-07-27 12:02:14.160444849 +0100
|
||||
+++ binutils-2.30/gold/layout.cc 2018-07-27 12:03:11.543820863 +0100
|
||||
@@ -5133,6 +5133,7 @@ const Layout::Section_name_mapping Layou
|
||||
MAPPING_INIT(".gnu.linkonce.armextab.", ".ARM.extab"),
|
||||
MAPPING_INIT(".ARM.exidx", ".ARM.exidx"),
|
||||
MAPPING_INIT(".gnu.linkonce.armexidx.", ".ARM.exidx"),
|
||||
+ MAPPING_INIT(".gnu.build.attributes.", ".gnu.build.attributes"),
|
||||
};
|
||||
#undef MAPPING_INIT
|
||||
#undef MAPPING_INIT_EXACT
|
||||
diff -rup binutils.orig/ld/scripttempl/elf.sc binutils-2.30/ld/scripttempl/elf.sc
|
||||
--- binutils.orig/ld/scripttempl/elf.sc 2018-07-27 12:02:13.992446676 +0100
|
||||
+++ binutils-2.30/ld/scripttempl/elf.sc 2018-07-27 12:02:42.292138945 +0100
|
||||
@@ -692,6 +692,8 @@ cat <<EOF
|
||||
|
||||
.comment 0 : { *(.comment) }
|
||||
|
||||
+ .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
|
||||
+
|
||||
EOF
|
||||
|
||||
. $srcdir/scripttempl/DWARF.sc
|
24
SOURCES/binutils-missing-notes.patch
Normal file
24
SOURCES/binutils-missing-notes.patch
Normal file
@ -0,0 +1,24 @@
|
||||
--- binutils.orig/gas/write.c 2018-07-06 11:49:29.149532896 +0100
|
||||
+++ binutils-2.30/gas/write.c 2018-07-06 11:49:37.550441810 +0100
|
||||
@@ -1963,7 +1963,7 @@ maybe_generate_build_notes (void)
|
||||
if (sym->bsym != NULL
|
||||
&& sym->bsym->flags & BSF_SECTION_SYM
|
||||
&& sym->bsym->section != NULL
|
||||
- /* Skip linkonce sections - we cannot these section symbols as they may disappear. */
|
||||
+ /* Skip linkonce sections - we cannot use these section symbols as they may disappear. */
|
||||
&& (sym->bsym->section->flags & (SEC_CODE | SEC_LINK_ONCE)) == SEC_CODE
|
||||
/* Not all linkonce sections are flagged... */
|
||||
&& strncmp (S_GET_NAME (sym), ".gnu.linkonce", sizeof ".gnu.linkonce" - 1) != 0)
|
||||
@@ -1993,10 +1993,10 @@ maybe_generate_build_notes (void)
|
||||
memcpy (note + 12, "GA$3a1", 8);
|
||||
|
||||
/* Create a relocation to install the start address of the note... */
|
||||
- create_note_reloc (sec, sym, 20, desc_reloc, 0, note);
|
||||
+ create_note_reloc (sec, sym, total_size + 20, desc_reloc, 0, note);
|
||||
|
||||
/* ...and another one to install the end address. */
|
||||
- create_note_reloc (sec, sym, desc2_offset, desc_reloc,
|
||||
+ create_note_reloc (sec, sym, total_size + desc2_offset, desc_reloc,
|
||||
bfd_get_section_size (sym->bsym->section),
|
||||
note);
|
||||
|
5427
SOURCES/binutils-nfp.patch
Normal file
5427
SOURCES/binutils-nfp.patch
Normal file
File diff suppressed because it is too large
Load Diff
61
SOURCES/binutils-note-merge-improvements.patch
Normal file
61
SOURCES/binutils-note-merge-improvements.patch
Normal file
@ -0,0 +1,61 @@
|
||||
--- binutils.orig/binutils/objcopy.c 2018-08-06 09:11:02.053503486 +0100
|
||||
+++ binutils-2.30/binutils/objcopy.c 2018-08-06 09:11:23.296329566 +0100
|
||||
@@ -2174,7 +2174,7 @@ merge_gnu_build_notes (bfd * abfd, asect
|
||||
3. Eliminate any NT_GNU_BUILD_ATTRIBUTE_OPEN notes that have the same
|
||||
full name field as the immediately preceeding note with the same type
|
||||
of name and whose address ranges coincide.
|
||||
- IE - it there are gaps in the coverage of the notes, then these gaps
|
||||
+ IE - if there are gaps in the coverage of the notes, then these gaps
|
||||
must be preserved.
|
||||
4. Combine the numeric value of any NT_GNU_BUILD_ATTRIBUTE_OPEN notes
|
||||
of type GNU_BUILD_ATTRIBUTE_STACK_SIZE.
|
||||
@@ -2182,16 +2182,47 @@ merge_gnu_build_notes (bfd * abfd, asect
|
||||
its description field is empty then the nearest preceeding OPEN note
|
||||
with a non-empty description field must also be preserved *OR* the
|
||||
description field of the note must be changed to contain the starting
|
||||
- address to which it refers. */
|
||||
+ address to which it refers.
|
||||
+ 6. Notes with the same start and end address can be deleted. */
|
||||
for (pnote = pnotes + 1; pnote < pnotes_end; pnote ++)
|
||||
{
|
||||
int note_type;
|
||||
objcopy_internal_note * back;
|
||||
objcopy_internal_note * prev_open_with_range = NULL;
|
||||
|
||||
+ /* Rule 6 - delete 0-range notes. */
|
||||
+ if (pnote->start == pnote->end)
|
||||
+ {
|
||||
+ duplicate_found = TRUE;
|
||||
+ pnote->note.type = 0;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
/* Rule 2 - preserve function notes. */
|
||||
if (! is_open_note (pnote))
|
||||
- continue;
|
||||
+ {
|
||||
+ int iter;
|
||||
+
|
||||
+ /* Check to see if there is an identical previous function note.
|
||||
+ This can happen with overlays for example. */
|
||||
+ for (iter = 0, back = pnote -1; back >= pnotes; back --)
|
||||
+ {
|
||||
+ if (back->start == pnote->start
|
||||
+ && back->end == pnote->end
|
||||
+ && back->note.namesz == pnote->note.namesz
|
||||
+ && memcmp (back->note.namedata, pnote->note.namedata, pnote->note.namesz) == 0)
|
||||
+ {
|
||||
+ duplicate_found = TRUE;
|
||||
+ pnote->note.type = 0;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ /* Don't scan too far back however. */
|
||||
+ if (iter ++ > 16)
|
||||
+ break;
|
||||
+ }
|
||||
+ continue;
|
||||
+ }
|
||||
|
||||
note_type = pnote->note.namedata[attribute_type_byte];
|
||||
|
77
SOURCES/binutils-page-to-segment-assignment.patch
Normal file
77
SOURCES/binutils-page-to-segment-assignment.patch
Normal file
@ -0,0 +1,77 @@
|
||||
diff --git a/bfd/elf.c b/bfd/elf.c
|
||||
index c132098558..325bdd545a 100644
|
||||
--- a/bfd/elf.c
|
||||
+++ b/bfd/elf.c
|
||||
@@ -4727,33 +4727,35 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
|
||||
the previous section, then we need a new segment. */
|
||||
new_segment = TRUE;
|
||||
}
|
||||
+ else if ((abfd->flags & D_PAGED) != 0
|
||||
+ && (((last_hdr->lma + last_size - 1) & -maxpagesize)
|
||||
+ == (hdr->lma & -maxpagesize)))
|
||||
+ {
|
||||
+ /* If we are demand paged then we can't map two disk
|
||||
+ pages onto the same memory page. */
|
||||
+ new_segment = FALSE;
|
||||
+ }
|
||||
/* In the next test we have to be careful when last_hdr->lma is close
|
||||
to the end of the address space. If the aligned address wraps
|
||||
around to the start of the address space, then there are no more
|
||||
pages left in memory and it is OK to assume that the current
|
||||
section can be included in the current segment. */
|
||||
- else if ((BFD_ALIGN (last_hdr->lma + last_size, maxpagesize) + maxpagesize
|
||||
- > last_hdr->lma)
|
||||
- && (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize) + maxpagesize
|
||||
- <= hdr->lma))
|
||||
+ else if ((BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
|
||||
+ + maxpagesize > last_hdr->lma)
|
||||
+ && (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
|
||||
+ + maxpagesize <= hdr->lma))
|
||||
{
|
||||
/* If putting this section in this segment would force us to
|
||||
skip a page in the segment, then we need a new segment. */
|
||||
new_segment = TRUE;
|
||||
}
|
||||
else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0
|
||||
- && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0
|
||||
- && ((abfd->flags & D_PAGED) == 0
|
||||
- || (((last_hdr->lma + last_size - 1) & -maxpagesize)
|
||||
- != (hdr->lma & -maxpagesize))))
|
||||
+ && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0)
|
||||
{
|
||||
/* We don't want to put a loaded section after a
|
||||
nonloaded (ie. bss style) section in the same segment
|
||||
as that will force the non-loaded section to be loaded.
|
||||
- Consider .tbss sections as loaded for this purpose.
|
||||
- However, like the writable/non-writable case below,
|
||||
- if they are on the same page then they must be put
|
||||
- in the same segment. */
|
||||
+ Consider .tbss sections as loaded for this purpose. */
|
||||
new_segment = TRUE;
|
||||
}
|
||||
else if ((abfd->flags & D_PAGED) == 0)
|
||||
@@ -4769,21 +4771,11 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
|
||||
{
|
||||
new_segment = TRUE;
|
||||
}
|
||||
- else if (! writable
|
||||
- && (hdr->flags & SEC_READONLY) == 0
|
||||
- && ((info != NULL
|
||||
- && info->relro_end > info->relro_start)
|
||||
- || (((last_hdr->lma + last_size - 1) & -maxpagesize)
|
||||
- != (hdr->lma & -maxpagesize))))
|
||||
+ else if (! writable
|
||||
+ && (hdr->flags & SEC_READONLY) == 0)
|
||||
{
|
||||
/* We don't want to put a writable section in a read only
|
||||
- segment, unless they are on the same page in memory
|
||||
- anyhow and there is no RELRO segment. We already
|
||||
- know that the last section does not bring us past the
|
||||
- current section on the page, so the only case in which
|
||||
- the new section is not on the same page as the previous
|
||||
- section is when the previous section ends precisely on
|
||||
- a page boundary. */
|
||||
+ segment. */
|
||||
new_segment = TRUE;
|
||||
}
|
||||
else
|
66
SOURCES/binutils-readelf-other-sym-info.patch
Normal file
66
SOURCES/binutils-readelf-other-sym-info.patch
Normal file
@ -0,0 +1,66 @@
|
||||
diff -rup binutils.orig/binutils/readelf.c binutils-2.29/binutils/readelf.c
|
||||
--- binutils.orig/binutils/readelf.c 2017-12-12 16:24:19.571221194 +0000
|
||||
+++ binutils-2.29/binutils/readelf.c 2017-12-12 16:27:26.997979803 +0000
|
||||
@@ -11018,12 +11018,14 @@ print_dynamic_symbol (bfd_vma si, unsign
|
||||
unsigned int vis = ELF_ST_VISIBILITY (psym->st_other);
|
||||
|
||||
printf (" %-7s", get_symbol_visibility (vis));
|
||||
+#if 0
|
||||
/* Check to see if any other bits in the st_other field are set.
|
||||
Note - displaying this information disrupts the layout of the
|
||||
table being generated, but for the moment this case is very
|
||||
rare. */
|
||||
if (psym->st_other ^ vis)
|
||||
printf (" [%s] ", get_symbol_other (filedata, psym->st_other ^ vis));
|
||||
+#endif
|
||||
}
|
||||
|
||||
printf (" %3.3s ", get_symbol_index_type (filedata, psym->st_shndx));
|
||||
@@ -11031,6 +11033,15 @@ print_dynamic_symbol (bfd_vma si, unsign
|
||||
print_symbol (25, GET_DYNAMIC_NAME (psym->st_name));
|
||||
else
|
||||
printf (_(" <corrupt: %14ld>"), psym->st_name);
|
||||
+#if 1
|
||||
+ {
|
||||
+ unsigned int vis = ELF_ST_VISIBILITY (psym->st_other);
|
||||
+
|
||||
+ /* Check to see if any other bits in the st_other field are set. */
|
||||
+ if (psym->st_other ^ vis)
|
||||
+ printf (" \t[%s]", get_symbol_other (filedata, psym->st_other ^ vis));
|
||||
+ }
|
||||
+#endif
|
||||
putchar ('\n');
|
||||
}
|
||||
|
||||
--- binutils.orig/binutils/readelf.c 2017-12-12 16:36:21.806561149 +0000
|
||||
+++ binutils-2.29.1/binutils/readelf.c 2017-12-12 16:38:17.763168514 +0000
|
||||
@@ -11548,11 +11548,13 @@ process_symbol_table (FILE * file)
|
||||
unsigned int vis = ELF_ST_VISIBILITY (psym->st_other);
|
||||
|
||||
printf (" %-7s", get_symbol_visibility (vis));
|
||||
+#if 0
|
||||
/* Check to see if any other bits in the st_other field are set.
|
||||
Note - displaying this information disrupts the layout of the
|
||||
table being generated, but for the moment this case is very rare. */
|
||||
if (psym->st_other ^ vis)
|
||||
printf (" [%s] ", get_symbol_other (filedata, psym->st_other ^ vis));
|
||||
+#endif
|
||||
}
|
||||
printf (" %4s ", get_symbol_index_type (filedata, psym->st_shndx));
|
||||
print_symbol (25, psym->st_name < strtab_size
|
||||
@@ -11571,7 +11573,15 @@ process_symbol_table (FILE * file)
|
||||
printf (sym_info == symbol_hidden ? "@%s" : "@@%s",
|
||||
version_string);
|
||||
}
|
||||
+#if 1
|
||||
+ {
|
||||
+ unsigned int vis = ELF_ST_VISIBILITY (psym->st_other);
|
||||
|
||||
+ /* Check to see if any other bits in the st_other field are set. */
|
||||
+ if (psym->st_other ^ vis)
|
||||
+ printf (" \t[%s] ", get_symbol_other (filedata, psym->st_other ^ vis));
|
||||
+ }
|
||||
+#endif
|
||||
putchar ('\n');
|
||||
|
||||
if (ELF_ST_BIND (psym->st_info) == STB_LOCAL
|
314
SOURCES/binutils-remove-empty-ISA-properties.patch
Normal file
314
SOURCES/binutils-remove-empty-ISA-properties.patch
Normal file
@ -0,0 +1,314 @@
|
||||
diff -rup binutils.orig/bfd/elfxx-x86.c binutils-2.30/bfd/elfxx-x86.c
|
||||
--- binutils.orig/bfd/elfxx-x86.c 2018-07-30 16:01:04.881710127 +0100
|
||||
+++ binutils-2.30/bfd/elfxx-x86.c 2018-07-30 16:01:28.809447800 +0100
|
||||
@@ -2320,13 +2320,34 @@ _bfd_x86_elf_merge_gnu_properties (struc
|
||||
{
|
||||
number = aprop->u.number;
|
||||
aprop->u.number = number | bprop->u.number;
|
||||
- updated = number != (unsigned int) aprop->u.number;
|
||||
+ /* Remove the property if ISA bits are empty. */
|
||||
+ if (aprop->u.number == 0)
|
||||
+ {
|
||||
+ aprop->pr_kind = property_remove;
|
||||
+ updated = TRUE;
|
||||
+ }
|
||||
+ else
|
||||
+ updated = number != (unsigned int) aprop->u.number;
|
||||
}
|
||||
else
|
||||
{
|
||||
- /* Return TRUE if APROP is NULL to indicate that BPROP should
|
||||
- be added to ABFD. */
|
||||
- updated = aprop == NULL;
|
||||
+ /* Only one of APROP and BPROP can be NULL. */
|
||||
+ if (aprop != NULL)
|
||||
+ {
|
||||
+ if (aprop->u.number == 0)
|
||||
+ {
|
||||
+ /* Remove APROP if ISA bits are empty. */
|
||||
+ aprop->pr_kind = property_remove;
|
||||
+ updated = TRUE;
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ /* Return TRUE if APROP is NULL and ISA bits of BPROP
|
||||
+ aren't empty to indicate that BPROP should be added
|
||||
+ to ABFD. */
|
||||
+ updated = bprop->u.number != 0;
|
||||
+ }
|
||||
}
|
||||
break;
|
||||
|
||||
diff -rup binutils.orig/ld/testsuite/ld-i386/i386.exp binutils-2.30/ld/testsuite/ld-i386/i386.exp
|
||||
--- binutils.orig/ld/testsuite/ld-i386/i386.exp 2018-07-30 16:00:54.241826775 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-i386/i386.exp 2018-07-30 16:02:58.911459984 +0100
|
||||
@@ -450,6 +450,8 @@ run_dump_test "pr22115-1b"
|
||||
run_dump_test "pr22115-1c"
|
||||
run_dump_test "pr22115-1d"
|
||||
run_dump_test "pr22135"
|
||||
+run_dump_test "pr23372a"
|
||||
+run_dump_test "pr23372b"
|
||||
|
||||
if { !([istarget "i?86-*-linux*"]
|
||||
|| [istarget "i?86-*-gnu*"]
|
||||
diff -rup binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp binutils-2.30/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
--- binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp 2018-07-30 16:00:55.340814726 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/x86-64.exp 2018-07-30 16:03:32.624090383 +0100
|
||||
@@ -379,6 +379,10 @@ run_dump_test "pr22115-1c-x32"
|
||||
run_dump_test "pr22115-1d"
|
||||
run_dump_test "pr22115-1d-x32"
|
||||
run_dump_test "pr22135"
|
||||
+run_dump_test "pr23372a"
|
||||
+run_dump_test "pr23372a-x32"
|
||||
+run_dump_test "pr23372b"
|
||||
+run_dump_test "pr23372b-x32"
|
||||
|
||||
if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} {
|
||||
return
|
||||
diff --git a/ld/testsuite/ld-i386/pr23372a.d b/ld/testsuite/ld-i386/pr23372a.d
|
||||
new file mode 100644
|
||||
index 0000000000..b75523bdc3
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-i386/pr23372a.d
|
||||
@@ -0,0 +1,5 @@
|
||||
+#source: pr23372a.s
|
||||
+#source: pr23372b.s
|
||||
+#as: --32
|
||||
+#ld: -r -m elf_i386
|
||||
+#readelf: -n
|
||||
diff --git a/ld/testsuite/ld-i386/pr23372a.s b/ld/testsuite/ld-i386/pr23372a.s
|
||||
new file mode 100644
|
||||
index 0000000000..9849d620a1
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-i386/pr23372a.s
|
||||
@@ -0,0 +1,18 @@
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+ .p2align 2
|
||||
+ .long 1f - 0f /* name length. */
|
||||
+ .long 4f - 1f /* data length. */
|
||||
+ /* NT_GNU_PROPERTY_TYPE_0 */
|
||||
+ .long 5 /* note type. */
|
||||
+0:
|
||||
+ .asciz "GNU" /* vendor name. */
|
||||
+1:
|
||||
+ .p2align 2
|
||||
+ /* GNU_PROPERTY_X86_ISA_1_USED */
|
||||
+ .long 0xc0000000 /* pr_type. */
|
||||
+ .long 3f - 2f /* pr_datasz. */
|
||||
+2:
|
||||
+ .long 0x0
|
||||
+3:
|
||||
+ .p2align 2
|
||||
+4:
|
||||
diff --git a/ld/testsuite/ld-i386/pr23372b.d b/ld/testsuite/ld-i386/pr23372b.d
|
||||
new file mode 100644
|
||||
index 0000000000..a8e9c819a4
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-i386/pr23372b.d
|
||||
@@ -0,0 +1,5 @@
|
||||
+#source: pr23372a.s
|
||||
+#source: pr23372c.s
|
||||
+#as: --32
|
||||
+#ld: -r -m elf_i386
|
||||
+#readelf: -n
|
||||
diff --git a/ld/testsuite/ld-i386/pr23372b.s b/ld/testsuite/ld-i386/pr23372b.s
|
||||
new file mode 100644
|
||||
index 0000000000..9849d620a1
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-i386/pr23372b.s
|
||||
@@ -0,0 +1,18 @@
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+ .p2align 2
|
||||
+ .long 1f - 0f /* name length. */
|
||||
+ .long 4f - 1f /* data length. */
|
||||
+ /* NT_GNU_PROPERTY_TYPE_0 */
|
||||
+ .long 5 /* note type. */
|
||||
+0:
|
||||
+ .asciz "GNU" /* vendor name. */
|
||||
+1:
|
||||
+ .p2align 2
|
||||
+ /* GNU_PROPERTY_X86_ISA_1_USED */
|
||||
+ .long 0xc0000000 /* pr_type. */
|
||||
+ .long 3f - 2f /* pr_datasz. */
|
||||
+2:
|
||||
+ .long 0x0
|
||||
+3:
|
||||
+ .p2align 2
|
||||
+4:
|
||||
diff --git a/ld/testsuite/ld-i386/pr23372c.s b/ld/testsuite/ld-i386/pr23372c.s
|
||||
new file mode 100644
|
||||
index 0000000000..3470dce649
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-i386/pr23372c.s
|
||||
@@ -0,0 +1,18 @@
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+ .p2align 2
|
||||
+ .long 1f - 0f /* name length. */
|
||||
+ .long 4f - 1f /* data length. */
|
||||
+ /* NT_GNU_PROPERTY_TYPE_0 */
|
||||
+ .long 5 /* note type. */
|
||||
+0:
|
||||
+ .asciz "GNU" /* vendor name. */
|
||||
+1:
|
||||
+ .p2align 2
|
||||
+ /* GNU_PROPERTY_X86_ISA_1_NEEDED */
|
||||
+ .long 0xc0000001 /* pr_type. */
|
||||
+ .long 3f - 2f /* pr_datasz. */
|
||||
+2:
|
||||
+ .long 0x0
|
||||
+3:
|
||||
+ .p2align 2
|
||||
+4:
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23372a-x32.d b/ld/testsuite/ld-x86-64/pr23372a-x32.d
|
||||
new file mode 100644
|
||||
index 0000000000..9f93642364
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23372a-x32.d
|
||||
@@ -0,0 +1,5 @@
|
||||
+#source: pr23372a.s
|
||||
+#source: pr23372b.s
|
||||
+#as: --x32
|
||||
+#ld: -r -m elf32_x86_64
|
||||
+#readelf: -n
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23372a.d b/ld/testsuite/ld-x86-64/pr23372a.d
|
||||
new file mode 100644
|
||||
index 0000000000..ee688fc2e2
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23372a.d
|
||||
@@ -0,0 +1,5 @@
|
||||
+#source: pr23372a.s
|
||||
+#source: pr23372b.s
|
||||
+#as: --64 -defsym __64_bit__=1
|
||||
+#ld: -r -m elf_x86_64
|
||||
+#readelf: -n
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23372a.s b/ld/testsuite/ld-x86-64/pr23372a.s
|
||||
new file mode 100644
|
||||
index 0000000000..639fc26de4
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23372a.s
|
||||
@@ -0,0 +1,30 @@
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ .long 1f - 0f /* name length. */
|
||||
+ .long 4f - 1f /* data length. */
|
||||
+ /* NT_GNU_PROPERTY_TYPE_0 */
|
||||
+ .long 5 /* note type. */
|
||||
+0:
|
||||
+ .asciz "GNU" /* vendor name. */
|
||||
+1:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ /* GNU_PROPERTY_X86_ISA_1_USED */
|
||||
+ .long 0xc0000000 /* pr_type. */
|
||||
+ .long 3f - 2f /* pr_datasz. */
|
||||
+2:
|
||||
+ .long 0x0
|
||||
+3:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+4:
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23372b-x32.d b/ld/testsuite/ld-x86-64/pr23372b-x32.d
|
||||
new file mode 100644
|
||||
index 0000000000..5b0cf98618
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23372b-x32.d
|
||||
@@ -0,0 +1,5 @@
|
||||
+#source: pr23372a.s
|
||||
+#source: pr23372c.s
|
||||
+#as: --x32
|
||||
+#ld: -r -m elf32_x86_64
|
||||
+#readelf: -n
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23372b.d b/ld/testsuite/ld-x86-64/pr23372b.d
|
||||
new file mode 100644
|
||||
index 0000000000..727afa8ab5
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23372b.d
|
||||
@@ -0,0 +1,5 @@
|
||||
+#source: pr23372a.s
|
||||
+#source: pr23372c.s
|
||||
+#as: --64 -defsym __64_bit__=1
|
||||
+#ld: -r -m elf_x86_64
|
||||
+#readelf: -n
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23372b.s b/ld/testsuite/ld-x86-64/pr23372b.s
|
||||
new file mode 100644
|
||||
index 0000000000..639fc26de4
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23372b.s
|
||||
@@ -0,0 +1,30 @@
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ .long 1f - 0f /* name length. */
|
||||
+ .long 4f - 1f /* data length. */
|
||||
+ /* NT_GNU_PROPERTY_TYPE_0 */
|
||||
+ .long 5 /* note type. */
|
||||
+0:
|
||||
+ .asciz "GNU" /* vendor name. */
|
||||
+1:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ /* GNU_PROPERTY_X86_ISA_1_USED */
|
||||
+ .long 0xc0000000 /* pr_type. */
|
||||
+ .long 3f - 2f /* pr_datasz. */
|
||||
+2:
|
||||
+ .long 0x0
|
||||
+3:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+4:
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23372c.s b/ld/testsuite/ld-x86-64/pr23372c.s
|
||||
new file mode 100644
|
||||
index 0000000000..b4eaf69777
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23372c.s
|
||||
@@ -0,0 +1,30 @@
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ .long 1f - 0f /* name length. */
|
||||
+ .long 4f - 1f /* data length. */
|
||||
+ /* NT_GNU_PROPERTY_TYPE_0 */
|
||||
+ .long 5 /* note type. */
|
||||
+0:
|
||||
+ .asciz "GNU" /* vendor name. */
|
||||
+1:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ /* GNU_PROPERTY_X86_ISA_1_NEEDED */
|
||||
+ .long 0xc0000001 /* pr_type. */
|
||||
+ .long 3f - 2f /* pr_datasz. */
|
||||
+2:
|
||||
+ .long 0x0
|
||||
+3:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+4:
|
749
SOURCES/binutils-revert-PowerPC-speculation-barriers.patch
Normal file
749
SOURCES/binutils-revert-PowerPC-speculation-barriers.patch
Normal file
@ -0,0 +1,749 @@
|
||||
diff -rup binutils.orig/bfd/elf32-ppc.c binutils-2.30/bfd/elf32-ppc.c
|
||||
--- binutils.orig/bfd/elf32-ppc.c 2018-02-08 10:49:07.649185371 +0000
|
||||
+++ binutils-2.30/bfd/elf32-ppc.c 2018-02-08 10:50:11.058395459 +0000
|
||||
@@ -69,7 +69,7 @@ static bfd_reloc_status_type ppc_elf_unh
|
||||
/* For new-style .glink and .plt. */
|
||||
#define GLINK_PLTRESOLVE 16*4
|
||||
#define GLINK_ENTRY_SIZE(htab, h) \
|
||||
- (((!htab->params->speculate_indirect_jumps ? 6*4 : 4*4) \
|
||||
+ ((4*4 \
|
||||
+ (h != NULL \
|
||||
&& h == htab->tls_get_addr \
|
||||
&& !htab->params->no_tls_get_addr_opt ? 8*4 : 0) \
|
||||
@@ -155,8 +155,6 @@ static const bfd_vma ppc_elf_vxworks_pic
|
||||
#define BA 0x48000002
|
||||
#define BCL_20_31 0x429f0005
|
||||
#define BCTR 0x4e800420
|
||||
-#define CRSETEQ 0x4c421242
|
||||
-#define BEQCTRM 0x4dc20420
|
||||
#define BEQLR 0x4d820020
|
||||
#define CMPWI_11_0 0x2c0b0000
|
||||
#define LIS_11 0x3d600000
|
||||
@@ -2880,14 +2878,15 @@ ppc_elf_final_write_processing (bfd *abf
|
||||
static bfd_boolean
|
||||
is_nonpic_glink_stub (bfd *abfd, asection *glink, bfd_vma off)
|
||||
{
|
||||
- bfd_byte buf[3 * 4];
|
||||
+ bfd_byte buf[4 * 4];
|
||||
|
||||
if (!bfd_get_section_contents (abfd, glink, buf, off, sizeof buf))
|
||||
return FALSE;
|
||||
|
||||
return ((bfd_get_32 (abfd, buf + 0) & 0xffff0000) == LIS_11
|
||||
&& (bfd_get_32 (abfd, buf + 4) & 0xffff0000) == LWZ_11_11
|
||||
- && bfd_get_32 (abfd, buf + 8) == MTCTR_11);
|
||||
+ && bfd_get_32 (abfd, buf + 8) == MTCTR_11
|
||||
+ && bfd_get_32 (abfd, buf + 12) == BCTR);
|
||||
}
|
||||
|
||||
static bfd_boolean
|
||||
@@ -3366,7 +3365,7 @@ ppc_elf_link_hash_table_create (bfd *abf
|
||||
{
|
||||
struct ppc_elf_link_hash_table *ret;
|
||||
static struct ppc_elf_params default_params
|
||||
- = { PLT_OLD, 0, 1, 0, 1, 0, 0, 12, 0, 0, 0 };
|
||||
+ = { PLT_OLD, 0, 0, 1, 0, 0, 12, 0, 0, 0 };
|
||||
|
||||
ret = bfd_zmalloc (sizeof (struct ppc_elf_link_hash_table));
|
||||
if (ret == NULL)
|
||||
@@ -7171,8 +7170,6 @@ ppc_elf_relax_section (bfd *abfd,
|
||||
size = 4 * ARRAY_SIZE (stub_entry);
|
||||
insn_offset = 0;
|
||||
}
|
||||
- if (!htab->params->speculate_indirect_jumps)
|
||||
- size += 8;
|
||||
stub_rtype = R_PPC_RELAX;
|
||||
if (tsec == htab->elf.splt
|
||||
|| tsec == htab->glink)
|
||||
@@ -7454,26 +7451,6 @@ elf_finish_pointer_linker_section (bfd *
|
||||
#define PPC_HI(v) (((v) >> 16) & 0xffff)
|
||||
#define PPC_HA(v) PPC_HI ((v) + 0x8000)
|
||||
|
||||
-static inline bfd_byte *
|
||||
-output_bctr (struct ppc_elf_link_hash_table *htab, bfd *obfd, bfd_byte *p)
|
||||
-{
|
||||
- if (!htab->params->speculate_indirect_jumps)
|
||||
- {
|
||||
- bfd_put_32 (obfd, CRSETEQ, p);
|
||||
- p += 4;
|
||||
- bfd_put_32 (obfd, BEQCTRM, p);
|
||||
- p += 4;
|
||||
- bfd_put_32 (obfd, B, p);
|
||||
- p += 4;
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- bfd_put_32 (obfd, BCTR, p);
|
||||
- p += 4;
|
||||
- }
|
||||
- return p;
|
||||
-}
|
||||
-
|
||||
static void
|
||||
write_glink_stub (struct elf_link_hash_entry *h, struct plt_entry *ent,
|
||||
asection *plt_sec, unsigned char *p,
|
||||
@@ -7541,7 +7518,8 @@ write_glink_stub (struct elf_link_hash_e
|
||||
p += 4;
|
||||
bfd_put_32 (output_bfd, MTCTR_11, p);
|
||||
p += 4;
|
||||
- p = output_bctr (htab, output_bfd, p);
|
||||
+ bfd_put_32 (output_bfd, BCTR, p);
|
||||
+ p += 4;
|
||||
while (p < end)
|
||||
{
|
||||
bfd_put_32 (output_bfd, htab->params->ppc476_workaround ? BA : NOP, p);
|
||||
@@ -8979,7 +8957,6 @@ ppc_elf_relocate_section (bfd *output_bf
|
||||
stub = stub_entry;
|
||||
size = ARRAY_SIZE (stub_entry);
|
||||
}
|
||||
- --size;
|
||||
|
||||
relocation += addend;
|
||||
if (bfd_link_relocatable (info))
|
||||
@@ -9004,7 +8981,6 @@ ppc_elf_relocate_section (bfd *output_bf
|
||||
bfd_put_32 (input_bfd, insn, contents + insn_offset);
|
||||
insn_offset += 4;
|
||||
}
|
||||
- output_bctr (htab, input_bfd, contents + insn_offset);
|
||||
|
||||
/* Rewrite the reloc and convert one of the trailing nop
|
||||
relocs to describe this relocation. */
|
||||
@@ -10713,7 +10689,8 @@ ppc_elf_finish_dynamic_sections (bfd *ou
|
||||
p += 4;
|
||||
bfd_put_32 (output_bfd, ADD_11_0_11, p);
|
||||
p += 4;
|
||||
- p = output_bctr (htab, output_bfd, p);
|
||||
+ bfd_put_32 (output_bfd, BCTR, p);
|
||||
+ p += 4;
|
||||
while (p < endp)
|
||||
{
|
||||
bfd_put_32 (output_bfd,
|
||||
diff -rup binutils.orig/bfd/elf32-ppc.h binutils-2.30/bfd/elf32-ppc.h
|
||||
--- binutils.orig/bfd/elf32-ppc.h 2018-02-08 10:49:07.644185433 +0000
|
||||
+++ binutils-2.30/bfd/elf32-ppc.h 2018-02-08 10:50:11.058395459 +0000
|
||||
@@ -35,9 +35,6 @@ struct ppc_elf_params
|
||||
/* Set if individual PLT call stubs should be aligned. */
|
||||
int plt_stub_align;
|
||||
|
||||
- /* Clear if PLT call stubs should use a speculative execution barrier. */
|
||||
- int speculate_indirect_jumps;
|
||||
-
|
||||
/* Whether to emit symbols for stubs. */
|
||||
int emit_stub_syms;
|
||||
|
||||
diff -rup binutils.orig/bfd/elf64-ppc.c binutils-2.30/bfd/elf64-ppc.c
|
||||
--- binutils.orig/bfd/elf64-ppc.c 2018-02-08 10:49:07.645185421 +0000
|
||||
+++ binutils-2.30/bfd/elf64-ppc.c 2018-02-08 10:50:11.060395434 +0000
|
||||
@@ -161,10 +161,6 @@ static bfd_vma opd_entry_value
|
||||
#define LD_R11_0R11 0xe96b0000 /* ld %r11,xxx+16@l(%r11) */
|
||||
#define BCTR 0x4e800420 /* bctr */
|
||||
|
||||
-#define CRSETEQ 0x4c421242 /* crset 4*%cr0+%eq */
|
||||
-#define BEQCTRM 0x4dc20420 /* beqctr- */
|
||||
-#define BEQCTRLM 0x4dc20421 /* beqctrl- */
|
||||
-
|
||||
#define ADDI_R11_R11 0x396b0000 /* addi %r11,%r11,off@l */
|
||||
#define ADDIS_R2_R2 0x3c420000 /* addis %r2,%r2,off@ha */
|
||||
#define ADDI_R2_R2 0x38420000 /* addi %r2,%r2,off@l */
|
||||
@@ -193,8 +189,7 @@ static bfd_vma opd_entry_value
|
||||
|
||||
/* __glink_PLTresolve stub instructions. We enter with the index in R0. */
|
||||
#define GLINK_PLTRESOLVE_SIZE(htab) \
|
||||
- (8u + (htab->opd_abi ? 11 * 4 : 14 * 4) \
|
||||
- + (!htab->params->speculate_indirect_jumps ? 2 * 4 : 0))
|
||||
+ (8u + (htab->opd_abi ? 11 * 4 : 14 * 4))
|
||||
/* 0: */
|
||||
/* .quad plt0-1f */
|
||||
/* __glink: */
|
||||
@@ -9886,8 +9881,6 @@ size_global_entry_stubs (struct elf_link
|
||||
unsigned int align_power;
|
||||
|
||||
stub_size = 16;
|
||||
- if (!htab->params->speculate_indirect_jumps)
|
||||
- stub_size += 8;
|
||||
stub_off = s->size;
|
||||
if (htab->params->plt_stub_align >= 0)
|
||||
align_power = htab->params->plt_stub_align;
|
||||
@@ -10453,8 +10446,6 @@ plt_stub_size (struct ppc_link_hash_tabl
|
||||
size += 4;
|
||||
if (PPC_HA (off) != 0)
|
||||
size += 4;
|
||||
- if (!htab->params->speculate_indirect_jumps)
|
||||
- size += 8;
|
||||
if (htab->opd_abi)
|
||||
{
|
||||
size += 4;
|
||||
@@ -10476,11 +10467,7 @@ plt_stub_size (struct ppc_link_hash_tabl
|
||||
size += 7 * 4;
|
||||
if (ALWAYS_EMIT_R2SAVE
|
||||
|| stub_entry->stub_type == ppc_stub_plt_call_r2save)
|
||||
- {
|
||||
- size += 6 * 4;
|
||||
- if (!htab->params->speculate_indirect_jumps)
|
||||
- size -= 4;
|
||||
- }
|
||||
+ size += 6 * 4;
|
||||
}
|
||||
return size;
|
||||
}
|
||||
@@ -10515,26 +10502,6 @@ plt_stub_pad (struct ppc_link_hash_table
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static inline bfd_byte *
|
||||
-output_bctr (struct ppc_link_hash_table *htab, bfd *obfd, bfd_byte *p)
|
||||
-{
|
||||
- if (!htab->params->speculate_indirect_jumps)
|
||||
- {
|
||||
- bfd_put_32 (obfd, CRSETEQ, p);
|
||||
- p += 4;
|
||||
- bfd_put_32 (obfd, BEQCTRM, p);
|
||||
- p += 4;
|
||||
- bfd_put_32 (obfd, B_DOT, p);
|
||||
- p += 4;
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- bfd_put_32 (obfd, BCTR, p);
|
||||
- p += 4;
|
||||
- }
|
||||
- return p;
|
||||
-}
|
||||
-
|
||||
/* Build a .plt call stub. */
|
||||
|
||||
static inline bfd_byte *
|
||||
@@ -10555,7 +10522,6 @@ build_plt_stub (struct ppc_link_hash_tab
|
||||
if (!ALWAYS_USE_FAKE_DEP
|
||||
&& plt_load_toc
|
||||
&& plt_thread_safe
|
||||
- && htab->params->speculate_indirect_jumps
|
||||
&& !((stub_entry->h == htab->tls_get_addr_fd
|
||||
|| stub_entry->h == htab->tls_get_addr)
|
||||
&& htab->params->tls_get_addr_opt))
|
||||
@@ -10710,7 +10676,7 @@ build_plt_stub (struct ppc_link_hash_tab
|
||||
bfd_put_32 (obfd, B_DOT | (cmp_branch_off & 0x3fffffc), p), p += 4;
|
||||
}
|
||||
else
|
||||
- p = output_bctr (htab, obfd, p);
|
||||
+ bfd_put_32 (obfd, BCTR, p), p += 4;
|
||||
return p;
|
||||
}
|
||||
|
||||
@@ -10754,13 +10720,7 @@ build_tls_get_addr_stub (struct ppc_link
|
||||
if (r != NULL)
|
||||
r[0].r_offset += 2 * 4;
|
||||
p = build_plt_stub (htab, stub_entry, p, offset, r);
|
||||
- if (!htab->params->speculate_indirect_jumps)
|
||||
- {
|
||||
- p -= 4;
|
||||
- bfd_put_32 (obfd, BEQCTRLM, p - 4);
|
||||
- }
|
||||
- else
|
||||
- bfd_put_32 (obfd, BCTRL, p - 4);
|
||||
+ bfd_put_32 (obfd, BCTRL, p - 4);
|
||||
|
||||
bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p), p += 4;
|
||||
bfd_put_32 (obfd, LD_R11_0R1 + STK_LINKER (htab), p), p += 4;
|
||||
@@ -11113,7 +11073,8 @@ ppc_build_one_stub (struct bfd_hash_entr
|
||||
p += 4;
|
||||
bfd_put_32 (htab->params->stub_bfd, MTCTR_R12, p);
|
||||
p += 4;
|
||||
- p = output_bctr (htab, htab->params->stub_bfd, p);
|
||||
+ bfd_put_32 (htab->params->stub_bfd, BCTR, p);
|
||||
+ p += 4;
|
||||
break;
|
||||
|
||||
case ppc_stub_plt_call:
|
||||
@@ -11446,8 +11407,6 @@ ppc_size_one_stub (struct bfd_hash_entry
|
||||
if (PPC_LO (r2off) != 0)
|
||||
size += 4;
|
||||
}
|
||||
- if (!htab->params->speculate_indirect_jumps)
|
||||
- size += 8;
|
||||
}
|
||||
else if (info->emitrelocations)
|
||||
{
|
||||
@@ -13089,7 +13048,7 @@ build_global_entry_stubs (struct elf_lin
|
||||
p += 4;
|
||||
bfd_put_32 (s->owner, MTCTR_R12, p);
|
||||
p += 4;
|
||||
- output_bctr (htab, s->owner, p);
|
||||
+ bfd_put_32 (s->owner, BCTR, p);
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
@@ -13218,7 +13177,8 @@ ppc64_elf_build_stubs (struct bfd_link_i
|
||||
bfd_put_32 (htab->glink->owner, LD_R11_0R11 | 8, p);
|
||||
p += 4;
|
||||
}
|
||||
- p = output_bctr (htab, htab->glink->owner, p);
|
||||
+ bfd_put_32 (htab->glink->owner, BCTR, p);
|
||||
+ p += 4;
|
||||
BFD_ASSERT (p == htab->glink->contents + GLINK_PLTRESOLVE_SIZE (htab));
|
||||
|
||||
/* Build the .glink lazy link call stubs. */
|
||||
diff -rup binutils.orig/bfd/elf64-ppc.h binutils-2.30/bfd/elf64-ppc.h
|
||||
--- binutils.orig/bfd/elf64-ppc.h 2018-02-08 10:49:07.637185520 +0000
|
||||
+++ binutils-2.30/bfd/elf64-ppc.h 2018-02-08 10:50:11.060395434 +0000
|
||||
@@ -51,9 +51,6 @@ struct ppc64_elf_params
|
||||
/* Set if PLT call stubs for localentry:0 functions should omit r2 save. */
|
||||
int plt_localentry0;
|
||||
|
||||
- /* Clear if PLT call stubs should use a speculative execution barrier. */
|
||||
- int speculate_indirect_jumps;
|
||||
-
|
||||
/* Whether to canonicalize .opd so that there are no overlapping
|
||||
.opd entries. */
|
||||
int non_overlapping_opd;
|
||||
diff -rup binutils.orig/gold/options.h binutils-2.30/gold/options.h
|
||||
--- binutils.orig/gold/options.h 2018-02-08 10:49:07.354189045 +0000
|
||||
+++ binutils-2.30/gold/options.h 2018-02-08 10:50:11.060395434 +0000
|
||||
@@ -1108,10 +1108,6 @@ class General_options
|
||||
N_("(PowerPC64 only) Optimize calls to ELFv2 localentry:0 functions"),
|
||||
N_("(PowerPC64 only) Don't optimize ELFv2 calls"));
|
||||
|
||||
- DEFINE_bool(speculate_indirect_jumps, options::TWO_DASHES, '\0', true,
|
||||
- N_("(PowerPC only) PLT call stubs without speculation barrier"),
|
||||
- N_("(PowerPC only) PLT call stubs with speculation barrier"));
|
||||
-
|
||||
DEFINE_bool(plt_static_chain, options::TWO_DASHES, '\0', false,
|
||||
N_("(PowerPC64 only) PLT call stubs should load r11"),
|
||||
N_("(PowerPC64 only) PLT call stubs should not load r11"));
|
||||
diff -rup binutils.orig/gold/powerpc.cc binutils-2.30/gold/powerpc.cc
|
||||
--- binutils.orig/gold/powerpc.cc 2018-02-08 10:49:07.355189033 +0000
|
||||
+++ binutils-2.30/gold/powerpc.cc 2018-02-08 10:50:11.061395422 +0000
|
||||
@@ -3781,8 +3781,6 @@ static const uint32_t b = 0x48000000;
|
||||
static const uint32_t bcl_20_31 = 0x429f0005;
|
||||
static const uint32_t bctr = 0x4e800420;
|
||||
static const uint32_t bctrl = 0x4e800421;
|
||||
-static const uint32_t beqctrm = 0x4dc20420;
|
||||
-static const uint32_t beqctrlm = 0x4dc20421;
|
||||
static const uint32_t beqlr = 0x4d820020;
|
||||
static const uint32_t blr = 0x4e800020;
|
||||
static const uint32_t bnectr_p4 = 0x4ce20420;
|
||||
@@ -3792,7 +3790,6 @@ static const uint32_t cmpdi_11_0 = 0x2c2
|
||||
static const uint32_t cmpwi_11_0 = 0x2c0b0000;
|
||||
static const uint32_t cror_15_15_15 = 0x4def7b82;
|
||||
static const uint32_t cror_31_31_31 = 0x4ffffb82;
|
||||
-static const uint32_t crseteq = 0x4c421242;
|
||||
static const uint32_t ld_0_1 = 0xe8010000;
|
||||
static const uint32_t ld_0_12 = 0xe80c0000;
|
||||
static const uint32_t ld_2_1 = 0xe8410000;
|
||||
@@ -4168,24 +4165,6 @@ write_insn(unsigned char* p, uint32_t v)
|
||||
elfcpp::Swap<32, big_endian>::writeval(p, v);
|
||||
}
|
||||
|
||||
-template<bool big_endian>
|
||||
-static unsigned char*
|
||||
-output_bctr(unsigned char* p)
|
||||
-{
|
||||
- if (!parameters->options().speculate_indirect_jumps())
|
||||
- {
|
||||
- write_insn<big_endian>(p, crseteq);
|
||||
- p += 4;
|
||||
- write_insn<big_endian>(p, beqctrm);
|
||||
- p += 4;
|
||||
- write_insn<big_endian>(p, b);
|
||||
- }
|
||||
- else
|
||||
- write_insn<big_endian>(p, bctr);
|
||||
- p += 4;
|
||||
- return p;
|
||||
-}
|
||||
-
|
||||
template<int size>
|
||||
static inline unsigned int
|
||||
param_plt_align()
|
||||
@@ -4454,7 +4433,6 @@ class Stub_table : public Output_relaxed
|
||||
{
|
||||
const Symbol* gsym = p->first.sym_;
|
||||
return (4 * 4
|
||||
- + (!parameters->options().speculate_indirect_jumps() ? 2 * 4 : 0)
|
||||
+ (this->targ_->is_tls_get_addr_opt(gsym) ? 8 * 4 : 0));
|
||||
}
|
||||
|
||||
@@ -4470,8 +4448,6 @@ class Stub_table : public Output_relaxed
|
||||
got_addr += ppcobj->toc_base_offset();
|
||||
Address off = plt_addr - got_addr;
|
||||
unsigned int bytes = 4 * 4 + 4 * (ha(off) != 0);
|
||||
- if (!parameters->options().speculate_indirect_jumps())
|
||||
- bytes += 2 * 4;
|
||||
const Symbol* gsym = p->first.sym_;
|
||||
if (this->targ_->is_tls_get_addr_opt(gsym))
|
||||
bytes += 13 * 4;
|
||||
@@ -4502,8 +4478,6 @@ class Stub_table : public Output_relaxed
|
||||
if (p->first.dest_ - loc + (1 << 25) < 2 << 25)
|
||||
return 4;
|
||||
unsigned int bytes = 16;
|
||||
- if (!parameters->options().speculate_indirect_jumps())
|
||||
- bytes += 8;
|
||||
if (size == 32 && parameters->options().output_is_position_independent())
|
||||
bytes += 16;
|
||||
return bytes;
|
||||
@@ -4955,8 +4929,7 @@ class Output_data_glink : public Output_
|
||||
{
|
||||
if (size == 64)
|
||||
return (8
|
||||
- + (this->targ_->abiversion() < 2 ? 11 * 4 : 14 * 4)
|
||||
- + (!parameters->options().speculate_indirect_jumps() ? 2 * 4 : 0));
|
||||
+ + (this->targ_->abiversion() < 2 ? 11 * 4 : 14 * 4));
|
||||
return 16 * 4;
|
||||
}
|
||||
|
||||
@@ -5033,8 +5006,7 @@ Output_data_glink<size, big_endian>::add
|
||||
std::pair<typename Global_entry_stub_entries::iterator, bool> p
|
||||
= this->global_entry_stubs_.insert(std::make_pair(gsym, off));
|
||||
if (p.second)
|
||||
- this->ge_size_
|
||||
- = off + 16 + (!parameters->options().speculate_indirect_jumps() ? 8 : 0);
|
||||
+ this->ge_size_ = off + 16;
|
||||
}
|
||||
|
||||
template<int size, bool big_endian>
|
||||
@@ -5223,10 +5195,7 @@ Stub_table<size, big_endian>::do_write(O
|
||||
= plt_load_toc && this->targ_->plt_thread_safe();
|
||||
bool use_fake_dep = false;
|
||||
Address cmp_branch_off = 0;
|
||||
- if (thread_safe
|
||||
- && !parameters->options().speculate_indirect_jumps())
|
||||
- use_fake_dep = true;
|
||||
- else if (thread_safe)
|
||||
+ if (thread_safe)
|
||||
{
|
||||
unsigned int pltindex
|
||||
= ((pltoff - this->targ_->first_plt_entry_offset())
|
||||
@@ -5274,7 +5243,7 @@ Stub_table<size, big_endian>::do_write(O
|
||||
+ this->targ_->stk_linker()));
|
||||
p += 4;
|
||||
}
|
||||
- use_fake_dep |= thread_safe;
|
||||
+ use_fake_dep = thread_safe;
|
||||
}
|
||||
if (ha(off) != 0)
|
||||
{
|
||||
@@ -5365,14 +5334,7 @@ Stub_table<size, big_endian>::do_write(O
|
||||
if (!cs->second.localentry0_
|
||||
&& this->targ_->is_tls_get_addr_opt(gsym))
|
||||
{
|
||||
- if (!parameters->options().speculate_indirect_jumps())
|
||||
- {
|
||||
- write_insn<big_endian>(p, crseteq);
|
||||
- p += 4;
|
||||
- write_insn<big_endian>(p, beqctrlm);
|
||||
- }
|
||||
- else
|
||||
- write_insn<big_endian>(p, bctrl);
|
||||
+ write_insn<big_endian>(p, bctrl);
|
||||
p += 4;
|
||||
write_insn<big_endian>(p, ld_2_1 + this->targ_->stk_toc());
|
||||
p += 4;
|
||||
@@ -5391,7 +5353,7 @@ Stub_table<size, big_endian>::do_write(O
|
||||
write_insn<big_endian>(p, b | (cmp_branch_off & 0x3fffffc));
|
||||
}
|
||||
else
|
||||
- output_bctr<big_endian>(p);
|
||||
+ write_insn<big_endian>(p, bctr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5426,7 +5388,7 @@ Stub_table<size, big_endian>::do_write(O
|
||||
write_insn<big_endian>(p, ld_12_12 + l(brltoff)), p += 4;
|
||||
}
|
||||
write_insn<big_endian>(p, mtctr_12), p += 4;
|
||||
- output_bctr<big_endian>(p);
|
||||
+ write_insn<big_endian>(p, bctr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5522,7 +5484,7 @@ Stub_table<size, big_endian>::do_write(O
|
||||
p += 4;
|
||||
write_insn<big_endian>(p, mtctr_11);
|
||||
p += 4;
|
||||
- output_bctr<big_endian>(p);
|
||||
+ write_insn<big_endian>(p, bctr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5563,7 +5525,7 @@ Stub_table<size, big_endian>::do_write(O
|
||||
p += 4;
|
||||
write_insn<big_endian>(p, mtctr_12);
|
||||
p += 4;
|
||||
- output_bctr<big_endian>(p);
|
||||
+ write_insn<big_endian>(p, bctr);
|
||||
}
|
||||
}
|
||||
if (this->need_save_res_)
|
||||
@@ -5630,7 +5592,7 @@ Output_data_glink<size, big_endian>::do_
|
||||
write_insn<big_endian>(p, mtctr_12), p += 4;
|
||||
write_insn<big_endian>(p, ld_11_11 + 8), p += 4;
|
||||
}
|
||||
- p = output_bctr<big_endian>(p);
|
||||
+ write_insn<big_endian>(p, bctr), p += 4;
|
||||
gold_assert(p == oview + this->pltresolve_size());
|
||||
|
||||
// Write lazy link call stubs.
|
||||
@@ -5686,7 +5648,7 @@ Output_data_glink<size, big_endian>::do_
|
||||
write_insn<big_endian>(p, addis_12_12 + ha(off)), p += 4;
|
||||
write_insn<big_endian>(p, ld_12_12 + l(off)), p += 4;
|
||||
write_insn<big_endian>(p, mtctr_12), p += 4;
|
||||
- output_bctr<big_endian>(p);
|
||||
+ write_insn<big_endian>(p, bctr);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -5778,7 +5740,8 @@ Output_data_glink<size, big_endian>::do_
|
||||
write_insn<big_endian>(p, add_11_0_11);
|
||||
}
|
||||
p += 4;
|
||||
- p = output_bctr<big_endian>(p);
|
||||
+ write_insn<big_endian>(p, bctr);
|
||||
+ p += 4;
|
||||
while (p < end_p)
|
||||
{
|
||||
write_insn<big_endian>(p, nop);
|
||||
diff -rup binutils.orig/ld/emultempl/ppc32elf.em binutils-2.30/ld/emultempl/ppc32elf.em
|
||||
--- binutils.orig/ld/emultempl/ppc32elf.em 2018-02-08 10:49:07.192191063 +0000
|
||||
+++ binutils-2.30/ld/emultempl/ppc32elf.em 2018-02-08 10:50:11.062395410 +0000
|
||||
@@ -38,7 +38,7 @@ static int notlsopt = 0;
|
||||
/* Choose the correct place for .got. */
|
||||
static int old_got = 0;
|
||||
|
||||
-static struct ppc_elf_params params = { PLT_UNSET, 0, 1, -1,
|
||||
+static struct ppc_elf_params params = { PLT_UNSET, 0, -1,
|
||||
0, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
static void
|
||||
@@ -246,8 +246,6 @@ enum ppc32_opt
|
||||
OPTION_NO_TLS_GET_ADDR_OPT,
|
||||
OPTION_NEW_PLT,
|
||||
OPTION_OLD_PLT,
|
||||
- OPTION_SPECULATE_INDIRECT_JUMPS,
|
||||
- OPTION_NO_SPECULATE_INDIRECT_JUMPS,
|
||||
OPTION_PLT_ALIGN,
|
||||
OPTION_NO_PLT_ALIGN,
|
||||
OPTION_OLD_GOT,
|
||||
@@ -269,8 +267,6 @@ if test -z "$VXWORKS_BASE_EM_FILE" ; the
|
||||
PARSE_AND_LIST_LONGOPTS=${PARSE_AND_LIST_LONGOPTS}'
|
||||
{ "secure-plt", no_argument, NULL, OPTION_NEW_PLT },
|
||||
{ "bss-plt", no_argument, NULL, OPTION_OLD_PLT },
|
||||
- { "speculate-indirect-jumps", no_argument, NULL, OPTION_SPECULATE_INDIRECT_JUMPS },
|
||||
- { "no-speculate-indirect-jumps", no_argument, NULL, OPTION_NO_SPECULATE_INDIRECT_JUMPS },
|
||||
{ "plt-align", optional_argument, NULL, OPTION_PLT_ALIGN },
|
||||
{ "no-plt-align", no_argument, NULL, OPTION_NO_PLT_ALIGN },
|
||||
{ "sdata-got", no_argument, NULL, OPTION_OLD_GOT },'
|
||||
@@ -304,12 +300,6 @@ if test -z "$VXWORKS_BASE_EM_FILE" ; the
|
||||
--bss-plt Force old-style BSS PLT.\n"
|
||||
));
|
||||
fprintf (file, _("\
|
||||
- --speculate-indirect-jumps PLT call stubs without speculation barrier.\n"
|
||||
- ));
|
||||
- fprintf (file, _("\
|
||||
- --no-speculate-indirect-jumps PLT call stubs with speculation barrier.\n"
|
||||
- ));
|
||||
- fprintf (file, _("\
|
||||
--plt-align Align PLT call stubs to fit cache lines.\n"
|
||||
));
|
||||
fprintf (file, _("\
|
||||
@@ -360,14 +350,6 @@ PARSE_AND_LIST_ARGS_CASES=${PARSE_AND_LI
|
||||
params.plt_style = PLT_OLD;
|
||||
break;
|
||||
|
||||
- case OPTION_SPECULATE_INDIRECT_JUMPS:
|
||||
- params.speculate_indirect_jumps = 1;
|
||||
- break;
|
||||
-
|
||||
- case OPTION_NO_SPECULATE_INDIRECT_JUMPS:
|
||||
- params.speculate_indirect_jumps = 0;
|
||||
- break;
|
||||
-
|
||||
case OPTION_PLT_ALIGN:
|
||||
if (optarg != NULL)
|
||||
{
|
||||
diff -rup binutils.orig/ld/emultempl/ppc64elf.em binutils-2.30/ld/emultempl/ppc64elf.em
|
||||
--- binutils.orig/ld/emultempl/ppc64elf.em 2018-02-08 10:49:07.192191063 +0000
|
||||
+++ binutils-2.30/ld/emultempl/ppc64elf.em 2018-02-08 10:50:11.062395410 +0000
|
||||
@@ -38,7 +38,7 @@ static struct ppc64_elf_params params =
|
||||
&ppc_layout_sections_again,
|
||||
1, -1, 0,
|
||||
${DEFAULT_PLT_STATIC_CHAIN-0}, -1, 5,
|
||||
- -1, 1, 0, -1, -1, 0};
|
||||
+ -1, 0, -1, -1, 0};
|
||||
|
||||
/* Fake input file for stubs. */
|
||||
static lang_input_statement_type *stub_file;
|
||||
@@ -692,8 +692,6 @@ enum ppc64_opt
|
||||
OPTION_NO_PLT_STATIC_CHAIN,
|
||||
OPTION_PLT_THREAD_SAFE,
|
||||
OPTION_NO_PLT_THREAD_SAFE,
|
||||
- OPTION_SPECULATE_INDIRECT_JUMPS,
|
||||
- OPTION_NO_SPECULATE_INDIRECT_JUMPS,
|
||||
OPTION_PLT_ALIGN,
|
||||
OPTION_NO_PLT_ALIGN,
|
||||
OPTION_PLT_LOCALENTRY,
|
||||
@@ -721,8 +719,6 @@ PARSE_AND_LIST_LONGOPTS=${PARSE_AND_LIST
|
||||
{ "no-plt-static-chain", no_argument, NULL, OPTION_NO_PLT_STATIC_CHAIN },
|
||||
{ "plt-thread-safe", no_argument, NULL, OPTION_PLT_THREAD_SAFE },
|
||||
{ "no-plt-thread-safe", no_argument, NULL, OPTION_NO_PLT_THREAD_SAFE },
|
||||
- { "speculate-indirect-jumps", no_argument, NULL, OPTION_SPECULATE_INDIRECT_JUMPS },
|
||||
- { "no-speculate-indirect-jumps", no_argument, NULL, OPTION_NO_SPECULATE_INDIRECT_JUMPS },
|
||||
{ "plt-align", optional_argument, NULL, OPTION_PLT_ALIGN },
|
||||
{ "no-plt-align", no_argument, NULL, OPTION_NO_PLT_ALIGN },
|
||||
{ "plt-localentry", optional_argument, NULL, OPTION_PLT_LOCALENTRY },
|
||||
@@ -764,13 +760,7 @@ PARSE_AND_LIST_OPTIONS=${PARSE_AND_LIST_
|
||||
--plt-thread-safe PLT call stubs with load-load barrier.\n"
|
||||
));
|
||||
fprintf (file, _("\
|
||||
- --no-plt-thread-safe PLT call stubs without load-load barrier.\n"
|
||||
- ));
|
||||
- fprintf (file, _("\
|
||||
- --speculate-indirect-jumps PLT call stubs without speculation barrier.\n"
|
||||
- ));
|
||||
- fprintf (file, _("\
|
||||
- --no-speculate-indirect-jumps PLT call stubs with speculation barrier.\n"
|
||||
+ --no-plt-thread-safe PLT call stubs without barrier.\n"
|
||||
));
|
||||
fprintf (file, _("\
|
||||
--plt-align [=<align>] Align PLT call stubs to fit cache lines.\n"
|
||||
@@ -860,14 +850,6 @@ PARSE_AND_LIST_ARGS_CASES=${PARSE_AND_LI
|
||||
params.plt_thread_safe = 0;
|
||||
break;
|
||||
|
||||
- case OPTION_SPECULATE_INDIRECT_JUMPS:
|
||||
- params.speculate_indirect_jumps = 1;
|
||||
- break;
|
||||
-
|
||||
- case OPTION_NO_SPECULATE_INDIRECT_JUMPS:
|
||||
- params.speculate_indirect_jumps = 0;
|
||||
- break;
|
||||
-
|
||||
case OPTION_PLT_ALIGN:
|
||||
if (optarg != NULL)
|
||||
{
|
||||
diff -rup binutils.orig/ld/ld.texinfo binutils-2.30/ld/ld.texinfo
|
||||
--- binutils.orig/ld/ld.texinfo 2018-02-08 10:49:07.203190926 +0000
|
||||
+++ binutils-2.30/ld/ld.texinfo 2018-02-08 10:50:11.063395397 +0000
|
||||
@@ -7646,15 +7646,6 @@ looks for calls to commonly used functio
|
||||
seen, adds the necessary barriers. Use these options to change the
|
||||
default behaviour.
|
||||
|
||||
-@cindex PowerPC64 PLT call stub speculative execution barrier
|
||||
-@kindex --speculate-indirect-jumps
|
||||
-@kindex --no-speculate-indirect-jumps
|
||||
-@item --speculate-indirect-jumps
|
||||
-@itemx --no-speculate-indirect-jumps
|
||||
-Use these options to control whether all indirect branch instructions
|
||||
-emitted by @code{ld}, such as those in the PLT, have a speculative
|
||||
-execution barrier to mitigate Spectre variant 2 attacks.
|
||||
-
|
||||
@cindex PowerPC64 ELFv2 PLT localentry optimization
|
||||
@kindex --plt-localentry
|
||||
@kindex --no-plt-localentry
|
||||
diff -rup binutils.orig/ld/testsuite/ld-powerpc/elfv2exe.d binutils-2.30/ld/testsuite/ld-powerpc/elfv2exe.d
|
||||
--- binutils.orig/ld/testsuite/ld-powerpc/elfv2exe.d 2018-02-08 10:49:07.261190203 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-powerpc/elfv2exe.d 2018-02-08 10:50:11.063395397 +0000
|
||||
@@ -1,6 +1,6 @@
|
||||
#source: elfv2.s
|
||||
#as: -a64
|
||||
-#ld: -melf64ppc --speculate-indirect-jumps --defsym f2=0x1234 --defsym f3=0x10008888 --defsym f4=0x1200000 --defsym _start=f1
|
||||
+#ld: -melf64ppc --defsym f2=0x1234 --defsym f3=0x10008888 --defsym f4=0x1200000 --defsym _start=f1
|
||||
#objdump: -dr
|
||||
|
||||
.*
|
||||
diff -rup binutils.orig/ld/testsuite/ld-powerpc/elfv2so.d binutils-2.30/ld/testsuite/ld-powerpc/elfv2so.d
|
||||
--- binutils.orig/ld/testsuite/ld-powerpc/elfv2so.d 2018-02-08 10:49:07.264190166 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-powerpc/elfv2so.d 2018-02-08 10:50:11.063395397 +0000
|
||||
@@ -1,6 +1,6 @@
|
||||
#source: elfv2.s
|
||||
#as: -a64
|
||||
-#ld: -melf64ppc -shared --speculate-indirect-jumps
|
||||
+#ld: -melf64ppc -shared
|
||||
#objdump: -dr
|
||||
|
||||
.*
|
||||
diff -rup binutils.orig/ld/testsuite/ld-powerpc/powerpc.exp binutils-2.30/ld/testsuite/ld-powerpc/powerpc.exp
|
||||
--- binutils.orig/ld/testsuite/ld-powerpc/powerpc.exp 2018-02-08 10:49:07.261190203 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-powerpc/powerpc.exp 2018-02-08 10:50:11.063395397 +0000
|
||||
@@ -121,11 +121,11 @@ set ppcelftests {
|
||||
"tls32"}
|
||||
{"TLS32 helper shared library" "-shared -melf32ppc tmpdir/tlslib32.o" "" "" {}
|
||||
{} "libtlslib32.so"}
|
||||
- {"TLS32 dynamic exec" "-melf32ppc --no-plt-align --speculate-indirect-jumps --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tls32.o tmpdir/libtlslib32.so" "" "" {}
|
||||
+ {"TLS32 dynamic exec" "-melf32ppc --no-plt-align --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tls32.o tmpdir/libtlslib32.so" "" "" {}
|
||||
{{readelf -WSsrl tlsexe32.r} {objdump -dr tlsexe32.d}
|
||||
{objdump -sj.got tlsexe32.g} {objdump -sj.tdata tlsexe32.t}}
|
||||
"tlsexe32"}
|
||||
- {"TLS32 shared" "-shared -melf32ppc --no-plt-align --speculate-indirect-jumps --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tls32.o" "" "" {}
|
||||
+ {"TLS32 shared" "-shared -melf32ppc --no-plt-align --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tls32.o" "" "" {}
|
||||
{{readelf -WSsrl tlsso32.r} {objdump -dr tlsso32.d}
|
||||
{objdump -sj.got tlsso32.g} {objdump -sj.tdata tlsso32.t}}
|
||||
"tls32.so"}
|
||||
@@ -147,7 +147,7 @@ set ppcelftests {
|
||||
{"TLS32 DLL" "-shared -melf32ppc --version-script tlsdll.ver" ""
|
||||
"-a32" {tlsdll_32.s}
|
||||
{} "tlsdll32.so"}
|
||||
- {"TLS32 opt 5" "-melf32ppc -shared --gc-sections --secure-plt --no-plt-align --speculate-indirect-jumps tmpdir/tlsdll32.so" "" "-a32" {tlsopt5_32.s}
|
||||
+ {"TLS32 opt 5" "-melf32ppc -shared --gc-sections --secure-plt --no-plt-align tmpdir/tlsdll32.so" "" "-a32" {tlsopt5_32.s}
|
||||
{{objdump -dr tlsopt5_32.d}}
|
||||
"tlsopt5_32"}
|
||||
{"Shared library with global symbol" "-shared -melf32ppc" "" "-a32" {sdalib.s}
|
||||
@@ -174,15 +174,15 @@ set ppc64elftests {
|
||||
{} "libtlslib.so"}
|
||||
{"TLS helper old shared lib" "-shared -melf64ppc" "" "-a64" {oldtlslib.s}
|
||||
{} "liboldlib.so"}
|
||||
- {"TLS dynamic exec" "-melf64ppc --no-plt-align --speculate-indirect-jumps --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tls.o tmpdir/libtlslib.so" "" "" {}
|
||||
+ {"TLS dynamic exec" "-melf64ppc --no-plt-align --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tls.o tmpdir/libtlslib.so" "" "" {}
|
||||
{{readelf -WSsrl tlsexe.r} {objdump -dr tlsexe.d}
|
||||
{objdump -sj.got tlsexe.g} {objdump -sj.tdata tlsexe.t}}
|
||||
"tlsexe"}
|
||||
- {"TLS dynamic old" "-melf64ppc --no-plt-align --speculate-indirect-jumps --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tls.o tmpdir/liboldlib.so" "" "" {}
|
||||
+ {"TLS dynamic old" "-melf64ppc --no-plt-align --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tls.o tmpdir/liboldlib.so" "" "" {}
|
||||
{{readelf -WSsrl tlsexe.r} {objdump -dr tlsexe.d}
|
||||
{objdump -sj.got tlsexe.g} {objdump -sj.tdata tlsexe.t}}
|
||||
"tlsexeold"}
|
||||
- {"TLS shared" "-shared -melf64ppc --no-plt-align --speculate-indirect-jumps --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tls.o" "" "" {}
|
||||
+ {"TLS shared" "-shared -melf64ppc --no-plt-align --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tls.o" "" "" {}
|
||||
{{readelf -WSsrl tlsso.r} {objdump -dr tlsso.d}
|
||||
{objdump -sj.got tlsso.g} {objdump -sj.tdata tlsso.t}}
|
||||
"tls.so"}
|
||||
@@ -190,17 +190,17 @@ set ppc64elftests {
|
||||
{{objdump -dr tlstoc.d} {objdump -sj.got tlstoc.g}
|
||||
{objdump -sj.tdata tlstoc.t}}
|
||||
"tlstoc"}
|
||||
- {"TLSTOC dynamic exec" "-melf64ppc --no-plt-align --speculate-indirect-jumps --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tlstoc.o tmpdir/libtlslib.so" ""
|
||||
+ {"TLSTOC dynamic exec" "-melf64ppc --no-plt-align --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tlstoc.o tmpdir/libtlslib.so" ""
|
||||
"" {}
|
||||
{{readelf -WSsrl tlsexetoc.r} {objdump -dr tlsexetoc.d}
|
||||
{objdump -sj.got tlsexetoc.g} {objdump -sj.tdata tlsexetoc.t}}
|
||||
"tlsexetoc"}
|
||||
- {"TLSTOC dynamic old" "-melf64ppc --no-plt-align --speculate-indirect-jumps --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tlstoc.o tmpdir/liboldlib.so" ""
|
||||
+ {"TLSTOC dynamic old" "-melf64ppc --no-plt-align --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tlstoc.o tmpdir/liboldlib.so" ""
|
||||
"" {}
|
||||
{{readelf -WSsrl tlsexetoc.r} {objdump -dr tlsexetoc.d}
|
||||
{objdump -sj.got tlsexetoc.g} {objdump -sj.tdata tlsexetoc.t}}
|
||||
"tlsexetocold"}
|
||||
- {"TLSTOC shared" "-shared -melf64ppc --no-plt-align --speculate-indirect-jumps --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tlstoc.o" "" "" {}
|
||||
+ {"TLSTOC shared" "-shared -melf64ppc --no-plt-align --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tlstoc.o" "" "" {}
|
||||
{{readelf -WSsrl tlstocso.r} {objdump -dr tlstocso.d}
|
||||
{objdump -sj.got tlstocso.g} {objdump -sj.tdata tlstocso.t}}
|
||||
"tlstoc.so"}
|
||||
@@ -221,7 +221,7 @@ set ppc64elftests {
|
||||
"tlsopt4"}
|
||||
{"TLS DLL" "-shared -melf64ppc --version-script tlsdll.ver" "" "-a64" {tlsdll.s}
|
||||
{} "tlsdll.so"}
|
||||
- {"TLS opt 5" "-melf64ppc --no-plt-align --speculate-indirect-jumps -shared --gc-sections --no-plt-localentry tmpdir/tlsdll.so" "" "-a64" {tlsopt5.s}
|
||||
+ {"TLS opt 5" "-melf64ppc --no-plt-align -shared --gc-sections --no-plt-localentry tmpdir/tlsdll.so" "" "-a64" {tlsopt5.s}
|
||||
{{objdump -dr tlsopt5.d} {readelf -wf tlsopt5.wf}}
|
||||
"tlsopt5"}
|
||||
{"sym@tocbase" "-shared -melf64ppc" "" "-a64" {symtocbase-1.s symtocbase-2.s}
|
||||
diff -rup binutils.orig/ld/testsuite/ld-powerpc/relbrlt.d binutils-2.30/ld/testsuite/ld-powerpc/relbrlt.d
|
||||
--- binutils.orig/ld/testsuite/ld-powerpc/relbrlt.d 2018-02-08 10:49:07.262190191 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-powerpc/relbrlt.d 2018-02-08 10:50:11.063395397 +0000
|
||||
@@ -1,6 +1,6 @@
|
||||
#source: relbrlt.s
|
||||
#as: -a64
|
||||
-#ld: -melf64ppc --no-plt-align --speculate-indirect-jumps --no-ld-generated-unwind-info --emit-relocs
|
||||
+#ld: -melf64ppc --no-plt-align --no-ld-generated-unwind-info --emit-relocs
|
||||
#objdump: -Dr
|
||||
|
||||
.*
|
1040
SOURCES/binutils-s390x-arch13.patch
Normal file
1040
SOURCES/binutils-s390x-arch13.patch
Normal file
File diff suppressed because it is too large
Load Diff
899
SOURCES/binutils-s390x-partial-relro.patch
Normal file
899
SOURCES/binutils-s390x-partial-relro.patch
Normal file
@ -0,0 +1,899 @@
|
||||
diff -rup binutils.orig/bfd/elf64-s390.c binutils-2.30/bfd/elf64-s390.c
|
||||
--- binutils.orig/bfd/elf64-s390.c 2019-03-11 14:41:06.432547033 +0000
|
||||
+++ binutils-2.30/bfd/elf64-s390.c 2019-03-11 14:45:42.066369572 +0000
|
||||
@@ -475,7 +475,7 @@ elf_s390_is_local_label_name (bfd *abfd,
|
||||
|
||||
#define RELA_ENTRY_SIZE sizeof (Elf64_External_Rela)
|
||||
|
||||
-/* The first three entries in a procedure linkage table are reserved,
|
||||
+/* The first three entries in a global offset table are reserved,
|
||||
and the initial contents are unimportant (we zero them out).
|
||||
Subsequent entries look like this. See the SVR4 ABI 386
|
||||
supplement to see how this works. */
|
||||
@@ -505,8 +505,8 @@ elf_s390_is_local_label_name (bfd *abfd,
|
||||
LG 1,0(1) # 6 bytes Load address from GOT in r1
|
||||
BCR 15,1 # 2 bytes Jump to address
|
||||
RET1: BASR 1,0 # 2 bytes Return from GOT 1st time
|
||||
- LGF 1,12(1) # 6 bytes Load offset in symbl table in r1
|
||||
- BRCL 15,-x # 6 bytes Jump to start of PLT
|
||||
+ LGF 1,12(1) # 6 bytes Load rela.plt offset into r1
|
||||
+ BRCL 15,-x # 6 bytes Jump to first PLT entry
|
||||
.long ? # 4 bytes offset into .rela.plt
|
||||
|
||||
Total = 32 bytes per PLT entry
|
||||
@@ -1599,8 +1599,7 @@ allocate_dynrelocs (struct elf_link_hash
|
||||
/* Make room for this entry. */
|
||||
s->size += PLT_ENTRY_SIZE;
|
||||
|
||||
- /* We also need to make an entry in the .got.plt section, which
|
||||
- will be placed in the .got section by the linker script. */
|
||||
+ /* We also need to make an entry in the .got.plt section. */
|
||||
htab->elf.sgotplt->size += GOT_ENTRY_SIZE;
|
||||
|
||||
/* We also need to make an entry in the .rela.plt section. */
|
||||
@@ -1825,6 +1824,20 @@ elf_s390_size_dynamic_sections (bfd *out
|
||||
}
|
||||
}
|
||||
|
||||
+ if (htab->elf.sgot && s390_gotplt_after_got_p (info))
|
||||
+ {
|
||||
+ /* _bfd_elf_create_got_section adds the got header size always
|
||||
+ to .got.plt but we need it in .got if this section comes
|
||||
+ first. */
|
||||
+ htab->elf.sgot->size += 3 * GOT_ENTRY_SIZE;
|
||||
+ htab->elf.sgotplt->size -= 3 * GOT_ENTRY_SIZE;
|
||||
+
|
||||
+ /* Make the _GLOBAL_OFFSET_TABLE_ symbol point to the .got
|
||||
+ instead of .got.plt. */
|
||||
+ htab->elf.hgot->root.u.def.section = htab->elf.sgot;
|
||||
+ htab->elf.hgot->root.u.def.value = 0;
|
||||
+ }
|
||||
+
|
||||
/* Set up .got offsets for local syms, and space for local dynamic
|
||||
relocs. */
|
||||
for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
|
||||
@@ -2125,7 +2138,6 @@ elf_s390_relocate_section (bfd *output_b
|
||||
bfd_boolean unresolved_reloc;
|
||||
bfd_reloc_status_type r;
|
||||
int tls_type;
|
||||
- asection *base_got = htab->elf.sgot;
|
||||
bfd_boolean resolved_to_zero;
|
||||
|
||||
r_type = ELF64_R_TYPE (rel->r_info);
|
||||
@@ -2166,7 +2178,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||
case R_390_PLTOFF16:
|
||||
case R_390_PLTOFF32:
|
||||
case R_390_PLTOFF64:
|
||||
- relocation -= htab->elf.sgot->output_section->vma;
|
||||
+ relocation -= s390_got_pointer (info);
|
||||
break;
|
||||
case R_390_GOTPLT12:
|
||||
case R_390_GOTPLT16:
|
||||
@@ -2186,10 +2198,10 @@ elf_s390_relocate_section (bfd *output_b
|
||||
htab->elf.sgot->contents +
|
||||
local_got_offsets[r_symndx]);
|
||||
relocation = (local_got_offsets[r_symndx] +
|
||||
- htab->elf.sgot->output_offset);
|
||||
+ s390_got_offset (info));
|
||||
|
||||
if (r_type == R_390_GOTENT || r_type == R_390_GOTPLTENT)
|
||||
- relocation += htab->elf.sgot->output_section->vma;
|
||||
+ relocation += s390_got_pointer (info);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -2248,25 +2260,23 @@ elf_s390_relocate_section (bfd *output_b
|
||||
|
||||
if (s390_is_ifunc_symbol_p (h))
|
||||
{
|
||||
+ /* Entry indices of .iplt and .igot.plt match
|
||||
+ 1:1. No magic PLT first entry here. */
|
||||
plt_index = h->plt.offset / PLT_ENTRY_SIZE;
|
||||
- relocation = (plt_index * GOT_ENTRY_SIZE +
|
||||
- htab->elf.igotplt->output_offset);
|
||||
- if (r_type == R_390_GOTPLTENT)
|
||||
- relocation += htab->elf.igotplt->output_section->vma;
|
||||
+ relocation = (plt_index * GOT_ENTRY_SIZE
|
||||
+ + s390_gotplt_offset (info)
|
||||
+ + htab->elf.igotplt->output_offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
- /* Calc. index no.
|
||||
- Current offset - size first entry / entry size. */
|
||||
- plt_index = (h->plt.offset - PLT_FIRST_ENTRY_SIZE) /
|
||||
- PLT_ENTRY_SIZE;
|
||||
-
|
||||
- /* Offset in GOT is PLT index plus GOT headers(3)
|
||||
- times 8, addr & GOT addr. */
|
||||
- relocation = (plt_index + 3) * GOT_ENTRY_SIZE;
|
||||
- if (r_type == R_390_GOTPLTENT)
|
||||
- relocation += htab->elf.sgot->output_section->vma;
|
||||
+ plt_index = ((h->plt.offset - PLT_FIRST_ENTRY_SIZE)
|
||||
+ / PLT_ENTRY_SIZE);
|
||||
+
|
||||
+ relocation = (plt_index * GOT_ENTRY_SIZE
|
||||
+ + s390_gotplt_offset (info));
|
||||
}
|
||||
+ if (r_type == R_390_GOTPLTENT)
|
||||
+ relocation += s390_got_pointer (info);
|
||||
unresolved_reloc = FALSE;
|
||||
break;
|
||||
}
|
||||
@@ -2280,7 +2290,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||
case R_390_GOTENT:
|
||||
/* Relocation is to the entry for this symbol in the global
|
||||
offset table. */
|
||||
- if (base_got == NULL)
|
||||
+ if (htab->elf.sgot == NULL)
|
||||
abort ();
|
||||
|
||||
if (h != NULL)
|
||||
@@ -2297,8 +2307,19 @@ elf_s390_relocate_section (bfd *output_b
|
||||
{
|
||||
/* No explicit GOT usage so redirect to the
|
||||
got.iplt slot. */
|
||||
- base_got = htab->elf.igotplt;
|
||||
- off = h->plt.offset / PLT_ENTRY_SIZE * GOT_ENTRY_SIZE;
|
||||
+ relocation = (s390_gotplt_offset (info)
|
||||
+ + htab->elf.igotplt->output_offset
|
||||
+ + (h->plt.offset / PLT_ENTRY_SIZE
|
||||
+ * GOT_ENTRY_SIZE));
|
||||
+
|
||||
+ /* For @GOTENT the relocation is against the offset between
|
||||
+ the instruction and the symbols entry in the GOT and not
|
||||
+ between the start of the GOT and the symbols entry. We
|
||||
+ add the vma of the GOT to get the correct value. */
|
||||
+ if (r_type == R_390_GOTENT || r_type == R_390_GOTPLTENT)
|
||||
+ relocation += s390_got_pointer (info);
|
||||
+
|
||||
+ break;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2331,7 +2352,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||
else
|
||||
{
|
||||
bfd_put_64 (output_bfd, relocation,
|
||||
- base_got->contents + off);
|
||||
+ htab->elf.sgot->contents + off);
|
||||
h->got.offset |= 1;
|
||||
}
|
||||
|
||||
@@ -2413,7 +2434,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||
if (off >= (bfd_vma) -2)
|
||||
abort ();
|
||||
|
||||
- relocation = base_got->output_offset + off;
|
||||
+ relocation = s390_got_offset (info) + off;
|
||||
|
||||
/* For @GOTENT the relocation is against the offset between
|
||||
the instruction and the symbols entry in the GOT and not
|
||||
@@ -2421,7 +2442,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||
add the vma of the GOT to get the correct value. */
|
||||
if ( r_type == R_390_GOTENT
|
||||
|| r_type == R_390_GOTPLTENT)
|
||||
- relocation += base_got->output_section->vma;
|
||||
+ relocation += s390_got_pointer (info);
|
||||
|
||||
break;
|
||||
|
||||
@@ -2439,22 +2460,17 @@ elf_s390_relocate_section (bfd *output_b
|
||||
relocation = (htab->elf.iplt->output_section->vma
|
||||
+ htab->elf.iplt->output_offset
|
||||
+ h->plt.offset
|
||||
- - htab->elf.sgot->output_section->vma);
|
||||
+ - s390_got_pointer (info));
|
||||
goto do_relocation;
|
||||
}
|
||||
|
||||
- /* Note that sgot->output_offset is not involved in this
|
||||
- calculation. We always want the start of .got. If we
|
||||
- defined _GLOBAL_OFFSET_TABLE in a different way, as is
|
||||
- permitted by the ABI, we might have to change this
|
||||
- calculation. */
|
||||
- relocation -= htab->elf.sgot->output_section->vma;
|
||||
+ relocation -= s390_got_pointer (info);
|
||||
break;
|
||||
|
||||
case R_390_GOTPC:
|
||||
case R_390_GOTPCDBL:
|
||||
/* Use global offset table as symbol value. */
|
||||
- relocation = htab->elf.sgot->output_section->vma;
|
||||
+ relocation = s390_got_pointer (info);
|
||||
unresolved_reloc = FALSE;
|
||||
break;
|
||||
|
||||
@@ -2503,7 +2519,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||
|| h->plt.offset == (bfd_vma) -1
|
||||
|| (htab->elf.splt == NULL && !s390_is_ifunc_symbol_p (h)))
|
||||
{
|
||||
- relocation -= htab->elf.sgot->output_section->vma;
|
||||
+ relocation -= s390_got_pointer (info);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2511,12 +2527,12 @@ elf_s390_relocate_section (bfd *output_b
|
||||
relocation = (htab->elf.iplt->output_section->vma
|
||||
+ htab->elf.iplt->output_offset
|
||||
+ h->plt.offset
|
||||
- - htab->elf.sgot->output_section->vma);
|
||||
+ - s390_got_pointer (info));
|
||||
else
|
||||
relocation = (htab->elf.splt->output_section->vma
|
||||
+ htab->elf.splt->output_offset
|
||||
+ h->plt.offset
|
||||
- - htab->elf.sgot->output_section->vma);
|
||||
+ - s390_got_pointer (info));
|
||||
unresolved_reloc = FALSE;
|
||||
break;
|
||||
|
||||
@@ -3289,7 +3305,7 @@ elf_s390_finish_dynamic_symbol (bfd *out
|
||||
if (h->plt.offset != (bfd_vma) -1)
|
||||
{
|
||||
bfd_vma plt_index;
|
||||
- bfd_vma got_offset;
|
||||
+ bfd_vma gotplt_offset;
|
||||
Elf_Internal_Rela rela;
|
||||
bfd_byte *loc;
|
||||
|
||||
@@ -3318,18 +3334,25 @@ elf_s390_finish_dynamic_symbol (bfd *out
|
||||
Current offset - size first entry / entry size. */
|
||||
plt_index = (h->plt.offset - PLT_FIRST_ENTRY_SIZE) / PLT_ENTRY_SIZE;
|
||||
|
||||
- /* Offset in GOT is PLT index plus GOT headers(3) times 8,
|
||||
- addr & GOT addr. */
|
||||
- got_offset = (plt_index + 3) * GOT_ENTRY_SIZE;
|
||||
+ /* The slots in the .got.plt correspond to the PLT slots in
|
||||
+ the same order. */
|
||||
+ gotplt_offset = plt_index * GOT_ENTRY_SIZE;
|
||||
+
|
||||
+ /* If .got.plt comes first it needs to contain the 3 header
|
||||
+ entries. */
|
||||
+ if (!s390_gotplt_after_got_p (info))
|
||||
+ gotplt_offset += 3 * GOT_ENTRY_SIZE;
|
||||
|
||||
/* Fill in the blueprint of a PLT. */
|
||||
memcpy (htab->elf.splt->contents + h->plt.offset, elf_s390x_plt_entry,
|
||||
PLT_ENTRY_SIZE);
|
||||
|
||||
- /* Fixup the relative address to the GOT entry */
|
||||
+ /* The first instruction in the PLT entry is a LARL loading
|
||||
+ the address of the GOT slot. We write the 4 byte
|
||||
+ immediate operand of the LARL instruction here. */
|
||||
bfd_put_32 (output_bfd,
|
||||
(htab->elf.sgotplt->output_section->vma +
|
||||
- htab->elf.sgotplt->output_offset + got_offset
|
||||
+ htab->elf.sgotplt->output_offset + gotplt_offset
|
||||
- (htab->elf.splt->output_section->vma +
|
||||
htab->elf.splt->output_offset +
|
||||
h->plt.offset))/2,
|
||||
@@ -3349,12 +3372,12 @@ elf_s390_finish_dynamic_symbol (bfd *out
|
||||
+ htab->elf.splt->output_offset
|
||||
+ h->plt.offset
|
||||
+ 14),
|
||||
- htab->elf.sgotplt->contents + got_offset);
|
||||
+ htab->elf.sgotplt->contents + gotplt_offset);
|
||||
|
||||
/* Fill in the entry in the .rela.plt section. */
|
||||
rela.r_offset = (htab->elf.sgotplt->output_section->vma
|
||||
+ htab->elf.sgotplt->output_offset
|
||||
- + got_offset);
|
||||
+ + gotplt_offset);
|
||||
rela.r_info = ELF64_R_INFO (h->dynindx, R_390_JMP_SLOT);
|
||||
rela.r_addend = 0;
|
||||
loc = htab->elf.srelplt->contents + plt_index *
|
||||
@@ -3561,8 +3584,8 @@ elf_s390_finish_dynamic_sections (bfd *o
|
||||
continue;
|
||||
|
||||
case DT_PLTGOT:
|
||||
- s = htab->elf.sgotplt;
|
||||
- dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
|
||||
+ /* DT_PLTGOT matches _GLOBAL_OFFSET_TABLE_ */
|
||||
+ dyn.d_un.d_ptr = s390_got_pointer (info);
|
||||
break;
|
||||
|
||||
case DT_JMPREL:
|
||||
@@ -3599,10 +3622,11 @@ elf_s390_finish_dynamic_sections (bfd *o
|
||||
/* fill in blueprint for plt 0 entry */
|
||||
memcpy (htab->elf.splt->contents, elf_s390x_first_plt_entry,
|
||||
PLT_FIRST_ENTRY_SIZE);
|
||||
- /* Fixup relative address to start of GOT */
|
||||
+ /* The second instruction in the first PLT entry is a LARL
|
||||
+ loading the GOT pointer. Fill in the LARL immediate
|
||||
+ address. */
|
||||
bfd_put_32 (output_bfd,
|
||||
- (htab->elf.sgotplt->output_section->vma
|
||||
- + htab->elf.sgotplt->output_offset
|
||||
+ (s390_got_pointer (info)
|
||||
- htab->elf.splt->output_section->vma
|
||||
- htab->elf.splt->output_offset - 6)/2,
|
||||
htab->elf.splt->contents + 8);
|
||||
@@ -3612,21 +3636,22 @@ elf_s390_finish_dynamic_sections (bfd *o
|
||||
= PLT_ENTRY_SIZE;
|
||||
}
|
||||
|
||||
- if (htab->elf.sgotplt)
|
||||
+ if (htab->elf.hgot && htab->elf.hgot->root.u.def.section)
|
||||
{
|
||||
/* Fill in the first three entries in the global offset table. */
|
||||
- if (htab->elf.sgotplt->size > 0)
|
||||
+ if (htab->elf.hgot->root.u.def.section->size > 0)
|
||||
{
|
||||
bfd_put_64 (output_bfd,
|
||||
(sdyn == NULL ? (bfd_vma) 0
|
||||
: sdyn->output_section->vma + sdyn->output_offset),
|
||||
- htab->elf.sgotplt->contents);
|
||||
+ htab->elf.hgot->root.u.def.section->contents);
|
||||
/* One entry for shared object struct ptr. */
|
||||
- bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents + 8);
|
||||
+ bfd_put_64 (output_bfd, (bfd_vma) 0,
|
||||
+ htab->elf.hgot->root.u.def.section->contents + 8);
|
||||
/* One entry for _dl_runtime_resolve. */
|
||||
- bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents + 16);
|
||||
+ bfd_put_64 (output_bfd, (bfd_vma) 0,
|
||||
+ htab->elf.hgot->root.u.def.section->contents + 16);
|
||||
}
|
||||
-
|
||||
elf_section_data (htab->elf.sgot->output_section)
|
||||
->this_hdr.sh_entsize = 8;
|
||||
}
|
||||
diff -rup binutils.orig/bfd/elf-s390-common.c binutils-2.30/bfd/elf-s390-common.c
|
||||
--- binutils.orig/bfd/elf-s390-common.c 2019-03-11 14:41:06.444546938 +0000
|
||||
+++ binutils-2.30/bfd/elf-s390-common.c 2019-03-11 14:45:42.065369580 +0000
|
||||
@@ -30,6 +30,87 @@ s390_is_ifunc_symbol_p (struct elf_link_
|
||||
return h->type == STT_GNU_IFUNC || eh->ifunc_resolver_address != 0;
|
||||
}
|
||||
|
||||
+/* Return true if .got.plt is supposed to be emitted after .got. */
|
||||
+
|
||||
+static inline bfd_boolean
|
||||
+s390_gotplt_after_got_p (struct bfd_link_info *info)
|
||||
+{
|
||||
+ struct elf_s390_link_hash_table *htab = elf_s390_hash_table (info);
|
||||
+
|
||||
+ if (!htab->elf.sgot || !htab->elf.sgotplt)
|
||||
+ return TRUE;
|
||||
+
|
||||
+ if (htab->elf.sgot->output_section == htab->elf.sgotplt->output_section)
|
||||
+ {
|
||||
+ if (htab->elf.sgot->output_offset < htab->elf.sgotplt->output_offset)
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if (htab->elf.sgot->output_section->vma
|
||||
+ <= htab->elf.sgotplt->output_section->vma)
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
+/* Return the value of the _GLOBAL_OFFSET_TABLE_ symbol. */
|
||||
+
|
||||
+static inline bfd_vma
|
||||
+s390_got_pointer (struct bfd_link_info *info)
|
||||
+{
|
||||
+ struct elf_s390_link_hash_table *htab = elf_s390_hash_table (info);
|
||||
+ bfd_vma got_pointer;
|
||||
+
|
||||
+ BFD_ASSERT (htab && htab->elf.hgot);
|
||||
+
|
||||
+ got_pointer = (htab->elf.hgot->root.u.def.section->output_section->vma
|
||||
+ + htab->elf.hgot->root.u.def.section->output_offset);
|
||||
+ /* Our ABI requires the GOT pointer to point at the very beginning
|
||||
+ of the global offset table. */
|
||||
+ BFD_ASSERT (got_pointer
|
||||
+ <= (htab->elf.sgot->output_section->vma
|
||||
+ + htab->elf.sgot->output_offset));
|
||||
+ BFD_ASSERT (got_pointer
|
||||
+ <= (htab->elf.sgotplt->output_section->vma
|
||||
+ + htab->elf.sgotplt->output_offset));
|
||||
+
|
||||
+ return got_pointer;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/* Return the offset of the .got versus _GLOBAL_OFFSET_TABLE_. */
|
||||
+
|
||||
+static inline bfd_vma
|
||||
+s390_got_offset (struct bfd_link_info *info)
|
||||
+{
|
||||
+ struct elf_s390_link_hash_table *htab = elf_s390_hash_table (info);
|
||||
+
|
||||
+ /* The absolute address of the .got in the target image. */
|
||||
+ bfd_vma got_address = (htab->elf.sgot->output_section->vma
|
||||
+ + htab->elf.sgot->output_offset);
|
||||
+
|
||||
+ /* GOT offset must not be negative. */
|
||||
+ BFD_ASSERT (s390_got_pointer (info) <= got_address);
|
||||
+ return got_address - s390_got_pointer (info);
|
||||
+}
|
||||
+
|
||||
+/* Return the offset of the .got.plt versus _GLOBAL_OFFSET_TABLE_. */
|
||||
+
|
||||
+static inline bfd_vma
|
||||
+s390_gotplt_offset (struct bfd_link_info *info)
|
||||
+{
|
||||
+ struct elf_s390_link_hash_table *htab = elf_s390_hash_table (info);
|
||||
+
|
||||
+ /* The absolute address of the .got.plt in the target image. */
|
||||
+ bfd_vma gotplt_address = (htab->elf.sgotplt->output_section->vma
|
||||
+ + htab->elf.sgotplt->output_offset);
|
||||
+
|
||||
+ /* GOT offset must not be negative. */
|
||||
+ BFD_ASSERT (s390_got_pointer (info) <= gotplt_address);
|
||||
+ return gotplt_address - s390_got_pointer (info);
|
||||
+}
|
||||
+
|
||||
/* Create sections needed by STT_GNU_IFUNC symbol. */
|
||||
|
||||
static bfd_boolean
|
||||
diff -rup binutils.orig/ld/emulparams/elf64_s390.sh binutils-2.30/ld/emulparams/elf64_s390.sh
|
||||
--- binutils.orig/ld/emulparams/elf64_s390.sh 2019-03-11 14:41:05.978550619 +0000
|
||||
+++ binutils-2.30/ld/emulparams/elf64_s390.sh 2019-03-11 14:45:42.066369572 +0000
|
||||
@@ -11,9 +11,12 @@ NOP=0x07070707
|
||||
TEMPLATE_NAME=elf32
|
||||
GENERATE_SHLIB_SCRIPT=yes
|
||||
GENERATE_PIE_SCRIPT=yes
|
||||
+GENERATE_RELRO_SCRIPT=yes
|
||||
NO_SMALL_DATA=yes
|
||||
EXTRA_EM_FILE=s390
|
||||
IREL_IN_PLT=
|
||||
+SEPARATE_GOTPLT=0
|
||||
+test -z "$RELRO" && unset SEPARATE_GOTPLT
|
||||
|
||||
# Treat a host that matches the target with the possible exception of "x"
|
||||
# in the name as if it were native.
|
||||
diff -rup binutils.orig/ld/emultempl/elf32.em binutils-2.30/ld/emultempl/elf32.em
|
||||
--- binutils.orig/ld/emultempl/elf32.em 2019-03-11 14:41:05.971550675 +0000
|
||||
+++ binutils-2.30/ld/emultempl/elf32.em 2019-03-11 14:45:42.064369587 +0000
|
||||
@@ -2406,17 +2406,41 @@ echo ' && link_info.combrelo
|
||||
echo ' && link_info.relro' >> e${EMULATION_NAME}.c
|
||||
echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.xdw >> e${EMULATION_NAME}.c
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||
+sed $sc ldscripts/${EMULATION_NAME}.xdceo >> e${EMULATION_NAME}.c
|
||||
+fi
|
||||
echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
|
||||
echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
|
||||
echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.xdce >> e${EMULATION_NAME}.c
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||
+sed $sc ldscripts/${EMULATION_NAME}.xdco >> e${EMULATION_NAME}.c
|
||||
+fi
|
||||
echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
|
||||
echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.xdc >> e${EMULATION_NAME}.c
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||
+sed $sc ldscripts/${EMULATION_NAME}.xdeo >> e${EMULATION_NAME}.c
|
||||
+fi
|
||||
fi
|
||||
echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
|
||||
echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.xde >> e${EMULATION_NAME}.c
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||
+sed $sc ldscripts/${EMULATION_NAME}.xdo >> e${EMULATION_NAME}.c
|
||||
+fi
|
||||
echo ' ; else if (bfd_link_pie (&link_info)) return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.xd >> e${EMULATION_NAME}.c
|
||||
fi
|
||||
@@ -2432,17 +2456,41 @@ echo ' && link_info.combrelo
|
||||
echo ' && link_info.relro' >> e${EMULATION_NAME}.c
|
||||
echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.xsw >> e${EMULATION_NAME}.c
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||
+sed $sc ldscripts/${EMULATION_NAME}.xsceo >> e${EMULATION_NAME}.c
|
||||
+fi
|
||||
echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
|
||||
echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||
echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.xsce >> e${EMULATION_NAME}.c
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||
+sed $sc ldscripts/${EMULATION_NAME}.xsco >> e${EMULATION_NAME}.c
|
||||
+fi
|
||||
echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
|
||||
echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.xsc >> e${EMULATION_NAME}.c
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||
+sed $sc ldscripts/${EMULATION_NAME}.xseo >> e${EMULATION_NAME}.c
|
||||
+fi
|
||||
fi
|
||||
echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
|
||||
echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.xse >> e${EMULATION_NAME}.c
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||
+sed $sc ldscripts/${EMULATION_NAME}.xso >> e${EMULATION_NAME}.c
|
||||
+fi
|
||||
echo ' ; else if (bfd_link_dll (&link_info)) return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.xs >> e${EMULATION_NAME}.c
|
||||
fi
|
||||
@@ -2455,14 +2503,34 @@ echo ' ; else if (link_info.combreloc'
|
||||
echo ' && link_info.relro' >> e${EMULATION_NAME}.c
|
||||
echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.xw >> e${EMULATION_NAME}.c
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||
+sed $sc ldscripts/${EMULATION_NAME}.xceo >> e${EMULATION_NAME}.c
|
||||
+fi
|
||||
echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||
echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.xce >> e${EMULATION_NAME}.c
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||
+sed $sc ldscripts/${EMULATION_NAME}.xco >> e${EMULATION_NAME}.c
|
||||
+fi
|
||||
echo ' ; else if (link_info.combreloc) return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.xc >> e${EMULATION_NAME}.c
|
||||
fi
|
||||
-echo ' ; else if (link_info.separate_code) return' >> e${EMULATION_NAME}.c
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+echo ' ; else if (link_info.separate_code' >> e${EMULATION_NAME}.c
|
||||
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||
+sed $sc ldscripts/${EMULATION_NAME}.xeo >> e${EMULATION_NAME}.c
|
||||
+fi
|
||||
+echo ' ; else if (link_info.separate_code) return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.xe >> e${EMULATION_NAME}.c
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+echo ' ; else if (link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||
+sed $sc ldscripts/${EMULATION_NAME}.xo >> e${EMULATION_NAME}.c
|
||||
+fi
|
||||
echo ' ; else return' >> e${EMULATION_NAME}.c
|
||||
sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
|
||||
echo '; }' >> e${EMULATION_NAME}.c
|
||||
@@ -2501,6 +2569,21 @@ fragment <<EOF
|
||||
else
|
||||
return "ldscripts/${EMULATION_NAME}.xdw";
|
||||
}
|
||||
+EOF
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+fragment <<EOF
|
||||
+ else if (bfd_link_pie (&link_info)
|
||||
+ && link_info.combreloc
|
||||
+ && link_info.relro)
|
||||
+ {
|
||||
+ if (link_info.separate_code)
|
||||
+ return "ldscripts/${EMULATION_NAME}.xdceo";
|
||||
+ else
|
||||
+ return "ldscripts/${EMULATION_NAME}.xdco";
|
||||
+ }
|
||||
+EOF
|
||||
+fi
|
||||
+fragment <<EOF
|
||||
else if (bfd_link_pie (&link_info)
|
||||
&& link_info.combreloc)
|
||||
{
|
||||
@@ -2511,6 +2594,18 @@ fragment <<EOF
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+fragment <<EOF
|
||||
+ else if (bfd_link_pie (&link_info)
|
||||
+ && link_info.relro)
|
||||
+ {
|
||||
+ if (link_info.separate_code)
|
||||
+ return "ldscripts/${EMULATION_NAME}.xdeo";
|
||||
+ else
|
||||
+ return "ldscripts/${EMULATION_NAME}.xdo";
|
||||
+ }
|
||||
+EOF
|
||||
+fi
|
||||
fragment <<EOF
|
||||
else if (bfd_link_pie (&link_info))
|
||||
{
|
||||
@@ -2532,6 +2627,21 @@ fragment <<EOF
|
||||
else
|
||||
return "ldscripts/${EMULATION_NAME}.xsw";
|
||||
}
|
||||
+EOF
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+fragment <<EOF
|
||||
+ else if (bfd_link_dll (&link_info)
|
||||
+ && link_info.combreloc
|
||||
+ && link_info.relro)
|
||||
+ {
|
||||
+ if (link_info.separate_code)
|
||||
+ return "ldscripts/${EMULATION_NAME}.xsceo";
|
||||
+ else
|
||||
+ return "ldscripts/${EMULATION_NAME}.xsco";
|
||||
+ }
|
||||
+EOF
|
||||
+fi
|
||||
+fragment <<EOF
|
||||
else if (bfd_link_dll (&link_info) && link_info.combreloc)
|
||||
{
|
||||
if (link_info.separate_code)
|
||||
@@ -2541,6 +2651,18 @@ fragment <<EOF
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+fragment <<EOF
|
||||
+ else if (bfd_link_dll (&link_info)
|
||||
+ && link_info.relro)
|
||||
+ {
|
||||
+ if (link_info.separate_code)
|
||||
+ return "ldscripts/${EMULATION_NAME}.xseo";
|
||||
+ else
|
||||
+ return "ldscripts/${EMULATION_NAME}.xso";
|
||||
+ }
|
||||
+EOF
|
||||
+fi
|
||||
fragment <<EOF
|
||||
else if (bfd_link_dll (&link_info))
|
||||
{
|
||||
@@ -2561,6 +2683,20 @@ fragment <<EOF
|
||||
else
|
||||
return "ldscripts/${EMULATION_NAME}.xw";
|
||||
}
|
||||
+EOF
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+fragment <<EOF
|
||||
+ else if (link_info.combreloc
|
||||
+ && link_info.relro)
|
||||
+ {
|
||||
+ if (link_info.separate_code)
|
||||
+ return "ldscripts/${EMULATION_NAME}.xceo";
|
||||
+ else
|
||||
+ return "ldscripts/${EMULATION_NAME}.xco";
|
||||
+ }
|
||||
+EOF
|
||||
+fi
|
||||
+fragment <<EOF
|
||||
else if (link_info.combreloc)
|
||||
{
|
||||
if (link_info.separate_code)
|
||||
@@ -2570,6 +2706,17 @@ fragment <<EOF
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||
+fragment <<EOF
|
||||
+ else if (link_info.relro)
|
||||
+ {
|
||||
+ if (link_info.separate_code)
|
||||
+ return "ldscripts/${EMULATION_NAME}.xeo";
|
||||
+ else
|
||||
+ return "ldscripts/${EMULATION_NAME}.xo";
|
||||
+ }
|
||||
+EOF
|
||||
+fi
|
||||
fragment <<EOF
|
||||
else
|
||||
{
|
||||
diff -rup binutils.orig/ld/genscripts.sh binutils-2.30/ld/genscripts.sh
|
||||
--- binutils.orig/ld/genscripts.sh 2019-03-11 14:41:05.983550579 +0000
|
||||
+++ binutils-2.30/ld/genscripts.sh 2019-03-11 14:45:42.065369580 +0000
|
||||
@@ -304,6 +304,20 @@ LD_FLAG=textonly
|
||||
. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xe
|
||||
|
||||
+if test -n "$GENERATE_RELRO_SCRIPT"; then
|
||||
+ LD_FLAG=
|
||||
+ RELRO=" "
|
||||
+ ( echo "/* Script for -z relo: generate normal executables with separate code segment */"
|
||||
+ . ${CUSTOMIZER_SCRIPT}
|
||||
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xo
|
||||
+ LD_FLAG=textonly
|
||||
+ ( echo "/* Script for -z separate-code -z relo: generate normal executables with separate code segment */"
|
||||
+ . ${CUSTOMIZER_SCRIPT}
|
||||
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xeo
|
||||
+ unset RELRO
|
||||
+fi
|
||||
LD_FLAG=n
|
||||
DATA_ALIGNMENT=${DATA_ALIGNMENT_n}
|
||||
( echo "/* Script for -n: mix text and data on same page */"
|
||||
@@ -351,6 +365,25 @@ if test -n "$GENERATE_COMBRELOC_SCRIPT";
|
||||
rm -f ${COMBRELOC}
|
||||
COMBRELOC=
|
||||
unset RELRO_NOW
|
||||
+ if test -n "$GENERATE_RELRO_SCRIPT"; then
|
||||
+ LD_FLAG=c
|
||||
+ RELRO=" "
|
||||
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xco.tmp
|
||||
+ ( echo "/* Script for -z combreloc -z relro: combine and sort reloc sections */"
|
||||
+ . ${CUSTOMIZER_SCRIPT}
|
||||
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xco
|
||||
+ rm -f ${COMBRELOC}
|
||||
+ LD_FLAG=ctextonly
|
||||
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xceo.tmp
|
||||
+ ( echo "/* Script for -z combreloc -z separate-code -z relro: combine and sort reloc sections */"
|
||||
+ . ${CUSTOMIZER_SCRIPT}
|
||||
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xceo
|
||||
+ rm -f ${COMBRELOC}
|
||||
+ COMBRELOC=
|
||||
+ unset RELRO
|
||||
+ fi
|
||||
fi
|
||||
|
||||
if test -n "$GENERATE_SHLIB_SCRIPT"; then
|
||||
@@ -368,6 +401,23 @@ if test -n "$GENERATE_SHLIB_SCRIPT"; the
|
||||
. ${CUSTOMIZER_SCRIPT}
|
||||
. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xse
|
||||
+
|
||||
+ if test -n "$GENERATE_RELRO_SCRIPT"; then
|
||||
+ RELRO=" "
|
||||
+ LD_FLAG=shared
|
||||
+ (
|
||||
+ echo "/* Script for ld --shared -z relro: link shared library */"
|
||||
+ . ${CUSTOMIZER_SCRIPT}
|
||||
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xso
|
||||
+ LD_FLAG=sharedtextonly
|
||||
+ (
|
||||
+ echo "/* Script for ld --shared -z relro -z separate-code: link shared library with separate code segment */"
|
||||
+ . ${CUSTOMIZER_SCRIPT}
|
||||
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xseo
|
||||
+ unset RELRO
|
||||
+ fi
|
||||
if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
|
||||
DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
|
||||
LD_FLAG=cshared
|
||||
@@ -399,8 +449,27 @@ if test -n "$GENERATE_SHLIB_SCRIPT"; the
|
||||
. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xswe
|
||||
rm -f ${COMBRELOC}
|
||||
- COMBRELOC=
|
||||
unset RELRO_NOW
|
||||
+
|
||||
+ if test -n "$GENERATE_RELRO_SCRIPT"; then
|
||||
+ LD_FLAG=wshared
|
||||
+ RELRO=" "
|
||||
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xsco.tmp
|
||||
+ ( echo "/* Script for --shared -z combreloc -z relro: shared library, combine & sort relocs with separate code segment */"
|
||||
+ . ${CUSTOMIZER_SCRIPT}
|
||||
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsco
|
||||
+ rm -f ${COMBRELOC}
|
||||
+ LD_FLAG=wsharedtextonly
|
||||
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xsceo.tmp
|
||||
+ ( echo "/* Script for --shared -z combreloc -z relro -z separate-code: shared library, combine & sort relocs with separate code segment */"
|
||||
+ . ${CUSTOMIZER_SCRIPT}
|
||||
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsceo
|
||||
+ rm -f ${COMBRELOC}
|
||||
+ unset RELRO
|
||||
+ fi
|
||||
+ COMBRELOC=
|
||||
fi
|
||||
unset CREATE_SHLIB
|
||||
fi
|
||||
@@ -420,6 +489,22 @@ if test -n "$GENERATE_PIE_SCRIPT"; then
|
||||
. ${CUSTOMIZER_SCRIPT}
|
||||
. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xde
|
||||
+ if test -n "$GENERATE_RELRO_SCRIPT"; then
|
||||
+ RELRO=" "
|
||||
+ LD_FLAG=pie
|
||||
+ (
|
||||
+ echo "/* Script for ld -pie -z relro: link position independent executable */"
|
||||
+ . ${CUSTOMIZER_SCRIPT}
|
||||
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdo
|
||||
+ LD_FLAG=pietextonly
|
||||
+ (
|
||||
+ echo "/* Script for ld -pie -z relro -z separate-code: link position independent executable with separate code segment */"
|
||||
+ . ${CUSTOMIZER_SCRIPT}
|
||||
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdeo
|
||||
+ unset RELRO
|
||||
+ fi
|
||||
if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
|
||||
DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
|
||||
COMBRELOC=ldscripts/${EMULATION_NAME}.xdc.tmp
|
||||
@@ -451,8 +536,28 @@ if test -n "$GENERATE_PIE_SCRIPT"; then
|
||||
. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdwe
|
||||
rm -f ${COMBRELOC}
|
||||
- COMBRELOC=
|
||||
unset RELRO_NOW
|
||||
+
|
||||
+ if test -n "$GENERATE_RELRO_SCRIPT"; then
|
||||
+ LD_FLAG=wpie
|
||||
+ RELRO=" "
|
||||
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xdco.tmp
|
||||
+ ( echo "/* Script for -pie -z combreloc -z relro: position independent executable, combine & sort relocs with separate code segment */"
|
||||
+ . ${CUSTOMIZER_SCRIPT}
|
||||
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdco
|
||||
+ rm -f ${COMBRELOC}
|
||||
+ LD_FLAG=wpietextonly
|
||||
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xdceo.tmp
|
||||
+ ( echo "/* Script for -pie -z combreloc -z relro -z separate-code: position independent executable, combine & sort relocs with separate code segment */"
|
||||
+ . ${CUSTOMIZER_SCRIPT}
|
||||
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdceo
|
||||
+ rm -f ${COMBRELOC}
|
||||
+
|
||||
+ unset RELRO
|
||||
+ fi
|
||||
+ COMBRELOC=
|
||||
fi
|
||||
unset CREATE_PIE
|
||||
fi
|
||||
diff -rup binutils.orig/ld/testsuite/ld-s390/s390.exp binutils-2.30/ld/testsuite/ld-s390/s390.exp
|
||||
--- binutils.orig/ld/testsuite/ld-s390/s390.exp 2019-03-11 14:41:06.029550216 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-s390/s390.exp 2019-03-11 14:45:42.066369572 +0000
|
||||
@@ -70,10 +70,15 @@ set s390xtests {
|
||||
{{readelf -WSsrl tlsbin_64.rd} {objdump -dzrj.text tlsbin_64.dd}
|
||||
{objdump -sj.got tlsbin_64.sd} {objdump -sj.tdata tlsbin_64.td}}
|
||||
"tlsbin_64"}
|
||||
- {"GOT: symbol address load from got to larl"
|
||||
- "-shared -melf64_s390 --hash-style=sysv --version-script=gotreloc-1.ver" ""
|
||||
+ {"GOT: norelro symbol address load from got to larl"
|
||||
+ "-shared -melf64_s390 -z norelro --hash-style=sysv --version-script=gotreloc-1.ver" ""
|
||||
"-m64" {gotreloc-1.s}
|
||||
- {{objdump -dzrj.text gotreloc_64-1.dd}}
|
||||
+ {{objdump -dzrj.text gotreloc_64-norelro-1.dd}}
|
||||
+ "gotreloc_64-1"}
|
||||
+ {"GOT: relro symbol address load from got to larl"
|
||||
+ "-shared -melf64_s390 -z relro --hash-style=sysv --version-script=gotreloc-1.ver" ""
|
||||
+ "-m64" {gotreloc-1.s}
|
||||
+ {{objdump -dzrj.text gotreloc_64-relro-1.dd}}
|
||||
"gotreloc_64-1"}
|
||||
{"PLT: offset test"
|
||||
"-shared -m elf64_s390 -dT pltoffset-1.ld" ""
|
||||
--- /dev/null 2019-03-11 08:49:22.227998809 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-s390/gotreloc_64-relro-1.dd 2019-03-11 14:53:27.144667759 +0000
|
||||
@@ -0,0 +1,12 @@
|
||||
+tmpdir/gotreloc_64-1: file format elf64-s390
|
||||
+
|
||||
+Disassembly of section .text:
|
||||
+
|
||||
+.* <foo>:
|
||||
+.*: c0 10 00 00 00 0e [ ]*larl %r1,.* <bar>
|
||||
+.*: c0 10 00 00 00 0b [ ]*larl %r1,.* <bar>
|
||||
+.*: c4 1d 00 00 .. .. [ ]*lrl %r1,.* <_GLOBAL_OFFSET_TABLE_\+0x18>
|
||||
+.*: 58 10 c0 18 [ ]*l %r1,24\(%r12\)
|
||||
+.*: e3 10 c0 18 00 58 [ ]*ly %r1,24\(%r12\)
|
||||
+.* <bar>:
|
||||
+.*: 00 00 01 23 .long 0x00000123
|
||||
--- /dev/null 2019-03-11 08:49:22.227998809 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-s390/gotreloc_64-norelro-1.dd 2019-03-11 14:45:42.066369572 +0000
|
||||
@@ -0,0 +1,12 @@
|
||||
+tmpdir/gotreloc_64-1: file format elf64-s390
|
||||
+
|
||||
+Disassembly of section .text:
|
||||
+
|
||||
+.* <foo>:
|
||||
+.*: c0 10 00 00 00 0e [ ]*larl %r1,.* <bar>
|
||||
+.*: c0 10 00 00 00 0b [ ]*larl %r1,.* <bar>
|
||||
+.*: c4 1d 00 00 08 86 [ ]*lrl %r1,.* <_GLOBAL_OFFSET_TABLE_\+0x18>
|
||||
+.*: 58 10 c0 18 [ ]*l %r1,24\(%r12\)
|
||||
+.*: e3 10 c0 18 00 58 [ ]*ly %r1,24\(%r12\)
|
||||
+.* <bar>:
|
||||
+.*: 00 00 01 23 .long 0x00000123
|
13
SOURCES/binutils-skip-dwo-search-if-not-needed.patch
Normal file
13
SOURCES/binutils-skip-dwo-search-if-not-needed.patch
Normal file
@ -0,0 +1,13 @@
|
||||
--- binutils.orig/binutils/dwarf.c 2018-02-08 10:49:07.154191536 +0000
|
||||
+++ binutils-2.30/binutils/dwarf.c 2018-02-08 12:53:32.649380368 +0000
|
||||
@@ -9851,6 +9851,10 @@ load_dwo_file (const char * main_filenam
|
||||
void *
|
||||
load_separate_debug_file (void * file, const char * filename)
|
||||
{
|
||||
+ /* Skip this operation if we are not interested in debug links. */
|
||||
+ if (! do_follow_links && ! do_debug_links)
|
||||
+ return NULL;
|
||||
+
|
||||
/* See if there is a dwo link. */
|
||||
if (load_debug_section (str, file)
|
||||
&& load_debug_section (abbrev, file)
|
97
SOURCES/binutils-speed-up-objdump.patch
Normal file
97
SOURCES/binutils-speed-up-objdump.patch
Normal file
@ -0,0 +1,97 @@
|
||||
--- binutils.orig/binutils/objdump.c 2018-03-05 17:04:19.901619738 +0000
|
||||
+++ binutils-2.29/binutils/objdump.c 2018-03-05 17:10:08.334643096 +0000
|
||||
@@ -664,9 +664,7 @@ slurp_dynamic_symtab (bfd *abfd)
|
||||
static bfd_boolean
|
||||
is_significant_symbol_name (const char * name)
|
||||
{
|
||||
- return strcmp (name, ".plt") == 0
|
||||
- || strcmp (name, ".got") == 0
|
||||
- || strcmp (name, ".plt.got") == 0;
|
||||
+ return strncmp (name, ".plt", 4) == 0 || strcmp (name, ".got") == 0;
|
||||
}
|
||||
|
||||
/* Filter out (in place) symbols that are useless for disassembly.
|
||||
@@ -937,6 +935,7 @@ find_symbol_for_address (bfd_vma vma,
|
||||
asection *sec;
|
||||
unsigned int opb;
|
||||
bfd_boolean want_section;
|
||||
+ long rel_count;
|
||||
|
||||
if (sorted_symcount < 1)
|
||||
return NULL;
|
||||
@@ -1065,33 +1064,59 @@ find_symbol_for_address (bfd_vma vma,
|
||||
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. */
|
||||
+ rel_count = aux->dynrelcount;
|
||||
if (!want_section
|
||||
- && aux->dynrelbuf != NULL
|
||||
&& sorted_syms[thisplace]->value != vma
|
||||
+ && rel_count > 0
|
||||
+ && aux->dynrelbuf != NULL
|
||||
+ && aux->dynrelbuf[0]->address <= vma
|
||||
+ && aux->dynrelbuf[rel_count - 1]->address >= vma
|
||||
/* If we have matched a synthetic symbol, then stick with that. */
|
||||
&& (sorted_syms[thisplace]->flags & BSF_SYNTHETIC) == 0)
|
||||
{
|
||||
- long rel_count;
|
||||
- arelent ** rel_pp;
|
||||
+ arelent ** rel_low;
|
||||
+ arelent ** rel_high;
|
||||
|
||||
- for (rel_count = aux->dynrelcount, rel_pp = aux->dynrelbuf;
|
||||
- rel_count--;)
|
||||
+ rel_low = aux->dynrelbuf;
|
||||
+ rel_high = rel_low + rel_count - 1;
|
||||
+ while (rel_low <= rel_high)
|
||||
{
|
||||
- arelent * rel = rel_pp[rel_count];
|
||||
+ arelent ** rel_mid = &rel_low[(rel_high - rel_low) / 2];
|
||||
+ arelent * rel = *rel_mid;
|
||||
|
||||
- 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 (rel->address == vma)
|
||||
{
|
||||
- if (place != NULL)
|
||||
- * place = thisplace;
|
||||
- return * rel->sym_ptr_ptr;
|
||||
+ /* Absolute relocations do not provide a more helpful
|
||||
+ symbolic address. Find a non-absolute relocation
|
||||
+ with the same address. */
|
||||
+
|
||||
+ arelent **rel_vma = rel_mid;
|
||||
+
|
||||
+ for (rel_mid--;
|
||||
+ rel_mid >= rel_low && rel_mid[0]->address == vma;
|
||||
+ rel_mid--)
|
||||
+ rel_vma = rel_mid;
|
||||
+
|
||||
+ for (; rel_vma <= rel_high && rel_vma[0]->address == vma;
|
||||
+ rel_vma++)
|
||||
+ {
|
||||
+ rel = *rel_vma;
|
||||
+ if (rel->sym_ptr_ptr != NULL
|
||||
+ && ! bfd_is_abs_section ((* rel->sym_ptr_ptr)->section))
|
||||
+ {
|
||||
+ if (place != NULL)
|
||||
+ * place = thisplace;
|
||||
+ return * rel->sym_ptr_ptr;
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
}
|
||||
|
||||
- /* We are scanning backwards, so if we go below the target address
|
||||
- we have failed. */
|
||||
- if (rel_pp[rel_count]->address < vma)
|
||||
+ if (vma < rel->address)
|
||||
+ rel_high = rel_mid;
|
||||
+ else if (vma >= rel_mid[1]->address)
|
||||
+ rel_low = rel_mid + 1;
|
||||
+ else
|
||||
break;
|
||||
}
|
||||
}
|
107
SOURCES/binutils-strip-unknown-relocs.patch
Normal file
107
SOURCES/binutils-strip-unknown-relocs.patch
Normal file
@ -0,0 +1,107 @@
|
||||
diff -rup binutils.orig/bfd/elf32-i386.c binutils-2.30/bfd/elf32-i386.c
|
||||
--- binutils.orig/bfd/elf32-i386.c 2018-02-27 17:25:53.961140597 +0000
|
||||
+++ binutils-2.30/bfd/elf32-i386.c 2018-02-27 17:27:14.115133477 +0000
|
||||
@@ -383,7 +383,7 @@ elf_i386_rtype_to_howto (bfd *abfd, unsi
|
||||
/* xgettext:c-format */
|
||||
_bfd_error_handler (_("%B: invalid relocation type %d"),
|
||||
abfd, (int) r_type);
|
||||
- indx = R_386_NONE;
|
||||
+ return NULL;
|
||||
}
|
||||
/* PR 17512: file: 0f67f69d. */
|
||||
if (elf_howto_table [indx].type != r_type)
|
||||
diff -rup binutils.orig/bfd/elf64-ppc.c binutils-2.30/bfd/elf64-ppc.c
|
||||
--- binutils.orig/bfd/elf64-ppc.c 2018-02-27 17:25:53.969140496 +0000
|
||||
+++ binutils-2.30/bfd/elf64-ppc.c 2018-02-27 17:27:56.213604518 +0000
|
||||
@@ -2516,9 +2516,10 @@ ppc64_elf_info_to_howto (bfd *abfd, arel
|
||||
/* xgettext:c-format */
|
||||
_bfd_error_handler (_("%B: invalid relocation type %d"),
|
||||
abfd, (int) type);
|
||||
- type = R_PPC64_NONE;
|
||||
+ cache_ptr->howto = NULL;
|
||||
}
|
||||
- cache_ptr->howto = ppc64_elf_howto_table[type];
|
||||
+ else
|
||||
+ cache_ptr->howto = ppc64_elf_howto_table[type];
|
||||
}
|
||||
|
||||
/* Handle the R_PPC64_ADDR16_HA and similar relocs. */
|
||||
diff -rup binutils.orig/bfd/elf64-s390.c binutils-2.30/bfd/elf64-s390.c
|
||||
--- binutils.orig/bfd/elf64-s390.c 2018-02-27 17:25:53.968140509 +0000
|
||||
+++ binutils-2.30/bfd/elf64-s390.c 2018-02-27 17:28:24.632247443 +0000
|
||||
@@ -372,9 +372,10 @@ elf_s390_info_to_howto (bfd *abfd ATTRIB
|
||||
/* xgettext:c-format */
|
||||
_bfd_error_handler (_("%B: invalid relocation type %d"),
|
||||
abfd, (int) r_type);
|
||||
- r_type = R_390_NONE;
|
||||
+ cache_ptr->howto = NULL;
|
||||
}
|
||||
- cache_ptr->howto = &elf_howto_table[r_type];
|
||||
+ else
|
||||
+ cache_ptr->howto = &elf_howto_table[r_type];
|
||||
}
|
||||
}
|
||||
|
||||
diff -rup binutils.orig/bfd/elf64-x86-64.c binutils-2.30/bfd/elf64-x86-64.c
|
||||
--- binutils.orig/bfd/elf64-x86-64.c 2018-02-27 17:25:53.964140559 +0000
|
||||
+++ binutils-2.30/bfd/elf64-x86-64.c 2018-02-27 17:29:12.554645307 +0000
|
||||
@@ -284,7 +284,7 @@ elf_x86_64_rtype_to_howto (bfd *abfd, un
|
||||
/* xgettext:c-format */
|
||||
_bfd_error_handler (_("%B: invalid relocation type %d"),
|
||||
abfd, (int) r_type);
|
||||
- r_type = R_X86_64_NONE;
|
||||
+ return NULL;
|
||||
}
|
||||
i = r_type;
|
||||
}
|
||||
@@ -347,8 +347,6 @@ elf_x86_64_info_to_howto (bfd *abfd ATTR
|
||||
&& r_type != (unsigned int) R_X86_64_GNU_VTENTRY)
|
||||
r_type &= ~R_X86_64_converted_reloc_bit;
|
||||
cache_ptr->howto = elf_x86_64_rtype_to_howto (abfd, r_type);
|
||||
-
|
||||
- BFD_ASSERT (r_type == cache_ptr->howto->type || cache_ptr->howto->type == R_X86_64_NONE);
|
||||
}
|
||||
|
||||
/* Support for core dump NOTE sections. */
|
||||
diff -rup binutils.orig/bfd/elfcode.h binutils-2.30/bfd/elfcode.h
|
||||
--- binutils.orig/bfd/elfcode.h 2018-02-27 17:25:53.964140559 +0000
|
||||
+++ binutils-2.30/bfd/elfcode.h 2018-02-27 17:26:57.234345581 +0000
|
||||
@@ -1474,6 +1474,12 @@ elf_slurp_reloc_table_from_section (bfd
|
||||
(*ebd->elf_info_to_howto) (abfd, relent, &rela);
|
||||
else
|
||||
(*ebd->elf_info_to_howto_rel) (abfd, relent, &rela);
|
||||
+
|
||||
+ if (relent->howto == NULL)
|
||||
+ {
|
||||
+ bfd_set_error (bfd_error_bad_value);
|
||||
+ goto error_return;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (allocated != NULL)
|
||||
diff -rup binutils.orig/binutils/objcopy.c binutils-2.30/binutils/objcopy.c
|
||||
--- binutils.orig/binutils/objcopy.c 2018-02-27 17:25:53.185150347 +0000
|
||||
+++ binutils-2.30/binutils/objcopy.c 2018-02-27 17:30:05.806976202 +0000
|
||||
@@ -3022,10 +3022,19 @@ copy_object (bfd *ibfd, bfd *obfd, const
|
||||
haven't been set yet. mark_symbols_used_in_relocations will
|
||||
ignore input sections which have no corresponding output
|
||||
section. */
|
||||
+ bfd_set_error (bfd_error_no_error);
|
||||
if (strip_symbols != STRIP_ALL)
|
||||
- bfd_map_over_sections (ibfd,
|
||||
- mark_symbols_used_in_relocations,
|
||||
- isympp);
|
||||
+ {
|
||||
+ bfd_map_over_sections (ibfd,
|
||||
+ mark_symbols_used_in_relocations,
|
||||
+ isympp);
|
||||
+ if (bfd_get_error () != bfd_error_no_error)
|
||||
+ {
|
||||
+ status = 1;
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
osympp = (asymbol **) xmalloc ((symcount + add_symbols + 1) * sizeof (asymbol *));
|
||||
symcount = filter_symbols (ibfd, obfd, osympp, isympp, symcount);
|
||||
}
|
210
SOURCES/binutils-x86-IBT-and-missing-notes.patch
Normal file
210
SOURCES/binutils-x86-IBT-and-missing-notes.patch
Normal file
@ -0,0 +1,210 @@
|
||||
# Do not enable IBT when an object file contains code but no GNU Property notes. (#1687774)
|
||||
|
||||
diff -rup binutils.orig/bfd/elfxx-x86.c binutils-2.30/bfd/elfxx-x86.c
|
||||
--- binutils.orig/bfd/elfxx-x86.c 2019-03-13 10:19:07.715406452 +0000
|
||||
+++ binutils-2.30/bfd/elfxx-x86.c 2019-03-13 10:20:01.255975385 +0000
|
||||
@@ -2377,6 +2377,9 @@ _bfd_x86_elf_merge_gnu_properties (struc
|
||||
}
|
||||
else
|
||||
{
|
||||
+ /* There should be no AND properties since some input doesn't
|
||||
+ have them. Set IBT and SHSTK properties for -z ibt and -z
|
||||
+ shstk if needed. */
|
||||
features = 0;
|
||||
if (info->ibt)
|
||||
features = GNU_PROPERTY_X86_FEATURE_1_IBT;
|
||||
@@ -2384,18 +2387,15 @@ _bfd_x86_elf_merge_gnu_properties (struc
|
||||
features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
|
||||
if (features)
|
||||
{
|
||||
- /* Add GNU_PROPERTY_X86_FEATURE_1_IBT and
|
||||
- GNU_PROPERTY_X86_FEATURE_1_SHSTK. */
|
||||
if (aprop != NULL)
|
||||
{
|
||||
- number = aprop->u.number;
|
||||
- aprop->u.number = number | features;
|
||||
- updated = number != (unsigned int) aprop->u.number;
|
||||
+ updated = features != (unsigned int) aprop->u.number;
|
||||
+ aprop->u.number = features;
|
||||
}
|
||||
else
|
||||
{
|
||||
- bprop->u.number |= features;
|
||||
updated = TRUE;
|
||||
+ bprop->u.number = features;
|
||||
}
|
||||
}
|
||||
else if (aprop != NULL)
|
||||
diff -rup binutils.orig/ld/testsuite/ld-i386/i386.exp binutils-2.30/ld/testsuite/ld-i386/i386.exp
|
||||
--- binutils.orig/ld/testsuite/ld-i386/i386.exp 2019-03-13 10:19:07.258410131 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-i386/i386.exp 2019-03-13 10:20:32.995719837 +0000
|
||||
@@ -473,6 +473,8 @@ run_dump_test "pr18815"
|
||||
run_dump_test "pr19939a"
|
||||
run_dump_test "pr19939b"
|
||||
run_dump_test "tlsdesc2"
|
||||
+run_dump_test "pr24322a"
|
||||
+run_dump_test "pr24322b"
|
||||
|
||||
proc undefined_weak {cflags ldflags} {
|
||||
set testname "Undefined weak symbol"
|
||||
diff -rup binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp binutils-2.30/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
--- binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp 2019-03-13 10:19:07.323409608 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/x86-64.exp 2019-03-13 10:21:11.938406302 +0000
|
||||
@@ -593,6 +593,10 @@ run_dump_test "pr20253-5a"
|
||||
run_dump_test "pr20253-5b"
|
||||
run_dump_test "tlsdesc2"
|
||||
run_dump_test "pr22048"
|
||||
+run_dump_test "pr24322a"
|
||||
+run_dump_test "pr24322a-x32"
|
||||
+run_dump_test "pr24322b"
|
||||
+run_dump_test "pr24322b-x32"
|
||||
|
||||
proc undefined_weak {cflags ldflags} {
|
||||
set testname "Undefined weak symbol"
|
||||
--- /dev/null 2019-03-13 08:01:41.976955507 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-i386/pr24322a.d 2019-03-13 11:05:58.557068529 +0000
|
||||
@@ -0,0 +1,11 @@
|
||||
+#source: ../ld-x86-64/pr24322a.s
|
||||
+#source: ../ld-x86-64/pr24322b.s
|
||||
+#as: --32
|
||||
+#ld: -z shstk -m elf_i386
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x000000.. NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 feature: SHSTK
|
||||
+
|
||||
--- /dev/null 2019-03-13 08:01:41.976955507 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-i386/pr24322b.d 2019-03-13 11:07:19.837414751 +0000
|
||||
@@ -0,0 +1,11 @@
|
||||
+#source: ../ld-x86-64/pr24322c.s
|
||||
+#source: ../ld-x86-64/pr24322b.s
|
||||
+#as: --32
|
||||
+#ld: -z shstk -m elf_i386
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x000000.. NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 feature: SHSTK
|
||||
+
|
||||
--- /dev/null 2019-03-13 08:01:41.976955507 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/pr24322a.s 2019-03-13 10:20:01.256975377 +0000
|
||||
@@ -0,0 +1,27 @@
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ .long 1f - 0f /* name length */
|
||||
+ .long 5f - 2f /* data length */
|
||||
+ .long 5 /* note type */
|
||||
+0: .asciz "GNU" /* vendor name */
|
||||
+1:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+2: .long 0xc0000002 /* pr_type. */
|
||||
+ .long 4f - 3f /* pr_datasz. */
|
||||
+3:
|
||||
+ .long 0x3
|
||||
+4:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+5:
|
||||
--- /dev/null 2019-03-13 08:01:41.976955507 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/pr24322a.d 2019-03-13 11:07:47.228194433 +0000
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr24322a.s
|
||||
+#source: pr24322b.s
|
||||
+#as: --64 -defsym __64_bit__=1
|
||||
+#ld: -z shstk -melf_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x000000.. NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 feature: SHSTK
|
||||
--- /dev/null 2019-03-13 08:01:41.976955507 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/pr24322a-x32.d 2019-03-13 11:10:46.635235620 +0000
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr24322a.s
|
||||
+#source: pr24322b.s
|
||||
+#as: --x32
|
||||
+#ld: -z shstk -m elf32_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x000000.. NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 feature: SHSTK
|
||||
--- /dev/null 2019-03-13 08:01:41.976955507 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/pr24322b.s 2019-03-13 10:20:01.257975369 +0000
|
||||
@@ -0,0 +1,4 @@
|
||||
+ .text
|
||||
+ .global _start
|
||||
+_start:
|
||||
+ ret
|
||||
--- /dev/null 2019-03-13 08:01:41.976955507 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/pr24322b.d 2019-03-13 11:08:03.948059948 +0000
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr24322c.s
|
||||
+#source: pr24322b.s
|
||||
+#as: --64 -defsym __64_bit__=1
|
||||
+#ld: -z shstk -melf_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x000000.. NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 feature: SHSTK
|
||||
--- /dev/null 2019-03-13 08:01:41.976955507 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/pr24322b-x32.d 2019-03-13 11:13:13.626524410 +0000
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr24322c.s
|
||||
+#source: pr24322b.s
|
||||
+#as: --x32
|
||||
+#ld: -z shstk -m elf32_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x000000.. NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 feature: SHSTK
|
||||
--- /dev/null 2019-03-13 08:01:41.976955507 +0000
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/pr24322c.s 2019-03-13 10:20:01.257975369 +0000
|
||||
@@ -0,0 +1,27 @@
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ .long 1f - 0f /* name length */
|
||||
+ .long 5f - 2f /* data length */
|
||||
+ .long 5 /* note type */
|
||||
+0: .asciz "GNU" /* vendor name */
|
||||
+1:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+2: .long 0xc0000002 /* pr_type. */
|
||||
+ .long 4f - 3f /* pr_datasz. */
|
||||
+3:
|
||||
+ .long 0x0
|
||||
+4:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+5:
|
64
SOURCES/binutils-x86-local-relocs.patch
Normal file
64
SOURCES/binutils-x86-local-relocs.patch
Normal file
@ -0,0 +1,64 @@
|
||||
--- binutils.orig/bfd/elfxx-x86.c 2018-05-14 12:22:29.149657093 +0100
|
||||
+++ binutils-2.30/bfd/elfxx-x86.c 2018-05-14 12:25:16.244700009 +0100
|
||||
@@ -839,6 +839,33 @@ _bfd_x86_elf_compare_relocs (const void
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/* Mark symbol, NAME, as locally defined by linker if it is referenced
|
||||
+ and not defined in a relocatable object file. */
|
||||
+
|
||||
+static void
|
||||
+elf_x86_linker_defined (struct bfd_link_info *info, const char *name)
|
||||
+{
|
||||
+ struct elf_link_hash_entry *h;
|
||||
+
|
||||
+ h = elf_link_hash_lookup (elf_hash_table (info), name,
|
||||
+ FALSE, FALSE, FALSE);
|
||||
+ if (h == NULL)
|
||||
+ return;
|
||||
+
|
||||
+ while (h->root.type == bfd_link_hash_indirect)
|
||||
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
||||
+
|
||||
+ if (h->root.type == bfd_link_hash_new
|
||||
+ || h->root.type == bfd_link_hash_undefined
|
||||
+ || h->root.type == bfd_link_hash_undefweak
|
||||
+ || h->root.type == bfd_link_hash_common
|
||||
+ || (!h->def_regular && h->def_dynamic))
|
||||
+ {
|
||||
+ elf_x86_hash_entry (h)->local_ref = 2;
|
||||
+ elf_x86_hash_entry (h)->linker_def = 1;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
bfd_boolean
|
||||
_bfd_x86_elf_link_check_relocs (bfd *abfd, struct bfd_link_info *info)
|
||||
{
|
||||
@@ -869,18 +896,16 @@ _bfd_x86_elf_link_check_relocs (bfd *abf
|
||||
|
||||
/* "__ehdr_start" will be defined by linker as a hidden symbol
|
||||
later if it is referenced and not defined. */
|
||||
- h = elf_link_hash_lookup (elf_hash_table (info),
|
||||
- "__ehdr_start",
|
||||
- FALSE, FALSE, FALSE);
|
||||
- if (h != NULL
|
||||
- && (h->root.type == bfd_link_hash_new
|
||||
- || h->root.type == bfd_link_hash_undefined
|
||||
- || h->root.type == bfd_link_hash_undefweak
|
||||
- || h->root.type == bfd_link_hash_common))
|
||||
+ elf_x86_linker_defined (info, "__ehdr_start");
|
||||
+
|
||||
+ if (bfd_link_executable (info))
|
||||
{
|
||||
- elf_x86_hash_entry (h)->local_ref = 2;
|
||||
- elf_x86_hash_entry (h)->linker_def = 1;
|
||||
- }
|
||||
+ /* References to __bss_start, _end and _edata should be
|
||||
+ locally resolved within executables. */
|
||||
+ elf_x86_linker_defined (info, "__bss_start");
|
||||
+ elf_x86_linker_defined (info, "_end");
|
||||
+ elf_x86_linker_defined (info, "_edata");
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
58
SOURCES/binutils-x86-local-version.patch
Normal file
58
SOURCES/binutils-x86-local-version.patch
Normal file
@ -0,0 +1,58 @@
|
||||
diff -rup binutils.orig/bfd/elf.c binutils-2.30/bfd/elf.c
|
||||
--- binutils.orig/bfd/elf.c 2018-06-01 09:10:37.866552789 +0100
|
||||
+++ binutils-2.30/bfd/elf.c 2018-06-01 09:16:23.159605609 +0100
|
||||
@@ -707,11 +707,23 @@ setup_group (bfd *abfd, Elf_Internal_Shd
|
||||
|= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
|
||||
break;
|
||||
}
|
||||
- if (idx >= shnum)
|
||||
+ if (idx < shnum)
|
||||
+ {
|
||||
+ dest->shdr = elf_elfsections (abfd)[idx];
|
||||
+ /* PR binutils/23199: All sections in a
|
||||
+ section group should be marked with
|
||||
+ SHF_GROUP. But some tools generate
|
||||
+ broken objects without SHF_GROUP. Fix
|
||||
+ them up here. */
|
||||
+ dest->shdr->sh_flags |= SHF_GROUP;
|
||||
+ }
|
||||
+ if (idx >= shnum
|
||||
+ || dest->shdr->sh_type == SHT_GROUP)
|
||||
{
|
||||
_bfd_error_handler
|
||||
- (_("%B: invalid SHT_GROUP entry"), abfd);
|
||||
- idx = 0;
|
||||
+ (_("%B: invalid entry in SHT_GROUP section [%u]"),
|
||||
+ abfd, i);
|
||||
+ dest->shdr = NULL;
|
||||
}
|
||||
dest->shdr = elf_elfsections (abfd)[idx];
|
||||
}
|
||||
@@ -779,7 +791,8 @@ setup_group (bfd *abfd, Elf_Internal_Shd
|
||||
idx = (Elf_Internal_Group *) shdr->contents;
|
||||
n_elt = shdr->sh_size / 4;
|
||||
while (--n_elt != 0)
|
||||
- if ((s = (++idx)->shdr->bfd_section) != NULL
|
||||
+ if ((++idx)->shdr != NULL
|
||||
+ && (s = idx->shdr->bfd_section) != NULL
|
||||
&& elf_next_in_group (s) != NULL)
|
||||
break;
|
||||
if (n_elt != 0)
|
||||
diff -rup binutils.orig/bfd/elfxx-x86.c binutils-2.30/bfd/elfxx-x86.c
|
||||
--- binutils.orig/bfd/elfxx-x86.c 2018-06-01 09:10:37.854552926 +0100
|
||||
+++ binutils-2.30/bfd/elfxx-x86.c 2018-06-01 09:21:10.570323575 +0100
|
||||
@@ -1976,7 +1976,13 @@ _bfd_x86_elf_link_symbol_references_loca
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
- eh->local_ref = 1;
|
||||
+ /* Symbols created by HIDDEN and PROVIDE_HIDDEN assignments in linker
|
||||
+ script aren't forced local here yet. bfd_hide_sym_by_version
|
||||
+ can't be used to check if a versioned symbol is hidden. It has to
|
||||
+ be syncd with _bfd_elf_link_assign_sym_version to get the correct
|
||||
+ answer. */
|
||||
+ if (!h->root.ldscript_def && h->versioned == unversioned)
|
||||
+ eh->local_ref = 1;
|
||||
return FALSE;
|
||||
}
|
||||
|
137
SOURCES/binutils-x86_64-disable-PLT-elision.patch
Normal file
137
SOURCES/binutils-x86_64-disable-PLT-elision.patch
Normal file
@ -0,0 +1,137 @@
|
||||
--- binutils.orig/bfd/elfxx-x86.c 2018-09-05 14:08:23.331182323 +0100
|
||||
+++ binutils-2.30/bfd/elfxx-x86.c 2018-09-05 16:14:15.331921741 +0100
|
||||
@@ -108,6 +108,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
|
||||
|
||||
resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
|
||||
|
||||
+#if 0 /* Never optimize away PLT entries. They are needed by tools like rtld-audit and ltrace. */
|
||||
/* 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
|
||||
@@ -125,6 +126,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
|
||||
/* Use the GOT PLT. */
|
||||
eh->plt_got.refcount = 1;
|
||||
}
|
||||
+#endif
|
||||
|
||||
/* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
|
||||
here if it is defined and referenced in a non-shared object. */
|
||||
diff -rup binutils.orig/ld/testsuite/ld-i386/i386.exp binutils-2.30/ld/testsuite/ld-i386/i386.exp
|
||||
--- binutils.orig/ld/testsuite/ld-i386/i386.exp 2018-09-12 15:59:03.969158148 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-i386/i386.exp 2018-09-12 16:23:41.579837859 +0100
|
||||
@@ -1434,9 +1434,9 @@ run_ld_link_tests [list \
|
||||
]
|
||||
|
||||
# Linux only tests
|
||||
-run_dump_test "pltgot-1"
|
||||
-run_dump_test "pltgot-2"
|
||||
-run_dump_test "pr20830"
|
||||
+# run_dump_test "pltgot-1"
|
||||
+# run_dump_test "pltgot-2"
|
||||
+# run_dump_test "pr20830"
|
||||
run_dump_test "ibt-plt-1"
|
||||
run_dump_test "ibt-plt-2a"
|
||||
run_dump_test "ibt-plt-2b"
|
||||
diff -rup binutils.orig/ld/testsuite/ld-i386/pr19636-2d.d binutils-2.30/ld/testsuite/ld-i386/pr19636-2d.d
|
||||
--- binutils.orig/ld/testsuite/ld-i386/pr19636-2d.d 2018-09-12 15:59:03.968158156 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-i386/pr19636-2d.d 2018-09-12 16:20:30.046301550 +0100
|
||||
@@ -9,7 +9,7 @@ Relocation section '\.rel\.dyn' at offse
|
||||
[0-9a-f]+ +[0-9a-f]+ +R_386_32 +0+ +func
|
||||
[0-9a-f]+ +[0-9a-f]+ +R_386_PC32 +0+ +func
|
||||
[0-9a-f]+ +[0-9a-f]+ +R_386_GLOB_DAT +0+ +func
|
||||
-
|
||||
+#...
|
||||
Symbol table '\.dynsym' contains [0-9]+ entries:
|
||||
+Num: +Value +Size Type +Bind +Vis +Ndx Name
|
||||
#...
|
||||
diff -rup binutils.orig/ld/testsuite/ld-i386/pr19636-2e.d binutils-2.30/ld/testsuite/ld-i386/pr19636-2e.d
|
||||
--- binutils.orig/ld/testsuite/ld-i386/pr19636-2e.d 2018-09-12 15:59:03.966158171 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-i386/pr19636-2e.d 2018-09-12 16:20:18.301391306 +0100
|
||||
@@ -9,7 +9,7 @@ Relocation section '\.rel\.dyn' at offse
|
||||
[0-9a-f]+ +[0-9a-f]+ +R_386_32 +0+ +func
|
||||
[0-9a-f]+ +[0-9a-f]+ +R_386_PC32 +0+ +func
|
||||
[0-9a-f]+ +[0-9a-f]+ +R_386_GLOB_DAT +0+ +func
|
||||
-
|
||||
+#...
|
||||
Symbol table '\.dynsym' contains [0-9]+ entries:
|
||||
+Num: +Value +Size Type +Bind +Vis +Ndx Name
|
||||
#...
|
||||
diff -rup binutils.orig/ld/testsuite/ld-x86-64/plt-main-bnd.dd binutils-2.30/ld/testsuite/ld-x86-64/plt-main-bnd.dd
|
||||
--- binutils.orig/ld/testsuite/ld-x86-64/plt-main-bnd.dd 2018-09-12 15:59:04.038157619 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/plt-main-bnd.dd 2018-09-12 16:43:58.243317284 +0100
|
||||
@@ -1,3 +1,4 @@
|
||||
+#pass
|
||||
#...
|
||||
Disassembly of section .plt.got:
|
||||
|
||||
diff -rup binutils.orig/ld/testsuite/ld-x86-64/plt-main-ibt.dd binutils-2.30/ld/testsuite/ld-x86-64/plt-main-ibt.dd
|
||||
--- binutils.orig/ld/testsuite/ld-x86-64/plt-main-ibt.dd 2018-09-12 15:59:04.027157703 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/plt-main-ibt.dd 2018-09-12 16:46:42.417060121 +0100
|
||||
@@ -1,3 +1,4 @@
|
||||
+#pass
|
||||
#...
|
||||
Disassembly of section .plt.got:
|
||||
|
||||
diff -rup binutils.orig/ld/testsuite/ld-x86-64/plt-main.rd binutils-2.30/ld/testsuite/ld-x86-64/plt-main.rd
|
||||
--- binutils.orig/ld/testsuite/ld-x86-64/plt-main.rd 2018-09-12 15:59:04.037157626 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/plt-main.rd 2018-09-12 16:34:34.950619373 +0100
|
||||
@@ -1,4 +1,3 @@
|
||||
-#failif
|
||||
#...
|
||||
[0-9a-f ]+R_X86_64_JUMP_SLOT +0+ +bar \+ 0
|
||||
#...
|
||||
diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr19636-2e.d binutils-2.30/ld/testsuite/ld-x86-64/pr19636-2e.d
|
||||
--- binutils.orig/ld/testsuite/ld-x86-64/pr19636-2e.d 2018-09-12 15:59:04.034157649 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/pr19636-2e.d 2018-09-12 16:17:08.687840318 +0100
|
||||
@@ -11,7 +11,7 @@ Relocation section '\.rela\.dyn' at offs
|
||||
Relocation section '\.rela\.plt' at offset 0x[0-9a-f]+ contains 1 entry:
|
||||
+Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
|
||||
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_JUMP_SLOT +0+ +func3 \+ 0
|
||||
-
|
||||
+#...
|
||||
Symbol table '\.dynsym' contains [0-9]+ entries:
|
||||
+Num: +Value +Size Type +Bind +Vis +Ndx Name
|
||||
#...
|
||||
diff -rup binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp binutils-2.30/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
--- binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp 2018-09-12 15:59:04.023157734 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/x86-64.exp 2018-09-12 16:47:08.880857470 +0100
|
||||
@@ -59,7 +59,7 @@ set x86_64tests {
|
||||
"-shared -melf_x86_64 --no-ld-generated-unwind-info --hash-style=sysv" ""
|
||||
"--64 -mrelax-relocations=yes"
|
||||
{tlspic3.s tlspic2.s}
|
||||
- {{readelf -WSsrl tlspic2.rd} {objdump -drj.text\ -Mintel64 tlspic2.dd}
|
||||
+ {{objdump -drj.text\ -Mintel64 tlspic2.dd}
|
||||
{objdump -sj.got tlspic2.sd} {objdump -sj.tdata tlspic2.td}}
|
||||
"libtlspic2.so"}
|
||||
{"TLS descriptor -fpic -shared transitions"
|
||||
@@ -1837,18 +1837,18 @@ if { "$LD_CLASS" == "64bit" } then {
|
||||
# This test needs 64-bit linker.
|
||||
run_dump_test "pr17618"
|
||||
}
|
||||
-run_dump_test "pltgot-1"
|
||||
-run_dump_test "pltgot-2"
|
||||
-run_dump_test "pr20830a"
|
||||
-run_dump_test "pr20830b"
|
||||
-run_dump_test "pr21038a"
|
||||
-run_dump_test "pr21038b"
|
||||
-run_dump_test "pr21038c"
|
||||
-run_dump_test "pr20830a-now"
|
||||
-run_dump_test "pr20830b-now"
|
||||
-run_dump_test "pr21038a-now"
|
||||
-run_dump_test "pr21038b-now"
|
||||
-run_dump_test "pr21038c-now"
|
||||
+# run_dump_test "pltgot-1"
|
||||
+# run_dump_test "pltgot-2"
|
||||
+# run_dump_test "pr20830a"
|
||||
+# run_dump_test "pr20830b"
|
||||
+# run_dump_test "pr21038a"
|
||||
+# run_dump_test "pr21038b"
|
||||
+# run_dump_test "pr21038c"
|
||||
+# run_dump_test "pr20830a-now"
|
||||
+# run_dump_test "pr20830b-now"
|
||||
+# run_dump_test "pr21038a-now"
|
||||
+# run_dump_test "pr21038b-now"
|
||||
+# run_dump_test "pr21038c-now"
|
||||
run_dump_test "ibt-plt-1"
|
||||
run_dump_test "ibt-plt-1-x32"
|
||||
run_dump_test "ibt-plt-2a"
|
77
SOURCES/binutils-x86_64-ibt-enabled-tlsdesc.patch
Normal file
77
SOURCES/binutils-x86_64-ibt-enabled-tlsdesc.patch
Normal file
@ -0,0 +1,77 @@
|
||||
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-10-08 15:24:17.980797510 +0100
|
||||
+++ binutils-2.30/bfd/elf64-x86-64.c 2018-10-08 15:25:02.643458607 +0100
|
||||
@@ -4399,15 +4399,23 @@ elf_x86_64_finish_dynamic_sections (bfd
|
||||
|
||||
if (htab->tlsdesc_plt)
|
||||
{
|
||||
+ /* The TLSDESC entry in a lazy procedure linkage table. */
|
||||
+ static const bfd_byte tlsdesc_plt_entry[LAZY_PLT_ENTRY_SIZE] =
|
||||
+ {
|
||||
+ 0xf3, 0x0f, 0x1e, 0xfa, /* endbr64 */
|
||||
+ 0xff, 0x35, 8, 0, 0, 0, /* pushq GOT+8(%rip) */
|
||||
+ 0xff, 0x25, 16, 0, 0, 0 /* jmpq *GOT+TDG(%rip) */
|
||||
+ };
|
||||
+
|
||||
bfd_put_64 (output_bfd, (bfd_vma) 0,
|
||||
htab->elf.sgot->contents + htab->tlsdesc_got);
|
||||
|
||||
memcpy (htab->elf.splt->contents + htab->tlsdesc_plt,
|
||||
- htab->lazy_plt->plt0_entry,
|
||||
- htab->lazy_plt->plt0_entry_size);
|
||||
+ tlsdesc_plt_entry, LAZY_PLT_ENTRY_SIZE);
|
||||
|
||||
- /* Add offset for pushq GOT+8(%rip), since the
|
||||
- instruction uses 6 bytes subtract this value. */
|
||||
+ /* Add offset for pushq GOT+8(%rip), since ENDBR64 uses 4
|
||||
+ bytes and the instruction uses 6 bytes, subtract these
|
||||
+ values. */
|
||||
bfd_put_32 (output_bfd,
|
||||
(htab->elf.sgotplt->output_section->vma
|
||||
+ htab->elf.sgotplt->output_offset
|
||||
@@ -4415,14 +4423,13 @@ elf_x86_64_finish_dynamic_sections (bfd
|
||||
- htab->elf.splt->output_section->vma
|
||||
- htab->elf.splt->output_offset
|
||||
- htab->tlsdesc_plt
|
||||
- - 6),
|
||||
+ - 4 - 6),
|
||||
(htab->elf.splt->contents
|
||||
+ htab->tlsdesc_plt
|
||||
- + htab->lazy_plt->plt0_got1_offset));
|
||||
- /* Add offset for the PC-relative instruction accessing
|
||||
- GOT+TDG, where TDG stands for htab->tlsdesc_got,
|
||||
- subtracting the offset to the end of that
|
||||
- instruction. */
|
||||
+ + 4 + 2));
|
||||
+ /* Add offset for indirect branch via GOT+TDG, where TDG
|
||||
+ stands for htab->tlsdesc_got, subtracting the offset
|
||||
+ to the end of that instruction. */
|
||||
bfd_put_32 (output_bfd,
|
||||
(htab->elf.sgot->output_section->vma
|
||||
+ htab->elf.sgot->output_offset
|
||||
@@ -4430,10 +4437,9 @@ elf_x86_64_finish_dynamic_sections (bfd
|
||||
- htab->elf.splt->output_section->vma
|
||||
- htab->elf.splt->output_offset
|
||||
- htab->tlsdesc_plt
|
||||
- - htab->lazy_plt->plt0_got2_insn_end),
|
||||
+ - 4 - 6 - 6),
|
||||
(htab->elf.splt->contents
|
||||
- + htab->tlsdesc_plt
|
||||
- + htab->lazy_plt->plt0_got2_offset));
|
||||
+ + htab->tlsdesc_plt + 4 + 6 + 2));
|
||||
}
|
||||
}
|
||||
|
||||
Only in binutils-2.30/bfd: elf64-x86-64.c.orig
|
||||
diff -rup binutils.orig/ld/testsuite/ld-x86-64/tlsdesc.pd binutils-2.30/ld/testsuite/ld-x86-64/tlsdesc.pd
|
||||
--- binutils.orig/ld/testsuite/ld-x86-64/tlsdesc.pd 2018-10-08 15:24:17.293802722 +0100
|
||||
+++ binutils-2.30/ld/testsuite/ld-x86-64/tlsdesc.pd 2018-10-08 15:25:07.515421664 +0100
|
||||
@@ -13,7 +13,7 @@ Disassembly of section .plt:
|
||||
[0-9a-f]+: ff 35 .. .. 20 00 pushq .*\(%rip\) # 201358 <_GLOBAL_OFFSET_TABLE_\+0x8>
|
||||
[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]+: f3 0f 1e fa endbr64
|
||||
[0-9a-f]+: ff 35 .. .. 20 00 pushq .*\(%rip\) # 201358 <_GLOBAL_OFFSET_TABLE_\+0x8>
|
||||
[0-9a-f]+: ff 25 .. .. 20 00 jmpq \*.*\(%rip\) # 201348 <.*>
|
||||
- [0-9a-f]+: 0f 1f 40 00 nopl 0x0\(%rax\)
|
||||
|
3240
SPECS/binutils.spec
Normal file
3240
SPECS/binutils.spec
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user