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