1bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling//===-- llvm/Target/ARMTargetObjectFile.cpp - ARM Object Info Impl --------===// 2bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling// 3bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling// The LLVM Compiler Infrastructure 4bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling// 5bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling// This file is distributed under the University of Illinois Open Source 6bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling// License. See LICENSE.TXT for details. 7bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling// 8bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling//===----------------------------------------------------------------------===// 9bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling 10bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling#include "ARMTargetObjectFile.h" 11ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "ARMTargetMachine.h" 12d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/ADT/StringExtras.h" 1336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/IR/Mangler.h" 14dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/MC/MCAsmInfo.h" 15287df1bc0309962770b6c176f2d143795dd3cc2fChris Lattner#include "llvm/MC/MCContext.h" 1625efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov#include "llvm/MC/MCExpr.h" 17bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling#include "llvm/MC/MCSectionELF.h" 18bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling#include "llvm/Support/Dwarf.h" 19c85dca66e68c9fa6ffa8471c64113b12d8d94fb1Rafael Espindola#include "llvm/Support/ELF.h" 2036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/Target/TargetLowering.h" 21bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendlingusing namespace llvm; 22bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendlingusing namespace dwarf; 23bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling 24bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling//===----------------------------------------------------------------------===// 25bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling// ELF Target 26bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling//===----------------------------------------------------------------------===// 27bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling 28bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendlingvoid ARMElfTargetObjectFile::Initialize(MCContext &Ctx, 29bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling const TargetMachine &TM) { 30ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines bool isAAPCS_ABI = static_cast<const ARMTargetMachine &>(TM).TargetABI == 31ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ARMTargetMachine::ARMABI::ARM_ABI_AAPCS; 32bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling TargetLoweringObjectFileELF::Initialize(Ctx, TM); 33d6b43a317e71246380db55a50b799b062b53cdceRafael Espindola InitializeELF(isAAPCS_ABI); 34bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling 354a99f59aef358fb93eac180e49f6dcef03822046Anton Korobeynikov if (isAAPCS_ABI) { 36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines LSDASection = nullptr; 37bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling } 38b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov 3917b443df4368acfad853d09858c033c45c468d5cJason W Kim AttributesSection = 40ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines getContext().getELFSection(".ARM.attributes", ELF::SHT_ARM_ATTRIBUTES, 0); 41bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling} 4225efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov 4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesconst MCExpr *ARMElfTargetObjectFile::getTTypeGlobalReference( 4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const GlobalValue *GV, unsigned Encoding, Mangler &Mang, 4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const TargetMachine &TM, MachineModuleInfo *MMI, 4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MCStreamer &Streamer) const { 47dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines if (TM.getMCAsmInfo()->getExceptionHandlingType() != ExceptionHandling::ARM) 48dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return TargetLoweringObjectFileELF::getTTypeGlobalReference( 49dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines GV, Encoding, Mang, TM, MMI, Streamer); 50dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 5125efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov assert(Encoding == DW_EH_PE_absptr && "Can handle absptr encoding only"); 5225efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov 536948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar return MCSymbolRefExpr::create(TM.getSymbol(GV, Mang), 5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MCSymbolRefExpr::VK_ARM_TARGET2, getContext()); 5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} 5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 5736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesconst MCExpr *ARMElfTargetObjectFile:: 5836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesgetDebugThreadLocalSymbol(const MCSymbol *Sym) const { 596948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar return MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_ARM_TLSLDO, 6025efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov getContext()); 6125efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov} 62