From 089ee95b342e79af09258b45c888a13b35fadf26 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 2 Mar 2015 01:58:54 +0000
Subject: [PATCH] binutils-crosssdk: Generate relocatable SDKs

This patch will modify the ELF linker scripts so that the crosssdk
linker will generate binaries with a 4096 bytes PT_INTERP section. When the binaries
will be relocated, at SDK install time, the interpreter path can be easily
changed by the relocating script.

generate larger .interp section for gold linker as well

Upstream-Status: Inappropriate [SDK specific]

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 gold/layout.cc        | 2 +-
 ld/genscripts.sh      | 3 +++
 ld/scripttempl/elf.sc | 4 ++--
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/gold/layout.cc b/gold/layout.cc
index b43ae841a6c..6101a95195b 100644
--- a/gold/layout.cc
+++ b/gold/layout.cc
@@ -5102,7 +5102,7 @@ Layout::create_interp(const Target* target)
       gold_assert(interp != NULL);
     }
 
-  size_t len = strlen(interp) + 1;
+  size_t len = 4096;
 
   Output_section_data* odata = new Output_data_const(interp, len, 1);
 
diff --git a/ld/genscripts.sh b/ld/genscripts.sh
index d6ceb3fe4f5..365c0e778cc 100755
--- a/ld/genscripts.sh
+++ b/ld/genscripts.sh
@@ -298,6 +298,7 @@ DATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}"
 LD_FLAG=r
 DATA_ALIGNMENT=${DATA_ALIGNMENT_r}
 DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
+PARTIAL_LINKING=" "
 ( echo "/* Script for -r */"
   source_sh ${CUSTOMIZER_SCRIPT}
   source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
@@ -306,10 +307,12 @@ DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
 LD_FLAG=u
 DATA_ALIGNMENT=${DATA_ALIGNMENT_u}
 CONSTRUCTING=" "
+PARTIAL_LINKING=" "
 ( echo "/* Script for -Ur */"
   source_sh ${CUSTOMIZER_SCRIPT}
   source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
 ) | sed -e '/^ *$/d;s/[	 ]*$//' > ldscripts/${EMULATION_NAME}.xu
+unset PARTIAL_LINKING
 
 DATA_ALIGNMENT=${DATA_ALIGNMENT_}
 RELOCATING=" "
diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc
index fae7c2ad71c..7fe37eb1874 100644
--- a/ld/scripttempl/elf.sc
+++ b/ld/scripttempl/elf.sc
@@ -150,8 +150,8 @@ if test -z "$DATA_SEGMENT_ALIGN"; then
     DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);"
   fi
 fi
-if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
-  INITIAL_READONLY_SECTIONS=".interp       ${RELOCATING-0} : { *(.interp) }"
+if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}${PARTIAL_LINKING}"; then
+  INITIAL_READONLY_SECTIONS=".interp       ${RELOCATING-0} : { *(.interp); . = 0x1000; }"
 fi
 if test -z "$PLT"; then
   IPLT=".iplt         ${RELOCATING-0} : { *(.iplt) }"
