1*0b57cec5SDimitry Andric //===-- MipsFixupKinds.h - Mips Specific Fixup Entries ----------*- C++ -*-===// 2*0b57cec5SDimitry Andric // 3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0b57cec5SDimitry Andric // 7*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 8*0b57cec5SDimitry Andric 9*0b57cec5SDimitry Andric #ifndef LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSFIXUPKINDS_H 10*0b57cec5SDimitry Andric #define LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSFIXUPKINDS_H 11*0b57cec5SDimitry Andric 12*0b57cec5SDimitry Andric #include "llvm/MC/MCFixup.h" 13*0b57cec5SDimitry Andric 14*0b57cec5SDimitry Andric namespace llvm { 15*0b57cec5SDimitry Andric namespace Mips { 16*0b57cec5SDimitry Andric // Although most of the current fixup types reflect a unique relocation 17*0b57cec5SDimitry Andric // one can have multiple fixup types for a given relocation and thus need 18*0b57cec5SDimitry Andric // to be uniquely named. 19*0b57cec5SDimitry Andric // 20*0b57cec5SDimitry Andric // This table *must* be in the same order of 21*0b57cec5SDimitry Andric // MCFixupKindInfo Infos[Mips::NumTargetFixupKinds] 22*0b57cec5SDimitry Andric // in MipsAsmBackend.cpp. 23*0b57cec5SDimitry Andric // 24*0b57cec5SDimitry Andric enum Fixups { 25*0b57cec5SDimitry Andric // Branch fixups resulting in R_MIPS_16. 26*0b57cec5SDimitry Andric fixup_Mips_16 = FirstTargetFixupKind, 27*0b57cec5SDimitry Andric 28*0b57cec5SDimitry Andric // Pure 32 bit data fixup resulting in - R_MIPS_32. 29*0b57cec5SDimitry Andric fixup_Mips_32, 30*0b57cec5SDimitry Andric 31*0b57cec5SDimitry Andric // Full 32 bit data relative data fixup resulting in - R_MIPS_REL32. 32*0b57cec5SDimitry Andric fixup_Mips_REL32, 33*0b57cec5SDimitry Andric 34*0b57cec5SDimitry Andric // Jump 26 bit fixup resulting in - R_MIPS_26. 35*0b57cec5SDimitry Andric fixup_Mips_26, 36*0b57cec5SDimitry Andric 37*0b57cec5SDimitry Andric // Pure upper 16 bit fixup resulting in - R_MIPS_HI16. 38*0b57cec5SDimitry Andric fixup_Mips_HI16, 39*0b57cec5SDimitry Andric 40*0b57cec5SDimitry Andric // Pure lower 16 bit fixup resulting in - R_MIPS_LO16. 41*0b57cec5SDimitry Andric fixup_Mips_LO16, 42*0b57cec5SDimitry Andric 43*0b57cec5SDimitry Andric // 16 bit fixup for GP offest resulting in - R_MIPS_GPREL16. 44*0b57cec5SDimitry Andric fixup_Mips_GPREL16, 45*0b57cec5SDimitry Andric 46*0b57cec5SDimitry Andric // 16 bit literal fixup resulting in - R_MIPS_LITERAL. 47*0b57cec5SDimitry Andric fixup_Mips_LITERAL, 48*0b57cec5SDimitry Andric 49*0b57cec5SDimitry Andric // Symbol fixup resulting in - R_MIPS_GOT16. 50*0b57cec5SDimitry Andric fixup_Mips_GOT, 51*0b57cec5SDimitry Andric 52*0b57cec5SDimitry Andric // PC relative branch fixup resulting in - R_MIPS_PC16. 53*0b57cec5SDimitry Andric fixup_Mips_PC16, 54*0b57cec5SDimitry Andric 55*0b57cec5SDimitry Andric // resulting in - R_MIPS_CALL16. 56*0b57cec5SDimitry Andric fixup_Mips_CALL16, 57*0b57cec5SDimitry Andric 58*0b57cec5SDimitry Andric // resulting in - R_MIPS_GPREL32. 59*0b57cec5SDimitry Andric fixup_Mips_GPREL32, 60*0b57cec5SDimitry Andric 61*0b57cec5SDimitry Andric // resulting in - R_MIPS_SHIFT5. 62*0b57cec5SDimitry Andric fixup_Mips_SHIFT5, 63*0b57cec5SDimitry Andric 64*0b57cec5SDimitry Andric // resulting in - R_MIPS_SHIFT6. 65*0b57cec5SDimitry Andric fixup_Mips_SHIFT6, 66*0b57cec5SDimitry Andric 67*0b57cec5SDimitry Andric // Pure 64 bit data fixup resulting in - R_MIPS_64. 68*0b57cec5SDimitry Andric fixup_Mips_64, 69*0b57cec5SDimitry Andric 70*0b57cec5SDimitry Andric // resulting in - R_MIPS_TLS_GD. 71*0b57cec5SDimitry Andric fixup_Mips_TLSGD, 72*0b57cec5SDimitry Andric 73*0b57cec5SDimitry Andric // resulting in - R_MIPS_TLS_GOTTPREL. 74*0b57cec5SDimitry Andric fixup_Mips_GOTTPREL, 75*0b57cec5SDimitry Andric 76*0b57cec5SDimitry Andric // resulting in - R_MIPS_TLS_TPREL_HI16. 77*0b57cec5SDimitry Andric fixup_Mips_TPREL_HI, 78*0b57cec5SDimitry Andric 79*0b57cec5SDimitry Andric // resulting in - R_MIPS_TLS_TPREL_LO16. 80*0b57cec5SDimitry Andric fixup_Mips_TPREL_LO, 81*0b57cec5SDimitry Andric 82*0b57cec5SDimitry Andric // resulting in - R_MIPS_TLS_LDM. 83*0b57cec5SDimitry Andric fixup_Mips_TLSLDM, 84*0b57cec5SDimitry Andric 85*0b57cec5SDimitry Andric // resulting in - R_MIPS_TLS_DTPREL_HI16. 86*0b57cec5SDimitry Andric fixup_Mips_DTPREL_HI, 87*0b57cec5SDimitry Andric 88*0b57cec5SDimitry Andric // resulting in - R_MIPS_TLS_DTPREL_LO16. 89*0b57cec5SDimitry Andric fixup_Mips_DTPREL_LO, 90*0b57cec5SDimitry Andric 91*0b57cec5SDimitry Andric // PC relative branch fixup resulting in - R_MIPS_PC16 92*0b57cec5SDimitry Andric fixup_Mips_Branch_PCRel, 93*0b57cec5SDimitry Andric 94*0b57cec5SDimitry Andric // resulting in - R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16 95*0b57cec5SDimitry Andric // R_MICROMIPS_GPREL16/R_MICROMIPS_SUB/R_MICROMIPS_HI16 96*0b57cec5SDimitry Andric fixup_Mips_GPOFF_HI, 97*0b57cec5SDimitry Andric fixup_MICROMIPS_GPOFF_HI, 98*0b57cec5SDimitry Andric 99*0b57cec5SDimitry Andric // resulting in - R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16 100*0b57cec5SDimitry Andric // R_MICROMIPS_GPREL16/R_MICROMIPS_SUB/R_MICROMIPS_LO16 101*0b57cec5SDimitry Andric fixup_Mips_GPOFF_LO, 102*0b57cec5SDimitry Andric fixup_MICROMIPS_GPOFF_LO, 103*0b57cec5SDimitry Andric 104*0b57cec5SDimitry Andric // resulting in - R_MIPS_PAGE 105*0b57cec5SDimitry Andric fixup_Mips_GOT_PAGE, 106*0b57cec5SDimitry Andric 107*0b57cec5SDimitry Andric // resulting in - R_MIPS_GOT_OFST 108*0b57cec5SDimitry Andric fixup_Mips_GOT_OFST, 109*0b57cec5SDimitry Andric 110*0b57cec5SDimitry Andric // resulting in - R_MIPS_GOT_DISP 111*0b57cec5SDimitry Andric fixup_Mips_GOT_DISP, 112*0b57cec5SDimitry Andric 113*0b57cec5SDimitry Andric // resulting in - R_MIPS_HIGHER/R_MICROMIPS_HIGHER 114*0b57cec5SDimitry Andric fixup_Mips_HIGHER, 115*0b57cec5SDimitry Andric fixup_MICROMIPS_HIGHER, 116*0b57cec5SDimitry Andric 117*0b57cec5SDimitry Andric // resulting in - R_MIPS_HIGHEST/R_MICROMIPS_HIGHEST 118*0b57cec5SDimitry Andric fixup_Mips_HIGHEST, 119*0b57cec5SDimitry Andric fixup_MICROMIPS_HIGHEST, 120*0b57cec5SDimitry Andric 121*0b57cec5SDimitry Andric // resulting in - R_MIPS_GOT_HI16 122*0b57cec5SDimitry Andric fixup_Mips_GOT_HI16, 123*0b57cec5SDimitry Andric 124*0b57cec5SDimitry Andric // resulting in - R_MIPS_GOT_LO16 125*0b57cec5SDimitry Andric fixup_Mips_GOT_LO16, 126*0b57cec5SDimitry Andric 127*0b57cec5SDimitry Andric // resulting in - R_MIPS_CALL_HI16 128*0b57cec5SDimitry Andric fixup_Mips_CALL_HI16, 129*0b57cec5SDimitry Andric 130*0b57cec5SDimitry Andric // resulting in - R_MIPS_CALL_LO16 131*0b57cec5SDimitry Andric fixup_Mips_CALL_LO16, 132*0b57cec5SDimitry Andric 133*0b57cec5SDimitry Andric // resulting in - R_MIPS_PC18_S3 134*0b57cec5SDimitry Andric fixup_MIPS_PC18_S3, 135*0b57cec5SDimitry Andric 136*0b57cec5SDimitry Andric // resulting in - R_MIPS_PC19_S2 137*0b57cec5SDimitry Andric fixup_MIPS_PC19_S2, 138*0b57cec5SDimitry Andric 139*0b57cec5SDimitry Andric // resulting in - R_MIPS_PC21_S2 140*0b57cec5SDimitry Andric fixup_MIPS_PC21_S2, 141*0b57cec5SDimitry Andric 142*0b57cec5SDimitry Andric // resulting in - R_MIPS_PC26_S2 143*0b57cec5SDimitry Andric fixup_MIPS_PC26_S2, 144*0b57cec5SDimitry Andric 145*0b57cec5SDimitry Andric // resulting in - R_MIPS_PCHI16 146*0b57cec5SDimitry Andric fixup_MIPS_PCHI16, 147*0b57cec5SDimitry Andric 148*0b57cec5SDimitry Andric // resulting in - R_MIPS_PCLO16 149*0b57cec5SDimitry Andric fixup_MIPS_PCLO16, 150*0b57cec5SDimitry Andric 151*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_26_S1 152*0b57cec5SDimitry Andric fixup_MICROMIPS_26_S1, 153*0b57cec5SDimitry Andric 154*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_HI16 155*0b57cec5SDimitry Andric fixup_MICROMIPS_HI16, 156*0b57cec5SDimitry Andric 157*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_LO16 158*0b57cec5SDimitry Andric fixup_MICROMIPS_LO16, 159*0b57cec5SDimitry Andric 160*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_GOT16 161*0b57cec5SDimitry Andric fixup_MICROMIPS_GOT16, 162*0b57cec5SDimitry Andric 163*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_PC7_S1 164*0b57cec5SDimitry Andric fixup_MICROMIPS_PC7_S1, 165*0b57cec5SDimitry Andric 166*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_PC10_S1 167*0b57cec5SDimitry Andric fixup_MICROMIPS_PC10_S1, 168*0b57cec5SDimitry Andric 169*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_PC16_S1 170*0b57cec5SDimitry Andric fixup_MICROMIPS_PC16_S1, 171*0b57cec5SDimitry Andric 172*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_PC26_S1 173*0b57cec5SDimitry Andric fixup_MICROMIPS_PC26_S1, 174*0b57cec5SDimitry Andric 175*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_PC19_S2 176*0b57cec5SDimitry Andric fixup_MICROMIPS_PC19_S2, 177*0b57cec5SDimitry Andric 178*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_PC18_S3 179*0b57cec5SDimitry Andric fixup_MICROMIPS_PC18_S3, 180*0b57cec5SDimitry Andric 181*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_PC21_S1 182*0b57cec5SDimitry Andric fixup_MICROMIPS_PC21_S1, 183*0b57cec5SDimitry Andric 184*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_CALL16 185*0b57cec5SDimitry Andric fixup_MICROMIPS_CALL16, 186*0b57cec5SDimitry Andric 187*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_GOT_DISP 188*0b57cec5SDimitry Andric fixup_MICROMIPS_GOT_DISP, 189*0b57cec5SDimitry Andric 190*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_GOT_PAGE 191*0b57cec5SDimitry Andric fixup_MICROMIPS_GOT_PAGE, 192*0b57cec5SDimitry Andric 193*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_GOT_OFST 194*0b57cec5SDimitry Andric fixup_MICROMIPS_GOT_OFST, 195*0b57cec5SDimitry Andric 196*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_TLS_GD 197*0b57cec5SDimitry Andric fixup_MICROMIPS_TLS_GD, 198*0b57cec5SDimitry Andric 199*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_TLS_LDM 200*0b57cec5SDimitry Andric fixup_MICROMIPS_TLS_LDM, 201*0b57cec5SDimitry Andric 202*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_TLS_DTPREL_HI16 203*0b57cec5SDimitry Andric fixup_MICROMIPS_TLS_DTPREL_HI16, 204*0b57cec5SDimitry Andric 205*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_TLS_DTPREL_LO16 206*0b57cec5SDimitry Andric fixup_MICROMIPS_TLS_DTPREL_LO16, 207*0b57cec5SDimitry Andric 208*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_TLS_GOTTPREL. 209*0b57cec5SDimitry Andric fixup_MICROMIPS_GOTTPREL, 210*0b57cec5SDimitry Andric 211*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_TLS_TPREL_HI16 212*0b57cec5SDimitry Andric fixup_MICROMIPS_TLS_TPREL_HI16, 213*0b57cec5SDimitry Andric 214*0b57cec5SDimitry Andric // resulting in - R_MICROMIPS_TLS_TPREL_LO16 215*0b57cec5SDimitry Andric fixup_MICROMIPS_TLS_TPREL_LO16, 216*0b57cec5SDimitry Andric 217*0b57cec5SDimitry Andric // resulting in - R_MIPS_SUB/R_MICROMIPS_SUB 218*0b57cec5SDimitry Andric fixup_Mips_SUB, 219*0b57cec5SDimitry Andric fixup_MICROMIPS_SUB, 220*0b57cec5SDimitry Andric 221*0b57cec5SDimitry Andric // resulting in - R_MIPS_JALR/R_MICROMIPS_JALR 222*0b57cec5SDimitry Andric fixup_Mips_JALR, 223*0b57cec5SDimitry Andric fixup_MICROMIPS_JALR, 224*0b57cec5SDimitry Andric 225*0b57cec5SDimitry Andric // Marker 226*0b57cec5SDimitry Andric LastTargetFixupKind, 227*0b57cec5SDimitry Andric NumTargetFixupKinds = LastTargetFixupKind - FirstTargetFixupKind 228*0b57cec5SDimitry Andric }; 229*0b57cec5SDimitry Andric } // namespace Mips 230*0b57cec5SDimitry Andric } // namespace llvm 231*0b57cec5SDimitry Andric 232*0b57cec5SDimitry Andric 233*0b57cec5SDimitry Andric #endif 234