#include <string>
#include "llvm/ADT/StringRef.h"
-
-// FIXME: HORRIBLE HACK: major layering violation to get an enum.
-#include "llvm/Target/TargetLoweringObjectFile.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 {
+ MCSection(const MCSection&); // DO NOT IMPLEMENT
+ void operator=(const MCSection&); // DO NOT IMPLEMENT
+ protected:
+ MCSection(SectionKind K) : Kind(K) {}
+ SectionKind Kind;
+ public:
+ virtual ~MCSection();
+
+ SectionKind getKind() const { return Kind; }
+
+ virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
+ raw_ostream &OS) const = 0;
+ };
+
+ class MCSectionCOFF : public MCSection {
+ // FIXME: This memory is leaked because MCSectionCOFF is bump pointer
+ // allocated and this never gets freed.
std::string Name;
/// IsDirective - This is true if the section name is a directive, not
/// of a syntactic one.
bool IsDirective;
- MCSection(const MCSection&); // DO NOT IMPLEMENT
- void operator=(const MCSection&); // DO NOT IMPLEMENT
- protected:
- MCSection(const StringRef &Name, bool IsDirective, SectionKind K,
- MCContext &Ctx);
- SectionKind Kind;
+ MCSectionCOFF(StringRef name, bool isDirective, SectionKind K)
+ : MCSection(K), Name(name), IsDirective(isDirective) {
+ }
public:
- virtual ~MCSection();
+
+ static MCSectionCOFF *Create(StringRef Name, bool IsDirective,
+ SectionKind K, MCContext &Ctx);
+ const std::string &getName() const { return Name; }
bool isDirective() const { return IsDirective; }
- static MCSection *Create(const StringRef &Name, bool IsDirective,
- SectionKind K, MCContext &Ctx);
-
- const std::string &getName() const { return Name; }
- SectionKind getKind() const { return Kind; }
+ virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
+ raw_ostream &OS) const;
};
-
-
- typedef MCSection MCSectionELF;
} // end namespace llvm