Skip to content

Commit 2fd6f55

Browse files
nbdd0121ojeda
authored andcommitted
rust: map __kernel_size_t and friends also to usize/isize
Currently bindgen has special logic to recognise `size_t` and `ssize_t` and map them to Rust `usize` and `isize`. Similarly, `ptrdiff_t` is mapped to `isize`. However this falls short for `__kernel_size_t`, `__kernel_ssize_t` and `__kernel_ptrdiff_t`. To ensure that they are mapped to usize/isize rather than 32/64 integers depending on platform, blocklist them in bindgen parameters and manually provide their definition. Signed-off-by: Gary Guo <[email protected]> Reviewed-by: Alice Ryhl <[email protected]> Reviewed-by: Trevor Gross <[email protected]> Link: https://lore.kernel.org/r/[email protected] [ Formatted comment. - Miguel ] Signed-off-by: Miguel Ojeda <[email protected]>
1 parent 75c1fd4 commit 2fd6f55

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

rust/bindgen_parameters

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# SPDX-License-Identifier: GPL-2.0
22

3+
# We want to map these types to `isize`/`usize` manually, instead of
4+
# define them as `int`/`long` depending on platform bitwidth.
5+
--blocklist-type __kernel_s?size_t
6+
--blocklist-type __kernel_ptrdiff_t
7+
38
--opaque-type xregs_state
49
--opaque-type desc_struct
510
--opaque-type arch_lbr_state

rust/bindings/lib.rs

+5
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@
2727
#[allow(dead_code)]
2828
#[allow(clippy::undocumented_unsafe_blocks)]
2929
mod bindings_raw {
30+
// Manual definition for blocklisted types.
31+
type __kernel_size_t = usize;
32+
type __kernel_ssize_t = isize;
33+
type __kernel_ptrdiff_t = isize;
34+
3035
// Use glob import here to expose all helpers.
3136
// Symbols defined within the module will take precedence to the glob import.
3237
pub use super::bindings_helper::*;

rust/uapi/lib.rs

+5
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,9 @@
2525
unsafe_op_in_unsafe_fn
2626
)]
2727

28+
// Manual definition of blocklisted types.
29+
type __kernel_size_t = usize;
30+
type __kernel_ssize_t = isize;
31+
type __kernel_ptrdiff_t = isize;
32+
2833
include!(concat!(env!("OBJTREE"), "/rust/uapi/uapi_generated.rs"));

0 commit comments

Comments
 (0)