diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2019-09-26 22:14:16 +0900 |
---|---|---|
committer | Lorenzo Colitti <lorenzo@google.com> | 2019-10-14 21:54:55 +0900 |
commit | 983eb51423383190f80d31ed32fa38a112f5c04d (patch) | |
tree | c7bcfaf84645bffd2489e7ad482367d9a79bb595 /apf_interpreter.c | |
parent | 90cde57df677a9d81cee55954d1393c783e94382 (diff) | |
download | apf-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.c | 9 |
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)) { |