summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2020-01-23 14:11:15 -0800
committerGitHub <noreply@github.com>2020-01-23 14:11:15 -0800
commita74e9cd840e70cf6350b0c0d971a4316e7c3ee9e (patch)
tree869d78e48c3b3423b37afd8890a52c430745b492
parentd6d565505076581da85e2fc5044a697a8186abf9 (diff)
downloadbinaryen-a74e9cd840e70cf6350b0c0d971a4316e7c3ee9e.tar.gz
binaryen-a74e9cd840e70cf6350b0c0d971a4316e7c3ee9e.tar.bz2
binaryen-a74e9cd840e70cf6350b0c0d971a4316e7c3ee9e.zip
DWARF: Update .debug_loc (#2616)
Add support for that section to the YAML layer, and add code to update it. The updating is slightly tricky - unlike .debug_ranges, the size of entries is not fixed. So we can't just skip entries, as the end marker is smaller than a normal entry. Instead, replace now-invalid segments with (1, 1) which is of size 0 and so should be ignored by the debugger (we can't use (0, 0) as that would be an end marker, and (-1, *) is the special base marker). In the future we probably do want to do this in a more sophisticated manner, completely rewriting the indexes into the section as well. For now though this should be enough for when binaryen does not optimize (as we don't move/reorder anything). Note that this doesn't update the location description (like where on the wasm expression stack the value is). Again, that is correct for when binaryen doesn't optimize, but for fully optimized builds we would need to track things (which would be hard!). Also clean up some code that uses "Extra" instead of "Delimiter" that was missed before, and shorten some unnecessarily long names.
-rw-r--r--src/wasm/wasm-debug.cpp164
-rw-r--r--test/passes/fannkuch3.bin.txt216
-rw-r--r--test/passes/fannkuch3_manyopts.bin.txt216
-rw-r--r--third_party/llvm-project/DWARFEmitter.cpp20
-rw-r--r--third_party/llvm-project/dwarf2yaml.cpp29
-rw-r--r--third_party/llvm-project/include/llvm/ObjectYAML/DWARFEmitter.h1
-rw-r--r--third_party/llvm-project/include/llvm/ObjectYAML/DWARFYAML.h12
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);
};