blob: e6ad4d2d67aa7517d5b1a3386e0b4df9a12bd71c [file] [log] [blame]
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +00001//===------- SparcTargetObjectFile.cpp - Sparc Object Info Impl -----------===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +00006//
7//===----------------------------------------------------------------------===//
8
9#include "SparcTargetObjectFile.h"
10#include "MCTargetDesc/SparcMCExpr.h"
Zachary Turner264b5d92017-06-07 03:48:56 +000011#include "llvm/BinaryFormat/Dwarf.h"
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000012#include "llvm/CodeGen/MachineModuleInfoImpls.h"
David Blaikieb3bde2e2017-11-17 01:07:10 +000013#include "llvm/CodeGen/TargetLowering.h"
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000014
15using namespace llvm;
16
Davide Italiano9b8e3d32017-06-21 20:36:32 +000017void SparcELFTargetObjectFile::Initialize(MCContext &Ctx,
18 const TargetMachine &TM) {
19 TargetLoweringObjectFileELF::Initialize(Ctx, TM);
20 InitializeELF(TM.Options.UseInitArray);
21}
22
Rafael Espindola15b26692014-02-09 14:50:44 +000023const MCExpr *SparcELFTargetObjectFile::getTTypeGlobalReference(
Eric Christopher4367c7f2016-09-16 07:33:15 +000024 const GlobalValue *GV, unsigned Encoding, const TargetMachine &TM,
25 MachineModuleInfo *MMI, MCStreamer &Streamer) const {
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000026
27 if (Encoding & dwarf::DW_EH_PE_pcrel) {
28 MachineModuleInfoELF &ELFMMI = MMI->getObjFileInfo<MachineModuleInfoELF>();
29
Eric Christopher4367c7f2016-09-16 07:33:15 +000030 MCSymbol *SSym = getSymbolWithGlobalValueBase(GV, ".DW.stub", TM);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000031
32 // Add information about the stub reference to ELFMMI so that the stub
33 // gets emitted by the asmprinter.
34 MachineModuleInfoImpl::StubValueTy &StubSym = ELFMMI.getGVStubEntry(SSym);
Craig Topper062a2ba2014-04-25 05:30:21 +000035 if (!StubSym.getPointer()) {
Tim Northoverb64fb452016-11-22 16:17:20 +000036 MCSymbol *Sym = TM.getSymbol(GV);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000037 StubSym = MachineModuleInfoImpl::StubValueTy(Sym, !GV->hasLocalLinkage());
38 }
39
40 MCContext &Ctx = getContext();
Jim Grosbach13760bd2015-05-30 01:25:56 +000041 return SparcMCExpr::create(SparcMCExpr::VK_Sparc_R_DISP32,
42 MCSymbolRefExpr::create(SSym, Ctx), Ctx);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000043 }
44
Eric Christopher4367c7f2016-09-16 07:33:15 +000045 return TargetLoweringObjectFileELF::getTTypeGlobalReference(GV, Encoding, TM,
46 MMI, Streamer);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000047}