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" 11bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling#include "ARMSubtarget.h" 12d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/ADT/StringExtras.h" 13287df1bc0309962770b6c176f2d143795dd3cc2fChris Lattner#include "llvm/MC/MCContext.h" 1425efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov#include "llvm/MC/MCExpr.h" 15bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling#include "llvm/MC/MCSectionELF.h" 16bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling#include "llvm/Support/Dwarf.h" 17c85dca66e68c9fa6ffa8471c64113b12d8d94fb1Rafael Espindola#include "llvm/Support/ELF.h" 18d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Target/Mangler.h" 19d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Target/TargetMachine.h" 20bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendlingusing namespace llvm; 21bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendlingusing namespace dwarf; 22bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling 23bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling//===----------------------------------------------------------------------===// 24bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling// ELF Target 25bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling//===----------------------------------------------------------------------===// 26bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling 27bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendlingvoid ARMElfTargetObjectFile::Initialize(MCContext &Ctx, 28bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling const TargetMachine &TM) { 29d6b43a317e71246380db55a50b799b062b53cdceRafael Espindola bool isAAPCS_ABI = TM.getSubtarget<ARMSubtarget>().isAAPCS_ABI(); 30bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling TargetLoweringObjectFileELF::Initialize(Ctx, TM); 31d6b43a317e71246380db55a50b799b062b53cdceRafael Espindola InitializeELF(isAAPCS_ABI); 32bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling 334a99f59aef358fb93eac180e49f6dcef03822046Anton Korobeynikov if (isAAPCS_ABI) { 34b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov LSDASection = NULL; 35bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling } 36b5e16af9ea04cc1f94ca631104e5e6be96546aa1Anton Korobeynikov 3717b443df4368acfad853d09858c033c45c468d5cJason W Kim AttributesSection = 3817b443df4368acfad853d09858c033c45c468d5cJason W Kim getContext().getELFSection(".ARM.attributes", 39c85dca66e68c9fa6ffa8471c64113b12d8d94fb1Rafael Espindola ELF::SHT_ARM_ATTRIBUTES, 4017b443df4368acfad853d09858c033c45c468d5cJason W Kim 0, 4117b443df4368acfad853d09858c033c45c468d5cJason W Kim SectionKind::getMetadata()); 42bdc38e5aa27bf57b4315b961a172e250bcb1bd69Bill Wendling} 4325efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov 4425efd6d556718295a63d37f5294985746af354f6Anton Korobeynikovconst MCExpr *ARMElfTargetObjectFile:: 4525efd6d556718295a63d37f5294985746af354f6Anton KorobeynikovgetTTypeGlobalReference(const GlobalValue *GV, Mangler *Mang, 4625efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov MachineModuleInfo *MMI, unsigned Encoding, 4725efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov MCStreamer &Streamer) const { 4825efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov assert(Encoding == DW_EH_PE_absptr && "Can handle absptr encoding only"); 4925efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov 5025efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov return MCSymbolRefExpr::Create(Mang->getSymbol(GV), 5125efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov MCSymbolRefExpr::VK_ARM_TARGET2, 5225efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov getContext()); 5325efd6d556718295a63d37f5294985746af354f6Anton Korobeynikov} 54