@@ -622,11 +622,11 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
622622 let name = this. read_scalar ( args[ 0 ] ) ?. to_i32 ( ) ?;
623623
624624 trace ! ( "sysconf() called with name {}" , name) ;
625- // Cache the sysconf integers via Miri's global cache.
625+ // TODO: Cache the sysconf integers via Miri's global cache.
626626 let paths = & [
627- ( & [ "libc" , "_SC_PAGESIZE" ] , Scalar :: from_int ( 4096 , dest. layout . size ) ) ,
627+ ( & [ "libc" , "_SC_PAGESIZE" ] , Scalar :: from_int ( PAGE_SIZE , dest. layout . size ) ) ,
628628 ( & [ "libc" , "_SC_GETPW_R_SIZE_MAX" ] , Scalar :: from_int ( -1 , dest. layout . size ) ) ,
629- ( & [ "libc" , "_SC_NPROCESSORS_ONLN" ] , Scalar :: from_int ( 1 , dest. layout . size ) ) ,
629+ ( & [ "libc" , "_SC_NPROCESSORS_ONLN" ] , Scalar :: from_int ( NUM_CPUS , dest. layout . size ) ) ,
630630 ] ;
631631 let mut result = None ;
632632 for & ( path, path_value) in paths {
@@ -648,6 +648,11 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
648648 }
649649 }
650650
651+ "sched_getaffinity" => {
652+ // Return an error; `num_cpus` then falls back to `sysconf`.
653+ this. write_scalar ( Scalar :: from_int ( -1 , dest. layout . size ) , dest) ?;
654+ }
655+
651656 "isatty" => {
652657 this. write_null ( dest) ?;
653658 }
@@ -722,14 +727,14 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
722727 // Second argument is where we are supposed to write the stack size.
723728 let ptr = this. deref_operand ( args[ 1 ] ) ?;
724729 // Just any address.
725- let stack_addr = Scalar :: from_int ( 0x80000 , args[ 1 ] . layout . size ) ;
730+ let stack_addr = Scalar :: from_uint ( STACK_ADDR , args[ 1 ] . layout . size ) ;
726731 this. write_scalar ( stack_addr, ptr. into ( ) ) ?;
727732 // Return success (`0`).
728733 this. write_null ( dest) ?;
729734 }
730735 "pthread_get_stackaddr_np" => {
731736 // Just any address.
732- let stack_addr = Scalar :: from_int ( 0x80000 , dest. layout . size ) ;
737+ let stack_addr = Scalar :: from_uint ( STACK_ADDR , dest. layout . size ) ;
733738 this. write_scalar ( stack_addr, dest) ?;
734739 }
735740
@@ -838,14 +843,14 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
838843 // Initialize with `0`.
839844 this. memory_mut ( ) . get_mut ( system_info_ptr. alloc_id ) ?
840845 . write_repeat ( tcx, system_info_ptr, 0 , system_info. layout . size ) ?;
841- // Set number of processors to `1` .
846+ // Set number of processors.
842847 let dword_size = Size :: from_bytes ( 4 ) ;
843848 let offset = 2 * dword_size + 3 * tcx. pointer_size ( ) ;
844849 this. memory_mut ( ) . get_mut ( system_info_ptr. alloc_id ) ?
845850 . write_scalar (
846851 tcx,
847852 system_info_ptr. offset ( offset, tcx) ?,
848- Scalar :: from_int ( 1 , dword_size) . into ( ) ,
853+ Scalar :: from_int ( NUM_CPUS , dword_size) . into ( ) ,
849854 dword_size,
850855 ) ?;
851856 }
0 commit comments