From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg1-x52a.google.com (mail-pg1-x52a.google.com [IPv6:2607:f8b0:4864:20::52a]) by sourceware.org (Postfix) with ESMTPS id 59EE53858414 for ; Thu, 24 Feb 2022 20:56:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 59EE53858414 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=dabbelt.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=dabbelt.com Received: by mail-pg1-x52a.google.com with SMTP id 12so2808127pgd.0 for ; Thu, 24 Feb 2022 12:56:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dabbelt-com.20210112.gappssmtp.com; s=20210112; h=date:subject:in-reply-to:cc:from:to:message-id:mime-version :content-transfer-encoding; bh=1VbbjI++aDubclwHD/BeCp57w9UrkTpM14oJNTYU954=; b=d/ePU1lAHBA67UpFwHeumKoDcaYIGbvyZYWpSBK+25Lrg73JtjSY5Lcrn3xgLh5cMF tG1E4zCXfWqREZpi0VvkD/MZ6FvSyFBNk4gJiJLWCEd4uTdiUTs9i+P2rTnvk4yzP6il 8B6QHRi+8mm0llcG+RpKF+pawh94uX7++lk/6DZu+iYBhtv/3MApKtz9AdPZEFv/bpQ2 GOR8ldX5WgnDdEZ6PfRVDCdGkxvWpCYKlRfYGaAwKZR4OJXUc7KEUtRSmF8OgMAsJiA7 eAR3jMzlspnfwJ5Fb7hcopBt7KhKBa8xJyeb6ewMALzt1gnv3Edn9V2n7BoQSpf/43xS MZMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:subject:in-reply-to:cc:from:to:message-id :mime-version:content-transfer-encoding; bh=1VbbjI++aDubclwHD/BeCp57w9UrkTpM14oJNTYU954=; b=E7mC4Tzh6FtheNmhE7w/Faz5t03LvrrdUgDm0hyUTBnsvooVxTlUQjbzzqvO6tn6IK tFfqXuNLvfos8uViCyuuZ03Kim90+mTNYm8zWjoVw7bs834mGHt8/jr89q+fnUn4rWSR X9h5fUr2vFSoqqL5/zDR9E1vj/D687+NE3A6leru6KAtJ143TCwjN0jvGKQt5b8qPvfa nN1z31gNwgRZCoYz621mwBNFx1ci+Znyzubg1wlcO78tSnjL7s55DxsuT7D14FW7OLrT 4IIyVriY9EAZ19JfZNlVLv68AiQgan2ZOmliDrvT1XeT9a9pHEdIpqkIaUQW/qPN1zLE DRxA== X-Gm-Message-State: AOAM532G3a05aEqM9HdgfGXqDY2H3G8Ou6rthV36EQAwKok9h1bSSc9N F+R24GzeHSC8AmMslMOGoaShKQ== X-Google-Smtp-Source: ABdhPJwVlvSxja0oOt88Hex8sXAb6kiIf2LJbaKJWTsS2+zM/viVCc6Hzj5SagpNehqRitsWjfzRFA== X-Received: by 2002:aa7:8888:0:b0:4df:3c7f:8f3e with SMTP id z8-20020aa78888000000b004df3c7f8f3emr4363790pfe.36.1645736213241; Thu, 24 Feb 2022 12:56:53 -0800 (PST) Received: from localhost ([12.3.194.138]) by smtp.gmail.com with ESMTPSA id on18-20020a17090b1d1200b001b9cfbfbf00sm221041pjb.40.2022.02.24.12.56.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Feb 2022 12:56:52 -0800 (PST) Date: Thu, 24 Feb 2022 12:56:52 -0800 (PST) X-Google-Original-Date: Thu, 24 Feb 2022 12:46:59 PST (-0800) Subject: Re: [PATCH v2 1/2] RISC-V: remove riscv-specific sigcontext.h In-Reply-To: CC: kito.cheng@sifive.com, libc-alpha@sourceware.org, Darius Rad , Andrew Waterman , dj@redhat.com, greentime.hu@sifive.com From: Palmer Dabbelt To: vincent.chen@sifive.com Message-ID: Mime-Version: 1.0 (MHng) Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Feb 2022 20:56:56 -0000 On Thu, 20 Jan 2022 17:29:20 PST (-0800), vincent.chen@sifive.com wrote: > On Thu, Jan 20, 2022 at 10:47 AM Kito Cheng wrote: >> >> Just provide a tricky workaround from GCC side: >> >> +#ifdef _ASM_RISCV_SIGCONTEXT_H >> +#define SIGCONTEXT_PC(SC) (SC)->sc_regs.pc >> +#else >> +#define SIGCONTEXT_PC(SC) (SC)->gregs[0] >> +#endif >> >> https://gcc.gnu.org/pipermail/gcc-patches/2022-January/588682.html >> >> >> On Thu, Jan 20, 2022 at 10:36 AM Palmer Dabbelt wrote: >> > >> > On Mon, 17 Jan 2022 20:31:58 PST (-0800), vincent.chen@sifive.com wrote: >> > > Remove riscv-specific sigcontext.h so that Glibc can directly use >> > > sigcontext.h provided by the kernel to reduce synchronization work >> > > when new extension support is introduced. >> > > --- >> > > .../unix/sysv/linux/riscv/bits/sigcontext.h | 31 ------------------- >> > > 1 file changed, 31 deletions(-) >> > > delete mode 100644 sysdeps/unix/sysv/linux/riscv/bits/sigcontext.h >> > > >> > > diff --git a/sysdeps/unix/sysv/linux/riscv/bits/sigcontext.h b/sysdeps/unix/sysv/linux/riscv/bits/sigcontext.h >> > > deleted file mode 100644 >> > > index b6e15b5f62..0000000000 >> > > --- a/sysdeps/unix/sysv/linux/riscv/bits/sigcontext.h >> > > +++ /dev/null >> > > @@ -1,31 +0,0 @@ >> > > -/* Machine-dependent signal context structure for Linux. RISC-V version. >> > > - Copyright (C) 1996-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. >> > > - >> > > - The GNU C Library is free software; you can redistribute it and/or >> > > - modify it under the terms of the GNU Lesser General Public >> > > - License as published by the Free Software Foundation; either >> > > - version 2.1 of the License, or (at your option) any later version. >> > > - >> > > - The GNU C Library is distributed in the hope that it will be useful, >> > > - but WITHOUT ANY WARRANTY; without even the implied warranty of >> > > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >> > > - Lesser General Public License for more details. >> > > - >> > > - You should have received a copy of the GNU Lesser General Public >> > > - License along with the GNU C Library. If not, see >> > > - . */ >> > > - >> > > -#ifndef _BITS_SIGCONTEXT_H >> > > -#define _BITS_SIGCONTEXT_H 1 >> > > - >> > > -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H >> > > -# error "Never use directly; include instead." >> > > -#endif >> > > - >> > > -struct sigcontext { >> > > - /* gregs[0] holds the program counter. */ >> > > - unsigned long int gregs[32]; >> > > - unsigned long long int fpregs[66] __attribute__ ((__aligned__ (16))); >> > > -}; >> > > - >> > > -#endif >> > >> > This will definitely break API compatibility (the fields have >> > different names) but should be fine for ABI compatibility. IIUC that's >> > within the rules, but I'm not sure it's a desirable outcome. Probably >> > would have been better to get this right the first time around, but I'm >> > not sure it's worth fixing -- essentially we're making a bunch of users >> > change things so we don't have to. That said, it's pretty ugly to have >> > two different definitions of a structure with the same name and layout. >> > >> > Maybe there's some sort of macro-related trick we can use? ie, provide >> > the current definition unless users opt into the Linux one (presumably >> > so they can talk about the V state). There's going to be some hoops to >> > jump through there to maintain ABI compatibility either way, so it's >> > possible we could tie these two together? > > I can understand what you are worried about. Therefore, I also tried > to build multiple Yocto images, such as core-image-full-cmdline, > core-image-x11, core-image-sato, and core-image-base, to evaluate the > impact. After applying Kito's solution to GCC, I didn't get any build > errors. According to the results, maybe we can have a quick conclusion > about the impact of this patch. > > The new version Glibc is not compatible with the old version GCC (The > old Glibc is still compatible with the new version GCC due to Kito's > patch) > Some public programs that use struct sigcontext are not covered by > this test. (If someone can tell me which program I'm missing, I'm > willing to fix it) > Some in-house programs use struct sigcontext_t to access signal stack. > > IMO, the impact seems not severe at this moment. Directly using the > kernel's sigcontext can get us away from the pain if we need to add > new registers to the signal context for a new extension or vendor > customized extension. > > In addition, I was keeping to find a suitable solution to solve it as > you described. But if I still cannot come up with a solution, do you > mind that bits/sigcontext.h has a duplicate data struct related to V > extension? Thank you I was talking about putting the macros into glibc, so we don't force users into picking up the kernel's sigcontext but instead give them the option of moving over. So something like this: diff --git a/sysdeps/unix/sysv/linux/riscv/bits/sigcontext.h b/sysdeps/unix/sysv/linux/riscv/bits/sigcontext.h index b6e15b5f62..d07d690d1b 100644 --- a/sysdeps/unix/sysv/linux/riscv/bits/sigcontext.h +++ b/sysdeps/unix/sysv/linux/riscv/bits/sigcontext.h @@ -22,10 +22,18 @@ # error "Never use directly; include instead." #endif +#ifdef __USE_KERNEL_SIGCONTEXT +# include + +/* The Linux kernel headers redefine NULL wrongly, so cleanup afterwards. */ +# define __need_NULL +# include +#else struct sigcontext { /* gregs[0] holds the program counter. */ unsigned long int gregs[32]; unsigned long long int fpregs[66] __attribute__ ((__aligned__ (16))); }; +#endif #endif