From 1aad0f8b16f886eedb99434eb9010dda4f0a0522 Mon Sep 17 00:00:00 2001 From: Ben Wiederhake Date: Sun, 16 Aug 2020 15:59:36 +0200 Subject: [PATCH] Kernel: Stop supporting sprintf The kernel no longer needs sprintf (which might, in theory, overflow), so we can hide the C++ declaration and make the function uncallable from within the kernel. However, libstdc++ still links against it, as libstdc++ uses it for demangling, from AK::demangle(). --- Kernel/kprintf.cpp | 4 ++++ Kernel/kstdio.h | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Kernel/kprintf.cpp b/Kernel/kprintf.cpp index 6834ce00bd..d03388c5d1 100644 --- a/Kernel/kprintf.cpp +++ b/Kernel/kprintf.cpp @@ -133,6 +133,10 @@ static void buffer_putch(char*& bufptr, char ch) *bufptr++ = ch; } +// Declare it, so that the symbol is exported, because libstdc++ uses it. +// However, *only* libstdc++ uses it, and none of the rest of the Kernel. +extern "C" int sprintf(char* buffer, const char* fmt, ...); + int sprintf(char* buffer, const char* fmt, ...) { ScopedSpinLock lock(s_log_lock); diff --git a/Kernel/kstdio.h b/Kernel/kstdio.h index 32f3b1adda..9f30a449f7 100644 --- a/Kernel/kstdio.h +++ b/Kernel/kstdio.h @@ -33,7 +33,6 @@ int dbgprintf(const char* fmt, ...); int dbgputstr(const char*, int); int kernelputstr(const char*, int); int kprintf(const char* fmt, ...); -int sprintf(char* buf, const char* fmt, ...); int snprintf(char* buf, size_t, const char* fmt, ...); void set_serial_debug(bool on_or_off); int get_serial_debug();