blob: 412e124f9a26e8d4bf7339c88f9ae642afc9282a [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"
12#include "llvm/CodeGen/MachineModuleInfoImpls.h"
13#include "llvm/Support/Dwarf.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(
19 const GlobalValue *GV, unsigned Encoding, Mangler &Mang,
Rafael Espindoladaeafb42014-02-19 17:23:20 +000020 const TargetMachine &TM, MachineModuleInfo *MMI,
21 MCStreamer &Streamer) const {
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000022
23 if (Encoding & dwarf::DW_EH_PE_pcrel) {
24 MachineModuleInfoELF &ELFMMI = MMI->getObjFileInfo<MachineModuleInfoELF>();
25
Rafael Espindoladaeafb42014-02-19 17:23:20 +000026 MCSymbol *SSym = getSymbolWithGlobalValueBase(GV, ".DW.stub", Mang, TM);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000027
28 // Add information about the stub reference to ELFMMI so that the stub
29 // gets emitted by the asmprinter.
30 MachineModuleInfoImpl::StubValueTy &StubSym = ELFMMI.getGVStubEntry(SSym);
Craig Topper062a2ba2014-04-25 05:30:21 +000031 if (!StubSym.getPointer()) {
Rafael Espindolaa3ad4e62014-02-19 20:30:41 +000032 MCSymbol *Sym = TM.getSymbol(GV, Mang);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000033 StubSym = MachineModuleInfoImpl::StubValueTy(Sym, !GV->hasLocalLinkage());
34 }
35
36 MCContext &Ctx = getContext();
Jim Grosbach13760bd2015-05-30 01:25:56 +000037 return SparcMCExpr::create(SparcMCExpr::VK_Sparc_R_DISP32,
38 MCSymbolRefExpr::create(SSym, Ctx), Ctx);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000039 }
40
Rafael Espindola15b26692014-02-09 14:50:44 +000041 return TargetLoweringObjectFileELF::getTTypeGlobalReference(
Rafael Espindoladaeafb42014-02-19 17:23:20 +000042 GV, Encoding, Mang, TM, MMI, Streamer);
Venkatraman Govindarajufd5c1f92014-01-29 04:51:35 +000043}