1 //===-- llvm/Target/MipsTargetObjectFile.h - Mips Object Info ---*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_LIB_TARGET_MIPS_MIPSTARGETOBJECTFILE_H 10 #define LLVM_LIB_TARGET_MIPS_MIPSTARGETOBJECTFILE_H 11 12 #include "llvm/CodeGen/TargetLoweringObjectFileImpl.h" 13 14 namespace llvm { 15 class MipsTargetMachine; 16 class MipsTargetObjectFile : public TargetLoweringObjectFileELF { 17 MCSection *SmallDataSection; 18 MCSection *SmallBSSSection; 19 const MipsTargetMachine *TM; 20 21 bool IsGlobalInSmallSection(const GlobalObject *GO, const TargetMachine &TM, 22 SectionKind Kind) const; 23 bool IsGlobalInSmallSectionImpl(const GlobalObject *GO, 24 const TargetMachine &TM) const; 25 public: 26 27 void Initialize(MCContext &Ctx, const TargetMachine &TM) override; 28 29 /// Return true if this global address should be placed into small data/bss 30 /// section. 31 bool IsGlobalInSmallSection(const GlobalObject *GO, 32 const TargetMachine &TM) const; 33 34 MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind, 35 const TargetMachine &TM) const override; 36 37 /// Return true if this constant should be placed into small data section. 38 bool IsConstantInSmallSection(const DataLayout &DL, const Constant *CN, 39 const TargetMachine &TM) const; 40 41 MCSection *getSectionForConstant(const DataLayout &DL, SectionKind Kind, 42 const Constant *C, 43 Align &Alignment) const override; 44 /// Describe a TLS variable address within debug info. 45 const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const override; 46 }; 47 } // end namespace llvm 48 49 #endif 50