6
6
//
7
7
// ===----------------------------------------------------------------------===//
8
8
9
+ #include " hdr/stdint_proxy.h"
9
10
#include " src/__support/macros/config.h"
10
11
#include " src/stdlib/atexit.h"
11
12
#include " src/stdlib/exit.h"
14
15
#include " startup/baremetal/fini.h"
15
16
#include " startup/baremetal/init.h"
16
17
17
- #include < stdint.h>
18
-
19
18
extern " C" {
20
19
int main (int argc, char **argv);
21
20
void _start ();
@@ -31,7 +30,9 @@ extern uintptr_t __data_start[];
31
30
extern uintptr_t __data_size[];
32
31
extern uintptr_t __bss_start[];
33
32
extern uintptr_t __bss_size[];
33
+ } // extern "C"
34
34
35
+ namespace {
35
36
// Based on
36
37
// https://developer.arm.com/documentation/107565/0101/Use-case-examples/Generic-Information/What-is-inside-a-program-image-/Vector-table
37
38
void NMI_Handler () {}
@@ -49,35 +50,37 @@ void SysTick_Handler() {}
49
50
// to be zero and Cortex-M23 can require up to 10, so 1024-byte align the vector
50
51
// table.
51
52
using HandlerType = void (*)(void );
52
- const HandlerType vector_table[ ]
53
- __attribute__ ((section( " .vectors " ), aligned( 1024 ), used)) = {
54
- ( HandlerType) &__stack, // SP
55
- _start, // Reset
56
- NMI_Handler, // NMI Handler
57
- HardFault_Handler, // Hard Fault Handlerß
58
- MemManage_Handler, // MPU Fault Han`dler
59
- BusFault_Handler, // Bus Fault Handler
60
- UsageFault_Handler, // Usage Fault Handler
61
- 0 , // Reserved
62
- 0 , // Reserved
63
- 0 , // Reserved
64
- 0 , // Reserved
65
- SVC_Handler, // SVC Handler
66
- DebugMon_Handler, // Debug Monitor Handler
67
- 0 , // Reserved
68
- PendSV_Handler, // PendSV Handler
69
- SysTick_Handler, // SysTick Handler
70
- // Unused
53
+ [[gnu::section( " .vectors " ), gnu::aligned( 1024 ), gnu::used] ]
54
+ const HandlerType vector_table[] = {
55
+ reinterpret_cast < HandlerType>( &__stack) , // SP
56
+ _start, // Reset
57
+ NMI_Handler, // NMI Handler
58
+ HardFault_Handler, // Hard Fault Handlerß
59
+ MemManage_Handler, // MPU Fault Han`dler
60
+ BusFault_Handler, // Bus Fault Handler
61
+ UsageFault_Handler, // Usage Fault Handler
62
+ 0 , // Reserved
63
+ 0 , // Reserved
64
+ 0 , // Reserved
65
+ 0 , // Reserved
66
+ SVC_Handler, // SVC Handler
67
+ DebugMon_Handler, // Debug Monitor Handler
68
+ 0 , // Reserved
69
+ PendSV_Handler, // PendSV Handler
70
+ SysTick_Handler, // SysTick Handler
71
+ // Unused
71
72
};
72
- } // extern "C"
73
+ } // namespace
73
74
74
75
namespace LIBC_NAMESPACE_DECL {
75
76
[[noreturn]] void do_start () {
76
77
// FIXME: set up the QEMU test environment
77
78
78
79
// Perform the equivalent of scatterloading
79
- LIBC_NAMESPACE::memcpy (__data_start, __data_source, (uintptr_t )__data_size);
80
- LIBC_NAMESPACE::memset (__bss_start, ' \0 ' , (uintptr_t )__bss_size);
80
+ LIBC_NAMESPACE::memcpy (__data_start, __data_source,
81
+ reinterpret_cast <uintptr_t >(__data_size));
82
+ LIBC_NAMESPACE::memset (__bss_start, ' \0 ' ,
83
+ reinterpret_cast <uintptr_t >(__bss_size));
81
84
__libc_init_array ();
82
85
83
86
_platform_init ();
0 commit comments