diff options
| author | Sourabh Singh Tomar <SourabhSingh.Tomar@amd.com> | 2019-11-16 02:14:34 +0530 |
|---|---|---|
| committer | Sourabh Singh Tomar <SourabhSingh.Tomar@amd.com> | 2019-11-16 21:56:53 +0530 |
| commit | 423f541c1a322963cf482683fe9777ef0692082d (patch) | |
| tree | f1ca1b5a2a0d5c5d862e39d375855190dc14bb83 /llvm/lib | |
| parent | a7f97b02b4fa8b4b1824a7c9b14deb798f55e76a (diff) | |
| download | bcm5719-llvm-423f541c1a322963cf482683fe9777ef0692082d.tar.gz bcm5719-llvm-423f541c1a322963cf482683fe9777ef0692082d.zip | |
[DWARF5]Addition of alignment atrribute in typedef DIE.
This patch, adds support for DW_AT_alignment[DWARF5] attribute, to be emitted with typdef DIE.
When explicit alignment is specified.
Patch by Awanish Pandey <Awanish.Pandey@amd.com>
Reviewers: aprantl, dblaikie, jini.susan.george, SouraVX, alok,
deadalinx
Differential Revision: https://reviews.llvm.org/D70111
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 9 | ||||
| -rw-r--r-- | llvm/lib/IR/DIBuilder.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/IR/DebugInfo.cpp | 7 |
3 files changed, 16 insertions, 6 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index 9d7fee1d5b3..86522a85427 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -800,6 +800,15 @@ void DwarfUnit::constructTypeDIE(DIE &Buffer, const DIDerivedType *DTy) { if (!Name.empty()) addString(Buffer, dwarf::DW_AT_name, Name); + // If alignment is specified for a typedef , create and insert DW_AT_alignment + // attribute in DW_TAG_typedef DIE. + if (Tag == dwarf::DW_TAG_typedef && DD->getDwarfVersion() >= 5) { + uint32_t AlignInBytes = DTy->getAlignInBytes(); + if (AlignInBytes > 0) + addUInt(Buffer, dwarf::DW_AT_alignment, dwarf::DW_FORM_udata, + AlignInBytes); + } + // Add size if non-zero (derived types might be zero-sized.) if (Size && Tag != dwarf::DW_TAG_pointer_type && Tag != dwarf::DW_TAG_ptr_to_member_type diff --git a/llvm/lib/IR/DIBuilder.cpp b/llvm/lib/IR/DIBuilder.cpp index 59b4a5ef8a1..3280106cf9f 100644 --- a/llvm/lib/IR/DIBuilder.cpp +++ b/llvm/lib/IR/DIBuilder.cpp @@ -306,9 +306,11 @@ DIDerivedType *DIBuilder::createReferenceType( DIDerivedType *DIBuilder::createTypedef(DIType *Ty, StringRef Name, DIFile *File, unsigned LineNo, - DIScope *Context) { + DIScope *Context, + Optional<unsigned> AlignInBits) { return DIDerivedType::get(VMContext, dwarf::DW_TAG_typedef, Name, File, - LineNo, getNonCompileUnitScope(Context), Ty, 0, 0, + LineNo, getNonCompileUnitScope(Context), Ty, 0, + AlignInBits.hasValue() ? AlignInBits.getValue() : 0, 0, None, DINode::FlagZero); } diff --git a/llvm/lib/IR/DebugInfo.cpp b/llvm/lib/IR/DebugInfo.cpp index 1bbe6b85d26..62bfeb5c5d7 100644 --- a/llvm/lib/IR/DebugInfo.cpp +++ b/llvm/lib/IR/DebugInfo.cpp @@ -1108,11 +1108,10 @@ LLVMMetadataRef LLVMDIBuilderCreateTypedef(LLVMDIBuilderRef Builder, LLVMMetadataRef Type, const char *Name, size_t NameLen, LLVMMetadataRef File, unsigned LineNo, - LLVMMetadataRef Scope) { + LLVMMetadataRef Scope, uint32_t AlignInBits) { return wrap(unwrap(Builder)->createTypedef( - unwrapDI<DIType>(Type), {Name, NameLen}, - unwrapDI<DIFile>(File), LineNo, - unwrapDI<DIScope>(Scope))); + unwrapDI<DIType>(Type), {Name, NameLen}, unwrapDI<DIFile>(File), LineNo, + unwrapDI<DIScope>(Scope), AlignInBits)); } LLVMMetadataRef |

