Define the C interface to vxWorks for x86, x86_64, ARM, ARM 64-bit, PowerPC, PowerPC SPE and PowerPC 64-bit.

This commit is contained in:
Baoshan Pang 2019-04-02 14:04:06 -07:00
parent 636d86a951
commit d18003a277
11 changed files with 1565 additions and 1428 deletions

View File

@ -224,6 +224,13 @@ x86_64-unknown-haiku \
x86_64-unknown-hermit \ x86_64-unknown-hermit \
x86_64-unknown-l4re-uclibc \ x86_64-unknown-l4re-uclibc \
x86_64-unknown-openbsd \ x86_64-unknown-openbsd \
armv7-wrs-vxworks \
aarch64-wrs-vxworks \
i686-wrs-vxworks \
x86_64-wrs-vxworks \
powerpc-wrs-vxworks \
powerpc-wrs-vxworks-spe \
powerpc64-wrs-vxworks \
" "
if [ "${RUST}" = "nightly" ] && [ "${OS}" = "linux" ]; then if [ "${RUST}" = "nightly" ] && [ "${OS}" = "linux" ]; then

View File

@ -115,8 +115,11 @@ cfg_if! {
mod switch; mod switch;
pub use switch::*; pub use switch::*;
} else if #[cfg(target_os = "vxworks")] { } else if #[cfg(target_os = "vxworks")] {
mod vxworks; mod fixed_width_ints;
pub use vxworks::*; pub use fixed_width_ints::*;
mod vxworks;
pub use vxworks::*;
} else if #[cfg(unix)] { } else if #[cfg(unix)] {
mod fixed_width_ints; mod fixed_width_ints;
pub use fixed_width_ints::*; pub use fixed_width_ints::*;

View File

@ -1,38 +1,3 @@
pub type c_char = u8;
pub type c_long = i64; pub type c_long = i64;
pub type c_ulong = u64; pub type c_ulong = u64;
#[cfg(feature = "_WRS_KERNEL")]
pub type _Vx_TASK_ID = *mut ::windTcb;
#[cfg(feature = "_WRS_KERNEL")]
s! {
pub struct OBJ_CORE {
pub handle : ::HANDLE,
pub ownerList : ::DL_LIST,
pub ownerNode : ::DL_NODE,
pub classNode : ::DL_NODE,
pub ownerId : *mut ::OBJ_CORE,
pub ownerRtpId : ::RTP_ID,
pub name : *mut ::c_char,
pub pObjClass : *mut ::wind_class,
pub objHandleList : ::DL_LIST,
pub refCnt : u16,
pub accessCnt : u16,
pub padding : u32, // There is a chance that Rust automatically pads, but
// no point in risking it
}
// semLibP.h
pub struct semaphore {
#[repr(align(16))]
pub magic : ::OBJ_CORE,
pub semType : u8,
pub options : u8,
pub recurse : u16,
pub priInheritFlag : ::BOOL,
pub qHead : ::Q_HEAD,
pub state : ::size_t, //state is union of UINT and struct pointer
pub events : ::EVENTS_RSRC,
}
}

3
src/vxworks/arm.rs Normal file
View File

@ -0,0 +1,3 @@
pub type c_char = u8;
pub type c_long = i32;
pub type c_ulong = u32;

View File

@ -1,35 +1,2 @@
pub type c_long = i32; pub type c_long = i32;
pub type c_ulong = u32; pub type c_ulong = u32;
#[cfg(feature = "_WRS_KERNEL")]
pub type _Vx_TASK_ID = ::c_int;
#[cfg(feature = "_WRS_KERNEL")]
s! {
pub struct OBJ_CORE {
pub handle : ::HANDLE,
pub ownerList : ::DL_LIST,
pub ownerNode : ::DL_NODE,
pub classNode : ::DL_NODE,
pub ownerId : *mut ::OBJ_CORE,
pub ownerRtpId : ::RTP_ID,
pub name : *mut ::c_char,
pub pObjClass : *mut ::wind_class,
pub objHandleList : ::DL_LIST,
pub refCnt : u16,
pub accessCnt : u16,
}
// semLibP.h
pub struct semaphore {
#[repr(align(8))]
pub magic : ::OBJ_CORE,
pub semType : u8,
pub options : u8,
pub recurse : u16,
pub priInheritFlag : ::BOOL,
pub qHead : ::Q_HEAD,
pub state : ::size_t, //state is union of UINT and struct pointer
pub events : ::EVENTS_RSRC,
}
}

View File

File diff suppressed because it is too large Load Diff

3
src/vxworks/powerpc.rs Normal file
View File

@ -0,0 +1,3 @@
pub type c_char = u8;
pub type c_long = i32;
pub type c_ulong = u32;

3
src/vxworks/powerpc64.rs Normal file
View File

@ -0,0 +1,3 @@
pub type c_char = u8;
pub type c_long = i64;
pub type c_ulong = u64;

View File

@ -1,35 +1,3 @@
pub type c_char = i8;
pub type c_long = i32; pub type c_long = i32;
pub type c_ulong = u32; pub type c_ulong = u32;
#[cfg(feature = "_WRS_KERNEL")]
pub type _Vx_TASK_ID = ::c_int;
#[cfg(feature = "_WRS_KERNEL")]
s! {
pub struct OBJ_CORE {
pub handle : ::HANDLE,
pub ownerList : ::DL_LIST,
pub ownerNode : ::DL_NODE,
pub classNode : ::DL_NODE,
pub ownerId : *mut ::OBJ_CORE,
pub ownerRtpId : ::RTP_ID,
pub name : *mut ::c_char,
pub pObjClass : *mut ::wind_class,
pub objHandleList : ::DL_LIST,
pub refCnt : u16,
pub accessCnt : u16,
}
// semLibP.h
pub struct semaphore {
#[repr(align(8))]
pub magic : ::OBJ_CORE,
pub semType : u8,
pub options : u8,
pub recurse : u16,
pub priInheritFlag : ::BOOL,
pub qHead : ::Q_HEAD,
pub state : ::size_t, //state is union of UINT and struct pointer
pub events : ::EVENTS_RSRC,
}
}

View File

@ -1,38 +1,3 @@
pub type c_long = i64; pub type c_long = i64;
pub type c_ulong = u64; pub type c_ulong = u64;
pub type c_char = i8;
#[cfg(feature = "_WRS_KERNEL")]
pub type _Vx_TASK_ID = *mut ::windTcb;
#[cfg(feature = "_WRS_KERNEL")]
s! {
pub struct OBJ_CORE {
pub handle : ::HANDLE,
pub ownerList : ::DL_LIST,
pub ownerNode : ::DL_NODE,
pub classNode : ::DL_NODE,
pub ownerId : *mut ::OBJ_CORE,
pub ownerRtpId : ::RTP_ID,
pub name : *mut ::c_char,
pub pObjClass : *mut ::wind_class,
pub objHandleList : ::DL_LIST,
pub refCnt : u16,
pub accessCnt : u16,
pub padding : u32, // There is a chance that Rust automatically pads, but
// no point in risking it
}
// semLibP.h
pub struct semaphore {
#[repr(align(16))]
pub magic : ::OBJ_CORE,
pub semType : u8,
pub options : u8,
pub recurse : u16,
pub priInheritFlag : ::BOOL,
pub qHead : ::Q_HEAD,
pub state : ::size_t, //state is union of UINT and struct pointer
pub events : ::EVENTS_RSRC,
}
}