summaryrefslogtreecommitdiff
path: root/include/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'include/kernel')
-rw-r--r--include/kernel/kernel/excpmgr.h46
-rw-r--r--include/kernel/kernel/threadmgr.h14
2 files changed, 60 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