1 //===-- NVPTXTargetObjectFile.h - NVPTX Object Info -------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef LLVM_TARGET_NVPTX_TARGETOBJECTFILE_H 11 #define LLVM_TARGET_NVPTX_TARGETOBJECTFILE_H 12 13 #include "NVPTXSection.h" 14 #include "llvm/Target/TargetLoweringObjectFile.h" 15 #include <string> 16 17 namespace llvm { 18 class GlobalVariable; 19 class Module; 20 21 class NVPTXTargetObjectFile : public TargetLoweringObjectFile { 22 23 public: 24 NVPTXTargetObjectFile() {} 25 ~NVPTXTargetObjectFile() { 26 delete TextSection; 27 delete DataSection; 28 delete BSSSection; 29 delete ReadOnlySection; 30 31 delete StaticCtorSection; 32 delete StaticDtorSection; 33 delete LSDASection; 34 delete EHFrameSection; 35 delete DwarfAbbrevSection; 36 delete DwarfInfoSection; 37 delete DwarfLineSection; 38 delete DwarfFrameSection; 39 delete DwarfPubTypesSection; 40 delete DwarfDebugInlineSection; 41 delete DwarfStrSection; 42 delete DwarfLocSection; 43 delete DwarfARangesSection; 44 delete DwarfRangesSection; 45 delete DwarfMacroInfoSection; 46 } 47 48 virtual void Initialize(MCContext &ctx, const TargetMachine &TM) { 49 TextSection = new NVPTXSection(MCSection::SV_ELF, SectionKind::getText()); 50 DataSection = 51 new NVPTXSection(MCSection::SV_ELF, SectionKind::getDataRel()); 52 BSSSection = new NVPTXSection(MCSection::SV_ELF, SectionKind::getBSS()); 53 ReadOnlySection = 54 new NVPTXSection(MCSection::SV_ELF, SectionKind::getReadOnly()); 55 56 StaticCtorSection = 57 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 58 StaticDtorSection = 59 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 60 LSDASection = 61 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 62 EHFrameSection = 63 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 64 DwarfAbbrevSection = 65 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 66 DwarfInfoSection = 67 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 68 DwarfLineSection = 69 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 70 DwarfFrameSection = 71 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 72 DwarfPubTypesSection = 73 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 74 DwarfDebugInlineSection = 75 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 76 DwarfStrSection = 77 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 78 DwarfLocSection = 79 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 80 DwarfARangesSection = 81 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 82 DwarfRangesSection = 83 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 84 DwarfMacroInfoSection = 85 new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata()); 86 } 87 88 virtual const MCSection *getSectionForConstant(SectionKind Kind) const { 89 return ReadOnlySection; 90 } 91 92 virtual const MCSection * 93 getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind, 94 Mangler *Mang, const TargetMachine &TM) const { 95 return DataSection; 96 } 97 98 }; 99 100 } // end namespace llvm 101 102 #endif 103