aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-05-07 09:12:05 +0000
committerFelix Morgner <felix.morgner@ost.ch>2026-05-07 09:12:05 +0000
commit0ea43527332b7e5f1cfec6007506aa54e8f628cb (patch)
tree4d8ba0bd085f7480af728f8e637ab9a1170f9aff
parent22d0be58316125da668302370a1bebc6655880ea (diff)
downloadkernel-0ea43527332b7e5f1cfec6007506aa54e8f628cb.tar.xz
kernel-0ea43527332b7e5f1cfec6007506aa54e8f628cb.zip
debug: enable libstdc++ helpers
-rw-r--r--.vscode/launch.json8
-rw-r--r--libs/kstd/gdb/__init__.py2
-rw-r--r--libs/kstd/gdb/std_types.py13
-rw-r--r--scripts/gdb/teachos.py (renamed from scripts/gdb/load.py)0
-rw-r--r--scripts/gdb/toolchain.py35
5 files changed, 41 insertions, 17 deletions
diff --git a/.vscode/launch.json b/.vscode/launch.json
index d5b2401..90c7520 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -27,8 +27,12 @@
"text": "-file-exec-and-symbols ${command:cmake.buildDirectory}/bin/${command:cmake.buildType}/kernel.sym"
},
{
- "description": "Load custom Python helpers",
- "text": "-interpreter-exec console \"source ${workspaceFolder}/scripts/gdb/load.py\""
+ "description": "Load teachos python helpers",
+ "text": "source ${workspaceFolder}/scripts/gdb/teachos.py"
+ },
+ {
+ "description": "Load toolchain python helpers",
+ "text": "source ${workspaceFolder}/scripts/gdb/toolchain.py"
}
]
}
diff --git a/libs/kstd/gdb/__init__.py b/libs/kstd/gdb/__init__.py
index fc5e8fb..2d61539 100644
--- a/libs/kstd/gdb/__init__.py
+++ b/libs/kstd/gdb/__init__.py
@@ -2,7 +2,6 @@ import gdb.printing
from .vector import KstdVectorPrinter
from .string import KstdStringPrinter
-from .std_types import StdBytePrinter
from .smart_pointers import KstdUniquePtrPrinter, KstdSharedPtrPrinter
@@ -10,7 +9,6 @@ def build_pretty_printers():
pp = gdb.printing.RegexpCollectionPrettyPrinter("kstd")
pp.add_printer("vector", "^kstd::vector<.*>$", KstdVectorPrinter)
pp.add_printer("string", "^kstd::string$", KstdStringPrinter)
- pp.add_printer("std_byte", "^std::byte$", StdBytePrinter)
pp.add_printer("unique_ptr", "^kstd::unique_ptr<.*>$", KstdUniquePtrPrinter)
pp.add_printer("shared_ptr", "^kstd::shared_ptr<.*>$", KstdSharedPtrPrinter)
return pp
diff --git a/libs/kstd/gdb/std_types.py b/libs/kstd/gdb/std_types.py
deleted file mode 100644
index deb5c58..0000000
--- a/libs/kstd/gdb/std_types.py
+++ /dev/null
@@ -1,13 +0,0 @@
-import gdb
-from teachos import TeachOSBasePrinter
-
-
-class StdBytePrinter(TeachOSBasePrinter):
-
- def to_string(self):
- try:
- uint8_type = gdb.lookup_type("unsigned char")
- numeric_value = int(self.value.cast(uint8_type))
- return f"{numeric_value:#04x}"
- except gdb.error:
- return f"<optimized out or unreadable>"
diff --git a/scripts/gdb/load.py b/scripts/gdb/teachos.py
index 355f6b9..355f6b9 100644
--- a/scripts/gdb/load.py
+++ b/scripts/gdb/teachos.py
diff --git a/scripts/gdb/toolchain.py b/scripts/gdb/toolchain.py
new file mode 100644
index 0000000..bbb7810
--- /dev/null
+++ b/scripts/gdb/toolchain.py
@@ -0,0 +1,35 @@
+import os
+import subprocess
+import sys
+
+
+def setup_toolchain_debugging():
+ try:
+ gcc_path = (
+ subprocess.check_output(["which", "x86_64-pc-elf-g++"])
+ .decode("utf-8")
+ .strip()
+ )
+ python_dir = None
+
+ share_path = os.path.join(os.path.dirname(os.path.dirname(gcc_path)), "share")
+ for root, dirs, _ in os.walk(share_path):
+ if "libstdcxx" in dirs:
+ python_dir = root
+ break
+
+ if python_dir:
+ sys.path.insert(0, python_dir)
+
+ from libstdcxx.v6.printers import register_libstdcxx_printers
+ from libstdcxx.v6.xmethods import register_libstdcxx_xmethods
+
+ register_libstdcxx_printers(None)
+ register_libstdcxx_xmethods(None)
+
+ print(f"Loaded Printers & Xmethods from: {python_dir}")
+ except Exception as e:
+ print(f"Debug setup failed: {e}")
+
+
+setup_toolchain_debugging()