@@ -22,7 +22,7 @@ use core::sync::atomic::Ordering::Relaxed;
22
22
use core:: sync:: atomic:: { AtomicPtr , AtomicUsize } ;
23
23
use linux_raw_sys:: elf:: * ;
24
24
use linux_raw_sys:: general:: {
25
- AT_BASE , AT_CLKTCK , AT_EXECFN , AT_HWCAP , AT_HWCAP2 , AT_NULL , AT_PAGESZ , AT_SYSINFO_EHDR ,
25
+ AT_CLKTCK , AT_EXECFN , AT_HWCAP , AT_HWCAP2 , AT_MINSIGSTKSZ , AT_NULL , AT_PAGESZ , AT_SYSINFO_EHDR ,
26
26
} ;
27
27
#[ cfg( feature = "runtime" ) ]
28
28
use linux_raw_sys:: general:: {
@@ -72,6 +72,19 @@ pub(crate) fn linux_hwcap() -> (usize, usize) {
72
72
( hwcap, hwcap2)
73
73
}
74
74
75
+ #[ cfg( feature = "param" ) ]
76
+ #[ inline]
77
+ pub ( crate ) fn linux_minsigstksz ( ) -> usize {
78
+ let mut minsigstksz = MINSIGSTKSZ . load ( Relaxed ) ;
79
+
80
+ if minsigstksz == 0 {
81
+ init_auxv ( ) ;
82
+ minsigstksz = MINSIGSTKSZ . load ( Relaxed ) ;
83
+ }
84
+
85
+ minsigstksz
86
+ }
87
+
75
88
#[ cfg( feature = "param" ) ]
76
89
#[ inline]
77
90
pub ( crate ) fn linux_execfn ( ) -> & ' static CStr {
@@ -172,6 +185,7 @@ static PAGE_SIZE: AtomicUsize = AtomicUsize::new(0);
172
185
static CLOCK_TICKS_PER_SECOND : AtomicUsize = AtomicUsize :: new ( 0 ) ;
173
186
static HWCAP : AtomicUsize = AtomicUsize :: new ( 0 ) ;
174
187
static HWCAP2 : AtomicUsize = AtomicUsize :: new ( 0 ) ;
188
+ static MINSIGSTKSZ : AtomicUsize = AtomicUsize :: new ( 0 ) ;
175
189
static EXECFN : AtomicPtr < c:: c_char > = AtomicPtr :: new ( null_mut ( ) ) ;
176
190
static SYSINFO_EHDR : AtomicPtr < Elf_Ehdr > = AtomicPtr :: new ( null_mut ( ) ) ;
177
191
#[ cfg( feature = "runtime" ) ]
@@ -351,6 +365,7 @@ unsafe fn init_from_aux_iter(aux_iter: impl Iterator<Item = Elf_auxv_t>) -> Opti
351
365
let mut clktck = 0 ;
352
366
let mut hwcap = 0 ;
353
367
let mut hwcap2 = 0 ;
368
+ let mut minsigstksz = 0 ;
354
369
let mut execfn = null_mut ( ) ;
355
370
let mut sysinfo_ehdr = null_mut ( ) ;
356
371
#[ cfg( feature = "runtime" ) ]
@@ -380,6 +395,7 @@ unsafe fn init_from_aux_iter(aux_iter: impl Iterator<Item = Elf_auxv_t>) -> Opti
380
395
AT_CLKTCK => clktck = a_val as usize ,
381
396
AT_HWCAP => hwcap = a_val as usize ,
382
397
AT_HWCAP2 => hwcap2 = a_val as usize ,
398
+ AT_MINSIGSTKSZ => minsigstksz = a_val as usize ,
383
399
AT_EXECFN => execfn = check_raw_pointer :: < c:: c_char > ( a_val as * mut _ ) ?. as_ptr ( ) ,
384
400
AT_SYSINFO_EHDR => sysinfo_ehdr = check_elf_base ( a_val as * mut _ ) ?. as_ptr ( ) ,
385
401
@@ -434,6 +450,7 @@ unsafe fn init_from_aux_iter(aux_iter: impl Iterator<Item = Elf_auxv_t>) -> Opti
434
450
CLOCK_TICKS_PER_SECOND . store ( clktck, Relaxed ) ;
435
451
HWCAP . store ( hwcap, Relaxed ) ;
436
452
HWCAP2 . store ( hwcap2, Relaxed ) ;
453
+ MINSIGSTKSZ . store ( minsigstksz, Relaxed ) ;
437
454
EXECFN . store ( execfn, Relaxed ) ;
438
455
SYSINFO_EHDR . store ( sysinfo_ehdr, Relaxed ) ;
439
456
#[ cfg( feature = "runtime" ) ]
0 commit comments