diff options
Diffstat (limited to 'tools/arch')
| -rw-r--r-- | tools/arch/arm64/include/uapi/asm/bpf_perf_event.h | 9 | ||||
| -rw-r--r-- | tools/arch/loongarch/include/uapi/asm/bitsperlong.h | 2 | ||||
| -rw-r--r-- | tools/arch/loongarch/include/uapi/asm/perf_regs.h | 40 | ||||
| -rw-r--r-- | tools/arch/loongarch/include/uapi/asm/unistd.h | 9 | ||||
| -rw-r--r-- | tools/arch/s390/include/uapi/asm/bpf_perf_event.h | 9 | ||||
| -rw-r--r-- | tools/arch/s390/include/uapi/asm/ptrace.h | 458 | ||||
| -rw-r--r-- | tools/arch/x86/include/asm/orc_types.h | 12 | ||||
| -rw-r--r-- | tools/arch/x86/include/uapi/asm/unistd_32.h | 4 | ||||
| -rw-r--r-- | tools/arch/x86/include/uapi/asm/unistd_64.h | 3 | ||||
| -rw-r--r-- | tools/arch/x86/kcpuid/cpuid.csv | 59 | ||||
| -rw-r--r-- | tools/arch/x86/kcpuid/kcpuid.c | 32 | 
11 files changed, 143 insertions, 494 deletions
| diff --git a/tools/arch/arm64/include/uapi/asm/bpf_perf_event.h b/tools/arch/arm64/include/uapi/asm/bpf_perf_event.h deleted file mode 100644 index b551b741653d..000000000000 --- a/tools/arch/arm64/include/uapi/asm/bpf_perf_event.h +++ /dev/null @@ -1,9 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#ifndef _UAPI__ASM_BPF_PERF_EVENT_H__ -#define _UAPI__ASM_BPF_PERF_EVENT_H__ - -#include <asm/ptrace.h> - -typedef struct user_pt_regs bpf_user_pt_regs_t; - -#endif /* _UAPI__ASM_BPF_PERF_EVENT_H__ */ diff --git a/tools/arch/loongarch/include/uapi/asm/bitsperlong.h b/tools/arch/loongarch/include/uapi/asm/bitsperlong.h index d4e32b3d4843..00b4ba1e5cdf 100644 --- a/tools/arch/loongarch/include/uapi/asm/bitsperlong.h +++ b/tools/arch/loongarch/include/uapi/asm/bitsperlong.h @@ -2,7 +2,7 @@  #ifndef __ASM_LOONGARCH_BITSPERLONG_H  #define __ASM_LOONGARCH_BITSPERLONG_H -#define __BITS_PER_LONG (__SIZEOF_POINTER__ * 8) +#define __BITS_PER_LONG (__SIZEOF_LONG__ * 8)  #include <asm-generic/bitsperlong.h> diff --git a/tools/arch/loongarch/include/uapi/asm/perf_regs.h b/tools/arch/loongarch/include/uapi/asm/perf_regs.h new file mode 100644 index 000000000000..29d69c00fc7a --- /dev/null +++ b/tools/arch/loongarch/include/uapi/asm/perf_regs.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_LOONGARCH_PERF_REGS_H +#define _ASM_LOONGARCH_PERF_REGS_H + +enum perf_event_loongarch_regs { +	PERF_REG_LOONGARCH_PC, +	PERF_REG_LOONGARCH_R1, +	PERF_REG_LOONGARCH_R2, +	PERF_REG_LOONGARCH_R3, +	PERF_REG_LOONGARCH_R4, +	PERF_REG_LOONGARCH_R5, +	PERF_REG_LOONGARCH_R6, +	PERF_REG_LOONGARCH_R7, +	PERF_REG_LOONGARCH_R8, +	PERF_REG_LOONGARCH_R9, +	PERF_REG_LOONGARCH_R10, +	PERF_REG_LOONGARCH_R11, +	PERF_REG_LOONGARCH_R12, +	PERF_REG_LOONGARCH_R13, +	PERF_REG_LOONGARCH_R14, +	PERF_REG_LOONGARCH_R15, +	PERF_REG_LOONGARCH_R16, +	PERF_REG_LOONGARCH_R17, +	PERF_REG_LOONGARCH_R18, +	PERF_REG_LOONGARCH_R19, +	PERF_REG_LOONGARCH_R20, +	PERF_REG_LOONGARCH_R21, +	PERF_REG_LOONGARCH_R22, +	PERF_REG_LOONGARCH_R23, +	PERF_REG_LOONGARCH_R24, +	PERF_REG_LOONGARCH_R25, +	PERF_REG_LOONGARCH_R26, +	PERF_REG_LOONGARCH_R27, +	PERF_REG_LOONGARCH_R28, +	PERF_REG_LOONGARCH_R29, +	PERF_REG_LOONGARCH_R30, +	PERF_REG_LOONGARCH_R31, +	PERF_REG_LOONGARCH_MAX, +}; +#endif /* _ASM_LOONGARCH_PERF_REGS_H */ diff --git a/tools/arch/loongarch/include/uapi/asm/unistd.h b/tools/arch/loongarch/include/uapi/asm/unistd.h new file mode 100644 index 000000000000..0c743344e92d --- /dev/null +++ b/tools/arch/loongarch/include/uapi/asm/unistd.h @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* + * Copyright (C) 2020-2023 Loongson Technology Corporation Limited + */ + +#define __ARCH_WANT_SYS_CLONE +#define __ARCH_WANT_SYS_CLONE3 + +#include <asm-generic/unistd.h> diff --git a/tools/arch/s390/include/uapi/asm/bpf_perf_event.h b/tools/arch/s390/include/uapi/asm/bpf_perf_event.h deleted file mode 100644 index 0a8e37a519f2..000000000000 --- a/tools/arch/s390/include/uapi/asm/bpf_perf_event.h +++ /dev/null @@ -1,9 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#ifndef _UAPI__ASM_BPF_PERF_EVENT_H__ -#define _UAPI__ASM_BPF_PERF_EVENT_H__ - -#include "ptrace.h" - -typedef user_pt_regs bpf_user_pt_regs_t; - -#endif /* _UAPI__ASM_BPF_PERF_EVENT_H__ */ diff --git a/tools/arch/s390/include/uapi/asm/ptrace.h b/tools/arch/s390/include/uapi/asm/ptrace.h deleted file mode 100644 index ad64d673b5e6..000000000000 --- a/tools/arch/s390/include/uapi/asm/ptrace.h +++ /dev/null @@ -1,458 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ -/* - *  S390 version - *    Copyright IBM Corp. 1999, 2000 - *    Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) - */ - -#ifndef _UAPI_S390_PTRACE_H -#define _UAPI_S390_PTRACE_H - -/* - * Offsets in the user_regs_struct. They are used for the ptrace - * system call and in entry.S - */ -#ifndef __s390x__ - -#define PT_PSWMASK  0x00 -#define PT_PSWADDR  0x04 -#define PT_GPR0     0x08 -#define PT_GPR1     0x0C -#define PT_GPR2     0x10 -#define PT_GPR3     0x14 -#define PT_GPR4     0x18 -#define PT_GPR5     0x1C -#define PT_GPR6     0x20 -#define PT_GPR7     0x24 -#define PT_GPR8     0x28 -#define PT_GPR9     0x2C -#define PT_GPR10    0x30 -#define PT_GPR11    0x34 -#define PT_GPR12    0x38 -#define PT_GPR13    0x3C -#define PT_GPR14    0x40 -#define PT_GPR15    0x44 -#define PT_ACR0     0x48 -#define PT_ACR1     0x4C -#define PT_ACR2     0x50 -#define PT_ACR3     0x54 -#define PT_ACR4	    0x58 -#define PT_ACR5	    0x5C -#define PT_ACR6	    0x60 -#define PT_ACR7	    0x64 -#define PT_ACR8	    0x68 -#define PT_ACR9	    0x6C -#define PT_ACR10    0x70 -#define PT_ACR11    0x74 -#define PT_ACR12    0x78 -#define PT_ACR13    0x7C -#define PT_ACR14    0x80 -#define PT_ACR15    0x84 -#define PT_ORIGGPR2 0x88 -#define PT_FPC	    0x90 -/* - * A nasty fact of life that the ptrace api - * only supports passing of longs. - */ -#define PT_FPR0_HI  0x98 -#define PT_FPR0_LO  0x9C -#define PT_FPR1_HI  0xA0 -#define PT_FPR1_LO  0xA4 -#define PT_FPR2_HI  0xA8 -#define PT_FPR2_LO  0xAC -#define PT_FPR3_HI  0xB0 -#define PT_FPR3_LO  0xB4 -#define PT_FPR4_HI  0xB8 -#define PT_FPR4_LO  0xBC -#define PT_FPR5_HI  0xC0 -#define PT_FPR5_LO  0xC4 -#define PT_FPR6_HI  0xC8 -#define PT_FPR6_LO  0xCC -#define PT_FPR7_HI  0xD0 -#define PT_FPR7_LO  0xD4 -#define PT_FPR8_HI  0xD8 -#define PT_FPR8_LO  0XDC -#define PT_FPR9_HI  0xE0 -#define PT_FPR9_LO  0xE4 -#define PT_FPR10_HI 0xE8 -#define PT_FPR10_LO 0xEC -#define PT_FPR11_HI 0xF0 -#define PT_FPR11_LO 0xF4 -#define PT_FPR12_HI 0xF8 -#define PT_FPR12_LO 0xFC -#define PT_FPR13_HI 0x100 -#define PT_FPR13_LO 0x104 -#define PT_FPR14_HI 0x108 -#define PT_FPR14_LO 0x10C -#define PT_FPR15_HI 0x110 -#define PT_FPR15_LO 0x114 -#define PT_CR_9	    0x118 -#define PT_CR_10    0x11C -#define PT_CR_11    0x120 -#define PT_IEEE_IP  0x13C -#define PT_LASTOFF  PT_IEEE_IP -#define PT_ENDREGS  0x140-1 - -#define GPR_SIZE	4 -#define CR_SIZE		4 - -#define STACK_FRAME_OVERHEAD	96	/* size of minimum stack frame */ - -#else /* __s390x__ */ - -#define PT_PSWMASK  0x00 -#define PT_PSWADDR  0x08 -#define PT_GPR0     0x10 -#define PT_GPR1     0x18 -#define PT_GPR2     0x20 -#define PT_GPR3     0x28 -#define PT_GPR4     0x30 -#define PT_GPR5     0x38 -#define PT_GPR6     0x40 -#define PT_GPR7     0x48 -#define PT_GPR8     0x50 -#define PT_GPR9     0x58 -#define PT_GPR10    0x60 -#define PT_GPR11    0x68 -#define PT_GPR12    0x70 -#define PT_GPR13    0x78 -#define PT_GPR14    0x80 -#define PT_GPR15    0x88 -#define PT_ACR0     0x90 -#define PT_ACR1     0x94 -#define PT_ACR2     0x98 -#define PT_ACR3     0x9C -#define PT_ACR4	    0xA0 -#define PT_ACR5	    0xA4 -#define PT_ACR6	    0xA8 -#define PT_ACR7	    0xAC -#define PT_ACR8	    0xB0 -#define PT_ACR9	    0xB4 -#define PT_ACR10    0xB8 -#define PT_ACR11    0xBC -#define PT_ACR12    0xC0 -#define PT_ACR13    0xC4 -#define PT_ACR14    0xC8 -#define PT_ACR15    0xCC -#define PT_ORIGGPR2 0xD0 -#define PT_FPC	    0xD8 -#define PT_FPR0     0xE0 -#define PT_FPR1     0xE8 -#define PT_FPR2     0xF0 -#define PT_FPR3     0xF8 -#define PT_FPR4     0x100 -#define PT_FPR5     0x108 -#define PT_FPR6     0x110 -#define PT_FPR7     0x118 -#define PT_FPR8     0x120 -#define PT_FPR9     0x128 -#define PT_FPR10    0x130 -#define PT_FPR11    0x138 -#define PT_FPR12    0x140 -#define PT_FPR13    0x148 -#define PT_FPR14    0x150 -#define PT_FPR15    0x158 -#define PT_CR_9     0x160 -#define PT_CR_10    0x168 -#define PT_CR_11    0x170 -#define PT_IEEE_IP  0x1A8 -#define PT_LASTOFF  PT_IEEE_IP -#define PT_ENDREGS  0x1B0-1 - -#define GPR_SIZE	8 -#define CR_SIZE		8 - -#define STACK_FRAME_OVERHEAD	160	 /* size of minimum stack frame */ - -#endif /* __s390x__ */ - -#define NUM_GPRS	16 -#define NUM_FPRS	16 -#define NUM_CRS		16 -#define NUM_ACRS	16 - -#define NUM_CR_WORDS	3 - -#define FPR_SIZE	8 -#define FPC_SIZE	4 -#define FPC_PAD_SIZE	4 /* gcc insists on aligning the fpregs */ -#define ACR_SIZE	4 - - -#define PTRACE_OLDSETOPTIONS		21 -#define PTRACE_SYSEMU			31 -#define PTRACE_SYSEMU_SINGLESTEP	32 -#ifndef __ASSEMBLY__ -#include <linux/stddef.h> -#include <linux/types.h> - -typedef union { -	float	f; -	double	d; -	__u64	ui; -	struct -	{ -		__u32 hi; -		__u32 lo; -	} fp; -} freg_t; - -typedef struct { -	__u32	fpc; -	__u32	pad; -	freg_t	fprs[NUM_FPRS]; -} s390_fp_regs; - -#define FPC_EXCEPTION_MASK	0xF8000000 -#define FPC_FLAGS_MASK		0x00F80000 -#define FPC_DXC_MASK		0x0000FF00 -#define FPC_RM_MASK		0x00000003 - -/* this typedef defines how a Program Status Word looks like */ -typedef struct { -	unsigned long mask; -	unsigned long addr; -} __attribute__ ((aligned(8))) psw_t; - -#ifndef __s390x__ - -#define PSW_MASK_PER		0x40000000UL -#define PSW_MASK_DAT		0x04000000UL -#define PSW_MASK_IO		0x02000000UL -#define PSW_MASK_EXT		0x01000000UL -#define PSW_MASK_KEY		0x00F00000UL -#define PSW_MASK_BASE		0x00080000UL	/* always one */ -#define PSW_MASK_MCHECK		0x00040000UL -#define PSW_MASK_WAIT		0x00020000UL -#define PSW_MASK_PSTATE		0x00010000UL -#define PSW_MASK_ASC		0x0000C000UL -#define PSW_MASK_CC		0x00003000UL -#define PSW_MASK_PM		0x00000F00UL -#define PSW_MASK_RI		0x00000000UL -#define PSW_MASK_EA		0x00000000UL -#define PSW_MASK_BA		0x00000000UL - -#define PSW_MASK_USER		0x0000FF00UL - -#define PSW_ADDR_AMODE		0x80000000UL -#define PSW_ADDR_INSN		0x7FFFFFFFUL - -#define PSW_DEFAULT_KEY		(((unsigned long) PAGE_DEFAULT_ACC) << 20) - -#define PSW_ASC_PRIMARY		0x00000000UL -#define PSW_ASC_ACCREG		0x00004000UL -#define PSW_ASC_SECONDARY	0x00008000UL -#define PSW_ASC_HOME		0x0000C000UL - -#else /* __s390x__ */ - -#define PSW_MASK_PER		0x4000000000000000UL -#define PSW_MASK_DAT		0x0400000000000000UL -#define PSW_MASK_IO		0x0200000000000000UL -#define PSW_MASK_EXT		0x0100000000000000UL -#define PSW_MASK_BASE		0x0000000000000000UL -#define PSW_MASK_KEY		0x00F0000000000000UL -#define PSW_MASK_MCHECK		0x0004000000000000UL -#define PSW_MASK_WAIT		0x0002000000000000UL -#define PSW_MASK_PSTATE		0x0001000000000000UL -#define PSW_MASK_ASC		0x0000C00000000000UL -#define PSW_MASK_CC		0x0000300000000000UL -#define PSW_MASK_PM		0x00000F0000000000UL -#define PSW_MASK_RI		0x0000008000000000UL -#define PSW_MASK_EA		0x0000000100000000UL -#define PSW_MASK_BA		0x0000000080000000UL - -#define PSW_MASK_USER		0x0000FF0180000000UL - -#define PSW_ADDR_AMODE		0x0000000000000000UL -#define PSW_ADDR_INSN		0xFFFFFFFFFFFFFFFFUL - -#define PSW_DEFAULT_KEY		(((unsigned long) PAGE_DEFAULT_ACC) << 52) - -#define PSW_ASC_PRIMARY		0x0000000000000000UL -#define PSW_ASC_ACCREG		0x0000400000000000UL -#define PSW_ASC_SECONDARY	0x0000800000000000UL -#define PSW_ASC_HOME		0x0000C00000000000UL - -#endif /* __s390x__ */ - - -/* - * The s390_regs structure is used to define the elf_gregset_t. - */ -typedef struct { -	psw_t psw; -	unsigned long gprs[NUM_GPRS]; -	unsigned int  acrs[NUM_ACRS]; -	unsigned long orig_gpr2; -} s390_regs; - -/* - * The user_pt_regs structure exports the beginning of - * the in-kernel pt_regs structure to user space. - */ -typedef struct { -	unsigned long args[1]; -	psw_t psw; -	unsigned long gprs[NUM_GPRS]; -} user_pt_regs; - -/* - * Now for the user space program event recording (trace) definitions. - * The following structures are used only for the ptrace interface, don't - * touch or even look at it if you don't want to modify the user-space - * ptrace interface. In particular stay away from it for in-kernel PER. - */ -typedef struct { -	unsigned long cr[NUM_CR_WORDS]; -} per_cr_words; - -#define PER_EM_MASK 0xE8000000UL - -typedef struct { -#ifdef __s390x__ -	unsigned		       : 32; -#endif /* __s390x__ */ -	unsigned em_branching	       : 1; -	unsigned em_instruction_fetch  : 1; -	/* -	 * Switching on storage alteration automatically fixes -	 * the storage alteration event bit in the users std. -	 */ -	unsigned em_storage_alteration : 1; -	unsigned em_gpr_alt_unused     : 1; -	unsigned em_store_real_address : 1; -	unsigned		       : 3; -	unsigned branch_addr_ctl       : 1; -	unsigned		       : 1; -	unsigned storage_alt_space_ctl : 1; -	unsigned		       : 21; -	unsigned long starting_addr; -	unsigned long ending_addr; -} per_cr_bits; - -typedef struct { -	unsigned short perc_atmid; -	unsigned long address; -	unsigned char access_id; -} per_lowcore_words; - -typedef struct { -	unsigned perc_branching		 : 1; -	unsigned perc_instruction_fetch  : 1; -	unsigned perc_storage_alteration : 1; -	unsigned perc_gpr_alt_unused	 : 1; -	unsigned perc_store_real_address : 1; -	unsigned			 : 3; -	unsigned atmid_psw_bit_31	 : 1; -	unsigned atmid_validity_bit	 : 1; -	unsigned atmid_psw_bit_32	 : 1; -	unsigned atmid_psw_bit_5	 : 1; -	unsigned atmid_psw_bit_16	 : 1; -	unsigned atmid_psw_bit_17	 : 1; -	unsigned si			 : 2; -	unsigned long address; -	unsigned			 : 4; -	unsigned access_id		 : 4; -} per_lowcore_bits; - -typedef struct { -	union { -		per_cr_words   words; -		per_cr_bits    bits; -	} control_regs; -	/* -	 * The single_step and instruction_fetch bits are obsolete, -	 * the kernel always sets them to zero. To enable single -	 * stepping use ptrace(PTRACE_SINGLESTEP) instead. -	 */ -	unsigned  single_step	    : 1; -	unsigned  instruction_fetch : 1; -	unsigned		    : 30; -	/* -	 * These addresses are copied into cr10 & cr11 if single -	 * stepping is switched off -	 */ -	unsigned long starting_addr; -	unsigned long ending_addr; -	union { -		per_lowcore_words words; -		per_lowcore_bits  bits; -	} lowcore; -} per_struct; - -typedef struct { -	unsigned int  len; -	unsigned long kernel_addr; -	unsigned long process_addr; -} ptrace_area; - -/* - * S/390 specific non posix ptrace requests. I chose unusual values so - * they are unlikely to clash with future ptrace definitions. - */ -#define PTRACE_PEEKUSR_AREA	      0x5000 -#define PTRACE_POKEUSR_AREA	      0x5001 -#define PTRACE_PEEKTEXT_AREA	      0x5002 -#define PTRACE_PEEKDATA_AREA	      0x5003 -#define PTRACE_POKETEXT_AREA	      0x5004 -#define PTRACE_POKEDATA_AREA	      0x5005 -#define PTRACE_GET_LAST_BREAK	      0x5006 -#define PTRACE_PEEK_SYSTEM_CALL       0x5007 -#define PTRACE_POKE_SYSTEM_CALL	      0x5008 -#define PTRACE_ENABLE_TE	      0x5009 -#define PTRACE_DISABLE_TE	      0x5010 -#define PTRACE_TE_ABORT_RAND	      0x5011 - -/* - * The numbers chosen here are somewhat arbitrary but absolutely MUST - * not overlap with any of the number assigned in <linux/ptrace.h>. - */ -#define PTRACE_SINGLEBLOCK	12	/* resume execution until next branch */ - -/* - * PT_PROT definition is loosely based on hppa bsd definition in - * gdb/hppab-nat.c - */ -#define PTRACE_PROT			  21 - -typedef enum { -	ptprot_set_access_watchpoint, -	ptprot_set_write_watchpoint, -	ptprot_disable_watchpoint -} ptprot_flags; - -typedef struct { -	unsigned long lowaddr; -	unsigned long hiaddr; -	ptprot_flags prot; -} ptprot_area; - -/* Sequence of bytes for breakpoint illegal instruction.  */ -#define S390_BREAKPOINT     {0x0,0x1} -#define S390_BREAKPOINT_U16 ((__u16)0x0001) -#define S390_SYSCALL_OPCODE ((__u16)0x0a00) -#define S390_SYSCALL_SIZE   2 - -/* - * The user_regs_struct defines the way the user registers are - * store on the stack for signal handling. - */ -struct user_regs_struct { -	psw_t psw; -	unsigned long gprs[NUM_GPRS]; -	unsigned int  acrs[NUM_ACRS]; -	unsigned long orig_gpr2; -	s390_fp_regs fp_regs; -	/* -	 * These per registers are in here so that gdb can modify them -	 * itself as there is no "official" ptrace interface for hardware -	 * watchpoints. This is the way intel does it. -	 */ -	per_struct per_info; -	unsigned long ieee_instruction_pointer;	/* obsolete, always 0 */ -}; - -#endif /* __ASSEMBLY__ */ - -#endif /* _UAPI_S390_PTRACE_H */ diff --git a/tools/arch/x86/include/asm/orc_types.h b/tools/arch/x86/include/asm/orc_types.h index 1343a62106de..46d7e06763c9 100644 --- a/tools/arch/x86/include/asm/orc_types.h +++ b/tools/arch/x86/include/asm/orc_types.h @@ -39,6 +39,12 @@  #define ORC_REG_SP_INDIRECT		9  #define ORC_REG_MAX			15 +#define ORC_TYPE_UNDEFINED		0 +#define ORC_TYPE_END_OF_STACK		1 +#define ORC_TYPE_CALL			2 +#define ORC_TYPE_REGS			3 +#define ORC_TYPE_REGS_PARTIAL		4 +  #ifndef __ASSEMBLY__  #include <asm/byteorder.h> @@ -56,16 +62,14 @@ struct orc_entry {  #if defined(__LITTLE_ENDIAN_BITFIELD)  	unsigned	sp_reg:4;  	unsigned	bp_reg:4; -	unsigned	type:2; +	unsigned	type:3;  	unsigned	signal:1; -	unsigned	end:1;  #elif defined(__BIG_ENDIAN_BITFIELD)  	unsigned	bp_reg:4;  	unsigned	sp_reg:4;  	unsigned	unused:4; -	unsigned	end:1;  	unsigned	signal:1; -	unsigned	type:2; +	unsigned	type:3;  #endif  } __packed; diff --git a/tools/arch/x86/include/uapi/asm/unistd_32.h b/tools/arch/x86/include/uapi/asm/unistd_32.h index 2712d5e03e2e..b8ddfc4c4ab0 100644 --- a/tools/arch/x86/include/uapi/asm/unistd_32.h +++ b/tools/arch/x86/include/uapi/asm/unistd_32.h @@ -1,6 +1,6 @@  /* SPDX-License-Identifier: GPL-2.0 */ -#ifndef __NR_execve -#define __NR_execve 11 +#ifndef __NR_fork +#define __NR_fork 2  #endif  #ifndef __NR_getppid  #define __NR_getppid 64 diff --git a/tools/arch/x86/include/uapi/asm/unistd_64.h b/tools/arch/x86/include/uapi/asm/unistd_64.h index a6f7fe84d4df..f70d2cada256 100644 --- a/tools/arch/x86/include/uapi/asm/unistd_64.h +++ b/tools/arch/x86/include/uapi/asm/unistd_64.h @@ -1,4 +1,7 @@  /* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __NR_fork +#define __NR_fork 57 +#endif  #ifndef __NR_execve  #define __NR_execve 59  #endif diff --git a/tools/arch/x86/kcpuid/cpuid.csv b/tools/arch/x86/kcpuid/cpuid.csv index 4f1c4b0c29e9..e0c25b75327e 100644 --- a/tools/arch/x86/kcpuid/cpuid.csv +++ b/tools/arch/x86/kcpuid/cpuid.csv @@ -184,8 +184,8 @@  	 7,    0,  EBX,     27, avx512er, AVX512 Exponent Reciproca instr  	 7,    0,  EBX,     28, avx512cd, AVX512 Conflict Detection instr  	 7,    0,  EBX,     29, sha, Intel Secure Hash Algorithm Extensions instr -	 7,    0,  EBX,     26, avx512bw, AVX512 Byte & Word instr -	 7,    0,  EBX,     28, avx512vl, AVX512 Vector Length Extentions (VL) +	 7,    0,  EBX,     30, avx512bw, AVX512 Byte & Word instr +	 7,    0,  EBX,     31, avx512vl, AVX512 Vector Length Extentions (VL)  	 7,    0,  ECX,      0, prefetchwt1, X  	 7,    0,  ECX,      1, avx512vbmi, AVX512 Vector Byte Manipulation Instructions  	 7,    0,  ECX,      2, umip, User-mode Instruction Prevention @@ -340,19 +340,70 @@  # According to SDM  # 40000000H - 4FFFFFFFH is invalid range -  # Leaf 80000001H  # Extended Processor Signature and Feature Bits +0x80000001,    0,  EAX,  27:20, extfamily, Extended family +0x80000001,    0,  EAX,  19:16, extmodel, Extended model +0x80000001,    0,  EAX,   11:8, basefamily, Description of Family +0x80000001,    0,  EAX,   11:8, basemodel, Model numbers vary with product +0x80000001,    0,  EAX,    3:0, stepping, Processor stepping (revision) for a specific model + +0x80000001,    0,  EBX,  31:28, pkgtype, Specifies the package type +  0x80000001,    0,  ECX,      0, lahf_lm, LAHF/SAHF available in 64-bit mode +0x80000001,    0,  ECX,      1, cmplegacy, Core multi-processing legacy mode +0x80000001,    0,  ECX,      2, svm, Indicates support for: VMRUN, VMLOAD, VMSAVE, CLGI, VMMCALL, and INVLPGA +0x80000001,    0,  ECX,      3, extapicspace, Extended APIC register space +0x80000001,    0,  ECX,      4, altmovecr8, Indicates support for LOCK MOV CR0 means MOV CR8  0x80000001,    0,  ECX,      5, lzcnt, LZCNT +0x80000001,    0,  ECX,      6, sse4a, EXTRQ, INSERTQ, MOVNTSS, and MOVNTSD instruction support +0x80000001,    0,  ECX,      7, misalignsse, Misaligned SSE Mode  0x80000001,    0,  ECX,      8, prefetchw, PREFETCHW +0x80000001,    0,  ECX,      9, osvw, OS Visible Work-around support +0x80000001,    0,  ECX,     10, ibs, Instruction Based Sampling +0x80000001,    0,  ECX,     11, xop, Extended operation support +0x80000001,    0,  ECX,     12, skinit, SKINIT and STGI support +0x80000001,    0,  ECX,     13, wdt, Watchdog timer support +0x80000001,    0,  ECX,     15, lwp, Lightweight profiling support +0x80000001,    0,  ECX,     16, fma4, Four-operand FMA instruction support +0x80000001,    0,  ECX,     17, tce, Translation cache extension +0x80000001,    0,  ECX,     22, TopologyExtensions, Indicates support for Core::X86::Cpuid::CachePropEax0 and Core::X86::Cpuid::ExtApicId +0x80000001,    0,  ECX,     23, perfctrextcore, Indicates support for Core::X86::Msr::PERF_CTL0 - 5 and Core::X86::Msr::PERF_CTR +0x80000001,    0,  ECX,     24, perfctrextdf, Indicates support for Core::X86::Msr::DF_PERF_CTL and Core::X86::Msr::DF_PERF_CTR +0x80000001,    0,  ECX,     26, databreakpointextension, Indicates data breakpoint support for Core::X86::Msr::DR0_ADDR_MASK, Core::X86::Msr::DR1_ADDR_MASK, Core::X86::Msr::DR2_ADDR_MASK and Core::X86::Msr::DR3_ADDR_MASK +0x80000001,    0,  ECX,     27, perftsc, Performance time-stamp counter supported +0x80000001,    0,  ECX,     28, perfctrextllc, Indicates support for L3 performance counter extensions +0x80000001,    0,  ECX,     29, mwaitextended, MWAITX and MONITORX capability is supported +0x80000001,    0,  ECX,     30, admskextn, Indicates support for address mask extension (to 32 bits and to all 4 DRs) for instruction breakpoints +0x80000001,    0,  EDX,      0, fpu, x87 floating point unit on-chip +0x80000001,    0,  EDX,      1, vme, Virtual-mode enhancements +0x80000001,    0,  EDX,      2, de, Debugging extensions, IO breakpoints, CR4.DE +0x80000001,    0,  EDX,      3, pse, Page-size extensions (4 MB pages) +0x80000001,    0,  EDX,      4, tsc, Time stamp counter, RDTSC/RDTSCP instructions, CR4.TSD +0x80000001,    0,  EDX,      5, msr, Model-specific registers (MSRs), with RDMSR and WRMSR instructions +0x80000001,    0,  EDX,      6, pae, Physical-address extensions (PAE) +0x80000001,    0,  EDX,      7, mce, Machine Check Exception, CR4.MCE +0x80000001,    0,  EDX,      8, cmpxchg8b, CMPXCHG8B instruction +0x80000001,    0,  EDX,      9, apic, advanced programmable interrupt controller (APIC) exists and is enabled  0x80000001,    0,  EDX,     11, sysret, SYSCALL/SYSRET supported +0x80000001,    0,  EDX,     12, mtrr, Memory-type range registers +0x80000001,    0,  EDX,     13, pge, Page global extension, CR4.PGE +0x80000001,    0,  EDX,     14, mca, Machine check architecture, MCG_CAP +0x80000001,    0,  EDX,     15, cmov, Conditional move instructions, CMOV, FCOMI, FCMOV +0x80000001,    0,  EDX,     16, pat, Page attribute table +0x80000001,    0,  EDX,     17, pse36, Page-size extensions  0x80000001,    0,  EDX,     20, exec_dis, Execute Disable Bit available +0x80000001,    0,  EDX,     22, mmxext, AMD extensions to MMX instructions +0x80000001,    0,  EDX,     23, mmx, MMX instructions +0x80000001,    0,  EDX,     24, fxsr, FXSAVE and FXRSTOR instructions +0x80000001,    0,  EDX,     25, ffxsr, FXSAVE and FXRSTOR instruction optimizations  0x80000001,    0,  EDX,     26, 1gb_page, 1GB page supported  0x80000001,    0,  EDX,     27, rdtscp, RDTSCP and IA32_TSC_AUX are available -#0x80000001,    0,  EDX,     29, 64b, 64b Architecture supported +0x80000001,    0,  EDX,     29, lm, 64b Architecture supported +0x80000001,    0,  EDX,     30, threednowext, AMD extensions to 3DNow! instructions +0x80000001,    0,  EDX,     31, threednow, 3DNow! instructions  # Leaf 80000002H/80000003H/80000004H  # Processor Brand String diff --git a/tools/arch/x86/kcpuid/kcpuid.c b/tools/arch/x86/kcpuid/kcpuid.c index dae75511fef7..416f5b35dd8f 100644 --- a/tools/arch/x86/kcpuid/kcpuid.c +++ b/tools/arch/x86/kcpuid/kcpuid.c @@ -33,7 +33,7 @@ struct reg_desc {  	struct bits_desc descs[32];  }; -enum { +enum cpuid_reg {  	R_EAX = 0,  	R_EBX,  	R_ECX, @@ -41,6 +41,10 @@ enum {  	NR_REGS  }; +static const char * const reg_names[] = { +	"EAX", "EBX", "ECX", "EDX", +}; +  struct subleaf {  	u32 index;  	u32 sub; @@ -428,12 +432,18 @@ static void parse_text(void)  /* Decode every eax/ebx/ecx/edx */ -static void decode_bits(u32 value, struct reg_desc *rdesc) +static void decode_bits(u32 value, struct reg_desc *rdesc, enum cpuid_reg reg)  {  	struct bits_desc *bdesc;  	int start, end, i;  	u32 mask; +	if (!rdesc->nr) { +		if (show_details) +			printf("\t %s: 0x%08x\n", reg_names[reg], value); +		return; +	} +  	for (i = 0; i < rdesc->nr; i++) {  		bdesc = &rdesc->descs[i]; @@ -468,13 +478,21 @@ static void show_leaf(struct subleaf *leaf)  	if (!leaf)  		return; -	if (show_raw) +	if (show_raw) {  		leaf_print_raw(leaf); +	} else { +		if (show_details) +			printf("CPUID_0x%x_ECX[0x%x]:\n", +				leaf->index, leaf->sub); +	} + +	decode_bits(leaf->eax, &leaf->info[R_EAX], R_EAX); +	decode_bits(leaf->ebx, &leaf->info[R_EBX], R_EBX); +	decode_bits(leaf->ecx, &leaf->info[R_ECX], R_ECX); +	decode_bits(leaf->edx, &leaf->info[R_EDX], R_EDX); -	decode_bits(leaf->eax, &leaf->info[R_EAX]); -	decode_bits(leaf->ebx, &leaf->info[R_EBX]); -	decode_bits(leaf->ecx, &leaf->info[R_ECX]); -	decode_bits(leaf->edx, &leaf->info[R_EDX]); +	if (!show_raw && show_details) +		printf("\n");  }  static void show_func(struct cpuid_func *func) | 
