1fd5c1f94SVenkatraman Govindaraju //===------- SparcTargetObjectFile.cpp - Sparc Object Info Impl -----------===//
2fd5c1f94SVenkatraman Govindaraju //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6fd5c1f94SVenkatraman Govindaraju //
7fd5c1f94SVenkatraman Govindaraju //===----------------------------------------------------------------------===//
8fd5c1f94SVenkatraman Govindaraju
9fd5c1f94SVenkatraman Govindaraju #include "SparcTargetObjectFile.h"
10fd5c1f94SVenkatraman Govindaraju #include "MCTargetDesc/SparcMCExpr.h"
11264b5d9eSZachary Turner #include "llvm/BinaryFormat/Dwarf.h"
12fd5c1f94SVenkatraman Govindaraju #include "llvm/CodeGen/MachineModuleInfoImpls.h"
13b3bde2eaSDavid Blaikie #include "llvm/CodeGen/TargetLowering.h"
14*fe0006c8SSimon Pilgrim #include "llvm/Target/TargetMachine.h"
15fd5c1f94SVenkatraman Govindaraju
16fd5c1f94SVenkatraman Govindaraju using namespace llvm;
17fd5c1f94SVenkatraman Govindaraju
Initialize(MCContext & Ctx,const TargetMachine & TM)189b8e3d30SDavide Italiano void SparcELFTargetObjectFile::Initialize(MCContext &Ctx,
199b8e3d30SDavide Italiano const TargetMachine &TM) {
209b8e3d30SDavide Italiano TargetLoweringObjectFileELF::Initialize(Ctx, TM);
219b8e3d30SDavide Italiano }
229b8e3d30SDavide Italiano
getTTypeGlobalReference(const GlobalValue * GV,unsigned Encoding,const TargetMachine & TM,MachineModuleInfo * MMI,MCStreamer & Streamer) const2315b26696SRafael Espindola const MCExpr *SparcELFTargetObjectFile::getTTypeGlobalReference(
244367c7fbSEric Christopher const GlobalValue *GV, unsigned Encoding, const TargetMachine &TM,
254367c7fbSEric Christopher MachineModuleInfo *MMI, MCStreamer &Streamer) const {
26fd5c1f94SVenkatraman Govindaraju
27fd5c1f94SVenkatraman Govindaraju if (Encoding & dwarf::DW_EH_PE_pcrel) {
28fd5c1f94SVenkatraman Govindaraju MachineModuleInfoELF &ELFMMI = MMI->getObjFileInfo<MachineModuleInfoELF>();
29fd5c1f94SVenkatraman Govindaraju
304367c7fbSEric Christopher MCSymbol *SSym = getSymbolWithGlobalValueBase(GV, ".DW.stub", TM);
31fd5c1f94SVenkatraman Govindaraju
32fd5c1f94SVenkatraman Govindaraju // Add information about the stub reference to ELFMMI so that the stub
33fd5c1f94SVenkatraman Govindaraju // gets emitted by the asmprinter.
34fd5c1f94SVenkatraman Govindaraju MachineModuleInfoImpl::StubValueTy &StubSym = ELFMMI.getGVStubEntry(SSym);
35062a2baeSCraig Topper if (!StubSym.getPointer()) {
36b64fb453STim Northover MCSymbol *Sym = TM.getSymbol(GV);
37fd5c1f94SVenkatraman Govindaraju StubSym = MachineModuleInfoImpl::StubValueTy(Sym, !GV->hasLocalLinkage());
38fd5c1f94SVenkatraman Govindaraju }
39fd5c1f94SVenkatraman Govindaraju
40fd5c1f94SVenkatraman Govindaraju MCContext &Ctx = getContext();
4113760bd1SJim Grosbach return SparcMCExpr::create(SparcMCExpr::VK_Sparc_R_DISP32,
4213760bd1SJim Grosbach MCSymbolRefExpr::create(SSym, Ctx), Ctx);
43fd5c1f94SVenkatraman Govindaraju }
44fd5c1f94SVenkatraman Govindaraju
454367c7fbSEric Christopher return TargetLoweringObjectFileELF::getTTypeGlobalReference(GV, Encoding, TM,
464367c7fbSEric Christopher MMI, Streamer);
47fd5c1f94SVenkatraman Govindaraju }
48