v5: add disassembler support for JDNS{Q|A}MATCHSAFE_EXT_OPCODE
Test: TH
Change-Id: Idff7ce13716c2bd23c6d195e8e68771cd1cbb84b
diff --git a/disassembler.c b/disassembler.c
index 3a70f82..65b90d1 100644
--- a/disassembler.c
+++ b/disassembler.c
@@ -302,15 +302,27 @@
break;
}
- case JDNSQMATCH_EXT_OPCODE:
- case JDNSAMATCH_EXT_OPCODE: {
+ case JDNSQMATCH_EXT_OPCODE: // 43
+ case JDNSAMATCH_EXT_OPCODE: // 44
+ case JDNSQMATCHSAFE_EXT_OPCODE: // 45
+ case JDNSAMATCHSAFE_EXT_OPCODE: { // 46
uint32_t offs = DECODE_IMM(1 << (len_field - 1));
- uint16_t qtype;
- if (imm == JDNSQMATCH_EXT_OPCODE) {
- print_opcode(reg_num ? "jdnsqeq" : "jdnsqne");
- qtype = DECODE_IMM(1);
- } else {
- print_opcode(reg_num ? "jdnsaeq" : "jdnsane");
+ int qtype = -1;
+ switch(imm) {
+ case JDNSQMATCH_EXT_OPCODE:
+ print_opcode(reg_num ? "jdnsqeq" : "jdnsqne");
+ qtype = DECODE_IMM(1);
+ break;
+ case JDNSQMATCHSAFE_EXT_OPCODE:
+ print_opcode(reg_num ? "jdnsqeqsafe" : "jdnsqnesafe");
+ qtype = DECODE_IMM(1);
+ break;
+ case JDNSAMATCH_EXT_OPCODE:
+ print_opcode(reg_num ? "jdnsaeq" : "jdnsane"); break;
+ case JDNSAMATCHSAFE_EXT_OPCODE:
+ print_opcode(reg_num ? "jdnsaeqsafe" : "jdnsanesafe"); break;
+ default:
+ bprintf("unknown_ext %u", imm); break;
}
bprintf("r0, ");
uint32_t end = *ptr2pc;
@@ -320,7 +332,7 @@
end += 2;
print_jump_target(end + offs, program_len);
bprintf(", ");
- if (imm == JDNSQMATCH_EXT_OPCODE) {
+ if (imm == JDNSQMATCH_EXT_OPCODE || imm == JDNSQMATCHSAFE_EXT_OPCODE) {
bprintf("%d, ", qtype);
}
while (*ptr2pc < end) {