xref: /freebsd/contrib/llvm-project/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonELFObjectWriter.cpp (revision e25152834cdf3b353892835a4f3b157e066a8ed4)
10b57cec5SDimitry Andric //===-- HexagonELFObjectWriter.cpp - Hexagon Target Descriptions ----------===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #include "MCTargetDesc/HexagonFixupKinds.h"
100b57cec5SDimitry Andric #include "MCTargetDesc/HexagonMCTargetDesc.h"
110b57cec5SDimitry Andric #include "llvm/MC/MCAssembler.h"
120b57cec5SDimitry Andric #include "llvm/MC/MCELFObjectWriter.h"
130b57cec5SDimitry Andric #include "llvm/MC/MCObjectWriter.h"
140b57cec5SDimitry Andric #include "llvm/MC/MCValue.h"
150b57cec5SDimitry Andric #include "llvm/Support/Debug.h"
160b57cec5SDimitry Andric #include "llvm/Support/raw_ostream.h"
170b57cec5SDimitry Andric 
180b57cec5SDimitry Andric #define DEBUG_TYPE "hexagon-elf-writer"
190b57cec5SDimitry Andric 
200b57cec5SDimitry Andric using namespace llvm;
210b57cec5SDimitry Andric using namespace Hexagon;
220b57cec5SDimitry Andric 
230b57cec5SDimitry Andric namespace {
240b57cec5SDimitry Andric 
250b57cec5SDimitry Andric class HexagonELFObjectWriter : public MCELFObjectTargetWriter {
260b57cec5SDimitry Andric private:
270b57cec5SDimitry Andric   StringRef CPU;
280b57cec5SDimitry Andric 
290b57cec5SDimitry Andric public:
300b57cec5SDimitry Andric   HexagonELFObjectWriter(uint8_t OSABI, StringRef C);
310b57cec5SDimitry Andric 
320b57cec5SDimitry Andric   unsigned getRelocType(MCContext &Ctx, MCValue const &Target,
330b57cec5SDimitry Andric                         MCFixup const &Fixup, bool IsPCRel) const override;
340b57cec5SDimitry Andric };
350b57cec5SDimitry Andric }
360b57cec5SDimitry Andric 
HexagonELFObjectWriter(uint8_t OSABI,StringRef C)370b57cec5SDimitry Andric HexagonELFObjectWriter::HexagonELFObjectWriter(uint8_t OSABI, StringRef C)
380b57cec5SDimitry Andric     : MCELFObjectTargetWriter(/*Is64bit*/ false, OSABI, ELF::EM_HEXAGON,
390b57cec5SDimitry Andric                               /*HasRelocationAddend*/ true),
400b57cec5SDimitry Andric       CPU(C) {}
410b57cec5SDimitry Andric 
getRelocType(MCContext & Ctx,MCValue const & Target,MCFixup const & Fixup,bool IsPCRel) const420b57cec5SDimitry Andric unsigned HexagonELFObjectWriter::getRelocType(MCContext &Ctx,
430b57cec5SDimitry Andric                                               MCValue const &Target,
440b57cec5SDimitry Andric                                               MCFixup const &Fixup,
450b57cec5SDimitry Andric                                               bool IsPCRel) const {
460b57cec5SDimitry Andric   MCSymbolRefExpr::VariantKind Variant = Target.getAccessVariant();
478bcb0991SDimitry Andric   switch (Fixup.getTargetKind()) {
480b57cec5SDimitry Andric   default:
490b57cec5SDimitry Andric     report_fatal_error("Unrecognized relocation type");
500b57cec5SDimitry Andric     break;
510b57cec5SDimitry Andric   case FK_Data_4:
520b57cec5SDimitry Andric     switch(Variant) {
530b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_DTPREL:
540b57cec5SDimitry Andric       return ELF::R_HEX_DTPREL_32;
550b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_GOT:
560b57cec5SDimitry Andric       return ELF::R_HEX_GOT_32;
570b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_GOTREL:
580b57cec5SDimitry Andric       return ELF::R_HEX_GOTREL_32;
590b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_Hexagon_GD_GOT:
600b57cec5SDimitry Andric       return ELF::R_HEX_GD_GOT_32;
610b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_Hexagon_IE:
620b57cec5SDimitry Andric       return ELF::R_HEX_IE_32;
630b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_Hexagon_IE_GOT:
640b57cec5SDimitry Andric       return ELF::R_HEX_IE_GOT_32;
650b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_Hexagon_LD_GOT:
660b57cec5SDimitry Andric       return ELF::R_HEX_LD_GOT_32;
67*5ffd83dbSDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_PCREL:
680b57cec5SDimitry Andric       return ELF::R_HEX_32_PCREL;
690b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_TPREL:
700b57cec5SDimitry Andric       return ELF::R_HEX_TPREL_32;
710b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_None:
720b57cec5SDimitry Andric       return IsPCRel ? ELF::R_HEX_32_PCREL : ELF::R_HEX_32;
730b57cec5SDimitry Andric     default:
740b57cec5SDimitry Andric       report_fatal_error("Unrecognized variant type");
750b57cec5SDimitry Andric     };
760b57cec5SDimitry Andric   case FK_PCRel_4:
770b57cec5SDimitry Andric     return ELF::R_HEX_32_PCREL;
780b57cec5SDimitry Andric   case FK_Data_2:
790b57cec5SDimitry Andric     switch(Variant) {
800b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_DTPREL:
810b57cec5SDimitry Andric       return ELF::R_HEX_DTPREL_16;
820b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_GOT:
830b57cec5SDimitry Andric       return ELF::R_HEX_GOT_16;
840b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_Hexagon_GD_GOT:
850b57cec5SDimitry Andric       return ELF::R_HEX_GD_GOT_16;
860b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_Hexagon_IE_GOT:
870b57cec5SDimitry Andric       return ELF::R_HEX_IE_GOT_16;
880b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_Hexagon_LD_GOT:
890b57cec5SDimitry Andric       return ELF::R_HEX_LD_GOT_16;
900b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_TPREL:
910b57cec5SDimitry Andric       return ELF::R_HEX_TPREL_16;
920b57cec5SDimitry Andric     case MCSymbolRefExpr::VariantKind::VK_None:
930b57cec5SDimitry Andric       return ELF::R_HEX_16;
940b57cec5SDimitry Andric     default:
950b57cec5SDimitry Andric       report_fatal_error("Unrecognized variant type");
960b57cec5SDimitry Andric     };
970b57cec5SDimitry Andric   case FK_Data_1:
980b57cec5SDimitry Andric     return ELF::R_HEX_8;
990b57cec5SDimitry Andric   case fixup_Hexagon_B22_PCREL:
1000b57cec5SDimitry Andric     return ELF::R_HEX_B22_PCREL;
1010b57cec5SDimitry Andric   case fixup_Hexagon_B15_PCREL:
1020b57cec5SDimitry Andric     return ELF::R_HEX_B15_PCREL;
1030b57cec5SDimitry Andric   case fixup_Hexagon_B7_PCREL:
1040b57cec5SDimitry Andric     return ELF::R_HEX_B7_PCREL;
1050b57cec5SDimitry Andric   case fixup_Hexagon_LO16:
1060b57cec5SDimitry Andric     return ELF::R_HEX_LO16;
1070b57cec5SDimitry Andric   case fixup_Hexagon_HI16:
1080b57cec5SDimitry Andric     return ELF::R_HEX_HI16;
1090b57cec5SDimitry Andric   case fixup_Hexagon_32:
1100b57cec5SDimitry Andric     return ELF::R_HEX_32;
1110b57cec5SDimitry Andric   case fixup_Hexagon_16:
1120b57cec5SDimitry Andric     return ELF::R_HEX_16;
1130b57cec5SDimitry Andric   case fixup_Hexagon_8:
1140b57cec5SDimitry Andric     return ELF::R_HEX_8;
1150b57cec5SDimitry Andric   case fixup_Hexagon_GPREL16_0:
1160b57cec5SDimitry Andric     return ELF::R_HEX_GPREL16_0;
1170b57cec5SDimitry Andric   case fixup_Hexagon_GPREL16_1:
1180b57cec5SDimitry Andric     return ELF::R_HEX_GPREL16_1;
1190b57cec5SDimitry Andric   case fixup_Hexagon_GPREL16_2:
1200b57cec5SDimitry Andric     return ELF::R_HEX_GPREL16_2;
1210b57cec5SDimitry Andric   case fixup_Hexagon_GPREL16_3:
1220b57cec5SDimitry Andric     return ELF::R_HEX_GPREL16_3;
1230b57cec5SDimitry Andric   case fixup_Hexagon_HL16:
1240b57cec5SDimitry Andric     return ELF::R_HEX_HL16;
1250b57cec5SDimitry Andric   case fixup_Hexagon_B13_PCREL:
1260b57cec5SDimitry Andric     return ELF::R_HEX_B13_PCREL;
1270b57cec5SDimitry Andric   case fixup_Hexagon_B9_PCREL:
1280b57cec5SDimitry Andric     return ELF::R_HEX_B9_PCREL;
1290b57cec5SDimitry Andric   case fixup_Hexagon_B32_PCREL_X:
1300b57cec5SDimitry Andric     return ELF::R_HEX_B32_PCREL_X;
1310b57cec5SDimitry Andric   case fixup_Hexagon_32_6_X:
1320b57cec5SDimitry Andric     return ELF::R_HEX_32_6_X;
1330b57cec5SDimitry Andric   case fixup_Hexagon_B22_PCREL_X:
1340b57cec5SDimitry Andric     return ELF::R_HEX_B22_PCREL_X;
1350b57cec5SDimitry Andric   case fixup_Hexagon_B15_PCREL_X:
1360b57cec5SDimitry Andric     return ELF::R_HEX_B15_PCREL_X;
1370b57cec5SDimitry Andric   case fixup_Hexagon_B13_PCREL_X:
1380b57cec5SDimitry Andric     return ELF::R_HEX_B13_PCREL_X;
1390b57cec5SDimitry Andric   case fixup_Hexagon_B9_PCREL_X:
1400b57cec5SDimitry Andric     return ELF::R_HEX_B9_PCREL_X;
1410b57cec5SDimitry Andric   case fixup_Hexagon_B7_PCREL_X:
1420b57cec5SDimitry Andric     return ELF::R_HEX_B7_PCREL_X;
1430b57cec5SDimitry Andric   case fixup_Hexagon_16_X:
1440b57cec5SDimitry Andric     return ELF::R_HEX_16_X;
1450b57cec5SDimitry Andric   case fixup_Hexagon_12_X:
1460b57cec5SDimitry Andric     return ELF::R_HEX_12_X;
1470b57cec5SDimitry Andric   case fixup_Hexagon_11_X:
1480b57cec5SDimitry Andric     return ELF::R_HEX_11_X;
1490b57cec5SDimitry Andric   case fixup_Hexagon_10_X:
1500b57cec5SDimitry Andric     return ELF::R_HEX_10_X;
1510b57cec5SDimitry Andric   case fixup_Hexagon_9_X:
1520b57cec5SDimitry Andric     return ELF::R_HEX_9_X;
1530b57cec5SDimitry Andric   case fixup_Hexagon_8_X:
1540b57cec5SDimitry Andric     return ELF::R_HEX_8_X;
1550b57cec5SDimitry Andric   case fixup_Hexagon_7_X:
1560b57cec5SDimitry Andric     return ELF::R_HEX_7_X;
1570b57cec5SDimitry Andric   case fixup_Hexagon_6_X:
1580b57cec5SDimitry Andric     return ELF::R_HEX_6_X;
1590b57cec5SDimitry Andric   case fixup_Hexagon_32_PCREL:
1600b57cec5SDimitry Andric     return ELF::R_HEX_32_PCREL;
1610b57cec5SDimitry Andric   case fixup_Hexagon_COPY:
1620b57cec5SDimitry Andric     return ELF::R_HEX_COPY;
1630b57cec5SDimitry Andric   case fixup_Hexagon_GLOB_DAT:
1640b57cec5SDimitry Andric     return ELF::R_HEX_GLOB_DAT;
1650b57cec5SDimitry Andric   case fixup_Hexagon_JMP_SLOT:
1660b57cec5SDimitry Andric     return ELF::R_HEX_JMP_SLOT;
1670b57cec5SDimitry Andric   case fixup_Hexagon_RELATIVE:
1680b57cec5SDimitry Andric     return ELF::R_HEX_RELATIVE;
1690b57cec5SDimitry Andric   case fixup_Hexagon_PLT_B22_PCREL:
1700b57cec5SDimitry Andric     return ELF::R_HEX_PLT_B22_PCREL;
1710b57cec5SDimitry Andric   case fixup_Hexagon_GOTREL_LO16:
1720b57cec5SDimitry Andric     return ELF::R_HEX_GOTREL_LO16;
1730b57cec5SDimitry Andric   case fixup_Hexagon_GOTREL_HI16:
1740b57cec5SDimitry Andric     return ELF::R_HEX_GOTREL_HI16;
1750b57cec5SDimitry Andric   case fixup_Hexagon_GOTREL_32:
1760b57cec5SDimitry Andric     return ELF::R_HEX_GOTREL_32;
1770b57cec5SDimitry Andric   case fixup_Hexagon_GOT_LO16:
1780b57cec5SDimitry Andric     return ELF::R_HEX_GOT_LO16;
1790b57cec5SDimitry Andric   case fixup_Hexagon_GOT_HI16:
1800b57cec5SDimitry Andric     return ELF::R_HEX_GOT_HI16;
1810b57cec5SDimitry Andric   case fixup_Hexagon_GOT_32:
1820b57cec5SDimitry Andric     return ELF::R_HEX_GOT_32;
1830b57cec5SDimitry Andric   case fixup_Hexagon_GOT_16:
1840b57cec5SDimitry Andric     return ELF::R_HEX_GOT_16;
1850b57cec5SDimitry Andric   case fixup_Hexagon_DTPMOD_32:
1860b57cec5SDimitry Andric     return ELF::R_HEX_DTPMOD_32;
1870b57cec5SDimitry Andric   case fixup_Hexagon_DTPREL_LO16:
1880b57cec5SDimitry Andric     return ELF::R_HEX_DTPREL_LO16;
1890b57cec5SDimitry Andric   case fixup_Hexagon_DTPREL_HI16:
1900b57cec5SDimitry Andric     return ELF::R_HEX_DTPREL_HI16;
1910b57cec5SDimitry Andric   case fixup_Hexagon_DTPREL_32:
1920b57cec5SDimitry Andric     return ELF::R_HEX_DTPREL_32;
1930b57cec5SDimitry Andric   case fixup_Hexagon_DTPREL_16:
1940b57cec5SDimitry Andric     return ELF::R_HEX_DTPREL_16;
1950b57cec5SDimitry Andric   case fixup_Hexagon_GD_PLT_B22_PCREL:
1960b57cec5SDimitry Andric     return ELF::R_HEX_GD_PLT_B22_PCREL;
1970b57cec5SDimitry Andric   case fixup_Hexagon_LD_PLT_B22_PCREL:
1980b57cec5SDimitry Andric     return ELF::R_HEX_LD_PLT_B22_PCREL;
1990b57cec5SDimitry Andric   case fixup_Hexagon_GD_GOT_LO16:
2000b57cec5SDimitry Andric     return ELF::R_HEX_GD_GOT_LO16;
2010b57cec5SDimitry Andric   case fixup_Hexagon_GD_GOT_HI16:
2020b57cec5SDimitry Andric     return ELF::R_HEX_GD_GOT_HI16;
2030b57cec5SDimitry Andric   case fixup_Hexagon_GD_GOT_32:
2040b57cec5SDimitry Andric     return ELF::R_HEX_GD_GOT_32;
2050b57cec5SDimitry Andric   case fixup_Hexagon_GD_GOT_16:
2060b57cec5SDimitry Andric     return ELF::R_HEX_GD_GOT_16;
2070b57cec5SDimitry Andric   case fixup_Hexagon_LD_GOT_LO16:
2080b57cec5SDimitry Andric     return ELF::R_HEX_LD_GOT_LO16;
2090b57cec5SDimitry Andric   case fixup_Hexagon_LD_GOT_HI16:
2100b57cec5SDimitry Andric     return ELF::R_HEX_LD_GOT_HI16;
2110b57cec5SDimitry Andric   case fixup_Hexagon_LD_GOT_32:
2120b57cec5SDimitry Andric     return ELF::R_HEX_LD_GOT_32;
2130b57cec5SDimitry Andric   case fixup_Hexagon_LD_GOT_16:
2140b57cec5SDimitry Andric     return ELF::R_HEX_LD_GOT_16;
2150b57cec5SDimitry Andric   case fixup_Hexagon_IE_LO16:
2160b57cec5SDimitry Andric     return ELF::R_HEX_IE_LO16;
2170b57cec5SDimitry Andric   case fixup_Hexagon_IE_HI16:
2180b57cec5SDimitry Andric     return ELF::R_HEX_IE_HI16;
2190b57cec5SDimitry Andric   case fixup_Hexagon_IE_32:
2200b57cec5SDimitry Andric     return ELF::R_HEX_IE_32;
2210b57cec5SDimitry Andric   case fixup_Hexagon_IE_GOT_LO16:
2220b57cec5SDimitry Andric     return ELF::R_HEX_IE_GOT_LO16;
2230b57cec5SDimitry Andric   case fixup_Hexagon_IE_GOT_HI16:
2240b57cec5SDimitry Andric     return ELF::R_HEX_IE_GOT_HI16;
2250b57cec5SDimitry Andric   case fixup_Hexagon_IE_GOT_32:
2260b57cec5SDimitry Andric     return ELF::R_HEX_IE_GOT_32;
2270b57cec5SDimitry Andric   case fixup_Hexagon_IE_GOT_16:
2280b57cec5SDimitry Andric     return ELF::R_HEX_IE_GOT_16;
2290b57cec5SDimitry Andric   case fixup_Hexagon_TPREL_LO16:
2300b57cec5SDimitry Andric     return ELF::R_HEX_TPREL_LO16;
2310b57cec5SDimitry Andric   case fixup_Hexagon_TPREL_HI16:
2320b57cec5SDimitry Andric     return ELF::R_HEX_TPREL_HI16;
2330b57cec5SDimitry Andric   case fixup_Hexagon_TPREL_32:
2340b57cec5SDimitry Andric     return ELF::R_HEX_TPREL_32;
2350b57cec5SDimitry Andric   case fixup_Hexagon_TPREL_16:
2360b57cec5SDimitry Andric     return ELF::R_HEX_TPREL_16;
2370b57cec5SDimitry Andric   case fixup_Hexagon_6_PCREL_X:
2380b57cec5SDimitry Andric     return ELF::R_HEX_6_PCREL_X;
2390b57cec5SDimitry Andric   case fixup_Hexagon_GOTREL_32_6_X:
2400b57cec5SDimitry Andric     return ELF::R_HEX_GOTREL_32_6_X;
2410b57cec5SDimitry Andric   case fixup_Hexagon_GOTREL_16_X:
2420b57cec5SDimitry Andric     return ELF::R_HEX_GOTREL_16_X;
2430b57cec5SDimitry Andric   case fixup_Hexagon_GOTREL_11_X:
2440b57cec5SDimitry Andric     return ELF::R_HEX_GOTREL_11_X;
2450b57cec5SDimitry Andric   case fixup_Hexagon_GOT_32_6_X:
2460b57cec5SDimitry Andric     return ELF::R_HEX_GOT_32_6_X;
2470b57cec5SDimitry Andric   case fixup_Hexagon_GOT_16_X:
2480b57cec5SDimitry Andric     return ELF::R_HEX_GOT_16_X;
2490b57cec5SDimitry Andric   case fixup_Hexagon_GOT_11_X:
2500b57cec5SDimitry Andric     return ELF::R_HEX_GOT_11_X;
2510b57cec5SDimitry Andric   case fixup_Hexagon_DTPREL_32_6_X:
2520b57cec5SDimitry Andric     return ELF::R_HEX_DTPREL_32_6_X;
2530b57cec5SDimitry Andric   case fixup_Hexagon_DTPREL_16_X:
2540b57cec5SDimitry Andric     return ELF::R_HEX_DTPREL_16_X;
2550b57cec5SDimitry Andric   case fixup_Hexagon_DTPREL_11_X:
2560b57cec5SDimitry Andric     return ELF::R_HEX_DTPREL_11_X;
2570b57cec5SDimitry Andric   case fixup_Hexagon_GD_GOT_32_6_X:
2580b57cec5SDimitry Andric     return ELF::R_HEX_GD_GOT_32_6_X;
2590b57cec5SDimitry Andric   case fixup_Hexagon_GD_GOT_16_X:
2600b57cec5SDimitry Andric     return ELF::R_HEX_GD_GOT_16_X;
2610b57cec5SDimitry Andric   case fixup_Hexagon_GD_GOT_11_X:
2620b57cec5SDimitry Andric     return ELF::R_HEX_GD_GOT_11_X;
2630b57cec5SDimitry Andric   case fixup_Hexagon_LD_GOT_32_6_X:
2640b57cec5SDimitry Andric     return ELF::R_HEX_LD_GOT_32_6_X;
2650b57cec5SDimitry Andric   case fixup_Hexagon_LD_GOT_16_X:
2660b57cec5SDimitry Andric     return ELF::R_HEX_LD_GOT_16_X;
2670b57cec5SDimitry Andric   case fixup_Hexagon_LD_GOT_11_X:
2680b57cec5SDimitry Andric     return ELF::R_HEX_LD_GOT_11_X;
2690b57cec5SDimitry Andric   case fixup_Hexagon_IE_32_6_X:
2700b57cec5SDimitry Andric     return ELF::R_HEX_IE_32_6_X;
2710b57cec5SDimitry Andric   case fixup_Hexagon_IE_16_X:
2720b57cec5SDimitry Andric     return ELF::R_HEX_IE_16_X;
2730b57cec5SDimitry Andric   case fixup_Hexagon_IE_GOT_32_6_X:
2740b57cec5SDimitry Andric     return ELF::R_HEX_IE_GOT_32_6_X;
2750b57cec5SDimitry Andric   case fixup_Hexagon_IE_GOT_16_X:
2760b57cec5SDimitry Andric     return ELF::R_HEX_IE_GOT_16_X;
2770b57cec5SDimitry Andric   case fixup_Hexagon_IE_GOT_11_X:
2780b57cec5SDimitry Andric     return ELF::R_HEX_IE_GOT_11_X;
2790b57cec5SDimitry Andric   case fixup_Hexagon_TPREL_32_6_X:
2800b57cec5SDimitry Andric     return ELF::R_HEX_TPREL_32_6_X;
2810b57cec5SDimitry Andric   case fixup_Hexagon_TPREL_16_X:
2820b57cec5SDimitry Andric     return ELF::R_HEX_TPREL_16_X;
2830b57cec5SDimitry Andric   case fixup_Hexagon_TPREL_11_X:
2840b57cec5SDimitry Andric     return ELF::R_HEX_TPREL_11_X;
2850b57cec5SDimitry Andric   case fixup_Hexagon_23_REG:
2860b57cec5SDimitry Andric     return ELF::R_HEX_23_REG;
2870b57cec5SDimitry Andric   case fixup_Hexagon_27_REG:
2880b57cec5SDimitry Andric     return ELF::R_HEX_27_REG;
2890b57cec5SDimitry Andric   case fixup_Hexagon_GD_PLT_B22_PCREL_X:
2900b57cec5SDimitry Andric     return ELF::R_HEX_GD_PLT_B22_PCREL_X;
2910b57cec5SDimitry Andric   case fixup_Hexagon_GD_PLT_B32_PCREL_X:
2920b57cec5SDimitry Andric     return ELF::R_HEX_GD_PLT_B32_PCREL_X;
2930b57cec5SDimitry Andric   case fixup_Hexagon_LD_PLT_B22_PCREL_X:
2940b57cec5SDimitry Andric     return ELF::R_HEX_LD_PLT_B22_PCREL_X;
2950b57cec5SDimitry Andric   case fixup_Hexagon_LD_PLT_B32_PCREL_X:
2960b57cec5SDimitry Andric     return ELF::R_HEX_LD_PLT_B32_PCREL_X;
2970b57cec5SDimitry Andric   }
2980b57cec5SDimitry Andric }
2990b57cec5SDimitry Andric 
3000b57cec5SDimitry Andric std::unique_ptr<MCObjectTargetWriter>
createHexagonELFObjectWriter(uint8_t OSABI,StringRef CPU)3010b57cec5SDimitry Andric llvm::createHexagonELFObjectWriter(uint8_t OSABI, StringRef CPU) {
3028bcb0991SDimitry Andric   return std::make_unique<HexagonELFObjectWriter>(OSABI, CPU);
3030b57cec5SDimitry Andric }
304