All of lore.kernel.org
 help / color / mirror / Atom feed
From: Miguel Ojeda <ojeda@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-fsdevel@vger.kernel.org, patches@lists.linux.dev,
	"Jarkko Sakkinen" <jarkko@kernel.org>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Alex Gaynor" <alex.gaynor@gmail.com>,
	"Geoffrey Thomas" <geofft@ldpreload.com>,
	"Wedson Almeida Filho" <wedsonaf@google.com>,
	"Sven Van Asbroeck" <thesven73@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Maciej Falkowski" <m.falkowski@samsung.com>,
	"Wei Liu" <wei.liu@kernel.org>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>
Subject: [PATCH v10 06/27] rust: add C helpers
Date: Tue, 27 Sep 2022 15:14:37 +0200	[thread overview]
Message-ID: <20220927131518.30000-7-ojeda@kernel.org> (raw)
In-Reply-To: <20220927131518.30000-1-ojeda@kernel.org>

Introduces the source file that will contain forwarders to C macros
and inlined functions.

Initially this only contains a single helper, but will gain more as
more functionality is added to the `kernel` crate in the future.

Co-developed-by: Alex Gaynor <alex.gaynor@gmail.com>
Signed-off-by: Alex Gaynor <alex.gaynor@gmail.com>
Co-developed-by: Geoffrey Thomas <geofft@ldpreload.com>
Signed-off-by: Geoffrey Thomas <geofft@ldpreload.com>
Co-developed-by: Wedson Almeida Filho <wedsonaf@google.com>
Signed-off-by: Wedson Almeida Filho <wedsonaf@google.com>
Co-developed-by: Sven Van Asbroeck <thesven73@gmail.com>
Signed-off-by: Sven Van Asbroeck <thesven73@gmail.com>
Co-developed-by: Gary Guo <gary@garyguo.net>
Signed-off-by: Gary Guo <gary@garyguo.net>
Co-developed-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Co-developed-by: Maciej Falkowski <m.falkowski@samsung.com>
Signed-off-by: Maciej Falkowski <m.falkowski@samsung.com>
Co-developed-by: Wei Liu <wei.liu@kernel.org>
Signed-off-by: Wei Liu <wei.liu@kernel.org>
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
---
 rust/helpers.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)
 create mode 100644 rust/helpers.c

diff --git a/rust/helpers.c b/rust/helpers.c
new file mode 100644
index 000000000000..b4f15eee2ffd
--- /dev/null
+++ b/rust/helpers.c
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Non-trivial C macros cannot be used in Rust. Similarly, inlined C functions
+ * cannot be called either. This file explicitly creates functions ("helpers")
+ * that wrap those so that they can be called from Rust.
+ *
+ * Even though Rust kernel modules should never use directly the bindings, some
+ * of these helpers need to be exported because Rust generics and inlined
+ * functions may not get their code generated in the crate where they are
+ * defined. Other helpers, called from non-inline functions, may not be
+ * exported, in principle. However, in general, the Rust compiler does not
+ * guarantee codegen will be performed for a non-inline function either.
+ * Therefore, this file exports all the helpers. In the future, this may be
+ * revisited to reduce the number of exports after the compiler is informed
+ * about the places codegen is required.
+ *
+ * All symbols are exported as GPL-only to guarantee no GPL-only feature is
+ * accidentally exposed.
+ */
+
+#include <linux/bug.h>
+#include <linux/build_bug.h>
+
+__noreturn void rust_helper_BUG(void)
+{
+	BUG();
+}
+EXPORT_SYMBOL_GPL(rust_helper_BUG);
+
+/*
+ * We use `bindgen`'s `--size_t-is-usize` option to bind the C `size_t` type
+ * as the Rust `usize` type, so we can use it in contexts where Rust
+ * expects a `usize` like slice (array) indices. `usize` is defined to be
+ * the same as C's `uintptr_t` type (can hold any pointer) but not
+ * necessarily the same as `size_t` (can hold the size of any single
+ * object). Most modern platforms use the same concrete integer type for
+ * both of them, but in case we find ourselves on a platform where
+ * that's not true, fail early instead of risking ABI or
+ * integer-overflow issues.
+ *
+ * If your platform fails this assertion, it means that you are in
+ * danger of integer-overflow bugs (even if you attempt to remove
+ * `--size_t-is-usize`). It may be easiest to change the kernel ABI on
+ * your platform such that `size_t` matches `uintptr_t` (i.e., to increase
+ * `size_t`, because `uintptr_t` has to be at least as big as `size_t`).
+ */
+static_assert(
+	sizeof(size_t) == sizeof(uintptr_t) &&
+	__alignof__(size_t) == __alignof__(uintptr_t),
+	"Rust code expects C `size_t` to match Rust `usize`"
+);
-- 
2.37.3


  parent reply	other threads:[~2022-09-27 13:16 UTC|newest]

Thread overview: 109+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-27 13:14 [PATCH v10 00/27] Rust support Miguel Ojeda
2022-09-27 13:14 ` [PATCH v10 01/27] kallsyms: use `ARRAY_SIZE` instead of hardcoded size Miguel Ojeda
2022-09-27 14:05   ` Geert Stappers
2022-09-27 14:51   ` Greg Kroah-Hartman
2022-09-28 14:58   ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 02/27] kallsyms: avoid hardcoding buffer size Miguel Ojeda
2022-09-27 14:52   ` Greg Kroah-Hartman
2022-09-28 14:59   ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 03/27] kallsyms: add static relationship between `KSYM_NAME_LEN{,_BUFFER}` Miguel Ojeda
2022-09-27 14:54   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 04/27] kallsyms: support "big" kernel symbols Miguel Ojeda
2022-09-27 14:55   ` Greg Kroah-Hartman
2022-10-29 17:41   ` Guenter Roeck
2022-10-29 18:23     ` Guenter Roeck
2022-09-27 13:14 ` [PATCH v10 05/27] kallsyms: increase maximum kernel symbol length to 512 Miguel Ojeda
2022-09-27 14:56   ` Greg Kroah-Hartman
2022-09-27 13:14 ` Miguel Ojeda [this message]
2022-09-27 14:59   ` [PATCH v10 06/27] rust: add C helpers Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 07/27] rust: import upstream `alloc` crate Miguel Ojeda
2022-09-27 13:14 ` [PATCH v10 08/27] rust: adapt `alloc` crate to the kernel Miguel Ojeda
2022-09-27 13:51   ` Konstantin Shelekhin
2022-09-27 14:06     ` Miguel Ojeda
2022-09-27 15:13       ` Konstantin Shelekhin
2022-09-27 16:01         ` Miguel Ojeda
2022-09-27 15:35   ` Greg Kroah-Hartman
2022-09-28 15:10   ` Wei Liu
2022-09-28 15:25     ` Miguel Ojeda
2022-09-28 15:27       ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 09/27] rust: add `compiler_builtins` crate Miguel Ojeda
2022-09-28 13:25   ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 10/27] rust: add `macros` crate Miguel Ojeda
2022-09-27 13:48   ` Konstantin Shelekhin
2022-09-27 13:59     ` Geert Stappers
2022-09-27 14:01     ` Miguel Ojeda
2022-09-28 15:29   ` Wei Liu
2022-09-28 16:36     ` Miguel Ojeda
2022-09-27 13:14 ` [PATCH v10 11/27] rust: add `bindings` crate Miguel Ojeda
2022-09-27 15:23   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 12/27] rust: add `kernel` crate Miguel Ojeda
2022-09-27 15:22   ` Greg Kroah-Hartman
2022-09-27 15:36     ` Alex Gaynor
2022-09-27 15:43     ` Miguel Ojeda
2022-09-27 13:14 ` [PATCH v10 13/27] rust: export generated symbols Miguel Ojeda
2022-09-27 15:32   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 14/27] vsprintf: add new `%pA` format specifier Miguel Ojeda
2022-09-27 15:00   ` Greg Kroah-Hartman
2022-09-28 10:09   ` Sergey Senozhatsky
2022-09-27 13:14 ` [PATCH v10 15/27] scripts: checkpatch: diagnose uses of `%pA` in the C side as errors Miguel Ojeda
2022-09-27 15:03   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 16/27] scripts: checkpatch: enable language-independent checks for Rust Miguel Ojeda
2022-09-27 15:02   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 17/27] scripts: decode_stacktrace: demangle Rust symbols Miguel Ojeda
2022-09-27 15:02   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 18/27] scripts: add `generate_rust_analyzer.py` Miguel Ojeda
2022-09-27 13:14 ` [PATCH v10 19/27] scripts: add `generate_rust_target.rs` Miguel Ojeda
2022-09-27 13:14 ` [PATCH v10 20/27] scripts: add `rust_is_available.sh` Miguel Ojeda
2022-09-28 14:49   ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 21/27] scripts: add `is_rust_module.sh` Miguel Ojeda
2022-09-27 15:26   ` Greg Kroah-Hartman
2022-09-27 13:14 ` [PATCH v10 22/27] rust: add `.rustfmt.toml` Miguel Ojeda
2022-09-28 13:30   ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 23/27] Kbuild: add Rust support Miguel Ojeda
2022-09-27 15:30   ` Greg Kroah-Hartman
2022-09-28 14:56   ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 24/27] docs: add Rust documentation Miguel Ojeda
2022-09-27 13:14 ` [PATCH v10 25/27] x86: enable initial Rust support Miguel Ojeda
2022-09-27 15:31   ` Greg Kroah-Hartman
2022-09-28 14:32   ` Wei Liu
2022-09-28 16:39     ` Miguel Ojeda
2022-10-07 17:17   ` Peter Zijlstra
2022-10-10 23:15     ` Sami Tolvanen
2022-10-11  8:04       ` Peter Zijlstra
2022-10-14 17:23         ` Miguel Ojeda
2022-10-14 17:25           ` Boqun Feng
2022-10-14 18:05       ` Miguel Ojeda
2022-10-14 18:34         ` Sami Tolvanen
2022-10-14 20:39           ` Miguel Ojeda
2023-10-09 16:00             ` Matthew Maurer
2023-10-09 16:31               ` Miguel Ojeda
2023-10-09 17:37                 ` Greg Kroah-Hartman
2023-10-12 10:47           ` Peter Zijlstra
2023-10-12 17:50             ` Sami Tolvanen
2023-10-12 18:31               ` Kees Cook
2023-10-12 22:26                 ` Ramon de C Valle
     [not found]                 ` <CAOcBZOTed1a1yOimdUN9yuuysZ1h6VXa57+5fLAE99SZxCwBMQ@mail.gmail.com>
2023-10-13  7:50                   ` Peter Zijlstra
2023-10-13 12:17                     ` Ramon de C Valle
2023-10-13 18:54                       ` Linus Torvalds
2023-10-13 19:00                         ` H. Peter Anvin
2023-10-13 19:22                           ` Linus Torvalds
2023-10-14 20:25                           ` comex
2023-10-14 20:50                             ` H. Peter Anvin
2022-09-27 13:14 ` [PATCH v10 26/27] samples: add first Rust examples Miguel Ojeda
2022-09-27 15:25   ` Greg Kroah-Hartman
2022-09-28 14:23   ` Wei Liu
2022-09-27 13:14 ` [PATCH v10 27/27] MAINTAINERS: Rust Miguel Ojeda
2022-09-27 14:11   ` Geert Stappers
2022-09-27 15:19     ` Kees Cook
2022-09-27 15:34       ` Greg Kroah-Hartman
2022-09-27 15:53         ` Miguel Ojeda
2022-09-27 16:39           ` Greg Kroah-Hartman
2022-09-27 18:14             ` Kees Cook
2022-09-28  0:11           ` Kees Cook
2022-09-28 11:57             ` Wedson Almeida Filho
2022-09-28 12:22               ` Miguel Ojeda
2022-09-27 16:00       ` Wedson Almeida Filho
2022-09-27 16:38   ` Greg Kroah-Hartman
2022-09-28 15:06 ` [PATCH v10 00/27] Rust support Wei Liu
2022-09-28 15:34   ` Miguel Ojeda
2022-09-28 15:40     ` Wei Liu

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=20220927131518.30000-7-ojeda@kernel.org \
    --to=ojeda@kernel.org \
    --cc=alex.gaynor@gmail.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=gary@garyguo.net \
    --cc=geofft@ldpreload.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jarkko@kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=m.falkowski@samsung.com \
    --cc=patches@lists.linux.dev \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=thesven73@gmail.com \
    --cc=torvalds@linux-foundation.org \
    --cc=wedsonaf@google.com \
    --cc=wei.liu@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.