From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1873) id 00E20385783D; Mon, 7 Dec 2020 14:42:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 00E20385783D Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Iain Buclaw To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/ibuclaw/heads/darwin)] libphobos: Fix mcontext_t definitions for Darwin X-Act-Checkin: gcc X-Git-Author: Iain Buclaw X-Git-Refname: refs/users/ibuclaw/heads/darwin X-Git-Oldrev: a09e8e1e390a649775d9c5eb0de22992edaac3ac X-Git-Newrev: 792757d44e27b345149b2dc99ba25fe0600d04df Message-Id: <20201207144221.00E20385783D@sourceware.org> Date: Mon, 7 Dec 2020 14:42:20 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 07 Dec 2020 14:42:21 -0000 https://gcc.gnu.org/g:792757d44e27b345149b2dc99ba25fe0600d04df commit 792757d44e27b345149b2dc99ba25fe0600d04df Author: Iain Buclaw Date: Mon Dec 7 15:42:09 2020 +0100 libphobos: Fix mcontext_t definitions for Darwin Diff: --- libphobos/libdruntime/core/sys/posix/ucontext.d | 281 +++++++++++++++++++++++- libphobos/src/std/datetime/package.d | 15 +- 2 files changed, 276 insertions(+), 20 deletions(-) diff --git a/libphobos/libdruntime/core/sys/posix/ucontext.d b/libphobos/libdruntime/core/sys/posix/ucontext.d index ef74771a50d..f363b990b8f 100644 --- a/libphobos/libdruntime/core/sys/posix/ucontext.d +++ b/libphobos/libdruntime/core/sys/posix/ucontext.d @@ -920,16 +920,283 @@ else version (CRuntime_Musl) } else version (Darwin) { - alias mcontext_t = void; + private + { + version (X86_Any) + { + struct __darwin_fp_control + { + ushort __flags; + } + + struct __darwin_fp_status + { + ushort __flags; + } + + struct __darwin_mmst_reg + { + char[10] __mmst_reg; + char[6] __mmst_rsrv; + } + + struct __darwin_xmm_reg + { + char[16] __xmm_reg; + } + + struct __darwin_i386_exception_state + { + uint __trapno; + uint __err; + uint __faultvaddr; + } + + struct __darwin_i386_thread_state + { + uint __eax; + uint __ebx; + uint __ecx; + uint __edx; + uint __edi; + uint __esi; + uint __ebp; + uint __esp; + uint __ss; + uint __eflags; + uint __eip; + uint __cs; + uint __ds; + uint __es; + uint __fs; + uint __gs; + } + + struct __darwin_i386_float_state + { + int[2] __fpu_reserved; + __darwin_fp_control __fpu_fcw; + __darwin_fp_status __fpu_fsw; + ubyte __fpu_ftw; + ubyte __fpu_rsrv1; + ushort __fpu_fop; + uint __fpu_ip; + ushort __fpu_cs; + ushort __fpu_rsrv2; + uint __fpu_dp; + ushort __fpu_ds; + ushort __fpu_rsrv3; + uint __fpu_mxcsr; + uint __fpu_mxcsrmask; + __darwin_mmst_reg __fpu_stmm0; + __darwin_mmst_reg __fpu_stmm1; + __darwin_mmst_reg __fpu_stmm2; + __darwin_mmst_reg __fpu_stmm3; + __darwin_mmst_reg __fpu_stmm4; + __darwin_mmst_reg __fpu_stmm5; + __darwin_mmst_reg __fpu_stmm6; + __darwin_mmst_reg __fpu_stmm7; + __darwin_xmm_reg __fpu_xmm0; + __darwin_xmm_reg __fpu_xmm1; + __darwin_xmm_reg __fpu_xmm2; + __darwin_xmm_reg __fpu_xmm3; + __darwin_xmm_reg __fpu_xmm4; + __darwin_xmm_reg __fpu_xmm5; + __darwin_xmm_reg __fpu_xmm6; + __darwin_xmm_reg __fpu_xmm7; + char[14*16] __fpu_rsrv4; + int __fpu_reserved1; + } + + struct __darwin_x86_exception_state64 + { + uint __trapno; + uint __err; + ulong __faultvaddr; + } + + struct __darwin_x86_thread_state64 + { + ulong __rax; + ulong __rbx; + ulong __rcx; + ulong __rdx; + ulong __rdi; + ulong __rsi; + ulong __rbp; + ulong __rsp; + ulong __r8; + ulong __r9; + ulong __r10; + ulong __r11; + ulong __r12; + ulong __r13; + ulong __r14; + ulong __r15; + ulong __rip; + ulong __rflags; + ulong __cs; + ulong __fs; + ulong __gs; + } + + struct __darwin_x86_float_state64 + { + int[2] __fpu_reserved; + __darwin_fp_control __fpu_fcw; + __darwin_fp_status __fpu_fsw; + ubyte __fpu_ftw; + ubyte __fpu_rsrv1; + ushort __fpu_fop; + uint __fpu_ip; + ushort __fpu_cs; + ushort __fpu_rsrv2; + uint __fpu_dp; + ushort __fpu_ds; + ushort __fpu_rsrv3; + uint __fpu_mxcsr; + uint __fpu_mxcsrmask; + __darwin_mmst_reg __fpu_stmm0; + __darwin_mmst_reg __fpu_stmm1; + __darwin_mmst_reg __fpu_stmm2; + __darwin_mmst_reg __fpu_stmm3; + __darwin_mmst_reg __fpu_stmm4; + __darwin_mmst_reg __fpu_stmm5; + __darwin_mmst_reg __fpu_stmm6; + __darwin_mmst_reg __fpu_stmm7; + __darwin_xmm_reg __fpu_xmm0; + __darwin_xmm_reg __fpu_xmm1; + __darwin_xmm_reg __fpu_xmm2; + __darwin_xmm_reg __fpu_xmm3; + __darwin_xmm_reg __fpu_xmm4; + __darwin_xmm_reg __fpu_xmm5; + __darwin_xmm_reg __fpu_xmm6; + __darwin_xmm_reg __fpu_xmm7; + __darwin_xmm_reg __fpu_xmm8; + __darwin_xmm_reg __fpu_xmm9; + __darwin_xmm_reg __fpu_xmm10; + __darwin_xmm_reg __fpu_xmm11; + __darwin_xmm_reg __fpu_xmm12; + __darwin_xmm_reg __fpu_xmm13; + __darwin_xmm_reg __fpu_xmm14; + __darwin_xmm_reg __fpu_xmm15; + char[6*16] __fpu_rsrv4; + int __fpu_reserved1; + } + + version (X86) + { + struct __darwin_mcontext + { + __darwin_i386_exception_state __es; + __darwin_i386_thread_state __ss; + __darwin_i386_float_state __fs; + } + } + else version (X86_64) + { + struct __darwin_mcontext + { + __darwin_x86_exception_state64 __es; + __darwin_x86_thread_state64 __ss; + __darwin_x86_float_state64 __fs; + } + } + } + else version (PPC_Any) + { + struct __darwin_ppc_exception_state + { + uint __dar; + uint __dsisr; + uint __exception; + uint __pad0; + uint[4] __pad1; + } + + struct __darwin_ppc_thread_state + { + uint __srr0; + uint __srr1; + uint __r0; + uint __r1; + uint __r2; + uint __r3; + uint __r4; + uint __r5; + uint __r6; + uint __r7; + uint __r8; + uint __r9; + uint __r10; + uint __r11; + uint __r12; + uint __r13; + uint __r14; + uint __r15; + uint __r16; + uint __r17; + uint __r18; + uint __r19; + uint __r20; + uint __r21; + uint __r22; + uint __r23; + uint __r24; + uint __r25; + uint __r26; + uint __r27; + uint __r28; + uint __r29; + uint __r30; + uint __r31; + uint __cr; + uint __xer; + uint __lr; + uint __ctr; + uint __mq; + uint __vrsave; + } + + struct __darwin_ppc_float_state + { + double[32] __fpregs; + uint __fpscr_pad; + uint __fpscr; + } + + struct __darwin_ppc_vector_state + { + uint[32][4] __save_vr; + uint[4] __save_vscr; + uint[4] __save_pad5; + uint __save_vrvalid; + uint[7] __save_pad6; + } + + struct __darwin_mcontext + { + __darwin_ppc_exception_state __es; + __darwin_ppc_thread_state __ss; + __darwin_ppc_float_state __fs; + __darwin_ppc_vector_state __vs; + } + } + else + static assert(false, "mcontext_t unimplemented for this platform."); + } + + alias mcontext_t = __darwin_mcontext*; struct ucontext { - int uc_onstack; - sigset_t uc_sigmask; - stack_t uc_stack; - ucontext* uc_link; - size_t uc_mcsize; - mcontext_t* uc_mcontext; + int uc_onstack; + sigset_t uc_sigmask; + stack_t uc_stack; + ucontext* uc_link; + size_t uc_mcsize; + __darwin_mcontext* uc_mcontext; + __darwin_mcontext __mcontext_data; } alias ucontext_t = ucontext; diff --git a/libphobos/src/std/datetime/package.d b/libphobos/src/std/datetime/package.d index 976d06ddb79..a5fd03d39e9 100644 --- a/libphobos/src/std/datetime/package.d +++ b/libphobos/src/std/datetime/package.d @@ -115,7 +115,6 @@ public import std.datetime.interval; public import std.datetime.systime; public import std.datetime.timezone; -import core.exception : AssertError; import std.functional : unaryFun; import std.traits; import std.typecons : Flag, Yes, No; @@ -267,12 +266,7 @@ public: StopWatch sw; sw.start(); auto t1 = sw.peek(); - bool doublestart = true; - try - sw.start(); - catch (AssertError e) - doublestart = false; - assert(!doublestart); + assert(sw._flagStarted); sw.stop(); assert((t1 - sw.peek()).to!("seconds", real)() <= 0); } @@ -294,12 +288,7 @@ public: sw.start(); sw.stop(); auto t1 = sw.peek(); - bool doublestop = true; - try - sw.stop(); - catch (AssertError e) - doublestop = false; - assert(!doublestop); + assert(!sw._flagStarted); assert((t1 - sw.peek()).to!("seconds", real)() == 0); }