xref: /aosp_15_r20/external/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===-- llvm/Target/ARMTargetObjectFile.cpp - ARM Object Info Impl --------===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker 
10*9880d681SAndroid Build Coastguard Worker #include "ARMTargetObjectFile.h"
11*9880d681SAndroid Build Coastguard Worker #include "ARMTargetMachine.h"
12*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/StringExtras.h"
13*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/Mangler.h"
14*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCAsmInfo.h"
15*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCContext.h"
16*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCExpr.h"
17*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCSectionELF.h"
18*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/Dwarf.h"
19*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELF.h"
20*9880d681SAndroid Build Coastguard Worker #include "llvm/Target/TargetLowering.h"
21*9880d681SAndroid Build Coastguard Worker using namespace llvm;
22*9880d681SAndroid Build Coastguard Worker using namespace dwarf;
23*9880d681SAndroid Build Coastguard Worker 
24*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
25*9880d681SAndroid Build Coastguard Worker //                               ELF Target
26*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
27*9880d681SAndroid Build Coastguard Worker 
Initialize(MCContext & Ctx,const TargetMachine & TM)28*9880d681SAndroid Build Coastguard Worker void ARMElfTargetObjectFile::Initialize(MCContext &Ctx,
29*9880d681SAndroid Build Coastguard Worker                                         const TargetMachine &TM) {
30*9880d681SAndroid Build Coastguard Worker   bool isAAPCS_ABI = static_cast<const ARMTargetMachine &>(TM).TargetABI ==
31*9880d681SAndroid Build Coastguard Worker                      ARMTargetMachine::ARMABI::ARM_ABI_AAPCS;
32*9880d681SAndroid Build Coastguard Worker   TargetLoweringObjectFileELF::Initialize(Ctx, TM);
33*9880d681SAndroid Build Coastguard Worker   InitializeELF(isAAPCS_ABI);
34*9880d681SAndroid Build Coastguard Worker 
35*9880d681SAndroid Build Coastguard Worker   if (isAAPCS_ABI) {
36*9880d681SAndroid Build Coastguard Worker     LSDASection = nullptr;
37*9880d681SAndroid Build Coastguard Worker   }
38*9880d681SAndroid Build Coastguard Worker 
39*9880d681SAndroid Build Coastguard Worker   AttributesSection =
40*9880d681SAndroid Build Coastguard Worker       getContext().getELFSection(".ARM.attributes", ELF::SHT_ARM_ATTRIBUTES, 0);
41*9880d681SAndroid Build Coastguard Worker }
42*9880d681SAndroid Build Coastguard Worker 
getTTypeGlobalReference(const GlobalValue * GV,unsigned Encoding,Mangler & Mang,const TargetMachine & TM,MachineModuleInfo * MMI,MCStreamer & Streamer) const43*9880d681SAndroid Build Coastguard Worker const MCExpr *ARMElfTargetObjectFile::getTTypeGlobalReference(
44*9880d681SAndroid Build Coastguard Worker     const GlobalValue *GV, unsigned Encoding, Mangler &Mang,
45*9880d681SAndroid Build Coastguard Worker     const TargetMachine &TM, MachineModuleInfo *MMI,
46*9880d681SAndroid Build Coastguard Worker     MCStreamer &Streamer) const {
47*9880d681SAndroid Build Coastguard Worker   if (TM.getMCAsmInfo()->getExceptionHandlingType() != ExceptionHandling::ARM)
48*9880d681SAndroid Build Coastguard Worker     return TargetLoweringObjectFileELF::getTTypeGlobalReference(
49*9880d681SAndroid Build Coastguard Worker         GV, Encoding, Mang, TM, MMI, Streamer);
50*9880d681SAndroid Build Coastguard Worker 
51*9880d681SAndroid Build Coastguard Worker   assert(Encoding == DW_EH_PE_absptr && "Can handle absptr encoding only");
52*9880d681SAndroid Build Coastguard Worker 
53*9880d681SAndroid Build Coastguard Worker   return MCSymbolRefExpr::create(TM.getSymbol(GV, Mang),
54*9880d681SAndroid Build Coastguard Worker                                  MCSymbolRefExpr::VK_ARM_TARGET2, getContext());
55*9880d681SAndroid Build Coastguard Worker }
56*9880d681SAndroid Build Coastguard Worker 
57*9880d681SAndroid Build Coastguard Worker const MCExpr *ARMElfTargetObjectFile::
getDebugThreadLocalSymbol(const MCSymbol * Sym) const58*9880d681SAndroid Build Coastguard Worker getDebugThreadLocalSymbol(const MCSymbol *Sym) const {
59*9880d681SAndroid Build Coastguard Worker   return MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_ARM_TLSLDO,
60*9880d681SAndroid Build Coastguard Worker                                  getContext());
61*9880d681SAndroid Build Coastguard Worker }
62