diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2020-04-28 20:22:30 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-04-28 20:22:30 +0000 |
commit | e25ab0b954d9efe81a7b1c370ed2c423642dc655 (patch) | |
tree | 950baec1cd1f978011841c7f8e8e2f9286cd0f3a | |
parent | 3153c3b255bb1188ccd123328fcc272e0db947af (diff) | |
parent | 7c5d43915046b2d1af8930ae772c291ea28baac3 (diff) | |
download | apf-q_tzdata_aml_297100000.tar.gz |
Snap for 6439596 from 7c5d43915046b2d1af8930ae772c291ea28baac3 to qt-aml-tzdata-releaseq_tzdata_aml_297100400q_tzdata_aml_297100300q_tzdata_aml_297100000q_tzdata_aml_296200000q_tzdata_aml_295600118q_tzdata_aml_295600110q_tzdata_aml_295500002q_tzdata_aml_295500001q_tzdata_aml_294400310android-mainline-12.0.0_r54android-mainline-12.0.0_r111android-mainline-10.0.0_r13android-mainline-10.0.0_r12android-mainline-10.0.0_r11q_tzdata_aml_297100000android12-mainline-tzdata-releaseandroid10-mainline-tzdata-releaseandroid10-android13-mainline-tzdata-release
Change-Id: Ica396cc999073ef47f55828d350b4dbf1f787942
-rw-r--r-- | Android.bp | 30 | ||||
-rw-r--r-- | TEST_MAPPING | 7 | ||||
-rw-r--r-- | apf_disassembler.c | 187 | ||||
-rw-r--r-- | apf_interpreter.c | 9 | ||||
-rw-r--r-- | apf_run.c | 32 | ||||
-rwxr-xr-x | apf_run_test.sh | 32 | ||||
-rw-r--r-- | apf_run_test.xml | 25 | ||||
-rw-r--r-- | disassembler.c | 217 | ||||
-rw-r--r-- | disassembler.h | 21 | ||||
-rw-r--r-- | testdata/large_ra_without_counters.output | 26 | ||||
-rw-r--r-- | testdata/large_ra_without_counters.packet | 1 | ||||
-rw-r--r-- | testdata/large_ra_without_counters.program | 1 | ||||
-rw-r--r-- | testdata/one_ra_with_counters.data | 1 | ||||
-rw-r--r-- | testdata/one_ra_with_counters.output | 57 | ||||
-rw-r--r-- | testdata/one_ra_with_counters.packet | 1 | ||||
-rw-r--r-- | testdata/one_ra_with_counters.program | 1 |
16 files changed, 199 insertions, 449 deletions
@@ -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)) { @@ -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 |