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