about summary refs log tree commit diff
path: root/src/libstd/sys/unix/sync.rs
diff options
context:
space:
mode:
authorSebastian Wicki <gandro@gmx.net>2015-09-22 11:48:00 +0200
committerSebastian Wicki <gandro@gmx.net>2015-09-22 11:48:00 +0200
commit428bb164f33951e561a1eed8e636077ad6ce2506 (patch)
tree7d7029072f6568a9a8ea0281bba10d964f624448 /src/libstd/sys/unix/sync.rs
parent318cd843d1103579291a9f6c9eab8aacce7e9f82 (diff)
downloadrust-428bb164f33951e561a1eed8e636077ad6ce2506.tar.gz
rust-428bb164f33951e561a1eed8e636077ad6ce2506.zip
Fix alignment of pthread types on NetBSD
Diffstat (limited to 'src/libstd/sys/unix/sync.rs')
-rw-r--r--src/libstd/sys/unix/sync.rs30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/libstd/sys/unix/sync.rs b/src/libstd/sys/unix/sync.rs
index aabeb41a369..954bfbb6b18 100644
--- a/src/libstd/sys/unix/sync.rs
+++ b/src/libstd/sys/unix/sync.rs
@@ -254,53 +254,61 @@ mod os {
 mod os {
     use libc;
 
-    // size of the type minus width of the magic int field
+    // size of the type minus width of the magic and alignment field
     #[cfg(target_arch = "x86_64")]
-    const __PTHREAD_MUTEX_SIZE__: usize = 48 - 4;
+    const __PTHREAD_MUTEX_SIZE__: usize = 48 - 4 - 8;
 
     #[cfg(target_arch = "x86_64")]
-    const __PTHREAD_COND_SIZE__: usize = 40 - 4;
+    const __PTHREAD_MUTEXATTR_SIZE__: usize = 16 - 8; // no magic field
 
     #[cfg(target_arch = "x86_64")]
-    const __PTHREAD_RWLOCK_SIZE__: usize = 64 - 4;
+    const __PTHREAD_COND_SIZE__: usize = 40 - 4 - 8;
+
+    #[cfg(target_arch = "x86_64")]
+    const __PTHREAD_RWLOCK_SIZE__: usize = 64 - 4 - 8;
 
     const _PTHREAD_MUTEX_MAGIC_INIT: libc::c_uint = 0x33330003;
     const _PTHREAD_COND_MAGIC_INIT: libc::c_uint = 0x55550005;
     const _PTHREAD_RWLOCK_MAGIC_INIT: libc::c_uint = 0x99990009;
 
-    // note the actual structs are smaller
-
-    #[repr(C, packed)]
+    #[repr(C)]
     pub struct pthread_mutex_t {
         __magic: libc::c_uint,
         __opaque: [u8; __PTHREAD_MUTEX_SIZE__],
+        __align: libc::c_longlong,
     }
-    #[repr(C, packed)]
+    #[repr(C)]
     pub struct pthread_mutexattr_t {
-        __opaque: [u8; 16],
+        __opaque: [u8; __PTHREAD_MUTEXATTR_SIZE__],
+        __align: libc::c_longlong,
     }
-    #[repr(C, packed)]
+    #[repr(C)]
     pub struct pthread_cond_t {
         __magic: libc::c_uint,
         __opaque: [u8; __PTHREAD_COND_SIZE__],
+        __align: libc::c_longlong,
     }
-    #[repr(C, packed)]
+    #[repr(C)]
     pub struct pthread_rwlock_t {
         __magic: libc::c_uint,
         __opaque: [u8; __PTHREAD_RWLOCK_SIZE__],
+        __align: libc::c_longlong,
     }
 
     pub const PTHREAD_MUTEX_INITIALIZER: pthread_mutex_t = pthread_mutex_t {
         __magic: _PTHREAD_MUTEX_MAGIC_INIT,
         __opaque: [0; __PTHREAD_MUTEX_SIZE__],
+        __align: 0,
     };
     pub const PTHREAD_COND_INITIALIZER: pthread_cond_t = pthread_cond_t {
         __magic: _PTHREAD_COND_MAGIC_INIT,
         __opaque: [0; __PTHREAD_COND_SIZE__],
+        __align: 0,
     };
     pub const PTHREAD_RWLOCK_INITIALIZER: pthread_rwlock_t = pthread_rwlock_t {
         __magic: _PTHREAD_RWLOCK_MAGIC_INIT,
         __opaque: [0; __PTHREAD_RWLOCK_SIZE__],
+        __align: 0,
     };
 
     pub const PTHREAD_MUTEX_RECURSIVE: libc::c_int = 2;