[llvm] [llvm-debuginfo-analyzer] Add support for WebAssembly binary format. (PR #82588)

Carlos Alberto Enciso via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 12 05:23:44 PDT 2024


================
@@ -429,10 +431,14 @@ void LVELFReader::processOneAttribute(const DWARFDie &Die, LVOffset *OffsetPtr,
         CurrentHighPC = *Address;
       if (std::optional<uint64_t> Offset = FormValue.getAsUnsignedConstant())
         // High PC is an offset from LowPC.
-        CurrentHighPC = CurrentLowPC + *Offset;
+        // Don't add the WebAssembly offset if we have seen a DW_AT_low_pc.
+        CurrentHighPC =
+            (FoundLowPC ? CurrentLowPC - WasmOffset : CurrentLowPC) + *Offset;
----------------
CarlosAlbertoEnciso wrote:

When we detect the `DW_AT_low_pc`, the `CurrentLowPC` is updated to reflect the WebAssembly code section offset.
```
  case dwarf::DW_AT_low_pc:
      FoundLowPC = true;
      ...
      if (FoundLowPC) {
        ...
        // Consider the case of WebAssembly.
        CurrentLowPC += WasmOffset;
        ...
      }
      break;
```
When we detect the DW_AT_high_pc:
```
  case dwarf::DW_AT_high_pc:
        ...
        // Don't add the WebAssembly offset if we have seen a DW_AT_low_pc.
        CurrentHighPC =
            (FoundLowPC ? CurrentLowPC - WasmOffset : CurrentLowPC) + *Offset;
        ...
      // Consider the case of WebAssembly.
      CurrentHighPC += WasmOffset;
        ...
    break;
```
Basically if we have seen a `DW_AT_low_pc`, the `CurrentLowPC` is already increased by the `WasmOffset` value; so for the calculation of `CurrentHighPC` the value of `CurrentLowPC` must be the original value (no addendums).

https://github.com/llvm/llvm-project/pull/82588


More information about the llvm-commits mailing list