51extern "C" auto __cxa_atexit(
void (*destructor_func)(
void*),
void* obj_ptr,
69 if (destructor_func ==
nullptr) {
81 if (
reinterpret_cast<void*
>(
atexit_funcs[idx].destructor_func) ==
119static_assert(
sizeof(
GuardType) == 8,
"GuardType must be 64 bits per ABI");
128 uint64_t expected = 0;
133 std::memory_order_acq_rel,
134 std::memory_order_acquire)) {
169 guard->guard.store(0, std::memory_order_release);
200 const char* file,
unsigned int line,
201 const char* function) {
206 auto*
end = etl::format_to_n(buf_line,
sizeof(buf_line) - 1,
"{}", line);
auto etl_putchar(int c) -> void
早期控制台字符输出
void * __dso_handle
动态共享对象标识,内核使用静态链接,此变量在内核中没有使用
static size_t atexit_func_count
析构函数个数
function_t __fini_array_end
全局析构函数函数指针终点地址
void(*)() function_t
全局构造函数函数指针
auto CppDeInit() -> void
析构 c++ 全局对象
auto __cxa_pure_virtual() -> void
function_t __fini_array_start
全局析构函数函数指针起点地址
function_t __init_array_start
全局构造函数函数指针起点地址
auto __cxa_guard_release(GuardType *guard) -> void
static constexpr size_t kMaxAtExitFuncsCount
最大析构函数数量
function_t __init_array_end
全局构造函数函数指针终点地址
auto __cxa_guard_abort(GuardType *guard) -> void
void __assert_fail(const char *assertion, const char *file, unsigned int line, const char *function)
libc assert() 失败时调用的底层接口
auto __cxa_guard_acquire(GuardType *guard) -> int
auto __cxa_finalize(void *destructor_func) -> void
auto CppInit() -> void
构造 c++ 全局对象
static atexit_func_entry_t atexit_funcs[kMaxAtExitFuncsCount]
析构函数数组
auto __cxa_atexit(void(*destructor_func)(void *), void *obj_ptr, void *) -> int
__always_inline auto RawPut(const char *msg) -> void
绕过队列直接输出至串口(用于 panic 路径)
std::atomic< uint64_t > guard
原子守护变量:bit 0 = is_initialized, bit 8 = is_in_use
static constexpr uint64_t kInUseMask
static constexpr uint64_t kInitializedMask
void(* destructor_func)(void *)