summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSunguk Lee2018-10-29 01:52:35 +0900
committerSunguk Lee2018-10-29 01:52:35 +0900
commita0b35969489cd3e6441501b13c53805fae56084c (patch)
tree4edeae85b0b7dd56a33279ed2c13b31d8340076b /include
parentMerge remote-tracking branch 'upstream/pr/359' (diff)
parentadd ksceKernelGetThreadCpuRegisters (diff)
downloadvds-libraries-a0b35969489cd3e6441501b13c53805fae56084c.tar.gz
Merge remote-tracking branch 'upstream/pr/363'
Diffstat (limited to 'include')
-rw-r--r--include/kernel/kernel/threadmgr.h46
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