diff options
author | Scott Michel <scottm@aero.org> | 2008-11-07 04:36:25 +0000 |
---|---|---|
committer | Scott Michel <scottm@aero.org> | 2008-11-07 04:36:25 +0000 |
commit | 1e5a4ba565ab24e97ef20374285fa615e28ed0eb (patch) | |
tree | 2fa8d2dd724b325b40564ff7bf6acfd5ee95c855 /lib/Target | |
parent | 507c49bb6853ad8576880d1623b906ca9c4a7a69 (diff) | |
download | external_llvm-1e5a4ba565ab24e97ef20374285fa615e28ed0eb.zip external_llvm-1e5a4ba565ab24e97ef20374285fa615e28ed0eb.tar.gz external_llvm-1e5a4ba565ab24e97ef20374285fa615e28ed0eb.tar.bz2 |
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
Diffstat (limited to 'lib/Target')
-rw-r--r-- | lib/Target/CellSPU/SPUTargetAsmInfo.cpp | 46 | ||||
-rw-r--r-- | lib/Target/CellSPU/SPUTargetAsmInfo.h | 33 | ||||
-rw-r--r-- | lib/Target/CellSPU/SPUTargetMachine.cpp | 2 |
3 files changed, 46 insertions, 35 deletions
diff --git a/lib/Target/CellSPU/SPUTargetAsmInfo.cpp b/lib/Target/CellSPU/SPUTargetAsmInfo.cpp index 89ab0e1..9f62a28 100644 --- a/lib/Target/CellSPU/SPUTargetAsmInfo.cpp +++ b/lib/Target/CellSPU/SPUTargetAsmInfo.cpp @@ -14,38 +14,28 @@ #include "SPUTargetAsmInfo.h" #include "SPUTargetMachine.h" #include "llvm/Function.h" +#include "llvm/Support/Compiler.h" + using namespace llvm; -SPUTargetAsmInfo::SPUTargetAsmInfo(const SPUTargetMachine &TM) - : TargetAsmInfo(TM) { +SPULinuxTargetAsmInfo::SPULinuxTargetAsmInfo(const SPUTargetMachine &TM) : + SPUTargetAsmInfo<ELFTargetAsmInfo>(TM) { PCSymbol = "."; CommentString = "#"; GlobalPrefix = ""; 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>); diff --git a/lib/Target/CellSPU/SPUTargetAsmInfo.h b/lib/Target/CellSPU/SPUTargetAsmInfo.h index 01036bc..d10a565 100644 --- a/lib/Target/CellSPU/SPUTargetAsmInfo.h +++ b/lib/Target/CellSPU/SPUTargetAsmInfo.h @@ -11,20 +11,41 @@ // //===----------------------------------------------------------------------===// -#ifndef PPCTARGETASMINFO_H -#define PPCTARGETASMINFO_H +#ifndef SPUTARGETASMINFO_H +#define SPUTARGETASMINFO_H #include "llvm/Target/TargetAsmInfo.h" +#include "llvm/Target/ELFTargetAsmInfo.h" +#include "SPUTargetMachine.h" +#include "SPUSubtarget.h" namespace llvm { // Forward declaration. 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 { - SPUTargetAsmInfo(const SPUTargetMachine &TM); + 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 -#endif +#endif /* SPUTARGETASMINFO_H */ diff --git a/lib/Target/CellSPU/SPUTargetMachine.cpp b/lib/Target/CellSPU/SPUTargetMachine.cpp index 7afe6fa..5e22584 100644 --- a/lib/Target/CellSPU/SPUTargetMachine.cpp +++ b/lib/Target/CellSPU/SPUTargetMachine.cpp @@ -36,7 +36,7 @@ SPUFrameInfo::getCalleeSaveSpillSlots(unsigned &NumEntries) const { const TargetAsmInfo * SPUTargetMachine::createTargetAsmInfo() const { - return new SPUTargetAsmInfo(*this); + return new SPULinuxTargetAsmInfo(*this); } unsigned |