From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Sami Tolvanen <samitolvanen@google.com>
Cc: Masahiro Yamada <masahiroy@kernel.org>,
Luis Chamberlain <mcgrof@kernel.org>,
Miguel Ojeda <ojeda@kernel.org>,
Matthew Maurer <mmaurer@google.com>,
Alex Gaynor <alex.gaynor@gmail.com>,
Wedson Almeida Filho <wedsonaf@gmail.com>,
Gary Guo <gary@garyguo.net>, Petr Pavlu <petr.pavlu@suse.com>,
Neal Gompa <neal@gompa.dev>, Hector Martin <marcan@marcan.st>,
Janne Grunau <j@jannau.net>, Asahi Linux <asahi@lists.linux.dev>,
linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-modules@vger.kernel.org, rust-for-linux@vger.kernel.org
Subject: Re: [PATCH v2 16/19] gendwarfksyms: Add support for reserved structure fields
Date: Sat, 17 Aug 2024 09:41:20 +0200 [thread overview]
Message-ID: <2024081705-overarch-deceptive-6689@gregkh> (raw)
In-Reply-To: <CABCJKuedc3aCO2Or+_YBSzK_zp9zB8nFwjr-tK95EBM3La1AmA@mail.gmail.com>
On Fri, Aug 16, 2024 at 08:50:53AM -0700, Sami Tolvanen wrote:
> Hi Greg,
>
> On Fri, Aug 16, 2024 at 12:20 AM Greg Kroah-Hartman
> <gregkh@linuxfoundation.org> wrote:
> >
> > On Thu, Aug 15, 2024 at 05:39:20PM +0000, Sami Tolvanen wrote:
> > > Distributions that want to maintain a stable kABI need the ability to
> > > add reserved fields to kernel data structures that they anticipate
> > > will be modified during the ABI support timeframe, either by LTS
> > > updates or backports.
> > >
> > > With genksyms, developers would typically hide changes to the reserved
> > > fields from version calculation with #ifndef __GENKSYMS__, which would
> > > result in the symbol version not changing even though the actual type
> > > of the reserved field changes. When we process precompiled object
> > > files, this is again not an option.
> > >
> > > To support stable symbol versions for reserved fields, change the
> > > union type processing to recognize field name prefixes, and if the
> > > union contains a field name that starts with __kabi_reserved, only use
> > > the type of that field for computing symbol versions. In other words,
> > > let's assume we have a structure where we want to reserve space for
> > > future changes:
> > >
> > > struct struct1 {
> > > long a;
> > > long __kabi_reserved_0; /* reserved for future use */
> > > };
> > > struct struct1 exported;
> > >
> > > gendwarfksyms --debug produces the following output:
> > >
> > > variable structure_type struct1 {
> > > member base_type long int byte_size(8) encoding(5) data_member_location(0),
> > > member base_type long int byte_size(8) encoding(5) data_member_location(8),
> > > } byte_size(16);
> > > #SYMVER exported 0x67997f89
> > >
> > > To take the reserved field into use, a distribution would replace it
> > > with a union, with one of the fields keeping the __kabi_reserved name
> > > prefix for the original type:
> > >
> > > struct struct1 {
> > > long a;
> > > union {
> > > long __kabi_reserved_0;
> > > struct {
> > > int b;
> > > int v;
> > > };
> > > };
> > >
> >
> > Ah, ignore my previous email, here's the --stable stuff.
> >
> > But this all needs to go into some documentation somewhere, trying to
> > dig it out of a changelog is going to be impossible to point people at.
>
> I agree, which is why I included the details in the comments too.
> There's also an example file if you scroll down a bit further, but I
> can certainly add some actual documentation too. Since the --stable
> bits are not really needed in the mainline kernel, do you prefer a
> file in Documentation/ or is it sufficient to expand the example files
> to include any missing details?
Ah, I missed the examples, I thought that was a test for the feature :)
Yes, it needs to be documented somewhere, and usually documentation is
in Documentation/ so that it shows up on the web and everywhere else.
> > > +/* See dwarf.c:process_reserved */
> > > +#define RESERVED_PREFIX "__kabi_reserved"
> >
> > Seems semi-sane, I can live with this.
>
> Is there something you'd change to make this more than semi-sane?
I can't think of it, but perhaps we need a check somewhere to ensure
that these symbol names do NOT end up in the main kernel tree?
Or just keep this whole patch as an add-on on the end that is only
applied by the distro kernels and is not merged into mainline at all?
> > I don't know if you want to take the next step and provide examples of
> > how to use this in "easy to use macros" for it all, but if so, that
> > might be nice.
>
> This should already work with the macros Android uses, for example,
> with minor changes. The current example file doesn't include macro
> wrappers, but I can add them in the next version.
The Android macros are a copy of what SLES and RHEL does so that's good.
And yes, an example macro would be nice so we all don't have to reinvent
it yet-again like we have done already. Consolidation is nice.
> > Especially as I have no idea how you are going to do
> > this with the rust side of things, this all will work for any structures
> > defined in .rs code, right?
>
> Yes, Rust structures can use the same scheme. Accessing union members
> might be less convenient than in C, but can presumably be wrapped in
> helper macros if needed.
That feels ripe for problems for any rust code as forcing a helper macro
for a "normal" access to a structure field is going to be a lot of churn
over time. Is the need for a macro due to the fact that accessing a
union is always considered "unsafe" in rust? If that's the case, ick,
this is going to get even messier even faster as the need for sprinkling
unsafe accesses everywhere for what used to be a normal/safe one will
cause people to get nervous...
thanks,
greg k-h
next prev parent reply other threads:[~2024-08-17 7:41 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-15 17:39 [PATCH v2 00/19] Implement DWARF modversions Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 01/19] tools: Add gendwarfksyms Sami Tolvanen
2024-08-16 7:14 ` Greg Kroah-Hartman
2024-08-27 16:44 ` Sami Tolvanen
2024-08-26 17:41 ` Petr Pavlu
2024-08-26 18:47 ` Sami Tolvanen
2024-08-28 12:31 ` Petr Pavlu
2024-08-28 21:28 ` Sami Tolvanen
2024-08-28 17:45 ` Masahiro Yamada
2024-08-28 21:32 ` Sami Tolvanen
2024-09-05 2:29 ` Masahiro Yamada
2024-09-05 20:52 ` Sami Tolvanen
2024-09-10 9:43 ` Masahiro Yamada
2024-09-10 21:09 ` Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 02/19] gendwarfksyms: Add symbol list handling Sami Tolvanen
2024-08-27 9:16 ` Petr Pavlu
2024-08-27 18:47 ` Sami Tolvanen
2024-08-28 12:35 ` Petr Pavlu
2024-08-28 23:09 ` Sami Tolvanen
2024-09-02 9:52 ` Petr Pavlu
2024-08-28 18:16 ` Masahiro Yamada
2024-08-28 21:50 ` Sami Tolvanen
2024-09-01 10:59 ` Masahiro Yamada
2024-09-04 20:51 ` Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 03/19] gendwarfksyms: Add address matching Sami Tolvanen
2024-08-27 12:40 ` Petr Pavlu
2024-08-27 21:28 ` Sami Tolvanen
2024-08-28 18:22 ` Masahiro Yamada
2024-08-28 21:56 ` Sami Tolvanen
2024-09-01 11:10 ` Masahiro Yamada
2024-09-04 20:48 ` Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 04/19] gendwarfksyms: Add support for type pointers Sami Tolvanen
2024-08-28 6:50 ` Masahiro Yamada
2024-08-28 7:15 ` Masahiro Yamada
2024-08-28 21:58 ` Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 05/19] gendwarfksyms: Expand base_type Sami Tolvanen
2024-08-28 12:46 ` Petr Pavlu
2024-08-28 22:19 ` Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 06/19] gendwarfksyms: Add a cache for processed DIEs Sami Tolvanen
2024-08-28 18:15 ` Masahiro Yamada
2024-08-28 22:27 ` Sami Tolvanen
2024-09-02 10:05 ` Petr Pavlu
2024-09-05 17:19 ` Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 07/19] gendwarfksyms: Expand type modifiers and typedefs Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 08/19] gendwarfksyms: Expand subroutine_type Sami Tolvanen
2024-09-03 15:11 ` Petr Pavlu
2024-09-05 17:22 ` Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 09/19] gendwarfksyms: Expand array_type Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 10/19] gendwarfksyms: Expand structure types Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 11/19] gendwarfksyms: Limit structure expansion Sami Tolvanen
2024-09-03 15:15 ` Petr Pavlu
2024-09-05 18:15 ` Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 12/19] gendwarfksyms: Add die_map debugging Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 13/19] gendwarfksyms: Add symtypes output Sami Tolvanen
2024-09-10 14:58 ` Petr Pavlu
2024-09-10 21:15 ` Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 14/19] gendwarfksyms: Add symbol versioning Sami Tolvanen
2024-09-11 10:08 ` Petr Pavlu
2024-09-11 16:03 ` Sami Tolvanen
2024-09-12 10:28 ` Petr Pavlu
2024-08-15 17:39 ` [PATCH v2 15/19] gendwarfksyms: Add support for declaration-only data structures Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 16/19] gendwarfksyms: Add support for reserved structure fields Sami Tolvanen
2024-08-16 7:20 ` Greg Kroah-Hartman
2024-08-16 15:50 ` Sami Tolvanen
2024-08-17 7:41 ` Greg Kroah-Hartman [this message]
2024-08-17 13:19 ` Benno Lossin
2024-08-19 18:25 ` Greg Kroah-Hartman
2024-08-19 21:46 ` Benno Lossin
2024-08-19 19:38 ` Sami Tolvanen
2024-08-19 22:16 ` Benno Lossin
2024-08-20 18:47 ` Sami Tolvanen
2024-08-20 20:03 ` Matthew Maurer
2024-08-21 11:31 ` Benno Lossin
2024-08-21 23:01 ` Sami Tolvanen
2024-08-21 23:29 ` Greg Kroah-Hartman
2024-08-22 5:55 ` Benno Lossin
2024-08-22 7:29 ` Greg Kroah-Hartman
2024-08-22 12:00 ` Benno Lossin
2024-08-22 23:53 ` Greg Kroah-Hartman
2024-08-23 19:17 ` Sami Tolvanen
2024-08-24 13:29 ` Benno Lossin
2024-08-24 13:27 ` Benno Lossin
2024-08-30 9:34 ` Miroslav Benes
2024-08-31 0:05 ` Sami Tolvanen
2024-09-11 11:43 ` Petr Pavlu
2024-09-12 16:06 ` Sami Tolvanen
2024-09-12 18:08 ` Benno Lossin
2024-09-12 20:58 ` Sami Tolvanen
2024-09-12 21:58 ` Benno Lossin
2024-09-12 22:37 ` Sami Tolvanen
2024-09-13 8:00 ` Benno Lossin
2024-08-15 17:39 ` [PATCH v2 17/19] export: Add __gendwarfksyms_ptr_ references to exported symbols Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 18/19] x86/asm-prototypes: Include <asm/ptrace.h> Sami Tolvanen
2024-09-01 10:50 ` Masahiro Yamada
2024-09-04 20:47 ` Sami Tolvanen
2024-08-15 17:39 ` [PATCH v2 19/19] kbuild: Add gendwarfksyms as an alternative to genksyms Sami Tolvanen
2024-08-15 20:13 ` [PATCH v2 00/19] Implement DWARF modversions Sedat Dilek
2024-08-15 20:47 ` Sami Tolvanen
2024-08-21 0:12 ` Sedat Dilek
2024-08-16 7:15 ` Greg Kroah-Hartman
2024-08-22 16:43 ` Jonathan Corbet
2024-08-22 17:57 ` Sami Tolvanen
2024-08-28 7:04 ` Masahiro Yamada
2024-08-28 22:53 ` Sami Tolvanen
2024-09-02 9:57 ` Petr Pavlu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2024081705-overarch-deceptive-6689@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=alex.gaynor@gmail.com \
--cc=asahi@lists.linux.dev \
--cc=gary@garyguo.net \
--cc=j@jannau.net \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-modules@vger.kernel.org \
--cc=marcan@marcan.st \
--cc=masahiroy@kernel.org \
--cc=mcgrof@kernel.org \
--cc=mmaurer@google.com \
--cc=neal@gompa.dev \
--cc=ojeda@kernel.org \
--cc=petr.pavlu@suse.com \
--cc=rust-for-linux@vger.kernel.org \
--cc=samitolvanen@google.com \
--cc=wedsonaf@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).