Skip to content

Commit 2819634

Browse files
committed
Add align feature to pthread structs
1 parent 41ca29f commit 2819634

File tree

16 files changed

+832
-514
lines changed

16 files changed

+832
-514
lines changed

src/fuchsia/mod.rs

Lines changed: 108 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -520,14 +520,30 @@ s! {
520520
pub ifa_data: *mut ::c_void
521521
}
522522

523+
#[cfg_attr(all(feature = "align",
524+
target_pointer_width = "32",
525+
any(target_arch = "mips",
526+
target_arch = "arm",
527+
target_arch = "powerpc",
528+
target_arch = "x86_64")),
529+
repr(align(4)))]
530+
#[cfg_attr(all(feature = "align",
531+
any(target_pointer_width = "64",
532+
not(any(target_arch = "mips",
533+
target_arch = "arm",
534+
target_arch = "powerpc",
535+
target_arch = "x86_64")))),
536+
repr(align(8)))]
523537
pub struct pthread_mutex_t {
524-
#[cfg(any(target_arch = "mips",
525-
target_arch = "arm",
526-
target_arch = "powerpc",
527-
all(target_arch = "x86_64",
528-
target_pointer_width = "32")))]
538+
#[cfg(all(not(feature = "align"),
539+
any(target_arch = "mips",
540+
target_arch = "arm",
541+
target_arch = "powerpc",
542+
all(target_arch = "x86_64",
543+
target_pointer_width = "32"))))]
529544
__align: [::c_long; 0],
530-
#[cfg(not(any(target_arch = "mips",
545+
#[cfg(not(any(feature = "align",
546+
target_arch = "mips",
531547
target_arch = "arm",
532548
target_arch = "powerpc",
533549
all(target_arch = "x86_64",
@@ -536,14 +552,30 @@ s! {
536552
size: [u8; __SIZEOF_PTHREAD_MUTEX_T],
537553
}
538554

555+
#[cfg_attr(all(feature = "align",
556+
target_pointer_width = "32",
557+
any(target_arch = "mips",
558+
target_arch = "arm",
559+
target_arch = "powerpc",
560+
target_arch = "x86_64")),
561+
repr(align(4)))]
562+
#[cfg_attr(all(feature = "align",
563+
any(target_pointer_width = "64",
564+
not(any(target_arch = "mips",
565+
target_arch = "arm",
566+
target_arch = "powerpc",
567+
target_arch = "x86_64")))),
568+
repr(align(8)))]
539569
pub struct pthread_rwlock_t {
540-
#[cfg(any(target_arch = "mips",
541-
target_arch = "arm",
542-
target_arch = "powerpc",
543-
all(target_arch = "x86_64",
544-
target_pointer_width = "32")))]
570+
#[cfg(all(not(feature = "align"),
571+
any(target_arch = "mips",
572+
target_arch = "arm",
573+
target_arch = "powerpc",
574+
all(target_arch = "x86_64",
575+
target_pointer_width = "32"))))]
545576
__align: [::c_long; 0],
546-
#[cfg(not(any(target_arch = "mips",
577+
#[cfg(not(any(feature = "align",
578+
target_arch = "mips",
547579
target_arch = "arm",
548580
target_arch = "powerpc",
549581
all(target_arch = "x86_64",
@@ -552,39 +584,78 @@ s! {
552584
size: [u8; __SIZEOF_PTHREAD_RWLOCK_T],
553585
}
554586

587+
#[cfg_attr(all(feature = "align",
588+
any(target_pointer_width = "32",
589+
target_arch = "x86_64", target_arch = "powerpc64",
590+
target_arch = "mips64", target_arch = "s390x",
591+
target_arch = "sparc64",
592+
all(target_arch = "aarch64", target_env = "musl"))),
593+
repr(align(4)))]
594+
#[cfg_attr(all(feature = "align",
595+
not(any(target_pointer_width = "32",
596+
target_arch = "x86_64", target_arch = "powerpc64",
597+
target_arch = "mips64", target_arch = "s390x",
598+
target_arch = "sparc64",
599+
all(target_arch = "aarch64", target_env = "musl")))),
600+
repr(align(8)))]
555601
pub struct pthread_mutexattr_t {
556-
#[cfg(any(target_arch = "x86_64", target_arch = "powerpc64",
557-
target_arch = "mips64", target_arch = "s390x",
558-
target_arch = "sparc64"))]
559-
__align: [::c_int; 0],
560-
#[cfg(not(any(target_arch = "x86_64", target_arch = "powerpc64",
602+
#[cfg(all(not(features = "align"),
603+
any(target_arch = "x86_64", target_arch = "powerpc64",
561604
target_arch = "mips64", target_arch = "s390x",
562-
target_arch = "sparc64", target_arch = "aarch64")))]
563-
__align: [::c_long; 0],
564-
#[cfg(all(target_arch = "aarch64", target_env = "gnu"))]
565-
__align: [::c_long; 0],
566-
#[cfg(all(target_arch = "aarch64", target_env = "musl"))]
605+
target_arch = "sparc64",
606+
all(target_arch = "aarch64", target_env = "musl"))))]
567607
__align: [::c_int; 0],
608+
#[cfg(all(not(features = "align"),
609+
not(any(target_arch = "x86_64", target_arch = "powerpc64",
610+
target_arch = "mips64", target_arch = "s390x",
611+
target_arch = "sparc64",
612+
all(target_arch = "aarch64", target_env = "musl")))))]
613+
__align: [::c_long; 0],
568614
size: [u8; __SIZEOF_PTHREAD_MUTEXATTR_T],
569615
}
570616

617+
#[cfg_attr(all(feature = "align",
618+
any(target_env = "musl", target_pointer_width = "32")),
619+
repr(align(4)))]
620+
#[cfg_attr(all(feature = "align",
621+
not(target_env = "musl"),
622+
target_pointer_width = "64"),
623+
repr(align(8)))]
571624
pub struct pthread_rwlockattr_t {
572-
#[cfg(any(target_env = "musl"))]
625+
#[cfg(all(not(feature = "align"), target_env = "musl"))]
573626
__align: [::c_int; 0],
574-
#[cfg(not(any(target_env = "musl")))]
627+
#[cfg(all(not(feature = "align"), not(target_env = "musl")))]
575628
__align: [::c_long; 0],
576629
size: [u8; __SIZEOF_PTHREAD_RWLOCKATTR_T],
577630
}
578631

632+
#[cfg_attr(all(feature = "align",
633+
target_env = "musl",
634+
target_pointer_width = "32"),
635+
repr(align(4)))]
636+
#[cfg_attr(all(feature = "align",
637+
target_env = "musl",
638+
target_pointer_width = "64"),
639+
repr(align(8)))]
640+
#[cfg_attr(all(feature = "align",
641+
not(target_env = "musl"),
642+
target_arch = "x86"),
643+
repr(align(4)))]
644+
#[cfg_attr(all(feature = "align",
645+
not(target_env = "musl"),
646+
not(target_arch = "x86")),
647+
repr(align(8)))]
579648
pub struct pthread_cond_t {
580-
#[cfg(any(target_env = "musl"))]
649+
#[cfg(all(not(feature = "align"), target_env = "musl"))]
581650
__align: [*const ::c_void; 0],
582-
#[cfg(not(any(target_env = "musl")))]
651+
#[cfg(not(any(feature = "align", target_env = "musl")))]
583652
__align: [::c_longlong; 0],
584653
size: [u8; __SIZEOF_PTHREAD_COND_T],
585654
}
586655

656+
#[cfg_attr(feature = "align", repr(align(4)))]
587657
pub struct pthread_condattr_t {
658+
#[cfg(not(feature = "align"))]
588659
__align: [::c_int; 0],
589660
size: [u8; __SIZEOF_PTHREAD_CONDATTR_T],
590661
}
@@ -2006,18 +2077,17 @@ pub const RTLD_NOW: ::c_int = 0x2;
20062077

20072078
pub const TCP_MD5SIG: ::c_int = 14;
20082079

2009-
pub const PTHREAD_MUTEX_INITIALIZER: pthread_mutex_t = pthread_mutex_t {
2010-
__align: [],
2011-
size: [0; __SIZEOF_PTHREAD_MUTEX_T],
2012-
};
2013-
pub const PTHREAD_COND_INITIALIZER: pthread_cond_t = pthread_cond_t {
2014-
__align: [],
2015-
size: [0; __SIZEOF_PTHREAD_COND_T],
2016-
};
2017-
pub const PTHREAD_RWLOCK_INITIALIZER: pthread_rwlock_t = pthread_rwlock_t {
2018-
__align: [],
2019-
size: [0; __SIZEOF_PTHREAD_RWLOCK_T],
2020-
};
2080+
align_const! {
2081+
pub const PTHREAD_MUTEX_INITIALIZER: pthread_mutex_t = pthread_mutex_t {
2082+
size: [0; __SIZEOF_PTHREAD_MUTEX_T],
2083+
};
2084+
pub const PTHREAD_COND_INITIALIZER: pthread_cond_t = pthread_cond_t {
2085+
size: [0; __SIZEOF_PTHREAD_COND_T],
2086+
};
2087+
pub const PTHREAD_RWLOCK_INITIALIZER: pthread_rwlock_t = pthread_rwlock_t {
2088+
size: [0; __SIZEOF_PTHREAD_RWLOCK_T],
2089+
};
2090+
}
20212091
pub const PTHREAD_MUTEX_NORMAL: ::c_int = 0;
20222092
pub const PTHREAD_MUTEX_RECURSIVE: ::c_int = 1;
20232093
pub const PTHREAD_MUTEX_ERRORCHECK: ::c_int = 2;

src/macros.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,20 @@ macro_rules! f {
6969
macro_rules! __item {
7070
($i:item) => ($i)
7171
}
72+
73+
#[allow(unused_macros)]
74+
macro_rules! align_const {
75+
($($(#[$attr:meta])* pub const $name:ident : $t1:ty = $t2:ident { $($field:tt)* };)*) => ($(
76+
#[cfg(feature = "align")]
77+
$(#[$attr])*
78+
pub const $name : $t1 = $t2 {
79+
$($field)*
80+
};
81+
#[cfg(not(feature = "align"))]
82+
$(#[$attr])*
83+
pub const $name : $t1 = $t2 {
84+
$($field)*
85+
__align: [],
86+
};
87+
)*)
88+
}

src/unix/newlib/mod.rs

Lines changed: 72 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -238,34 +238,80 @@ s! {
238238
__size: [u64; 7]
239239
}
240240

241+
#[cfg_attr(all(feature = "align",
242+
target_pointer_width = "32",
243+
any(target_arch = "mips",
244+
target_arch = "arm",
245+
target_arch = "powerpc")),
246+
repr(align(4)))]
247+
#[cfg_attr(all(feature = "align",
248+
any(target_pointer_width = "64",
249+
not(any(target_arch = "mips",
250+
target_arch = "arm",
251+
target_arch = "powerpc")))),
252+
repr(align(8)))]
241253
pub struct pthread_mutex_t { // Unverified
242-
#[cfg(any(target_arch = "mips", target_arch = "arm",
243-
target_arch = "powerpc"))]
254+
#[cfg(all(not(feature = "align"),
255+
any(target_arch = "mips",
256+
target_arch = "arm",
257+
target_arch = "powerpc")))]
244258
__align: [::c_long; 0],
245-
#[cfg(not(any(target_arch = "mips", target_arch = "arm",
259+
#[cfg(not(any(feature = "align",
260+
target_arch = "mips",
261+
target_arch = "arm",
246262
target_arch = "powerpc")))]
247263
__align: [::c_longlong; 0],
248264
size: [u8; __SIZEOF_PTHREAD_MUTEX_T],
249265
}
250266

267+
#[cfg_attr(all(feature = "align",
268+
target_pointer_width = "32",
269+
any(target_arch = "mips",
270+
target_arch = "arm",
271+
target_arch = "powerpc")),
272+
repr(align(4)))]
273+
#[cfg_attr(all(feature = "align",
274+
any(target_pointer_width = "64",
275+
not(any(target_arch = "mips",
276+
target_arch = "arm",
277+
target_arch = "powerpc")))),
278+
repr(align(8)))]
251279
pub struct pthread_rwlock_t { // Unverified
252-
#[cfg(any(target_arch = "mips", target_arch = "arm",
253-
target_arch = "powerpc"))]
280+
#[cfg(all(not(feature = "align"),
281+
any(target_arch = "mips",
282+
target_arch = "arm",
283+
target_arch = "powerpc")))]
254284
__align: [::c_long; 0],
255-
#[cfg(not(any(target_arch = "mips", target_arch = "arm",
285+
#[cfg(not(any(feature = "align",
286+
target_arch = "mips",
287+
target_arch = "arm",
256288
target_arch = "powerpc")))]
257289
__align: [::c_longlong; 0],
258290
size: [u8; __SIZEOF_PTHREAD_RWLOCK_T],
259291
}
260292

293+
#[cfg_attr(all(feature = "align",
294+
any(target_pointer_width = "32",
295+
target_arch = "x86_64", target_arch = "powerpc64",
296+
target_arch = "mips64", target_arch = "s390x",
297+
target_arch = "sparc64")),
298+
repr(align(4)))]
299+
#[cfg_attr(all(feature = "align",
300+
not(any(target_pointer_width = "32",
301+
target_arch = "x86_64", target_arch = "powerpc64",
302+
target_arch = "mips64", target_arch = "s390x",
303+
target_arch = "sparc64"))),
304+
repr(align(8)))]
261305
pub struct pthread_mutexattr_t { // Unverified
262-
#[cfg(any(target_arch = "x86_64", target_arch = "powerpc64",
263-
target_arch = "mips64", target_arch = "s390x",
264-
target_arch = "sparc64"))]
265-
__align: [::c_int; 0],
266-
#[cfg(not(any(target_arch = "x86_64", target_arch = "powerpc64",
306+
#[cfg(all(not(feature = "align"),
307+
any(target_arch = "x86_64", target_arch = "powerpc64",
267308
target_arch = "mips64", target_arch = "s390x",
268309
target_arch = "sparc64")))]
310+
__align: [::c_int; 0],
311+
#[cfg(all(not(feature = "align"),
312+
not(any(target_arch = "x86_64", target_arch = "powerpc64",
313+
target_arch = "mips64", target_arch = "s390x",
314+
target_arch = "sparc64"))))]
269315
__align: [::c_long; 0],
270316
size: [u8; __SIZEOF_PTHREAD_MUTEXATTR_T],
271317
}
@@ -275,31 +321,34 @@ s! {
275321
__pshared: ::c_int,
276322
}
277323

324+
#[cfg_attr(feature = "align", repr(align(8)))]
278325
pub struct pthread_cond_t { // Unverified
326+
#[cfg(not(feature = "align"))]
279327
__align: [::c_longlong; 0],
280328
size: [u8; __SIZEOF_PTHREAD_COND_T],
281329
}
282330

331+
#[cfg_attr(feature = "align", repr(align(4)))]
283332
pub struct pthread_condattr_t { // Unverified
333+
#[cfg(not(feature = "align"))]
284334
__align: [::c_int; 0],
285335
size: [u8; __SIZEOF_PTHREAD_CONDATTR_T],
286336
}
287337

288338
}
289339

290340
// unverified constants
291-
pub const PTHREAD_MUTEX_INITIALIZER: pthread_mutex_t = pthread_mutex_t {
292-
__align: [],
293-
size: [0; __SIZEOF_PTHREAD_MUTEX_T],
294-
};
295-
pub const PTHREAD_COND_INITIALIZER: pthread_cond_t = pthread_cond_t {
296-
__align: [],
297-
size: [0; __SIZEOF_PTHREAD_COND_T],
298-
};
299-
pub const PTHREAD_RWLOCK_INITIALIZER: pthread_rwlock_t = pthread_rwlock_t {
300-
__align: [],
301-
size: [0; __SIZEOF_PTHREAD_RWLOCK_T],
302-
};
341+
align_const! {
342+
pub const PTHREAD_MUTEX_INITIALIZER: pthread_mutex_t = pthread_mutex_t {
343+
size: [0; __SIZEOF_PTHREAD_MUTEX_T],
344+
};
345+
pub const PTHREAD_COND_INITIALIZER: pthread_cond_t = pthread_cond_t {
346+
size: [0; __SIZEOF_PTHREAD_COND_T],
347+
};
348+
pub const PTHREAD_RWLOCK_INITIALIZER: pthread_rwlock_t = pthread_rwlock_t {
349+
size: [0; __SIZEOF_PTHREAD_RWLOCK_T],
350+
};
351+
}
303352
pub const NCCS: usize = 32;
304353
pub const __SIZEOF_PTHREAD_ATTR_T: usize = 56;
305354
pub const __SIZEOF_PTHREAD_MUTEX_T: usize = 40;

0 commit comments

Comments
 (0)