From 25e715730ddcca37021fa4876aed4fa91d5dea25 Mon Sep 17 00:00:00 2001 From: Khem Raj 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 Signed-off-by: Khem Raj --- 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 899d4af0707..7c31b1bef6e 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -5083,7 +5083,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 382bd07ffe2..9fbd0c4cb8a 100755 --- a/ld/genscripts.sh +++ b/ld/genscripts.sh @@ -304,6 +304,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 @@ -312,10 +313,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 5d3b0d31b1b..2163909cd56 100644 --- a/ld/scripttempl/elf.sc +++ b/ld/scripttempl/elf.sc @@ -148,8 +148,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) }"