[all-commits] [llvm/llvm-project] 71d778: [LLDB][NativePDB] Switch to use DWARFLocationList.

Zequan Wu via All-commits all-commits at lists.llvm.org
Wed Aug 17 13:37:29 PDT 2022

  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 71d778f33e8615f525f118db351c6541b40199ab
  Author: Zequan Wu <zequanwu at google.com>
  Date:   2022-08-17 (Wed, 17 Aug 2022)

  Changed paths:
    M lldb/include/lldb/Utility/RangeMap.h
    M lldb/source/Plugins/SymbolFile/NativePDB/CodeViewRegisterMapping.cpp
    M lldb/source/Plugins/SymbolFile/NativePDB/CodeViewRegisterMapping.h
    M lldb/source/Plugins/SymbolFile/NativePDB/DWARFLocationExpression.cpp
    M lldb/source/Plugins/SymbolFile/NativePDB/DWARFLocationExpression.h
    M lldb/source/Plugins/SymbolFile/NativePDB/PdbUtil.cpp
    M lldb/source/Plugins/SymbolFile/NativePDB/PdbUtil.h
    M lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
    M lldb/test/Shell/SymbolFile/NativePDB/Inputs/local-variables-registers.lldbinit
    M lldb/test/Shell/SymbolFile/NativePDB/inline_sites.test
    M lldb/test/Shell/SymbolFile/NativePDB/local-variables-registers.s
    R lldb/test/Shell/SymbolFile/NativePDB/subfield_register_simple_type.s

  Log Message:
  [LLDB][NativePDB] Switch to use DWARFLocationList.

Before, NativePDB uses scoped range as a workaround for value range, that causes
problems (e.g. a variable's value can only have one range, but usually a
variable's value is located at different address ranges, each at different
locations, in optimized build).
This patch let NativePDB switch to DWARFLocationList so a variable's value can
be described at multiple non-overlapped address ranges and each range maps to a
Because overlapping ranges exists, here's peference when choosing ranges:
1. Always prefer whole value locations. Suppose a variable size is 8 bytes, one record is that for range [1, 5) first 4 bytes is at ecx, and another record is that for range [2, 8) the 8 bytes value is at rdx. This results: [1, 2) has first 4 bytes at ecx, [2, 8) has the whole value at rdx.
2. Always prefer the locations parsed later. Suppose first record is that for range [1, 5) value is at ecx, second record is that for range [2, 6) value is at eax. This results: [1, 2) -> ecx, [2, 6) -> eax.

Differential Revision: https://reviews.llvm.org/D130796

More information about the All-commits mailing list