Andrew Geissler | 7e0e3c0 | 2022-02-25 20:34:39 +0000 | [diff] [blame] | 1 | From 07bb7fbdacaf9cd6a1a252ffbc98f4e05e305d50 Mon Sep 17 00:00:00 2001 |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 2 | From: Khem Raj <raj.khem@gmail.com> |
| 3 | Date: Mon, 2 Mar 2015 01:58:54 +0000 |
Andrew Geissler | d1e8949 | 2021-02-12 15:35:20 -0600 | [diff] [blame] | 4 | Subject: [PATCH] binutils-crosssdk: Generate relocatable SDKs |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 5 | |
| 6 | This patch will modify the ELF linker scripts so that the crosssdk |
| 7 | linker will generate binaries with a 4096 bytes PT_INTERP section. When the binaries |
| 8 | will be relocated, at SDK install time, the interpreter path can be easily |
| 9 | changed by the relocating script. |
| 10 | |
Andrew Geissler | 635e0e4 | 2020-08-21 15:58:33 -0500 | [diff] [blame] | 11 | generate larger .interp section for gold linker as well |
| 12 | |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 13 | Upstream-Status: Inappropriate [SDK specific] |
| 14 | |
| 15 | Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com> |
| 16 | Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| 17 | --- |
Andrew Geissler | 635e0e4 | 2020-08-21 15:58:33 -0500 | [diff] [blame] | 18 | gold/layout.cc | 2 +- |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 19 | ld/genscripts.sh | 3 +++ |
| 20 | ld/scripttempl/elf.sc | 4 ++-- |
Andrew Geissler | 635e0e4 | 2020-08-21 15:58:33 -0500 | [diff] [blame] | 21 | 3 files changed, 6 insertions(+), 3 deletions(-) |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 22 | |
Andrew Geissler | 635e0e4 | 2020-08-21 15:58:33 -0500 | [diff] [blame] | 23 | diff --git a/gold/layout.cc b/gold/layout.cc |
Andrew Geissler | 7e0e3c0 | 2022-02-25 20:34:39 +0000 | [diff] [blame] | 24 | index 3efe8d98ae9..9cc389664a6 100644 |
Andrew Geissler | 635e0e4 | 2020-08-21 15:58:33 -0500 | [diff] [blame] | 25 | --- a/gold/layout.cc |
| 26 | +++ b/gold/layout.cc |
Andrew Geissler | 7e0e3c0 | 2022-02-25 20:34:39 +0000 | [diff] [blame] | 27 | @@ -5033,7 +5033,7 @@ Layout::create_interp(const Target* target) |
Andrew Geissler | 635e0e4 | 2020-08-21 15:58:33 -0500 | [diff] [blame] | 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 | |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 36 | diff --git a/ld/genscripts.sh b/ld/genscripts.sh |
Andrew Geissler | 7e0e3c0 | 2022-02-25 20:34:39 +0000 | [diff] [blame] | 37 | index 278f212bdad..0c52ebee4d0 100755 |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 38 | --- a/ld/genscripts.sh |
| 39 | +++ b/ld/genscripts.sh |
Andrew Geissler | 82c905d | 2020-04-13 13:39:40 -0500 | [diff] [blame] | 40 | @@ -304,6 +304,7 @@ DATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}" |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 41 | LD_FLAG=r |
| 42 | DATA_ALIGNMENT=${DATA_ALIGNMENT_r} |
| 43 | DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})" |
| 44 | +PARTIAL_LINKING=" " |
Andrew Geissler | 82c905d | 2020-04-13 13:39:40 -0500 | [diff] [blame] | 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})" |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 49 | LD_FLAG=u |
| 50 | DATA_ALIGNMENT=${DATA_ALIGNMENT_u} |
| 51 | CONSTRUCTING=" " |
| 52 | +PARTIAL_LINKING=" " |
Andrew Geissler | 82c905d | 2020-04-13 13:39:40 -0500 | [diff] [blame] | 53 | ( echo "/* Script for -Ur */" |
| 54 | source_sh ${CUSTOMIZER_SCRIPT} |
| 55 | source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 56 | ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xu |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 57 | +unset PARTIAL_LINKING |
| 58 | |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 59 | DATA_ALIGNMENT=${DATA_ALIGNMENT_} |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 60 | RELOCATING=" " |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 61 | diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc |
Andrew Geissler | 7e0e3c0 | 2022-02-25 20:34:39 +0000 | [diff] [blame] | 62 | index bf2268bb0ad..b1811ef130f 100644 |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 63 | --- a/ld/scripttempl/elf.sc |
| 64 | +++ b/ld/scripttempl/elf.sc |
Andrew Geissler | 7e0e3c0 | 2022-02-25 20:34:39 +0000 | [diff] [blame] | 65 | @@ -148,8 +148,8 @@ if test -z "$DATA_SEGMENT_ALIGN"; then |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 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) }" |