mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-10 18:34:09 +00:00
Teach CellSPU about ELF sections and new section emitter classes.
NB: This is likely to need more work. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58832 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
068a795b33
commit
d03eeafd9f
@ -14,38 +14,28 @@
|
|||||||
#include "SPUTargetAsmInfo.h"
|
#include "SPUTargetAsmInfo.h"
|
||||||
#include "SPUTargetMachine.h"
|
#include "SPUTargetMachine.h"
|
||||||
#include "llvm/Function.h"
|
#include "llvm/Function.h"
|
||||||
|
#include "llvm/Support/Compiler.h"
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
SPUTargetAsmInfo::SPUTargetAsmInfo(const SPUTargetMachine &TM)
|
SPULinuxTargetAsmInfo::SPULinuxTargetAsmInfo(const SPUTargetMachine &TM) :
|
||||||
: TargetAsmInfo(TM) {
|
SPUTargetAsmInfo<ELFTargetAsmInfo>(TM) {
|
||||||
PCSymbol = ".";
|
PCSymbol = ".";
|
||||||
CommentString = "#";
|
CommentString = "#";
|
||||||
GlobalPrefix = "";
|
GlobalPrefix = "";
|
||||||
PrivateGlobalPrefix = ".L";
|
PrivateGlobalPrefix = ".L";
|
||||||
ZeroDirective = "\t.space\t";
|
|
||||||
SetDirective = "\t.set";
|
|
||||||
Data64bitsDirective = "\t.quad\t";
|
|
||||||
AlignmentIsInBytes = false;
|
|
||||||
SwitchToSectionDirective = ".section\t";
|
|
||||||
ConstantPoolSection = "\t.const\t";
|
|
||||||
JumpTableDataSection = ".const";
|
|
||||||
CStringSection = "\t.cstring";
|
|
||||||
StaticCtorsSection = ".mod_init_func";
|
|
||||||
StaticDtorsSection = ".mod_term_func";
|
|
||||||
InlineAsmStart = "# InlineAsm Start";
|
|
||||||
InlineAsmEnd = "# InlineAsm End";
|
|
||||||
|
|
||||||
NeedsSet = true;
|
|
||||||
/* FIXME: Need actual assembler syntax for DWARF info: */
|
|
||||||
DwarfAbbrevSection = ".section __DWARF,__debug_abbrev,regular,debug";
|
|
||||||
DwarfInfoSection = ".section __DWARF,__debug_info,regular,debug";
|
|
||||||
DwarfLineSection = ".section __DWARF,__debug_line,regular,debug";
|
|
||||||
DwarfFrameSection = ".section __DWARF,__debug_frame,regular,debug";
|
|
||||||
DwarfPubNamesSection = ".section __DWARF,__debug_pubnames,regular,debug";
|
|
||||||
DwarfPubTypesSection = ".section __DWARF,__debug_pubtypes,regular,debug";
|
|
||||||
DwarfStrSection = ".section __DWARF,__debug_str,regular,debug";
|
|
||||||
DwarfLocSection = ".section __DWARF,__debug_loc,regular,debug";
|
|
||||||
DwarfARangesSection = ".section __DWARF,__debug_aranges,regular,debug";
|
|
||||||
DwarfRangesSection = ".section __DWARF,__debug_ranges,regular,debug";
|
|
||||||
DwarfMacInfoSection = ".section __DWARF,__debug_macinfo,regular,debug";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// PreferredEHDataFormat - This hook allows the target to select data
|
||||||
|
/// format used for encoding pointers in exception handling data. Reason is
|
||||||
|
/// 0 for data, 1 for code labels, 2 for function pointers. Global is true
|
||||||
|
/// if the symbol can be relocated.
|
||||||
|
unsigned
|
||||||
|
SPULinuxTargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason,
|
||||||
|
bool Global) const {
|
||||||
|
// We really need to write something here.
|
||||||
|
return TargetAsmInfo::PreferredEHDataFormat(Reason, Global);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Instantiate default implementation.
|
||||||
|
TEMPLATE_INSTANTIATION(class SPUTargetAsmInfo<TargetAsmInfo>);
|
||||||
|
@ -11,20 +11,41 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#ifndef PPCTARGETASMINFO_H
|
#ifndef SPUTARGETASMINFO_H
|
||||||
#define PPCTARGETASMINFO_H
|
#define SPUTARGETASMINFO_H
|
||||||
|
|
||||||
#include "llvm/Target/TargetAsmInfo.h"
|
#include "llvm/Target/TargetAsmInfo.h"
|
||||||
|
#include "llvm/Target/ELFTargetAsmInfo.h"
|
||||||
|
#include "SPUTargetMachine.h"
|
||||||
|
#include "SPUSubtarget.h"
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
|
|
||||||
// Forward declaration.
|
// Forward declaration.
|
||||||
class SPUTargetMachine;
|
class SPUTargetMachine;
|
||||||
|
|
||||||
|
template <class BaseTAI>
|
||||||
|
struct SPUTargetAsmInfo : public BaseTAI {
|
||||||
|
explicit SPUTargetAsmInfo(const SPUTargetMachine &TM):
|
||||||
|
BaseTAI(TM) {
|
||||||
|
/* (unused today)
|
||||||
|
* const SPUSubtarget *Subtarget = &TM.getSubtarget<SPUSubtarget>(); */
|
||||||
|
|
||||||
struct SPUTargetAsmInfo : public TargetAsmInfo {
|
BaseTAI::ZeroDirective = "\t.space\t";
|
||||||
SPUTargetAsmInfo(const SPUTargetMachine &TM);
|
BaseTAI::SetDirective = "\t.set";
|
||||||
|
BaseTAI::Data64bitsDirective = "\t.quad\t";
|
||||||
|
BaseTAI::AlignmentIsInBytes = false;
|
||||||
|
BaseTAI::LCOMMDirective = "\t.lcomm\t";
|
||||||
|
BaseTAI::InlineAsmStart = "# InlineAsm Start";
|
||||||
|
BaseTAI::InlineAsmEnd = "# InlineAsm End";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SPULinuxTargetAsmInfo : public SPUTargetAsmInfo<ELFTargetAsmInfo> {
|
||||||
|
explicit SPULinuxTargetAsmInfo(const SPUTargetMachine &TM);
|
||||||
|
virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
|
||||||
|
bool Global) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace llvm
|
} // namespace llvm
|
||||||
|
|
||||||
#endif
|
#endif /* SPUTARGETASMINFO_H */
|
||||||
|
@ -36,7 +36,7 @@ SPUFrameInfo::getCalleeSaveSpillSlots(unsigned &NumEntries) const {
|
|||||||
const TargetAsmInfo *
|
const TargetAsmInfo *
|
||||||
SPUTargetMachine::createTargetAsmInfo() const
|
SPUTargetMachine::createTargetAsmInfo() const
|
||||||
{
|
{
|
||||||
return new SPUTargetAsmInfo(*this);
|
return new SPULinuxTargetAsmInfo(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned
|
unsigned
|
||||||
|
Loading…
x
Reference in New Issue
Block a user