diff options
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/DebuggerKit/NeKernelContract.h | 18 | ||||
| -rw-r--r-- | dev/DebuggerKit/Platform.h | 9 | ||||
| -rw-r--r-- | dev/DebuggerKit/dk-nekernel.json | 4 | ||||
| -rw-r--r-- | dev/DebuggerKit/src/NeKernelContract.cc | 53 | ||||
| -rw-r--r-- | dev/DebuggerKit/src/NeKernelContractCLI.cc | 5 |
5 files changed, 66 insertions, 23 deletions
diff --git a/dev/DebuggerKit/NeKernelContract.h b/dev/DebuggerKit/NeKernelContract.h index ddea826..0e31140 100644 --- a/dev/DebuggerKit/NeKernelContract.h +++ b/dev/DebuggerKit/NeKernelContract.h @@ -17,12 +17,13 @@ namespace DebuggerKit::NeKernel { class NeKernelContract; namespace Detail { - inline constexpr auto kDebugCmdLen = 256U; - inline constexpr auto kDebugPort = 51820; - inline constexpr auto kDebugMagic = "VMK1.0.0;"; - inline constexpr auto kDebugVersion = 0x0100; - typedef char dk_debug_cmd_type[kDebugCmdLen]; - typedef int64_t dk_socket_type; + inline constexpr auto kDebugCmdLen = 256U; + inline constexpr auto kDebugPort = 51820; + inline constexpr auto kDebugMagic = "VMK1.0.0;"; + inline constexpr uint16_t kDebugVersion = 0x0100; + inline constexpr auto kDebugDelim = ';'; + inline constexpr auto kDebugEnd = '\r'; + typedef int64_t dk_socket_type; } // namespace Detail class NeKernelContract DK_DEBUGGER_CONTRACT { @@ -42,9 +43,8 @@ class NeKernelContract DK_DEBUGGER_CONTRACT { bool Detach() noexcept override; private: - dk_debug_cmd_type m_buffer; - std::string m_kernel_path{}; - dk_socket_type m_socket{0}; + CompilerKit::STLString m_kernel_path{}; + Detail::dk_socket_type m_socket{0}; }; } // namespace DebuggerKit::NeKernel diff --git a/dev/DebuggerKit/Platform.h b/dev/DebuggerKit/Platform.h index 6a3ef7c..04c9187 100644 --- a/dev/DebuggerKit/Platform.h +++ b/dev/DebuggerKit/Platform.h @@ -2,16 +2,15 @@ DebuggerKit (C) 2025 Amlal El Mahrouss File: NeKernelContract.cc - Purpose: NeKernel Debugger + Purpose: NeKernel Debugger Platform include. */ #pragma once -#ifdef DEBUGGERKIT_POSIX +/// @author Amlal El Mahrouss + +#include <arpa/inet.h> #include <sys/socket.h> #include <sys/types.h> #include <sys/un.h> #include <unistd.h> -#else -#error !!! DebuggerKit needs a networking backend !!! -#endif
\ No newline at end of file diff --git a/dev/DebuggerKit/dk-nekernel.json b/dev/DebuggerKit/dk-nekernel.json index 45ee51d..9c3d311 100644 --- a/dev/DebuggerKit/dk-nekernel.json +++ b/dev/DebuggerKit/dk-nekernel.json @@ -1,5 +1,5 @@ { - "compiler_path": "g++", + "compiler_path": "clang++", "compiler_std": "c++20", "headers_path": [ "../DebuggerKit", @@ -10,7 +10,7 @@ "compiler_flags": ["-fPIC", "-shared"], "cpp_macros": [ "__NECTI__=202505", - "CK_USE_STRUCTS=1", + "DK_USE_STRUCTS=1", "DK_NEKERNEL_DEBUGGER", "kDistReleaseBranch=$(git rev-parse --abbrev-ref HEAD)-$(uuidgen)" ] diff --git a/dev/DebuggerKit/src/NeKernelContract.cc b/dev/DebuggerKit/src/NeKernelContract.cc index a071431..53017d6 100644 --- a/dev/DebuggerKit/src/NeKernelContract.cc +++ b/dev/DebuggerKit/src/NeKernelContract.cc @@ -16,6 +16,7 @@ #include <ThirdParty/Dialogs.h> using namespace DebuggerKit::NeKernel; +using namespace DebuggerKit::NeKernel::Detail; NeKernelContract::NeKernelContract() = default; @@ -24,23 +25,67 @@ NeKernelContract::~NeKernelContract() = default; BOOL NeKernelContract::Attach(CompilerKit::STLString path, CompilerKit::STLString argv, ProcessID& pid) noexcept { if (path.empty() || argv.empty()) return NO; - return NO; + + m_socket = ::socket(AF_INET, SOCK_STREAM, 0); + + if (m_socket == -1) return NO; + + struct sockaddr_in server_addr; + + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons(kDebugPort); + + if (::inet_pton(AF_INET, argv.c_str(), &server_addr.sin_addr) <= 0) return NO; + + auto ret = (::connect(m_socket, (struct sockaddr*) &server_addr, sizeof(server_addr)) == -1); + + if (ret) return NO; + + CompilerKit::STLString pkt = Detail::kDebugMagic; + pkt += ";\r"; + + ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; + return ret; } BOOL NeKernelContract::BreakAt(CompilerKit::STLString symbol) noexcept { - return NO; + CompilerKit::STLString pkt = Detail::kDebugMagic; + pkt += ";SYM="; + pkt += symbol; + pkt += ";\r"; + + if (pkt.size() > kDebugCmdLen) return NO; + + auto ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; + return ret; } BOOL NeKernelContract::Break() noexcept { - return NO; + CompilerKit::STLString pkt = Detail::kDebugMagic; + pkt += ";BRK=1;\r"; + + auto ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; + return ret; } BOOL NeKernelContract::Continue() noexcept { + CompilerKit::STLString pkt = Detail::kDebugMagic; + pkt += ";CONT=1;\r"; + + auto ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; + return ret; return NO; } BOOL NeKernelContract::Detach() noexcept { - return NO; + CompilerKit::STLString pkt = Detail::kDebugMagic; + pkt += ";DTCH=1;\r"; + + auto ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; + + if (ret) ::close(m_socket); + + return ret; } #endif // DK_NEKERNEL_DEBUGGER diff --git a/dev/DebuggerKit/src/NeKernelContractCLI.cc b/dev/DebuggerKit/src/NeKernelContractCLI.cc index 0eb04d3..7fea90e 100644 --- a/dev/DebuggerKit/src/NeKernelContractCLI.cc +++ b/dev/DebuggerKit/src/NeKernelContractCLI.cc @@ -43,8 +43,7 @@ NECTI_MODULE(DebuggerNeKernel) { CompilerKit::install_signal(SIGINT, dbgi_ctrlc_handler); - kKernelDebugger.Attach(kPath, "", kPID); - kKernelDebugger.BreakAt("$HANDOVER_START"); + kKernelDebugger.Attach(kPath, argv[4], kPID); while (YES) { if (kKeepRunning) { @@ -99,4 +98,4 @@ NECTI_MODULE(DebuggerNeKernel) { return EXIT_FAILURE; } -#endif // DK_NEKERNEL_DEBUGGER
\ No newline at end of file +#endif // DK_NEKERNEL_DEBUGGER |
