1 //===-- RISCVTargetObjectFile.h - RISCV 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_RISCV_RISCVTARGETOBJECTFILE_H 10 #define LLVM_LIB_TARGET_RISCV_RISCVTARGETOBJECTFILE_H 11 12 #include "llvm/CodeGen/TargetLoweringObjectFileImpl.h" 13 14 namespace llvm { 15 class RISCVTargetMachine; 16 17 /// This implementation is used for RISCV ELF targets. 18 class RISCVELFTargetObjectFile : public TargetLoweringObjectFileELF { 19 MCSection *SmallDataSection; 20 MCSection *SmallBSSSection; 21 unsigned SSThreshold = 8; 22 23 public: 24 void Initialize(MCContext &Ctx, const TargetMachine &TM) override; 25 26 /// Return true if this global address should be placed into small data/bss 27 /// section. 28 bool isGlobalInSmallSection(const GlobalObject *GO, 29 const TargetMachine &TM) const; 30 31 MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind, 32 const TargetMachine &TM) const override; 33 34 /// Return true if this constant should be placed into small data section. 35 bool isConstantInSmallSection(const DataLayout &DL, const Constant *CN) const; 36 37 MCSection *getSectionForConstant(const DataLayout &DL, SectionKind Kind, 38 const Constant *C, 39 unsigned &Align) const override; 40 41 void getModuleMetadata(Module &M) override; 42 43 bool isInSmallSection(uint64_t Size) const; 44 }; 45 46 } // end namespace llvm 47 48 #endif 49