[Lldb-commits] [lldb] [lldb] Add DWARFExpressionEntry and GetExpressionEntryAtAddress() to … (PR #144238)

2025-06-28 Thread Abdullah Mohammad Amin via lldb-commits

https://github.com/UltimateForce21 updated 
https://github.com/llvm/llvm-project/pull/144238

>From 8ed8c540e7600d720a63bc2882a81a2c65c11d41 Mon Sep 17 00:00:00 2001
From: ultimateforce21 
Date: Wed, 11 Jun 2025 00:11:09 -0400
Subject: [PATCH 1/9] [lldb] Add DWARFExpressionEntry and
 GetExpressionEntryAtAddress() to DWARFExpressionList

This introduces a new API for retrieving DWARF expression metadata associated 
with variable location entries at a given PC address. It provides the base, 
end, and expression pointer for downstream consumers such as disassembler 
annotations.

Intended for use in richer instruction annotations in Instruction::Dump().
---
 .../lldb/Expression/DWARFExpressionList.h | 12 +++
 .../source/Expression/DWARFExpressionList.cpp | 21 +++
 2 files changed, 33 insertions(+)

diff --git a/lldb/include/lldb/Expression/DWARFExpressionList.h 
b/lldb/include/lldb/Expression/DWARFExpressionList.h
index d8f8ec247ed56..a329b37393018 100644
--- a/lldb/include/lldb/Expression/DWARFExpressionList.h
+++ b/lldb/include/lldb/Expression/DWARFExpressionList.h
@@ -59,6 +59,18 @@ class DWARFExpressionList {
 
   lldb::addr_t GetFuncFileAddress() { return m_func_file_addr; }
 
+  /// Represents an entry in the DWARFExpressionList with all needed metadata
+  struct DWARFExpressionEntry {
+lldb::addr_t base;
+lldb::addr_t end;
+const DWARFExpression *expr;
+  };
+
+  /// Returns the entry (base, end, data) for a given PC address
+  llvm::Expected
+  GetExpressionEntryAtAddress(lldb::addr_t func_load_addr,
+  lldb::addr_t load_addr) const;
+
   const DWARFExpression *GetExpressionAtAddress(lldb::addr_t func_load_addr,
 lldb::addr_t load_addr) const;
 
diff --git a/lldb/source/Expression/DWARFExpressionList.cpp 
b/lldb/source/Expression/DWARFExpressionList.cpp
index 04592a1eb7ff4..b55bc7120c4af 100644
--- a/lldb/source/Expression/DWARFExpressionList.cpp
+++ b/lldb/source/Expression/DWARFExpressionList.cpp
@@ -53,6 +53,27 @@ bool DWARFExpressionList::ContainsAddress(lldb::addr_t 
func_load_addr,
   return GetExpressionAtAddress(func_load_addr, addr) != nullptr;
 }
 
+llvm::Expected
+DWARFExpressionList::GetExpressionEntryAtAddress(lldb::addr_t func_load_addr,
+ lldb::addr_t load_addr) const 
{
+  if (const DWARFExpression *expr = GetAlwaysValidExpr()) {
+return DWARFExpressionEntry{0, LLDB_INVALID_ADDRESS, expr};
+  }
+
+  if (func_load_addr == LLDB_INVALID_ADDRESS)
+func_load_addr = m_func_file_addr;
+
+  addr_t addr = load_addr - func_load_addr + m_func_file_addr;
+  uint32_t index = m_exprs.FindEntryIndexThatContains(addr);
+  if (index == UINT32_MAX) {
+return llvm::createStringError(llvm::inconvertibleErrorCode(),
+   "No DWARF expression found for address 
0x%llx", addr);
+  }
+
+  const Entry &entry = *m_exprs.GetEntryAtIndex(index);
+  return DWARFExpressionEntry{entry.base, entry.GetRangeEnd(), &entry.data};
+}
+
 const DWARFExpression *
 DWARFExpressionList::GetExpressionAtAddress(lldb::addr_t func_load_addr,
 lldb::addr_t load_addr) const {

>From 1db5002a69dba4f88aaac56d61520b7b4b214b01 Mon Sep 17 00:00:00 2001
From: Abdullah Mohammad Amin
 <67847674+ultimateforc...@users.noreply.github.com>
Date: Thu, 19 Jun 2025 11:55:35 -0400
Subject: [PATCH 2/9] Update lldb/include/lldb/Expression/DWARFExpressionList.h

Co-authored-by: Jonas Devlieghere 
---
 lldb/include/lldb/Expression/DWARFExpressionList.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lldb/include/lldb/Expression/DWARFExpressionList.h 
b/lldb/include/lldb/Expression/DWARFExpressionList.h
index a329b37393018..89e55ffc07659 100644
--- a/lldb/include/lldb/Expression/DWARFExpressionList.h
+++ b/lldb/include/lldb/Expression/DWARFExpressionList.h
@@ -59,7 +59,7 @@ class DWARFExpressionList {
 
   lldb::addr_t GetFuncFileAddress() { return m_func_file_addr; }
 
-  /// Represents an entry in the DWARFExpressionList with all needed metadata
+  /// Represents an entry in the DWARFExpressionList with all needed metadata.
   struct DWARFExpressionEntry {
 lldb::addr_t base;
 lldb::addr_t end;

>From a26010b06e5067b8b3b223cbd76e8848ecb9a289 Mon Sep 17 00:00:00 2001
From: Abdullah Mohammad Amin
 <67847674+ultimateforc...@users.noreply.github.com>
Date: Thu, 19 Jun 2025 11:58:28 -0400
Subject: [PATCH 3/9] Update lldb/include/lldb/Expression/DWARFExpressionList.h

Updated comment for GetExpressionEntryAtAddress to directly refer to struct 
DWARFExpressionEntry

Co-authored-by: Jonas Devlieghere 
---
 lldb/include/lldb/Expression/DWARFExpressionList.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lldb/include/lldb/Expression/DWARFExpressionList.h 
b/lldb/include/lldb/Expression/DWARFExpressionList.h
index 89e55ffc07659..f6a269809decc 100644
--- a/lldb/includ

[Lldb-commits] [lldb] [llvm] [NFC][DebugInfo][DWARF] Create new low-level dwarf library (PR #145081)

2025-06-28 Thread LLVM Continuous Integration via lldb-commits

llvm-ci wrote:

LLVM Buildbot has detected a new failure on builder `flang-aarch64-latest-gcc` 
running on `linaro-flang-aarch64-latest-gcc` while building 
`bolt,lldb,llvm,utils` at step 5 "build-unified-tree".

Full details are available at: 
https://lab.llvm.org/buildbot/#/builders/130/builds/13963


Here is the relevant piece of the build log for the reference

```
Step 5 (build-unified-tree) failure: build (failure)
...
73.888 [3589/162/3756] Building CXX object 
tools/clang/lib/Basic/CMakeFiles/obj.clangBasic.dir/Targets/X86.cpp.o
73.891 [3588/162/3757] Building CXX object 
tools/clang/lib/Basic/CMakeFiles/obj.clangBasic.dir/Targets/XCore.cpp.o
73.896 [3587/162/3758] Building CXX object 
tools/clang/lib/Basic/CMakeFiles/obj.clangBasic.dir/TokenKinds.cpp.o
73.898 [3586/162/3759] Building CXX object 
tools/clang/lib/Basic/CMakeFiles/obj.clangBasic.dir/TypeTraits.cpp.o
73.901 [3585/162/3760] Building CXX object 
tools/clang/lib/Basic/CMakeFiles/obj.clangBasic.dir/XRayInstr.cpp.o
73.904 [3584/162/3761] Building CXX object 
tools/clang/lib/Basic/CMakeFiles/obj.clangBasic.dir/XRayLists.cpp.o
73.907 [3583/162/3762] Building CXX object 
tools/clang/lib/AST/CMakeFiles/obj.clangAST.dir/APValue.cpp.o
73.910 [3582/162/3763] Building CXX object 
tools/clang/lib/AST/CMakeFiles/obj.clangAST.dir/ASTConcept.cpp.o
73.916 [3581/162/3764] Building CXX object 
tools/clang/lib/AST/CMakeFiles/obj.clangAST.dir/ASTConsumer.cpp.o
73.920 [3580/162/3765] Linking CXX shared library 
lib/libLLVMDebugInfoLogicalView.so.21.0git
FAILED: lib/libLLVMDebugInfoLogicalView.so.21.0git 
: && /usr/local/bin/c++ -fPIC -fPIC -fno-semantic-interposition 
-fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra 
-Wno-unused-parameter -Wwrite-strings -Wcast-qual 
-Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough 
-Wno-maybe-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move 
-Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor 
-Wsuggest-override -Wno-comment -Wno-misleading-indentation 
-Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections 
-fdata-sections -O3 -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete   
-Wl,-rpath-link,/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/./lib 
 -Wl,--gc-sections -shared -Wl,-soname,libLLVMDebugInfoLogicalView.so.21.0git 
-o lib/libLLVMDebugInfoLogicalView.so.21.0git 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVCompare.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVElement.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVLine.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVLocation.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVObject.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVOptions.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVRange.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVReader.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVScope.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVSort.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVSourceLanguage.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVSupport.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVSymbol.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVType.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/LVReaderHandler.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVBinaryReader.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVCodeViewReader.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVCodeViewVisitor.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVDWARFReader.cpp.o
  
-Wl,-rpath,"\$ORIGIN/../lib:/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/lib:"
  lib/libLLVMDebugInfoDWARF.so.21.0git  lib/libLLVMDebugInfoPDB.so.21.0git  
lib/libLLVMObject.so.21.0git  lib/libLLVMMC.so.21.0git  
lib/libLLVMBinaryFormat.so.21.0git  lib/libLLVMTargetParser.so.21.0git  
lib/libLLVMDebugInfoCodeView.so.21.0git  lib/libLLVMSupport.so.21.0git  
lib/libLLVMDemangle.so.21.0git  
-Wl,-rpath-link,/home/tcwg-buildbot/worker/flang-aarch64-latest-gcc/build/lib 
&& :
/usr/bin/ld: 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVDWARFReader.cpp.o:
 in function `bool llvm::function_ref::callback_fn(long, 
llvm::DWARFLocationEntry const&)':
LVDWARFReader.cpp:(.text._ZN4llvm12function_refIFbRKNS_18DWARFLocationEntryEEE11callback_fnIZNS_11logicalview13LVDWARFReader19processLocationListENS_5dwarf9AttributeERKNS_14DWARFFormValueERKNS_8DWARFDieEmb

[Lldb-commits] [lldb] [llvm] [NFC][DebugInfo][DWARF] Create new low-level dwarf library (PR #145081)

2025-06-28 Thread LLVM Continuous Integration via lldb-commits

llvm-ci wrote:

LLVM Buildbot has detected a new failure on builder 
`polly-x86_64-linux-shared-plugin` running on `polly-x86_64-gce2` while 
building `bolt,lldb,llvm,utils` at step 5 "build".

Full details are available at: 
https://lab.llvm.org/buildbot/#/builders/118/builds/7126


Here is the relevant piece of the build log for the reference

```
Step 5 (build) failure: 'ninja' (failure)
...
[2091/4442] Creating library symlink lib/libLLVMObjCopy.so
[2092/4442] Linking CXX shared library lib/libLLVMObjectYAML.so.21.0git
[2093/4442] Creating library symlink lib/libLLVMObjectYAML.so
[2094/4442] Linking CXX shared library lib/libLLVMDebugInfoDWARF.so.21.0git
[2095/4442] Creating library symlink lib/libLLVMDebugInfoDWARF.so
[2096/4442] Linking CXX shared library lib/libLLVMDebugInfoGSYM.so.21.0git
[2097/4442] Creating library symlink lib/libLLVMDebugInfoGSYM.so
[2098/4442] Linking CXX shared library lib/libLLVMDebugInfoPDB.so.21.0git
[2099/4442] Creating library symlink lib/libLLVMDebugInfoPDB.so
[2100/4442] Linking CXX shared library 
lib/libLLVMDebugInfoLogicalView.so.21.0git
FAILED: lib/libLLVMDebugInfoLogicalView.so.21.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition 
-fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra 
-Wno-unused-parameter -Wwrite-strings -Wcast-qual 
-Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough 
-Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move 
-Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor 
-Wsuggest-override -Wno-comment -Wno-misleading-indentation 
-Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections 
-fdata-sections -O3 -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete -fuse-ld=lld 
-Wl,--color-diagnostics   -Wl,--gc-sections -shared 
-Wl,-soname,libLLVMDebugInfoLogicalView.so.21.0git -o 
lib/libLLVMDebugInfoLogicalView.so.21.0git 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVCompare.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVElement.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVLine.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVLocation.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVObject.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVOptions.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVRange.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVReader.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVScope.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVSort.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVSourceLanguage.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVSupport.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVSymbol.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVType.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/LVReaderHandler.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVBinaryReader.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVCodeViewReader.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVCodeViewVisitor.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVDWARFReader.cpp.o
  
-Wl,-rpath,"\$ORIGIN/../lib:/home/worker/buildbot-workers/polly-x86_64-gce2/rundir/llvm.obj/lib:"
  lib/libLLVMDebugInfoDWARF.so.21.0git  lib/libLLVMDebugInfoPDB.so.21.0git  
lib/libLLVMObject.so.21.0git  lib/libLLVMMC.so.21.0git  
lib/libLLVMBinaryFormat.so.21.0git  lib/libLLVMTargetParser.so.21.0git  
lib/libLLVMDebugInfoCodeView.so.21.0git  lib/libLLVMSupport.so.21.0git  
lib/libLLVMDemangle.so.21.0git  
-Wl,-rpath-link,/home/worker/buildbot-workers/polly-x86_64-gce2/rundir/llvm.obj/lib
 && :
ld.lld: error: undefined symbol: 
llvm::DWARFExpression::Operation::extract(llvm::DataExtractor, unsigned char, 
unsigned long, std::optional)
>>> referenced by LVDWARFReader.cpp
>>>   
>>> lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVDWARFReader.cpp.o:(bool
>>>  llvm::function_ref>> const&)>::callback_fn>>  llvm::DWARFFormValue const&, llvm::DWARFDie const&, unsigned long, 
>>> bool)::'lambda1'(llvm::DWARFLocationEntry const&)>(long, 
>>> llvm::DWARFLocationEntry const&))
>>> referenced by LVDWARFReader.cpp
>>>   
>>> lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVDWARFReader.cpp.o:(bool
>>>  llvm::function_ref>> const&)>::callback_fn>>  llvm::DWARFFormValue const&, llvm::DWARFDie const&, unsigned long, 
>>> bool)::'lambda1'(llvm::DWARFLocationEntry const&)>(long, 
>>> llvm::DWARFLocationE

[Lldb-commits] [lldb] [llvm] [NFC][DebugInfo][DWARF] Create new low-level dwarf library (PR #145081)

2025-06-28 Thread LLVM Continuous Integration via lldb-commits

llvm-ci wrote:

LLVM Buildbot has detected a new failure on builder `polly-x86_64-linux-shared` 
running on `polly-x86_64-gce2` while building `bolt,lldb,llvm,utils` at step 5 
"build".

Full details are available at: 
https://lab.llvm.org/buildbot/#/builders/97/builds/7490


Here is the relevant piece of the build log for the reference

```
Step 5 (build) failure: 'ninja' (failure)
...
[1999/4442] Creating library symlink lib/libLLVMObjCopy.so
[2000/4442] Linking CXX shared library lib/libLLVMObjectYAML.so.21.0git
[2001/4442] Creating library symlink lib/libLLVMObjectYAML.so
[2002/4442] Linking CXX shared library lib/libLLVMDebugInfoDWARF.so.21.0git
[2003/4442] Creating library symlink lib/libLLVMDebugInfoDWARF.so
[2004/4442] Linking CXX shared library lib/libLLVMDebugInfoPDB.so.21.0git
[2005/4442] Creating library symlink lib/libLLVMDebugInfoPDB.so
[2006/4442] Linking CXX shared library lib/libLLVMDebugInfoGSYM.so.21.0git
[2007/4442] Creating library symlink lib/libLLVMDebugInfoGSYM.so
[2008/4442] Linking CXX shared library 
lib/libLLVMDebugInfoLogicalView.so.21.0git
FAILED: lib/libLLVMDebugInfoLogicalView.so.21.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition 
-fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra 
-Wno-unused-parameter -Wwrite-strings -Wcast-qual 
-Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough 
-Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move 
-Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor 
-Wsuggest-override -Wno-comment -Wno-misleading-indentation 
-Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections 
-fdata-sections -O3 -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete -fuse-ld=lld 
-Wl,--color-diagnostics   -Wl,--gc-sections -shared 
-Wl,-soname,libLLVMDebugInfoLogicalView.so.21.0git -o 
lib/libLLVMDebugInfoLogicalView.so.21.0git 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVCompare.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVElement.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVLine.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVLocation.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVObject.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVOptions.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVRange.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVReader.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVScope.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVSort.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVSourceLanguage.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVSupport.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVSymbol.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Core/LVType.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/LVReaderHandler.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVBinaryReader.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVCodeViewReader.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVCodeViewVisitor.cpp.o
 
lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVDWARFReader.cpp.o
  
-Wl,-rpath,"\$ORIGIN/../lib:/home/worker/buildbot-workers/polly-x86_64-gce2/rundir/llvm.obj/lib:"
  lib/libLLVMDebugInfoDWARF.so.21.0git  lib/libLLVMDebugInfoPDB.so.21.0git  
lib/libLLVMObject.so.21.0git  lib/libLLVMMC.so.21.0git  
lib/libLLVMBinaryFormat.so.21.0git  lib/libLLVMTargetParser.so.21.0git  
lib/libLLVMDebugInfoCodeView.so.21.0git  lib/libLLVMSupport.so.21.0git  
lib/libLLVMDemangle.so.21.0git  
-Wl,-rpath-link,/home/worker/buildbot-workers/polly-x86_64-gce2/rundir/llvm.obj/lib
 && :
ld.lld: error: undefined symbol: 
llvm::DWARFExpression::Operation::extract(llvm::DataExtractor, unsigned char, 
unsigned long, std::optional)
>>> referenced by LVDWARFReader.cpp
>>>   
>>> lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVDWARFReader.cpp.o:(bool
>>>  llvm::function_ref>> const&)>::callback_fn>>  llvm::DWARFFormValue const&, llvm::DWARFDie const&, unsigned long, 
>>> bool)::'lambda1'(llvm::DWARFLocationEntry const&)>(long, 
>>> llvm::DWARFLocationEntry const&))
>>> referenced by LVDWARFReader.cpp
>>>   
>>> lib/DebugInfo/LogicalView/CMakeFiles/LLVMDebugInfoLogicalView.dir/Readers/LVDWARFReader.cpp.o:(bool
>>>  llvm::function_ref>> const&)>::callback_fn>>  llvm::DWARFFormValue const&, llvm::DWARFDie const&, unsigned long, 
>>> bool)::'lambda1'(llvm::DWARFLocationEntry const&)>(long, 
>>> llvm::DWARFLocationEntry con

[Lldb-commits] [lldb] [lldb] Add DWARFExpressionEntry and GetExpressionEntryAtAddress() to … (PR #144238)

2025-06-28 Thread Abdullah Mohammad Amin via lldb-commits

https://github.com/UltimateForce21 updated 
https://github.com/llvm/llvm-project/pull/144238

>From 8ed8c540e7600d720a63bc2882a81a2c65c11d41 Mon Sep 17 00:00:00 2001
From: ultimateforce21 
Date: Wed, 11 Jun 2025 00:11:09 -0400
Subject: [PATCH 1/7] [lldb] Add DWARFExpressionEntry and
 GetExpressionEntryAtAddress() to DWARFExpressionList

This introduces a new API for retrieving DWARF expression metadata associated 
with variable location entries at a given PC address. It provides the base, 
end, and expression pointer for downstream consumers such as disassembler 
annotations.

Intended for use in richer instruction annotations in Instruction::Dump().
---
 .../lldb/Expression/DWARFExpressionList.h | 12 +++
 .../source/Expression/DWARFExpressionList.cpp | 21 +++
 2 files changed, 33 insertions(+)

diff --git a/lldb/include/lldb/Expression/DWARFExpressionList.h 
b/lldb/include/lldb/Expression/DWARFExpressionList.h
index d8f8ec247ed56..a329b37393018 100644
--- a/lldb/include/lldb/Expression/DWARFExpressionList.h
+++ b/lldb/include/lldb/Expression/DWARFExpressionList.h
@@ -59,6 +59,18 @@ class DWARFExpressionList {
 
   lldb::addr_t GetFuncFileAddress() { return m_func_file_addr; }
 
+  /// Represents an entry in the DWARFExpressionList with all needed metadata
+  struct DWARFExpressionEntry {
+lldb::addr_t base;
+lldb::addr_t end;
+const DWARFExpression *expr;
+  };
+
+  /// Returns the entry (base, end, data) for a given PC address
+  llvm::Expected
+  GetExpressionEntryAtAddress(lldb::addr_t func_load_addr,
+  lldb::addr_t load_addr) const;
+
   const DWARFExpression *GetExpressionAtAddress(lldb::addr_t func_load_addr,
 lldb::addr_t load_addr) const;
 
diff --git a/lldb/source/Expression/DWARFExpressionList.cpp 
b/lldb/source/Expression/DWARFExpressionList.cpp
index 04592a1eb7ff4..b55bc7120c4af 100644
--- a/lldb/source/Expression/DWARFExpressionList.cpp
+++ b/lldb/source/Expression/DWARFExpressionList.cpp
@@ -53,6 +53,27 @@ bool DWARFExpressionList::ContainsAddress(lldb::addr_t 
func_load_addr,
   return GetExpressionAtAddress(func_load_addr, addr) != nullptr;
 }
 
+llvm::Expected
+DWARFExpressionList::GetExpressionEntryAtAddress(lldb::addr_t func_load_addr,
+ lldb::addr_t load_addr) const 
{
+  if (const DWARFExpression *expr = GetAlwaysValidExpr()) {
+return DWARFExpressionEntry{0, LLDB_INVALID_ADDRESS, expr};
+  }
+
+  if (func_load_addr == LLDB_INVALID_ADDRESS)
+func_load_addr = m_func_file_addr;
+
+  addr_t addr = load_addr - func_load_addr + m_func_file_addr;
+  uint32_t index = m_exprs.FindEntryIndexThatContains(addr);
+  if (index == UINT32_MAX) {
+return llvm::createStringError(llvm::inconvertibleErrorCode(),
+   "No DWARF expression found for address 
0x%llx", addr);
+  }
+
+  const Entry &entry = *m_exprs.GetEntryAtIndex(index);
+  return DWARFExpressionEntry{entry.base, entry.GetRangeEnd(), &entry.data};
+}
+
 const DWARFExpression *
 DWARFExpressionList::GetExpressionAtAddress(lldb::addr_t func_load_addr,
 lldb::addr_t load_addr) const {

>From 1db5002a69dba4f88aaac56d61520b7b4b214b01 Mon Sep 17 00:00:00 2001
From: Abdullah Mohammad Amin
 <67847674+ultimateforc...@users.noreply.github.com>
Date: Thu, 19 Jun 2025 11:55:35 -0400
Subject: [PATCH 2/7] Update lldb/include/lldb/Expression/DWARFExpressionList.h

Co-authored-by: Jonas Devlieghere 
---
 lldb/include/lldb/Expression/DWARFExpressionList.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lldb/include/lldb/Expression/DWARFExpressionList.h 
b/lldb/include/lldb/Expression/DWARFExpressionList.h
index a329b37393018..89e55ffc07659 100644
--- a/lldb/include/lldb/Expression/DWARFExpressionList.h
+++ b/lldb/include/lldb/Expression/DWARFExpressionList.h
@@ -59,7 +59,7 @@ class DWARFExpressionList {
 
   lldb::addr_t GetFuncFileAddress() { return m_func_file_addr; }
 
-  /// Represents an entry in the DWARFExpressionList with all needed metadata
+  /// Represents an entry in the DWARFExpressionList with all needed metadata.
   struct DWARFExpressionEntry {
 lldb::addr_t base;
 lldb::addr_t end;

>From a26010b06e5067b8b3b223cbd76e8848ecb9a289 Mon Sep 17 00:00:00 2001
From: Abdullah Mohammad Amin
 <67847674+ultimateforc...@users.noreply.github.com>
Date: Thu, 19 Jun 2025 11:58:28 -0400
Subject: [PATCH 3/7] Update lldb/include/lldb/Expression/DWARFExpressionList.h

Updated comment for GetExpressionEntryAtAddress to directly refer to struct 
DWARFExpressionEntry

Co-authored-by: Jonas Devlieghere 
---
 lldb/include/lldb/Expression/DWARFExpressionList.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lldb/include/lldb/Expression/DWARFExpressionList.h 
b/lldb/include/lldb/Expression/DWARFExpressionList.h
index 89e55ffc07659..f6a269809decc 100644
--- a/lldb/includ

[Lldb-commits] [lldb] [lldb] Add DWARFExpressionEntry and GetExpressionEntryAtAddress() to … (PR #144238)

2025-06-28 Thread Abdullah Mohammad Amin via lldb-commits


@@ -53,6 +54,29 @@ bool DWARFExpressionList::ContainsAddress(lldb::addr_t 
func_load_addr,
   return GetExpressionAtAddress(func_load_addr, addr) != nullptr;
 }
 
+llvm::Expected
+DWARFExpressionList::GetExpressionEntryAtAddress(lldb::addr_t func_load_addr,
+lldb::addr_t load_addr) const {
+  if (const DWARFExpression *always = GetAlwaysValidExpr()) {
+AddressRange full_range(m_func_file_addr, /*size=*/LLDB_INVALID_ADDRESS);
+return DWARFExpressionEntry{full_range, always};
+  }
+
+  if (func_load_addr == LLDB_INVALID_ADDRESS)
+func_load_addr = m_func_file_addr;
+  lldb::addr_t file_pc = load_addr - func_load_addr + m_func_file_addr;
+
+  uint32_t idx = m_exprs.FindEntryIndexThatContains(file_pc);

UltimateForce21 wrote:

for sure, seems like it would be easier for implementation, i was just 
following the same logic, as 
```
const DWARFExpression *
DWARFExpressionList::GetExpressionAtAddress(lldb::addr_t func_load_addr,
lldb::addr_t load_addr) const
```

will update to use `const Entry *FindEntryThatContains(B addr) const ()` instead

https://github.com/llvm/llvm-project/pull/144238
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] Add DWARFExpressionEntry and GetExpressionEntryAtAddress() to … (PR #144238)

2025-06-28 Thread Abdullah Mohammad Amin via lldb-commits

https://github.com/UltimateForce21 edited 
https://github.com/llvm/llvm-project/pull/144238
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] Add DWARFExpressionEntry and GetExpressionEntryAtAddress() to … (PR #144238)

2025-06-28 Thread Abdullah Mohammad Amin via lldb-commits

https://github.com/UltimateForce21 edited 
https://github.com/llvm/llvm-project/pull/144238
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] Add DWARFExpressionEntry and GetExpressionEntryAtAddress() to … (PR #144238)

2025-06-28 Thread Abdullah Mohammad Amin via lldb-commits

https://github.com/UltimateForce21 updated 
https://github.com/llvm/llvm-project/pull/144238

>From 8ed8c540e7600d720a63bc2882a81a2c65c11d41 Mon Sep 17 00:00:00 2001
From: ultimateforce21 
Date: Wed, 11 Jun 2025 00:11:09 -0400
Subject: [PATCH 1/8] [lldb] Add DWARFExpressionEntry and
 GetExpressionEntryAtAddress() to DWARFExpressionList

This introduces a new API for retrieving DWARF expression metadata associated 
with variable location entries at a given PC address. It provides the base, 
end, and expression pointer for downstream consumers such as disassembler 
annotations.

Intended for use in richer instruction annotations in Instruction::Dump().
---
 .../lldb/Expression/DWARFExpressionList.h | 12 +++
 .../source/Expression/DWARFExpressionList.cpp | 21 +++
 2 files changed, 33 insertions(+)

diff --git a/lldb/include/lldb/Expression/DWARFExpressionList.h 
b/lldb/include/lldb/Expression/DWARFExpressionList.h
index d8f8ec247ed56..a329b37393018 100644
--- a/lldb/include/lldb/Expression/DWARFExpressionList.h
+++ b/lldb/include/lldb/Expression/DWARFExpressionList.h
@@ -59,6 +59,18 @@ class DWARFExpressionList {
 
   lldb::addr_t GetFuncFileAddress() { return m_func_file_addr; }
 
+  /// Represents an entry in the DWARFExpressionList with all needed metadata
+  struct DWARFExpressionEntry {
+lldb::addr_t base;
+lldb::addr_t end;
+const DWARFExpression *expr;
+  };
+
+  /// Returns the entry (base, end, data) for a given PC address
+  llvm::Expected
+  GetExpressionEntryAtAddress(lldb::addr_t func_load_addr,
+  lldb::addr_t load_addr) const;
+
   const DWARFExpression *GetExpressionAtAddress(lldb::addr_t func_load_addr,
 lldb::addr_t load_addr) const;
 
diff --git a/lldb/source/Expression/DWARFExpressionList.cpp 
b/lldb/source/Expression/DWARFExpressionList.cpp
index 04592a1eb7ff4..b55bc7120c4af 100644
--- a/lldb/source/Expression/DWARFExpressionList.cpp
+++ b/lldb/source/Expression/DWARFExpressionList.cpp
@@ -53,6 +53,27 @@ bool DWARFExpressionList::ContainsAddress(lldb::addr_t 
func_load_addr,
   return GetExpressionAtAddress(func_load_addr, addr) != nullptr;
 }
 
+llvm::Expected
+DWARFExpressionList::GetExpressionEntryAtAddress(lldb::addr_t func_load_addr,
+ lldb::addr_t load_addr) const 
{
+  if (const DWARFExpression *expr = GetAlwaysValidExpr()) {
+return DWARFExpressionEntry{0, LLDB_INVALID_ADDRESS, expr};
+  }
+
+  if (func_load_addr == LLDB_INVALID_ADDRESS)
+func_load_addr = m_func_file_addr;
+
+  addr_t addr = load_addr - func_load_addr + m_func_file_addr;
+  uint32_t index = m_exprs.FindEntryIndexThatContains(addr);
+  if (index == UINT32_MAX) {
+return llvm::createStringError(llvm::inconvertibleErrorCode(),
+   "No DWARF expression found for address 
0x%llx", addr);
+  }
+
+  const Entry &entry = *m_exprs.GetEntryAtIndex(index);
+  return DWARFExpressionEntry{entry.base, entry.GetRangeEnd(), &entry.data};
+}
+
 const DWARFExpression *
 DWARFExpressionList::GetExpressionAtAddress(lldb::addr_t func_load_addr,
 lldb::addr_t load_addr) const {

>From 1db5002a69dba4f88aaac56d61520b7b4b214b01 Mon Sep 17 00:00:00 2001
From: Abdullah Mohammad Amin
 <67847674+ultimateforc...@users.noreply.github.com>
Date: Thu, 19 Jun 2025 11:55:35 -0400
Subject: [PATCH 2/8] Update lldb/include/lldb/Expression/DWARFExpressionList.h

Co-authored-by: Jonas Devlieghere 
---
 lldb/include/lldb/Expression/DWARFExpressionList.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lldb/include/lldb/Expression/DWARFExpressionList.h 
b/lldb/include/lldb/Expression/DWARFExpressionList.h
index a329b37393018..89e55ffc07659 100644
--- a/lldb/include/lldb/Expression/DWARFExpressionList.h
+++ b/lldb/include/lldb/Expression/DWARFExpressionList.h
@@ -59,7 +59,7 @@ class DWARFExpressionList {
 
   lldb::addr_t GetFuncFileAddress() { return m_func_file_addr; }
 
-  /// Represents an entry in the DWARFExpressionList with all needed metadata
+  /// Represents an entry in the DWARFExpressionList with all needed metadata.
   struct DWARFExpressionEntry {
 lldb::addr_t base;
 lldb::addr_t end;

>From a26010b06e5067b8b3b223cbd76e8848ecb9a289 Mon Sep 17 00:00:00 2001
From: Abdullah Mohammad Amin
 <67847674+ultimateforc...@users.noreply.github.com>
Date: Thu, 19 Jun 2025 11:58:28 -0400
Subject: [PATCH 3/8] Update lldb/include/lldb/Expression/DWARFExpressionList.h

Updated comment for GetExpressionEntryAtAddress to directly refer to struct 
DWARFExpressionEntry

Co-authored-by: Jonas Devlieghere 
---
 lldb/include/lldb/Expression/DWARFExpressionList.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lldb/include/lldb/Expression/DWARFExpressionList.h 
b/lldb/include/lldb/Expression/DWARFExpressionList.h
index 89e55ffc07659..f6a269809decc 100644
--- a/lldb/includ