From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on gnuweeb.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NO_DNS_FOR_FROM autolearn=no autolearn_force=no version=3.4.6 Received: from mail-lf1-f45.google.com (mail-lf1-f45.google.com [209.85.167.45]) by gnuweeb.org (Postfix) with ESMTPSA id 81C7D8186F for ; Sun, 15 Jan 2023 17:06:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1673802417; bh=dcakJR7qlaPRzeX+cbXVY0AH02DQvlsTZgd8qrY95Xw=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=YENzDR2BXOxMKqQZzEeXT2Hry+3iEzqlrZG7JNsx5WLBLxVCe6wPjTkCKUTwBkTY4 SkKZvi5afylGxCkms6UA1NmA3GzAKh/nyoTxXbspkLPeun/Z1GJoaUYACwVVPjAgWf ssKF2r/xFuq83zEN7smPYnHDBGN+WGVsAoZAMXnyRpz6rfRBMp3KEv3zpTMprjFifI B2ok2g1ynlnzPR095GYckVfHk7V59lEMCBV5n1Hi6RE1VF/oGvqyS5gwyQa/0WfKvD /7vb+8ZQjyAOEHrJM+Yj+WssJxYW9hKUXOzN/rEhVJ41RUO9X42WTtGMkzkeFadyQp TWLOpdiucK1gg== Received: by mail-lf1-f45.google.com with SMTP id cf42so39807878lfb.1 for ; Sun, 15 Jan 2023 09:06:57 -0800 (PST) X-Gm-Message-State: AFqh2krnq8GyTLNWt2byneV6BQbvT5M4MtrJInfwYw+irc9ZOAxB4pGw HzJ6nCIPokuth3MralPok3TK03a4NdkoK5gzlTw= X-Google-Smtp-Source: AMrXdXt+ONtp8KGOj1DXG2x4qJeG/whOylQhdguLA1D7PE5APKMLbsoAM/lnwgcmZcvGx847LMWTklp/38FUaL4U2YU= X-Received: by 2002:ac2:4c32:0:b0:4b5:798a:9087 with SMTP id u18-20020ac24c32000000b004b5798a9087mr6093252lfq.314.1673802415554; Sun, 15 Jan 2023 09:06:55 -0800 (PST) MIME-Version: 1.0 References: <20230108135904.851762-1-ammar.faizi@intel.com> <20230108175842.GB18859@1wt.eu> <20230108184930.GC18859@1wt.eu> In-Reply-To: From: Alviro Iskandar Setiawan Date: Mon, 16 Jan 2023 00:06:44 +0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v3 0/5] nolibc signal handling support To: Ammar Faizi Cc: Willy Tarreau , Shuah Khan , "Paul E. McKenney" , Gilang Fachrezy , "GNU/Weeb Mailing List" , VNLX Kernel Department , Linux Kernel Mailing List , Linux Kselftest Mailing List Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable List-Id: On Sun, Jan 15, 2023 at 11:01 PM Ammar Faizi wrote: > That is not the 'sigset_t' that the kernel wants. The kernel wants the > 'sigset_t' that is in : > > #define _NSIG 64 > #define _NSIG_BPW __BITS_PER_LONG // this 64 on x86-64, but 32= on i386. > #define _NSIG_WORDS (_NSIG / _NSIG_BPW) > > typedef struct { > unsigned long sig[_NSIG_WORDS]; > } sigset_t; > > The above struct is always 8 bytes in size. In other words: > > _NSIG_WORDS =3D=3D 2 on i386 > _NSIG_WORDS =3D=3D 1 on x86-64 > sizeof(unsigned long) =3D=3D 4 on i386 > sizeof(unsigned long) =3D=3D 8 on x86-64 > > Therefore, sizeof(unsigned long [_NSIG_WORDS]) is always 8 on both > architectures. That's the correct size. > > I tried to #include but it conflicts with the > other 'sigset_t' definition. So I can't do that. Read the glibc sigaction implementation, it has different struct sigaction definitions for user and kernel too. https://sourceware.org/git/?p=3Dglibc.git;a=3Dblob;f=3Dsysdeps/unix/sysv/li= nux/libc_sigaction.c;h=3D3cbf241a5fa28296c910fa40a41b09d2b6113b05;hb=3D7e31= d166510ac4adbf53d5e8144c709a37dd8c7a Since nolibc compiles everything in a single translation unit, you can't have a different sigset_t definition. You need to copy the definition to nolibc header and change the type name to something else for internal use only. > Why are there two different definitions of 'sigset_t'? I don't know. > > I probably should read the story behind this syscall to get it > implemented right. Let me ponder this again on Monday. But at least I > tell what I have found so people can give some comments on it... `man 2 rt_sigaction` tells the story. Here is the bedtime story, have a nice dream :-) The original Linux system call was named sigaction(). However, with the addition of real-time signals in Linux 2.2, the fixed-size, 32-bit sigset_t type supported by that system call was no longer fit for purpose. Consequently, a new system call, rt_sigaction(), was added to support an enlarged sigset_t type. The new system call takes a fourth argument, size_t sigsetsize, which specifies the size in bytes of the signal sets in act.sa_mask and oldact.sa_mask. This argument is currently required to have the value sizeof(sigset_t) (or the error EINVAL results). The glibc sigaction() wrapper function hides these details from us, transpar=E2=80=90 ently calling rt_sigaction() when the kernel provides it.