arm64 has no __naked__ attribute and the compiler adds a function prologue for saving x29 and x30 to the stack for all C functions. This includes functions defined using the ENTRY_FUNCTION macro. Therefore, the stack needs to be setup before entering a C function, which is not possible if the entry is a C function. Provide a macro to implement the entry in assembly to be able to setup the stack before entering the low level entry function. Signed-off-by: Michael Tretter <m.tretter@xxxxxxxxxxxxxx> --- arch/arm/include/asm/barebox-arm64.h | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 arch/arm/include/asm/barebox-arm64.h diff --git a/arch/arm/include/asm/barebox-arm64.h b/arch/arm/include/asm/barebox-arm64.h new file mode 100644 index 0000000000..e7eda22128 --- /dev/null +++ b/arch/arm/include/asm/barebox-arm64.h @@ -0,0 +1,34 @@ +#ifndef _BAREBOX_ARM64_H_ +#define _BAREBOX_ARM64_H_ + +#include <linux/linkage.h> + +/* + * ENTRY_PROC - mark start of entry procedure + */ +#define ENTRY_PROC(name) \ + .section .text_head_entry_##name; \ + ENTRY(##name); \ + b 2f; \ + nop; \ + nop; \ + nop; \ + nop; \ + nop; \ + nop; \ + nop; \ + .asciz "barebox"; \ + .word 0xffffffff; \ + .word _barebox_image_size; \ + .rept 8; \ + .word 0x55555555; \ + .endr; \ + 2: + +/* + * ENTRY_PROC_END - mark end of entry procedure + */ +#define ENTRY_PROC_END(name) \ + END(##name) + +#endif /* _BAREBOX_ARM64_H_ */ -- 2.19.1 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox