• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  //===-- llvm/Target/ARMTargetObjectFile.cpp - ARM Object Info Impl --------===//
2  //
3  //                     The LLVM Compiler Infrastructure
4  //
5  // This file is distributed under the University of Illinois Open Source
6  // License. See LICENSE.TXT for details.
7  //
8  //===----------------------------------------------------------------------===//
9  
10  #include "ARMTargetObjectFile.h"
11  #include "ARMSubtarget.h"
12  #include "llvm/ADT/StringExtras.h"
13  #include "llvm/MC/MCContext.h"
14  #include "llvm/MC/MCExpr.h"
15  #include "llvm/MC/MCSectionELF.h"
16  #include "llvm/Support/Dwarf.h"
17  #include "llvm/Support/ELF.h"
18  #include "llvm/Target/Mangler.h"
19  #include "llvm/Target/TargetMachine.h"
20  using namespace llvm;
21  using namespace dwarf;
22  
23  //===----------------------------------------------------------------------===//
24  //                               ELF Target
25  //===----------------------------------------------------------------------===//
26  
Initialize(MCContext & Ctx,const TargetMachine & TM)27  void ARMElfTargetObjectFile::Initialize(MCContext &Ctx,
28                                          const TargetMachine &TM) {
29    bool isAAPCS_ABI = TM.getSubtarget<ARMSubtarget>().isAAPCS_ABI();
30    TargetLoweringObjectFileELF::Initialize(Ctx, TM);
31    InitializeELF(isAAPCS_ABI);
32  
33    if (isAAPCS_ABI) {
34      LSDASection = NULL;
35    }
36  
37    AttributesSection =
38      getContext().getELFSection(".ARM.attributes",
39                                 ELF::SHT_ARM_ATTRIBUTES,
40                                 0,
41                                 SectionKind::getMetadata());
42  }
43  
44  const MCExpr *ARMElfTargetObjectFile::
getTTypeGlobalReference(const GlobalValue * GV,Mangler * Mang,MachineModuleInfo * MMI,unsigned Encoding,MCStreamer & Streamer) const45  getTTypeGlobalReference(const GlobalValue *GV, Mangler *Mang,
46                          MachineModuleInfo *MMI, unsigned Encoding,
47                          MCStreamer &Streamer) const {
48    assert(Encoding == DW_EH_PE_absptr && "Can handle absptr encoding only");
49  
50    return MCSymbolRefExpr::Create(Mang->getSymbol(GV),
51                                   MCSymbolRefExpr::VK_ARM_TARGET2,
52                                   getContext());
53  }
54