summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);
};