summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeejin Ahn <aheejin@gmail.com>2021-02-19 05:26:04 +0900
committerGitHub <noreply@github.com>2021-02-19 05:26:04 +0900
commit629012c3f9a58ff2ecbac066788af57c16471969 (patch)
tree94166250455c634d2f59d30379e6892a1ac11094
parentd6ba20b0e43ea2a6cadbd82c236ad5614faafbbc (diff)
downloadbinaryen-629012c3f9a58ff2ecbac066788af57c16471969.tar.gz
binaryen-629012c3f9a58ff2ecbac066788af57c16471969.tar.bz2
binaryen-629012c3f9a58ff2ecbac066788af57c16471969.zip
[EH] Change catch_all's opcode (#3574)
We decided to change `catch_all`'s opcode from 0x05, which is the same as `else`, to 0x19, to avoid some complicated handling in the tools. See: https://github.com/WebAssembly/exception-handling/issues/147 lso this contains the original cpp file used to generate dwarf_with_exceptions.wasm; instructions to generate the wasm from that cpp file are in the comments.
-rw-r--r--src/wasm-binary.h4
-rw-r--r--src/wasm/wasm-binary.cpp7
-rw-r--r--test/passes/dwarf_with_exceptions.bin.txt250
-rw-r--r--test/passes/dwarf_with_exceptions.cpp14
-rwxr-xr-xtest/passes/dwarf_with_exceptions.wasmbin1072 -> 1083 bytes
5 files changed, 142 insertions, 133 deletions
diff --git a/src/wasm-binary.h b/src/wasm-binary.h
index 811524d2d..99305acb2 100644
--- a/src/wasm-binary.h
+++ b/src/wasm-binary.h
@@ -1026,7 +1026,7 @@ enum ASTNodes {
Try = 0x06,
Catch = 0x07,
- CatchAll = 0x05,
+ CatchAll = 0x19,
Delegate = 0x18,
Throw = 0x08,
Rethrow = 0x09,
@@ -1617,4 +1617,4 @@ private:
#undef DEBUG_TYPE
-#endif // wasm_wasm_binary_h \ No newline at end of file
+#endif // wasm_wasm_binary_h
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index b843aad03..dc0b1ab21 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -2967,16 +2967,13 @@ BinaryConsts::ASTNodes WasmBinaryBuilder::readExpression(Expression*& curr) {
}
break;
case BinaryConsts::Else:
- case BinaryConsts::Catch: {
+ case BinaryConsts::Catch:
+ case BinaryConsts::CatchAll: {
curr = nullptr;
if (DWARF && currFunction) {
assert(!controlFlowStack.empty());
auto currControlFlow = controlFlowStack.back();
BinaryLocation delimiterId;
- // Else and CatchAll have the same binary ID, so differentiate them
- // using the control flow stack.
- static_assert(BinaryConsts::CatchAll == BinaryConsts::Else,
- "Else and CatchAll should have identical codes");
if (currControlFlow->is<If>()) {
delimiterId = BinaryLocations::Else;
} else {
diff --git a/test/passes/dwarf_with_exceptions.bin.txt b/test/passes/dwarf_with_exceptions.bin.txt
index 9b853e179..9e8ed37d5 100644
--- a/test/passes/dwarf_with_exceptions.bin.txt
+++ b/test/passes/dwarf_with_exceptions.bin.txt
@@ -2,30 +2,29 @@
(type $none_=>_none (func))
(type $i32_=>_none (func (param i32)))
(type $i32_=>_i32 (func (param i32) (result i32)))
- (import "env" "foo" (func $foo))
+ (import "env" "_Z3foov" (func $foo\28\29))
(import "env" "__cxa_begin_catch" (func $__cxa_begin_catch (param i32) (result i32)))
(import "env" "__cxa_end_catch" (func $__cxa_end_catch))
(import "env" "_ZSt9terminatev" (func $std::terminate\28\29))
(memory $0 2)
- (table $0 1 1 funcref)
- (global $global$0 (mut i32) (i32.const 66560))
+ (global $__stack_pointer (mut i32) (i32.const 66560))
(event $event$0 (attr 0) (param i32))
(export "memory" (memory $0))
(func $__wasm_call_ctors
)
- (func $test_debuginfo
+ (func $dwarf_with_exceptions\28\29
(local $0 i32)
(local $1 i32)
;; code offset: 0xe
(local.set $0
;; code offset: 0x8
- (global.get $global$0)
+ (global.get $__stack_pointer)
)
;; code offset: 0x10
(try $label$9
(do
;; code offset: 0x12
- (call $foo)
+ (call $foo\28\29)
)
;; code offset: 0x18
(catch $event$0
@@ -34,7 +33,7 @@
(pop i32)
)
;; code offset: 0x22
- (global.set $global$0
+ (global.set $__stack_pointer
;; code offset: 0x20
(local.get $0)
)
@@ -50,9 +49,9 @@
(try $label$8
(do
;; code offset: 0x33
- (call $foo)
+ (call $foo\28\29)
;; code offset: 0x3b
- (global.set $global$0
+ (global.set $__stack_pointer
;; code offset: 0x39
(local.get $0)
)
@@ -72,7 +71,7 @@
(pop i32)
)
;; code offset: 0x54
- (global.set $global$0
+ (global.set $__stack_pointer
;; code offset: 0x52
(local.get $0)
)
@@ -117,18 +116,18 @@
)
;; custom section ".debug_info", size 63
;; custom section ".debug_abbrev", size 41
- ;; custom section ".debug_line", size 92
- ;; custom section ".debug_str", size 194
- ;; custom section "producers", size 137
- ;; features section: exception-handling, reference-types
+ ;; custom section ".debug_line", size 109
+ ;; custom section ".debug_str", size 178
+ ;; custom section "producers", size 134
+ ;; features section: exception-handling
)
DWARF debug info
================
Contains section .debug_info (63 bytes)
Contains section .debug_abbrev (41 bytes)
-Contains section .debug_line (92 bytes)
-Contains section .debug_str (194 bytes)
+Contains section .debug_line (109 bytes)
+Contains section .debug_str (178 bytes)
.debug_abbrev contents:
Abbrev table for offset: 0x00000000
@@ -156,11 +155,11 @@ Abbrev table for offset: 0x00000000
0x00000000: Compile Unit: length = 0x0000003b version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x0000003f)
0x0000000b: DW_TAG_compile_unit [1] *
- DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 12.0.0 (https://github.com/aheejin/llvm-project e74a5010a507b737fcbd40e87cde358f2c9fc812)")
+ DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 13.0.0 (https://github.com/llvm/llvm-project 3c4c205060c9398da705eb71b63ddd8a04999de9)")
DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus_14)
- DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000068] = "test.cpp")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000065] = "dwarf_with_exceptions.cpp")
DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000)
- DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x00000071] = "/usr/local/google/home/aheejin/llvm-git/llvm/tw")
+ DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000007f] = "/")
DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005)
DW_AT_high_pc [DW_FORM_data4] (0x00000072)
@@ -168,9 +167,9 @@ Abbrev table for offset: 0x00000000
DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005)
DW_AT_high_pc [DW_FORM_data4] (0x00000072)
DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x0 +0, DW_OP_stack_value)
- DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000a1] = "test_debuginfo")
- DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b0] = "test_terminatepad")
- DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/aheejin/llvm-git/llvm/tw/test.cpp")
+ DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000081] = "_Z21dwarf_with_exceptionsv")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000009c] = "dwarf_with_exceptions")
+ DW_AT_decl_file [DW_FORM_data1] ("/dwarf_with_exceptions.cpp")
DW_AT_decl_line [DW_FORM_data1] (2)
DW_AT_external [DW_FORM_flag_present] (true)
@@ -179,9 +178,9 @@ Abbrev table for offset: 0x00000000
.debug_line contents:
debug_line[0x00000000]
Line table prologue:
- total_length: 0x00000058
+ total_length: 0x00000069
version: 4
- prologue_length: 0x00000020
+ prologue_length: 0x00000031
min_inst_length: 1
max_ops_per_inst: 1
default_is_stmt: 1
@@ -201,82 +200,82 @@ standard_opcode_lengths[DW_LNS_set_prologue_end] = 0
standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0
standard_opcode_lengths[DW_LNS_set_isa] = 1
file_names[ 1]:
- name: "test.cpp"
+ name: "dwarf_with_exceptions.cpp"
dir_index: 0
mod_time: 0x00000000
length: 0x00000000
-0x0000002a: 00 DW_LNE_set_address (0x0000000000000005)
-0x00000031: 13 address += 0, line += 1
+0x0000003b: 00 DW_LNE_set_address (0x0000000000000005)
+0x00000042: 13 address += 0, line += 1
0x0000000000000005 2 0 1 0 0 is_stmt
-0x00000032: 05 DW_LNS_set_column (5)
-0x00000034: 0a DW_LNS_set_prologue_end
-0x00000035: ae address += 11, line += 2
+0x00000043: 05 DW_LNS_set_column (5)
+0x00000045: 0a DW_LNS_set_prologue_end
+0x00000046: ae address += 11, line += 2
0x0000000000000010 4 5 1 0 0 is_stmt prologue_end
-0x00000036: 05 DW_LNS_set_column (3)
-0x00000038: 83 address += 8, line += 1
+0x00000047: 05 DW_LNS_set_column (3)
+0x00000049: 83 address += 8, line += 1
0x0000000000000018 5 3 1 0 0 is_stmt
-0x00000039: 05 DW_LNS_set_column (5)
-0x0000003b: 08 DW_LNS_const_add_pc (0x0000000000000011)
-0x0000003c: 83 address += 8, line += 1
+0x0000004a: 05 DW_LNS_set_column (5)
+0x0000004c: 08 DW_LNS_const_add_pc (0x0000000000000011)
+0x0000004d: 83 address += 8, line += 1
0x0000000000000031 6 5 1 0 0 is_stmt
-0x0000003d: 06 DW_LNS_negate_stmt
-0x0000003e: 03 DW_LNS_advance_line (0)
-0x00000040: 82 address += 8, line += 0
+0x0000004e: 06 DW_LNS_negate_stmt
+0x0000004f: 03 DW_LNS_advance_line (0)
+0x00000051: 82 address += 8, line += 0
0x0000000000000039 0 5 1 0 0
-0x00000041: 05 DW_LNS_set_column (3)
-0x00000043: 06 DW_LNS_negate_stmt
-0x00000044: 89 address += 8, line += 7
+0x00000052: 05 DW_LNS_set_column (3)
+0x00000054: 06 DW_LNS_negate_stmt
+0x00000055: 89 address += 8, line += 7
0x0000000000000041 7 3 1 0 0 is_stmt
-0x00000045: 06 DW_LNS_negate_stmt
-0x00000046: 03 DW_LNS_advance_line (0)
-0x00000048: 02 DW_LNS_advance_pc (42)
-0x0000004a: 01 DW_LNS_copy
+0x00000056: 06 DW_LNS_negate_stmt
+0x00000057: 03 DW_LNS_advance_line (0)
+0x00000059: 02 DW_LNS_advance_pc (42)
+0x0000005b: 01 DW_LNS_copy
0x000000000000006b 0 3 1 0 0
-0x0000004b: 27 address += 1, line += 7
+0x0000005c: 27 address += 1, line += 7
0x000000000000006c 7 3 1 0 0
-0x0000004c: 03 DW_LNS_advance_line (0)
-0x0000004e: 2e address += 2, line += 0
+0x0000005d: 03 DW_LNS_advance_line (0)
+0x0000005f: 2e address += 2, line += 0
0x000000000000006e 0 3 1 0 0
-0x0000004f: 27 address += 1, line += 7
+0x00000060: 27 address += 1, line += 7
0x000000000000006f 7 3 1 0 0
-0x00000050: 03 DW_LNS_advance_line (0)
-0x00000052: 66 address += 6, line += 0
+0x00000061: 03 DW_LNS_advance_line (0)
+0x00000063: 66 address += 6, line += 0
0x0000000000000075 0 3 1 0 0
-0x00000053: 05 DW_LNS_set_column (1)
-0x00000055: 06 DW_LNS_negate_stmt
-0x00000056: 28 address += 1, line += 8
+0x00000064: 05 DW_LNS_set_column (1)
+0x00000066: 06 DW_LNS_negate_stmt
+0x00000067: 28 address += 1, line += 8
0x0000000000000076 8 1 1 0 0 is_stmt
-0x00000057: 02 DW_LNS_advance_pc (1)
-0x00000059: 00 DW_LNE_end_sequence
+0x00000068: 02 DW_LNS_advance_pc (1)
+0x0000006a: 00 DW_LNE_end_sequence
0x0000000000000077 8 1 1 0 0 is_stmt end_sequence
.debug_str contents:
-0x00000000: "clang version 12.0.0 (https://github.com/aheejin/llvm-project e74a5010a507b737fcbd40e87cde358f2c9fc812)"
-0x00000068: "test.cpp"
-0x00000071: "/usr/local/google/home/aheejin/llvm-git/llvm/tw"
-0x000000a1: "test_debuginfo"
-0x000000b0: "test_terminatepad"
+0x00000000: "clang version 13.0.0 (https://github.com/llvm/llvm-project 3c4c205060c9398da705eb71b63ddd8a04999de9)"
+0x00000065: "dwarf_with_exceptions.cpp"
+0x0000007f: "/"
+0x00000081: "_Z21dwarf_with_exceptionsv"
+0x0000009c: "dwarf_with_exceptions"
DWARF debug info
================
Contains section .debug_info (63 bytes)
Contains section .debug_abbrev (41 bytes)
-Contains section .debug_line (145 bytes)
-Contains section .debug_str (194 bytes)
+Contains section .debug_line (162 bytes)
+Contains section .debug_str (178 bytes)
.debug_abbrev contents:
Abbrev table for offset: 0x00000000
@@ -304,11 +303,11 @@ Abbrev table for offset: 0x00000000
0x00000000: Compile Unit: length = 0x0000003b version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x0000003f)
0x0000000b: DW_TAG_compile_unit [1] *
- DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 12.0.0 (https://github.com/aheejin/llvm-project e74a5010a507b737fcbd40e87cde358f2c9fc812)")
+ DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 13.0.0 (https://github.com/llvm/llvm-project 3c4c205060c9398da705eb71b63ddd8a04999de9)")
DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus_14)
- DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000068] = "test.cpp")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000065] = "dwarf_with_exceptions.cpp")
DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000)
- DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x00000071] = "/usr/local/google/home/aheejin/llvm-git/llvm/tw")
+ DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000007f] = "/")
DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005)
DW_AT_high_pc [DW_FORM_data4] (0x00000040)
@@ -316,9 +315,9 @@ Abbrev table for offset: 0x00000000
DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005)
DW_AT_high_pc [DW_FORM_data4] (0x00000040)
DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x0 +0, DW_OP_stack_value)
- DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000a1] = "test_debuginfo")
- DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000b0] = "test_terminatepad")
- DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/aheejin/llvm-git/llvm/tw/test.cpp")
+ DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000081] = "_Z21dwarf_with_exceptionsv")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000009c] = "dwarf_with_exceptions")
+ DW_AT_decl_file [DW_FORM_data1] ("/dwarf_with_exceptions.cpp")
DW_AT_decl_line [DW_FORM_data1] (2)
DW_AT_external [DW_FORM_flag_present] (true)
@@ -327,9 +326,9 @@ Abbrev table for offset: 0x00000000
.debug_line contents:
debug_line[0x00000000]
Line table prologue:
- total_length: 0x0000008d
+ total_length: 0x0000009e
version: 4
- prologue_length: 0x00000020
+ prologue_length: 0x00000031
min_inst_length: 1
max_ops_per_inst: 1
default_is_stmt: 1
@@ -349,105 +348,104 @@ standard_opcode_lengths[DW_LNS_set_prologue_end] = 0
standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0
standard_opcode_lengths[DW_LNS_set_isa] = 1
file_names[ 1]:
- name: "test.cpp"
+ name: "dwarf_with_exceptions.cpp"
dir_index: 0
mod_time: 0x00000000
length: 0x00000000
-0x0000002a: 00 DW_LNE_set_address (0x0000000000000005)
-0x00000031: 03 DW_LNS_advance_line (2)
-0x00000033: 01 DW_LNS_copy
+0x0000003b: 00 DW_LNE_set_address (0x0000000000000005)
+0x00000042: 03 DW_LNS_advance_line (2)
+0x00000044: 01 DW_LNS_copy
0x0000000000000005 2 0 1 0 0 is_stmt
-0x00000034: 00 DW_LNE_set_address (0x000000000000000e)
-0x0000003b: 03 DW_LNS_advance_line (4)
-0x0000003d: 05 DW_LNS_set_column (5)
-0x0000003f: 0a DW_LNS_set_prologue_end
-0x00000040: 01 DW_LNS_copy
+0x00000045: 00 DW_LNE_set_address (0x000000000000000e)
+0x0000004c: 03 DW_LNS_advance_line (4)
+0x0000004e: 05 DW_LNS_set_column (5)
+0x00000050: 0a DW_LNS_set_prologue_end
+0x00000051: 01 DW_LNS_copy
0x000000000000000e 4 5 1 0 0 is_stmt prologue_end
-0x00000041: 00 DW_LNE_set_address (0x0000000000000012)
-0x00000048: 03 DW_LNS_advance_line (5)
-0x0000004a: 05 DW_LNS_set_column (3)
-0x0000004c: 01 DW_LNS_copy
+0x00000052: 00 DW_LNE_set_address (0x0000000000000012)
+0x00000059: 03 DW_LNS_advance_line (5)
+0x0000005b: 05 DW_LNS_set_column (3)
+0x0000005d: 01 DW_LNS_copy
0x0000000000000012 5 3 1 0 0 is_stmt
-0x0000004d: 00 DW_LNE_set_address (0x000000000000001f)
-0x00000054: 03 DW_LNS_advance_line (6)
-0x00000056: 05 DW_LNS_set_column (5)
-0x00000058: 01 DW_LNS_copy
+0x0000005e: 00 DW_LNE_set_address (0x000000000000001f)
+0x00000065: 03 DW_LNS_advance_line (6)
+0x00000067: 05 DW_LNS_set_column (5)
+0x00000069: 01 DW_LNS_copy
0x000000000000001f 6 5 1 0 0 is_stmt
-0x00000059: 00 DW_LNE_set_address (0x000000000000003e)
-0x00000060: 03 DW_LNS_advance_line (7)
-0x00000062: 05 DW_LNS_set_column (3)
-0x00000064: 06 DW_LNS_negate_stmt
-0x00000065: 01 DW_LNS_copy
+0x0000006a: 00 DW_LNE_set_address (0x000000000000003e)
+0x00000071: 03 DW_LNS_advance_line (7)
+0x00000073: 05 DW_LNS_set_column (3)
+0x00000075: 06 DW_LNS_negate_stmt
+0x00000076: 01 DW_LNS_copy
0x000000000000003e 7 3 1 0 0
-0x00000066: 00 DW_LNE_set_address (0x0000000000000041)
-0x0000006d: 01 DW_LNS_copy
+0x00000077: 00 DW_LNE_set_address (0x0000000000000041)
+0x0000007e: 01 DW_LNS_copy
0x0000000000000041 7 3 1 0 0
-0x0000006e: 00 DW_LNE_set_address (0x0000000000000044)
-0x00000075: 03 DW_LNS_advance_line (8)
-0x00000077: 05 DW_LNS_set_column (1)
-0x00000079: 06 DW_LNS_negate_stmt
-0x0000007a: 01 DW_LNS_copy
+0x0000007f: 00 DW_LNE_set_address (0x0000000000000044)
+0x00000086: 03 DW_LNS_advance_line (8)
+0x00000088: 05 DW_LNS_set_column (1)
+0x0000008a: 06 DW_LNS_negate_stmt
+0x0000008b: 01 DW_LNS_copy
0x0000000000000044 8 1 1 0 0 is_stmt
-0x0000007b: 00 DW_LNE_set_address (0x0000000000000045)
-0x00000082: 01 DW_LNS_copy
+0x0000008c: 00 DW_LNE_set_address (0x0000000000000045)
+0x00000093: 01 DW_LNS_copy
0x0000000000000045 8 1 1 0 0 is_stmt
-0x00000083: 00 DW_LNE_set_address (0x00000000ffffff61)
-0x0000008a: 03 DW_LNS_advance_line (7)
-0x0000008c: 05 DW_LNS_set_column (3)
-0x0000008e: 00 DW_LNE_end_sequence
- 0x00000000ffffff61 7 3 1 0 0 is_stmt end_sequence
+0x00000094: 00 DW_LNE_set_address (0x00000000ffffff64)
+0x0000009b: 03 DW_LNS_advance_line (7)
+0x0000009d: 05 DW_LNS_set_column (3)
+0x0000009f: 00 DW_LNE_end_sequence
+ 0x00000000ffffff64 7 3 1 0 0 is_stmt end_sequence
.debug_str contents:
-0x00000000: "clang version 12.0.0 (https://github.com/aheejin/llvm-project e74a5010a507b737fcbd40e87cde358f2c9fc812)"
-0x00000068: "test.cpp"
-0x00000071: "/usr/local/google/home/aheejin/llvm-git/llvm/tw"
-0x000000a1: "test_debuginfo"
-0x000000b0: "test_terminatepad"
+0x00000000: "clang version 13.0.0 (https://github.com/llvm/llvm-project 3c4c205060c9398da705eb71b63ddd8a04999de9)"
+0x00000065: "dwarf_with_exceptions.cpp"
+0x0000007f: "/"
+0x00000081: "_Z21dwarf_with_exceptionsv"
+0x0000009c: "dwarf_with_exceptions"
(module
(type $none_=>_none (func))
(type $i32_=>_none (func (param i32)))
(type $i32_=>_i32 (func (param i32) (result i32)))
- (import "env" "foo" (func $foo))
+ (import "env" "_Z3foov" (func $foo\28\29))
(import "env" "__cxa_begin_catch" (func $__cxa_begin_catch (param i32) (result i32)))
(import "env" "__cxa_end_catch" (func $__cxa_end_catch))
(import "env" "_ZSt9terminatev" (func $std::terminate\28\29))
(memory $0 2)
- (table $0 1 1 funcref)
- (global $global$0 (mut i32) (i32.const 66560))
+ (global $__stack_pointer (mut i32) (i32.const 66560))
(event $event$0 (attr 0) (param i32))
(export "memory" (memory $0))
(func $__wasm_call_ctors
)
- (func $test_debuginfo
+ (func $dwarf_with_exceptions\28\29
(local $0 i32)
(local $1 i32)
;; code offset: 0xc
(local.set $0
;; code offset: 0xa
- (global.get $global$0)
+ (global.get $__stack_pointer)
)
;; code offset: 0xe
(try $label$9
(do
;; code offset: 0x10
- (call $foo)
+ (call $foo\28\29)
)
;; code offset: 0x12
(catch $event$0
@@ -456,7 +454,7 @@ file_names[ 1]:
(pop i32)
)
;; code offset: 0x18
- (global.set $global$0
+ (global.set $__stack_pointer
;; code offset: 0x16
(local.get $0)
)
@@ -472,9 +470,9 @@ file_names[ 1]:
(try $label$8
(do
;; code offset: 0x21
- (call $foo)
+ (call $foo\28\29)
;; code offset: 0x25
- (global.set $global$0
+ (global.set $__stack_pointer
;; code offset: 0x23
(local.get $0)
)
@@ -494,7 +492,7 @@ file_names[ 1]:
(pop i32)
)
;; code offset: 0x32
- (global.set $global$0
+ (global.set $__stack_pointer
;; code offset: 0x30
(local.get $0)
)
@@ -539,8 +537,8 @@ file_names[ 1]:
)
;; custom section ".debug_info", size 63
;; custom section ".debug_abbrev", size 41
- ;; custom section ".debug_line", size 145
- ;; custom section ".debug_str", size 194
- ;; custom section "producers", size 137
- ;; features section: exception-handling, reference-types
+ ;; custom section ".debug_line", size 162
+ ;; custom section ".debug_str", size 178
+ ;; custom section "producers", size 134
+ ;; features section: exception-handling
)
diff --git a/test/passes/dwarf_with_exceptions.cpp b/test/passes/dwarf_with_exceptions.cpp
new file mode 100644
index 000000000..283b30064
--- /dev/null
+++ b/test/passes/dwarf_with_exceptions.cpp
@@ -0,0 +1,14 @@
+void foo();
+void dwarf_with_exceptions() {
+ try {
+ foo();
+ } catch (...) {
+ foo();
+ }
+}
+// How to generate dwarf_with_exceptions.wasm:
+// $ clang++ -std=c++14 --target=wasm32-unknown-unknown -g -fwasm-exceptions -Xclang -disable-O0-optnone -c -S -emit-llvm dwarf_with_exceptions.cpp -o temp.ll
+// $ opt -S -mem2reg -simplifycfg temp.ll -o dwarf_with_exceptions.ll
+// Remove some personal info from dwarf_with_exceptions.ll
+// $ llc -exception-model=wasm -mattr=+exception-handling -filetype=obj dwarf_with_exceptions.ll -o dwarf_with_exceptions.o
+// $ wasm-ld --no-entry --no-gc-sections --allow-undefined dwarf_with_exceptions.o -o dwarf_with_exceptions.wasm
diff --git a/test/passes/dwarf_with_exceptions.wasm b/test/passes/dwarf_with_exceptions.wasm
index c5ab0000c..d972a5899 100755
--- a/test/passes/dwarf_with_exceptions.wasm
+++ b/test/passes/dwarf_with_exceptions.wasm
Binary files differ