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-nabi.c

    • Property cvs2svn:cvs-rev changed from 1.1 to 1.1.1.2
    r608 r609  
    11/* 32-bit ELF support for ARM new 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.
     
    2828#endif
    2929
    30 #define USE_REL
     30#define USE_REL 1
    3131
    3232#define TARGET_LITTLE_SYM               bfd_elf32_littlearm_vec
     
    4343static reloc_howto_type * elf32_arm_reloc_type_lookup
    4444  PARAMS ((bfd * abfd, bfd_reloc_code_real_type code));
     45static bfd_boolean elf32_arm_nabi_grok_prstatus
     46  PARAMS ((bfd *abfd, Elf_Internal_Note *note));
     47static bfd_boolean elf32_arm_nabi_grok_psinfo
     48  PARAMS ((bfd *abfd, Elf_Internal_Note *note));
    4549
    4650/* Note: code such as elf32_arm_reloc_type_lookup expect to use e.g.
     
    5559         0,                     /* size (0 = byte, 1 = short, 2 = long) */
    5660         0,                     /* bitsize */
    57          false,                 /* pc_relative */
     61         FALSE,                 /* pc_relative */
    5862         0,                     /* bitpos */
    5963         complain_overflow_dont,/* complain_on_overflow */
    6064         bfd_elf_generic_reloc, /* special_function */
    6165         "R_ARM_NONE",          /* name */
    62          false,                 /* partial_inplace */
    63          0,                     /* src_mask */
    64          0,                     /* dst_mask */
    65          false),                /* pcrel_offset */
     66         FALSE,                 /* partial_inplace */
     67         0,                     /* src_mask */
     68         0,                     /* dst_mask */
     69         FALSE),                /* pcrel_offset */
    6670
    6771  HOWTO (R_ARM_PC24,            /* type */
     
    6973         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    7074         24,                    /* bitsize */
    71          true,                  /* pc_relative */
     75         TRUE,                  /* pc_relative */
    7276         0,                     /* bitpos */
    7377         complain_overflow_signed,/* complain_on_overflow */
    7478         bfd_elf_generic_reloc, /* special_function */
    7579         "R_ARM_PC24",          /* name */
    76          false,                 /* partial_inplace */
     80         FALSE,                 /* partial_inplace */
    7781         0x00ffffff,            /* src_mask */
    7882         0x00ffffff,            /* dst_mask */
    79          true),                 /* pcrel_offset */
     83         TRUE),                 /* pcrel_offset */
    8084
    8185  /* 32 bit absolute */
     
    8488         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    8589         32,                    /* bitsize */
    86          false,                 /* pc_relative */
     90         FALSE,                 /* pc_relative */
    8791         0,                     /* bitpos */
    8892         complain_overflow_bitfield,/* complain_on_overflow */
    8993         bfd_elf_generic_reloc, /* special_function */
    9094         "R_ARM_ABS32",         /* name */
    91          false,                 /* partial_inplace */
     95         FALSE,                 /* partial_inplace */
    9296         0xffffffff,            /* src_mask */
    9397         0xffffffff,            /* dst_mask */
    94          false),                /* pcrel_offset */
     98         FALSE),                /* pcrel_offset */
    9599
    96100  /* standard 32bit pc-relative reloc */
     
    99103         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    100104         32,                    /* bitsize */
    101          true,                  /* pc_relative */
     105         TRUE,                  /* pc_relative */
    102106         0,                     /* bitpos */
    103107         complain_overflow_bitfield,/* complain_on_overflow */
    104108         bfd_elf_generic_reloc, /* special_function */
    105109         "R_ARM_REL32",         /* name */
    106          false,                 /* partial_inplace */
     110         FALSE,                 /* partial_inplace */
    107111         0xffffffff,            /* src_mask */
    108112         0xffffffff,            /* dst_mask */
    109          true),                 /* pcrel_offset */
     113         TRUE),                 /* pcrel_offset */
    110114
    111115  /* 8 bit absolute */
     
    114118         0,                     /* size (0 = byte, 1 = short, 2 = long) */
    115119         8,                     /* bitsize */
    116          false,                 /* pc_relative */
     120         FALSE,                 /* pc_relative */
    117121         0,                     /* bitpos */
    118122         complain_overflow_bitfield,/* complain_on_overflow */
    119123         bfd_elf_generic_reloc, /* special_function */
    120124         "R_ARM_PC13",          /* name */
    121          false,                 /* partial_inplace */
     125         FALSE,                 /* partial_inplace */
    122126         0x000000ff,            /* src_mask */
    123127         0x000000ff,            /* dst_mask */
    124          false),                /* pcrel_offset */
     128         FALSE),                /* pcrel_offset */
    125129
    126130   /* 16 bit absolute */
     
    129133         1,                     /* size (0 = byte, 1 = short, 2 = long) */
    130134         16,                    /* bitsize */
    131          false,                 /* pc_relative */
     135         FALSE,                 /* pc_relative */
    132136         0,                     /* bitpos */
    133137         complain_overflow_bitfield,/* complain_on_overflow */
    134138         bfd_elf_generic_reloc, /* special_function */
    135139         "R_ARM_ABS16",         /* name */
    136          false,                 /* partial_inplace */
    137          0,                     /* src_mask */
    138          0,                     /* dst_mask */
    139          false),                /* pcrel_offset */
     140         FALSE,                 /* partial_inplace */
     141         0x0000ffff,            /* src_mask */
     142         0x0000ffff,            /* dst_mask */
     143         FALSE),                /* pcrel_offset */
    140144
    141145  /* 12 bit absolute */
     
    144148         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    145149         12,                    /* bitsize */
    146          false,                 /* pc_relative */
     150         FALSE,                 /* pc_relative */
    147151         0,                     /* bitpos */
    148152         complain_overflow_bitfield,/* complain_on_overflow */
    149153         bfd_elf_generic_reloc, /* special_function */
    150154         "R_ARM_ABS12",         /* name */
    151          false,                 /* partial_inplace */
     155         FALSE,                 /* partial_inplace */
    152156         0x000008ff,            /* src_mask */
    153157         0x000008ff,            /* dst_mask */
    154          false),                /* pcrel_offset */
     158         FALSE),                /* pcrel_offset */
    155159
    156160  HOWTO (R_ARM_THM_ABS5,        /* type */
     
    158162         1,                     /* size (0 = byte, 1 = short, 2 = long) */
    159163         5,                     /* bitsize */
    160          false,                 /* pc_relative */
     164         FALSE,                 /* pc_relative */
    161165         0,                     /* bitpos */
    162166         complain_overflow_bitfield,/* complain_on_overflow */
    163167         bfd_elf_generic_reloc, /* special_function */
    164168         "R_ARM_THM_ABS5",      /* name */
    165          false,                 /* partial_inplace */
     169         FALSE,                 /* partial_inplace */
    166170         0x000007e0,            /* src_mask */
    167171         0x000007e0,            /* dst_mask */
    168          false),                /* pcrel_offset */
     172         FALSE),                /* pcrel_offset */
    169173
    170174  /* 8 bit absolute */
     
    173177         0,                     /* size (0 = byte, 1 = short, 2 = long) */
    174178         8,                     /* bitsize */
    175          false,                 /* pc_relative */
     179         FALSE,                 /* pc_relative */
    176180         0,                     /* bitpos */
    177181         complain_overflow_bitfield,/* complain_on_overflow */
    178182         bfd_elf_generic_reloc, /* special_function */
    179183         "R_ARM_ABS8",          /* name */
    180          false,                 /* partial_inplace */
     184         FALSE,                 /* partial_inplace */
    181185         0x000000ff,            /* src_mask */
    182186         0x000000ff,            /* dst_mask */
    183          false),                /* pcrel_offset */
     187         FALSE),                /* pcrel_offset */
    184188
    185189  HOWTO (R_ARM_SBREL32,         /* type */
     
    187191         0,                     /* size (0 = byte, 1 = short, 2 = long) */
    188192         0,                     /* bitsize */
    189          false,                 /* pc_relative */
     193         FALSE,                 /* pc_relative */
    190194         0,                     /* bitpos */
    191195         complain_overflow_dont,/* complain_on_overflow */
    192196         bfd_elf_generic_reloc, /* special_function */
    193197         "R_ARM_SBREL32",       /* name */
    194          false,                 /* partial_inplace */
    195          0,                     /* src_mask */
    196          0,                     /* dst_mask */
    197          false),                /* pcrel_offset */
     198         FALSE,                 /* partial_inplace */
     199         0,                     /* src_mask */
     200         0,                     /* dst_mask */
     201         FALSE),                /* pcrel_offset */
    198202
    199203  HOWTO (R_ARM_THM_PC22,        /* type */
     
    201205         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    202206         23,                    /* bitsize */
    203          true,                  /* pc_relative */
     207         TRUE,                  /* pc_relative */
    204208         0,                     /* bitpos */
    205209         complain_overflow_signed,/* complain_on_overflow */
    206210         bfd_elf_generic_reloc, /* special_function */
    207211         "R_ARM_THM_PC22",      /* name */
    208          false,                 /* partial_inplace */
     212         FALSE,                 /* partial_inplace */
    209213         0x07ff07ff,            /* src_mask */
    210214         0x07ff07ff,            /* dst_mask */
    211          true),                 /* pcrel_offset */
     215         TRUE),                 /* pcrel_offset */
    212216
    213217  HOWTO (R_ARM_THM_PC8,         /* type */
     
    215219         1,                     /* size (0 = byte, 1 = short, 2 = long) */
    216220         8,                     /* bitsize */
    217          true,                  /* pc_relative */
     221         TRUE,                  /* pc_relative */
    218222         0,                     /* bitpos */
    219223         complain_overflow_signed,/* complain_on_overflow */
    220224         bfd_elf_generic_reloc, /* special_function */
    221225         "R_ARM_THM_PC8",       /* name */
    222          false,                 /* partial_inplace */
     226         FALSE,                 /* partial_inplace */
    223227         0x000000ff,            /* src_mask */
    224228         0x000000ff,            /* dst_mask */
    225          true),                 /* pcrel_offset */
     229         TRUE),                 /* pcrel_offset */
    226230
    227231  HOWTO (R_ARM_AMP_VCALL9,      /* type */
     
    229233         1,                     /* size (0 = byte, 1 = short, 2 = long) */
    230234         8,                     /* bitsize */
    231          true,                  /* pc_relative */
     235         TRUE,                  /* pc_relative */
    232236         0,                     /* bitpos */
    233237         complain_overflow_signed,/* complain_on_overflow */
    234238         bfd_elf_generic_reloc, /* special_function */
    235239         "R_ARM_AMP_VCALL9",    /* name */
    236          false,                 /* partial_inplace */
     240         FALSE,                 /* partial_inplace */
    237241         0x000000ff,            /* src_mask */
    238242         0x000000ff,            /* dst_mask */
    239          true),                 /* pcrel_offset */
     243         TRUE),                 /* pcrel_offset */
    240244
    241245  HOWTO (R_ARM_SWI24,           /* type */
     
    243247         0,                     /* size (0 = byte, 1 = short, 2 = long) */
    244248         0,                     /* bitsize */
    245          false,                 /* pc_relative */
     249         FALSE,                 /* pc_relative */
    246250         0,                     /* bitpos */
    247251         complain_overflow_signed,/* complain_on_overflow */
    248252         bfd_elf_generic_reloc, /* special_function */
    249253         "R_ARM_SWI24",         /* name */
    250          false,                 /* partial_inplace */
     254         FALSE,                 /* partial_inplace */
    251255         0x00000000,            /* src_mask */
    252256         0x00000000,            /* dst_mask */
    253          false),                /* pcrel_offset */
     257         FALSE),                /* pcrel_offset */
    254258
    255259  HOWTO (R_ARM_THM_SWI8,        /* type */
     
    257261         0,                     /* size (0 = byte, 1 = short, 2 = long) */
    258262         0,                     /* bitsize */
    259          false,                 /* pc_relative */
     263         FALSE,                 /* pc_relative */
    260264         0,                     /* bitpos */
    261265         complain_overflow_signed,/* complain_on_overflow */
    262266         bfd_elf_generic_reloc, /* special_function */
    263267         "R_ARM_SWI8",          /* name */
    264          false,                 /* partial_inplace */
     268         FALSE,                 /* partial_inplace */
    265269         0x00000000,            /* src_mask */
    266270         0x00000000,            /* dst_mask */
    267          false),                /* pcrel_offset */
     271         FALSE),                /* pcrel_offset */
    268272
    269273  /* BLX instruction for the ARM.  */
     
    272276         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    273277         25,                    /* bitsize */
    274          true,                  /* pc_relative */
     278         TRUE,                  /* pc_relative */
    275279         0,                     /* bitpos */
    276280         complain_overflow_signed,/* complain_on_overflow */
    277281         bfd_elf_generic_reloc, /* special_function */
    278282         "R_ARM_XPC25",         /* name */
    279          false,                 /* partial_inplace */
     283         FALSE,                 /* partial_inplace */
    280284         0x00ffffff,            /* src_mask */
    281285         0x00ffffff,            /* dst_mask */
    282          true),                 /* pcrel_offset */
     286         TRUE),                 /* pcrel_offset */
    283287
    284288  /* BLX instruction for the Thumb.  */
     
    287291         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    288292         22,                    /* bitsize */
    289          true,                  /* pc_relative */
     293         TRUE,                  /* pc_relative */
    290294         0,                     /* bitpos */
    291295         complain_overflow_signed,/* complain_on_overflow */
    292296         bfd_elf_generic_reloc, /* special_function */
    293297         "R_ARM_THM_XPC22",     /* name */
    294          false,                 /* partial_inplace */
     298         FALSE,                 /* partial_inplace */
    295299         0x07ff07ff,            /* src_mask */
    296300         0x07ff07ff,            /* dst_mask */
    297          true),                 /* pcrel_offset */
     301         TRUE),                 /* pcrel_offset */
    298302
    299303  /* These next three relocs are not defined, but we need to fill the space.  */
     
    303307         0,                     /* size (0 = byte, 1 = short, 2 = long) */
    304308         0,                     /* bitsize */
    305          false,                 /* pc_relative */
     309         FALSE,                 /* pc_relative */
    306310         0,                     /* bitpos */
    307311         complain_overflow_dont,/* complain_on_overflow */
    308312         bfd_elf_generic_reloc, /* special_function */
    309313         "R_ARM_unknown_17",    /* name */
    310          false,                 /* partial_inplace */
    311          0,                     /* src_mask */
    312          0,                     /* dst_mask */
    313          false),                /* pcrel_offset */
     314         FALSE,                 /* partial_inplace */
     315         0,                     /* src_mask */
     316         0,                     /* dst_mask */
     317         FALSE),                /* pcrel_offset */
    314318
    315319  HOWTO (R_ARM_NONE,            /* type */
     
    317321         0,                     /* size (0 = byte, 1 = short, 2 = long) */
    318322         0,                     /* bitsize */
    319          false,                 /* pc_relative */
     323         FALSE,                 /* pc_relative */
    320324         0,                     /* bitpos */
    321325         complain_overflow_dont,/* complain_on_overflow */
    322326         bfd_elf_generic_reloc, /* special_function */
    323327         "R_ARM_unknown_18",    /* name */
    324          false,                 /* partial_inplace */
    325          0,                     /* src_mask */
    326          0,                     /* dst_mask */
    327          false),                /* pcrel_offset */
     328         FALSE,                 /* partial_inplace */
     329         0,                     /* src_mask */
     330         0,                     /* dst_mask */
     331         FALSE),                /* pcrel_offset */
    328332
    329333  HOWTO (R_ARM_NONE,            /* type */
     
    331335         0,                     /* size (0 = byte, 1 = short, 2 = long) */
    332336         0,                     /* bitsize */
    333          false,                 /* pc_relative */
     337         FALSE,                 /* pc_relative */
    334338         0,                     /* bitpos */
    335339         complain_overflow_dont,/* complain_on_overflow */
    336340         bfd_elf_generic_reloc, /* special_function */
    337341         "R_ARM_unknown_19",    /* name */
    338          false,                 /* partial_inplace */
    339          0,                     /* src_mask */
    340          0,                     /* dst_mask */
    341          false),                /* pcrel_offset */
     342         FALSE,                 /* partial_inplace */
     343         0,                     /* src_mask */
     344         0,                     /* dst_mask */
     345         FALSE),                /* pcrel_offset */
    342346
    343347  /* Relocs used in ARM Linux */
     
    347351         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    348352         32,                    /* bitsize */
    349          false,                 /* pc_relative */
     353         FALSE,                 /* pc_relative */
    350354         0,                     /* bitpos */
    351355         complain_overflow_bitfield,/* complain_on_overflow */
    352356         bfd_elf_generic_reloc, /* special_function */
    353357         "R_ARM_COPY",          /* name */
    354          true,                  /* partial_inplace */
     358         TRUE,                  /* partial_inplace */
    355359         0xffffffff,            /* src_mask */
    356360         0xffffffff,            /* dst_mask */
    357          false),                /* pcrel_offset */
     361         FALSE),                /* pcrel_offset */
    358362
    359363  HOWTO (R_ARM_GLOB_DAT,        /* type */
     
    361365         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    362366         32,                    /* bitsize */
    363          false,                 /* pc_relative */
     367         FALSE,                 /* pc_relative */
    364368         0,                     /* bitpos */
    365369         complain_overflow_bitfield,/* complain_on_overflow */
    366370         bfd_elf_generic_reloc, /* special_function */
    367371         "R_ARM_GLOB_DAT",      /* name */
    368          true,                  /* partial_inplace */
     372         TRUE,                  /* partial_inplace */
    369373         0xffffffff,            /* src_mask */
    370374         0xffffffff,            /* dst_mask */
    371          false),                /* pcrel_offset */
     375         FALSE),                /* pcrel_offset */
    372376
    373377  HOWTO (R_ARM_JUMP_SLOT,       /* type */
     
    375379         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    376380         32,                    /* bitsize */
    377          false,                 /* pc_relative */
     381         FALSE,                 /* pc_relative */
    378382         0,                     /* bitpos */
    379383         complain_overflow_bitfield,/* complain_on_overflow */
    380384         bfd_elf_generic_reloc, /* special_function */
    381385         "R_ARM_JUMP_SLOT",     /* name */
    382          true,                  /* partial_inplace */
     386         TRUE,                  /* partial_inplace */
    383387         0xffffffff,            /* src_mask */
    384388         0xffffffff,            /* dst_mask */
    385          false),                /* pcrel_offset */
     389         FALSE),                /* pcrel_offset */
    386390
    387391  HOWTO (R_ARM_RELATIVE,        /* type */
     
    389393         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    390394         32,                    /* bitsize */
    391          false,                 /* pc_relative */
     395         FALSE,                 /* pc_relative */
    392396         0,                     /* bitpos */
    393397         complain_overflow_bitfield,/* complain_on_overflow */
    394398         bfd_elf_generic_reloc, /* special_function */
    395399         "R_ARM_RELATIVE",      /* name */
    396          true,                  /* partial_inplace */
     400         TRUE,                  /* partial_inplace */
    397401         0xffffffff,            /* src_mask */
    398402         0xffffffff,            /* dst_mask */
    399          false),                /* pcrel_offset */
     403         FALSE),                /* pcrel_offset */
    400404
    401405  HOWTO (R_ARM_GOTOFF,          /* type */
     
    403407         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    404408         32,                    /* bitsize */
    405          false,                 /* pc_relative */
     409         FALSE,                 /* pc_relative */
    406410         0,                     /* bitpos */
    407411         complain_overflow_bitfield,/* complain_on_overflow */
    408412         bfd_elf_generic_reloc, /* special_function */
    409413         "R_ARM_GOTOFF",        /* name */
    410          true,                  /* partial_inplace */
     414         TRUE,                  /* partial_inplace */
    411415         0xffffffff,            /* src_mask */
    412416         0xffffffff,            /* dst_mask */
    413          false),                /* pcrel_offset */
     417         FALSE),                /* pcrel_offset */
    414418
    415419  HOWTO (R_ARM_GOTPC,           /* type */
     
    417421         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    418422         32,                    /* bitsize */
    419          true,                  /* pc_relative */
     423         TRUE,                  /* pc_relative */
    420424         0,                     /* bitpos */
    421425         complain_overflow_bitfield,/* complain_on_overflow */
    422426         bfd_elf_generic_reloc, /* special_function */
    423427         "R_ARM_GOTPC",         /* name */
    424          true,                  /* partial_inplace */
     428         TRUE,                  /* partial_inplace */
    425429         0xffffffff,            /* src_mask */
    426430         0xffffffff,            /* dst_mask */
    427          true),                 /* pcrel_offset */
     431         TRUE),                 /* pcrel_offset */
    428432
    429433  HOWTO (R_ARM_GOT32,           /* type */
     
    431435         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    432436         32,                    /* bitsize */
    433          false,                 /* pc_relative */
     437         FALSE,                 /* pc_relative */
    434438         0,                     /* bitpos */
    435439         complain_overflow_bitfield,/* complain_on_overflow */
    436440         bfd_elf_generic_reloc, /* special_function */
    437441         "R_ARM_GOT32",         /* name */
    438          true,                  /* partial_inplace */
     442         TRUE,                  /* partial_inplace */
    439443         0xffffffff,            /* src_mask */
    440444         0xffffffff,            /* dst_mask */
    441          false),                /* pcrel_offset */
     445         FALSE),                /* pcrel_offset */
    442446
    443447  HOWTO (R_ARM_PLT32,           /* type */
     
    445449         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    446450         26,                    /* bitsize */
    447          true,                  /* pc_relative */
     451         TRUE,                  /* pc_relative */
    448452         0,                     /* bitpos */
    449453         complain_overflow_bitfield,/* complain_on_overflow */
    450454         bfd_elf_generic_reloc, /* special_function */
    451455         "R_ARM_PLT32",         /* name */
    452          true,                  /* partial_inplace */
     456         TRUE,                  /* partial_inplace */
    453457         0x00ffffff,            /* src_mask */
    454458         0x00ffffff,            /* dst_mask */
    455          true),                 /* pcrel_offset */
     459         TRUE),                 /* pcrel_offset */
    456460
    457461  /* End of relocs used in ARM Linux */
     
    461465         0,                     /* size (0 = byte, 1 = short, 2 = long) */
    462466         0,                     /* bitsize */
    463          false,                 /* pc_relative */
     467         FALSE,                 /* pc_relative */
    464468         0,                     /* bitpos */
    465469         complain_overflow_dont,/* complain_on_overflow */
    466470         bfd_elf_generic_reloc, /* special_function */
    467471         "R_ARM_RREL32",        /* name */
    468          false,                 /* partial_inplace */
    469          0,                     /* src_mask */
    470          0,                     /* dst_mask */
    471          false),                /* pcrel_offset */
     472         FALSE,                 /* partial_inplace */
     473         0,                     /* src_mask */
     474         0,                     /* dst_mask */
     475         FALSE),                /* pcrel_offset */
    472476
    473477  HOWTO (R_ARM_RABS32,          /* type */
     
    475479         0,                     /* size (0 = byte, 1 = short, 2 = long) */
    476480         0,                     /* bitsize */
    477          false,                 /* pc_relative */
     481         FALSE,                 /* pc_relative */
    478482         0,                     /* bitpos */
    479483         complain_overflow_dont,/* complain_on_overflow */
    480484         bfd_elf_generic_reloc, /* special_function */
    481485         "R_ARM_RABS32",        /* name */
    482          false,                 /* partial_inplace */
    483          0,                     /* src_mask */
    484          0,                     /* dst_mask */
    485          false),                /* pcrel_offset */
     486         FALSE,                 /* partial_inplace */
     487         0,                     /* src_mask */
     488         0,                     /* dst_mask */
     489         FALSE),                /* pcrel_offset */
    486490
    487491  HOWTO (R_ARM_RPC24,           /* type */
     
    489493         0,                     /* size (0 = byte, 1 = short, 2 = long) */
    490494         0,                     /* bitsize */
    491          false,                 /* pc_relative */
     495         FALSE,                 /* pc_relative */
    492496         0,                     /* bitpos */
    493497         complain_overflow_dont,/* complain_on_overflow */
    494498         bfd_elf_generic_reloc, /* special_function */
    495499         "R_ARM_RPC24",         /* name */
    496          false,                 /* partial_inplace */
    497          0,                     /* src_mask */
    498          0,                     /* dst_mask */
    499          false),                /* pcrel_offset */
     500         FALSE,                 /* partial_inplace */
     501         0,                     /* src_mask */
     502         0,                     /* dst_mask */
     503         FALSE),                /* pcrel_offset */
    500504
    501505  HOWTO (R_ARM_RBASE,           /* type */
     
    503507         0,                     /* size (0 = byte, 1 = short, 2 = long) */
    504508         0,                     /* bitsize */
    505          false,                 /* pc_relative */
     509         FALSE,                 /* pc_relative */
    506510         0,                     /* bitpos */
    507511         complain_overflow_dont,/* complain_on_overflow */
    508512         bfd_elf_generic_reloc, /* special_function */
    509513         "R_ARM_RBASE",         /* name */
    510          false,                 /* partial_inplace */
    511          0,                     /* src_mask */
    512          0,                     /* dst_mask */
    513          false),                /* pcrel_offset */
     514         FALSE,                 /* partial_inplace */
     515         0,                     /* src_mask */
     516         0,                     /* dst_mask */
     517         FALSE),                /* pcrel_offset */
    514518
    515519};
     
    521525         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    522526         0,                     /* bitsize */
    523          false,                 /* pc_relative */
     527         FALSE,                 /* pc_relative */
    524528         0,                     /* bitpos */
    525529         complain_overflow_dont, /* complain_on_overflow */
    526530         NULL,                  /* special_function */
    527531         "R_ARM_GNU_VTINHERIT", /* name */
    528          false,                 /* partial_inplace */
     532         FALSE,                 /* partial_inplace */
    529533         0,                     /* src_mask */
    530534         0,                     /* dst_mask */
    531          false);                /* pcrel_offset */
     535         FALSE);                /* pcrel_offset */
    532536
    533537  /* GNU extension to record C++ vtable member usage */
     
    537541         2,                     /* size (0 = byte, 1 = short, 2 = long) */
    538542         0,                     /* bitsize */
    539          false,                 /* pc_relative */
     543         FALSE,                 /* pc_relative */
    540544         0,                     /* bitpos */
    541545         complain_overflow_dont, /* complain_on_overflow */
    542546         _bfd_elf_rel_vtable_reloc_fn,  /* special_function */
    543547         "R_ARM_GNU_VTENTRY",   /* name */
    544          false,                 /* partial_inplace */
     548         FALSE,                 /* partial_inplace */
    545549         0,                     /* src_mask */
    546550         0,                     /* dst_mask */
    547          false);                /* pcrel_offset */
     551         FALSE);                /* pcrel_offset */
    548552
    549553  /* 12 bit pc relative */
     
    553557         1,                     /* size (0 = byte, 1 = short, 2 = long) */
    554558         11,                    /* bitsize */
    555          true,                  /* pc_relative */
     559         TRUE,                  /* pc_relative */
    556560         0,                     /* bitpos */
    557561         complain_overflow_signed,      /* complain_on_overflow */
    558562         bfd_elf_generic_reloc, /* special_function */
    559563         "R_ARM_THM_PC11",      /* name */
    560          false,                 /* partial_inplace */
     564         FALSE,                 /* partial_inplace */
    561565         0x000007ff,            /* src_mask */
    562566         0x000007ff,            /* dst_mask */
    563          true);                 /* pcrel_offset */
     567         TRUE);                 /* pcrel_offset */
    564568
    565569  /* 12 bit pc relative */
     
    569573         1,                     /* size (0 = byte, 1 = short, 2 = long) */
    570574         8,                     /* bitsize */
    571          true,                  /* pc_relative */
     575         TRUE,                  /* pc_relative */
    572576         0,                     /* bitpos */
    573577         complain_overflow_signed,      /* complain_on_overflow */
    574578         bfd_elf_generic_reloc, /* special_function */
    575579         "R_ARM_THM_PC9",       /* name */
    576          false,                 /* partial_inplace */
     580         FALSE,                 /* partial_inplace */
    577581         0x000000ff,            /* src_mask */
    578582         0x000000ff,            /* dst_mask */
    579          true);                 /* pcrel_offset */
     583         TRUE);                 /* pcrel_offset */
     584
     585static void elf32_arm_info_to_howto
     586  PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
    580587
    581588static void
     
    583590     bfd * abfd ATTRIBUTE_UNUSED;
    584591     arelent * bfd_reloc;
    585      Elf32_Internal_Rel * elf_reloc;
     592     Elf_Internal_Rela * elf_reloc;
    586593{
    587594  unsigned int r_type;
     
    623630
    624631static const struct elf32_arm_reloc_map elf32_arm_reloc_map[] =
    625 {
    626   {BFD_RELOC_NONE,                 R_ARM_NONE},
    627   {BFD_RELOC_ARM_PCREL_BRANCH,     R_ARM_PC24},
    628   {BFD_RELOC_ARM_PCREL_BLX,        R_ARM_XPC25},
    629   {BFD_RELOC_THUMB_PCREL_BLX,      R_ARM_THM_XPC22},
    630   {BFD_RELOC_32,                   R_ARM_ABS32},
    631   {BFD_RELOC_32_PCREL,             R_ARM_REL32},
    632   {BFD_RELOC_8,                    R_ARM_ABS8},
    633   {BFD_RELOC_16,                   R_ARM_ABS16},
    634   {BFD_RELOC_ARM_OFFSET_IMM,       R_ARM_ABS12},
    635   {BFD_RELOC_ARM_THUMB_OFFSET,     R_ARM_THM_ABS5},
    636   {BFD_RELOC_THUMB_PCREL_BRANCH23, R_ARM_THM_PC22},
    637   {BFD_RELOC_ARM_COPY,             R_ARM_COPY},
    638   {BFD_RELOC_ARM_GLOB_DAT,         R_ARM_GLOB_DAT},
    639   {BFD_RELOC_ARM_JUMP_SLOT,        R_ARM_JUMP_SLOT},
    640   {BFD_RELOC_ARM_RELATIVE,         R_ARM_RELATIVE},
    641   {BFD_RELOC_ARM_GOTOFF,           R_ARM_GOTOFF},
    642   {BFD_RELOC_ARM_GOTPC,            R_ARM_GOTPC},
    643   {BFD_RELOC_ARM_GOT32,            R_ARM_GOT32},
    644   {BFD_RELOC_ARM_PLT32,            R_ARM_PLT32}
    645 };
     632  {
     633    {BFD_RELOC_NONE,                 R_ARM_NONE},
     634    {BFD_RELOC_ARM_PCREL_BRANCH,     R_ARM_PC24},
     635    {BFD_RELOC_ARM_PCREL_BLX,        R_ARM_XPC25},
     636    {BFD_RELOC_THUMB_PCREL_BLX,      R_ARM_THM_XPC22},
     637    {BFD_RELOC_32,                   R_ARM_ABS32},
     638    {BFD_RELOC_32_PCREL,             R_ARM_REL32},
     639    {BFD_RELOC_8,                    R_ARM_ABS8},
     640    {BFD_RELOC_16,                   R_ARM_ABS16},
     641    {BFD_RELOC_ARM_OFFSET_IMM,       R_ARM_ABS12},
     642    {BFD_RELOC_ARM_THUMB_OFFSET,     R_ARM_THM_ABS5},
     643    {BFD_RELOC_THUMB_PCREL_BRANCH23, R_ARM_THM_PC22},
     644    {BFD_RELOC_ARM_COPY,             R_ARM_COPY},
     645    {BFD_RELOC_ARM_GLOB_DAT,         R_ARM_GLOB_DAT},
     646    {BFD_RELOC_ARM_JUMP_SLOT,        R_ARM_JUMP_SLOT},
     647    {BFD_RELOC_ARM_RELATIVE,         R_ARM_RELATIVE},
     648    {BFD_RELOC_ARM_GOTOFF,           R_ARM_GOTOFF},
     649    {BFD_RELOC_ARM_GOTPC,            R_ARM_GOTPC},
     650    {BFD_RELOC_ARM_GOT32,            R_ARM_GOT32},
     651    {BFD_RELOC_ARM_PLT32,            R_ARM_PLT32}
     652  };
    646653
    647654static reloc_howto_type *
     
    675682}
    676683
     684/* Support for core dump NOTE sections */
     685static bfd_boolean
     686elf32_arm_nabi_grok_prstatus (abfd, note)
     687     bfd *abfd;
     688     Elf_Internal_Note *note;
     689{
     690  int offset;
     691  size_t raw_size;
     692
     693  switch (note->descsz)
     694    {
     695      default:
     696        return FALSE;
     697
     698      case 148:         /* Linux/ARM 32-bit*/
     699        /* pr_cursig */
     700        elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
     701
     702        /* pr_pid */
     703        elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24);
     704
     705        /* pr_reg */
     706        offset = 72;
     707        raw_size = 72;
     708
     709        break;
     710    }
     711
     712  /* Make a ".reg/999" section.  */
     713  return _bfd_elfcore_make_pseudosection (abfd, ".reg",
     714                                          raw_size, note->descpos + offset);
     715}
     716
     717static bfd_boolean
     718elf32_arm_nabi_grok_psinfo (abfd, note)
     719     bfd *abfd;
     720     Elf_Internal_Note *note;
     721{
     722  switch (note->descsz)
     723    {
     724      default:
     725        return FALSE;
     726
     727      case 124:         /* Linux/ARM elf_prpsinfo */
     728        elf_tdata (abfd)->core_program
     729         = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
     730        elf_tdata (abfd)->core_command
     731         = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
     732    }
     733
     734  /* Note that for some reason, a spurious space is tacked
     735     onto the end of the args in some (at least one anyway)
     736     implementations, so strip it off if it exists.  */
     737
     738  {
     739    char *command = elf_tdata (abfd)->core_command;
     740    int n = strlen (command);
     741
     742    if (0 < n && command[n - 1] == ' ')
     743      command[n - 1] = '\0';
     744  }
     745
     746  return TRUE;
     747}
     748
     749#define elf_backend_grok_prstatus       elf32_arm_nabi_grok_prstatus
     750#define elf_backend_grok_psinfo         elf32_arm_nabi_grok_psinfo
     751
    677752#include "elf32-arm.h"
Note: See TracChangeset for help on using the changeset viewer.