diff --git a/External/FEXCore/Source/CMakeLists.txt b/External/FEXCore/Source/CMakeLists.txt index bfcdea18c..e47b4fecf 100644 --- a/External/FEXCore/Source/CMakeLists.txt +++ b/External/FEXCore/Source/CMakeLists.txt @@ -124,8 +124,6 @@ set (SRCS Interface/IR/Passes/SyscallOptimization.cpp Utils/Allocator.cpp Utils/Allocator/64BitAllocator.cpp - Utils/ELFContainer.cpp - Utils/ELFSymbolDatabase.cpp Utils/LogManager.cpp Utils/Threads.cpp ) diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 5370ab6d5..68e6c76fc 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -1,4 +1,6 @@ add_subdirectory(Common/) add_subdirectory(CommonCore/) +add_subdirectory(Linux/) add_subdirectory(Tests/) add_subdirectory(Tools/) + diff --git a/Source/Linux/CMakeLists.txt b/Source/Linux/CMakeLists.txt new file mode 100644 index 000000000..7a86dc1ca --- /dev/null +++ b/Source/Linux/CMakeLists.txt @@ -0,0 +1,10 @@ +set (SRCS + Utils/ELFContainer.cpp + Utils/ELFSymbolDatabase.cpp + ) + +add_library(FEX_Utils OBJECT ${SRCS}) +target_link_libraries(FEX_Utils FEXCore) + +target_include_directories(FEX_Utils PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/Source/) +target_include_directories(FEX_Utils PRIVATE ${CMAKE_BINARY_DIR}/generated) diff --git a/External/FEXCore/Source/Utils/ELFContainer.cpp b/Source/Linux/Utils/ELFContainer.cpp similarity index 99% rename from External/FEXCore/Source/Utils/ELFContainer.cpp rename to Source/Linux/Utils/ELFContainer.cpp index 8b48c1c22..aa9330b7b 100644 --- a/External/FEXCore/Source/Utils/ELFContainer.cpp +++ b/Source/Linux/Utils/ELFContainer.cpp @@ -5,8 +5,8 @@ desc: Loads and parses an elf to memory. Also handles some loading & logic. $end_info$ */ -#include -#include +#include "Common/MathUtils.h" +#include "Linux/Utils/ELFContainer.h" #include #include #include diff --git a/External/FEXCore/include/FEXCore/Utils/ELFContainer.h b/Source/Linux/Utils/ELFContainer.h similarity index 100% rename from External/FEXCore/include/FEXCore/Utils/ELFContainer.h rename to Source/Linux/Utils/ELFContainer.h diff --git a/External/FEXCore/include/FEXCore/Utils/ELFParser.h b/Source/Linux/Utils/ELFParser.h similarity index 96% rename from External/FEXCore/include/FEXCore/Utils/ELFParser.h rename to Source/Linux/Utils/ELFParser.h index 49c5b5cde..4569a6f62 100644 --- a/External/FEXCore/include/FEXCore/Utils/ELFParser.h +++ b/Source/Linux/Utils/ELFParser.h @@ -6,7 +6,7 @@ #include #include -#include "ELFContainer.h" +#include "Linux/Utils/ELFContainer.h" /* Simpler elf parser, checks for the elf MAGIC COOKIE @@ -31,9 +31,9 @@ struct ELFParser { std::ifstream elf(file); fd = ::open(file.c_str(), O_RDONLY); - + if (fd == -1) { - LogMan::Msg::E("Failed to open '%s'", file.c_str()); + // Likely just doesn't exist return false; } @@ -82,12 +82,12 @@ struct ELFParser { LogMan::Msg::E("Invalid e_phentsize32 from '%s'", file.c_str()); return false; } - + // Convert to 64 bit header for (int i = 0; i < EI_NIDENT; i++) ehdr.e_ident[i] = hdr32.e_ident[i]; - #define COPY(name) ehdr.name = hdr32.name + #define COPY(name) ehdr.name = hdr32.name COPY(e_type); COPY(e_machine); COPY(e_version); @@ -112,7 +112,7 @@ struct ELFParser { } else if (header[EI_CLASS] == ELFCLASS64) { elf.read((char*)&ehdr, sizeof(ehdr)); - + if (!elf.good()) { LogMan::Msg::E("Failed to read Ehdr64 from '%s'", file.c_str()); return false; @@ -158,12 +158,12 @@ struct ELFParser { if (type == ::ELFLoader::ELFContainer::TYPE_X86_32) { Elf32_Phdr phdrs32[ehdr.e_phnum]; elf.read((char*)phdrs32, sizeof(Elf32_Phdr) * ehdr.e_phnum); - + if (!elf.good()) { LogMan::Msg::E("Failed to read phdr32 from '%s'", file.c_str()); return false; } - + // Convert to 64 bit program headers phdrs.resize(ehdr.e_phnum); @@ -185,13 +185,13 @@ struct ELFParser { phdrs.resize(ehdr.e_phnum); elf.read((char*)&phdrs[0], sizeof(Elf64_Phdr) * ehdr.e_phnum); - + if (!elf.good()) { LogMan::Msg::E("Failed to read phdr64 from '%s'", file.c_str()); return false; } } - + for (auto phdr : phdrs) { if (phdr.p_type == PT_INTERP) { elf.seekg(phdr.p_offset); @@ -219,4 +219,4 @@ struct ELFParser { ~ELFParser() { Closefd(); } -}; \ No newline at end of file +}; diff --git a/External/FEXCore/Source/Utils/ELFSymbolDatabase.cpp b/Source/Linux/Utils/ELFSymbolDatabase.cpp similarity index 99% rename from External/FEXCore/Source/Utils/ELFSymbolDatabase.cpp rename to Source/Linux/Utils/ELFSymbolDatabase.cpp index a6dbb3652..99accc63f 100644 --- a/External/FEXCore/Source/Utils/ELFSymbolDatabase.cpp +++ b/Source/Linux/Utils/ELFSymbolDatabase.cpp @@ -5,10 +5,11 @@ desc: Part of our now defunct ld-linux replacement, keeps tracks of all symbols, $end_info$ */ -#include +#include "Common/MathUtils.h" +#include "Linux/Utils/ELFSymbolDatabase.h" + #include #include -#include #include #include diff --git a/External/FEXCore/include/FEXCore/Utils/ELFSymbolDatabase.h b/Source/Linux/Utils/ELFSymbolDatabase.h similarity index 93% rename from External/FEXCore/include/FEXCore/Utils/ELFSymbolDatabase.h rename to Source/Linux/Utils/ELFSymbolDatabase.h index 4b7492605..d7946b7d0 100644 --- a/External/FEXCore/include/FEXCore/Utils/ELFSymbolDatabase.h +++ b/Source/Linux/Utils/ELFSymbolDatabase.h @@ -1,13 +1,12 @@ #pragma once -#include -#include +#include "Linux/Utils/ELFContainer.h" #include #include namespace ELFLoader { -class FEX_DEFAULT_VISIBILITY ELFSymbolDatabase final { +class ELFSymbolDatabase final { public: ELFSymbolDatabase(::ELFLoader::ELFContainer *file); ~ELFSymbolDatabase(); diff --git a/Source/Tests/ELFCodeLoader.h b/Source/Tests/ELFCodeLoader.h index 7ad521d6d..97a313164 100644 --- a/Source/Tests/ELFCodeLoader.h +++ b/Source/Tests/ELFCodeLoader.h @@ -1,6 +1,8 @@ #pragma once #include "Common/Config.h" #include "Common/MathUtils.h" +#include "Linux/Utils/ELFContainer.h" +#include "Linux/Utils/ELFSymbolDatabase.h" #include #include @@ -15,8 +17,6 @@ #include #include #include -#include -#include namespace FEX::HarnessHelper { diff --git a/Source/Tests/ELFCodeLoader2.h b/Source/Tests/ELFCodeLoader2.h index 0ae450b99..3ea34a3e8 100644 --- a/Source/Tests/ELFCodeLoader2.h +++ b/Source/Tests/ELFCodeLoader2.h @@ -2,6 +2,8 @@ #pragma once #include "Common/Config.h" #include "Common/MathUtils.h" +#include "Linux/Utils/ELFParser.h" +#include "Linux/Utils/ELFSymbolDatabase.h" #include #include @@ -16,8 +18,6 @@ #include #include #include -#include -#include #include #include diff --git a/Source/Tests/FEXLoader.cpp b/Source/Tests/FEXLoader.cpp index 48befa01d..556ad90d9 100644 --- a/Source/Tests/FEXLoader.cpp +++ b/Source/Tests/FEXLoader.cpp @@ -14,12 +14,12 @@ $end_info$ #include "Tests/LinuxSyscalls/x32/Syscalls.h" #include "Tests/LinuxSyscalls/x64/Syscalls.h" #include "Tests/LinuxSyscalls/SignalDelegator.h" +#include "Linux/Utils/ELFContainer.h" #include #include #include #include -#include #include #include diff --git a/Source/Tests/HarnessHelpers.h b/Source/Tests/HarnessHelpers.h index ea7b4d93b..f014bab2d 100644 --- a/Source/Tests/HarnessHelpers.h +++ b/Source/Tests/HarnessHelpers.h @@ -2,6 +2,8 @@ #include "Common/Config.h" #include "Common/MathUtils.h" +#include "Linux/Utils/ELFContainer.h" +#include "Linux/Utils/ELFSymbolDatabase.h" #include #include @@ -17,8 +19,6 @@ #include #include #include -#include -#include #include namespace FEX::HarnessHelper { diff --git a/Source/Tests/LinuxSyscalls/CMakeLists.txt b/Source/Tests/LinuxSyscalls/CMakeLists.txt index 1b706bc7b..7e5c528bd 100644 --- a/Source/Tests/LinuxSyscalls/CMakeLists.txt +++ b/Source/Tests/LinuxSyscalls/CMakeLists.txt @@ -57,7 +57,7 @@ add_library(LinuxEmulation STATIC Syscalls/Stubs.cpp ) -target_link_libraries(LinuxEmulation FEXCore pthread) +target_link_libraries(LinuxEmulation FEXCore pthread FEX_Utils) target_include_directories(LinuxEmulation PRIVATE ${CMAKE_BINARY_DIR}/generated) target_include_directories(LinuxEmulation PRIVATE ${PROJECT_SOURCE_DIR}/External/drm-headers/include/) diff --git a/Source/Tests/LinuxSyscalls/Syscalls.cpp b/Source/Tests/LinuxSyscalls/Syscalls.cpp index 577952a9b..96a5b0e23 100644 --- a/Source/Tests/LinuxSyscalls/Syscalls.cpp +++ b/Source/Tests/LinuxSyscalls/Syscalls.cpp @@ -8,6 +8,7 @@ $end_info$ #include #include "Common/MathUtils.h" +#include "Linux/Utils/ELFContainer.h" #include "Tests/LinuxSyscalls/Syscalls.h" #include "Tests/LinuxSyscalls/Syscalls/Thread.h" @@ -18,7 +19,6 @@ $end_info$ #include #include #include -#include #include #include #include