Home | History | Annotate | Download | only in bfd
      1 /* M32R-specific support for 32-bit ELF.
      2    Copyright (C) 1996-2014 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 (reloc_entry->howto->size)
    225     {
    226     case 1:
    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 2:
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    480 	 32,			/* bitsize */
    481 	 FALSE,			/* pc_relative */
    482 	 0,			/* bitpos */
    483 	 complain_overflow_bitfield, /* 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 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 1,	                /* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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          2,                     /* size (0 = byte, 1 = short, 2 = long) */
    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          2,                     /* size (0 = byte, 1 = short, 2 = long) */
    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 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 1,	                /* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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          2,                     /* size (0 = byte, 1 = short, 2 = long) */
    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          2,                     /* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
   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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
   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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
   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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
   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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
   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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
   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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
   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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
   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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
   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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
   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 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
   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 void
   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   BFD_ASSERT (ELF32_R_TYPE(dst->r_info) <= (unsigned int) R_M32R_GNU_VTENTRY);
   1286   cache_ptr->howto = &m32r_elf_howto_table[r_type];
   1287 }
   1288 
   1289 static void
   1290 m32r_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
   1291 		    arelent *cache_ptr,
   1292 		    Elf_Internal_Rela *dst)
   1293 {
   1294   BFD_ASSERT ((ELF32_R_TYPE(dst->r_info) == (unsigned int) R_M32R_NONE)
   1295               || ((ELF32_R_TYPE(dst->r_info) > (unsigned int) R_M32R_GNU_VTENTRY)
   1296                   && (ELF32_R_TYPE(dst->r_info) < (unsigned int) R_M32R_max)));
   1297   cache_ptr->howto = &m32r_elf_howto_table[ELF32_R_TYPE(dst->r_info)];
   1298 }
   1299 
   1300 
   1301 /* Given a BFD section, try to locate the corresponding ELF section
   1303    index.  */
   1304 
   1305 static bfd_boolean
   1306 _bfd_m32r_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
   1307 					asection *sec,
   1308 					int *retval)
   1309 {
   1310   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
   1311     {
   1312       *retval = SHN_M32R_SCOMMON;
   1313       return TRUE;
   1314     }
   1315   return FALSE;
   1316 }
   1317 
   1318 /* M32R ELF uses two common sections.  One is the usual one, and the other
   1319    is for small objects.  All the small objects are kept together, and then
   1320    referenced via one register, which yields faster assembler code.  It is
   1321    up to the compiler to emit an instruction to load the register with
   1322    _SDA_BASE.  This is what we use for the small common section.  This
   1323    approach is copied from elf32-mips.c.  */
   1324 static asection m32r_elf_scom_section;
   1325 static asymbol m32r_elf_scom_symbol;
   1326 static asymbol *m32r_elf_scom_symbol_ptr;
   1327 
   1328 /* Handle the special M32R section numbers that a symbol may use.  */
   1329 
   1330 static void
   1331 _bfd_m32r_elf_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, asymbol *asym)
   1332 {
   1333   elf_symbol_type *elfsym = (elf_symbol_type *) asym;
   1334 
   1335   switch (elfsym->internal_elf_sym.st_shndx)
   1336     {
   1337     case SHN_M32R_SCOMMON:
   1338       if (m32r_elf_scom_section.name == NULL)
   1339 	{
   1340 	  /* Initialize the small common section.  */
   1341 	  m32r_elf_scom_section.name = ".scommon";
   1342 	  m32r_elf_scom_section.flags = SEC_IS_COMMON;
   1343 	  m32r_elf_scom_section.output_section = &m32r_elf_scom_section;
   1344 	  m32r_elf_scom_section.symbol = &m32r_elf_scom_symbol;
   1345 	  m32r_elf_scom_section.symbol_ptr_ptr = &m32r_elf_scom_symbol_ptr;
   1346 	  m32r_elf_scom_symbol.name = ".scommon";
   1347 	  m32r_elf_scom_symbol.flags = BSF_SECTION_SYM;
   1348 	  m32r_elf_scom_symbol.section = &m32r_elf_scom_section;
   1349 	  m32r_elf_scom_symbol_ptr = &m32r_elf_scom_symbol;
   1350 	}
   1351       asym->section = &m32r_elf_scom_section;
   1352       asym->value = elfsym->internal_elf_sym.st_size;
   1353       break;
   1354     }
   1355 }
   1356 
   1357 /* Hook called by the linker routine which adds symbols from an object
   1358    file.  We must handle the special M32R section numbers here.
   1359    We also keep watching for whether we need to create the sdata special
   1360    linker sections.  */
   1361 
   1362 static bfd_boolean
   1363 m32r_elf_add_symbol_hook (bfd *abfd,
   1364 			  struct bfd_link_info *info,
   1365 			  Elf_Internal_Sym *sym,
   1366 			  const char **namep,
   1367 			  flagword *flagsp ATTRIBUTE_UNUSED,
   1368 			  asection **secp,
   1369 			  bfd_vma *valp)
   1370 {
   1371   if (! info->relocatable
   1372       && (*namep)[0] == '_' && (*namep)[1] == 'S'
   1373       && strcmp (*namep, "_SDA_BASE_") == 0
   1374       && is_elf_hash_table (info->hash))
   1375     {
   1376       /* This is simpler than using _bfd_elf_create_linker_section
   1377 	 (our needs are simpler than ppc's needs).  Also
   1378 	 _bfd_elf_create_linker_section currently has a bug where if a .sdata
   1379 	 section already exists a new one is created that follows it which
   1380 	 screws of _SDA_BASE_ address calcs because output_offset != 0.  */
   1381       struct elf_link_hash_entry *h;
   1382       struct bfd_link_hash_entry *bh;
   1383       asection *s = bfd_get_section_by_name (abfd, ".sdata");
   1384 
   1385       /* The following code was cobbled from elf32-ppc.c and elflink.c.  */
   1386       if (s == NULL)
   1387 	{
   1388 	  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
   1389 			    | SEC_IN_MEMORY | SEC_LINKER_CREATED);
   1390 
   1391 	  s = bfd_make_section_anyway_with_flags (abfd, ".sdata",
   1392 						  flags);
   1393 	  if (s == NULL)
   1394 	    return FALSE;
   1395 	  if (! bfd_set_section_alignment (abfd, s, 2))
   1396 	    return FALSE;
   1397 	}
   1398 
   1399       bh = bfd_link_hash_lookup (info->hash, "_SDA_BASE_",
   1400 				 FALSE, FALSE, FALSE);
   1401 
   1402       if ((bh == NULL || bh->type == bfd_link_hash_undefined)
   1403 	  && !(_bfd_generic_link_add_one_symbol (info,
   1404 						 abfd,
   1405 						 "_SDA_BASE_",
   1406 						 BSF_GLOBAL,
   1407 						 s,
   1408 						 (bfd_vma) 32768,
   1409 						 NULL,
   1410 						 FALSE,
   1411 						 get_elf_backend_data (abfd)->collect,
   1412 						 &bh)))
   1413 	return FALSE;
   1414       h = (struct elf_link_hash_entry *) bh;
   1415       h->type = STT_OBJECT;
   1416     }
   1417 
   1418   switch (sym->st_shndx)
   1419     {
   1420     case SHN_M32R_SCOMMON:
   1421       *secp = bfd_make_section_old_way (abfd, ".scommon");
   1422       (*secp)->flags |= SEC_IS_COMMON;
   1423       *valp = sym->st_size;
   1424       break;
   1425     }
   1426 
   1427   return TRUE;
   1428 }
   1429 
   1430 /* We have to figure out the SDA_BASE value, so that we can adjust the
   1431    symbol value correctly.  We look up the symbol _SDA_BASE_ in the output
   1432    BFD.  If we can't find it, we're stuck.  We cache it in the ELF
   1433    target data.  We don't need to adjust the symbol value for an
   1434    external symbol if we are producing relocatable output.  */
   1435 
   1436 static bfd_reloc_status_type
   1437 m32r_elf_final_sda_base (bfd *output_bfd,
   1438 			 struct bfd_link_info *info,
   1439 			 const char **error_message,
   1440 			 bfd_vma *psb)
   1441 {
   1442   if (elf_gp (output_bfd) == 0)
   1443     {
   1444       struct bfd_link_hash_entry *h;
   1445 
   1446       h = bfd_link_hash_lookup (info->hash, "_SDA_BASE_", FALSE, FALSE, TRUE);
   1447       if (h != NULL && h->type == bfd_link_hash_defined)
   1448 	elf_gp (output_bfd) = (h->u.def.value
   1449 			       + h->u.def.section->output_section->vma
   1450 			       + h->u.def.section->output_offset);
   1451       else
   1452 	{
   1453 	  /* Only get the error once.  */
   1454 	  *psb = elf_gp (output_bfd) = 4;
   1455 	  *error_message =
   1456 	    (const char *) _("SDA relocation when _SDA_BASE_ not defined");
   1457 	  return bfd_reloc_dangerous;
   1458 	}
   1459     }
   1460   *psb = elf_gp (output_bfd);
   1461   return bfd_reloc_ok;
   1462 }
   1463 
   1464 /* Return size of a PLT entry.  */
   1466 #define elf_m32r_sizeof_plt(info) PLT_ENTRY_SIZE
   1467 
   1468 /* The m32r linker needs to keep track of the number of relocs that it
   1469    decides to copy in check_relocs for each symbol.  This is so that
   1470    it can discard PC relative relocs if it doesn't need them when
   1471    linking with -Bsymbolic.  We store the information in a field
   1472    extending the regular ELF linker hash table.  */
   1473 
   1474 /* This structure keeps track of the number of PC relative relocs we
   1475    have copied for a given symbol.  */
   1476 
   1477 struct elf_m32r_pcrel_relocs_copied
   1478 {
   1479   /* Next section.  */
   1480   struct elf_m32r_pcrel_relocs_copied *next;
   1481   /* A section in dynobj.  */
   1482   asection *section;
   1483   /* Number of relocs copied in this section.  */
   1484   bfd_size_type count;
   1485 };
   1486 
   1487 /* The sh linker needs to keep track of the number of relocs that it
   1488    decides to copy as dynamic relocs in check_relocs for each symbol.
   1489    This is so that it can later discard them if they are found to be
   1490    unnecessary.  We store the information in a field extending the
   1491    regular ELF linker hash table.  */
   1492 
   1493 struct elf_m32r_dyn_relocs
   1494 {
   1495   struct elf_m32r_dyn_relocs *next;
   1496 
   1497   /* The input section of the reloc.  */
   1498   asection *sec;
   1499 
   1500   /* Total number of relocs copied for the input section.  */
   1501   bfd_size_type count;
   1502 
   1503   /* Number of pc-relative relocs copied for the input section.  */
   1504   bfd_size_type pc_count;
   1505 };
   1506 
   1507 
   1508 /* m32r ELF linker hash entry.  */
   1509 
   1510 struct elf_m32r_link_hash_entry
   1511 {
   1512   struct elf_link_hash_entry root;
   1513 
   1514   /* Track dynamic relocs copied for this symbol.  */
   1515   struct elf_m32r_dyn_relocs *dyn_relocs;
   1516 };
   1517 
   1518 /* m32r ELF linker hash table.  */
   1519 
   1520 struct elf_m32r_link_hash_table
   1521 {
   1522   struct elf_link_hash_table root;
   1523 
   1524   /* Short-cuts to get to dynamic linker sections.  */
   1525   asection *sgot;
   1526   asection *sgotplt;
   1527   asection *srelgot;
   1528   asection *splt;
   1529   asection *srelplt;
   1530   asection *sdynbss;
   1531   asection *srelbss;
   1532 
   1533   /* Small local sym cache.  */
   1534   struct sym_cache sym_cache;
   1535 };
   1536 
   1537 /* Traverse an m32r ELF linker hash table.  */
   1538 
   1539 #define m32r_elf_link_hash_traverse(table, func, info)			\
   1540   (elf_link_hash_traverse						\
   1541    (&(table)->root,							\
   1542     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
   1543     (info)))
   1544 
   1545 /* Get the m32r ELF linker hash table from a link_info structure.  */
   1546 
   1547 #define m32r_elf_hash_table(p) \
   1548   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
   1549   == M32R_ELF_DATA ? ((struct elf_m32r_link_hash_table *) ((p)->hash)) : NULL)
   1550 
   1551 /* Create an entry in an m32r ELF linker hash table.  */
   1552 
   1553 static struct bfd_hash_entry *
   1554 m32r_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
   1555 			    struct bfd_hash_table *table,
   1556 			    const char *string)
   1557 {
   1558   struct elf_m32r_link_hash_entry *ret =
   1559     (struct elf_m32r_link_hash_entry *) entry;
   1560 
   1561   /* Allocate the structure if it has not already been allocated by a
   1562      subclass.  */
   1563   if (ret == NULL)
   1564     ret = bfd_hash_allocate (table,
   1565 			     sizeof (struct elf_m32r_link_hash_entry));
   1566   if (ret == NULL)
   1567     return NULL;
   1568 
   1569   /* Call the allocation method of the superclass.  */
   1570   ret = ((struct elf_m32r_link_hash_entry *)
   1571          _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
   1572                                      table, string));
   1573   if (ret != NULL)
   1574     {
   1575       struct elf_m32r_link_hash_entry *eh;
   1576 
   1577       eh = (struct elf_m32r_link_hash_entry *) ret;
   1578       eh->dyn_relocs = NULL;
   1579     }
   1580 
   1581   return (struct bfd_hash_entry *) ret;
   1582 }
   1583 
   1584 /* Create an m32r ELF linker hash table.  */
   1585 
   1586 static struct bfd_link_hash_table *
   1587 m32r_elf_link_hash_table_create (bfd *abfd)
   1588 {
   1589   struct elf_m32r_link_hash_table *ret;
   1590   bfd_size_type amt = sizeof (struct elf_m32r_link_hash_table);
   1591 
   1592   ret = bfd_zmalloc (amt);
   1593   if (ret == NULL)
   1594     return NULL;
   1595 
   1596   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
   1597 				      m32r_elf_link_hash_newfunc,
   1598 				      sizeof (struct elf_m32r_link_hash_entry),
   1599 				      M32R_ELF_DATA))
   1600     {
   1601       free (ret);
   1602       return NULL;
   1603     }
   1604 
   1605   return &ret->root.root;
   1606 }
   1607 
   1608 /* Create .got, .gotplt, and .rela.got sections in DYNOBJ, and set up
   1609    shortcuts to them in our hash table.  */
   1610 
   1611 static bfd_boolean
   1612 create_got_section (bfd *dynobj, struct bfd_link_info *info)
   1613 {
   1614   struct elf_m32r_link_hash_table *htab;
   1615 
   1616   if (! _bfd_elf_create_got_section (dynobj, info))
   1617     return FALSE;
   1618 
   1619   htab = m32r_elf_hash_table (info);
   1620   if (htab == NULL)
   1621     return FALSE;
   1622 
   1623   htab->sgot = bfd_get_linker_section (dynobj, ".got");
   1624   htab->sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
   1625   htab->srelgot = bfd_get_linker_section (dynobj, ".rela.got");
   1626   if (! htab->sgot || ! htab->sgotplt || ! htab->srelgot)
   1627     abort ();
   1628 
   1629   return TRUE;
   1630 }
   1631 
   1632 /* Create dynamic sections when linking against a dynamic object.  */
   1633 
   1634 static bfd_boolean
   1635 m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   1636 {
   1637   struct elf_m32r_link_hash_table *htab;
   1638   flagword flags, pltflags;
   1639   asection *s;
   1640   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
   1641   int ptralign = 2; /* 32bit */
   1642 
   1643   htab = m32r_elf_hash_table (info);
   1644   if (htab == NULL)
   1645     return FALSE;
   1646 
   1647   /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
   1648      .rel[a].bss sections.  */
   1649   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
   1650            | SEC_LINKER_CREATED);
   1651 
   1652   pltflags = flags;
   1653   pltflags |= SEC_CODE;
   1654   if (bed->plt_not_loaded)
   1655     pltflags &= ~ (SEC_LOAD | SEC_HAS_CONTENTS);
   1656   if (bed->plt_readonly)
   1657     pltflags |= SEC_READONLY;
   1658 
   1659   s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
   1660   htab->splt = s;
   1661   if (s == NULL
   1662       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
   1663     return FALSE;
   1664 
   1665   if (bed->want_plt_sym)
   1666     {
   1667       /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
   1668          .plt section.  */
   1669       struct bfd_link_hash_entry *bh = NULL;
   1670       struct elf_link_hash_entry *h;
   1671 
   1672       if (! (_bfd_generic_link_add_one_symbol
   1673              (info, abfd, "_PROCEDURE_LINKAGE_TABLE_", BSF_GLOBAL, s,
   1674               (bfd_vma) 0, NULL, FALSE,
   1675               get_elf_backend_data (abfd)->collect, &bh)))
   1676         return FALSE;
   1677       h = (struct elf_link_hash_entry *) bh;
   1678       h->def_regular = 1;
   1679       h->type = STT_OBJECT;
   1680       htab->root.hplt = h;
   1681 
   1682       if (info->shared
   1683           && ! bfd_elf_link_record_dynamic_symbol (info, h))
   1684         return FALSE;
   1685     }
   1686 
   1687   s = bfd_make_section_anyway_with_flags (abfd,
   1688 					  bed->default_use_rela_p
   1689 					  ? ".rela.plt" : ".rel.plt",
   1690 					  flags | SEC_READONLY);
   1691   htab->srelplt = s;
   1692   if (s == NULL
   1693       || ! bfd_set_section_alignment (abfd, s, ptralign))
   1694     return FALSE;
   1695 
   1696   if (htab->sgot == NULL
   1697       && ! create_got_section (abfd, info))
   1698     return FALSE;
   1699 
   1700   if (bed->want_dynbss)
   1701     {
   1702       /* The .dynbss section is a place to put symbols which are defined
   1703          by dynamic objects, are referenced by regular objects, and are
   1704          not functions.  We must allocate space for them in the process
   1705          image and use a R_*_COPY reloc to tell the dynamic linker to
   1706          initialize them at run time.  The linker script puts the .dynbss
   1707          section into the .bss section of the final image.  */
   1708       s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
   1709 					      SEC_ALLOC | SEC_LINKER_CREATED);
   1710       htab->sdynbss = s;
   1711       if (s == NULL)
   1712         return FALSE;
   1713       /* The .rel[a].bss section holds copy relocs.  This section is not
   1714          normally needed.  We need to create it here, though, so that the
   1715          linker will map it to an output section.  We can't just create it
   1716          only if we need it, because we will not know whether we need it
   1717          until we have seen all the input files, and the first time the
   1718          main linker code calls BFD after examining all the input files
   1719          (size_dynamic_sections) the input sections have already been
   1720          mapped to the output sections.  If the section turns out not to
   1721          be needed, we can discard it later.  We will never need this
   1722          section when generating a shared object, since they do not use
   1723          copy relocs.  */
   1724       if (! info->shared)
   1725         {
   1726           s = bfd_make_section_anyway_with_flags (abfd,
   1727 						  (bed->default_use_rela_p
   1728 						   ? ".rela.bss" : ".rel.bss"),
   1729 						  flags | SEC_READONLY);
   1730           htab->srelbss = s;
   1731           if (s == NULL
   1732               || ! bfd_set_section_alignment (abfd, s, ptralign))
   1733             return FALSE;
   1734         }
   1735     }
   1736 
   1737   return TRUE;
   1738 }
   1739 
   1740 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
   1741 
   1742 static void
   1743 m32r_elf_copy_indirect_symbol (struct bfd_link_info *info,
   1744                                struct elf_link_hash_entry *dir,
   1745                                struct elf_link_hash_entry *ind)
   1746 {
   1747   struct elf_m32r_link_hash_entry * edir;
   1748   struct elf_m32r_link_hash_entry * eind;
   1749 
   1750   edir = (struct elf_m32r_link_hash_entry *) dir;
   1751   eind = (struct elf_m32r_link_hash_entry *) ind;
   1752 
   1753   if (eind->dyn_relocs != NULL)
   1754     {
   1755       if (edir->dyn_relocs != NULL)
   1756         {
   1757           struct elf_m32r_dyn_relocs **pp;
   1758           struct elf_m32r_dyn_relocs *p;
   1759 
   1760           /* Add reloc counts against the indirect sym to the direct sym
   1761              list.  Merge any entries against the same section.  */
   1762           for (pp = &eind->dyn_relocs; (p = *pp) != NULL;)
   1763             {
   1764               struct elf_m32r_dyn_relocs *q;
   1765 
   1766               for (q = edir->dyn_relocs; q != NULL; q = q->next)
   1767                 if (q->sec == p->sec)
   1768                   {
   1769                     q->pc_count += p->pc_count;
   1770                     q->count += p->count;
   1771                     *pp = p->next;
   1772                     break;
   1773                   }
   1774               if (q == NULL)
   1775                 pp = &p->next;
   1776             }
   1777           *pp = edir->dyn_relocs;
   1778         }
   1779 
   1780       edir->dyn_relocs = eind->dyn_relocs;
   1781       eind->dyn_relocs = NULL;
   1782     }
   1783 
   1784   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
   1785 }
   1786 
   1787 
   1788 /* Adjust a symbol defined by a dynamic object and referenced by a
   1790    regular object.  The current definition is in some section of the
   1791    dynamic object, but we're not including those sections.  We have to
   1792    change the definition to something the rest of the link can
   1793    understand.  */
   1794 
   1795 static bfd_boolean
   1796 m32r_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
   1797 				struct elf_link_hash_entry *h)
   1798 {
   1799   struct elf_m32r_link_hash_table *htab;
   1800   struct elf_m32r_link_hash_entry *eh;
   1801   struct elf_m32r_dyn_relocs *p;
   1802   bfd *dynobj;
   1803   asection *s;
   1804 
   1805 #ifdef DEBUG_PIC
   1806   printf ("m32r_elf_adjust_dynamic_symbol()\n");
   1807 #endif
   1808 
   1809   dynobj = elf_hash_table (info)->dynobj;
   1810 
   1811   /* Make sure we know what is going on here.  */
   1812   BFD_ASSERT (dynobj != NULL
   1813               && (h->needs_plt
   1814                   || h->u.weakdef != NULL
   1815                   || (h->def_dynamic
   1816                       && h->ref_regular
   1817                       && !h->def_regular)));
   1818 
   1819   /* If this is a function, put it in the procedure linkage table.  We
   1820      will fill in the contents of the procedure linkage table later,
   1821      when we know the address of the .got section.  */
   1822   if (h->type == STT_FUNC
   1823       || h->needs_plt)
   1824     {
   1825       if (! info->shared
   1826           && !h->def_dynamic
   1827           && !h->ref_dynamic
   1828 	  && h->root.type != bfd_link_hash_undefweak
   1829 	  && h->root.type != bfd_link_hash_undefined)
   1830         {
   1831           /* This case can occur if we saw a PLT reloc in an input
   1832              file, but the symbol was never referred to by a dynamic
   1833              object.  In such a case, we don't actually need to build
   1834              a procedure linkage table, and we can just do a PCREL
   1835              reloc instead.  */
   1836           h->plt.offset = (bfd_vma) -1;
   1837           h->needs_plt = 0;
   1838         }
   1839 
   1840       return TRUE;
   1841     }
   1842   else
   1843     h->plt.offset = (bfd_vma) -1;
   1844 
   1845   /* If this is a weak symbol, and there is a real definition, the
   1846      processor independent code will have arranged for us to see the
   1847      real definition first, and we can just use the same value.  */
   1848   if (h->u.weakdef != NULL)
   1849     {
   1850       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
   1851                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
   1852       h->root.u.def.section = h->u.weakdef->root.u.def.section;
   1853       h->root.u.def.value = h->u.weakdef->root.u.def.value;
   1854       return TRUE;
   1855     }
   1856 
   1857   /* This is a reference to a symbol defined by a dynamic object which
   1858      is not a function.  */
   1859 
   1860   /* If we are creating a shared library, we must presume that the
   1861      only references to the symbol are via the global offset table.
   1862      For such cases we need not do anything here; the relocations will
   1863      be handled correctly by relocate_section.  */
   1864   if (info->shared)
   1865     return TRUE;
   1866 
   1867   /* If there are no references to this symbol that do not use the
   1868      GOT, we don't need to generate a copy reloc.  */
   1869   if (!h->non_got_ref)
   1870     return TRUE;
   1871 
   1872   /* If -z nocopyreloc was given, we won't generate them either.  */
   1873   if (info->nocopyreloc)
   1874     {
   1875       h->non_got_ref = 0;
   1876       return TRUE;
   1877     }
   1878 
   1879   eh = (struct elf_m32r_link_hash_entry *) h;
   1880   for (p = eh->dyn_relocs; p != NULL; p = p->next)
   1881     {
   1882       s = p->sec->output_section;
   1883       if (s != NULL && (s->flags & (SEC_READONLY | SEC_HAS_CONTENTS)) != 0)
   1884         break;
   1885     }
   1886 
   1887   /* If we didn't find any dynamic relocs in sections which needs the
   1888      copy reloc, then we'll be keeping the dynamic relocs and avoiding
   1889      the copy reloc.  */
   1890   if (p == NULL)
   1891     {
   1892       h->non_got_ref = 0;
   1893       return TRUE;
   1894     }
   1895 
   1896   /* We must allocate the symbol in our .dynbss section, which will
   1897      become part of the .bss section of the executable.  There will be
   1898      an entry for this symbol in the .dynsym section.  The dynamic
   1899      object will contain position independent code, so all references
   1900      from the dynamic object to this symbol will go through the global
   1901      offset table.  The dynamic linker will use the .dynsym entry to
   1902      determine the address it must put in the global offset table, so
   1903      both the dynamic object and the regular object will refer to the
   1904      same memory location for the variable.  */
   1905 
   1906   htab = m32r_elf_hash_table (info);
   1907   if (htab == NULL)
   1908     return FALSE;
   1909 
   1910   s = htab->sdynbss;
   1911   BFD_ASSERT (s != NULL);
   1912 
   1913   /* We must generate a R_M32R_COPY reloc to tell the dynamic linker
   1914      to copy the initial value out of the dynamic object and into the
   1915      runtime process image.  We need to remember the offset into the
   1916      .rela.bss section we are going to use.  */
   1917   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
   1918     {
   1919       asection *srel;
   1920 
   1921       srel = htab->srelbss;
   1922       BFD_ASSERT (srel != NULL);
   1923       srel->size += sizeof (Elf32_External_Rela);
   1924       h->needs_copy = 1;
   1925     }
   1926 
   1927   return _bfd_elf_adjust_dynamic_copy (h, s);
   1928 }
   1929 
   1930 /* Allocate space in .plt, .got and associated reloc sections for
   1931    dynamic relocs.  */
   1932 
   1933 static bfd_boolean
   1934 allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
   1935 {
   1936   struct bfd_link_info *info;
   1937   struct elf_m32r_link_hash_table *htab;
   1938   struct elf_m32r_link_hash_entry *eh;
   1939   struct elf_m32r_dyn_relocs *p;
   1940 
   1941   if (h->root.type == bfd_link_hash_indirect)
   1942     return TRUE;
   1943 
   1944   info = (struct bfd_link_info *) inf;
   1945   htab = m32r_elf_hash_table (info);
   1946   if (htab == NULL)
   1947     return FALSE;
   1948 
   1949   eh = (struct elf_m32r_link_hash_entry *) h;
   1950 
   1951   if (htab->root.dynamic_sections_created
   1952       && h->plt.refcount > 0)
   1953     {
   1954       /* Make sure this symbol is output as a dynamic symbol.
   1955          Undefined weak syms won't yet be marked as dynamic.  */
   1956       if (h->dynindx == -1
   1957           && !h->forced_local)
   1958         {
   1959           if (! bfd_elf_link_record_dynamic_symbol (info, h))
   1960             return FALSE;
   1961         }
   1962 
   1963       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h))
   1964         {
   1965           asection *s = htab->splt;
   1966 
   1967           /* If this is the first .plt entry, make room for the special
   1968              first entry.  */
   1969           if (s->size == 0)
   1970             s->size += PLT_ENTRY_SIZE;
   1971 
   1972           h->plt.offset = s->size;
   1973 
   1974           /* If this symbol is not defined in a regular file, and we are
   1975              not generating a shared library, then set the symbol to this
   1976              location in the .plt.  This is required to make function
   1977              pointers compare as equal between the normal executable and
   1978              the shared library.  */
   1979           if (! info->shared
   1980               && !h->def_regular)
   1981             {
   1982               h->root.u.def.section = s;
   1983               h->root.u.def.value = h->plt.offset;
   1984             }
   1985 
   1986           /* Make room for this entry.  */
   1987           s->size += PLT_ENTRY_SIZE;
   1988 
   1989           /* We also need to make an entry in the .got.plt section, which
   1990              will be placed in the .got section by the linker script.  */
   1991           htab->sgotplt->size += 4;
   1992 
   1993           /* We also need to make an entry in the .rel.plt section.  */
   1994           htab->srelplt->size += sizeof (Elf32_External_Rela);
   1995         }
   1996       else
   1997         {
   1998           h->plt.offset = (bfd_vma) -1;
   1999           h->needs_plt = 0;
   2000         }
   2001     }
   2002   else
   2003     {
   2004       h->plt.offset = (bfd_vma) -1;
   2005       h->needs_plt = 0;
   2006     }
   2007 
   2008   if (h->got.refcount > 0)
   2009     {
   2010       asection *s;
   2011       bfd_boolean dyn;
   2012 
   2013       /* Make sure this symbol is output as a dynamic symbol.
   2014          Undefined weak syms won't yet be marked as dynamic.  */
   2015       if (h->dynindx == -1
   2016           && !h->forced_local)
   2017         {
   2018           if (! bfd_elf_link_record_dynamic_symbol (info, h))
   2019             return FALSE;
   2020         }
   2021 
   2022       s = htab->sgot;
   2023 
   2024       h->got.offset = s->size;
   2025       s->size += 4;
   2026       dyn = htab->root.dynamic_sections_created;
   2027       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h))
   2028         htab->srelgot->size += sizeof (Elf32_External_Rela);
   2029     }
   2030   else
   2031     h->got.offset = (bfd_vma) -1;
   2032 
   2033   if (eh->dyn_relocs == NULL)
   2034     return TRUE;
   2035 
   2036   /* In the shared -Bsymbolic case, discard space allocated for
   2037      dynamic pc-relative relocs against symbols which turn out to be
   2038      defined in regular objects.  For the normal shared case, discard
   2039      space for pc-relative relocs that have become local due to symbol
   2040      visibility changes.  */
   2041 
   2042   if (info->shared)
   2043     {
   2044       if (h->def_regular
   2045           && (h->forced_local
   2046               || info->symbolic))
   2047         {
   2048           struct elf_m32r_dyn_relocs **pp;
   2049 
   2050           for (pp = &eh->dyn_relocs; (p = *pp) != NULL;)
   2051             {
   2052               p->count -= p->pc_count;
   2053               p->pc_count = 0;
   2054               if (p->count == 0)
   2055                 *pp = p->next;
   2056               else
   2057                 pp = &p->next;
   2058             }
   2059         }
   2060 
   2061       /* Also discard relocs on undefined weak syms with non-default
   2062 	 visibility.  */
   2063       if (eh->dyn_relocs != NULL
   2064 	  && h->root.type == bfd_link_hash_undefweak)
   2065 	{
   2066 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
   2067 	    eh->dyn_relocs = NULL;
   2068 
   2069 	  /* Make sure undefined weak symbols are output as a dynamic
   2070 	     symbol in PIEs.  */
   2071 	  else if (h->dynindx == -1
   2072 		   && !h->forced_local)
   2073 	    {
   2074 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
   2075 		return FALSE;
   2076 	    }
   2077 	}
   2078     }
   2079   else
   2080     {
   2081       /* For the non-shared case, discard space for relocs against
   2082          symbols which turn out to need copy relocs or are not
   2083          dynamic.  */
   2084 
   2085       if (!h->non_got_ref
   2086           && ((h->def_dynamic
   2087                && !h->def_regular)
   2088               || (htab->root.dynamic_sections_created
   2089                   && (h->root.type == bfd_link_hash_undefweak
   2090                       || h->root.type == bfd_link_hash_undefined))))
   2091         {
   2092           /* Make sure this symbol is output as a dynamic symbol.
   2093              Undefined weak syms won't yet be marked as dynamic.  */
   2094           if (h->dynindx == -1
   2095               && !h->forced_local)
   2096             {
   2097               if (! bfd_elf_link_record_dynamic_symbol (info, h))
   2098                 return FALSE;
   2099             }
   2100 
   2101           /* If that succeeded, we know we'll be keeping all the
   2102              relocs.  */
   2103           if (h->dynindx != -1)
   2104             goto keep;
   2105         }
   2106 
   2107       eh->dyn_relocs = NULL;
   2108 
   2109     keep: ;
   2110     }
   2111 
   2112   /* Finally, allocate space.  */
   2113   for (p = eh->dyn_relocs; p != NULL; p = p->next)
   2114     {
   2115       asection *sreloc = elf_section_data (p->sec)->sreloc;
   2116       sreloc->size += p->count * sizeof (Elf32_External_Rela);
   2117     }
   2118 
   2119   return TRUE;
   2120 }
   2121 
   2122 /* Find any dynamic relocs that apply to read-only sections.  */
   2123 
   2124 static bfd_boolean
   2125 readonly_dynrelocs (struct elf_link_hash_entry *h, void * inf)
   2126 {
   2127   struct elf_m32r_link_hash_entry *eh;
   2128   struct elf_m32r_dyn_relocs *p;
   2129 
   2130   eh = (struct elf_m32r_link_hash_entry *) h;
   2131   for (p = eh->dyn_relocs; p != NULL; p = p->next)
   2132     {
   2133       asection *s = p->sec->output_section;
   2134 
   2135       if (s != NULL && (s->flags & SEC_READONLY) != 0)
   2136         {
   2137           struct bfd_link_info *info = (struct bfd_link_info *) inf;
   2138 
   2139           info->flags |= DF_TEXTREL;
   2140 
   2141           /* Not an error, just cut short the traversal.  */
   2142           return FALSE;
   2143         }
   2144     }
   2145   return TRUE;
   2146 }
   2147 
   2148 /* Set the sizes of the dynamic sections.  */
   2149 
   2150 static bfd_boolean
   2151 m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
   2152 				struct bfd_link_info *info)
   2153 {
   2154   struct elf_m32r_link_hash_table *htab;
   2155   bfd *dynobj;
   2156   asection *s;
   2157   bfd_boolean relocs;
   2158   bfd *ibfd;
   2159 
   2160 #ifdef DEBUG_PIC
   2161   printf ("m32r_elf_size_dynamic_sections()\n");
   2162 #endif
   2163 
   2164   htab = m32r_elf_hash_table (info);
   2165   if (htab == NULL)
   2166     return FALSE;
   2167 
   2168   dynobj = htab->root.dynobj;
   2169   BFD_ASSERT (dynobj != NULL);
   2170 
   2171   if (htab->root.dynamic_sections_created)
   2172     {
   2173       /* Set the contents of the .interp section to the interpreter.  */
   2174       if (info->executable)
   2175 	{
   2176 	  s = bfd_get_linker_section (dynobj, ".interp");
   2177 	  BFD_ASSERT (s != NULL);
   2178 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
   2179 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
   2180 	}
   2181     }
   2182 
   2183   /* Set up .got offsets for local syms, and space for local dynamic
   2184      relocs.  */
   2185   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
   2186     {
   2187       bfd_signed_vma *local_got;
   2188       bfd_signed_vma *end_local_got;
   2189       bfd_size_type locsymcount;
   2190       Elf_Internal_Shdr *symtab_hdr;
   2191       asection *srel;
   2192 
   2193       if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
   2194         continue;
   2195 
   2196       for (s = ibfd->sections; s != NULL; s = s->next)
   2197         {
   2198           struct elf_m32r_dyn_relocs *p;
   2199 
   2200           for (p = ((struct elf_m32r_dyn_relocs *)
   2201                     elf_section_data (s)->local_dynrel);
   2202                p != NULL;
   2203                p = p->next)
   2204             {
   2205               if (! bfd_is_abs_section (p->sec)
   2206                   && bfd_is_abs_section (p->sec->output_section))
   2207                 {
   2208                   /* Input section has been discarded, either because
   2209                      it is a copy of a linkonce section or due to
   2210                      linker script /DISCARD/, so we'll be discarding
   2211                      the relocs too.  */
   2212                 }
   2213               else if (p->count != 0)
   2214                 {
   2215                   srel = elf_section_data (p->sec)->sreloc;
   2216                   srel->size += p->count * sizeof (Elf32_External_Rela);
   2217                   if ((p->sec->output_section->flags & SEC_READONLY) != 0)
   2218                     info->flags |= DF_TEXTREL;
   2219                 }
   2220             }
   2221         }
   2222 
   2223       local_got = elf_local_got_refcounts (ibfd);
   2224       if (!local_got)
   2225         continue;
   2226 
   2227       symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
   2228       locsymcount = symtab_hdr->sh_info;
   2229       end_local_got = local_got + locsymcount;
   2230       s = htab->sgot;
   2231       srel = htab->srelgot;
   2232       for (; local_got < end_local_got; ++local_got)
   2233         {
   2234           if (*local_got > 0)
   2235             {
   2236               *local_got = s->size;
   2237               s->size += 4;
   2238               if (info->shared)
   2239                 srel->size += sizeof (Elf32_External_Rela);
   2240             }
   2241           else
   2242             *local_got = (bfd_vma) -1;
   2243         }
   2244     }
   2245 
   2246   /* Allocate global sym .plt and .got entries, and space for global
   2247      sym dynamic relocs.  */
   2248   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
   2249 
   2250   /* We now have determined the sizes of the various dynamic sections.
   2251      Allocate memory for them.  */
   2252   relocs = FALSE;
   2253   for (s = dynobj->sections; s != NULL; s = s->next)
   2254     {
   2255       if ((s->flags & SEC_LINKER_CREATED) == 0)
   2256         continue;
   2257 
   2258       if (s == htab->splt
   2259           || s == htab->sgot
   2260           || s == htab->sgotplt
   2261 	  || s == htab->sdynbss)
   2262         {
   2263           /* Strip this section if we don't need it; see the
   2264              comment below.  */
   2265         }
   2266       else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
   2267         {
   2268           if (s->size != 0 && s != htab->srelplt)
   2269             relocs = TRUE;
   2270 
   2271           /* We use the reloc_count field as a counter if we need
   2272              to copy relocs into the output file.  */
   2273           s->reloc_count = 0;
   2274         }
   2275       else
   2276 	/* It's not one of our sections, so don't allocate space.  */
   2277 	continue;
   2278 
   2279       if (s->size == 0)
   2280         {
   2281           /* If we don't need this section, strip it from the
   2282              output file.  This is mostly to handle .rela.bss and
   2283              .rela.plt.  We must create both sections in
   2284              create_dynamic_sections, because they must be created
   2285              before the linker maps input sections to output
   2286              sections.  The linker does that before
   2287              adjust_dynamic_symbol is called, and it is that
   2288              function which decides whether anything needs to go
   2289              into these sections.  */
   2290           s->flags |= SEC_EXCLUDE;
   2291           continue;
   2292         }
   2293 
   2294       if ((s->flags & SEC_HAS_CONTENTS) == 0)
   2295 	continue;
   2296 
   2297       /* Allocate memory for the section contents.  We use bfd_zalloc
   2298          here in case unused entries are not reclaimed before the
   2299          section's contents are written out.  This should not happen,
   2300          but this way if it does, we get a R_M32R_NONE reloc instead
   2301          of garbage.  */
   2302       s->contents = bfd_zalloc (dynobj, s->size);
   2303       if (s->contents == NULL)
   2304         return FALSE;
   2305     }
   2306 
   2307   if (htab->root.dynamic_sections_created)
   2308     {
   2309       /* Add some entries to the .dynamic section.  We fill in the
   2310 	 values later, in m32r_elf_finish_dynamic_sections, but we
   2311 	 must add the entries now so that we get the correct size for
   2312 	 the .dynamic section.  The DT_DEBUG entry is filled in by the
   2313 	 dynamic linker and used by the debugger.  */
   2314 #define add_dynamic_entry(TAG, VAL) \
   2315   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
   2316 
   2317      if (info->executable)
   2318 	{
   2319 	  if (! add_dynamic_entry (DT_DEBUG, 0))
   2320 	    return FALSE;
   2321 	}
   2322 
   2323       if (htab->splt->size != 0)
   2324         {
   2325           if (! add_dynamic_entry (DT_PLTGOT, 0)
   2326               || ! add_dynamic_entry (DT_PLTRELSZ, 0)
   2327               || ! add_dynamic_entry (DT_PLTREL, DT_RELA)
   2328               || ! add_dynamic_entry (DT_JMPREL, 0))
   2329             return FALSE;
   2330         }
   2331 
   2332       if (relocs)
   2333         {
   2334           if (! add_dynamic_entry (DT_RELA, 0)
   2335               || ! add_dynamic_entry (DT_RELASZ, 0)
   2336               || ! add_dynamic_entry (DT_RELAENT,
   2337                                       sizeof (Elf32_External_Rela)))
   2338             return FALSE;
   2339 
   2340           /* If any dynamic relocs apply to a read-only section,
   2341              then we need a DT_TEXTREL entry.  */
   2342           if ((info->flags & DF_TEXTREL) == 0)
   2343             elf_link_hash_traverse (&htab->root, readonly_dynrelocs,
   2344                                     info);
   2345 
   2346           if ((info->flags & DF_TEXTREL) != 0)
   2347             {
   2348               if (! add_dynamic_entry (DT_TEXTREL, 0))
   2349                 return FALSE;
   2350             }
   2351         }
   2352     }
   2353 #undef add_dynamic_entry
   2354 
   2355   return TRUE;
   2356 }
   2357 
   2358 /* Relocate an M32R/D ELF section.
   2359    There is some attempt to make this function usable for many architectures,
   2360    both for RELA and REL type relocs, if only to serve as a learning tool.
   2361 
   2362    The RELOCATE_SECTION function is called by the new ELF backend linker
   2363    to handle the relocations for a section.
   2364 
   2365    The relocs are always passed as Rela structures; if the section
   2366    actually uses Rel structures, the r_addend field will always be
   2367    zero.
   2368 
   2369    This function is responsible for adjust the section contents as
   2370    necessary, and (if using Rela relocs and generating a
   2371    relocatable output file) adjusting the reloc addend as
   2372    necessary.
   2373 
   2374    This function does not have to worry about setting the reloc
   2375    address or the reloc symbol index.
   2376 
   2377    LOCAL_SYMS is a pointer to the swapped in local symbols.
   2378 
   2379    LOCAL_SECTIONS is an array giving the section in the input file
   2380    corresponding to the st_shndx field of each local symbol.
   2381 
   2382    The global hash table entry for the global symbols can be found
   2383    via elf_sym_hashes (input_bfd).
   2384 
   2385    When generating relocatable output, this function must handle
   2386    STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
   2387    going to be the section symbol corresponding to the output
   2388    section, which means that the addend must be adjusted
   2389    accordingly.  */
   2390 
   2391 static bfd_boolean
   2392 m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
   2393 			   struct bfd_link_info *info,
   2394 			   bfd *input_bfd,
   2395 			   asection *input_section,
   2396 			   bfd_byte *contents,
   2397 			   Elf_Internal_Rela *relocs,
   2398 			   Elf_Internal_Sym *local_syms,
   2399 			   asection **local_sections)
   2400 {
   2401   Elf_Internal_Shdr *symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   2402   struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
   2403   Elf_Internal_Rela *rel, *relend;
   2404   /* Assume success.  */
   2405   bfd_boolean ret = TRUE;
   2406   struct elf_m32r_link_hash_table *htab = m32r_elf_hash_table (info);
   2407   bfd *dynobj;
   2408   bfd_vma *local_got_offsets;
   2409   asection *sgot, *splt, *sreloc;
   2410   bfd_vma high_address = bfd_get_section_limit (input_bfd, input_section);
   2411 
   2412   if (htab == NULL)
   2413     return FALSE;
   2414 
   2415   dynobj = htab->root.dynobj;
   2416   local_got_offsets = elf_local_got_offsets (input_bfd);
   2417 
   2418   sgot = htab->sgot;
   2419   splt = htab->splt;
   2420   sreloc = NULL;
   2421 
   2422   rel = relocs;
   2423   relend = relocs + input_section->reloc_count;
   2424   for (; rel < relend; rel++)
   2425     {
   2426       int r_type;
   2427       reloc_howto_type *howto;
   2428       unsigned long r_symndx;
   2429       struct elf_link_hash_entry *h;
   2430       /* We can't modify r_addend here as elf_link_input_bfd has an assert to
   2431          ensure it's zero (we use REL relocs, not RELA).  Therefore this
   2432          should be assigning zero to `addend', but for clarity we use
   2433          `r_addend'.  */
   2434       bfd_vma addend = rel->r_addend;
   2435       bfd_vma offset = rel->r_offset;
   2436       bfd_vma relocation;
   2437       Elf_Internal_Sym *sym;
   2438       asection *sec;
   2439       const char *sym_name;
   2440       bfd_reloc_status_type r;
   2441       const char *errmsg = NULL;
   2442       bfd_boolean use_rel = FALSE;
   2443 
   2444       h = NULL;
   2445       r_type = ELF32_R_TYPE (rel->r_info);
   2446       if (r_type < 0 || r_type >= (int) R_M32R_max)
   2447 	{
   2448 	  (*_bfd_error_handler) (_("%B: unknown relocation type %d"),
   2449 				 input_bfd,
   2450 				 (int) r_type);
   2451 	  bfd_set_error (bfd_error_bad_value);
   2452 	  ret = FALSE;
   2453 	  continue;
   2454 	}
   2455 
   2456       if (   r_type == R_M32R_GNU_VTENTRY
   2457           || r_type == R_M32R_GNU_VTINHERIT
   2458           || r_type == R_M32R_NONE
   2459           || r_type == R_M32R_RELA_GNU_VTENTRY
   2460           || r_type == R_M32R_RELA_GNU_VTINHERIT)
   2461         continue;
   2462 
   2463       if (r_type <= R_M32R_GNU_VTENTRY)
   2464         use_rel = TRUE;
   2465 
   2466       howto = m32r_elf_howto_table + r_type;
   2467       r_symndx = ELF32_R_SYM (rel->r_info);
   2468 
   2469       sym = NULL;
   2470       sec = NULL;
   2471       h = NULL;
   2472 
   2473       if (r_symndx < symtab_hdr->sh_info)
   2474 	{
   2475 	  /* Local symbol.  */
   2476 	  sym = local_syms + r_symndx;
   2477 	  sec = local_sections[r_symndx];
   2478 	  sym_name = "<local symbol>";
   2479 
   2480 	  if (!use_rel)
   2481 	    {
   2482 	      relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
   2483 	      addend = rel->r_addend;
   2484 	    }
   2485 	  else
   2486 	    {
   2487 	      relocation = (sec->output_section->vma
   2488 			    + sec->output_offset
   2489 			    + sym->st_value);
   2490 	    }
   2491 	}
   2492       else
   2493 	{
   2494 	  /* External symbol.  */
   2495 	  relocation = 0;
   2496 
   2497 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
   2498 
   2499 	  if (info->wrap_hash != NULL
   2500 	      && (input_section->flags & SEC_DEBUGGING) != 0)
   2501 	    h = ((struct elf_link_hash_entry *)
   2502 		 unwrap_hash_lookup (info, input_bfd, &h->root));
   2503 
   2504 	  while (h->root.type == bfd_link_hash_indirect
   2505 		 || h->root.type == bfd_link_hash_warning)
   2506 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
   2507 	  sym_name = h->root.root.string;
   2508 
   2509 	  if (h->root.type == bfd_link_hash_defined
   2510 	      || h->root.type == bfd_link_hash_defweak)
   2511 	    {
   2512 	      bfd_boolean dyn;
   2513 	      sec = h->root.u.def.section;
   2514 
   2515 	      dyn = htab->root.dynamic_sections_created;
   2516 	      sec = h->root.u.def.section;
   2517 	      if (r_type == R_M32R_GOTPC24
   2518 		  || (r_type == R_M32R_GOTPC_HI_ULO
   2519 		      || r_type == R_M32R_GOTPC_HI_SLO
   2520 		      || r_type == R_M32R_GOTPC_LO)
   2521 		  || (r_type == R_M32R_26_PLTREL
   2522 		      && h->plt.offset != (bfd_vma) -1)
   2523 		  || ((r_type == R_M32R_GOT24
   2524 		       || r_type == R_M32R_GOT16_HI_ULO
   2525 		       || r_type == R_M32R_GOT16_HI_SLO
   2526 		       || r_type == R_M32R_GOT16_LO)
   2527 		      && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
   2528 							  info->shared, h)
   2529 		      && (! info->shared
   2530 			  || (! info->symbolic && h->dynindx != -1)
   2531 			  || !h->def_regular))
   2532 		  || (info->shared
   2533 		      && ((! info->symbolic && h->dynindx != -1)
   2534 			  || !h->def_regular)
   2535 		      && (((r_type == R_M32R_16_RELA
   2536 			    || r_type == R_M32R_32_RELA
   2537 			    || r_type == R_M32R_24_RELA
   2538 			    || r_type == R_M32R_HI16_ULO_RELA
   2539 			    || r_type == R_M32R_HI16_SLO_RELA
   2540 			    || r_type == R_M32R_LO16_RELA)
   2541 			   && !h->forced_local)
   2542 			  || r_type == R_M32R_REL32
   2543 			  || r_type == R_M32R_10_PCREL_RELA
   2544 			  || r_type == R_M32R_18_PCREL_RELA
   2545 			  || r_type == R_M32R_26_PCREL_RELA)
   2546 		      && ((input_section->flags & SEC_ALLOC) != 0
   2547 			  /* DWARF will emit R_M32R_16(24,32) relocations
   2548 			     in its sections against symbols defined
   2549 			     externally in shared libraries.  We can't do
   2550 			     anything with them here.  */
   2551 			  || ((input_section->flags & SEC_DEBUGGING) != 0
   2552 			      && h->def_dynamic))))
   2553 		{
   2554 		  /* In these cases, we don't need the relocation
   2555 		     value.  We check specially because in some
   2556 		     obscure cases sec->output_section will be NULL.  */
   2557 		}
   2558 	      else if (sec->output_section != NULL)
   2559 		relocation = (h->root.u.def.value
   2560 			      + sec->output_section->vma
   2561 			      + sec->output_offset);
   2562 	      else if (!info->relocatable
   2563 		       && (_bfd_elf_section_offset (output_bfd, info,
   2564 						    input_section,
   2565 						    rel->r_offset)
   2566 			   != (bfd_vma) -1))
   2567 		{
   2568 		  (*_bfd_error_handler)
   2569 		    (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
   2570 		     input_bfd,
   2571 		     input_section,
   2572 		     (long) rel->r_offset,
   2573 		     howto->name,
   2574 		     h->root.root.string);
   2575 		}
   2576 	    }
   2577 	  else if (h->root.type == bfd_link_hash_undefweak)
   2578 	    ;
   2579 	  else if (info->unresolved_syms_in_objects == RM_IGNORE
   2580 		   && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
   2581 	    ;
   2582 	  else if (!info->relocatable)
   2583 	    {
   2584 	      if (! ((*info->callbacks->undefined_symbol)
   2585 		     (info, h->root.root.string, input_bfd,
   2586 		      input_section, offset,
   2587 		      (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
   2588 		       || ELF_ST_VISIBILITY (h->other)))))
   2589 		return FALSE;
   2590 	    }
   2591 	}
   2592 
   2593       if (sec != NULL && discarded_section (sec))
   2594 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
   2595 					 rel, 1, relend, howto, 0, contents);
   2596 
   2597       if (info->relocatable && !use_rel)
   2598 	{
   2599 	  /* This is a relocatable link.  We don't have to change
   2600 	     anything, unless the reloc is against a section symbol,
   2601 	     in which case we have to adjust according to where the
   2602 	     section symbol winds up in the output section.  */
   2603 	  if (sym != NULL && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
   2604 	    rel->r_addend += sec->output_offset;
   2605 	  continue;
   2606 	}
   2607 
   2608       if (info->relocatable && use_rel)
   2609 	{
   2610 	  /* This is a relocatable link.  We don't have to change
   2611 	     anything, unless the reloc is against a section symbol,
   2612 	     in which case we have to adjust according to where the
   2613 	     section symbol winds up in the output section.  */
   2614 	  if (sym == NULL || ELF_ST_TYPE (sym->st_info) != STT_SECTION)
   2615 	    continue;
   2616 
   2617 	  addend += sec->output_offset;
   2618 
   2619 	  /* If partial_inplace, we need to store any additional addend
   2620 	     back in the section.  */
   2621 	  if (! howto->partial_inplace)
   2622 	    continue;
   2623 	  /* ??? Here is a nice place to call a special_function
   2624 	     like handler.  */
   2625 	  if (r_type != R_M32R_HI16_SLO && r_type != R_M32R_HI16_ULO)
   2626 	    r = _bfd_relocate_contents (howto, input_bfd,
   2627 					addend, contents + offset);
   2628 	  else
   2629 	    {
   2630 	      Elf_Internal_Rela *lorel;
   2631 
   2632 	      /* We allow an arbitrary number of HI16 relocs before the
   2633 		 LO16 reloc.  This permits gcc to emit the HI and LO relocs
   2634 		 itself.  */
   2635 	      for (lorel = rel + 1;
   2636 		   (lorel < relend
   2637 		    && (ELF32_R_TYPE (lorel->r_info) == R_M32R_HI16_SLO
   2638 			|| ELF32_R_TYPE (lorel->r_info) == R_M32R_HI16_ULO));
   2639 		   lorel++)
   2640 		continue;
   2641 	      if (lorel < relend
   2642 		  && ELF32_R_TYPE (lorel->r_info) == R_M32R_LO16)
   2643 		{
   2644 		  m32r_elf_relocate_hi16 (input_bfd, r_type, rel, lorel,
   2645 					  contents, addend);
   2646 		  r = bfd_reloc_ok;
   2647 		}
   2648 	      else
   2649 		r = _bfd_relocate_contents (howto, input_bfd,
   2650 					    addend, contents + offset);
   2651 	    }
   2652 	}
   2653       else
   2654 	{
   2655 	  /* Sanity check the address.  */
   2656 	  if (offset > high_address)
   2657 	    {
   2658 	      r = bfd_reloc_outofrange;
   2659 	      goto check_reloc;
   2660 	    }
   2661 
   2662 	  switch ((int) r_type)
   2663 	    {
   2664             case R_M32R_GOTOFF:
   2665               /* Relocation is relative to the start of the global offset
   2666                  table (for ld24 rx, #uimm24). eg access at label+addend
   2667 
   2668                  ld24 rx. #label@GOTOFF + addend
   2669                  sub  rx, r12.  */
   2670 
   2671               BFD_ASSERT (sgot != NULL);
   2672 
   2673               relocation = -(relocation - sgot->output_section->vma);
   2674               rel->r_addend = -rel->r_addend;
   2675               break;
   2676 
   2677             case R_M32R_GOTOFF_HI_ULO:
   2678             case R_M32R_GOTOFF_HI_SLO:
   2679             case R_M32R_GOTOFF_LO:
   2680 	      BFD_ASSERT (sgot != NULL);
   2681 
   2682 	      relocation -= sgot->output_section->vma;
   2683 
   2684 	      if ((r_type == R_M32R_GOTOFF_HI_SLO)
   2685 		  && ((relocation + rel->r_addend) & 0x8000))
   2686 		rel->r_addend += 0x10000;
   2687 	      break;
   2688 
   2689             case R_M32R_GOTPC24:
   2690               /* .got(_GLOBAL_OFFSET_TABLE_) - pc relocation
   2691                  ld24 rx,#_GLOBAL_OFFSET_TABLE_
   2692                */
   2693              relocation = sgot->output_section->vma;
   2694              break;
   2695 
   2696             case R_M32R_GOTPC_HI_ULO:
   2697             case R_M32R_GOTPC_HI_SLO:
   2698             case R_M32R_GOTPC_LO:
   2699               {
   2700                 /* .got(_GLOBAL_OFFSET_TABLE_) - pc relocation
   2701                    bl .+4
   2702                    seth rx,#high(_GLOBAL_OFFSET_TABLE_)
   2703                    or3 rx,rx,#low(_GLOBAL_OFFSET_TABLE_ +4)
   2704                    or
   2705                    bl .+4
   2706                    seth rx,#shigh(_GLOBAL_OFFSET_TABLE_)
   2707                    add3 rx,rx,#low(_GLOBAL_OFFSET_TABLE_ +4)
   2708                  */
   2709                 relocation = sgot->output_section->vma;
   2710                 relocation -= (input_section->output_section->vma
   2711                                + input_section->output_offset
   2712                                + rel->r_offset);
   2713                 if ((r_type == R_M32R_GOTPC_HI_SLO)
   2714                      && ((relocation + rel->r_addend) & 0x8000))
   2715                   rel->r_addend += 0x10000;
   2716 
   2717                 break;
   2718               }
   2719             case R_M32R_GOT16_HI_ULO:
   2720             case R_M32R_GOT16_HI_SLO:
   2721             case R_M32R_GOT16_LO:
   2722               /* Fall through.  */
   2723             case R_M32R_GOT24:
   2724               /* Relocation is to the entry for this symbol in the global
   2725                  offset table.  */
   2726               BFD_ASSERT (sgot != NULL);
   2727 
   2728               if (h != NULL)
   2729                 {
   2730                   bfd_boolean dyn;
   2731                   bfd_vma off;
   2732 
   2733                   off = h->got.offset;
   2734                   BFD_ASSERT (off != (bfd_vma) -1);
   2735 
   2736                   dyn = htab->root.dynamic_sections_created;
   2737                   if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
   2738                       || (info->shared
   2739                           && (info->symbolic
   2740                               || h->dynindx == -1
   2741                               || h->forced_local)
   2742                           && h->def_regular))
   2743                     {
   2744                       /* This is actually a static link, or it is a
   2745                          -Bsymbolic link and the symbol is defined
   2746                          locally, or the symbol was forced to be local
   2747                          because of a version file.  We must initialize
   2748                          this entry in the global offset table.  Since the
   2749                          offset must always be a multiple of 4, we use the
   2750                          least significant bit to record whether we have
   2751                          initialized it already.
   2752 
   2753                          When doing a dynamic link, we create a .rela.got
   2754                          relocation entry to initialize the value.  This
   2755                          is done in the finish_dynamic_symbol routine.  */
   2756                       if ((off & 1) != 0)
   2757                         off &= ~1;
   2758                       else
   2759                         {
   2760                           bfd_put_32 (output_bfd, relocation,
   2761                                       sgot->contents + off);
   2762                           h->got.offset |= 1;
   2763                         }
   2764                     }
   2765 
   2766                   relocation = sgot->output_offset + off;
   2767                 }
   2768               else
   2769                 {
   2770                   bfd_vma off;
   2771                   bfd_byte *loc;
   2772 
   2773                   BFD_ASSERT (local_got_offsets != NULL
   2774                               && local_got_offsets[r_symndx] != (bfd_vma) -1);
   2775 
   2776                   off = local_got_offsets[r_symndx];
   2777 
   2778                   /* The offset must always be a multiple of 4.  We use
   2779                      the least significant bit to record whether we have
   2780                      already processed this entry.  */
   2781                   if ((off & 1) != 0)
   2782                     off &= ~1;
   2783                   else
   2784                     {
   2785                       bfd_put_32 (output_bfd, relocation, sgot->contents + off);
   2786 
   2787                       if (info->shared)
   2788                         {
   2789                           asection *srelgot;
   2790                           Elf_Internal_Rela outrel;
   2791 
   2792                           /* We need to generate a R_M32R_RELATIVE reloc
   2793                              for the dynamic linker.  */
   2794                           srelgot = bfd_get_linker_section (dynobj,
   2795 							    ".rela.got");
   2796                           BFD_ASSERT (srelgot != NULL);
   2797 
   2798                           outrel.r_offset = (sgot->output_section->vma
   2799                                              + sgot->output_offset
   2800                                              + off);
   2801                           outrel.r_info = ELF32_R_INFO (0, R_M32R_RELATIVE);
   2802                           outrel.r_addend = relocation;
   2803                           loc = srelgot->contents;
   2804                           loc += srelgot->reloc_count * sizeof (Elf32_External_Rela);
   2805                           bfd_elf32_swap_reloca_out (output_bfd, &outrel,loc);
   2806                           ++srelgot->reloc_count;
   2807                         }
   2808 
   2809                       local_got_offsets[r_symndx] |= 1;
   2810                     }
   2811 
   2812                   relocation = sgot->output_offset + off;
   2813                 }
   2814               if ((r_type == R_M32R_GOT16_HI_SLO)
   2815                   && ((relocation + rel->r_addend) & 0x8000))
   2816                 rel->r_addend += 0x10000;
   2817 
   2818               break;
   2819 
   2820             case R_M32R_26_PLTREL:
   2821               /* Relocation is to the entry for this symbol in the
   2822                  procedure linkage table.  */
   2823 
   2824               /* The native assembler will generate a 26_PLTREL reloc
   2825                  for a local symbol if you assemble a call from one
   2826                  section to another when using -K pic. */
   2827               if (h == NULL)
   2828                 break;
   2829 
   2830               if (h->forced_local)
   2831                 break;
   2832 
   2833               if (h->plt.offset == (bfd_vma) -1)
   2834 		/* We didn't make a PLT entry for this symbol.  This
   2835 		   happens when statically linking PIC code, or when
   2836 		   using -Bsymbolic.  */
   2837 		break;
   2838 
   2839               relocation = (splt->output_section->vma
   2840                             + splt->output_offset
   2841                             + h->plt.offset);
   2842               break;
   2843 
   2844             case R_M32R_HI16_SLO_RELA:
   2845 	      if ((relocation + rel->r_addend) & 0x8000)
   2846 		rel->r_addend += 0x10000;
   2847               /* Fall through.  */
   2848 
   2849             case R_M32R_16_RELA:
   2850             case R_M32R_24_RELA:
   2851             case R_M32R_32_RELA:
   2852             case R_M32R_REL32:
   2853 	    case R_M32R_10_PCREL_RELA:
   2854             case R_M32R_18_PCREL_RELA:
   2855             case R_M32R_26_PCREL_RELA:
   2856             case R_M32R_HI16_ULO_RELA:
   2857             case R_M32R_LO16_RELA:
   2858               if (info->shared
   2859                   && r_symndx != STN_UNDEF
   2860                   && (input_section->flags & SEC_ALLOC) != 0
   2861                   && ((   r_type != R_M32R_10_PCREL_RELA
   2862                        && r_type != R_M32R_18_PCREL_RELA
   2863                        && r_type != R_M32R_26_PCREL_RELA
   2864                        && r_type != R_M32R_REL32)
   2865                       || (h != NULL
   2866                           && h->dynindx != -1
   2867                           && (! info->symbolic
   2868                               || !h->def_regular))))
   2869                 {
   2870                   Elf_Internal_Rela outrel;
   2871                   bfd_boolean skip, relocate;
   2872                   bfd_byte *loc;
   2873 
   2874                   /* When generating a shared object, these relocations
   2875                      are copied into the output file to be resolved at run
   2876                      time.  */
   2877                   if (sreloc == NULL)
   2878                     {
   2879 		      sreloc = _bfd_elf_get_dynamic_reloc_section
   2880 			(input_bfd, input_section, /*rela?*/ TRUE);
   2881 		      if (sreloc == NULL)
   2882 			return FALSE;
   2883                     }
   2884 
   2885                   skip = FALSE;
   2886                   relocate = FALSE;
   2887 
   2888                   outrel.r_offset = _bfd_elf_section_offset (output_bfd,
   2889                                                              info,
   2890                                                              input_section,
   2891                                                              rel->r_offset);
   2892                   if (outrel.r_offset == (bfd_vma) -1)
   2893                     skip = TRUE;
   2894                   else if (outrel.r_offset == (bfd_vma) -2)
   2895                     skip = relocate = TRUE;
   2896                   outrel.r_offset += (input_section->output_section->vma
   2897                                       + input_section->output_offset);
   2898 
   2899                   if (skip)
   2900                     memset (&outrel, 0, sizeof outrel);
   2901                   else if (   r_type == R_M32R_10_PCREL_RELA
   2902                            || r_type == R_M32R_18_PCREL_RELA
   2903                            || r_type == R_M32R_26_PCREL_RELA
   2904                            || r_type == R_M32R_REL32)
   2905                     {
   2906                       BFD_ASSERT (h != NULL && h->dynindx != -1);
   2907                       outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
   2908                       outrel.r_addend = rel->r_addend;
   2909                     }
   2910                   else
   2911                     {
   2912                     /* h->dynindx may be -1 if this symbol was marked to
   2913                        become local.  */
   2914                     if (h == NULL
   2915                         || ((info->symbolic || h->dynindx == -1)
   2916                              && h->def_regular))
   2917                       {
   2918                         relocate = TRUE;
   2919                         outrel.r_info = ELF32_R_INFO (0, R_M32R_RELATIVE);
   2920                         outrel.r_addend = relocation + rel->r_addend;
   2921                       }
   2922                     else
   2923                       {
   2924                         BFD_ASSERT (h->dynindx != -1);
   2925                         outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
   2926                         outrel.r_addend = relocation + rel->r_addend;
   2927                       }
   2928                     }
   2929 
   2930                   loc = sreloc->contents;
   2931                   loc += sreloc->reloc_count * sizeof (Elf32_External_Rela);
   2932                   bfd_elf32_swap_reloca_out (output_bfd, &outrel,loc);
   2933                   ++sreloc->reloc_count;
   2934 
   2935                   /* If this reloc is against an external symbol, we do
   2936                      not want to fiddle with the addend.  Otherwise, we
   2937                      need to include the symbol value so that it becomes
   2938                      an addend for the dynamic reloc.  */
   2939                   if (! relocate)
   2940                     continue;
   2941 		  break;
   2942                 }
   2943 	      else if (r_type != R_M32R_10_PCREL_RELA)
   2944 		break;
   2945 	      /* Fall through.  */
   2946 
   2947 	    case (int) R_M32R_10_PCREL :
   2948 	      r = m32r_elf_do_10_pcrel_reloc (input_bfd, howto, input_section,
   2949 					      contents, offset,
   2950 					      sec, relocation, addend);
   2951               goto check_reloc;
   2952 
   2953 	    case (int) R_M32R_HI16_SLO :
   2954 	    case (int) R_M32R_HI16_ULO :
   2955 	      {
   2956 		Elf_Internal_Rela *lorel;
   2957 
   2958 		/* We allow an arbitrary number of HI16 relocs before the
   2959 		   LO16 reloc.  This permits gcc to emit the HI and LO relocs
   2960 		   itself.  */
   2961 		for (lorel = rel + 1;
   2962 		     (lorel < relend
   2963 		      && (ELF32_R_TYPE (lorel->r_info) == R_M32R_HI16_SLO
   2964 			  || ELF32_R_TYPE (lorel->r_info) == R_M32R_HI16_ULO));
   2965 		     lorel++)
   2966 		  continue;
   2967 		if (lorel < relend
   2968 		    && ELF32_R_TYPE (lorel->r_info) == R_M32R_LO16)
   2969 		  {
   2970 		    m32r_elf_relocate_hi16 (input_bfd, r_type, rel, lorel,
   2971 					    contents, relocation + addend);
   2972 		    r = bfd_reloc_ok;
   2973 		  }
   2974 		else
   2975 		  r = _bfd_final_link_relocate (howto, input_bfd, input_section,
   2976 						contents, offset,
   2977 						relocation, addend);
   2978 	      }
   2979 
   2980               goto check_reloc;
   2981 
   2982             case (int) R_M32R_SDA16_RELA:
   2983 	    case (int) R_M32R_SDA16 :
   2984 	      {
   2985 		const char *name;
   2986 
   2987 		BFD_ASSERT (sec != NULL);
   2988 		name = bfd_get_section_name (sec->owner, sec);
   2989 
   2990 		if (   strcmp (name, ".sdata") == 0
   2991 		    || strcmp (name, ".sbss") == 0
   2992 		    || strcmp (name, ".scommon") == 0)
   2993 		  {
   2994 		    bfd_vma sda_base;
   2995 		    bfd *out_bfd = sec->output_section->owner;
   2996 
   2997 		    r = m32r_elf_final_sda_base (out_bfd, info,
   2998 						 &errmsg,
   2999 						 &sda_base);
   3000 		    if (r != bfd_reloc_ok)
   3001 		      {
   3002 			ret = FALSE;
   3003 			goto check_reloc;
   3004 		      }
   3005 
   3006 		    /* At this point `relocation' contains the object's
   3007 		       address.  */
   3008 		    relocation -= sda_base;
   3009 		    /* Now it contains the offset from _SDA_BASE_.  */
   3010 		  }
   3011 		else
   3012 		  {
   3013 		    (*_bfd_error_handler)
   3014 		      (_("%B: The target (%s) of an %s relocation is in the wrong section (%A)"),
   3015 		       input_bfd,
   3016 		       sec,
   3017 		       sym_name,
   3018 		       m32r_elf_howto_table[(int) r_type].name);
   3019 		    /*bfd_set_error (bfd_error_bad_value); ??? why? */
   3020 		    ret = FALSE;
   3021 		    continue;
   3022 		  }
   3023 	      }
   3024               /* Fall through.  */
   3025 
   3026 	    default : /* OLD_M32R_RELOC */
   3027 
   3028 	      r = _bfd_final_link_relocate (howto, input_bfd, input_section,
   3029 					    contents, offset,
   3030 					    relocation, addend);
   3031 	      goto check_reloc;
   3032 	    }
   3033 
   3034           r = _bfd_final_link_relocate (howto, input_bfd, input_section,
   3035                                         contents, rel->r_offset,
   3036                                         relocation, rel->r_addend);
   3037 
   3038 	}
   3039 
   3040     check_reloc:
   3041 
   3042       if (r != bfd_reloc_ok)
   3043 	{
   3044 	  /* FIXME: This should be generic enough to go in a utility.  */
   3045 	  const char *name;
   3046 
   3047 	  if (h != NULL)
   3048 	    name = h->root.root.string;
   3049 	  else
   3050 	    {
   3051 	      name = (bfd_elf_string_from_elf_section
   3052 		      (input_bfd, symtab_hdr->sh_link, sym->st_name));
   3053 	      if (name == NULL || *name == '\0')
   3054 		name = bfd_section_name (input_bfd, sec);
   3055 	    }
   3056 
   3057 	  if (errmsg != NULL)
   3058 	    goto common_error;
   3059 
   3060 	  switch (r)
   3061 	    {
   3062 	    case bfd_reloc_overflow:
   3063 	      if (! ((*info->callbacks->reloc_overflow)
   3064 		     (info, (h ? &h->root : NULL), name, howto->name,
   3065 		      (bfd_vma) 0, input_bfd, input_section, offset)))
   3066 		return FALSE;
   3067 	      break;
   3068 
   3069 	    case bfd_reloc_undefined:
   3070 	      if (! ((*info->callbacks->undefined_symbol)
   3071 		     (info, name, input_bfd, input_section,
   3072 		      offset, TRUE)))
   3073 		return FALSE;
   3074 	      break;
   3075 
   3076 	    case bfd_reloc_outofrange:
   3077 	      errmsg = _("internal error: out of range error");
   3078 	      goto common_error;
   3079 
   3080 	    case bfd_reloc_notsupported:
   3081 	      errmsg = _("internal error: unsupported relocation error");
   3082 	      goto common_error;
   3083 
   3084 	    case bfd_reloc_dangerous:
   3085 	      errmsg = _("internal error: dangerous error");
   3086 	      goto common_error;
   3087 
   3088 	    default:
   3089 	      errmsg = _("internal error: unknown error");
   3090 	      /* fall through */
   3091 
   3092 	    common_error:
   3093 	      if (!((*info->callbacks->warning)
   3094 		    (info, errmsg, name, input_bfd, input_section,
   3095 		     offset)))
   3096 		return FALSE;
   3097 	      break;
   3098 	    }
   3099 	}
   3100     }
   3101 
   3102   return ret;
   3103 }
   3104 
   3105 /* Finish up dynamic symbol handling.  We set the contents of various
   3106    dynamic sections here.  */
   3107 
   3108 static bfd_boolean
   3109 m32r_elf_finish_dynamic_symbol (bfd *output_bfd,
   3110 				struct bfd_link_info *info,
   3111 				struct elf_link_hash_entry *h,
   3112 				Elf_Internal_Sym *sym)
   3113 {
   3114   struct elf_m32r_link_hash_table *htab;
   3115   bfd_byte *loc;
   3116 
   3117 #ifdef DEBUG_PIC
   3118   printf ("m32r_elf_finish_dynamic_symbol()\n");
   3119 #endif
   3120 
   3121   htab = m32r_elf_hash_table (info);
   3122   if (htab == NULL)
   3123     return FALSE;
   3124 
   3125   if (h->plt.offset != (bfd_vma) -1)
   3126     {
   3127       asection *splt;
   3128       asection *sgot;
   3129       asection *srela;
   3130 
   3131       bfd_vma plt_index;
   3132       bfd_vma got_offset;
   3133       Elf_Internal_Rela rela;
   3134 
   3135       /* This symbol has an entry in the procedure linkage table.  Set
   3136          it up.  */
   3137 
   3138       BFD_ASSERT (h->dynindx != -1);
   3139 
   3140       splt = htab->splt;
   3141       sgot = htab->sgotplt;
   3142       srela = htab->srelplt;
   3143       BFD_ASSERT (splt != NULL && sgot != NULL && srela != NULL);
   3144 
   3145       /* Get the index in the procedure linkage table which
   3146          corresponds to this symbol.  This is the index of this symbol
   3147          in all the symbols for which we are making plt entries.  The
   3148          first entry in the procedure linkage table is reserved.  */
   3149       plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1;
   3150 
   3151       /* Get the offset into the .got table of the entry that
   3152         corresponds to this function.  Each .got entry is 4 bytes.
   3153         The first three are reserved.  */
   3154       got_offset = (plt_index + 3) * 4;
   3155 
   3156       /* Fill in the entry in the procedure linkage table.  */
   3157       if (! info->shared)
   3158         {
   3159           bfd_put_32 (output_bfd,
   3160               (PLT_ENTRY_WORD0b
   3161                + (((sgot->output_section->vma
   3162                     + sgot->output_offset
   3163                     + got_offset) >> 16) & 0xffff)),
   3164               splt->contents + h->plt.offset);
   3165           bfd_put_32 (output_bfd,
   3166               (PLT_ENTRY_WORD1b
   3167                + ((sgot->output_section->vma
   3168                    + sgot->output_offset
   3169                    + got_offset) & 0xffff)),
   3170               splt->contents + h->plt.offset + 4);
   3171           bfd_put_32 (output_bfd, PLT_ENTRY_WORD2,
   3172               splt->contents + h->plt.offset + 8);
   3173           bfd_put_32 (output_bfd,
   3174               (PLT_ENTRY_WORD3
   3175                + plt_index * sizeof (Elf32_External_Rela)),
   3176               splt->contents + h->plt.offset + 12);
   3177           bfd_put_32 (output_bfd,
   3178               (PLT_ENTRY_WORD4
   3179                + (((unsigned int) ((- (h->plt.offset + 16)) >> 2)) & 0xffffff)),
   3180               splt->contents + h->plt.offset + 16);
   3181         }
   3182       else
   3183         {
   3184           bfd_put_32 (output_bfd,
   3185               PLT_ENTRY_WORD0 + got_offset,
   3186               splt->contents + h->plt.offset);
   3187           bfd_put_32 (output_bfd, PLT_ENTRY_WORD1,
   3188               splt->contents + h->plt.offset + 4);
   3189           bfd_put_32 (output_bfd, PLT_ENTRY_WORD2,
   3190               splt->contents + h->plt.offset + 8);
   3191           bfd_put_32 (output_bfd,
   3192               (PLT_ENTRY_WORD3
   3193                + plt_index * sizeof (Elf32_External_Rela)),
   3194               splt->contents + h->plt.offset + 12);
   3195           bfd_put_32 (output_bfd,
   3196               (PLT_ENTRY_WORD4
   3197                + (((unsigned int) ((- (h->plt.offset + 16)) >> 2)) & 0xffffff)),
   3198               splt->contents + h->plt.offset + 16);
   3199         }
   3200 
   3201       /* Fill in the entry in the global offset table.  */
   3202       bfd_put_32 (output_bfd,
   3203                   (splt->output_section->vma
   3204                    + splt->output_offset
   3205                    + h->plt.offset
   3206                    + 12), /* same offset */
   3207                   sgot->contents + got_offset);
   3208 
   3209       /* Fill in the entry in the .rela.plt section.  */
   3210       rela.r_offset = (sgot->output_section->vma
   3211                        + sgot->output_offset
   3212                        + got_offset);
   3213       rela.r_info = ELF32_R_INFO (h->dynindx, R_M32R_JMP_SLOT);
   3214       rela.r_addend = 0;
   3215       loc = srela->contents;
   3216       loc += plt_index * sizeof (Elf32_External_Rela);
   3217       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
   3218 
   3219       if (!h->def_regular)
   3220         {
   3221           /* Mark the symbol as undefined, rather than as defined in
   3222              the .plt section.  Leave the value alone.  */
   3223           sym->st_shndx = SHN_UNDEF;
   3224         }
   3225     }
   3226 
   3227   if (h->got.offset != (bfd_vma) -1)
   3228     {
   3229       asection *sgot;
   3230       asection *srela;
   3231       Elf_Internal_Rela rela;
   3232 
   3233       /* This symbol has an entry in the global offset table.  Set it
   3234          up.  */
   3235 
   3236       sgot = htab->sgot;
   3237       srela = htab->srelgot;
   3238       BFD_ASSERT (sgot != NULL && srela != NULL);
   3239 
   3240       rela.r_offset = (sgot->output_section->vma
   3241                        + sgot->output_offset
   3242                        + (h->got.offset &~ 1));
   3243 
   3244       /* If this is a -Bsymbolic link, and the symbol is defined
   3245          locally, we just want to emit a RELATIVE reloc.  Likewise if
   3246          the symbol was forced to be local because of a version file.
   3247          The entry in the global offset table will already have been
   3248          initialized in the relocate_section function.  */
   3249       if (info->shared
   3250           && (info->symbolic
   3251 	      || h->dynindx == -1
   3252 	      || h->forced_local)
   3253           && h->def_regular)
   3254         {
   3255           rela.r_info = ELF32_R_INFO (0, R_M32R_RELATIVE);
   3256           rela.r_addend = (h->root.u.def.value
   3257                            + h->root.u.def.section->output_section->vma
   3258                            + h->root.u.def.section->output_offset);
   3259         }
   3260       else
   3261         {
   3262 	  BFD_ASSERT ((h->got.offset & 1) == 0);
   3263           bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
   3264           rela.r_info = ELF32_R_INFO (h->dynindx, R_M32R_GLOB_DAT);
   3265           rela.r_addend = 0;
   3266         }
   3267 
   3268       loc = srela->contents;
   3269       loc += srela->reloc_count * sizeof (Elf32_External_Rela);
   3270       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
   3271       ++srela->reloc_count;
   3272     }
   3273 
   3274   if (h->needs_copy)
   3275     {
   3276       asection *s;
   3277       Elf_Internal_Rela rela;
   3278 
   3279       /* This symbols needs a copy reloc.  Set it up.  */
   3280 
   3281       BFD_ASSERT (h->dynindx != -1
   3282                   && (h->root.type == bfd_link_hash_defined
   3283                       || h->root.type == bfd_link_hash_defweak));
   3284 
   3285       s = bfd_get_linker_section (htab->root.dynobj, ".rela.bss");
   3286       BFD_ASSERT (s != NULL);
   3287 
   3288       rela.r_offset = (h->root.u.def.value
   3289                        + h->root.u.def.section->output_section->vma
   3290                        + h->root.u.def.section->output_offset);
   3291       rela.r_info = ELF32_R_INFO (h->dynindx, R_M32R_COPY);
   3292       rela.r_addend = 0;
   3293       loc = s->contents;
   3294       loc += s->reloc_count * sizeof (Elf32_External_Rela);
   3295       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
   3296       ++s->reloc_count;
   3297     }
   3298 
   3299   /* Mark some specially defined symbols as absolute.  */
   3300   if (h == htab->root.hdynamic || h == htab->root.hgot)
   3301     sym->st_shndx = SHN_ABS;
   3302 
   3303   return TRUE;
   3304 }
   3305 
   3306 
   3307 /* Finish up the dynamic sections.  */
   3308 
   3309 static bfd_boolean
   3310 m32r_elf_finish_dynamic_sections (bfd *output_bfd,
   3311 				  struct bfd_link_info *info)
   3312 {
   3313   struct elf_m32r_link_hash_table *htab;
   3314   bfd *dynobj;
   3315   asection *sdyn;
   3316   asection *sgot;
   3317 
   3318 #ifdef DEBUG_PIC
   3319   printf ("m32r_elf_finish_dynamic_sections()\n");
   3320 #endif
   3321 
   3322   htab = m32r_elf_hash_table (info);
   3323   if (htab == NULL)
   3324     return FALSE;
   3325 
   3326   dynobj = htab->root.dynobj;
   3327 
   3328   sgot = htab->sgotplt;
   3329   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
   3330 
   3331   if (htab->root.dynamic_sections_created)
   3332     {
   3333       asection *splt;
   3334       Elf32_External_Dyn *dyncon, *dynconend;
   3335 
   3336       BFD_ASSERT (sgot != NULL && sdyn != NULL);
   3337 
   3338       dyncon = (Elf32_External_Dyn *) sdyn->contents;
   3339       dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
   3340 
   3341       for (; dyncon < dynconend; dyncon++)
   3342         {
   3343           Elf_Internal_Dyn dyn;
   3344           asection *s;
   3345 
   3346           bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
   3347 
   3348           switch (dyn.d_tag)
   3349             {
   3350             default:
   3351               break;
   3352 
   3353             case DT_PLTGOT:
   3354               s = htab->sgot->output_section;
   3355               goto get_vma;
   3356             case DT_JMPREL:
   3357               s = htab->srelplt->output_section;
   3358             get_vma:
   3359               BFD_ASSERT (s != NULL);
   3360               dyn.d_un.d_ptr = s->vma;
   3361               bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
   3362               break;
   3363 
   3364             case DT_PLTRELSZ:
   3365               s = htab->srelplt->output_section;
   3366               BFD_ASSERT (s != NULL);
   3367 	      dyn.d_un.d_val = s->size;
   3368               bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
   3369               break;
   3370 
   3371             case DT_RELASZ:
   3372               /* My reading of the SVR4 ABI indicates that the
   3373                  procedure linkage table relocs (DT_JMPREL) should be
   3374                  included in the overall relocs (DT_RELA).  This is
   3375                  what Solaris does.  However, UnixWare can not handle
   3376                  that case.  Therefore, we override the DT_RELASZ entry
   3377                  here to make it not include the JMPREL relocs.  Since
   3378                  the linker script arranges for .rela.plt to follow all
   3379                  other relocation sections, we don't have to worry
   3380                  about changing the DT_RELA entry.  */
   3381               if (htab->srelplt != NULL)
   3382                 {
   3383                   s = htab->srelplt->output_section;
   3384 		  dyn.d_un.d_val -= s->size;
   3385                 }
   3386               bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
   3387               break;
   3388             }
   3389         }
   3390 
   3391       /* Fill in the first entry in the procedure linkage table.  */
   3392       splt = htab->splt;
   3393       if (splt && splt->size > 0)
   3394         {
   3395           if (info->shared)
   3396             {
   3397               bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD0, splt->contents);
   3398               bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD1, splt->contents + 4);
   3399               bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD2, splt->contents + 8);
   3400               bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD3, splt->contents + 12);
   3401               bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD4, splt->contents + 16);
   3402             }
   3403           else
   3404             {
   3405               unsigned long addr;
   3406               /* addr = .got + 4 */
   3407               addr = sgot->output_section->vma + sgot->output_offset + 4;
   3408               bfd_put_32 (output_bfd,
   3409 			  PLT0_ENTRY_WORD0 | ((addr >> 16) & 0xffff),
   3410 			  splt->contents);
   3411               bfd_put_32 (output_bfd,
   3412 			  PLT0_ENTRY_WORD1 | (addr & 0xffff),
   3413 			  splt->contents + 4);
   3414               bfd_put_32 (output_bfd, PLT0_ENTRY_WORD2, splt->contents + 8);
   3415               bfd_put_32 (output_bfd, PLT0_ENTRY_WORD3, splt->contents + 12);
   3416               bfd_put_32 (output_bfd, PLT0_ENTRY_WORD4, splt->contents + 16);
   3417             }
   3418 
   3419           elf_section_data (splt->output_section)->this_hdr.sh_entsize =
   3420             PLT_ENTRY_SIZE;
   3421         }
   3422     }
   3423 
   3424   /* Fill in the first three entries in the global offset table.  */
   3425   if (sgot && sgot->size > 0)
   3426     {
   3427       if (sdyn == NULL)
   3428         bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents);
   3429       else
   3430         bfd_put_32 (output_bfd,
   3431                     sdyn->output_section->vma + sdyn->output_offset,
   3432                     sgot->contents);
   3433       bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 4);
   3434       bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 8);
   3435 
   3436       elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
   3437     }
   3438 
   3439   return TRUE;
   3440 }
   3441 
   3442 
   3443 /* Set the right machine number.  */
   3445 
   3446 static bfd_boolean
   3447 m32r_elf_object_p (bfd *abfd)
   3448 {
   3449   switch (elf_elfheader (abfd)->e_flags & EF_M32R_ARCH)
   3450     {
   3451     default:
   3452     case E_M32R_ARCH:   (void) bfd_default_set_arch_mach (abfd, bfd_arch_m32r, bfd_mach_m32r);  break;
   3453     case E_M32RX_ARCH:  (void) bfd_default_set_arch_mach (abfd, bfd_arch_m32r, bfd_mach_m32rx); break;
   3454     case E_M32R2_ARCH:  (void) bfd_default_set_arch_mach (abfd, bfd_arch_m32r, bfd_mach_m32r2); break;
   3455     }
   3456   return TRUE;
   3457 }
   3458 
   3459 /* Store the machine number in the flags field.  */
   3460 
   3461 static void
   3462 m32r_elf_final_write_processing (bfd *abfd,
   3463 				 bfd_boolean linker ATTRIBUTE_UNUSED)
   3464 {
   3465   unsigned long val;
   3466 
   3467   switch (bfd_get_mach (abfd))
   3468     {
   3469     default:
   3470     case bfd_mach_m32r:  val = E_M32R_ARCH; break;
   3471     case bfd_mach_m32rx: val = E_M32RX_ARCH; break;
   3472     case bfd_mach_m32r2: val = E_M32R2_ARCH; break;
   3473     }
   3474 
   3475   elf_elfheader (abfd)->e_flags &=~ EF_M32R_ARCH;
   3476   elf_elfheader (abfd)->e_flags |= val;
   3477 }
   3478 
   3479 /* Function to keep M32R specific file flags.  */
   3480 
   3481 static bfd_boolean
   3482 m32r_elf_set_private_flags (bfd *abfd, flagword flags)
   3483 {
   3484   BFD_ASSERT (!elf_flags_init (abfd)
   3485 	      || elf_elfheader (abfd)->e_flags == flags);
   3486 
   3487   elf_elfheader (abfd)->e_flags = flags;
   3488   elf_flags_init (abfd) = TRUE;
   3489   return TRUE;
   3490 }
   3491 
   3492 /* Merge backend specific data from an object file to the output
   3493    object file when linking.  */
   3494 
   3495 static bfd_boolean
   3496 m32r_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
   3497 {
   3498   flagword out_flags;
   3499   flagword in_flags;
   3500 
   3501   if (   bfd_get_flavour (ibfd) != bfd_target_elf_flavour
   3502       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
   3503     return TRUE;
   3504 
   3505   in_flags  = elf_elfheader (ibfd)->e_flags;
   3506   out_flags = elf_elfheader (obfd)->e_flags;
   3507 
   3508   if (! elf_flags_init (obfd))
   3509     {
   3510       /* If the input is the default architecture then do not
   3511 	 bother setting the flags for the output architecture,
   3512 	 instead allow future merges to do this.  If no future
   3513 	 merges ever set these flags then they will retain their
   3514 	 unitialised values, which surprise surprise, correspond
   3515 	 to the default values.  */
   3516       if (bfd_get_arch_info (ibfd)->the_default)
   3517 	return TRUE;
   3518 
   3519       elf_flags_init (obfd) = TRUE;
   3520       elf_elfheader (obfd)->e_flags = in_flags;
   3521 
   3522       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
   3523 	  && bfd_get_arch_info (obfd)->the_default)
   3524 	return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
   3525 				  bfd_get_mach (ibfd));
   3526 
   3527       return TRUE;
   3528     }
   3529 
   3530   /* Check flag compatibility.  */
   3531   if (in_flags == out_flags)
   3532     return TRUE;
   3533 
   3534   if ((in_flags & EF_M32R_ARCH) != (out_flags & EF_M32R_ARCH))
   3535     {
   3536       if (   ((in_flags  & EF_M32R_ARCH) != E_M32R_ARCH)
   3537           || ((out_flags & EF_M32R_ARCH) == E_M32R_ARCH)
   3538           || ((in_flags  & EF_M32R_ARCH) == E_M32R2_ARCH))
   3539 	{
   3540 	  (*_bfd_error_handler)
   3541 	    (_("%B: Instruction set mismatch with previous modules"), ibfd);
   3542 
   3543 	  bfd_set_error (bfd_error_bad_value);
   3544 	  return FALSE;
   3545 	}
   3546     }
   3547 
   3548   return TRUE;
   3549 }
   3550 
   3551 /* Display the flags field.  */
   3552 
   3553 static bfd_boolean
   3554 m32r_elf_print_private_bfd_data (bfd *abfd, void * ptr)
   3555 {
   3556   FILE * file = (FILE *) ptr;
   3557 
   3558   BFD_ASSERT (abfd != NULL && ptr != NULL);
   3559 
   3560   _bfd_elf_print_private_bfd_data (abfd, ptr);
   3561 
   3562   fprintf (file, _("private flags = %lx"), elf_elfheader (abfd)->e_flags);
   3563 
   3564   switch (elf_elfheader (abfd)->e_flags & EF_M32R_ARCH)
   3565     {
   3566     default:
   3567     case E_M32R_ARCH:  fprintf (file, _(": m32r instructions"));  break;
   3568     case E_M32RX_ARCH: fprintf (file, _(": m32rx instructions")); break;
   3569     case E_M32R2_ARCH: fprintf (file, _(": m32r2 instructions")); break;
   3570     }
   3571 
   3572   fputc ('\n', file);
   3573 
   3574   return TRUE;
   3575 }
   3576 
   3577 static asection *
   3578 m32r_elf_gc_mark_hook (asection *sec,
   3579 		       struct bfd_link_info *info,
   3580 		       Elf_Internal_Rela *rel,
   3581 		       struct elf_link_hash_entry *h,
   3582 		       Elf_Internal_Sym *sym)
   3583 {
   3584   if (h != NULL)
   3585     switch (ELF32_R_TYPE (rel->r_info))
   3586       {
   3587       case R_M32R_GNU_VTINHERIT:
   3588       case R_M32R_GNU_VTENTRY:
   3589       case R_M32R_RELA_GNU_VTINHERIT:
   3590       case R_M32R_RELA_GNU_VTENTRY:
   3591 	return NULL;
   3592       }
   3593 
   3594   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
   3595 }
   3596 
   3597 static bfd_boolean
   3598 m32r_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
   3599 			struct bfd_link_info *info ATTRIBUTE_UNUSED,
   3600 			asection *sec ATTRIBUTE_UNUSED,
   3601 			const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
   3602 {
   3603   /* Update the got entry reference counts for the section being removed.  */
   3604   Elf_Internal_Shdr *symtab_hdr;
   3605   struct elf_link_hash_entry **sym_hashes;
   3606   bfd_signed_vma *local_got_refcounts;
   3607   const Elf_Internal_Rela *rel, *relend;
   3608 
   3609   if (info->relocatable)
   3610     return TRUE;
   3611 
   3612   elf_section_data (sec)->local_dynrel = NULL;
   3613 
   3614   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   3615   sym_hashes = elf_sym_hashes (abfd);
   3616   local_got_refcounts = elf_local_got_refcounts (abfd);
   3617 
   3618   relend = relocs + sec->reloc_count;
   3619   for (rel = relocs; rel < relend; rel++)
   3620     {
   3621       unsigned long r_symndx;
   3622       struct elf_link_hash_entry *h = NULL;
   3623 
   3624       r_symndx = ELF32_R_SYM (rel->r_info);
   3625       if (r_symndx >= symtab_hdr->sh_info)
   3626 	{
   3627 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
   3628 	  while (h->root.type == bfd_link_hash_indirect
   3629 		 || h->root.type == bfd_link_hash_warning)
   3630 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
   3631 	}
   3632 
   3633       switch (ELF32_R_TYPE (rel->r_info))
   3634 	{
   3635 	case R_M32R_GOT16_HI_ULO:
   3636 	case R_M32R_GOT16_HI_SLO:
   3637 	case R_M32R_GOT16_LO:
   3638 	case R_M32R_GOTOFF:
   3639 	case R_M32R_GOTOFF_HI_ULO:
   3640 	case R_M32R_GOTOFF_HI_SLO:
   3641 	case R_M32R_GOTOFF_LO:
   3642 	case R_M32R_GOT24:
   3643 	case R_M32R_GOTPC_HI_ULO:
   3644 	case R_M32R_GOTPC_HI_SLO:
   3645 	case R_M32R_GOTPC_LO:
   3646 	case R_M32R_GOTPC24:
   3647 	  if (h != NULL)
   3648 	    {
   3649 	      if (h->got.refcount > 0)
   3650 		h->got.refcount--;
   3651 	    }
   3652 	  else
   3653 	    {
   3654 	      if (local_got_refcounts && local_got_refcounts[r_symndx] > 0)
   3655 		local_got_refcounts[r_symndx]--;
   3656 	    }
   3657 	  break;
   3658 
   3659 	case R_M32R_16_RELA:
   3660 	case R_M32R_24_RELA:
   3661 	case R_M32R_32_RELA:
   3662 	case R_M32R_REL32:
   3663 	case R_M32R_HI16_ULO_RELA:
   3664 	case R_M32R_HI16_SLO_RELA:
   3665 	case R_M32R_LO16_RELA:
   3666 	case R_M32R_SDA16_RELA:
   3667 	case R_M32R_10_PCREL_RELA:
   3668 	case R_M32R_18_PCREL_RELA:
   3669 	case R_M32R_26_PCREL_RELA:
   3670 	  if (h != NULL)
   3671 	    {
   3672 	      struct elf_m32r_link_hash_entry *eh;
   3673 	      struct elf_m32r_dyn_relocs **pp;
   3674 	      struct elf_m32r_dyn_relocs *p;
   3675 
   3676 	      if (!info->shared && h->plt.refcount > 0)
   3677 		h->plt.refcount -= 1;
   3678 
   3679 	      eh = (struct elf_m32r_link_hash_entry *) h;
   3680 
   3681 	      for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next)
   3682 		if (p->sec == sec)
   3683 		  {
   3684 		    if (   ELF32_R_TYPE (rel->r_info) == R_M32R_26_PCREL_RELA
   3685 			|| ELF32_R_TYPE (rel->r_info) == R_M32R_18_PCREL_RELA
   3686 			|| ELF32_R_TYPE (rel->r_info) == R_M32R_10_PCREL_RELA
   3687 			|| ELF32_R_TYPE (rel->r_info) == R_M32R_REL32)
   3688 		      p->pc_count -= 1;
   3689 		    p->count -= 1;
   3690 		    if (p->count == 0)
   3691 		      *pp = p->next;
   3692 		    break;
   3693 		  }
   3694 	    }
   3695 	  break;
   3696 
   3697 	case R_M32R_26_PLTREL:
   3698 	  if (h != NULL)
   3699 	    {
   3700 	      if (h->plt.refcount > 0)
   3701 		h->plt.refcount--;
   3702 	    }
   3703 	  break;
   3704 
   3705 	default:
   3706 	  break;
   3707 	}
   3708     }
   3709 
   3710   return TRUE;
   3711 }
   3712 
   3713 /* Look through the relocs for a section during the first phase.
   3714    Since we don't do .gots or .plts, we just need to consider the
   3715    virtual table relocs for gc.  */
   3716 
   3717 static bfd_boolean
   3718 m32r_elf_check_relocs (bfd *abfd,
   3719 		       struct bfd_link_info *info,
   3720 		       asection *sec,
   3721 		       const Elf_Internal_Rela *relocs)
   3722 {
   3723   Elf_Internal_Shdr *symtab_hdr;
   3724   struct elf_link_hash_entry **sym_hashes;
   3725   const Elf_Internal_Rela *rel;
   3726   const Elf_Internal_Rela *rel_end;
   3727   struct elf_m32r_link_hash_table *htab;
   3728   bfd *dynobj;
   3729   asection *sreloc;
   3730 
   3731   if (info->relocatable)
   3732     return TRUE;
   3733 
   3734   sreloc = NULL;
   3735   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   3736   sym_hashes = elf_sym_hashes (abfd);
   3737 
   3738   htab = m32r_elf_hash_table (info);
   3739   if (htab == NULL)
   3740     return FALSE;
   3741 
   3742   dynobj = htab->root.dynobj;
   3743 
   3744   rel_end = relocs + sec->reloc_count;
   3745   for (rel = relocs; rel < rel_end; rel++)
   3746     {
   3747       int r_type;
   3748       struct elf_link_hash_entry *h;
   3749       unsigned long r_symndx;
   3750 
   3751       r_symndx = ELF32_R_SYM (rel->r_info);
   3752       r_type = ELF32_R_TYPE (rel->r_info);
   3753       if (r_symndx < symtab_hdr->sh_info)
   3754         h = NULL;
   3755       else
   3756 	{
   3757 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
   3758 	  while (h->root.type == bfd_link_hash_indirect
   3759 		 || h->root.type == bfd_link_hash_warning)
   3760 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
   3761 
   3762 	  /* PR15323, ref flags aren't set for references in the same
   3763 	     object.  */
   3764 	  h->root.non_ir_ref = 1;
   3765 	}
   3766 
   3767       /* Some relocs require a global offset table.  */
   3768       if (htab->sgot == NULL)
   3769         {
   3770           switch (r_type)
   3771             {
   3772             case R_M32R_GOT16_HI_ULO:
   3773             case R_M32R_GOT16_HI_SLO:
   3774             case R_M32R_GOTOFF:
   3775             case R_M32R_GOTOFF_HI_ULO:
   3776             case R_M32R_GOTOFF_HI_SLO:
   3777             case R_M32R_GOTOFF_LO:
   3778             case R_M32R_GOT16_LO:
   3779             case R_M32R_GOTPC24:
   3780             case R_M32R_GOTPC_HI_ULO:
   3781             case R_M32R_GOTPC_HI_SLO:
   3782             case R_M32R_GOTPC_LO:
   3783             case R_M32R_GOT24:
   3784               if (dynobj == NULL)
   3785                 htab->root.dynobj = dynobj = abfd;
   3786               if (! create_got_section (dynobj, info))
   3787                 return FALSE;
   3788               break;
   3789 
   3790             default:
   3791               break;
   3792           }
   3793         }
   3794 
   3795       switch (r_type)
   3796         {
   3797 	case R_M32R_GOT16_HI_ULO:
   3798 	case R_M32R_GOT16_HI_SLO:
   3799 	case R_M32R_GOT16_LO:
   3800         case R_M32R_GOT24:
   3801 
   3802           if (h != NULL)
   3803             h->got.refcount += 1;
   3804           else
   3805             {
   3806               bfd_signed_vma *local_got_refcounts;
   3807 
   3808               /* This is a global offset table entry for a local
   3809                  symbol.  */
   3810               local_got_refcounts = elf_local_got_refcounts (abfd);
   3811               if (local_got_refcounts == NULL)
   3812                 {
   3813                   bfd_size_type size;
   3814 
   3815                   size = symtab_hdr->sh_info;
   3816                   size *= sizeof (bfd_signed_vma);
   3817                   local_got_refcounts = bfd_zalloc (abfd, size);
   3818                   if (local_got_refcounts == NULL)
   3819                     return FALSE;
   3820                   elf_local_got_refcounts (abfd) = local_got_refcounts;
   3821                 }
   3822               local_got_refcounts[r_symndx] += 1;
   3823             }
   3824           break;
   3825 
   3826         case R_M32R_26_PLTREL:
   3827           /* This symbol requires a procedure linkage table entry.  We
   3828              actually build the entry in adjust_dynamic_symbol,
   3829              because this might be a case of linking PIC code without
   3830              linking in any dynamic objects, in which case we don't
   3831              need to generate a procedure linkage table after all.  */
   3832 
   3833 	  /* If this is a local symbol, we resolve it directly without
   3834 	     creating a procedure linkage table entry.  */
   3835           if (h == NULL)
   3836             continue;
   3837 
   3838           if (h->forced_local)
   3839             break;
   3840 
   3841           h->needs_plt = 1;
   3842 	  h->plt.refcount += 1;
   3843           break;
   3844 
   3845         case R_M32R_16_RELA:
   3846         case R_M32R_24_RELA:
   3847         case R_M32R_32_RELA:
   3848         case R_M32R_REL32:
   3849         case R_M32R_HI16_ULO_RELA:
   3850         case R_M32R_HI16_SLO_RELA:
   3851         case R_M32R_LO16_RELA:
   3852         case R_M32R_SDA16_RELA:
   3853 	case R_M32R_10_PCREL_RELA:
   3854         case R_M32R_18_PCREL_RELA:
   3855         case R_M32R_26_PCREL_RELA:
   3856 
   3857           if (h != NULL && !info->shared)
   3858             {
   3859               h->non_got_ref = 1;
   3860               h->plt.refcount += 1;
   3861             }
   3862 
   3863           /* If we are creating a shared library, and this is a reloc
   3864              against a global symbol, or a non PC relative reloc
   3865              against a local symbol, then we need to copy the reloc
   3866              into the shared library.  However, if we are linking with
   3867              -Bsymbolic, we do not need to copy a reloc against a
   3868              global symbol which is defined in an object we are
   3869              including in the link (i.e., DEF_REGULAR is set).  At
   3870              this point we have not seen all the input files, so it is
   3871              possible that DEF_REGULAR is not set now but will be set
   3872              later (it is never cleared).  We account for that
   3873              possibility below by storing information in the
   3874              dyn_relocs field of the hash table entry. A similar
   3875              situation occurs when creating shared libraries and symbol
   3876              visibility changes render the symbol local.
   3877 
   3878              If on the other hand, we are creating an executable, we
   3879              may need to keep relocations for symbols satisfied by a
   3880              dynamic library if we manage to avoid copy relocs for the
   3881              symbol.  */
   3882           if ((info->shared
   3883                && (sec->flags & SEC_ALLOC) != 0
   3884 	       && ((   r_type != R_M32R_26_PCREL_RELA
   3885                     && r_type != R_M32R_18_PCREL_RELA
   3886                     && r_type != R_M32R_10_PCREL_RELA
   3887                     && r_type != R_M32R_REL32)
   3888 	           || (h != NULL
   3889 		       && (! info->symbolic
   3890 		           || h->root.type == bfd_link_hash_defweak
   3891 		           || !h->def_regular))))
   3892               || (!info->shared
   3893                   && (sec->flags & SEC_ALLOC) != 0
   3894                   && h != NULL
   3895                   && (h->root.type == bfd_link_hash_defweak
   3896                       || !h->def_regular)))
   3897             {
   3898               struct elf_m32r_dyn_relocs *p;
   3899               struct elf_m32r_dyn_relocs **head;
   3900 
   3901               if (dynobj == NULL)
   3902                 htab->root.dynobj = dynobj = abfd;
   3903 
   3904               /* When creating a shared object, we must copy these
   3905                  relocs into the output file.  We create a reloc
   3906                  section in dynobj and make room for the reloc.  */
   3907               if (sreloc == NULL)
   3908                 {
   3909 		  sreloc = _bfd_elf_make_dynamic_reloc_section
   3910 		    (sec, dynobj, 2, abfd, /*rela?*/ TRUE);
   3911 
   3912 		  if (sreloc == NULL)
   3913 		    return FALSE;
   3914                 }
   3915 
   3916               /* If this is a global symbol, we count the number of
   3917                  relocations we need for this symbol.  */
   3918               if (h != NULL)
   3919                 head = &((struct elf_m32r_link_hash_entry *) h)->dyn_relocs;
   3920               else
   3921                 {
   3922                   /* Track dynamic relocs needed for local syms too.  */
   3923                   asection *s;
   3924                   void *vpp;
   3925 		  Elf_Internal_Sym *isym;
   3926 
   3927 		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
   3928 						abfd, r_symndx);
   3929 		  if (isym == NULL)
   3930 		    return FALSE;
   3931 
   3932 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
   3933 		  if (s == NULL)
   3934 		    s = sec;
   3935 
   3936 		  vpp = &elf_section_data (s)->local_dynrel;
   3937                   head = (struct elf_m32r_dyn_relocs **) vpp;
   3938                 }
   3939 
   3940               p = *head;
   3941               if (p == NULL || p->sec != sec)
   3942                 {
   3943                   bfd_size_type amt = sizeof (*p);
   3944 
   3945                   p = bfd_alloc (dynobj, amt);
   3946                   if (p == NULL)
   3947                     return FALSE;
   3948                   p->next = *head;
   3949                   *head = p;
   3950                   p->sec = sec;
   3951                   p->count = 0;
   3952                   p->pc_count = 0;
   3953                 }
   3954 
   3955               p->count += 1;
   3956               if (   ELF32_R_TYPE (rel->r_info) == R_M32R_26_PCREL_RELA
   3957                   || ELF32_R_TYPE (rel->r_info) == R_M32R_18_PCREL_RELA
   3958 		  || ELF32_R_TYPE (rel->r_info) == R_M32R_10_PCREL_RELA
   3959 		  || ELF32_R_TYPE (rel->r_info) == R_M32R_REL32)
   3960                 p->pc_count += 1;
   3961             }
   3962           break;
   3963 
   3964         /* This relocation describes the C++ object vtable hierarchy.
   3965            Reconstruct it for later use during GC.  */
   3966         case R_M32R_RELA_GNU_VTINHERIT:
   3967         case R_M32R_GNU_VTINHERIT:
   3968           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
   3969             return FALSE;
   3970           break;
   3971 
   3972         /* This relocation describes which C++ vtable entries are actually
   3973            used.  Record for later use during GC.  */
   3974         case R_M32R_GNU_VTENTRY:
   3975           BFD_ASSERT (h != NULL);
   3976           if (h != NULL
   3977               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
   3978             return FALSE;
   3979           break;
   3980         case R_M32R_RELA_GNU_VTENTRY:
   3981           BFD_ASSERT (h != NULL);
   3982           if (h != NULL
   3983               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
   3984             return FALSE;
   3985           break;
   3986         }
   3987     }
   3988 
   3989   return TRUE;
   3990 }
   3991 
   3992 static const struct bfd_elf_special_section m32r_elf_special_sections[] =
   3993 {
   3994   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
   3995   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
   3996   { NULL,                     0,  0, 0,            0 }
   3997 };
   3998 
   3999 static enum elf_reloc_type_class
   4000 m32r_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
   4001 			   const asection *rel_sec ATTRIBUTE_UNUSED,
   4002 			   const Elf_Internal_Rela *rela)
   4003 {
   4004   switch ((int) ELF32_R_TYPE (rela->r_info))
   4005     {
   4006     case R_M32R_RELATIVE:  return reloc_class_relative;
   4007     case R_M32R_JMP_SLOT:  return reloc_class_plt;
   4008     case R_M32R_COPY:      return reloc_class_copy;
   4009     default:      	   return reloc_class_normal;
   4010     }
   4011 }
   4012 
   4013 #define ELF_ARCH		bfd_arch_m32r
   4015 #define ELF_TARGET_ID		M32R_ELF_DATA
   4016 #define ELF_MACHINE_CODE	EM_M32R
   4017 #define ELF_MACHINE_ALT1	EM_CYGNUS_M32R
   4018 #define ELF_MAXPAGESIZE		0x1 /* Explicitly requested by Mitsubishi.  */
   4019 
   4020 #define TARGET_BIG_SYM          m32r_elf32_vec
   4021 #define TARGET_BIG_NAME		"elf32-m32r"
   4022 #define TARGET_LITTLE_SYM       m32r_elf32_le_vec
   4023 #define TARGET_LITTLE_NAME      "elf32-m32rle"
   4024 
   4025 #define elf_info_to_howto			m32r_info_to_howto
   4026 #define elf_info_to_howto_rel			m32r_info_to_howto_rel
   4027 #define elf_backend_section_from_bfd_section	_bfd_m32r_elf_section_from_bfd_section
   4028 #define elf_backend_symbol_processing		_bfd_m32r_elf_symbol_processing
   4029 #define elf_backend_add_symbol_hook		m32r_elf_add_symbol_hook
   4030 #define elf_backend_relocate_section		m32r_elf_relocate_section
   4031 #define elf_backend_gc_mark_hook                m32r_elf_gc_mark_hook
   4032 #define elf_backend_gc_sweep_hook               m32r_elf_gc_sweep_hook
   4033 #define elf_backend_check_relocs                m32r_elf_check_relocs
   4034 
   4035 #define elf_backend_create_dynamic_sections     m32r_elf_create_dynamic_sections
   4036 #define bfd_elf32_bfd_link_hash_table_create    m32r_elf_link_hash_table_create
   4037 #define elf_backend_size_dynamic_sections       m32r_elf_size_dynamic_sections
   4038 #define elf_backend_omit_section_dynsym \
   4039   ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
   4040 #define elf_backend_finish_dynamic_sections     m32r_elf_finish_dynamic_sections
   4041 #define elf_backend_adjust_dynamic_symbol       m32r_elf_adjust_dynamic_symbol
   4042 #define elf_backend_finish_dynamic_symbol       m32r_elf_finish_dynamic_symbol
   4043 #define elf_backend_reloc_type_class            m32r_elf_reloc_type_class
   4044 #define elf_backend_copy_indirect_symbol        m32r_elf_copy_indirect_symbol
   4045 
   4046 #define elf_backend_can_gc_sections             1
   4047 /*#if !USE_REL
   4048 #define elf_backend_rela_normal			1
   4049 #endif*/
   4050 #define elf_backend_can_refcount 1
   4051 #define elf_backend_want_got_plt 1
   4052 #define elf_backend_plt_readonly 1
   4053 #define elf_backend_want_plt_sym 0
   4054 #define elf_backend_got_header_size 12
   4055 
   4056 #define elf_backend_may_use_rel_p       1
   4057 #ifdef USE_M32R_OLD_RELOC
   4058 #define elf_backend_default_use_rela_p  0
   4059 #define elf_backend_may_use_rela_p      0
   4060 #else
   4061 #define elf_backend_default_use_rela_p  1
   4062 #define elf_backend_may_use_rela_p      1
   4063 #endif
   4064 
   4065 #define elf_backend_object_p			m32r_elf_object_p
   4066 #define elf_backend_final_write_processing 	m32r_elf_final_write_processing
   4067 #define bfd_elf32_bfd_merge_private_bfd_data 	m32r_elf_merge_private_bfd_data
   4068 #define bfd_elf32_bfd_set_private_flags		m32r_elf_set_private_flags
   4069 #define bfd_elf32_bfd_print_private_bfd_data	m32r_elf_print_private_bfd_data
   4070 #define elf_backend_special_sections		m32r_elf_special_sections
   4071 
   4072 #include "elf32-target.h"
   4073 
   4074 #undef  ELF_MAXPAGESIZE
   4075 #define ELF_MAXPAGESIZE         0x1000
   4076 
   4077 #undef  TARGET_BIG_SYM
   4078 #define TARGET_BIG_SYM          m32r_elf32_linux_vec
   4079 #undef  TARGET_BIG_NAME
   4080 #define TARGET_BIG_NAME         "elf32-m32r-linux"
   4081 #undef  TARGET_LITTLE_SYM
   4082 #define TARGET_LITTLE_SYM       m32r_elf32_linux_le_vec
   4083 #undef  TARGET_LITTLE_NAME
   4084 #define TARGET_LITTLE_NAME      "elf32-m32rle-linux"
   4085 #undef  elf32_bed
   4086 #define elf32_bed               elf32_m32r_lin_bed
   4087 
   4088 #include "elf32-target.h"
   4089 
   4090