[gcc(refs/users/ibuclaw/heads/darwin)] D, Darwin, PPC : Add PCP64 thread state.
Iain Buclaw
ibuclaw@gcc.gnu.org
Sun Mar 7 17:02:40 GMT 2021
https://gcc.gnu.org/g:bb98f0db09d340cbf7706dc10ec9fc6dc2ff47ff
commit bb98f0db09d340cbf7706dc10ec9fc6dc2ff47ff
Author: Iain Sandoe <iain@sandoe.co.uk>
Date: Fri Dec 11 00:40:37 2020 +0000
D, Darwin, PPC : Add PCP64 thread state.
This updates the thread bindings to recognise the larger ppc64
thread state.
libphobos/ChangeLog:
* libdruntime/core/sys/darwin/mach/thread_act.d: Add ppc64
thread state.
Diff:
---
.../libdruntime/core/sys/darwin/mach/thread_act.d | 66 ++++++++++++++++++++++
1 file changed, 66 insertions(+)
diff --git a/libphobos/libdruntime/core/sys/darwin/mach/thread_act.d b/libphobos/libdruntime/core/sys/darwin/mach/thread_act.d
index b61673fb4f1..d455d1b8303 100644
--- a/libphobos/libdruntime/core/sys/darwin/mach/thread_act.d
+++ b/libphobos/libdruntime/core/sys/darwin/mach/thread_act.d
@@ -38,6 +38,10 @@ version (AArch64)
version = AnyARM;
version (ARM)
version = AnyARM;
+version (PPC)
+ version = AnyPPC;
+version (PPC64)
+ version = AnyPPC;
version (i386)
{
@@ -235,3 +239,65 @@ else version (AnyARM)
kern_return_t thread_resume(thread_act_t);
kern_return_t thread_get_state(thread_act_t, thread_state_flavor_t, thread_state_t*, mach_msg_type_number_t*);
}
+else version (AnyPPC)
+{
+ alias thread_act_t = mach_port_t;
+ alias thread_state_t = void;
+ alias thread_state_flavor_t = int;
+ alias mach_msg_type_number_t = natural_t;
+
+ enum
+ {
+ PPC_THREAD_STATE = 1,
+ PPC_FLOAT_STATE = 2,
+ PPC_EXCEPTION_STATE = 3,
+ PPC_VECTOR_STATE = 4,
+ PPC_THREAD_STATE64 = 5,
+ PPC_EXCEPTION_STATE64 = 6,
+ THREAD_STATE_NONE = 7
+ }
+
+ struct ppc_thread_state_t
+ {
+ uint srr0; /// Instruction address register (PC)
+ uint srr1; /// Machine state register (supervisor)
+ uint[32] r; /// General purpose register r0-r31
+ uint cr; /// Condition register
+ uint xer; /// User's integer exception register
+ uint lr; /// Link register
+ uint ctr; /// Count register
+ uint mq; /// MQ register (601 only)
+ uint vrsave; /// Vector save register
+ }
+
+ alias ppc_thread_state32_t = ppc_thread_state_t;
+
+ struct ppc_thread_state64_t
+ {
+ ulong srr0; /// Instruction address register (PC)
+ ulong srr1; /// Machine state register (supervisor)
+ ulong[32] r; /// General purpose register r0-r31
+ uint cr; /// Condition register
+ uint pad0;
+ ulong xer; /// User's integer exception register
+ ulong lr; /// Link register
+ ulong ctr; /// Count register
+ uint vrsave; /// Vector save register
+ uint pad1;
+ }
+
+ enum : mach_msg_type_number_t
+ {
+ PPC_THREAD_STATE_COUNT = cast(mach_msg_type_number_t) (ppc_thread_state_t.sizeof / uint.sizeof),
+ PPC_THREAD_STATE32_COUNT = cast(mach_msg_type_number_t) (ppc_thread_state32_t.sizeof / uint.sizeof),
+ PPC_THREAD_STATE64_COUNT = cast(mach_msg_type_number_t) (ppc_thread_state64_t.sizeof / uint.sizeof),
+ }
+
+ alias MACHINE_THREAD_STATE = PPC_THREAD_STATE;
+ alias MACHINE_THREAD_STATE_COUNT = PPC_THREAD_STATE_COUNT;
+
+ mach_port_t mach_thread_self();
+ kern_return_t thread_suspend(thread_act_t);
+ kern_return_t thread_resume(thread_act_t);
+ kern_return_t thread_get_state(thread_act_t, thread_state_flavor_t, thread_state_t*, mach_msg_type_number_t*);
+}
More information about the Gcc-cvs
mailing list