From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by sourceware.org (Postfix) with ESMTPS id 4CA303857403 for ; Sun, 16 May 2021 09:16:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 4CA303857403 Received: by mail-wr1-x430.google.com with SMTP id q5so3284747wrs.4 for ; Sun, 16 May 2021 02:16:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=AQkgxljzQQB7pnefvOdRST34zIuUrZPO5z5eBQxWx7Y=; b=YhrgkfO5WCfflFHXaResG1ptY9PCoTKX8ff0mLhh2dNuYZ7bPCwCxyZqphonbU4u/Q VirEx2KpzO+iF8uWSdbUHMonmxN6UKBeVBWuZaEggOMQlXz5A+aWxryDpxt/KfV9GOCG r94w+sdLkS1ulL+s7HJai+r0rsJBcvnjADsRZcSsdoF89x0KXx03ieVCPCYfFWvG3gfv Uk4D11lGnVRRYJbF0TLwotkp6GoUPAbjW7c/UBE8Ekmga9qNSljJp9aw+k/LmkJ57svW rnic516ofjabcA0r2gLdUjkPdkY4PdWlf28Y71/8i83JrEgr1ohwbf/PaXariEH4t1p1 RYFg== X-Gm-Message-State: AOAM533W202XHjrTAvDlKQSjfeASMPGNSDq/S0Kp4iM51pBGkYvrFqnU oUcmr7sqi92MoRdwhDscQR0= X-Google-Smtp-Source: ABdhPJwN2T387T+WgdAnQoy6wjuwA0hW17gTIuznmwnZUI2yWtfxnqPCqeIcZStFadA0n6vfY9RSiA== X-Received: by 2002:a5d:4385:: with SMTP id i5mr10469982wrq.192.1621156588415; Sun, 16 May 2021 02:16:28 -0700 (PDT) Received: from [10.8.0.106] ([195.53.121.100]) by smtp.gmail.com with ESMTPSA id j7sm10311876wmi.21.2021.05.16.02.16.26 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 16 May 2021 02:16:27 -0700 (PDT) Subject: Re: [PATCH v3] bpf.2: Use standard types and attributes To: mtk.manpages@gmail.com Cc: linux-man@vger.kernel.org, Alexei Starovoitov , Greg Kroah-Hartman , Zack Weinberg , LKML , glibc , GCC , bpf , David Laight , Joseph Myers , Florian Weimer , Daniel Borkmann References: <6740a229-842e-b368-86eb-defc786b3658@gmail.com> <20210515190116.188362-1-alx.manpages@gmail.com> From: "Alejandro Colomar (man-pages)" Message-ID: <9df36138-f622-49a6-8310-85ff0470ccd6@gmail.com> Date: Sun, 16 May 2021 11:16:24 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.0 MIME-Version: 1.0 In-Reply-To: <20210515190116.188362-1-alx.manpages@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_RED autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 16 May 2021 09:16:32 -0000 On 5/15/21 9:01 PM, Alejandro Colomar wrote: > Some manual pages are already using C99 syntax for integral > types 'uint32_t', but some aren't. There are some using kernel > syntax '__u32'. Fix those. > > Both the kernel and the standard types are 100% binary compatible, > and the source code differences between them are very small, and > not important in a manual page: > > - Some of them are implemented with different underlying types > (e.g., s64 is always long long, while int64_t may be long long > or long, depending on the arch). This causes the following > differences. > > - length modifiers required by printf are different, resulting in > a warning ('-Wformat='). > > - pointer assignment causes a warning: > ('-Wincompatible-pointer-types'), but there aren't any pointers > in this page. > > But, AFAIK, all of those warnings can be safely ignored, due to > the binary compatibility between the types. > > ... > > Some pages also document attributes, using GNU syntax > '__attribute__((xxx))'. Update those to use the shorter and more > portable C11 keywords such as 'alignas()' when possible, and C2x > syntax '[[gnu::xxx]]' elsewhere, which hasn't been standardized > yet, but is already implemented in GCC, and available through > either --std=c2x or any of the --std=gnu... options. > > The standard isn't very clear on how to use alignas() or > [[]]-style attributes, and the GNU documentation isn't better, so > the following link is a useful experiment about the different > alignment syntaxes: > __attribute__((aligned())), alignas(), and [[gnu::aligned()]]: > > > Signed-off-by: Alejandro Colomar Discussion: > Nacked-by: Alexei Starovoitov > Nacked-by: Greg Kroah-Hartman > Acked-by: Zack Weinberg > Cc: LKML > Cc: glibc > Cc: GCC > Cc: bpf > Cc: David Laight > Cc: Joseph Myers > Cc: Florian Weimer > Cc: Daniel Borkmann > --- > man2/bpf.2 | 49 ++++++++++++++++++++++++------------------------- > 1 file changed, 24 insertions(+), 25 deletions(-) > > diff --git a/man2/bpf.2 b/man2/bpf.2 > index 6e1ffa198..04b8fbcef 100644 > --- a/man2/bpf.2 > +++ b/man2/bpf.2 > @@ -186,41 +186,40 @@ commands: > .PP > .in +4n > .EX > -union bpf_attr { > +union [[gnu::aligned(8)]] bpf_attr { > struct { /* Used by BPF_MAP_CREATE */ > - __u32 map_type; > - __u32 key_size; /* size of key in bytes */ > - __u32 value_size; /* size of value in bytes */ > - __u32 max_entries; /* maximum number of entries > - in a map */ > + uint32_t map_type; > + uint32_t key_size; /* size of key in bytes */ > + uint32_t value_size; /* size of value in bytes */ > + uint32_t max_entries; /* maximum number of entries > + in a map */ > }; > > - struct { /* Used by BPF_MAP_*_ELEM and BPF_MAP_GET_NEXT_KEY > - commands */ > - __u32 map_fd; > - __aligned_u64 key; > + struct { /* Used by BPF_MAP_*_ELEM and BPF_MAP_GET_NEXT_KEY commands */ > + uint32_t map_fd; > + uint64_t alignas(8) key; > union { > - __aligned_u64 value; > - __aligned_u64 next_key; > + uint64_t alignas(8) value; > + uint64_t alignas(8) next_key; > }; > - __u64 flags; > + uint64_t flags; > }; > > struct { /* Used by BPF_PROG_LOAD */ > - __u32 prog_type; > - __u32 insn_cnt; > - __aligned_u64 insns; /* \(aqconst struct bpf_insn *\(aq */ > - __aligned_u64 license; /* \(aqconst char *\(aq */ > - __u32 log_level; /* verbosity level of verifier */ > - __u32 log_size; /* size of user buffer */ > - __aligned_u64 log_buf; /* user supplied \(aqchar *\(aq > - buffer */ > - __u32 kern_version; > - /* checked when prog_type=kprobe > - (since Linux 4.1) */ > + uint32_t prog_type; > + uint32_t insn_cnt; > + uint64_t alignas(8) insns; /* \(aqconst struct bpf_insn *\(aq */ > + uint64_t alignas(8) license; /* \(aqconst char *\(aq */ > + uint32_t log_level; /* verbosity level of verifier */ > + uint32_t log_size; /* size of user buffer */ > + uint64_t alignas(8) log_buf; /* user supplied \(aqchar *\(aq > + buffer */ > + uint32_t kern_version; > + /* checked when prog_type=kprobe > + (since Linux 4.1) */ > .\" commit 2541517c32be2531e0da59dfd7efc1ce844644f5 > }; > -} __attribute__((aligned(8))); > +}; > .EE > .in > .\" > -- Alejandro Colomar Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/ http://www.alejandro-colomar.es/