149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===-- NVPTXTargetObjectFile.h - NVPTX Object Info -------------*- C++ -*-===//
249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//
349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//                     The LLVM Compiler Infrastructure
449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//
549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// This file is distributed under the University of Illinois Open Source
649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// License. See LICENSE.TXT for details.
749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//
849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===----------------------------------------------------------------------===//
949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
1049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#ifndef LLVM_TARGET_NVPTX_TARGETOBJECTFILE_H
1149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#define LLVM_TARGET_NVPTX_TARGETOBJECTFILE_H
1249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
1349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "NVPTXSection.h"
1449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "llvm/Target/TargetLoweringObjectFile.h"
1549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include <string>
1649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
1749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskinamespace llvm {
1849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskiclass GlobalVariable;
1949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskiclass Module;
2049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
2149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskiclass NVPTXTargetObjectFile : public TargetLoweringObjectFile {
2249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
2349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskipublic:
24f1505ff35bf76cb044c261b4cc97773d47658805NAKAMURA Takumi  NVPTXTargetObjectFile() {
25dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    TextSection = nullptr;
26dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    DataSection = nullptr;
27dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BSSSection = nullptr;
28dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ReadOnlySection = nullptr;
29dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
30dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    StaticCtorSection = nullptr;
31dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    StaticDtorSection = nullptr;
32dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    LSDASection = nullptr;
33dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    EHFrameSection = nullptr;
34dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    DwarfAbbrevSection = nullptr;
35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    DwarfInfoSection = nullptr;
36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    DwarfLineSection = nullptr;
37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    DwarfFrameSection = nullptr;
38dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    DwarfPubTypesSection = nullptr;
39dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    DwarfDebugInlineSection = nullptr;
40dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    DwarfStrSection = nullptr;
41dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    DwarfLocSection = nullptr;
42dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    DwarfARangesSection = nullptr;
43dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    DwarfRangesSection = nullptr;
44dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    DwarfMacroInfoSection = nullptr;
45f1505ff35bf76cb044c261b4cc97773d47658805NAKAMURA Takumi  }
46f1505ff35bf76cb044c261b4cc97773d47658805NAKAMURA Takumi
47354362524a72b3fa43a6c09380b7ae3b2380cbbaJuergen Ributzka  virtual ~NVPTXTargetObjectFile();
4849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  void Initialize(MCContext &ctx, const TargetMachine &TM) override {
5093cf0939f95b3d580d9c05375a7c84164e1ba72eRafael Espindola    TargetLoweringObjectFile::Initialize(ctx, TM);
513639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    TextSection = new NVPTXSection(MCSection::SV_ELF, SectionKind::getText());
523639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    DataSection =
533639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getDataRel());
543639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    BSSSection = new NVPTXSection(MCSection::SV_ELF, SectionKind::getBSS());
553639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    ReadOnlySection =
563639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getReadOnly());
5749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
583639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    StaticCtorSection =
593639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
603639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    StaticDtorSection =
613639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
623639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    LSDASection =
633639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
643639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    EHFrameSection =
653639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
663639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    DwarfAbbrevSection =
673639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
683639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    DwarfInfoSection =
693639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
703639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    DwarfLineSection =
713639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
723639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    DwarfFrameSection =
733639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
743639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    DwarfPubTypesSection =
753639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
763639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    DwarfDebugInlineSection =
773639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
783639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    DwarfStrSection =
793639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
803639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    DwarfLocSection =
813639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
823639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    DwarfARangesSection =
833639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
843639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    DwarfRangesSection =
853639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
863639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski    DwarfMacroInfoSection =
873639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski        new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
8822b291abd855ccf013381a9d6939d918181b0e0eEric Christopher  }
8949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
9036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  const MCSection *getSectionForConstant(SectionKind Kind) const override {
9149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski    return ReadOnlySection;
9222b291abd855ccf013381a9d6939d918181b0e0eEric Christopher  }
9349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
9436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  const MCSection *getExplicitSectionGlobal(const GlobalValue *GV,
9536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                       SectionKind Kind, Mangler &Mang,
9636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                       const TargetMachine &TM) const override {
9749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski    return DataSection;
9822b291abd855ccf013381a9d6939d918181b0e0eEric Christopher  }
9949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
10049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski};
10149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
10249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski} // end namespace llvm
10349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
10449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#endif
105