From: nicolas.pitre@linaro.org (Nicolas Pitre)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3/3] ARM: zImage: make sure appended DTB doesn't get overwritten by kernel .bss
Date: Sun, 12 Jun 2011 02:06:40 -0400 [thread overview]
Message-ID: <1307858800-16712-4-git-send-email-nicolas.pitre@linaro.org> (raw)
In-Reply-To: <1307858800-16712-1-git-send-email-nicolas.pitre@linaro.org>
The appended DTB gets relocated with the decompressor code to get out
of the way of the decompressed kernel. However the .bss section may
be larger than the relocated code and data, therefore overwriting the
DTB. Let's make sure the relocation takes care of moving zImage so
no conflict with .bss occurs.
Thanks to Tony Lindgren <tony@atomide.com> for figuring out this issue.
While at it, let's clean up the code a bit so that the wont_overwrite
symbol is used while determining if a conflict exists, making the above
change more precise as well as eliminating some ARM/THUMB alternates.
Signed-off-by: Nicolas Pitre <nicolas.pitre@linaro.org>
---
arch/arm/boot/compressed/Makefile | 3 +++
arch/arm/boot/compressed/head.S | 19 +++++++++++++++----
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
index 23aad07..48bead9 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -98,6 +98,9 @@ endif
ccflags-y := -fpic -fno-builtin
asflags-y := -Wa,-march=all
+# Supply kernel BSS size to the decompressor via a linker symbol.
+KBSS_SZ = $(shell size $(obj)/../../../../vmlinux | awk 'END{print $$3}')
+LDFLAGS_vmlinux = --defsym _kernel_bss_size=$(KBSS_SZ)
# Supply ZRELADDR to the decompressor via a linker symbol.
ifneq ($(CONFIG_AUTO_ZRELADDR),y)
LDFLAGS_vmlinux += --defsym zreladdr=$(ZRELADDR)
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index 4bc009c..a9e97c9 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -248,6 +248,18 @@ restart: adr r0, LC0
mov r8, r6 @ use the appended device tree
+ /*
+ * Make sure that the DTB doesn't end up in the final
+ * kernel's .bss area. To do so, we adjust the decompressed
+ * kernel size to compensate if that .bss size is larger
+ * than the relocated code.
+ */
+ ldr r5, =_kernel_bss_size
+ adr r1, wont_overwrite
+ sub r1, r6, r1
+ subs r1, r5, r1
+ addhi r9, r9, r1
+
/* Get the dtb's size */
ldr r5, [r6, #4]
#ifndef __ARMEB__
@@ -276,15 +288,14 @@ dtb_check_done:
* r10 = end of this image, including bss/stack/malloc space if non XIP
* We basically want:
* r4 - 16k page directory >= r10 -> OK
- * r4 + image length <= current position (pc) -> OK
+ * r4 + image length <= address of wont_overwrite -> OK
*/
add r10, r10, #16384
cmp r4, r10
bhs wont_overwrite
add r10, r4, r9
- ARM( cmp r10, pc )
- THUMB( mov lr, pc )
- THUMB( cmp r10, lr )
+ adr r9, wont_overwrite
+ cmp r10, r9
bls wont_overwrite
/*
--
1.7.4
next prev parent reply other threads:[~2011-06-12 6:06 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-12 6:06 [PATCH 0/3] patches to allow DTB to be appended to the ARM zImage Nicolas Pitre
2011-06-12 6:06 ` [PATCH 1/3] ARM: zImage: ensure it is always a multiple of 64 bits in size Nicolas Pitre
2011-06-13 10:43 ` Tony Lindgren
2011-06-13 11:24 ` Russell King - ARM Linux
2011-06-13 14:06 ` Nicolas Pitre
2011-06-12 6:06 ` [PATCH 2/3] ARM: zImage: Allow the appending of a device tree binary Nicolas Pitre
2011-06-12 15:01 ` Grant Likely
2011-06-13 10:46 ` Tony Lindgren
2011-06-13 11:26 ` Russell King - ARM Linux
2011-06-13 14:08 ` Nicolas Pitre
2011-06-12 6:06 ` Nicolas Pitre [this message]
2011-06-13 10:47 ` [PATCH 3/3] ARM: zImage: make sure appended DTB doesn't get overwritten by kernel .bss Tony Lindgren
2011-06-12 8:15 ` [PATCH 0/3] patches to allow DTB to be appended to the ARM zImage Russell King - ARM Linux
2011-06-12 8:34 ` Shawn Guo
2011-06-12 9:21 ` Russell King - ARM Linux
2011-06-12 9:38 ` Shawn Guo
2011-06-12 9:52 ` Russell King - ARM Linux
2011-06-12 10:42 ` Shawn Guo
2011-06-12 10:40 ` Russell King - ARM Linux
2011-06-13 23:04 ` David Brown
2011-06-13 23:13 ` Nicolas Pitre
2011-06-14 7:09 ` Nicolas Pitre
2011-06-14 11:25 ` Shawn Guo
2011-06-14 14:53 ` Tony Lindgren
2011-06-14 17:28 ` Nicolas Pitre
2011-06-14 20:32 ` Arnd Bergmann
2011-06-14 21:21 ` Nicolas Pitre
2011-06-14 21:42 ` Arnd Bergmann
2011-06-14 22:06 ` Grant Likely
2011-06-15 8:08 ` Tony Lindgren
2011-06-14 22:32 ` Rob Herring
2011-06-14 23:50 ` Nicolas Pitre
2011-06-15 2:09 ` Rob Herring
2011-06-15 2:21 ` Nicolas Pitre
2011-06-14 21:38 ` David Brown
2011-06-14 23:27 ` [PATCH] Support multiple MEM tags with atags->fdt conversion David Brown
2011-06-15 19:50 ` Nicolas Pitre
2011-06-15 20:15 ` David Brown
2011-06-15 20:20 ` Nicolas Pitre
2011-06-16 1:43 ` David Gibson
2011-06-20 4:03 ` Nicolas Pitre
2011-06-20 4:53 ` David Gibson
2011-06-17 20:23 ` David Brown
2011-06-12 11:22 ` [PATCH 0/3] patches to allow DTB to be appended to the ARM zImage Petr Štetiar
2011-06-12 11:58 ` Russell King - ARM Linux
2011-06-12 14:15 ` Arnd Bergmann
2011-06-12 14:34 ` Russell King - ARM Linux
2011-06-12 15:01 ` Arnd Bergmann
2011-06-12 15:35 ` Russell King - ARM Linux
2011-06-12 15:45 ` Nicolas Pitre
2011-06-13 20:24 ` Dmitry Eremin-Solenikov
2011-06-13 22:05 ` Russell King - ARM Linux
2011-06-13 23:33 ` Grant Likely
2011-06-12 14:57 ` Grant Likely
2011-06-12 15:19 ` Russell King - ARM Linux
2011-06-12 15:47 ` Nicolas Pitre
2011-06-12 15:59 ` Russell King - ARM Linux
2011-06-12 18:59 ` Nicolas Pitre
2011-06-13 9:51 ` Tony Lindgren
2011-06-13 14:14 ` Nicolas Pitre
2011-06-13 14:20 ` Russell King - ARM Linux
2011-06-13 15:02 ` Tony Lindgren
2011-06-13 15:14 ` Nicolas Pitre
2011-06-13 15:17 ` Grant Likely
2011-06-12 19:26 ` Warner Losh
2011-06-13 9:59 ` Tony Lindgren
2011-06-12 15:41 ` Nicolas Pitre
2011-06-14 0:13 ` David Brown
2011-09-06 11:23 ` Linus Walleij
2011-06-21 1:40 ` David Gibson
2011-06-13 4:31 ` Grant Likely
2011-06-13 20:44 ` Nicolas Pitre
2011-09-05 15:43 ` Tony Lindgren
2011-09-05 19:32 ` Nicolas Pitre
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1307858800-16712-4-git-send-email-nicolas.pitre@linaro.org \
--to=nicolas.pitre@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).