diff options
| -rw-r--r-- | docs/drawio/DEBUGGERKIT_DESIGN.drawio | 4 | ||||
| -rw-r--r-- | include/CompilerKit/AE.h | 6 | ||||
| -rw-r--r-- | include/CompilerKit/CodeGenerator.h | 25 | ||||
| -rw-r--r-- | include/CompilerKit/Detail/Config.h | 4 | ||||
| -rw-r--r-- | include/CompilerKit/Detail/PreConfig.h | 6 | ||||
| -rw-r--r-- | include/CompilerKit/Utilities/DLL.h | 53 | ||||
| -rw-r--r-- | include/DebuggerKit/DebuggerContract.h | 8 | ||||
| -rw-r--r-- | include/DebuggerKit/POSIXMachContract.h | 14 | ||||
| -rw-r--r-- | src/.keep | 0 | ||||
| -rw-r--r-- | src/CompilerKit/src/DyanmicLinkers/DynamicLinker64+PEF.cc | 10 | ||||
| -rw-r--r-- | src/Tools/pef-amd64-cxxdrv.cc | 6 | ||||
| -rw-r--r-- | src/Tools/pef-arm64-cdrv.cc | 6 |
12 files changed, 78 insertions, 64 deletions
diff --git a/docs/drawio/DEBUGGERKIT_DESIGN.drawio b/docs/drawio/DEBUGGERKIT_DESIGN.drawio index 0b3802d..158e4ba 100644 --- a/docs/drawio/DEBUGGERKIT_DESIGN.drawio +++ b/docs/drawio/DEBUGGERKIT_DESIGN.drawio @@ -30,7 +30,7 @@ <mxCell id="9" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="8" target="4"> <mxGeometry relative="1" as="geometry"/> </mxCell> - <mxCell id="8" value="Entrypoint of B" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxCell id="8" value="EntryT of B" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="620" y="230" width="120" height="60" as="geometry"/> </mxCell> <mxCell id="13" style="edgeStyle=none;html=1;" edge="1" parent="1" source="11"> @@ -38,7 +38,7 @@ <mxPoint x="340" y="290" as="targetPoint"/> </mxGeometry> </mxCell> - <mxCell id="11" value="Entrypoint of A" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxCell id="11" value="EntryT of A" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="280" y="330" width="120" height="60" as="geometry"/> </mxCell> </root> diff --git a/include/CompilerKit/AE.h b/include/CompilerKit/AE.h index cf6e71b..c1c6ed9 100644 --- a/include/CompilerKit/AE.h +++ b/include/CompilerKit/AE.h @@ -97,13 +97,13 @@ namespace CompilerKit::Utils { */ class AEReadableProtocol final { public: - std::ifstream file_pointer_; + std::ifstream fFilePtr; public: explicit AEReadableProtocol() = default; ~AEReadableProtocol() = default; - NECTI_COPY_DELETE(AEReadableProtocol); + NECTI_COPY_DELETE(AEReadableProtocol) /** * @brief Read AE Record headers. @@ -129,7 +129,7 @@ class AEReadableProtocol final { */ template <typename TypeClass> TypeClass* Read_(char* raw, std::size_t sz) { - file_pointer_.read(raw, std::streamsize(sz)); + fFilePtr.read(raw, std::streamsize(sz)); return reinterpret_cast<TypeClass*>(raw); } }; diff --git a/include/CompilerKit/CodeGenerator.h b/include/CompilerKit/CodeGenerator.h index 259c52d..8119c58 100644 --- a/include/CompilerKit/CodeGenerator.h +++ b/include/CompilerKit/CodeGenerator.h @@ -11,7 +11,7 @@ #include <cstring> #define CK_ASSEMBLY_INTERFACE : public ::CompilerKit::IAssembly -#define CK_ENCODER : public ::CompilerKit::EncoderInterface +#define CK_ENCODER : public ::CompilerKit::IAssemblyEncoder namespace CompilerKit { class AssemblyFactory; @@ -75,6 +75,11 @@ class IAssembly { union NumberCastBase { NumberCastBase() = default; ~NumberCastBase() = default; + + static constexpr auto kLimit = 1; + + Char number[kLimit]; + UInt64 raw; }; union NumberCast64 final { @@ -126,12 +131,12 @@ union NumberCast8 final { /// =========================================================== /// /// @brief Assembly encoder interface. /// =========================================================== /// -class EncoderInterface { +class IAssemblyEncoder { public: - explicit EncoderInterface() = default; - virtual ~EncoderInterface() = default; + explicit IAssemblyEncoder() = default; + virtual ~IAssemblyEncoder() = default; - NECTI_COPY_DEFAULT(EncoderInterface); + NECTI_COPY_DEFAULT(IAssemblyEncoder); virtual STLString CheckLine(STLString line, STLString file) = 0; virtual bool WriteLine(STLString line, STLString file) = 0; @@ -144,7 +149,7 @@ class EncoderInterface { #ifdef __ASM_NEED_AMD64__ -class EncoderAMD64 final : public EncoderInterface { +class EncoderAMD64 final : public IAssemblyEncoder { public: explicit EncoderAMD64() = default; ~EncoderAMD64() override = default; @@ -164,7 +169,7 @@ class EncoderAMD64 final : public EncoderInterface { #ifdef __ASM_NEED_ARM64__ -class EncoderARM64 final : public EncoderInterface { +class EncoderARM64 final : public IAssemblyEncoder { public: explicit EncoderARM64() = default; ~EncoderARM64() override = default; @@ -180,7 +185,7 @@ class EncoderARM64 final : public EncoderInterface { #ifdef __ASM_NEED_64x0__ -class Encoder64x0 final : public EncoderInterface { +class Encoder64x0 final : public IAssemblyEncoder { public: explicit Encoder64x0() = default; ~Encoder64x0() override = default; @@ -196,7 +201,7 @@ class Encoder64x0 final : public EncoderInterface { #ifdef __ASM_NEED_32x0__ -class Encoder32x0 final : public EncoderInterface { +class Encoder32x0 final : public IAssemblyEncoder { public: explicit Encoder32x0() = default; ~Encoder32x0() override = default; @@ -212,7 +217,7 @@ class Encoder32x0 final : public EncoderInterface { #ifdef __ASM_NEED_PPC__ -class EncoderPowerPC final : public EncoderInterface { +class EncoderPowerPC final : public IAssemblyEncoder { public: explicit EncoderPowerPC() = default; ~EncoderPowerPC() override = default; diff --git a/include/CompilerKit/Detail/Config.h b/include/CompilerKit/Detail/Config.h index 74d0724..198db7c 100644 --- a/include/CompilerKit/Detail/Config.h +++ b/include/CompilerKit/Detail/Config.h @@ -15,8 +15,8 @@ #include <CompilerKit/Detail/PreConfig.h> namespace CompilerKit { -inline constexpr int kBaseYear = 1900; -using STLString = std::string; +inline static constexpr int kBaseYear = 1900; +using STLString = std::string; inline STLString current_date() noexcept { auto time_data = time(nullptr); diff --git a/include/CompilerKit/Detail/PreConfig.h b/include/CompilerKit/Detail/PreConfig.h index 6742c53..0279072 100644 --- a/include/CompilerKit/Detail/PreConfig.h +++ b/include/CompilerKit/Detail/PreConfig.h @@ -4,7 +4,8 @@ ======================================== */ -#pragma once +#ifndef __COMPILERKIT_PRECONFIG_H__ +#define __COMPILERKIT_PRECONFIG_H__ #ifndef Yes #define Yes true @@ -116,5 +117,8 @@ KLASS& operator=(KLASS&&) = default; \ KLASS(KLASS&&) = default; +#define CK_IMPORT_CXX extern "C++" #define CK_IMPORT_C extern "C" #define CK_IMPORT extern + +#endif // __COMPILERKIT_PRECONFIG_H__
\ No newline at end of file diff --git a/include/CompilerKit/Utilities/DLL.h b/include/CompilerKit/Utilities/DLL.h index 490017e..8e32d2b 100644 --- a/include/CompilerKit/Utilities/DLL.h +++ b/include/CompilerKit/Utilities/DLL.h @@ -11,52 +11,55 @@ #include <mutex> namespace CompilerKit { -struct DLLTraits final { - typedef Int32 (*Entrypoint)(Int32 argc, Char const* argv[]); - using DLL = VoidPtr; +class DLLLoader final { + public: + typedef Int32 (*EntryT)(Int32 argc, Char const* argv[]); + using DLL = VoidPtr; + using Mutex = std::mutex; + EntryT fEntrypoint{nullptr}; - DLL fDylib{nullptr}; - Entrypoint fEntrypoint{nullptr}; - std::mutex fMutex; + private: + DLL mDLL{nullptr}; + Mutex mMutex; - explicit operator bool() { return fDylib && fEntrypoint; } - - DLLTraits& operator()(const Char* path, const Char* fEntrypoint) { - std::lock_guard<std::mutex> lock(this->fMutex); + public: + explicit operator bool() { return this->mDLL && this->fEntrypoint; } + DLLLoader& operator()(const Char* path, const Char* fEntrypoint) { if (!path || !fEntrypoint) return *this; - if (this->fDylib) { - dlclose(this->fDylib); - this->fDylib = nullptr; + std::lock_guard<Mutex> lock(this->mMutex); + + if (this->mDLL) { + this->Destroy(); } - this->fDylib = dlopen(path, RTLD_LAZY); + this->mDLL = ::dlopen(path, RTLD_LAZY); - if (!this->fDylib) { + if (!this->mDLL) { return *this; } - this->fEntrypoint = (Entrypoint) dlsym(this->fDylib, fEntrypoint); + this->fEntrypoint = reinterpret_cast<EntryT>(::dlsym(this->mDLL, fEntrypoint)); if (!this->fEntrypoint) { - dlclose(this->fDylib); - this->fDylib = nullptr; - + this->Destroy(); return *this; } return *this; } - NECTI_COPY_DELETE(DLLTraits) + NECTI_COPY_DELETE(DLLLoader) - explicit DLLTraits() = default; + explicit DLLLoader() = default; + ~DLLLoader() { this->Destroy(); } - ~DLLTraits() { - if (this->fDylib) { - dlclose(this->fDylib); - this->fDylib = nullptr; + private: + void Destroy() noexcept { + if (this->mDLL) { + ::dlclose(this->mDLL); + this->mDLL = nullptr; } this->fEntrypoint = nullptr; diff --git a/include/DebuggerKit/DebuggerContract.h b/include/DebuggerKit/DebuggerContract.h index e205e26..d172f78 100644 --- a/include/DebuggerKit/DebuggerContract.h +++ b/include/DebuggerKit/DebuggerContract.h @@ -34,10 +34,12 @@ class IDebuggerContract { virtual bool Continue() noexcept = 0; virtual bool Detach() noexcept = 0; - virtual std::unordered_map<uintptr_t, uintptr_t>& Get() { return m_breakpoints; } + using BreakpointMap = std::unordered_map<uintptr_t, uintptr_t>; + + virtual BreakpointMap& Get() { return mBreakpoints; } protected: - ProcessID m_pid{(ProcessID) ~0}; - std::unordered_map<uintptr_t, uintptr_t> m_breakpoints; + ProcessID mPid{(ProcessID) ~0}; + BreakpointMap mBreakpoints; }; } // namespace DebuggerKit diff --git a/include/DebuggerKit/POSIXMachContract.h b/include/DebuggerKit/POSIXMachContract.h index abf23b5..f2ae8a2 100644 --- a/include/DebuggerKit/POSIXMachContract.h +++ b/include/DebuggerKit/POSIXMachContract.h @@ -67,9 +67,9 @@ class POSIXMachContract final DK_DEBUGGER_CONTRACT { } m_path = path; - m_pid = pid; + mPid = pid; - pid = this->m_pid; + pid = this->mPid; return true; } @@ -99,7 +99,7 @@ class POSIXMachContract final DK_DEBUGGER_CONTRACT { #ifdef __APPLE__ task_read_t task; - task_for_pid(mach_task_self(), m_pid, &task); + task_for_pid(mach_task_self(), mPid, &task); uint32_t brk_inst = 0xD43E0000; @@ -118,7 +118,7 @@ class POSIXMachContract final DK_DEBUGGER_CONTRACT { #ifdef __APPLE__ bool Break() noexcept override { task_read_t task; - task_for_pid(mach_task_self(), m_pid, &task); + task_for_pid(mach_task_self(), mPid, &task); kern_return_t ret = task_suspend(task); @@ -127,7 +127,7 @@ class POSIXMachContract final DK_DEBUGGER_CONTRACT { bool Continue() noexcept override { task_read_t task; - task_for_pid(mach_task_self(), m_pid, &task); + task_for_pid(mach_task_self(), mPid, &task); kern_return_t ret = task_resume(task); @@ -138,7 +138,7 @@ class POSIXMachContract final DK_DEBUGGER_CONTRACT { this->Continue(); task_read_t task; - task_for_pid(mach_task_self(), m_pid, &task); + task_for_pid(mach_task_self(), mPid, &task); kern_return_t kr = mach_port_deallocate(mach_task_self(), task); @@ -147,7 +147,7 @@ class POSIXMachContract final DK_DEBUGGER_CONTRACT { #endif private: - ProcessID m_pid{0}; + ProcessID mPid{0}; CompilerKit::STLString m_path; }; } // namespace DebuggerKit::POSIX diff --git a/src/.keep b/src/.keep deleted file mode 100644 index e69de29..0000000 --- a/src/.keep +++ /dev/null diff --git a/src/CompilerKit/src/DyanmicLinkers/DynamicLinker64+PEF.cc b/src/CompilerKit/src/DyanmicLinkers/DynamicLinker64+PEF.cc index 28e12a1..0fffa84 100644 --- a/src/CompilerKit/src/DyanmicLinkers/DynamicLinker64+PEF.cc +++ b/src/CompilerKit/src/DyanmicLinkers/DynamicLinker64+PEF.cc @@ -235,8 +235,8 @@ NECTI_MODULE(DynamicLinker64PEF) { CompilerKit::AEHeader hdr{}; - reader_protocol.file_pointer_ = std::ifstream(objectFile, std::ifstream::binary); - reader_protocol.file_pointer_ >> hdr; + reader_protocol.fFilePtr = std::ifstream(objectFile, std::ifstream::binary); + reader_protocol.fFilePtr >> hdr; if (hdr.fMagic[0] == kAEMag0 && hdr.fMagic[1] == kAEMag1 && hdr.fSize == sizeof(CompilerKit::AEHeader) && hdr.fMagic[2] == kAEMag2) { @@ -331,14 +331,14 @@ NECTI_MODULE(DynamicLinker64PEF) { std::vector<char> bytes; bytes.resize(hdr.fCodeSize); - reader_protocol.file_pointer_.seekg(std::streamsize(hdr.fStartCode)); - reader_protocol.file_pointer_.read(bytes.data(), std::streamsize(hdr.fCodeSize)); + reader_protocol.fFilePtr.seekg(std::streamsize(hdr.fStartCode)); + reader_protocol.fFilePtr.read(bytes.data(), std::streamsize(hdr.fCodeSize)); kObjectBytes.push_back({.mBlob = bytes, .mOffset = hdr.fStartCode}); // Blob was written, close fp. - reader_protocol.file_pointer_.close(); + reader_protocol.fFilePtr.close(); continue; } diff --git a/src/Tools/pef-amd64-cxxdrv.cc b/src/Tools/pef-amd64-cxxdrv.cc index 9e8c0da..51d6c53 100644 --- a/src/Tools/pef-amd64-cxxdrv.cc +++ b/src/Tools/pef-amd64-cxxdrv.cc @@ -21,11 +21,11 @@ static auto kPath = "/usr/lib/libCompilerKit.so"; static auto kSymbol = "CompilerCPlusPlusAMD64"; Int32 main(Int32 argc, Char const* argv[]) { - CompilerKit::DLLTraits dylib; + CompilerKit::DLLLoader dylib; dylib(kPath, kSymbol); - CompilerKit::DLLTraits::Entrypoint entrypoint_cxx = - reinterpret_cast<CompilerKit::DLLTraits::Entrypoint>(dylib.fEntrypoint); + CompilerKit::DLLLoader::EntryT entrypoint_cxx = + reinterpret_cast<CompilerKit::DLLLoader::EntryT>(dylib.fEntrypoint); if (!entrypoint_cxx) { kStdOut; diff --git a/src/Tools/pef-arm64-cdrv.cc b/src/Tools/pef-arm64-cdrv.cc index 3e6c3b2..08aaa75 100644 --- a/src/Tools/pef-arm64-cdrv.cc +++ b/src/Tools/pef-arm64-cdrv.cc @@ -21,11 +21,11 @@ static auto kPath = "/usr/lib/libCompilerKit.so"; static auto kSymbol = "CompilerCLangARM64"; Int32 main(Int32 argc, Char const* argv[]) { - CompilerKit::DLLTraits dylib; + CompilerKit::DLLLoader dylib; dylib(kPath, kSymbol); - CompilerKit::DLLTraits::Entrypoint entrypoint_cxx = - reinterpret_cast<CompilerKit::DLLTraits::Entrypoint>(dylib.fEntrypoint); + CompilerKit::DLLLoader::EntryT entrypoint_cxx = + reinterpret_cast<CompilerKit::DLLLoader::EntryT>(dylib.fEntrypoint); if (!entrypoint_cxx) { kStdOut; |
