summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaciej Żenczykowski <maze@google.com>2024-02-16 02:04:00 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2024-02-16 02:04:00 +0000
commitad32db6dde5e0ff7193a7330a6a25ee114e1e82b (patch)
tree9685ec3d43a81cb1c0f3e1d13e380c9e54d1237d
parentba2f43bd521e49c44e36ee074a7e2b31db29cb5c (diff)
parent6f3832f116a219d2d69d9d2ee305f0501208f39a (diff)
downloadapf-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.c30
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) {