make PIC16 unique its own sections instead of having mcontext do it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78871 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-08-13 00:26:52 +00:00
parent c9d31524ee
commit 873bc4ccfd
3 changed files with 14 additions and 10 deletions

View File

@ -21,8 +21,10 @@ namespace llvm {
class MCSectionPIC16 : public MCSection {
std::string Name;
MCSectionPIC16(const StringRef &name, SectionKind K,
MCContext &Ctx);
MCSectionPIC16(const StringRef &name, SectionKind K)
: MCSection(K), Name(name) {
}
public:
const std::string &getName() const { return Name; }

View File

@ -18,14 +18,10 @@
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
MCSectionPIC16::MCSectionPIC16(const StringRef &name, SectionKind K,
MCContext &Ctx) : MCSection(K), Name(name) {
Ctx.SetSection(Name, this);
}
MCSectionPIC16 *MCSectionPIC16::Create(const StringRef &Name,
SectionKind K, MCContext &Ctx) {
return new (Ctx) MCSectionPIC16(Name, K, Ctx);
return new (Ctx) MCSectionPIC16(Name, K);
}
@ -43,9 +39,11 @@ PIC16TargetObjectFile::PIC16TargetObjectFile()
const MCSectionPIC16 *PIC16TargetObjectFile::
getPIC16Section(const char *Name, SectionKind Kind) const {
if (MCSection *S = getContext().GetSection(Name))
return (MCSectionPIC16*)S;
return MCSectionPIC16::Create(Name, Kind, getContext());
MCSectionPIC16 *&Entry = SectionsByName[Name];
if (Entry)
return Entry;
return Entry = MCSectionPIC16::Create(Name, Kind, getContext());
}

View File

@ -11,6 +11,7 @@
#define LLVM_TARGET_PIC16_TARGETOBJECTFILE_H
#include "llvm/Target/TargetLoweringObjectFile.h"
#include "llvm/ADT/StringMap.h"
#include <vector>
#include <string>
@ -46,6 +47,9 @@ namespace llvm {
};
class PIC16TargetObjectFile : public TargetLoweringObjectFile {
/// SectionsByName - Bindings of names to allocated sections.
mutable StringMap<MCSectionPIC16*> SectionsByName;
const TargetMachine *TM;
const MCSectionPIC16 *getPIC16Section(const char *Name,