summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <113760121+Amlal-ElMahrouss@users.noreply.github.com>2024-03-23 00:51:38 +0100
committerAmlal El Mahrouss <113760121+Amlal-ElMahrouss@users.noreply.github.com>2024-03-23 00:51:38 +0100
commitf24980a495c0f7fe99213931b73aef6cbe6bbd99 (patch)
tree792fec04e4e2fd28fd9a05460a0981b91873349f
parent5379bbf4809f64f05c0d874b24f4d4d1c63985bc (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.json6
-rw-r--r--Headers/StdKit/PEF.hpp9
-rw-r--r--Sources/link.cc5
-rw-r--r--Sources/ppcasm.cc55
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;
+}