X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=include%2Fllvm%2FCodeGen%2FTargetLoweringObjectFileImpl.h;h=2f1379131cbdc51440f32f4cb9bd45509aab7f39;hb=c75c50f45b3d6d1d61ce6b411d12cedaadd71d5b;hp=c43a0a6c7020f538d97fd2207aa467b5ca30d061;hpb=e09411dd68534824b0a79749da44589983061d07;p=oota-llvm.git diff --git a/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h b/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h index c43a0a6c702..2f1379131cb 100644 --- a/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h +++ b/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h @@ -34,118 +34,133 @@ namespace llvm { class TargetLoweringObjectFileELF : public TargetLoweringObjectFile { bool UseInitArray; + mutable unsigned NextUniqueID = 0; public: - virtual ~TargetLoweringObjectFileELF() {} + TargetLoweringObjectFileELF() : UseInitArray(false) {} - void emitPersonalityValue(MCStreamer &Streamer, const TargetMachine &TM, - const MCSymbol *Sym) const LLVM_OVERRIDE; + ~TargetLoweringObjectFileELF() override {} + + void emitPersonalityValue(MCStreamer &Streamer, const DataLayout &TM, + const MCSymbol *Sym) const override; /// Given a constant with the SectionKind, return a section that it should be /// placed in. - const MCSection *getSectionForConstant(SectionKind Kind) const LLVM_OVERRIDE; + MCSection *getSectionForConstant(const DataLayout &DL, SectionKind Kind, + const Constant *C) const override; + + MCSection *getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind, + Mangler &Mang, + const TargetMachine &TM) const override; + + MCSection *SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, + Mangler &Mang, + const TargetMachine &TM) const override; - const MCSection *getExplicitSectionGlobal(const GlobalValue *GV, - SectionKind Kind, Mangler &Mang, - const TargetMachine &TM) const - LLVM_OVERRIDE; + MCSection *getSectionForJumpTable(const Function &F, Mangler &Mang, + const TargetMachine &TM) const override; - const MCSection *SelectSectionForGlobal(const GlobalValue *GV, - SectionKind Kind, Mangler &Mang, - const TargetMachine &TM) const - LLVM_OVERRIDE; + bool shouldPutJumpTableInFunctionSection(bool UsesLabelDifference, + const Function &F) const override; /// Return an MCExpr to use for a reference to the specified type info global /// variable from exception handling information. - const MCExpr *getTTypeGlobalReference(const GlobalValue *GV, Mangler &Mang, - MachineModuleInfo *MMI, - unsigned Encoding, - MCStreamer &Streamer) const - LLVM_OVERRIDE; + const MCExpr * + getTTypeGlobalReference(const GlobalValue *GV, unsigned Encoding, + Mangler &Mang, const TargetMachine &TM, + MachineModuleInfo *MMI, + MCStreamer &Streamer) const override; // The symbol that gets passed to .cfi_personality. MCSymbol *getCFIPersonalitySymbol(const GlobalValue *GV, Mangler &Mang, - MachineModuleInfo *MMI) const LLVM_OVERRIDE; + const TargetMachine &TM, + MachineModuleInfo *MMI) const override; void InitializeELF(bool UseInitArray_); - const MCSection *getStaticCtorSection(unsigned Priority = 65535) const - LLVM_OVERRIDE; - const MCSection *getStaticDtorSection(unsigned Priority = 65535) const - LLVM_OVERRIDE; + MCSection *getStaticCtorSection(unsigned Priority, + const MCSymbol *KeySym) const override; + MCSection *getStaticDtorSection(unsigned Priority, + const MCSymbol *KeySym) const override; }; class TargetLoweringObjectFileMachO : public TargetLoweringObjectFile { public: - virtual ~TargetLoweringObjectFileMachO() {} - - /// Extract the dependent library name from a linker option string. Returns - /// StringRef() if the option does not specify a library. - StringRef getDepLibFromLinkerOpt(StringRef LinkerOption) const LLVM_OVERRIDE; + ~TargetLoweringObjectFileMachO() override {} + TargetLoweringObjectFileMachO(); /// Emit the module flags that specify the garbage collection information. void emitModuleFlags(MCStreamer &Streamer, ArrayRef ModuleFlags, - Mangler &Mang, const TargetMachine &TM) const - LLVM_OVERRIDE; - - const MCSection *SelectSectionForGlobal(const GlobalValue *GV, - SectionKind Kind, Mangler &Mang, - const TargetMachine &TM) const - LLVM_OVERRIDE; + Mangler &Mang, const TargetMachine &TM) const override; - const MCSection *getExplicitSectionGlobal(const GlobalValue *GV, - SectionKind Kind, Mangler &Mang, - const TargetMachine &TM) const - LLVM_OVERRIDE; + MCSection *SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, + Mangler &Mang, + const TargetMachine &TM) const override; - const MCSection *getSectionForConstant(SectionKind Kind) const LLVM_OVERRIDE; + MCSection *getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind, + Mangler &Mang, + const TargetMachine &TM) const override; - /// This hook allows targets to selectively decide not to emit the - /// UsedDirective for some symbols in llvm.used. - /// FIXME: REMOVE this (rdar://7071300) - bool shouldEmitUsedDirectiveFor(const GlobalValue *GV, Mangler &Mang) const - LLVM_OVERRIDE; + MCSection *getSectionForConstant(const DataLayout &DL, SectionKind Kind, + const Constant *C) const override; /// The mach-o version of this method defaults to returning a stub reference. - const MCExpr *getTTypeGlobalReference(const GlobalValue *GV, Mangler &Mang, - MachineModuleInfo *MMI, - unsigned Encoding, - MCStreamer &Streamer) const - LLVM_OVERRIDE; + const MCExpr * + getTTypeGlobalReference(const GlobalValue *GV, unsigned Encoding, + Mangler &Mang, const TargetMachine &TM, + MachineModuleInfo *MMI, + MCStreamer &Streamer) const override; // The symbol that gets passed to .cfi_personality. MCSymbol *getCFIPersonalitySymbol(const GlobalValue *GV, Mangler &Mang, - MachineModuleInfo *MMI) const LLVM_OVERRIDE; + const TargetMachine &TM, + MachineModuleInfo *MMI) const override; + + /// Get MachO PC relative GOT entry relocation + const MCExpr *getIndirectSymViaGOTPCRel(const MCSymbol *Sym, + const MCValue &MV, int64_t Offset, + MachineModuleInfo *MMI, + MCStreamer &Streamer) const override; + + void getNameWithPrefix(SmallVectorImpl &OutName, const GlobalValue *GV, + Mangler &Mang, const TargetMachine &TM) const override; }; class TargetLoweringObjectFileCOFF : public TargetLoweringObjectFile { public: - virtual ~TargetLoweringObjectFileCOFF() {} + ~TargetLoweringObjectFileCOFF() override {} + + MCSection *getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind, + Mangler &Mang, + const TargetMachine &TM) const override; - const MCSection *getExplicitSectionGlobal(const GlobalValue *GV, - SectionKind Kind, Mangler &Mang, - const TargetMachine &TM) const - LLVM_OVERRIDE; + MCSection *SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, + Mangler &Mang, + const TargetMachine &TM) const override; - const MCSection *SelectSectionForGlobal(const GlobalValue *GV, - SectionKind Kind, Mangler &Mang, - const TargetMachine &TM) const - LLVM_OVERRIDE; + void getNameWithPrefix(SmallVectorImpl &OutName, const GlobalValue *GV, + Mangler &Mang, const TargetMachine &TM) const override; - /// Extract the dependent library name from a linker option string. Returns - /// StringRef() if the option does not specify a library. - StringRef getDepLibFromLinkerOpt(StringRef LinkerOption) const LLVM_OVERRIDE; + MCSection *getSectionForJumpTable(const Function &F, Mangler &Mang, + const TargetMachine &TM) const override; /// Emit Obj-C garbage collection and linker options. Only linker option /// emission is implemented for COFF. void emitModuleFlags(MCStreamer &Streamer, ArrayRef ModuleFlags, - Mangler &Mang, const TargetMachine &TM) const - LLVM_OVERRIDE; + Mangler &Mang, const TargetMachine &TM) const override; + + MCSection *getStaticCtorSection(unsigned Priority, + const MCSymbol *KeySym) const override; + MCSection *getStaticDtorSection(unsigned Priority, + const MCSymbol *KeySym) const override; + + void emitLinkerFlagsForGlobal(raw_ostream &OS, const GlobalValue *GV, + const Mangler &Mang) const override; }; } // end namespace llvm