1pub type greg_t = ::c_long;
2
3pub type Elf64_Addr = ::c_ulong;
4pub type Elf64_Half = ::c_ushort;
5pub type Elf64_Off = ::c_ulong;
6pub type Elf64_Sword = ::c_int;
7pub type Elf64_Sxword = ::c_long;
8pub type Elf64_Word = ::c_uint;
9pub type Elf64_Xword = ::c_ulong;
10pub type Elf64_Lword = ::c_ulong;
11pub type Elf64_Phdr = __c_anonymous_Elf64_Phdr;
12
13s! {
14    pub struct __c_anonymous_fpchip_state {
15        pub cw: u16,
16        pub sw: u16,
17        pub fctw: u8,
18        pub __fx_rsvd: u8,
19        pub fop: u16,
20        pub rip: u64,
21        pub rdp: u64,
22        pub mxcsr: u32,
23        pub mxcsr_mask: u32,
24        pub st: [::upad128_t; 8],
25        pub xmm: [::upad128_t; 16],
26        pub __fx_ign: [::upad128_t; 6],
27        pub status: u32,
28        pub xstatus: u32,
29    }
30
31    pub struct __c_anonymous_Elf64_Phdr {
32        pub p_type: ::Elf64_Word,
33        pub p_flags: ::Elf64_Word,
34        pub p_offset: ::Elf64_Off,
35        pub p_vaddr: ::Elf64_Addr,
36        pub p_paddr: ::Elf64_Addr,
37        pub p_filesz: ::Elf64_Xword,
38        pub p_memsz: ::Elf64_Xword,
39        pub p_align: ::Elf64_Xword,
40    }
41
42    pub struct dl_phdr_info {
43        pub dlpi_addr: ::Elf64_Addr,
44        pub dlpi_name: *const ::c_char,
45        pub dlpi_phdr: *const ::Elf64_Phdr,
46        pub dlpi_phnum: ::Elf64_Half,
47        pub dlpi_adds: ::c_ulonglong,
48        pub dlpi_subs: ::c_ulonglong,
49    }
50}
51
52s_no_extra_traits! {
53    #[cfg(libc_union)]
54    pub union __c_anonymous_fp_reg_set {
55        pub fpchip_state: __c_anonymous_fpchip_state,
56        pub f_fpregs: [[u32; 13]; 10],
57    }
58
59    pub struct fpregset_t {
60        pub fp_reg_set: __c_anonymous_fp_reg_set,
61    }
62
63    pub struct mcontext_t {
64        pub gregs: [::greg_t; 28],
65        pub fpregs: fpregset_t,
66    }
67
68    pub struct ucontext_t {
69        pub uc_flags: ::c_ulong,
70        pub uc_link: *mut ucontext_t,
71        pub uc_sigmask: ::sigset_t,
72        pub uc_stack: ::stack_t,
73        pub uc_mcontext: mcontext_t,
74        pub uc_filler: [::c_long; 5],
75    }
76}
77
78cfg_if! {
79    if #[cfg(feature = "extra_traits")] {
80        #[cfg(libc_union)]
81        impl PartialEq for __c_anonymous_fp_reg_set {
82            fn eq(&self, other: &__c_anonymous_fp_reg_set) -> bool {
83                unsafe {
84                self.fpchip_state == other.fpchip_state ||
85                    self.
86                    f_fpregs.
87                    iter().
88                    zip(other.f_fpregs.iter()).
89                    all(|(a, b)| a == b)
90                }
91            }
92        }
93        #[cfg(libc_union)]
94        impl Eq for __c_anonymous_fp_reg_set {}
95        #[cfg(libc_union)]
96        impl ::fmt::Debug for __c_anonymous_fp_reg_set {
97            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
98                unsafe {
99                f.debug_struct("__c_anonymous_fp_reg_set")
100                    .field("fpchip_state", &{self.fpchip_state})
101                    .field("f_fpregs", &{self.f_fpregs})
102                    .finish()
103                }
104            }
105        }
106        impl PartialEq for fpregset_t {
107            fn eq(&self, other: &fpregset_t) -> bool {
108                self.fp_reg_set == other.fp_reg_set
109            }
110        }
111        impl Eq for fpregset_t {}
112        impl ::fmt::Debug for fpregset_t {
113            fn fmt(&self, f:&mut ::fmt::Formatter) -> ::fmt::Result {
114                f.debug_struct("fpregset_t")
115                    .field("fp_reg_set", &self.fp_reg_set)
116                    .finish()
117            }
118        }
119        impl PartialEq for mcontext_t {
120            fn eq(&self, other: &mcontext_t) -> bool {
121                self.gregs == other.gregs &&
122                    self.fpregs == other.fpregs
123            }
124        }
125        impl Eq for mcontext_t {}
126        impl ::fmt::Debug for mcontext_t {
127            fn fmt(&self, f:&mut ::fmt::Formatter) -> ::fmt::Result {
128                f.debug_struct("mcontext_t")
129                    .field("gregs", &self.gregs)
130                    .field("fpregs", &self.fpregs)
131                    .finish()
132            }
133        }
134        impl PartialEq for ucontext_t {
135            fn eq(&self, other: &ucontext_t) -> bool {
136                self.uc_flags == other.uc_flags
137                    && self.uc_link == other.uc_link
138                    && self.uc_sigmask == other.uc_sigmask
139                    && self.uc_stack == other.uc_stack
140                    && self.uc_mcontext == other.uc_mcontext
141                    && self.uc_filler == other.uc_filler
142            }
143        }
144        impl Eq for ucontext_t {}
145        impl ::fmt::Debug for ucontext_t {
146            fn fmt(&self, f:&mut ::fmt::Formatter) -> ::fmt::Result {
147                f.debug_struct("ucontext_t")
148                    .field("uc_flags", &self.uc_flags)
149                    .field("uc_link", &self.uc_link)
150                    .field("uc_sigmask", &self.uc_sigmask)
151                    .field("uc_stack", &self.uc_stack)
152                    .field("uc_mcontext", &self.uc_mcontext)
153                    .field("uc_filler", &self.uc_filler)
154                    .finish()
155            }
156        }
157
158    }
159}
160
161// sys/regset.h
162
163pub const REG_GSBASE: ::c_int = 27;
164pub const REG_FSBASE: ::c_int = 26;
165pub const REG_DS: ::c_int = 25;
166pub const REG_ES: ::c_int = 24;
167pub const REG_GS: ::c_int = 23;
168pub const REG_FS: ::c_int = 22;
169pub const REG_SS: ::c_int = 21;
170pub const REG_RSP: ::c_int = 20;
171pub const REG_RFL: ::c_int = 19;
172pub const REG_CS: ::c_int = 18;
173pub const REG_RIP: ::c_int = 17;
174pub const REG_ERR: ::c_int = 16;
175pub const REG_TRAPNO: ::c_int = 15;
176pub const REG_RAX: ::c_int = 14;
177pub const REG_RCX: ::c_int = 13;
178pub const REG_RDX: ::c_int = 12;
179pub const REG_RBX: ::c_int = 11;
180pub const REG_RBP: ::c_int = 10;
181pub const REG_RSI: ::c_int = 9;
182pub const REG_RDI: ::c_int = 8;
183pub const REG_R8: ::c_int = 7;
184pub const REG_R9: ::c_int = 6;
185pub const REG_R10: ::c_int = 5;
186pub const REG_R11: ::c_int = 4;
187pub const REG_R12: ::c_int = 3;
188pub const REG_R13: ::c_int = 2;
189pub const REG_R14: ::c_int = 1;
190pub const REG_R15: ::c_int = 0;
191