131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- X86TargetObjectFile.h - X86 Object Info -----------------*- C++ -*-===//
28c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner//
38c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner//                     The LLVM Compiler Infrastructure
48c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner//
58c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner// This file is distributed under the University of Illinois Open Source
68c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner// License. See LICENSE.TXT for details.
78c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner//
88c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner//===----------------------------------------------------------------------===//
98c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner
108c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner#ifndef LLVM_TARGET_X86_TARGETOBJECTFILE_H
118c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner#define LLVM_TARGET_X86_TARGETOBJECTFILE_H
128c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner
13362dd0bef5437f85586c046bc53287b6fbe9c099Anton Korobeynikov#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
148c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner#include "llvm/Target/TargetLoweringObjectFile.h"
158c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner
168c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattnernamespace llvm {
179184b25fa543a900463215c11635c2c014ddb623Anton Korobeynikov
18a44489d5b5687e98c39947b7b64187a3ad5faf0eBill Wendling  /// X86_64MachoTargetObjectFile - This TLOF implementation is used for Darwin
19757e75b03326d9e124dfd28bb34ca00c9edcd391Bill Wendling  /// x86-64.
20a44489d5b5687e98c39947b7b64187a3ad5faf0eBill Wendling  class X86_64MachoTargetObjectFile : public TargetLoweringObjectFileMachO {
21757e75b03326d9e124dfd28bb34ca00c9edcd391Bill Wendling  public:
2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    const MCExpr *
2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    getTTypeGlobalReference(const GlobalValue *GV, unsigned Encoding,
2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                            Mangler &Mang, const TargetMachine &TM,
2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                            MachineModuleInfo *MMI,
2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                            MCStreamer &Streamer) const override;
277afec9cc0ff1654619d30b6f30e2a4d13369c8bfRafael Espindola
287afec9cc0ff1654619d30b6f30e2a4d13369c8bfRafael Espindola    // getCFIPersonalitySymbol - The symbol that gets passed to
297afec9cc0ff1654619d30b6f30e2a4d13369c8bfRafael Espindola    // .cfi_personality.
3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    MCSymbol *getCFIPersonalitySymbol(const GlobalValue *GV, Mangler &Mang,
3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                      const TargetMachine &TM,
3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                      MachineModuleInfo *MMI) const override;
339184b25fa543a900463215c11635c2c014ddb623Anton Korobeynikov  };
349184b25fa543a900463215c11635c2c014ddb623Anton Korobeynikov
35d6b43a317e71246380db55a50b799b062b53cdceRafael Espindola  /// X86LinuxTargetObjectFile - This implementation is used for linux x86
36d6b43a317e71246380db55a50b799b062b53cdceRafael Espindola  /// and x86-64.
37d6b43a317e71246380db55a50b799b062b53cdceRafael Espindola  class X86LinuxTargetObjectFile : public TargetLoweringObjectFileELF {
3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
39a35ae962918258207f9092ccbdf4fffa1f2c70f1David Blaikie
40a35ae962918258207f9092ccbdf4fffa1f2c70f1David Blaikie    /// \brief Describe a TLS variable address within debug info.
4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const override;
4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  };
4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  /// \brief This implementation is used for Windows targets on x86 and x86-64.
4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  class X86WindowsTargetObjectFile : public TargetLoweringObjectFileCOFF {
4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    const MCExpr *
4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    getExecutableRelativeSymbol(const ConstantExpr *CE, Mangler &Mang,
4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                const TargetMachine &TM) const override;
49d6b43a317e71246380db55a50b799b062b53cdceRafael Espindola  };
50d6b43a317e71246380db55a50b799b062b53cdceRafael Espindola
518c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner} // end namespace llvm
528c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner
538c6ed05157e9c97ff8f3ccb211dd797e53228da1Chris Lattner#endif
54