summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2018-01-12 08:30:10 -0800
committerH.J. Lu <hjl.tools@gmail.com>2018-01-12 08:30:10 -0800
commitc935ff02abfbf5bb80aa043340f7d101aac262f2 (patch)
tree2ca9a7f7d3edd9dfdee647179b3d4be67ee8306c
parentd65311466ac5cf72b61af5c82423ba2c4a3d9e13 (diff)
downloadbinutils-gdb-c935ff02abfbf5bb80aa043340f7d101aac262f2.tar.gz
Revert "Add "-z textonly" option to ELF linker"
This reverts commit e87d0965bb97fa186749c8386822cdeb9752df38. "-z separate-code" has been checked into master branch.
-rw-r--r--patches/0001-ld-Add-z-textonly-option-to-ELF-linker.patch479
-rw-r--r--patches/0002-ld-Add-TEXT_SEGMENT_ALIGN-TEXT_SEGMENT_-RELRO_-END.patch410
-rw-r--r--patches/0003-ld-Create-a-new-LOAD-segment-for-text-only-LOAD-segm.patch161
-rw-r--r--patches/0004-ld-ppc-spu-Also-set-expld.textseg.phase-to-exp_seg_n.patch54
-rw-r--r--patches/0005-ld-Add-tests-for-z-textonly-and-z-notextonly.patch323
-rw-r--r--patches/0006-x86-64-Add-tests-for-z-textonly-z-max-page-size-0x10.patch172
-rw-r--r--patches/README6
7 files changed, 0 insertions, 1605 deletions
diff --git a/patches/0001-ld-Add-z-textonly-option-to-ELF-linker.patch b/patches/0001-ld-Add-z-textonly-option-to-ELF-linker.patch
deleted file mode 100644
index 5f6733db1cb..00000000000
--- a/patches/0001-ld-Add-z-textonly-option-to-ELF-linker.patch
+++ /dev/null
@@ -1,479 +0,0 @@
-From 10728c17a5b63dff7301970c3d58285c77eb955a Mon Sep 17 00:00:00 2001
-From: "H.J. Lu" <hjl.tools@gmail.com>
-Date: Thu, 9 Nov 2017 14:14:08 -0800
-Subject: [PATCH 1/6] ld: Add "-z textonly" option to ELF linker
-
-Text-only LOAD segment has the same requirement for segment alignment
-and page sizes as GNU_RELRO segment. But for GNU_RELRO segment, the
-segment may not end at the same address of the end of data segment. But
-for text-only LOAD segment, it is exactly the same as text LOAD segment.
-
-The new "-z textonly" option will turn on both text-only LOAD segment and
-GNU_RELRO segment. The new "-z notextonly" option will turn off only
-text-only LOAD segment. "-z relro" is updated not to turn off text-only
-LOAD segment. "-z norelro" is updated to turn off both GNU_RELRO segment
-and text-only LOAD segment.
-
-include/
-
- PR ld/22393
- * bfdlink.h (bfd_link_info): Change the relro field to 2 bits.
-
-ld/
-
- PR ld/22393
- * NEWS: Mention "-z textonly".
- * emultempl/elf32.em (gld${EMULATION_NAME}_get_script): Get
- builtin linker scripts and return linker scripts from disk for
- "-z textonly".
- (gld${EMULATION_NAME}_handle_option): Set the first bit of
- link_info.relro for "-z relro". Clear link_info.relro for
- "-z norelro". Set link_info.relro to 2 for "-z textonly".
- Keep only the first bit of link_info.relro for "notextonly".
- * genscripts.sh: Generate linker scripts for "-z textonly".
- (LD_FLAG): Set to *textonly for "-z textonly".
- * lexsup.c (elf_shlib_list_options): Update linker help messsages
- for "-z relro" and "-z norelro". Add linker help messsages for
- "-z textonly" and "-z notextonly".
- * ld.texinfo: Update "-z norelro". Document "-z textonly".
----
- include/bfdlink.h | 6 ++-
- ld/NEWS | 2 +
- ld/emultempl/elf32.em | 104 ++++++++++++++++++++++++++++++++++++++++++++------
- ld/genscripts.sh | 76 ++++++++++++++++++++++++++++++++----
- ld/ld.texinfo | 10 ++++-
- ld/lexsup.c | 8 +++-
- 6 files changed, 182 insertions(+), 24 deletions(-)
-
-diff --git a/include/bfdlink.h b/include/bfdlink.h
-index 2370c0d45a..d283429fdb 100644
---- a/include/bfdlink.h
-+++ b/include/bfdlink.h
-@@ -383,8 +383,10 @@ struct bfd_link_info
- executable. */
- unsigned int emitrelocations: 1;
-
-- /* TRUE if PT_GNU_RELRO segment should be created. */
-- unsigned int relro: 1;
-+ /* Non-zero if PT_GNU_RELRO and text-only PT_LOAD segments should be
-+ created. 1 for PT_GNU_RELRO segment only, > 1 for PT_GNU_RELRO
-+ segment as well as text-only PT_LOAD segment. */
-+ unsigned int relro: 2;
-
- /* Nonzero if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment
- should be created. 1 for DWARF2 tables, 2 for compact tables. */
-diff --git a/ld/NEWS b/ld/NEWS
-index 8f67fbe179..4da1cc07b3 100644
---- a/ld/NEWS
-+++ b/ld/NEWS
-@@ -1,4 +1,6 @@
- -*- text -*-
-+* Add -z textonly to generate text-only PT_LOAD segment.
-+
- * Add -z globalaudit command line option to force audit libraries to be run
- for every dynamic object loaded by an executable - provided that the loader
- supports this functionality.
-diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
-index edd8944f04..b633977438 100644
---- a/ld/emultempl/elf32.em
-+++ b/ld/emultempl/elf32.em
-@@ -2367,13 +2367,25 @@ if test -n "$GENERATE_PIE_SCRIPT" ; then
- if test -n "$GENERATE_COMBRELOC_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 > 1' >> e${EMULATION_NAME}.c
-+echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
-+sed $sc ldscripts/${EMULATION_NAME}.xdwe >> e${EMULATION_NAME}.c
-+echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
-+echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
- 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
- echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
-+echo ' && link_info.relro > 1' >> e${EMULATION_NAME}.c
-+echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c
-+sed $sc ldscripts/${EMULATION_NAME}.xdce >> e${EMULATION_NAME}.c
-+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
- fi
-+echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
-+echo ' && link_info.relro > 1) return' >> e${EMULATION_NAME}.c
-+sed $sc ldscripts/${EMULATION_NAME}.xde >> e${EMULATION_NAME}.c
- echo ' ; else if (bfd_link_pie (&link_info)) return' >> e${EMULATION_NAME}.c
- sed $sc ldscripts/${EMULATION_NAME}.xd >> e${EMULATION_NAME}.c
- fi
-@@ -2381,24 +2393,45 @@ if test -n "$GENERATE_SHLIB_SCRIPT" ; then
- if test -n "$GENERATE_COMBRELOC_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 > 1' >> e${EMULATION_NAME}.c
-+echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
-+sed $sc ldscripts/${EMULATION_NAME}.xswe >> e${EMULATION_NAME}.c
-+echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
-+echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
- 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
- echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
-+echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
-+echo ' && link_info.relro > 1) return' >> e${EMULATION_NAME}.c
-+sed $sc ldscripts/${EMULATION_NAME}.xsce >> e${EMULATION_NAME}.c
-+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
- fi
-+echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
-+echo ' && link_info.relro > 1) return' >> e${EMULATION_NAME}.c
-+sed $sc ldscripts/${EMULATION_NAME}.xse >> e${EMULATION_NAME}.c
- echo ' ; else if (bfd_link_dll (&link_info)) return' >> e${EMULATION_NAME}.c
- sed $sc ldscripts/${EMULATION_NAME}.xs >> e${EMULATION_NAME}.c
- fi
- if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
- echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
-+echo ' && link_info.relro > 1' >> e${EMULATION_NAME}.c
-+echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
-+sed $sc ldscripts/${EMULATION_NAME}.xwe >> e${EMULATION_NAME}.c
-+echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
- 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
-+echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
-+echo ' && link_info.relro > 1) return' >> e${EMULATION_NAME}.c
-+sed $sc ldscripts/${EMULATION_NAME}.xce >> e${EMULATION_NAME}.c
- 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.relro > 1) return' >> e${EMULATION_NAME}.c
-+sed $sc ldscripts/${EMULATION_NAME}.xe >> e${EMULATION_NAME}.c
- echo ' ; else return' >> e${EMULATION_NAME}.c
- sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
- echo '; }' >> e${EMULATION_NAME}.c
-@@ -2431,15 +2464,30 @@ fragment <<EOF
- && link_info.combreloc
- && link_info.relro
- && (link_info.flags & DF_BIND_NOW))
-- return "ldscripts/${EMULATION_NAME}.xdw";
-+ {
-+ if (link_info.relro > 1)
-+ return "ldscripts/${EMULATION_NAME}.xdwe";
-+ else
-+ return "ldscripts/${EMULATION_NAME}.xdw";
-+ }
- else if (bfd_link_pie (&link_info)
- && link_info.combreloc)
-- return "ldscripts/${EMULATION_NAME}.xdc";
-+ {
-+ if (link_info.relro > 1)
-+ return "ldscripts/${EMULATION_NAME}.xdce";
-+ else
-+ return "ldscripts/${EMULATION_NAME}.xdc";
-+ }
- EOF
- fi
- fragment <<EOF
- else if (bfd_link_pie (&link_info))
-- return "ldscripts/${EMULATION_NAME}.xd";
-+ {
-+ if (link_info.relro > 1)
-+ return "ldscripts/${EMULATION_NAME}.xde";
-+ else
-+ return "ldscripts/${EMULATION_NAME}.xd";
-+ }
- EOF
- fi
- if test -n "$GENERATE_SHLIB_SCRIPT" ; then
-@@ -2447,28 +2495,58 @@ if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
- fragment <<EOF
- else if (bfd_link_dll (&link_info) && link_info.combreloc
- && link_info.relro && (link_info.flags & DF_BIND_NOW))
-- return "ldscripts/${EMULATION_NAME}.xsw";
-+ {
-+ if (link_info.relro > 1)
-+ return "ldscripts/${EMULATION_NAME}.xswe";
-+ else
-+ return "ldscripts/${EMULATION_NAME}.xsw";
-+ }
- else if (bfd_link_dll (&link_info) && link_info.combreloc)
-- return "ldscripts/${EMULATION_NAME}.xsc";
-+ {
-+ if (link_info.relro > 1)
-+ return "ldscripts/${EMULATION_NAME}.xsce";
-+ else
-+ return "ldscripts/${EMULATION_NAME}.xsc";
-+ }
- EOF
- fi
- fragment <<EOF
- else if (bfd_link_dll (&link_info))
-- return "ldscripts/${EMULATION_NAME}.xs";
-+ {
-+ if (link_info.relro > 1)
-+ return "ldscripts/${EMULATION_NAME}.xse";
-+ else
-+ return "ldscripts/${EMULATION_NAME}.xs";
-+ }
- EOF
- fi
- if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
- fragment <<EOF
- else if (link_info.combreloc && link_info.relro
- && (link_info.flags & DF_BIND_NOW))
-- return "ldscripts/${EMULATION_NAME}.xw";
-+ {
-+ if (link_info.relro > 1)
-+ return "ldscripts/${EMULATION_NAME}.xwe";
-+ else
-+ return "ldscripts/${EMULATION_NAME}.xw";
-+ }
- else if (link_info.combreloc)
-- return "ldscripts/${EMULATION_NAME}.xc";
-+ {
-+ if (link_info.relro > 1)
-+ return "ldscripts/${EMULATION_NAME}.xce";
-+ else
-+ return "ldscripts/${EMULATION_NAME}.xc";
-+ }
- EOF
- fi
- fragment <<EOF
- else
-- return "ldscripts/${EMULATION_NAME}.x";
-+ {
-+ if (link_info.relro > 1)
-+ return "ldscripts/${EMULATION_NAME}.xe";
-+ else
-+ return "ldscripts/${EMULATION_NAME}.x";
-+ }
- }
-
- EOF
-@@ -2735,9 +2813,13 @@ fragment <<EOF
- else if (strcmp (optarg, "nocopyreloc") == 0)
- link_info.nocopyreloc = TRUE;
- else if (strcmp (optarg, "relro") == 0)
-- link_info.relro = TRUE;
-+ link_info.relro |= 1;
- else if (strcmp (optarg, "norelro") == 0)
-- link_info.relro = FALSE;
-+ link_info.relro = 0;
-+ else if (strcmp (optarg, "textonly") == 0)
-+ link_info.relro = 2;
-+ else if (strcmp (optarg, "notextonly") == 0)
-+ link_info.relro &= 1;
- else if (strcmp (optarg, "common") == 0)
- link_info.elf_stt_common = elf_stt_common;
- else if (strcmp (optarg, "nocommon") == 0)
-diff --git a/ld/genscripts.sh b/ld/genscripts.sh
-index 53cd5ad95c..9d4edc04d1 100755
---- a/ld/genscripts.sh
-+++ b/ld/genscripts.sh
-@@ -290,14 +290,20 @@ CONSTRUCTING=" "
- . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
- ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xu
-
--LD_FLAG=
- DATA_ALIGNMENT=${DATA_ALIGNMENT_}
- RELOCATING=" "
-+LD_FLAG=
- ( echo "/* Default linker script, for normal executables */"
- . ${CUSTOMIZER_SCRIPT}
- . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
- ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.x
-
-+LD_FLAG=textonly
-+( echo "/* Script for -z textonly: generate normal executables with text-only segment */"
-+ . ${CUSTOMIZER_SCRIPT}
-+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
-+) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xe
-+
- LD_FLAG=n
- DATA_ALIGNMENT=${DATA_ALIGNMENT_n}
- ( echo "/* Script for -n: mix text and data on same page */"
-@@ -321,44 +327,78 @@ if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
- . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
- ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xc
- rm -f ${COMBRELOC}
-- LD_FLAG=w
-+ LD_FLAG=ctextonly
-+ COMBRELOC=ldscripts/${EMULATION_NAME}.xce.tmp
-+ ( echo "/* Script for -z combreloc -z textonly: combine and sort reloc sections with text-only segment */"
-+ . ${CUSTOMIZER_SCRIPT}
-+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
-+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xce
-+ rm -f ${COMBRELOC}
- RELRO_NOW=" "
-+ LD_FLAG=w
- COMBRELOC=ldscripts/${EMULATION_NAME}.xw.tmp
- ( echo "/* Script for -z combreloc -z now -z relro: combine and sort reloc sections */"
- . ${CUSTOMIZER_SCRIPT}
- . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
- ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xw
- rm -f ${COMBRELOC}
-+ LD_FLAG=wtextonly
-+ COMBRELOC=ldscripts/${EMULATION_NAME}.xwe.tmp
-+ ( echo "/* Script for -z combreloc -z now -z relro -z textonly: combine and sort reloc sections with text-only segment */"
-+ . ${CUSTOMIZER_SCRIPT}
-+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
-+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xwe
-+ rm -f ${COMBRELOC}
- COMBRELOC=
- unset RELRO_NOW
- fi
-
- if test -n "$GENERATE_SHLIB_SCRIPT"; then
-- LD_FLAG=shared
- DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}}
- CREATE_SHLIB=" "
-+ LD_FLAG=shared
- (
- echo "/* Script for ld --shared: link shared library */"
- . ${CUSTOMIZER_SCRIPT}
- . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
- ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xs
-+ LD_FLAG=sharedtextonly
-+ (
-+ echo "/* Script for ld --shared -z textonly: link shared library with text-only segment */"
-+ . ${CUSTOMIZER_SCRIPT}
-+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
-+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xse
- if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
-- LD_FLAG=cshared
- DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
-+ LD_FLAG=cshared
- COMBRELOC=ldscripts/${EMULATION_NAME}.xsc.tmp
- ( echo "/* Script for --shared -z combreloc: shared library, combine & sort relocs */"
- . ${CUSTOMIZER_SCRIPT}
- . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
- ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsc
- rm -f ${COMBRELOC}
-- LD_FLAG=wshared
-+ LD_FLAG=csharedtextonly
-+ COMBRELOC=ldscripts/${EMULATION_NAME}.xsce.tmp
-+ ( echo "/* Script for --shared -z combreloc -z textonly: shared library, combine & sort relocs with text-only segment */"
-+ . ${CUSTOMIZER_SCRIPT}
-+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
-+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsce
-+ rm -f ${COMBRELOC}
- RELRO_NOW=" "
-+ LD_FLAG=wshared
- COMBRELOC=ldscripts/${EMULATION_NAME}.xsw.tmp
- ( echo "/* Script for --shared -z combreloc -z now -z relro: shared library, combine & sort relocs */"
- . ${CUSTOMIZER_SCRIPT}
- . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
- ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsw
- rm -f ${COMBRELOC}
-+ LD_FLAG=wsharedtextonly
-+ COMBRELOC=ldscripts/${EMULATION_NAME}.xswe.tmp
-+ ( echo "/* Script for --shared -z combreloc -z now -z relro -z textonly: shared library, combine & sort relocs with text-only segment */"
-+ . ${CUSTOMIZER_SCRIPT}
-+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
-+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xswe
-+ rm -f ${COMBRELOC}
- COMBRELOC=
- unset RELRO_NOW
- fi
-@@ -366,31 +406,51 @@ if test -n "$GENERATE_SHLIB_SCRIPT"; then
- fi
-
- if test -n "$GENERATE_PIE_SCRIPT"; then
-- LD_FLAG=pie
- DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}}
- CREATE_PIE=" "
-+ LD_FLAG=pie
- (
- echo "/* Script for ld -pie: link position independent executable */"
- . ${CUSTOMIZER_SCRIPT}
- . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
- ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xd
-+ LD_FLAG=pietextonly
-+ (
-+ echo "/* Script for ld -pie -z textonly: link position independent executable with text-only segment */"
-+ . ${CUSTOMIZER_SCRIPT}
-+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
-+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xde
- if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
-- LD_FLAG=cpie
- DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
- COMBRELOC=ldscripts/${EMULATION_NAME}.xdc.tmp
-+ LD_FLAG=cpie
- ( echo "/* Script for -pie -z combreloc: position independent executable, combine & sort relocs */"
- . ${CUSTOMIZER_SCRIPT}
- . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
- ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdc
- rm -f ${COMBRELOC}
-- LD_FLAG=wpie
-+ LD_FLAG=cpietextonly
-+ COMBRELOC=ldscripts/${EMULATION_NAME}.xdce.tmp
-+ ( echo "/* Script for -pie -z combreloc -z textonly: position independent executable, combine & sort relocs with text-only segment */"
-+ . ${CUSTOMIZER_SCRIPT}
-+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
-+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdce
-+ rm -f ${COMBRELOC}
- RELRO_NOW=" "
-+ LD_FLAG=wpie
- COMBRELOC=ldscripts/${EMULATION_NAME}.xdw.tmp
- ( echo "/* Script for -pie -z combreloc -z now -z relro: position independent executable, combine & sort relocs */"
- . ${CUSTOMIZER_SCRIPT}
- . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
- ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdw
- rm -f ${COMBRELOC}
-+ LD_FLAG=wpietextonly
-+ COMBRELOC=ldscripts/${EMULATION_NAME}.xdwe.tmp
-+ ( echo "/* Script for -pie -z combreloc -z now -z relro -z textonly: position independent executable, combine & sort relocs with text-only segment */"
-+ . ${CUSTOMIZER_SCRIPT}
-+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
-+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdwe
-+ rm -f ${COMBRELOC}
- COMBRELOC=
- unset RELRO_NOW
- fi
-diff --git a/ld/ld.texinfo b/ld/ld.texinfo
-index 14788884cc..88f0f9b27f 100644
---- a/ld/ld.texinfo
-+++ b/ld/ld.texinfo
-@@ -1262,7 +1262,15 @@ Create an ELF @code{PT_GNU_RELRO} segment header in the object. This
- specifies a memory segment that should be made read-only after
- relocation, if supported. Specifying @samp{common-page-size} smaller
- than the system page size will render this protection ineffective.
--Don't create an ELF @code{PT_GNU_RELRO} segment if @samp{norelro}.
-+Don't create an ELF @code{PT_GNU_RELRO} segment if @samp{norelro} is
-+used, which also implies @option{-z notextonly}.
-+
-+@item textonly
-+@itemx notextonly
-+Create an ELF text-only @code{PT_LOAD} segment header in the object.
-+This specifies a memory segment that should contain only instructions.
-+This option also implies @option{-z relro}. Don't create an ELF
-+text-only @code{PT_LOAD} segment if @samp{notext} is used.
-
- @item shstk
- Generate GNU_PROPERTY_X86_FEATURE_1_SHSTK in .note.gnu.property section
-diff --git a/ld/lexsup.c b/ld/lexsup.c
-index cb9edaf7a6..9e977c88fc 100644
---- a/ld/lexsup.c
-+++ b/ld/lexsup.c
-@@ -1780,14 +1780,18 @@ elf_shlib_list_options (FILE *file)
- fprintf (file, _("\
- -z relro Create RELRO program header (default)\n"));
- fprintf (file, _("\
-- -z norelro Don't create RELRO program header\n"));
-+ -z norelro Don't create RELRO nor text-only LOAD program header\n"));
- #else
- fprintf (file, _("\
- -z relro Create RELRO program header\n"));
- fprintf (file, _("\
-- -z norelro Don't create RELRO program header (default)\n"));
-+ -z norelro Don't create RELRO nor text-only LOAD program header (default)\n"));
- #endif
- fprintf (file, _("\
-+ -z textonly Create RELRO and text-only LOAD program header\n"));
-+ fprintf (file, _("\
-+ -z notextonly Don't create text-only LOAD program header (default)\n"));
-+ fprintf (file, _("\
- -z common Generate common symbols with STT_COMMON type\n"));
- fprintf (file, _("\
- -z nocommon Generate common symbols with STT_OBJECT type\n"));
---
-2.13.6
-
diff --git a/patches/0002-ld-Add-TEXT_SEGMENT_ALIGN-TEXT_SEGMENT_-RELRO_-END.patch b/patches/0002-ld-Add-TEXT_SEGMENT_ALIGN-TEXT_SEGMENT_-RELRO_-END.patch
deleted file mode 100644
index 459cf370d86..00000000000
--- a/patches/0002-ld-Add-TEXT_SEGMENT_ALIGN-TEXT_SEGMENT_-RELRO_-END.patch
+++ /dev/null
@@ -1,410 +0,0 @@
-From e7528d011919097b241c86a5e3adc776219dbec8 Mon Sep 17 00:00:00 2001
-From: "H.J. Lu" <hjl.tools@gmail.com>
-Date: Fri, 10 Nov 2017 13:53:20 -0800
-Subject: [PATCH 2/6] ld: Add TEXT_SEGMENT_ALIGN/TEXT_SEGMENT_{RELRO_}END
-
-Text-only LOAD segment has the same requirement for segment alignment
-and page sizes as GNU_RELRO segment. But for GNU_RELRO segment, the
-segment may not end at the same address of the end of data segment. But
-text-only LOAD segment is exactly the same as text LOAD segment.
-
-This patch adds TEXT_SEGMENT_ALIGN, TEXT_SEGMENT_RELRO_END and
-TEXT_SEGMENT_END, which mimic DATA_SEGMENT_ALIGN, DATA_SEGMENT_RELRO_END
-and DATA_SEGMENT_END. They work on text segment, instead of data
-segment. TEXT_SEGMENT_ALIGN is placed at the start of text sections.
-Both TEXT_SEGMENT_RELRO_END and TEXT_SEGMENT_END are placed at the end
-of text sections. TEXT_SEGMENT_ALIGN is created from DATA_SEGMENT_ALIGN
-by replacing DATA_SEGMENT_ALIGN with TEXT_SEGMENT_ALIGN. It simply sets
-text_start and text_end from TEXT_SEGMENT_ALIGN, TEXT_SEGMENT_RELRO_END
-and TEXT_SEGMENT_END the same way as relro_start and relro_end are set
-from DATA_SEGMENT_ALIGN, DATA_SEGMENT_RELRO_END and DATA_SEGMENT_END.
-
-include/
-
- PR ld/22393
- * bfdlink.h (bfd_link_info): Add text_start and text_end.
-
-ld/
-
- PR ld/22393
- * ldexp.c (exp_print_token): Add TEXT_SEGMENT_ALIGN,
- TEXT_SEGMENT_RELRO_END and TEXT_SEGMENT_END.
- (fold_unary): Handle TEXT_SEGMENT_END.
- (fold_binary): Handle TEXT_SEGMENT_RELRO_END and
- TEXT_SEGMENT_END.
- (exp_unop): Also check TEXT_SEGMENT_END.
- * ldexp.h (ldexp_control): Add textseg.
- * ldgram.y: Handle TEXT_SEGMENT_ALIGN, TEXT_SEGMENT_RELRO_END
- and TEXT_SEGMENT_END.
- * ldlang.c (strip_excluded_output_sections): Also set
- expld.textseg.phase to exp_seg_none.
- (lang_size_sections_1): Also call ldlang_check_relro_region with
- &expld.textseg.
- (lang_size_relro_segment): Also handle expld.textseg.
- (lang_size_sections): Also handle expld.textseg. Set
- link_info.text_start and link_info.text_end for -z textonly.
- (lang_find_relro_sections): Also check expld.textseg.
- * ldlex.l: Add TEXT_SEGMENT_ALIGN, TEXT_SEGMENT_RELRO_END and
- TEXT_SEGMENT_END.
- * scripttempl/elf.sc (TEXT_SEGMENT_ALIGN): New.
- (TEXT_SEGMENT_RELRO_END): Likewise.
- (TEXT_SEGMENT_END): Likewise.
- Add ${TEXT_SEGMENT_ALIGN} before text sections and add
- ${TEXT_SEGMENT_RELRO_END}/${TEXT_SEGMENT_END} after text
- sections for non-relocatable link.
----
- include/bfdlink.h | 3 ++
- ld/ldexp.c | 18 ++++++++-
- ld/ldexp.h | 3 ++
- ld/ldgram.y | 7 ++++
- ld/ldlang.c | 109 +++++++++++++++++++++++++++++++++++++-------------
- ld/ldlex.l | 3 ++
- ld/scripttempl/elf.sc | 21 ++++++++++
- 7 files changed, 135 insertions(+), 29 deletions(-)
-
-diff --git a/include/bfdlink.h b/include/bfdlink.h
-index d283429fdb..2fdfb2ab71 100644
---- a/include/bfdlink.h
-+++ b/include/bfdlink.h
-@@ -626,6 +626,9 @@ struct bfd_link_info
- /* May be used to set DT_FLAGS_1 for ELF. */
- bfd_vma flags_1;
-
-+ /* Start and end of text-only region. */
-+ bfd_vma text_start, text_end;
-+
- /* Start and end of RELRO region. */
- bfd_vma relro_start, relro_end;
-
-diff --git a/ld/ldexp.c b/ld/ldexp.c
-index 83d9f8f2a7..71051ceb19 100644
---- a/ld/ldexp.c
-+++ b/ld/ldexp.c
-@@ -134,6 +134,9 @@ exp_print_token (token_code_type code, int infix_p)
- { DATA_SEGMENT_ALIGN, "DATA_SEGMENT_ALIGN" },
- { DATA_SEGMENT_RELRO_END, "DATA_SEGMENT_RELRO_END" },
- { DATA_SEGMENT_END, "DATA_SEGMENT_END" },
-+ { TEXT_SEGMENT_ALIGN, "TEXT_SEGMENT_ALIGN" },
-+ { TEXT_SEGMENT_RELRO_END, "TEXT_SEGMENT_RELRO_END" },
-+ { TEXT_SEGMENT_END, "TEXT_SEGMENT_END" },
- { ORIGIN, "ORIGIN" },
- { LENGTH, "LENGTH" },
- { SEGMENT_START, "SEGMENT_START" }
-@@ -416,6 +419,10 @@ fold_unary (etree_type *tree)
- fold_segment_end (&expld.dataseg);
- break;
-
-+ case TEXT_SEGMENT_END:
-+ fold_segment_end (&expld.textseg);
-+ break;
-+
- default:
- FAIL ();
- break;
-@@ -664,6 +671,14 @@ fold_binary (etree_type *tree)
- fold_segment_relro_end (&expld.dataseg, &lhs);
- break;
-
-+ case TEXT_SEGMENT_ALIGN:
-+ fold_segment_align (&expld.textseg, &lhs);
-+ break;
-+
-+ case TEXT_SEGMENT_RELRO_END:
-+ fold_segment_relro_end (&expld.textseg, &lhs);
-+ break;
-+
- default:
- FAIL ();
- }
-@@ -1342,7 +1357,8 @@ exp_unop (int code, etree_type *child)
- && code != ALIGN_K
- && code != ABSOLUTE
- && code != NEXT
-- && code != DATA_SEGMENT_END)
-+ && code != DATA_SEGMENT_END
-+ && code != TEXT_SEGMENT_END)
- exp_value_fold (new_e);
- return new_e;
- }
-diff --git a/ld/ldexp.h b/ld/ldexp.h
-index 5ff0fa0a1f..d1429353e1 100644
---- a/ld/ldexp.h
-+++ b/ld/ldexp.h
-@@ -173,6 +173,9 @@ struct ldexp_control {
-
- /* State machine and results for DATASEG. */
- seg_align_type dataseg;
-+
-+ /* State machine and results for TEXTSEG. */
-+ seg_align_type textseg;
- };
-
- extern struct ldexp_control expld;
-diff --git a/ld/ldgram.y b/ld/ldgram.y
-index d701e076a2..53da2d062a 100644
---- a/ld/ldgram.y
-+++ b/ld/ldgram.y
-@@ -127,6 +127,7 @@ static int error_index;
- %token <token> ALIGN_K BLOCK BIND QUAD SQUAD LONG SHORT BYTE
- %token SECTIONS PHDRS INSERT_K AFTER BEFORE
- %token DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END DATA_SEGMENT_END
-+%token TEXT_SEGMENT_ALIGN TEXT_SEGMENT_RELRO_END TEXT_SEGMENT_END
- %token SORT_BY_NAME SORT_BY_ALIGNMENT SORT_NONE
- %token SORT_BY_INIT_PRIORITY
- %token '{' '}'
-@@ -993,6 +994,12 @@ exp :
- { $$ = exp_binop (DATA_SEGMENT_RELRO_END, $5, $3); }
- | DATA_SEGMENT_END '(' exp ')'
- { $$ = exp_unop (DATA_SEGMENT_END, $3); }
-+ | TEXT_SEGMENT_ALIGN '(' exp ',' exp ')'
-+ { $$ = exp_binop (TEXT_SEGMENT_ALIGN, $3, $5); }
-+ | TEXT_SEGMENT_RELRO_END '(' exp ',' exp ')'
-+ { $$ = exp_binop (TEXT_SEGMENT_RELRO_END, $5, $3); }
-+ | TEXT_SEGMENT_END '(' exp ')'
-+ { $$ = exp_unop (TEXT_SEGMENT_END, $3); }
- | SEGMENT_START '(' NAME ',' exp ')'
- { /* The operands to the expression node are
- placed in the opposite order from the way
-diff --git a/ld/ldlang.c b/ld/ldlang.c
-index 674004ee38..ea45bc5639 100644
---- a/ld/ldlang.c
-+++ b/ld/ldlang.c
-@@ -3891,6 +3891,7 @@ strip_excluded_output_sections (void)
- {
- expld.phase = lang_mark_phase_enum;
- expld.dataseg.phase = exp_seg_none;
-+ expld.textseg.phase = exp_seg_none;
- one_lang_size_sections_pass (NULL, FALSE);
- lang_reset_memory_regions ();
- }
-@@ -5450,14 +5451,17 @@ lang_size_sections_1
- bfd_vma newdot = dot;
- etree_type *tree = s->assignment_statement.exp;
-
-+ expld.textseg.relro = exp_seg_relro_none;
- expld.dataseg.relro = exp_seg_relro_none;
-
- exp_fold_tree (tree,
- output_section_statement->bfd_section,
- &newdot);
-
-+ ldlang_check_relro_region (s, &expld.textseg);
- ldlang_check_relro_region (s, &expld.dataseg);
-
-+ expld.textseg.relro = exp_seg_relro_none;
- expld.dataseg.relro = exp_seg_relro_none;
-
- /* This symbol may be relative to this section. */
-@@ -5664,35 +5668,56 @@ static bfd_boolean
- lang_size_relro_segment (bfd_boolean *relax, bfd_boolean check_regions)
- {
- bfd_boolean do_reset = FALSE;
-- bfd_boolean do_data_relro;
-- bfd_vma data_initial_base, data_relro_end;
-+ bfd_boolean do_text_relro = FALSE;
-+ bfd_boolean do_data_relro = FALSE;
-
-- if (link_info.relro && expld.dataseg.relro_end)
-+ if (link_info.relro)
- {
-- do_data_relro = TRUE;
-- data_initial_base = expld.dataseg.base;
-- data_relro_end = lang_size_relro_segment_1 (&expld.dataseg);
-- }
-- else
-- {
-- do_data_relro = FALSE;
-- data_initial_base = data_relro_end = 0;
-- }
-+ bfd_vma text_initial_base, text_relro_end;
-+ bfd_vma data_initial_base, data_relro_end;
-
-- if (do_data_relro)
-- {
-- lang_reset_memory_regions ();
-- one_lang_size_sections_pass (relax, check_regions);
-+ if (link_info.relro > 1 && expld.textseg.relro_end)
-+ {
-+ do_text_relro = TRUE;
-+ text_initial_base = expld.textseg.base;
-+ text_relro_end = lang_size_relro_segment_1 (&expld.textseg);
-+ }
-+ else
-+ text_initial_base = text_relro_end = 0;
-
-- /* Assignments to dot, or to output section address in a user
-- script have increased padding over the original. Revert. */
-- if (do_data_relro && expld.dataseg.relro_end > data_relro_end)
-+ if (expld.dataseg.relro_end)
- {
-- expld.dataseg.base = data_initial_base;;
-- do_reset = TRUE;
-+ do_data_relro = TRUE;
-+ data_initial_base = expld.dataseg.base;
-+ data_relro_end = lang_size_relro_segment_1 (&expld.dataseg);
-+ }
-+ else
-+ data_initial_base = data_relro_end = 0;
-+
-+ if (do_text_relro || do_data_relro)
-+ {
-+ lang_reset_memory_regions ();
-+ one_lang_size_sections_pass (relax, check_regions);
-+
-+ /* Assignments to dot, or to output section address in a user
-+ script have increased padding over the original. Revert. */
-+ if (do_text_relro && expld.textseg.relro_end > text_relro_end)
-+ {
-+ expld.textseg.base = text_initial_base;
-+ do_reset = TRUE;
-+ }
-+
-+ if (do_data_relro && expld.dataseg.relro_end > data_relro_end)
-+ {
-+ expld.dataseg.base = data_initial_base;;
-+ do_reset = TRUE;
-+ }
- }
- }
-
-+ if (!do_text_relro && lang_size_segment (&expld.textseg))
-+ do_reset = TRUE;
-+
- if (!do_data_relro && lang_size_segment (&expld.dataseg))
- do_reset = TRUE;
-
-@@ -5704,13 +5729,17 @@ lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
- {
- expld.phase = lang_allocating_phase_enum;
- expld.dataseg.phase = exp_seg_none;
-+ expld.textseg.phase = exp_seg_none;
-
- one_lang_size_sections_pass (relax, check_regions);
-
-+ if (expld.textseg.phase != exp_seg_end_seen)
-+ expld.textseg.phase = exp_seg_done;
- if (expld.dataseg.phase != exp_seg_end_seen)
- expld.dataseg.phase = exp_seg_done;
-
-- if (expld.dataseg.phase == exp_seg_end_seen)
-+ if (expld.textseg.phase == exp_seg_end_seen
-+ || expld.dataseg.phase == exp_seg_end_seen)
- {
- bfd_boolean do_reset
- = lang_size_relro_segment (relax, check_regions);
-@@ -5721,6 +5750,12 @@ lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
- one_lang_size_sections_pass (relax, check_regions);
- }
-
-+ if (link_info.relro > 1 && expld.textseg.relro_end)
-+ {
-+ link_info.text_start = expld.textseg.base;
-+ link_info.text_end = expld.textseg.relro_end;
-+ }
-+
- if (link_info.relro && expld.dataseg.relro_end)
- {
- link_info.relro_start = expld.dataseg.base;
-@@ -6906,15 +6941,33 @@ lang_find_relro_sections_1 (lang_statement_union_type *s,
- static void
- lang_find_relro_sections (void)
- {
-- bfd_boolean has_relro_section = FALSE;
--
- /* Check all sections in the link script. */
-+ if (link_info.relro)
-+ {
-+ bfd_boolean has_relro_section;
-
-- lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
-- &expld.dataseg, &has_relro_section);
-+ if (link_info.relro > 1)
-+ {
-+ has_relro_section = FALSE;
-+ lang_find_relro_sections_1 (expld.textseg.relro_start_stat,
-+ &expld.textseg,
-+ &has_relro_section);
-+ if (!has_relro_section)
-+ link_info.relro = 1;
-+ }
-
-- if (!has_relro_section)
-- link_info.relro = FALSE;
-+ /* We can't turn off RELRO if we need to generate read-only
-+ PT_LOAD segment. */
-+ if (link_info.relro == 1)
-+ {
-+ has_relro_section = FALSE;
-+ lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
-+ &expld.dataseg,
-+ &has_relro_section);
-+ if (!has_relro_section)
-+ link_info.relro = 0;
-+ }
-+ }
- }
-
- /* Relax all sections until bfd_relax_section gives up. */
-diff --git a/ld/ldlex.l b/ld/ldlex.l
-index 207c97f323..538c372a0f 100644
---- a/ld/ldlex.l
-+++ b/ld/ldlex.l
-@@ -250,6 +250,9 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
- <EXPRESSION,BOTH,SCRIPT>"DATA_SEGMENT_ALIGN" { RTOKEN(DATA_SEGMENT_ALIGN);}
- <EXPRESSION,BOTH,SCRIPT>"DATA_SEGMENT_RELRO_END" { RTOKEN(DATA_SEGMENT_RELRO_END);}
- <EXPRESSION,BOTH,SCRIPT>"DATA_SEGMENT_END" { RTOKEN(DATA_SEGMENT_END);}
-+<EXPRESSION,BOTH,SCRIPT>"TEXT_SEGMENT_ALIGN" { RTOKEN(TEXT_SEGMENT_ALIGN);}
-+<EXPRESSION,BOTH,SCRIPT>"TEXT_SEGMENT_RELRO_END" { RTOKEN(TEXT_SEGMENT_RELRO_END);}
-+<EXPRESSION,BOTH,SCRIPT>"TEXT_SEGMENT_END" { RTOKEN(TEXT_SEGMENT_END);}
- <EXPRESSION,BOTH,SCRIPT>"ADDR" { RTOKEN(ADDR);}
- <EXPRESSION,BOTH,SCRIPT>"LOADADDR" { RTOKEN(LOADADDR);}
- <EXPRESSION,BOTH,SCRIPT>"ALIGNOF" { RTOKEN(ALIGNOF); }
-diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc
-index 9f291b359f..9eb024e809 100644
---- a/ld/scripttempl/elf.sc
-+++ b/ld/scripttempl/elf.sc
-@@ -139,6 +139,23 @@ if test -z "$DATA_SEGMENT_ALIGN"; then
- DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);"
- fi
- fi
-+# Don't bother with text-only segment when there are data sections between
-+# .plt and .text.
-+if test -n "$TINY_READONLY_SECTION"; then
-+ TEXT_SEGMENT_ALIGN=" "
-+ TEXT_SEGMENT_RELRO_END=" "
-+ TEXT_SEGMENT_END=" "
-+fi
-+if test -z "$TEXT_SEGMENT_ALIGN" && test -n "$DATA_SEGMENT_ALIGN"; then
-+ case "$LD_FLAG" in
-+ *textonly*)
-+ TEXT_SEGMENT_ALIGN=`echo $DATA_SEGMENT_ALIGN | sed -e "s/DATA/TEXT/g"`
-+ TEXT_SEGMENT_ALIGN=". = $TEXT_SEGMENT_ALIGN;"
-+ TEXT_SEGMENT_RELRO_END=". = TEXT_SEGMENT_RELRO_END (0, .);"
-+ TEXT_SEGMENT_END=". = TEXT_SEGMENT_END (.);"
-+ ;;
-+ esac
-+fi
- if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
- INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
- fi
-@@ -478,6 +495,8 @@ emit_dyn()
- test -n "${NON_ALLOC_DYN}${SEPARATE_CODE}" || emit_dyn
-
- cat <<EOF
-+ ${RELOCATING+${TEXT_SEGMENT_ALIGN}}
-+
- .init ${RELOCATING-0}${RELOCATING+${INIT_ADDR}} :
- {
- ${RELOCATING+${INIT_START}}
-@@ -508,6 +527,8 @@ cat <<EOF
- ${RELOCATING+PROVIDE (__${ETEXT_NAME} = .);}
- ${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);}
- ${RELOCATING+PROVIDE (${ETEXT_NAME} = .);}
-+ ${RELOCATING+${TEXT_SEGMENT_RELRO_END}}
-+ ${RELOCATING+${TEXT_SEGMENT_END}}
- EOF
-
- if test -n "${SEPARATE_CODE}"; then
---
-2.13.6
-
diff --git a/patches/0003-ld-Create-a-new-LOAD-segment-for-text-only-LOAD-segm.patch b/patches/0003-ld-Create-a-new-LOAD-segment-for-text-only-LOAD-segm.patch
deleted file mode 100644
index 307e5d062a1..00000000000
--- a/patches/0003-ld-Create-a-new-LOAD-segment-for-text-only-LOAD-segm.patch
+++ /dev/null
@@ -1,161 +0,0 @@
-From cc2bcf62719bc5cf63105843ced20d0952667142 Mon Sep 17 00:00:00 2001
-From: "H.J. Lu" <hjl.tools@gmail.com>
-Date: Sun, 12 Nov 2017 11:34:03 -0800
-Subject: [PATCH 3/6] ld: Create a new LOAD segment for text-only LOAD segment
-
-When there is a text-only LOAD segment, create a new LOAD segment if the
-previous section contains text and the current section doesn't or vice
-versa:
-
-Elf file type is DYN (Shared object file)
-Entry point 0x200ff0
-There are 7 program headers, starting at offset 52
-
-Program Headers:
- Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
- LOAD 0x000000 0x00000000 0x00000000 0x00200 0x00200 R 0x200000
- LOAD 0x000fd0 0x00200fd0 0x00200fd0 0x0002b 0x0002b R E 0x200000
- LOAD 0x001000 0x00201000 0x00201000 0x00058 0x00058 R 0x200000
- LOAD 0x200f80 0x00400f80 0x00400f80 0x000a0 0x000a0 RW 0x200000
- DYNAMIC 0x200f80 0x00400f80 0x00400f80 0x00080 0x00080 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x10
- GNU_RELRO 0x200f80 0x00400f80 0x00400f80 0x00080 0x00080 R 0x1
-
- Section to Segment mapping:
- Segment Sections...
- 00 .hash .gnu.hash .dynsym .dynstr .rela.plt
- 01 .plt .text
- 02 .rodata .eh_frame
- 03 .dynamic .got.plt
- 04 .dynamic
- 05
- 06 .dynamic
-
-This is to prevent executing data in read-only sections as instructions.
-
-Also don't put a writable section in a read-only segment if there is a
-RELRO segment.
-
-Since there are more than 2 LOAD segments, the minimum file size is
-bigger than the maximum page size which is 2MB (0x200000):
-
--rwxr-xr-x 1 hjl hjl 2104892 Nov 12 11:53 libfoo.so
-
-"-z max-page-size=0x1000" can be used to reduce the maximum page size to
-4KB (0x1000):
-
--rwxr-xr-x 1 hjl hjl 11836 Nov 12 13:22 libfoo.so
-
-Elf file type is DYN (Shared object file)
-Entry point 0x1ff0
-There are 7 program headers, starting at offset 52
-
-Program Headers:
- Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
- LOAD 0x000000 0x00000000 0x00000000 0x00200 0x00200 R 0x1000
- LOAD 0x000fd0 0x00001fd0 0x00001fd0 0x0002b 0x0002b R E 0x1000
- LOAD 0x001000 0x00002000 0x00002000 0x00058 0x00058 R 0x1000
- LOAD 0x001f80 0x00002f80 0x00002f80 0x000a0 0x000a0 RW 0x1000
- DYNAMIC 0x001f80 0x00002f80 0x00002f80 0x00080 0x00080 RW 0x4
- GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x10
- GNU_RELRO 0x001f80 0x00002f80 0x00002f80 0x00080 0x00080 R 0x1
-
- Section to Segment mapping:
- Segment Sections...
- 00 .hash .gnu.hash .dynsym .dynstr .rela.plt
- 01 .plt .text
- 02 .rodata .eh_frame
- 03 .dynamic .got.plt
- 04 .dynamic
- 05
- 06 .dynamic
-
- PR ld/22393
- * elf.c (_bfd_elf_map_sections_to_segments): When there is a
- text-only LOAD segment, create a new LOAD segment if the
- previous section contains text and the current section doesn't
- or vice versa. Don't put a writable section in a read-only
- segment if there is a RELRO segment.
----
- bfd/elf.c | 32 +++++++++++++++++++++++++-------
- 1 file changed, 25 insertions(+), 7 deletions(-)
-
-diff --git a/bfd/elf.c b/bfd/elf.c
-index 694e43540f..9c5de9675c 100644
---- a/bfd/elf.c
-+++ b/bfd/elf.c
-@@ -4555,6 +4555,7 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
- asection **hdrpp;
- bfd_boolean phdr_in_segment = TRUE;
- bfd_boolean writable;
-+ bfd_boolean executable;
- int tls_count = 0;
- asection *first_tls = NULL;
- asection *first_mbind = NULL;
-@@ -4643,6 +4644,7 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
- if (maxpagesize == 0)
- maxpagesize = 1;
- writable = FALSE;
-+ executable = FALSE;
- dynsec = bfd_get_section_by_name (abfd, ".dynamic");
- if (dynsec != NULL
- && (dynsec->flags & SEC_LOAD) == 0)
-@@ -4745,18 +4747,27 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
- file, then there is no other reason for a new segment. */
- new_segment = FALSE;
- }
-+ else if (info != NULL
-+ && info->text_end > info->text_start
-+ && executable != ((hdr->flags & SEC_CODE) != 0))
-+ {
-+ new_segment = TRUE;
-+ }
- else if (! writable
- && (hdr->flags & SEC_READONLY) == 0
-- && (((last_hdr->lma + last_size - 1) & -maxpagesize)
-- != (hdr->lma & -maxpagesize)))
-+ && ((info != NULL
-+ && info->relro_end > info->relro_start)
-+ || (((last_hdr->lma + last_size - 1) & -maxpagesize)
-+ != (hdr->lma & -maxpagesize))))
- {
- /* We don't want to put a writable section in a read only
- segment, unless they are on the same page in memory
-- anyhow. 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. */
-+ 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. */
- new_segment = TRUE;
- }
- else
-@@ -4778,6 +4789,8 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
- {
- if ((hdr->flags & SEC_READONLY) == 0)
- writable = TRUE;
-+ if ((hdr->flags & SEC_CODE) != 0)
-+ executable = TRUE;
- last_hdr = hdr;
- /* .tbss sections effectively have zero size. */
- if ((hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD))
-@@ -4803,6 +4816,11 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
- else
- writable = FALSE;
-
-+ if ((hdr->flags & SEC_CODE) == 0)
-+ executable = FALSE;
-+ else
-+ executable = TRUE;
-+
- last_hdr = hdr;
- /* .tbss sections effectively have zero size. */
- if ((hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) != SEC_THREAD_LOCAL)
---
-2.13.6
-
diff --git a/patches/0004-ld-ppc-spu-Also-set-expld.textseg.phase-to-exp_seg_n.patch b/patches/0004-ld-ppc-spu-Also-set-expld.textseg.phase-to-exp_seg_n.patch
deleted file mode 100644
index 4aedaf4392c..00000000000
--- a/patches/0004-ld-ppc-spu-Also-set-expld.textseg.phase-to-exp_seg_n.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From ab0d66f33a7b3ec2ba54057d3ab3e3b5b76f4975 Mon Sep 17 00:00:00 2001
-From: "H.J. Lu" <hjl.tools@gmail.com>
-Date: Mon, 13 Nov 2017 14:30:36 -0800
-Subject: [PATCH 4/6] ld/ppc/spu: Also set expld.textseg.phase to exp_seg_none
-
- * emultempl/ppc32elf.em (ppc_before_allocation): Also set
- expld.textseg.phase to exp_seg_none.
- * emultempl/ppc64elf.em (prelim_size_sections): Likewise.
- * emultempl/spuelf.em (spu_before_allocation): Likewise.
----
- ld/emultempl/ppc32elf.em | 1 +
- ld/emultempl/ppc64elf.em | 1 +
- ld/emultempl/spuelf.em | 1 +
- 3 files changed, 3 insertions(+)
-
-diff --git a/ld/emultempl/ppc32elf.em b/ld/emultempl/ppc32elf.em
-index f78a117222..5817fc99c0 100644
---- a/ld/emultempl/ppc32elf.em
-+++ b/ld/emultempl/ppc32elf.em
-@@ -149,6 +149,7 @@ ppc_before_allocation (void)
- if (expld.phase != lang_mark_phase_enum)
- {
- expld.phase = lang_mark_phase_enum;
-+ expld.textseg.phase = exp_seg_none;
- expld.dataseg.phase = exp_seg_none;
- one_lang_size_sections_pass (NULL, FALSE);
- lang_reset_memory_regions ();
-diff --git a/ld/emultempl/ppc64elf.em b/ld/emultempl/ppc64elf.em
-index d6d5b0acf3..131bae7b54 100644
---- a/ld/emultempl/ppc64elf.em
-+++ b/ld/emultempl/ppc64elf.em
-@@ -266,6 +266,7 @@ prelim_size_sections (void)
- if (expld.phase != lang_mark_phase_enum)
- {
- expld.phase = lang_mark_phase_enum;
-+ expld.textseg.phase = exp_seg_none;
- expld.dataseg.phase = exp_seg_none;
- one_lang_size_sections_pass (NULL, FALSE);
- /* We must not cache anything from the preliminary sizing. */
-diff --git a/ld/emultempl/spuelf.em b/ld/emultempl/spuelf.em
-index 8d8aa25d0a..3878086c0d 100644
---- a/ld/emultempl/spuelf.em
-+++ b/ld/emultempl/spuelf.em
-@@ -272,6 +272,7 @@ spu_before_allocation (void)
- /* Size the sections. This is premature, but we need to know the
- rough layout so that overlays can be found. */
- expld.phase = lang_mark_phase_enum;
-+ expld.textseg.phase = exp_seg_none;
- expld.dataseg.phase = exp_seg_none;
- one_lang_size_sections_pass (NULL, TRUE);
-
---
-2.13.6
-
diff --git a/patches/0005-ld-Add-tests-for-z-textonly-and-z-notextonly.patch b/patches/0005-ld-Add-tests-for-z-textonly-and-z-notextonly.patch
deleted file mode 100644
index 5436ef99458..00000000000
--- a/patches/0005-ld-Add-tests-for-z-textonly-and-z-notextonly.patch
+++ /dev/null
@@ -1,323 +0,0 @@
-From 3eab3df1811338c4ee5bc4adafdf6dcd6935f560 Mon Sep 17 00:00:00 2001
-From: "H.J. Lu" <hjl.tools@gmail.com>
-Date: Mon, 13 Nov 2017 12:47:38 -0800
-Subject: [PATCH 5/6] ld: Add tests for -z textonly and -z notextonly
-
-Verify that -z textonly works and -z notextonly doesn't disable -z relro.
-
- PR ld/22393
- * testsuite/ld-elf/pr16322.d: Add -z notextonly.
- * testsuite/ld-elf/pr22393-1.s: New file.
- * testsuite/ld-elf/pr22393-1a.d: Likewise.
- * testsuite/ld-elf/pr22393-1b.d: Likewise.
- * testsuite/ld-elf/pr22393-1c.d: Likewise.
- * testsuite/ld-elf/pr22393-1d.d: Likewise.
- * testsuite/ld-elf/pr22393-1e.d: Likewise.
- * testsuite/ld-elf/pr22393-1f.d: Likewise.
- * testsuite/ld-elf/pr22393-2a.c: Likewise.
- * testsuite/ld-elf/pr22393-2a.rd: Likewise.
- * testsuite/ld-elf/pr22393-2b.c: Likewise.
- * testsuite/ld-elf/pr22393-2b.rd: Likewise.
- * testsuite/ld-elf/shared.exp: Run tests for -z textonly.
----
- ld/testsuite/ld-elf/pr16322.d | 2 +-
- ld/testsuite/ld-elf/pr22393-1.s | 21 ++++++++++++
- ld/testsuite/ld-elf/pr22393-1a.d | 9 +++++
- ld/testsuite/ld-elf/pr22393-1b.d | 9 +++++
- ld/testsuite/ld-elf/pr22393-1c.d | 9 +++++
- ld/testsuite/ld-elf/pr22393-1d.d | 9 +++++
- ld/testsuite/ld-elf/pr22393-1e.d | 9 +++++
- ld/testsuite/ld-elf/pr22393-1f.d | 9 +++++
- ld/testsuite/ld-elf/pr22393-2a.c | 7 ++++
- ld/testsuite/ld-elf/pr22393-2a.rd | 9 +++++
- ld/testsuite/ld-elf/pr22393-2b.c | 7 ++++
- ld/testsuite/ld-elf/pr22393-2b.rd | 9 +++++
- ld/testsuite/ld-elf/shared.exp | 71 +++++++++++++++++++++++++++++++++++++++
- 13 files changed, 179 insertions(+), 1 deletion(-)
- create mode 100644 ld/testsuite/ld-elf/pr22393-1.s
- create mode 100644 ld/testsuite/ld-elf/pr22393-1a.d
- create mode 100644 ld/testsuite/ld-elf/pr22393-1b.d
- create mode 100644 ld/testsuite/ld-elf/pr22393-1c.d
- create mode 100644 ld/testsuite/ld-elf/pr22393-1d.d
- create mode 100644 ld/testsuite/ld-elf/pr22393-1e.d
- create mode 100644 ld/testsuite/ld-elf/pr22393-1f.d
- create mode 100644 ld/testsuite/ld-elf/pr22393-2a.c
- create mode 100644 ld/testsuite/ld-elf/pr22393-2a.rd
- create mode 100644 ld/testsuite/ld-elf/pr22393-2b.c
- create mode 100644 ld/testsuite/ld-elf/pr22393-2b.rd
-
-diff --git a/ld/testsuite/ld-elf/pr16322.d b/ld/testsuite/ld-elf/pr16322.d
-index 40a7975cb0..497537fbc9 100644
---- a/ld/testsuite/ld-elf/pr16322.d
-+++ b/ld/testsuite/ld-elf/pr16322.d
-@@ -1,4 +1,4 @@
--#ld: -shared -z relro
-+#ld: -shared -z relro -z notextonly
- #readelf: -l --wide
- #target: *-*-linux-gnu *-*-gnu* *-*-nacl*
-
-diff --git a/ld/testsuite/ld-elf/pr22393-1.s b/ld/testsuite/ld-elf/pr22393-1.s
-new file mode 100644
-index 0000000000..ffdb620915
---- /dev/null
-+++ b/ld/testsuite/ld-elf/pr22393-1.s
-@@ -0,0 +1,21 @@
-+ .section .rodata,"a",%progbits
-+ .globl fx1
-+ .type fx1, %object
-+fx1:
-+ .zero 20
-+ .section .data.rel.ro,"aw",%progbits
-+ .globl px1
-+ .type px1, %object
-+px1:
-+ .dc.a fx1
-+
-+ .text
-+ .global start /* Used by SH targets. */
-+start:
-+ .global _start
-+_start:
-+ .global __start
-+__start:
-+ .global main /* Used by HPPA targets. */
-+main:
-+ .dc.a 0
-diff --git a/ld/testsuite/ld-elf/pr22393-1a.d b/ld/testsuite/ld-elf/pr22393-1a.d
-new file mode 100644
-index 0000000000..8c5a8da37b
---- /dev/null
-+++ b/ld/testsuite/ld-elf/pr22393-1a.d
-@@ -0,0 +1,9 @@
-+#source: pr22393-1.s
-+#ld: -shared -z textonly -z relro
-+#readelf: -l --wide
-+#target: *-*-linux-gnu *-*-gnu* *-*-nacl*
-+
-+#failif
-+#...
-+ +[0-9]+ +.*(\.note|\.gnu|\.hash|\.dyn|\.rel).*\.text.*
-+#...
-diff --git a/ld/testsuite/ld-elf/pr22393-1b.d b/ld/testsuite/ld-elf/pr22393-1b.d
-new file mode 100644
-index 0000000000..a8dbc39b19
---- /dev/null
-+++ b/ld/testsuite/ld-elf/pr22393-1b.d
-@@ -0,0 +1,9 @@
-+#source: pr22393-1.s
-+#ld: -shared -z relro -z textonly
-+#readelf: -l --wide
-+#target: *-*-linux-gnu *-*-gnu* *-*-nacl*
-+
-+#failif
-+#...
-+ +[0-9]+ +.*.text.*(.eh_frame|\.rodata).*
-+#...
-diff --git a/ld/testsuite/ld-elf/pr22393-1c.d b/ld/testsuite/ld-elf/pr22393-1c.d
-new file mode 100644
-index 0000000000..e69281e4bb
---- /dev/null
-+++ b/ld/testsuite/ld-elf/pr22393-1c.d
-@@ -0,0 +1,9 @@
-+#source: pr22393-1.s
-+#ld: -pie -z textonly
-+#readelf: -l --wide
-+#target: *-*-linux-gnu *-*-gnu* *-*-nacl*
-+
-+#failif
-+#...
-+ +[0-9]+ +.*(\.note|\.gnu|\.hash|\.dyn|\.rel).*\.text.*
-+#...
-diff --git a/ld/testsuite/ld-elf/pr22393-1d.d b/ld/testsuite/ld-elf/pr22393-1d.d
-new file mode 100644
-index 0000000000..83e8c3e4b6
---- /dev/null
-+++ b/ld/testsuite/ld-elf/pr22393-1d.d
-@@ -0,0 +1,9 @@
-+#source: pr22393-1.s
-+#ld: -pie -z textonly
-+#readelf: -l --wide
-+#target: *-*-linux-gnu *-*-gnu* *-*-nacl*
-+
-+#failif
-+#...
-+ +[0-9]+ +.*.text.*(.eh_frame|\.rodata).*
-+#...
-diff --git a/ld/testsuite/ld-elf/pr22393-1e.d b/ld/testsuite/ld-elf/pr22393-1e.d
-new file mode 100644
-index 0000000000..df723921c2
---- /dev/null
-+++ b/ld/testsuite/ld-elf/pr22393-1e.d
-@@ -0,0 +1,9 @@
-+#source: pr22393-1.s
-+#ld: -z textonly
-+#readelf: -l --wide
-+#target: *-*-linux-gnu *-*-gnu* *-*-nacl*
-+
-+#failif
-+#...
-+ +[0-9]+ +.*(\.note|\.gnu|\.hash|\.dyn|\.rel).*\.text.*
-+#...
-diff --git a/ld/testsuite/ld-elf/pr22393-1f.d b/ld/testsuite/ld-elf/pr22393-1f.d
-new file mode 100644
-index 0000000000..3c80e70da1
---- /dev/null
-+++ b/ld/testsuite/ld-elf/pr22393-1f.d
-@@ -0,0 +1,9 @@
-+#source: pr22393-1.s
-+#ld: -z textonly
-+#readelf: -l --wide
-+#target: *-*-linux-gnu *-*-gnu* *-*-nacl*
-+
-+#failif
-+#...
-+ +[0-9]+ +.*.text.*(.eh_frame|\.rodata).*
-+#...
-diff --git a/ld/testsuite/ld-elf/pr22393-2a.c b/ld/testsuite/ld-elf/pr22393-2a.c
-new file mode 100644
-index 0000000000..68fa4a0dd0
---- /dev/null
-+++ b/ld/testsuite/ld-elf/pr22393-2a.c
-@@ -0,0 +1,7 @@
-+#include <stdio.h>
-+
-+void
-+test()
-+{
-+ printf ("PASS\n");
-+}
-diff --git a/ld/testsuite/ld-elf/pr22393-2a.rd b/ld/testsuite/ld-elf/pr22393-2a.rd
-new file mode 100644
-index 0000000000..b7ba110095
---- /dev/null
-+++ b/ld/testsuite/ld-elf/pr22393-2a.rd
-@@ -0,0 +1,9 @@
-+#source: pr22393-1.s
-+#ld: -shared -z textonly
-+#readelf: -l --wide
-+#target: *-*-linux-gnu *-*-gnu* *-*-nacl*
-+
-+#failif
-+#...
-+ +[0-9]+ +.*(\.note|\.gnu|\.hash|\.dyn|\.rel).*\.text.*
-+#...
-diff --git a/ld/testsuite/ld-elf/pr22393-2b.c b/ld/testsuite/ld-elf/pr22393-2b.c
-new file mode 100644
-index 0000000000..3033809b02
---- /dev/null
-+++ b/ld/testsuite/ld-elf/pr22393-2b.c
-@@ -0,0 +1,7 @@
-+void test(void);
-+
-+int main()
-+{
-+ test();
-+ return 0;
-+}
-diff --git a/ld/testsuite/ld-elf/pr22393-2b.rd b/ld/testsuite/ld-elf/pr22393-2b.rd
-new file mode 100644
-index 0000000000..b7ba110095
---- /dev/null
-+++ b/ld/testsuite/ld-elf/pr22393-2b.rd
-@@ -0,0 +1,9 @@
-+#source: pr22393-1.s
-+#ld: -shared -z textonly
-+#readelf: -l --wide
-+#target: *-*-linux-gnu *-*-gnu* *-*-nacl*
-+
-+#failif
-+#...
-+ +[0-9]+ +.*(\.note|\.gnu|\.hash|\.dyn|\.rel).*\.text.*
-+#...
-diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp
-index a40f8e0f59..b382a2591b 100644
---- a/ld/testsuite/ld-elf/shared.exp
-+++ b/ld/testsuite/ld-elf/shared.exp
-@@ -756,6 +756,51 @@ if { [istarget *-*-linux*]
- {} \
- "libpr19579.so" \
- ] \
-+ [list \
-+ "Build pr22393-2a.so" \
-+ "-shared -Wl,-z,textonly" \
-+ "-fPIC" \
-+ {pr22393-2a.c} \
-+ {{readelf -lW pr22393-2a.rd} \
-+ {readelf -lW pr22393-2b.rd}} \
-+ "pr22393-2a.so" \
-+ ] \
-+ [list \
-+ "Build pr22393-2a-now.so" \
-+ "-shared -Wl,-z,textonly,-z,now" \
-+ "-fPIC" \
-+ {pr22393-2a.c} \
-+ {{readelf -lW pr22393-2a.rd} \
-+ {readelf -lW pr22393-2b.rd}} \
-+ "pr22393-2a-now.so" \
-+ ] \
-+ [list \
-+ "Build pr22393-2" \
-+ "$NOPIE_LDFLAGS -Wl,-z,textonly,--no-as-needed tmpdir/pr22393-2a.so" \
-+ "$NOPIE_CFLAGS" \
-+ {pr22393-2b.c} \
-+ {{readelf -lW pr22393-2a.rd} \
-+ {readelf -lW pr22393-2b.rd}} \
-+ "pr22393-2" \
-+ ] \
-+ [list \
-+ "Build pr22393-2 (PIE)" \
-+ "-pie -Wl,-z,textonly,--no-as-needed tmpdir/pr22393-2a-now.so" \
-+ "-fPIE" \
-+ {pr22393-2b.c} \
-+ {{readelf -lW pr22393-2a.rd} \
-+ {readelf -lW pr22393-2b.rd}} \
-+ "pr22393-2-pie" \
-+ ] \
-+ [list \
-+ "Build pr22393-2 (static)" \
-+ "-static -Wl,-z,textonly" \
-+ "" \
-+ {pr22393-2a.c pr22393-2b.c} \
-+ {{readelf -lW pr22393-2a.rd} \
-+ {readelf -lW pr22393-2b.rd}} \
-+ "pr22393-2-static" \
-+ ] \
- ]
- run_ld_link_exec_tests [list \
- [list \
-@@ -893,6 +938,32 @@ if { [istarget *-*-linux*]
- "pass.out" \
- "-fPIE" \
- ] \
-+ [list \
-+ "Run pr22393-2" \
-+ "$NOPIE_LDFLAGS -Wl,-z,textonly,--no-as-needed tmpdir/pr22393-2a.so" \
-+ "" \
-+ {pr22393-2b.c} \
-+ "pr22393-2" \
-+ "pass.out" \
-+ "$NOPIE_CFLAGS" \
-+ ] \
-+ [list \
-+ "Run pr22393-2 (PIE)" \
-+ "-pie -Wl,-z,textonly,--no-as-needed tmpdir/pr22393-2a-now.so" \
-+ "" \
-+ {pr22393-2b.c} \
-+ "pr22393-2-pie" \
-+ "pass.out" \
-+ "-fPIE" \
-+ ] \
-+ [list \
-+ "Run pr22393-2 (static)" \
-+ "-static -Wl,-z,textonly" \
-+ "" \
-+ {pr22393-2a.c pr22393-2b.c} \
-+ "pr22393-2-static" \
-+ "pass.out" \
-+ ] \
- ]
- }
-
---
-2.13.6
-
diff --git a/patches/0006-x86-64-Add-tests-for-z-textonly-z-max-page-size-0x10.patch b/patches/0006-x86-64-Add-tests-for-z-textonly-z-max-page-size-0x10.patch
deleted file mode 100644
index 3c02413cb20..00000000000
--- a/patches/0006-x86-64-Add-tests-for-z-textonly-z-max-page-size-0x10.patch
+++ /dev/null
@@ -1,172 +0,0 @@
-From 6a98c098b8284df539ca7d6ccf13e4e239ec65f7 Mon Sep 17 00:00:00 2001
-From: "H.J. Lu" <hjl.tools@gmail.com>
-Date: Mon, 13 Nov 2017 14:47:03 -0800
-Subject: [PATCH 6/6] x86-64: Add tests for -z textonly -z max-page-size=0x1000
-
- PR ld/22393
- * testsuite/ld-x86-64/pr22393-3a.c: New file.
- * testsuite/ld-x86-64/pr22393-3a.rd: Likewise.
- * testsuite/ld-x86-64/pr22393-3b.c: Likewise.
- * testsuite/ld-x86-64/pr22393-3b.rd: Likewise.
- * testsuite/ld-x86-64/x86-64.exp: Run tests for -z textonly
- -z max-page-size=0x1000.
----
- ld/testsuite/ld-x86-64/pr22393-3a.c | 7 ++++
- ld/testsuite/ld-x86-64/pr22393-3a.rd | 9 +++++
- ld/testsuite/ld-x86-64/pr22393-3b.c | 7 ++++
- ld/testsuite/ld-x86-64/pr22393-3b.rd | 9 +++++
- ld/testsuite/ld-x86-64/x86-64.exp | 71 ++++++++++++++++++++++++++++++++++++
- 5 files changed, 103 insertions(+)
- create mode 100644 ld/testsuite/ld-x86-64/pr22393-3a.c
- create mode 100644 ld/testsuite/ld-x86-64/pr22393-3a.rd
- create mode 100644 ld/testsuite/ld-x86-64/pr22393-3b.c
- create mode 100644 ld/testsuite/ld-x86-64/pr22393-3b.rd
-
-diff --git a/ld/testsuite/ld-x86-64/pr22393-3a.c b/ld/testsuite/ld-x86-64/pr22393-3a.c
-new file mode 100644
-index 0000000000..68fa4a0dd0
---- /dev/null
-+++ b/ld/testsuite/ld-x86-64/pr22393-3a.c
-@@ -0,0 +1,7 @@
-+#include <stdio.h>
-+
-+void
-+test()
-+{
-+ printf ("PASS\n");
-+}
-diff --git a/ld/testsuite/ld-x86-64/pr22393-3a.rd b/ld/testsuite/ld-x86-64/pr22393-3a.rd
-new file mode 100644
-index 0000000000..b7ba110095
---- /dev/null
-+++ b/ld/testsuite/ld-x86-64/pr22393-3a.rd
-@@ -0,0 +1,9 @@
-+#source: pr22393-1.s
-+#ld: -shared -z textonly
-+#readelf: -l --wide
-+#target: *-*-linux-gnu *-*-gnu* *-*-nacl*
-+
-+#failif
-+#...
-+ +[0-9]+ +.*(\.note|\.gnu|\.hash|\.dyn|\.rel).*\.text.*
-+#...
-diff --git a/ld/testsuite/ld-x86-64/pr22393-3b.c b/ld/testsuite/ld-x86-64/pr22393-3b.c
-new file mode 100644
-index 0000000000..3033809b02
---- /dev/null
-+++ b/ld/testsuite/ld-x86-64/pr22393-3b.c
-@@ -0,0 +1,7 @@
-+void test(void);
-+
-+int main()
-+{
-+ test();
-+ return 0;
-+}
-diff --git a/ld/testsuite/ld-x86-64/pr22393-3b.rd b/ld/testsuite/ld-x86-64/pr22393-3b.rd
-new file mode 100644
-index 0000000000..b7ba110095
---- /dev/null
-+++ b/ld/testsuite/ld-x86-64/pr22393-3b.rd
-@@ -0,0 +1,9 @@
-+#source: pr22393-1.s
-+#ld: -shared -z textonly
-+#readelf: -l --wide
-+#target: *-*-linux-gnu *-*-gnu* *-*-nacl*
-+
-+#failif
-+#...
-+ +[0-9]+ +.*(\.note|\.gnu|\.hash|\.dyn|\.rel).*\.text.*
-+#...
-diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
-index ef2cb1551c..304128e165 100644
---- a/ld/testsuite/ld-x86-64/x86-64.exp
-+++ b/ld/testsuite/ld-x86-64/x86-64.exp
-@@ -1104,6 +1104,51 @@ if { [isnative] && [which $CC] != 0 } {
- {} \
- "pr22064.so" \
- ] \
-+ [list \
-+ "Build pr22393-3a.so" \
-+ "-shared -Wl,-z,textonly,-z,max-page-size=0x1000" \
-+ "-fPIC" \
-+ {pr22393-3a.c} \
-+ {{readelf -lW pr22393-3a.rd} \
-+ {readelf -lW pr22393-3b.rd}} \
-+ "pr22393-3a.so" \
-+ ] \
-+ [list \
-+ "Build pr22393-3a-now.so" \
-+ "-shared -Wl,-z,textonly,-z,now,-z,max-page-size=0x1000" \
-+ "-fPIC" \
-+ {pr22393-3a.c} \
-+ {{readelf -lW pr22393-3a.rd} \
-+ {readelf -lW pr22393-3b.rd}} \
-+ "pr22393-3a-now.so" \
-+ ] \
-+ [list \
-+ "Build pr22393-3" \
-+ "$NOPIE_LDFLAGS -Wl,-z,textonly,-z,max-page-size=0x1000,--no-as-needed tmpdir/pr22393-2a.so" \
-+ "$NOPIE_CFLAGS" \
-+ {pr22393-3b.c} \
-+ {{readelf -lW pr22393-3a.rd} \
-+ {readelf -lW pr22393-3b.rd}} \
-+ "pr22393-3" \
-+ ] \
-+ [list \
-+ "Build pr22393-3 (PIE)" \
-+ "-pie -Wl,-z,textonly,-z,max-page-size=0x1000,--no-as-needed tmpdir/pr22393-2a-now.so" \
-+ "-fPIE" \
-+ {pr22393-3b.c} \
-+ {{readelf -lW pr22393-3a.rd} \
-+ {readelf -lW pr22393-3b.rd}} \
-+ "pr22393-3-pie" \
-+ ] \
-+ [list \
-+ "Build pr22393-3 (static)" \
-+ "-static -Wl,-z,textonly,-z,max-page-size=0x1000" \
-+ "" \
-+ {pr22393-3a.c pr22393-3b.c} \
-+ {{readelf -lW pr22393-3a.rd} \
-+ {readelf -lW pr22393-3b.rd}} \
-+ "pr22393-3-static" \
-+ ] \
- ]
-
- if {[istarget "x86_64-*-linux*-gnux32"]} {
-@@ -1403,6 +1448,32 @@ if { [isnative] && [which $CC] != 0 } {
- "pass.out" \
- "-fPIE" \
- ] \
-+ [list \
-+ "Run pr22393-3" \
-+ "$NOPIE_LDFLAGS -Wl,-z,textonly,-z,max-page-size=0x1000,--no-as-needed tmpdir/pr22393-3a.so" \
-+ "" \
-+ {pr22393-3b.c} \
-+ "pr22393-3" \
-+ "pass.out" \
-+ "$NOPIE_CFLAGS" \
-+ ] \
-+ [list \
-+ "Run pr22393-3 (PIE)" \
-+ "-pie -Wl,-z,textonly,-z,max-page-size=0x1000,--no-as-needed tmpdir/pr22393-3a-now.so" \
-+ "" \
-+ {pr22393-3b.c} \
-+ "pr22393-3-pie" \
-+ "pass.out" \
-+ "-fPIE" \
-+ ] \
-+ [list \
-+ "Run pr22393-3 (static)" \
-+ "-static -Wl,-z,textonly,-z,max-page-size=0x1000" \
-+ "" \
-+ {pr22393-3a.c pr22393-3b.c} \
-+ "pr22393-3-static" \
-+ "pass.out" \
-+ ] \
- ]
-
- # Run-time tests which require working ifunc attribute support.
---
-2.13.6
-
diff --git a/patches/README b/patches/README
index 0ed3a9f3b20..99ec3b15545 100644
--- a/patches/README
+++ b/patches/README
@@ -24,12 +24,6 @@ patches="
binutils-pr21128.patch
binutils-pr21129.patch
binutils-x86-gpoff.patch
-0001-ld-Add-z-textonly-option-to-ELF-linker.patch
-0002-ld-Add-TEXT_SEGMENT_ALIGN-TEXT_SEGMENT_-RELRO_-END.patch
-0003-ld-Create-a-new-LOAD-segment-for-text-only-LOAD-segm.patch
-0004-ld-ppc-spu-Also-set-expld.textseg.phase-to-exp_seg_n.patch
-0005-ld-Add-tests-for-z-textonly-and-z-notextonly.patch
-0006-x86-64-Add-tests-for-z-textonly-z-max-page-size-0x10.patch
"
for p in $patches