diff options
author | Devang Patel <dpatel@apple.com> | 2010-03-08 22:27:22 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2010-03-08 22:27:22 +0000 |
commit | 7aa81897066a20ace12c8f61ae0e5a253fb64dc2 (patch) | |
tree | 0864e4ad7375ae4e7da3121990a18f19f433737e /lib/Analysis/DebugInfo.cpp | |
parent | b98b1bf43259052d1b06b90cc643a47bb239e2bb (diff) |
Introduce DIFile. This will be used to represent header files and source file(s) in debug info.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97994 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/DebugInfo.cpp')
-rw-r--r-- | lib/Analysis/DebugInfo.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/Analysis/DebugInfo.cpp b/lib/Analysis/DebugInfo.cpp index 4ea1ce94b1..49b2e6b2c5 100644 --- a/lib/Analysis/DebugInfo.cpp +++ b/lib/Analysis/DebugInfo.cpp @@ -219,6 +219,11 @@ bool DIDescriptor::isCompileUnit() const { return DbgNode && getTag() == dwarf::DW_TAG_compile_unit; } +/// isFile - Return true if the specified tag is DW_TAG_file_type. +bool DIDescriptor::isFile() const { + return DbgNode && getTag() == dwarf::DW_TAG_file_type; +} + /// isNameSpace - Return true if the specified tag is DW_TAG_namespace. bool DIDescriptor::isNameSpace() const { return DbgNode && getTag() == dwarf::DW_TAG_namespace; @@ -424,6 +429,8 @@ StringRef DIScope::getFilename() const { return DINameSpace(DbgNode).getFilename(); if (isType()) return DIType(DbgNode).getFilename(); + if (isFile()) + return DIFile(DbgNode).getFilename(); assert(0 && "Invalid DIScope!"); return StringRef(); } @@ -441,6 +448,8 @@ StringRef DIScope::getDirectory() const { return DINameSpace(DbgNode).getDirectory(); if (isType()) return DIType(DbgNode).getDirectory(); + if (isFile()) + return DIFile(DbgNode).getDirectory(); assert(0 && "Invalid DIScope!"); return StringRef(); } @@ -661,6 +670,20 @@ DICompileUnit DIFactory::CreateCompileUnit(unsigned LangID, return DICompileUnit(MDNode::get(VMContext, &Elts[0], 10)); } +/// CreateFile - Create a new descriptor for the specified file. +DIFile DIFactory::CreateFile(StringRef Filename, + StringRef Directory, + DICompileUnit CU) { + Value *Elts[] = { + GetTagConstant(dwarf::DW_TAG_file_type), + MDString::get(VMContext, Filename), + MDString::get(VMContext, Directory), + CU.getNode() + }; + + return DIFile(MDNode::get(VMContext, &Elts[0], 4)); +} + /// CreateEnumerator - Create a single enumerator value. DIEnumerator DIFactory::CreateEnumerator(StringRef Name, uint64_t Val){ Value *Elts[] = { |