summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurentiu Palcu <laurentiu.palcu@intel.com>2012-11-21 16:57:42 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-11-24 15:12:04 +0000
commitb25d0c5fe286e44ded46aefdcbe35ed259087759 (patch)
tree4168a6f2f717a871a1c0bad973eabbff576ee607
parent7e000fef0bf917f27dcad66dd90fae6c155c4d1d (diff)
downloadopenembedded-core-b25d0c5fe286e44ded46aefdcbe35ed259087759.tar.gz
openembedded-core-b25d0c5fe286e44ded46aefdcbe35ed259087759.tar.bz2
openembedded-core-b25d0c5fe286e44ded46aefdcbe35ed259087759.zip
binutils-crosssdk: do not set .interp size to 0x1000 for partial linked objects
When building the SDK, the final .interp section size should be set to a bigger value (0x1000) in order to be able to change the dynamic loader's path later. However, we shouldn't do that for partial linked objects (when -r or -rU is used). That's because those objects will then have an .interp section of 0x1000 even if it contains no data and when the final linking is done we will end up with a "cannot move location counter backwards" error. That's because the linker will try to squeeze all the data in the .interp sections found in various partial linked objects into one 0x1000 bytes final .interp section. [YOCTO #3264] Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-devtools/binutils/binutils/relocatable_sdk.patch37
1 files changed, 32 insertions, 5 deletions
diff --git a/meta/recipes-devtools/binutils/binutils/relocatable_sdk.patch b/meta/recipes-devtools/binutils/binutils/relocatable_sdk.patch
index 33f9e68b5f..7408c31aad 100644
--- a/meta/recipes-devtools/binutils/binutils/relocatable_sdk.patch
+++ b/meta/recipes-devtools/binutils/binutils/relocatable_sdk.patch
@@ -7,15 +7,42 @@ by the relocating script.
Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
-Index: binutils-2.22/ld/scripttempl/elf.sc
+Index: binutils_git/ld/genscripts.sh
===================================================================
---- binutils-2.22.orig/ld/scripttempl/elf.sc
-+++ binutils-2.22/ld/scripttempl/elf.sc
-@@ -116,7 +116,7 @@ if test -n "${COMMONPAGESIZE}"; then
+--- binutils_git.orig/ld/genscripts.sh 2012-11-21 11:58:23.325441925 +0200
++++ binutils_git/ld/genscripts.sh 2012-11-21 12:03:42.106815400 +0200
+@@ -290,6 +290,7 @@
+ LD_FLAG=r
+ DATA_ALIGNMENT=${DATA_ALIGNMENT_r}
+ DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
++PARTIAL_LINKING=" "
+ ( echo "/* Script for ld -r: link without relocation */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+@@ -298,10 +299,12 @@
+ LD_FLAG=u
+ DATA_ALIGNMENT=${DATA_ALIGNMENT_u}
+ CONSTRUCTING=" "
++PARTIAL_LINKING=" "
+ ( echo "/* Script for ld -Ur: link w/out relocation, do create constructors */"
+ . ${CUSTOMIZER_SCRIPT}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xu
++unset PARTIAL_LINKING
+
+ LD_FLAG=
+ DATA_ALIGNMENT=${DATA_ALIGNMENT_}
+Index: binutils_git/ld/scripttempl/elf.sc
+===================================================================
+--- binutils_git.orig/ld/scripttempl/elf.sc 2012-11-21 12:02:26.800377384 +0200
++++ binutils_git/ld/scripttempl/elf.sc 2012-11-21 12:04:16.166109621 +0200
+@@ -124,8 +124,8 @@
+ DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);"
DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);"
fi
- if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
+-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