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_LIB_TARGET_NVPTX_NVPTXTARGETOBJECTFILE_H
     11 #define LLVM_LIB_TARGET_NVPTX_NVPTXTARGETOBJECTFILE_H
     12 
     13 #include "NVPTXSection.h"
     14 #include "llvm/Target/TargetLoweringObjectFile.h"
     15 
     16 namespace llvm {
     17 class GlobalVariable;
     18 class Module;
     19 
     20 class NVPTXTargetObjectFile : public TargetLoweringObjectFile {
     21 
     22 public:
     23   NVPTXTargetObjectFile() {
     24     TextSection = nullptr;
     25     DataSection = nullptr;
     26     BSSSection = nullptr;
     27     ReadOnlySection = nullptr;
     28 
     29     StaticCtorSection = nullptr;
     30     StaticDtorSection = nullptr;
     31     LSDASection = nullptr;
     32     EHFrameSection = nullptr;
     33     DwarfAbbrevSection = nullptr;
     34     DwarfInfoSection = nullptr;
     35     DwarfLineSection = nullptr;
     36     DwarfFrameSection = nullptr;
     37     DwarfPubTypesSection = nullptr;
     38     DwarfDebugInlineSection = nullptr;
     39     DwarfStrSection = nullptr;
     40     DwarfLocSection = nullptr;
     41     DwarfARangesSection = nullptr;
     42     DwarfRangesSection = nullptr;
     43     DwarfMacinfoSection = nullptr;
     44   }
     45 
     46   virtual ~NVPTXTargetObjectFile();
     47 
     48   void Initialize(MCContext &ctx, const TargetMachine &TM) override {
     49     TargetLoweringObjectFile::Initialize(ctx, TM);
     50     TextSection = new NVPTXSection(MCSection::SV_ELF, SectionKind::getText());
     51     DataSection = new NVPTXSection(MCSection::SV_ELF, SectionKind::getData());
     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     DwarfMacinfoSection =
     85         new NVPTXSection(MCSection::SV_ELF, SectionKind::getMetadata());
     86   }
     87 
     88   MCSection *getSectionForConstant(const DataLayout &DL, SectionKind Kind,
     89                                    const Constant *C,
     90                                    unsigned &Align) const override {
     91     return ReadOnlySection;
     92   }
     93 
     94   MCSection *getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
     95                                       Mangler &Mang,
     96                                       const TargetMachine &TM) const override {
     97     return DataSection;
     98   }
     99 
    100   MCSection *SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
    101                                     Mangler &Mang,
    102                                     const TargetMachine &TM) const override;
    103 };
    104 
    105 } // end namespace llvm
    106 
    107 #endif
    108