diff options
-rw-r--r-- | src/wasm/wasm-debug.cpp | 164 | ||||
-rw-r--r-- | test/passes/fannkuch3.bin.txt | 216 | ||||
-rw-r--r-- | test/passes/fannkuch3_manyopts.bin.txt | 216 | ||||
-rw-r--r-- | third_party/llvm-project/DWARFEmitter.cpp | 20 | ||||
-rw-r--r-- | third_party/llvm-project/dwarf2yaml.cpp | 29 | ||||
-rw-r--r-- | third_party/llvm-project/include/llvm/ObjectYAML/DWARFEmitter.h | 1 | ||||
-rw-r--r-- | third_party/llvm-project/include/llvm/ObjectYAML/DWARFYAML.h | 12 |
7 files changed, 395 insertions, 263 deletions
diff --git a/src/wasm/wasm-debug.cpp b/src/wasm/wasm-debug.cpp index ac1314ad6..c4d403e64 100644 --- a/src/wasm/wasm-debug.cpp +++ b/src/wasm/wasm-debug.cpp @@ -346,15 +346,15 @@ struct AddrExprMap { std::unordered_map<BinaryLocation, Expression*> startMap; std::unordered_map<BinaryLocation, Expression*> endMap; - // Some instructions have extra binary locations, like the else and end in + // Some instructions have delimiter binary locations, like the else and end in // and if. Track those separately, including their expression and their id // ("else", "end", etc.), as they are rare, and we don't want to // bloat the common case which is represented in the earlier maps. - struct ExtraInfo { + struct DelimiterInfo { Expression* expr; BinaryLocations::DelimiterId id; }; - std::unordered_map<BinaryLocation, ExtraInfo> extraMap; + std::unordered_map<BinaryLocation, DelimiterInfo> delimiterMap; // Construct the map from the binaryLocations loaded from the wasm. AddrExprMap(const Module& wasm) { @@ -384,12 +384,12 @@ struct AddrExprMap { return nullptr; } - ExtraInfo getExtra(BinaryLocation addr) const { - auto iter = extraMap.find(addr); - if (iter != extraMap.end()) { + DelimiterInfo getDelimiter(BinaryLocation addr) const { + auto iter = delimiterMap.find(addr); + if (iter != delimiterMap.end()) { return iter->second; } - return ExtraInfo{nullptr, BinaryLocations::Invalid}; + return DelimiterInfo{nullptr, BinaryLocations::Invalid}; } private: @@ -400,11 +400,13 @@ private: endMap[span.end] = expr; } - void add(Expression* expr, const BinaryLocations::DelimiterLocations& extra) { - for (Index i = 0; i < extra.size(); i++) { - if (extra[i] != 0) { - assert(extraMap.count(extra[i]) == 0); - extraMap[extra[i]] = ExtraInfo{expr, BinaryLocations::DelimiterId(i)}; + void add(Expression* expr, + const BinaryLocations::DelimiterLocations& delimiter) { + for (Index i = 0; i < delimiter.size(); i++) { + if (delimiter[i] != 0) { + assert(delimiterMap.count(delimiter[i]) == 0); + delimiterMap[delimiter[i]] = + DelimiterInfo{expr, BinaryLocations::DelimiterId(i)}; } } } @@ -472,7 +474,7 @@ struct LocationUpdater { // Updates an expression's address. If there was never an instruction at that // address, or if there was but if that instruction no longer exists, return // 0. Otherwise, return the new updated location. - BinaryLocation getNewExprAddr(BinaryLocation oldAddr) const { + BinaryLocation getNewExprStart(BinaryLocation oldAddr) const { if (auto* expr = oldExprAddrMap.getStart(oldAddr)) { auto iter = newLocations.expressions.find(expr); if (iter != newLocations.expressions.end()) { @@ -483,11 +485,11 @@ struct LocationUpdater { return 0; } - bool hasOldExprAddr(BinaryLocation oldAddr) const { + bool hasOldExprStart(BinaryLocation oldAddr) const { return oldExprAddrMap.getStart(oldAddr); } - BinaryLocation getNewExprEndAddr(BinaryLocation oldAddr) const { + BinaryLocation getNewExprEnd(BinaryLocation oldAddr) const { if (auto* expr = oldExprAddrMap.getEnd(oldAddr)) { auto iter = newLocations.expressions.find(expr); if (iter != newLocations.expressions.end()) { @@ -497,11 +499,11 @@ struct LocationUpdater { return 0; } - bool hasOldExprEndAddr(BinaryLocation oldAddr) const { + bool hasOldExprEnd(BinaryLocation oldAddr) const { return oldExprAddrMap.getEnd(oldAddr); } - BinaryLocation getNewFuncStartAddr(BinaryLocation oldAddr) const { + BinaryLocation getNewFuncStart(BinaryLocation oldAddr) const { if (auto* func = oldFuncAddrMap.getStart(oldAddr)) { // The function might have been optimized away, check. auto iter = newLocations.functions.find(func); @@ -520,11 +522,11 @@ struct LocationUpdater { return 0; } - bool hasOldFuncStartAddr(BinaryLocation oldAddr) const { + bool hasOldFuncStart(BinaryLocation oldAddr) const { return oldFuncAddrMap.getStart(oldAddr); } - BinaryLocation getNewFuncEndAddr(BinaryLocation oldAddr) const { + BinaryLocation getNewFuncEnd(BinaryLocation oldAddr) const { if (auto* func = oldFuncAddrMap.getEnd(oldAddr)) { // The function might have been optimized away, check. auto iter = newLocations.functions.find(func); @@ -544,20 +546,20 @@ struct LocationUpdater { } // Check for either the end opcode, or one past the end. - bool hasOldFuncEndAddr(BinaryLocation oldAddr) const { + bool hasOldFuncEnd(BinaryLocation oldAddr) const { return oldFuncAddrMap.getEnd(oldAddr); } // Check specifically for the end opcode. - bool hasOldFuncEndOpcodeAddr(BinaryLocation oldAddr) const { + bool hasOldFuncEndOpcode(BinaryLocation oldAddr) const { if (auto* func = oldFuncAddrMap.getEnd(oldAddr)) { return oldAddr == func->funcLocation.end - 1; } return false; } - BinaryLocation getNewExtraAddr(BinaryLocation oldAddr) const { - auto info = oldExprAddrMap.getExtra(oldAddr); + BinaryLocation getNewDelimiter(BinaryLocation oldAddr) const { + auto info = oldExprAddrMap.getDelimiter(oldAddr); if (info.expr) { auto iter = newLocations.delimiters.find(info.expr); if (iter != newLocations.delimiters.end()) { @@ -567,8 +569,33 @@ struct LocationUpdater { return 0; } - bool hasOldExtraAddr(BinaryLocation oldAddr) const { - return oldExprAddrMap.getExtra(oldAddr).expr; + bool hasOldDelimiter(BinaryLocation oldAddr) const { + return oldExprAddrMap.getDelimiter(oldAddr).expr; + } + + // getNewStart|EndAddr utilities. + // TODO: should we track the start and end of delimiters, even though they + // are just one byte? + BinaryLocation getNewStart(BinaryLocation oldStart) const { + if (hasOldExprStart(oldStart)) { + return getNewExprStart(oldStart); + } else if (hasOldFuncStart(oldStart)) { + return getNewFuncStart(oldStart); + } else if (hasOldDelimiter(oldStart)) { + return getNewDelimiter(oldStart); + } + return 0; + } + + BinaryLocation getNewEnd(BinaryLocation oldEnd) const { + if (hasOldExprEnd(oldEnd)) { + return getNewExprEnd(oldEnd); + } else if (hasOldFuncEnd(oldEnd)) { + return getNewFuncEnd(oldEnd); + } else if (hasOldDelimiter(oldEnd)) { + return getNewDelimiter(oldEnd); + } + return 0; } }; @@ -601,19 +628,19 @@ static void updateDebugLines(llvm::DWARFYAML::Data& data, // it away. BinaryLocation oldAddr = state.addr; BinaryLocation newAddr = 0; - if (locationUpdater.hasOldExprAddr(oldAddr)) { - newAddr = locationUpdater.getNewExprAddr(oldAddr); + if (locationUpdater.hasOldExprStart(oldAddr)) { + newAddr = locationUpdater.getNewExprStart(oldAddr); } // Test for a function's end address first, as LLVM output appears to // use 1-past-the-end-of-the-function as a location in that function, // and not the next (but the first byte of the next function, which is // ambiguously identical to that value, is used at least in low_pc). - else if (locationUpdater.hasOldFuncEndAddr(oldAddr)) { - newAddr = locationUpdater.getNewFuncEndAddr(oldAddr); - } else if (locationUpdater.hasOldFuncStartAddr(oldAddr)) { - newAddr = locationUpdater.getNewFuncStartAddr(oldAddr); - } else if (locationUpdater.hasOldExtraAddr(oldAddr)) { - newAddr = locationUpdater.getNewExtraAddr(oldAddr); + else if (locationUpdater.hasOldFuncEnd(oldAddr)) { + newAddr = locationUpdater.getNewFuncEnd(oldAddr); + } else if (locationUpdater.hasOldFuncStart(oldAddr)) { + newAddr = locationUpdater.getNewFuncStart(oldAddr); + } else if (locationUpdater.hasOldDelimiter(oldAddr)) { + newAddr = locationUpdater.getNewDelimiter(oldAddr); } if (newAddr) { // LLVM sometimes emits the same address more than once. We should @@ -691,10 +718,10 @@ static void updateDIE(const llvm::DWARFDebugInfoEntry& DIE, tag == llvm::dwarf::DW_TAG_inlined_subroutine || tag == llvm::dwarf::DW_TAG_lexical_block || tag == llvm::dwarf::DW_TAG_label) { - newValue = locationUpdater.getNewExprAddr(oldValue); + newValue = locationUpdater.getNewExprStart(oldValue); } else if (tag == llvm::dwarf::DW_TAG_compile_unit || tag == llvm::dwarf::DW_TAG_subprogram) { - newValue = locationUpdater.getNewFuncStartAddr(oldValue); + newValue = locationUpdater.getNewFuncStart(oldValue); } else { Fatal() << "unknown tag with low_pc " << llvm::dwarf::TagString(tag).str(); @@ -724,10 +751,10 @@ static void updateDIE(const llvm::DWARFDebugInfoEntry& DIE, tag == llvm::dwarf::DW_TAG_inlined_subroutine || tag == llvm::dwarf::DW_TAG_lexical_block || tag == llvm::dwarf::DW_TAG_label) { - newValue = locationUpdater.getNewExprEndAddr(oldValue); + newValue = locationUpdater.getNewExprEnd(oldValue); } else if (tag == llvm::dwarf::DW_TAG_compile_unit || tag == llvm::dwarf::DW_TAG_subprogram) { - newValue = locationUpdater.getNewFuncEndAddr(oldValue); + newValue = locationUpdater.getNewFuncEnd(oldValue); } else { Fatal() << "unknown tag with low_pc " << llvm::dwarf::TagString(tag).str(); @@ -777,16 +804,8 @@ static void updateRanges(llvm::DWARFYAML::Data& yaml, newEnd = 0; // If this was not an end marker, try to find what it should be updated to. if (oldStart != 0 && oldEnd != 0) { - if (locationUpdater.hasOldExprAddr(oldStart)) { - newStart = locationUpdater.getNewExprAddr(oldStart); - } else if (locationUpdater.hasOldFuncStartAddr(oldStart)) { - newStart = locationUpdater.getNewFuncStartAddr(oldStart); - } - if (locationUpdater.hasOldExprEndAddr(oldEnd)) { - newEnd = locationUpdater.getNewExprEndAddr(oldEnd); - } else if (locationUpdater.hasOldFuncEndAddr(oldEnd)) { - newEnd = locationUpdater.getNewFuncEndAddr(oldEnd); - } + newStart = locationUpdater.getNewStart(oldStart); + newEnd = locationUpdater.getNewEnd(oldEnd); if (newStart == 0 || newEnd == 0) { // This part of the range no longer has a mapping, so we must skip it. skip++; @@ -815,6 +834,55 @@ static void updateRanges(llvm::DWARFYAML::Data& yaml, } } +// A location that is ignoreable, i.e., not a special value like 0 or -1 (which +// would indicate an end or a base in .debug_loc). +static const BinaryLocation IGNOREABLE_LOCATION = 1; + +// Update the .debug_loc section. +static void updateLoc(llvm::DWARFYAML::Data& yaml, + const LocationUpdater& locationUpdater) { + // Similar to ranges, try to update the start and end. Note that here we + // can't skip since the location description is a variable number of bytes, + // so we mark no longer valid addresses as empty. + // Locations have an optional base. + BinaryLocation base = 0; + for (size_t i = 0; i < yaml.Locs.size(); i++) { + auto& loc = yaml.Locs[i]; + BinaryLocation newStart = loc.Start, newEnd = loc.End; + if (newStart == BinaryLocation(-1)) { + // This is a new base. + // Note that the base is not the address of an instruction, necessarily - + // it's just a number (seems like it could always be an instruction, but + // that's not what LLVM emits). + base = newEnd; + } else if (newStart == 0 && newEnd == 0) { + // This is an end marker, this list is done. + base = 0; + } else { + // This is a normal entry, try to find what it should be updated to. First + // de-relativize it to the base to get the absolute address, then look for + // a new address for it. + newStart = locationUpdater.getNewStart(loc.Start + base); + newEnd = locationUpdater.getNewEnd(loc.End + base); + if (newStart == 0 || newEnd == 0) { + // This part of the loc no longer has a mapping, so we must ignore it. + newStart = newEnd = IGNOREABLE_LOCATION; + } else { + // Finally, relativize it against the base. + newStart -= base; + newEnd -= base; + } + // The loc start and end markers have been preserved. However, TODO + // instructions in the middle may have moved around, making the loc no + // longer contiguous, we should check that, and possibly split/merge + // the loc. Or, we may need to have tracking in the IR for this. + } + loc.Start = newStart; + loc.End = newEnd; + // Note how the ".Location" field is unchanged. + } +} + void writeDWARFSections(Module& wasm, const BinaryLocations& newLocations) { BinaryenDWARFInfo info(wasm); @@ -832,6 +900,8 @@ void writeDWARFSections(Module& wasm, const BinaryLocations& newLocations) { updateRanges(data, locationUpdater); + updateLoc(data, locationUpdater); + // Convert to binary sections. auto newSections = EmitDebugSections(data, false /* EmitFixups for debug_info */); diff --git a/test/passes/fannkuch3.bin.txt b/test/passes/fannkuch3.bin.txt index 0d5d8a859..3381168a8 100644 --- a/test/passes/fannkuch3.bin.txt +++ b/test/passes/fannkuch3.bin.txt @@ -2559,7 +2559,7 @@ Abbrev table for offset: 0x00000000 0x000000b4: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000000: [0xffffffff, 0x00000006): - [0x00000000, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value) + [0x00000000, 0x00000030): DW_OP_consts +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014c] = "maxflips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2568,15 +2568,15 @@ Abbrev table for offset: 0x00000000 0x000000c3: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000001d: [0xffffffff, 0x00000006): - [0x00000007, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value - [0x00000052, 0x00000057): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x000000ec, 0x000000f5): DW_OP_consts +1, DW_OP_stack_value - [0x00000131, 0x0000013b): DW_OP_WASM_location 0x0 +0, 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 - [0x000002ba, 0x000002c4): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x00000302, 0x0000030f): DW_OP_consts +0, DW_OP_stack_value) + [0x00000007, 0x00000030): DW_OP_consts +0, DW_OP_stack_value + [0x00000046, 0x0000004b): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x000000dc, 0x000000e5): DW_OP_consts +1, DW_OP_stack_value + [0x00000121, 0x0000012b): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000169, 0x00000176): DW_OP_consts +0, DW_OP_stack_value + [0x00000258, 0x00000263): DW_OP_consts +0, DW_OP_stack_value + [0x00000269, 0x00000272): DW_OP_consts +1, DW_OP_stack_value + [0x000002ae, 0x000002b8): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x000002f6, 0x00000303): DW_OP_consts +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] = "i") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2585,7 +2585,7 @@ Abbrev table for offset: 0x00000000 0x000000d2: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000a5: [0xffffffff, 0x00000006): - [0x0000000e, 0x0000003c): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) + [0x0000000e, 0x00000030): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2594,7 +2594,7 @@ Abbrev table for offset: 0x00000000 0x000000e1: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000c3: [0xffffffff, 0x00000006): - [0x0000001b, 0x0000003c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) + [0x00000017, 0x00000030): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000013e] = "perm1") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) @@ -2603,7 +2603,7 @@ Abbrev table for offset: 0x00000000 0x000000f0: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000e1: [0xffffffff, 0x00000006): - [0x00000025, 0x0000003c): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) + [0x0000001d, 0x00000030): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000196] = "perm") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) @@ -2612,7 +2612,7 @@ Abbrev table for offset: 0x00000000 0x000000ff: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000ff: [0xffffffff, 0x00000006): - [0x0000002f, 0x0000003c): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) + [0x00000023, 0x00000030): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000144] = "count") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) @@ -2621,8 +2621,8 @@ Abbrev table for offset: 0x00000000 0x0000010e: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000011d: [0xffffffff, 0x00000006): - [0x000001e2, 0x000001e7): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value - [0x0000036b, 0x00000370): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) + [0x000001d2, 0x000001d7): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value + [0x0000035f, 0x00000364): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014a] = "r") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2631,12 +2631,12 @@ Abbrev table for offset: 0x00000000 0x0000011d: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000149: [0xffffffff, 0x00000006): - [0x000000cf, 0x000000e6): DW_OP_consts +0, DW_OP_stack_value - [0x000000ec, 0x000000f5): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value - [0x0000015a, 0x00000162): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value - [0x00000275, 0x0000027e): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value - [0x000002e3, 0x000002eb): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) + [0x000000c3, 0x000000d6): DW_OP_consts +0, DW_OP_stack_value + [0x000000dc, 0x000000e5): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value + [0x0000014a, 0x00000152): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000258, 0x00000263): DW_OP_consts +0, DW_OP_stack_value + [0x00000269, 0x00000272): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value + [0x000002d7, 0x000002df): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000155] = "flips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2645,8 +2645,8 @@ Abbrev table for offset: 0x00000000 0x0000012c: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000001ab: [0xffffffff, 0x00000006): - [0x000000e2, 0x000000e6): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value - [0x0000026b, 0x0000026f): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value) + [0x000000d2, 0x000000d6): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value + [0x0000025f, 0x00000263): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019b] = "k") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2655,10 +2655,10 @@ Abbrev table for offset: 0x00000000 0x0000013b: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000001d7: [0xffffffff, 0x00000006): - [0x000000fc, 0x00000100): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x00000138, 0x0000013b): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x00000285, 0x00000289): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x000002c1, 0x000002c4): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) + [0x000000ec, 0x000000f0): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000128, 0x0000012b): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000279, 0x0000027d): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x000002b5, 0x000002b8): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019d] = "j") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2667,10 +2667,10 @@ Abbrev table for offset: 0x00000000 0x0000014a: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000021f: [0xffffffff, 0x00000006): - [0x00000111, 0x0000013b): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value - [0x0000014c, 0x00000162): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x0000029a, 0x000002c4): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value - [0x000002d5, 0x000002eb): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) + [0x00000101, 0x0000012b): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value + [0x0000013c, 0x00000152): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x0000028e, 0x000002b8): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value + [0x000002c9, 0x000002df): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019f] = "tmp") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2842,7 +2842,7 @@ Abbrev table for offset: 0x00000000 0x00000269: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000267: [0xffffffff, 0x0000039f): - [0x00000032, 0x00000037): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) + [0x00000012, 0x00000017): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (153) @@ -2862,28 +2862,28 @@ Abbrev table for offset: 0x00000000 0x0000028d: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000285: [0xffffffff, 0x0000039f): - [0x0000004c, 0x00000055): DW_OP_consts +30, DW_OP_stack_value) + [0x00000025, 0x0000002e): DW_OP_consts +30, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01c3 => {0x000001c3} "showmax") 0x00000296: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000002a2: [0xffffffff, 0x0000039f): - [0x0000004c, 0x00000055): DW_OP_lit0, DW_OP_stack_value - [0x000002f8, 0x00000314): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) + [0x00000025, 0x0000002e): DW_OP_lit0, DW_OP_stack_value + [0x000002ac, 0x000002c4): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ce => {0x000001ce} "args") 0x0000029f: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000002cc: [0xffffffff, 0x0000039f): - [0x0000004c, 0x00000055): DW_OP_consts +0, DW_OP_stack_value - [0x0000008e, 0x00000093): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x00000099, 0x000000c1): DW_OP_consts +0, DW_OP_stack_value - [0x000000d7, 0x000000dc): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x000000f5, 0x000000f9): DW_OP_consts +0, DW_OP_stack_value - [0x00000127, 0x0000012c): DW_OP_WASM_location 0x0 +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) + [0x00000025, 0x0000002e): DW_OP_consts +0, DW_OP_stack_value + [0x00000063, 0x00000068): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x0000006e, 0x0000008e): DW_OP_consts +0, DW_OP_stack_value + [0x000000a4, 0x000000a9): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x000000c2, 0x000000c6): DW_OP_consts +0, DW_OP_stack_value + [0x000000ed, 0x000000f2): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x0000013a, 0x0000014a): DW_OP_consts +0, DW_OP_stack_value + [0x000001be, 0x000001cc): DW_OP_consts +0, DW_OP_stack_value + [0x00000201, 0x00000215): DW_OP_consts +0, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01d9 => {0x000001d9} "i") 0x000002a8: DW_TAG_variable [27] @@ -2892,33 +2892,33 @@ Abbrev table for offset: 0x00000000 0x000002ad: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000354: [0xffffffff, 0x0000039f): - [0x000000a8, 0x000000c1): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) + [0x00000079, 0x0000008e): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ef => {0x000001ef} "perm1") 0x000002b6: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000372: [0xffffffff, 0x0000039f): - [0x000000b2, 0x000000c1): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) + [0x0000007f, 0x0000008e): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01fa => {0x000001fa} "count") 0x000002bf: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000390: [0xffffffff, 0x0000039f): - [0x000001e6, 0x000001ed): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value - [0x000002b3, 0x000002ba): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) + [0x000001a8, 0x000001af): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value + [0x00000273, 0x0000027a): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0205 => {0x00000205} "r") 0x000002c8: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000003e8: [0xffffffff, 0x0000039f): - [0x000002d6, 0x000002e1): DW_OP_consts +0, DW_OP_stack_value - [0x0000030c, 0x00000314): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) + [0x0000028e, 0x00000299): DW_OP_consts +0, DW_OP_stack_value + [0x000002bc, 0x000002c4): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0210 => {0x00000210} "maxflips") 0x000002d1: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000413: [0xffffffff, 0x0000039f): - [0x000002f1, 0x00000314): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) + [0x000002a5, 0x000002c4): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x021b => {0x0000021b} "flips") 0x000002da: DW_TAG_label [28] @@ -2933,8 +2933,8 @@ Abbrev table for offset: 0x00000000 0x000002e8: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000003bc: [0xffffffff, 0x0000039f): - [0x0000017f, 0x00000188): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value - [0x00000248, 0x00000255): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value) + [0x00000141, 0x0000014a): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value + [0x00000208, 0x00000215): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x022e => {0x0000022e} "p0") 0x000002f1: NULL @@ -3001,120 +3001,120 @@ Abbrev table for offset: 0x00000000 .debug_loc contents: 0x00000000: [0xffffffff, 0x00000006): - [0x00000000, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value + [0x00000000, 0x00000030): DW_OP_consts +0, DW_OP_stack_value 0x0000001d: [0xffffffff, 0x00000006): - [0x00000007, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value - [0x00000052, 0x00000057): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x000000ec, 0x000000f5): DW_OP_consts +1, DW_OP_stack_value - [0x00000131, 0x0000013b): DW_OP_WASM_location 0x0 +0, 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 - [0x000002ba, 0x000002c4): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x00000302, 0x0000030f): DW_OP_consts +0, DW_OP_stack_value + [0x00000007, 0x00000030): DW_OP_consts +0, DW_OP_stack_value + [0x00000046, 0x0000004b): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x000000dc, 0x000000e5): DW_OP_consts +1, DW_OP_stack_value + [0x00000121, 0x0000012b): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000169, 0x00000176): DW_OP_consts +0, DW_OP_stack_value + [0x00000258, 0x00000263): DW_OP_consts +0, DW_OP_stack_value + [0x00000269, 0x00000272): DW_OP_consts +1, DW_OP_stack_value + [0x000002ae, 0x000002b8): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x000002f6, 0x00000303): DW_OP_consts +0, DW_OP_stack_value 0x000000a5: [0xffffffff, 0x00000006): - [0x0000000e, 0x0000003c): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value + [0x0000000e, 0x00000030): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value 0x000000c3: [0xffffffff, 0x00000006): - [0x0000001b, 0x0000003c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value + [0x00000017, 0x00000030): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x000000e1: [0xffffffff, 0x00000006): - [0x00000025, 0x0000003c): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value + [0x0000001d, 0x00000030): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value 0x000000ff: [0xffffffff, 0x00000006): - [0x0000002f, 0x0000003c): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value + [0x00000023, 0x00000030): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x0000011d: [0xffffffff, 0x00000006): - [0x000001e2, 0x000001e7): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value - [0x0000036b, 0x00000370): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value + [0x000001d2, 0x000001d7): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value + [0x0000035f, 0x00000364): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value 0x00000149: [0xffffffff, 0x00000006): - [0x000000cf, 0x000000e6): DW_OP_consts +0, DW_OP_stack_value - [0x000000ec, 0x000000f5): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value - [0x0000015a, 0x00000162): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value - [0x00000275, 0x0000027e): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value - [0x000002e3, 0x000002eb): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x000000c3, 0x000000d6): DW_OP_consts +0, DW_OP_stack_value + [0x000000dc, 0x000000e5): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value + [0x0000014a, 0x00000152): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000258, 0x00000263): DW_OP_consts +0, DW_OP_stack_value + [0x00000269, 0x00000272): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value + [0x000002d7, 0x000002df): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value 0x000001ab: [0xffffffff, 0x00000006): - [0x000000e2, 0x000000e6): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value - [0x0000026b, 0x0000026f): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value + [0x000000d2, 0x000000d6): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value + [0x0000025f, 0x00000263): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value 0x000001d7: [0xffffffff, 0x00000006): - [0x000000fc, 0x00000100): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x00000138, 0x0000013b): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x00000285, 0x00000289): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x000002c1, 0x000002c4): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x000000ec, 0x000000f0): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000128, 0x0000012b): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000279, 0x0000027d): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x000002b5, 0x000002b8): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x0000021f: [0xffffffff, 0x00000006): - [0x00000111, 0x0000013b): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value - [0x0000014c, 0x00000162): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x0000029a, 0x000002c4): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value - [0x000002d5, 0x000002eb): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000101, 0x0000012b): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value + [0x0000013c, 0x00000152): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x0000028e, 0x000002b8): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value + [0x000002c9, 0x000002df): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000267: [0xffffffff, 0x0000039f): - [0x00000032, 0x00000037): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value + [0x00000012, 0x00000017): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x00000285: [0xffffffff, 0x0000039f): - [0x0000004c, 0x00000055): DW_OP_consts +30, DW_OP_stack_value + [0x00000025, 0x0000002e): DW_OP_consts +30, DW_OP_stack_value 0x000002a2: [0xffffffff, 0x0000039f): - [0x0000004c, 0x00000055): DW_OP_lit0, DW_OP_stack_value - [0x000002f8, 0x00000314): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value + [0x00000025, 0x0000002e): DW_OP_lit0, DW_OP_stack_value + [0x000002ac, 0x000002c4): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x000002cc: [0xffffffff, 0x0000039f): - [0x0000004c, 0x00000055): DW_OP_consts +0, DW_OP_stack_value - [0x0000008e, 0x00000093): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x00000099, 0x000000c1): DW_OP_consts +0, DW_OP_stack_value - [0x000000d7, 0x000000dc): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x000000f5, 0x000000f9): DW_OP_consts +0, DW_OP_stack_value - [0x00000127, 0x0000012c): DW_OP_WASM_location 0x0 +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 + [0x00000025, 0x0000002e): DW_OP_consts +0, DW_OP_stack_value + [0x00000063, 0x00000068): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x0000006e, 0x0000008e): DW_OP_consts +0, DW_OP_stack_value + [0x000000a4, 0x000000a9): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x000000c2, 0x000000c6): DW_OP_consts +0, DW_OP_stack_value + [0x000000ed, 0x000000f2): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x0000013a, 0x0000014a): DW_OP_consts +0, DW_OP_stack_value + [0x000001be, 0x000001cc): DW_OP_consts +0, DW_OP_stack_value + [0x00000201, 0x00000215): DW_OP_consts +0, DW_OP_stack_value 0x00000354: [0xffffffff, 0x0000039f): - [0x000000a8, 0x000000c1): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000079, 0x0000008e): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000372: [0xffffffff, 0x0000039f): - [0x000000b2, 0x000000c1): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value + [0x0000007f, 0x0000008e): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value 0x00000390: [0xffffffff, 0x0000039f): - [0x000001e6, 0x000001ed): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value - [0x000002b3, 0x000002ba): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value + [0x000001a8, 0x000001af): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value + [0x00000273, 0x0000027a): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x000003bc: [0xffffffff, 0x0000039f): - [0x0000017f, 0x00000188): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value - [0x00000248, 0x00000255): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value + [0x00000141, 0x0000014a): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value + [0x00000208, 0x00000215): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value 0x000003e8: [0xffffffff, 0x0000039f): - [0x000002d6, 0x000002e1): DW_OP_consts +0, DW_OP_stack_value - [0x0000030c, 0x00000314): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x0000028e, 0x00000299): DW_OP_consts +0, DW_OP_stack_value + [0x000002bc, 0x000002c4): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value 0x00000413: [0xffffffff, 0x0000039f): - [0x000002f1, 0x00000314): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x000002a5, 0x000002c4): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value .debug_line contents: debug_line[0x00000000] diff --git a/test/passes/fannkuch3_manyopts.bin.txt b/test/passes/fannkuch3_manyopts.bin.txt index e8055b7e3..fccdccae9 100644 --- a/test/passes/fannkuch3_manyopts.bin.txt +++ b/test/passes/fannkuch3_manyopts.bin.txt @@ -2559,7 +2559,7 @@ Abbrev table for offset: 0x00000000 0x000000b4: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000000: [0xffffffff, 0x00000006): - [0x00000000, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014c] = "maxflips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2568,15 +2568,15 @@ Abbrev table for offset: 0x00000000 0x000000c3: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000001d: [0xffffffff, 0x00000006): - [0x00000007, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value - [0x00000052, 0x00000057): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x000000ec, 0x000000f5): DW_OP_consts +1, DW_OP_stack_value - [0x00000131, 0x0000013b): DW_OP_WASM_location 0x0 +0, 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 - [0x000002ba, 0x000002c4): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x00000302, 0x0000030f): DW_OP_consts +0, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +1, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +1, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000d6] = "i") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2585,7 +2585,7 @@ Abbrev table for offset: 0x00000000 0x000000d2: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000a5: [0xffffffff, 0x00000006): - [0x0000000e, 0x0000003c): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2594,7 +2594,7 @@ Abbrev table for offset: 0x00000000 0x000000e1: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000c3: [0xffffffff, 0x00000006): - [0x0000001b, 0x0000003c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000013e] = "perm1") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) @@ -2603,7 +2603,7 @@ Abbrev table for offset: 0x00000000 0x000000f0: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000e1: [0xffffffff, 0x00000006): - [0x00000025, 0x0000003c): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000196] = "perm") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) @@ -2612,7 +2612,7 @@ Abbrev table for offset: 0x00000000 0x000000ff: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000000ff: [0xffffffff, 0x00000006): - [0x0000002f, 0x0000003c): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000144] = "count") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (29) @@ -2621,8 +2621,8 @@ Abbrev table for offset: 0x00000000 0x0000010e: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000011d: [0xffffffff, 0x00000006): - [0x000001e2, 0x000001e7): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value - [0x0000036b, 0x00000370): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000014a] = "r") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2631,12 +2631,12 @@ Abbrev table for offset: 0x00000000 0x0000011d: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000149: [0xffffffff, 0x00000006): - [0x000000cf, 0x000000e6): DW_OP_consts +0, DW_OP_stack_value - [0x000000ec, 0x000000f5): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value - [0x0000015a, 0x00000162): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value - [0x00000275, 0x0000027e): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value - [0x000002e3, 0x000002eb): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000155] = "flips") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2645,8 +2645,8 @@ Abbrev table for offset: 0x00000000 0x0000012c: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000001ab: [0xffffffff, 0x00000006): - [0x000000e2, 0x000000e6): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value - [0x0000026b, 0x0000026f): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value) + [0x000000c3, 0x000000c7): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value + [0x0000023b, 0x0000023f): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019b] = "k") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2655,10 +2655,10 @@ Abbrev table for offset: 0x00000000 0x0000013b: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x000001d7: [0xffffffff, 0x00000006): - [0x000000fc, 0x00000100): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x00000138, 0x0000013b): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x00000285, 0x00000289): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x000002c1, 0x000002c4): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) + [0x000000db, 0x000000df): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000117, 0x0000011a): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000253, 0x00000257): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x0000028f, 0x00000292): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019d] = "j") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2667,10 +2667,10 @@ Abbrev table for offset: 0x00000000 0x0000014a: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x0000021f: [0xffffffff, 0x00000006): - [0x00000111, 0x0000013b): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value - [0x0000014c, 0x00000162): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x0000029a, 0x000002c4): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value - [0x000002d5, 0x000002eb): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000019f] = "tmp") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (30) @@ -2838,7 +2838,7 @@ Abbrev table for offset: 0x00000000 0x00000269: DW_TAG_variable [13] DW_AT_location [DW_FORM_sec_offset] (0x00000267: [0xffffffff, 0x0000039f): - [0x00000032, 0x00000037): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) + [0xffffffdd, 0xffffffe2): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value) DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000dc] = "n") DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/azakai/Dev/emscripten/tests/fannkuch.cpp") DW_AT_decl_line [DW_FORM_data1] (153) @@ -2858,28 +2858,28 @@ Abbrev table for offset: 0x00000000 0x0000028d: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000285: [0xffffffff, 0x0000039f): - [0x0000004c, 0x00000055): DW_OP_consts +30, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_consts +30, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01c3 => {0x000001c3} "showmax") 0x00000296: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000002a2: [0xffffffff, 0x0000039f): - [0x0000004c, 0x00000055): DW_OP_lit0, DW_OP_stack_value - [0x000002f8, 0x00000314): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_lit0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ce => {0x000001ce} "args") 0x0000029f: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000002cc: [0xffffffff, 0x0000039f): - [0x0000004c, 0x00000055): DW_OP_consts +0, DW_OP_stack_value - [0x0000008e, 0x00000093): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x00000099, 0x000000c1): DW_OP_consts +0, DW_OP_stack_value - [0x000000d7, 0x000000dc): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x000000f5, 0x000000f9): DW_OP_consts +0, DW_OP_stack_value - [0x00000127, 0x0000012c): DW_OP_WASM_location 0x0 +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) + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000089, 0x0000008d): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01d9 => {0x000001d9} "i") 0x000002a8: DW_TAG_variable [27] @@ -2888,33 +2888,33 @@ Abbrev table for offset: 0x00000000 0x000002ad: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000354: [0xffffffff, 0x0000039f): - [0x000000a8, 0x000000c1): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01ef => {0x000001ef} "perm1") 0x000002b6: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000372: [0xffffffff, 0x0000039f): - [0x000000b2, 0x000000c1): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x01fa => {0x000001fa} "count") 0x000002bf: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000390: [0xffffffff, 0x0000039f): - [0x000001e6, 0x000001ed): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value - [0x000002b3, 0x000002ba): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0205 => {0x00000205} "r") 0x000002c8: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000003e8: [0xffffffff, 0x0000039f): - [0x000002d6, 0x000002e1): DW_OP_consts +0, DW_OP_stack_value - [0x0000030c, 0x00000314): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0210 => {0x00000210} "maxflips") 0x000002d1: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x00000413: [0xffffffff, 0x0000039f): - [0x000002f1, 0x00000314): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x021b => {0x0000021b} "flips") 0x000002da: DW_TAG_label [28] @@ -2928,8 +2928,8 @@ Abbrev table for offset: 0x00000000 0x000002e8: DW_TAG_variable [26] DW_AT_location [DW_FORM_sec_offset] (0x000003bc: [0xffffffff, 0x0000039f): - [0x0000017f, 0x00000188): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value - [0x00000248, 0x00000255): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value) + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value) DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x022e => {0x0000022e} "p0") 0x000002f1: NULL @@ -2996,120 +2996,120 @@ Abbrev table for offset: 0x00000000 .debug_loc contents: 0x00000000: [0xffffffff, 0x00000006): - [0x00000000, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value 0x0000001d: [0xffffffff, 0x00000006): - [0x00000007, 0x0000003c): DW_OP_consts +0, DW_OP_stack_value - [0x00000052, 0x00000057): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x000000ec, 0x000000f5): DW_OP_consts +1, DW_OP_stack_value - [0x00000131, 0x0000013b): DW_OP_WASM_location 0x0 +0, 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 - [0x000002ba, 0x000002c4): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x00000302, 0x0000030f): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +1, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +1, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value 0x000000a5: [0xffffffff, 0x00000006): - [0x0000000e, 0x0000003c): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value 0x000000c3: [0xffffffff, 0x00000006): - [0x0000001b, 0x0000003c): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x000000e1: [0xffffffff, 0x00000006): - [0x00000025, 0x0000003c): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value 0x000000ff: [0xffffffff, 0x00000006): - [0x0000002f, 0x0000003c): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x0000011d: [0xffffffff, 0x00000006): - [0x000001e2, 0x000001e7): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value - [0x0000036b, 0x00000370): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +2, DW_OP_stack_value 0x00000149: [0xffffffff, 0x00000006): - [0x000000cf, 0x000000e6): DW_OP_consts +0, DW_OP_stack_value - [0x000000ec, 0x000000f5): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value - [0x0000015a, 0x00000162): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x00000264, 0x0000026f): DW_OP_consts +0, DW_OP_stack_value - [0x00000275, 0x0000027e): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value - [0x000002e3, 0x000002eb): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +13, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +10, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value 0x000001ab: [0xffffffff, 0x00000006): - [0x000000e2, 0x000000e6): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value - [0x0000026b, 0x0000026f): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value + [0x000000c3, 0x000000c7): DW_OP_WASM_location 0x0 +12, DW_OP_stack_value + [0x0000023b, 0x0000023f): DW_OP_WASM_location 0x0 +16, DW_OP_stack_value 0x000001d7: [0xffffffff, 0x00000006): - [0x000000fc, 0x00000100): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x00000138, 0x0000013b): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x00000285, 0x00000289): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x000002c1, 0x000002c4): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x000000db, 0x000000df): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000117, 0x0000011a): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000253, 0x00000257): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x0000028f, 0x00000292): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x0000021f: [0xffffffff, 0x00000006): - [0x00000111, 0x0000013b): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value - [0x0000014c, 0x00000162): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value - [0x0000029a, 0x000002c4): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value - [0x000002d5, 0x000002eb): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +15, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +14, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000267: [0xffffffff, 0x0000039f): - [0x00000032, 0x00000037): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value + [0xffffffdd, 0xffffffe2): DW_OP_WASM_location 0x0 +4, DW_OP_stack_value 0x00000285: [0xffffffff, 0x0000039f): - [0x0000004c, 0x00000055): DW_OP_consts +30, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +30, DW_OP_stack_value 0x000002a2: [0xffffffff, 0x0000039f): - [0x0000004c, 0x00000055): DW_OP_lit0, DW_OP_stack_value - [0x000002f8, 0x00000314): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_lit0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x000002cc: [0xffffffff, 0x0000039f): - [0x0000004c, 0x00000055): DW_OP_consts +0, DW_OP_stack_value - [0x0000008e, 0x00000093): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x00000099, 0x000000c1): DW_OP_consts +0, DW_OP_stack_value - [0x000000d7, 0x000000dc): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value - [0x000000f5, 0x000000f9): DW_OP_consts +0, DW_OP_stack_value - [0x00000127, 0x0000012c): DW_OP_WASM_location 0x0 +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 + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000089, 0x0000008d): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value 0x00000354: [0xffffffff, 0x0000039f): - [0x000000a8, 0x000000c1): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value 0x00000372: [0xffffffff, 0x0000039f): - [0x000000b2, 0x000000c1): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +5, DW_OP_stack_value 0x00000390: [0xffffffff, 0x0000039f): - [0x000001e6, 0x000001ed): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value - [0x000002b3, 0x000002ba): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +6, DW_OP_stack_value 0x000003bc: [0xffffffff, 0x0000039f): - [0x0000017f, 0x00000188): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value - [0x00000248, 0x00000255): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +8, DW_OP_stack_value 0x000003e8: [0xffffffff, 0x0000039f): - [0x000002d6, 0x000002e1): DW_OP_consts +0, DW_OP_stack_value - [0x0000030c, 0x00000314): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_consts +0, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +0, DW_OP_stack_value 0x00000413: [0xffffffff, 0x0000039f): - [0x000002f1, 0x00000314): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value + [0x00000001, 0x00000001): DW_OP_WASM_location 0x0 +1, DW_OP_stack_value .debug_line contents: debug_line[0x00000000] diff --git a/third_party/llvm-project/DWARFEmitter.cpp b/third_party/llvm-project/DWARFEmitter.cpp index b17ad83ef..8acef5bef 100644 --- a/third_party/llvm-project/DWARFEmitter.cpp +++ b/third_party/llvm-project/DWARFEmitter.cpp @@ -130,6 +130,24 @@ void DWARFYAML::EmitDebugRanges(raw_ostream &OS, const DWARFYAML::Data &DI) { } } +// XXX BINARYEN +void DWARFYAML::EmitDebugLoc(raw_ostream &OS, const DWARFYAML::Data &DI) { + for (auto Loc : DI.Locs) { + writeInteger((uint32_t)Loc.Start, OS, DI.IsLittleEndian); + writeInteger((uint32_t)Loc.End, OS, DI.IsLittleEndian); + if (Loc.Start == 0 && Loc.End == 0) { + // End of a list. + continue; + } + if (Loc.Start != -1) { + writeInteger((uint16_t)Loc.Location.size(), OS, DI.IsLittleEndian); + for (auto x : Loc.Location) { + writeInteger((uint8_t)x, OS, DI.IsLittleEndian); + } + } + } +} + void DWARFYAML::EmitPubSection(raw_ostream &OS, const DWARFYAML::PubSection &Sect, bool IsLittleEndian) { @@ -430,6 +448,8 @@ EmitDebugSections(llvm::DWARFYAML::Data &DI, bool ApplyFixups) { DebugSections); EmitDebugSectionImpl(DI, &DWARFYAML::EmitDebugRanges, "debug_ranges", DebugSections); // XXX BINARYEN + EmitDebugSectionImpl(DI, &DWARFYAML::EmitDebugLoc, "debug_loc", + DebugSections); // XXX BINARYEN return std::move(DebugSections); } } // namespace DWARFYAML diff --git a/third_party/llvm-project/dwarf2yaml.cpp b/third_party/llvm-project/dwarf2yaml.cpp index 7d5f2e048..994be5511 100644 --- a/third_party/llvm-project/dwarf2yaml.cpp +++ b/third_party/llvm-project/dwarf2yaml.cpp @@ -105,6 +105,34 @@ void dumpDebugRanges(DWARFContext &DCtx, DWARFYAML::Data &Y) { // XXX BINARYEN } } +void dumpDebugLoc(DWARFContext &DCtx, DWARFYAML::Data &Y) { // XXX BINARYEN + uint8_t savedAddressByteSize = 4; + DWARFDataExtractor locsData(DCtx.getDWARFObj(), DCtx.getDWARFObj().getLocSection(), + DCtx.isLittleEndian(), savedAddressByteSize); + uint64_t offset = 0; + DWARFDebugLoc locList; + while (locsData.isValidOffset(offset)) { + auto list = locList.parseOneLocationList(locsData, &offset); + if (!list) { + errs() << "debug_loc error\n"; + break; + } + for (auto& entry : list.get().Entries) { + DWARFYAML::Loc loc; + loc.Start = entry.Begin; + loc.End = entry.End; + for (auto x : entry.Loc) { + loc.Location.push_back(x); + } + Y.Locs.push_back(loc); + } + DWARFYAML::Loc loc; + loc.Start = 0; + loc.End = 0; + Y.Locs.push_back(loc); + } +} + void dumpPubSection(DWARFContext &DCtx, DWARFYAML::PubSection &Y, DWARFSection Section) { DWARFDataExtractor PubSectionData(DCtx.getDWARFObj(), Section, @@ -380,6 +408,7 @@ std::error_code dwarf2yaml(DWARFContext &DCtx, DWARFYAML::Data &Y) { dumpDebugStrings(DCtx, Y); dumpDebugARanges(DCtx, Y); dumpDebugRanges(DCtx, Y); // XXX BINARYEN + dumpDebugLoc(DCtx, Y); // XXX BINARYEN dumpDebugPubSections(DCtx, Y); dumpDebugInfo(DCtx, Y); dumpDebugLines(DCtx, Y); diff --git a/third_party/llvm-project/include/llvm/ObjectYAML/DWARFEmitter.h b/third_party/llvm-project/include/llvm/ObjectYAML/DWARFEmitter.h index 85bc81c60..b4d62f44d 100644 --- a/third_party/llvm-project/include/llvm/ObjectYAML/DWARFEmitter.h +++ b/third_party/llvm-project/include/llvm/ObjectYAML/DWARFEmitter.h @@ -33,6 +33,7 @@ void EmitDebugStr(raw_ostream &OS, const Data &DI); void EmitDebugAranges(raw_ostream &OS, const Data &DI); void EmitDebugRanges(raw_ostream &OS, const Data &DI); // XXX BINARYEN +void EmitDebugLoc(raw_ostream &OS, const Data &DI); // XXX BINARYEN void EmitPubSection(raw_ostream &OS, const PubSection &Sect, bool IsLittleEndian); void EmitDebugInfo(raw_ostream &OS, const Data &DI); diff --git a/third_party/llvm-project/include/llvm/ObjectYAML/DWARFYAML.h b/third_party/llvm-project/include/llvm/ObjectYAML/DWARFYAML.h index 943868b36..948418c7b 100644 --- a/third_party/llvm-project/include/llvm/ObjectYAML/DWARFYAML.h +++ b/third_party/llvm-project/include/llvm/ObjectYAML/DWARFYAML.h @@ -77,6 +77,12 @@ struct Range { uint64_t End; uint64_t SectionIndex; // XXX ? }; + +struct Loc { + uint32_t Start; + uint32_t End; + std::vector<uint8_t> Location; +}; // XXX BINARYEN --> struct PubEntry { @@ -154,6 +160,7 @@ struct Data { std::vector<StringRef> DebugStrings; std::vector<ARange> ARanges; std::vector<Range> Ranges; // XXX BINARYEN + std::vector<Loc> Locs; // XXX BINARYEN PubSection PubNames; PubSection PubTypes; @@ -175,6 +182,7 @@ LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::Abbrev) LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::ARangeDescriptor) LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::ARange) LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::Range) // XXX BINARYEN +LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::Loc) // XXX BINARYEN LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::PubEntry) LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::Unit) LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::FormValue) @@ -210,6 +218,10 @@ template <> struct MappingTraits<DWARFYAML::Range> { // XXX BINARYEN static void mapping(IO &IO, DWARFYAML::Range &Range); }; +template <> struct MappingTraits<DWARFYAML::Loc> { // XXX BINARYEN + static void mapping(IO &IO, DWARFYAML::Loc &Loc); +}; + template <> struct MappingTraits<DWARFYAML::PubEntry> { static void mapping(IO &IO, DWARFYAML::PubEntry &Entry); }; |