diff options
Diffstat (limited to 'arch/s390/kernel/dis.c')
-rw-r--r-- | arch/s390/kernel/dis.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/arch/s390/kernel/dis.c b/arch/s390/kernel/dis.c index cc84a24c023f..f00286bd2ef9 100644 --- a/arch/s390/kernel/dis.c +++ b/arch/s390/kernel/dis.c | |||
@@ -1501,6 +1501,33 @@ static struct insn *find_insn(unsigned char *code) | |||
1501 | return NULL; | 1501 | return NULL; |
1502 | } | 1502 | } |
1503 | 1503 | ||
1504 | /** | ||
1505 | * insn_to_mnemonic - decode an s390 instruction | ||
1506 | * @instruction: instruction to decode | ||
1507 | * @buf: buffer to fill with mnemonic | ||
1508 | * | ||
1509 | * Decode the instruction at @instruction and store the corresponding | ||
1510 | * mnemonic into @buf. | ||
1511 | * @buf is left unchanged if the instruction could not be decoded. | ||
1512 | * Returns: | ||
1513 | * %0 on success, %-ENOENT if the instruction was not found. | ||
1514 | */ | ||
1515 | int insn_to_mnemonic(unsigned char *instruction, char buf[8]) | ||
1516 | { | ||
1517 | struct insn *insn; | ||
1518 | |||
1519 | insn = find_insn(instruction); | ||
1520 | if (!insn) | ||
1521 | return -ENOENT; | ||
1522 | if (insn->name[0] == '\0') | ||
1523 | snprintf(buf, sizeof(buf), "%s", | ||
1524 | long_insn_name[(int) insn->name[1]]); | ||
1525 | else | ||
1526 | snprintf(buf, sizeof(buf), "%.5s", insn->name); | ||
1527 | return 0; | ||
1528 | } | ||
1529 | EXPORT_SYMBOL_GPL(insn_to_mnemonic); | ||
1530 | |||
1504 | static int print_insn(char *buffer, unsigned char *code, unsigned long addr) | 1531 | static int print_insn(char *buffer, unsigned char *code, unsigned long addr) |
1505 | { | 1532 | { |
1506 | struct insn *insn; | 1533 | struct insn *insn; |