diff options
Diffstat (limited to 'stm32conf/lanchon-stm32/src/libcs3')
| -rw-r--r-- | stm32conf/lanchon-stm32/src/libcs3/generic-m-reset.S | 87 | ||||
| -rw-r--r-- | stm32conf/lanchon-stm32/src/libcs3/generic-reset.S | 87 | ||||
| -rw-r--r-- | stm32conf/lanchon-stm32/src/libcs3/start_c.c | 58 | 
3 files changed, 232 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
 diff --git a/stm32conf/lanchon-stm32/src/libcs3/generic-reset.S b/stm32conf/lanchon-stm32/src/libcs3/generic-reset.S new file mode 100644 index 0000000..d5b54ab --- /dev/null +++ b/stm32conf/lanchon-stm32/src/libcs3/generic-reset.S @@ -0,0 +1,87 @@ +/* Reset code for generic
 + *
 + * 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
 +	.type	__cs3_reset_generic, %function
 +__cs3_reset_generic:
 +	.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,.-__cs3_reset_generic
 diff --git a/stm32conf/lanchon-stm32/src/libcs3/start_c.c b/stm32conf/lanchon-stm32/src/libcs3/start_c.c new file mode 100644 index 0000000..dff9fa3 --- /dev/null +++ b/stm32conf/lanchon-stm32/src/libcs3/start_c.c @@ -0,0 +1,58 @@ +/* CS3 start_c routine.
 + *
 + * Copyright (c) 2006, 2007 CodeSourcery Inc
 + *
 + * 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.
 + */
 +
 +#include "cs3.h"
 +
 +extern void __libc_init_array (void);
 +
 +extern int main (int, char **, char **);
 +
 +extern void exit (int) __attribute__ ((noreturn, weak));
 +
 +void  __attribute ((noreturn))
 +__cs3_start_c (void)
 +{
 +  unsigned regions = __cs3_region_num;
 +  const struct __cs3_region *rptr = __cs3_regions;
 +  int exit_code;
 +
 +  /* Initialize memory */
 +  for (regions = __cs3_region_num, rptr = __cs3_regions; regions--; rptr++)
 +    {
 +      long long *src = (long long *)rptr->init;
 +      long long *dst = (long long *)rptr->data;
 +      unsigned limit = rptr->init_size;
 +      unsigned count;
 +
 +      if (src != dst)
 +	for (count = 0; count != limit; count += sizeof (long long))
 +	  *dst++ = *src++;
 +      else
 +	dst = (long long *)((char *)dst + limit);
 +      limit = rptr->zero_size;
 +      for (count = 0; count != limit; count += sizeof (long long))
 +	*dst++ = 0;
 +    }
 +
 +  /* Run initializers.  */
 +  __libc_init_array ();
 +
 +  exit_code = main (0, NULL, NULL);
 +  if (exit)
 +    exit (exit_code);
 +  /* If exit is NULL, make sure we don't return. */
 +  for (;;)
 +    continue;
 +}
  | 
