summaryrefslogtreecommitdiff
path: root/www/jwt-cli/files/patch-cargo-crates_ring-0.16.20
blob: 0ef106dec289e58cb6b6eee737e8b73577b8fcd5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
https://github.com/briansmith/ring/pull/1007

--- cargo-crates/ring-0.16.20/Cargo.toml.orig	2020-12-02 03:20:32.000000000 +0100
+++ cargo-crates/ring-0.16.20/Cargo.toml	2020-12-09 09:54:26.615745000 +0100
@@ -64,10 +64,10 @@ wasm32_c = []
 version = "0.3.37"
 features = ["Crypto", "Window"]
 default-features = false
-[target."cfg(any(target_arch = \"x86\",target_arch = \"x86_64\", all(any(target_arch = \"aarch64\", target_arch = \"arm\"), any(target_os = \"android\", target_os = \"fuchsia\", target_os = \"linux\"))))".dependencies.spin]
+[target."cfg(any(target_arch = \"x86\",target_arch = \"x86_64\", all(any(target_arch = \"aarch64\", target_arch = \"arm\"), any(target_os = \"android\", target_os = \"freebsd\", target_os = \"fuchsia\", target_os = \"linux\"))))".dependencies.spin]
 version = "0.5.2"
 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
 
--- cargo-crates/ring-0.16.20/src/cpu.rs.orig	2020-11-30 21:30:03.000000000 +0100
+++ cargo-crates/ring-0.16.20/src/cpu.rs	2020-12-09 09:53:52.469225000 +0100
@@ -31,7 +31,7 @@ pub(crate) fn features() -> Features {
         target_arch = "x86_64",
         all(
             any(target_arch = "aarch64", target_arch = "arm"),
-            any(target_os = "android", target_os = "fuchsia", target_os = "linux")
+            any(target_os = "android", target_os = "fuchsia", target_os = "freebsd", target_os = "linux")
         )
     ))]
     {
@@ -49,7 +49,7 @@ pub(crate) fn features() -> Features {
 
             #[cfg(all(
                 any(target_arch = "aarch64", target_arch = "arm"),
-                any(target_os = "android", target_os = "fuchsia", target_os = "linux")
+                any(target_os = "android", target_os = "fuchsia", target_os = "freebsd", target_os = "linux")
             ))]
             {
                 arm::setup();
@@ -62,28 +62,58 @@ pub(crate) fn features() -> Features {
 
 pub(crate) mod arm {
     #[cfg(all(
-        any(target_os = "android", target_os = "linux"),
+        any(target_os = "android", target_os = "freebsd", target_os = "linux"),
         any(target_arch = "aarch64", target_arch = "arm")
     ))]
     pub fn setup() {
         use libc::c_ulong;
+        #[cfg(target_os = "freebsd")]
+        use libc::{c_int, c_void};
+        #[cfg(target_os = "freebsd")]
+        extern crate std;
 
         // XXX: The `libc` crate doesn't provide `libc::getauxval` consistently
         // across all Android/Linux targets, e.g. musl.
+        #[cfg(any(target_os = "android", target_os = "linux"))]
         extern "C" {
             fn getauxval(type_: c_ulong) -> c_ulong;
         }
 
+        #[cfg(target_os = "freebsd")]
+        extern "C" {
+            fn elf_aux_info(aux: c_int, buf: *mut c_void, buflen: c_int) -> c_int;
+        }
+
+        #[cfg(not(target_os = "freebsd"))]
         const AT_HWCAP: c_ulong = 16;
 
+        #[cfg(target_os = "freebsd")]
+        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;
 
+        #[cfg(not(target_os = "freebsd"))]
         let caps = unsafe { getauxval(AT_HWCAP) };
 
+        #[cfg(target_os = "freebsd")]
+        let caps: c_ulong = 0;
+
+        #[cfg(target_os = "freebsd")]
+        {
+            let buffer : *mut c_void = { let t: *const c_ulong = &caps; 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")]
@@ -100,11 +130,26 @@ pub(crate) mod arm {
             #[cfg(target_arch = "arm")]
             const OFFSET: c_ulong = 0;
 
-            #[cfg(target_arch = "arm")]
+            #[cfg(target_os = "freebsd")]
+            let buffer : *mut c_void = { let t: *const c_ulong = &caps; t} as *mut c_void;
+
+            #[cfg(not(target_os = "freebsd"))]
             let caps = {
                 const AT_HWCAP2: c_ulong = 26;
                 unsafe { getauxval(AT_HWCAP2) }
             };
+
+            #[cfg(target_os = "freebsd")]
+            {
+                const AT_HWCAP2: c_int = 26;
+                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;