1 //===--- DebugInfo.cpp - Debug Information Helper Classes -----------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements the helper classes used to build and interpret debug
11 // information in LLVM IR form.
13 //===----------------------------------------------------------------------===//
15 #include "llvm/Analysis/DebugInfo.h"
16 #include "llvm/Constants.h"
17 #include "llvm/DerivedTypes.h"
18 #include "llvm/Intrinsics.h"
19 #include "llvm/IntrinsicInst.h"
20 #include "llvm/Instructions.h"
21 #include "llvm/Module.h"
22 #include "llvm/Analysis/ValueTracking.h"
23 #include "llvm/Support/Dwarf.h"
24 #include "llvm/Support/Streams.h"
27 using namespace llvm::dwarf
;
29 //===----------------------------------------------------------------------===//
31 //===----------------------------------------------------------------------===//
33 /// ValidDebugInfo - Return true if V represents valid debug info value.
34 bool DIDescriptor::ValidDebugInfo(Value
*V
, CodeGenOpt::Level OptLevel
) {
38 GlobalVariable
*GV
= dyn_cast
<GlobalVariable
>(V
->stripPointerCasts());
42 if (!GV
->hasInternalLinkage () && !GV
->hasLinkOnceLinkage())
47 // Check current version. Allow Version6 for now.
48 unsigned Version
= DI
.getVersion();
49 if (Version
!= LLVMDebugVersion
&& Version
!= LLVMDebugVersion6
)
52 unsigned Tag
= DI
.getTag();
55 assert(DIVariable(GV
).Verify() && "Invalid DebugInfo value");
57 case DW_TAG_compile_unit
:
58 assert(DICompileUnit(GV
).Verify() && "Invalid DebugInfo value");
60 case DW_TAG_subprogram
:
61 assert(DISubprogram(GV
).Verify() && "Invalid DebugInfo value");
63 case DW_TAG_lexical_block
:
64 // FIXME: This interfers with the quality of generated code during
66 if (OptLevel
!= CodeGenOpt::None
)
76 DIDescriptor::DIDescriptor(GlobalVariable
*gv
, unsigned RequiredTag
) {
79 // If this is non-null, check to see if the Tag matches. If not, set to null.
80 if (GV
&& getTag() != RequiredTag
)
85 DIDescriptor::getStringField(unsigned Elt
, std::string
&Result
) const {
91 Constant
*C
= GV
->getInitializer();
92 if (C
== 0 || Elt
>= C
->getNumOperands()) {
97 // Fills in the string if it succeeds
98 if (!GetConstantStringInfo(C
->getOperand(Elt
), Result
))
104 uint64_t DIDescriptor::getUInt64Field(unsigned Elt
) const {
105 if (GV
== 0) return 0;
107 Constant
*C
= GV
->getInitializer();
108 if (C
== 0 || Elt
>= C
->getNumOperands())
111 if (ConstantInt
*CI
= dyn_cast
<ConstantInt
>(C
->getOperand(Elt
)))
112 return CI
->getZExtValue();
116 DIDescriptor
DIDescriptor::getDescriptorField(unsigned Elt
) const {
117 if (GV
== 0) return DIDescriptor();
119 Constant
*C
= GV
->getInitializer();
120 if (C
== 0 || Elt
>= C
->getNumOperands())
121 return DIDescriptor();
123 C
= C
->getOperand(Elt
);
124 return DIDescriptor(dyn_cast
<GlobalVariable
>(C
->stripPointerCasts()));
127 GlobalVariable
*DIDescriptor::getGlobalVariableField(unsigned Elt
) const {
128 if (GV
== 0) return 0;
130 Constant
*C
= GV
->getInitializer();
131 if (C
== 0 || Elt
>= C
->getNumOperands())
134 C
= C
->getOperand(Elt
);
135 return dyn_cast
<GlobalVariable
>(C
->stripPointerCasts());
138 //===----------------------------------------------------------------------===//
139 // Simple Descriptor Constructors and other Methods
140 //===----------------------------------------------------------------------===//
142 // Needed by DIVariable::getType().
143 DIType::DIType(GlobalVariable
*gv
) : DIDescriptor(gv
) {
145 unsigned tag
= getTag();
146 if (tag
!= dwarf::DW_TAG_base_type
&& !DIDerivedType::isDerivedType(tag
) &&
147 !DICompositeType::isCompositeType(tag
))
151 /// isDerivedType - Return true if the specified tag is legal for
153 bool DIType::isDerivedType(unsigned Tag
) {
155 case dwarf::DW_TAG_typedef
:
156 case dwarf::DW_TAG_pointer_type
:
157 case dwarf::DW_TAG_reference_type
:
158 case dwarf::DW_TAG_const_type
:
159 case dwarf::DW_TAG_volatile_type
:
160 case dwarf::DW_TAG_restrict_type
:
161 case dwarf::DW_TAG_member
:
162 case dwarf::DW_TAG_inheritance
:
165 // FIXME: Even though it doesn't make sense, CompositeTypes are current
166 // modelled as DerivedTypes, this should return true for them as well.
171 /// isCompositeType - Return true if the specified tag is legal for
173 bool DIType::isCompositeType(unsigned TAG
) {
175 case dwarf::DW_TAG_array_type
:
176 case dwarf::DW_TAG_structure_type
:
177 case dwarf::DW_TAG_union_type
:
178 case dwarf::DW_TAG_enumeration_type
:
179 case dwarf::DW_TAG_vector_type
:
180 case dwarf::DW_TAG_subroutine_type
:
181 case dwarf::DW_TAG_class_type
:
188 /// isVariable - Return true if the specified tag is legal for DIVariable.
189 bool DIVariable::isVariable(unsigned Tag
) {
191 case dwarf::DW_TAG_auto_variable
:
192 case dwarf::DW_TAG_arg_variable
:
193 case dwarf::DW_TAG_return_variable
:
200 unsigned DIArray::getNumElements() const {
201 assert (GV
&& "Invalid DIArray");
202 Constant
*C
= GV
->getInitializer();
203 assert (C
&& "Invalid DIArray initializer");
204 return C
->getNumOperands();
207 /// Verify - Verify that a compile unit is well formed.
208 bool DICompileUnit::Verify() const {
212 if (getFilename(Res
).empty())
214 // It is possible that directory and produce string is empty.
218 /// Verify - Verify that a type descriptor is well formed.
219 bool DIType::Verify() const {
222 if (getContext().isNull())
225 DICompileUnit CU
= getCompileUnit();
226 if (!CU
.isNull() && !CU
.Verify())
231 /// Verify - Verify that a composite type descriptor is well formed.
232 bool DICompositeType::Verify() const {
235 if (getContext().isNull())
238 DICompileUnit CU
= getCompileUnit();
239 if (!CU
.isNull() && !CU
.Verify())
244 /// Verify - Verify that a subprogram descriptor is well formed.
245 bool DISubprogram::Verify() const {
249 if (getContext().isNull())
252 DICompileUnit CU
= getCompileUnit();
256 DICompositeType Ty
= getType();
257 if (!Ty
.isNull() && !Ty
.Verify())
262 /// Verify - Verify that a global variable descriptor is well formed.
263 bool DIGlobalVariable::Verify() const {
267 if (getContext().isNull())
270 DICompileUnit CU
= getCompileUnit();
271 if (!CU
.isNull() && !CU
.Verify())
274 DIType Ty
= getType();
284 /// Verify - Verify that a variable descriptor is well formed.
285 bool DIVariable::Verify() const {
289 if (getContext().isNull())
292 DIType Ty
= getType();
299 /// getOriginalTypeSize - If this type is derived from a base type then
300 /// return base type size.
301 uint64_t DIDerivedType::getOriginalTypeSize() const {
302 if (getTag() != dwarf::DW_TAG_member
)
303 return getSizeInBits();
304 DIType BT
= getTypeDerivedFrom();
305 if (BT
.getTag() != dwarf::DW_TAG_base_type
)
306 return getSizeInBits();
307 return BT
.getSizeInBits();
310 /// describes - Return true if this subprogram provides debugging
311 /// information for the function F.
312 bool DISubprogram::describes(const Function
*F
) {
313 assert (F
&& "Invalid function");
315 getLinkageName(Name
);
318 if (!Name
.empty() && (strcmp(Name
.c_str(), F
->getNameStart()) == false))
323 //===----------------------------------------------------------------------===//
324 // DIFactory: Basic Helpers
325 //===----------------------------------------------------------------------===//
327 DIFactory::DIFactory(Module
&m
)
328 : M(m
), StopPointFn(0), FuncStartFn(0), RegionStartFn(0), RegionEndFn(0),
330 EmptyStructPtr
= PointerType::getUnqual(StructType::get(NULL
, NULL
));
333 /// getCastToEmpty - Return this descriptor as a Constant* with type '{}*'.
334 /// This is only valid when the descriptor is non-null.
335 Constant
*DIFactory::getCastToEmpty(DIDescriptor D
) {
336 if (D
.isNull()) return Constant::getNullValue(EmptyStructPtr
);
337 return ConstantExpr::getBitCast(D
.getGV(), EmptyStructPtr
);
340 Constant
*DIFactory::GetTagConstant(unsigned TAG
) {
341 assert((TAG
& LLVMDebugVersionMask
) == 0 &&
342 "Tag too large for debug encoding!");
343 return ConstantInt::get(Type::Int32Ty
, TAG
| LLVMDebugVersion
);
346 Constant
*DIFactory::GetStringConstant(const std::string
&String
) {
347 // Check string cache for previous edition.
348 Constant
*&Slot
= StringCache
[String
];
350 // Return Constant if previously defined.
351 if (Slot
) return Slot
;
353 const PointerType
*DestTy
= PointerType::getUnqual(Type::Int8Ty
);
355 // If empty string then use a sbyte* null instead.
357 return Slot
= ConstantPointerNull::get(DestTy
);
359 // Construct string as an llvm constant.
360 Constant
*ConstStr
= ConstantArray::get(String
);
362 // Otherwise create and return a new string global.
363 GlobalVariable
*StrGV
= new GlobalVariable(ConstStr
->getType(), true,
364 GlobalVariable::InternalLinkage
,
365 ConstStr
, ".str", &M
);
366 StrGV
->setSection("llvm.metadata");
367 return Slot
= ConstantExpr::getBitCast(StrGV
, DestTy
);
370 /// GetOrCreateAnchor - Look up an anchor for the specified tag and name. If it
371 /// already exists, return it. If not, create a new one and return it.
372 DIAnchor
DIFactory::GetOrCreateAnchor(unsigned TAG
, const char *Name
) {
373 const Type
*EltTy
= StructType::get(Type::Int32Ty
, Type::Int32Ty
, NULL
);
375 // Otherwise, create the global or return it if already in the module.
376 Constant
*C
= M
.getOrInsertGlobal(Name
, EltTy
);
377 assert(isa
<GlobalVariable
>(C
) && "Incorrectly typed anchor?");
378 GlobalVariable
*GV
= cast
<GlobalVariable
>(C
);
380 // If it has an initializer, it is already in the module.
381 if (GV
->hasInitializer())
382 return SubProgramAnchor
= DIAnchor(GV
);
384 GV
->setLinkage(GlobalValue::LinkOnceAnyLinkage
);
385 GV
->setSection("llvm.metadata");
386 GV
->setConstant(true);
387 M
.addTypeName("llvm.dbg.anchor.type", EltTy
);
389 // Otherwise, set the initializer.
391 GetTagConstant(dwarf::DW_TAG_anchor
),
392 ConstantInt::get(Type::Int32Ty
, TAG
)
395 GV
->setInitializer(ConstantStruct::get(Elts
, 2));
401 //===----------------------------------------------------------------------===//
402 // DIFactory: Primary Constructors
403 //===----------------------------------------------------------------------===//
405 /// GetOrCreateCompileUnitAnchor - Return the anchor for compile units,
406 /// creating a new one if there isn't already one in the module.
407 DIAnchor
DIFactory::GetOrCreateCompileUnitAnchor() {
408 // If we already created one, just return it.
409 if (!CompileUnitAnchor
.isNull())
410 return CompileUnitAnchor
;
411 return CompileUnitAnchor
= GetOrCreateAnchor(dwarf::DW_TAG_compile_unit
,
412 "llvm.dbg.compile_units");
415 /// GetOrCreateSubprogramAnchor - Return the anchor for subprograms,
416 /// creating a new one if there isn't already one in the module.
417 DIAnchor
DIFactory::GetOrCreateSubprogramAnchor() {
418 // If we already created one, just return it.
419 if (!SubProgramAnchor
.isNull())
420 return SubProgramAnchor
;
421 return SubProgramAnchor
= GetOrCreateAnchor(dwarf::DW_TAG_subprogram
,
422 "llvm.dbg.subprograms");
425 /// GetOrCreateGlobalVariableAnchor - Return the anchor for globals,
426 /// creating a new one if there isn't already one in the module.
427 DIAnchor
DIFactory::GetOrCreateGlobalVariableAnchor() {
428 // If we already created one, just return it.
429 if (!GlobalVariableAnchor
.isNull())
430 return GlobalVariableAnchor
;
431 return GlobalVariableAnchor
= GetOrCreateAnchor(dwarf::DW_TAG_variable
,
432 "llvm.dbg.global_variables");
435 /// GetOrCreateArray - Create an descriptor for an array of descriptors.
436 /// This implicitly uniques the arrays created.
437 DIArray
DIFactory::GetOrCreateArray(DIDescriptor
*Tys
, unsigned NumTys
) {
438 SmallVector
<Constant
*, 16> Elts
;
440 for (unsigned i
= 0; i
!= NumTys
; ++i
)
441 Elts
.push_back(getCastToEmpty(Tys
[i
]));
443 Constant
*Init
= ConstantArray::get(ArrayType::get(EmptyStructPtr
,
445 &Elts
[0], Elts
.size());
446 // If we already have this array, just return the uniqued version.
447 DIDescriptor
&Entry
= SimpleConstantCache
[Init
];
448 if (!Entry
.isNull()) return DIArray(Entry
.getGV());
450 GlobalVariable
*GV
= new GlobalVariable(Init
->getType(), true,
451 GlobalValue::InternalLinkage
,
452 Init
, "llvm.dbg.array", &M
);
453 GV
->setSection("llvm.metadata");
454 Entry
= DIDescriptor(GV
);
458 /// GetOrCreateSubrange - Create a descriptor for a value range. This
459 /// implicitly uniques the values returned.
460 DISubrange
DIFactory::GetOrCreateSubrange(int64_t Lo
, int64_t Hi
) {
462 GetTagConstant(dwarf::DW_TAG_subrange_type
),
463 ConstantInt::get(Type::Int64Ty
, Lo
),
464 ConstantInt::get(Type::Int64Ty
, Hi
)
467 Constant
*Init
= ConstantStruct::get(Elts
, sizeof(Elts
)/sizeof(Elts
[0]));
469 // If we already have this range, just return the uniqued version.
470 DIDescriptor
&Entry
= SimpleConstantCache
[Init
];
471 if (!Entry
.isNull()) return DISubrange(Entry
.getGV());
473 M
.addTypeName("llvm.dbg.subrange.type", Init
->getType());
475 GlobalVariable
*GV
= new GlobalVariable(Init
->getType(), true,
476 GlobalValue::InternalLinkage
,
477 Init
, "llvm.dbg.subrange", &M
);
478 GV
->setSection("llvm.metadata");
479 Entry
= DIDescriptor(GV
);
480 return DISubrange(GV
);
485 /// CreateCompileUnit - Create a new descriptor for the specified compile
486 /// unit. Note that this does not unique compile units within the module.
487 DICompileUnit
DIFactory::CreateCompileUnit(unsigned LangID
,
488 const std::string
&Filename
,
489 const std::string
&Directory
,
490 const std::string
&Producer
,
494 unsigned RunTimeVer
) {
496 GetTagConstant(dwarf::DW_TAG_compile_unit
),
497 getCastToEmpty(GetOrCreateCompileUnitAnchor()),
498 ConstantInt::get(Type::Int32Ty
, LangID
),
499 GetStringConstant(Filename
),
500 GetStringConstant(Directory
),
501 GetStringConstant(Producer
),
502 ConstantInt::get(Type::Int1Ty
, isMain
),
503 ConstantInt::get(Type::Int1Ty
, isOptimized
),
504 GetStringConstant(Flags
),
505 ConstantInt::get(Type::Int32Ty
, RunTimeVer
)
508 Constant
*Init
= ConstantStruct::get(Elts
, sizeof(Elts
)/sizeof(Elts
[0]));
510 M
.addTypeName("llvm.dbg.compile_unit.type", Init
->getType());
511 GlobalVariable
*GV
= new GlobalVariable(Init
->getType(), true,
512 GlobalValue::InternalLinkage
,
513 Init
, "llvm.dbg.compile_unit", &M
);
514 GV
->setSection("llvm.metadata");
515 return DICompileUnit(GV
);
518 /// CreateEnumerator - Create a single enumerator value.
519 DIEnumerator
DIFactory::CreateEnumerator(const std::string
&Name
, uint64_t Val
){
521 GetTagConstant(dwarf::DW_TAG_enumerator
),
522 GetStringConstant(Name
),
523 ConstantInt::get(Type::Int64Ty
, Val
)
526 Constant
*Init
= ConstantStruct::get(Elts
, sizeof(Elts
)/sizeof(Elts
[0]));
528 M
.addTypeName("llvm.dbg.enumerator.type", Init
->getType());
529 GlobalVariable
*GV
= new GlobalVariable(Init
->getType(), true,
530 GlobalValue::InternalLinkage
,
531 Init
, "llvm.dbg.enumerator", &M
);
532 GV
->setSection("llvm.metadata");
533 return DIEnumerator(GV
);
537 /// CreateBasicType - Create a basic type like int, float, etc.
538 DIBasicType
DIFactory::CreateBasicType(DIDescriptor Context
,
539 const std::string
&Name
,
540 DICompileUnit CompileUnit
,
543 uint64_t AlignInBits
,
544 uint64_t OffsetInBits
, unsigned Flags
,
547 GetTagConstant(dwarf::DW_TAG_base_type
),
548 getCastToEmpty(Context
),
549 GetStringConstant(Name
),
550 getCastToEmpty(CompileUnit
),
551 ConstantInt::get(Type::Int32Ty
, LineNumber
),
552 ConstantInt::get(Type::Int64Ty
, SizeInBits
),
553 ConstantInt::get(Type::Int64Ty
, AlignInBits
),
554 ConstantInt::get(Type::Int64Ty
, OffsetInBits
),
555 ConstantInt::get(Type::Int32Ty
, Flags
),
556 ConstantInt::get(Type::Int32Ty
, Encoding
)
559 Constant
*Init
= ConstantStruct::get(Elts
, sizeof(Elts
)/sizeof(Elts
[0]));
561 M
.addTypeName("llvm.dbg.basictype.type", Init
->getType());
562 GlobalVariable
*GV
= new GlobalVariable(Init
->getType(), true,
563 GlobalValue::InternalLinkage
,
564 Init
, "llvm.dbg.basictype", &M
);
565 GV
->setSection("llvm.metadata");
566 return DIBasicType(GV
);
569 /// CreateDerivedType - Create a derived type like const qualified type,
570 /// pointer, typedef, etc.
571 DIDerivedType
DIFactory::CreateDerivedType(unsigned Tag
,
572 DIDescriptor Context
,
573 const std::string
&Name
,
574 DICompileUnit CompileUnit
,
577 uint64_t AlignInBits
,
578 uint64_t OffsetInBits
,
580 DIType DerivedFrom
) {
583 getCastToEmpty(Context
),
584 GetStringConstant(Name
),
585 getCastToEmpty(CompileUnit
),
586 ConstantInt::get(Type::Int32Ty
, LineNumber
),
587 ConstantInt::get(Type::Int64Ty
, SizeInBits
),
588 ConstantInt::get(Type::Int64Ty
, AlignInBits
),
589 ConstantInt::get(Type::Int64Ty
, OffsetInBits
),
590 ConstantInt::get(Type::Int32Ty
, Flags
),
591 getCastToEmpty(DerivedFrom
)
594 Constant
*Init
= ConstantStruct::get(Elts
, sizeof(Elts
)/sizeof(Elts
[0]));
596 M
.addTypeName("llvm.dbg.derivedtype.type", Init
->getType());
597 GlobalVariable
*GV
= new GlobalVariable(Init
->getType(), true,
598 GlobalValue::InternalLinkage
,
599 Init
, "llvm.dbg.derivedtype", &M
);
600 GV
->setSection("llvm.metadata");
601 return DIDerivedType(GV
);
604 /// CreateCompositeType - Create a composite type like array, struct, etc.
605 DICompositeType
DIFactory::CreateCompositeType(unsigned Tag
,
606 DIDescriptor Context
,
607 const std::string
&Name
,
608 DICompileUnit CompileUnit
,
611 uint64_t AlignInBits
,
612 uint64_t OffsetInBits
,
616 unsigned RuntimeLang
) {
620 getCastToEmpty(Context
),
621 GetStringConstant(Name
),
622 getCastToEmpty(CompileUnit
),
623 ConstantInt::get(Type::Int32Ty
, LineNumber
),
624 ConstantInt::get(Type::Int64Ty
, SizeInBits
),
625 ConstantInt::get(Type::Int64Ty
, AlignInBits
),
626 ConstantInt::get(Type::Int64Ty
, OffsetInBits
),
627 ConstantInt::get(Type::Int32Ty
, Flags
),
628 getCastToEmpty(DerivedFrom
),
629 getCastToEmpty(Elements
),
630 ConstantInt::get(Type::Int32Ty
, RuntimeLang
)
633 Constant
*Init
= ConstantStruct::get(Elts
, sizeof(Elts
)/sizeof(Elts
[0]));
635 M
.addTypeName("llvm.dbg.composite.type", Init
->getType());
636 GlobalVariable
*GV
= new GlobalVariable(Init
->getType(), true,
637 GlobalValue::InternalLinkage
,
638 Init
, "llvm.dbg.composite", &M
);
639 GV
->setSection("llvm.metadata");
640 return DICompositeType(GV
);
644 /// CreateSubprogram - Create a new descriptor for the specified subprogram.
645 /// See comments in DISubprogram for descriptions of these fields. This
646 /// method does not unique the generated descriptors.
647 DISubprogram
DIFactory::CreateSubprogram(DIDescriptor Context
,
648 const std::string
&Name
,
649 const std::string
&DisplayName
,
650 const std::string
&LinkageName
,
651 DICompileUnit CompileUnit
,
652 unsigned LineNo
, DIType Type
,
657 GetTagConstant(dwarf::DW_TAG_subprogram
),
658 getCastToEmpty(GetOrCreateSubprogramAnchor()),
659 getCastToEmpty(Context
),
660 GetStringConstant(Name
),
661 GetStringConstant(DisplayName
),
662 GetStringConstant(LinkageName
),
663 getCastToEmpty(CompileUnit
),
664 ConstantInt::get(Type::Int32Ty
, LineNo
),
665 getCastToEmpty(Type
),
666 ConstantInt::get(Type::Int1Ty
, isLocalToUnit
),
667 ConstantInt::get(Type::Int1Ty
, isDefinition
)
670 Constant
*Init
= ConstantStruct::get(Elts
, sizeof(Elts
)/sizeof(Elts
[0]));
672 M
.addTypeName("llvm.dbg.subprogram.type", Init
->getType());
673 GlobalVariable
*GV
= new GlobalVariable(Init
->getType(), true,
674 GlobalValue::InternalLinkage
,
675 Init
, "llvm.dbg.subprogram", &M
);
676 GV
->setSection("llvm.metadata");
677 return DISubprogram(GV
);
680 /// CreateGlobalVariable - Create a new descriptor for the specified global.
682 DIFactory::CreateGlobalVariable(DIDescriptor Context
, const std::string
&Name
,
683 const std::string
&DisplayName
,
684 const std::string
&LinkageName
,
685 DICompileUnit CompileUnit
,
686 unsigned LineNo
, DIType Type
,bool isLocalToUnit
,
687 bool isDefinition
, llvm::GlobalVariable
*Val
) {
689 GetTagConstant(dwarf::DW_TAG_variable
),
690 getCastToEmpty(GetOrCreateGlobalVariableAnchor()),
691 getCastToEmpty(Context
),
692 GetStringConstant(Name
),
693 GetStringConstant(DisplayName
),
694 GetStringConstant(LinkageName
),
695 getCastToEmpty(CompileUnit
),
696 ConstantInt::get(Type::Int32Ty
, LineNo
),
697 getCastToEmpty(Type
),
698 ConstantInt::get(Type::Int1Ty
, isLocalToUnit
),
699 ConstantInt::get(Type::Int1Ty
, isDefinition
),
700 ConstantExpr::getBitCast(Val
, EmptyStructPtr
)
703 Constant
*Init
= ConstantStruct::get(Elts
, sizeof(Elts
)/sizeof(Elts
[0]));
705 M
.addTypeName("llvm.dbg.global_variable.type", Init
->getType());
706 GlobalVariable
*GV
= new GlobalVariable(Init
->getType(), true,
707 GlobalValue::InternalLinkage
,
708 Init
, "llvm.dbg.global_variable", &M
);
709 GV
->setSection("llvm.metadata");
710 return DIGlobalVariable(GV
);
714 /// CreateVariable - Create a new descriptor for the specified variable.
715 DIVariable
DIFactory::CreateVariable(unsigned Tag
, DIDescriptor Context
,
716 const std::string
&Name
,
717 DICompileUnit CompileUnit
, unsigned LineNo
,
721 getCastToEmpty(Context
),
722 GetStringConstant(Name
),
723 getCastToEmpty(CompileUnit
),
724 ConstantInt::get(Type::Int32Ty
, LineNo
),
728 Constant
*Init
= ConstantStruct::get(Elts
, sizeof(Elts
)/sizeof(Elts
[0]));
730 M
.addTypeName("llvm.dbg.variable.type", Init
->getType());
731 GlobalVariable
*GV
= new GlobalVariable(Init
->getType(), true,
732 GlobalValue::InternalLinkage
,
733 Init
, "llvm.dbg.variable", &M
);
734 GV
->setSection("llvm.metadata");
735 return DIVariable(GV
);
739 /// CreateBlock - This creates a descriptor for a lexical block with the
740 /// specified parent context.
741 DIBlock
DIFactory::CreateBlock(DIDescriptor Context
) {
743 GetTagConstant(dwarf::DW_TAG_lexical_block
),
744 getCastToEmpty(Context
)
747 Constant
*Init
= ConstantStruct::get(Elts
, sizeof(Elts
)/sizeof(Elts
[0]));
749 M
.addTypeName("llvm.dbg.block.type", Init
->getType());
750 GlobalVariable
*GV
= new GlobalVariable(Init
->getType(), true,
751 GlobalValue::InternalLinkage
,
752 Init
, "llvm.dbg.block", &M
);
753 GV
->setSection("llvm.metadata");
758 //===----------------------------------------------------------------------===//
759 // DIFactory: Routines for inserting code into a function
760 //===----------------------------------------------------------------------===//
762 /// InsertStopPoint - Create a new llvm.dbg.stoppoint intrinsic invocation,
763 /// inserting it at the end of the specified basic block.
764 void DIFactory::InsertStopPoint(DICompileUnit CU
, unsigned LineNo
,
765 unsigned ColNo
, BasicBlock
*BB
) {
767 // Lazily construct llvm.dbg.stoppoint function.
769 StopPointFn
= llvm::Intrinsic::getDeclaration(&M
,
770 llvm::Intrinsic::dbg_stoppoint
);
772 // Invoke llvm.dbg.stoppoint
774 llvm::ConstantInt::get(llvm::Type::Int32Ty
, LineNo
),
775 llvm::ConstantInt::get(llvm::Type::Int32Ty
, ColNo
),
778 CallInst::Create(StopPointFn
, Args
, Args
+3, "", BB
);
781 /// InsertSubprogramStart - Create a new llvm.dbg.func.start intrinsic to
782 /// mark the start of the specified subprogram.
783 void DIFactory::InsertSubprogramStart(DISubprogram SP
, BasicBlock
*BB
) {
784 // Lazily construct llvm.dbg.func.start.
786 FuncStartFn
= Intrinsic::getDeclaration(&M
, Intrinsic::dbg_func_start
);
788 // Call llvm.dbg.func.start which also implicitly sets a stoppoint.
789 CallInst::Create(FuncStartFn
, getCastToEmpty(SP
), "", BB
);
792 /// InsertRegionStart - Insert a new llvm.dbg.region.start intrinsic call to
793 /// mark the start of a region for the specified scoping descriptor.
794 void DIFactory::InsertRegionStart(DIDescriptor D
, BasicBlock
*BB
) {
795 // Lazily construct llvm.dbg.region.start function.
797 RegionStartFn
= Intrinsic::getDeclaration(&M
, Intrinsic::dbg_region_start
);
799 // Call llvm.dbg.func.start.
800 CallInst::Create(RegionStartFn
, getCastToEmpty(D
), "", BB
);
803 /// InsertRegionEnd - Insert a new llvm.dbg.region.end intrinsic call to
804 /// mark the end of a region for the specified scoping descriptor.
805 void DIFactory::InsertRegionEnd(DIDescriptor D
, BasicBlock
*BB
) {
806 // Lazily construct llvm.dbg.region.end function.
808 RegionEndFn
= Intrinsic::getDeclaration(&M
, Intrinsic::dbg_region_end
);
810 // Call llvm.dbg.region.end.
811 CallInst::Create(RegionEndFn
, getCastToEmpty(D
), "", BB
);
814 /// InsertDeclare - Insert a new llvm.dbg.declare intrinsic call.
815 void DIFactory::InsertDeclare(Value
*Storage
, DIVariable D
, BasicBlock
*BB
) {
816 // Cast the storage to a {}* for the call to llvm.dbg.declare.
817 Storage
= new BitCastInst(Storage
, EmptyStructPtr
, "", BB
);
820 DeclareFn
= Intrinsic::getDeclaration(&M
, Intrinsic::dbg_declare
);
822 Value
*Args
[] = { Storage
, getCastToEmpty(D
) };
823 CallInst::Create(DeclareFn
, Args
, Args
+2, "", BB
);
827 /// findStopPoint - Find the stoppoint coressponding to this instruction, that
828 /// is the stoppoint that dominates this instruction.
829 const DbgStopPointInst
*findStopPoint(const Instruction
*Inst
) {
830 if (const DbgStopPointInst
*DSI
= dyn_cast
<DbgStopPointInst
>(Inst
))
833 const BasicBlock
*BB
= Inst
->getParent();
834 BasicBlock::const_iterator I
= Inst
, B
;
838 // A BB consisting only of a terminator can't have a stoppoint.
841 if (const DbgStopPointInst
*DSI
= dyn_cast
<DbgStopPointInst
>(I
))
845 // This BB didn't have a stoppoint: if there is only one predecessor, look
846 // for a stoppoint there. We could use getIDom(), but that would require
848 BB
= I
->getParent()->getUniquePredecessor();
850 I
= BB
->getTerminator();
856 /// findBBStopPoint - Find the stoppoint corresponding to first real
857 /// (non-debug intrinsic) instruction in this Basic Block, and return the
858 /// stoppoint for it.
859 const DbgStopPointInst
*findBBStopPoint(const BasicBlock
*BB
) {
860 for(BasicBlock::const_iterator I
= BB
->begin(), E
= BB
->end(); I
!= E
; ++I
)
861 if (const DbgStopPointInst
*DSI
= dyn_cast
<DbgStopPointInst
>(I
))
864 // Fallback to looking for stoppoint of unique predecessor. Useful if this
865 // BB contains no stoppoints, but unique predecessor does.
866 BB
= BB
->getUniquePredecessor();
868 return findStopPoint(BB
->getTerminator());
873 Value
*findDbgGlobalDeclare(GlobalVariable
*V
) {
874 const Module
*M
= V
->getParent();
875 const Type
*Ty
= M
->getTypeByName("llvm.dbg.global_variable.type");
878 Ty
= PointerType::get(Ty
, 0);
880 Value
*Val
= V
->stripPointerCasts();
881 for (Value::use_iterator I
= Val
->use_begin(), E
= Val
->use_end();
883 if (ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(I
)) {
884 if (CE
->getOpcode() == Instruction::BitCast
) {
887 while (VV
->hasOneUse())
888 VV
= *VV
->use_begin();
890 if (VV
->getType() == Ty
)
896 if (Val
->getType() == Ty
)
902 /// Finds the llvm.dbg.declare intrinsic corresponding to this value if any.
903 /// It looks through pointer casts too.
904 const DbgDeclareInst
*findDbgDeclare(const Value
*V
, bool stripCasts
) {
906 V
= V
->stripPointerCasts();
908 // Look for the bitcast.
909 for (Value::use_const_iterator I
= V
->use_begin(), E
=V
->use_end();
911 if (isa
<BitCastInst
>(I
))
912 return findDbgDeclare(*I
, false);
917 // Find llvm.dbg.declare among uses of the instruction.
918 for (Value::use_const_iterator I
= V
->use_begin(), E
=V
->use_end();
920 if (const DbgDeclareInst
*DDI
= dyn_cast
<DbgDeclareInst
>(I
))
926 bool getLocationInfo(const Value
*V
, std::string
&DisplayName
,
927 std::string
&Type
, unsigned &LineNo
, std::string
&File
,
932 if (GlobalVariable
*GV
= dyn_cast
<GlobalVariable
>(const_cast<Value
*>(V
))) {
933 Value
*DIGV
= findDbgGlobalDeclare(GV
);
934 if (!DIGV
) return false;
935 DIGlobalVariable
Var(cast
<GlobalVariable
>(DIGV
));
937 Var
.getDisplayName(DisplayName
);
938 LineNo
= Var
.getLineNumber();
939 Unit
= Var
.getCompileUnit();
940 TypeD
= Var
.getType();
942 const DbgDeclareInst
*DDI
= findDbgDeclare(V
);
943 if (!DDI
) return false;
944 DIVariable
Var(cast
<GlobalVariable
>(DDI
->getVariable()));
946 Var
.getName(DisplayName
);
947 LineNo
= Var
.getLineNumber();
948 Unit
= Var
.getCompileUnit();
949 TypeD
= Var
.getType();
953 Unit
.getFilename(File
);
954 Unit
.getDirectory(Dir
);
959 /// dump - Print descriptor.
960 void DIDescriptor::dump() const {
961 cerr
<< "[" << dwarf::TagString(getTag()) << "] ";
962 cerr
<< std::hex
<< "[GV:" << GV
<< "]" << std::dec
;
965 /// dump - Print compile unit.
966 void DICompileUnit::dump() const {
968 cerr
<< " [" << dwarf::LanguageString(getLanguage()) << "] ";
970 std::string Res1
, Res2
;
971 cerr
<< " [" << getDirectory(Res1
) << "/" << getFilename(Res2
) << " ]";
974 /// dump - Print type.
975 void DIType::dump() const {
976 if (isNull()) return;
979 if (!getName(Res
).empty())
980 cerr
<< " [" << Res
<< "] ";
982 unsigned Tag
= getTag();
983 cerr
<< " [" << dwarf::TagString(Tag
) << "] ";
985 // TODO : Print context
986 getCompileUnit().dump();
988 << getLineNumber() << ", "
989 << getSizeInBits() << ", "
990 << getAlignInBits() << ", "
995 cerr
<< " [private] ";
996 else if (isProtected())
997 cerr
<< " [protected] ";
1002 if (isBasicType(Tag
))
1003 DIBasicType(GV
).dump();
1004 else if (isDerivedType(Tag
))
1005 DIDerivedType(GV
).dump();
1006 else if (isCompositeType(Tag
))
1007 DICompositeType(GV
).dump();
1009 cerr
<< "Invalid DIType\n";
1016 /// dump - Print basic type.
1017 void DIBasicType::dump() const {
1018 cerr
<< " [" << dwarf::AttributeEncodingString(getEncoding()) << "] ";
1021 /// dump - Print derived type.
1022 void DIDerivedType::dump() const {
1023 cerr
<< "\n\t Derived From: "; getTypeDerivedFrom().dump();
1026 /// dump - Print composite type.
1027 void DICompositeType::dump() const {
1028 DIArray A
= getTypeArray();
1031 cerr
<< " [" << A
.getNumElements() << " elements]";
1034 /// dump - Print global.
1035 void DIGlobal::dump() const {
1037 if (!getName(Res
).empty())
1038 cerr
<< " [" << Res
<< "] ";
1040 unsigned Tag
= getTag();
1041 cerr
<< " [" << dwarf::TagString(Tag
) << "] ";
1043 // TODO : Print context
1044 getCompileUnit().dump();
1045 cerr
<< " [" << getLineNumber() << "] ";
1047 if (isLocalToUnit())
1048 cerr
<< " [local] ";
1053 if (isGlobalVariable(Tag
))
1054 DIGlobalVariable(GV
).dump();
1059 /// dump - Print subprogram.
1060 void DISubprogram::dump() const {
1064 /// dump - Print global variable.
1065 void DIGlobalVariable::dump() const {
1066 cerr
<< " ["; getGlobal()->dump(); cerr
<< "] ";
1069 /// dump - Print variable.
1070 void DIVariable::dump() const {
1072 if (!getName(Res
).empty())
1073 cerr
<< " [" << Res
<< "] ";
1075 getCompileUnit().dump();
1076 cerr
<< " [" << getLineNumber() << "] ";