summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
diff options
context:
space:
mode:
authorEric Christopher <echristo@gmail.com>2014-01-24 11:40:29 +0000
committerEric Christopher <echristo@gmail.com>2014-01-24 11:40:29 +0000
commitc528858cbd4fef01f2007cea8a4e8e25a6b86443 (patch)
tree4c44381c435c21a14c6af748ef659aa989cb8eb9 /llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
parent9f2134402c08e6d08c2e0f7a017afea2c7efe21b (diff)
downloadbcm5719-llvm-c528858cbd4fef01f2007cea8a4e8e25a6b86443.tar.gz
bcm5719-llvm-c528858cbd4fef01f2007cea8a4e8e25a6b86443.zip
Use DW_AT_high_pc and DW_AT_low_pc for the high and low pc for a
compile unit. Make these relocations on the platforms that need relocations and add a routine to ensure that we don't put the addresses in an offset table for split dwarf. llvm-svn: 199990
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp')
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index 7ba4fece43b..077af8c3756 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -187,6 +187,7 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
DwarfAddrSectionSym = 0;
DwarfAbbrevDWOSectionSym = DwarfStrDWOSectionSym = 0;
FunctionBeginSym = FunctionEndSym = 0;
+ TextSectionBeginSym = TextSectionEndSym = 0;
CurFn = 0;
CurMI = 0;
@@ -1061,9 +1062,12 @@ void DwarfDebug::finalizeModuleInfo() {
addSectionLabel(Asm, U, U->getUnitDie(), dwarf::DW_AT_ranges,
Asm->GetTempSymbol("cu_ranges", U->getUniqueID()),
DwarfDebugRangeSectionSym);
- else
- U->addUInt(U->getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
- 0);
+ else {
+ U->addLocalLabelAddress(U->getUnitDie(), dwarf::DW_AT_low_pc,
+ TextSectionBeginSym);
+ U->addLocalLabelAddress(U->getUnitDie(), dwarf::DW_AT_high_pc,
+ TextSectionEndSym);
+ }
}
}
@@ -1117,6 +1121,10 @@ void DwarfDebug::endSections() {
Sym = Asm->GetTempSymbol("debug_end", ID);
Asm->OutStreamer.SwitchSection(Section);
Asm->OutStreamer.EmitLabel(Sym);
+ // If this is the end of the text section keep track of where the end of
+ // the section is so that we can use it later.
+ if (Section == Asm->getObjFileLowering().getTextSection())
+ TextSectionEndSym = Sym;
}
// Insert a final terminator.
@@ -2012,6 +2020,8 @@ void DwarfDebug::emitSectionLabels() {
DwarfDebugLocSectionSym =
emitSectionSym(Asm, TLOF.getDwarfLocSection(), "section_debug_loc");
+
+ TextSectionBeginSym = emitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
}
// Recursively emits a debug information entry.
OpenPOWER on IntegriCloud