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