diff --git a/Source/Linux/Utils/ELFContainer.cpp b/Source/Linux/Utils/ELFContainer.cpp index a83d2e22b..095f9f463 100644 --- a/Source/Linux/Utils/ELFContainer.cpp +++ b/Source/Linux/Utils/ELFContainer.cpp @@ -8,6 +8,7 @@ $end_info$ #include "Linux/Utils/ELFContainer.h" #include #include +#include #include #include @@ -1295,7 +1296,7 @@ void ELFContainer::PrintDynamicTable() const { } } -void ELFContainer::GetInitLocations(uint64_t GuestELFBase, std::vector *Locations) { +void ELFContainer::GetInitLocations(uint64_t GuestELFBase, fextl::vector *Locations) { if (Mode == MODE_32BIT) { // If INIT exists then add that first for (uint32_t i = 0; i < SectionHeaders.size(); ++i) { diff --git a/Source/Linux/Utils/ELFContainer.h b/Source/Linux/Utils/ELFContainer.h index 16e30b8d6..a2a1fa4a0 100644 --- a/Source/Linux/Utils/ELFContainer.h +++ b/Source/Linux/Utils/ELFContainer.h @@ -1,5 +1,7 @@ #pragma once +#include + #include #include #include @@ -9,7 +11,6 @@ #include #include #include -#include // Add macros which are missing in some versions of #ifndef ELF32_ST_VISIBILITY @@ -76,7 +77,7 @@ public: bool WasLoaded() const { return Loaded; } std::string &InterpreterLocation() { return DynamicLinker; } - std::vector const *GetNecessaryLibs() const { return &NecessaryLibs; } + fextl::vector const *GetNecessaryLibs() const { return &NecessaryLibs; } void PrintRelocationTable() const; @@ -89,7 +90,7 @@ public: using UnwindAdder = std::function; void AddUnwindEntries(UnwindAdder Adder); - void GetInitLocations(uint64_t GuestELFBase, std::vector *Locations); + void GetInitLocations(uint64_t GuestELFBase, fextl::vector *Locations); bool HasTLS() const { return TLSHeader._64 != nullptr; } @@ -139,7 +140,7 @@ private: void PrintInitArray() const; void PrintDynamicTable() const; - std::vector RawFile; + fextl::vector RawFile; union { Elf32_Ehdr _32; Elf64_Ehdr _64; @@ -156,14 +157,14 @@ private: }; ELFMode Mode; - std::vector SectionHeaders; - std::vector ProgramHeaders; - std::vector Symbols; - std::vector UnwindEntries; + fextl::vector SectionHeaders; + fextl::vector ProgramHeaders; + fextl::vector Symbols; + fextl::vector UnwindEntries; std::unordered_map SymbolMap; std::map SymbolMapByAddress; - std::vector NecessaryLibs; + fextl::vector NecessaryLibs; uint64_t MinPhysicalMemoryLocation{0}; uint64_t MaxPhysicalMemoryLocation{0}; diff --git a/Source/Linux/Utils/ELFParser.h b/Source/Linux/Utils/ELFParser.h index ee61ccb7b..13d0ddad0 100644 --- a/Source/Linux/Utils/ELFParser.h +++ b/Source/Linux/Utils/ELFParser.h @@ -1,13 +1,13 @@ #pragma once -#include +#include +#include + #include #include #include #include #include -#include - #include "Linux/Utils/ELFContainer.h" /* @@ -18,7 +18,7 @@ struct ELFParser { Elf64_Ehdr ehdr; - std::vector phdrs; + fextl::vector phdrs; ::ELFLoader::ELFContainer::ELFType type {::ELFLoader::ELFContainer::TYPE_NONE}; std::string InterpreterElf; diff --git a/Source/Linux/Utils/ELFSymbolDatabase.cpp b/Source/Linux/Utils/ELFSymbolDatabase.cpp index f0aa18f00..551693186 100644 --- a/Source/Linux/Utils/ELFSymbolDatabase.cpp +++ b/Source/Linux/Utils/ELFSymbolDatabase.cpp @@ -10,6 +10,7 @@ $end_info$ #include #include #include +#include #include #include @@ -70,8 +71,8 @@ ELFSymbolDatabase::ELFSymbolDatabase(::ELFLoader::ELFContainer *file) return; } - std::vector UnfilledDependencies; - std::vector NewLibraries; + fextl::vector UnfilledDependencies; + fextl::vector NewLibraries; auto FillDependencies = [&UnfilledDependencies, this](ELFInfo *ELF) { for (auto &Lib : *ELF->Container->GetNecessaryLibs()) { @@ -104,7 +105,7 @@ ELFSymbolDatabase::ELFSymbolDatabase(::ELFLoader::ELFContainer *file) NewLibraries.emplace_back(&LocalInfo); do { - std::vector PreviousLibs; + fextl::vector PreviousLibs; PreviousLibs.swap(NewLibraries); for (auto ELF : PreviousLibs) { FillDependencies(ELF); @@ -345,7 +346,7 @@ ELFSymbol const *ELFSymbolDatabase::GetSymbolInRange(RangeType Address) { return Sym->second; } -void ELFSymbolDatabase::GetInitLocations(std::vector *Locations) { +void ELFSymbolDatabase::GetInitLocations(fextl::vector *Locations) { // Walk the initialization order and fill the locations for initializations for (auto ELF : InitializationOrder) { ELF->Container->GetInitLocations(ELF->GuestBase, Locations); diff --git a/Source/Linux/Utils/ELFSymbolDatabase.h b/Source/Linux/Utils/ELFSymbolDatabase.h index ccb873bfc..92490a6c0 100644 --- a/Source/Linux/Utils/ELFSymbolDatabase.h +++ b/Source/Linux/Utils/ELFSymbolDatabase.h @@ -1,5 +1,7 @@ #pragma once +#include + #include "Linux/Utils/ELFContainer.h" #include @@ -8,7 +10,6 @@ #include #include #include -#include namespace ELFLoader { class ELFSymbolDatabase final { @@ -28,7 +29,7 @@ public: ::ELFLoader::ELFSymbol const *GetGlobalSymbolInRange(RangeType Address); ::ELFLoader::ELFSymbol const *GetNoWeakSymbolInRange(RangeType Address); - void GetInitLocations(std::vector *Locations); + void GetInitLocations(fextl::vector *Locations); private: ::ELFLoader::ELFContainer *File; @@ -42,17 +43,17 @@ private: }; ELFInfo LocalInfo; - std::vector DynamicELFInfo; - std::vector InitializationOrder; + fextl::vector DynamicELFInfo; + fextl::vector InitializationOrder; uint64_t ELFMemorySize{}; bool FixedNoReplace {true}; void *ELFBase{}; std::unordered_map NameToELF; - std::vector LibrarySearchPaths; + fextl::vector LibrarySearchPaths; // Symbols - std::vector Symbols; + fextl::vector Symbols; using SymbolTableType = std::unordered_map; SymbolTableType SymbolMap; SymbolTableType SymbolMapGlobalOnly; diff --git a/Source/Tests/ELFCodeLoader.h b/Source/Tests/ELFCodeLoader.h index a3f2ff519..7d9734d90 100644 --- a/Source/Tests/ELFCodeLoader.h +++ b/Source/Tests/ELFCodeLoader.h @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -54,7 +55,7 @@ class ELFCodeLoader final : public FEXCore::CodeLoader { uintptr_t BrkStart; uintptr_t StackPointer; - size_t CalculateTotalElfSize(const std::vector &headers) + size_t CalculateTotalElfSize(const fextl::vector &headers) { auto first = std::find_if(headers.begin(), headers.end(), [](const Elf64_Phdr &Header) { return Header.p_type == PT_LOAD; }); auto last = std::find_if(headers.rbegin(), headers.rend(), [](const Elf64_Phdr &Header) { return Header.p_type == PT_LOAD; });