diff options
Diffstat (limited to 'arch/s390/kernel/dis.c')
| -rw-r--r-- | arch/s390/kernel/dis.c | 81 | 
1 files changed, 27 insertions, 54 deletions
diff --git a/arch/s390/kernel/dis.c b/arch/s390/kernel/dis.c index be87d3e05a5b..993efe6a887c 100644 --- a/arch/s390/kernel/dis.c +++ b/arch/s390/kernel/dis.c @@ -23,6 +23,7 @@  #include <linux/kdebug.h>  #include <asm/uaccess.h> +#include <asm/dis.h>  #include <asm/io.h>  #include <linux/atomic.h>  #include <asm/mathemu.h> @@ -37,17 +38,6 @@  #define ONELONG "%016lx: "  #endif /* CONFIG_64BIT */ -#define OPERAND_GPR	0x1	/* Operand printed as %rx */ -#define OPERAND_FPR	0x2	/* Operand printed as %fx */ -#define OPERAND_AR	0x4	/* Operand printed as %ax */ -#define OPERAND_CR	0x8	/* Operand printed as %cx */ -#define OPERAND_DISP	0x10	/* Operand printed as displacement */ -#define OPERAND_BASE	0x20	/* Operand printed as base register */ -#define OPERAND_INDEX	0x40	/* Operand printed as index register */ -#define OPERAND_PCREL	0x80	/* Operand printed as pc-relative symbol */ -#define OPERAND_SIGNED	0x100	/* Operand printed as signed value */ -#define OPERAND_LENGTH	0x200	/* Operand printed as length (+1) */ -  enum {  	UNUSED,	/* Indicates the end of the operand list */  	R_8,	/* GPR starting at position 8 */ @@ -155,19 +145,7 @@ enum {  	INSTR_S_00, INSTR_S_RD,  }; -struct operand { -	int bits;		/* The number of bits in the operand. */ -	int shift;		/* The number of bits to shift. */ -	int flags;		/* One bit syntax flags. */ -}; - -struct insn { -	const char name[5]; -	unsigned char opfrag; -	unsigned char format; -}; - -static const struct operand operands[] = +static const struct s390_operand operands[] =  {  	[UNUSED]  = { 0, 0, 0 },  	[R_8]	 = {  4,  8, OPERAND_GPR }, @@ -479,7 +457,7 @@ static char *long_insn_name[] = {  	[LONG_INSN_PCISTB] = "pcistb",  }; -static struct insn opcode[] = { +static struct s390_insn opcode[] = {  #ifdef CONFIG_64BIT  	{ "bprp", 0xc5, INSTR_MII_UPI },  	{ "bpp", 0xc7, INSTR_SMI_U0RDP }, @@ -668,7 +646,7 @@ static struct insn opcode[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_01[] = { +static struct s390_insn opcode_01[] = {  #ifdef CONFIG_64BIT  	{ "ptff", 0x04, INSTR_E },  	{ "pfpo", 0x0a, INSTR_E }, @@ -684,7 +662,7 @@ static struct insn opcode_01[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_a5[] = { +static struct s390_insn opcode_a5[] = {  #ifdef CONFIG_64BIT  	{ "iihh", 0x00, INSTR_RI_RU },  	{ "iihl", 0x01, INSTR_RI_RU }, @@ -706,7 +684,7 @@ static struct insn opcode_a5[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_a7[] = { +static struct s390_insn opcode_a7[] = {  #ifdef CONFIG_64BIT  	{ "tmhh", 0x02, INSTR_RI_RU },  	{ "tmhl", 0x03, INSTR_RI_RU }, @@ -728,7 +706,7 @@ static struct insn opcode_a7[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_aa[] = { +static struct s390_insn opcode_aa[] = {  #ifdef CONFIG_64BIT  	{ { 0, LONG_INSN_RINEXT }, 0x00, INSTR_RI_RI },  	{ "rion", 0x01, INSTR_RI_RI }, @@ -739,7 +717,7 @@ static struct insn opcode_aa[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_b2[] = { +static struct s390_insn opcode_b2[] = {  #ifdef CONFIG_64BIT  	{ "stckf", 0x7c, INSTR_S_RD },  	{ "lpp", 0x80, INSTR_S_RD }, @@ -851,7 +829,7 @@ static struct insn opcode_b2[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_b3[] = { +static struct s390_insn opcode_b3[] = {  #ifdef CONFIG_64BIT  	{ "maylr", 0x38, INSTR_RRF_F0FF },  	{ "mylr", 0x39, INSTR_RRF_F0FF }, @@ -1034,7 +1012,7 @@ static struct insn opcode_b3[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_b9[] = { +static struct s390_insn opcode_b9[] = {  #ifdef CONFIG_64BIT  	{ "lpgr", 0x00, INSTR_RRE_RR },  	{ "lngr", 0x01, INSTR_RRE_RR }, @@ -1167,7 +1145,7 @@ static struct insn opcode_b9[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_c0[] = { +static struct s390_insn opcode_c0[] = {  #ifdef CONFIG_64BIT  	{ "lgfi", 0x01, INSTR_RIL_RI },  	{ "xihf", 0x06, INSTR_RIL_RU }, @@ -1187,7 +1165,7 @@ static struct insn opcode_c0[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_c2[] = { +static struct s390_insn opcode_c2[] = {  #ifdef CONFIG_64BIT  	{ "msgfi", 0x00, INSTR_RIL_RI },  	{ "msfi", 0x01, INSTR_RIL_RI }, @@ -1205,7 +1183,7 @@ static struct insn opcode_c2[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_c4[] = { +static struct s390_insn opcode_c4[] = {  #ifdef CONFIG_64BIT  	{ "llhrl", 0x02, INSTR_RIL_RP },  	{ "lghrl", 0x04, INSTR_RIL_RP }, @@ -1222,7 +1200,7 @@ static struct insn opcode_c4[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_c6[] = { +static struct s390_insn opcode_c6[] = {  #ifdef CONFIG_64BIT  	{ "exrl", 0x00, INSTR_RIL_RP },  	{ "pfdrl", 0x02, INSTR_RIL_UP }, @@ -1240,7 +1218,7 @@ static struct insn opcode_c6[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_c8[] = { +static struct s390_insn opcode_c8[] = {  #ifdef CONFIG_64BIT  	{ "mvcos", 0x00, INSTR_SSF_RRDRD },  	{ "ectg", 0x01, INSTR_SSF_RRDRD }, @@ -1251,7 +1229,7 @@ static struct insn opcode_c8[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_cc[] = { +static struct s390_insn opcode_cc[] = {  #ifdef CONFIG_64BIT  	{ "brcth", 0x06, INSTR_RIL_RP },  	{ "aih", 0x08, INSTR_RIL_RI }, @@ -1263,7 +1241,7 @@ static struct insn opcode_cc[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_e3[] = { +static struct s390_insn opcode_e3[] = {  #ifdef CONFIG_64BIT  	{ "ltg", 0x02, INSTR_RXY_RRRD },  	{ "lrag", 0x03, INSTR_RXY_RRRD }, @@ -1369,7 +1347,7 @@ static struct insn opcode_e3[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_e5[] = { +static struct s390_insn opcode_e5[] = {  #ifdef CONFIG_64BIT  	{ "strag", 0x02, INSTR_SSE_RDRD },  	{ "mvhhi", 0x44, INSTR_SIL_RDI }, @@ -1391,7 +1369,7 @@ static struct insn opcode_e5[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_eb[] = { +static struct s390_insn opcode_eb[] = {  #ifdef CONFIG_64BIT  	{ "lmg", 0x04, INSTR_RSY_RRRD },  	{ "srag", 0x0a, INSTR_RSY_RRRD }, @@ -1465,7 +1443,7 @@ static struct insn opcode_eb[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_ec[] = { +static struct s390_insn opcode_ec[] = {  #ifdef CONFIG_64BIT  	{ "brxhg", 0x44, INSTR_RIE_RRP },  	{ "brxlg", 0x45, INSTR_RIE_RRP }, @@ -1504,7 +1482,7 @@ static struct insn opcode_ec[] = {  	{ "", 0, INSTR_INVALID }  }; -static struct insn opcode_ed[] = { +static struct s390_insn opcode_ed[] = {  #ifdef CONFIG_64BIT  	{ "mayl", 0x38, INSTR_RXF_FRRDF },  	{ "myl", 0x39, INSTR_RXF_FRRDF }, @@ -1572,7 +1550,7 @@ static struct insn opcode_ed[] = {  /* Extracts an operand value from an instruction.  */  static unsigned int extract_operand(unsigned char *code, -				    const struct operand *operand) +				    const struct s390_operand *operand)  {  	unsigned int val;  	int bits; @@ -1608,16 +1586,11 @@ static unsigned int extract_operand(unsigned char *code,  	return val;  } -static inline int insn_length(unsigned char code) -{ -	return ((((int) code + 64) >> 7) + 1) << 1; -} - -static struct insn *find_insn(unsigned char *code) +struct s390_insn *find_insn(unsigned char *code)  {  	unsigned char opfrag = code[1];  	unsigned char opmask; -	struct insn *table; +	struct s390_insn *table;  	switch (code[0]) {  	case 0x01: @@ -1706,7 +1679,7 @@ static struct insn *find_insn(unsigned char *code)   */  int insn_to_mnemonic(unsigned char *instruction, char *buf, unsigned int len)  { -	struct insn *insn; +	struct s390_insn *insn;  	insn = find_insn(instruction);  	if (!insn) @@ -1722,9 +1695,9 @@ EXPORT_SYMBOL_GPL(insn_to_mnemonic);  static int print_insn(char *buffer, unsigned char *code, unsigned long addr)  { -	struct insn *insn; +	struct s390_insn *insn;  	const unsigned char *ops; -	const struct operand *operand; +	const struct s390_operand *operand;  	unsigned int value;  	char separator;  	char *ptr;  | 
