66//
77//===----------------------------------------------------------------------===//
88
9+ #include "hdr/stdint_proxy.h"
910#include "src/__support/macros/config.h"
1011#include "src/stdlib/atexit.h"
1112#include "src/stdlib/exit.h"
1415#include "startup/baremetal/fini.h"
1516#include "startup/baremetal/init.h"
1617
17- #include <stdint.h>
18-
1918extern "C" {
2019int main(int argc, char **argv);
2120void _start();
@@ -31,7 +30,9 @@ extern uintptr_t __data_start[];
3130extern uintptr_t __data_size[];
3231extern uintptr_t __bss_start[];
3332extern uintptr_t __bss_size[];
33+ } // extern "C"
3434
35+ namespace {
3536// Based on
3637// https://developer.arm.com/documentation/107565/0101/Use-case-examples/Generic-Information/What-is-inside-a-program-image-/Vector-table
3738void NMI_Handler() {}
@@ -49,35 +50,37 @@ void SysTick_Handler() {}
4950// to be zero and Cortex-M23 can require up to 10, so 1024-byte align the vector
5051// table.
5152using 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
7172};
72- } // extern "C"
73+ } // namespace
7374
7475namespace LIBC_NAMESPACE_DECL {
7576[[noreturn]] void do_start() {
7677 // FIXME: set up the QEMU test environment
7778
7879 // 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));
8184 __libc_init_array();
8285
8386 _platform_init();
0 commit comments