diff options
author | Maciej Żenczykowski <maze@google.com> | 2024-02-16 02:04:00 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2024-02-16 02:04:00 +0000 |
commit | ad32db6dde5e0ff7193a7330a6a25ee114e1e82b (patch) | |
tree | 9685ec3d43a81cb1c0f3e1d13e380c9e54d1237d | |
parent | ba2f43bd521e49c44e36ee074a7e2b31db29cb5c (diff) | |
parent | 6f3832f116a219d2d69d9d2ee305f0501208f39a (diff) | |
download | apf-ad32db6dde5e0ff7193a7330a6a25ee114e1e82b.tar.gz |
Merge "v5: add disassembler support for JDNS{Q|A}MATCHSAFE_EXT_OPCODE" into main am: 6f3832f116
Original change: https://android-review.googlesource.com/c/platform/hardware/google/apf/+/2963744
Change-Id: I8e3f4579da143865196bd097688d0fce6b8d01df
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | disassembler.c | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/disassembler.c b/disassembler.c index 3a70f82..65b90d1 100644 --- a/disassembler.c +++ b/disassembler.c @@ -302,15 +302,27 @@ const char* apf_disassemble(const uint8_t* program, uint32_t program_len, uint32 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 @@ const char* apf_disassemble(const uint8_t* program, uint32_t program_len, uint32 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) { |