Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
security/rustscan: Fix build on aarch64.
- Loading branch information
1 parent
99ed668
commit cb03ad8
Showing
1 changed file
with
127 additions
and
0 deletions.
There are no files selected for viewing
127 changes: 127 additions & 0 deletions
127
security/rustscan/files/patch-cargo-crates_ring-0.16.15
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
--- cargo-crates/ring-0.16.15/Cargo.toml.orig 2020-06-16 23:27:06 UTC | ||
+++ cargo-crates/ring-0.16.15/Cargo.toml | ||
@@ -70,7 +70,7 @@ version = "1.3.1" | ||
features = ["std"] | ||
optional = true | ||
default-features = false | ||
-[target."cfg(any(target_os = \"android\", target_os = \"linux\"))".dependencies.libc] | ||
+[target."cfg(any(target_os = \"android\", target_os = \"freebsd\", target_os = \"linux\"))".dependencies.libc] | ||
version = "0.2.69" | ||
default-features = false | ||
[target."cfg(any(unix, windows))".dev-dependencies.libc] | ||
--- cargo-crates/ring-0.16.15/src/cpu.rs.orig 2020-06-10 20:45:54 UTC | ||
+++ cargo-crates/ring-0.16.15/src/cpu.rs | ||
@@ -60,6 +60,11 @@ pub(crate) fn features() -> Features { | ||
{ | ||
arm::fuchsia_setup(); | ||
} | ||
+ | ||
+ #[cfg(all(target_os = "freebsd", any(target_arch = "aarch64", target_arch = "arm")))] | ||
+ { | ||
+ arm::freebsd_setup(); | ||
+ } | ||
}); | ||
} | ||
|
||
@@ -168,6 +173,83 @@ pub(crate) mod arm { | ||
} | ||
} | ||
|
||
+ #[cfg(all(target_os = "freebsd", any(target_arch = "aarch64", target_arch = "arm")))] | ||
+ pub fn freebsd_setup() { | ||
+ extern crate std; | ||
+ use libc::{c_int, c_ulong, c_void}; | ||
+ | ||
+ extern "C" { | ||
+ fn elf_aux_info(aux: c_int, buf: *mut c_void, buflen: c_int) -> c_int; | ||
+ } | ||
+ | ||
+ const AT_HWCAP: c_int = 25; | ||
+ | ||
+ #[cfg(target_arch = "aarch64")] | ||
+ const HWCAP_NEON: c_ulong = 1 << 1; | ||
+ | ||
+ #[cfg(target_arch = "arm")] | ||
+ const HWCAP_NEON: c_ulong = 1 << 12; | ||
+ | ||
+ let caps: c_ulong = 0; | ||
+ let buffer : *mut c_void = { let t: *const c_ulong = ∩︀ t} as *mut c_void; | ||
+ | ||
+ unsafe { | ||
+ let _ret = elf_aux_info( | ||
+ AT_HWCAP, | ||
+ buffer, | ||
+ std::mem::size_of_val(&caps) as i32 | ||
+ ); | ||
+ } | ||
+ | ||
+ // We assume NEON is available on AARCH64 because it is a required | ||
+ // feature. | ||
+ #[cfg(target_arch = "aarch64")] | ||
+ debug_assert!(caps & HWCAP_NEON == HWCAP_NEON); | ||
+ | ||
+ // OpenSSL and BoringSSL don't enable any other features if NEON isn't | ||
+ // available. | ||
+ if caps & HWCAP_NEON == HWCAP_NEON { | ||
+ let mut features = NEON.mask; | ||
+ | ||
+ #[cfg(target_arch = "aarch64")] | ||
+ const OFFSET: c_ulong = 3; | ||
+ | ||
+ #[cfg(target_arch = "arm")] | ||
+ const OFFSET: c_ulong = 0; | ||
+ #[cfg(target_arch = "arm")] | ||
+ const AT_HWCAP2: c_int = 26; | ||
+ #[cfg(target_arch = "arm")] | ||
+ let caps: c_ulong = 0; | ||
+ #[cfg(target_arch = "arm")] | ||
+ let buffer : *mut c_void = { let t: *const c_ulong = ∩︀ t} as *mut c_void; | ||
+ | ||
+ #[cfg(target_arch = "arm")] | ||
+ unsafe { | ||
+ let _ret = elf_aux_info( | ||
+ AT_HWCAP2, | ||
+ buffer, | ||
+ std::mem::size_of_val(&caps) as i32 | ||
+ ); | ||
+ }; | ||
+ | ||
+ const HWCAP_AES: c_ulong = 1 << 0 + OFFSET; | ||
+ const HWCAP_PMULL: c_ulong = 1 << 1 + OFFSET; | ||
+ const HWCAP_SHA2: c_ulong = 1 << 3 + OFFSET; | ||
+ | ||
+ if caps & HWCAP_AES == HWCAP_AES { | ||
+ features |= AES.mask; | ||
+ } | ||
+ if caps & HWCAP_PMULL == HWCAP_PMULL { | ||
+ features |= PMULL.mask; | ||
+ } | ||
+ if caps & HWCAP_SHA2 == HWCAP_SHA2 { | ||
+ features |= 1 << 4; | ||
+ } | ||
+ | ||
+ unsafe { GFp_armcap_P = features }; | ||
+ } | ||
+ } | ||
+ | ||
#[cfg(not(target_arch = "wasm32"))] | ||
pub(crate) struct Feature { | ||
#[cfg_attr( | ||
@@ -193,7 +275,7 @@ pub(crate) mod arm { | ||
} | ||
|
||
#[cfg(all( | ||
- any(target_os = "android", target_os = "linux", target_os = "fuchsia"), | ||
+ any(target_os = "android", target_os = "linux", target_os = "fuchsia", target_os = "freebsd"), | ||
any(target_arch = "arm", target_arch = "aarch64") | ||
))] | ||
{ | ||
@@ -239,7 +321,7 @@ pub(crate) mod arm { | ||
}; | ||
|
||
#[cfg(all( | ||
- any(target_os = "android", target_os = "linux", target_os = "fuchsia"), | ||
+ any(target_os = "android", target_os = "linux", target_os = "fuchsia", target_os = "freebsd"), | ||
any(target_arch = "arm", target_arch = "aarch64") | ||
))] | ||
extern "C" { |