aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/CodeGen/AsmPrinter.h15
-rw-r--r--lib/CodeGen/AsmPrinter/AsmPrinter.cpp35
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfDebug.cpp2
3 files changed, 22 insertions, 30 deletions
diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h
index cab75f1852..847c945266 100644
--- a/include/llvm/CodeGen/AsmPrinter.h
+++ b/include/llvm/CodeGen/AsmPrinter.h
@@ -60,6 +60,10 @@ namespace llvm {
typedef gcp_map_type::iterator gcp_iterator;
gcp_map_type GCMetadataPrinters;
+ /// CurrentSection - The current section we are emitting to. This is
+ /// controlled and used by the SwitchToSection method.
+ const MCSection *CurrentSection;
+
protected:
/// MMI - If available, this is a pointer to the current MachineModuleInfo.
MachineModuleInfo *MMI;
@@ -110,14 +114,9 @@ namespace llvm {
///
std::string CurrentFnName;
- /// CurrentSection - The current section we are emitting to. This is
- /// controlled and used by the SwitchSection method.
- std::string CurrentSection;
- const MCSection *CurrentSection_;
-
- /// IsInTextSection - True if the current section we are emitting to is a
- /// text section.
- bool IsInTextSection;
+ /// getCurrentSection() - Return the current section we are emitting to.
+ const MCSection *getCurrentSection() const { return CurrentSection; }
+
/// VerboseAsm - Emit comments in assembly output if this is true.
///
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index f813c8b3a8..742997aaaa 100644
--- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -55,8 +55,9 @@ AsmPrinter::AsmPrinter(formatted_raw_ostream &o, TargetMachine &tm,
OutContext(*new MCContext()),
OutStreamer(*createAsmStreamer(OutContext, O)),
- IsInTextSection(false), LastMI(0), LastFn(0), Counter(~0U),
+ LastMI(0), LastFn(0), Counter(~0U),
PrevDLT(0, ~0U, ~0U) {
+ CurrentSection = 0;
DW = 0; MMI = 0;
switch (AsmVerbose) {
case cl::BOU_UNSET: VerboseAsm = VDef; break;
@@ -86,20 +87,16 @@ TargetLoweringObjectFile &AsmPrinter::getObjFileLowering() const {
/// FIXME: Remove support for null sections.
///
void AsmPrinter::SwitchToSection(const MCSection *NS) {
- const std::string &NewSection = NS ? NS->getName() : "";
-
// If we're already in this section, we're done.
- if (CurrentSection == NewSection) return;
+ if (CurrentSection == NS) return;
// Close the current section, if applicable.
- if (TAI->getSectionEndDirectiveSuffix() && !CurrentSection.empty())
- O << CurrentSection << TAI->getSectionEndDirectiveSuffix() << '\n';
+ if (NS != 0 && TAI->getSectionEndDirectiveSuffix())
+ O << NS->getName() << TAI->getSectionEndDirectiveSuffix() << '\n';
- // FIXME: Make CurrentSection a Section* in the future
- CurrentSection = NewSection;
- CurrentSection_ = NS;
+ CurrentSection = NS;
- if (!CurrentSection.empty()) {
+ if (NS != 0) {
// If section is named we need to switch into it via special '.section'
// directive and also append funky flags. Otherwise - section name is just
// some magic assembler directive.
@@ -109,15 +106,12 @@ void AsmPrinter::SwitchToSection(const MCSection *NS) {
getObjFileLowering().getSectionFlagsAsString(NS->getKind(), FlagsStr);
O << TAI->getSwitchToSectionDirective()
- << CurrentSection
- << FlagsStr.c_str();
+ << CurrentSection->getName() << FlagsStr.c_str();
} else {
- O << CurrentSection;
+ O << CurrentSection->getName();
}
O << TAI->getDataSectionStartSuffix() << '\n';
}
-
- IsInTextSection = NS ? NS->getKind().isText() : false;
}
void AsmPrinter::getAnalysisUsage(AnalysisUsage &AU) const {
@@ -787,12 +781,11 @@ void AsmPrinter::EmitAlignment(unsigned NumBits, const GlobalValue *GV,
if (TAI->getAlignmentIsInBytes()) NumBits = 1 << NumBits;
O << TAI->getAlignDirective() << NumBits;
- unsigned FillValue = TAI->getTextAlignFillValue();
- UseFillExpr &= IsInTextSection && FillValue;
- if (UseFillExpr) {
- O << ',';
- PrintHex(FillValue);
- }
+ if (CurrentSection && CurrentSection->getKind().isText())
+ if (unsigned FillValue = TAI->getTextAlignFillValue()) {
+ O << ',';
+ PrintHex(FillValue);
+ }
O << '\n';
}
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index 3cb273fd58..be481bdc27 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -1463,7 +1463,7 @@ void DwarfDebug::EndFunction(MachineFunction *MF) {
// Get function line info.
if (!Lines.empty()) {
// Get section line info.
- unsigned ID = SectionMap.insert(Asm->CurrentSection_);
+ unsigned ID = SectionMap.insert(Asm->getCurrentSection());
if (SectionSourceLines.size() < ID) SectionSourceLines.resize(ID);
std::vector<SrcLineInfo> &SectionLineInfos = SectionSourceLines[ID-1];
// Append the function info to section info.