1 //===-- X86TargetObjectFile.h - X86 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_X86_X86TARGETOBJECTFILE_H 10 #define LLVM_LIB_TARGET_X86_X86TARGETOBJECTFILE_H 11 12 #include "llvm/CodeGen/TargetLoweringObjectFileImpl.h" 13 14 namespace llvm { 15 16 /// X86_64MachoTargetObjectFile - This TLOF implementation is used for Darwin 17 /// x86-64. 18 class X86_64MachoTargetObjectFile : public TargetLoweringObjectFileMachO { 19 public: 20 const MCExpr *getTTypeGlobalReference(const GlobalValue *GV, 21 unsigned Encoding, 22 const TargetMachine &TM, 23 MachineModuleInfo *MMI, 24 MCStreamer &Streamer) const override; 25 26 // getCFIPersonalitySymbol - The symbol that gets passed to 27 // .cfi_personality. 28 MCSymbol *getCFIPersonalitySymbol(const GlobalValue *GV, 29 const TargetMachine &TM, 30 MachineModuleInfo *MMI) const override; 31 32 const MCExpr *getIndirectSymViaGOTPCRel(const GlobalValue *GV, 33 const MCSymbol *Sym, 34 const MCValue &MV, int64_t Offset, 35 MachineModuleInfo *MMI, 36 MCStreamer &Streamer) const override; 37 }; 38 39 /// This implementation is used for X86 ELF targets that don't have a further 40 /// specialization (and as a base class for X86_64, which does). 41 class X86ELFTargetObjectFile : public TargetLoweringObjectFileELF { 42 public: 43 X86ELFTargetObjectFile() { 44 PLTRelativeVariantKind = MCSymbolRefExpr::VK_PLT; 45 } 46 /// Describe a TLS variable address within debug info. 47 const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const override; 48 }; 49 50 /// This implementation is used for X86_64 ELF targets, and defers to 51 /// X86ELFTargetObjectFile for commonalities with 32-bit targets. 52 class X86_64ELFTargetObjectFile : public X86ELFTargetObjectFile { 53 public: 54 X86_64ELFTargetObjectFile() { SupportIndirectSymViaGOTPCRel = true; } 55 56 const MCExpr * 57 getIndirectSymViaGOTPCRel(const GlobalValue *GV, const MCSymbol *Sym, 58 const MCValue &MV, int64_t Offset, 59 MachineModuleInfo *MMI, 60 MCStreamer &Streamer) const override; 61 }; 62 63 } // end namespace llvm 64 65 #endif 66