Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD
---
arch/arm/Kconfig |1 +
arch/arm/Makefile |6 +-
arch/arm/apps/Kconfig | 11
arch/arm/apps/Makefile |6 ++
arch/arm/apps/apps.lds.S | 64 ++
arch/arm/apps/binfmt.c | 111
arch/arm/apps/head.S | 59 +
arch/arm/apps/include/arch/asm/macro.h | 46 +
arch/arm/apps/include/arch/setjmp.h| 26
arch/arm/apps/raise.c | 27
arch/arm/apps/setjmp.S | 60 +
arch/arm/apps/start.c | 35 ++
12 files changed, 451 insertions(+), 1 deletion(-)
create mode 100644 arch/arm/apps/Kconfig
create mode 100644 arch/arm/apps/Makefile
create mode 100644 arch/arm/apps/apps.lds.S
create mode 100644 arch/arm/apps/binfmt.c
create mode 100644 arch/arm/apps/head.S
create mode 100644 arch/arm/apps/include/arch/asm/macro.h
create mode 100644 arch/arm/apps/include/arch/setjmp.h
create mode 100644 arch/arm/apps/raise.c
create mode 100644 arch/arm/apps/setjmp.S
create mode 100644 arch/arm/apps/start.c
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index f25dcf7..f30859b 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -2,6 +2,7 @@ config ARM
bool
select HAS_KALLSYMS
select HAS_MODULES
+ select HAS_APPLICATIONS
select HAVE_CONFIGURABLE_TEXT_BASE
select HAVE_PBL_IMAGE
select HAVE_IMAGE_COMPRESSION
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 100a3c4..731d92a 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -275,9 +275,13 @@ else
MACH :=
endif
+APP_LDFLAGS += -L $(shell dirname `$(CC) $(CPPFLAGS) -print-libgcc-file-name`)
-lgcc
+
common-y += $(BOARD) $(MACH)
common-y += arch/arm/lib/ arch/arm/cpu/
+common-$(CONFIG_APPLICATIONS) += arch/arm/apps/
lds-y := arch/arm/lib/barebox.lds
+apps-lds-y := arch/arm/apps/apps.lds
-CLEAN_FILES += include/generated/mach-types.h arch/arm/lib/barebox.lds
barebox-flash-image
+CLEAN_FILES += include/generated/mach-types.h arch/arm/lib/barebox.lds
arch/arm/apps/apps.lds barebox-flash-image
diff --git a/arch/arm/apps/Kconfig b/arch/arm/apps/Kconfig
new file mode 100644
index 000..8fcb79d
--- /dev/null
+++ b/arch/arm/apps/Kconfig
@@ -0,0 +1,11 @@
+
+config APP_TEXT_BASE_OFFSET
+ hex
+ default 0x80
+ prompt "application text base offset"
+ help
+ APP_TEXT_BASE = TEXT_BASE - APP_TEXT_BASE_OFFSET
+ all the application will be link at this address
+ the syscall table region of 0x2000 will be add
+ APP_TEXT_BASE - 0x2000 and then the malloc region at
+ APP_TEXT_BASE - 0x2000 - APP_MALLOC_SIZE
diff --git a/arch/arm/apps/Makefile b/arch/arm/apps/Makefile
new file mode 100644
index 000..c7e9a80
--- /dev/null
+++ b/arch/arm/apps/Makefile
@@ -0,0 +1,6 @@
+obj-y += binfmt.o
+app-y += head.o
+app-y += start.o
+app-y += raise.o
+app-y += setjmp.o
+extry-y += apps.lds
diff --git a/arch/arm/apps/apps.lds.S b/arch/arm/apps/apps.lds.S
new file mode 100644
index 000..b6e4ab9
--- /dev/null
+++ b/arch/arm/apps/apps.lds.S
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2013 Jean-Christophe PLAGNIOL-VILLARD
+ *
+ * Under GPLv2 only
+ *
+ * As a special exception, if other files instantiate templates or use macros
+ * or inline functions from this file, or you compile this file and link it
+ * with other works to produce a work based on this file, this file does not
+ * by itself cause the resulting work to be covered by the GNU General Public
+ * License. However the source code for this file must still be made available
+ * in accordance with section (3) of the GNU General Public License.
+
+ * This exception does not invalidate any other reasons why a work based on
+ * this file might be covered by the GNU General Public License.
+ */
+
+#include
+#include
+#include
+
+#define HEAD_BASE (TEXT_BASE - CONFIG_APP_TEXT_BASE_OFFSET)
+
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ . = HEAD_BASE;
+
+ . = ALIGN(4);
+ .text :
+ {
+ _stext = .;
+ _text = .;
+ *(.text_head_entry*)
+ . = 0x80;
+ KEEP(*(.appinfo.start))
+ __appinfo_start = .;
+ KEEP(*(.appinfo))
+ __appinfo_end = .;
+ KEEP(*(.appinfo.end))
+ *(.text*)
+ }
+
+ /* Discard unwind if enable in barebox */
+ /DISCARD/ : { *(.ARM.ex*) }
+
+ . = ALIGN(4);
+ .rodata : { *(.rodata*) }
+
+ _etext = .; /* End of text and rodata section */
+
+ . = ALIGN(4);
+ .data : { *(.data*) }
+
+ . = ALIGN(4);
+ __bss_start = .;
+