Home | History | Annotate | Line # | Download | only in bfd
elf32-m32r.c revision 1.1.1.9
      1 /* M32R-specific support for 32-bit ELF.
      2    Copyright (C) 1996-2022 Free Software Foundation, Inc.
      3 
      4    This file is part of BFD, the Binary File Descriptor library.
      5 
      6    This program is free software; you can redistribute it and/or modify
      7    it under the terms of the GNU General Public License as published by
      8    the Free Software Foundation; either version 3 of the License, or
      9    (at your option) any later version.
     10 
     11    This program is distributed in the hope that it will be useful,
     12    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14    GNU General Public License for more details.
     15 
     16    You should have received a copy of the GNU General Public License
     17    along with this program; if not, write to the Free Software
     18    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     19    MA 02110-1301, USA.  */
     20 
     21 #include "sysdep.h"
     22 #include "bfd.h"
     23 #include "libbfd.h"
     24 #include "elf-bfd.h"
     25 #include "elf/m32r.h"
     26 
     27 #define NOP_INSN		0x7000
     28 #define MAKE_PARALLEL(insn)	((insn) | 0x8000)
     29 
     30 /* Use REL instead of RELA to save space.
     31    This only saves space in libraries and object files, but perhaps
     32    relocs will be put in ROM?  All in all though, REL relocs are a pain
     33    to work with.  */
     34 /* #define USE_REL	1
     35 
     36 #ifndef USE_REL
     37 #define USE_REL	0
     38 #endif */
     39 /* Use RELA. But use REL to link old objects for backwords compatibility.  */
     40 
     41 /* Functions for the M32R ELF linker.  */
     42 
     43 /* The name of the dynamic interpreter.  This is put in the .interp
     44    section.  */
     45 
     46 #define ELF_DYNAMIC_INTERPRETER "/usr/lib/libc.so.1"
     47 
     48 /* The nop opcode we use.  */
     49 
     50 #define M32R_NOP 0x7000f000
     51 
     52 #define PLT_EMPTY   0x10101010  /* RIE  -> RIE */
     53 
     54 /* The size in bytes of an entry in the procedure linkage table.  */
     55 
     56 #define PLT_ENTRY_SIZE 20
     57 #define PLT_HEADER_SIZE 20
     58 
     59 /* The first one entries in a procedure linkage table are reserved,
     60    and the initial contents are unimportant (we zero them out).
     61    Subsequent entries look like this. */
     62 
     63 #define PLT0_ENTRY_WORD0  0xd6c00000	/* seth r6, #high(.got+4)	   */
     64 #define PLT0_ENTRY_WORD1  0x86e60000	/* or3	r6, r6, #low(.got)+4)	   */
     65 #define PLT0_ENTRY_WORD2  0x24e626c6	/* ld	r4, @r6+    -> ld r6, @r6  */
     66 #define PLT0_ENTRY_WORD3  0x1fc6f000	/* jmp	r6	    || pnop	   */
     67 #define PLT0_ENTRY_WORD4  PLT_EMPTY	/* RIE		   -> RIE	   */
     68 
     69 #define PLT0_PIC_ENTRY_WORD0  0xa4cc0004 /* ld	 r4, @(4,r12)		   */
     70 #define PLT0_PIC_ENTRY_WORD1  0xa6cc0008 /* ld	 r6, @(8,r12)		   */
     71 #define PLT0_PIC_ENTRY_WORD2  0x1fc6f000 /* jmp	 r6	    || nop	   */
     72 #define PLT0_PIC_ENTRY_WORD3  PLT_EMPTY	 /* RIE		    -> RIE	   */
     73 #define PLT0_PIC_ENTRY_WORD4  PLT_EMPTY	 /* RIE		    -> RIE	   */
     74 
     75 #define PLT_ENTRY_WORD0	 0xe6000000 /* ld24 r6, .name_in_GOT		    */
     76 #define PLT_ENTRY_WORD1	 0x06acf000 /* add  r6, r12	     || nop	    */
     77 #define PLT_ENTRY_WORD0b 0xd6c00000 /* seth r6, #high(.name_in_GOT)	    */
     78 #define PLT_ENTRY_WORD1b 0x86e60000 /* or3  r6, r6, #low(.name_in_GOT)	    */
     79 #define PLT_ENTRY_WORD2	 0x26c61fc6 /* ld  r6, @r6	     -> jmp r6	    */
     80 #define PLT_ENTRY_WORD3	 0xe5000000 /* ld24 r5, $offset			    */
     81 #define PLT_ENTRY_WORD4	 0xff000000 /* bra  .plt0.			    */
     82 
     83 
     84 /* Utility to actually perform an R_M32R_10_PCREL reloc.  */
     85 
     86 static bfd_reloc_status_type
     87 m32r_elf_do_10_pcrel_reloc (bfd *abfd,
     88 			    reloc_howto_type *howto,
     89 			    asection *input_section,
     90 			    bfd_byte *data,
     91 			    bfd_vma offset,
     92 			    asection *symbol_section ATTRIBUTE_UNUSED,
     93 			    bfd_vma symbol_value,
     94 			    bfd_vma addend)
     95 {
     96   bfd_signed_vma relocation;
     97   unsigned long x;
     98   bfd_reloc_status_type status;
     99 
    100   /* Sanity check the address (offset in section).  */
    101   if (offset > bfd_get_section_limit (abfd, input_section))
    102     return bfd_reloc_outofrange;
    103 
    104   relocation = symbol_value + addend;
    105   /* Make it pc relative.  */
    106   relocation -=	(input_section->output_section->vma
    107 		 + input_section->output_offset);
    108   /* These jumps mask off the lower two bits of the current address
    109      before doing pcrel calculations.  */
    110   relocation -= (offset & -(bfd_vma) 4);
    111 
    112   if (relocation < -0x200 || relocation > 0x1ff)
    113     status = bfd_reloc_overflow;
    114   else
    115     status = bfd_reloc_ok;
    116 
    117   x = bfd_get_16 (abfd, data + offset);
    118   relocation >>= howto->rightshift;
    119   relocation <<= howto->bitpos;
    120   x = (x & ~howto->dst_mask) | (((x & howto->src_mask) + relocation) & howto->dst_mask);
    121   bfd_put_16 (abfd, (bfd_vma) x, data + offset);
    122 
    123   return status;
    124 }
    125 
    126 /* Handle the R_M32R_10_PCREL reloc.  */
    127 
    128 static bfd_reloc_status_type
    129 m32r_elf_10_pcrel_reloc (bfd * abfd,
    130 			 arelent * reloc_entry,
    131 			 asymbol * symbol,
    132 			 void * data,
    133 			 asection * input_section,
    134 			 bfd * output_bfd,
    135 			 char ** error_message ATTRIBUTE_UNUSED)
    136 {
    137   /* This part is from bfd_elf_generic_reloc.  */
    138   if (output_bfd != NULL
    139       && (symbol->flags & BSF_SECTION_SYM) == 0
    140       && (! reloc_entry->howto->partial_inplace
    141 	  || reloc_entry->addend == 0))
    142     {
    143       reloc_entry->address += input_section->output_offset;
    144       return bfd_reloc_ok;
    145     }
    146 
    147   if (output_bfd != NULL)
    148     /* FIXME: See bfd_perform_relocation.  Is this right?  */
    149     return bfd_reloc_continue;
    150 
    151   return m32r_elf_do_10_pcrel_reloc (abfd, reloc_entry->howto,
    152 				     input_section,
    153 				     data, reloc_entry->address,
    154 				     symbol->section,
    155 				     (symbol->value
    156 				      + symbol->section->output_section->vma
    157 				      + symbol->section->output_offset),
    158 				     reloc_entry->addend);
    159 }
    160 
    161 /* Do generic partial_inplace relocation.
    162    This is a local replacement for bfd_elf_generic_reloc.  */
    163 
    164 static bfd_reloc_status_type
    165 m32r_elf_generic_reloc (bfd *input_bfd,
    166 			arelent *reloc_entry,
    167 			asymbol *symbol,
    168 			void * data,
    169 			asection *input_section,
    170 			bfd *output_bfd,
    171 			char **error_message ATTRIBUTE_UNUSED)
    172 {
    173   bfd_reloc_status_type ret;
    174   bfd_vma relocation;
    175   bfd_byte *inplace_address;
    176 
    177   /* This part is from bfd_elf_generic_reloc.
    178      If we're relocating, and this an external symbol, we don't want
    179      to change anything.  */
    180   if (output_bfd != NULL
    181       && (symbol->flags & BSF_SECTION_SYM) == 0
    182       && reloc_entry->addend == 0)
    183     {
    184       reloc_entry->address += input_section->output_offset;
    185       return bfd_reloc_ok;
    186     }
    187 
    188   /* Now do the reloc in the usual way.
    189      ??? It would be nice to call bfd_elf_generic_reloc here,
    190      but we have partial_inplace set.  bfd_elf_generic_reloc will
    191      pass the handling back to bfd_install_relocation which will install
    192      a section relative addend which is wrong.  */
    193 
    194   /* Sanity check the address (offset in section).  */
    195   if (reloc_entry->address > bfd_get_section_limit (input_bfd, input_section))
    196     return bfd_reloc_outofrange;
    197 
    198   ret = bfd_reloc_ok;
    199   if (bfd_is_und_section (symbol->section)
    200       && output_bfd == NULL)
    201     ret = bfd_reloc_undefined;
    202 
    203   if (bfd_is_com_section (symbol->section)
    204       || output_bfd != NULL)
    205     relocation = 0;
    206   else
    207     relocation = symbol->value;
    208 
    209   /* Only do this for a final link.  */
    210   if (output_bfd == NULL)
    211     {
    212       relocation += symbol->section->output_section->vma;
    213       relocation += symbol->section->output_offset;
    214     }
    215 
    216   relocation += reloc_entry->addend;
    217   inplace_address = (bfd_byte *) data + reloc_entry->address;
    218 
    219 #define DOIT(x)						\
    220   x = ( (x & ~reloc_entry->howto->dst_mask) |		\
    221   (((x & reloc_entry->howto->src_mask) +  relocation) &	\
    222   reloc_entry->howto->dst_mask))
    223 
    224   switch (bfd_get_reloc_size (reloc_entry->howto))
    225     {
    226     case 2:
    227       {
    228 	short x = bfd_get_16 (input_bfd, inplace_address);
    229 	DOIT (x);
    230 	bfd_put_16 (input_bfd, (bfd_vma) x, inplace_address);
    231       }
    232       break;
    233     case 4:
    234       {
    235 	unsigned long x = bfd_get_32 (input_bfd, inplace_address);
    236 	DOIT (x);
    237 	bfd_put_32 (input_bfd, (bfd_vma)x , inplace_address);
    238       }
    239       break;
    240     default:
    241       BFD_ASSERT (0);
    242     }
    243 
    244   if (output_bfd != NULL)
    245     reloc_entry->address += input_section->output_offset;
    246 
    247   return ret;
    248 }
    249 
    250 /* Handle the R_M32R_SDA16 reloc.
    251    This reloc is used to compute the address of objects in the small data area
    252    and to perform loads and stores from that area.
    253    The lower 16 bits are sign extended and added to the register specified
    254    in the instruction, which is assumed to point to _SDA_BASE_.  */
    255 
    256 static bfd_reloc_status_type
    257 m32r_elf_sda16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
    258 		      arelent *reloc_entry,
    259 		      asymbol *symbol,
    260 		      void * data ATTRIBUTE_UNUSED,
    261 		      asection *input_section,
    262 		      bfd *output_bfd,
    263 		      char **error_message ATTRIBUTE_UNUSED)
    264 {
    265   /* This part is from bfd_elf_generic_reloc.  */
    266   if (output_bfd != NULL
    267       && (symbol->flags & BSF_SECTION_SYM) == 0
    268       && (! reloc_entry->howto->partial_inplace
    269 	  || reloc_entry->addend == 0))
    270     {
    271       reloc_entry->address += input_section->output_offset;
    272       return bfd_reloc_ok;
    273     }
    274 
    275   if (output_bfd != NULL)
    276     /* FIXME: See bfd_perform_relocation.  Is this right?  */
    277     return bfd_reloc_continue;
    278 
    279   /* FIXME: not sure what to do here yet.  But then again, the linker
    280      may never call us.  */
    281   abort ();
    282 }
    283 
    284 
    285 /* Handle the R_M32R_HI16_[SU]LO relocs.
    287    HI16_SLO is for the add3 and load/store with displacement instructions.
    288    HI16_ULO is for the or3 instruction.
    289    For R_M32R_HI16_SLO, the lower 16 bits are sign extended when added to
    290    the high 16 bytes so if the lower 16 bits are negative (bit 15 == 1) then
    291    we must add one to the high 16 bytes (which will get subtracted off when
    292    the low 16 bits are added).
    293    These relocs have to be done in combination with an R_M32R_LO16 reloc
    294    because there is a carry from the LO16 to the HI16.  Here we just save
    295    the information we need; we do the actual relocation when we see the LO16.
    296    This code is copied from the elf32-mips.c.  We also support an arbitrary
    297    number of HI16 relocs to be associated with a single LO16 reloc.  The
    298    assembler sorts the relocs to ensure each HI16 immediately precedes its
    299    LO16.  However if there are multiple copies, the assembler may not find
    300    the real LO16 so it picks the first one it finds.  */
    301 
    302 struct m32r_hi16
    303 {
    304   struct m32r_hi16 *next;
    305   bfd_byte *addr;
    306   bfd_vma addend;
    307 };
    308 
    309 /* FIXME: This should not be a static variable.  */
    310 
    311 static struct m32r_hi16 *m32r_hi16_list;
    312 
    313 static bfd_reloc_status_type
    314 m32r_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
    315 		     arelent *reloc_entry,
    316 		     asymbol *symbol,
    317 		     void * data,
    318 		     asection *input_section,
    319 		     bfd *output_bfd,
    320 		     char **error_message ATTRIBUTE_UNUSED)
    321 {
    322   bfd_reloc_status_type ret;
    323   bfd_vma relocation;
    324   struct m32r_hi16 *n;
    325 
    326   /* This part is from bfd_elf_generic_reloc.
    327      If we're relocating, and this an external symbol, we don't want
    328      to change anything.  */
    329   if (output_bfd != NULL
    330       && (symbol->flags & BSF_SECTION_SYM) == 0
    331       && reloc_entry->addend == 0)
    332     {
    333       reloc_entry->address += input_section->output_offset;
    334       return bfd_reloc_ok;
    335     }
    336 
    337   /* Sanity check the address (offset in section).  */
    338   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
    339     return bfd_reloc_outofrange;
    340 
    341   ret = bfd_reloc_ok;
    342   if (bfd_is_und_section (symbol->section)
    343       && output_bfd == NULL)
    344     ret = bfd_reloc_undefined;
    345 
    346   if (bfd_is_com_section (symbol->section))
    347     relocation = 0;
    348   else
    349     relocation = symbol->value;
    350 
    351   relocation += symbol->section->output_section->vma;
    352   relocation += symbol->section->output_offset;
    353   relocation += reloc_entry->addend;
    354 
    355   /* Save the information, and let LO16 do the actual relocation.  */
    356   n = bfd_malloc ((bfd_size_type) sizeof *n);
    357   if (n == NULL)
    358     return bfd_reloc_outofrange;
    359   n->addr = (bfd_byte *) data + reloc_entry->address;
    360   n->addend = relocation;
    361   n->next = m32r_hi16_list;
    362   m32r_hi16_list = n;
    363 
    364   if (output_bfd != NULL)
    365     reloc_entry->address += input_section->output_offset;
    366 
    367   return ret;
    368 }
    369 
    370 /* Handle an M32R ELF HI16 reloc.  */
    371 
    372 static void
    373 m32r_elf_relocate_hi16 (bfd *input_bfd,
    374 			int type,
    375 			Elf_Internal_Rela *relhi,
    376 			Elf_Internal_Rela *rello,
    377 			bfd_byte *contents,
    378 			bfd_vma addend)
    379 {
    380   unsigned long insn;
    381   bfd_vma addlo;
    382 
    383   insn = bfd_get_32 (input_bfd, contents + relhi->r_offset);
    384 
    385   addlo = bfd_get_32 (input_bfd, contents + rello->r_offset);
    386   if (type == R_M32R_HI16_SLO)
    387     addlo = ((addlo & 0xffff) ^ 0x8000) - 0x8000;
    388   else
    389     addlo &= 0xffff;
    390 
    391   addend += ((insn & 0xffff) << 16) + addlo;
    392 
    393   /* Reaccount for sign extension of low part.  */
    394   if (type == R_M32R_HI16_SLO
    395       && (addend & 0x8000) != 0)
    396     addend += 0x10000;
    397 
    398   bfd_put_32 (input_bfd,
    399 	      (insn & 0xffff0000) | ((addend >> 16) & 0xffff),
    400 	      contents + relhi->r_offset);
    401 }
    402 
    403 /* Do an R_M32R_LO16 relocation.  This is a straightforward 16 bit
    404    inplace relocation; this function exists in order to do the
    405    R_M32R_HI16_[SU]LO relocation described above.  */
    406 
    407 static bfd_reloc_status_type
    408 m32r_elf_lo16_reloc (bfd *input_bfd,
    409 		     arelent *reloc_entry,
    410 		     asymbol *symbol,
    411 		     void * data,
    412 		     asection *input_section,
    413 		     bfd *output_bfd,
    414 		     char **error_message)
    415 {
    416   /* This part is from bfd_elf_generic_reloc.
    417      If we're relocating, and this an external symbol, we don't want
    418      to change anything.  */
    419   if (output_bfd != NULL
    420       && (symbol->flags & BSF_SECTION_SYM) == 0
    421       && reloc_entry->addend == 0)
    422     {
    423       reloc_entry->address += input_section->output_offset;
    424       return bfd_reloc_ok;
    425     }
    426 
    427   if (m32r_hi16_list != NULL)
    428     {
    429       struct m32r_hi16 *l;
    430 
    431       l = m32r_hi16_list;
    432       while (l != NULL)
    433 	{
    434 	  unsigned long insn;
    435 	  unsigned long val;
    436 	  unsigned long vallo;
    437 	  struct m32r_hi16 *next;
    438 
    439 	  /* Do the HI16 relocation.  Note that we actually don't need
    440 	     to know anything about the LO16 itself, except where to
    441 	     find the low 16 bits of the addend needed by the LO16.  */
    442 	  insn = bfd_get_32 (input_bfd, l->addr);
    443 	  vallo = ((bfd_get_32 (input_bfd, (bfd_byte *) data + reloc_entry->address)
    444 		   & 0xffff) ^ 0x8000) - 0x8000;
    445 	  val = ((insn & 0xffff) << 16) + vallo;
    446 	  val += l->addend;
    447 
    448 	  /* Reaccount for sign extension of low part.  */
    449 	  if ((val & 0x8000) != 0)
    450 	    val += 0x10000;
    451 
    452 	  insn = (insn &~ (bfd_vma) 0xffff) | ((val >> 16) & 0xffff);
    453 	  bfd_put_32 (input_bfd, (bfd_vma) insn, l->addr);
    454 
    455 	  next = l->next;
    456 	  free (l);
    457 	  l = next;
    458 	}
    459 
    460       m32r_hi16_list = NULL;
    461     }
    462 
    463   /* Now do the LO16 reloc in the usual way.
    464      ??? It would be nice to call bfd_elf_generic_reloc here,
    465      but we have partial_inplace set.  bfd_elf_generic_reloc will
    466      pass the handling back to bfd_install_relocation which will install
    467      a section relative addend which is wrong.  */
    468   return m32r_elf_generic_reloc (input_bfd, reloc_entry, symbol, data,
    469 				input_section, output_bfd, error_message);
    470 }
    471 
    472 
    473 static reloc_howto_type m32r_elf_howto_table[] =
    475 {
    476   /* This reloc does nothing.  */
    477   HOWTO (R_M32R_NONE,		/* type */
    478 	 0,			/* rightshift */
    479 	 0,			/* size */
    480 	 0,			/* bitsize */
    481 	 false,			/* pc_relative */
    482 	 0,			/* bitpos */
    483 	 complain_overflow_dont, /* complain_on_overflow */
    484 	 bfd_elf_generic_reloc,	/* special_function */
    485 	 "R_M32R_NONE",		/* name */
    486 	 false,			/* partial_inplace */
    487 	 0,			/* src_mask */
    488 	 0,			/* dst_mask */
    489 	 false),		/* pcrel_offset */
    490 
    491   /* A 16 bit absolute relocation.  */
    492   HOWTO (R_M32R_16,		/* type */
    493 	 0,			/* rightshift */
    494 	 2,			/* size */
    495 	 16,			/* bitsize */
    496 	 false,			/* pc_relative */
    497 	 0,			/* bitpos */
    498 	 complain_overflow_bitfield, /* complain_on_overflow */
    499 	 m32r_elf_generic_reloc,/* special_function */
    500 	 "R_M32R_16",		/* name */
    501 	 true,			/* partial_inplace */
    502 	 0xffff,		/* src_mask */
    503 	 0xffff,		/* dst_mask */
    504 	 false),		/* pcrel_offset */
    505 
    506   /* A 32 bit absolute relocation.  */
    507   HOWTO (R_M32R_32,		/* type */
    508 	 0,			/* rightshift */
    509 	 4,			/* size */
    510 	 32,			/* bitsize */
    511 	 false,			/* pc_relative */
    512 	 0,			/* bitpos */
    513 	 complain_overflow_bitfield, /* complain_on_overflow */
    514 	 m32r_elf_generic_reloc,/* special_function */
    515 	 "R_M32R_32",		/* name */
    516 	 true,			/* partial_inplace */
    517 	 0xffffffff,		/* src_mask */
    518 	 0xffffffff,		/* dst_mask */
    519 	 false),		/* pcrel_offset */
    520 
    521   /* A 24 bit address.  */
    522   HOWTO (R_M32R_24,		/* type */
    523 	 0,			/* rightshift */
    524 	 4,			/* size */
    525 	 24,			/* bitsize */
    526 	 false,			/* pc_relative */
    527 	 0,			/* bitpos */
    528 	 complain_overflow_unsigned, /* complain_on_overflow */
    529 	 m32r_elf_generic_reloc,/* special_function */
    530 	 "R_M32R_24",		/* name */
    531 	 true,			/* partial_inplace */
    532 	 0xffffff,		/* src_mask */
    533 	 0xffffff,		/* dst_mask */
    534 	 false),		/* pcrel_offset */
    535 
    536   /* An PC Relative 10-bit relocation, shifted by 2.
    537      This reloc is complicated because relocations are relative to pc & -4.
    538      i.e. branches in the right insn slot use the address of the left insn
    539      slot for pc.  */
    540   /* ??? It's not clear whether this should have partial_inplace set or not.
    541      Branch relaxing in the assembler can store the addend in the insn,
    542      and if bfd_install_relocation gets called the addend may get added
    543      again.  */
    544   HOWTO (R_M32R_10_PCREL,	/* type */
    545 	 2,			/* rightshift */
    546 	 2,			/* size */
    547 	 10,			/* bitsize */
    548 	 true,			/* pc_relative */
    549 	 0,			/* bitpos */
    550 	 complain_overflow_signed, /* complain_on_overflow */
    551 	 m32r_elf_10_pcrel_reloc, /* special_function */
    552 	 "R_M32R_10_PCREL",	/* name */
    553 	 false,			/* partial_inplace */
    554 	 0xff,			/* src_mask */
    555 	 0xff,			/* dst_mask */
    556 	 true),			/* pcrel_offset */
    557 
    558   /* A relative 18 bit relocation, right shifted by 2.  */
    559   HOWTO (R_M32R_18_PCREL,	/* type */
    560 	 2,			/* rightshift */
    561 	 4,			/* size */
    562 	 16,			/* bitsize */
    563 	 true,			/* pc_relative */
    564 	 0,			/* bitpos */
    565 	 complain_overflow_signed, /* complain_on_overflow */
    566 	 bfd_elf_generic_reloc,	/* special_function */
    567 	 "R_M32R_18_PCREL",	/* name */
    568 	 false,			/* partial_inplace */
    569 	 0xffff,		/* src_mask */
    570 	 0xffff,		/* dst_mask */
    571 	 true),			/* pcrel_offset */
    572 
    573   /* A relative 26 bit relocation, right shifted by 2.  */
    574   /* ??? It's not clear whether this should have partial_inplace set or not.
    575      Branch relaxing in the assembler can store the addend in the insn,
    576      and if bfd_install_relocation gets called the addend may get added
    577      again.  */
    578   HOWTO (R_M32R_26_PCREL,	/* type */
    579 	 2,			/* rightshift */
    580 	 4,			/* size */
    581 	 26,			/* bitsize */
    582 	 true,			/* pc_relative */
    583 	 0,			/* bitpos */
    584 	 complain_overflow_signed, /* complain_on_overflow */
    585 	 bfd_elf_generic_reloc,	/* special_function */
    586 	 "R_M32R_26_PCREL",	/* name */
    587 	 false,			/* partial_inplace */
    588 	 0xffffff,		/* src_mask */
    589 	 0xffffff,		/* dst_mask */
    590 	 true),			/* pcrel_offset */
    591 
    592   /* High 16 bits of address when lower 16 is or'd in.  */
    593   HOWTO (R_M32R_HI16_ULO,	/* type */
    594 	 16,			/* rightshift */
    595 	 4,			/* size */
    596 	 16,			/* bitsize */
    597 	 false,			/* pc_relative */
    598 	 0,			/* bitpos */
    599 	 complain_overflow_dont, /* complain_on_overflow */
    600 	 m32r_elf_hi16_reloc,	/* special_function */
    601 	 "R_M32R_HI16_ULO",	/* name */
    602 	 true,			/* partial_inplace */
    603 	 0x0000ffff,		/* src_mask */
    604 	 0x0000ffff,		/* dst_mask */
    605 	 false),		/* pcrel_offset */
    606 
    607   /* High 16 bits of address when lower 16 is added in.  */
    608   HOWTO (R_M32R_HI16_SLO,	/* type */
    609 	 16,			/* rightshift */
    610 	 4,			/* size */
    611 	 16,			/* bitsize */
    612 	 false,			/* pc_relative */
    613 	 0,			/* bitpos */
    614 	 complain_overflow_dont, /* complain_on_overflow */
    615 	 m32r_elf_hi16_reloc,	/* special_function */
    616 	 "R_M32R_HI16_SLO",	/* name */
    617 	 true,			/* partial_inplace */
    618 	 0x0000ffff,		/* src_mask */
    619 	 0x0000ffff,		/* dst_mask */
    620 	 false),		/* pcrel_offset */
    621 
    622   /* Lower 16 bits of address.  */
    623   HOWTO (R_M32R_LO16,		/* type */
    624 	 0,			/* rightshift */
    625 	 4,			/* size */
    626 	 16,			/* bitsize */
    627 	 false,			/* pc_relative */
    628 	 0,			/* bitpos */
    629 	 complain_overflow_dont, /* complain_on_overflow */
    630 	 m32r_elf_lo16_reloc,	/* special_function */
    631 	 "R_M32R_LO16",		/* name */
    632 	 true,			/* partial_inplace */
    633 	 0x0000ffff,		/* src_mask */
    634 	 0x0000ffff,		/* dst_mask */
    635 	 false),		/* pcrel_offset */
    636 
    637   /* Small data area 16 bits offset.  */
    638   HOWTO (R_M32R_SDA16,		/* type */
    639 	 0,			/* rightshift */
    640 	 4,			/* size */
    641 	 16,			/* bitsize */
    642 	 false,			/* pc_relative */
    643 	 0,			/* bitpos */
    644 	 complain_overflow_signed, /* complain_on_overflow */
    645 	 m32r_elf_sda16_reloc,	/* special_function */
    646 	 "R_M32R_SDA16",	/* name */
    647 	 true,			/* partial_inplace */  /* FIXME: correct? */
    648 	 0x0000ffff,		/* src_mask */
    649 	 0x0000ffff,		/* dst_mask */
    650 	 false),		/* pcrel_offset */
    651 
    652   /* GNU extension to record C++ vtable hierarchy.  */
    653   HOWTO (R_M32R_GNU_VTINHERIT, /* type */
    654 	 0,			/* rightshift */
    655 	 4,			/* size */
    656 	 0,			/* bitsize */
    657 	 false,			/* pc_relative */
    658 	 0,			/* bitpos */
    659 	 complain_overflow_dont, /* complain_on_overflow */
    660 	 NULL,			/* special_function */
    661 	 "R_M32R_GNU_VTINHERIT", /* name */
    662 	 false,			/* partial_inplace */
    663 	 0,			/* src_mask */
    664 	 0,			/* dst_mask */
    665 	 false),		/* pcrel_offset */
    666 
    667   /* GNU extension to record C++ vtable member usage.  */
    668   HOWTO (R_M32R_GNU_VTENTRY,	 /* type */
    669 	 0,			/* rightshift */
    670 	 4,			/* size */
    671 	 0,			/* bitsize */
    672 	 false,			/* pc_relative */
    673 	 0,			/* bitpos */
    674 	 complain_overflow_dont, /* complain_on_overflow */
    675 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
    676 	 "R_M32R_GNU_VTENTRY",	 /* name */
    677 	 false,			/* partial_inplace */
    678 	 0,			/* src_mask */
    679 	 0,			/* dst_mask */
    680 	 false),		/* pcrel_offset */
    681 
    682   EMPTY_HOWTO (13),
    683   EMPTY_HOWTO (14),
    684   EMPTY_HOWTO (15),
    685   EMPTY_HOWTO (16),
    686   EMPTY_HOWTO (17),
    687   EMPTY_HOWTO (18),
    688   EMPTY_HOWTO (19),
    689   EMPTY_HOWTO (20),
    690   EMPTY_HOWTO (21),
    691   EMPTY_HOWTO (22),
    692   EMPTY_HOWTO (23),
    693   EMPTY_HOWTO (24),
    694   EMPTY_HOWTO (25),
    695   EMPTY_HOWTO (26),
    696   EMPTY_HOWTO (27),
    697   EMPTY_HOWTO (28),
    698   EMPTY_HOWTO (29),
    699   EMPTY_HOWTO (30),
    700   EMPTY_HOWTO (31),
    701   EMPTY_HOWTO (32),
    702 
    703   /* A 16 bit absolute relocation.  */
    704   HOWTO (R_M32R_16_RELA,	/* type */
    705 	 0,			/* rightshift */
    706 	 2,			/* size */
    707 	 16,			/* bitsize */
    708 	 false,			/* pc_relative */
    709 	 0,			/* bitpos */
    710 	 complain_overflow_bitfield, /* complain_on_overflow */
    711 	 bfd_elf_generic_reloc,	/* special_function */
    712 	 "R_M32R_16_RELA",	/* name */
    713 	 false,			/* partial_inplace */
    714 	 0xffff,		/* src_mask */
    715 	 0xffff,		/* dst_mask */
    716 	 false),		/* pcrel_offset */
    717 
    718   /* A 32 bit absolute relocation.  */
    719   HOWTO (R_M32R_32_RELA,	/* type */
    720 	 0,			/* rightshift */
    721 	 4,			/* size */
    722 	 32,			/* bitsize */
    723 	 false,			/* pc_relative */
    724 	 0,			/* bitpos */
    725 	 complain_overflow_bitfield, /* complain_on_overflow */
    726 	 bfd_elf_generic_reloc,/* special_function */
    727 	 "R_M32R_32_RELA",		/* name */
    728 	 false,			/* partial_inplace */
    729 	 0xffffffff,		/* src_mask */
    730 	 0xffffffff,		/* dst_mask */
    731 	 false),		/* pcrel_offset */
    732 
    733   /* A 24 bit address.  */
    734   HOWTO (R_M32R_24_RELA,	/* type */
    735 	 0,			/* rightshift */
    736 	 4,			/* size */
    737 	 24,			/* bitsize */
    738 	 false,			/* pc_relative */
    739 	 0,			/* bitpos */
    740 	 complain_overflow_unsigned, /* complain_on_overflow */
    741 	 bfd_elf_generic_reloc,/* special_function */
    742 	 "R_M32R_24_RELA",	/* name */
    743 	 false,			/* partial_inplace */
    744 	 0xffffff,		/* src_mask */
    745 	 0xffffff,		/* dst_mask */
    746 	 false),		/* pcrel_offset */
    747 
    748   HOWTO (R_M32R_10_PCREL_RELA,	/* type */
    749 	 2,			/* rightshift */
    750 	 2,			/* size */
    751 	 10,			/* bitsize */
    752 	 true,			/* pc_relative */
    753 	 0,			/* bitpos */
    754 	 complain_overflow_signed, /* complain_on_overflow */
    755 	 m32r_elf_10_pcrel_reloc, /* special_function */
    756 	 "R_M32R_10_PCREL_RELA",/* name */
    757 	 false,			/* partial_inplace */
    758 	 0xff,			/* src_mask */
    759 	 0xff,			/* dst_mask */
    760 	 true),			/* pcrel_offset */
    761 
    762   /* A relative 18 bit relocation, right shifted by 2.  */
    763   HOWTO (R_M32R_18_PCREL_RELA,	/* type */
    764 	 2,			/* rightshift */
    765 	 4,			/* size */
    766 	 16,			/* bitsize */
    767 	 true,			/* pc_relative */
    768 	 0,			/* bitpos */
    769 	 complain_overflow_signed, /* complain_on_overflow */
    770 	 bfd_elf_generic_reloc,	/* special_function */
    771 	 "R_M32R_18_PCREL_RELA",/* name */
    772 	 false,			/* partial_inplace */
    773 	 0xffff,		/* src_mask */
    774 	 0xffff,		/* dst_mask */
    775 	 true),			/* pcrel_offset */
    776 
    777   /* A relative 26 bit relocation, right shifted by 2.  */
    778   HOWTO (R_M32R_26_PCREL_RELA,	/* type */
    779 	 2,			/* rightshift */
    780 	 4,			/* size */
    781 	 26,			/* bitsize */
    782 	 true,			/* pc_relative */
    783 	 0,			/* bitpos */
    784 	 complain_overflow_signed, /* complain_on_overflow */
    785 	 bfd_elf_generic_reloc,	/* special_function */
    786 	 "R_M32R_26_PCREL_RELA",/* name */
    787 	 false,			/* partial_inplace */
    788 	 0xffffff,		/* src_mask */
    789 	 0xffffff,		/* dst_mask */
    790 	 true),			/* pcrel_offset */
    791 
    792   /* High 16 bits of address when lower 16 is or'd in.  */
    793   HOWTO (R_M32R_HI16_ULO_RELA,	/* type */
    794 	 16,			/* rightshift */
    795 	 4,			/* size */
    796 	 16,			/* bitsize */
    797 	 false,			/* pc_relative */
    798 	 0,			/* bitpos */
    799 	 complain_overflow_dont, /* complain_on_overflow */
    800 	 bfd_elf_generic_reloc,	/* special_function */
    801 	 "R_M32R_HI16_ULO_RELA",/* name */
    802 	 false,			/* partial_inplace */
    803 	 0x0000ffff,		/* src_mask */
    804 	 0x0000ffff,		/* dst_mask */
    805 	 false),		/* pcrel_offset */
    806 
    807   /* High 16 bits of address when lower 16 is added in.  */
    808   HOWTO (R_M32R_HI16_SLO_RELA,	/* type */
    809 	 16,			/* rightshift */
    810 	 4,			/* size */
    811 	 16,			/* bitsize */
    812 	 false,			/* pc_relative */
    813 	 0,			/* bitpos */
    814 	 complain_overflow_dont, /* complain_on_overflow */
    815 	 bfd_elf_generic_reloc,	/* special_function */
    816 	 "R_M32R_HI16_SLO_RELA",/* name */
    817 	 false,			/* partial_inplace */
    818 	 0x0000ffff,		/* src_mask */
    819 	 0x0000ffff,		/* dst_mask */
    820 	 false),		/* pcrel_offset */
    821 
    822   /* Lower 16 bits of address.  */
    823   HOWTO (R_M32R_LO16_RELA,	/* type */
    824 	 0,			/* rightshift */
    825 	 4,			/* size */
    826 	 16,			/* bitsize */
    827 	 false,			/* pc_relative */
    828 	 0,			/* bitpos */
    829 	 complain_overflow_dont, /* complain_on_overflow */
    830 	 bfd_elf_generic_reloc,	/* special_function */
    831 	 "R_M32R_LO16_RELA",	/* name */
    832 	 false,			/* partial_inplace */
    833 	 0x0000ffff,		/* src_mask */
    834 	 0x0000ffff,		/* dst_mask */
    835 	 false),		/* pcrel_offset */
    836 
    837   /* Small data area 16 bits offset.  */
    838   HOWTO (R_M32R_SDA16_RELA,	/* type */
    839 	 0,			/* rightshift */
    840 	 4,			/* size */
    841 	 16,			/* bitsize */
    842 	 false,			/* pc_relative */
    843 	 0,			/* bitpos */
    844 	 complain_overflow_signed, /* complain_on_overflow */
    845 	 bfd_elf_generic_reloc,	/* special_function */
    846 	 "R_M32R_SDA16_RELA",	/* name */
    847 	 true,			/* partial_inplace */  /* FIXME: correct? */
    848 	 0x0000ffff,		/* src_mask */
    849 	 0x0000ffff,		/* dst_mask */
    850 	 false),		/* pcrel_offset */
    851 
    852   /* GNU extension to record C++ vtable hierarchy.  */
    853   HOWTO (R_M32R_RELA_GNU_VTINHERIT, /* type */
    854 	 0,			/* rightshift */
    855 	 4,			/* size */
    856 	 0,			/* bitsize */
    857 	 false,			/* pc_relative */
    858 	 0,			/* bitpos */
    859 	 complain_overflow_dont, /* complain_on_overflow */
    860 	 NULL,			/* special_function */
    861 	 "R_M32R_RELA_GNU_VTINHERIT", /* name */
    862 	 false,			/* partial_inplace */
    863 	 0,			/* src_mask */
    864 	 0,			/* dst_mask */
    865 	 false),		/* pcrel_offset */
    866 
    867   /* GNU extension to record C++ vtable member usage.  */
    868   HOWTO (R_M32R_RELA_GNU_VTENTRY,     /* type */
    869 	 0,			/* rightshift */
    870 	 4,			/* size */
    871 	 0,			/* bitsize */
    872 	 false,			/* pc_relative */
    873 	 0,			/* bitpos */
    874 	 complain_overflow_dont, /* complain_on_overflow */
    875 	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
    876 	 "R_M32R_RELA_GNU_VTENTRY",   /* name */
    877 	 false,			/* partial_inplace */
    878 	 0,			/* src_mask */
    879 	 0,			/* dst_mask */
    880 	 false),		/* pcrel_offset */
    881 
    882   /* A 32 bit PC relative relocation.  */
    883   HOWTO (R_M32R_REL32,		/* type */
    884 	 0,			/* rightshift */
    885 	 4,			/* size */
    886 	 32,			/* bitsize */
    887 	 true,			/* pc_relative */
    888 	 0,			/* bitpos */
    889 	 complain_overflow_bitfield, /* complain_on_overflow */
    890 	 bfd_elf_generic_reloc,/* special_function */
    891 	 "R_M32R_REL32",		/* name */
    892 	 false,			/* partial_inplace */
    893 	 0xffffffff,		/* src_mask */
    894 	 0xffffffff,		/* dst_mask */
    895 	 true),			/* pcrel_offset */
    896 
    897   EMPTY_HOWTO (46),
    898   EMPTY_HOWTO (47),
    899 
    900   /* Like R_M32R_24, but referring to the GOT table entry for
    901      the symbol.  */
    902   HOWTO (R_M32R_GOT24,		/* type */
    903 	 0,			/* rightshift */
    904 	 4,			/* size */
    905 	 24,			/* bitsize */
    906 	 false,			/* pc_relative */
    907 	 0,			/* bitpos */
    908 	 complain_overflow_unsigned, /* complain_on_overflow */
    909 	 bfd_elf_generic_reloc, /* special_function */
    910 	 "R_M32R_GOT24",	/* name */
    911 	 false,			/* partial_inplace */
    912 	 0xffffff,		/* src_mask */
    913 	 0xffffff,		/* dst_mask */
    914 	 false),		/* pcrel_offset */
    915 
    916   /* Like R_M32R_PCREL, but referring to the procedure linkage table
    917      entry for the symbol.  */
    918   HOWTO (R_M32R_26_PLTREL,	/* type */
    919 	 2,			/* rightshift */
    920 	 4,			/* size */
    921 	 24,			/* bitsize */
    922 	 true,			/* pc_relative */
    923 	 0,			/* bitpos */
    924 	 complain_overflow_signed, /* complain_on_overflow */
    925 	 bfd_elf_generic_reloc,	/* special_function */
    926 	 "R_M32R_26_PLTREL",	/* name */
    927 	 false,			/* partial_inplace */
    928 	 0xffffff,		/* src_mask */
    929 	 0xffffff,		/* dst_mask */
    930 	 true),			/* pcrel_offset */
    931 
    932   /* This is used only by the dynamic linker.  The symbol should exist
    933      both in the object being run and in some shared library.  The
    934      dynamic linker copies the data addressed by the symbol from the
    935      shared library into the object, because the object being
    936      run has to have the data at some particular address.  */
    937   HOWTO (R_M32R_COPY,		/* type */
    938 	 0,			/* rightshift */
    939 	 4,			/* size */
    940 	 32,			/* bitsize */
    941 	 false,			/* pc_relative */
    942 	 0,			/* bitpos */
    943 	 complain_overflow_bitfield, /* complain_on_overflow */
    944 	 bfd_elf_generic_reloc, /* special_function */
    945 	 "R_M32R_COPY",		/* name */
    946 	 false,			/* partial_inplace */
    947 	 0xffffffff,		/* src_mask */
    948 	 0xffffffff,		/* dst_mask */
    949 	 false),		/* pcrel_offset */
    950 
    951   /* Like R_M32R_24, but used when setting global offset table
    952      entries.  */
    953   HOWTO (R_M32R_GLOB_DAT,	/* type */
    954 	 0,			/* rightshift */
    955 	 4,			/* size */
    956 	 32,			/* bitsize */
    957 	 false,			/* pc_relative */
    958 	 0,			/* bitpos */
    959 	 complain_overflow_bitfield, /* complain_on_overflow */
    960 	 bfd_elf_generic_reloc, /* special_function */
    961 	 "R_M32R_GLOB_DAT",	/* name */
    962 	 false,			/* partial_inplace */
    963 	 0xffffffff,		/* src_mask */
    964 	 0xffffffff,		/* dst_mask */
    965 	 false),		/* pcrel_offset */
    966 
    967   /* Marks a procedure linkage table entry for a symbol.  */
    968   HOWTO (R_M32R_JMP_SLOT,	/* type */
    969 	 0,			/* rightshift */
    970 	 4,			/* size */
    971 	 32,			/* bitsize */
    972 	 false,			/* pc_relative */
    973 	 0,			/* bitpos */
    974 	 complain_overflow_bitfield, /* complain_on_overflow */
    975 	 bfd_elf_generic_reloc, /* special_function */
    976 	 "R_M32R_JMP_SLOT",	/* name */
    977 	 false,			/* partial_inplace */
    978 	 0xffffffff,		/* src_mask */
    979 	 0xffffffff,		/* dst_mask */
    980 	 false),		/* pcrel_offset */
    981 
    982   /* Used only by the dynamic linker.  When the object is run, this
    983      longword is set to the load address of the object, plus the
    984      addend.  */
    985   HOWTO (R_M32R_RELATIVE,	/* type */
    986 	 0,			/* rightshift */
    987 	 4,			/* size */
    988 	 32,			/* bitsize */
    989 	 false,			/* pc_relative */
    990 	 0,			/* bitpos */
    991 	 complain_overflow_bitfield, /* complain_on_overflow */
    992 	 bfd_elf_generic_reloc, /* special_function */
    993 	 "R_M32R_RELATIVE",	/* name */
    994 	 false,			/* partial_inplace */
    995 	 0xffffffff,		/* src_mask */
    996 	 0xffffffff,		/* dst_mask */
    997 	 false),		/* pcrel_offset */
    998 
    999   HOWTO (R_M32R_GOTOFF,		/* type */
   1000 	 0,			/* rightshift */
   1001 	 4,			/* size */
   1002 	 24,			/* bitsize */
   1003 	 false,			/* pc_relative */
   1004 	 0,			/* bitpos */
   1005 	 complain_overflow_bitfield, /* complain_on_overflow */
   1006 	 bfd_elf_generic_reloc, /* special_function */
   1007 	 "R_M32R_GOTOFF",	/* name */
   1008 	 false,			/* partial_inplace */
   1009 	 0xffffff,		/* src_mask */
   1010 	 0xffffff,		/* dst_mask */
   1011 	 false),		/* pcrel_offset */
   1012 
   1013   /* An PC Relative 24-bit relocation used when setting PIC offset
   1014      table register. */
   1015   HOWTO (R_M32R_GOTPC24,	/* type */
   1016 	 0,			/* rightshift */
   1017 	 4,			/* size */
   1018 	 24,			/* bitsize */
   1019 	 true,			/* pc_relative */
   1020 	 0,			/* bitpos */
   1021 	 complain_overflow_unsigned, /* complain_on_overflow */
   1022 	 bfd_elf_generic_reloc, /* special_function */
   1023 	 "R_M32R_GOTPC24",	/* name */
   1024 	 false,			/* partial_inplace */
   1025 	 0xffffff,		/* src_mask */
   1026 	 0xffffff,		/* dst_mask */
   1027 	 true),			/* pcrel_offset */
   1028 
   1029   /* Like R_M32R_HI16_ULO, but referring to the GOT table entry for
   1030      the symbol.  */
   1031   HOWTO (R_M32R_GOT16_HI_ULO,	/* type */
   1032 	 16,			/* rightshift */
   1033 	 4,			/* size */
   1034 	 16,			/* bitsize */
   1035 	 false,			/* pc_relative */
   1036 	 0,			/* bitpos */
   1037 	 complain_overflow_dont, /* complain_on_overflow */
   1038 	 bfd_elf_generic_reloc,	/* special_function */
   1039 	 "R_M32R_GOT16_HI_ULO",	/* name */
   1040 	 false,			/* partial_inplace */
   1041 	 0x0000ffff,		/* src_mask */
   1042 	 0x0000ffff,		/* dst_mask */
   1043 	 false),		/* pcrel_offset */
   1044 
   1045   /* Like R_M32R_HI16_SLO, but referring to the GOT table entry for
   1046      the symbol.  */
   1047   HOWTO (R_M32R_GOT16_HI_SLO,	/* type */
   1048 	 16,			/* rightshift */
   1049 	 4,			/* size */
   1050 	 16,			/* bitsize */
   1051 	 false,			/* pc_relative */
   1052 	 0,			/* bitpos */
   1053 	 complain_overflow_dont, /* complain_on_overflow */
   1054 	 bfd_elf_generic_reloc,	/* special_function */
   1055 	 "R_M32R_GOT16_HI_SLO",	/* name */
   1056 	 false,			/* partial_inplace */
   1057 	 0x0000ffff,		/* src_mask */
   1058 	 0x0000ffff,		/* dst_mask */
   1059 	 false),		/* pcrel_offset */
   1060 
   1061   /* Like R_M32R_LO16, but referring to the GOT table entry for
   1062      the symbol.  */
   1063   HOWTO (R_M32R_GOT16_LO,	/* type */
   1064 	 0,			/* rightshift */
   1065 	 4,			/* size */
   1066 	 16,			/* bitsize */
   1067 	 false,			/* pc_relative */
   1068 	 0,			/* bitpos */
   1069 	 complain_overflow_dont, /* complain_on_overflow */
   1070 	 bfd_elf_generic_reloc,	/* special_function */
   1071 	 "R_M32R_GOT16_LO",	/* name */
   1072 	 false,			/* partial_inplace */
   1073 	 0x0000ffff,		/* src_mask */
   1074 	 0x0000ffff,		/* dst_mask */
   1075 	 false),		/* pcrel_offset */
   1076 
   1077   /* An PC Relative relocation used when setting PIC offset table register.
   1078      Like R_M32R_HI16_ULO, but referring to the GOT table entry for
   1079      the symbol.  */
   1080   HOWTO (R_M32R_GOTPC_HI_ULO,	/* type */
   1081 	 16,			/* rightshift */
   1082 	 4,			/* size */
   1083 	 16,			/* bitsize */
   1084 	 false,			/* pc_relative */
   1085 	 0,			/* bitpos */
   1086 	 complain_overflow_dont, /* complain_on_overflow */
   1087 	 bfd_elf_generic_reloc,	/* special_function */
   1088 	 "R_M32R_GOTPC_HI_ULO",	/* name */
   1089 	 false,			/* partial_inplace */
   1090 	 0x0000ffff,		/* src_mask */
   1091 	 0x0000ffff,		/* dst_mask */
   1092 	 true),			/* pcrel_offset */
   1093 
   1094   /* An PC Relative relocation used when setting PIC offset table register.
   1095      Like R_M32R_HI16_SLO, but referring to the GOT table entry for
   1096      the symbol.  */
   1097   HOWTO (R_M32R_GOTPC_HI_SLO,	/* type */
   1098 	 16,			/* rightshift */
   1099 	 4,			/* size */
   1100 	 16,			/* bitsize */
   1101 	 false,			/* pc_relative */
   1102 	 0,			/* bitpos */
   1103 	 complain_overflow_dont, /* complain_on_overflow */
   1104 	 bfd_elf_generic_reloc,	/* special_function */
   1105 	 "R_M32R_GOTPC_HI_SLO",	/* name */
   1106 	 false,			/* partial_inplace */
   1107 	 0x0000ffff,		/* src_mask */
   1108 	 0x0000ffff,		/* dst_mask */
   1109 	 true),			/* pcrel_offset */
   1110 
   1111   /* An PC Relative relocation used when setting PIC offset table register.
   1112      Like R_M32R_LO16, but referring to the GOT table entry for
   1113      the symbol.  */
   1114   HOWTO (R_M32R_GOTPC_LO,	/* type */
   1115 	 0,			/* rightshift */
   1116 	 4,			/* size */
   1117 	 16,			/* bitsize */
   1118 	 false,			/* pc_relative */
   1119 	 0,			/* bitpos */
   1120 	 complain_overflow_dont, /* complain_on_overflow */
   1121 	 bfd_elf_generic_reloc,	/* special_function */
   1122 	 "R_M32R_GOTPC_LO",	/* name */
   1123 	 false,			/* partial_inplace */
   1124 	 0x0000ffff,		/* src_mask */
   1125 	 0x0000ffff,		/* dst_mask */
   1126 	 true),			/* pcrel_offset */
   1127 
   1128   HOWTO (R_M32R_GOTOFF_HI_ULO,	/* type */
   1129 	 16,			/* rightshift */
   1130 	 4,			/* size */
   1131 	 16,			/* bitsize */
   1132 	 false,			/* pc_relative */
   1133 	 0,			/* bitpos */
   1134 	 complain_overflow_dont, /* complain_on_overflow */
   1135 	 bfd_elf_generic_reloc,	/* special_function */
   1136 	 "R_M32R_GOTOFF_HI_ULO",/* name */
   1137 	 false,			/* partial_inplace */
   1138 	 0x0000ffff,		/* src_mask */
   1139 	 0x0000ffff,		/* dst_mask */
   1140 	 false),		/* pcrel_offset */
   1141 
   1142   HOWTO (R_M32R_GOTOFF_HI_SLO,	/* type */
   1143 	 16,			/* rightshift */
   1144 	 4,			/* size */
   1145 	 16,			/* bitsize */
   1146 	 false,			/* pc_relative */
   1147 	 0,			/* bitpos */
   1148 	 complain_overflow_dont, /* complain_on_overflow */
   1149 	 bfd_elf_generic_reloc,	/* special_function */
   1150 	 "R_M32R_GOTOFF_HI_SLO",/* name */
   1151 	 false,			/* partial_inplace */
   1152 	 0x0000ffff,		/* src_mask */
   1153 	 0x0000ffff,		/* dst_mask */
   1154 	 false),		/* pcrel_offset */
   1155 
   1156   HOWTO (R_M32R_GOTOFF_LO,	/* type */
   1157 	 0,			/* rightshift */
   1158 	 4,			/* size */
   1159 	 16,			/* bitsize */
   1160 	 false,			/* pc_relative */
   1161 	 0,			/* bitpos */
   1162 	 complain_overflow_dont, /* complain_on_overflow */
   1163 	 bfd_elf_generic_reloc,	/* special_function */
   1164 	 "R_M32R_GOTOFF_LO",	/* name */
   1165 	 false,			/* partial_inplace */
   1166 	 0x0000ffff,		/* src_mask */
   1167 	 0x0000ffff,		/* dst_mask */
   1168 	 false),		/* pcrel_offset */
   1169 };
   1170 
   1171 /* Map BFD reloc types to M32R ELF reloc types.  */
   1172 
   1173 struct m32r_reloc_map
   1174 {
   1175   bfd_reloc_code_real_type bfd_reloc_val;
   1176   unsigned char elf_reloc_val;
   1177 };
   1178 
   1179 #ifdef USE_M32R_OLD_RELOC
   1180 static const struct m32r_reloc_map m32r_reloc_map_old[] =
   1181 {
   1182   { BFD_RELOC_NONE, R_M32R_NONE },
   1183   { BFD_RELOC_16, R_M32R_16 },
   1184   { BFD_RELOC_32, R_M32R_32 },
   1185   { BFD_RELOC_M32R_24, R_M32R_24 },
   1186   { BFD_RELOC_M32R_10_PCREL, R_M32R_10_PCREL },
   1187   { BFD_RELOC_M32R_18_PCREL, R_M32R_18_PCREL },
   1188   { BFD_RELOC_M32R_26_PCREL, R_M32R_26_PCREL },
   1189   { BFD_RELOC_M32R_HI16_ULO, R_M32R_HI16_ULO },
   1190   { BFD_RELOC_M32R_HI16_SLO, R_M32R_HI16_SLO },
   1191   { BFD_RELOC_M32R_LO16, R_M32R_LO16 },
   1192   { BFD_RELOC_M32R_SDA16, R_M32R_SDA16 },
   1193   { BFD_RELOC_VTABLE_INHERIT, R_M32R_GNU_VTINHERIT },
   1194   { BFD_RELOC_VTABLE_ENTRY, R_M32R_GNU_VTENTRY },
   1195 };
   1196 #else
   1197 static const struct m32r_reloc_map m32r_reloc_map[] =
   1198 {
   1199   { BFD_RELOC_NONE, R_M32R_NONE },
   1200   { BFD_RELOC_16, R_M32R_16_RELA },
   1201   { BFD_RELOC_32, R_M32R_32_RELA },
   1202   { BFD_RELOC_M32R_24, R_M32R_24_RELA },
   1203   { BFD_RELOC_M32R_10_PCREL, R_M32R_10_PCREL_RELA },
   1204   { BFD_RELOC_M32R_18_PCREL, R_M32R_18_PCREL_RELA },
   1205   { BFD_RELOC_M32R_26_PCREL, R_M32R_26_PCREL_RELA },
   1206   { BFD_RELOC_M32R_HI16_ULO, R_M32R_HI16_ULO_RELA },
   1207   { BFD_RELOC_M32R_HI16_SLO, R_M32R_HI16_SLO_RELA },
   1208   { BFD_RELOC_M32R_LO16, R_M32R_LO16_RELA },
   1209   { BFD_RELOC_M32R_SDA16, R_M32R_SDA16_RELA },
   1210   { BFD_RELOC_VTABLE_INHERIT, R_M32R_RELA_GNU_VTINHERIT },
   1211   { BFD_RELOC_VTABLE_ENTRY, R_M32R_RELA_GNU_VTENTRY },
   1212   { BFD_RELOC_32_PCREL, R_M32R_REL32 },
   1213 
   1214   { BFD_RELOC_M32R_GOT24, R_M32R_GOT24 },
   1215   { BFD_RELOC_M32R_26_PLTREL, R_M32R_26_PLTREL },
   1216   { BFD_RELOC_M32R_COPY, R_M32R_COPY },
   1217   { BFD_RELOC_M32R_GLOB_DAT, R_M32R_GLOB_DAT },
   1218   { BFD_RELOC_M32R_JMP_SLOT, R_M32R_JMP_SLOT },
   1219   { BFD_RELOC_M32R_RELATIVE, R_M32R_RELATIVE },
   1220   { BFD_RELOC_M32R_GOTOFF, R_M32R_GOTOFF },
   1221   { BFD_RELOC_M32R_GOTPC24, R_M32R_GOTPC24 },
   1222   { BFD_RELOC_M32R_GOT16_HI_ULO, R_M32R_GOT16_HI_ULO },
   1223   { BFD_RELOC_M32R_GOT16_HI_SLO, R_M32R_GOT16_HI_SLO },
   1224   { BFD_RELOC_M32R_GOT16_LO, R_M32R_GOT16_LO },
   1225   { BFD_RELOC_M32R_GOTPC_HI_ULO, R_M32R_GOTPC_HI_ULO },
   1226   { BFD_RELOC_M32R_GOTPC_HI_SLO, R_M32R_GOTPC_HI_SLO },
   1227   { BFD_RELOC_M32R_GOTPC_LO, R_M32R_GOTPC_LO },
   1228   { BFD_RELOC_M32R_GOTOFF_HI_ULO, R_M32R_GOTOFF_HI_ULO },
   1229   { BFD_RELOC_M32R_GOTOFF_HI_SLO, R_M32R_GOTOFF_HI_SLO },
   1230   { BFD_RELOC_M32R_GOTOFF_LO, R_M32R_GOTOFF_LO },
   1231 };
   1232 #endif
   1233 
   1234 static reloc_howto_type *
   1235 bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
   1236 				 bfd_reloc_code_real_type code)
   1237 {
   1238   unsigned int i;
   1239 
   1240 #ifdef USE_M32R_OLD_RELOC
   1241   for (i = 0;
   1242        i < sizeof (m32r_reloc_map_old) / sizeof (struct m32r_reloc_map);
   1243        i++)
   1244     if (m32r_reloc_map_old[i].bfd_reloc_val == code)
   1245       return &m32r_elf_howto_table[m32r_reloc_map_old[i].elf_reloc_val];
   1246 
   1247 #else /* ! USE_M32R_OLD_RELOC */
   1248 
   1249   for (i = 0;
   1250        i < sizeof (m32r_reloc_map) / sizeof (struct m32r_reloc_map);
   1251        i++)
   1252     if (m32r_reloc_map[i].bfd_reloc_val == code)
   1253       return &m32r_elf_howto_table[m32r_reloc_map[i].elf_reloc_val];
   1254 #endif
   1255 
   1256   return NULL;
   1257 }
   1258 
   1259 static reloc_howto_type *
   1260 bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
   1261 				 const char *r_name)
   1262 {
   1263   unsigned int i;
   1264 
   1265   for (i = 0;
   1266        i < sizeof (m32r_elf_howto_table) / sizeof (m32r_elf_howto_table[0]);
   1267        i++)
   1268     if (m32r_elf_howto_table[i].name != NULL
   1269 	&& strcasecmp (m32r_elf_howto_table[i].name, r_name) == 0)
   1270       return &m32r_elf_howto_table[i];
   1271 
   1272   return NULL;
   1273 }
   1274 
   1275 /* Set the howto pointer for an M32R ELF reloc.  */
   1276 
   1277 static bool
   1278 m32r_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
   1279 			arelent *cache_ptr,
   1280 			Elf_Internal_Rela *dst)
   1281 {
   1282   unsigned int r_type;
   1283 
   1284   r_type = ELF32_R_TYPE (dst->r_info);
   1285   if (r_type > (unsigned int) R_M32R_GNU_VTENTRY)
   1286     {
   1287       /* xgettext:c-format */
   1288       _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
   1289 			  abfd, r_type);
   1290       bfd_set_error (bfd_error_bad_value);
   1291       return false;
   1292     }
   1293   cache_ptr->howto = &m32r_elf_howto_table[r_type];
   1294   return true;
   1295 }
   1296 
   1297 static bool
   1298 m32r_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
   1299 		    arelent *cache_ptr,
   1300 		    Elf_Internal_Rela *dst)
   1301 {
   1302   unsigned int r_type = ELF32_R_TYPE (dst->r_info);
   1303 
   1304   if (r_type == (unsigned int) R_M32R_NONE
   1305       || ((r_type > (unsigned int) R_M32R_GNU_VTENTRY)
   1306 	  && (r_type < (unsigned int) R_M32R_max)))
   1307     {
   1308       cache_ptr->howto = &m32r_elf_howto_table[r_type];
   1309       return true;
   1310     }
   1311 
   1312   /* xgettext:c-format */
   1313   _bfd_error_handler (_("%pB: unsupported relocation type %#x"), abfd, r_type);
   1314   bfd_set_error (bfd_error_bad_value);
   1315   return false;
   1316 }
   1317 
   1318 
   1319 /* Given a BFD section, try to locate the corresponding ELF section
   1321    index.  */
   1322 
   1323 static bool
   1324 _bfd_m32r_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
   1325 					asection *sec,
   1326 					int *retval)
   1327 {
   1328   if (strcmp (bfd_section_name (sec), ".scommon") == 0)
   1329     {
   1330       *retval = SHN_M32R_SCOMMON;
   1331       return true;
   1332     }
   1333   return false;
   1334 }
   1335 
   1336 /* M32R ELF uses two common sections.  One is the usual one, and the other
   1337    is for small objects.  All the small objects are kept together, and then
   1338    referenced via one register, which yields faster assembler code.  It is
   1339    up to the compiler to emit an instruction to load the register with
   1340    _SDA_BASE.  This is what we use for the small common section.  This
   1341    approach is copied from elf32-mips.c.  */
   1342 static asection m32r_elf_scom_section;
   1343 static const asymbol m32r_elf_scom_symbol =
   1344   GLOBAL_SYM_INIT (".scommon", &m32r_elf_scom_section);
   1345 static asection m32r_elf_scom_section =
   1346   BFD_FAKE_SECTION (m32r_elf_scom_section, &m32r_elf_scom_symbol,
   1347 		    ".scommon", 0, SEC_IS_COMMON | SEC_SMALL_DATA);
   1348 
   1349 /* Handle the special M32R section numbers that a symbol may use.  */
   1350 
   1351 static void
   1352 _bfd_m32r_elf_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, asymbol *asym)
   1353 {
   1354   elf_symbol_type *elfsym = (elf_symbol_type *) asym;
   1355 
   1356   switch (elfsym->internal_elf_sym.st_shndx)
   1357     {
   1358     case SHN_M32R_SCOMMON:
   1359       asym->section = &m32r_elf_scom_section;
   1360       asym->value = elfsym->internal_elf_sym.st_size;
   1361       break;
   1362     }
   1363 }
   1364 
   1365 /* Hook called by the linker routine which adds symbols from an object
   1366    file.  We must handle the special M32R section numbers here.
   1367    We also keep watching for whether we need to create the sdata special
   1368    linker sections.  */
   1369 
   1370 static bool
   1371 m32r_elf_add_symbol_hook (bfd *abfd,
   1372 			  struct bfd_link_info *info,
   1373 			  Elf_Internal_Sym *sym,
   1374 			  const char **namep,
   1375 			  flagword *flagsp ATTRIBUTE_UNUSED,
   1376 			  asection **secp,
   1377 			  bfd_vma *valp)
   1378 {
   1379   if (! bfd_link_relocatable (info)
   1380       && (*namep)[0] == '_' && (*namep)[1] == 'S'
   1381       && strcmp (*namep, "_SDA_BASE_") == 0
   1382       && is_elf_hash_table (info->hash))
   1383     {
   1384       /* This is simpler than using _bfd_elf_create_linker_section
   1385 	 (our needs are simpler than ppc's needs).  Also
   1386 	 _bfd_elf_create_linker_section currently has a bug where if a .sdata
   1387 	 section already exists a new one is created that follows it which
   1388 	 screws of _SDA_BASE_ address calcs because output_offset != 0.  */
   1389       struct elf_link_hash_entry *h;
   1390       struct bfd_link_hash_entry *bh;
   1391       asection *s = bfd_get_section_by_name (abfd, ".sdata");
   1392 
   1393       /* The following code was cobbled from elf32-ppc.c and elflink.c.  */
   1394       if (s == NULL)
   1395 	{
   1396 	  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
   1397 			    | SEC_IN_MEMORY | SEC_LINKER_CREATED);
   1398 
   1399 	  s = bfd_make_section_anyway_with_flags (abfd, ".sdata",
   1400 						  flags);
   1401 	  if (s == NULL)
   1402 	    return false;
   1403 	  if (!bfd_set_section_alignment (s, 2))
   1404 	    return false;
   1405 	}
   1406 
   1407       bh = bfd_link_hash_lookup (info->hash, "_SDA_BASE_",
   1408 				 false, false, false);
   1409 
   1410       if ((bh == NULL || bh->type == bfd_link_hash_undefined)
   1411 	  && !(_bfd_generic_link_add_one_symbol (info,
   1412 						 abfd,
   1413 						 "_SDA_BASE_",
   1414 						 BSF_GLOBAL,
   1415 						 s,
   1416 						 (bfd_vma) 32768,
   1417 						 NULL,
   1418 						 false,
   1419 						 get_elf_backend_data (abfd)->collect,
   1420 						 &bh)))
   1421 	return false;
   1422       h = (struct elf_link_hash_entry *) bh;
   1423       h->type = STT_OBJECT;
   1424     }
   1425 
   1426   switch (sym->st_shndx)
   1427     {
   1428     case SHN_M32R_SCOMMON:
   1429       *secp = bfd_make_section_old_way (abfd, ".scommon");
   1430       (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA;
   1431       *valp = sym->st_size;
   1432       break;
   1433     }
   1434 
   1435   return true;
   1436 }
   1437 
   1438 /* We have to figure out the SDA_BASE value, so that we can adjust the
   1439    symbol value correctly.  We look up the symbol _SDA_BASE_ in the output
   1440    BFD.  If we can't find it, we're stuck.  We cache it in the ELF
   1441    target data.  We don't need to adjust the symbol value for an
   1442    external symbol if we are producing relocatable output.  */
   1443 
   1444 static bfd_reloc_status_type
   1445 m32r_elf_final_sda_base (bfd *output_bfd,
   1446 			 struct bfd_link_info *info,
   1447 			 const char **error_message,
   1448 			 bfd_vma *psb)
   1449 {
   1450   if (elf_gp (output_bfd) == 0)
   1451     {
   1452       struct bfd_link_hash_entry *h;
   1453 
   1454       h = bfd_link_hash_lookup (info->hash, "_SDA_BASE_", false, false, true);
   1455       if (h != NULL && h->type == bfd_link_hash_defined)
   1456 	elf_gp (output_bfd) = (h->u.def.value
   1457 			       + h->u.def.section->output_section->vma
   1458 			       + h->u.def.section->output_offset);
   1459       else
   1460 	{
   1461 	  /* Only get the error once.  */
   1462 	  *psb = elf_gp (output_bfd) = 4;
   1463 	  *error_message =
   1464 	    (const char *) _("SDA relocation when _SDA_BASE_ not defined");
   1465 	  return bfd_reloc_dangerous;
   1466 	}
   1467     }
   1468   *psb = elf_gp (output_bfd);
   1469   return bfd_reloc_ok;
   1470 }
   1471 
   1472 /* Return size of a PLT entry.  */
   1474 #define elf_m32r_sizeof_plt(info) PLT_ENTRY_SIZE
   1475 
   1476 /* The m32r linker needs to keep track of the number of relocs that it
   1477    decides to copy in check_relocs for each symbol.  This is so that
   1478    it can discard PC relative relocs if it doesn't need them when
   1479    linking with -Bsymbolic.  We store the information in a field
   1480    extending the regular ELF linker hash table.  */
   1481 
   1482 /* This structure keeps track of the number of PC relative relocs we
   1483    have copied for a given symbol.  */
   1484 
   1485 struct elf_m32r_pcrel_relocs_copied
   1486 {
   1487   /* Next section.  */
   1488   struct elf_m32r_pcrel_relocs_copied *next;
   1489   /* A section in dynobj.  */
   1490   asection *section;
   1491   /* Number of relocs copied in this section.  */
   1492   bfd_size_type count;
   1493 };
   1494 
   1495 /* Traverse an m32r ELF linker hash table.  */
   1496 
   1497 #define m32r_elf_link_hash_traverse(table, func, info)			\
   1498   (elf_link_hash_traverse						\
   1499    (&(table)->root,							\
   1500     (bool (*) (struct elf_link_hash_entry *, void *)) (func),		\
   1501     (info)))
   1502 
   1503 /* Get the m32r ELF linker hash table from a link_info structure.  */
   1504 
   1505 #define m32r_elf_hash_table(p) \
   1506   ((is_elf_hash_table ((p)->hash)					\
   1507     && elf_hash_table_id (elf_hash_table (p)) == M32R_ELF_DATA)		\
   1508    ? (struct elf_link_hash_table *) (p)->hash : NULL)
   1509 
   1510 /* Create an m32r ELF linker hash table.  */
   1511 
   1512 static struct bfd_link_hash_table *
   1513 m32r_elf_link_hash_table_create (bfd *abfd)
   1514 {
   1515   struct elf_link_hash_table *ret;
   1516   size_t amt = sizeof (struct elf_link_hash_table);
   1517 
   1518   ret = bfd_zmalloc (amt);
   1519   if (ret == NULL)
   1520     return NULL;
   1521 
   1522   if (!_bfd_elf_link_hash_table_init (ret, abfd,
   1523 				      _bfd_elf_link_hash_newfunc,
   1524 				      sizeof (struct elf_link_hash_entry),
   1525 				      M32R_ELF_DATA))
   1526     {
   1527       free (ret);
   1528       return NULL;
   1529     }
   1530 
   1531   return &ret->root;
   1532 }
   1533 
   1534 /* Create dynamic sections when linking against a dynamic object.  */
   1535 
   1536 static bool
   1537 m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   1538 {
   1539   struct elf_link_hash_table *htab;
   1540   flagword flags, pltflags;
   1541   asection *s;
   1542   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
   1543   int ptralign = 2; /* 32bit */
   1544 
   1545   htab = m32r_elf_hash_table (info);
   1546   if (htab == NULL)
   1547     return false;
   1548 
   1549   /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
   1550      .rel[a].bss sections.  */
   1551   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
   1552 	   | SEC_LINKER_CREATED);
   1553 
   1554   pltflags = flags;
   1555   pltflags |= SEC_CODE;
   1556   if (bed->plt_not_loaded)
   1557     pltflags &= ~ (SEC_LOAD | SEC_HAS_CONTENTS);
   1558   if (bed->plt_readonly)
   1559     pltflags |= SEC_READONLY;
   1560 
   1561   s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
   1562   htab->splt = s;
   1563   if (s == NULL
   1564       || !bfd_set_section_alignment (s, bed->plt_alignment))
   1565     return false;
   1566 
   1567   if (bed->want_plt_sym)
   1568     {
   1569       /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
   1570 	 .plt section.  */
   1571       struct bfd_link_hash_entry *bh = NULL;
   1572       struct elf_link_hash_entry *h;
   1573 
   1574       if (! (_bfd_generic_link_add_one_symbol
   1575 	     (info, abfd, "_PROCEDURE_LINKAGE_TABLE_", BSF_GLOBAL, s,
   1576 	      (bfd_vma) 0, NULL, false,
   1577 	      get_elf_backend_data (abfd)->collect, &bh)))
   1578 	return false;
   1579       h = (struct elf_link_hash_entry *) bh;
   1580       h->def_regular = 1;
   1581       h->type = STT_OBJECT;
   1582       htab->hplt = h;
   1583 
   1584       if (bfd_link_pic (info)
   1585 	  && ! bfd_elf_link_record_dynamic_symbol (info, h))
   1586 	return false;
   1587     }
   1588 
   1589   s = bfd_make_section_anyway_with_flags (abfd,
   1590 					  bed->default_use_rela_p
   1591 					  ? ".rela.plt" : ".rel.plt",
   1592 					  flags | SEC_READONLY);
   1593   htab->srelplt = s;
   1594   if (s == NULL
   1595       || !bfd_set_section_alignment (s, ptralign))
   1596     return false;
   1597 
   1598   if (htab->sgot == NULL
   1599       && !_bfd_elf_create_got_section (abfd, info))
   1600     return false;
   1601 
   1602   if (bed->want_dynbss)
   1603     {
   1604       /* The .dynbss section is a place to put symbols which are defined
   1605 	 by dynamic objects, are referenced by regular objects, and are
   1606 	 not functions.  We must allocate space for them in the process
   1607 	 image and use a R_*_COPY reloc to tell the dynamic linker to
   1608 	 initialize them at run time.  The linker script puts the .dynbss
   1609 	 section into the .bss section of the final image.  */
   1610       s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
   1611 					      SEC_ALLOC | SEC_LINKER_CREATED);
   1612       htab->sdynbss = s;
   1613       if (s == NULL)
   1614 	return false;
   1615       /* The .rel[a].bss section holds copy relocs.  This section is not
   1616 	 normally needed.  We need to create it here, though, so that the
   1617 	 linker will map it to an output section.  We can't just create it
   1618 	 only if we need it, because we will not know whether we need it
   1619 	 until we have seen all the input files, and the first time the
   1620 	 main linker code calls BFD after examining all the input files
   1621 	 (size_dynamic_sections) the input sections have already been
   1622 	 mapped to the output sections.  If the section turns out not to
   1623 	 be needed, we can discard it later.  We will never need this
   1624 	 section when generating a shared object, since they do not use
   1625 	 copy relocs.  */
   1626       if (! bfd_link_pic (info))
   1627 	{
   1628 	  s = bfd_make_section_anyway_with_flags (abfd,
   1629 						  (bed->default_use_rela_p
   1630 						   ? ".rela.bss" : ".rel.bss"),
   1631 						  flags | SEC_READONLY);
   1632 	  htab->srelbss = s;
   1633 	  if (s == NULL
   1634 	      || !bfd_set_section_alignment (s, ptralign))
   1635 	    return false;
   1636 	}
   1637     }
   1638 
   1639   return true;
   1640 }
   1641 
   1642 
   1643 /* Adjust a symbol defined by a dynamic object and referenced by a
   1645    regular object.  The current definition is in some section of the
   1646    dynamic object, but we're not including those sections.  We have to
   1647    change the definition to something the rest of the link can
   1648    understand.  */
   1649 
   1650 static bool
   1651 m32r_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
   1652 				struct elf_link_hash_entry *h)
   1653 {
   1654   struct elf_link_hash_table *htab;
   1655   bfd *dynobj;
   1656   asection *s;
   1657 
   1658 #ifdef DEBUG_PIC
   1659   printf ("m32r_elf_adjust_dynamic_symbol()\n");
   1660 #endif
   1661 
   1662   dynobj = elf_hash_table (info)->dynobj;
   1663 
   1664   /* Make sure we know what is going on here.  */
   1665   BFD_ASSERT (dynobj != NULL
   1666 	      && (h->needs_plt
   1667 		  || h->is_weakalias
   1668 		  || (h->def_dynamic
   1669 		      && h->ref_regular
   1670 		      && !h->def_regular)));
   1671 
   1672   /* If this is a function, put it in the procedure linkage table.  We
   1673      will fill in the contents of the procedure linkage table later,
   1674      when we know the address of the .got section.  */
   1675   if (h->type == STT_FUNC
   1676       || h->needs_plt)
   1677     {
   1678       if (! bfd_link_pic (info)
   1679 	  && !h->def_dynamic
   1680 	  && !h->ref_dynamic
   1681 	  && h->root.type != bfd_link_hash_undefweak
   1682 	  && h->root.type != bfd_link_hash_undefined)
   1683 	{
   1684 	  /* This case can occur if we saw a PLT reloc in an input
   1685 	     file, but the symbol was never referred to by a dynamic
   1686 	     object.  In such a case, we don't actually need to build
   1687 	     a procedure linkage table, and we can just do a PCREL
   1688 	     reloc instead.  */
   1689 	  h->plt.offset = (bfd_vma) -1;
   1690 	  h->needs_plt = 0;
   1691 	}
   1692 
   1693       return true;
   1694     }
   1695   else
   1696     h->plt.offset = (bfd_vma) -1;
   1697 
   1698   /* If this is a weak symbol, and there is a real definition, the
   1699      processor independent code will have arranged for us to see the
   1700      real definition first, and we can just use the same value.  */
   1701   if (h->is_weakalias)
   1702     {
   1703       struct elf_link_hash_entry *def = weakdef (h);
   1704       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
   1705       h->root.u.def.section = def->root.u.def.section;
   1706       h->root.u.def.value = def->root.u.def.value;
   1707       return true;
   1708     }
   1709 
   1710   /* This is a reference to a symbol defined by a dynamic object which
   1711      is not a function.  */
   1712 
   1713   /* If we are creating a shared library, we must presume that the
   1714      only references to the symbol are via the global offset table.
   1715      For such cases we need not do anything here; the relocations will
   1716      be handled correctly by relocate_section.  */
   1717   if (bfd_link_pic (info))
   1718     return true;
   1719 
   1720   /* If there are no references to this symbol that do not use the
   1721      GOT, we don't need to generate a copy reloc.  */
   1722   if (!h->non_got_ref)
   1723     return true;
   1724 
   1725   /* If -z nocopyreloc was given, we won't generate them either.  */
   1726   if (0 && info->nocopyreloc)
   1727     {
   1728       h->non_got_ref = 0;
   1729       return true;
   1730     }
   1731 
   1732   /* If we don't find any dynamic relocs in read-only sections, then
   1733      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
   1734   if (0 && !_bfd_elf_readonly_dynrelocs (h))
   1735     {
   1736       h->non_got_ref = 0;
   1737       return true;
   1738     }
   1739 
   1740   /* We must allocate the symbol in our .dynbss section, which will
   1741      become part of the .bss section of the executable.  There will be
   1742      an entry for this symbol in the .dynsym section.  The dynamic
   1743      object will contain position independent code, so all references
   1744      from the dynamic object to this symbol will go through the global
   1745      offset table.  The dynamic linker will use the .dynsym entry to
   1746      determine the address it must put in the global offset table, so
   1747      both the dynamic object and the regular object will refer to the
   1748      same memory location for the variable.  */
   1749 
   1750   htab = m32r_elf_hash_table (info);
   1751   if (htab == NULL)
   1752     return false;
   1753 
   1754   s = htab->sdynbss;
   1755   BFD_ASSERT (s != NULL);
   1756 
   1757   /* We must generate a R_M32R_COPY reloc to tell the dynamic linker
   1758      to copy the initial value out of the dynamic object and into the
   1759      runtime process image.  We need to remember the offset into the
   1760      .rela.bss section we are going to use.  */
   1761   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
   1762     {
   1763       asection *srel;
   1764 
   1765       srel = htab->srelbss;
   1766       BFD_ASSERT (srel != NULL);
   1767       srel->size += sizeof (Elf32_External_Rela);
   1768       h->needs_copy = 1;
   1769     }
   1770 
   1771   return _bfd_elf_adjust_dynamic_copy (info, h, s);
   1772 }
   1773 
   1774 /* Allocate space in .plt, .got and associated reloc sections for
   1775    dynamic relocs.  */
   1776 
   1777 static bool
   1778 allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
   1779 {
   1780   struct bfd_link_info *info;
   1781   struct elf_link_hash_table *htab;
   1782   struct elf_dyn_relocs *p;
   1783 
   1784   if (h->root.type == bfd_link_hash_indirect)
   1785     return true;
   1786 
   1787   info = (struct bfd_link_info *) inf;
   1788   htab = m32r_elf_hash_table (info);
   1789   if (htab == NULL)
   1790     return false;
   1791 
   1792   if (htab->dynamic_sections_created
   1793       && h->plt.refcount > 0)
   1794     {
   1795       /* Make sure this symbol is output as a dynamic symbol.
   1796 	 Undefined weak syms won't yet be marked as dynamic.  */
   1797       if (h->dynindx == -1
   1798 	  && !h->forced_local)
   1799 	{
   1800 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
   1801 	    return false;
   1802 	}
   1803 
   1804       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
   1805 	{
   1806 	  asection *s = htab->splt;
   1807 
   1808 	  /* If this is the first .plt entry, make room for the special
   1809 	     first entry.  */
   1810 	  if (s->size == 0)
   1811 	    s->size += PLT_ENTRY_SIZE;
   1812 
   1813 	  h->plt.offset = s->size;
   1814 
   1815 	  /* If this symbol is not defined in a regular file, and we are
   1816 	     not generating a shared library, then set the symbol to this
   1817 	     location in the .plt.  This is required to make function
   1818 	     pointers compare as equal between the normal executable and
   1819 	     the shared library.  */
   1820 	  if (! bfd_link_pic (info)
   1821 	      && !h->def_regular)
   1822 	    {
   1823 	      h->root.u.def.section = s;
   1824 	      h->root.u.def.value = h->plt.offset;
   1825 	    }
   1826 
   1827 	  /* Make room for this entry.  */
   1828 	  s->size += PLT_ENTRY_SIZE;
   1829 
   1830 	  /* We also need to make an entry in the .got.plt section, which
   1831 	     will be placed in the .got section by the linker script.  */
   1832 	  htab->sgotplt->size += 4;
   1833 
   1834 	  /* We also need to make an entry in the .rel.plt section.  */
   1835 	  htab->srelplt->size += sizeof (Elf32_External_Rela);
   1836 	}
   1837       else
   1838 	{
   1839 	  h->plt.offset = (bfd_vma) -1;
   1840 	  h->needs_plt = 0;
   1841 	}
   1842     }
   1843   else
   1844     {
   1845       h->plt.offset = (bfd_vma) -1;
   1846       h->needs_plt = 0;
   1847     }
   1848 
   1849   if (h->got.refcount > 0)
   1850     {
   1851       asection *s;
   1852       bool dyn;
   1853 
   1854       /* Make sure this symbol is output as a dynamic symbol.
   1855 	 Undefined weak syms won't yet be marked as dynamic.  */
   1856       if (h->dynindx == -1
   1857 	  && !h->forced_local)
   1858 	{
   1859 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
   1860 	    return false;
   1861 	}
   1862 
   1863       s = htab->sgot;
   1864 
   1865       h->got.offset = s->size;
   1866       s->size += 4;
   1867       dyn = htab->dynamic_sections_created;
   1868       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h))
   1869 	htab->srelgot->size += sizeof (Elf32_External_Rela);
   1870     }
   1871   else
   1872     h->got.offset = (bfd_vma) -1;
   1873 
   1874   if (h->dyn_relocs == NULL)
   1875     return true;
   1876 
   1877   /* In the shared -Bsymbolic case, discard space allocated for
   1878      dynamic pc-relative relocs against symbols which turn out to be
   1879      defined in regular objects.  For the normal shared case, discard
   1880      space for pc-relative relocs that have become local due to symbol
   1881      visibility changes.  */
   1882 
   1883   if (bfd_link_pic (info))
   1884     {
   1885       if (h->def_regular
   1886 	  && (h->forced_local
   1887 	      || info->symbolic))
   1888 	{
   1889 	  struct elf_dyn_relocs **pp;
   1890 
   1891 	  for (pp = &h->dyn_relocs; (p = *pp) != NULL;)
   1892 	    {
   1893 	      p->count -= p->pc_count;
   1894 	      p->pc_count = 0;
   1895 	      if (p->count == 0)
   1896 		*pp = p->next;
   1897 	      else
   1898 		pp = &p->next;
   1899 	    }
   1900 	}
   1901 
   1902       /* Also discard relocs on undefined weak syms with non-default
   1903 	 visibility.  */
   1904       if (h->dyn_relocs != NULL
   1905 	  && h->root.type == bfd_link_hash_undefweak)
   1906 	{
   1907 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
   1908 	    h->dyn_relocs = NULL;
   1909 
   1910 	  /* Make sure undefined weak symbols are output as a dynamic
   1911 	     symbol in PIEs.  */
   1912 	  else if (h->dynindx == -1
   1913 		   && !h->forced_local)
   1914 	    {
   1915 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
   1916 		return false;
   1917 	    }
   1918 	}
   1919     }
   1920   else
   1921     {
   1922       /* For the non-shared case, discard space for relocs against
   1923 	 symbols which turn out to need copy relocs or are not
   1924 	 dynamic.  */
   1925 
   1926       if (!h->non_got_ref
   1927 	  && ((h->def_dynamic
   1928 	       && !h->def_regular)
   1929 	      || (htab->dynamic_sections_created
   1930 		  && (h->root.type == bfd_link_hash_undefweak
   1931 		      || h->root.type == bfd_link_hash_undefined))))
   1932 	{
   1933 	  /* Make sure this symbol is output as a dynamic symbol.
   1934 	     Undefined weak syms won't yet be marked as dynamic.  */
   1935 	  if (h->dynindx == -1
   1936 	      && !h->forced_local)
   1937 	    {
   1938 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
   1939 		return false;
   1940 	    }
   1941 
   1942 	  /* If that succeeded, we know we'll be keeping all the
   1943 	     relocs.  */
   1944 	  if (h->dynindx != -1)
   1945 	    goto keep;
   1946 	}
   1947 
   1948       h->dyn_relocs = NULL;
   1949 
   1950     keep: ;
   1951     }
   1952 
   1953   /* Finally, allocate space.  */
   1954   for (p = h->dyn_relocs; p != NULL; p = p->next)
   1955     {
   1956       asection *sreloc = elf_section_data (p->sec)->sreloc;
   1957       sreloc->size += p->count * sizeof (Elf32_External_Rela);
   1958     }
   1959 
   1960   return true;
   1961 }
   1962 
   1963 /* Set the sizes of the dynamic sections.  */
   1964 
   1965 static bool
   1966 m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
   1967 				struct bfd_link_info *info)
   1968 {
   1969   struct elf_link_hash_table *htab;
   1970   bfd *dynobj;
   1971   asection *s;
   1972   bool relocs;
   1973   bfd *ibfd;
   1974 
   1975 #ifdef DEBUG_PIC
   1976   printf ("m32r_elf_size_dynamic_sections()\n");
   1977 #endif
   1978 
   1979   htab = m32r_elf_hash_table (info);
   1980   if (htab == NULL)
   1981     return false;
   1982 
   1983   dynobj = htab->dynobj;
   1984   BFD_ASSERT (dynobj != NULL);
   1985 
   1986   if (htab->dynamic_sections_created)
   1987     {
   1988       /* Set the contents of the .interp section to the interpreter.  */
   1989       if (bfd_link_executable (info) && !info->nointerp)
   1990 	{
   1991 	  s = bfd_get_linker_section (dynobj, ".interp");
   1992 	  BFD_ASSERT (s != NULL);
   1993 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
   1994 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
   1995 	}
   1996     }
   1997 
   1998   /* Set up .got offsets for local syms, and space for local dynamic
   1999      relocs.  */
   2000   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
   2001     {
   2002       bfd_signed_vma *local_got;
   2003       bfd_signed_vma *end_local_got;
   2004       bfd_size_type locsymcount;
   2005       Elf_Internal_Shdr *symtab_hdr;
   2006       asection *srel;
   2007 
   2008       if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
   2009 	continue;
   2010 
   2011       for (s = ibfd->sections; s != NULL; s = s->next)
   2012 	{
   2013 	  struct elf_dyn_relocs *p;
   2014 
   2015 	  for (p = ((struct elf_dyn_relocs *)
   2016 		    elf_section_data (s)->local_dynrel);
   2017 	       p != NULL;
   2018 	       p = p->next)
   2019 	    {
   2020 	      if (! bfd_is_abs_section (p->sec)
   2021 		  && bfd_is_abs_section (p->sec->output_section))
   2022 		{
   2023 		  /* Input section has been discarded, either because
   2024 		     it is a copy of a linkonce section or due to
   2025 		     linker script /DISCARD/, so we'll be discarding
   2026 		     the relocs too.  */
   2027 		}
   2028 	      else if (p->count != 0)
   2029 		{
   2030 		  srel = elf_section_data (p->sec)->sreloc;
   2031 		  srel->size += p->count * sizeof (Elf32_External_Rela);
   2032 		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
   2033 		    info->flags |= DF_TEXTREL;
   2034 		}
   2035 	    }
   2036 	}
   2037 
   2038       local_got = elf_local_got_refcounts (ibfd);
   2039       if (!local_got)
   2040 	continue;
   2041 
   2042       symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
   2043       locsymcount = symtab_hdr->sh_info;
   2044       end_local_got = local_got + locsymcount;
   2045       s = htab->sgot;
   2046       srel = htab->srelgot;
   2047       for (; local_got < end_local_got; ++local_got)
   2048 	{
   2049 	  if (*local_got > 0)
   2050 	    {
   2051 	      *local_got = s->size;
   2052 	      s->size += 4;
   2053 	      if (bfd_link_pic (info))
   2054 		srel->size += sizeof (Elf32_External_Rela);
   2055 	    }
   2056 	  else
   2057 	    *local_got = (bfd_vma) -1;
   2058 	}
   2059     }
   2060 
   2061   /* Allocate global sym .plt and .got entries, and space for global
   2062      sym dynamic relocs.  */
   2063   elf_link_hash_traverse (htab, allocate_dynrelocs, info);
   2064 
   2065   /* We now have determined the sizes of the various dynamic sections.
   2066      Allocate memory for them.  */
   2067   relocs = false;
   2068   for (s = dynobj->sections; s != NULL; s = s->next)
   2069     {
   2070       if ((s->flags & SEC_LINKER_CREATED) == 0)
   2071 	continue;
   2072 
   2073       if (s == htab->splt
   2074 	  || s == htab->sgot
   2075 	  || s == htab->sgotplt
   2076 	  || s == htab->sdynbss)
   2077 	{
   2078 	  /* Strip this section if we don't need it; see the
   2079 	     comment below.  */
   2080 	}
   2081       else if (startswith (bfd_section_name (s), ".rela"))
   2082 	{
   2083 	  if (s->size != 0 && s != htab->srelplt)
   2084 	    relocs = true;
   2085 
   2086 	  /* We use the reloc_count field as a counter if we need
   2087 	     to copy relocs into the output file.  */
   2088 	  s->reloc_count = 0;
   2089 	}
   2090       else
   2091 	/* It's not one of our sections, so don't allocate space.  */
   2092 	continue;
   2093 
   2094       if (s->size == 0)
   2095 	{
   2096 	  /* If we don't need this section, strip it from the
   2097 	     output file.  This is mostly to handle .rela.bss and
   2098 	     .rela.plt.  We must create both sections in
   2099 	     create_dynamic_sections, because they must be created
   2100 	     before the linker maps input sections to output
   2101 	     sections.  The linker does that before
   2102 	     adjust_dynamic_symbol is called, and it is that
   2103 	     function which decides whether anything needs to go
   2104 	     into these sections.  */
   2105 	  s->flags |= SEC_EXCLUDE;
   2106 	  continue;
   2107 	}
   2108 
   2109       if ((s->flags & SEC_HAS_CONTENTS) == 0)
   2110 	continue;
   2111 
   2112       /* Allocate memory for the section contents.  We use bfd_zalloc
   2113 	 here in case unused entries are not reclaimed before the
   2114 	 section's contents are written out.  This should not happen,
   2115 	 but this way if it does, we get a R_M32R_NONE reloc instead
   2116 	 of garbage.  */
   2117       s->contents = bfd_zalloc (dynobj, s->size);
   2118       if (s->contents == NULL)
   2119 	return false;
   2120     }
   2121 
   2122   return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs);
   2123 }
   2124 
   2125 /* Relocate an M32R/D ELF section.
   2126    There is some attempt to make this function usable for many architectures,
   2127    both for RELA and REL type relocs, if only to serve as a learning tool.
   2128 
   2129    The RELOCATE_SECTION function is called by the new ELF backend linker
   2130    to handle the relocations for a section.
   2131 
   2132    The relocs are always passed as Rela structures; if the section
   2133    actually uses Rel structures, the r_addend field will always be
   2134    zero.
   2135 
   2136    This function is responsible for adjust the section contents as
   2137    necessary, and (if using Rela relocs and generating a
   2138    relocatable output file) adjusting the reloc addend as
   2139    necessary.
   2140 
   2141    This function does not have to worry about setting the reloc
   2142    address or the reloc symbol index.
   2143 
   2144    LOCAL_SYMS is a pointer to the swapped in local symbols.
   2145 
   2146    LOCAL_SECTIONS is an array giving the section in the input file
   2147    corresponding to the st_shndx field of each local symbol.
   2148 
   2149    The global hash table entry for the global symbols can be found
   2150    via elf_sym_hashes (input_bfd).
   2151 
   2152    When generating relocatable output, this function must handle
   2153    STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
   2154    going to be the section symbol corresponding to the output
   2155    section, which means that the addend must be adjusted
   2156    accordingly.  */
   2157 
   2158 static int
   2159 m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
   2160 			   struct bfd_link_info *info,
   2161 			   bfd *input_bfd,
   2162 			   asection *input_section,
   2163 			   bfd_byte *contents,
   2164 			   Elf_Internal_Rela *relocs,
   2165 			   Elf_Internal_Sym *local_syms,
   2166 			   asection **local_sections)
   2167 {
   2168   Elf_Internal_Shdr *symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   2169   struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
   2170   Elf_Internal_Rela *rel, *relend;
   2171   /* Assume success.  */
   2172   bool ret = true;
   2173   struct elf_link_hash_table *htab = m32r_elf_hash_table (info);
   2174   bfd_vma *local_got_offsets;
   2175   asection *sgot, *splt, *sreloc;
   2176   bfd_vma high_address = bfd_get_section_limit (input_bfd, input_section);
   2177 
   2178   if (htab == NULL)
   2179     return false;
   2180 
   2181   local_got_offsets = elf_local_got_offsets (input_bfd);
   2182 
   2183   sgot = htab->sgot;
   2184   splt = htab->splt;
   2185   sreloc = NULL;
   2186 
   2187   rel = relocs;
   2188   relend = relocs + input_section->reloc_count;
   2189   for (; rel < relend; rel++)
   2190     {
   2191       int r_type;
   2192       reloc_howto_type *howto;
   2193       unsigned long r_symndx;
   2194       struct elf_link_hash_entry *h;
   2195       /* We can't modify r_addend here as elf_link_input_bfd has an assert to
   2196 	 ensure it's zero (we use REL relocs, not RELA).  Therefore this
   2197 	 should be assigning zero to `addend', but for clarity we use
   2198 	 `r_addend'.  */
   2199       bfd_vma addend = rel->r_addend;
   2200       bfd_vma offset = rel->r_offset;
   2201       bfd_vma relocation;
   2202       Elf_Internal_Sym *sym;
   2203       asection *sec;
   2204       const char *sym_name;
   2205       bfd_reloc_status_type r;
   2206       const char *errmsg = NULL;
   2207       bool use_rel = false;
   2208 
   2209       h = NULL;
   2210       r_type = ELF32_R_TYPE (rel->r_info);
   2211       if (r_type < 0 || r_type >= (int) R_M32R_max)
   2212 	{
   2213 	  /* xgettext:c-format */
   2214 	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
   2215 			      input_bfd, (int) r_type);
   2216 	  bfd_set_error (bfd_error_bad_value);
   2217 	  ret = false;
   2218 	  continue;
   2219 	}
   2220 
   2221       if (   r_type == R_M32R_GNU_VTENTRY
   2222 	  || r_type == R_M32R_GNU_VTINHERIT
   2223 	  || r_type == R_M32R_NONE
   2224 	  || r_type == R_M32R_RELA_GNU_VTENTRY
   2225 	  || r_type == R_M32R_RELA_GNU_VTINHERIT)
   2226 	continue;
   2227 
   2228       if (r_type <= R_M32R_GNU_VTENTRY)
   2229 	use_rel = true;
   2230 
   2231       howto = m32r_elf_howto_table + r_type;
   2232       r_symndx = ELF32_R_SYM (rel->r_info);
   2233 
   2234       sym = NULL;
   2235       sec = NULL;
   2236       h = NULL;
   2237 
   2238       if (r_symndx < symtab_hdr->sh_info)
   2239 	{
   2240 	  /* Local symbol.  */
   2241 	  sym = local_syms + r_symndx;
   2242 	  sec = local_sections[r_symndx];
   2243 	  sym_name = "<local symbol>";
   2244 
   2245 	  if (!use_rel)
   2246 	    {
   2247 	      relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
   2248 	      addend = rel->r_addend;
   2249 	    }
   2250 	  else
   2251 	    {
   2252 	      relocation = (sec->output_section->vma
   2253 			    + sec->output_offset
   2254 			    + sym->st_value);
   2255 	    }
   2256 	}
   2257       else
   2258 	{
   2259 	  /* External symbol.  */
   2260 	  relocation = 0;
   2261 
   2262 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
   2263 
   2264 	  if (info->wrap_hash != NULL
   2265 	      && (input_section->flags & SEC_DEBUGGING) != 0)
   2266 	    h = ((struct elf_link_hash_entry *)
   2267 		 unwrap_hash_lookup (info, input_bfd, &h->root));
   2268 
   2269 	  while (h->root.type == bfd_link_hash_indirect
   2270 		 || h->root.type == bfd_link_hash_warning)
   2271 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
   2272 	  sym_name = h->root.root.string;
   2273 
   2274 	  if (h->root.type == bfd_link_hash_defined
   2275 	      || h->root.type == bfd_link_hash_defweak)
   2276 	    {
   2277 	      bool dyn;
   2278 	      sec = h->root.u.def.section;
   2279 
   2280 	      dyn = htab->dynamic_sections_created;
   2281 	      sec = h->root.u.def.section;
   2282 	      if (r_type == R_M32R_GOTPC24
   2283 		  || (r_type == R_M32R_GOTPC_HI_ULO
   2284 		      || r_type == R_M32R_GOTPC_HI_SLO
   2285 		      || r_type == R_M32R_GOTPC_LO)
   2286 		  || (r_type == R_M32R_26_PLTREL
   2287 		      && h->plt.offset != (bfd_vma) -1)
   2288 		  || ((r_type == R_M32R_GOT24
   2289 		       || r_type == R_M32R_GOT16_HI_ULO
   2290 		       || r_type == R_M32R_GOT16_HI_SLO
   2291 		       || r_type == R_M32R_GOT16_LO)
   2292 		      && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
   2293 							  bfd_link_pic (info),
   2294 							  h)
   2295 		      && (! bfd_link_pic (info)
   2296 			  || (! info->symbolic && h->dynindx != -1)
   2297 			  || !h->def_regular))
   2298 		  || (bfd_link_pic (info)
   2299 		      && ((! info->symbolic && h->dynindx != -1)
   2300 			  || !h->def_regular)
   2301 		      && (((r_type == R_M32R_16_RELA
   2302 			    || r_type == R_M32R_32_RELA
   2303 			    || r_type == R_M32R_24_RELA
   2304 			    || r_type == R_M32R_HI16_ULO_RELA
   2305 			    || r_type == R_M32R_HI16_SLO_RELA
   2306 			    || r_type == R_M32R_LO16_RELA)
   2307 			   && !h->forced_local)
   2308 			  || r_type == R_M32R_REL32
   2309 			  || r_type == R_M32R_10_PCREL_RELA
   2310 			  || r_type == R_M32R_18_PCREL_RELA
   2311 			  || r_type == R_M32R_26_PCREL_RELA)
   2312 		      && ((input_section->flags & SEC_ALLOC) != 0
   2313 			  /* DWARF will emit R_M32R_16(24,32) relocations
   2314 			     in its sections against symbols defined
   2315 			     externally in shared libraries.  We can't do
   2316 			     anything with them here.  */
   2317 			  || ((input_section->flags & SEC_DEBUGGING) != 0
   2318 			      && h->def_dynamic))))
   2319 		{
   2320 		  /* In these cases, we don't need the relocation
   2321 		     value.  We check specially because in some
   2322 		     obscure cases sec->output_section will be NULL.  */
   2323 		}
   2324 	      else if (sec->output_section != NULL)
   2325 		relocation = (h->root.u.def.value
   2326 			      + sec->output_section->vma
   2327 			      + sec->output_offset);
   2328 	      else if (!bfd_link_relocatable (info)
   2329 		       && (_bfd_elf_section_offset (output_bfd, info,
   2330 						    input_section,
   2331 						    rel->r_offset)
   2332 			   != (bfd_vma) -1))
   2333 		{
   2334 		  _bfd_error_handler
   2335 		    /* xgettext:c-format */
   2336 		    (_("%pB(%pA+%#" PRIx64 "): unresolvable %s relocation "
   2337 		       "against symbol `%s'"),
   2338 		     input_bfd,
   2339 		     input_section,
   2340 		     (uint64_t) rel->r_offset,
   2341 		     howto->name,
   2342 		     h->root.root.string);
   2343 		}
   2344 	    }
   2345 	  else if (h->root.type == bfd_link_hash_undefweak)
   2346 	    ;
   2347 	  else if (info->unresolved_syms_in_objects == RM_IGNORE
   2348 		   && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
   2349 	    ;
   2350 	  else if (!bfd_link_relocatable (info))
   2351             info->callbacks->undefined_symbol
   2352 	      (info, h->root.root.string, input_bfd, input_section, offset,
   2353 	       (info->unresolved_syms_in_objects == RM_DIAGNOSE
   2354 		&& !info->warn_unresolved_syms)
   2355 	       || ELF_ST_VISIBILITY (h->other));
   2356         }
   2357 
   2358       if (sec != NULL && discarded_section (sec))
   2359 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
   2360 					 rel, 1, relend, howto, 0, contents);
   2361 
   2362       if (bfd_link_relocatable (info) && !use_rel)
   2363 	{
   2364 	  /* This is a relocatable link.  We don't have to change
   2365 	     anything, unless the reloc is against a section symbol,
   2366 	     in which case we have to adjust according to where the
   2367 	     section symbol winds up in the output section.  */
   2368 	  if (sym != NULL && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
   2369 	    rel->r_addend += sec->output_offset;
   2370 	  continue;
   2371 	}
   2372 
   2373       if (bfd_link_relocatable (info) && use_rel)
   2374 	{
   2375 	  /* This is a relocatable link.  We don't have to change
   2376 	     anything, unless the reloc is against a section symbol,
   2377 	     in which case we have to adjust according to where the
   2378 	     section symbol winds up in the output section.  */
   2379 	  if (sym == NULL || ELF_ST_TYPE (sym->st_info) != STT_SECTION)
   2380 	    continue;
   2381 
   2382 	  addend += sec->output_offset;
   2383 
   2384 	  /* If partial_inplace, we need to store any additional addend
   2385 	     back in the section.  */
   2386 	  if (! howto->partial_inplace)
   2387 	    continue;
   2388 	  /* ??? Here is a nice place to call a special_function
   2389 	     like handler.  */
   2390 	  if (r_type != R_M32R_HI16_SLO && r_type != R_M32R_HI16_ULO)
   2391 	    r = _bfd_relocate_contents (howto, input_bfd,
   2392 					addend, contents + offset);
   2393 	  else
   2394 	    {
   2395 	      Elf_Internal_Rela *lorel;
   2396 
   2397 	      /* We allow an arbitrary number of HI16 relocs before the
   2398 		 LO16 reloc.  This permits gcc to emit the HI and LO relocs
   2399 		 itself.  */
   2400 	      for (lorel = rel + 1;
   2401 		   (lorel < relend
   2402 		    && (ELF32_R_TYPE (lorel->r_info) == R_M32R_HI16_SLO
   2403 			|| ELF32_R_TYPE (lorel->r_info) == R_M32R_HI16_ULO));
   2404 		   lorel++)
   2405 		continue;
   2406 	      if (lorel < relend
   2407 		  && ELF32_R_TYPE (lorel->r_info) == R_M32R_LO16)
   2408 		{
   2409 		  m32r_elf_relocate_hi16 (input_bfd, r_type, rel, lorel,
   2410 					  contents, addend);
   2411 		  r = bfd_reloc_ok;
   2412 		}
   2413 	      else
   2414 		r = _bfd_relocate_contents (howto, input_bfd,
   2415 					    addend, contents + offset);
   2416 	    }
   2417 	}
   2418       else
   2419 	{
   2420 	  /* Sanity check the address.  */
   2421 	  if (offset > high_address)
   2422 	    {
   2423 	      r = bfd_reloc_outofrange;
   2424 	      goto check_reloc;
   2425 	    }
   2426 
   2427 	  switch ((int) r_type)
   2428 	    {
   2429 	    case R_M32R_GOTOFF:
   2430 	      /* Relocation is relative to the start of the global offset
   2431 		 table (for ld24 rx, #uimm24). eg access at label+addend
   2432 
   2433 		 ld24 rx. #label@GOTOFF + addend
   2434 		 sub  rx, r12.  */
   2435 
   2436 	      BFD_ASSERT (sgot != NULL);
   2437 
   2438 	      relocation = -(relocation - sgot->output_section->vma);
   2439 	      rel->r_addend = -rel->r_addend;
   2440 	      break;
   2441 
   2442 	    case R_M32R_GOTOFF_HI_ULO:
   2443 	    case R_M32R_GOTOFF_HI_SLO:
   2444 	    case R_M32R_GOTOFF_LO:
   2445 	      BFD_ASSERT (sgot != NULL);
   2446 
   2447 	      relocation -= sgot->output_section->vma;
   2448 
   2449 	      if ((r_type == R_M32R_GOTOFF_HI_SLO)
   2450 		  && ((relocation + rel->r_addend) & 0x8000))
   2451 		rel->r_addend += 0x10000;
   2452 	      break;
   2453 
   2454 	    case R_M32R_GOTPC24:
   2455 	      /* .got(_GLOBAL_OFFSET_TABLE_) - pc relocation
   2456 		 ld24 rx,#_GLOBAL_OFFSET_TABLE_
   2457 	       */
   2458 	     relocation = sgot->output_section->vma;
   2459 	     break;
   2460 
   2461 	    case R_M32R_GOTPC_HI_ULO:
   2462 	    case R_M32R_GOTPC_HI_SLO:
   2463 	    case R_M32R_GOTPC_LO:
   2464 	      {
   2465 		/* .got(_GLOBAL_OFFSET_TABLE_) - pc relocation
   2466 		   bl .+4
   2467 		   seth rx,#high(_GLOBAL_OFFSET_TABLE_)
   2468 		   or3 rx,rx,#low(_GLOBAL_OFFSET_TABLE_ +4)
   2469 		   or
   2470 		   bl .+4
   2471 		   seth rx,#shigh(_GLOBAL_OFFSET_TABLE_)
   2472 		   add3 rx,rx,#low(_GLOBAL_OFFSET_TABLE_ +4)
   2473 		 */
   2474 		relocation = sgot->output_section->vma;
   2475 		relocation -= (input_section->output_section->vma
   2476 			       + input_section->output_offset
   2477 			       + rel->r_offset);
   2478 		if ((r_type == R_M32R_GOTPC_HI_SLO)
   2479 		     && ((relocation + rel->r_addend) & 0x8000))
   2480 		  rel->r_addend += 0x10000;
   2481 
   2482 		break;
   2483 	      }
   2484 	    case R_M32R_GOT16_HI_ULO:
   2485 	    case R_M32R_GOT16_HI_SLO:
   2486 	    case R_M32R_GOT16_LO:
   2487 	      /* Fall through.  */
   2488 	    case R_M32R_GOT24:
   2489 	      /* Relocation is to the entry for this symbol in the global
   2490 		 offset table.  */
   2491 	      BFD_ASSERT (sgot != NULL);
   2492 
   2493 	      if (h != NULL)
   2494 		{
   2495 		  bool dyn;
   2496 		  bfd_vma off;
   2497 
   2498 		  off = h->got.offset;
   2499 		  BFD_ASSERT (off != (bfd_vma) -1);
   2500 
   2501 		  dyn = htab->dynamic_sections_created;
   2502 		  if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
   2503 							 bfd_link_pic (info),
   2504 							 h)
   2505 		      || (bfd_link_pic (info)
   2506 			  && (info->symbolic
   2507 			      || h->dynindx == -1
   2508 			      || h->forced_local)
   2509 			  && h->def_regular))
   2510 		    {
   2511 		      /* This is actually a static link, or it is a
   2512 			 -Bsymbolic link and the symbol is defined
   2513 			 locally, or the symbol was forced to be local
   2514 			 because of a version file.  We must initialize
   2515 			 this entry in the global offset table.  Since the
   2516 			 offset must always be a multiple of 4, we use the
   2517 			 least significant bit to record whether we have
   2518 			 initialized it already.
   2519 
   2520 			 When doing a dynamic link, we create a .rela.got
   2521 			 relocation entry to initialize the value.  This
   2522 			 is done in the finish_dynamic_symbol routine.  */
   2523 		      if ((off & 1) != 0)
   2524 			off &= ~1;
   2525 		      else
   2526 			{
   2527 			  bfd_put_32 (output_bfd, relocation,
   2528 				      sgot->contents + off);
   2529 			  h->got.offset |= 1;
   2530 			}
   2531 		    }
   2532 
   2533 		  relocation = sgot->output_offset + off;
   2534 		}
   2535 	      else
   2536 		{
   2537 		  bfd_vma off;
   2538 		  bfd_byte *loc;
   2539 
   2540 		  BFD_ASSERT (local_got_offsets != NULL
   2541 			      && local_got_offsets[r_symndx] != (bfd_vma) -1);
   2542 
   2543 		  off = local_got_offsets[r_symndx];
   2544 
   2545 		  /* The offset must always be a multiple of 4.  We use
   2546 		     the least significant bit to record whether we have
   2547 		     already processed this entry.  */
   2548 		  if ((off & 1) != 0)
   2549 		    off &= ~1;
   2550 		  else
   2551 		    {
   2552 		      bfd_put_32 (output_bfd, relocation, sgot->contents + off);
   2553 
   2554 		      if (bfd_link_pic (info))
   2555 			{
   2556 			  asection *srelgot;
   2557 			  Elf_Internal_Rela outrel;
   2558 
   2559 			  /* We need to generate a R_M32R_RELATIVE reloc
   2560 			     for the dynamic linker.  */
   2561 			  srelgot = htab->srelgot;
   2562 			  BFD_ASSERT (srelgot != NULL);
   2563 
   2564 			  outrel.r_offset = (sgot->output_section->vma
   2565 					     + sgot->output_offset
   2566 					     + off);
   2567 			  outrel.r_info = ELF32_R_INFO (0, R_M32R_RELATIVE);
   2568 			  outrel.r_addend = relocation;
   2569 			  loc = srelgot->contents;
   2570 			  loc += srelgot->reloc_count * sizeof (Elf32_External_Rela);
   2571 			  bfd_elf32_swap_reloca_out (output_bfd, &outrel,loc);
   2572 			  ++srelgot->reloc_count;
   2573 			}
   2574 
   2575 		      local_got_offsets[r_symndx] |= 1;
   2576 		    }
   2577 
   2578 		  relocation = sgot->output_offset + off;
   2579 		}
   2580 	      if ((r_type == R_M32R_GOT16_HI_SLO)
   2581 		  && ((relocation + rel->r_addend) & 0x8000))
   2582 		rel->r_addend += 0x10000;
   2583 
   2584 	      break;
   2585 
   2586 	    case R_M32R_26_PLTREL:
   2587 	      /* Relocation is to the entry for this symbol in the
   2588 		 procedure linkage table.  */
   2589 
   2590 	      /* The native assembler will generate a 26_PLTREL reloc
   2591 		 for a local symbol if you assemble a call from one
   2592 		 section to another when using -K pic. */
   2593 	      if (h == NULL)
   2594 		break;
   2595 
   2596 	      if (h->forced_local)
   2597 		break;
   2598 
   2599 	      if (h->plt.offset == (bfd_vma) -1)
   2600 		/* We didn't make a PLT entry for this symbol.  This
   2601 		   happens when statically linking PIC code, or when
   2602 		   using -Bsymbolic.  */
   2603 		break;
   2604 
   2605 	      relocation = (splt->output_section->vma
   2606 			    + splt->output_offset
   2607 			    + h->plt.offset);
   2608 	      break;
   2609 
   2610 	    case R_M32R_HI16_SLO_RELA:
   2611 	      if ((relocation + rel->r_addend) & 0x8000)
   2612 		rel->r_addend += 0x10000;
   2613 	      /* Fall through.  */
   2614 
   2615 	    case R_M32R_16_RELA:
   2616 	    case R_M32R_24_RELA:
   2617 	    case R_M32R_32_RELA:
   2618 	    case R_M32R_REL32:
   2619 	    case R_M32R_10_PCREL_RELA:
   2620 	    case R_M32R_18_PCREL_RELA:
   2621 	    case R_M32R_26_PCREL_RELA:
   2622 	    case R_M32R_HI16_ULO_RELA:
   2623 	    case R_M32R_LO16_RELA:
   2624 	      if (bfd_link_pic (info)
   2625 		  && r_symndx != STN_UNDEF
   2626 		  && (input_section->flags & SEC_ALLOC) != 0
   2627 		  && ((   r_type != R_M32R_10_PCREL_RELA
   2628 		       && r_type != R_M32R_18_PCREL_RELA
   2629 		       && r_type != R_M32R_26_PCREL_RELA
   2630 		       && r_type != R_M32R_REL32)
   2631 		      || (h != NULL
   2632 			  && h->dynindx != -1
   2633 			  && (! info->symbolic
   2634 			      || !h->def_regular))))
   2635 		{
   2636 		  Elf_Internal_Rela outrel;
   2637 		  bool skip, relocate;
   2638 		  bfd_byte *loc;
   2639 
   2640 		  /* When generating a shared object, these relocations
   2641 		     are copied into the output file to be resolved at run
   2642 		     time.  */
   2643 		  if (sreloc == NULL)
   2644 		    {
   2645 		      sreloc = _bfd_elf_get_dynamic_reloc_section
   2646 			(input_bfd, input_section, /*rela?*/ true);
   2647 		      if (sreloc == NULL)
   2648 			return false;
   2649 		    }
   2650 
   2651 		  skip = false;
   2652 		  relocate = false;
   2653 
   2654 		  outrel.r_offset = _bfd_elf_section_offset (output_bfd,
   2655 							     info,
   2656 							     input_section,
   2657 							     rel->r_offset);
   2658 		  if (outrel.r_offset == (bfd_vma) -1)
   2659 		    skip = true;
   2660 		  else if (outrel.r_offset == (bfd_vma) -2)
   2661 		    skip = relocate = true;
   2662 		  outrel.r_offset += (input_section->output_section->vma
   2663 				      + input_section->output_offset);
   2664 
   2665 		  if (skip)
   2666 		    memset (&outrel, 0, sizeof outrel);
   2667 		  else if (   r_type == R_M32R_10_PCREL_RELA
   2668 			   || r_type == R_M32R_18_PCREL_RELA
   2669 			   || r_type == R_M32R_26_PCREL_RELA
   2670 			   || r_type == R_M32R_REL32)
   2671 		    {
   2672 		      BFD_ASSERT (h != NULL && h->dynindx != -1);
   2673 		      outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
   2674 		      outrel.r_addend = rel->r_addend;
   2675 		    }
   2676 		  else
   2677 		    {
   2678 		    /* h->dynindx may be -1 if this symbol was marked to
   2679 		       become local.  */
   2680 		    if (h == NULL
   2681 			|| ((info->symbolic || h->dynindx == -1)
   2682 			     && h->def_regular))
   2683 		      {
   2684 			relocate = true;
   2685 			outrel.r_info = ELF32_R_INFO (0, R_M32R_RELATIVE);
   2686 			outrel.r_addend = relocation + rel->r_addend;
   2687 		      }
   2688 		    else
   2689 		      {
   2690 			BFD_ASSERT (h->dynindx != -1);
   2691 			outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
   2692 			outrel.r_addend = relocation + rel->r_addend;
   2693 		      }
   2694 		    }
   2695 
   2696 		  loc = sreloc->contents;
   2697 		  loc += sreloc->reloc_count * sizeof (Elf32_External_Rela);
   2698 		  bfd_elf32_swap_reloca_out (output_bfd, &outrel,loc);
   2699 		  ++sreloc->reloc_count;
   2700 
   2701 		  /* If this reloc is against an external symbol, we do
   2702 		     not want to fiddle with the addend.  Otherwise, we
   2703 		     need to include the symbol value so that it becomes
   2704 		     an addend for the dynamic reloc.  */
   2705 		  if (! relocate)
   2706 		    continue;
   2707 		  break;
   2708 		}
   2709 	      else if (r_type != R_M32R_10_PCREL_RELA)
   2710 		break;
   2711 	      /* Fall through.  */
   2712 
   2713 	    case (int) R_M32R_10_PCREL :
   2714 	      r = m32r_elf_do_10_pcrel_reloc (input_bfd, howto, input_section,
   2715 					      contents, offset,
   2716 					      sec, relocation, addend);
   2717 	      goto check_reloc;
   2718 
   2719 	    case (int) R_M32R_HI16_SLO :
   2720 	    case (int) R_M32R_HI16_ULO :
   2721 	      {
   2722 		Elf_Internal_Rela *lorel;
   2723 
   2724 		/* We allow an arbitrary number of HI16 relocs before the
   2725 		   LO16 reloc.  This permits gcc to emit the HI and LO relocs
   2726 		   itself.  */
   2727 		for (lorel = rel + 1;
   2728 		     (lorel < relend
   2729 		      && (ELF32_R_TYPE (lorel->r_info) == R_M32R_HI16_SLO
   2730 			  || ELF32_R_TYPE (lorel->r_info) == R_M32R_HI16_ULO));
   2731 		     lorel++)
   2732 		  continue;
   2733 		if (lorel < relend
   2734 		    && ELF32_R_TYPE (lorel->r_info) == R_M32R_LO16)
   2735 		  {
   2736 		    m32r_elf_relocate_hi16 (input_bfd, r_type, rel, lorel,
   2737 					    contents, relocation + addend);
   2738 		    r = bfd_reloc_ok;
   2739 		  }
   2740 		else
   2741 		  r = _bfd_final_link_relocate (howto, input_bfd, input_section,
   2742 						contents, offset,
   2743 						relocation, addend);
   2744 	      }
   2745 
   2746 	      goto check_reloc;
   2747 
   2748 	    case (int) R_M32R_SDA16_RELA:
   2749 	    case (int) R_M32R_SDA16 :
   2750 	      {
   2751 		const char *name;
   2752 
   2753 		BFD_ASSERT (sec != NULL);
   2754 		name = bfd_section_name (sec);
   2755 
   2756 		if (   strcmp (name, ".sdata") == 0
   2757 		    || strcmp (name, ".sbss") == 0
   2758 		    || strcmp (name, ".scommon") == 0)
   2759 		  {
   2760 		    bfd_vma sda_base;
   2761 		    bfd *out_bfd = sec->output_section->owner;
   2762 
   2763 		    r = m32r_elf_final_sda_base (out_bfd, info,
   2764 						 &errmsg,
   2765 						 &sda_base);
   2766 		    if (r != bfd_reloc_ok)
   2767 		      {
   2768 			ret = false;
   2769 			goto check_reloc;
   2770 		      }
   2771 
   2772 		    /* At this point `relocation' contains the object's
   2773 		       address.  */
   2774 		    relocation -= sda_base;
   2775 		    /* Now it contains the offset from _SDA_BASE_.  */
   2776 		  }
   2777 		else
   2778 		  {
   2779 		    _bfd_error_handler
   2780 		      /* xgettext:c-format */
   2781 		      (_("%pB: the target (%s) of an %s relocation"
   2782 			 " is in the wrong section (%pA)"),
   2783 		       input_bfd,
   2784 		       sym_name,
   2785 		       m32r_elf_howto_table[(int) r_type].name,
   2786 		       sec);
   2787 		    /*bfd_set_error (bfd_error_bad_value); ??? why? */
   2788 		    ret = false;
   2789 		    continue;
   2790 		  }
   2791 	      }
   2792 	      /* Fall through.  */
   2793 
   2794 	    default : /* OLD_M32R_RELOC */
   2795 
   2796 	      r = _bfd_final_link_relocate (howto, input_bfd, input_section,
   2797 					    contents, offset,
   2798 					    relocation, addend);
   2799 	      goto check_reloc;
   2800 	    }
   2801 
   2802 	  r = _bfd_final_link_relocate (howto, input_bfd, input_section,
   2803 					contents, rel->r_offset,
   2804 					relocation, rel->r_addend);
   2805 
   2806 	}
   2807 
   2808     check_reloc:
   2809 
   2810       if (r != bfd_reloc_ok)
   2811 	{
   2812 	  /* FIXME: This should be generic enough to go in a utility.  */
   2813 	  const char *name;
   2814 
   2815 	  if (h != NULL)
   2816 	    name = h->root.root.string;
   2817 	  else
   2818 	    {
   2819 	      name = (bfd_elf_string_from_elf_section
   2820 		      (input_bfd, symtab_hdr->sh_link, sym->st_name));
   2821 	      if (name == NULL || *name == '\0')
   2822 		name = bfd_section_name (sec);
   2823 	    }
   2824 
   2825 	  if (errmsg != NULL)
   2826 	    goto common_error;
   2827 
   2828 	  switch (r)
   2829 	    {
   2830 	    case bfd_reloc_overflow:
   2831 	      (*info->callbacks->reloc_overflow)
   2832 		(info, (h ? &h->root : NULL), name, howto->name,
   2833 		 (bfd_vma) 0, input_bfd, input_section, offset);
   2834 	      break;
   2835 
   2836 	    case bfd_reloc_undefined:
   2837 	      (*info->callbacks->undefined_symbol)
   2838 		(info, name, input_bfd, input_section, offset, true);
   2839 	      break;
   2840 
   2841 	    case bfd_reloc_outofrange:
   2842 	      errmsg = _("internal error: out of range error");
   2843 	      goto common_error;
   2844 
   2845 	    case bfd_reloc_notsupported:
   2846 	      errmsg = _("internal error: unsupported relocation error");
   2847 	      goto common_error;
   2848 
   2849 	    case bfd_reloc_dangerous:
   2850 	      errmsg = _("internal error: dangerous error");
   2851 	      goto common_error;
   2852 
   2853 	    default:
   2854 	      errmsg = _("internal error: unknown error");
   2855 	      /* fall through */
   2856 
   2857 	    common_error:
   2858 	      (*info->callbacks->warning) (info, errmsg, name, input_bfd,
   2859 					   input_section, offset);
   2860 	      break;
   2861 	    }
   2862 	}
   2863     }
   2864 
   2865   return ret;
   2866 }
   2867 
   2868 /* Finish up dynamic symbol handling.  We set the contents of various
   2869    dynamic sections here.  */
   2870 
   2871 static bool
   2872 m32r_elf_finish_dynamic_symbol (bfd *output_bfd,
   2873 				struct bfd_link_info *info,
   2874 				struct elf_link_hash_entry *h,
   2875 				Elf_Internal_Sym *sym)
   2876 {
   2877   struct elf_link_hash_table *htab;
   2878   bfd_byte *loc;
   2879 
   2880 #ifdef DEBUG_PIC
   2881   printf ("m32r_elf_finish_dynamic_symbol()\n");
   2882 #endif
   2883 
   2884   htab = m32r_elf_hash_table (info);
   2885   if (htab == NULL)
   2886     return false;
   2887 
   2888   if (h->plt.offset != (bfd_vma) -1)
   2889     {
   2890       asection *splt;
   2891       asection *sgot;
   2892       asection *srela;
   2893 
   2894       bfd_vma plt_index;
   2895       bfd_vma got_offset;
   2896       Elf_Internal_Rela rela;
   2897 
   2898       /* This symbol has an entry in the procedure linkage table.  Set
   2899 	 it up.  */
   2900 
   2901       BFD_ASSERT (h->dynindx != -1);
   2902 
   2903       splt = htab->splt;
   2904       sgot = htab->sgotplt;
   2905       srela = htab->srelplt;
   2906       BFD_ASSERT (splt != NULL && sgot != NULL && srela != NULL);
   2907 
   2908       /* Get the index in the procedure linkage table which
   2909 	 corresponds to this symbol.  This is the index of this symbol
   2910 	 in all the symbols for which we are making plt entries.  The
   2911 	 first entry in the procedure linkage table is reserved.  */
   2912       plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1;
   2913 
   2914       /* Get the offset into the .got table of the entry that
   2915 	corresponds to this function.  Each .got entry is 4 bytes.
   2916 	The first three are reserved.  */
   2917       got_offset = (plt_index + 3) * 4;
   2918 
   2919       /* Fill in the entry in the procedure linkage table.  */
   2920       if (! bfd_link_pic (info))
   2921 	{
   2922 	  bfd_put_32 (output_bfd,
   2923 	      (PLT_ENTRY_WORD0b
   2924 	       + (((sgot->output_section->vma
   2925 		    + sgot->output_offset
   2926 		    + got_offset) >> 16) & 0xffff)),
   2927 	      splt->contents + h->plt.offset);
   2928 	  bfd_put_32 (output_bfd,
   2929 	      (PLT_ENTRY_WORD1b
   2930 	       + ((sgot->output_section->vma
   2931 		   + sgot->output_offset
   2932 		   + got_offset) & 0xffff)),
   2933 	      splt->contents + h->plt.offset + 4);
   2934 	  bfd_put_32 (output_bfd, PLT_ENTRY_WORD2,
   2935 	      splt->contents + h->plt.offset + 8);
   2936 	  bfd_put_32 (output_bfd,
   2937 	      (PLT_ENTRY_WORD3
   2938 	       + plt_index * sizeof (Elf32_External_Rela)),
   2939 	      splt->contents + h->plt.offset + 12);
   2940 	  bfd_put_32 (output_bfd,
   2941 	      (PLT_ENTRY_WORD4
   2942 	       + (((unsigned int) ((- (h->plt.offset + 16)) >> 2)) & 0xffffff)),
   2943 	      splt->contents + h->plt.offset + 16);
   2944 	}
   2945       else
   2946 	{
   2947 	  bfd_put_32 (output_bfd,
   2948 	      PLT_ENTRY_WORD0 + got_offset,
   2949 	      splt->contents + h->plt.offset);
   2950 	  bfd_put_32 (output_bfd, PLT_ENTRY_WORD1,
   2951 	      splt->contents + h->plt.offset + 4);
   2952 	  bfd_put_32 (output_bfd, PLT_ENTRY_WORD2,
   2953 	      splt->contents + h->plt.offset + 8);
   2954 	  bfd_put_32 (output_bfd,
   2955 	      (PLT_ENTRY_WORD3
   2956 	       + plt_index * sizeof (Elf32_External_Rela)),
   2957 	      splt->contents + h->plt.offset + 12);
   2958 	  bfd_put_32 (output_bfd,
   2959 	      (PLT_ENTRY_WORD4
   2960 	       + (((unsigned int) ((- (h->plt.offset + 16)) >> 2)) & 0xffffff)),
   2961 	      splt->contents + h->plt.offset + 16);
   2962 	}
   2963 
   2964       /* Fill in the entry in the global offset table.  */
   2965       bfd_put_32 (output_bfd,
   2966 		  (splt->output_section->vma
   2967 		   + splt->output_offset
   2968 		   + h->plt.offset
   2969 		   + 12), /* same offset */
   2970 		  sgot->contents + got_offset);
   2971 
   2972       /* Fill in the entry in the .rela.plt section.  */
   2973       rela.r_offset = (sgot->output_section->vma
   2974 		       + sgot->output_offset
   2975 		       + got_offset);
   2976       rela.r_info = ELF32_R_INFO (h->dynindx, R_M32R_JMP_SLOT);
   2977       rela.r_addend = 0;
   2978       loc = srela->contents;
   2979       loc += plt_index * sizeof (Elf32_External_Rela);
   2980       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
   2981 
   2982       if (!h->def_regular)
   2983 	{
   2984 	  /* Mark the symbol as undefined, rather than as defined in
   2985 	     the .plt section.  Leave the value alone.  */
   2986 	  sym->st_shndx = SHN_UNDEF;
   2987 	}
   2988     }
   2989 
   2990   if (h->got.offset != (bfd_vma) -1)
   2991     {
   2992       asection *sgot;
   2993       asection *srela;
   2994       Elf_Internal_Rela rela;
   2995 
   2996       /* This symbol has an entry in the global offset table.  Set it
   2997 	 up.  */
   2998 
   2999       sgot = htab->sgot;
   3000       srela = htab->srelgot;
   3001       BFD_ASSERT (sgot != NULL && srela != NULL);
   3002 
   3003       rela.r_offset = (sgot->output_section->vma
   3004 		       + sgot->output_offset
   3005 		       + (h->got.offset &~ 1));
   3006 
   3007       /* If this is a -Bsymbolic link, and the symbol is defined
   3008 	 locally, we just want to emit a RELATIVE reloc.  Likewise if
   3009 	 the symbol was forced to be local because of a version file.
   3010 	 The entry in the global offset table will already have been
   3011 	 initialized in the relocate_section function.  */
   3012       if (bfd_link_pic (info)
   3013 	  && (info->symbolic
   3014 	      || h->dynindx == -1
   3015 	      || h->forced_local)
   3016 	  && h->def_regular)
   3017 	{
   3018 	  rela.r_info = ELF32_R_INFO (0, R_M32R_RELATIVE);
   3019 	  rela.r_addend = (h->root.u.def.value
   3020 			   + h->root.u.def.section->output_section->vma
   3021 			   + h->root.u.def.section->output_offset);
   3022 	}
   3023       else
   3024 	{
   3025 	  BFD_ASSERT ((h->got.offset & 1) == 0);
   3026 	  bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
   3027 	  rela.r_info = ELF32_R_INFO (h->dynindx, R_M32R_GLOB_DAT);
   3028 	  rela.r_addend = 0;
   3029 	}
   3030 
   3031       loc = srela->contents;
   3032       loc += srela->reloc_count * sizeof (Elf32_External_Rela);
   3033       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
   3034       ++srela->reloc_count;
   3035     }
   3036 
   3037   if (h->needs_copy)
   3038     {
   3039       asection *s;
   3040       Elf_Internal_Rela rela;
   3041 
   3042       /* This symbols needs a copy reloc.  Set it up.  */
   3043 
   3044       BFD_ASSERT (h->dynindx != -1
   3045 		  && (h->root.type == bfd_link_hash_defined
   3046 		      || h->root.type == bfd_link_hash_defweak));
   3047 
   3048       s = bfd_get_linker_section (htab->dynobj, ".rela.bss");
   3049       BFD_ASSERT (s != NULL);
   3050 
   3051       rela.r_offset = (h->root.u.def.value
   3052 		       + h->root.u.def.section->output_section->vma
   3053 		       + h->root.u.def.section->output_offset);
   3054       rela.r_info = ELF32_R_INFO (h->dynindx, R_M32R_COPY);
   3055       rela.r_addend = 0;
   3056       loc = s->contents;
   3057       loc += s->reloc_count * sizeof (Elf32_External_Rela);
   3058       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
   3059       ++s->reloc_count;
   3060     }
   3061 
   3062   /* Mark some specially defined symbols as absolute.  */
   3063   if (h == htab->hdynamic || h == htab->hgot)
   3064     sym->st_shndx = SHN_ABS;
   3065 
   3066   return true;
   3067 }
   3068 
   3069 
   3070 /* Finish up the dynamic sections.  */
   3071 
   3072 static bool
   3073 m32r_elf_finish_dynamic_sections (bfd *output_bfd,
   3074 				  struct bfd_link_info *info)
   3075 {
   3076   struct elf_link_hash_table *htab;
   3077   bfd *dynobj;
   3078   asection *sdyn;
   3079   asection *sgot;
   3080 
   3081 #ifdef DEBUG_PIC
   3082   printf ("m32r_elf_finish_dynamic_sections()\n");
   3083 #endif
   3084 
   3085   htab = m32r_elf_hash_table (info);
   3086   if (htab == NULL)
   3087     return false;
   3088 
   3089   dynobj = htab->dynobj;
   3090 
   3091   sgot = htab->sgotplt;
   3092   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
   3093 
   3094   if (htab->dynamic_sections_created)
   3095     {
   3096       asection *splt;
   3097       Elf32_External_Dyn *dyncon, *dynconend;
   3098 
   3099       BFD_ASSERT (sgot != NULL && sdyn != NULL);
   3100 
   3101       dyncon = (Elf32_External_Dyn *) sdyn->contents;
   3102       dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
   3103 
   3104       for (; dyncon < dynconend; dyncon++)
   3105 	{
   3106 	  Elf_Internal_Dyn dyn;
   3107 	  asection *s;
   3108 
   3109 	  bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
   3110 
   3111 	  switch (dyn.d_tag)
   3112 	    {
   3113 	    default:
   3114 	      break;
   3115 
   3116 	    case DT_PLTGOT:
   3117 	      s = htab->sgotplt;
   3118 	      goto get_vma;
   3119 	    case DT_JMPREL:
   3120 	      s = htab->srelplt;
   3121 	    get_vma:
   3122 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
   3123 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
   3124 	      break;
   3125 
   3126 	    case DT_PLTRELSZ:
   3127 	      s = htab->srelplt;
   3128 	      dyn.d_un.d_val = s->size;
   3129 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
   3130 	      break;
   3131 	    }
   3132 	}
   3133 
   3134       /* Fill in the first entry in the procedure linkage table.  */
   3135       splt = htab->splt;
   3136       if (splt && splt->size > 0)
   3137 	{
   3138 	  if (bfd_link_pic (info))
   3139 	    {
   3140 	      bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD0, splt->contents);
   3141 	      bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD1, splt->contents + 4);
   3142 	      bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD2, splt->contents + 8);
   3143 	      bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD3, splt->contents + 12);
   3144 	      bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD4, splt->contents + 16);
   3145 	    }
   3146 	  else
   3147 	    {
   3148 	      unsigned long addr;
   3149 	      /* addr = .got + 4 */
   3150 	      addr = sgot->output_section->vma + sgot->output_offset + 4;
   3151 	      bfd_put_32 (output_bfd,
   3152 			  PLT0_ENTRY_WORD0 | ((addr >> 16) & 0xffff),
   3153 			  splt->contents);
   3154 	      bfd_put_32 (output_bfd,
   3155 			  PLT0_ENTRY_WORD1 | (addr & 0xffff),
   3156 			  splt->contents + 4);
   3157 	      bfd_put_32 (output_bfd, PLT0_ENTRY_WORD2, splt->contents + 8);
   3158 	      bfd_put_32 (output_bfd, PLT0_ENTRY_WORD3, splt->contents + 12);
   3159 	      bfd_put_32 (output_bfd, PLT0_ENTRY_WORD4, splt->contents + 16);
   3160 	    }
   3161 
   3162 	  elf_section_data (splt->output_section)->this_hdr.sh_entsize =
   3163 	    PLT_ENTRY_SIZE;
   3164 	}
   3165     }
   3166 
   3167   /* Fill in the first three entries in the global offset table.  */
   3168   if (sgot && sgot->size > 0)
   3169     {
   3170       if (sdyn == NULL)
   3171 	bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents);
   3172       else
   3173 	bfd_put_32 (output_bfd,
   3174 		    sdyn->output_section->vma + sdyn->output_offset,
   3175 		    sgot->contents);
   3176       bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 4);
   3177       bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 8);
   3178 
   3179       elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
   3180     }
   3181 
   3182   return true;
   3183 }
   3184 
   3185 
   3186 /* Set the right machine number.  */
   3188 
   3189 static bool
   3190 m32r_elf_object_p (bfd *abfd)
   3191 {
   3192   switch (elf_elfheader (abfd)->e_flags & EF_M32R_ARCH)
   3193     {
   3194     default:
   3195     case E_M32R_ARCH:   (void) bfd_default_set_arch_mach (abfd, bfd_arch_m32r, bfd_mach_m32r);  break;
   3196     case E_M32RX_ARCH:  (void) bfd_default_set_arch_mach (abfd, bfd_arch_m32r, bfd_mach_m32rx); break;
   3197     case E_M32R2_ARCH:  (void) bfd_default_set_arch_mach (abfd, bfd_arch_m32r, bfd_mach_m32r2); break;
   3198     }
   3199   return true;
   3200 }
   3201 
   3202 /* Store the machine number in the flags field.  */
   3203 
   3204 static bool
   3205 m32r_elf_final_write_processing (bfd *abfd)
   3206 {
   3207   unsigned long val;
   3208 
   3209   switch (bfd_get_mach (abfd))
   3210     {
   3211     default:
   3212     case bfd_mach_m32r:  val = E_M32R_ARCH; break;
   3213     case bfd_mach_m32rx: val = E_M32RX_ARCH; break;
   3214     case bfd_mach_m32r2: val = E_M32R2_ARCH; break;
   3215     }
   3216 
   3217   elf_elfheader (abfd)->e_flags &=~ EF_M32R_ARCH;
   3218   elf_elfheader (abfd)->e_flags |= val;
   3219   return _bfd_elf_final_write_processing (abfd);
   3220 }
   3221 
   3222 /* Function to keep M32R specific file flags.  */
   3223 
   3224 static bool
   3225 m32r_elf_set_private_flags (bfd *abfd, flagword flags)
   3226 {
   3227   BFD_ASSERT (!elf_flags_init (abfd)
   3228 	      || elf_elfheader (abfd)->e_flags == flags);
   3229 
   3230   elf_elfheader (abfd)->e_flags = flags;
   3231   elf_flags_init (abfd) = true;
   3232   return true;
   3233 }
   3234 
   3235 /* Merge backend specific data from an object file to the output
   3236    object file when linking.  */
   3237 
   3238 static bool
   3239 m32r_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
   3240 {
   3241   bfd *obfd = info->output_bfd;
   3242   flagword out_flags;
   3243   flagword in_flags;
   3244 
   3245   if (   bfd_get_flavour (ibfd) != bfd_target_elf_flavour
   3246       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
   3247     return true;
   3248 
   3249   in_flags  = elf_elfheader (ibfd)->e_flags;
   3250   out_flags = elf_elfheader (obfd)->e_flags;
   3251 
   3252   if (! elf_flags_init (obfd))
   3253     {
   3254       /* If the input is the default architecture then do not
   3255 	 bother setting the flags for the output architecture,
   3256 	 instead allow future merges to do this.  If no future
   3257 	 merges ever set these flags then they will retain their
   3258 	 unitialised values, which surprise surprise, correspond
   3259 	 to the default values.  */
   3260       if (bfd_get_arch_info (ibfd)->the_default)
   3261 	return true;
   3262 
   3263       elf_flags_init (obfd) = true;
   3264       elf_elfheader (obfd)->e_flags = in_flags;
   3265 
   3266       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
   3267 	  && bfd_get_arch_info (obfd)->the_default)
   3268 	return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
   3269 				  bfd_get_mach (ibfd));
   3270 
   3271       return true;
   3272     }
   3273 
   3274   /* Check flag compatibility.  */
   3275   if (in_flags == out_flags)
   3276     return true;
   3277 
   3278   if ((in_flags & EF_M32R_ARCH) != (out_flags & EF_M32R_ARCH))
   3279     {
   3280       if (   ((in_flags  & EF_M32R_ARCH) != E_M32R_ARCH)
   3281 	  || ((out_flags & EF_M32R_ARCH) == E_M32R_ARCH)
   3282 	  || ((in_flags  & EF_M32R_ARCH) == E_M32R2_ARCH))
   3283 	{
   3284 	  _bfd_error_handler
   3285 	    (_("%pB: instruction set mismatch with previous modules"), ibfd);
   3286 
   3287 	  bfd_set_error (bfd_error_bad_value);
   3288 	  return false;
   3289 	}
   3290     }
   3291 
   3292   return true;
   3293 }
   3294 
   3295 /* Display the flags field.  */
   3296 
   3297 static bool
   3298 m32r_elf_print_private_bfd_data (bfd *abfd, void * ptr)
   3299 {
   3300   FILE * file = (FILE *) ptr;
   3301 
   3302   BFD_ASSERT (abfd != NULL && ptr != NULL);
   3303 
   3304   _bfd_elf_print_private_bfd_data (abfd, ptr);
   3305 
   3306   fprintf (file, _("private flags = %lx"), elf_elfheader (abfd)->e_flags);
   3307 
   3308   switch (elf_elfheader (abfd)->e_flags & EF_M32R_ARCH)
   3309     {
   3310     default:
   3311     case E_M32R_ARCH:  fprintf (file, _(": m32r instructions"));  break;
   3312     case E_M32RX_ARCH: fprintf (file, _(": m32rx instructions")); break;
   3313     case E_M32R2_ARCH: fprintf (file, _(": m32r2 instructions")); break;
   3314     }
   3315 
   3316   fputc ('\n', file);
   3317 
   3318   return true;
   3319 }
   3320 
   3321 static asection *
   3322 m32r_elf_gc_mark_hook (asection *sec,
   3323 		       struct bfd_link_info *info,
   3324 		       Elf_Internal_Rela *rel,
   3325 		       struct elf_link_hash_entry *h,
   3326 		       Elf_Internal_Sym *sym)
   3327 {
   3328   if (h != NULL)
   3329     switch (ELF32_R_TYPE (rel->r_info))
   3330       {
   3331       case R_M32R_GNU_VTINHERIT:
   3332       case R_M32R_GNU_VTENTRY:
   3333       case R_M32R_RELA_GNU_VTINHERIT:
   3334       case R_M32R_RELA_GNU_VTENTRY:
   3335 	return NULL;
   3336       }
   3337 
   3338   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
   3339 }
   3340 
   3341 /* Look through the relocs for a section during the first phase.
   3342    Since we don't do .gots or .plts, we just need to consider the
   3343    virtual table relocs for gc.  */
   3344 
   3345 static bool
   3346 m32r_elf_check_relocs (bfd *abfd,
   3347 		       struct bfd_link_info *info,
   3348 		       asection *sec,
   3349 		       const Elf_Internal_Rela *relocs)
   3350 {
   3351   Elf_Internal_Shdr *symtab_hdr;
   3352   struct elf_link_hash_entry **sym_hashes;
   3353   const Elf_Internal_Rela *rel;
   3354   const Elf_Internal_Rela *rel_end;
   3355   struct elf_link_hash_table *htab;
   3356   bfd *dynobj;
   3357   asection *sreloc;
   3358 
   3359   if (bfd_link_relocatable (info))
   3360     return true;
   3361 
   3362   sreloc = NULL;
   3363   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   3364   sym_hashes = elf_sym_hashes (abfd);
   3365 
   3366   htab = m32r_elf_hash_table (info);
   3367   if (htab == NULL)
   3368     return false;
   3369 
   3370   dynobj = htab->dynobj;
   3371 
   3372   rel_end = relocs + sec->reloc_count;
   3373   for (rel = relocs; rel < rel_end; rel++)
   3374     {
   3375       int r_type;
   3376       struct elf_link_hash_entry *h;
   3377       unsigned long r_symndx;
   3378 
   3379       r_symndx = ELF32_R_SYM (rel->r_info);
   3380       r_type = ELF32_R_TYPE (rel->r_info);
   3381       if (r_symndx < symtab_hdr->sh_info)
   3382 	h = NULL;
   3383       else
   3384 	{
   3385 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
   3386 	  while (h->root.type == bfd_link_hash_indirect
   3387 		 || h->root.type == bfd_link_hash_warning)
   3388 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
   3389 	}
   3390 
   3391       /* Some relocs require a global offset table.  */
   3392       if (htab->sgot == NULL)
   3393 	{
   3394 	  switch (r_type)
   3395 	    {
   3396 	    case R_M32R_GOT16_HI_ULO:
   3397 	    case R_M32R_GOT16_HI_SLO:
   3398 	    case R_M32R_GOTOFF:
   3399 	    case R_M32R_GOTOFF_HI_ULO:
   3400 	    case R_M32R_GOTOFF_HI_SLO:
   3401 	    case R_M32R_GOTOFF_LO:
   3402 	    case R_M32R_GOT16_LO:
   3403 	    case R_M32R_GOTPC24:
   3404 	    case R_M32R_GOTPC_HI_ULO:
   3405 	    case R_M32R_GOTPC_HI_SLO:
   3406 	    case R_M32R_GOTPC_LO:
   3407 	    case R_M32R_GOT24:
   3408 	      if (dynobj == NULL)
   3409 		htab->dynobj = dynobj = abfd;
   3410 	      if (!_bfd_elf_create_got_section (dynobj, info))
   3411 		return false;
   3412 	      break;
   3413 
   3414 	    default:
   3415 	      break;
   3416 	  }
   3417 	}
   3418 
   3419       switch (r_type)
   3420 	{
   3421 	case R_M32R_GOT16_HI_ULO:
   3422 	case R_M32R_GOT16_HI_SLO:
   3423 	case R_M32R_GOT16_LO:
   3424 	case R_M32R_GOT24:
   3425 
   3426 	  if (h != NULL)
   3427 	    h->got.refcount += 1;
   3428 	  else
   3429 	    {
   3430 	      bfd_signed_vma *local_got_refcounts;
   3431 
   3432 	      /* This is a global offset table entry for a local
   3433 		 symbol.  */
   3434 	      local_got_refcounts = elf_local_got_refcounts (abfd);
   3435 	      if (local_got_refcounts == NULL)
   3436 		{
   3437 		  bfd_size_type size;
   3438 
   3439 		  size = symtab_hdr->sh_info;
   3440 		  size *= sizeof (bfd_signed_vma);
   3441 		  local_got_refcounts = bfd_zalloc (abfd, size);
   3442 		  if (local_got_refcounts == NULL)
   3443 		    return false;
   3444 		  elf_local_got_refcounts (abfd) = local_got_refcounts;
   3445 		}
   3446 	      local_got_refcounts[r_symndx] += 1;
   3447 	    }
   3448 	  break;
   3449 
   3450 	case R_M32R_26_PLTREL:
   3451 	  /* This symbol requires a procedure linkage table entry.  We
   3452 	     actually build the entry in adjust_dynamic_symbol,
   3453 	     because this might be a case of linking PIC code without
   3454 	     linking in any dynamic objects, in which case we don't
   3455 	     need to generate a procedure linkage table after all.  */
   3456 
   3457 	  /* If this is a local symbol, we resolve it directly without
   3458 	     creating a procedure linkage table entry.  */
   3459 	  if (h == NULL)
   3460 	    continue;
   3461 
   3462 	  if (h->forced_local)
   3463 	    break;
   3464 
   3465 	  h->needs_plt = 1;
   3466 	  h->plt.refcount += 1;
   3467 	  break;
   3468 
   3469 	case R_M32R_16_RELA:
   3470 	case R_M32R_24_RELA:
   3471 	case R_M32R_32_RELA:
   3472 	case R_M32R_REL32:
   3473 	case R_M32R_HI16_ULO_RELA:
   3474 	case R_M32R_HI16_SLO_RELA:
   3475 	case R_M32R_LO16_RELA:
   3476 	case R_M32R_SDA16_RELA:
   3477 	case R_M32R_10_PCREL_RELA:
   3478 	case R_M32R_18_PCREL_RELA:
   3479 	case R_M32R_26_PCREL_RELA:
   3480 
   3481 	  if (h != NULL && !bfd_link_pic (info))
   3482 	    {
   3483 	      h->non_got_ref = 1;
   3484 	      h->plt.refcount += 1;
   3485 	    }
   3486 
   3487 	  /* If we are creating a shared library, and this is a reloc
   3488 	     against a global symbol, or a non PC relative reloc
   3489 	     against a local symbol, then we need to copy the reloc
   3490 	     into the shared library.  However, if we are linking with
   3491 	     -Bsymbolic, we do not need to copy a reloc against a
   3492 	     global symbol which is defined in an object we are
   3493 	     including in the link (i.e., DEF_REGULAR is set).  At
   3494 	     this point we have not seen all the input files, so it is
   3495 	     possible that DEF_REGULAR is not set now but will be set
   3496 	     later (it is never cleared).  We account for that
   3497 	     possibility below by storing information in the
   3498 	     dyn_relocs field of the hash table entry. A similar
   3499 	     situation occurs when creating shared libraries and symbol
   3500 	     visibility changes render the symbol local.
   3501 
   3502 	     If on the other hand, we are creating an executable, we
   3503 	     may need to keep relocations for symbols satisfied by a
   3504 	     dynamic library if we manage to avoid copy relocs for the
   3505 	     symbol.  */
   3506 	  if ((bfd_link_pic (info)
   3507 	       && (sec->flags & SEC_ALLOC) != 0
   3508 	       && ((   r_type != R_M32R_26_PCREL_RELA
   3509 		    && r_type != R_M32R_18_PCREL_RELA
   3510 		    && r_type != R_M32R_10_PCREL_RELA
   3511 		    && r_type != R_M32R_REL32)
   3512 		   || (h != NULL
   3513 		       && (! info->symbolic
   3514 			   || h->root.type == bfd_link_hash_defweak
   3515 			   || !h->def_regular))))
   3516 	      || (!bfd_link_pic (info)
   3517 		  && (sec->flags & SEC_ALLOC) != 0
   3518 		  && h != NULL
   3519 		  && (h->root.type == bfd_link_hash_defweak
   3520 		      || !h->def_regular)))
   3521 	    {
   3522 	      struct elf_dyn_relocs *p;
   3523 	      struct elf_dyn_relocs **head;
   3524 
   3525 	      if (dynobj == NULL)
   3526 		htab->dynobj = dynobj = abfd;
   3527 
   3528 	      /* When creating a shared object, we must copy these
   3529 		 relocs into the output file.  We create a reloc
   3530 		 section in dynobj and make room for the reloc.  */
   3531 	      if (sreloc == NULL)
   3532 		{
   3533 		  sreloc = _bfd_elf_make_dynamic_reloc_section
   3534 		    (sec, dynobj, 2, abfd, /*rela?*/ true);
   3535 
   3536 		  if (sreloc == NULL)
   3537 		    return false;
   3538 		}
   3539 
   3540 	      /* If this is a global symbol, we count the number of
   3541 		 relocations we need for this symbol.  */
   3542 	      if (h != NULL)
   3543 		head = &h->dyn_relocs;
   3544 	      else
   3545 		{
   3546 		  /* Track dynamic relocs needed for local syms too.  */
   3547 		  asection *s;
   3548 		  void *vpp;
   3549 		  Elf_Internal_Sym *isym;
   3550 
   3551 		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
   3552 						abfd, r_symndx);
   3553 		  if (isym == NULL)
   3554 		    return false;
   3555 
   3556 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
   3557 		  if (s == NULL)
   3558 		    s = sec;
   3559 
   3560 		  vpp = &elf_section_data (s)->local_dynrel;
   3561 		  head = (struct elf_dyn_relocs **) vpp;
   3562 		}
   3563 
   3564 	      p = *head;
   3565 	      if (p == NULL || p->sec != sec)
   3566 		{
   3567 		  size_t amt = sizeof (*p);
   3568 
   3569 		  p = bfd_alloc (dynobj, amt);
   3570 		  if (p == NULL)
   3571 		    return false;
   3572 		  p->next = *head;
   3573 		  *head = p;
   3574 		  p->sec = sec;
   3575 		  p->count = 0;
   3576 		  p->pc_count = 0;
   3577 		}
   3578 
   3579 	      p->count += 1;
   3580 	      if (   ELF32_R_TYPE (rel->r_info) == R_M32R_26_PCREL_RELA
   3581 		  || ELF32_R_TYPE (rel->r_info) == R_M32R_18_PCREL_RELA
   3582 		  || ELF32_R_TYPE (rel->r_info) == R_M32R_10_PCREL_RELA
   3583 		  || ELF32_R_TYPE (rel->r_info) == R_M32R_REL32)
   3584 		p->pc_count += 1;
   3585 	    }
   3586 	  break;
   3587 
   3588 	/* This relocation describes the C++ object vtable hierarchy.
   3589 	   Reconstruct it for later use during GC.  */
   3590 	case R_M32R_RELA_GNU_VTINHERIT:
   3591 	case R_M32R_GNU_VTINHERIT:
   3592 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
   3593 	    return false;
   3594 	  break;
   3595 
   3596 	/* This relocation describes which C++ vtable entries are actually
   3597 	   used.  Record for later use during GC.  */
   3598 	case R_M32R_GNU_VTENTRY:
   3599 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
   3600 	    return false;
   3601 	  break;
   3602 	case R_M32R_RELA_GNU_VTENTRY:
   3603 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
   3604 	    return false;
   3605 	  break;
   3606 	}
   3607     }
   3608 
   3609   return true;
   3610 }
   3611 
   3612 static const struct bfd_elf_special_section m32r_elf_special_sections[] =
   3613 {
   3614   { STRING_COMMA_LEN (".sbss"),	 -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
   3615   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
   3616   { NULL,		      0,  0, 0,		   0 }
   3617 };
   3618 
   3619 static bool
   3620 m32r_elf_section_flags (const Elf_Internal_Shdr *hdr)
   3621 {
   3622   const char *name = hdr->bfd_section->name;
   3623 
   3624   if (startswith (name, ".sbss")
   3625       || startswith (name, ".sdata"))
   3626     hdr->bfd_section->flags |= SEC_SMALL_DATA;
   3627 
   3628   return true;
   3629 }
   3630 
   3631 static enum elf_reloc_type_class
   3632 m32r_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
   3633 			   const asection *rel_sec ATTRIBUTE_UNUSED,
   3634 			   const Elf_Internal_Rela *rela)
   3635 {
   3636   switch ((int) ELF32_R_TYPE (rela->r_info))
   3637     {
   3638     case R_M32R_RELATIVE:  return reloc_class_relative;
   3639     case R_M32R_JMP_SLOT:  return reloc_class_plt;
   3640     case R_M32R_COPY:      return reloc_class_copy;
   3641     default:		   return reloc_class_normal;
   3642     }
   3643 }
   3644 
   3645 #define ELF_ARCH		bfd_arch_m32r
   3647 #define ELF_TARGET_ID		M32R_ELF_DATA
   3648 #define ELF_MACHINE_CODE	EM_M32R
   3649 #define ELF_MACHINE_ALT1	EM_CYGNUS_M32R
   3650 #define ELF_MAXPAGESIZE		0x1 /* Explicitly requested by Mitsubishi.  */
   3651 
   3652 #define TARGET_BIG_SYM		m32r_elf32_vec
   3653 #define TARGET_BIG_NAME		"elf32-m32r"
   3654 #define TARGET_LITTLE_SYM	m32r_elf32_le_vec
   3655 #define TARGET_LITTLE_NAME	"elf32-m32rle"
   3656 
   3657 #define elf_info_to_howto			m32r_info_to_howto
   3658 #define elf_info_to_howto_rel			m32r_info_to_howto_rel
   3659 #define elf_backend_section_from_bfd_section	_bfd_m32r_elf_section_from_bfd_section
   3660 #define elf_backend_symbol_processing		_bfd_m32r_elf_symbol_processing
   3661 #define elf_backend_add_symbol_hook		m32r_elf_add_symbol_hook
   3662 #define elf_backend_relocate_section		m32r_elf_relocate_section
   3663 #define elf_backend_gc_mark_hook		m32r_elf_gc_mark_hook
   3664 #define elf_backend_check_relocs		m32r_elf_check_relocs
   3665 
   3666 #define elf_backend_create_dynamic_sections	m32r_elf_create_dynamic_sections
   3667 #define bfd_elf32_bfd_link_hash_table_create	m32r_elf_link_hash_table_create
   3668 #define elf_backend_size_dynamic_sections	m32r_elf_size_dynamic_sections
   3669 #define elf_backend_omit_section_dynsym		_bfd_elf_omit_section_dynsym_all
   3670 #define elf_backend_finish_dynamic_sections	m32r_elf_finish_dynamic_sections
   3671 #define elf_backend_adjust_dynamic_symbol	m32r_elf_adjust_dynamic_symbol
   3672 #define elf_backend_finish_dynamic_symbol	m32r_elf_finish_dynamic_symbol
   3673 #define elf_backend_reloc_type_class		m32r_elf_reloc_type_class
   3674 
   3675 #define elf_backend_can_gc_sections		1
   3676 /*#if !USE_REL
   3677 #define elf_backend_rela_normal			1
   3678 #endif*/
   3679 #define elf_backend_can_refcount 1
   3680 #define elf_backend_want_got_plt 1
   3681 #define elf_backend_plt_readonly 1
   3682 #define elf_backend_want_plt_sym 0
   3683 #define elf_backend_got_header_size 12
   3684 #define elf_backend_dtrel_excludes_plt	1
   3685 
   3686 #define elf_backend_may_use_rel_p	1
   3687 #ifdef USE_M32R_OLD_RELOC
   3688 #define elf_backend_default_use_rela_p	0
   3689 #define elf_backend_may_use_rela_p	0
   3690 #else
   3691 #define elf_backend_default_use_rela_p	1
   3692 #define elf_backend_may_use_rela_p	1
   3693 #endif
   3694 
   3695 #define elf_backend_object_p			m32r_elf_object_p
   3696 #define elf_backend_final_write_processing	m32r_elf_final_write_processing
   3697 #define bfd_elf32_bfd_merge_private_bfd_data	m32r_elf_merge_private_bfd_data
   3698 #define bfd_elf32_bfd_set_private_flags		m32r_elf_set_private_flags
   3699 #define bfd_elf32_bfd_print_private_bfd_data	m32r_elf_print_private_bfd_data
   3700 #define elf_backend_special_sections		m32r_elf_special_sections
   3701 #define elf_backend_section_flags		m32r_elf_section_flags
   3702 
   3703 #define elf_backend_linux_prpsinfo32_ugid16	true
   3704 
   3705 #include "elf32-target.h"
   3706 
   3707 #undef	ELF_MAXPAGESIZE
   3708 #define ELF_MAXPAGESIZE		0x1000
   3709 
   3710 #undef	TARGET_BIG_SYM
   3711 #define TARGET_BIG_SYM		m32r_elf32_linux_vec
   3712 #undef	TARGET_BIG_NAME
   3713 #define TARGET_BIG_NAME		"elf32-m32r-linux"
   3714 #undef	TARGET_LITTLE_SYM
   3715 #define TARGET_LITTLE_SYM	m32r_elf32_linux_le_vec
   3716 #undef	TARGET_LITTLE_NAME
   3717 #define TARGET_LITTLE_NAME	"elf32-m32rle-linux"
   3718 #undef	elf32_bed
   3719 #define elf32_bed		elf32_m32r_lin_bed
   3720 
   3721 #include "elf32-target.h"
   3722