NVPTXTargetObjectFile.h revision 249423
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
17namespace llvm {
18class GlobalVariable;
19class Module;
20
21class NVPTXTargetObjectFile : public TargetLoweringObjectFile {
22
23public:
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