[PATCH] D70642: [DebugInfo] Support for DW_OP_implicit_pointer (DW_OP_LLVM_argN)
Alok Kumar Sharma via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 3 03:27:51 PST 2019
alok updated this revision to Diff 231859.
alok marked an inline comment as done.
alok added a comment.
Herald added a subscriber: hiraditya.
This is updated to incorporate comments from @aprantl.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D70642/new/
https://reviews.llvm.org/D70642
Files:
llvm/docs/LangRef.rst
llvm/include/llvm/BinaryFormat/Dwarf.h
llvm/lib/BinaryFormat/Dwarf.cpp
Index: llvm/lib/BinaryFormat/Dwarf.cpp
===================================================================
--- llvm/lib/BinaryFormat/Dwarf.cpp
+++ llvm/lib/BinaryFormat/Dwarf.cpp
@@ -151,6 +151,22 @@
return "DW_OP_LLVM_tag_offset";
case DW_OP_LLVM_entry_value:
return "DW_OP_LLVM_entry_value";
+ case DW_OP_LLVM_arg0:
+ return "DW_OP_LLVM_arg0";
+ case DW_OP_LLVM_arg1:
+ return "DW_OP_LLVM_arg1";
+ case DW_OP_LLVM_arg2:
+ return "DW_OP_LLVM_arg2";
+ case DW_OP_LLVM_arg3:
+ return "DW_OP_LLVM_arg3";
+ case DW_OP_LLVM_arg4:
+ return "DW_OP_LLVM_arg4";
+ case DW_OP_LLVM_arg5:
+ return "DW_OP_LLVM_arg5";
+ case DW_OP_LLVM_arg6:
+ return "DW_OP_LLVM_arg6";
+ case DW_OP_LLVM_arg7:
+ return "DW_OP_LLVM_arg7";
}
}
@@ -163,6 +179,14 @@
.Case("DW_OP_LLVM_fragment", DW_OP_LLVM_fragment)
.Case("DW_OP_LLVM_tag_offset", DW_OP_LLVM_tag_offset)
.Case("DW_OP_LLVM_entry_value", DW_OP_LLVM_entry_value)
+ .Case("DW_OP_LLVM_arg0", DW_OP_LLVM_arg0)
+ .Case("DW_OP_LLVM_arg1", DW_OP_LLVM_arg1)
+ .Case("DW_OP_LLVM_arg2", DW_OP_LLVM_arg2)
+ .Case("DW_OP_LLVM_arg3", DW_OP_LLVM_arg3)
+ .Case("DW_OP_LLVM_arg4", DW_OP_LLVM_arg4)
+ .Case("DW_OP_LLVM_arg5", DW_OP_LLVM_arg5)
+ .Case("DW_OP_LLVM_arg6", DW_OP_LLVM_arg6)
+ .Case("DW_OP_LLVM_arg7", DW_OP_LLVM_arg7)
.Default(0);
}
Index: llvm/include/llvm/BinaryFormat/Dwarf.h
===================================================================
--- llvm/include/llvm/BinaryFormat/Dwarf.h
+++ llvm/include/llvm/BinaryFormat/Dwarf.h
@@ -121,6 +121,14 @@
DW_OP_LLVM_convert = 0x1001, ///< Only used in LLVM metadata.
DW_OP_LLVM_tag_offset = 0x1002, ///< Only used in LLVM metadata.
DW_OP_LLVM_entry_value = 0x1003, ///< Only used in LLVM metadata.
+ DW_OP_LLVM_arg0 = 0x1004, ///< Only used in LLVM metadata.
+ DW_OP_LLVM_arg1 = 0x1005, ///< Only used in LLVM metadata.
+ DW_OP_LLVM_arg2 = 0x1006, ///< Only used in LLVM metadata.
+ DW_OP_LLVM_arg3 = 0x1007, ///< Only used in LLVM metadata.
+ DW_OP_LLVM_arg4 = 0x1008, ///< Only used in LLVM metadata.
+ DW_OP_LLVM_arg5 = 0x1009, ///< Only used in LLVM metadata.
+ DW_OP_LLVM_arg6 = 0x100a, ///< Only used in LLVM metadata.
+ DW_OP_LLVM_arg7 = 0x100b, ///< Only used in LLVM metadata.
};
enum TypeKind : uint8_t {
Index: llvm/docs/LangRef.rst
===================================================================
--- llvm/docs/LangRef.rst
+++ llvm/docs/LangRef.rst
@@ -4815,6 +4815,12 @@
signed offset of the specified register. The opcode is only generated by the
``AsmPrinter`` pass to describe call site parameter value which requires an
expression over two registers.
+- ``DW_OP_LLVM_argN`` represents argument number N of the containing LLVM
+ intrinsic. Where N can be any value from 0 to 7. For example in intrinsic
+ ``call @llvm.dbg.someintrinsic(DILocalVariable("x"), DILocalVariable("y"),
+ metadata !DIExpression(DW_OP_LLVM_arg0, DW_OP_LLVM_arg1, DW_OP_plus))``
+ ``DW_OP_LLVM_arg0`` represents ``DILocalVariable("x")`` and
+ ``DW_OP_LLVM_arg1`` represents ``DILocalVariable("y")``.
DWARF specifies three kinds of simple location descriptions: Register, memory,
and implicit location descriptions. Note that a location description is
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D70642.231859.patch
Type: text/x-patch
Size: 3290 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191203/cb78a437/attachment.bin>
More information about the llvm-commits
mailing list