https://github.com/kuilpd created https://github.com/llvm/llvm-project/pull/117168
This commit fixes the test in so that the breakpoint is triggered correctly after `array` usage on Aarch64. Reapplies #116411 with a fix. >From b59a2114542999fa233e802cbc36500678132cb2 Mon Sep 17 00:00:00 2001 From: Ilia Kuklin <ikuk...@accesssoftek.com> Date: Thu, 14 Nov 2024 20:15:19 +0500 Subject: [PATCH 1/3] Convert file address to load address when reading memory for DW_OP_piece --- lldb/source/Expression/DWARFExpression.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/lldb/source/Expression/DWARFExpression.cpp b/lldb/source/Expression/DWARFExpression.cpp index f92f25ed342a9c..a7126b25c1cc38 100644 --- a/lldb/source/Expression/DWARFExpression.cpp +++ b/lldb/source/Expression/DWARFExpression.cpp @@ -1853,12 +1853,25 @@ llvm::Expected<Value> DWARFExpression::Evaluate( const Value::ValueType curr_piece_source_value_type = curr_piece_source_value.GetValueType(); Scalar &scalar = curr_piece_source_value.GetScalar(); - const lldb::addr_t addr = scalar.ULongLong(LLDB_INVALID_ADDRESS); + lldb::addr_t addr = scalar.ULongLong(LLDB_INVALID_ADDRESS); switch (curr_piece_source_value_type) { case Value::ValueType::Invalid: return llvm::createStringError("invalid value type"); - case Value::ValueType::LoadAddress: - case Value::ValueType::FileAddress: { + case Value::ValueType::FileAddress: + if (target) { + curr_piece_source_value.ConvertToLoadAddress(module_sp.get(), + target); + addr = scalar.ULongLong(LLDB_INVALID_ADDRESS); + } else { + return llvm::createStringError( + "unable to convert file address 0x%" PRIx64 + " to load address " + "for DW_OP_piece(%" PRIu64 "): " + "no target available", + addr, piece_byte_size); + } + [[fallthrough]]; + case Value::ValueType::LoadAddress: { if (target) { if (curr_piece.ResizeData(piece_byte_size) == piece_byte_size) { if (target->ReadMemory(addr, curr_piece.GetBuffer().GetBytes(), >From 930bac5a6b36c29fcbf3b602e5fc619b6469dfb5 Mon Sep 17 00:00:00 2001 From: Ilia Kuklin <ikuk...@accesssoftek.com> Date: Fri, 15 Nov 2024 20:42:58 +0500 Subject: [PATCH 2/3] Add a test --- .../Shell/SymbolFile/DWARF/DW_OP_piece-O3.c | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 lldb/test/Shell/SymbolFile/DWARF/DW_OP_piece-O3.c diff --git a/lldb/test/Shell/SymbolFile/DWARF/DW_OP_piece-O3.c b/lldb/test/Shell/SymbolFile/DWARF/DW_OP_piece-O3.c new file mode 100644 index 00000000000000..d31250426dc112 --- /dev/null +++ b/lldb/test/Shell/SymbolFile/DWARF/DW_OP_piece-O3.c @@ -0,0 +1,23 @@ +// Check that optimized with -O3 values that have a file address can be read +// DWARF info: +// 0x00000023: DW_TAG_variable +// DW_AT_name ("array") +// DW_AT_type (0x00000032 "char[5]") +// DW_AT_location (DW_OP_piece 0x2, DW_OP_addrx 0x0, DW_OP_piece 0x1) + +// RUN: %clang_host -O3 -gdwarf %s -o %t +// RUN: %lldb %t \ +// RUN: -o "b 22" \ +// RUN: -o "r" \ +// RUN: -o "p/x array[2]" \ +// RUN: -b | FileCheck %s +// +// CHECK: (lldb) p/x array[2] +// CHECK: (char) 0x03 + +static char array[5] = {0, 1, 2, 3, 4}; + +int main(void) { + array[2]++; + return 0; +} \ No newline at end of file >From ff7cd83f1d99215803bbc3279f93dd8cb7dd1a77 Mon Sep 17 00:00:00 2001 From: Ilia Kuklin <ikuk...@accesssoftek.com> Date: Wed, 20 Nov 2024 21:50:35 +0500 Subject: [PATCH 3/3] Move array usage to a separate function to ensure there is a breakpoint afterwards --- lldb/test/Shell/SymbolFile/DWARF/DW_OP_piece-O3.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lldb/test/Shell/SymbolFile/DWARF/DW_OP_piece-O3.c b/lldb/test/Shell/SymbolFile/DWARF/DW_OP_piece-O3.c index d31250426dc112..77ea81f30395f0 100644 --- a/lldb/test/Shell/SymbolFile/DWARF/DW_OP_piece-O3.c +++ b/lldb/test/Shell/SymbolFile/DWARF/DW_OP_piece-O3.c @@ -7,7 +7,7 @@ // RUN: %clang_host -O3 -gdwarf %s -o %t // RUN: %lldb %t \ -// RUN: -o "b 22" \ +// RUN: -o "b 25" \ // RUN: -o "r" \ // RUN: -o "p/x array[2]" \ // RUN: -b | FileCheck %s @@ -17,7 +17,10 @@ static char array[5] = {0, 1, 2, 3, 4}; +void func() __attribute__((noinline)); +void func() { ++array[2]; }; + int main(void) { - array[2]++; + func(); return 0; -} \ No newline at end of file +} _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits