summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2020-04-28 20:22:30 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2020-04-28 20:22:30 +0000
commite25ab0b954d9efe81a7b1c370ed2c423642dc655 (patch)
tree950baec1cd1f978011841c7f8e8e2f9286cd0f3a
parent3153c3b255bb1188ccd123328fcc272e0db947af (diff)
parent7c5d43915046b2d1af8930ae772c291ea28baac3 (diff)
downloadapf-q_tzdata_aml_297100000.tar.gz
Change-Id: Ica396cc999073ef47f55828d350b4dbf1f787942
-rw-r--r--Android.bp30
-rw-r--r--TEST_MAPPING7
-rw-r--r--apf_disassembler.c187
-rw-r--r--apf_interpreter.c9
-rw-r--r--apf_run.c32
-rwxr-xr-xapf_run_test.sh32
-rw-r--r--apf_run_test.xml25
-rw-r--r--disassembler.c217
-rw-r--r--disassembler.h21
-rw-r--r--testdata/large_ra_without_counters.output26
-rw-r--r--testdata/large_ra_without_counters.packet1
-rw-r--r--testdata/large_ra_without_counters.program1
-rw-r--r--testdata/one_ra_with_counters.data1
-rw-r--r--testdata/one_ra_with_counters.output57
-rw-r--r--testdata/one_ra_with_counters.packet1
-rw-r--r--testdata/one_ra_with_counters.program1
16 files changed, 199 insertions, 449 deletions
diff --git a/Android.bp b/Android.bp
index 4157e2a..6832407 100644
--- a/Android.bp
+++ b/Android.bp
@@ -7,12 +7,6 @@ cc_defaults {
"-DAPF_FRAME_HEADER_SIZE=14",
"-Wall",
"-Werror",
- "-Werror=implicit-fallthrough",
- "-Wnullable-to-nonnull-conversion",
- "-Wsign-compare",
- "-Wthread-safety",
- "-Wunused-parameter",
- "-Wuninitialized",
],
}
@@ -26,10 +20,7 @@ cc_library_static {
cc_binary_host {
name: "apf_disassembler",
defaults: ["apf_defaults"],
- srcs: [
- "apf_disassembler.c",
- "disassembler.c",
- ],
+ srcs: ["apf_disassembler.c"],
}
cc_binary_host {
@@ -41,7 +32,6 @@ cc_binary_host {
srcs: [
"apf_run.c",
"apf_interpreter.c",
- "disassembler.c",
],
cflags: [
"-DAPF_TRACE_HOOK=apf_trace_hook",
@@ -52,21 +42,3 @@ cc_binary_host {
},
},
}
-
-sh_test_host {
- name: "apf_run_test",
- src: "apf_run_test.sh",
- filename: "apf_run_test.sh",
- test_suites: ["general-tests"],
- test_config: "apf_run_test.xml",
- required: [":apf_run"],
- data: ["testdata/*"],
- target: {
- darwin: {
- enabled: false,
- },
- windows: {
- enabled: false,
- },
- },
-}
diff --git a/TEST_MAPPING b/TEST_MAPPING
deleted file mode 100644
index 9135dc3..0000000
--- a/TEST_MAPPING
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "postsubmit": [
- { "name": "NetworkStackTests" },
- { "name": "apf_run_test",
- "host": true }
- ]
-}
diff --git a/apf_disassembler.c b/apf_disassembler.c
index a7401f3..818de7b 100644
--- a/apf_disassembler.c
+++ b/apf_disassembler.c
@@ -17,7 +17,52 @@
#include <stdint.h>
#include <stdio.h>
-#include "disassembler.h"
+#include "apf.h"
+
+// If "c" is of an unsigned type, generate a compile warning that gets promoted to an error.
+// This makes bounds checking simpler because ">= 0" can be avoided. Otherwise adding
+// superfluous ">= 0" with unsigned expressions generates compile warnings.
+#define ENFORCE_UNSIGNED(c) ((c)==(uint32_t)(c))
+
+static void print_opcode(const char* opcode) {
+ printf("%-6s", opcode);
+}
+
+// Mapping from opcode number to opcode name.
+static const char* opcode_names [] = {
+ [LDB_OPCODE] = "ldb",
+ [LDH_OPCODE] = "ldh",
+ [LDW_OPCODE] = "ldw",
+ [LDBX_OPCODE] = "ldb",
+ [LDHX_OPCODE] = "ldh",
+ [LDWX_OPCODE] = "ldw",
+ [ADD_OPCODE] = "add",
+ [MUL_OPCODE] = "mul",
+ [DIV_OPCODE] = "div",
+ [AND_OPCODE] = "and",
+ [OR_OPCODE] = "or",
+ [SH_OPCODE] = "sh",
+ [LI_OPCODE] = "li",
+ [JMP_OPCODE] = "jmp",
+ [JEQ_OPCODE] = "jeq",
+ [JNE_OPCODE] = "jne",
+ [JGT_OPCODE] = "jgt",
+ [JLT_OPCODE] = "jlt",
+ [JSET_OPCODE] = "jset",
+ [JNEBS_OPCODE] = "jnebs",
+ [LDDW_OPCODE] = "lddw",
+ [STDW_OPCODE] = "stdw",
+};
+
+static void print_jump_target(uint32_t target, uint32_t program_len) {
+ if (target == program_len) {
+ printf("pass");
+ } else if (target == program_len + 1) {
+ printf("drop");
+ } else {
+ printf("%u", target);
+ }
+}
// Disassembles an APF program. A hex dump of the program is supplied on stdin.
//
@@ -37,6 +82,144 @@ int main(void) {
}
for (uint32_t pc = 0; pc < program_len;) {
- pc = apf_disassemble(program, program_len, pc);
+ printf("%8u: ", pc);
+ const uint8_t bytecode = program[pc++];
+ const uint32_t opcode = EXTRACT_OPCODE(bytecode);
+#define PRINT_OPCODE() print_opcode(opcode_names[opcode])
+ const uint32_t reg_num = EXTRACT_REGISTER(bytecode);
+ // All instructions have immediate fields, so load them now.
+ const uint32_t len_field = EXTRACT_IMM_LENGTH(bytecode);
+ uint32_t imm = 0;
+ int32_t signed_imm = 0;
+ if (len_field != 0) {
+ const uint32_t imm_len = 1 << (len_field - 1);
+ uint32_t i;
+ for (i = 0; i < imm_len && pc < program_len; i++)
+ imm = (imm << 8) | program[pc++];
+ // Sign extend imm into signed_imm.
+ signed_imm = imm << ((4 - imm_len) * 8);
+ signed_imm >>= (4 - imm_len) * 8;
+ }
+ switch (opcode) {
+ case LDB_OPCODE:
+ case LDH_OPCODE:
+ case LDW_OPCODE:
+ PRINT_OPCODE();
+ printf("r%d, [%u]", reg_num, imm);
+ break;
+ case LDBX_OPCODE:
+ case LDHX_OPCODE:
+ case LDWX_OPCODE:
+ PRINT_OPCODE();
+ printf("r%d, [%u+r1]", reg_num, imm);
+ break;
+ case JMP_OPCODE:
+ PRINT_OPCODE();
+ print_jump_target(pc + imm, program_len);
+ break;
+ case JEQ_OPCODE:
+ case JNE_OPCODE:
+ case JGT_OPCODE:
+ case JLT_OPCODE:
+ case JSET_OPCODE:
+ case JNEBS_OPCODE: {
+ PRINT_OPCODE();
+ printf("r0, ");
+ // Load second immediate field.
+ uint32_t cmp_imm = 0;
+ if (reg_num == 1) {
+ printf("r1, ");
+ } else if (len_field == 0) {
+ printf("0, ");
+ } else {
+ uint32_t cmp_imm_len = 1 << (len_field - 1);
+ uint32_t i;
+ for (i = 0; i < cmp_imm_len && pc < program_len; i++)
+ cmp_imm = (cmp_imm << 8) | program[pc++];
+ printf("0x%x, ", cmp_imm);
+ }
+ if (opcode == JNEBS_OPCODE) {
+ print_jump_target(pc + imm + cmp_imm, program_len);
+ printf(", ");
+ while (cmp_imm--)
+ printf("%02x", program[pc++]);
+ } else {
+ print_jump_target(pc + imm, program_len);
+ }
+ break;
+ }
+ case ADD_OPCODE:
+ case SH_OPCODE:
+ PRINT_OPCODE();
+ if (reg_num) {
+ printf("r0, r1");
+ } else {
+ printf("r0, %d", signed_imm);
+ }
+ break;
+ case MUL_OPCODE:
+ case DIV_OPCODE:
+ case AND_OPCODE:
+ case OR_OPCODE:
+ PRINT_OPCODE();
+ if (reg_num) {
+ printf("r0, r1");
+ } else {
+ printf("r0, %u", imm);
+ }
+ break;
+ case LI_OPCODE:
+ PRINT_OPCODE();
+ printf("r%d, %d", reg_num, signed_imm);
+ break;
+ case EXT_OPCODE:
+ if (
+// If LDM_EXT_OPCODE is 0 and imm is compared with it, a compiler error will result,
+// instead just enforce that imm is unsigned (so it's always greater or equal to 0).
+#if LDM_EXT_OPCODE == 0
+ ENFORCE_UNSIGNED(imm) &&
+#else
+ imm >= LDM_EXT_OPCODE &&
+#endif
+ imm < (LDM_EXT_OPCODE + MEMORY_ITEMS)) {
+ print_opcode("ldm");
+ printf("r%d, m[%u]", reg_num, imm - LDM_EXT_OPCODE);
+ } else if (imm >= STM_EXT_OPCODE && imm < (STM_EXT_OPCODE + MEMORY_ITEMS)) {
+ print_opcode("stm");
+ printf("r%d, m[%u]", reg_num, imm - STM_EXT_OPCODE);
+ } else switch (imm) {
+ case NOT_EXT_OPCODE:
+ print_opcode("not");
+ printf("r%d", reg_num);
+ break;
+ case NEG_EXT_OPCODE:
+ print_opcode("neg");
+ printf("r%d", reg_num);
+ break;
+ case SWAP_EXT_OPCODE:
+ print_opcode("swap");
+ break;
+ case MOV_EXT_OPCODE:
+ print_opcode("mov");
+ printf("r%d, r%d", reg_num, reg_num ^ 1);
+ break;
+ default:
+ printf("unknown_ext %u", imm);
+ break;
+ }
+ break;
+ case LDDW_OPCODE:
+ case STDW_OPCODE:
+ PRINT_OPCODE();
+ printf("r%u, [%d+r%u]", reg_num, signed_imm, reg_num ^ 1);
+ break;
+
+ // Unknown opcode
+ default:
+ printf("unknown %u", opcode);
+ break;
+ }
+ printf("\n");
}
+ return 0;
}
diff --git a/apf_interpreter.c b/apf_interpreter.c
index c04a6e5..9dae13f 100644
--- a/apf_interpreter.c
+++ b/apf_interpreter.c
@@ -23,11 +23,10 @@
// User hook for interpreter debug tracing.
#ifdef APF_TRACE_HOOK
extern void APF_TRACE_HOOK(uint32_t pc, const uint32_t* regs, const uint8_t* program,
- uint32_t program_len, const uint8_t *packet, uint32_t packet_len,
- const uint32_t* memory, uint32_t ram_len);
+ const uint8_t* packet, const uint32_t* memory);
#else
-#define APF_TRACE_HOOK(pc, regs, program, program_len, packet, packet_len, memory, memory_len) \
- do { /* nop*/ \
+#define APF_TRACE_HOOK(pc, regs, program, packet, memory) \
+ do { /* nop*/ \
} while (0)
#endif
@@ -87,7 +86,7 @@ int accept_packet(uint8_t* program, uint32_t program_len, uint32_t ram_len,
uint32_t instructions_remaining = program_len;
do {
- APF_TRACE_HOOK(pc, registers, program, program_len, packet, packet_len, memory, ram_len);
+ APF_TRACE_HOOK(pc, registers, program, packet, memory);
if (pc == program_len) {
return PASS_PACKET;
} else if (pc == (program_len + 1)) {
diff --git a/apf_run.c b/apf_run.c
index 8597959..3f89b13 100644
--- a/apf_run.c
+++ b/apf_run.c
@@ -27,11 +27,8 @@
#include <stdlib.h>
#include <string.h>
-#include "disassembler.h"
#include "apf_interpreter.h"
-#define __unused __attribute__((unused))
-
enum {
OPT_PROGRAM,
OPT_PACKET,
@@ -82,24 +79,12 @@ void print_hex(const uint8_t* input, int len) {
}
}
-int tracing_enabled = 0;
-
-void maybe_print_tracing_header() {
- if (!tracing_enabled) return;
-
- printf(" R0 R1 PC Instruction\n");
- printf("-------------------------------------------------\n");
-
-}
-
// Process packet through APF filter
void packet_handler(uint8_t* program, uint32_t program_len, uint32_t ram_len,
const char* pkt, uint32_t filter_age) {
uint8_t* packet;
uint32_t packet_len = parse_hex(pkt, &packet);
- maybe_print_tracing_header();
-
int ret = accept_packet(program, program_len, ram_len, packet, packet_len,
filter_age);
printf("Packet %sed\n", ret ? "pass" : "dropp");
@@ -107,13 +92,16 @@ void packet_handler(uint8_t* program, uint32_t program_len, uint32_t ram_len,
free(packet);
}
-void apf_trace_hook(uint32_t pc, const uint32_t* regs, const uint8_t* program, uint32_t program_len,
- const uint8_t* packet __unused, uint32_t packet_len __unused,
- const uint32_t* memory __unused, uint32_t memory_len __unused) {
+int tracing_enabled = 0;
+void apf_trace_hook(uint32_t pc, const uint32_t* regs, const uint8_t* program,
+ const uint8_t* packet, const uint32_t* memory) {
if (!tracing_enabled) return;
- printf("%8" PRIx32 " %8" PRIx32 " ", regs[0], regs[1]);
- apf_disassemble(program, program_len, pc);
+ // TODO: disassemble opcodes and dump memory locations
+ (void)program;
+ (void)packet;
+ (void)memory;
+ printf("PC:%8u R0:%8" PRIx32 " R1:%8" PRIx32 "\n", pc, regs[0], regs[1]);
}
// Process pcap file through APF filter and generate output files
@@ -145,8 +133,6 @@ void file_handler(uint8_t* program, uint32_t program_len, uint32_t ram_len, cons
}
while ((apf_packet = pcap_next(pcap, &apf_header)) != NULL) {
- maybe_print_tracing_header();
-
int result = accept_packet(program, program_len, ram_len, apf_packet,
apf_header.len, filter_age);
@@ -192,7 +178,7 @@ int main(int argc, char* argv[]) {
char* packet = NULL;
uint8_t* data = NULL;
uint32_t data_len = 0;
- uint32_t filter_age = 0;
+ int32_t filter_age = 0;
int opt;
char *endptr;
diff --git a/apf_run_test.sh b/apf_run_test.sh
deleted file mode 100755
index b365e84..0000000
--- a/apf_run_test.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-
-# Find out where we are and what we're called.
-cd $(dirname $0)
-testname=$(basename $(basename $0 .sh))
-
-# All's well that ends well.
-retcode=0
-
-# Loop through testcases and run each one.
-# Each testcase is composed of a program, a packet, optionally the starting data, and the output.
-for prog in testdata/*.program; do
- testcase=$(basename $prog .program)
- prog=$(cat testdata/$testcase.program)
- pkt=$(cat testdata/$testcase.packet)
- outputpath=testdata/$testcase.output
-
- args="--trace --program $prog --packet $pkt"
- if [[ -f testdata/$testcase.data ]]; then
- args="$args --data $(cat testdata/$testcase.data)"
- fi
-
- if diff --color -u <(apf_run $args) <(cat $outputpath); then
- echo $testname: $testcase: PASS
- else
- echo $testname: $testcase: FAIL
- retcode=1
- fi
-done
-
-# Report pass/fail to the test runner.
-exit $retcode
diff --git a/apf_run_test.xml b/apf_run_test.xml
deleted file mode 100644
index 689d5a6..0000000
--- a/apf_run_test.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2019 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<configuration description="Config for running APF tools tests through atest">
- <option name="test-suite-tag" value="apf_run_test" />
- <!-- This test requires a device, so it's not annotated with a null-device -->
- <test class="com.android.tradefed.testtype.binary.ExecutableHostTest" >
- <option name="binary" value="apf_run_test.sh" />
- <!-- Script assumes a relative path with the tests/ folders -->
- <option name="relative-path-execution" value="true" />
- <option name="per-binary-timeout" value="30s" />
- </test>
-</configuration>
diff --git a/disassembler.c b/disassembler.c
deleted file mode 100644
index 3b66265..0000000
--- a/disassembler.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright 2016, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdint.h>
-#include <stdio.h>
-
-#include "apf.h"
-
-// If "c" is of a signed type, generate a compile warning that gets promoted to an error.
-// This makes bounds checking simpler because ">= 0" can be avoided. Otherwise adding
-// superfluous ">= 0" with unsigned expressions generates compile warnings.
-#define ENFORCE_UNSIGNED(c) ((c)==(uint32_t)(c))
-
-static void print_opcode(const char* opcode) {
- printf("%-6s", opcode);
-}
-
-// Mapping from opcode number to opcode name.
-static const char* opcode_names [] = {
- [LDB_OPCODE] = "ldb",
- [LDH_OPCODE] = "ldh",
- [LDW_OPCODE] = "ldw",
- [LDBX_OPCODE] = "ldbx",
- [LDHX_OPCODE] = "ldhx",
- [LDWX_OPCODE] = "ldwx",
- [ADD_OPCODE] = "add",
- [MUL_OPCODE] = "mul",
- [DIV_OPCODE] = "div",
- [AND_OPCODE] = "and",
- [OR_OPCODE] = "or",
- [SH_OPCODE] = "sh",
- [LI_OPCODE] = "li",
- [JMP_OPCODE] = "jmp",
- [JEQ_OPCODE] = "jeq",
- [JNE_OPCODE] = "jne",
- [JGT_OPCODE] = "jgt",
- [JLT_OPCODE] = "jlt",
- [JSET_OPCODE] = "jset",
- [JNEBS_OPCODE] = "jnebs",
- [LDDW_OPCODE] = "lddw",
- [STDW_OPCODE] = "stdw",
-};
-
-static void print_jump_target(uint32_t target, uint32_t program_len) {
- if (target == program_len) {
- printf("PASS");
- } else if (target == program_len + 1) {
- printf("DROP");
- } else {
- printf("%u", target);
- }
-}
-
-uint32_t apf_disassemble(const uint8_t* program, uint32_t program_len, uint32_t pc) {
- printf("%8u: ", pc);
-
- if (pc == program_len) {
- printf("PASS\n");
- return ++pc;
- }
-
- if (pc == program_len + 1) {
- printf("DROP\n");
- return ++pc;
- }
-
- const uint8_t bytecode = program[pc++];
- const uint32_t opcode = EXTRACT_OPCODE(bytecode);
-#define PRINT_OPCODE() print_opcode(opcode_names[opcode])
- const uint32_t reg_num = EXTRACT_REGISTER(bytecode);
- // All instructions have immediate fields, so load them now.
- const uint32_t len_field = EXTRACT_IMM_LENGTH(bytecode);
- uint32_t imm = 0;
- int32_t signed_imm = 0;
- if (len_field != 0) {
- const uint32_t imm_len = 1 << (len_field - 1);
- for (uint32_t i = 0; i < imm_len && pc < program_len; i++)
- imm = (imm << 8) | program[pc++];
- // Sign extend imm into signed_imm.
- signed_imm = imm << ((4 - imm_len) * 8);
- signed_imm >>= (4 - imm_len) * 8;
- }
- switch (opcode) {
- case LDB_OPCODE:
- case LDH_OPCODE:
- case LDW_OPCODE:
- PRINT_OPCODE();
- printf("r%d, [%u]", reg_num, imm);
- break;
- case LDBX_OPCODE:
- case LDHX_OPCODE:
- case LDWX_OPCODE:
- PRINT_OPCODE();
- printf("r%d, [r1+%u]", reg_num, imm);
- break;
- case JMP_OPCODE:
- PRINT_OPCODE();
- print_jump_target(pc + imm, program_len);
- break;
- case JEQ_OPCODE:
- case JNE_OPCODE:
- case JGT_OPCODE:
- case JLT_OPCODE:
- case JSET_OPCODE:
- case JNEBS_OPCODE: {
- PRINT_OPCODE();
- printf("r0, ");
- // Load second immediate field.
- uint32_t cmp_imm = 0;
- if (reg_num == 1) {
- printf("r1, ");
- } else if (len_field == 0) {
- printf("0, ");
- } else {
- uint32_t cmp_imm_len = 1 << (len_field - 1);
- uint32_t i;
- for (i = 0; i < cmp_imm_len && pc < program_len; i++)
- cmp_imm = (cmp_imm << 8) | program[pc++];
- printf("0x%x, ", cmp_imm);
- }
- if (opcode == JNEBS_OPCODE) {
- print_jump_target(pc + imm + cmp_imm, program_len);
- printf(", ");
- while (cmp_imm--)
- printf("%02x", program[pc++]);
- } else {
- print_jump_target(pc + imm, program_len);
- }
- break;
- }
- case ADD_OPCODE:
- case SH_OPCODE:
- PRINT_OPCODE();
- if (reg_num) {
- printf("r0, r1");
- } else {
- printf("r0, %d", signed_imm);
- }
- break;
- case MUL_OPCODE:
- case DIV_OPCODE:
- case AND_OPCODE:
- case OR_OPCODE:
- PRINT_OPCODE();
- if (reg_num) {
- printf("r0, r1");
- } else {
- printf("r0, %u", imm);
- }
- break;
- case LI_OPCODE:
- PRINT_OPCODE();
- printf("r%d, %d", reg_num, signed_imm);
- break;
- case EXT_OPCODE:
- if (
-// If LDM_EXT_OPCODE is 0 and imm is compared with it, a compiler error will result,
-// instead just enforce that imm is unsigned (so it's always greater or equal to 0).
-#if LDM_EXT_OPCODE == 0
- ENFORCE_UNSIGNED(imm) &&
-#else
- imm >= LDM_EXT_OPCODE &&
-#endif
- imm < (LDM_EXT_OPCODE + MEMORY_ITEMS)) {
- print_opcode("ldm");
- printf("r%d, m[%u]", reg_num, imm - LDM_EXT_OPCODE);
- } else if (imm >= STM_EXT_OPCODE && imm < (STM_EXT_OPCODE + MEMORY_ITEMS)) {
- print_opcode("stm");
- printf("r%d, m[%u]", reg_num, imm - STM_EXT_OPCODE);
- } else switch (imm) {
- case NOT_EXT_OPCODE:
- print_opcode("not");
- printf("r%d", reg_num);
- break;
- case NEG_EXT_OPCODE:
- print_opcode("neg");
- printf("r%d", reg_num);
- break;
- case SWAP_EXT_OPCODE:
- print_opcode("swap");
- break;
- case MOV_EXT_OPCODE:
- print_opcode("mov");
- printf("r%d, r%d", reg_num, reg_num ^ 1);
- break;
- default:
- printf("unknown_ext %u", imm);
- break;
- }
- break;
- case LDDW_OPCODE:
- case STDW_OPCODE:
- PRINT_OPCODE();
- printf("r%u, [r%u+%d]", reg_num, reg_num ^ 1, signed_imm);
- break;
-
- // Unknown opcode
- default:
- printf("unknown %u", opcode);
- break;
- }
- printf("\n");
- return pc;
-}
diff --git a/disassembler.h b/disassembler.h
deleted file mode 100644
index c13320e..0000000
--- a/disassembler.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2019, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#pragma once
-
-#include <stdint.h>
-
-uint32_t apf_disassemble(const uint8_t* program, uint32_t program_len, uint32_t pc);
diff --git a/testdata/large_ra_without_counters.output b/testdata/large_ra_without_counters.output
deleted file mode 100644
index 7db6c33..0000000
--- a/testdata/large_ra_without_counters.output
+++ /dev/null
@@ -1,26 +0,0 @@
- R0 R1 PC Instruction
--------------------------------------------------
- 0 0 0: ldh r0, [12]
- 86dd 0 2: jlt r0, 0x600, DROP
- 86dd 0 7: jne r0, 0x806, 64
- 86dd 0 64: jne r0, 0x800, 141
- 86dd 0 141: jeq r0, 0x86dd, 161
- 86dd 0 161: ldb r0, [20]
- 3a 0 163: jeq r0, 0x3a, 176
- 3a 0 176: ldb r0, [54]
- 86 0 178: jeq r0, 0x85, DROP
- 86 0 183: jne r0, 0x88, 210
- 86 0 210: ldm r0, m[14]
- ee 0 212: jne r0, 0x46, 297
- ee 0 297: ldm r0, m[14]
- ee 0 299: jne r0, 0x66, 433
- ee 0 433: ldm r0, m[14]
- ee 0 435: jne r0, 0x6e, 571
- ee 0 571: ldm r0, m[14]
- ee 0 573: jne r0, 0x5e, 687
- ee 0 687: ldm r0, m[14]
- ee 0 689: jne r0, 0x5e, 808
- ee 0 808: ldm r0, m[14]
- ee 0 810: jne r0, 0x4e, PASS
- ee 0 908: PASS
-Packet passed
diff --git a/testdata/large_ra_without_counters.packet b/testdata/large_ra_without_counters.packet
deleted file mode 100644
index ee06334..0000000
--- a/testdata/large_ra_without_counters.packet
+++ /dev/null
@@ -1 +0,0 @@
-00000000000000000000000086dd6001234500ee3afffe80000000000000000000001234abcdff020000000000000000000000000001860000004000070800007530000003e818036018000004b00064ff9b0000000000000000000000001905000000001c2020010db800010000000000000000000120010db8000100000000000000000002180203180000083420000000000000001801001800000960030440c0000002580000012c0000000020010db8000a0000000000000000000018024018000005dc20010db8000c000d030440c0000151800000a8c000000000fd950d1e001200000000000000000000
diff --git a/testdata/large_ra_without_counters.program b/testdata/large_ra_without_counters.program
deleted file mode 100644
index b278059..0000000
--- a/testdata/large_ra_without_counters.program
+++ /dev/null
@@ -1 +0,0 @@
-120c940386060084003408066a0ea40373000600010800060412147a180184036900021a1c7c0363000068a403560006ffffffffffff1a267c0350000074034c84004808000a17821d1112149c00161fffab0d2a10820f446a3239a203060102030405067403250a1e52f07c031d00e01a1e7e00000312ffffffff68a403050006ffffffffffff7403037402ff7c000f86dd68a402ee0006ffffffffffff7402ec0a147a0a3a0a267c02e000ff7402dc0a367c02d600858218886a26a20310ff0200000000000000000000000000017402bbaa0e825246aa0f8a4da668a23a0f00000000000000000000000086dd606a12a20f2600003a0000000000000000000000000000000000ff02000000000000000000000000000186006a3aa208020000123c9203a6740264aa0e828366aa0f8a7e1068a26b0f00000000000000000000000086dd606a12a2402600003a0000000000000000000000000000000000ff02000000000000000000000000000186006a3aa239020000123c9234106a46a22b04030440c01a4a9226101a4e9221106a52a21804000000006a56a2031020010db80000000000000000000000007401dcaa0e82856eaa0f8a803268a26d0f00000000000000000000000086dd606a12a2422600003a0000000000000000000000000000000000ff02000000000000000000000000000186006a3aa23b020000123c9236326a46a22d04190500001a4a9228326a4ea203202001486048600000000000000000888820014860486000000000000000008844740152aa0e826f5eaa0f8a6aa668a2570f00000000000000000000000086dd606a12a22c2600003a0000000000000000000000000000000000ff02000000000000000000000000000186006a3aa225020000123c9220a66a46a21704190300006a4ea20210262000fe00000000000000000000000972deaa0e82745eaa0f8a6f4268a25c0f00000000000000000000000086dd606a12a2312600003a0000000000000000000000000000000000ff02000000000000000000000000000186006a3aa22a020000123c9225426a46a21c04180360181a4a9217426a4ea202100064ff9b0000000000000000000000007265aa0e825f4eaa0f8a5aa668a2470f00000000000000000000000086dd606a12a21c2600003a0000000000000000000000000000000000ff02000000000000000000000000000186006a3aa215020000123c9210a66a46a207041f0100001a4a9202a67201
diff --git a/testdata/one_ra_with_counters.data b/testdata/one_ra_with_counters.data
deleted file mode 100644
index e0e2853..0000000
--- a/testdata/one_ra_with_counters.data
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029
diff --git a/testdata/one_ra_with_counters.output b/testdata/one_ra_with_counters.output
deleted file mode 100644
index 9da27ec..0000000
--- a/testdata/one_ra_with_counters.output
+++ /dev/null
@@ -1,57 +0,0 @@
- R0 R1 PC Instruction
--------------------------------------------------
- 0 0 0: li r1, -4
- 0 fffffffc 2: lddw r0, [r1+0]
- 29 fffffffc 3: add r0, 1
- 2a fffffffc 5: stdw r0, [r1+0]
- 2a fffffffc 6: ldh r0, [12]
- 86dd fffffffc 8: li r1, -104
- 86dd ffffff98 10: jlt r0, 0x600, 503
- 86dd ffffff98 15: li r1, -108
- 86dd ffffff94 17: jeq r0, 0x88a2, 503
- 86dd ffffff94 22: jeq r0, 0x88a4, 503
- 86dd ffffff94 27: jeq r0, 0x88b8, 503
- 86dd ffffff94 32: jeq r0, 0x88cd, 503
- 86dd ffffff94 37: jeq r0, 0x88e3, 503
- 86dd ffffff94 42: jne r0, 0x806, 115
- 86dd ffffff94 115: jne r0, 0x800, 215
- 86dd ffffff94 215: jeq r0, 0x86dd, 239
- 86dd ffffff94 239: ldb r0, [20]
- 3a ffffff94 241: jeq r0, 0x3a, 255
- 3a ffffff94 255: ldb r0, [54]
- 86 ffffff94 257: li r1, -84
- 86 ffffffac 259: jeq r0, 0x85, 503
- 86 ffffffac 262: jne r0, 0x88, 290
- 86 ffffffac 290: ldm r0, m[14]
- 96 ffffffac 292: jne r0, 0x96, 495
- 96 ffffffac 295: ldm r0, m[15]
- 0 ffffffac 297: jgt r0, 0x258, 495
- 0 ffffffac 302: li r0, 0
- 0 ffffffac 303: jnebs r0, 0xf, 495, 428e66343deb28a24b792e9086dd68
- 0 ffffffac 321: li r0, 18
- 12 ffffffac 323: jnebs r0, 0x26, 495, 00603afffe8000000000000002005efffe000265fe80000000000000408e66fffe343deb8600
- 12 ffffffac 364: li r0, 58
- 3a ffffffac 366: jnebs r0, 0x2, 495, 4000
- 3a ffffffac 371: ldh r0, [60]
- e10 ffffffac 373: jlt r0, 0x258, 495
- e10 ffffffac 378: li r0, 62
- 3e ffffffac 380: jnebs r0, 0x14, 495, 0000000000000000010100005e00026519050000
- 3e ffffffac 403: ldw r0, [82]
- e10 ffffffac 405: jlt r0, 0x258, 495
- e10 ffffffac 410: li r0, 86
- 56 ffffffac 412: jnebs r0, 0x24, 495, 2001486048600000000000000000884420014860486000000000000000008888030440c0
- 56 ffffffac 451: ldw r0, [122]
- 278d00 ffffffac 453: jlt r0, 0x258, 495
- 278d00 ffffffac 458: ldw r0, [126]
- 93a80 ffffffac 460: jlt r0, 0x258, 495
- 93a80 ffffffac 465: li r0, 130
- 82 ffffffac 468: jnebs r0, 0x14, 495, 000000002a0079e10abc0e000000000000000000
- 82 ffffffac 491: li r1, -56
- 82 ffffffc8 493: jmp 503
- 82 ffffffc8 503: lddw r0, [r1+0]
- 1b ffffffc8 504: add r0, 1
- 1c ffffffc8 506: stdw r0, [r1+0]
- 1c ffffffc8 507: jmp DROP
- 1c ffffffc8 510: DROP
-Packet dropped
-Data: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a
diff --git a/testdata/one_ra_with_counters.packet b/testdata/one_ra_with_counters.packet
deleted file mode 100644
index 861d8e9..0000000
--- a/testdata/one_ra_with_counters.packet
+++ /dev/null
@@ -1 +0,0 @@
-428e66343deb28a24b792e9086dd6800000000603afffe8000000000000002005efffe000265fe80000000000000408e66fffe343deb8600266140000e100000000000000000010100005e0002651905000000000e102001486048600000000000000000884420014860486000000000000000008888030440c000278d0000093a80000000002a0079e10abc0e000000000000000000
diff --git a/testdata/one_ra_with_counters.program b/testdata/one_ra_with_counters.program
deleted file mode 100644
index 4a1895f..0000000
--- a/testdata/one_ra_with_counters.program
+++ /dev/null
@@ -1 +0,0 @@
-6bfcb03a01b8120c6b989401e806006b947c01e188a27c01dc88a47c01d788b87c01d288cd7c01cd88e384004408066a0e6bdca401b3000600010800060412147a1e016bd88401a700021a1c6b907c01a40000686bd4a401900006ffffffffffff6a266bc0a4018900046447aee46bf874017e84005f08000a17821f1112149c00181fffab0d2a108211446a3239a20506428e66343deb6bf47401550a1e52f06bb07c015000e06bb81a1e7e00000143ffffffff6bb47e000001386447bfff6be868a401240006ffffffffffff6bbc7401256bf074011a7c001386dd686bd0a401070006ffffffffffff6bcc7401080a147a0b3a6b9c0a267afcff6be072f20a366bac7af1858219886a26a20410ff0200000000000000000000000000016ba872d5aa0e82c896aa0f8c00c1025868a2ae0f428e66343deb28a24b792e9086dd686a12a2832600603afffe8000000000000002005efffe000265fe80000000000000408e66fffe343deb86006a3aa27c024000123c94007502586a3ea25c140000000000000000010100005e000265190500001a5294005502586a56a22c242001486048600000000000000000884420014860486000000000000000008888030440c01a7a94002502581a7e94001e02586c0082a20414000000002a0079e10abc0e0000000000000000006bc872086be4b03a01b87206b03a01b87201