diff options
author | Yifan Lu | 2017-12-17 15:07:13 -0800 |
---|---|---|
committer | Yifan Lu | 2017-12-17 15:07:13 -0800 |
commit | 3a8869dd09fc369e59e28b9fc9b60add64951775 (patch) | |
tree | 94cbe2db7d720765a1161b42a74af739413fb282 | |
parent | Merge pull request #259 from TheOfficialFloW/master (diff) | |
download | vds-libraries-3a8869dd09fc369e59e28b9fc9b60add64951775.tar.gz |
Added excpmgr for handling aborts
Diffstat (limited to '')
-rw-r--r-- | include/kernel/kernel/excpmgr.h | 46 | ||||
-rw-r--r-- | include/kernel/kernel/threadmgr.h | 14 | ||||
-rw-r--r-- | nids/360/SceExcpmgr.yml | 9 | ||||
-rw-r--r-- | nids/360/SceKernelThreadMgr.yml | 4 |
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 |