[llvm-commits] [llvm] r77684 - in /llvm/trunk: include/llvm/MC/MCSection.h lib/MC/CMakeLists.txt lib/MC/MCContext.cpp lib/MC/MCSection.cpp
Chris Lattner
sabre at nondot.org
Fri Jul 31 10:02:00 PDT 2009
Author: lattner
Date: Fri Jul 31 12:02:00 2009
New Revision: 77684
URL: http://llvm.org/viewvc/llvm-project?rev=77684&view=rev
Log:
split MCSection stuff out to its own .cpp file, add a new
MCSectionWithKind subclass of MCSection.
Added:
llvm/trunk/lib/MC/MCSection.cpp
Modified:
llvm/trunk/include/llvm/MC/MCSection.h
llvm/trunk/lib/MC/CMakeLists.txt
llvm/trunk/lib/MC/MCContext.cpp
Modified: llvm/trunk/include/llvm/MC/MCSection.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCSection.h?rev=77684&r1=77683&r2=77684&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCSection.h (original)
+++ llvm/trunk/include/llvm/MC/MCSection.h Fri Jul 31 12:02:00 2009
@@ -17,24 +17,45 @@
#include <string>
#include "llvm/ADT/StringRef.h"
-namespace llvm {
+// FIXME: HORRIBLE HACK: major layering violation to get an enum.
+#include "llvm/Target/TargetLoweringObjectFile.h"
+namespace llvm {
+ class MCContext;
+
/// 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:
MCSection(const MCSection&); // DO NOT IMPLEMENT
void operator=(const MCSection&); // DO NOT IMPLEMENT
- MCSection(const StringRef &_Name, MCContext &Ctx);
+ protected:
+ MCSection(const StringRef &Name, MCContext &Ctx);
public:
+ virtual ~MCSection();
- static MCSection *Create(const StringRef &_Name, MCContext &Ctx);
+ static MCSection *Create(const StringRef &Name, MCContext &Ctx);
const std::string &getName() const { return Name; }
};
+ /// MCSectionWithKind - This is used by targets that use the SectionKind enum
+ /// to classify their sections.
+ class MCSectionWithKind : public MCSection {
+ SectionKind Kind;
+ MCSectionWithKind(const StringRef &Name, SectionKind K, MCContext &Ctx)
+ : MCSection(Name, Ctx), Kind(K) {}
+ public:
+
+ static MCSectionWithKind *Create(const StringRef &Name, SectionKind K,
+ MCContext &Ctx);
+
+ SectionKind getKind() const { return Kind; }
+ };
+
+
+
} // end namespace llvm
#endif
Modified: llvm/trunk/lib/MC/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/CMakeLists.txt?rev=77684&r1=77683&r2=77684&view=diff
==============================================================================
--- llvm/trunk/lib/MC/CMakeLists.txt (original)
+++ llvm/trunk/lib/MC/CMakeLists.txt Fri Jul 31 12:02:00 2009
@@ -3,6 +3,7 @@
MCAsmParser.cpp
MCAsmStreamer.cpp
MCContext.cpp
+ MCSection.cpp
MCStreamer.cpp
TargetAsmParser.cpp
)
Modified: llvm/trunk/lib/MC/MCContext.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCContext.cpp?rev=77684&r1=77683&r2=77684&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCContext.cpp (original)
+++ llvm/trunk/lib/MC/MCContext.cpp Fri Jul 31 12:02:00 2009
@@ -25,18 +25,6 @@
return I != Sections.end() ? I->second : 0;
}
-
-MCSection::MCSection(const StringRef &_Name, MCContext &Ctx) : Name(_Name) {
- MCSection *&Entry = Ctx.Sections[Name];
- assert(Entry == 0 && "Multiple sections with the same name created");
- Entry = this;
-}
-
-MCSection *MCSection::Create(const StringRef &Name, MCContext &Ctx) {
- return new (Ctx) MCSection(Name, Ctx);
-}
-
-
MCSymbol *MCContext::CreateSymbol(const StringRef &Name) {
assert(Name[0] != '\0' && "Normal symbols cannot be unnamed!");
Added: llvm/trunk/lib/MC/MCSection.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSection.cpp?rev=77684&view=auto
==============================================================================
--- llvm/trunk/lib/MC/MCSection.cpp (added)
+++ llvm/trunk/lib/MC/MCSection.cpp Fri Jul 31 12:02:00 2009
@@ -0,0 +1,31 @@
+//===- lib/MC/MCSection.cpp - Machine Code Section Representation ---------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/MC/MCSection.h"
+#include "llvm/MC/MCContext.h"
+using namespace llvm;
+
+MCSection::~MCSection() {
+}
+
+MCSection::MCSection(const StringRef &N, MCContext &Ctx) : Name(N) {
+ MCSection *&Entry = Ctx.Sections[Name];
+ assert(Entry == 0 && "Multiple sections with the same name created");
+ Entry = this;
+}
+
+MCSection *MCSection::Create(const StringRef &Name, MCContext &Ctx) {
+ return new (Ctx) MCSection(Name, Ctx);
+}
+
+
+MCSectionWithKind *
+MCSectionWithKind::Create(const StringRef &Name, SectionKind K, MCContext &Ctx){
+ return new (Ctx) MCSectionWithKind(Name, K, Ctx);
+}
More information about the llvm-commits
mailing list