Skip to content
Snippets Groups Projects
  • Gary Guo's avatar
    1bae8729
    rust: map `long` to `isize` and `char` to `u8` · 1bae8729
    Gary Guo authored
    
    The following FFI types are replaced compared to `core::ffi`:
    
    1. `char` type is now always mapped to `u8`, since kernel uses
       `-funsigned-char` on the C code. `core::ffi` maps it to platform
       default ABI, which can be either signed or unsigned.
    
    2. `long` is now always mapped to `isize`. It's very common in the
       kernel to use `long` to represent a pointer-sized integer, and in
       fact `intptr_t` is a typedef of `long` in the kernel. Enforce this
       mapping rather than mapping to `i32/i64` depending on platform can
       save us a lot of unnecessary casts.
    
    Signed-off-by: default avatarGary Guo <gary@garyguo.net>
    Reviewed-by: default avatarAlice Ryhl <aliceryhl@google.com>
    Link: https://lore.kernel.org/r/20240913213041.395655-5-gary@garyguo.net
    
    
    [ Moved `uaccess` changes from the next commit, since they were
      irrefutable patterns that Rust >= 1.82.0 warns about. Reworded
      slightly and reformatted a few documentation comments. Rebased on
      top of `rust-next`. Added the removal of two casts to avoid Clippy
      warnings. - Miguel ]
    Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
    1bae8729
    History
    rust: map `long` to `isize` and `char` to `u8`
    Gary Guo authored
    
    The following FFI types are replaced compared to `core::ffi`:
    
    1. `char` type is now always mapped to `u8`, since kernel uses
       `-funsigned-char` on the C code. `core::ffi` maps it to platform
       default ABI, which can be either signed or unsigned.
    
    2. `long` is now always mapped to `isize`. It's very common in the
       kernel to use `long` to represent a pointer-sized integer, and in
       fact `intptr_t` is a typedef of `long` in the kernel. Enforce this
       mapping rather than mapping to `i32/i64` depending on platform can
       save us a lot of unnecessary casts.
    
    Signed-off-by: default avatarGary Guo <gary@garyguo.net>
    Reviewed-by: default avatarAlice Ryhl <aliceryhl@google.com>
    Link: https://lore.kernel.org/r/20240913213041.395655-5-gary@garyguo.net
    
    
    [ Moved `uaccess` changes from the next commit, since they were
      irrefutable patterns that Rust >= 1.82.0 warns about. Reworded
      slightly and reformatted a few documentation comments. Rebased on
      top of `rust-next`. Added the removal of two casts to avoid Clippy
      warnings. - Miguel ]
    Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>