1From 07bb7fbdacaf9cd6a1a252ffbc98f4e05e305d50 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Mon, 2 Mar 2015 01:58:54 +0000
4Subject: [PATCH] binutils-crosssdk: Generate relocatable SDKs
5
6This patch will modify the ELF linker scripts so that the crosssdk
7linker will generate binaries with a 4096 bytes PT_INTERP section. When the binaries
8will be relocated, at SDK install time, the interpreter path can be easily
9changed by the relocating script.
10
11generate larger .interp section for gold linker as well
12
13Upstream-Status: Inappropriate [SDK specific]
14
15Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
16Signed-off-by: Khem Raj <raj.khem@gmail.com>
17---
18 gold/layout.cc        | 2 +-
19 ld/genscripts.sh      | 3 +++
20 ld/scripttempl/elf.sc | 4 ++--
21 3 files changed, 6 insertions(+), 3 deletions(-)
22
23diff --git a/gold/layout.cc b/gold/layout.cc
24index 3efe8d98ae9..9cc389664a6 100644
25--- a/gold/layout.cc
26+++ b/gold/layout.cc
27@@ -5033,7 +5033,7 @@ Layout::create_interp(const Target* target)
28       gold_assert(interp != NULL);
29     }
30
31-  size_t len = strlen(interp) + 1;
32+  size_t len = 4096;
33
34   Output_section_data* odata = new Output_data_const(interp, len, 1);
35
36diff --git a/ld/genscripts.sh b/ld/genscripts.sh
37index 278f212bdad..0c52ebee4d0 100755
38--- a/ld/genscripts.sh
39+++ b/ld/genscripts.sh
40@@ -304,6 +304,7 @@ DATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}"
41 LD_FLAG=r
42 DATA_ALIGNMENT=${DATA_ALIGNMENT_r}
43 DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
44+PARTIAL_LINKING=" "
45 ( echo "/* Script for -r */"
46   source_sh ${CUSTOMIZER_SCRIPT}
47   source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
48@@ -312,10 +313,12 @@ DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
49 LD_FLAG=u
50 DATA_ALIGNMENT=${DATA_ALIGNMENT_u}
51 CONSTRUCTING=" "
52+PARTIAL_LINKING=" "
53 ( echo "/* Script for -Ur */"
54   source_sh ${CUSTOMIZER_SCRIPT}
55   source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
56 ) | sed -e '/^ *$/d;s/[	 ]*$//' > ldscripts/${EMULATION_NAME}.xu
57+unset PARTIAL_LINKING
58
59 DATA_ALIGNMENT=${DATA_ALIGNMENT_}
60 RELOCATING=" "
61diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc
62index bf2268bb0ad..b1811ef130f 100644
63--- a/ld/scripttempl/elf.sc
64+++ b/ld/scripttempl/elf.sc
65@@ -148,8 +148,8 @@ if test -z "$DATA_SEGMENT_ALIGN"; then
66     DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);"
67   fi
68 fi
69-if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
70-  INITIAL_READONLY_SECTIONS=".interp       ${RELOCATING-0} : { *(.interp) }"
71+if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}${PARTIAL_LINKING}"; then
72+  INITIAL_READONLY_SECTIONS=".interp       ${RELOCATING-0} : { *(.interp); . = 0x1000; }"
73 fi
74 if test -z "$PLT"; then
75   IPLT=".iplt         ${RELOCATING-0} : { *(.iplt) }"
76