[Lldb-commits] [PATCH] D89842: [lldb/DWARF] Add support for DW_OP_implicit_value

2020-10-29 Thread Jonas Devlieghere via Phabricator via lldb-commits
JDevlieghere accepted this revision.
JDevlieghere added a comment.
This revision is now accepted and ready to land.

LGTM


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D89842/new/

https://reviews.llvm.org/D89842

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D89842: [lldb/DWARF] Add support for DW_OP_implicit_value

2020-10-29 Thread Med Ismail Bennani via Phabricator via lldb-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGefe62b637d51: [lldb/DWARF] Add support for 
DW_OP_implicit_value (authored by mib).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D89842/new/

https://reviews.llvm.org/D89842

Files:
  lldb/source/Expression/DWARFExpression.cpp
  lldb/unittests/Expression/DWARFExpressionTest.cpp


Index: lldb/unittests/Expression/DWARFExpressionTest.cpp
===
--- lldb/unittests/Expression/DWARFExpressionTest.cpp
+++ lldb/unittests/Expression/DWARFExpressionTest.cpp
@@ -218,6 +218,14 @@
   llvm::HasValue(GetScalar(16, 0xff00, true)));
 }
 
+TEST(DWARFExpression, DW_OP_implicit_value) {
+  unsigned char bytes = 4;
+
+  EXPECT_THAT_EXPECTED(
+  Evaluate({DW_OP_implicit_value, bytes, 0x11, 0x22, 0x33, 0x44}),
+  llvm::HasValue(GetScalar(8 * bytes, 0x44332211, true)));
+}
+
 TEST(DWARFExpression, DW_OP_unknown) {
   EXPECT_THAT_EXPECTED(
   Evaluate({0xff}),
Index: lldb/source/Expression/DWARFExpression.cpp
===
--- lldb/source/Expression/DWARFExpression.cpp
+++ lldb/source/Expression/DWARFExpression.cpp
@@ -2248,6 +2248,29 @@
   }
   break;
 
+// OPCODE: DW_OP_implicit_value
+// OPERANDS: 2
+//  ULEB128  size of the value block in bytes
+//  uint8_t* block bytes encoding value in target's memory
+//  representation
+// DESCRIPTION: Value is immediately stored in block in the debug info with
+// the memory representation of the target.
+case DW_OP_implicit_value: {
+  const uint32_t len = opcodes.GetULEB128();
+  const void *data = opcodes.GetData(, len);
+
+  if (!data) {
+LLDB_LOG(log, "Evaluate_DW_OP_implicit_value: could not be read data");
+LLDB_ERRORF(error_ptr, "Could not evaluate %s.",
+DW_OP_value_to_name(op));
+return false;
+  }
+
+  Value result(data, len);
+  stack.push_back(result);
+  break;
+}
+
 // OPCODE: DW_OP_push_object_address
 // OPERANDS: none
 // DESCRIPTION: Pushes the address of the object currently being


Index: lldb/unittests/Expression/DWARFExpressionTest.cpp
===
--- lldb/unittests/Expression/DWARFExpressionTest.cpp
+++ lldb/unittests/Expression/DWARFExpressionTest.cpp
@@ -218,6 +218,14 @@
   llvm::HasValue(GetScalar(16, 0xff00, true)));
 }
 
+TEST(DWARFExpression, DW_OP_implicit_value) {
+  unsigned char bytes = 4;
+
+  EXPECT_THAT_EXPECTED(
+  Evaluate({DW_OP_implicit_value, bytes, 0x11, 0x22, 0x33, 0x44}),
+  llvm::HasValue(GetScalar(8 * bytes, 0x44332211, true)));
+}
+
 TEST(DWARFExpression, DW_OP_unknown) {
   EXPECT_THAT_EXPECTED(
   Evaluate({0xff}),
Index: lldb/source/Expression/DWARFExpression.cpp
===
--- lldb/source/Expression/DWARFExpression.cpp
+++ lldb/source/Expression/DWARFExpression.cpp
@@ -2248,6 +2248,29 @@
   }
   break;
 
+// OPCODE: DW_OP_implicit_value
+// OPERANDS: 2
+//  ULEB128  size of the value block in bytes
+//  uint8_t* block bytes encoding value in target's memory
+//  representation
+// DESCRIPTION: Value is immediately stored in block in the debug info with
+// the memory representation of the target.
+case DW_OP_implicit_value: {
+  const uint32_t len = opcodes.GetULEB128();
+  const void *data = opcodes.GetData(, len);
+
+  if (!data) {
+LLDB_LOG(log, "Evaluate_DW_OP_implicit_value: could not be read data");
+LLDB_ERRORF(error_ptr, "Could not evaluate %s.",
+DW_OP_value_to_name(op));
+return false;
+  }
+
+  Value result(data, len);
+  stack.push_back(result);
+  break;
+}
+
 // OPCODE: DW_OP_push_object_address
 // OPERANDS: none
 // DESCRIPTION: Pushes the address of the object currently being
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D89842: [lldb/DWARF] Add support for DW_OP_implicit_value

2020-10-22 Thread Pavel Labath via Phabricator via lldb-commits
labath added a comment.

In D89842#2345947 , @aprantl wrote:

> Perhaps the test fits in here 
> https://github.com/llvm/llvm-project/blob/master/lldb/unittests/Expression/DWARFExpressionTest.cpp
>  ?

Yes, that's even better. :)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D89842/new/

https://reviews.llvm.org/D89842

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D89842: [lldb/DWARF] Add support for DW_OP_implicit_value

2020-10-22 Thread Adrian Prantl via Phabricator via lldb-commits
aprantl added a comment.

Perhaps the test fits in here 
https://github.com/llvm/llvm-project/blob/master/lldb/unittests/Expression/DWARFExpressionTest.cpp
 ?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D89842/new/

https://reviews.llvm.org/D89842

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D89842: [lldb/DWARF] Add support for DW_OP_implicit_value

2020-10-22 Thread Pavel Labath via Phabricator via lldb-commits
labath added a comment.

The code looks pretty straight-forward, but I believe the test should be 
asm-based with hardcoded dwarf (if you're feeling adventurous, you can also try 
yaml). My reasons for that are:

- it makes it guarantees (and makes it explicit) the input that is being tested
- the test can run on any platform (if done right -- no launching of processes)
- it enables us to test the error scenario where we fail to read the 
DW_OP_implicit_value data.

I think the simplest way to produce such a test would be to take 
`DW_TAG_variable-DW_AT_const_value.s` and exchange DW_AT_const_value for 
DW_AT_location/DW_FORM_exprloc




Comment at: lldb/source/Expression/DWARFExpression.cpp:856-867
+  const uint32_t len = opcodes.GetULEB128(_offset);
+  const void *data = opcodes.GetData(_offset, len);
+
+  if (!data) {
+LLDB_LOG(log, "Evaluate_DW_OP_implicit_value: could not be read data");
+return false;
+  }

I'm not sure this function is really complex enough to justify its existence. 
The actual code is pretty short and most of it is just argument lists and 
logging. I don't think the logging is very useful as the caller logs already, 
and the argument lists would go away if this were inlined.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D89842/new/

https://reviews.llvm.org/D89842

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D89842: [lldb/DWARF] Add support for DW_OP_implicit_value

2020-10-22 Thread Med Ismail Bennani via Phabricator via lldb-commits
mib updated this revision to Diff 299941.
mib edited the summary of this revision.
mib added a comment.

Change shell test for unit test.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D89842/new/

https://reviews.llvm.org/D89842

Files:
  lldb/source/Expression/DWARFExpression.cpp
  lldb/unittests/Expression/DWARFExpressionTest.cpp


Index: lldb/unittests/Expression/DWARFExpressionTest.cpp
===
--- lldb/unittests/Expression/DWARFExpressionTest.cpp
+++ lldb/unittests/Expression/DWARFExpressionTest.cpp
@@ -218,6 +218,14 @@
   llvm::HasValue(GetScalar(16, 0xff00, true)));
 }
 
+TEST(DWARFExpression, DW_OP_implicit_value) {
+  unsigned char bytes = 4;
+
+  EXPECT_THAT_EXPECTED(
+  Evaluate({DW_OP_implicit_value, bytes, 0x11, 0x22, 0x33, 0x44}),
+  llvm::HasValue(GetScalar(8 * bytes, 0x44332211, true)));
+}
+
 TEST(DWARFExpression, DW_OP_unknown) {
   EXPECT_THAT_EXPECTED(
   Evaluate({0xff}),
Index: lldb/source/Expression/DWARFExpression.cpp
===
--- lldb/source/Expression/DWARFExpression.cpp
+++ lldb/source/Expression/DWARFExpression.cpp
@@ -2248,6 +2248,29 @@
   }
   break;
 
+// OPCODE: DW_OP_implicit_value
+// OPERANDS: 2
+//  ULEB128  size of the value block in bytes
+//  uint8_t* block bytes encoding value in target's memory
+//  representation
+// DESCRIPTION: Value is immediately stored in block in the debug info with
+// the memory representation of the target.
+case DW_OP_implicit_value: {
+  const uint32_t len = opcodes.GetULEB128();
+  const void *data = opcodes.GetData(, len);
+
+  if (!data) {
+LLDB_LOG(log, "Evaluate_DW_OP_implicit_value: could not be read data");
+LLDB_ERRORF(error_ptr, "Could not evaluate %s.",
+DW_OP_value_to_name(op));
+return false;
+  }
+
+  Value result(data, len);
+  stack.push_back(result);
+  break;
+}
+
 // OPCODE: DW_OP_push_object_address
 // OPERANDS: none
 // DESCRIPTION: Pushes the address of the object currently being


Index: lldb/unittests/Expression/DWARFExpressionTest.cpp
===
--- lldb/unittests/Expression/DWARFExpressionTest.cpp
+++ lldb/unittests/Expression/DWARFExpressionTest.cpp
@@ -218,6 +218,14 @@
   llvm::HasValue(GetScalar(16, 0xff00, true)));
 }
 
+TEST(DWARFExpression, DW_OP_implicit_value) {
+  unsigned char bytes = 4;
+
+  EXPECT_THAT_EXPECTED(
+  Evaluate({DW_OP_implicit_value, bytes, 0x11, 0x22, 0x33, 0x44}),
+  llvm::HasValue(GetScalar(8 * bytes, 0x44332211, true)));
+}
+
 TEST(DWARFExpression, DW_OP_unknown) {
   EXPECT_THAT_EXPECTED(
   Evaluate({0xff}),
Index: lldb/source/Expression/DWARFExpression.cpp
===
--- lldb/source/Expression/DWARFExpression.cpp
+++ lldb/source/Expression/DWARFExpression.cpp
@@ -2248,6 +2248,29 @@
   }
   break;
 
+// OPCODE: DW_OP_implicit_value
+// OPERANDS: 2
+//  ULEB128  size of the value block in bytes
+//  uint8_t* block bytes encoding value in target's memory
+//  representation
+// DESCRIPTION: Value is immediately stored in block in the debug info with
+// the memory representation of the target.
+case DW_OP_implicit_value: {
+  const uint32_t len = opcodes.GetULEB128();
+  const void *data = opcodes.GetData(, len);
+
+  if (!data) {
+LLDB_LOG(log, "Evaluate_DW_OP_implicit_value: could not be read data");
+LLDB_ERRORF(error_ptr, "Could not evaluate %s.",
+DW_OP_value_to_name(op));
+return false;
+  }
+
+  Value result(data, len);
+  stack.push_back(result);
+  break;
+}
+
 // OPCODE: DW_OP_push_object_address
 // OPERANDS: none
 // DESCRIPTION: Pushes the address of the object currently being
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D89842: [lldb/DWARF] Add support for DW_OP_implicit_value

2020-10-22 Thread Jonas Devlieghere via Phabricator via lldb-commits
JDevlieghere added a comment.

+1 on everything Pavel said.




Comment at: lldb/source/Expression/DWARFExpression.cpp:856-867
+  const uint32_t len = opcodes.GetULEB128(_offset);
+  const void *data = opcodes.GetData(_offset, len);
+
+  if (!data) {
+LLDB_LOG(log, "Evaluate_DW_OP_implicit_value: could not be read data");
+return false;
+  }

labath wrote:
> I'm not sure this function is really complex enough to justify its existence. 
> The actual code is pretty short and most of it is just argument lists and 
> logging. I don't think the logging is very useful as the caller logs already, 
> and the argument lists would go away if this were inlined.
Agreed, plus half of the arguments are unused. 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D89842/new/

https://reviews.llvm.org/D89842

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D89842: [lldb/DWARF] Add support for DW_OP_implicit_value

2020-10-22 Thread Med Ismail Bennani via Phabricator via lldb-commits
mib updated this revision to Diff 299540.
mib added a comment.

Add test.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D89842/new/

https://reviews.llvm.org/D89842

Files:
  lldb/source/Expression/DWARFExpression.cpp
  lldb/test/Shell/SymbolFile/DWARF/DW_OP_implicit_value.test
  lldb/test/Shell/SymbolFile/DWARF/Inputs/implicit_value.c


Index: lldb/test/Shell/SymbolFile/DWARF/Inputs/implicit_value.c
===
--- /dev/null
+++ lldb/test/Shell/SymbolFile/DWARF/Inputs/implicit_value.c
@@ -0,0 +1,6 @@
+int main() {
+  double d = 3.14;
+  printf("break here");
+  d *= d;
+  return 0;
+}
Index: lldb/test/Shell/SymbolFile/DWARF/DW_OP_implicit_value.test
===
--- /dev/null
+++ lldb/test/Shell/SymbolFile/DWARF/DW_OP_implicit_value.test
@@ -0,0 +1,19 @@
+# Make sure DW_OP_implicit_value is supported by lldb with DWARFv5
+# FIXME: Enable darwin platform once DWARFv5 is supported by dsymutil
+# rdar://67406091
+
+# REQUIRES: system-linux
+
+# RUN: %clang_host -gdwarf-5 -O1 %p/Inputs/implicit_value.c -o %t
+# RUN: %lldb -b -s %s %t | FileCheck %s
+
+br set -p 'break here'
+# CHECK: Breakpoint 1: where = {{.*}}`main {{.*}} at implicit_value.c:{{.*}}, 
address = 0x{{.*}}
+
+process launch
+# CHECK: break here
+
+frame var d
+# CHECK: (double) d = 3.1400{{.*}}
+
+quit
Index: lldb/source/Expression/DWARFExpression.cpp
===
--- lldb/source/Expression/DWARFExpression.cpp
+++ lldb/source/Expression/DWARFExpression.cpp
@@ -846,6 +846,26 @@
   return true;
 }
 
+static bool Evaluate_DW_OP_implicit_value(std::vector ,
+  ExecutionContext *exe_ctx,
+  RegisterContext *reg_ctx,
+  const DataExtractor ,
+  lldb::offset_t _offset,
+  Status *error_ptr, Log *log) {
+
+  const uint32_t len = opcodes.GetULEB128(_offset);
+  const void *data = opcodes.GetData(_offset, len);
+
+  if (!data) {
+LLDB_LOG(log, "Evaluate_DW_OP_implicit_value: could not be read data");
+return false;
+  }
+
+  Value result(data, len);
+  stack.push_back(result);
+  return true;
+}
+
 bool DWARFExpression::Evaluate(ExecutionContextScope *exe_scope,
lldb::addr_t loclist_base_load_addr,
const Value *initial_value_ptr,
@@ -2248,6 +2268,23 @@
   }
   break;
 
+// OPCODE: DW_OP_implicit_value
+// OPERANDS: 2
+//  ULEB128  size of the value block in bytes
+//  uint8_t* block bytes encoding value in target's memory
+//  representation
+// DESCRIPTION: Value is immediately stored in block in the debug info with
+// the memory representation of the target.
+case DW_OP_implicit_value: {
+  if (!Evaluate_DW_OP_implicit_value(stack, exe_ctx, reg_ctx, opcodes,
+ offset, error_ptr, log)) {
+LLDB_ERRORF(error_ptr, "Could not evaluate %s.",
+DW_OP_value_to_name(op));
+return false;
+  }
+  break;
+}
+
 // OPCODE: DW_OP_push_object_address
 // OPERANDS: none
 // DESCRIPTION: Pushes the address of the object currently being


Index: lldb/test/Shell/SymbolFile/DWARF/Inputs/implicit_value.c
===
--- /dev/null
+++ lldb/test/Shell/SymbolFile/DWARF/Inputs/implicit_value.c
@@ -0,0 +1,6 @@
+int main() {
+  double d = 3.14;
+  printf("break here");
+  d *= d;
+  return 0;
+}
Index: lldb/test/Shell/SymbolFile/DWARF/DW_OP_implicit_value.test
===
--- /dev/null
+++ lldb/test/Shell/SymbolFile/DWARF/DW_OP_implicit_value.test
@@ -0,0 +1,19 @@
+# Make sure DW_OP_implicit_value is supported by lldb with DWARFv5
+# FIXME: Enable darwin platform once DWARFv5 is supported by dsymutil
+# rdar://67406091
+
+# REQUIRES: system-linux
+
+# RUN: %clang_host -gdwarf-5 -O1 %p/Inputs/implicit_value.c -o %t
+# RUN: %lldb -b -s %s %t | FileCheck %s
+
+br set -p 'break here'
+# CHECK: Breakpoint 1: where = {{.*}}`main {{.*}} at implicit_value.c:{{.*}}, address = 0x{{.*}}
+
+process launch
+# CHECK: break here
+
+frame var d
+# CHECK: (double) d = 3.1400{{.*}}
+
+quit
Index: lldb/source/Expression/DWARFExpression.cpp
===
--- lldb/source/Expression/DWARFExpression.cpp
+++ lldb/source/Expression/DWARFExpression.cpp
@@ -846,6 +846,26 @@
   return true;
 }
 
+static bool Evaluate_DW_OP_implicit_value(std::vector ,
+  ExecutionContext *exe_ctx,
+  RegisterContext *reg_ctx,
+  

[Lldb-commits] [PATCH] D89842: [lldb/DWARF] Add support for DW_OP_implicit_value

2020-10-22 Thread Med Ismail Bennani via Phabricator via lldb-commits
mib updated this revision to Diff 299539.
mib retitled this revision from "[lldb/DWARF] Add support DW_OP_implicit_value" 
to "[lldb/DWARF] Add support for DW_OP_implicit_value".
mib edited the summary of this revision.

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D89842/new/

https://reviews.llvm.org/D89842

Files:
  lldb/source/Expression/DWARFExpression.cpp
  lldb/test/Shell/SymbolFile/DWARF/Inputs/implicit_value.c


Index: lldb/test/Shell/SymbolFile/DWARF/Inputs/implicit_value.c
===
--- /dev/null
+++ lldb/test/Shell/SymbolFile/DWARF/Inputs/implicit_value.c
@@ -0,0 +1,6 @@
+int main() {
+  double d = 3.14;
+  printf("break here");
+  d *= d;
+  return 0;
+}
Index: lldb/source/Expression/DWARFExpression.cpp
===
--- lldb/source/Expression/DWARFExpression.cpp
+++ lldb/source/Expression/DWARFExpression.cpp
@@ -846,6 +846,26 @@
   return true;
 }
 
+static bool Evaluate_DW_OP_implicit_value(std::vector ,
+  ExecutionContext *exe_ctx,
+  RegisterContext *reg_ctx,
+  const DataExtractor ,
+  lldb::offset_t _offset,
+  Status *error_ptr, Log *log) {
+
+  const uint32_t len = opcodes.GetULEB128(_offset);
+  const void *data = opcodes.GetData(_offset, len);
+
+  if (!data) {
+LLDB_LOG(log, "Evaluate_DW_OP_implicit_value: could not be read data");
+return false;
+  }
+
+  Value result(data, len);
+  stack.push_back(result);
+  return true;
+}
+
 bool DWARFExpression::Evaluate(ExecutionContextScope *exe_scope,
lldb::addr_t loclist_base_load_addr,
const Value *initial_value_ptr,
@@ -2248,6 +2268,23 @@
   }
   break;
 
+// OPCODE: DW_OP_implicit_value
+// OPERANDS: 2
+//  ULEB128  size of the value block in bytes
+//  uint8_t* block bytes encoding value in target's memory
+//  representation
+// DESCRIPTION: Value is immediately stored in block in the debug info with
+// the memory representation of the target.
+case DW_OP_implicit_value: {
+  if (!Evaluate_DW_OP_implicit_value(stack, exe_ctx, reg_ctx, opcodes,
+ offset, error_ptr, log)) {
+LLDB_ERRORF(error_ptr, "Could not evaluate %s.",
+DW_OP_value_to_name(op));
+return false;
+  }
+  break;
+}
+
 // OPCODE: DW_OP_push_object_address
 // OPERANDS: none
 // DESCRIPTION: Pushes the address of the object currently being


Index: lldb/test/Shell/SymbolFile/DWARF/Inputs/implicit_value.c
===
--- /dev/null
+++ lldb/test/Shell/SymbolFile/DWARF/Inputs/implicit_value.c
@@ -0,0 +1,6 @@
+int main() {
+  double d = 3.14;
+  printf("break here");
+  d *= d;
+  return 0;
+}
Index: lldb/source/Expression/DWARFExpression.cpp
===
--- lldb/source/Expression/DWARFExpression.cpp
+++ lldb/source/Expression/DWARFExpression.cpp
@@ -846,6 +846,26 @@
   return true;
 }
 
+static bool Evaluate_DW_OP_implicit_value(std::vector ,
+  ExecutionContext *exe_ctx,
+  RegisterContext *reg_ctx,
+  const DataExtractor ,
+  lldb::offset_t _offset,
+  Status *error_ptr, Log *log) {
+
+  const uint32_t len = opcodes.GetULEB128(_offset);
+  const void *data = opcodes.GetData(_offset, len);
+
+  if (!data) {
+LLDB_LOG(log, "Evaluate_DW_OP_implicit_value: could not be read data");
+return false;
+  }
+
+  Value result(data, len);
+  stack.push_back(result);
+  return true;
+}
+
 bool DWARFExpression::Evaluate(ExecutionContextScope *exe_scope,
lldb::addr_t loclist_base_load_addr,
const Value *initial_value_ptr,
@@ -2248,6 +2268,23 @@
   }
   break;
 
+// OPCODE: DW_OP_implicit_value
+// OPERANDS: 2
+//  ULEB128  size of the value block in bytes
+//  uint8_t* block bytes encoding value in target's memory
+//  representation
+// DESCRIPTION: Value is immediately stored in block in the debug info with
+// the memory representation of the target.
+case DW_OP_implicit_value: {
+  if (!Evaluate_DW_OP_implicit_value(stack, exe_ctx, reg_ctx, opcodes,
+ offset, error_ptr, log)) {
+LLDB_ERRORF(error_ptr, "Could not evaluate %s.",
+DW_OP_value_to_name(op));
+return false;
+  }
+  break;
+}
+