Auto merge of #113001 - ChrisDenton:win-arm32-shim, r=thomcc
Move windows-sys arm32 shim to c.rs This moves the arm32 shim in to c.rs instead of appending to the generated file itself. This makes it simpler to change these workarounds if/when needed. The downside is we need to exclude a couple of functions from being generated (see the comment). A metadata solution could help here but they'll be easy enough to add back if that happens.
This commit is contained in:
commit
c51fbb3dd3
@ -431,3 +431,47 @@ compat_fn_with_fallback! {
|
|||||||
Status as u32
|
Status as u32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// # Arm32 shim
|
||||||
|
//
|
||||||
|
// AddVectoredExceptionHandler and WSAStartup use platform-specific types.
|
||||||
|
// However, Microsoft no longer supports thumbv7a so definitions for those targets
|
||||||
|
// are not included in the win32 metadata. We work around that by defining them here.
|
||||||
|
//
|
||||||
|
// Where possible, these definitions should be kept in sync with https://docs.rs/windows-sys
|
||||||
|
cfg_if::cfg_if! {
|
||||||
|
if #[cfg(not(target_vendor = "uwp"))] {
|
||||||
|
#[link(name = "kernel32")]
|
||||||
|
extern "system" {
|
||||||
|
pub fn AddVectoredExceptionHandler(
|
||||||
|
first: u32,
|
||||||
|
handler: PVECTORED_EXCEPTION_HANDLER,
|
||||||
|
) -> *mut c_void;
|
||||||
|
}
|
||||||
|
pub type PVECTORED_EXCEPTION_HANDLER = Option<
|
||||||
|
unsafe extern "system" fn(exceptioninfo: *mut EXCEPTION_POINTERS) -> i32,
|
||||||
|
>;
|
||||||
|
#[repr(C)]
|
||||||
|
pub struct EXCEPTION_POINTERS {
|
||||||
|
pub ExceptionRecord: *mut EXCEPTION_RECORD,
|
||||||
|
pub ContextRecord: *mut CONTEXT,
|
||||||
|
}
|
||||||
|
#[cfg(target_arch = "arm")]
|
||||||
|
pub enum CONTEXT {}
|
||||||
|
}}
|
||||||
|
|
||||||
|
#[link(name = "ws2_32")]
|
||||||
|
extern "system" {
|
||||||
|
pub fn WSAStartup(wversionrequested: u16, lpwsadata: *mut WSADATA) -> i32;
|
||||||
|
}
|
||||||
|
#[cfg(target_arch = "arm")]
|
||||||
|
#[repr(C)]
|
||||||
|
pub struct WSADATA {
|
||||||
|
pub wVersion: u16,
|
||||||
|
pub wHighVersion: u16,
|
||||||
|
pub szDescription: [u8; 257],
|
||||||
|
pub szSystemStatus: [u8; 129],
|
||||||
|
pub iMaxSockets: u16,
|
||||||
|
pub iMaxUdpDg: u16,
|
||||||
|
pub lpVendorInfo: PSTR,
|
||||||
|
}
|
||||||
|
@ -2171,7 +2171,6 @@ Windows.Win32.Networking.WinSock.WSARecv
|
|||||||
Windows.Win32.Networking.WinSock.WSASend
|
Windows.Win32.Networking.WinSock.WSASend
|
||||||
Windows.Win32.Networking.WinSock.WSASERVICE_NOT_FOUND
|
Windows.Win32.Networking.WinSock.WSASERVICE_NOT_FOUND
|
||||||
Windows.Win32.Networking.WinSock.WSASocketW
|
Windows.Win32.Networking.WinSock.WSASocketW
|
||||||
Windows.Win32.Networking.WinSock.WSAStartup
|
|
||||||
Windows.Win32.Networking.WinSock.WSASYSCALLFAILURE
|
Windows.Win32.Networking.WinSock.WSASYSCALLFAILURE
|
||||||
Windows.Win32.Networking.WinSock.WSASYSNOTREADY
|
Windows.Win32.Networking.WinSock.WSASYSNOTREADY
|
||||||
Windows.Win32.Networking.WinSock.WSATRY_AGAIN
|
Windows.Win32.Networking.WinSock.WSATRY_AGAIN
|
||||||
@ -2419,12 +2418,10 @@ Windows.Win32.System.Console.STD_HANDLE
|
|||||||
Windows.Win32.System.Console.STD_INPUT_HANDLE
|
Windows.Win32.System.Console.STD_INPUT_HANDLE
|
||||||
Windows.Win32.System.Console.STD_OUTPUT_HANDLE
|
Windows.Win32.System.Console.STD_OUTPUT_HANDLE
|
||||||
Windows.Win32.System.Console.WriteConsoleW
|
Windows.Win32.System.Console.WriteConsoleW
|
||||||
Windows.Win32.System.Diagnostics.Debug.AddVectoredExceptionHandler
|
|
||||||
Windows.Win32.System.Diagnostics.Debug.ARM64_NT_NEON128
|
Windows.Win32.System.Diagnostics.Debug.ARM64_NT_NEON128
|
||||||
Windows.Win32.System.Diagnostics.Debug.CONTEXT
|
Windows.Win32.System.Diagnostics.Debug.CONTEXT
|
||||||
Windows.Win32.System.Diagnostics.Debug.CONTEXT
|
Windows.Win32.System.Diagnostics.Debug.CONTEXT
|
||||||
Windows.Win32.System.Diagnostics.Debug.CONTEXT
|
Windows.Win32.System.Diagnostics.Debug.CONTEXT
|
||||||
Windows.Win32.System.Diagnostics.Debug.EXCEPTION_POINTERS
|
|
||||||
Windows.Win32.System.Diagnostics.Debug.EXCEPTION_RECORD
|
Windows.Win32.System.Diagnostics.Debug.EXCEPTION_RECORD
|
||||||
Windows.Win32.System.Diagnostics.Debug.FACILITY_CODE
|
Windows.Win32.System.Diagnostics.Debug.FACILITY_CODE
|
||||||
Windows.Win32.System.Diagnostics.Debug.FACILITY_NT_BIT
|
Windows.Win32.System.Diagnostics.Debug.FACILITY_NT_BIT
|
||||||
@ -2437,7 +2434,6 @@ Windows.Win32.System.Diagnostics.Debug.FORMAT_MESSAGE_IGNORE_INSERTS
|
|||||||
Windows.Win32.System.Diagnostics.Debug.FORMAT_MESSAGE_OPTIONS
|
Windows.Win32.System.Diagnostics.Debug.FORMAT_MESSAGE_OPTIONS
|
||||||
Windows.Win32.System.Diagnostics.Debug.FormatMessageW
|
Windows.Win32.System.Diagnostics.Debug.FormatMessageW
|
||||||
Windows.Win32.System.Diagnostics.Debug.M128A
|
Windows.Win32.System.Diagnostics.Debug.M128A
|
||||||
Windows.Win32.System.Diagnostics.Debug.PVECTORED_EXCEPTION_HANDLER
|
|
||||||
Windows.Win32.System.Diagnostics.Debug.XSAVE_FORMAT
|
Windows.Win32.System.Diagnostics.Debug.XSAVE_FORMAT
|
||||||
Windows.Win32.System.Diagnostics.Debug.XSAVE_FORMAT
|
Windows.Win32.System.Diagnostics.Debug.XSAVE_FORMAT
|
||||||
Windows.Win32.System.Environment.FreeEnvironmentStringsW
|
Windows.Win32.System.Environment.FreeEnvironmentStringsW
|
||||||
|
@ -39,13 +39,6 @@ extern "system" {
|
|||||||
pub fn AcquireSRWLockShared(srwlock: *mut RTL_SRWLOCK) -> ();
|
pub fn AcquireSRWLockShared(srwlock: *mut RTL_SRWLOCK) -> ();
|
||||||
}
|
}
|
||||||
#[link(name = "kernel32")]
|
#[link(name = "kernel32")]
|
||||||
extern "system" {
|
|
||||||
pub fn AddVectoredExceptionHandler(
|
|
||||||
first: u32,
|
|
||||||
handler: PVECTORED_EXCEPTION_HANDLER,
|
|
||||||
) -> *mut ::core::ffi::c_void;
|
|
||||||
}
|
|
||||||
#[link(name = "kernel32")]
|
|
||||||
extern "system" {
|
extern "system" {
|
||||||
pub fn CancelIo(hfile: HANDLE) -> BOOL;
|
pub fn CancelIo(hfile: HANDLE) -> BOOL;
|
||||||
}
|
}
|
||||||
@ -711,10 +704,6 @@ extern "system" {
|
|||||||
) -> SOCKET;
|
) -> SOCKET;
|
||||||
}
|
}
|
||||||
#[link(name = "ws2_32")]
|
#[link(name = "ws2_32")]
|
||||||
extern "system" {
|
|
||||||
pub fn WSAStartup(wversionrequested: u16, lpwsadata: *mut WSADATA) -> i32;
|
|
||||||
}
|
|
||||||
#[link(name = "ws2_32")]
|
|
||||||
extern "system" {
|
extern "system" {
|
||||||
pub fn accept(s: SOCKET, addr: *mut SOCKADDR, addrlen: *mut i32) -> SOCKET;
|
pub fn accept(s: SOCKET, addr: *mut SOCKADDR, addrlen: *mut i32) -> SOCKET;
|
||||||
}
|
}
|
||||||
@ -3029,17 +3018,6 @@ pub const ERROR_XML_PARSE_ERROR: WIN32_ERROR = 1465u32;
|
|||||||
pub type EXCEPTION_DISPOSITION = i32;
|
pub type EXCEPTION_DISPOSITION = i32;
|
||||||
pub const EXCEPTION_MAXIMUM_PARAMETERS: u32 = 15u32;
|
pub const EXCEPTION_MAXIMUM_PARAMETERS: u32 = 15u32;
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
pub struct EXCEPTION_POINTERS {
|
|
||||||
pub ExceptionRecord: *mut EXCEPTION_RECORD,
|
|
||||||
pub ContextRecord: *mut CONTEXT,
|
|
||||||
}
|
|
||||||
impl ::core::marker::Copy for EXCEPTION_POINTERS {}
|
|
||||||
impl ::core::clone::Clone for EXCEPTION_POINTERS {
|
|
||||||
fn clone(&self) -> Self {
|
|
||||||
*self
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
pub struct EXCEPTION_RECORD {
|
pub struct EXCEPTION_RECORD {
|
||||||
pub ExceptionCode: NTSTATUS,
|
pub ExceptionCode: NTSTATUS,
|
||||||
pub ExceptionFlags: u32,
|
pub ExceptionFlags: u32,
|
||||||
@ -3748,9 +3726,6 @@ pub const PROFILE_SERVER: PROCESS_CREATION_FLAGS = 1073741824u32;
|
|||||||
pub const PROFILE_USER: PROCESS_CREATION_FLAGS = 268435456u32;
|
pub const PROFILE_USER: PROCESS_CREATION_FLAGS = 268435456u32;
|
||||||
pub const PROGRESS_CONTINUE: u32 = 0u32;
|
pub const PROGRESS_CONTINUE: u32 = 0u32;
|
||||||
pub type PSTR = *mut u8;
|
pub type PSTR = *mut u8;
|
||||||
pub type PVECTORED_EXCEPTION_HANDLER = ::core::option::Option<
|
|
||||||
unsafe extern "system" fn(exceptioninfo: *mut EXCEPTION_POINTERS) -> i32,
|
|
||||||
>;
|
|
||||||
pub type PWSTR = *mut u16;
|
pub type PWSTR = *mut u16;
|
||||||
pub const READ_CONTROL: FILE_ACCESS_RIGHTS = 131072u32;
|
pub const READ_CONTROL: FILE_ACCESS_RIGHTS = 131072u32;
|
||||||
pub const REALTIME_PRIORITY_CLASS: PROCESS_CREATION_FLAGS = 256u32;
|
pub const REALTIME_PRIORITY_CLASS: PROCESS_CREATION_FLAGS = 256u32;
|
||||||
@ -4275,23 +4250,3 @@ impl ::core::clone::Clone for XSAVE_FORMAT {
|
|||||||
*self
|
*self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Begin of ARM32 shim
|
|
||||||
// The raw content of this file should be processed by `generate-windows-sys`
|
|
||||||
// to be merged with the generated binding. It is not supposed to be used as
|
|
||||||
// a normal Rust module.
|
|
||||||
cfg_if::cfg_if! {
|
|
||||||
if #[cfg(target_arch = "arm")] {
|
|
||||||
#[repr(C)]
|
|
||||||
pub struct WSADATA {
|
|
||||||
pub wVersion: u16,
|
|
||||||
pub wHighVersion: u16,
|
|
||||||
pub szDescription: [u8; 257],
|
|
||||||
pub szSystemStatus: [u8; 129],
|
|
||||||
pub iMaxSockets: u16,
|
|
||||||
pub iMaxUdpDg: u16,
|
|
||||||
pub lpVendorInfo: PSTR,
|
|
||||||
}
|
|
||||||
pub enum CONTEXT {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// End of ARM32 shim
|
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
// Begin of ARM32 shim
|
|
||||||
// The raw content of this file should be processed by `generate-windows-sys`
|
|
||||||
// to be merged with the generated binding. It is not supposed to be used as
|
|
||||||
// a normal Rust module.
|
|
||||||
cfg_if::cfg_if! {
|
|
||||||
if #[cfg(target_arch = "arm")] {
|
|
||||||
#[repr(C)]
|
|
||||||
pub struct WSADATA {
|
|
||||||
pub wVersion: u16,
|
|
||||||
pub wHighVersion: u16,
|
|
||||||
pub szDescription: [u8; 257],
|
|
||||||
pub szSystemStatus: [u8; 129],
|
|
||||||
pub iMaxSockets: u16,
|
|
||||||
pub iMaxUdpDg: u16,
|
|
||||||
pub lpVendorInfo: PSTR,
|
|
||||||
}
|
|
||||||
pub enum CONTEXT {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// End of ARM32 shim
|
|
@ -11,9 +11,6 @@ const PRELUDE: &str = r#"// This file is autogenerated.
|
|||||||
// ignore-tidy-filelength
|
// ignore-tidy-filelength
|
||||||
"#;
|
"#;
|
||||||
|
|
||||||
/// This is a shim for the ARM (32-bit) architecture, which is no longer supported by windows-rs.
|
|
||||||
const ARM_SHIM: &str = include_str!("arm_shim.rs");
|
|
||||||
|
|
||||||
fn main() -> io::Result<()> {
|
fn main() -> io::Result<()> {
|
||||||
let mut path: PathBuf =
|
let mut path: PathBuf =
|
||||||
std::env::args_os().nth(1).expect("a path to the rust repository is required").into();
|
std::env::args_os().nth(1).expect("a path to the rust repository is required").into();
|
||||||
@ -35,7 +32,6 @@ fn main() -> io::Result<()> {
|
|||||||
let mut f = std::fs::File::create(&path)?;
|
let mut f = std::fs::File::create(&path)?;
|
||||||
f.write_all(PRELUDE.as_bytes())?;
|
f.write_all(PRELUDE.as_bytes())?;
|
||||||
f.write_all(bindings.as_bytes())?;
|
f.write_all(bindings.as_bytes())?;
|
||||||
f.write_all(ARM_SHIM.as_bytes())?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user