Home | History | Annotate | Download | only in Mips
      1 //===- MipsRelocationFunction.h -------------------------------------------===//
      2 //
      3 //                     The MCLinker Project
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #define DECL_MIPS_APPLY_RELOC_FUNC(Name) \
     11 static MipsRelocator::Result Name(MipsRelocationInfo& pReloc, \
     12                                   MipsRelocator& pParent);
     13 
     14 #define DECL_MIPS_APPLY_RELOC_FUNCS \
     15 DECL_MIPS_APPLY_RELOC_FUNC(none) \
     16 DECL_MIPS_APPLY_RELOC_FUNC(abs32) \
     17 DECL_MIPS_APPLY_RELOC_FUNC(rel26) \
     18 DECL_MIPS_APPLY_RELOC_FUNC(hi16) \
     19 DECL_MIPS_APPLY_RELOC_FUNC(lo16) \
     20 DECL_MIPS_APPLY_RELOC_FUNC(gprel16) \
     21 DECL_MIPS_APPLY_RELOC_FUNC(got16) \
     22 DECL_MIPS_APPLY_RELOC_FUNC(call16) \
     23 DECL_MIPS_APPLY_RELOC_FUNC(gprel32) \
     24 DECL_MIPS_APPLY_RELOC_FUNC(abs64) \
     25 DECL_MIPS_APPLY_RELOC_FUNC(gotdisp) \
     26 DECL_MIPS_APPLY_RELOC_FUNC(gotoff) \
     27 DECL_MIPS_APPLY_RELOC_FUNC(gothi16) \
     28 DECL_MIPS_APPLY_RELOC_FUNC(gotlo16) \
     29 DECL_MIPS_APPLY_RELOC_FUNC(sub) \
     30 DECL_MIPS_APPLY_RELOC_FUNC(jalr) \
     31 DECL_MIPS_APPLY_RELOC_FUNC(la25lui) \
     32 DECL_MIPS_APPLY_RELOC_FUNC(la25j) \
     33 DECL_MIPS_APPLY_RELOC_FUNC(la25add) \
     34 DECL_MIPS_APPLY_RELOC_FUNC(pc32) \
     35 DECL_MIPS_APPLY_RELOC_FUNC(unsupport)
     36 
     37 #define DECL_MIPS_APPLY_RELOC_FUNC_PTRS \
     38   { &none,         0, "R_MIPS_NONE",                  0}, \
     39   { &unsupport,    1, "R_MIPS_16",                   16}, \
     40   { &abs32,        2, "R_MIPS_32",                   32}, \
     41   { &unsupport,    3, "R_MIPS_REL32",                32}, \
     42   { &rel26,        4, "R_MIPS_26",                   26}, \
     43   { &hi16,         5, "R_MIPS_HI16",                 16}, \
     44   { &lo16,         6, "R_MIPS_LO16",                 16}, \
     45   { &gprel16,      7, "R_MIPS_GPREL16",              16}, \
     46   { &unsupport,    8, "R_MIPS_LITERAL",              16}, \
     47   { &got16,        9, "R_MIPS_GOT16",                16}, \
     48   { &unsupport,   10, "R_MIPS_PC16",                 16}, \
     49   { &call16,      11, "R_MIPS_CALL16",               16}, \
     50   { &gprel32,     12, "R_MIPS_GPREL32",              32}, \
     51   { &none,        13, "R_MIPS_UNUSED1",               0}, \
     52   { &none,        14, "R_MIPS_UNUSED2",               0}, \
     53   { &none,        15, "R_MIPS_UNUSED3",               0}, \
     54   { &unsupport,   16, "R_MIPS_SHIFT5",               32}, \
     55   { &unsupport,   17, "R_MIPS_SHIFT6",               32}, \
     56   { &abs64,       18, "R_MIPS_64",                   64}, \
     57   { &gotdisp,     19, "R_MIPS_GOT_DISP",             16}, \
     58   { &gotdisp,     20, "R_MIPS_GOT_PAGE",             16}, \
     59   { &gotoff,      21, "R_MIPS_GOT_OFST",             16}, \
     60   { &gothi16,     22, "R_MIPS_GOT_HI16",             16}, \
     61   { &gotlo16,     23, "R_MIPS_GOT_LO16",             16}, \
     62   { &sub,         24, "R_MIPS_SUB",                  64}, \
     63   { &unsupport,   25, "R_MIPS_INSERT_A",              0}, \
     64   { &unsupport,   26, "R_MIPS_INSERT_B",              0}, \
     65   { &unsupport,   27, "R_MIPS_DELETE",                0}, \
     66   { &unsupport,   28, "R_MIPS_HIGHER",               16}, \
     67   { &unsupport,   29, "R_MIPS_HIGHEST",              16}, \
     68   { &gothi16,     30, "R_MIPS_CALL_HI16",            16}, \
     69   { &gotlo16,     31, "R_MIPS_CALL_LO16",            16}, \
     70   { &unsupport,   32, "R_MIPS_SCN_DISP",             32}, \
     71   { &unsupport,   33, "R_MIPS_REL16",                 0}, \
     72   { &unsupport,   34, "R_MIPS_ADD_IMMEDIATE",         0}, \
     73   { &unsupport,   35, "R_MIPS_PJUMP",                 0}, \
     74   { &unsupport,   36, "R_MIPS_RELGOT",                0}, \
     75   { &jalr,        37, "R_MIPS_JALR",                 32}, \
     76   { &unsupport,   38, "R_MIPS_TLS_DTPMOD32",         32}, \
     77   { &unsupport,   39, "R_MIPS_TLS_DTPREL32",         32}, \
     78   { &unsupport,   40, "R_MIPS_TLS_DTPMOD64",          0}, \
     79   { &unsupport,   41, "R_MIPS_TLS_DTPREL64",          0}, \
     80   { &unsupport,   42, "R_MIPS_TLS_GD",               16}, \
     81   { &unsupport,   43, "R_MIPS_TLS_LDM",              16}, \
     82   { &unsupport,   44, "R_MIPS_TLS_DTPREL_HI16",      16}, \
     83   { &unsupport,   45, "R_MIPS_TLS_DTPREL_LO16",      16}, \
     84   { &unsupport,   46, "R_MIPS_TLS_GOTTPREL",         16}, \
     85   { &unsupport,   47, "R_MIPS_TLS_TPREL32",          32}, \
     86   { &unsupport,   48, "R_MIPS_TLS_TPREL64",           0}, \
     87   { &unsupport,   49, "R_MIPS_TLS_TPREL_HI16",       16}, \
     88   { &unsupport,   50, "R_MIPS_TLS_TPREL_LO16",       16}, \
     89   { &unsupport,   51, "R_MIPS_GLOB_DAT",              0}, \
     90   { &unsupport,   52, "",                             0}, \
     91   { &unsupport,   53, "",                             0}, \
     92   { &unsupport,   54, "",                             0}, \
     93   { &unsupport,   55, "",                             0}, \
     94   { &unsupport,   56, "",                             0}, \
     95   { &unsupport,   57, "",                             0}, \
     96   { &unsupport,   58, "",                             0}, \
     97   { &unsupport,   59, "",                             0}, \
     98   { &unsupport,   60, "",                             0}, \
     99   { &unsupport,   61, "",                             0}, \
    100   { &unsupport,   62, "",                             0}, \
    101   { &unsupport,   63, "",                             0}, \
    102   { &unsupport,   64, "",                             0}, \
    103   { &unsupport,   65, "",                             0}, \
    104   { &unsupport,   66, "",                             0}, \
    105   { &unsupport,   67, "",                             0}, \
    106   { &unsupport,   68, "",                             0}, \
    107   { &unsupport,   69, "",                             0}, \
    108   { &unsupport,   70, "",                             0}, \
    109   { &unsupport,   71, "",                             0}, \
    110   { &unsupport,   72, "",                             0}, \
    111   { &unsupport,   73, "",                             0}, \
    112   { &unsupport,   74, "",                             0}, \
    113   { &unsupport,   75, "",                             0}, \
    114   { &unsupport,   76, "",                             0}, \
    115   { &unsupport,   77, "",                             0}, \
    116   { &unsupport,   78, "",                             0}, \
    117   { &unsupport,   79, "",                             0}, \
    118   { &unsupport,   80, "",                             0}, \
    119   { &unsupport,   81, "",                             0}, \
    120   { &unsupport,   82, "",                             0}, \
    121   { &unsupport,   83, "",                             0}, \
    122   { &unsupport,   84, "",                             0}, \
    123   { &unsupport,   85, "",                             0}, \
    124   { &unsupport,   86, "",                             0}, \
    125   { &unsupport,   87, "",                             0}, \
    126   { &unsupport,   88, "",                             0}, \
    127   { &unsupport,   89, "",                             0}, \
    128   { &unsupport,   90, "",                             0}, \
    129   { &unsupport,   91, "",                             0}, \
    130   { &unsupport,   92, "",                             0}, \
    131   { &unsupport,   93, "",                             0}, \
    132   { &unsupport,   94, "",                             0}, \
    133   { &unsupport,   95, "",                             0}, \
    134   { &unsupport,   96, "",                             0}, \
    135   { &unsupport,   97, "",                             0}, \
    136   { &unsupport,   98, "",                             0}, \
    137   { &unsupport,   99, "",                             0}, \
    138   { &unsupport,  100, "R_MIPS16_26",                  0}, \
    139   { &unsupport,  101, "R_MIPS16_GPREL",               0}, \
    140   { &unsupport,  102, "R_MIPS16_GOT16",               0}, \
    141   { &unsupport,  103, "R_MIPS16_CALL16",              0}, \
    142   { &unsupport,  104, "R_MIPS16_HI16",                0}, \
    143   { &unsupport,  105, "R_MIPS16_LO16",                0}, \
    144   { &unsupport,  106, "R_MIPS16_TLS_GD",              0}, \
    145   { &unsupport,  107, "R_MIPS16_TLS_LDM",             0}, \
    146   { &unsupport,  108, "R_MIPS16_TLS_DTPREL_HI16",     0}, \
    147   { &unsupport,  109, "R_MIPS16_TLS_DTPREL_LO16",     0}, \
    148   { &unsupport,  110, "R_MIPS16_TLS_GOTTPREL",        0}, \
    149   { &unsupport,  111, "R_MIPS16_TLS_TPREL_HI16",      0}, \
    150   { &unsupport,  112, "R_MIPS16_TLS_TPREL_LO16",      0}, \
    151   { &unsupport,  113, "",                             0}, \
    152   { &unsupport,  114, "",                             0}, \
    153   { &unsupport,  115, "",                             0}, \
    154   { &unsupport,  116, "",                             0}, \
    155   { &unsupport,  117, "",                             0}, \
    156   { &unsupport,  118, "",                             0}, \
    157   { &unsupport,  119, "",                             0}, \
    158   { &unsupport,  120, "",                             0}, \
    159   { &unsupport,  121, "",                             0}, \
    160   { &unsupport,  122, "",                             0}, \
    161   { &unsupport,  123, "",                             0}, \
    162   { &unsupport,  124, "",                             0}, \
    163   { &unsupport,  125, "",                             0}, \
    164   { &unsupport,  126, "R_MIPS_COPY",                  0}, \
    165   { &unsupport,  127, "R_MIPS_JUMP_SLOT",             0}, \
    166   { &unsupport,  128, "",                             0}, \
    167   { &unsupport,  129, "",                             0}, \
    168   { &unsupport,  130, "",                             0}, \
    169   { &unsupport,  131, "",                             0}, \
    170   { &unsupport,  132, "",                             0}, \
    171   { &unsupport,  133, "R_MICROMIPS_26_S1",            0}, \
    172   { &unsupport,  134, "R_MICROMIPS_HI16",             0}, \
    173   { &unsupport,  135, "R_MICROMIPS_LO16",             0}, \
    174   { &unsupport,  136, "R_MICROMIPS_GPREL16",          0}, \
    175   { &unsupport,  137, "R_MICROMIPS_LITERAL",          0}, \
    176   { &unsupport,  138, "R_MICROMIPS_GOT16",            0}, \
    177   { &unsupport,  139, "R_MICROMIPS_PC7_S1",           0}, \
    178   { &unsupport,  140, "R_MICROMIPS_PC10_S1",          0}, \
    179   { &unsupport,  141, "R_MICROMIPS_PC16_S1",          0}, \
    180   { &unsupport,  142, "R_MICROMIPS_CALL16",           0}, \
    181   { &unsupport,  143, "R_MICROMIPS_GOT_DISP",         0}, \
    182   { &unsupport,  144, "R_MICROMIPS_GOT_PAGE",         0}, \
    183   { &unsupport,  145, "R_MICROMIPS_GOT_OFST",         0}, \
    184   { &unsupport,  146, "R_MICROMIPS_GOT_HI16",         0}, \
    185   { &unsupport,  147, "R_MICROMIPS_GOT_LO16",         0}, \
    186   { &unsupport,  148, "R_MICROMIPS_SUB",              0}, \
    187   { &unsupport,  149, "R_MICROMIPS_HIGHER",           0}, \
    188   { &unsupport,  150, "R_MICROMIPS_HIGHEST",          0}, \
    189   { &unsupport,  151, "R_MICROMIPS_CALL_HI16",        0}, \
    190   { &unsupport,  152, "R_MICROMIPS_CALL_LO16",        0}, \
    191   { &unsupport,  153, "R_MICROMIPS_SCN_DISP",         0}, \
    192   { &unsupport,  154, "R_MICROMIPS_JALR",             0}, \
    193   { &unsupport,  155, "R_MICROMIPS_HI0_LO16",         0}, \
    194   { &unsupport,  156, "",                             0}, \
    195   { &unsupport,  157, "",                             0}, \
    196   { &unsupport,  158, "",                             0}, \
    197   { &unsupport,  159, "",                             0}, \
    198   { &unsupport,  160, "",                             0}, \
    199   { &unsupport,  161, "",                             0}, \
    200   { &unsupport,  162, "R_MICROMIPS_TLS_GD",           0}, \
    201   { &unsupport,  163, "R_MICROMIPS_TLS_LDM",          0}, \
    202   { &unsupport,  164, "R_MICROMIPS_TLS_DTPREL_HI16",  0}, \
    203   { &unsupport,  165, "R_MICROMIPS_TLS_DTPREL_LO16",  0}, \
    204   { &unsupport,  166, "R_MICROMIPS_TLS_GOTTPREL",     0}, \
    205   { &unsupport,  167, "",                             0}, \
    206   { &unsupport,  168, "",                             0}, \
    207   { &unsupport,  169, "R_MICROMIPS_TLS_TPREL_HI16",   0}, \
    208   { &unsupport,  170, "R_MICROMIPS_TLS_TPREL_LO16",   0}, \
    209   { &unsupport,  171, "",                             0}, \
    210   { &unsupport,  172, "R_MICROMIPS_GPREL7_S2",        0}, \
    211   { &unsupport,  173, "R_MICROMIPS_PC23_S2",          0}, \
    212   { &unsupport,  174, "",                             0}, \
    213   { &unsupport,  175, "",                             0}, \
    214   { &unsupport,  176, "",                             0}, \
    215   { &unsupport,  177, "",                             0}, \
    216   { &unsupport,  178, "",                             0}, \
    217   { &unsupport,  179, "",                             0}, \
    218   { &unsupport,  180, "",                             0}, \
    219   { &unsupport,  181, "",                             0}, \
    220   { &unsupport,  182, "",                             0}, \
    221   { &unsupport,  183, "",                             0}, \
    222   { &unsupport,  184, "",                             0}, \
    223   { &unsupport,  185, "",                             0}, \
    224   { &unsupport,  186, "",                             0}, \
    225   { &unsupport,  187, "",                             0}, \
    226   { &unsupport,  188, "",                             0}, \
    227   { &unsupport,  189, "",                             0}, \
    228   { &unsupport,  190, "",                             0}, \
    229   { &unsupport,  191, "",                             0}, \
    230   { &unsupport,  192, "",                             0}, \
    231   { &unsupport,  193, "",                             0}, \
    232   { &unsupport,  194, "",                             0}, \
    233   { &unsupport,  195, "",                             0}, \
    234   { &unsupport,  196, "",                             0}, \
    235   { &unsupport,  197, "",                             0}, \
    236   { &unsupport,  198, "",                             0}, \
    237   { &unsupport,  199, "",                             0}, \
    238   { &la25lui,    200, "R_MIPS_LA25_LUI",             16}, \
    239   { &la25j,      201, "R_MIPS_LA25_J",               26}, \
    240   { &la25add,    202, "R_MIPS_LA25_ADD",             16}, \
    241   { &unsupport,  203, "",                             0}, \
    242   { &unsupport,  204, "",                             0}, \
    243   { &unsupport,  205, "",                             0}, \
    244   { &unsupport,  206, "",                             0}, \
    245   { &unsupport,  207, "",                             0}, \
    246   { &unsupport,  208, "",                             0}, \
    247   { &unsupport,  209, "",                             0}, \
    248   { &unsupport,  210, "",                             0}, \
    249   { &unsupport,  211, "",                             0}, \
    250   { &unsupport,  212, "",                             0}, \
    251   { &unsupport,  213, "",                             0}, \
    252   { &unsupport,  214, "",                             0}, \
    253   { &unsupport,  215, "",                             0}, \
    254   { &unsupport,  216, "",                             0}, \
    255   { &unsupport,  217, "",                             0}, \
    256   { &unsupport,  218, "",                             0}, \
    257   { &unsupport,  219, "",                             0}, \
    258   { &unsupport,  220, "",                             0}, \
    259   { &unsupport,  221, "",                             0}, \
    260   { &unsupport,  222, "",                             0}, \
    261   { &unsupport,  223, "",                             0}, \
    262   { &unsupport,  224, "",                             0}, \
    263   { &unsupport,  225, "",                             0}, \
    264   { &unsupport,  226, "",                             0}, \
    265   { &unsupport,  227, "",                             0}, \
    266   { &unsupport,  228, "",                             0}, \
    267   { &unsupport,  229, "",                             0}, \
    268   { &unsupport,  230, "",                             0}, \
    269   { &unsupport,  231, "",                             0}, \
    270   { &unsupport,  232, "",                             0}, \
    271   { &unsupport,  233, "",                             0}, \
    272   { &unsupport,  234, "",                             0}, \
    273   { &unsupport,  235, "",                             0}, \
    274   { &unsupport,  236, "",                             0}, \
    275   { &unsupport,  237, "",                             0}, \
    276   { &unsupport,  238, "",                             0}, \
    277   { &unsupport,  239, "",                             0}, \
    278   { &unsupport,  240, "",                             0}, \
    279   { &unsupport,  241, "",                             0}, \
    280   { &unsupport,  242, "",                             0}, \
    281   { &unsupport,  243, "",                             0}, \
    282   { &unsupport,  244, "",                             0}, \
    283   { &unsupport,  245, "",                             0}, \
    284   { &unsupport,  246, "",                             0}, \
    285   { &unsupport,  247, "",                             0}, \
    286   { &pc32,       248, "R_MIPS_PC32",                  0}, \
    287   { &unsupport,  249, "",                             0}, \
    288   { &unsupport,  250, "R_MIPS_GNU_REL16_S2",          0}, \
    289   { &unsupport,  251, "",                             0}, \
    290   { &unsupport,  252, "",                             0}, \
    291   { &unsupport,  253, "R_MIPS_GNU_VTINHERIT",         0}, \
    292   { &unsupport,  254, "R_MIPS_GNU_VTENTRY",           0}
    293