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