#include "PIC16.h"
#include "PIC16ABINames.h"
#include "PIC16Section.h"
#include "llvm/MC/MCContext.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
PIC16Section *PIC16Section::Create(const StringRef &Name,
PIC16SectionType Ty,
const std::string &Address,
int Color, MCContext &Ctx) {
SectionKind K;
switch (Ty) {
default: llvm_unreachable ("can not create unknown section type");
case UDATA_OVR: {
K = SectionKind::getThreadBSS();
break;
}
case UDATA_SHR:
case UDATA: {
K = SectionKind::getBSS();
break;
}
case ROMDATA:
case IDATA: {
K = SectionKind::getMetadata();
break;
}
case CODE: {
K = SectionKind::getText();
break;
}
}
PIC16Section *S = new (Ctx) PIC16Section(Name, K, Address, Color);
S->T = Ty;
return S;
}
void PIC16Section::PrintSwitchToSection(const MCAsmInfo &MAI,
raw_ostream &OS) const {
if (Color != -1)
OS << PAN::getOverlayName(getName(), Color) << '\t';
else
OS << getName() << '\t';
switch (getType()) {
default : llvm_unreachable ("unknown section type");
case UDATA: OS << "UDATA"; break;
case IDATA: OS << "IDATA"; break;
case ROMDATA: OS << "ROMDATA"; break;
case UDATA_SHR: OS << "UDATA_SHR"; break;
case UDATA_OVR: OS << "UDATA_OVR"; break;
case CODE: OS << "CODE"; break;
}
OS << '\t';
OS << Address;
OS << '\n';
}