From dfdd977a823e643bf9952acd1f59a2ef78816732 Mon Sep 17 00:00:00 2001 From: Itamar Date: Fri, 13 Nov 2020 14:47:00 +0200 Subject: [PATCH] LibC: Link statically with libstdc++ This allows us to have the implementation of __cxa_demangle in libc.so. --- Libraries/LibC/CMakeLists.txt | 2 +- Libraries/LibELF/DynamicObject.cpp | 5 ----- Libraries/LibELF/Loader.cpp | 5 +---- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/Libraries/LibC/CMakeLists.txt b/Libraries/LibC/CMakeLists.txt index 560e795abd..0078b058e3 100644 --- a/Libraries/LibC/CMakeLists.txt +++ b/Libraries/LibC/CMakeLists.txt @@ -66,7 +66,7 @@ add_custom_command( ) set(SOURCES ${LIBC_SOURCES} ${AK_SOURCES} ${ELF_SOURCES}) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdlib") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++") serenity_libc(LibC c) target_link_libraries(LibC crt0) add_dependencies(LibC LibM) diff --git a/Libraries/LibELF/DynamicObject.cpp b/Libraries/LibELF/DynamicObject.cpp index 09e162ced4..25973e5de3 100644 --- a/Libraries/LibELF/DynamicObject.cpp +++ b/Libraries/LibELF/DynamicObject.cpp @@ -420,11 +420,6 @@ Elf32_Addr DynamicObject::patch_plt_entry(u32 relocation_offset) ASSERT(relocation.type() == R_386_JMP_SLOT); auto sym = relocation.symbol(); - if (StringView { sym.name() } == "__cxa_demangle") { - dbgln("__cxa_demangle is currently not supported for shared objects"); - // FIXME: Where is it defined? - ASSERT_NOT_REACHED(); - } u8* relocation_address = relocation.address().as_ptr(); auto res = lookup_symbol(sym); diff --git a/Libraries/LibELF/Loader.cpp b/Libraries/LibELF/Loader.cpp index ecc7d1fbeb..1260a862b9 100644 --- a/Libraries/LibELF/Loader.cpp +++ b/Libraries/LibELF/Loader.cpp @@ -264,10 +264,7 @@ String Loader::symbolicate(u32 address, u32* out_offset) const #else auto& demangled_name = symbol.demangled_name; if (demangled_name.is_null()) { - - // FIXME: Temporarily disabled demangling since it is currently not supported with shared libraries - demangled_name = symbol.name; - // demangled_name = demangle(symbol.name); + demangled_name = demangle(symbol.name); } #endif