summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
diff options
context:
space:
mode:
authorManman Ren <mren@apple.com>2013-04-04 00:22:54 +0000
committerManman Ren <mren@apple.com>2013-04-04 00:22:54 +0000
commit5a15c9ed9f24fcba104e7d8e834cf890d973daaa (patch)
treecd5142e74c95948846b89e70f3db46a8bb199ebb /llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
parent770a4c1a37010722c60d8fb9eae94be3b7873ddf (diff)
downloadbcm5719-llvm-5a15c9ed9f24fcba104e7d8e834cf890d973daaa.tar.gz
bcm5719-llvm-5a15c9ed9f24fcba104e7d8e834cf890d973daaa.zip
Debug Info: according to DWARF 2, FORM_ref_addr the same size as an address on
the target system. It was hard-coded to 4 bytes before. I can't get llvm to generate a ref_addr on a reasonably sized testing case. rdar://problem/13559431 llvm-svn: 178722
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp')
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index d3cb4f9c1c0..b6b0bb1237c 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -1791,7 +1791,14 @@ void DwarfDebug::emitDIE(DIE *Die, std::vector<DIEAbbrev *> *Abbrevs) {
DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
Addr += Holder.getCUOffset(Origin->getCompileUnit());
}
- Asm->EmitInt32(Addr);
+ // DWARF4: References that use the attribute form DW_FORM_ref_addr are
+ // specified to be four bytes in the DWARF 32-bit format and eight bytes
+ // in the DWARF 64-bit format, while DWARF Version 2 specifies that such
+ // references have the same size as an address on the target system.
+ // Our current version is version 2.
+ Asm->OutStreamer.EmitIntValue(Addr,
+ Form == dwarf::DW_FORM_ref_addr ?
+ Asm->getDataLayout().getPointerSize() : 4);
break;
}
case dwarf::DW_AT_ranges: {
OpenPOWER on IntegriCloud