diff options
author | Sunguk Lee | 2018-10-29 01:52:35 +0900 |
---|---|---|
committer | Sunguk Lee | 2018-10-29 01:52:35 +0900 |
commit | a0b35969489cd3e6441501b13c53805fae56084c (patch) | |
tree | 4edeae85b0b7dd56a33279ed2c13b31d8340076b /include | |
parent | Merge remote-tracking branch 'upstream/pr/359' (diff) | |
parent | add ksceKernelGetThreadCpuRegisters (diff) | |
download | vds-libraries-a0b35969489cd3e6441501b13c53805fae56084c.tar.gz |
Merge remote-tracking branch 'upstream/pr/363'
Diffstat (limited to 'include')
-rw-r--r-- | include/kernel/kernel/threadmgr.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/include/kernel/kernel/threadmgr.h b/include/kernel/kernel/threadmgr.h index 66fc0f2..9f36da0 100644 --- a/include/kernel/kernel/threadmgr.h +++ b/include/kernel/kernel/threadmgr.h @@ -862,6 +862,52 @@ SceUID sceKernelGetProcessMainThread(SceUID pid); */ int sceKernelGetThreadIdList(SceUID pid, SceUID *ids, int n, int *copy_count); +/** Structure representing all ARM registers */ +typedef struct ArmCpuRegisters +{ + uint32_t r0; + uint32_t r1; + uint32_t r2; + uint32_t r3; + uint32_t r4; + uint32_t r5; + uint32_t r6; + uint32_t r7; + uint32_t r8; + uint32_t r9; + uint32_t r10; + uint32_t r11; + uint32_t r12; + uint32_t sp; + uint32_t lr; + uint32_t pc; + uint32_t cpsr; + uint32_t unk; +} ArmCpuRegisters; + +/** Structure containing a threads register states. */ +typedef struct ThreadCpuRegisters +{ + /** Set of registers used for user mode. */ + ArmCpuRegisters user; + + /** Set of registers used for kernel mode. */ + ArmCpuRegisters kernel; +} ThreadCpuRegisters; + +/** + * @brief Query the state of the registers for a suspended thread. + * + * The registers returned are the user/kernel set for the requested thread. + * It's not certain that user/kernel is correct representation, instead it could be current/exception. + * The thread provided must be suspended for this function to succeed. + * + * @param[in] thid The thread to query. + * @param[out] registers The set of registers belonging to the thread. + * @return Zero on success, else < 0 on error. + */ +int sceKernelGetThreadCpuRegisters(SceUID thid, ThreadCpuRegisters *registers); + #ifdef __cplusplus } #endif |