1 //! 32-bit specific definitions for linux-like values 2 3 use pthread_mutex_t; 4 5 pub type c_long = i32; 6 pub type c_ulong = u32; 7 pub type clock_t = i32; 8 9 pub type shmatt_t = ::c_ulong; 10 pub type msgqnum_t = ::c_ulong; 11 pub type msglen_t = ::c_ulong; 12 pub type nlink_t = u32; 13 pub type __u64 = ::c_ulonglong; 14 pub type __s64 = ::c_longlong; 15 pub type __fsword_t = i32; 16 pub type fsblkcnt64_t = u64; 17 pub type fsfilcnt64_t = u64; 18 pub type __syscall_ulong_t = ::c_ulong; 19 20 cfg_if! { 21 if #[cfg(target_arch = "riscv32")] { 22 pub type time_t = i64; 23 pub type suseconds_t = i64; 24 pub type ino_t = u64; 25 pub type off_t = i64; 26 pub type blkcnt_t = i64; 27 pub type fsblkcnt_t = u64; 28 pub type fsfilcnt_t = u64; 29 pub type rlim_t = u64; 30 pub type blksize_t = i64; 31 } else { 32 pub type time_t = i32; 33 pub type suseconds_t = i32; 34 pub type ino_t = u32; 35 pub type off_t = i32; 36 pub type blkcnt_t = i32; 37 pub type fsblkcnt_t = ::c_ulong; 38 pub type fsfilcnt_t = ::c_ulong; 39 pub type rlim_t = c_ulong; 40 pub type blksize_t = i32; 41 } 42 } 43 44 s! { 45 pub struct stat { 46 #[cfg(not(any(target_arch = "mips", target_arch = "mips32r6")))] 47 pub st_dev: ::dev_t, 48 #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] 49 pub st_dev: ::c_ulong, 50 51 #[cfg(not(any(target_arch = "mips", target_arch = "mips32r6")))] 52 __pad1: ::c_short, 53 #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] 54 st_pad1: [::c_long; 3], 55 pub st_ino: ::ino_t, 56 pub st_mode: ::mode_t, 57 pub st_nlink: ::nlink_t, 58 pub st_uid: ::uid_t, 59 pub st_gid: ::gid_t, 60 #[cfg(not(any(target_arch = "mips", target_arch = "mips32r6")))] 61 pub st_rdev: ::dev_t, 62 #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] 63 pub st_rdev: ::c_ulong, 64 #[cfg(not(any(target_arch = "mips", target_arch = "mips32r6")))] 65 __pad2: ::c_short, 66 #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] 67 st_pad2: [::c_long; 2], 68 pub st_size: ::off_t, 69 #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] 70 st_pad3: ::c_long, 71 #[cfg(not(any(target_arch = "mips", target_arch = "mips32r6")))] 72 pub st_blksize: ::blksize_t, 73 #[cfg(not(any(target_arch = "mips", target_arch = "mips32r6")))] 74 pub st_blocks: ::blkcnt_t, 75 pub st_atime: ::time_t, 76 pub st_atime_nsec: ::c_long, 77 pub st_mtime: ::time_t, 78 pub st_mtime_nsec: ::c_long, 79 pub st_ctime: ::time_t, 80 pub st_ctime_nsec: ::c_long, 81 #[cfg(not(any(target_arch = "mips", target_arch = "mips32r6")))] 82 __unused4: ::c_long, 83 #[cfg(not(any(target_arch = "mips", target_arch = "mips32r6")))] 84 __unused5: ::c_long, 85 #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] 86 pub st_blksize: ::blksize_t, 87 #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] 88 pub st_blocks: ::blkcnt_t, 89 #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] 90 st_pad5: [::c_long; 14], 91 } 92 93 pub struct statvfs { 94 pub f_bsize: ::c_ulong, 95 pub f_frsize: ::c_ulong, 96 pub f_blocks: ::fsblkcnt_t, 97 pub f_bfree: ::fsblkcnt_t, 98 pub f_bavail: ::fsblkcnt_t, 99 pub f_files: ::fsfilcnt_t, 100 pub f_ffree: ::fsfilcnt_t, 101 pub f_favail: ::fsfilcnt_t, 102 pub f_fsid: ::c_ulong, 103 __f_unused: ::c_int, 104 pub f_flag: ::c_ulong, 105 pub f_namemax: ::c_ulong, 106 __f_spare: [::c_int; 6], 107 } 108 109 pub struct pthread_attr_t { 110 __size: [u32; 9] 111 } 112 113 pub struct sigset_t { 114 __val: [::c_ulong; 32], 115 } 116 117 pub struct sysinfo { 118 pub uptime: ::c_long, 119 pub loads: [::c_ulong; 3], 120 pub totalram: ::c_ulong, 121 pub freeram: ::c_ulong, 122 pub sharedram: ::c_ulong, 123 pub bufferram: ::c_ulong, 124 pub totalswap: ::c_ulong, 125 pub freeswap: ::c_ulong, 126 pub procs: ::c_ushort, 127 #[deprecated( 128 since = "0.2.58", 129 note = "This padding field might become private in the future" 130 )] 131 pub pad: ::c_ushort, 132 pub totalhigh: ::c_ulong, 133 pub freehigh: ::c_ulong, 134 pub mem_unit: ::c_uint, 135 pub _f: [::c_char; 8], 136 } 137 138 pub struct semid_ds { 139 pub sem_perm: ipc_perm, 140 #[cfg(target_arch = "powerpc")] 141 __reserved: ::__syscall_ulong_t, 142 pub sem_otime: ::time_t, 143 #[cfg(not(any(target_arch = "mips", target_arch = "mips32r6", target_arch = "powerpc")))] 144 __reserved: ::__syscall_ulong_t, 145 #[cfg(target_arch = "powerpc")] 146 __reserved2: ::__syscall_ulong_t, 147 pub sem_ctime: ::time_t, 148 #[cfg(not(any(target_arch = "mips", target_arch = "mips32r6", target_arch = "powerpc")))] 149 __reserved2: ::__syscall_ulong_t, 150 pub sem_nsems: ::__syscall_ulong_t, 151 __glibc_reserved3: ::__syscall_ulong_t, 152 __glibc_reserved4: ::__syscall_ulong_t, 153 } 154 } 155 156 pub const POSIX_FADV_DONTNEED: ::c_int = 4; 157 pub const POSIX_FADV_NOREUSE: ::c_int = 5; 158 159 pub const F_OFD_GETLK: ::c_int = 36; 160 pub const F_OFD_SETLK: ::c_int = 37; 161 pub const F_OFD_SETLKW: ::c_int = 38; 162 163 pub const __SIZEOF_PTHREAD_CONDATTR_T: usize = 4; 164 pub const __SIZEOF_PTHREAD_MUTEX_T: usize = 24; 165 pub const __SIZEOF_PTHREAD_RWLOCK_T: usize = 32; 166 pub const __SIZEOF_PTHREAD_BARRIER_T: usize = 20; 167 pub const __SIZEOF_PTHREAD_MUTEXATTR_T: usize = 4; 168 pub const __SIZEOF_PTHREAD_RWLOCKATTR_T: usize = 8; 169 pub const __SIZEOF_PTHREAD_BARRIERATTR_T: usize = 4; 170 171 cfg_if! { 172 if #[cfg(target_arch = "sparc")] { 173 pub const O_NOATIME: ::c_int = 0x200000; 174 pub const O_PATH: ::c_int = 0x1000000; 175 pub const O_TMPFILE: ::c_int = 0x2000000 | O_DIRECTORY; 176 177 pub const SA_ONSTACK: ::c_int = 1; 178 179 pub const PTRACE_DETACH: ::c_uint = 11; 180 181 pub const F_SETLK: ::c_int = 8; 182 pub const F_SETLKW: ::c_int = 9; 183 184 pub const F_RDLCK: ::c_int = 1; 185 pub const F_WRLCK: ::c_int = 2; 186 pub const F_UNLCK: ::c_int = 3; 187 188 pub const SFD_CLOEXEC: ::c_int = 0x400000; 189 190 pub const NCCS: usize = 17; 191 192 pub const O_TRUNC: ::c_int = 0x400; 193 pub const O_CLOEXEC: ::c_int = 0x400000; 194 195 pub const EBFONT: ::c_int = 109; 196 pub const ENOSTR: ::c_int = 72; 197 pub const ENODATA: ::c_int = 111; 198 pub const ETIME: ::c_int = 73; 199 pub const ENOSR: ::c_int = 74; 200 pub const ENONET: ::c_int = 80; 201 pub const ENOPKG: ::c_int = 113; 202 pub const EREMOTE: ::c_int = 71; 203 pub const ENOLINK: ::c_int = 82; 204 pub const EADV: ::c_int = 83; 205 pub const ESRMNT: ::c_int = 84; 206 pub const ECOMM: ::c_int = 85; 207 pub const EPROTO: ::c_int = 86; 208 pub const EDOTDOT: ::c_int = 88; 209 210 pub const SA_NODEFER: ::c_int = 0x20; 211 pub const SA_RESETHAND: ::c_int = 0x4; 212 pub const SA_RESTART: ::c_int = 0x2; 213 pub const SA_NOCLDSTOP: ::c_int = 0x00000008; 214 215 pub const EPOLL_CLOEXEC: ::c_int = 0x400000; 216 217 pub const EFD_CLOEXEC: ::c_int = 0x400000; 218 } else { 219 pub const O_NOATIME: ::c_int = 0o1000000; 220 pub const O_PATH: ::c_int = 0o10000000; 221 pub const O_TMPFILE: ::c_int = 0o20000000 | O_DIRECTORY; 222 223 pub const SA_ONSTACK: ::c_int = 0x08000000; 224 225 pub const PTRACE_DETACH: ::c_uint = 17; 226 227 pub const F_SETLK: ::c_int = 6; 228 pub const F_SETLKW: ::c_int = 7; 229 230 pub const F_RDLCK: ::c_int = 0; 231 pub const F_WRLCK: ::c_int = 1; 232 pub const F_UNLCK: ::c_int = 2; 233 234 pub const SFD_CLOEXEC: ::c_int = 0x080000; 235 236 pub const NCCS: usize = 32; 237 238 pub const O_TRUNC: ::c_int = 512; 239 pub const O_CLOEXEC: ::c_int = 0x80000; 240 pub const EBFONT: ::c_int = 59; 241 pub const ENOSTR: ::c_int = 60; 242 pub const ENODATA: ::c_int = 61; 243 pub const ETIME: ::c_int = 62; 244 pub const ENOSR: ::c_int = 63; 245 pub const ENONET: ::c_int = 64; 246 pub const ENOPKG: ::c_int = 65; 247 pub const EREMOTE: ::c_int = 66; 248 pub const ENOLINK: ::c_int = 67; 249 pub const EADV: ::c_int = 68; 250 pub const ESRMNT: ::c_int = 69; 251 pub const ECOMM: ::c_int = 70; 252 pub const EPROTO: ::c_int = 71; 253 pub const EDOTDOT: ::c_int = 73; 254 255 pub const SA_NODEFER: ::c_int = 0x40000000; 256 pub const SA_RESETHAND: ::c_int = 0x80000000; 257 pub const SA_RESTART: ::c_int = 0x10000000; 258 pub const SA_NOCLDSTOP: ::c_int = 0x00000001; 259 260 pub const EPOLL_CLOEXEC: ::c_int = 0x80000; 261 262 pub const EFD_CLOEXEC: ::c_int = 0x80000; 263 } 264 } 265 266 align_const! { 267 #[cfg(target_endian = "little")] 268 pub const PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP: ::pthread_mutex_t = 269 pthread_mutex_t { 270 size: [ 271 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 272 0, 0, 0, 273 ], 274 }; 275 #[cfg(target_endian = "little")] 276 pub const PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP: ::pthread_mutex_t = 277 pthread_mutex_t { 278 size: [ 279 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 280 0, 0, 0, 281 ], 282 }; 283 #[cfg(target_endian = "little")] 284 pub const PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP: ::pthread_mutex_t = 285 pthread_mutex_t { 286 size: [ 287 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 288 0, 0, 0, 289 ], 290 }; 291 #[cfg(target_endian = "big")] 292 pub const PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP: ::pthread_mutex_t = 293 pthread_mutex_t { 294 size: [ 295 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 296 0, 0, 0, 297 ], 298 }; 299 #[cfg(target_endian = "big")] 300 pub const PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP: ::pthread_mutex_t = 301 pthread_mutex_t { 302 size: [ 303 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 304 0, 0, 0, 305 ], 306 }; 307 #[cfg(target_endian = "big")] 308 pub const PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP: ::pthread_mutex_t = 309 pthread_mutex_t { 310 size: [ 311 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 312 0, 0, 0, 313 ], 314 }; 315 } 316 317 pub const PTRACE_GETFPREGS: ::c_uint = 14; 318 pub const PTRACE_SETFPREGS: ::c_uint = 15; 319 pub const PTRACE_GETREGS: ::c_uint = 12; 320 pub const PTRACE_SETREGS: ::c_uint = 13; 321 322 extern "C" { 323 pub fn sysctl( 324 name: *mut ::c_int, 325 namelen: ::c_int, 326 oldp: *mut ::c_void, 327 oldlenp: *mut ::size_t, 328 newp: *mut ::c_void, 329 newlen: ::size_t, 330 ) -> ::c_int; 331 } 332 333 cfg_if! { 334 if #[cfg(target_arch = "x86")] { 335 mod x86; 336 pub use self::x86::*; 337 } else if #[cfg(target_arch = "arm")] { 338 mod arm; 339 pub use self::arm::*; 340 } else if #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] { 341 mod mips; 342 pub use self::mips::*; 343 } else if #[cfg(target_arch = "m68k")] { 344 mod m68k; 345 pub use self::m68k::*; 346 } else if #[cfg(target_arch = "powerpc")] { 347 mod powerpc; 348 pub use self::powerpc::*; 349 } else if #[cfg(target_arch = "sparc")] { 350 mod sparc; 351 pub use self::sparc::*; 352 } else if #[cfg(target_arch = "riscv32")] { 353 mod riscv32; 354 pub use self::riscv32::*; 355 } else if #[cfg(target_arch = "csky")] { 356 mod csky; 357 pub use self::csky::*; 358 } else { 359 // Unknown target_arch 360 } 361 } 362