summaryrefslogtreecommitdiffstats
path: root/debug/risc-v-gsp-rm-vm/greeneye/inject.py
diff options
context:
space:
mode:
Diffstat (limited to 'debug/risc-v-gsp-rm-vm/greeneye/inject.py')
-rw-r--r--debug/risc-v-gsp-rm-vm/greeneye/inject.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/debug/risc-v-gsp-rm-vm/greeneye/inject.py b/debug/risc-v-gsp-rm-vm/greeneye/inject.py
index eb4b16a..fc4d5c0 100644
--- a/debug/risc-v-gsp-rm-vm/greeneye/inject.py
+++ b/debug/risc-v-gsp-rm-vm/greeneye/inject.py
@@ -20,6 +20,9 @@ from .errors import GreenEyeError
#: Symbol the injector calls in a service blob.
ENTRY_SYMBOL = "ge_demo_service_dispatch"
+#: Session attribute holding the per-session service registry (load order).
+SERVICE_REGISTRY_ATTR = "_injected_services"
+
#: Demo uproc control-block field offsets (see firmware/uproc_demo).
CTRL_HANDLERS = 0x150
CTRL_MAILBOX = 0x20
@@ -46,6 +49,36 @@ class InjectedService:
f"entry {self.entry_addr:#x} (offset {self.dispatch_offset:#x}), slot {self.slot}"
)
+ def to_dict(self) -> dict:
+ """Plain-data view for MCP/reporting (no behavior)."""
+ return {
+ "path": self.path,
+ "name": self.name,
+ "load_addr": self.load_addr,
+ "entry_addr": self.entry_addr,
+ "dispatch_offset": self.dispatch_offset,
+ "slot": self.slot,
+ "size": self.size,
+ }
+
+
+def services(session) -> list["InjectedService"]:
+ """Services loaded into ``session`` this process, in load order.
+
+ The registry lives on the session object (``SERVICE_REGISTRY_ATTR``) and is
+ populated by :func:`load_service`; it is process-local and not part of the
+ on-disk session format.
+ """
+ return list(getattr(session, SERVICE_REGISTRY_ATTR, ()) or ())
+
+
+def _register(session, service: InjectedService) -> None:
+ registry = getattr(session, SERVICE_REGISTRY_ATTR, None)
+ if registry is None:
+ registry = []
+ setattr(session, SERVICE_REGISTRY_ATTR, registry)
+ registry.append(service)
+
def load_service(
session,
@@ -110,6 +143,7 @@ def load_service(
slot=slot,
size=total,
)
+ _register(session, service)
return service