From c8391bfb673bb9aefa47613ca65ed03ff6f9ecca Mon Sep 17 00:00:00 2001 From: boykopovar Date: Sun, 6 Sep 2026 12:51:24 +0300 Subject: [PATCH] refactor(libc): remove non-std link.h --- .../libc/include/specifics/linux/ElfTypes.hpp | 32 +++++++++++++++++++ core/libs/prx/libc/src/exception/Unwind.cpp | 2 +- .../src/specifics/linux/DlIteratePhdr.cpp | 2 +- 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 core/libs/prx/libc/include/specifics/linux/ElfTypes.hpp diff --git a/core/libs/prx/libc/include/specifics/linux/ElfTypes.hpp b/core/libs/prx/libc/include/specifics/linux/ElfTypes.hpp new file mode 100644 index 000000000..5263b92c4 --- /dev/null +++ b/core/libs/prx/libc/include/specifics/linux/ElfTypes.hpp @@ -0,0 +1,32 @@ +#ifndef PRX_LIBC_INCLUDE_SPECIFICS_LINUX_ELFTYPES_HPP +#define PRX_LIBC_INCLUDE_SPECIFICS_LINUX_ELFTYPES_HPP + +#include +#include + +struct Elf64_Phdr { + std::uint32_t p_type; + std::uint32_t p_flags; + std::uint64_t p_offset; + std::uint64_t p_vaddr; + std::uint64_t p_paddr; + std::uint64_t p_filesz; + std::uint64_t p_memsz; + std::uint64_t p_align; +}; + +struct dl_phdr_info { + std::uintptr_t dlpi_addr; + const char* dlpi_name; + const Elf64_Phdr* dlpi_phdr; + std::uint16_t dlpi_phnum; +}; + +static constexpr std::uint32_t PT_LOAD = 1; +static constexpr std::uint32_t PT_GNU_EH_FRAME = 0x6474e550; +static constexpr std::uint32_t PF_X = 1; +static constexpr std::uint32_t PF_W = 2; + +extern "C" int dl_iterate_phdr(int (*callback)(dl_phdr_info*, std::size_t, void*), void* data); + +#endif diff --git a/core/libs/prx/libc/src/exception/Unwind.cpp b/core/libs/prx/libc/src/exception/Unwind.cpp index 76530fe7b..1384bc233 100644 --- a/core/libs/prx/libc/src/exception/Unwind.cpp +++ b/core/libs/prx/libc/src/exception/Unwind.cpp @@ -1,6 +1,6 @@ #include "prx/libc/include/exceptions/Unwind.hpp" +#include "prx/libc/include/specifics/linux/ElfTypes.hpp" #include "prx/libc/src/specifics/x86_64/RegisterContext.cpp" -#include namespace LibcUnwind { struct Lookup { Word pc; const Byte* fde {}; Word text {}; Word data {}; }; diff --git a/core/libs/prx/libc/src/specifics/linux/DlIteratePhdr.cpp b/core/libs/prx/libc/src/specifics/linux/DlIteratePhdr.cpp index 5036adf59..995362bf5 100644 --- a/core/libs/prx/libc/src/specifics/linux/DlIteratePhdr.cpp +++ b/core/libs/prx/libc/src/specifics/linux/DlIteratePhdr.cpp @@ -1,4 +1,4 @@ -#include +#include "prx/libc/include/specifics/linux/ElfTypes.hpp" #include extern "C" {