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:
Scott Michel 2008-11-07 04:36:25 +00:00
parent 068a795b33
commit d03eeafd9f
3 changed files with 46 additions and 35 deletions

View File

@ -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>);

View File

@ -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;
struct SPUTargetAsmInfo : public TargetAsmInfo { template <class BaseTAI>
SPUTargetAsmInfo(const SPUTargetMachine &TM); struct SPUTargetAsmInfo : public BaseTAI {
explicit SPUTargetAsmInfo(const SPUTargetMachine &TM):
BaseTAI(TM) {
/* (unused today)
* const SPUSubtarget *Subtarget = &TM.getSubtarget<SPUSubtarget>(); */
BaseTAI::ZeroDirective = "\t.space\t";
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 */

View File

@ -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