@@ -22,7 +22,7 @@ use core::sync::atomic::Ordering::Relaxed;
2222use core:: sync:: atomic:: { AtomicPtr , AtomicUsize } ;
2323use linux_raw_sys:: elf:: * ;
2424use 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 ,
2626} ;
2727#[ cfg( feature = "runtime" ) ]
2828use linux_raw_sys:: general:: {
@@ -72,6 +72,19 @@ pub(crate) fn linux_hwcap() -> (usize, usize) {
7272 ( hwcap, hwcap2)
7373}
7474
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+
7588#[ cfg( feature = "param" ) ]
7689#[ inline]
7790pub ( crate ) fn linux_execfn ( ) -> & ' static CStr {
@@ -172,6 +185,7 @@ static PAGE_SIZE: AtomicUsize = AtomicUsize::new(0);
172185static CLOCK_TICKS_PER_SECOND : AtomicUsize = AtomicUsize :: new ( 0 ) ;
173186static HWCAP : AtomicUsize = AtomicUsize :: new ( 0 ) ;
174187static HWCAP2 : AtomicUsize = AtomicUsize :: new ( 0 ) ;
188+ static MINSIGSTKSZ : AtomicUsize = AtomicUsize :: new ( 0 ) ;
175189static EXECFN : AtomicPtr < c:: c_char > = AtomicPtr :: new ( null_mut ( ) ) ;
176190static SYSINFO_EHDR : AtomicPtr < Elf_Ehdr > = AtomicPtr :: new ( null_mut ( ) ) ;
177191#[ cfg( feature = "runtime" ) ]
@@ -351,6 +365,7 @@ unsafe fn init_from_aux_iter(aux_iter: impl Iterator<Item = Elf_auxv_t>) -> Opti
351365 let mut clktck = 0 ;
352366 let mut hwcap = 0 ;
353367 let mut hwcap2 = 0 ;
368+ let mut minsigstksz = 0 ;
354369 let mut execfn = null_mut ( ) ;
355370 let mut sysinfo_ehdr = null_mut ( ) ;
356371 #[ cfg( feature = "runtime" ) ]
@@ -380,6 +395,7 @@ unsafe fn init_from_aux_iter(aux_iter: impl Iterator<Item = Elf_auxv_t>) -> Opti
380395 AT_CLKTCK => clktck = a_val as usize ,
381396 AT_HWCAP => hwcap = a_val as usize ,
382397 AT_HWCAP2 => hwcap2 = a_val as usize ,
398+ AT_MINSIGSTKSZ => minsigstksz = a_val as usize ,
383399 AT_EXECFN => execfn = check_raw_pointer :: < c:: c_char > ( a_val as * mut _ ) ?. as_ptr ( ) ,
384400 AT_SYSINFO_EHDR => sysinfo_ehdr = check_elf_base ( a_val as * mut _ ) ?. as_ptr ( ) ,
385401
@@ -434,6 +450,7 @@ unsafe fn init_from_aux_iter(aux_iter: impl Iterator<Item = Elf_auxv_t>) -> Opti
434450 CLOCK_TICKS_PER_SECOND . store ( clktck, Relaxed ) ;
435451 HWCAP . store ( hwcap, Relaxed ) ;
436452 HWCAP2 . store ( hwcap2, Relaxed ) ;
453+ MINSIGSTKSZ . store ( minsigstksz, Relaxed ) ;
437454 EXECFN . store ( execfn, Relaxed ) ;
438455 SYSINFO_EHDR . store ( sysinfo_ehdr, Relaxed ) ;
439456 #[ cfg( feature = "runtime" ) ]
0 commit comments