diff options
| author | Amlal El Mahrouss <113760121+Amlal-ElMahrouss@users.noreply.github.com> | 2024-03-23 00:51:38 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <113760121+Amlal-ElMahrouss@users.noreply.github.com> | 2024-03-23 00:51:38 +0100 |
| commit | f24980a495c0f7fe99213931b73aef6cbe6bbd99 (patch) | |
| tree | 792fec04e4e2fd28fd9a05460a0981b91873349f | |
| parent | 5379bbf4809f64f05c0d874b24f4d4d1c63985bc (diff) | |
unstable: See below.
- Breaking changes of the PEF format.
- Adding PowerPC target for assembler.
- Add PowerPC code type in PEF and linker.
- Fix include path inside includePath.
Signed-off-by: Amlal El Mahrouss <113760121+Amlal-ElMahrouss@users.noreply.github.com>
| -rw-r--r-- | .vscode/c_cpp_properties.json | 6 | ||||
| -rw-r--r-- | Headers/StdKit/PEF.hpp | 9 | ||||
| -rw-r--r-- | Sources/link.cc | 5 | ||||
| -rw-r--r-- | Sources/ppcasm.cc | 55 |
4 files changed, 69 insertions, 6 deletions
diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 94aaa5e..aa34da2 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -3,7 +3,8 @@ { "name": "Macintosh (CLang)", "includePath": [ - "${workspaceFolder}/Headers/**" + "${workspaceFolder}/Headers/**", + "${workspaceFolder}/**" ], "defines": [], "compilerPath": "/usr/bin/clang", @@ -14,7 +15,8 @@ { "name": "Windows (Cygwin)", "includePath": [ - "${workspaceFolder}/Headers/**" + "${workspaceFolder}/Headers/**", + "${workspaceFolder}/**" ], "defines": [], "compilerPath": "C:/cygwin64/bin/g++.exe", diff --git a/Headers/StdKit/PEF.hpp b/Headers/StdKit/PEF.hpp index 1c80ff7..ece9ed3 100644 --- a/Headers/StdKit/PEF.hpp +++ b/Headers/StdKit/PEF.hpp @@ -20,7 +20,7 @@ #define kPefExt ".exe" #define kPefDylibExt ".dll" #define kPefObjectExt ".obj" -#define kPefDebugExt ".pdb" +#define kPefDebugExt ".dbg" #define kPefMagicLen 3 @@ -36,15 +36,16 @@ enum { kPefArchRISCV, kPefArch64000, /* 64x0 RISC architecture. */ kPefArch32000, - kPefArchCount = (kPefArch32000 - kPefArchIntel86S) + 1, + kPefArchPowerPC, /* 64-bit PowerPC architecture. */ + kPefArchCount = (kPefArchPowerPC - kPefArchIntel86S) + 1, kPefArchInvalid = 0xFF, }; enum { - kPefKindExec = 1, /* .o/.pef/<none> */ + kPefKindExec = 1, /* .exe */ kPefKindSharedObject = 2, /* .lib */ kPefKindObject = 4, /* .obj */ - kPefKindDwarf = 5, /* .dsym */ + kPefKindDebug = 5, /* .dbg */ kPefKindDriver = 6, kPefKindCount, }; diff --git a/Sources/link.cc b/Sources/link.cc index b36b0f0..ceb7c3f 100644 --- a/Sources/link.cc +++ b/Sources/link.cc @@ -91,6 +91,7 @@ MPCC_MODULE(HCoreLinker) { kStdOut << "-64x0: Output as 64x0 PEF.\n"; kStdOut << "-amd64: Output as AMD64 PEF.\n"; kStdOut << "-rv64: Output as RISC-V 64 PEF.\n"; + kStdOut << "-ppc64: Output as PowerPC 64 PEF.\n"; kStdOut << "-output-file: Select output file name.\n"; return 0; @@ -114,6 +115,10 @@ MPCC_MODULE(HCoreLinker) { kArch = CompilerKit::kPefArch32000; continue; + } else if (StringCompare(argv[i], "-ppc64") == 0) { + kArch = CompilerKit::kPefArchPowerPC; + + continue; } else if (StringCompare(argv[i], "-verbose") == 0) { kVerbose = true; diff --git a/Sources/ppcasm.cc b/Sources/ppcasm.cc new file mode 100644 index 0000000..b774f4f --- /dev/null +++ b/Sources/ppcasm.cc @@ -0,0 +1,55 @@ +/* ------------------------------------------- + + Copyright Mahrouss Logic + +------------------------------------------- */ + +/// bugs: 0 + +///////////////////////////////////////////////////////////////////////////////////////// + +// @file ppcasm.cxx +// @author Amlal El Mahrouss +// @brief PowerPC 64 Assembler. + +// REMINDER: when dealing with an undefined symbol use (string +// size):LinkerFindSymbol:(string) so that ld will look for it. + +///////////////////////////////////////////////////////////////////////////////////////// + +#define __ASM_NEED_PPC64__ 1 + +#include <Headers/AsmKit/Arch/32x0.hpp> +#include <Headers/ParserKit.hpp> +#include <Headers/StdKit/AE.hpp> +#include <Headers/StdKit/PEF.hpp> +#include <filesystem> +#include <fstream> +#include <iostream> +#include <vector> +#include <memory> + + +///////////////////// + +// ANSI ESCAPE CODES + +///////////////////// + +#define kBlank "\e[0;30m" +#define kRed "\e[0;31m" +#define kWhite "\e[0;97m" +#define kYellow "\e[0;33m" + +#define kStdOut (std::cout << kWhite) +#define kStdErr (std::cout << kRed) + +///////////////////////////////////////////////////////////////////////////////////////// + +// @brief PowerPC 64 Assembler entrypoint, the program/module starts here. + +///////////////////////////////////////////////////////////////////////////////////////// + +MPCC_MODULE(HCoreAssemblerPowerPC64) { + return 0; +} |
