summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2021-02-24 14:54:26 +0100
committerAndreas Kling <kling@serenityos.org>2021-02-24 14:54:26 +0100
commit7db8ccc0e47e09e6c5d015a042c374b43cdd43ed (patch)
treef0b2b90b9346c5e7a0c248e74002f620e9fded67
parent069fd583817cd6cf801db0193a04cb873c2a2990 (diff)
downloadserenity-7db8ccc0e47e09e6c5d015a042c374b43cdd43ed.zip
LibC+DynamicLoader: Move "transactional memory" GCC stubs to LibC
Instead of having a special case in the dynamic loader where we ignore TM-related GCC symbols, just stub them out in LibC like we already do for various other things we don't support.
-rw-r--r--Userland/Libraries/LibC/CMakeLists.txt1
-rw-r--r--Userland/Libraries/LibC/stubs.cpp37
-rw-r--r--Userland/Libraries/LibELF/DynamicLoader.cpp6
3 files changed, 38 insertions, 6 deletions
diff --git a/Userland/Libraries/LibC/CMakeLists.txt b/Userland/Libraries/LibC/CMakeLists.txt
index 587a62d74f..d0e7947fb8 100644
--- a/Userland/Libraries/LibC/CMakeLists.txt
+++ b/Userland/Libraries/LibC/CMakeLists.txt
@@ -32,6 +32,7 @@ set(LIBC_SOURCES
stdlib.cpp
string.cpp
strings.cpp
+ stubs.cpp
syslog.cpp
sys/prctl.cpp
sys/ptrace.cpp
diff --git a/Userland/Libraries/LibC/stubs.cpp b/Userland/Libraries/LibC/stubs.cpp
new file mode 100644
index 0000000000..bf33bac070
--- /dev/null
+++ b/Userland/Libraries/LibC/stubs.cpp
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+extern "C" {
+
+#define DO_STUB(name) \
+ void name(); \
+ void name() { }
+
+DO_STUB(__register_frame_info);
+DO_STUB(__deregister_frame_info);
+DO_STUB(_ITM_registerTMCloneTable);
+DO_STUB(_ITM_deregisterTMCloneTable);
+}
diff --git a/Userland/Libraries/LibELF/DynamicLoader.cpp b/Userland/Libraries/LibELF/DynamicLoader.cpp
index 81adbab1de..880bdd420d 100644
--- a/Userland/Libraries/LibELF/DynamicLoader.cpp
+++ b/Userland/Libraries/LibELF/DynamicLoader.cpp
@@ -427,12 +427,6 @@ DynamicLoader::RelocationResult DynamicLoader::do_relocation(size_t total_tls_si
auto symbol = relocation.symbol();
auto res = lookup_symbol(symbol);
if (!res.has_value()) {
- // We do not support these
- // TODO: Can we tell gcc not to generate the piece of code that uses these?
- // (--disable-tm-clone-registry flag in gcc configuration?)
- if (symbol.name().is_one_of("__deregister_frame_info"sv, "_ITM_registerTMCloneTable"sv, "_ITM_deregisterTMCloneTable"sv, "__register_frame_info"sv))
- break;
-
if (symbol.bind() == STB_WEAK)
return RelocationResult::ResolveLater;