diff options
Diffstat (limited to 'stm32conf/lanchon-stm32/src/libcs3/generic-m-reset.S')
| -rw-r--r-- | stm32conf/lanchon-stm32/src/libcs3/generic-m-reset.S | 87 | 
1 files changed, 87 insertions, 0 deletions
diff --git a/stm32conf/lanchon-stm32/src/libcs3/generic-m-reset.S b/stm32conf/lanchon-stm32/src/libcs3/generic-m-reset.S new file mode 100644 index 0000000..95dbdbe --- /dev/null +++ b/stm32conf/lanchon-stm32/src/libcs3/generic-m-reset.S @@ -0,0 +1,87 @@ +/* Reset code for generic-m
 + *
 + * Version:Sourcery G++ 4.2-84
 + * BugURL:https://support.codesourcery.com/GNUToolchain/
 + *
 + *  Copyright 2007 CodeSourcery.
 + *
 + * The authors hereby grant permission to use, copy, modify, distribute,
 + * and license this software and its documentation for any purpose, provided
 + * that existing copyright notices are retained in all copies and that this
 + * notice is included verbatim in any distributions. No written agreement,
 + * license, or royalty fee is required for any of the authorized uses.
 + * Modifications to this software may be copyrighted by their authors
 + * and need not follow the licensing terms described here, provided that
 + * the new terms are clearly indicated on the first page of each file where
 + * they apply. */
 +
 +#if defined(__thumb2__) || defined(__ARM_ARCH_6M__)
 +#define THUMB 1
 +	.thumb
 +	.thumb_func
 +#else
 +	.arm
 +#endif
 +	.section .cs3.reset,"x",%progbits
 +	.globl __cs3_reset_generic_m
 +	.type	__cs3_reset_generic_m, %function
 +__cs3_reset_generic_m:
 +	.fnstart
 +#include <rdi-io.h>
 +
 +	adr	r1, __cs3_heap_start_ptr
 +	mov	r0,#AngelSWI_Reason_HeapInfo
 +#if THUMB
 +	bkpt	0xAB
 +#else
 +	swi	0x123456
 +#endif
 +	cmp	r0,#0
 +	blt	2f
 +/* __cs3_heap_start contains
 +	[0] ?
 +	[4] zero or heap limit
 +	[8] zero or top of stack
 +	[12] ?  */
 +	ldr	r2, __cs3_heap_start_ptr
 +
 +#if THUMB
 +	ldr	r1,=__cs3_stack
 +	mov	sp,r1
 +#else
 +	ldr	sp,=__cs3_stack
 +#endif
 +	ldr	r0,[r2,#8]	/* top of stack */
 +	cmp	r0, #0
 +#if THUMB
 +	beq	1f
 +	mov	sp,r0
 +1:
 +#else
 +	movne	sp,r0
 +#endif
 +	ldr	r1,=__cs3_heap_limit
 +	ldr	r0,[r2,#4]	/* heap limit */
 +	cmp	r0,#0
 +#if THUMB
 +	beq	1f
 +	str	r0,[r1]
 +1:
 +#else
 +	strne	r0,[r1]
 +#endif
 +	.word	 __cs3_heap_start
 +2:
 +#if THUMB
 +	ldr	r0,=__cs3_start_c
 +	bx	r0
 +#else
 +	b	__cs3_start_c
 +#endif
 +	.pool
 +	.cantunwind
 +	.fnend
 +	.align 2
 +__cs3_heap_start_ptr:
 +	.word __cs3_heap_start
 +	.size	__cs3_reset_generic_m,.-__cs3_reset_generic_m
  | 
