summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/kernel/kernel/excpmgr.h46
-rw-r--r--include/kernel/kernel/threadmgr.h14
-rw-r--r--nids/360/SceExcpmgr.yml9
-rw-r--r--nids/360/SceKernelThreadMgr.yml4
4 files changed, 73 insertions, 0 deletions
diff --git a/include/kernel/kernel/excpmgr.h b/include/kernel/kernel/excpmgr.h
new file mode 100644
index 0000000..d9c83ed
--- /dev/null
+++ b/include/kernel/kernel/excpmgr.h
@@ -0,0 +1,46 @@
+#ifndef _PSP2_KERNEL_EXCPMGR_H_
+#define _PSP2_KERNEL_EXCPMGR_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum SceExcpKind {
+ SCE_EXCP_RESET = 0,
+ SCE_EXCP_UNDEF_INSTRUCTION = 1,
+ SCE_EXCP_SVC = 2,
+ SCE_EXCP_PABT = 3,
+ SCE_EXCP_DABT = 4,
+ SCE_EXCP_UNUSED = 5,
+ SCE_EXCP_IRQ = 6,
+ SCE_EXCP_FIQ = 7
+} SceExcpKind;
+
+/***
+ * Get a pointer to SceExcpmgr's internal data
+ *
+ * This is only used by exception handlers.
+ *
+ * @return pointer to excpmgr data section.
+*/
+void *sceExcpmgrGetData(void);
+
+/**
+ * Register an exception handler
+ *
+ * `handler` must point to eight bytes of space followed by the handler code.
+ * The space will be used in the internal linked list structure.
+ *
+ * @param[in] kind The kind of exception
+ * @param[in] priority The priority (must be 0 <= priority < 8), 0 highest
+ * @param handler The handler
+ *
+ * @return Error code or zero on success
+ */
+int sceExcpmgrRegisterHandler(SceExcpKind kind, int priority, void *handler);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PSP2_KERNEL_EXCPMGR_H_ */
diff --git a/include/kernel/kernel/threadmgr.h b/include/kernel/kernel/threadmgr.h
index dc04a01..5bd1790 100644
--- a/include/kernel/kernel/threadmgr.h
+++ b/include/kernel/kernel/threadmgr.h
@@ -98,6 +98,11 @@ typedef enum SceThreadStatus {
SCE_THREAD_KILLED = 32, /* Thread manager has killed the thread (stack overflow) */
} SceThreadStatus;
+typedef struct SceKernelFaultingProcessInfo {
+ SceUID pid;
+ uint32_t unk;
+} SceKernelFaultingProcessInfo;
+
/**
* \brief Create a thread
*
@@ -1061,6 +1066,15 @@ SceUID sceKernelGetProcessId(void);
*/
int sceKernelRunWithStack(int stack_size, int (*to_call)(void *), void *args);
+/**
+ * @brief Call from an abort handler to get info on faulting process
+ *
+ * @param info Output info
+ *
+ * @return Zero on success
+ */
+int sceKernelGetFaultingProcess(SceKernelFaultingProcessInfo *info);
+
#ifdef __cplusplus
}
#endif
diff --git a/nids/360/SceExcpmgr.yml b/nids/360/SceExcpmgr.yml
new file mode 100644
index 0000000..9b0ee15
--- /dev/null
+++ b/nids/360/SceExcpmgr.yml
@@ -0,0 +1,9 @@
+modules:
+ SceExcpmgr:
+ nid: 0xF3D9E37C
+ libraries:
+ SceExcpmgrForKernel:
+ nid: 0x4CA0FDD5
+ functions:
+ sceExcpmgrGetData: 0x08CB30E6
+ sceExcpmgrRegisterHandler: 0x03499636
diff --git a/nids/360/SceKernelThreadMgr.yml b/nids/360/SceKernelThreadMgr.yml
index 04a9ec3..ffe97b6 100644
--- a/nids/360/SceKernelThreadMgr.yml
+++ b/nids/360/SceKernelThreadMgr.yml
@@ -175,3 +175,7 @@ modules:
sceKernelWaitSema: 0x3C8B55A9
sceKernelWaitThreadEnd: 0x3E20216F
sceKernelWaitThreadEndCB: 0x9EF4F62C
+ SceThreadmgrForKernel:
+ nid: 0xA8CA0EFD
+ functions:
+ sceKernelGetFaultingProcess: 0xD8B9AC8D