From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1118) id 2E1F53858C27; Sun, 2 Jan 2022 17:14:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2E1F53858C27 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: John David Anglin To: gcc-cvs@gcc.gnu.org Subject: [gcc r11-9427] Generate illegal instruction fault if LWS syscall returns -EFAULT. X-Act-Checkin: gcc X-Git-Author: John David Anglin X-Git-Refname: refs/heads/releases/gcc-11 X-Git-Oldrev: 21a0bd00f62af9dec87a10ec512aacf1db08e70f X-Git-Newrev: 2c8e273ed11c31fc28784ddd0a8263080f43ba7b Message-Id: <20220102171412.2E1F53858C27@sourceware.org> Date: Sun, 2 Jan 2022 17:14:12 +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, 02 Jan 2022 17:14:12 -0000 https://gcc.gnu.org/g:2c8e273ed11c31fc28784ddd0a8263080f43ba7b commit r11-9427-g2c8e273ed11c31fc28784ddd0a8263080f43ba7b Author: John David Anglin Date: Sun Jan 2 17:13:45 2022 +0000 Generate illegal instruction fault if LWS syscall returns -EFAULT. 2022-01-02 John David Anglin libgcc/ChangeLog: * config/pa/linux-atomic.c (_ASM_EFAULT): Define. (__kernel_cmpxchg): Nullify illegal iitlbp instruction if error return is not equal _ASM_EFAULT. (__kernel_cmpxchg2): Likewise. Diff: --- libgcc/config/pa/linux-atomic.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libgcc/config/pa/linux-atomic.c b/libgcc/config/pa/linux-atomic.c index 500a3652499..e4d74b2d598 100644 --- a/libgcc/config/pa/linux-atomic.c +++ b/libgcc/config/pa/linux-atomic.c @@ -28,6 +28,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #define EBUSY 16 #define ENOSYS 251 +#define _ASM_EFAULT "-14" + typedef unsigned char u8; typedef short unsigned int u16; #ifdef __LP64__ @@ -58,6 +60,8 @@ __kernel_cmpxchg (volatile void *mem, int oldval, int newval) register long lws_errno asm("r21"); asm volatile ( "ble 0xb0(%%sr2, %%r0) \n\t" "ldi %2, %%r20 \n\t" + "cmpiclr,<> " _ASM_EFAULT ", %%r21, %%r0\n\t" + "iitlbp %%r0,(%%sr0, %%r0) \n\t" : "=r" (lws_ret), "=r" (lws_errno) : "i" (LWS_CAS), "r" (lws_mem), "r" (lws_old), "r" (lws_new) : "r1", "r20", "r22", "r23", "r29", "r31", "memory" @@ -84,6 +88,8 @@ __kernel_cmpxchg2 (volatile void *mem, const void *oldval, const void *newval, register long lws_errno asm("r21"); asm volatile ( "ble 0xb0(%%sr2, %%r0) \n\t" "ldi %6, %%r20 \n\t" + "cmpiclr,<> " _ASM_EFAULT ", %%r21, %%r0\n\t" + "iitlbp %%r0,(%%sr0, %%r0) \n\t" : "=r" (lws_ret), "=r" (lws_errno), "+r" (lws_mem), "+r" (lws_old), "+r" (lws_new), "+r" (lws_size) : "i" (2)