summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2011-04-04 10:51:47 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2011-05-06 08:53:26 +0200
commit64476d2177a53228319c4ab5b99cfb66ec8cc365 (patch)
treee61e6b30d8df45c2972f1a2abcdb5b879155ca44
parentc1bcb052ddf55c9181e0ce65962a793584d9154e (diff)
downloadbarebox-64476d2177a53228319c4ab5b99cfb66ec8cc365.tar.gz
barebox-64476d2177a53228319c4ab5b99cfb66ec8cc365.tar.xz
ARM: compile in image size and magic into barebox image
This is useful to detect a barebox image and to be able to copy only the image size if barebox is stored on raw partitions which are bigger than the image. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--arch/arm/cpu/start.c6
-rw-r--r--arch/arm/lib/barebox.lds.S1
-rw-r--r--include/asm-generic/sections.h3
3 files changed, 10 insertions, 0 deletions
diff --git a/arch/arm/cpu/start.c b/arch/arm/cpu/start.c
index 1f8eed8a..f20ce74a 100644
--- a/arch/arm/cpu/start.c
+++ b/arch/arm/cpu/start.c
@@ -48,6 +48,12 @@ void __naked __section(.text_entry) exception_vectors(void)
"1: bne 1b\n" /* irq (interrupt) */
"1: bne 1b\n" /* fiq (fast interrupt) */
#endif
+ ".word 0x65726162\n" /* 'bare' */
+ ".word 0x00786f62\n" /* 'box' */
+ ".word _text\n" /* text base. If copied there,
+ * barebox can skip relocation
+ */
+ ".word _barebox_image_size\n" /* image size to copy */
);
}
diff --git a/arch/arm/lib/barebox.lds.S b/arch/arm/lib/barebox.lds.S
index 7683f739..81a91236 100644
--- a/arch/arm/lib/barebox.lds.S
+++ b/arch/arm/lib/barebox.lds.S
@@ -93,4 +93,5 @@ SECTIONS
.bss : { *(.bss*) }
__bss_stop = .;
_end = .;
+ _barebox_image_size = __bss_start - _text;
}
diff --git a/include/asm-generic/sections.h b/include/asm-generic/sections.h
index c5d60a9d..1f48fb8c 100644
--- a/include/asm-generic/sections.h
+++ b/include/asm-generic/sections.h
@@ -4,5 +4,8 @@
extern char _text[], _stext[], _etext[];
extern char __bss_start[], __bss_stop[];
extern char _end[];
+extern void *_barebox_image_size;
+
+#define barebox_image_size (unsigned int)&_barebox_image_size
#endif /* _ASM_GENERIC_SECTIONS_H_ */