1262261Sdim//===------- SparcTargetObjectFile.cpp - Sparc Object Info Impl -----------===// 2262261Sdim// 3262261Sdim// The LLVM Compiler Infrastructure 4262261Sdim// 5262261Sdim// This file is distributed under the University of Illinois Open Source 6262261Sdim// License. See LICENSE.TXT for details. 7262261Sdim// 8262261Sdim//===----------------------------------------------------------------------===// 9262261Sdim 10262261Sdim#include "SparcTargetObjectFile.h" 11262261Sdim#include "MCTargetDesc/SparcMCExpr.h" 12262261Sdim#include "llvm/CodeGen/MachineModuleInfoImpls.h" 13262261Sdim#include "llvm/Support/Dwarf.h" 14262261Sdim#include "llvm/Target/Mangler.h" 15262261Sdim 16262261Sdimusing namespace llvm; 17262261Sdim 18262261Sdim 19262261Sdimconst MCExpr *SparcELFTargetObjectFile:: 20262261SdimgetTTypeGlobalReference(const GlobalValue *GV, Mangler *Mang, 21262261Sdim MachineModuleInfo *MMI, unsigned Encoding, 22262261Sdim MCStreamer &Streamer) const { 23262261Sdim 24262261Sdim if (Encoding & dwarf::DW_EH_PE_pcrel) { 25262261Sdim MachineModuleInfoELF &ELFMMI = MMI->getObjFileInfo<MachineModuleInfoELF>(); 26262261Sdim 27262261Sdim //MCSymbol *SSym = getSymbolWithGlobalValueBase(*Mang, GV, ".DW.stub"); 28262261Sdim SmallString<60> NameStr; 29262261Sdim Mang->getNameWithPrefix(NameStr, GV, true); 30262261Sdim NameStr.append(".DW.stub"); 31262261Sdim MCSymbol *SSym = getContext().GetOrCreateSymbol(NameStr.str()); 32262261Sdim 33262261Sdim // Add information about the stub reference to ELFMMI so that the stub 34262261Sdim // gets emitted by the asmprinter. 35262261Sdim MachineModuleInfoImpl::StubValueTy &StubSym = ELFMMI.getGVStubEntry(SSym); 36262261Sdim if (StubSym.getPointer() == 0) { 37262261Sdim MCSymbol *Sym = getSymbol(*Mang, GV); 38262261Sdim StubSym = MachineModuleInfoImpl::StubValueTy(Sym, !GV->hasLocalLinkage()); 39262261Sdim } 40262261Sdim 41262261Sdim MCContext &Ctx = getContext(); 42262261Sdim return SparcMCExpr::Create(SparcMCExpr::VK_Sparc_R_DISP32, 43262261Sdim MCSymbolRefExpr::Create(SSym, Ctx), Ctx); 44262261Sdim } 45262261Sdim 46262261Sdim return TargetLoweringObjectFileELF:: 47262261Sdim getTTypeGlobalReference(GV, Mang, MMI, Encoding, Streamer); 48262261Sdim} 49