summaryrefslogtreecommitdiff
path: root/apf_interpreter.c
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2019-09-26 22:14:16 +0900
committerLorenzo Colitti <lorenzo@google.com>2019-10-14 21:54:55 +0900
commit983eb51423383190f80d31ed32fa38a112f5c04d (patch)
treec7bcfaf84645bffd2489e7ad482367d9a79bb595 /apf_interpreter.c
parent90cde57df677a9d81cee55954d1393c783e94382 (diff)
downloadapf-983eb51423383190f80d31ed32fa38a112f5c04d.tar.gz
Print disassembled code in apf_run.
apf_run is a great tool to debug APF programs, but it does not currently print disassemled code. Fix this. Before: PC: 0 R0: 0 R1: 0 PC: 2 R0: 86dd R1: 0 PC: 7 R0: 86dd R1: 0 PC: 64 R0: 86dd R1: 0 PC: 141 R0: 86dd R1: 0 After: R0 R1 PC Instruction ------------------------------------------------- 0 0 0: ldh r0, [12] 2 86dd 2: jlt r0, 0x600, drop 7 86dd 7: jne r0, 0x806, 64 40 86dd 64: jne r0, 0x800, 141 8d 86dd 141: jeq r0, 0x86dd, 161 ... Bug: 66928272 Test: manually compared output on a sample program Change-Id: I1b93f70e0381d6e43d7f7d9785ab8c935baa1e4b
Diffstat (limited to 'apf_interpreter.c')
-rw-r--r--apf_interpreter.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/apf_interpreter.c b/apf_interpreter.c
index 9dae13f..c04a6e5 100644
--- a/apf_interpreter.c
+++ b/apf_interpreter.c
@@ -23,10 +23,11 @@
// 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,
- const uint8_t* packet, const uint32_t* memory);
+ uint32_t program_len, const uint8_t *packet, uint32_t packet_len,
+ const uint32_t* memory, uint32_t ram_len);
#else
-#define APF_TRACE_HOOK(pc, regs, program, packet, memory) \
- do { /* nop*/ \
+#define APF_TRACE_HOOK(pc, regs, program, program_len, packet, packet_len, memory, memory_len) \
+ do { /* nop*/ \
} while (0)
#endif
@@ -86,7 +87,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, packet, memory);
+ APF_TRACE_HOOK(pc, registers, program, program_len, packet, packet_len, memory, ram_len);
if (pc == program_len) {
return PASS_PACKET;
} else if (pc == (program_len + 1)) {