From 3a8869dd09fc369e59e28b9fc9b60add64951775 Mon Sep 17 00:00:00 2001 From: Yifan Lu Date: Sun, 17 Dec 2017 15:07:13 -0800 Subject: Added excpmgr for handling aborts --- include/kernel/kernel/excpmgr.h | 46 +++++++++++++++++++++++++++++++++++++++ include/kernel/kernel/threadmgr.h | 14 ++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 include/kernel/kernel/excpmgr.h (limited to 'include/kernel') 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 -- cgit v1.2.3