summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/binary-reader-objdump.cc39
-rw-r--r--test/dump/debug-names.txt4
-rw-r--r--test/dump/getlocal-param.txt4
-rw-r--r--test/dump/getlocal.txt7
-rw-r--r--test/dump/locals.txt4
-rw-r--r--test/dump/setlocal-param.txt4
-rw-r--r--test/dump/setlocal.txt7
-rw-r--r--test/dump/tee_local.txt1
8 files changed, 70 insertions, 0 deletions
diff --git a/src/binary-reader-objdump.cc b/src/binary-reader-objdump.cc
index f4c6b7ca..a320b93d 100644
--- a/src/binary-reader-objdump.cc
+++ b/src/binary-reader-objdump.cc
@@ -288,6 +288,9 @@ class BinaryReaderObjdumpDisassemble : public BinaryReaderObjdumpBase {
Result BeginFunctionBody(Index index) override;
+ Result OnLocalDeclCount(Index count) override;
+ Result OnLocalDecl(Index decl_index, Index count, Type type) override;
+
Result OnOpcode(Opcode Opcode) override;
Result OnOpcodeBare() override;
Result OnOpcodeIndex(Index value) override;
@@ -315,6 +318,7 @@ class BinaryReaderObjdumpDisassemble : public BinaryReaderObjdumpBase {
Offset last_opcode_end = 0;
int indent_level = 0;
Index next_reloc = 0;
+ Index local_index_ = 0;
};
Result BinaryReaderObjdumpDisassemble::OnOpcode(Opcode opcode) {
@@ -343,6 +347,41 @@ Result BinaryReaderObjdumpDisassemble::OnOpcode(Opcode opcode) {
#define IMMEDIATE_OCTET_COUNT 9
+Result BinaryReaderObjdumpDisassemble::OnLocalDeclCount(Index count) {
+ local_index_ = 0;
+ current_opcode_offset = state->offset;
+ return Result::Ok;
+}
+
+Result BinaryReaderObjdumpDisassemble::OnLocalDecl(Index decl_index,
+ Index count,
+ Type type) {
+ Offset offset = current_opcode_offset;
+ size_t data_size = state->offset - offset;
+
+ printf(" %06" PRIzx ":", offset);
+ for (size_t i = 0; i < data_size && i < IMMEDIATE_OCTET_COUNT;
+ i++, offset++) {
+ printf(" %02x", data_[offset]);
+ }
+ for (size_t i = data_size; i < IMMEDIATE_OCTET_COUNT; i++) {
+ printf(" ");
+ }
+ printf(" | local[%" PRIindex, local_index_);
+
+ if (count != 1) {
+ printf("..%" PRIindex "", local_index_ + count - 1);
+ }
+ local_index_ += count;
+
+ printf("] type=%s\n", GetTypeName(type));
+
+ last_opcode_end = current_opcode_offset + data_size;
+ current_opcode_offset = last_opcode_end;
+
+ return Result::Ok;
+}
+
void BinaryReaderObjdumpDisassemble::LogOpcode(const uint8_t* data,
size_t data_size,
const char* fmt,
diff --git a/test/dump/debug-names.txt b/test/dump/debug-names.txt
index 622afe1a..f944361b 100644
--- a/test/dump/debug-names.txt
+++ b/test/dump/debug-names.txt
@@ -146,9 +146,13 @@ Custom:
Code Disassembly:
00001c <F1>:
+ 00001e: 01 7d | local[0] type=f32
+ 000020: 02 7f | local[1..2] type=i32
000022: 0b | end
000023 func[1]:
000025: 0b | end
000026 <F2>:
+ 000028: 01 7c | local[0] type=f64
+ 00002a: 02 7e | local[1..2] type=i64
00002c: 0b | end
;;; STDOUT ;;)
diff --git a/test/dump/getlocal-param.txt b/test/dump/getlocal-param.txt
index ed724f18..0fe93c50 100644
--- a/test/dump/getlocal-param.txt
+++ b/test/dump/getlocal-param.txt
@@ -77,6 +77,10 @@ getlocal-param.wasm: file format wasm 0x1
Code Disassembly:
000017 func[0]:
+ 000019: 01 7e | local[0] type=i64
+ 00001b: 01 7d | local[1] type=f32
+ 00001d: 01 7f | local[2] type=i32
+ 00001f: 01 7d | local[3] type=f32
000021: 20 00 | get_local 0
000023: 1a | drop
000024: 20 01 | get_local 1
diff --git a/test/dump/getlocal.txt b/test/dump/getlocal.txt
index cf7b6808..29e3e83c 100644
--- a/test/dump/getlocal.txt
+++ b/test/dump/getlocal.txt
@@ -91,6 +91,13 @@ getlocal.wasm: file format wasm 0x1
Code Disassembly:
000015 func[0]:
+ 000017: 01 7c | local[0] type=f64
+ 000019: 01 7d | local[1] type=f32
+ 00001b: 01 7e | local[2] type=i64
+ 00001d: 02 7f | local[3..4] type=i32
+ 00001f: 01 7d | local[5] type=f32
+ 000021: 01 7c | local[6] type=f64
+ 000023: 01 7e | local[7] type=i64
000025: 20 00 | get_local 0
000027: 1a | drop
000028: 20 01 | get_local 1
diff --git a/test/dump/locals.txt b/test/dump/locals.txt
index dd92c947..195944f6 100644
--- a/test/dump/locals.txt
+++ b/test/dump/locals.txt
@@ -44,5 +44,9 @@ locals.wasm: file format wasm 0x1
Code Disassembly:
000015 func[0]:
+ 000017: 01 7f | local[0] type=i32
+ 000019: 02 7e | local[1..2] type=i64
+ 00001b: 03 7d | local[3..5] type=f32
+ 00001d: 04 7c | local[6..9] type=f64
00001f: 0b | end
;;; STDOUT ;;)
diff --git a/test/dump/setlocal-param.txt b/test/dump/setlocal-param.txt
index cfafdb01..68f76c71 100644
--- a/test/dump/setlocal-param.txt
+++ b/test/dump/setlocal-param.txt
@@ -87,6 +87,10 @@ setlocal-param.wasm: file format wasm 0x1
Code Disassembly:
000017 func[0]:
+ 000019: 01 7e | local[0] type=i64
+ 00001b: 01 7d | local[1] type=f32
+ 00001d: 01 7f | local[2] type=i32
+ 00001f: 01 7d | local[3] type=f32
000021: 41 00 | i32.const 0
000023: 21 00 | set_local 0
000025: 43 00 00 00 00 | f32.const 0x0p+0
diff --git a/test/dump/setlocal.txt b/test/dump/setlocal.txt
index 6a379fbc..20ea9937 100644
--- a/test/dump/setlocal.txt
+++ b/test/dump/setlocal.txt
@@ -103,6 +103,13 @@ setlocal.wasm: file format wasm 0x1
Code Disassembly:
000015 func[0]:
+ 000017: 01 7c | local[0] type=f64
+ 000019: 01 7d | local[1] type=f32
+ 00001b: 01 7e | local[2] type=i64
+ 00001d: 02 7f | local[3..4] type=i32
+ 00001f: 01 7d | local[5] type=f32
+ 000021: 01 7c | local[6] type=f64
+ 000023: 01 7e | local[7] type=i64
000025: 44 00 00 00 00 00 00 00 00 | f64.const 0x0p+0
00002e: 21 00 | set_local 0
000030: 43 00 00 00 00 | f32.const 0x0p+0
diff --git a/test/dump/tee_local.txt b/test/dump/tee_local.txt
index 6911f78b..0085cfda 100644
--- a/test/dump/tee_local.txt
+++ b/test/dump/tee_local.txt
@@ -47,6 +47,7 @@ tee_local.wasm: file format wasm 0x1
Code Disassembly:
000015 func[0]:
+ 000017: 01 7f | local[0] type=i32
000019: 41 00 | i32.const 0
00001b: 22 00 | tee_local 0
00001d: 1a | drop