diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-24 03:05:29 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-24 03:05:29 +0100 |
| commit | bbe2c77243c541ca7e0075149f5be3262eb89523 (patch) | |
| tree | ae5d59d299344fd19584a2c3642bacd788e841d4 /dev/CompilerKit/AE.h | |
| parent | b5adf16a96b9cbb80c74cf30404ed5bcff03ac34 (diff) | |
feat! breaking changes on necti sources.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/CompilerKit/AE.h')
| -rw-r--r-- | dev/CompilerKit/AE.h | 136 |
1 files changed, 0 insertions, 136 deletions
diff --git a/dev/CompilerKit/AE.h b/dev/CompilerKit/AE.h deleted file mode 100644 index 7b6d9b4..0000000 --- a/dev/CompilerKit/AE.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * ======================================================== - * - * CompilerKit - * Copyright (C) 2024-2025 Amlal El Mahrouss, Licensed under the Apache 2.0 license. - * - * ======================================================== - */ - -#ifndef _NECTI_AE_H_ -#define _NECTI_AE_H_ - -#include <CompilerKit/Defines.h> - -#define kAEVer (0x0121) - -#define kAEMag0 'A' -#define kAEMag1 'E' - -#define kAESymbolLen (255) -#define kAEPad (8) -#define kAEMagLen (2) -#define kAENullType (0x00) - -/// @author Amlal El Mahrouss - -/// @brief -// Advanced Executable File Format for ld64. -// Reloctable by offset is the default strategy. -// You can also relocate at runtime but that's up to the operating system loader. - -namespace CompilerKit { -// @brief Advanced Executable Header -// One thing to keep in mind. -// This object format, is reloctable. -typedef struct AEHeader final { - Char fMagic[kAEMagLen] = {}; - UInt16 fVersion{kAEVer}; - Char fArch{}; - Char fSubArch{}; - SizeType fCount{}; - Char fSize{}; - SizeType fStartCode{}; - SizeType fCodeSize{}; - Char fPad[kAEPad] = {}; -} PACKED AEHeader, *AEHeaderPtr; - -// @brief Advanced Executable Record. -// Could be data, code or bss. -// fKind must be filled with PEF fields. - -typedef struct AERecordHeader final { - Char fName[kAESymbolLen]; - SizeType fKind; - SizeType fSize; - SizeType fFlags; - UIntPtr fOffset; - Char fPad[kAEPad]; -} PACKED AERecordHeader, *AERecordHeaderPtr; - -enum { - kKindRelocationByOffset = 0x23f, - kKindRelocationAtRuntime = 0x34f, -}; -} // namespace CompilerKit - -// provide operator<< for AE - -inline std::ofstream& operator<<(std::ofstream& fp, CompilerKit::AEHeader& container) { - fp.write((char*) &container, sizeof(CompilerKit::AEHeader)); - - return fp; -} - -inline std::ofstream& operator<<(std::ofstream& fp, CompilerKit::AERecordHeader& container) { - fp.write((char*) &container, sizeof(CompilerKit::AERecordHeader)); - - return fp; -} - -inline std::ifstream& operator>>(std::ifstream& fp, CompilerKit::AEHeader& container) { - fp.read((char*) &container, sizeof(CompilerKit::AEHeader)); - return fp; -} - -inline std::ifstream& operator>>(std::ifstream& fp, CompilerKit::AERecordHeader& container) { - fp.read((char*) &container, sizeof(CompilerKit::AERecordHeader)); - return fp; -} - -namespace CompilerKit::Utils { -/** - * @brief AE Reader protocol - * - */ -class AEReadableProtocol final { - public: - std::ifstream file_pointer_; - - public: - explicit AEReadableProtocol() = default; - ~AEReadableProtocol() = default; - - NECTI_COPY_DELETE(AEReadableProtocol); - - /** - * @brief Read AE Record headers. - * - * @param raw the containing buffer - * @param sz it's size (1 = one AERecordHeader, 2 two AERecordHeader(s)) - * @return AERecordHeaderPtr - */ - AERecordHeaderPtr Read(char* raw, std::size_t sz) { - if (!raw) return nullptr; - - return this->Read_<AERecordHeader>(raw, sz * sizeof(AERecordHeader)); - } - - private: - /** - * @brief Implementation of Read for raw classes. - * - * @tparam TypeClass The class to read. - * @param raw the buffer - * @param sz the size - * @return TypeClass* the returning class. - */ - template <typename TypeClass> - TypeClass* Read_(char* raw, std::size_t sz) { - file_pointer_.read(raw, std::streamsize(sz)); - return reinterpret_cast<TypeClass*>(raw); - } -}; -} // namespace CompilerKit::Utils - -#endif /* ifndef _NECTI_AE_H_ */
\ No newline at end of file |
