blob: d0db854f784966889f6b042501ef953152abf423 [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"
David Blaikieb3bde2e2017-11-17 01:07:10 +000014#include "llvm/CodeGen/TargetLowering.h"
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000015
16using namespace llvm;
17
Davide Italiano9b8e3d32017-06-21 20:36:32 +000018void SparcELFTargetObjectFile::Initialize(MCContext &Ctx,
19 const TargetMachine &TM) {
20 TargetLoweringObjectFileELF::Initialize(Ctx, TM);
21 InitializeELF(TM.Options.UseInitArray);
22}
23
Rafael Espindola15b26692014-02-09 14:50:44 +000024const MCExpr *SparcELFTargetObjectFile::getTTypeGlobalReference(
Eric Christopher4367c7f2016-09-16 07:33:15 +000025 const GlobalValue *GV, unsigned Encoding, const TargetMachine &TM,
26 MachineModuleInfo *MMI, MCStreamer &Streamer) const {
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000027
28 if (Encoding & dwarf::DW_EH_PE_pcrel) {
29 MachineModuleInfoELF &ELFMMI = MMI->getObjFileInfo<MachineModuleInfoELF>();
30
Eric Christopher4367c7f2016-09-16 07:33:15 +000031 MCSymbol *SSym = getSymbolWithGlobalValueBase(GV, ".DW.stub", TM);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000032
33 // Add information about the stub reference to ELFMMI so that the stub
34 // gets emitted by the asmprinter.
35 MachineModuleInfoImpl::StubValueTy &StubSym = ELFMMI.getGVStubEntry(SSym);
Craig Topper062a2ba2014-04-25 05:30:21 +000036 if (!StubSym.getPointer()) {
Tim Northoverb64fb452016-11-22 16:17:20 +000037 MCSymbol *Sym = TM.getSymbol(GV);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000038 StubSym = MachineModuleInfoImpl::StubValueTy(Sym, !GV->hasLocalLinkage());
39 }
40
41 MCContext &Ctx = getContext();
Jim Grosbach13760bd2015-05-30 01:25:56 +000042 return SparcMCExpr::create(SparcMCExpr::VK_Sparc_R_DISP32,
43 MCSymbolRefExpr::create(SSym, Ctx), Ctx);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000044 }
45
Eric Christopher4367c7f2016-09-16 07:33:15 +000046 return TargetLoweringObjectFileELF::getTTypeGlobalReference(GV, Encoding, TM,
47 MMI, Streamer);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000048}