diff options
Diffstat (limited to 'arch/s390/include/asm/dis.h')
| -rw-r--r-- | arch/s390/include/asm/dis.h | 52 | 
1 files changed, 52 insertions, 0 deletions
diff --git a/arch/s390/include/asm/dis.h b/arch/s390/include/asm/dis.h new file mode 100644 index 000000000000..04a83f5773cd --- /dev/null +++ b/arch/s390/include/asm/dis.h @@ -0,0 +1,52 @@ +/* + * Disassemble s390 instructions. + * + * Copyright IBM Corp. 2007 + * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), + */ + +#ifndef __ASM_S390_DIS_H__ +#define __ASM_S390_DIS_H__ + +/* Type of operand */ +#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) */ + + +struct s390_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 s390_insn { +	const char name[5]; +	unsigned char opfrag; +	unsigned char format; +}; + + +static inline int insn_length(unsigned char code) +{ +	return ((((int) code + 64) >> 7) + 1) << 1; +} + +void show_code(struct pt_regs *regs); +void print_fn_code(unsigned char *code, unsigned long len); +int insn_to_mnemonic(unsigned char *instruction, char *buf, unsigned int len); +struct s390_insn *find_insn(unsigned char *code); + +static inline int is_known_insn(unsigned char *code) +{ +	return !!find_insn(code); +} + +#endif /* __ASM_S390_DIS_H__ */  | 
