From 32e57dac2e61e79b029593eb4d34d727bcc10678 Mon Sep 17 00:00:00 2001 From: iperry Date: Thu, 17 Dec 2009 02:37:07 +0000 Subject: Initial commit of library code, moved from leaftest repo git-svn-id: https://leaflabs.googlecode.com/svn/trunk/library@69 749a229e-a60e-11de-b98f-4500b42dc123 --- .../lanchon-stm32/src/libcs3/generic-m-reset.S | 87 ++++++++++++++++++++++ stm32conf/lanchon-stm32/src/libcs3/generic-reset.S | 87 ++++++++++++++++++++++ stm32conf/lanchon-stm32/src/libcs3/start_c.c | 58 +++++++++++++++ 3 files changed, 232 insertions(+) create mode 100644 stm32conf/lanchon-stm32/src/libcs3/generic-m-reset.S create mode 100644 stm32conf/lanchon-stm32/src/libcs3/generic-reset.S create mode 100644 stm32conf/lanchon-stm32/src/libcs3/start_c.c (limited to 'stm32conf/lanchon-stm32/src/libcs3') 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 + + 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 + + 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; +} -- cgit v1.2.3