blob: 627e49a95f3cc84d68e4d89ed845d3301f9a10a8 [file] [log] [blame]
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +00001//===------- SparcTargetObjectFile.cpp - Sparc Object Info Impl -----------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "SparcTargetObjectFile.h"
11#include "MCTargetDesc/SparcMCExpr.h"
Zachary Turner264b5d92017-06-07 03:48:56 +000012#include "llvm/BinaryFormat/Dwarf.h"
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000013#include "llvm/CodeGen/MachineModuleInfoImpls.h"
Rafael Espindoladaeafb42014-02-19 17:23:20 +000014#include "llvm/Target/TargetLowering.h"
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000015
16using namespace llvm;
17
Rafael Espindola15b26692014-02-09 14:50:44 +000018const MCExpr *SparcELFTargetObjectFile::getTTypeGlobalReference(
Eric Christopher4367c7f2016-09-16 07:33:15 +000019 const GlobalValue *GV, unsigned Encoding, const TargetMachine &TM,
20 MachineModuleInfo *MMI, MCStreamer &Streamer) const {
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000021
22 if (Encoding & dwarf::DW_EH_PE_pcrel) {
23 MachineModuleInfoELF &ELFMMI = MMI->getObjFileInfo<MachineModuleInfoELF>();
24
Eric Christopher4367c7f2016-09-16 07:33:15 +000025 MCSymbol *SSym = getSymbolWithGlobalValueBase(GV, ".DW.stub", TM);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000026
27 // Add information about the stub reference to ELFMMI so that the stub
28 // gets emitted by the asmprinter.
29 MachineModuleInfoImpl::StubValueTy &StubSym = ELFMMI.getGVStubEntry(SSym);
Craig Topper062a2ba2014-04-25 05:30:21 +000030 if (!StubSym.getPointer()) {
Tim Northoverb64fb452016-11-22 16:17:20 +000031 MCSymbol *Sym = TM.getSymbol(GV);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000032 StubSym = MachineModuleInfoImpl::StubValueTy(Sym, !GV->hasLocalLinkage());
33 }
34
35 MCContext &Ctx = getContext();
Jim Grosbach13760bd2015-05-30 01:25:56 +000036 return SparcMCExpr::create(SparcMCExpr::VK_Sparc_R_DISP32,
37 MCSymbolRefExpr::create(SSym, Ctx), Ctx);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000038 }
39
Eric Christopher4367c7f2016-09-16 07:33:15 +000040 return TargetLoweringObjectFileELF::getTTypeGlobalReference(GV, Encoding, TM,
41 MMI, Streamer);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000042}