Skip to content
Snippets Groups Projects
Commit b5a32e2e authored by Anton Korobeynikov's avatar Anton Korobeynikov
Browse files

Provide direct function to switch to Section

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56571 91177308-0d34-0410-b5e6-96231b3b80d8
parent 90a7b88c
No related branches found
No related tags found
No related merge requests found
......@@ -32,6 +32,7 @@ namespace llvm {
class MachineConstantPoolValue;
class MachineModuleInfo;
class Mangler;
class Section;
class TargetAsmInfo;
class Type;
class raw_ostream;
......@@ -127,7 +128,11 @@ namespace llvm {
/// are the same.
///
void SwitchToDataSection(const char *NewSection, const GlobalValue *GV = NULL);
/// SwitchToSection - Switch to the specified section of the executable if
/// we are not already in it!
void SwitchToSection(const Section* NS);
/// getGlobalLinkName - Returns the asm/link name of of the specified
/// global variable. Should be overridden by each target asm printer to
/// generate the appropriate value.
......
......@@ -114,6 +114,7 @@ namespace llvm {
bool isNamed() const { return Flags & SectionFlags::Named; }
unsigned getEntitySize() const { return (Flags >> 24) & 0xFF; }
const std::string& getName() const { return Name; }
unsigned getFlags() const { return Flags; }
};
/// TargetAsmInfo - This class is intended to be used as a base class for asm
......
......@@ -105,6 +105,26 @@ void AsmPrinter::SwitchToDataSection(const char *NewSection,
IsInTextSection = false;
}
/// SwitchToSection - Switch to the specified section of the executable if we
/// are not already in it!
void AsmPrinter::SwitchToSection(const Section* NS) {
const std::string& NewSection = NS->getName();
// If we're already in this section, we're done.
if (CurrentSection == NewSection) return;
// Close the current section, if applicable.
if (TAI->getSectionEndDirectiveSuffix() && !CurrentSection.empty())
O << CurrentSection << TAI->getSectionEndDirectiveSuffix() << '\n';
// FIXME: Make CurrentSection a Section* in the future
CurrentSection = NewSection;
if (!CurrentSection.empty())
O << CurrentSection << TAI->getDataSectionStartSuffix() << '\n';
IsInTextSection = (NS->getFlags() & SectionFlags::Code);
}
void AsmPrinter::getAnalysisUsage(AnalysisUsage &AU) const {
MachineFunctionPass::getAnalysisUsage(AU);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment