From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1698) id 82EF238438A4; Sun, 13 Dec 2020 17:43:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 82EF238438A4 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Iain D Sandoe To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/iains/heads/d-for-darwin)] libphobos: Fix mcontext_t definitions for Darwin X-Act-Checkin: gcc X-Git-Author: Iain Buclaw X-Git-Refname: refs/users/iains/heads/d-for-darwin X-Git-Oldrev: b07a001e2676d2aac15061c86e24453e21f4cdff X-Git-Newrev: bf31d9946067bb285c4ff79dff8d17258da75495 Message-Id: <20201213174333.82EF238438A4@sourceware.org> Date: Sun, 13 Dec 2020 17:43:33 +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: Sun, 13 Dec 2020 17:43:33 -0000 https://gcc.gnu.org/g:bf31d9946067bb285c4ff79dff8d17258da75495 commit bf31d9946067bb285c4ff79dff8d17258da75495 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 | 119 ++++++++++++++++++++++-- libphobos/src/std/datetime/package.d | 15 +-- 2 files changed, 114 insertions(+), 20 deletions(-) diff --git a/libphobos/libdruntime/core/sys/posix/ucontext.d b/libphobos/libdruntime/core/sys/posix/ucontext.d index ef74771a50d..9400edd11f2 100644 --- a/libphobos/libdruntime/core/sys/posix/ucontext.d +++ b/libphobos/libdruntime/core/sys/posix/ucontext.d @@ -920,16 +920,121 @@ else version (CRuntime_Musl) } else version (Darwin) { - alias mcontext_t = void; + private + { + version (X86_Any) + { + struct __darwin_mmst_reg + { + char[10] __mmst_reg; + char[6] __mmst_rsrv; + } + + struct __darwin_xmm_reg + { + char[16] __xmm_reg; + } + + struct __darwin_exception_state + { + uint __trapno; + uint __err; + version (X86_64) + ulong __faultvaddr; + else + uint __faultvaddr; + } + + struct __darwin_thread_state + { + version (X86_64) + ulong[21] __regs; + else + uint[16] __regs; + } + + struct __darwin_float_state + { + int[2] __fpu_reserved; + ushort __fpu_fcw; + ushort __fpu_fsw; + uint[7] __fpu_regs; + __darwin_mmst_reg[8] __fpu_stmm; + version (X86_64) + { + __darwin_xmm_reg[16] __fpu_xmm; + char[6*16] __fpu_rsrv4; + } + else + { + __darwin_xmm_reg[8] __fpu_xmm; + char[14*16] __fpu_rsrv4; + } + int __fpu_reserved1; + } + + struct __darwin_mcontext + { + __darwin_exception_state __es; + __darwin_thread_state __ss; + __darwin_float_state __fs; + } + } + else version (PPC_Any) + { + struct __darwin_exception_state + { + uint __dar; + uint __dsisr; + uint __exception; + uint __pad0; + uint[4] __pad1; + } + + struct __darwin_thread_state + { + uint[40] __regs; + } + + struct __darwin_float_state + { + double[32] __fpregs; + uint __fpscr_pad; + uint __fpscr; + } + + struct __darwin_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_exception_state __es; + __darwin_thread_state __ss; + __darwin_float_state __fs; + __darwin_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); }