Ignore:
Timestamp:
Aug 16, 2003, 6:59:22 PM (22 years ago)
Author:
bird
Message:

binutils v2.14 - offical sources.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/GNU/src/binutils/bfd/elfarm-oabi.c

    • Property cvs2svn:cvs-rev changed from 1.1 to 1.1.1.2
    r608 r609  
    11/* 32-bit ELF support for ARM old abi option.
    2    Copyright 1999, 2000, 2001 Free Software Foundation, Inc.
     2   Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
    33
    44   This file is part of BFD, the Binary File Descriptor library.
     
    1919
    2020#define OLD_ARM_ABI
     21#define bfd_elf32_arm_allocate_interworking_sections \
     22        bfd_elf32_arm_oabi_allocate_interworking_sections
     23#define bfd_elf32_arm_get_bfd_for_interworking \
     24        bfd_elf32_arm_oabi_get_bfd_for_interworking
     25#define bfd_elf32_arm_process_before_allocation \
     26        bfd_elf32_arm_oabi_process_before_allocation
     27#define bfd_elf32_arm_add_glue_sections_to_bfd \
     28        bfd_elf32_arm_oabi_add_glue_sections_to_bfd
    2129
    2230#include "elf/arm.h"
     
    3038#endif
    3139
    32 #define USE_RELA
    33 
    3440#define TARGET_LITTLE_SYM               bfd_elf32_littlearm_oabi_vec
    3541#define TARGET_LITTLE_NAME              "elf32-littlearm-oabi"
     
    4349#define ARM_ELF_OS_ABI_VERSION          0
    4450
     51static reloc_howto_type * find_howto                  PARAMS ((unsigned int));
     52static void               elf32_arm_info_to_howto     PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
     53static reloc_howto_type * elf32_arm_reloc_type_lookup PARAMS ((bfd *, bfd_reloc_code_real_type));
     54
    4555static reloc_howto_type elf32_arm_howto_table[] =
    46 {
    47   /* No relocation */
    48   HOWTO (R_ARM_NONE,            /* type */
    49          0,                     /* rightshift */
    50          0,                     /* size (0 = byte, 1 = short, 2 = long) */
    51          0,                     /* bitsize */
    52          false,                 /* pc_relative */
    53          0,                     /* bitpos */
    54          complain_overflow_dont,        /* complain_on_overflow */
    55          bfd_elf_generic_reloc, /* special_function */
    56          "R_ARM_NONE",          /* name */
    57          false,                 /* partial_inplace */
    58          0,                     /* src_mask */
    59          0,                     /* dst_mask */
    60          false),                /* pcrel_offset */
    61 
    62   HOWTO (R_ARM_PC24,            /* type */
    63          2,                     /* rightshift */
    64          2,                     /* size (0 = byte, 1 = short, 2 = long) */
    65          24,                    /* bitsize */
    66          true,                  /* pc_relative */
    67          0,                     /* bitpos */
    68          complain_overflow_signed,      /* complain_on_overflow */
    69          bfd_elf_generic_reloc, /* special_function */
    70          "R_ARM_PC24",          /* name */
    71          false,                 /* partial_inplace */
    72          0x00ffffff,            /* src_mask */
    73          0x00ffffff,            /* dst_mask */
    74          true),                 /* pcrel_offset */
    75 
    76   /* 32 bit absolute */
    77   HOWTO (R_ARM_ABS32,           /* type */
    78          0,                     /* rightshift */
    79          2,                     /* size (0 = byte, 1 = short, 2 = long) */
    80          32,                    /* bitsize */
    81          false,                 /* pc_relative */
    82          0,                     /* bitpos */
    83          complain_overflow_bitfield,    /* complain_on_overflow */
    84          bfd_elf_generic_reloc, /* special_function */
    85          "R_ARM_ABS32",         /* name */
    86          false,                 /* partial_inplace */
    87          0xffffffff,            /* src_mask */
    88          0xffffffff,            /* dst_mask */
    89          false),                /* pcrel_offset */
    90 
    91   /* standard 32bit pc-relative reloc */
    92   HOWTO (R_ARM_REL32,           /* type */
    93          0,                     /* rightshift */
    94          2,                     /* size (0 = byte, 1 = short, 2 = long) */
    95          32,                    /* bitsize */
    96          true,                  /* pc_relative */
    97          0,                     /* bitpos */
    98          complain_overflow_bitfield,    /* complain_on_overflow */
    99          bfd_elf_generic_reloc, /* special_function */
    100          "R_ARM_REL32",         /* name */
    101          false,                 /* partial_inplace */
    102          0xffffffff,            /* src_mask */
    103          0xffffffff,            /* dst_mask */
    104          true),                 /* pcrel_offset */
    105 
    106   /* 8 bit absolute */
    107   HOWTO (R_ARM_ABS8,            /* type */
    108          0,                     /* rightshift */
    109          0,                     /* size (0 = byte, 1 = short, 2 = long) */
    110          8,                     /* bitsize */
    111          false,                 /* pc_relative */
    112          0,                     /* bitpos */
    113          complain_overflow_bitfield,    /* complain_on_overflow */
    114          bfd_elf_generic_reloc, /* special_function */
    115          "R_ARM_ABS8",          /* name */
    116          false,                 /* partial_inplace */
    117          0x000000ff,            /* src_mask */
    118          0x000000ff,            /* dst_mask */
    119          false),                /* pcrel_offset */
    120 
    121    /* 16 bit absolute */
    122   HOWTO (R_ARM_ABS16,           /* type */
    123          0,                     /* rightshift */
    124          1,                     /* size (0 = byte, 1 = short, 2 = long) */
    125          16,                    /* bitsize */
    126          false,                 /* pc_relative */
    127          0,                     /* bitpos */
    128          complain_overflow_bitfield,    /* complain_on_overflow */
    129          bfd_elf_generic_reloc, /* special_function */
    130          "R_ARM_ABS16",         /* name */
    131          false,                 /* partial_inplace */
    132          0,                     /* src_mask */
    133          0,                     /* dst_mask */
    134          false),                /* pcrel_offset */
    135 
    136   /* 12 bit absolute */
    137   HOWTO (R_ARM_ABS12,           /* type */
    138          0,                     /* rightshift */
    139          2,                     /* size (0 = byte, 1 = short, 2 = long) */
    140          12,                    /* bitsize */
    141          false,                 /* pc_relative */
    142          0,                     /* bitpos */
    143          complain_overflow_bitfield,    /* complain_on_overflow */
    144          bfd_elf_generic_reloc, /* special_function */
    145          "R_ARM_ABS12",         /* name */
    146          false,                 /* partial_inplace */
    147          0x000008ff,            /* src_mask */
    148          0x000008ff,            /* dst_mask */
    149          false),                /* pcrel_offset */
    150 
    151   HOWTO (R_ARM_THM_ABS5,        /* type */
    152          6,                     /* rightshift */
    153          1,                     /* size (0 = byte, 1 = short, 2 = long) */
    154          5,                     /* bitsize */
    155          false,                 /* pc_relative */
    156          0,                     /* bitpos */
    157          complain_overflow_bitfield,    /* complain_on_overflow */
    158          bfd_elf_generic_reloc, /* special_function */
    159          "R_ARM_THM_ABS5",      /* name */
    160          false,                 /* partial_inplace */
    161          0x000007e0,            /* src_mask */
    162          0x000007e0,            /* dst_mask */
    163          false),                /* pcrel_offset */
    164 
    165   HOWTO (R_ARM_THM_PC22,        /* type */
    166          1,                     /* rightshift */
    167          2,                     /* size (0 = byte, 1 = short, 2 = long) */
    168          23,                    /* bitsize */
    169          true,                  /* pc_relative */
    170          0,                     /* bitpos */
    171          complain_overflow_signed,      /* complain_on_overflow */
    172          bfd_elf_generic_reloc, /* special_function */
    173          "R_ARM_THM_PC22",      /* name */
    174          false,                 /* partial_inplace */
    175          0x07ff07ff,            /* src_mask */
    176          0x07ff07ff,            /* dst_mask */
    177          true),                 /* pcrel_offset */
    178 
    179   HOWTO (R_ARM_SBREL32,         /* type */
    180          0,                     /* rightshift */
    181          0,                     /* size (0 = byte, 1 = short, 2 = long) */
    182          0,                     /* bitsize */
    183          false,                 /* pc_relative */
    184          0,                     /* bitpos */
    185          complain_overflow_dont,/* complain_on_overflow */
    186          bfd_elf_generic_reloc, /* special_function */
    187          "R_ARM_SBREL32",       /* name */
    188          false,                 /* partial_inplace */
    189          0,                     /* src_mask */
    190          0,                     /* dst_mask */
    191          false),                /* pcrel_offset */
    192 
    193   HOWTO (R_ARM_AMP_VCALL9,      /* type */
    194          1,                     /* rightshift */
    195          1,                     /* size (0 = byte, 1 = short, 2 = long) */
    196          8,                     /* bitsize */
    197          true,                  /* pc_relative */
    198          0,                     /* bitpos */
    199          complain_overflow_signed,      /* complain_on_overflow */
    200          bfd_elf_generic_reloc, /* special_function */
    201          "R_ARM_AMP_VCALL9",    /* name */
    202          false,                 /* partial_inplace */
    203          0x000000ff,            /* src_mask */
    204          0x000000ff,            /* dst_mask */
    205          true),                 /* pcrel_offset */
    206 
    207   /* 12 bit pc relative */
    208   HOWTO (R_ARM_THM_PC11,        /* type */
    209          1,                     /* rightshift */
    210          1,                     /* size (0 = byte, 1 = short, 2 = long) */
    211          11,                    /* bitsize */
    212          true,                  /* pc_relative */
    213          0,                     /* bitpos */
    214          complain_overflow_signed,      /* complain_on_overflow */
    215          bfd_elf_generic_reloc, /* special_function */
    216          "R_ARM_THM_PC11",      /* name */
    217          false,                 /* partial_inplace */
    218          0x000007ff,            /* src_mask */
    219          0x000007ff,            /* dst_mask */
    220          true),                 /* pcrel_offset */
    221 
    222   /* 12 bit pc relative */
    223   HOWTO (R_ARM_THM_PC9,         /* type */
    224          1,                     /* rightshift */
    225          1,                     /* size (0 = byte, 1 = short, 2 = long) */
    226          8,                     /* bitsize */
    227          true,                  /* pc_relative */
    228          0,                     /* bitpos */
    229          complain_overflow_signed,      /* complain_on_overflow */
    230          bfd_elf_generic_reloc, /* special_function */
    231          "R_ARM_THM_PC9",       /* name */
    232          false,                 /* partial_inplace */
    233          0x000000ff,            /* src_mask */
    234          0x000000ff,            /* dst_mask */
    235          true),                 /* pcrel_offset */
    236 
    237   /* GNU extension to record C++ vtable hierarchy */
    238   HOWTO (R_ARM_GNU_VTINHERIT, /* type */
    239          0,                     /* rightshift */
    240          2,                     /* size (0 = byte, 1 = short, 2 = long) */
    241          0,                     /* bitsize */
    242          false,                 /* pc_relative */
    243          0,                     /* bitpos */
    244          complain_overflow_dont, /* complain_on_overflow */
    245          NULL,                  /* special_function */
    246          "R_ARM_GNU_VTINHERIT", /* name */
    247          false,                 /* partial_inplace */
    248          0,                     /* src_mask */
    249          0,                     /* dst_mask */
    250          false),                /* pcrel_offset */
    251 
    252   /* GNU extension to record C++ vtable member usage */
    253   HOWTO (R_ARM_GNU_VTENTRY,     /* type */
    254          0,                     /* rightshift */
    255          2,                     /* size (0 = byte, 1 = short, 2 = long) */
    256          0,                     /* bitsize */
    257          false,                 /* pc_relative */
    258          0,                     /* bitpos */
    259          complain_overflow_dont, /* complain_on_overflow */
    260          _bfd_elf_rel_vtable_reloc_fn,  /* special_function */
    261          "R_ARM_GNU_VTENTRY",   /* name */
    262          false,                 /* partial_inplace */
    263          0,                     /* src_mask */
    264          0,                     /* dst_mask */
    265          false),                /* pcrel_offset */
    266 
    267   /* XXX - gap in index numbering here.  */
    268 
    269   HOWTO (R_ARM_PLT32,           /* type */
    270          2,                     /* rightshift */
    271          2,                     /* size (0 = byte, 1 = short, 2 = long) */
    272          26,                    /* bitsize */
    273          true,                  /* pc_relative */
    274          0,                     /* bitpos */
    275          complain_overflow_bitfield,/* complain_on_overflow */
    276          bfd_elf_generic_reloc, /* special_function */
    277          "R_ARM_PLT32",         /* name */
    278          true,                  /* partial_inplace */
    279          0x00ffffff,            /* src_mask */
    280          0x00ffffff,            /* dst_mask */
    281          true),                 /* pcrel_offset */
    282 
    283   /* XXX - gap in index numbering here.  */
    284 
    285   HOWTO (R_ARM_RREL32,          /* type */
    286          0,                     /* rightshift */
    287          0,                     /* size (0 = byte, 1 = short, 2 = long) */
    288          0,                     /* bitsize */
    289          false,                 /* pc_relative */
    290          0,                     /* bitpos */
    291          complain_overflow_dont,        /* complain_on_overflow */
    292          bfd_elf_generic_reloc, /* special_function */
    293          "R_ARM_RREL32",        /* name */
    294          false,                 /* partial_inplace */
    295          0,                     /* src_mask */
    296          0,                     /* dst_mask */
    297          false),                /* pcrel_offset */
    298 
    299   HOWTO (R_ARM_RABS32,          /* type */
    300          0,                     /* rightshift */
    301          0,                     /* size (0 = byte, 1 = short, 2 = long) */
    302          0,                     /* bitsize */
    303          false,                 /* pc_relative */
    304          0,                     /* bitpos */
    305          complain_overflow_dont,        /* complain_on_overflow */
    306          bfd_elf_generic_reloc, /* special_function */
    307          "R_ARM_RABS32",        /* name */
    308          false,                 /* partial_inplace */
    309          0,                     /* src_mask */
    310          0,                     /* dst_mask */
    311          false),                /* pcrel_offset */
    312 
    313   HOWTO (R_ARM_RPC24,           /* type */
    314          0,                     /* rightshift */
    315          0,                     /* size (0 = byte, 1 = short, 2 = long) */
    316          0,                     /* bitsize */
    317          false,                 /* pc_relative */
    318          0,                     /* bitpos */
    319          complain_overflow_dont,        /* complain_on_overflow */
    320          bfd_elf_generic_reloc, /* special_function */
    321          "R_ARM_RPC24",         /* name */
    322          false,                 /* partial_inplace */
    323          0,                     /* src_mask */
    324          0,                     /* dst_mask */
    325          false),                /* pcrel_offset */
    326 
    327   HOWTO (R_ARM_RBASE,           /* type */
    328          0,                     /* rightshift */
    329          0,                     /* size (0 = byte, 1 = short, 2 = long) */
    330          0,                     /* bitsize */
    331          false,                 /* pc_relative */
    332          0,                     /* bitpos */
    333          complain_overflow_dont,        /* complain_on_overflow */
    334          bfd_elf_generic_reloc, /* special_function */
    335          "R_ARM_RBASE",         /* name */
    336          false,                 /* partial_inplace */
    337          0,                     /* src_mask */
    338          0,                     /* dst_mask */
    339          false)                 /* pcrel_offset */
    340 };
     56  {
     57    /* No relocation. */
     58    HOWTO (R_ARM_NONE,          /* type */
     59           0,                   /* rightshift */
     60           0,                   /* size (0 = byte, 1 = short, 2 = long) */
     61           0,                   /* bitsize */
     62           FALSE,               /* pc_relative */
     63           0,                   /* bitpos */
     64           complain_overflow_dont,      /* complain_on_overflow */
     65           bfd_elf_generic_reloc,       /* special_function */
     66           "R_ARM_NONE",        /* name */
     67           FALSE,               /* partial_inplace */
     68           0,                   /* src_mask */
     69           0,                   /* dst_mask */
     70           FALSE),              /* pcrel_offset */
     71
     72    HOWTO (R_ARM_PC24,          /* type */
     73           2,                   /* rightshift */
     74           2,                   /* size (0 = byte, 1 = short, 2 = long) */
     75           24,                  /* bitsize */
     76           TRUE,                /* pc_relative */
     77           0,                   /* bitpos */
     78           complain_overflow_signed,    /* complain_on_overflow */
     79           bfd_elf_generic_reloc,       /* special_function */
     80           "R_ARM_PC24",        /* name */
     81           FALSE,               /* partial_inplace */
     82           0x00ffffff,          /* src_mask */
     83           0x00ffffff,          /* dst_mask */
     84           TRUE),                       /* pcrel_offset */
     85
     86    /* 32 bit absolute. */
     87    HOWTO (R_ARM_ABS32,         /* type */
     88           0,                   /* rightshift */
     89           2,                   /* size (0 = byte, 1 = short, 2 = long) */
     90           32,                  /* bitsize */
     91           FALSE,               /* pc_relative */
     92           0,                   /* bitpos */
     93           complain_overflow_bitfield,  /* complain_on_overflow */
     94           bfd_elf_generic_reloc,       /* special_function */
     95           "R_ARM_ABS32",       /* name */
     96           FALSE,               /* partial_inplace */
     97           0xffffffff,          /* src_mask */
     98           0xffffffff,          /* dst_mask */
     99           FALSE),              /* pcrel_offset */
     100
     101    /* Standard 32bit pc-relative reloc. */
     102    HOWTO (R_ARM_REL32,         /* type */
     103           0,                   /* rightshift */
     104           2,                   /* size (0 = byte, 1 = short, 2 = long) */
     105           32,                  /* bitsize */
     106           TRUE,                /* pc_relative */
     107           0,                   /* bitpos */
     108           complain_overflow_bitfield,  /* complain_on_overflow */
     109           bfd_elf_generic_reloc,       /* special_function */
     110           "R_ARM_REL32",       /* name */
     111           FALSE,               /* partial_inplace */
     112           0xffffffff,          /* src_mask */
     113           0xffffffff,          /* dst_mask */
     114           TRUE),               /* pcrel_offset */
     115
     116    /* 8 bit absolute. */
     117    HOWTO (R_ARM_ABS8,          /* type */
     118           0,                   /* rightshift */
     119           0,                   /* size (0 = byte, 1 = short, 2 = long) */
     120           8,                   /* bitsize */
     121           FALSE,               /* pc_relative */
     122           0,                   /* bitpos */
     123           complain_overflow_bitfield,  /* complain_on_overflow */
     124           bfd_elf_generic_reloc,       /* special_function */
     125           "R_ARM_ABS8",        /* name */
     126           FALSE,               /* partial_inplace */
     127           0x000000ff,          /* src_mask */
     128           0x000000ff,          /* dst_mask */
     129           FALSE),              /* pcrel_offset */
     130
     131    /* 16 bit absolute. */
     132    HOWTO (R_ARM_ABS16,         /* type */
     133           0,                   /* rightshift */
     134           1,                   /* size (0 = byte, 1 = short, 2 = long) */
     135           16,                  /* bitsize */
     136           FALSE,               /* pc_relative */
     137           0,                   /* bitpos */
     138           complain_overflow_bitfield,  /* complain_on_overflow */
     139           bfd_elf_generic_reloc,       /* special_function */
     140           "R_ARM_ABS16",       /* name */
     141           FALSE,               /* partial_inplace */
     142           0,                   /* src_mask */
     143           0,                   /* dst_mask */
     144           FALSE),              /* pcrel_offset */
     145
     146    /* 12 bit absolute. */
     147    HOWTO (R_ARM_ABS12,         /* type */
     148           0,                   /* rightshift */
     149           2,                   /* size (0 = byte, 1 = short, 2 = long) */
     150           12,                  /* bitsize */
     151           FALSE,               /* pc_relative */
     152           0,                   /* bitpos */
     153           complain_overflow_bitfield,  /* complain_on_overflow */
     154           bfd_elf_generic_reloc,       /* special_function */
     155           "R_ARM_ABS12",       /* name */
     156           FALSE,               /* partial_inplace */
     157           0x000008ff,          /* src_mask */
     158           0x000008ff,          /* dst_mask */
     159           FALSE),              /* pcrel_offset */
     160
     161    HOWTO (R_ARM_THM_ABS5,      /* type */
     162           6,                   /* rightshift */
     163           1,                   /* size (0 = byte, 1 = short, 2 = long) */
     164           5,                   /* bitsize */
     165           FALSE,               /* pc_relative */
     166           0,                   /* bitpos */
     167           complain_overflow_bitfield,  /* complain_on_overflow */
     168           bfd_elf_generic_reloc,       /* special_function */
     169           "R_ARM_THM_ABS5",    /* name */
     170           FALSE,               /* partial_inplace */
     171           0x000007e0,          /* src_mask */
     172           0x000007e0,          /* dst_mask */
     173           FALSE),              /* pcrel_offset */
     174
     175    HOWTO (R_ARM_THM_PC22,      /* type */
     176           1,                   /* rightshift */
     177           2,                   /* size (0 = byte, 1 = short, 2 = long) */
     178           23,                  /* bitsize */
     179           TRUE,                /* pc_relative */
     180           0,                   /* bitpos */
     181           complain_overflow_signed,    /* complain_on_overflow */
     182           bfd_elf_generic_reloc,       /* special_function */
     183           "R_ARM_THM_PC22",    /* name */
     184           FALSE,               /* partial_inplace */
     185           0x07ff07ff,          /* src_mask */
     186           0x07ff07ff,          /* dst_mask */
     187           TRUE),                       /* pcrel_offset */
     188
     189    HOWTO (R_ARM_SBREL32,               /* type */
     190           0,                   /* rightshift */
     191           0,                   /* size (0 = byte, 1 = short, 2 = long) */
     192           0,                   /* bitsize */
     193           FALSE,               /* pc_relative */
     194           0,                   /* bitpos */
     195           complain_overflow_dont,/* complain_on_overflow */
     196           bfd_elf_generic_reloc,       /* special_function */
     197           "R_ARM_SBREL32",     /* name */
     198           FALSE,               /* partial_inplace */
     199           0,                   /* src_mask */
     200           0,                   /* dst_mask */
     201           FALSE),              /* pcrel_offset */
     202
     203    HOWTO (R_ARM_AMP_VCALL9,    /* type */
     204           1,                   /* rightshift */
     205           1,                   /* size (0 = byte, 1 = short, 2 = long) */
     206           8,                   /* bitsize */
     207           TRUE,                /* pc_relative */
     208           0,                   /* bitpos */
     209           complain_overflow_signed,    /* complain_on_overflow */
     210           bfd_elf_generic_reloc,       /* special_function */
     211           "R_ARM_AMP_VCALL9",  /* name */
     212           FALSE,               /* partial_inplace */
     213           0x000000ff,          /* src_mask */
     214           0x000000ff,          /* dst_mask */
     215           TRUE),               /* pcrel_offset */
     216
     217    /* 12 bit pc relative. */
     218    HOWTO (R_ARM_THM_PC11,      /* type */
     219           1,                   /* rightshift */
     220           1,                   /* size (0 = byte, 1 = short, 2 = long) */
     221           11,                  /* bitsize */
     222           TRUE,                /* pc_relative */
     223           0,                   /* bitpos */
     224           complain_overflow_signed,    /* complain_on_overflow */
     225           bfd_elf_generic_reloc,       /* special_function */
     226           "R_ARM_THM_PC11",    /* name */
     227           FALSE,               /* partial_inplace */
     228           0x000007ff,          /* src_mask */
     229           0x000007ff,          /* dst_mask */
     230           TRUE),               /* pcrel_offset */
     231
     232    /* 12 bit pc relative. */
     233    HOWTO (R_ARM_THM_PC9,       /* type */
     234           1,                   /* rightshift */
     235           1,                   /* size (0 = byte, 1 = short, 2 = long) */
     236           8,                   /* bitsize */
     237           TRUE,                /* pc_relative */
     238           0,                   /* bitpos */
     239           complain_overflow_signed,    /* complain_on_overflow */
     240           bfd_elf_generic_reloc,       /* special_function */
     241           "R_ARM_THM_PC9",     /* name */
     242           FALSE,               /* partial_inplace */
     243           0x000000ff,          /* src_mask */
     244           0x000000ff,          /* dst_mask */
     245           TRUE),               /* pcrel_offset */
     246
     247    /* GNU extension to record C++ vtable hierarchy. */
     248    HOWTO (R_ARM_GNU_VTINHERIT, /* type */
     249           0,                     /* rightshift */
     250           2,                     /* size (0 = byte, 1 = short, 2 = long) */
     251           0,                     /* bitsize */
     252           FALSE,                 /* pc_relative */
     253           0,                     /* bitpos */
     254           complain_overflow_dont, /* complain_on_overflow */
     255           NULL,                  /* special_function */
     256           "R_ARM_GNU_VTINHERIT", /* name */
     257           FALSE,                 /* partial_inplace */
     258           0,                     /* src_mask */
     259           0,                     /* dst_mask */
     260           FALSE),                /* pcrel_offset */
     261
     262    /* GNU extension to record C++ vtable member usage. */
     263    HOWTO (R_ARM_GNU_VTENTRY,     /* type */
     264           0,                     /* rightshift */
     265           2,                     /* size (0 = byte, 1 = short, 2 = long) */
     266           0,                     /* bitsize */
     267           FALSE,                 /* pc_relative */
     268           0,                     /* bitpos */
     269           complain_overflow_dont, /* complain_on_overflow */
     270           _bfd_elf_rel_vtable_reloc_fn,  /* special_function */
     271           "R_ARM_GNU_VTENTRY",   /* name */
     272           FALSE,                 /* partial_inplace */
     273           0,                     /* src_mask */
     274           0,                     /* dst_mask */
     275           FALSE),                /* pcrel_offset */
     276
     277    /* XXX - gap in index numbering here.  */
     278
     279    HOWTO (R_ARM_PLT32,         /* type */
     280           2,                   /* rightshift */
     281           2,                   /* size (0 = byte, 1 = short, 2 = long) */
     282           26,                  /* bitsize */
     283           TRUE,                /* pc_relative */
     284           0,                   /* bitpos */
     285           complain_overflow_bitfield,/* complain_on_overflow */
     286           bfd_elf_generic_reloc, /* special_function */
     287           "R_ARM_PLT32",       /* name */
     288           TRUE,                /* partial_inplace */
     289           0x00ffffff,          /* src_mask */
     290           0x00ffffff,          /* dst_mask */
     291           TRUE),                       /* pcrel_offset */
     292
     293    /* XXX - gap in index numbering here.  */
     294
     295    HOWTO (R_ARM_RREL32,        /* type */
     296           0,                   /* rightshift */
     297           0,                   /* size (0 = byte, 1 = short, 2 = long) */
     298           0,                   /* bitsize */
     299           FALSE,               /* pc_relative */
     300           0,                   /* bitpos */
     301           complain_overflow_dont,      /* complain_on_overflow */
     302           bfd_elf_generic_reloc,       /* special_function */
     303           "R_ARM_RREL32",      /* name */
     304           FALSE,               /* partial_inplace */
     305           0,                   /* src_mask */
     306           0,                   /* dst_mask */
     307           FALSE),              /* pcrel_offset */
     308
     309    HOWTO (R_ARM_RABS32,        /* type */
     310           0,                   /* rightshift */
     311           0,                   /* size (0 = byte, 1 = short, 2 = long) */
     312           0,                   /* bitsize */
     313           FALSE,               /* pc_relative */
     314           0,                   /* bitpos */
     315           complain_overflow_dont,      /* complain_on_overflow */
     316           bfd_elf_generic_reloc,       /* special_function */
     317           "R_ARM_RABS32",      /* name */
     318           FALSE,               /* partial_inplace */
     319           0,                   /* src_mask */
     320           0,                   /* dst_mask */
     321           FALSE),              /* pcrel_offset */
     322
     323    HOWTO (R_ARM_RPC24,         /* type */
     324           0,                   /* rightshift */
     325           0,                   /* size (0 = byte, 1 = short, 2 = long) */
     326           0,                   /* bitsize */
     327           FALSE,               /* pc_relative */
     328           0,                   /* bitpos */
     329           complain_overflow_dont,      /* complain_on_overflow */
     330           bfd_elf_generic_reloc,       /* special_function */
     331           "R_ARM_RPC24",       /* name */
     332           FALSE,               /* partial_inplace */
     333           0,                   /* src_mask */
     334           0,                   /* dst_mask */
     335           FALSE),              /* pcrel_offset */
     336
     337    HOWTO (R_ARM_RBASE,         /* type */
     338           0,                   /* rightshift */
     339           0,                   /* size (0 = byte, 1 = short, 2 = long) */
     340           0,                   /* bitsize */
     341           FALSE,               /* pc_relative */
     342           0,                   /* bitpos */
     343           complain_overflow_dont,      /* complain_on_overflow */
     344           bfd_elf_generic_reloc,       /* special_function */
     345           "R_ARM_RBASE",       /* name */
     346           FALSE,               /* partial_inplace */
     347           0,                   /* src_mask */
     348           0,                   /* dst_mask */
     349           FALSE)               /* pcrel_offset */
     350  };
    341351
    342352/* Locate a reloc in the howto table.  This function must be used
    343353   when the entry number is is > R_ARM_GNU_VTINHERIT.  */
     354
    344355static reloc_howto_type *
    345356find_howto (r_type)
     
    359370     bfd *abfd ATTRIBUTE_UNUSED;
    360371     arelent *bfd_reloc;
    361      Elf32_Internal_Rela *elf_reloc;
     372     Elf_Internal_Rela *elf_reloc;
    362373{
    363374  unsigned int r_type;
     
    378389
    379390static const struct elf32_arm_reloc_map elf32_arm_reloc_map[] =
    380 {
    381   {BFD_RELOC_NONE,                 R_ARM_NONE },
    382   {BFD_RELOC_ARM_PCREL_BRANCH,     R_ARM_PC24 },
    383   {BFD_RELOC_32,                   R_ARM_ABS32 },
    384   {BFD_RELOC_32_PCREL,             R_ARM_REL32 },
    385   {BFD_RELOC_8,                    R_ARM_ABS8 },
    386   {BFD_RELOC_16,                   R_ARM_ABS16 },
    387   {BFD_RELOC_ARM_OFFSET_IMM,       R_ARM_ABS12 },
    388   {BFD_RELOC_ARM_THUMB_OFFSET,     R_ARM_THM_ABS5 },
    389   {BFD_RELOC_THUMB_PCREL_BRANCH23, R_ARM_THM_PC22 },
    390   {BFD_RELOC_NONE,                 R_ARM_SBREL32 },
    391   {BFD_RELOC_NONE,                 R_ARM_AMP_VCALL9 },
    392   {BFD_RELOC_THUMB_PCREL_BRANCH12, R_ARM_THM_PC11 },
    393   {BFD_RELOC_THUMB_PCREL_BRANCH9,  R_ARM_THM_PC9 },
    394   {BFD_RELOC_VTABLE_INHERIT,       R_ARM_GNU_VTINHERIT },
    395   {BFD_RELOC_VTABLE_ENTRY,         R_ARM_GNU_VTENTRY }
    396 };
     391  {
     392    {BFD_RELOC_NONE,                 R_ARM_NONE },
     393    {BFD_RELOC_ARM_PCREL_BRANCH,     R_ARM_PC24 },
     394    {BFD_RELOC_32,                   R_ARM_ABS32 },
     395    {BFD_RELOC_32_PCREL,             R_ARM_REL32 },
     396    {BFD_RELOC_8,                    R_ARM_ABS8 },
     397    {BFD_RELOC_16,                   R_ARM_ABS16 },
     398    {BFD_RELOC_ARM_OFFSET_IMM,       R_ARM_ABS12 },
     399    {BFD_RELOC_ARM_THUMB_OFFSET,     R_ARM_THM_ABS5 },
     400    {BFD_RELOC_THUMB_PCREL_BRANCH23, R_ARM_THM_PC22 },
     401    {BFD_RELOC_NONE,                 R_ARM_SBREL32 },
     402    {BFD_RELOC_NONE,                 R_ARM_AMP_VCALL9 },
     403    {BFD_RELOC_THUMB_PCREL_BRANCH12, R_ARM_THM_PC11 },
     404    {BFD_RELOC_THUMB_PCREL_BRANCH9,  R_ARM_THM_PC9 },
     405    {BFD_RELOC_VTABLE_INHERIT,       R_ARM_GNU_VTINHERIT },
     406    {BFD_RELOC_VTABLE_ENTRY,         R_ARM_GNU_VTENTRY }
     407  };
    397408
    398409static reloc_howto_type *
     
    413424}
    414425
    415 #define bfd_elf32_arm_allocate_interworking_sections \
    416         bfd_elf32_arm_oabi_allocate_interworking_sections
    417 #define bfd_elf32_arm_get_bfd_for_interworking \
    418         bfd_elf32_arm_oabi_get_bfd_for_interworking
    419 #define bfd_elf32_arm_process_before_allocation \
    420         bfd_elf32_arm_oabi_process_before_allocation
    421 
    422426#include "elf32-arm.h"
Note: See TracChangeset for help on using the changeset viewer.