@ -8339,9 +8339,11 @@ void target_exception_dump(CPUArchState *env, const char *fmt, int code)
}
}
# include "target_proc.h"
# if HOST_BIG_ENDIAN != TARGET_BIG_ENDIAN || \
defined ( TARGET_SPARC ) | | defined ( TARGET_M68K ) | | defined ( TARGET_HPPA ) | | \
defined ( TARGET_RISCV ) | | defined ( TARGET_S390X )
defined ( HAVE_ARCH_PROC_CPUINFO ) | | \
defined ( HAVE_ARCH_PROC_HARDWARE )
static int is_proc ( const char * filename , const char * entry )
{
return strcmp ( filename , entry ) = = 0 ;
@ -8393,171 +8395,6 @@ static int open_net_route(CPUArchState *cpu_env, int fd)
}
# endif
# if defined(TARGET_SPARC)
static int open_cpuinfo ( CPUArchState * cpu_env , int fd )
{
dprintf ( fd , " type \t \t : sun4u \n " ) ;
return 0 ;
}
# endif
# if defined(TARGET_HPPA)
static int open_cpuinfo ( CPUArchState * cpu_env , int fd )
{
int i , num_cpus ;
num_cpus = sysconf ( _SC_NPROCESSORS_ONLN ) ;
for ( i = 0 ; i < num_cpus ; i + + ) {
dprintf ( fd , " processor \t : %d \n " , i ) ;
dprintf ( fd , " cpu family \t : PA-RISC 1.1e \n " ) ;
dprintf ( fd , " cpu \t \t : PA7300LC (PCX-L2) \n " ) ;
dprintf ( fd , " capabilities \t : os32 \n " ) ;
dprintf ( fd , " model \t \t : 9000/778/B160L - "
" Merlin L2 160 QEMU (9000/778/B160L) \n \n " ) ;
}
return 0 ;
}
# endif
# if defined(TARGET_RISCV)
static int open_cpuinfo ( CPUArchState * cpu_env , int fd )
{
int i ;
int num_cpus = sysconf ( _SC_NPROCESSORS_ONLN ) ;
RISCVCPU * cpu = env_archcpu ( cpu_env ) ;
const RISCVCPUConfig * cfg = riscv_cpu_cfg ( ( CPURISCVState * ) cpu_env ) ;
char * isa_string = riscv_isa_string ( cpu ) ;
const char * mmu ;
if ( cfg - > mmu ) {
mmu = ( cpu_env - > xl = = MXL_RV32 ) ? " sv32 " : " sv48 " ;
} else {
mmu = " none " ;
}
for ( i = 0 ; i < num_cpus ; i + + ) {
dprintf ( fd , " processor \t : %d \n " , i ) ;
dprintf ( fd , " hart \t \t : %d \n " , i ) ;
dprintf ( fd , " isa \t \t : %s \n " , isa_string ) ;
dprintf ( fd , " mmu \t \t : %s \n " , mmu ) ;
dprintf ( fd , " uarch \t \t : qemu \n \n " ) ;
}
g_free ( isa_string ) ;
return 0 ;
}
# endif
# if defined(TARGET_S390X)
/*
* Emulate what a Linux kernel running in qemu - system - s390x - M accel = tcg would
* show in / proc / cpuinfo .
*
* Skip the following in order to match the missing support in op_ecag ( ) :
* - show_cacheinfo ( ) .
* - show_cpu_topology ( ) .
* - show_cpu_mhz ( ) .
*
* Use fixed values for certain fields :
* - bogomips per cpu - from a qemu - system - s390x run .
* - max thread id = 0 , since SMT / SIGP_SET_MULTI_THREADING is not supported .
*
* Keep the code structure close to arch / s390 / kernel / processor . c .
*/
static void show_facilities ( int fd )
{
size_t sizeof_stfl_bytes = 2048 ;
g_autofree uint8_t * stfl_bytes = g_new0 ( uint8_t , sizeof_stfl_bytes ) ;
unsigned int bit ;
dprintf ( fd , " facilities : " ) ;
s390_get_feat_block ( S390_FEAT_TYPE_STFL , stfl_bytes ) ;
for ( bit = 0 ; bit < sizeof_stfl_bytes * 8 ; bit + + ) {
if ( test_be_bit ( bit , stfl_bytes ) ) {
dprintf ( fd , " %d " , bit ) ;
}
}
dprintf ( fd , " \n " ) ;
}
static int cpu_ident ( unsigned long n )
{
return deposit32 ( 0 , CPU_ID_BITS - CPU_PHYS_ADDR_BITS , CPU_PHYS_ADDR_BITS ,
n ) ;
}
static void show_cpu_summary ( CPUArchState * cpu_env , int fd )
{
S390CPUModel * model = env_archcpu ( cpu_env ) - > model ;
int num_cpus = sysconf ( _SC_NPROCESSORS_ONLN ) ;
uint32_t elf_hwcap = get_elf_hwcap ( ) ;
const char * hwcap_str ;
int i ;
dprintf ( fd , " vendor_id : IBM/S390 \n "
" # processors : %i \n "
" bogomips per cpu: 13370.00 \n " ,
num_cpus ) ;
dprintf ( fd , " max thread id : 0 \n " ) ;
dprintf ( fd , " features \t : " ) ;
for ( i = 0 ; i < sizeof ( elf_hwcap ) * 8 ; i + + ) {
if ( ! ( elf_hwcap & ( 1 < < i ) ) ) {
continue ;
}
hwcap_str = elf_hwcap_str ( i ) ;
if ( hwcap_str ) {
dprintf ( fd , " %s " , hwcap_str ) ;
}
}
dprintf ( fd , " \n " ) ;
show_facilities ( fd ) ;
for ( i = 0 ; i < num_cpus ; i + + ) {
dprintf ( fd , " processor %d: "
" version = %02X, "
" identification = %06X, "
" machine = %04X \n " ,
i , model - > cpu_ver , cpu_ident ( i ) , model - > def - > type ) ;
}
}
static void show_cpu_ids ( CPUArchState * cpu_env , int fd , unsigned long n )
{
S390CPUModel * model = env_archcpu ( cpu_env ) - > model ;
dprintf ( fd , " version : %02X \n " , model - > cpu_ver ) ;
dprintf ( fd , " identification : %06X \n " , cpu_ident ( n ) ) ;
dprintf ( fd , " machine : %04X \n " , model - > def - > type ) ;
}
static void show_cpuinfo ( CPUArchState * cpu_env , int fd , unsigned long n )
{
dprintf ( fd , " \n cpu number : %ld \n " , n ) ;
show_cpu_ids ( cpu_env , fd , n ) ;
}
static int open_cpuinfo ( CPUArchState * cpu_env , int fd )
{
int num_cpus = sysconf ( _SC_NPROCESSORS_ONLN ) ;
int i ;
show_cpu_summary ( cpu_env , fd ) ;
for ( i = 0 ; i < num_cpus ; i + + ) {
show_cpuinfo ( cpu_env , fd , i ) ;
}
return 0 ;
}
# endif
# if defined(TARGET_M68K)
static int open_hardware ( CPUArchState * cpu_env , int fd )
{
dprintf ( fd , " Model: \t \t qemu-m68k \n " ) ;
return 0 ;
}
# endif
int do_guest_openat ( CPUArchState * cpu_env , int dirfd , const char * fname ,
int flags , mode_t mode , bool safe )
{
@ -8578,11 +8415,10 @@ int do_guest_openat(CPUArchState *cpu_env, int dirfd, const char *fname,
# if HOST_BIG_ENDIAN != TARGET_BIG_ENDIAN
{ " /proc/net/route " , open_net_route , is_proc } ,
# endif
# if defined(TARGET_SPARC) || defined(TARGET_HPPA) || \
defined ( TARGET_RISCV ) | | defined ( TARGET_S390X )
# if defined(HAVE_ARCH_PROC_CPUINFO)
{ " /proc/cpuinfo " , open_cpuinfo , is_proc } ,
# endif
# if defined(TARGET_M68K )
# if defined(HAVE_ARCH_PROC_HARDWARE )
{ " /proc/hardware " , open_hardware , is_proc } ,
# endif
{ NULL , NULL , NULL }