//
// The LLVM Compiler Infrastructure
//
-// This file was developed by James M. Laskey and is distributed under the
-// University of Illinois Open Source License. See LICENSE.TXT for details.
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
#include "PPCTargetAsmInfo.h"
#include "PPCTargetMachine.h"
#include "llvm/Function.h"
-using namespace llvm;
+#include "llvm/Support/Dwarf.h"
-DarwinTargetAsmInfo::DarwinTargetAsmInfo(const PPCTargetMachine &TM) {
- bool isPPC64 = TM.getSubtargetImpl()->isPPC64();
+using namespace llvm;
+using namespace llvm::dwarf;
+PPCDarwinTargetAsmInfo::PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM) :
+ PPCTargetAsmInfo<DarwinTargetAsmInfo>(TM) {
+ PCSymbol = ".";
CommentString = ";";
- GlobalPrefix = "_";
- PrivateGlobalPrefix = "L";
- ZeroDirective = "\t.space\t";
- SetDirective = "\t.set";
- Data64bitsDirective = isPPC64 ? "\t.quad\t" : 0;
- AlignmentIsInBytes = false;
- ConstantPoolSection = "\t.const\t";
- JumpTableDataSection = ".const";
- JumpTableTextSection = "\t.text";
- LCOMMDirective = "\t.lcomm\t";
- StaticCtorsSection = ".mod_init_func";
- StaticDtorsSection = ".mod_term_func";
UsedDirective = "\t.no_dead_strip\t";
- InlineAsmStart = "# InlineAsm Start";
- InlineAsmEnd = "# InlineAsm End";
+ SupportsExceptionHandling = true;
- NeedsSet = true;
- AddressSize = isPPC64 ? 8 : 4;
- DwarfAbbrevSection = ".section __DWARF,__debug_abbrev";
- DwarfInfoSection = ".section __DWARF,__debug_info";
- DwarfLineSection = ".section __DWARF,__debug_line";
- DwarfFrameSection = ".section __DWARF,__debug_frame";
- DwarfPubNamesSection = ".section __DWARF,__debug_pubnames";
- DwarfPubTypesSection = ".section __DWARF,__debug_pubtypes";
- DwarfStrSection = ".section __DWARF,__debug_str";
- DwarfLocSection = ".section __DWARF,__debug_loc";
- DwarfARangesSection = ".section __DWARF,__debug_aranges";
- DwarfRangesSection = ".section __DWARF,__debug_ranges";
- DwarfMacInfoSection = ".section __DWARF,__debug_macinfo";
+ GlobalEHDirective = "\t.globl\t";
+ SupportsWeakOmittedEHFrame = false;
}
+PPCLinuxTargetAsmInfo::PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM) :
+ PPCTargetAsmInfo<TargetAsmInfo>(TM) {
+ CommentString = "#";
+ GlobalPrefix = "";
+ PrivateGlobalPrefix = ".L";
+ UsedDirective = "\t# .no_dead_strip\t";
+ WeakRefDirective = "\t.weak\t";
+
+ // Debug Information
+ AbsoluteDebugSectionOffsets = true;
+ SupportsDebugInformation = true;
+
+ PCSymbol = ".";
+
+ // Set up DWARF directives
+ HasLEB128 = true; // Target asm supports leb128 directives (little-endian)
+
+ // Exceptions handling
+ if (!TM.getSubtargetImpl()->isPPC64())
+ SupportsExceptionHandling = true;
+ AbsoluteEHSectionOffsets = false;
+}
+
+
+// Instantiate default implementation.
+TEMPLATE_INSTANTIATION(class PPCTargetAsmInfo<TargetAsmInfo>);