17609785d2b9b79b9aafc3b3afabcb691cfc8afa5Rafael Espindola//===-- ARMELFObjectWriter.cpp - ARM ELF Writer ---------------------------===// 269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola// 369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola// The LLVM Compiler Infrastructure 469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola// 569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola// This file is distributed under the University of Illinois Open Source 669bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola// License. See LICENSE.TXT for details. 769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola// 869bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola//===----------------------------------------------------------------------===// 969bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola 1069bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola#include "MCTargetDesc/ARMMCTargetDesc.h" 11d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "MCTargetDesc/ARMFixupKinds.h" 1269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola#include "llvm/ADT/Statistic.h" 1369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola#include "llvm/ADT/StringSwitch.h" 1469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola#include "llvm/MC/MCELFObjectWriter.h" 1569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola#include "llvm/MC/MCExpr.h" 1669bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola#include "llvm/MC/MCSectionELF.h" 1769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola#include "llvm/MC/MCValue.h" 18d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Support/Debug.h" 19d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Support/ErrorHandling.h" 20d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Support/raw_ostream.h" 2169bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola 2269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindolausing namespace llvm; 2369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola 2469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindolanamespace { 2569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola class ARMELFObjectWriter : public MCELFObjectTargetWriter { 2669bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola enum { DefaultEABIVersion = 0x05000000U }; 2769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola unsigned GetRelocTypeInner(const MCValue &Target, 2869bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola const MCFixup &Fixup, 2969bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola bool IsPCRel) const; 3069bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola 3169bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola 3269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola public: 3369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola ARMELFObjectWriter(uint8_t OSABI); 3469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola 3569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola virtual ~ARMELFObjectWriter(); 366db2d926033a5b35ca01293167353a15637ac7f2Rafael Espindola 3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup, 3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool IsPCRel) const override; 3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool needsRelocateWithSymbol(unsigned Type) const override; 4169bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola }; 4269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola} 4369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola 4469bbda03918a18bd4477bb254d51346ee3033567Rafael EspindolaARMELFObjectWriter::ARMELFObjectWriter(uint8_t OSABI) 4569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola : MCELFObjectTargetWriter(/*Is64Bit*/ false, OSABI, 4669bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola ELF::EM_ARM, 4769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola /*HasRelocationAddend*/ false) {} 4869bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola 4969bbda03918a18bd4477bb254d51346ee3033567Rafael EspindolaARMELFObjectWriter::~ARMELFObjectWriter() {} 5069bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola 5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesbool ARMELFObjectWriter::needsRelocateWithSymbol(unsigned Type) const { 5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // FIXME: This is extremelly conservative. This really needs to use a 5336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // whitelist with a clear explanation for why each realocation needs to 5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // point to the symbol, not to the section. 5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines switch (Type) { 5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines default: 5736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return true; 5836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 5936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case ELF::R_ARM_PREL31: 6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case ELF::R_ARM_ABS32: 6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return false; 6269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola } 6369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola} 6469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola 6569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola// Need to examine the Fixup when determining whether to 6669bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola// emit the relocation as an explicit symbol or as a section relative 6769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola// offset 6869bbda03918a18bd4477bb254d51346ee3033567Rafael Espindolaunsigned ARMELFObjectWriter::GetRelocType(const MCValue &Target, 6969bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola const MCFixup &Fixup, 7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool IsPCRel) const { 7169bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola return GetRelocTypeInner(Target, Fixup, IsPCRel); 7269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola} 7369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola 7469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindolaunsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target, 7569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola const MCFixup &Fixup, 7669bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola bool IsPCRel) const { 77dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MCSymbolRefExpr::VariantKind Modifier = Target.getAccessVariant(); 7869bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola 7969bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola unsigned Type = 0; 8069bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola if (IsPCRel) { 8169bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola switch ((unsigned)Fixup.getKind()) { 82bc2198133a1836598b54b943420748e75d5dea94Craig Topper default: llvm_unreachable("Unimplemented"); 8369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case FK_Data_4: 8469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola switch (Modifier) { 8569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola default: llvm_unreachable("Unsupported Modifier"); 8669bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case MCSymbolRefExpr::VK_None: 8769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_REL32; 8869bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 8936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case MCSymbolRefExpr::VK_TLSGD: 90bc2198133a1836598b54b943420748e75d5dea94Craig Topper llvm_unreachable("unimplemented"); 9136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case MCSymbolRefExpr::VK_GOTTPOFF: 9269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_TLS_IE32; 9369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 94dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case MCSymbolRefExpr::VK_GOTPCREL: 95dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines Type = ELF::R_ARM_GOT_PREL; 96dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines break; 9769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola } 9869bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 997b25ecf6adbf3c4709c48033acfeb6ebbb4452abJim Grosbach case ARM::fixup_arm_blx: 100c9a4e269d00dc9e2ba0c7b77721fa54cfb5a59faJan Wen Voung case ARM::fixup_arm_uncondbl: 10169bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola switch (Modifier) { 10236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case MCSymbolRefExpr::VK_PLT: 10369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_PLT32; 10469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 10536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case MCSymbolRefExpr::VK_ARM_TLSCALL: 10636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines Type = ELF::R_ARM_TLS_CALL; 10736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines break; 10869bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola default: 10969bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_CALL; 11069bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 11169bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola } 11269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 113cb0809b82b126e79b99755ae4fc3d9733faea038James Molloy case ARM::fixup_arm_condbl: 11469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_condbranch: 115c9a4e269d00dc9e2ba0c7b77721fa54cfb5a59faJan Wen Voung case ARM::fixup_arm_uncondbranch: 11669bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_JUMP24; 11769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 1188fccd013d87c4b12edb4c9982fd9f3517917d2f7Logan Chien case ARM::fixup_t2_condbranch: 1198fccd013d87c4b12edb4c9982fd9f3517917d2f7Logan Chien case ARM::fixup_t2_uncondbranch: 1208fccd013d87c4b12edb4c9982fd9f3517917d2f7Logan Chien Type = ELF::R_ARM_THM_JUMP24; 1218fccd013d87c4b12edb4c9982fd9f3517917d2f7Logan Chien break; 12269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_movt_hi16: 12369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_MOVT_PREL; 12469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 12569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_movw_lo16: 12669bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_MOVW_PREL_NC; 12769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 12869bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_t2_movt_hi16: 12969bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_THM_MOVT_PREL; 13069bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 13169bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_t2_movw_lo16: 13269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_THM_MOVW_PREL_NC; 13369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 13469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_thumb_bl: 13569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_thumb_blx: 13636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines switch (Modifier) { 13736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case MCSymbolRefExpr::VK_ARM_TLSCALL: 13836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines Type = ELF::R_ARM_THM_TLS_CALL; 13936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines break; 14036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines default: 14136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines Type = ELF::R_ARM_THM_CALL; 14236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines break; 14336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 14469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 14569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola } 14669bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola } else { 14769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola switch ((unsigned)Fixup.getKind()) { 14869bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola default: llvm_unreachable("invalid fixup kind!"); 14969bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case FK_Data_4: 15069bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola switch (Modifier) { 1514d6ccb5f68cd7c6418a209f1fa4dbade569e4493David Blaikie default: llvm_unreachable("Unsupported Modifier"); 15237c7461fc3f1983a81bfe934855d707fd6572e78Logan Chien case MCSymbolRefExpr::VK_ARM_NONE: 15337c7461fc3f1983a81bfe934855d707fd6572e78Logan Chien Type = ELF::R_ARM_NONE; 15437c7461fc3f1983a81bfe934855d707fd6572e78Logan Chien break; 15536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case MCSymbolRefExpr::VK_GOT: 15669bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_GOT_BREL; 15769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 15836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case MCSymbolRefExpr::VK_TLSGD: 15969bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_TLS_GD32; 16069bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 16136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case MCSymbolRefExpr::VK_TPOFF: 16269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_TLS_LE32; 16369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 16436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case MCSymbolRefExpr::VK_GOTTPOFF: 16569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_TLS_IE32; 16669bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 16769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case MCSymbolRefExpr::VK_None: 16869bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_ABS32; 16969bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 17036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case MCSymbolRefExpr::VK_GOTOFF: 17169bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_GOTOFF32; 17269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 173dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines case MCSymbolRefExpr::VK_GOTPCREL: 174dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines Type = ELF::R_ARM_GOT_PREL; 175dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines break; 17634982576a43887e7f062ed0a3571af2cbab003f3James Molloy case MCSymbolRefExpr::VK_ARM_TARGET1: 17734982576a43887e7f062ed0a3571af2cbab003f3James Molloy Type = ELF::R_ARM_TARGET1; 17834982576a43887e7f062ed0a3571af2cbab003f3James Molloy break; 17912cfa119600418d31ceb748d077b3e6f7057a22aAnton Korobeynikov case MCSymbolRefExpr::VK_ARM_TARGET2: 18012cfa119600418d31ceb748d077b3e6f7057a22aAnton Korobeynikov Type = ELF::R_ARM_TARGET2; 18112cfa119600418d31ceb748d077b3e6f7057a22aAnton Korobeynikov break; 18237c7461fc3f1983a81bfe934855d707fd6572e78Logan Chien case MCSymbolRefExpr::VK_ARM_PREL31: 18337c7461fc3f1983a81bfe934855d707fd6572e78Logan Chien Type = ELF::R_ARM_PREL31; 18437c7461fc3f1983a81bfe934855d707fd6572e78Logan Chien break; 18536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case MCSymbolRefExpr::VK_ARM_TLSLDO: 18636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines Type = ELF::R_ARM_TLS_LDO32; 18736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines break; 18836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case MCSymbolRefExpr::VK_ARM_TLSCALL: 18936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines Type = ELF::R_ARM_TLS_CALL; 19036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines break; 19136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case MCSymbolRefExpr::VK_ARM_TLSDESC: 19236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines Type = ELF::R_ARM_TLS_GOTDESC; 19336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines break; 19436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case MCSymbolRefExpr::VK_ARM_TLSDESCSEQ: 19536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines Type = ELF::R_ARM_TLS_DESCSEQ; 19636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines break; 19737c7461fc3f1983a81bfe934855d707fd6572e78Logan Chien } 19869bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 19969bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_ldst_pcrel_12: 20069bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_pcrel_10: 20169bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_adr_pcrel_12: 20269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_thumb_bl: 20369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_thumb_cb: 20469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_thumb_cp: 20569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_thumb_br: 206bc2198133a1836598b54b943420748e75d5dea94Craig Topper llvm_unreachable("Unimplemented"); 20769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_condbranch: 208c9a4e269d00dc9e2ba0c7b77721fa54cfb5a59faJan Wen Voung case ARM::fixup_arm_uncondbranch: 20969bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_JUMP24; 21069bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 21169bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_movt_hi16: 21269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_MOVT_ABS; 21369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 21469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_arm_movw_lo16: 21569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_MOVW_ABS_NC; 21669bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 21769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_t2_movt_hi16: 21869bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_THM_MOVT_ABS; 21969bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 22069bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola case ARM::fixup_t2_movw_lo16: 22169bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola Type = ELF::R_ARM_THM_MOVW_ABS_NC; 22269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola break; 22369bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola } 22469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola } 22569bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola 22669bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola return Type; 22769bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola} 22869bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola 22969bbda03918a18bd4477bb254d51346ee3033567Rafael EspindolaMCObjectWriter *llvm::createARMELFObjectWriter(raw_ostream &OS, 23036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines uint8_t OSABI, 23136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool IsLittleEndian) { 23269bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola MCELFObjectTargetWriter *MOTW = new ARMELFObjectWriter(OSABI); 23336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return createELFObjectWriter(MOTW, OS, IsLittleEndian); 23469bbda03918a18bd4477bb254d51346ee3033567Rafael Espindola} 235