xref: /aosp_15_r20/external/arm-neon-tests/retarget.c (revision f37826520a923688f9e110915f3811e385d8b6d1)
1*f3782652STreehugger Robot /*
2*f3782652STreehugger Robot ** Copyright (C) ARM Limited, 2005. All rights reserved.
3*f3782652STreehugger Robot */
4*f3782652STreehugger Robot 
5*f3782652STreehugger Robot #if defined(__cplusplus)
6*f3782652STreehugger Robot #include <cstdio>
7*f3782652STreehugger Robot #else
8*f3782652STreehugger Robot #include <stdio.h>
9*f3782652STreehugger Robot #endif
10*f3782652STreehugger Robot #include <rt_misc.h>
11*f3782652STreehugger Robot 
12*f3782652STreehugger Robot // Heap base from scatter file
13*f3782652STreehugger Robot extern int Image$$HEAP$$ZI$$Base;
14*f3782652STreehugger Robot //#pragma import(__use_two_region_memory)
15*f3782652STreehugger Robot 
16*f3782652STreehugger Robot extern void core_init(void);
17*f3782652STreehugger Robot 
18*f3782652STreehugger Robot /*
19*f3782652STreehugger Robot The functions below are patched onto main.
20*f3782652STreehugger Robot */
21*f3782652STreehugger Robot 
22*f3782652STreehugger Robot extern void $Super$$main(void);
23*f3782652STreehugger Robot 
$Sub$$main(void)24*f3782652STreehugger Robot void $Sub$$main(void)
25*f3782652STreehugger Robot {
26*f3782652STreehugger Robot   core_init();                    // does some extra setup work
27*f3782652STreehugger Robot 
28*f3782652STreehugger Robot   $Super$$main();                 // calls the original function
29*f3782652STreehugger Robot }
30*f3782652STreehugger Robot 
31*f3782652STreehugger Robot 
32*f3782652STreehugger Robot /*
33*f3782652STreehugger Robot This function re-implements the C Library semihosted function. The stack pointer
34*f3782652STreehugger Robot has aready been set and is passed back to the function, The base of the heap is
35*f3782652STreehugger Robot set from the scatter file
36*f3782652STreehugger Robot */
__user_initial_stackheap(unsigned R0,unsigned SP,unsigned R2,unsigned SL)37*f3782652STreehugger Robot __value_in_regs struct __initial_stackheap __user_initial_stackheap(
38*f3782652STreehugger Robot         unsigned R0, unsigned SP, unsigned R2, unsigned SL)
39*f3782652STreehugger Robot {
40*f3782652STreehugger Robot     struct __initial_stackheap config;
41*f3782652STreehugger Robot 
42*f3782652STreehugger Robot     config.heap_base = (unsigned int)&Image$$HEAP$$ZI$$Base; // placed by scatterfile
43*f3782652STreehugger Robot     config.stack_base = SP;   // inherit SP from the execution environment
44*f3782652STreehugger Robot 
45*f3782652STreehugger Robot     return config;
46*f3782652STreehugger Robot }
47