Home | History | Annotate | Download | only in NVPTX
      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     TextSection = nullptr;
     26     DataSection = nullptr;
     27     BSSSection = nullptr;
     28     ReadOnlySection = nullptr;
     29 
     30     StaticCtorSection = nullptr;
     31     StaticDtorSection = nullptr;
     32     LSDASection = nullptr;
     33     EHFrameSection = nullptr;
     34     DwarfAbbrevSection = nullptr;
     35     DwarfInfoSection = nullptr;
     36     DwarfLineSection = nullptr;
     37     DwarfFrameSection = nullptr;
     38     DwarfPubTypesSection = nullptr;
     39     DwarfDebugInlineSection = nullptr;
     40     DwarfStrSection = nullptr;
     41     DwarfLocSection = nullptr;
     42     DwarfARangesSection = nullptr;
     43     DwarfRangesSection = nullptr;
     44     DwarfMacroInfoSection = nullptr;
     45   }
     46 
     47   virtual ~NVPTXTargetObjectFile();
     48 
     49   void Initialize(MCContext &ctx, const TargetMachine &TM) override {
     50     TargetLoweringObjectFile::Initialize(ctx, TM);
     51     TextSection = new NVPTXSection(MCSection::SV_ELF, SectionKind::getText());
     52     DataSection =
     53         new NVPTXSection(MCSection::SV_ELF, SectionKind::getDataRel());
     54     BSSSection = new NVPTXSection(MCSection::SV_ELF, SectionKind::getBSS());
     55     ReadOnlySection =
     56         new NVPTXSection(MCSection::SV_ELF, SectionKind::getReadOnly());
     57 
     58     StaticCtorSection =
     59         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     60     StaticDtorSection =
     61         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     62     LSDASection =
     63         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     64     EHFrameSection =
     65         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     66     DwarfAbbrevSection =
     67         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     68     DwarfInfoSection =
     69         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     70     DwarfLineSection =
     71         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     72     DwarfFrameSection =
     73         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     74     DwarfPubTypesSection =
     75         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     76     DwarfDebugInlineSection =
     77         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     78     DwarfStrSection =
     79         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     80     DwarfLocSection =
     81         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     82     DwarfARangesSection =
     83         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     84     DwarfRangesSection =
     85         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     86     DwarfMacroInfoSection =
     87         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     88   }
     89 
     90   const MCSection *getSectionForConstant(SectionKind Kind) const override {
     91     return ReadOnlySection;
     92   }
     93 
     94   const MCSection *getExplicitSectionGlobal(const GlobalValue *GV,
     95                                        SectionKind Kind, Mangler &Mang,
     96                                        const TargetMachine &TM) const override {
     97     return DataSection;
     98   }
     99 
    100 };
    101 
    102 } // end namespace llvm
    103 
    104 #endif
    105