diff options
author | Gary Guo <gary@garyguo.net> | 2024-09-13 22:29:21 +0100 |
---|---|---|
committer | Miguel Ojeda <ojeda@kernel.org> | 2024-11-10 23:54:43 +0100 |
commit | 75c1fd41a671a0843b89d1526411a837a7163fa2 (patch) | |
tree | 028b685f77bc52589e6d7a26f5177562d55cab32 /scripts/rust_is_available_bindgen_libclang_concat.h | |
parent | 8eea62ff94f4dbad8ee884b0b33202e0a0fb350b (diff) | |
download | linux-stable-75c1fd41a671a0843b89d1526411a837a7163fa2.tar.gz linux-stable-75c1fd41a671a0843b89d1526411a837a7163fa2.tar.bz2 linux-stable-75c1fd41a671a0843b89d1526411a837a7163fa2.zip |
rust: fix size_t in bindgen prototypes of C builtins
Without `-fno-builtin`, for functions like memcpy/memmove (and many
others), bindgen seems to be using the clang-provided prototype. This
prototype is ABI-wise compatible, but the issue is that it does not have
the same information as the source code w.r.t. typedefs.
For example, bindgen generates the following:
extern "C" {
pub fn strlen(s: *const core::ffi::c_char) -> core::ffi::c_ulong;
}
note that the return type is `c_ulong` (i.e. unsigned long), despite the
size_t-is-usize behavior (this is default, and we have not opted out
from it using --no-size_t-is-usize).
Similarly, memchr's size argument should be of type `__kernel_size_t`,
but bindgen generates `c_ulong` directly.
We want to ensure any `size_t` is translated to Rust `usize` so that we
can avoid having them be different type on 32-bit and 64-bit
architectures, and hence would require a lot of excessive type casts
when calling FFI functions.
I found that this bindgen behavior (which probably is caused by
libclang) can be disabled by `-fno-builtin`. Using the flag for compiled
code can result in less optimisation because compiler cannot assume
about their properties anymore, but this should not affect bindgen.
[ Trevor asked: "I wonder how reliable this behavior is. Maybe bindgen
could do a better job controlling this, is there an open issue?".
Gary replied: ..."apparently this is indeed the suggested approach in
https://github.com/rust-lang/rust-bindgen/issues/1770". - Miguel ]
Signed-off-by: Gary Guo <gary@garyguo.net>
Link: https://lore.kernel.org/r/20240913213041.395655-2-gary@garyguo.net
[ Formatted comment. - Miguel ]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Diffstat (limited to 'scripts/rust_is_available_bindgen_libclang_concat.h')
0 files changed, 0 insertions, 0 deletions