SparcTargetObjectFile.cpp revision dce4a407a24b04eebc6a376f8e62b41aaa7b071f
1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch//===------- SparcTargetObjectFile.cpp - Sparc Object Info Impl -----------===// 2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// 3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "SparcTargetObjectFile.h" 113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "MCTargetDesc/SparcMCExpr.h" 12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "llvm/CodeGen/MachineModuleInfoImpls.h" 13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "llvm/Support/Dwarf.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/Target/TargetLowering.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using namespace llvm; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const MCExpr *SparcELFTargetObjectFile::getTTypeGlobalReference( 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GlobalValue *GV, unsigned Encoding, Mangler &Mang, 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TargetMachine &TM, MachineModuleInfo *MMI, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MCStreamer &Streamer) const { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (Encoding & dwarf::DW_EH_PE_pcrel) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MachineModuleInfoELF &ELFMMI = MMI->getObjFileInfo<MachineModuleInfoELF>(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MCSymbol *SSym = getSymbolWithGlobalValueBase(GV, ".DW.stub", Mang, TM); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add information about the stub reference to ELFMMI so that the stub 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // gets emitted by the asmprinter. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MachineModuleInfoImpl::StubValueTy &StubSym = ELFMMI.getGVStubEntry(SSym); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!StubSym.getPointer()) { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MCSymbol *Sym = TM.getSymbol(GV, Mang); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StubSym = MachineModuleInfoImpl::StubValueTy(Sym, !GV->hasLocalLinkage()); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MCContext &Ctx = getContext(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SparcMCExpr::Create(SparcMCExpr::VK_Sparc_R_DISP32, 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MCSymbolRefExpr::Create(SSym, Ctx), Ctx); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return TargetLoweringObjectFileELF::getTTypeGlobalReference( 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GV, Encoding, Mang, TM, MMI, Streamer); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)