libc/fuchsia/
x86_64.rs

1use crate::off_t;
2use crate::prelude::*;
3
4pub type c_char = i8;
5pub type wchar_t = i32;
6pub type nlink_t = u64;
7pub type blksize_t = c_long;
8pub type __u64 = c_ulonglong;
9
10s! {
11    pub struct stat {
12        pub st_dev: crate::dev_t,
13        pub st_ino: crate::ino_t,
14        pub st_nlink: crate::nlink_t,
15        pub st_mode: crate::mode_t,
16        pub st_uid: crate::uid_t,
17        pub st_gid: crate::gid_t,
18        __pad0: c_int,
19        pub st_rdev: crate::dev_t,
20        pub st_size: off_t,
21        pub st_blksize: crate::blksize_t,
22        pub st_blocks: crate::blkcnt_t,
23        pub st_atime: crate::time_t,
24        pub st_atime_nsec: c_long,
25        pub st_mtime: crate::time_t,
26        pub st_mtime_nsec: c_long,
27        pub st_ctime: crate::time_t,
28        pub st_ctime_nsec: c_long,
29        __unused: [c_long; 3],
30    }
31
32    pub struct stat64 {
33        pub st_dev: crate::dev_t,
34        pub st_ino: crate::ino64_t,
35        pub st_nlink: crate::nlink_t,
36        pub st_mode: crate::mode_t,
37        pub st_uid: crate::uid_t,
38        pub st_gid: crate::gid_t,
39        __pad0: c_int,
40        pub st_rdev: crate::dev_t,
41        pub st_size: off_t,
42        pub st_blksize: crate::blksize_t,
43        pub st_blocks: crate::blkcnt64_t,
44        pub st_atime: crate::time_t,
45        pub st_atime_nsec: c_long,
46        pub st_mtime: crate::time_t,
47        pub st_mtime_nsec: c_long,
48        pub st_ctime: crate::time_t,
49        pub st_ctime_nsec: c_long,
50        __reserved: [c_long; 3],
51    }
52
53    pub struct mcontext_t {
54        __private: [u64; 32],
55    }
56
57    pub struct ipc_perm {
58        pub __ipc_perm_key: crate::key_t,
59        pub uid: crate::uid_t,
60        pub gid: crate::gid_t,
61        pub cuid: crate::uid_t,
62        pub cgid: crate::gid_t,
63        pub mode: crate::mode_t,
64        pub __seq: c_int,
65        __unused1: c_long,
66        __unused2: c_long,
67    }
68}
69
70s_no_extra_traits! {
71    pub struct ucontext_t {
72        pub uc_flags: c_ulong,
73        pub uc_link: *mut ucontext_t,
74        pub uc_stack: crate::stack_t,
75        pub uc_mcontext: mcontext_t,
76        pub uc_sigmask: crate::sigset_t,
77        __private: [u8; 512],
78    }
79}
80
81cfg_if! {
82    if #[cfg(feature = "extra_traits")] {
83        impl PartialEq for ucontext_t {
84            fn eq(&self, other: &ucontext_t) -> bool {
85                self.uc_flags == other.uc_flags
86                    && self.uc_link == other.uc_link
87                    && self.uc_stack == other.uc_stack
88                    && self.uc_mcontext == other.uc_mcontext
89                    && self.uc_sigmask == other.uc_sigmask
90                    && self
91                        .__private
92                        .iter()
93                        .zip(other.__private.iter())
94                        .all(|(a, b)| a == b)
95            }
96        }
97        impl Eq for ucontext_t {}
98        impl fmt::Debug for ucontext_t {
99            fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
100                f.debug_struct("ucontext_t")
101                    .field("uc_flags", &self.uc_flags)
102                    .field("uc_link", &self.uc_link)
103                    .field("uc_stack", &self.uc_stack)
104                    .field("uc_mcontext", &self.uc_mcontext)
105                    .field("uc_sigmask", &self.uc_sigmask)
106                    // FIXME: .field("__private", &self.__private)
107                    .finish()
108            }
109        }
110        impl hash::Hash for ucontext_t {
111            fn hash<H: hash::Hasher>(&self, state: &mut H) {
112                self.uc_flags.hash(state);
113                self.uc_link.hash(state);
114                self.uc_stack.hash(state);
115                self.uc_mcontext.hash(state);
116                self.uc_sigmask.hash(state);
117                self.__private.hash(state);
118            }
119        }
120    }
121}
122
123// offsets in user_regs_structs, from sys/reg.h
124pub const R15: c_int = 0;
125pub const R14: c_int = 1;
126pub const R13: c_int = 2;
127pub const R12: c_int = 3;
128pub const RBP: c_int = 4;
129pub const RBX: c_int = 5;
130pub const R11: c_int = 6;
131pub const R10: c_int = 7;
132pub const R9: c_int = 8;
133pub const R8: c_int = 9;
134pub const RAX: c_int = 10;
135pub const RCX: c_int = 11;
136pub const RDX: c_int = 12;
137pub const RSI: c_int = 13;
138pub const RDI: c_int = 14;
139pub const ORIG_RAX: c_int = 15;
140pub const RIP: c_int = 16;
141pub const CS: c_int = 17;
142pub const EFLAGS: c_int = 18;
143pub const RSP: c_int = 19;
144pub const SS: c_int = 20;
145pub const FS_BASE: c_int = 21;
146pub const GS_BASE: c_int = 22;
147pub const DS: c_int = 23;
148pub const ES: c_int = 24;
149pub const FS: c_int = 25;
150pub const GS: c_int = 26;
151
152pub const MAP_32BIT: c_int = 0x0040;
153
154pub const SIGSTKSZ: size_t = 8192;
155pub const MINSIGSTKSZ: size_t = 2048;