From 442800db3e5e225bfa45c76c58bae9a5fd7de6ab Mon Sep 17 00:00:00 2001 From: Timon Kruiper Date: Mon, 2 May 2022 22:22:33 +0200 Subject: [PATCH] Kernel: Fetch the frame pointer using __builtin_frame_address() This compiler builtin abstracts away the specifics of fetching the frame pointer. This will allow the KSyms.cpp to be build for the aarch64 target. While we're here, lets also change the PerformanceEventBuffer.cpp to not rely on x86_64 specifics. --- Kernel/KSyms.cpp | 10 ++-------- Kernel/PerformanceEventBuffer.cpp | 9 +-------- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/Kernel/KSyms.cpp b/Kernel/KSyms.cpp index 0c3cb45f5a..6b9a8c0099 100644 --- a/Kernel/KSyms.cpp +++ b/Kernel/KSyms.cpp @@ -168,14 +168,8 @@ void dump_backtrace(PrintToScreen print_to_screen) return; TemporaryChange change(in_dump_backtrace, true); TemporaryChange disable_kmalloc_stacks(g_dump_kmalloc_stacks, false); - FlatPtr base_pointer; -#if ARCH(I386) - asm volatile("movl %%ebp, %%eax" - : "=a"(base_pointer)); -#else - asm volatile("movq %%rbp, %%rax" - : "=a"(base_pointer)); -#endif + + FlatPtr base_pointer = (FlatPtr)__builtin_frame_address(0); dump_backtrace_impl(base_pointer, g_kernel_symbols_available, print_to_screen); } diff --git a/Kernel/PerformanceEventBuffer.cpp b/Kernel/PerformanceEventBuffer.cpp index 8f930cda6b..2f9f6f8e42 100644 --- a/Kernel/PerformanceEventBuffer.cpp +++ b/Kernel/PerformanceEventBuffer.cpp @@ -24,14 +24,7 @@ PerformanceEventBuffer::PerformanceEventBuffer(NonnullOwnPtr buffer) NEVER_INLINE ErrorOr PerformanceEventBuffer::append(int type, FlatPtr arg1, FlatPtr arg2, StringView arg3, Thread* current_thread, FlatPtr arg4, u64 arg5, ErrorOr arg6) { - FlatPtr base_pointer; -#if ARCH(I386) - asm volatile("movl %%ebp, %%eax" - : "=a"(base_pointer)); -#else - asm volatile("movq %%rbp, %%rax" - : "=a"(base_pointer)); -#endif + FlatPtr base_pointer = (FlatPtr)__builtin_frame_address(0); return append_with_ip_and_bp(current_thread->pid(), current_thread->tid(), 0, base_pointer, type, 0, arg1, arg2, arg3, arg4, arg5, arg6); }