aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Analysis/DebugInfo.cpp8
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfWriter.cpp5
-rw-r--r--lib/Support/Dwarf.cpp2
3 files changed, 13 insertions, 2 deletions
diff --git a/lib/Analysis/DebugInfo.cpp b/lib/Analysis/DebugInfo.cpp
index 34ccd0a97c..2f336572a1 100644
--- a/lib/Analysis/DebugInfo.cpp
+++ b/lib/Analysis/DebugInfo.cpp
@@ -440,14 +440,18 @@ DISubrange DIFactory::GetOrCreateSubrange(int64_t Lo, int64_t Hi) {
DICompileUnit DIFactory::CreateCompileUnit(unsigned LangID,
const std::string &Filename,
const std::string &Directory,
- const std::string &Producer) {
+ const std::string &Producer,
+ bool isOptimized,
+ const char *Flags) {
Constant *Elts[] = {
GetTagConstant(dwarf::DW_TAG_compile_unit),
getCastToEmpty(GetOrCreateCompileUnitAnchor()),
ConstantInt::get(Type::Int32Ty, LangID),
GetStringConstant(Filename),
GetStringConstant(Directory),
- GetStringConstant(Producer)
+ GetStringConstant(Producer),
+ ConstantInt::get(Type::Int1Ty, isOptimized),
+ GetStringConstant(Flags)
};
Constant *Init = ConstantStruct::get(Elts, sizeof(Elts)/sizeof(Elts[0]));
diff --git a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
index 6bbb5bb9b7..4b19d06c92 100644
--- a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
@@ -2781,6 +2781,11 @@ private:
AddString(Die, DW_AT_name, DW_FORM_string, DIUnit.getFilename());
if (!DIUnit.getDirectory().empty())
AddString(Die, DW_AT_comp_dir, DW_FORM_string, DIUnit.getDirectory());
+ if (DIUnit.isOptimized())
+ AddUInt(Die, DW_AT_APPLE_optimized, DW_FORM_flag, 1);
+ const std::string &Flags = DIUnit.getFlags();
+ if (!Flags.empty())
+ AddString(Die, DW_AT_APPLE_flags, DW_FORM_string, Flags);
CompileUnit *Unit = new CompileUnit(ID, Die);
DW_CUs[DIUnit.getGV()] = Unit;
diff --git a/lib/Support/Dwarf.cpp b/lib/Support/Dwarf.cpp
index b7cf3b977a..10a2c3c64f 100644
--- a/lib/Support/Dwarf.cpp
+++ b/lib/Support/Dwarf.cpp
@@ -198,6 +198,8 @@ const char *AttributeString(unsigned Attribute) {
case DW_AT_GNU_vector: return "DW_AT_GNU_vector";
case DW_AT_lo_user: return "DW_AT_lo_user";
case DW_AT_hi_user: return "DW_AT_hi_user";
+ case DW_AT_APPLE_optimized: return "DW_AT_APPLE_optimized";
+ case DW_AT_APPLE_flags: return "DW_AT_APPLE_flags";
}
assert(0 && "Unknown Dwarf Attribute");
return "";