diff options
-rw-r--r-- | src/wasm/wasm-debug.cpp | 66 | ||||
-rw-r--r-- | test/passes/dwarfdump.bin.txt | 11 | ||||
-rw-r--r-- | test/passes/dwarfdump_roundtrip_dwarfdump.bin.txt | 22 | ||||
-rw-r--r-- | test/passes/fannkuch3.bin.txt | 958 | ||||
-rw-r--r-- | test/passes/fannkuch3_manyopts.bin.txt | 958 | ||||
-rw-r--r-- | test/passes/fib2.bin.txt | 112 | ||||
-rw-r--r-- | test/passes/multi_line_table.bin.txt | 431 | ||||
-rw-r--r-- | test/passes/multi_line_table.passes | 1 | ||||
-rw-r--r-- | test/passes/multi_line_table.wasm | bin | 0 -> 1348 bytes | |||
-rw-r--r-- | third_party/llvm-project/DWARFCompileUnit.cpp | 8 | ||||
-rw-r--r-- | third_party/llvm-project/DWARFContext.cpp | 4 | ||||
-rw-r--r-- | third_party/llvm-project/DWARFDebugInfoEntry.cpp | 6 | ||||
-rw-r--r-- | third_party/llvm-project/DWARFEmitter.cpp | 18 | ||||
-rw-r--r-- | third_party/llvm-project/DWARFVisitor.cpp | 3 | ||||
-rw-r--r-- | third_party/llvm-project/dwarf2yaml.cpp | 4 |
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 Binary files differnew file mode 100644 index 000000000..312c013da --- /dev/null +++ b/test/passes/multi_line_table.wasm 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; |