From 62e1282dbfe237a566d9b26a8578ec9abf1b38a3 Mon Sep 17 00:00:00 2001 From: William Huynh Date: Thu, 31 Jul 2025 15:55:55 +0100 Subject: [PATCH] [libc] Cleanup startup/baremetal/arm/start.cpp Post-commit review changes as suggested by @petrhosek in #146863 --- libc/startup/baremetal/arm/start.cpp | 51 +++++++++++++++------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/libc/startup/baremetal/arm/start.cpp b/libc/startup/baremetal/arm/start.cpp index 123efc4750941..493445e2922b0 100644 --- a/libc/startup/baremetal/arm/start.cpp +++ b/libc/startup/baremetal/arm/start.cpp @@ -6,6 +6,7 @@ // //===----------------------------------------------------------------------===// +#include "hdr/stdint_proxy.h" #include "src/__support/macros/config.h" #include "src/stdlib/atexit.h" #include "src/stdlib/exit.h" @@ -14,8 +15,6 @@ #include "startup/baremetal/fini.h" #include "startup/baremetal/init.h" -#include - extern "C" { int main(int argc, char **argv); void _start(); @@ -31,7 +30,9 @@ extern uintptr_t __data_start[]; extern uintptr_t __data_size[]; extern uintptr_t __bss_start[]; extern uintptr_t __bss_size[]; +} // extern "C" +namespace { // Based on // https://developer.arm.com/documentation/107565/0101/Use-case-examples/Generic-Information/What-is-inside-a-program-image-/Vector-table void NMI_Handler() {} @@ -49,35 +50,37 @@ void SysTick_Handler() {} // to be zero and Cortex-M23 can require up to 10, so 1024-byte align the vector // table. using HandlerType = void (*)(void); -const HandlerType vector_table[] - __attribute__((section(".vectors"), aligned(1024), used)) = { - (HandlerType)&__stack, // SP - _start, // Reset - NMI_Handler, // NMI Handler - HardFault_Handler, // Hard Fault Handlerß - MemManage_Handler, // MPU Fault Han`dler - BusFault_Handler, // Bus Fault Handler - UsageFault_Handler, // Usage Fault Handler - 0, // Reserved - 0, // Reserved - 0, // Reserved - 0, // Reserved - SVC_Handler, // SVC Handler - DebugMon_Handler, // Debug Monitor Handler - 0, // Reserved - PendSV_Handler, // PendSV Handler - SysTick_Handler, // SysTick Handler - // Unused +[[gnu::section(".vectors"), gnu::aligned(1024), gnu::used]] +const HandlerType vector_table[] = { + reinterpret_cast(&__stack), // SP + _start, // Reset + NMI_Handler, // NMI Handler + HardFault_Handler, // Hard Fault Handlerß + MemManage_Handler, // MPU Fault Han`dler + BusFault_Handler, // Bus Fault Handler + UsageFault_Handler, // Usage Fault Handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + SVC_Handler, // SVC Handler + DebugMon_Handler, // Debug Monitor Handler + 0, // Reserved + PendSV_Handler, // PendSV Handler + SysTick_Handler, // SysTick Handler + // Unused }; -} // extern "C" +} // namespace namespace LIBC_NAMESPACE_DECL { [[noreturn]] void do_start() { // FIXME: set up the QEMU test environment // Perform the equivalent of scatterloading - LIBC_NAMESPACE::memcpy(__data_start, __data_source, (uintptr_t)__data_size); - LIBC_NAMESPACE::memset(__bss_start, '\0', (uintptr_t)__bss_size); + LIBC_NAMESPACE::memcpy(__data_start, __data_source, + reinterpret_cast(__data_size)); + LIBC_NAMESPACE::memset(__bss_start, '\0', + reinterpret_cast(__bss_size)); __libc_init_array(); _platform_init();