|
@@ -1,58 +0,0 @@
|
|
|
-From 6006e8d789f7a1129414fb3a8c930b094af0cafa Mon Sep 17 00:00:00 2001
|
|
|
-From: Greg Ungerer <gerg@kernel.org>
|
|
|
-Date: Wed, 6 Nov 2019 21:19:24 +0100
|
|
|
-Subject: [PATCH] elf2flt: fix relocations for read-only data
|
|
|
-
|
|
|
-Readonly data sections are mapped into the "text" section in the
|
|
|
-elf2flt.ld linker script. The relocation generation code is not handling
|
|
|
-that case properly though, and is actually mapping any data section type
|
|
|
-into the "data" section of the target binary.
|
|
|
-
|
|
|
-This problem case has been detected with elf2flt core dumping when used
|
|
|
-with binutils-2.33.1 (on ARM architecture targets). See thread at:
|
|
|
-
|
|
|
- https://sourceware.org/ml/binutils/2019-10/msg00132.html
|
|
|
-
|
|
|
-Tested by Christophe Priouzeau [1]
|
|
|
-
|
|
|
-* binutils 2.33.1
|
|
|
-* buildroot 2019.11-rc1
|
|
|
-* patch on top of elf2flt (patch available on this thread)
|
|
|
-* configuration: stm32f469-disco with initramfs configuration on buildroot
|
|
|
-
|
|
|
-Result:
|
|
|
-Build: OK, all the binaries are generated
|
|
|
-Runtime test on stm32f469-disco: OK
|
|
|
-
|
|
|
-[1] https://github.com/uclinux-dev/elf2flt/issues/12
|
|
|
-
|
|
|
-Signed-off-by: Greg Ungerer <gerg@kernel.org>
|
|
|
-Signed-off-by: Romain Naour <romain.naour@smile.fr>
|
|
|
-Cc: Christophe Priouzeau <christophe.priouzeau@st.com>
|
|
|
----
|
|
|
- elf2flt.c | 8 +++++---
|
|
|
- 1 file changed, 5 insertions(+), 3 deletions(-)
|
|
|
-
|
|
|
-diff --git a/elf2flt.c b/elf2flt.c
|
|
|
-index 67f720a..8973cef 100644
|
|
|
---- a/elf2flt.c
|
|
|
-+++ b/elf2flt.c
|
|
|
-@@ -418,10 +418,12 @@ output_relocs (
|
|
|
- // continue;
|
|
|
-
|
|
|
- /*
|
|
|
-- * Only relocate things in the data sections if we are PIC/GOT.
|
|
|
-- * otherwise do text as well
|
|
|
-+ * Only relocate things in the writable data sections if we are PIC/GOT.
|
|
|
-+ * Otherwise do text (and read only data) as well.
|
|
|
- */
|
|
|
-- if ((!pic_with_got || ALWAYS_RELOC_TEXT) && (a->flags & SEC_CODE))
|
|
|
-+ if ((!pic_with_got || ALWAYS_RELOC_TEXT) &&
|
|
|
-+ ((a->flags & SEC_CODE) ||
|
|
|
-+ ((a->flags & (SEC_DATA | SEC_READONLY)) == (SEC_DATA | SEC_READONLY))))
|
|
|
- sectionp = text + (a->vma - text_vma);
|
|
|
- else if (a->flags & SEC_DATA)
|
|
|
- sectionp = data + (a->vma - data_vma);
|
|
|
---
|
|
|
-2.21.0
|
|
|
-
|