diff options
author | Manman Ren <mren@apple.com> | 2013-04-04 00:22:54 +0000 |
---|---|---|
committer | Manman Ren <mren@apple.com> | 2013-04-04 00:22:54 +0000 |
commit | 5a15c9ed9f24fcba104e7d8e834cf890d973daaa (patch) | |
tree | cd5142e74c95948846b89e70f3db46a8bb199ebb /llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | |
parent | 770a4c1a37010722c60d8fb9eae94be3b7873ddf (diff) | |
download | bcm5719-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.cpp | 9 |
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: { |