summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/wasm/wasm-debug.cpp66
-rw-r--r--test/passes/dwarfdump.bin.txt11
-rw-r--r--test/passes/dwarfdump_roundtrip_dwarfdump.bin.txt22
-rw-r--r--test/passes/fannkuch3.bin.txt958
-rw-r--r--test/passes/fannkuch3_manyopts.bin.txt958
-rw-r--r--test/passes/fib2.bin.txt112
-rw-r--r--test/passes/multi_line_table.bin.txt431
-rw-r--r--test/passes/multi_line_table.passes1
-rw-r--r--test/passes/multi_line_table.wasmbin0 -> 1348 bytes
-rw-r--r--third_party/llvm-project/DWARFCompileUnit.cpp8
-rw-r--r--third_party/llvm-project/DWARFContext.cpp4
-rw-r--r--third_party/llvm-project/DWARFDebugInfoEntry.cpp6
-rw-r--r--third_party/llvm-project/DWARFEmitter.cpp18
-rw-r--r--third_party/llvm-project/DWARFVisitor.cpp3
-rw-r--r--third_party/llvm-project/dwarf2yaml.cpp4
15 files changed, 2571 insertions, 31 deletions
diff --git a/src/wasm/wasm-debug.cpp b/src/wasm/wasm-debug.cpp
index 04dd4e9d3..e324d2404 100644
--- a/src/wasm/wasm-debug.cpp
+++ b/src/wasm/wasm-debug.cpp
@@ -61,7 +61,8 @@ struct BinaryenDWARFInfo {
}
// Parse debug sections.
uint8_t addrSize = 4;
- context = llvm::DWARFContext::create(sections, addrSize);
+ bool isLittleEndian = true;
+ context = llvm::DWARFContext::create(sections, addrSize, isLittleEndian);
}
};
@@ -76,6 +77,8 @@ void dumpDWARF(const Module& wasm) {
}
}
llvm::DIDumpOptions options;
+ options.DumpType = llvm::DIDT_All;
+ options.ShowChildren = true;
options.Verbose = true;
info.context->dump(llvm::outs(), options);
}
@@ -111,8 +114,8 @@ struct LineState {
uint32_t line = 1;
uint32_t col = 0;
uint32_t file = 1;
- // TODO uint32_t isa = 0;
- // TODO Discriminator = 0;
+ uint32_t isa = 0;
+ uint32_t discriminator = 0;
bool isStmt;
bool basicBlock = false;
// XXX these two should be just prologue, epilogue?
@@ -139,9 +142,17 @@ struct LineState {
case llvm::dwarf::DW_LNE_end_sequence: {
return true;
}
+ case llvm::dwarf::DW_LNE_set_discriminator: {
+ discriminator = opcode.Data;
+ break;
+ }
+ case llvm::dwarf::DW_LNE_define_file: {
+ Fatal() << "TODO: DW_LNE_define_file";
+ }
default: {
- Fatal() << "unknown debug line sub-opcode: " << std::hex
- << opcode.SubOpcode;
+ // An unknown opcode, ignore.
+ std::cerr << "warning: unknown subopcopde " << opcode.SubOpcode
+ << '\n';
}
}
break;
@@ -174,6 +185,10 @@ struct LineState {
isStmt = !isStmt;
break;
}
+ case llvm::dwarf::DW_LNS_set_basic_block: {
+ basicBlock = true;
+ break;
+ }
case llvm::dwarf::DW_LNS_const_add_pc: {
uint8_t AdjustOpcode = 255 - table.OpcodeBase;
uint64_t AddrOffset =
@@ -181,6 +196,14 @@ struct LineState {
addr += AddrOffset;
break;
}
+ case llvm::dwarf::DW_LNS_fixed_advance_pc: {
+ addr += opcode.Data;
+ break;
+ }
+ case llvm::dwarf::DW_LNS_set_isa: {
+ isa = opcode.Data;
+ break;
+ }
default: {
if (opcode.Opcode >= table.OpcodeBase) {
// Special opcode: adjust line and addr, using some math.
@@ -239,11 +262,23 @@ struct LineState {
item.Data = file;
newOpcodes.push_back(item);
}
+ if (isa != old.isa) {
+ auto item = makeItem(llvm::dwarf::DW_LNS_set_isa);
+ item.Data = isa;
+ newOpcodes.push_back(item);
+ }
+ if (discriminator != old.discriminator) {
+ // len = 1 (subopcode) + 4 (wasm32 address)
+ auto item = makeItem(llvm::dwarf::DW_LNE_set_discriminator, 5);
+ item.Data = discriminator;
+ newOpcodes.push_back(item);
+ }
if (isStmt != old.isStmt) {
newOpcodes.push_back(makeItem(llvm::dwarf::DW_LNS_negate_stmt));
}
if (basicBlock != old.basicBlock) {
- Fatal() << "bb";
+ assert(basicBlock);
+ newOpcodes.push_back(makeItem(llvm::dwarf::DW_LNS_set_basic_block));
}
if (prologueEnd != old.prologueEnd) {
assert(prologueEnd);
@@ -382,21 +417,6 @@ static void updateDebugLines(const Module& wasm,
}
}
-static void fixEmittedSection(const std::string& name,
- std::vector<char>& data) {
- if (name == ".debug_line") {
- // The YAML code does not update the line section size. However, it is
- // trivial to do so after the fact, as the wasm section's additional size is
- // easy to compute: it is the emitted size - the 4 bytes of the size itself.
- uint32_t size = data.size() - 4;
- BufferWithRandomAccess buf;
- buf << size;
- for (int i = 0; i < 4; i++) {
- data[i] = buf[i];
- }
- }
-}
-
void writeDWARFSections(Module& wasm, const BinaryLocationsMap& newLocations) {
BinaryenDWARFInfo info(wasm);
@@ -411,7 +431,8 @@ void writeDWARFSections(Module& wasm, const BinaryLocationsMap& newLocations) {
// TODO: Actually update, and remove sections we don't know how to update yet?
// Convert to binary sections.
- auto newSections = EmitDebugSections(data, true);
+ auto newSections =
+ EmitDebugSections(data, false /* EmitFixups for debug_info */);
// Update the custom sections in the wasm.
// TODO: efficiency
@@ -422,7 +443,6 @@ void writeDWARFSections(Module& wasm, const BinaryLocationsMap& newLocations) {
auto llvmData = newSections[llvmName]->getBuffer();
section.data.resize(llvmData.size());
std::copy(llvmData.begin(), llvmData.end(), section.data.data());
- fixEmittedSection(section.name, section.data);
}
}
}
diff --git a/test/passes/dwarfdump.bin.txt b/test/passes/dwarfdump.bin.txt
index e198e9002..f21ff3531 100644
--- a/test/passes/dwarfdump.bin.txt
+++ b/test/passes/dwarfdump.bin.txt
@@ -39,6 +39,17 @@ Abbrev table for offset: 0x00000000
DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005)
DW_AT_high_pc [DW_FORM_data4] (0x00000002)
+0x00000026: DW_TAG_subprogram [2]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005)
+ DW_AT_high_pc [DW_FORM_data4] (0x00000002)
+ DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "_Z3foov")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d0] = "foo")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/a.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (3)
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x00000039: NULL
+
.debug_line contents:
debug_line[0x00000000]
Line table prologue:
diff --git a/test/passes/dwarfdump_roundtrip_dwarfdump.bin.txt b/test/passes/dwarfdump_roundtrip_dwarfdump.bin.txt
index 694aae6ae..750533003 100644
--- a/test/passes/dwarfdump_roundtrip_dwarfdump.bin.txt
+++ b/test/passes/dwarfdump_roundtrip_dwarfdump.bin.txt
@@ -39,6 +39,17 @@ Abbrev table for offset: 0x00000000
DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005)
DW_AT_high_pc [DW_FORM_data4] (0x00000002)
+0x00000026: DW_TAG_subprogram [2]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005)
+ DW_AT_high_pc [DW_FORM_data4] (0x00000002)
+ DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "_Z3foov")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d0] = "foo")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/a.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (3)
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x00000039: NULL
+
.debug_line contents:
debug_line[0x00000000]
Line table prologue:
@@ -129,6 +140,17 @@ Abbrev table for offset: 0x00000000
DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005)
DW_AT_high_pc [DW_FORM_data4] (0x00000002)
+0x00000026: DW_TAG_subprogram [2]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000005)
+ DW_AT_high_pc [DW_FORM_data4] (0x00000002)
+ DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "_Z3foov")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d0] = "foo")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/a.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (3)
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x00000039: NULL
+
.debug_line contents:
debug_line[0x00000000]
Line table prologue:
diff --git a/test/passes/fannkuch3.bin.txt b/test/passes/fannkuch3.bin.txt
index 273237533..85a4b3900 100644
--- a/test/passes/fannkuch3.bin.txt
+++ b/test/passes/fannkuch3.bin.txt
@@ -183,6 +183,485 @@ Abbrev table for offset: 0x00000000
[0x00000003, 0x0000039a)
[0x0000039c, 0x000006e2))
+0x00000026: DW_TAG_subprogram [2] *
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000fa] = "free")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libc/stdlib.h")
+ DW_AT_decl_line [DW_FORM_data1] (41)
+ DW_AT_declaration [DW_FORM_flag_present] (true)
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x0000002d: DW_TAG_formal_parameter [3]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0033 => {0x00000033} "*")
+
+0x00000032: NULL
+
+0x00000033: DW_TAG_pointer_type [4]
+
+0x00000034: DW_TAG_subprogram [5] *
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ff] = "atoi")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libc/stdlib.h")
+ DW_AT_decl_line [DW_FORM_data1] (21)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_declaration [DW_FORM_flag_present] (true)
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x0000003f: DW_TAG_formal_parameter [3]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x004c => {0x0000004c} "const char*")
+
+0x00000044: NULL
+
+0x00000045: DW_TAG_base_type [6]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000104] = "int")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed)
+ DW_AT_byte_size [DW_FORM_data1] (0x04)
+
+0x0000004c: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0051 => {0x00000051} "const char")
+
+0x00000051: DW_TAG_const_type [8]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0056 => {0x00000056} "char")
+
+0x00000056: DW_TAG_base_type [6]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000108] = "char")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed_char)
+ DW_AT_byte_size [DW_FORM_data1] (0x01)
+
+0x0000005d: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0062 => {0x00000062} "worker_args")
+
+0x00000062: DW_TAG_structure_type [9] *
+ DW_AT_calling_convention [DW_FORM_data1] (DW_CC_pass_by_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000116] = "worker_args")
+ DW_AT_byte_size [DW_FORM_data1] (0x0c)
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (20)
+
+0x0000006b: DW_TAG_member [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010d] = "i")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (21)
+ DW_AT_data_member_location [DW_FORM_data1] (0x00)
+
+0x00000077: DW_TAG_member [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (21)
+ DW_AT_data_member_location [DW_FORM_data1] (0x04)
+
+0x00000083: DW_TAG_member [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000111] = "next")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (22)
+ DW_AT_data_member_location [DW_FORM_data1] (0x08)
+
+0x0000008f: NULL
+
+0x00000090: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000095: DW_TAG_namespace [11] *
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000122] = "std")
+
+0x0000009a: DW_TAG_typedef [12]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x00a6 => {0x000000a6} "decltype(nullptr)")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000138] = "nullptr_t")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/__nullptr")
+ DW_AT_decl_line [DW_FORM_data1] (57)
+
+0x000000a5: NULL
+
+0x000000a6: DW_TAG_unspecified_type [13]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000126] = "decltype(nullptr)")
+
+0x000000ab: DW_TAG_imported_declaration [14]
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/stddef.h")
+ DW_AT_decl_line [DW_FORM_data1] (52)
+ DW_AT_import [DW_FORM_ref4] (cu + 0x009a => {0x0000009a})
+
+0x000000b2: DW_TAG_subprogram [15] *
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000003)
+ DW_AT_high_pc [DW_FORM_data4] (0x00000397)
+ DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true)
+ DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000194] = "_Z15fannkuch_workerPv")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001aa] = "fannkuch_worker")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (26)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x000000c9: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001bf] = "_arg")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (26)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0033 => {0x00000033} "*")
+
+0x000000d4: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "args")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (28)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+
+0x000000df: DW_TAG_variable [18]
+ DW_AT_location [DW_FORM_sec_offset] (0x00000000:
+ [0xffffffff, 0x00000003):
+ [0x00000000, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000174] = "maxflips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000000ee: DW_TAG_variable [18]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000001d:
+ [0xffffffff, 0x00000003):
+ [0x00000007, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value
+ [0x000000ec, 0x000000f5): DW_OP_consts +1, DW_OP_stack_value
+ [0x00000179, 0x00000186): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000275, 0x0000027e): DW_OP_consts +1, DW_OP_stack_value
+ [0x00000302, 0x0000030f): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010d] = "i")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000000fd: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000108: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000166] = "perm1")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (29)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x00000113: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001c4] = "perm")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (29)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x0000011e: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000016c] = "count")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (29)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x00000129: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000172] = "r")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000134: DW_TAG_variable [18]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000007b:
+ [0xffffffff, 0x00000003):
+ [0x000000cf, 0x000000e6): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000017d] = "flips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000143: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001c9] = "k")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x0000014e: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001cb] = "j")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000159: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001cd] = "tmp")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000164: DW_TAG_lexical_block [19] *
+ DW_AT_ranges [DW_FORM_sec_offset] (0x00000000
+ [0x00000182, 0x000001c0)
+ [0x000001ea, 0x000001f3)
+ [0x0000030b, 0x00000349)
+ [0x00000373, 0x0000037c))
+
+0x00000169: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000191] = "p0")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (74)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000174: NULL
+
+0x00000175: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000001c)
+
+0x0000017a: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000026)
+
+0x0000017f: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000030)
+
+0x00000184: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000000de)
+
+0x00000189: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000387)
+
+0x00000192: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000038f)
+
+0x0000019b: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000397)
+
+0x000001a4: NULL
+
+0x000001a5: DW_TAG_subprogram [22] *
+ DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000142] = "_ZL8fannkuchi")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000150] = "fannkuch")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (87)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_inline [DW_FORM_data1] (DW_INL_inlined)
+
+0x000001b5: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (87)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000001c0: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000159] = "showmax")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (90)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000001cb: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "args")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (89)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+
+0x000001d6: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010d] = "i")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000001e1: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000166] = "perm1")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x000001ec: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000016c] = "count")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x000001f7: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000172] = "r")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000202: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000174] = "maxflips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x0000020d: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000017d] = "flips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000218: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000183] = "targs")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (89)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+
+0x00000223: DW_TAG_label [23]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000189] = "cleanup")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (137)
+
+0x0000022a: DW_TAG_lexical_block [24] *
+
+0x0000022b: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000191] = "p0")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (125)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000236: NULL
+
+0x00000237: NULL
+
+0x00000238: DW_TAG_subprogram [25] *
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000039c)
+ DW_AT_high_pc [DW_FORM_data4] (0x00000346)
+ DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001ba] = "main")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (152)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x0000024b: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001d1] = "argc")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (152)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000256: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001d6] = "argv")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (152)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0321 => {0x00000321} "char**")
+
+0x00000261: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (153)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x0000026c: DW_TAG_inlined_subroutine [26] *
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01a5 => {0x000001a5} "_ZL8fannkuchi")
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000003ea)
+ DW_AT_high_pc [DW_FORM_data4] (0x000002cc)
+ DW_AT_call_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_call_line [DW_FORM_data1] (159)
+ DW_AT_call_column [DW_FORM_data1] (0x29)
+
+0x0000027c: DW_TAG_formal_parameter [27]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01b5 => {0x000001b5} "n")
+
+0x00000281: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x000000a5:
+ [0xffffffff, 0x0000039c):
+ [0x0000004c, 0x00000055): DW_OP_consts +30, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01c0 => {0x000001c0} "showmax")
+
+0x0000028a: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x000000c2:
+ [0xffffffff, 0x0000039c):
+ [0x0000004c, 0x00000055): DW_OP_lit0, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01cb => {0x000001cb} "args")
+
+0x00000293: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x000000de:
+ [0xffffffff, 0x0000039c):
+ [0x0000004c, 0x00000055): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000099, 0x000000c1): DW_OP_consts +0, DW_OP_stack_value
+ [0x000000f5, 0x000000f9): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000178, 0x00000188): DW_OP_consts +0, DW_OP_stack_value
+ [0x000001fa, 0x0000020c): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000241, 0x00000255): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01d6 => {0x000001d6} "i")
+
+0x0000029c: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01e1 => {0x000001e1} "perm1")
+
+0x000002a1: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ec => {0x000001ec} "count")
+
+0x000002a6: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01f7 => {0x000001f7} "r")
+
+0x000002ab: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000013c:
+ [0xffffffff, 0x0000039c):
+ [0x000002d6, 0x000002e1): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0202 => {0x00000202} "maxflips")
+
+0x000002b4: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x020d => {0x0000020d} "flips")
+
+0x000002b9: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0218 => {0x00000218} "targs")
+
+0x000002be: DW_TAG_label [30]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0223 => {0x00000223} "cleanup")
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000065e)
+
+0x000002c7: DW_TAG_lexical_block [19] *
+ DW_AT_ranges [DW_FORM_sec_offset] (0x00000028
+ [0x00000514, 0x0000055b)
+ [0x000005db, 0x00000628))
+
+0x000002cc: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x022b => {0x0000022b} "p0")
+
+0x000002d1: NULL
+
+0x000002d2: NULL
+
+0x000002d3: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000003cc)
+
+0x000002d8: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000003e0)
+
+0x000002dd: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000040a)
+
+0x000002e2: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000442)
+
+0x000002e7: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000044c)
+
+0x000002ec: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000004bb)
+
+0x000002f1: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000004d1)
+
+0x000002f6: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000059e)
+
+0x000002fb: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000666)
+
+0x00000304: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000066e)
+
+0x0000030d: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000068f)
+
+0x00000312: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000006a0)
+
+0x0000031b: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000006d2)
+
+0x00000320: NULL
+
+0x00000321: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0326 => {0x00000326} "char*")
+
+0x00000326: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0056 => {0x00000056} "char")
+
+0x0000032b: NULL
+
.debug_loc contents:
0x00000000:
[0xffffffff, 0x00000003):
@@ -1877,6 +2356,485 @@ Abbrev table for offset: 0x00000000
[0x00000003, 0x0000039a)
[0x0000039c, 0x000006e2))
+0x00000026: DW_TAG_subprogram [2] *
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000fa] = "free")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libc/stdlib.h")
+ DW_AT_decl_line [DW_FORM_data1] (41)
+ DW_AT_declaration [DW_FORM_flag_present] (true)
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x0000002d: DW_TAG_formal_parameter [3]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0033 => {0x00000033} "*")
+
+0x00000032: NULL
+
+0x00000033: DW_TAG_pointer_type [4]
+
+0x00000034: DW_TAG_subprogram [5] *
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ff] = "atoi")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libc/stdlib.h")
+ DW_AT_decl_line [DW_FORM_data1] (21)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_declaration [DW_FORM_flag_present] (true)
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x0000003f: DW_TAG_formal_parameter [3]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x004c => {0x0000004c} "const char*")
+
+0x00000044: NULL
+
+0x00000045: DW_TAG_base_type [6]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000104] = "int")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed)
+ DW_AT_byte_size [DW_FORM_data1] (0x04)
+
+0x0000004c: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0051 => {0x00000051} "const char")
+
+0x00000051: DW_TAG_const_type [8]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0056 => {0x00000056} "char")
+
+0x00000056: DW_TAG_base_type [6]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000108] = "char")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed_char)
+ DW_AT_byte_size [DW_FORM_data1] (0x01)
+
+0x0000005d: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0062 => {0x00000062} "worker_args")
+
+0x00000062: DW_TAG_structure_type [9] *
+ DW_AT_calling_convention [DW_FORM_data1] (DW_CC_pass_by_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000116] = "worker_args")
+ DW_AT_byte_size [DW_FORM_data1] (0x0c)
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (20)
+
+0x0000006b: DW_TAG_member [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010d] = "i")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (21)
+ DW_AT_data_member_location [DW_FORM_data1] (0x00)
+
+0x00000077: DW_TAG_member [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (21)
+ DW_AT_data_member_location [DW_FORM_data1] (0x04)
+
+0x00000083: DW_TAG_member [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000111] = "next")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (22)
+ DW_AT_data_member_location [DW_FORM_data1] (0x08)
+
+0x0000008f: NULL
+
+0x00000090: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000095: DW_TAG_namespace [11] *
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000122] = "std")
+
+0x0000009a: DW_TAG_typedef [12]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x00a6 => {0x000000a6} "decltype(nullptr)")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000138] = "nullptr_t")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/__nullptr")
+ DW_AT_decl_line [DW_FORM_data1] (57)
+
+0x000000a5: NULL
+
+0x000000a6: DW_TAG_unspecified_type [13]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000126] = "decltype(nullptr)")
+
+0x000000ab: DW_TAG_imported_declaration [14]
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/stddef.h")
+ DW_AT_decl_line [DW_FORM_data1] (52)
+ DW_AT_import [DW_FORM_ref4] (cu + 0x009a => {0x0000009a})
+
+0x000000b2: DW_TAG_subprogram [15] *
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000003)
+ DW_AT_high_pc [DW_FORM_data4] (0x00000397)
+ DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true)
+ DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000194] = "_Z15fannkuch_workerPv")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001aa] = "fannkuch_worker")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (26)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x000000c9: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001bf] = "_arg")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (26)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0033 => {0x00000033} "*")
+
+0x000000d4: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "args")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (28)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+
+0x000000df: DW_TAG_variable [18]
+ DW_AT_location [DW_FORM_sec_offset] (0x00000000:
+ [0xffffffff, 0x00000003):
+ [0x00000000, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000174] = "maxflips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000000ee: DW_TAG_variable [18]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000001d:
+ [0xffffffff, 0x00000003):
+ [0x00000007, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value
+ [0x000000ec, 0x000000f5): DW_OP_consts +1, DW_OP_stack_value
+ [0x00000179, 0x00000186): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000275, 0x0000027e): DW_OP_consts +1, DW_OP_stack_value
+ [0x00000302, 0x0000030f): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010d] = "i")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000000fd: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000108: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000166] = "perm1")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (29)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x00000113: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001c4] = "perm")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (29)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x0000011e: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000016c] = "count")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (29)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x00000129: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000172] = "r")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000134: DW_TAG_variable [18]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000007b:
+ [0xffffffff, 0x00000003):
+ [0x000000cf, 0x000000e6): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000017d] = "flips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000143: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001c9] = "k")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x0000014e: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001cb] = "j")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000159: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001cd] = "tmp")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000164: DW_TAG_lexical_block [19] *
+ DW_AT_ranges [DW_FORM_sec_offset] (0x00000000
+ [0x00000182, 0x000001c0)
+ [0x000001ea, 0x000001f3)
+ [0x0000030b, 0x00000349)
+ [0x00000373, 0x0000037c))
+
+0x00000169: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000191] = "p0")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (74)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000174: NULL
+
+0x00000175: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000001c)
+
+0x0000017a: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000026)
+
+0x0000017f: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000030)
+
+0x00000184: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000000de)
+
+0x00000189: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000387)
+
+0x00000192: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000038f)
+
+0x0000019b: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000397)
+
+0x000001a4: NULL
+
+0x000001a5: DW_TAG_subprogram [22] *
+ DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000142] = "_ZL8fannkuchi")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000150] = "fannkuch")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (87)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_inline [DW_FORM_data1] (DW_INL_inlined)
+
+0x000001b5: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (87)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000001c0: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000159] = "showmax")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (90)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000001cb: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "args")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (89)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+
+0x000001d6: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010d] = "i")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000001e1: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000166] = "perm1")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x000001ec: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000016c] = "count")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x000001f7: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000172] = "r")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000202: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000174] = "maxflips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x0000020d: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000017d] = "flips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000218: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000183] = "targs")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (89)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+
+0x00000223: DW_TAG_label [23]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000189] = "cleanup")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (137)
+
+0x0000022a: DW_TAG_lexical_block [24] *
+
+0x0000022b: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000191] = "p0")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (125)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000236: NULL
+
+0x00000237: NULL
+
+0x00000238: DW_TAG_subprogram [25] *
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000039c)
+ DW_AT_high_pc [DW_FORM_data4] (0x00000346)
+ DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001ba] = "main")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (152)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x0000024b: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001d1] = "argc")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (152)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000256: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001d6] = "argv")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (152)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0321 => {0x00000321} "char**")
+
+0x00000261: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (153)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x0000026c: DW_TAG_inlined_subroutine [26] *
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01a5 => {0x000001a5} "_ZL8fannkuchi")
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000003ea)
+ DW_AT_high_pc [DW_FORM_data4] (0x000002cc)
+ DW_AT_call_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_call_line [DW_FORM_data1] (159)
+ DW_AT_call_column [DW_FORM_data1] (0x29)
+
+0x0000027c: DW_TAG_formal_parameter [27]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01b5 => {0x000001b5} "n")
+
+0x00000281: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x000000a5:
+ [0xffffffff, 0x0000039c):
+ [0x0000004c, 0x00000055): DW_OP_consts +30, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01c0 => {0x000001c0} "showmax")
+
+0x0000028a: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x000000c2:
+ [0xffffffff, 0x0000039c):
+ [0x0000004c, 0x00000055): DW_OP_lit0, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01cb => {0x000001cb} "args")
+
+0x00000293: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x000000de:
+ [0xffffffff, 0x0000039c):
+ [0x0000004c, 0x00000055): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000099, 0x000000c1): DW_OP_consts +0, DW_OP_stack_value
+ [0x000000f5, 0x000000f9): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000178, 0x00000188): DW_OP_consts +0, DW_OP_stack_value
+ [0x000001fa, 0x0000020c): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000241, 0x00000255): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01d6 => {0x000001d6} "i")
+
+0x0000029c: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01e1 => {0x000001e1} "perm1")
+
+0x000002a1: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ec => {0x000001ec} "count")
+
+0x000002a6: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01f7 => {0x000001f7} "r")
+
+0x000002ab: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000013c:
+ [0xffffffff, 0x0000039c):
+ [0x000002d6, 0x000002e1): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0202 => {0x00000202} "maxflips")
+
+0x000002b4: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x020d => {0x0000020d} "flips")
+
+0x000002b9: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0218 => {0x00000218} "targs")
+
+0x000002be: DW_TAG_label [30]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0223 => {0x00000223} "cleanup")
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000065e)
+
+0x000002c7: DW_TAG_lexical_block [19] *
+ DW_AT_ranges [DW_FORM_sec_offset] (0x00000028
+ [0x00000514, 0x0000055b)
+ [0x000005db, 0x00000628))
+
+0x000002cc: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x022b => {0x0000022b} "p0")
+
+0x000002d1: NULL
+
+0x000002d2: NULL
+
+0x000002d3: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000003cc)
+
+0x000002d8: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000003e0)
+
+0x000002dd: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000040a)
+
+0x000002e2: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000442)
+
+0x000002e7: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000044c)
+
+0x000002ec: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000004bb)
+
+0x000002f1: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000004d1)
+
+0x000002f6: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000059e)
+
+0x000002fb: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000666)
+
+0x00000304: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000066e)
+
+0x0000030d: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000068f)
+
+0x00000312: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000006a0)
+
+0x0000031b: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000006d2)
+
+0x00000320: NULL
+
+0x00000321: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0326 => {0x00000326} "char*")
+
+0x00000326: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0056 => {0x00000056} "char")
+
+0x0000032b: NULL
+
.debug_loc contents:
0x00000000:
[0xffffffff, 0x00000003):
diff --git a/test/passes/fannkuch3_manyopts.bin.txt b/test/passes/fannkuch3_manyopts.bin.txt
index 859ee76e5..7455173a1 100644
--- a/test/passes/fannkuch3_manyopts.bin.txt
+++ b/test/passes/fannkuch3_manyopts.bin.txt
@@ -183,6 +183,485 @@ Abbrev table for offset: 0x00000000
[0x00000003, 0x0000039a)
[0x0000039c, 0x000006e2))
+0x00000026: DW_TAG_subprogram [2] *
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000fa] = "free")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libc/stdlib.h")
+ DW_AT_decl_line [DW_FORM_data1] (41)
+ DW_AT_declaration [DW_FORM_flag_present] (true)
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x0000002d: DW_TAG_formal_parameter [3]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0033 => {0x00000033} "*")
+
+0x00000032: NULL
+
+0x00000033: DW_TAG_pointer_type [4]
+
+0x00000034: DW_TAG_subprogram [5] *
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ff] = "atoi")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libc/stdlib.h")
+ DW_AT_decl_line [DW_FORM_data1] (21)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_declaration [DW_FORM_flag_present] (true)
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x0000003f: DW_TAG_formal_parameter [3]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x004c => {0x0000004c} "const char*")
+
+0x00000044: NULL
+
+0x00000045: DW_TAG_base_type [6]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000104] = "int")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed)
+ DW_AT_byte_size [DW_FORM_data1] (0x04)
+
+0x0000004c: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0051 => {0x00000051} "const char")
+
+0x00000051: DW_TAG_const_type [8]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0056 => {0x00000056} "char")
+
+0x00000056: DW_TAG_base_type [6]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000108] = "char")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed_char)
+ DW_AT_byte_size [DW_FORM_data1] (0x01)
+
+0x0000005d: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0062 => {0x00000062} "worker_args")
+
+0x00000062: DW_TAG_structure_type [9] *
+ DW_AT_calling_convention [DW_FORM_data1] (DW_CC_pass_by_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000116] = "worker_args")
+ DW_AT_byte_size [DW_FORM_data1] (0x0c)
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (20)
+
+0x0000006b: DW_TAG_member [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010d] = "i")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (21)
+ DW_AT_data_member_location [DW_FORM_data1] (0x00)
+
+0x00000077: DW_TAG_member [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (21)
+ DW_AT_data_member_location [DW_FORM_data1] (0x04)
+
+0x00000083: DW_TAG_member [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000111] = "next")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (22)
+ DW_AT_data_member_location [DW_FORM_data1] (0x08)
+
+0x0000008f: NULL
+
+0x00000090: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000095: DW_TAG_namespace [11] *
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000122] = "std")
+
+0x0000009a: DW_TAG_typedef [12]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x00a6 => {0x000000a6} "decltype(nullptr)")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000138] = "nullptr_t")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/__nullptr")
+ DW_AT_decl_line [DW_FORM_data1] (57)
+
+0x000000a5: NULL
+
+0x000000a6: DW_TAG_unspecified_type [13]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000126] = "decltype(nullptr)")
+
+0x000000ab: DW_TAG_imported_declaration [14]
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/stddef.h")
+ DW_AT_decl_line [DW_FORM_data1] (52)
+ DW_AT_import [DW_FORM_ref4] (cu + 0x009a => {0x0000009a})
+
+0x000000b2: DW_TAG_subprogram [15] *
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000003)
+ DW_AT_high_pc [DW_FORM_data4] (0x00000397)
+ DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true)
+ DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000194] = "_Z15fannkuch_workerPv")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001aa] = "fannkuch_worker")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (26)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x000000c9: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001bf] = "_arg")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (26)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0033 => {0x00000033} "*")
+
+0x000000d4: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "args")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (28)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+
+0x000000df: DW_TAG_variable [18]
+ DW_AT_location [DW_FORM_sec_offset] (0x00000000:
+ [0xffffffff, 0x00000003):
+ [0x00000000, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000174] = "maxflips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000000ee: DW_TAG_variable [18]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000001d:
+ [0xffffffff, 0x00000003):
+ [0x00000007, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value
+ [0x000000ec, 0x000000f5): DW_OP_consts +1, DW_OP_stack_value
+ [0x00000179, 0x00000186): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000275, 0x0000027e): DW_OP_consts +1, DW_OP_stack_value
+ [0x00000302, 0x0000030f): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010d] = "i")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000000fd: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000108: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000166] = "perm1")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (29)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x00000113: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001c4] = "perm")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (29)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x0000011e: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000016c] = "count")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (29)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x00000129: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000172] = "r")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000134: DW_TAG_variable [18]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000007b:
+ [0xffffffff, 0x00000003):
+ [0x000000cf, 0x000000e6): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000017d] = "flips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000143: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001c9] = "k")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x0000014e: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001cb] = "j")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000159: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001cd] = "tmp")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000164: DW_TAG_lexical_block [19] *
+ DW_AT_ranges [DW_FORM_sec_offset] (0x00000000
+ [0x00000182, 0x000001c0)
+ [0x000001ea, 0x000001f3)
+ [0x0000030b, 0x00000349)
+ [0x00000373, 0x0000037c))
+
+0x00000169: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000191] = "p0")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (74)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000174: NULL
+
+0x00000175: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000001c)
+
+0x0000017a: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000026)
+
+0x0000017f: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000030)
+
+0x00000184: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000000de)
+
+0x00000189: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000387)
+
+0x00000192: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000038f)
+
+0x0000019b: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000397)
+
+0x000001a4: NULL
+
+0x000001a5: DW_TAG_subprogram [22] *
+ DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000142] = "_ZL8fannkuchi")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000150] = "fannkuch")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (87)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_inline [DW_FORM_data1] (DW_INL_inlined)
+
+0x000001b5: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (87)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000001c0: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000159] = "showmax")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (90)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000001cb: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "args")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (89)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+
+0x000001d6: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010d] = "i")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000001e1: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000166] = "perm1")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x000001ec: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000016c] = "count")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x000001f7: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000172] = "r")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000202: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000174] = "maxflips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x0000020d: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000017d] = "flips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000218: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000183] = "targs")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (89)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+
+0x00000223: DW_TAG_label [23]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000189] = "cleanup")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (137)
+
+0x0000022a: DW_TAG_lexical_block [24] *
+
+0x0000022b: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000191] = "p0")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (125)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000236: NULL
+
+0x00000237: NULL
+
+0x00000238: DW_TAG_subprogram [25] *
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000039c)
+ DW_AT_high_pc [DW_FORM_data4] (0x00000346)
+ DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001ba] = "main")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (152)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x0000024b: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001d1] = "argc")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (152)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000256: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001d6] = "argv")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (152)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0321 => {0x00000321} "char**")
+
+0x00000261: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (153)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x0000026c: DW_TAG_inlined_subroutine [26] *
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01a5 => {0x000001a5} "_ZL8fannkuchi")
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000003ea)
+ DW_AT_high_pc [DW_FORM_data4] (0x000002cc)
+ DW_AT_call_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_call_line [DW_FORM_data1] (159)
+ DW_AT_call_column [DW_FORM_data1] (0x29)
+
+0x0000027c: DW_TAG_formal_parameter [27]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01b5 => {0x000001b5} "n")
+
+0x00000281: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x000000a5:
+ [0xffffffff, 0x0000039c):
+ [0x0000004c, 0x00000055): DW_OP_consts +30, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01c0 => {0x000001c0} "showmax")
+
+0x0000028a: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x000000c2:
+ [0xffffffff, 0x0000039c):
+ [0x0000004c, 0x00000055): DW_OP_lit0, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01cb => {0x000001cb} "args")
+
+0x00000293: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x000000de:
+ [0xffffffff, 0x0000039c):
+ [0x0000004c, 0x00000055): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000099, 0x000000c1): DW_OP_consts +0, DW_OP_stack_value
+ [0x000000f5, 0x000000f9): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000178, 0x00000188): DW_OP_consts +0, DW_OP_stack_value
+ [0x000001fa, 0x0000020c): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000241, 0x00000255): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01d6 => {0x000001d6} "i")
+
+0x0000029c: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01e1 => {0x000001e1} "perm1")
+
+0x000002a1: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ec => {0x000001ec} "count")
+
+0x000002a6: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01f7 => {0x000001f7} "r")
+
+0x000002ab: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000013c:
+ [0xffffffff, 0x0000039c):
+ [0x000002d6, 0x000002e1): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0202 => {0x00000202} "maxflips")
+
+0x000002b4: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x020d => {0x0000020d} "flips")
+
+0x000002b9: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0218 => {0x00000218} "targs")
+
+0x000002be: DW_TAG_label [30]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0223 => {0x00000223} "cleanup")
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000065e)
+
+0x000002c7: DW_TAG_lexical_block [19] *
+ DW_AT_ranges [DW_FORM_sec_offset] (0x00000028
+ [0x00000514, 0x0000055b)
+ [0x000005db, 0x00000628))
+
+0x000002cc: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x022b => {0x0000022b} "p0")
+
+0x000002d1: NULL
+
+0x000002d2: NULL
+
+0x000002d3: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000003cc)
+
+0x000002d8: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000003e0)
+
+0x000002dd: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000040a)
+
+0x000002e2: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000442)
+
+0x000002e7: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000044c)
+
+0x000002ec: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000004bb)
+
+0x000002f1: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000004d1)
+
+0x000002f6: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000059e)
+
+0x000002fb: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000666)
+
+0x00000304: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000066e)
+
+0x0000030d: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000068f)
+
+0x00000312: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000006a0)
+
+0x0000031b: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000006d2)
+
+0x00000320: NULL
+
+0x00000321: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0326 => {0x00000326} "char*")
+
+0x00000326: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0056 => {0x00000056} "char")
+
+0x0000032b: NULL
+
.debug_loc contents:
0x00000000:
[0xffffffff, 0x00000003):
@@ -1877,6 +2356,485 @@ Abbrev table for offset: 0x00000000
[0x00000003, 0x0000039a)
[0x0000039c, 0x000006e2))
+0x00000026: DW_TAG_subprogram [2] *
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000fa] = "free")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libc/stdlib.h")
+ DW_AT_decl_line [DW_FORM_data1] (41)
+ DW_AT_declaration [DW_FORM_flag_present] (true)
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x0000002d: DW_TAG_formal_parameter [3]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0033 => {0x00000033} "*")
+
+0x00000032: NULL
+
+0x00000033: DW_TAG_pointer_type [4]
+
+0x00000034: DW_TAG_subprogram [5] *
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ff] = "atoi")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libc/stdlib.h")
+ DW_AT_decl_line [DW_FORM_data1] (21)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_declaration [DW_FORM_flag_present] (true)
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x0000003f: DW_TAG_formal_parameter [3]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x004c => {0x0000004c} "const char*")
+
+0x00000044: NULL
+
+0x00000045: DW_TAG_base_type [6]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000104] = "int")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed)
+ DW_AT_byte_size [DW_FORM_data1] (0x04)
+
+0x0000004c: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0051 => {0x00000051} "const char")
+
+0x00000051: DW_TAG_const_type [8]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0056 => {0x00000056} "char")
+
+0x00000056: DW_TAG_base_type [6]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000108] = "char")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed_char)
+ DW_AT_byte_size [DW_FORM_data1] (0x01)
+
+0x0000005d: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0062 => {0x00000062} "worker_args")
+
+0x00000062: DW_TAG_structure_type [9] *
+ DW_AT_calling_convention [DW_FORM_data1] (DW_CC_pass_by_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000116] = "worker_args")
+ DW_AT_byte_size [DW_FORM_data1] (0x0c)
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (20)
+
+0x0000006b: DW_TAG_member [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010d] = "i")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (21)
+ DW_AT_data_member_location [DW_FORM_data1] (0x00)
+
+0x00000077: DW_TAG_member [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (21)
+ DW_AT_data_member_location [DW_FORM_data1] (0x04)
+
+0x00000083: DW_TAG_member [10]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000111] = "next")
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (22)
+ DW_AT_data_member_location [DW_FORM_data1] (0x08)
+
+0x0000008f: NULL
+
+0x00000090: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000095: DW_TAG_namespace [11] *
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000122] = "std")
+
+0x0000009a: DW_TAG_typedef [12]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x00a6 => {0x000000a6} "decltype(nullptr)")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000138] = "nullptr_t")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/__nullptr")
+ DW_AT_decl_line [DW_FORM_data1] (57)
+
+0x000000a5: NULL
+
+0x000000a6: DW_TAG_unspecified_type [13]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000126] = "decltype(nullptr)")
+
+0x000000ab: DW_TAG_imported_declaration [14]
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/system/include/libcxx/stddef.h")
+ DW_AT_decl_line [DW_FORM_data1] (52)
+ DW_AT_import [DW_FORM_ref4] (cu + 0x009a => {0x0000009a})
+
+0x000000b2: DW_TAG_subprogram [15] *
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000003)
+ DW_AT_high_pc [DW_FORM_data4] (0x00000397)
+ DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true)
+ DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000194] = "_Z15fannkuch_workerPv")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001aa] = "fannkuch_worker")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (26)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x000000c9: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001bf] = "_arg")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (26)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0033 => {0x00000033} "*")
+
+0x000000d4: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "args")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (28)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+
+0x000000df: DW_TAG_variable [18]
+ DW_AT_location [DW_FORM_sec_offset] (0x00000000:
+ [0xffffffff, 0x00000003):
+ [0x00000000, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000174] = "maxflips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000000ee: DW_TAG_variable [18]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000001d:
+ [0xffffffff, 0x00000003):
+ [0x00000007, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value
+ [0x000000ec, 0x000000f5): DW_OP_consts +1, DW_OP_stack_value
+ [0x00000179, 0x00000186): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000275, 0x0000027e): DW_OP_consts +1, DW_OP_stack_value
+ [0x00000302, 0x0000030f): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010d] = "i")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000000fd: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000108: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000166] = "perm1")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (29)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x00000113: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001c4] = "perm")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (29)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x0000011e: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000016c] = "count")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (29)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x00000129: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000172] = "r")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000134: DW_TAG_variable [18]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000007b:
+ [0xffffffff, 0x00000003):
+ [0x000000cf, 0x000000e6): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000017d] = "flips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000143: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001c9] = "k")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x0000014e: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001cb] = "j")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000159: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001cd] = "tmp")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (30)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000164: DW_TAG_lexical_block [19] *
+ DW_AT_ranges [DW_FORM_sec_offset] (0x00000000
+ [0x00000182, 0x000001c0)
+ [0x000001ea, 0x000001f3)
+ [0x0000030b, 0x00000349)
+ [0x00000373, 0x0000037c))
+
+0x00000169: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000191] = "p0")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (74)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000174: NULL
+
+0x00000175: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000001c)
+
+0x0000017a: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000026)
+
+0x0000017f: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000030)
+
+0x00000184: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000000de)
+
+0x00000189: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000387)
+
+0x00000192: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000038f)
+
+0x0000019b: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000397)
+
+0x000001a4: NULL
+
+0x000001a5: DW_TAG_subprogram [22] *
+ DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x00000142] = "_ZL8fannkuchi")
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000150] = "fannkuch")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (87)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_inline [DW_FORM_data1] (DW_INL_inlined)
+
+0x000001b5: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (87)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000001c0: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000159] = "showmax")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (90)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000001cb: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "args")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (89)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+
+0x000001d6: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010d] = "i")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x000001e1: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000166] = "perm1")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x000001ec: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000016c] = "count")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0090 => {0x00000090} "int*")
+
+0x000001f7: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000172] = "r")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000202: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000174] = "maxflips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x0000020d: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000017d] = "flips")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (91)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000218: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000183] = "targs")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (89)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x005d => {0x0000005d} "worker_args*")
+
+0x00000223: DW_TAG_label [23]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000189] = "cleanup")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (137)
+
+0x0000022a: DW_TAG_lexical_block [24] *
+
+0x0000022b: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000191] = "p0")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (125)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000236: NULL
+
+0x00000237: NULL
+
+0x00000238: DW_TAG_subprogram [25] *
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000039c)
+ DW_AT_high_pc [DW_FORM_data4] (0x00000346)
+ DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001ba] = "main")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (152)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x0000024b: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001d1] = "argc")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (152)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x00000256: DW_TAG_formal_parameter [16]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000001d6] = "argv")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (152)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0321 => {0x00000321} "char**")
+
+0x00000261: DW_TAG_variable [17]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000010f] = "n")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (153)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0045 => {0x00000045} "int")
+
+0x0000026c: DW_TAG_inlined_subroutine [26] *
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01a5 => {0x000001a5} "_ZL8fannkuchi")
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000003ea)
+ DW_AT_high_pc [DW_FORM_data4] (0x000002cc)
+ DW_AT_call_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/fannkuch.cpp")
+ DW_AT_call_line [DW_FORM_data1] (159)
+ DW_AT_call_column [DW_FORM_data1] (0x29)
+
+0x0000027c: DW_TAG_formal_parameter [27]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01b5 => {0x000001b5} "n")
+
+0x00000281: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x000000a5:
+ [0xffffffff, 0x0000039c):
+ [0x0000004c, 0x00000055): DW_OP_consts +30, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01c0 => {0x000001c0} "showmax")
+
+0x0000028a: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x000000c2:
+ [0xffffffff, 0x0000039c):
+ [0x0000004c, 0x00000055): DW_OP_lit0, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01cb => {0x000001cb} "args")
+
+0x00000293: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x000000de:
+ [0xffffffff, 0x0000039c):
+ [0x0000004c, 0x00000055): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000099, 0x000000c1): DW_OP_consts +0, DW_OP_stack_value
+ [0x000000f5, 0x000000f9): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000178, 0x00000188): DW_OP_consts +0, DW_OP_stack_value
+ [0x000001fa, 0x0000020c): DW_OP_consts +0, DW_OP_stack_value
+ [0x00000241, 0x00000255): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01d6 => {0x000001d6} "i")
+
+0x0000029c: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01e1 => {0x000001e1} "perm1")
+
+0x000002a1: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ec => {0x000001ec} "count")
+
+0x000002a6: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01f7 => {0x000001f7} "r")
+
+0x000002ab: DW_TAG_variable [28]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000013c:
+ [0xffffffff, 0x0000039c):
+ [0x000002d6, 0x000002e1): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0202 => {0x00000202} "maxflips")
+
+0x000002b4: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x020d => {0x0000020d} "flips")
+
+0x000002b9: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0218 => {0x00000218} "targs")
+
+0x000002be: DW_TAG_label [30]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0223 => {0x00000223} "cleanup")
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000065e)
+
+0x000002c7: DW_TAG_lexical_block [19] *
+ DW_AT_ranges [DW_FORM_sec_offset] (0x00000028
+ [0x00000514, 0x0000055b)
+ [0x000005db, 0x00000628))
+
+0x000002cc: DW_TAG_variable [29]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x022b => {0x0000022b} "p0")
+
+0x000002d1: NULL
+
+0x000002d2: NULL
+
+0x000002d3: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000003cc)
+
+0x000002d8: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000003e0)
+
+0x000002dd: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000040a)
+
+0x000002e2: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000442)
+
+0x000002e7: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000044c)
+
+0x000002ec: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000004bb)
+
+0x000002f1: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000004d1)
+
+0x000002f6: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000059e)
+
+0x000002fb: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000666)
+
+0x00000304: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000066e)
+
+0x0000030d: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000068f)
+
+0x00000312: DW_TAG_GNU_call_site [21]
+ DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0026 => {0x00000026} "free")
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000006a0)
+
+0x0000031b: DW_TAG_GNU_call_site [20]
+ DW_AT_low_pc [DW_FORM_addr] (0x00000000000006d2)
+
+0x00000320: NULL
+
+0x00000321: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0326 => {0x00000326} "char*")
+
+0x00000326: DW_TAG_pointer_type [7]
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0056 => {0x00000056} "char")
+
+0x0000032b: NULL
+
.debug_loc contents:
0x00000000:
[0xffffffff, 0x00000003):
diff --git a/test/passes/fib2.bin.txt b/test/passes/fib2.bin.txt
index 40730ad75..568575edb 100644
--- a/test/passes/fib2.bin.txt
+++ b/test/passes/fib2.bin.txt
@@ -66,6 +66,62 @@ Abbrev table for offset: 0x00000000
DW_AT_low_pc [DW_FORM_addr] (0x0000000000000002)
DW_AT_high_pc [DW_FORM_data4] (0x00000035)
+0x00000026: DW_TAG_subprogram [2] *
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000002)
+ DW_AT_high_pc [DW_FORM_data4] (0x00000035)
+ DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c7] = "fib")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/binaryen/fib2.c")
+ DW_AT_decl_line [DW_FORM_data1] (2)
+ DW_AT_prototyped [DW_FORM_flag_present] (true)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x007d => {0x0000007d} "int")
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x00000039: DW_TAG_formal_parameter [3]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000cf] = "n")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/binaryen/fib2.c")
+ DW_AT_decl_line [DW_FORM_data1] (2)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x007d => {0x0000007d} "int")
+
+0x00000044: DW_TAG_variable [4]
+ DW_AT_location [DW_FORM_sec_offset] (0x00000000:
+ [0x00000009, 0x00000012): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d1] = "a")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/binaryen/fib2.c")
+ DW_AT_decl_line [DW_FORM_data1] (3)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x007d => {0x0000007d} "int")
+
+0x00000053: DW_TAG_variable [4]
+ DW_AT_location [DW_FORM_sec_offset] (0x00000015:
+ [0x00000009, 0x00000012): DW_OP_consts +1, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d3] = "b")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/binaryen/fib2.c")
+ DW_AT_decl_line [DW_FORM_data1] (3)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x007d => {0x0000007d} "int")
+
+0x00000062: DW_TAG_variable [4]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000002a:
+ [0x00000009, 0x00000012): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d5] = "i")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/binaryen/fib2.c")
+ DW_AT_decl_line [DW_FORM_data1] (3)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x007d => {0x0000007d} "int")
+
+0x00000071: DW_TAG_variable [5]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d7] = "t")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/binaryen/fib2.c")
+ DW_AT_decl_line [DW_FORM_data1] (3)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x007d => {0x0000007d} "int")
+
+0x0000007c: NULL
+
+0x0000007d: DW_TAG_base_type [6]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000cb] = "int")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed)
+ DW_AT_byte_size [DW_FORM_data1] (0x04)
+
+0x00000084: NULL
+
.debug_loc contents:
0x00000000:
[0x00000007, 0x00000010): DW_OP_consts +0, DW_OP_stack_value
@@ -230,6 +286,62 @@ Abbrev table for offset: 0x00000000
DW_AT_low_pc [DW_FORM_addr] (0x0000000000000002)
DW_AT_high_pc [DW_FORM_data4] (0x00000035)
+0x00000026: DW_TAG_subprogram [2] *
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000002)
+ DW_AT_high_pc [DW_FORM_data4] (0x00000035)
+ DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c7] = "fib")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/binaryen/fib2.c")
+ DW_AT_decl_line [DW_FORM_data1] (2)
+ DW_AT_prototyped [DW_FORM_flag_present] (true)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x007d => {0x0000007d} "int")
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x00000039: DW_TAG_formal_parameter [3]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000cf] = "n")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/binaryen/fib2.c")
+ DW_AT_decl_line [DW_FORM_data1] (2)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x007d => {0x0000007d} "int")
+
+0x00000044: DW_TAG_variable [4]
+ DW_AT_location [DW_FORM_sec_offset] (0x00000000:
+ [0x00000009, 0x00000012): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d1] = "a")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/binaryen/fib2.c")
+ DW_AT_decl_line [DW_FORM_data1] (3)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x007d => {0x0000007d} "int")
+
+0x00000053: DW_TAG_variable [4]
+ DW_AT_location [DW_FORM_sec_offset] (0x00000015:
+ [0x00000009, 0x00000012): DW_OP_consts +1, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d3] = "b")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/binaryen/fib2.c")
+ DW_AT_decl_line [DW_FORM_data1] (3)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x007d => {0x0000007d} "int")
+
+0x00000062: DW_TAG_variable [4]
+ DW_AT_location [DW_FORM_sec_offset] (0x0000002a:
+ [0x00000009, 0x00000012): DW_OP_consts +0, DW_OP_stack_value)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d5] = "i")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/binaryen/fib2.c")
+ DW_AT_decl_line [DW_FORM_data1] (3)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x007d => {0x0000007d} "int")
+
+0x00000071: DW_TAG_variable [5]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d7] = "t")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/binaryen/fib2.c")
+ DW_AT_decl_line [DW_FORM_data1] (3)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x007d => {0x0000007d} "int")
+
+0x0000007c: NULL
+
+0x0000007d: DW_TAG_base_type [6]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000cb] = "int")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed)
+ DW_AT_byte_size [DW_FORM_data1] (0x04)
+
+0x00000084: NULL
+
.debug_loc contents:
0x00000000:
[0x00000007, 0x00000010): DW_OP_consts +0, DW_OP_stack_value
diff --git a/test/passes/multi_line_table.bin.txt b/test/passes/multi_line_table.bin.txt
new file mode 100644
index 000000000..4ff7c9418
--- /dev/null
+++ b/test/passes/multi_line_table.bin.txt
@@ -0,0 +1,431 @@
+DWARF debug info
+================
+
+Contains section .debug_info (130 bytes)
+Contains section .debug_abbrev (100 bytes)
+Contains section .debug_line (121 bytes)
+Contains section .debug_str (407 bytes)
+
+.debug_abbrev contents:
+Abbrev table for offset: 0x00000000
+[1] DW_TAG_compile_unit DW_CHILDREN_yes
+ DW_AT_producer DW_FORM_strp
+ DW_AT_language DW_FORM_data2
+ DW_AT_name DW_FORM_strp
+ DW_AT_stmt_list DW_FORM_sec_offset
+ DW_AT_comp_dir DW_FORM_strp
+ DW_AT_low_pc DW_FORM_addr
+ DW_AT_high_pc DW_FORM_data4
+
+[2] DW_TAG_subprogram DW_CHILDREN_no
+ DW_AT_low_pc DW_FORM_addr
+ DW_AT_high_pc DW_FORM_data4
+ DW_AT_name DW_FORM_strp
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+ DW_AT_type DW_FORM_ref4
+ DW_AT_external DW_FORM_flag_present
+
+[3] DW_TAG_base_type DW_CHILDREN_no
+ DW_AT_name DW_FORM_strp
+ DW_AT_encoding DW_FORM_data1
+ DW_AT_byte_size DW_FORM_data1
+
+Abbrev table for offset: 0x00000032
+[1] DW_TAG_compile_unit DW_CHILDREN_yes
+ DW_AT_producer DW_FORM_strp
+ DW_AT_language DW_FORM_data2
+ DW_AT_name DW_FORM_strp
+ DW_AT_stmt_list DW_FORM_sec_offset
+ DW_AT_comp_dir DW_FORM_strp
+ DW_AT_low_pc DW_FORM_addr
+ DW_AT_high_pc DW_FORM_data4
+
+[2] DW_TAG_subprogram DW_CHILDREN_no
+ DW_AT_low_pc DW_FORM_addr
+ DW_AT_high_pc DW_FORM_data4
+ DW_AT_name DW_FORM_strp
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+ DW_AT_type DW_FORM_ref4
+ DW_AT_external DW_FORM_flag_present
+
+[3] DW_TAG_base_type DW_CHILDREN_no
+ DW_AT_name DW_FORM_strp
+ DW_AT_encoding DW_FORM_data1
+ DW_AT_byte_size DW_FORM_data1
+
+
+.debug_info contents:
+0x00000000: Compile Unit: length = 0x0000003d version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x00000041)
+
+0x0000000b: DW_TAG_compile_unit [1] *
+ DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)")
+ DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000095] = "fourth.cpp")
+ DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000)
+ DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000a0] = "/tmp/emscripten_test_wasm0_xkAHBX")
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000000a)
+ DW_AT_high_pc [DW_FORM_data4] (0x0000000b)
+
+0x00000026: DW_TAG_subprogram [2]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000000a)
+ DW_AT_high_pc [DW_FORM_data4] (0x0000000b)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c2] = "sideg")
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm0_xkAHBX/fourth.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (1)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0039 => {0x00000039} "int")
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x00000039: DW_TAG_base_type [3]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "int")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed)
+ DW_AT_byte_size [DW_FORM_data1] (0x04)
+
+0x00000040: NULL
+0x00000041: Compile Unit: length = 0x0000003d version = 0x0004 abbr_offset = 0x0032 addr_size = 0x04 (next unit at 0x00000082)
+
+0x0000004c: DW_TAG_compile_unit [1] *
+ DW_AT_producer [DW_FORM_strp] ( .debug_str[0x000000cc] = "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)")
+ DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000161] = "third.cpp")
+ DW_AT_stmt_list [DW_FORM_sec_offset] (0x0000003d)
+ DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x0000016b] = "/tmp/emscripten_test_wasm0_xkAHBX")
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000016)
+ DW_AT_high_pc [DW_FORM_data4] (0x0000000b)
+
+0x00000067: DW_TAG_subprogram [2]
+ DW_AT_low_pc [DW_FORM_addr] (0x0000000000000016)
+ DW_AT_high_pc [DW_FORM_data4] (0x0000000b)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000018d] = "sidef")
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm0_xkAHBX/third.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (1)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0039 => {0x0000007a} "int")
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x0000007a: DW_TAG_base_type [3]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000193] = "int")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed)
+ DW_AT_byte_size [DW_FORM_data1] (0x04)
+
+0x00000081: NULL
+
+.debug_line contents:
+debug_line[0x00000000]
+Line table prologue:
+ total_length: 0x00000039
+ version: 4
+ prologue_length: 0x00000022
+ min_inst_length: 1
+max_ops_per_inst: 1
+ default_is_stmt: 1
+ line_base: -5
+ line_range: 14
+ opcode_base: 13
+standard_opcode_lengths[DW_LNS_copy] = 0
+standard_opcode_lengths[DW_LNS_advance_pc] = 1
+standard_opcode_lengths[DW_LNS_advance_line] = 1
+standard_opcode_lengths[DW_LNS_set_file] = 1
+standard_opcode_lengths[DW_LNS_set_column] = 1
+standard_opcode_lengths[DW_LNS_negate_stmt] = 0
+standard_opcode_lengths[DW_LNS_set_basic_block] = 0
+standard_opcode_lengths[DW_LNS_const_add_pc] = 0
+standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1
+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: "fourth.cpp"
+ dir_index: 0
+ mod_time: 0x00000000
+ length: 0x00000000
+0x0000002c: 00 DW_LNE_set_address (0x000000000000000a)
+0x00000033: 01 DW_LNS_copy
+ 0x000000000000000a 1 0 1 0 0 is_stmt
+
+
+0x00000034: 05 DW_LNS_set_column (26)
+0x00000036: 0a DW_LNS_set_prologue_end
+0x00000037: 74 address += 7, line += 0
+ 0x0000000000000011 1 26 1 0 0 is_stmt prologue_end
+
+0x00000038: 02 DW_LNS_advance_pc (4)
+0x0000003a: 00 DW_LNE_end_sequence
+ 0x0000000000000015 1 26 1 0 0 is_stmt end_sequence
+
+debug_line[0x0000003d]
+Line table prologue:
+ total_length: 0x00000038
+ version: 4
+ prologue_length: 0x00000021
+ min_inst_length: 1
+max_ops_per_inst: 1
+ default_is_stmt: 1
+ line_base: -5
+ line_range: 14
+ opcode_base: 13
+standard_opcode_lengths[DW_LNS_copy] = 0
+standard_opcode_lengths[DW_LNS_advance_pc] = 1
+standard_opcode_lengths[DW_LNS_advance_line] = 1
+standard_opcode_lengths[DW_LNS_set_file] = 1
+standard_opcode_lengths[DW_LNS_set_column] = 1
+standard_opcode_lengths[DW_LNS_negate_stmt] = 0
+standard_opcode_lengths[DW_LNS_set_basic_block] = 0
+standard_opcode_lengths[DW_LNS_const_add_pc] = 0
+standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1
+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: "third.cpp"
+ dir_index: 0
+ mod_time: 0x00000000
+ length: 0x00000000
+0x00000068: 00 DW_LNE_set_address (0x0000000000000016)
+0x0000006f: 01 DW_LNS_copy
+ 0x0000000000000016 1 0 1 0 0 is_stmt
+
+
+0x00000070: 05 DW_LNS_set_column (26)
+0x00000072: 0a DW_LNS_set_prologue_end
+0x00000073: 74 address += 7, line += 0
+ 0x000000000000001d 1 26 1 0 0 is_stmt prologue_end
+
+0x00000074: 02 DW_LNS_advance_pc (4)
+0x00000076: 00 DW_LNE_end_sequence
+ 0x0000000000000021 1 26 1 0 0 is_stmt end_sequence
+
+
+.debug_str contents:
+0x00000000: "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)"
+0x00000095: "fourth.cpp"
+0x000000a0: "/tmp/emscripten_test_wasm0_xkAHBX"
+0x000000c2: "sideg"
+0x000000c8: "int"
+0x000000cc: "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)"
+0x00000161: "third.cpp"
+0x0000016b: "/tmp/emscripten_test_wasm0_xkAHBX"
+0x0000018d: "sidef"
+0x00000193: "int"
+DWARF debug info
+================
+
+Contains section .debug_info (130 bytes)
+Contains section .debug_abbrev (98 bytes)
+Contains section .debug_line (113 bytes)
+Contains section .debug_str (407 bytes)
+
+.debug_abbrev contents:
+Abbrev table for offset: 0x00000000
+[1] DW_TAG_compile_unit DW_CHILDREN_yes
+ DW_AT_producer DW_FORM_strp
+ DW_AT_language DW_FORM_data2
+ DW_AT_name DW_FORM_strp
+ DW_AT_stmt_list DW_FORM_sec_offset
+ DW_AT_comp_dir DW_FORM_strp
+ DW_AT_low_pc DW_FORM_addr
+ DW_AT_high_pc DW_FORM_data4
+
+[2] DW_TAG_subprogram DW_CHILDREN_no
+ DW_AT_low_pc DW_FORM_addr
+ DW_AT_high_pc DW_FORM_data4
+ DW_AT_name DW_FORM_strp
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+ DW_AT_type DW_FORM_ref4
+ DW_AT_external DW_FORM_flag_present
+
+[3] DW_TAG_base_type DW_CHILDREN_no
+ DW_AT_name DW_FORM_strp
+ DW_AT_encoding DW_FORM_data1
+ DW_AT_byte_size DW_FORM_data1
+
+[1] DW_TAG_compile_unit DW_CHILDREN_yes
+ DW_AT_producer DW_FORM_strp
+ DW_AT_language DW_FORM_data2
+ DW_AT_name DW_FORM_strp
+ DW_AT_stmt_list DW_FORM_sec_offset
+ DW_AT_comp_dir DW_FORM_strp
+ DW_AT_low_pc DW_FORM_addr
+ DW_AT_high_pc DW_FORM_data4
+
+[2] DW_TAG_subprogram DW_CHILDREN_no
+ DW_AT_low_pc DW_FORM_addr
+ DW_AT_high_pc DW_FORM_data4
+ DW_AT_name DW_FORM_strp
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+ DW_AT_type DW_FORM_ref4
+ DW_AT_external DW_FORM_flag_present
+
+[3] DW_TAG_base_type DW_CHILDREN_no
+ DW_AT_name DW_FORM_strp
+ DW_AT_encoding DW_FORM_data1
+ DW_AT_byte_size DW_FORM_data1
+
+
+.debug_info contents:
+0x00000000: Compile Unit: length = 0x0000003d version = 0x0004 abbr_offset = 0x0000 addr_size = 0x04 (next unit at 0x00000041)
+
+0x0000000b: DW_TAG_compile_unit [1] *
+ DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)")
+ DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000095] = "fourth.cpp")
+ DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000)
+ DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000a0] = "/tmp/emscripten_test_wasm0_xkAHBX")
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000000a)
+ DW_AT_high_pc [DW_FORM_data4] (0x0000000b)
+
+0x00000026: DW_TAG_subprogram [2]
+ DW_AT_low_pc [DW_FORM_addr] (0x000000000000000a)
+ DW_AT_high_pc [DW_FORM_data4] (0x0000000b)
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c2] = "sideg")
+ DW_AT_decl_file [DW_FORM_data1] ("/tmp/emscripten_test_wasm0_xkAHBX/fourth.cpp")
+ DW_AT_decl_line [DW_FORM_data1] (1)
+ DW_AT_type [DW_FORM_ref4] (cu + 0x0039 => {0x00000039} "int")
+ DW_AT_external [DW_FORM_flag_present] (true)
+
+0x00000039: DW_TAG_base_type [3]
+ DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c8] = "int")
+ DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed)
+ DW_AT_byte_size [DW_FORM_data1] (0x04)
+
+0x00000040: NULL
+0x00000041: Compile Unit: length = 0x0000003d version = 0x0004 addr_size = 0x04 (next unit at 0x00000082)
+<compile unit can't be parsed!>
+
+
+.debug_line contents:
+debug_line[0x00000000]
+Line table prologue:
+ total_length: 0x00000035
+ version: 4
+ prologue_length: 0x00000022
+ min_inst_length: 1
+max_ops_per_inst: 1
+ default_is_stmt: 1
+ line_base: -5
+ line_range: 14
+ opcode_base: 13
+standard_opcode_lengths[DW_LNS_copy] = 0
+standard_opcode_lengths[DW_LNS_advance_pc] = 1
+standard_opcode_lengths[DW_LNS_advance_line] = 1
+standard_opcode_lengths[DW_LNS_set_file] = 1
+standard_opcode_lengths[DW_LNS_set_column] = 1
+standard_opcode_lengths[DW_LNS_negate_stmt] = 0
+standard_opcode_lengths[DW_LNS_set_basic_block] = 0
+standard_opcode_lengths[DW_LNS_const_add_pc] = 0
+standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1
+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: "fourth.cpp"
+ dir_index: 0
+ mod_time: 0x00000000
+ length: 0x00000000
+0x0000002c: 00 DW_LNE_set_address (0x0000000000000011)
+0x00000033: 05 DW_LNS_set_column (26)
+0x00000035: 0a DW_LNS_set_prologue_end
+0x00000036: 00 DW_LNE_end_sequence
+ 0x0000000000000011 1 26 1 0 0 is_stmt end_sequence
+
+debug_line[0x00000039]
+Line table prologue:
+ total_length: 0x00000034
+ version: 4
+ prologue_length: 0x00000021
+ min_inst_length: 1
+max_ops_per_inst: 1
+ default_is_stmt: 1
+ line_base: -5
+ line_range: 14
+ opcode_base: 13
+standard_opcode_lengths[DW_LNS_copy] = 0
+standard_opcode_lengths[DW_LNS_advance_pc] = 1
+standard_opcode_lengths[DW_LNS_advance_line] = 1
+standard_opcode_lengths[DW_LNS_set_file] = 1
+standard_opcode_lengths[DW_LNS_set_column] = 1
+standard_opcode_lengths[DW_LNS_negate_stmt] = 0
+standard_opcode_lengths[DW_LNS_set_basic_block] = 0
+standard_opcode_lengths[DW_LNS_const_add_pc] = 0
+standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1
+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: "third.cpp"
+ dir_index: 0
+ mod_time: 0x00000000
+ length: 0x00000000
+0x00000064: 00 DW_LNE_set_address (0x000000000000001d)
+0x0000006b: 05 DW_LNS_set_column (26)
+0x0000006d: 0a DW_LNS_set_prologue_end
+0x0000006e: 00 DW_LNE_end_sequence
+ 0x000000000000001d 1 26 1 0 0 is_stmt end_sequence
+
+
+.debug_str contents:
+0x00000000: "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)"
+0x00000095: "fourth.cpp"
+0x000000a0: "/tmp/emscripten_test_wasm0_xkAHBX"
+0x000000c2: "sideg"
+0x000000c8: "int"
+0x000000cc: "clang version 10.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 7fcd9e3f70830a9c4bf631a602c2764180b5c3a8)"
+0x00000161: "third.cpp"
+0x0000016b: "/tmp/emscripten_test_wasm0_xkAHBX"
+0x0000018d: "sidef"
+0x00000193: "int"
+(module
+ (type $none_=>_none (func))
+ (type $none_=>_i32 (func (result i32)))
+ (import "env" "memory" (memory $3 0))
+ (import "env" "__indirect_function_table" (table $timport$4 0 funcref))
+ (import "env" "__stack_pointer" (global $gimport$0 (mut i32)))
+ (import "env" "__memory_base" (global $gimport$1 i32))
+ (import "env" "__table_base" (global $gimport$2 i32))
+ (global $global$0 i32 (i32.const 0))
+ (export "__wasm_call_ctors" (func $__wasm_call_ctors))
+ (export "__wasm_apply_relocs" (func $__wasm_apply_relocs))
+ (export "sideg" (func $sideg))
+ (export "sidef" (func $sidef))
+ (export "__dso_handle" (global $global$0))
+ (func $__wasm_call_ctors (; 0 ;)
+ ;; code offset: 0x3
+ (call $__wasm_apply_relocs)
+ )
+ (func $__wasm_apply_relocs (; 1 ;)
+ )
+ (func $sideg (; 2 ;) (result i32)
+ (local $0 i32)
+ ;; code offset: 0xf
+ (local.set $0
+ ;; code offset: 0xd
+ (i32.const 17)
+ )
+ ;; code offset: 0x13
+ (return
+ ;; code offset: 0x11
+ (local.get $0)
+ )
+ )
+ (func $sidef (; 3 ;) (result i32)
+ (local $0 i32)
+ ;; code offset: 0x1b
+ (local.set $0
+ ;; code offset: 0x19
+ (i32.const 36)
+ )
+ ;; code offset: 0x1f
+ (return
+ ;; code offset: 0x1d
+ (local.get $0)
+ )
+ )
+ ;; custom section "dylink", size 5
+ ;; custom section ".debug_info", size 130
+ ;; custom section ".debug_abbrev", size 98
+ ;; custom section ".debug_line", size 113
+ ;; custom section ".debug_str", size 407
+ ;; custom section "producers", size 180
+)
diff --git a/test/passes/multi_line_table.passes b/test/passes/multi_line_table.passes
new file mode 100644
index 000000000..9e52f4d0c
--- /dev/null
+++ b/test/passes/multi_line_table.passes
@@ -0,0 +1 @@
+g_dwarfdump_roundtrip_dwarfdump_all-features
diff --git a/test/passes/multi_line_table.wasm b/test/passes/multi_line_table.wasm
new file mode 100644
index 000000000..312c013da
--- /dev/null
+++ b/test/passes/multi_line_table.wasm
Binary files differ
diff --git a/third_party/llvm-project/DWARFCompileUnit.cpp b/third_party/llvm-project/DWARFCompileUnit.cpp
index f59e49268..a9791f921 100644
--- a/third_party/llvm-project/DWARFCompileUnit.cpp
+++ b/third_party/llvm-project/DWARFCompileUnit.cpp
@@ -20,9 +20,11 @@ void DWARFCompileUnit::dump(raw_ostream &OS, DIDumpOptions DumpOpts) {
<< " version = " << format("0x%04x", getVersion());
if (getVersion() >= 5)
OS << " unit_type = " << dwarf::UnitTypeString(getUnitType());
- OS << " abbr_offset = "
- << format("0x%04" PRIx64, getAbbreviations()->getOffset())
- << " addr_size = " << format("0x%02x", getAddressByteSize());
+ if (auto* Abbreviations = getAbbreviations()) { // XXX BINARYEN
+ OS << " abbr_offset = "
+ << format("0x%04" PRIx64, Abbreviations->getOffset());
+ }
+ OS << " addr_size = " << format("0x%02x", getAddressByteSize());
if (getVersion() >= 5 && getUnitType() != dwarf::DW_UT_compile)
OS << " DWO_id = " << format("0x%016" PRIx64, *getDWOId());
OS << " (next unit at " << format("0x%08" PRIx64, getNextUnitOffset())
diff --git a/third_party/llvm-project/DWARFContext.cpp b/third_party/llvm-project/DWARFContext.cpp
index da865a2c3..64c153bfa 100644
--- a/third_party/llvm-project/DWARFContext.cpp
+++ b/third_party/llvm-project/DWARFContext.cpp
@@ -1507,7 +1507,9 @@ class DWARFObjInMemory final : public DWARFObject {
public:
DWARFObjInMemory(const StringMap<std::unique_ptr<MemoryBuffer>> &Sections,
uint8_t AddrSize, bool IsLittleEndian)
- : IsLittleEndian(IsLittleEndian) {
+ : IsLittleEndian(IsLittleEndian),
+ AddressSize(4) // XXX BINARYEN
+ {
for (const auto &SecIt : Sections) {
if (StringRef *SectionData = mapSectionToMember(SecIt.first()))
*SectionData = SecIt.second->getBuffer();
diff --git a/third_party/llvm-project/DWARFDebugInfoEntry.cpp b/third_party/llvm-project/DWARFDebugInfoEntry.cpp
index 87eab34d5..2da854fe2 100644
--- a/third_party/llvm-project/DWARFDebugInfoEntry.cpp
+++ b/third_party/llvm-project/DWARFDebugInfoEntry.cpp
@@ -38,7 +38,11 @@ bool DWARFDebugInfoEntry::extractFast(const DWARFUnit &U, uint64_t *OffsetPtr,
AbbrevDecl = nullptr;
return true;
}
- AbbrevDecl = U.getAbbreviations()->getAbbreviationDeclaration(AbbrCode);
+ if (auto* Abbreviations = U.getAbbreviations()) { // XXX BINARYEN
+ AbbrevDecl = Abbreviations->getAbbreviationDeclaration(AbbrCode);
+ } else {
+ AbbrevDecl = nullptr; // XXX BINARYEN
+ }
if (nullptr == AbbrevDecl) {
// Restore the original offset.
*OffsetPtr = Offset;
diff --git a/third_party/llvm-project/DWARFEmitter.cpp b/third_party/llvm-project/DWARFEmitter.cpp
index dbaa06111..79f988498 100644
--- a/third_party/llvm-project/DWARFEmitter.cpp
+++ b/third_party/llvm-project/DWARFEmitter.cpp
@@ -221,9 +221,15 @@ static void EmitFileEntry(raw_ostream &OS, const DWARFYAML::File &File) {
encodeULEB128(File.Length, OS);
}
-void DWARFYAML::EmitDebugLine(raw_ostream &OS, const DWARFYAML::Data &DI) {
+void DWARFYAML::EmitDebugLine(raw_ostream &RealOS, const DWARFYAML::Data &DI) {
for (const auto &LineTable : DI.DebugLines) {
- writeInitialLength(LineTable.Length, OS, DI.IsLittleEndian);
+ // XXX BINARYEN We need to update each line table's length. Write to a
+ // temp stream first, then get the size from that.
+ std::string Buffer;
+ raw_string_ostream OS(Buffer);
+
+ // XXX BINARYEN writeInitialLength(LineTable.Length, OS, DI.IsLittleEndian);
+
uint64_t SizeOfPrologueLength = LineTable.Length.isDWARF64() ? 8 : 4;
writeInteger((uint16_t)LineTable.Version, OS, DI.IsLittleEndian);
writeVariableSizedInteger(LineTable.PrologueLength, SizeOfPrologueLength,
@@ -301,6 +307,14 @@ void DWARFYAML::EmitDebugLine(raw_ostream &OS, const DWARFYAML::Data &DI) {
}
}
}
+ // XXX BINARYEN Write to the actual stream, with the proper size.
+ // We assume for now that the length fits in 32 bits.
+ size_t Size = OS.str().size();
+ if (Size >= UINT32_MAX) {
+ llvm_unreachable("Table is too big");
+ }
+ writeInteger((uint32_t)Size, RealOS, DI.IsLittleEndian);
+ RealOS << OS.str();
}
}
diff --git a/third_party/llvm-project/DWARFVisitor.cpp b/third_party/llvm-project/DWARFVisitor.cpp
index ecb5967ac..35d5ccf57 100644
--- a/third_party/llvm-project/DWARFVisitor.cpp
+++ b/third_party/llvm-project/DWARFVisitor.cpp
@@ -46,6 +46,9 @@ static unsigned getRefSize(const DWARFYAML::Unit &Unit) {
template <typename T> void DWARFYAML::VisitorImpl<T>::traverseDebugInfo() {
for (auto &Unit : DebugInfo.CompileUnits) {
onStartCompileUnit(Unit);
+ if (Unit.Entries.empty()) { // XXX BINARYEN
+ continue;
+ }
auto FirstAbbrevCode = Unit.Entries[0].AbbrCode;
for (auto &Entry : Unit.Entries) {
diff --git a/third_party/llvm-project/dwarf2yaml.cpp b/third_party/llvm-project/dwarf2yaml.cpp
index bdaf1e429..7d5f2e048 100644
--- a/third_party/llvm-project/dwarf2yaml.cpp
+++ b/third_party/llvm-project/dwarf2yaml.cpp
@@ -146,7 +146,9 @@ void dumpDebugInfo(DWARFContext &DCtx, DWARFYAML::Data &Y) {
NewUnit.Version = CU->getVersion();
if(NewUnit.Version >= 5)
NewUnit.Type = (dwarf::UnitType)CU->getUnitType();
- NewUnit.AbbrOffset = CU->getAbbreviations()->getOffset();
+ if (auto* Abbreviations = CU->getAbbreviations()) { // XXX BINARYEN
+ NewUnit.AbbrOffset = Abbreviations->getOffset();
+ }
NewUnit.AddrSize = CU->getAddressByteSize();
for (auto DIE : CU->dies()) {
DWARFYAML::Entry NewEntry;