summaryrefslogtreecommitdiffstats
path: root/include/llvm/MC/MCSection.h
diff options
context:
space:
mode:
authorrdivacky <rdivacky@FreeBSD.org>2009-10-14 17:57:32 +0000
committerrdivacky <rdivacky@FreeBSD.org>2009-10-14 17:57:32 +0000
commitcd749a9c07f1de2fb8affde90537efa4bc3e7c54 (patch)
treeb21f6de4e08b89bb7931806bab798fc2a5e3a686 /include/llvm/MC/MCSection.h
parent72621d11de5b873f1695f391eb95f0b336c3d2d4 (diff)
downloadFreeBSD-src-cd749a9c07f1de2fb8affde90537efa4bc3e7c54.zip
FreeBSD-src-cd749a9c07f1de2fb8affde90537efa4bc3e7c54.tar.gz
Update llvm to r84119.
Diffstat (limited to 'include/llvm/MC/MCSection.h')
-rw-r--r--include/llvm/MC/MCSection.h46
1 files changed, 39 insertions, 7 deletions
diff --git a/include/llvm/MC/MCSection.h b/include/llvm/MC/MCSection.h
index 1b127b5..9e07186 100644
--- a/include/llvm/MC/MCSection.h
+++ b/include/llvm/MC/MCSection.h
@@ -15,25 +15,57 @@
#define LLVM_MC_MCSECTION_H
#include <string>
+#include "llvm/ADT/StringRef.h"
+#include "llvm/MC/SectionKind.h"
namespace llvm {
-
+ class MCContext;
+ class MCAsmInfo;
+ class raw_ostream;
+
/// MCSection - Instances of this class represent a uniqued identifier for a
/// section in the current translation unit. The MCContext class uniques and
/// creates these.
class MCSection {
- std::string Name;
- private:
- friend class MCContext;
- MCSection(const char *_Name) : Name(_Name) {}
-
MCSection(const MCSection&); // DO NOT IMPLEMENT
void operator=(const MCSection&); // DO NOT IMPLEMENT
+ protected:
+ MCSection(SectionKind K) : Kind(K) {}
+ SectionKind Kind;
public:
+ virtual ~MCSection();
- const std::string &getName() const { return Name; }
+ SectionKind getKind() const { return Kind; }
+
+ virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
+ raw_ostream &OS) const = 0;
};
+ class MCSectionCOFF : public MCSection {
+ std::string Name;
+
+ /// IsDirective - This is true if the section name is a directive, not
+ /// something that should be printed with ".section".
+ ///
+ /// FIXME: This is a hack. Switch to a semantic view of the section instead
+ /// of a syntactic one.
+ bool IsDirective;
+
+ MCSectionCOFF(const StringRef &name, bool isDirective, SectionKind K)
+ : MCSection(K), Name(name), IsDirective(isDirective) {
+ }
+ public:
+
+ static MCSectionCOFF *Create(const StringRef &Name, bool IsDirective,
+ SectionKind K, MCContext &Ctx);
+
+ const std::string &getName() const { return Name; }
+ bool isDirective() const { return IsDirective; }
+
+ virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
+ raw_ostream &OS) const;
+ };
+
} // end namespace llvm
#endif
OpenPOWER on IntegriCloud