xref: /freebsd/contrib/llvm-project/llvm/lib/Target/ARM/ARMTargetObjectFile.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1  //===-- llvm/Target/ARMTargetObjectFile.h - ARM 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_ARM_ARMTARGETOBJECTFILE_H
10  #define LLVM_LIB_TARGET_ARM_ARMTARGETOBJECTFILE_H
11  
12  #include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
13  #include "llvm/MC/MCExpr.h"
14  #include "llvm/MC/MCRegister.h"
15  
16  namespace llvm {
17  
18  class ARMElfTargetObjectFile : public TargetLoweringObjectFileELF {
19  public:
ARMElfTargetObjectFile()20    ARMElfTargetObjectFile() {
21      PLTRelativeVariantKind = MCSymbolRefExpr::VK_ARM_PREL31;
22      SupportIndirectSymViaGOTPCRel = true;
23    }
24  
25    void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
26  
27    MCRegister getStaticBase() const override;
28  
29    const MCExpr *getIndirectSymViaGOTPCRel(const GlobalValue *GV,
30                                            const MCSymbol *Sym,
31                                            const MCValue &MV, int64_t Offset,
32                                            MachineModuleInfo *MMI,
33                                            MCStreamer &Streamer) const override;
34  
35    const MCExpr *getIndirectSymViaRWPI(const MCSymbol *Sym) const override;
36  
37    const MCExpr *getTTypeGlobalReference(const GlobalValue *GV,
38                                          unsigned Encoding,
39                                          const TargetMachine &TM,
40                                          MachineModuleInfo *MMI,
41                                          MCStreamer &Streamer) const override;
42  
43    /// Describe a TLS variable address within debug info.
44    const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const override;
45  
46    MCSection *getExplicitSectionGlobal(const GlobalObject *GO, SectionKind Kind,
47                                        const TargetMachine &TM) const override;
48  
49    MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind,
50                                      const TargetMachine &TM) const override;
51  };
52  
53  } // end namespace llvm
54  
55  #endif // LLVM_LIB_TARGET_ARM_ARMTARGETOBJECTFILE_H
56