1234353Sdim//===-- X86TargetObjectFile.h - X86 Object Info -----------------*- C++ -*-===// 2198090Srdivacky// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6198090Srdivacky// 7198090Srdivacky//===----------------------------------------------------------------------===// 8198090Srdivacky 9280031Sdim#ifndef LLVM_LIB_TARGET_X86_X86TARGETOBJECTFILE_H 10280031Sdim#define LLVM_LIB_TARGET_X86_X86TARGETOBJECTFILE_H 11198090Srdivacky 12203954Srdivacky#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h" 13341825Sdim#include "llvm/Target/TargetLoweringObjectFile.h" 14198090Srdivacky 15198090Srdivackynamespace llvm { 16203954Srdivacky 17239462Sdim /// X86_64MachoTargetObjectFile - This TLOF implementation is used for Darwin 18205218Srdivacky /// x86-64. 19239462Sdim class X86_64MachoTargetObjectFile : public TargetLoweringObjectFileMachO { 20198090Srdivacky public: 21314564Sdim const MCExpr *getTTypeGlobalReference(const GlobalValue *GV, 22314564Sdim unsigned Encoding, 23314564Sdim const TargetMachine &TM, 24314564Sdim MachineModuleInfo *MMI, 25314564Sdim MCStreamer &Streamer) const override; 26221345Sdim 27221345Sdim // getCFIPersonalitySymbol - The symbol that gets passed to 28221345Sdim // .cfi_personality. 29314564Sdim MCSymbol *getCFIPersonalitySymbol(const GlobalValue *GV, 30276479Sdim const TargetMachine &TM, 31276479Sdim MachineModuleInfo *MMI) const override; 32288943Sdim 33360784Sdim const MCExpr *getIndirectSymViaGOTPCRel(const GlobalValue *GV, 34360784Sdim const MCSymbol *Sym, 35288943Sdim const MCValue &MV, int64_t Offset, 36288943Sdim MachineModuleInfo *MMI, 37288943Sdim MCStreamer &Streamer) const override; 38198090Srdivacky }; 39203954Srdivacky 40341825Sdim /// This implemenatation is used for X86 ELF targets that don't 41288943Sdim /// have a further specialization. 42288943Sdim class X86ELFTargetObjectFile : public TargetLoweringObjectFileELF { 43309124Sdim public: 44309124Sdim X86ELFTargetObjectFile() { 45309124Sdim PLTRelativeVariantKind = MCSymbolRefExpr::VK_PLT; 46309124Sdim } 47309124Sdim 48341825Sdim /// Describe a TLS variable address within debug info. 49276479Sdim const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const override; 50239462Sdim }; 51239462Sdim 52314564Sdim /// X86FreeBSDTargetObjectFile - This implementation is used for FreeBSD 53314564Sdim /// on x86 and x86-64. 54314564Sdim class X86FreeBSDTargetObjectFile : public X86ELFTargetObjectFile { 55314564Sdim void Initialize(MCContext &Ctx, const TargetMachine &TM) override; 56314564Sdim }; 57314564Sdim 58341825Sdim /// This implementation is used for Fuchsia on x86-64. 59314564Sdim class X86FuchsiaTargetObjectFile : public X86ELFTargetObjectFile { 60314564Sdim void Initialize(MCContext &Ctx, const TargetMachine &TM) override; 61314564Sdim }; 62314564Sdim 63288943Sdim /// X86LinuxNaClTargetObjectFile - This implementation is used for linux and 64288943Sdim /// Native Client on x86 and x86-64. 65288943Sdim class X86LinuxNaClTargetObjectFile : public X86ELFTargetObjectFile { 66288943Sdim void Initialize(MCContext &Ctx, const TargetMachine &TM) override; 67288943Sdim }; 68288943Sdim 69341825Sdim /// This implementation is used for Solaris on x86/x86-64. 70321369Sdim class X86SolarisTargetObjectFile : public X86ELFTargetObjectFile { 71321369Sdim void Initialize(MCContext &Ctx, const TargetMachine &TM) override; 72321369Sdim }; 73321369Sdim 74198090Srdivacky} // end namespace llvm 75198090Srdivacky 76198090Srdivacky#endif 77