From patchwork Fri Feb 15 14:11:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 31487 Received: (qmail 111432 invoked by alias); 15 Feb 2019 14:11:44 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 111397 invoked by uid 89); 15 Feb 2019 14:11:44 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:4479 X-HELO: mail-qk1-f179.google.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=K/SdvDm8BLtOxyXXWg8ySDJ2aAK+ZnSlx3NtevCNfKs=; b=XBQq0KwCGQKbrBlSMjfxvHgICQPZtRlQqQ6TDWWK7cepr/3CxAJ6LIVoAnklFKSrXp sE0qEGMuGekdPiKwrjbx9GOi3/rZX6TqxZooPy3TkaebztVD5twHT+gopQJdLDGZj1es 7EQFhyTcd+dVoFVp/zbdq+E8DK7fFodZxeJA9dEwnK6u6j1fsZQjzK6XLbrSxagx8wPr 23fixtJ2yA77LZLCxG6r5GK1M4T4lLIyf0UtBufVKzr86e8f5oW+Vp7MUnRkyw2FN7Da jpMH4jFrmt6B6SqSSp7WXUpwZ8csZTI2PWOrsg9qF2eCI0tHJ8hdyrDflouLO9Ybahm5 DAvw== Return-Path: From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH 2/2] mips: Remove rt_sigreturn usage on context function Date: Fri, 15 Feb 2019 12:11:32 -0200 Message-Id: <20190215141132.24404-2-adhemerval.zanella@linaro.org> In-Reply-To: <20190215141132.24404-1-adhemerval.zanella@linaro.org> References: <20190215141132.24404-1-adhemerval.zanella@linaro.org> Similar to powerpc, mips also issues rt_sigreturn for setcontext case the v0 value saved is not the one set by setcontext or makecontext. As for powerpc, it is intention is no really supported since setcontext is not async-signal-safe. Checked the context tests on mips64-linux-gnu and mips-linux-gnu. * sysdeps/unix/sysv/linux/mips/getcontext.S (__getcontext): Remove the magic flag store. * sysdeps/unix/sysv/linux/mips/makecontext.S (__makecontext): Likewise. * sysdeps/unix/sysv/linux/mips/swapcontext.S (__swapcontext): Likewise. * sysdeps/unix/sysv/linux/mips/setcontext.S (__setcontext): Remove rt_sigreturn call. --- sysdeps/unix/sysv/linux/mips/getcontext.S | 5 --- sysdeps/unix/sysv/linux/mips/makecontext.S | 5 --- sysdeps/unix/sysv/linux/mips/setcontext.S | 38 ---------------------- sysdeps/unix/sysv/linux/mips/swapcontext.S | 5 --- 4 files changed, 53 deletions(-) diff --git a/sysdeps/unix/sysv/linux/mips/getcontext.S b/sysdeps/unix/sysv/linux/mips/getcontext.S index 4f7f89ee9a..015bd5bff6 100644 --- a/sysdeps/unix/sysv/linux/mips/getcontext.S +++ b/sysdeps/unix/sysv/linux/mips/getcontext.S @@ -78,11 +78,6 @@ NESTED (__getcontext, FRAMESZ, ra) .set at #endif - /* Store a magic flag. */ - li v1, 1 - /* zero */ - REG_S v1, (MCONTEXT_GREGOFF + 0 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0) - REG_S s0, (MCONTEXT_GREGOFF + 16 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0) REG_S s1, (MCONTEXT_GREGOFF + 17 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0) REG_S s2, (MCONTEXT_GREGOFF + 18 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0) diff --git a/sysdeps/unix/sysv/linux/mips/makecontext.S b/sysdeps/unix/sysv/linux/mips/makecontext.S index 4439fec3ff..3f40f7c9f2 100644 --- a/sysdeps/unix/sysv/linux/mips/makecontext.S +++ b/sysdeps/unix/sysv/linux/mips/makecontext.S @@ -93,11 +93,6 @@ NESTED (__makecontext, FRAMESZ, ra) REG_S a7, A7OFF(sp) #endif - /* Store a magic flag. */ - li v1, 1 - /* zero */ - REG_S v1, (MCONTEXT_GREGOFF + 0 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0) - /* Set up the stack. */ PTR_L t0, STACK_SP(a0) PTR_L t2, STACK_SIZE(a0) diff --git a/sysdeps/unix/sysv/linux/mips/setcontext.S b/sysdeps/unix/sysv/linux/mips/setcontext.S index b6553bdb5e..98afe6cbac 100644 --- a/sysdeps/unix/sysv/linux/mips/setcontext.S +++ b/sysdeps/unix/sysv/linux/mips/setcontext.S @@ -77,12 +77,6 @@ NESTED (__setcontext, FRAMESZ, ra) .set at #endif - /* Check for the magic flag. */ - li v0, 1 - /* zero */ - REG_L v1, (MCONTEXT_GREGOFF + 0 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0) - bne v0, v1, 98f - REG_S a0, A0OFF(sp) /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8) */ @@ -154,38 +148,6 @@ NESTED (__setcontext, FRAMESZ, ra) move v0, zero jr t9 -98: - /* This is a context obtained from a signal handler. - Perform a full restore by pushing the context - passed onto a simulated signal frame on the stack - and call the signal return syscall as if a signal - handler exited normally. */ - PTR_ADDIU sp, -((RT_SIGFRAME_SIZE + ALSZ) & ALMASK) - cfi_adjust_cfa_offset ((RT_SIGFRAME_SIZE + ALSZ) & ALMASK) - - /* Only ucontext is referred to from rt_sigreturn, - copy it. */ - PTR_ADDIU t1, sp, RT_SIGFRAME_UCONTEXT - li t3, ((UCONTEXT_SIZE + SZREG - 1) / SZREG) - 1 -0: - REG_L t2, (a0) - PTR_ADDIU a0, SZREG - REG_S t2, (t1) - PTR_ADDIU t1, SZREG - .set noreorder - bgtz t3, 0b - addiu t3, -1 - .set reorder - -/* rt_sigreturn () -- no arguments, sp points to struct rt_sigframe. */ - li v0, SYS_ify (rt_sigreturn) - syscall - - /* Restore the stack and fall through to the error - path. Successful rt_sigreturn never returns to - its calling place. */ - PTR_ADDIU sp, ((RT_SIGFRAME_SIZE + ALSZ) & ALMASK) - cfi_adjust_cfa_offset (-((RT_SIGFRAME_SIZE + ALSZ) & ALMASK)) 99: #ifdef __PIC__ PTR_LA t9, JUMPTARGET (__syscall_error) diff --git a/sysdeps/unix/sysv/linux/mips/swapcontext.S b/sysdeps/unix/sysv/linux/mips/swapcontext.S index 9c68961345..6612e757cd 100644 --- a/sysdeps/unix/sysv/linux/mips/swapcontext.S +++ b/sysdeps/unix/sysv/linux/mips/swapcontext.S @@ -87,11 +87,6 @@ NESTED (__swapcontext, FRAMESZ, ra) .set at #endif - /* Store a magic flag. */ - li v1, 1 - /* zero */ - REG_S v1, (MCONTEXT_GREGOFF + 0 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0) - REG_S s0, (MCONTEXT_GREGOFF + 16 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0) REG_S s1, (MCONTEXT_GREGOFF + 17 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0) REG_S s2, (MCONTEXT_GREGOFF + 18 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(a0)