1 //===-- HexagonTargetObjectFile.h -----------------------------------------===// 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_HEXAGON_HEXAGONTARGETOBJECTFILE_H 11 #define LLVM_LIB_TARGET_HEXAGON_HEXAGONTARGETOBJECTFILE_H 12 13 #include "llvm/CodeGen/TargetLoweringObjectFileImpl.h" 14 #include "llvm/MC/MCSectionELF.h" 15 16 namespace llvm { 17 18 class HexagonTargetObjectFile : public TargetLoweringObjectFileELF { 19 public: 20 void Initialize(MCContext &Ctx, const TargetMachine &TM) override; 21 22 MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind, 23 const TargetMachine &TM) const override; 24 25 MCSection *getExplicitSectionGlobal(const GlobalObject *GO, 26 SectionKind Kind, 27 const TargetMachine &TM) const override; 28 29 bool isGlobalInSmallSection(const GlobalObject *GO, 30 const TargetMachine &TM) const; 31 32 bool isSmallDataEnabled() const; 33 34 unsigned getSmallDataSize() const; 35 36 bool shouldPutJumpTableInFunctionSection(bool UsesLabelDifference, 37 const Function &F) const override; 38 39 const Function *getLutUsedFunction(const GlobalObject *GO) const; 40 41 private: 42 MCSectionELF *SmallDataSection; 43 MCSectionELF *SmallBSSSection; 44 45 unsigned getSmallestAddressableSize(const Type *Ty, const GlobalValue *GV, 46 const TargetMachine &TM) const; 47 48 MCSection *selectSmallSectionForGlobal(const GlobalObject *GO, 49 SectionKind Kind, 50 const TargetMachine &TM) const; 51 52 MCSection *selectSectionForLookupTable(const GlobalObject *GO, 53 const TargetMachine &TM, 54 const Function *Fn) const; 55 }; 56 57 } // namespace llvm 58 59 #endif 60