/******************************************************************************* * (c) Copyright 2016-2018 Microsemi SoC Products Group. All rights reserved. * * @file init.c * @author Microsemi SoC Products Group * @brief Mi-V soft processor memory section initializations and start-up code. * * SVN $Revision: 9661 $ * SVN $Date: 2018-01-15 16:13:33 +0530 (Mon, 15 Jan 2018) $ */ #include #include #include #include "encoding.h" #ifdef __cplusplus extern "C" { #endif extern uint32_t __sdata_load; extern uint32_t __sdata_start; extern uint32_t __sdata_end; extern uint32_t __data_load; extern uint32_t __data_start; extern uint32_t __data_end; extern uint32_t __sbss_start; extern uint32_t __sbss_end; extern uint32_t __bss_start; extern uint32_t __bss_end; static void copy_section(uint32_t * p_load, uint32_t * p_vma, uint32_t * p_vma_end) { while(p_vma <= p_vma_end) { *p_vma = *p_load; ++p_load; ++p_vma; } } static void zero_section(uint32_t * start, uint32_t * end) { uint32_t * p_zero = start; while(p_zero <= end) { *p_zero = 0; ++p_zero; } } void _init(void) { extern int main(int, char**); const char *argv0 = "hello"; char *argv[] = {(char *)argv0, NULL, NULL}; copy_section(&__sdata_load, &__sdata_start, &__sdata_end); copy_section(&__data_load, &__data_start, &__data_end); zero_section(&__sbss_start, &__sbss_end); zero_section(&__bss_start, &__bss_end); main(1, argv); } /* Function called after main() finishes */ void _fini() { } #ifdef __cplusplus } #endif