Home | History | Annotate | Line # | Download | only in bfd
elf32-vax.c revision 1.1.1.6
      1 /* VAX series support for 32-bit ELF
      2    Copyright (C) 1993-2016 Free Software Foundation, Inc.
      3    Contributed by Matt Thomas <matt (at) 3am-software.com>.
      4 
      5    This file is part of BFD, the Binary File Descriptor library.
      6 
      7    This program is free software; you can redistribute it and/or modify
      8    it under the terms of the GNU General Public License as published by
      9    the Free Software Foundation; either version 3 of the License, or
     10    (at your option) any later version.
     11 
     12    This program is distributed in the hope that it will be useful,
     13    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15    GNU General Public License for more details.
     16 
     17    You should have received a copy of the GNU General Public License
     18    along with this program; if not, write to the Free Software
     19    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     20    MA 02110-1301, USA.  */
     21 
     22 #include "sysdep.h"
     23 #include "bfd.h"
     24 #include "bfdlink.h"
     25 #include "libbfd.h"
     26 #include "elf-bfd.h"
     27 #include "elf/vax.h"
     28 
     29 static reloc_howto_type *reloc_type_lookup (bfd *, bfd_reloc_code_real_type);
     30 static void rtype_to_howto (bfd *, arelent *, Elf_Internal_Rela *);
     31 static struct bfd_hash_entry *elf_vax_link_hash_newfunc (struct bfd_hash_entry *,
     32 							 struct bfd_hash_table *,
     33 							 const char *);
     34 static struct bfd_link_hash_table *elf_vax_link_hash_table_create (bfd *);
     35 static bfd_boolean elf_vax_check_relocs (bfd *, struct bfd_link_info *,
     36 					 asection *, const Elf_Internal_Rela *);
     37 static bfd_boolean elf_vax_adjust_dynamic_symbol (struct bfd_link_info *,
     38 						  struct elf_link_hash_entry *);
     39 static bfd_boolean elf_vax_size_dynamic_sections (bfd *, struct bfd_link_info *);
     40 static bfd_boolean elf_vax_relocate_section (bfd *, struct bfd_link_info *,
     41 					     bfd *, asection *, bfd_byte *,
     42 					     Elf_Internal_Rela *,
     43 					     Elf_Internal_Sym *, asection **);
     44 static bfd_boolean elf_vax_finish_dynamic_symbol (bfd *, struct bfd_link_info *,
     45 						  struct elf_link_hash_entry *,
     46 						  Elf_Internal_Sym *);
     47 static bfd_boolean elf_vax_finish_dynamic_sections (bfd *,
     48 						    struct bfd_link_info *);
     49 static bfd_vma elf_vax_plt_sym_val (bfd_vma, const asection *,
     50 				    const arelent *);
     51 
     52 static bfd_boolean elf32_vax_set_private_flags (bfd *, flagword);
     53 static bfd_boolean elf32_vax_merge_private_bfd_data (bfd *, bfd *);
     54 static bfd_boolean elf32_vax_print_private_bfd_data (bfd *, void *);
     55 
     56 static reloc_howto_type howto_table[] = {
     57   HOWTO (R_VAX_NONE,		/* type */
     58 	 0,			/* rightshift */
     59 	 3,			/* size (0 = byte, 1 = short, 2 = long) */
     60 	 0,			/* bitsize */
     61 	 FALSE,			/* pc_relative */
     62 	 0,			/* bitpos */
     63 	 complain_overflow_dont, /* complain_on_overflow */
     64 	 bfd_elf_generic_reloc,	/* special_function */
     65 	 "R_VAX_NONE",		/* name */
     66 	 FALSE,			/* partial_inplace */
     67 	 0,			/* src_mask */
     68 	 0x00000000,		/* dst_mask */
     69 	 FALSE),		/* pcrel_offset */
     70 
     71   HOWTO (R_VAX_32,		/* type */
     72 	 0,			/* rightshift */
     73 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
     74 	 32,			/* bitsize */
     75 	 FALSE,			/* pc_relative */
     76 	 0,			/* bitpos */
     77 	 complain_overflow_bitfield, /* complain_on_overflow */
     78 	 bfd_elf_generic_reloc,	/* special_function */
     79 	 "R_VAX_32",		/* name */
     80 	 FALSE,			/* partial_inplace */
     81 	 0,			/* src_mask */
     82 	 0xffffffff,		/* dst_mask */
     83 	 FALSE),		/* pcrel_offset */
     84 
     85   HOWTO (R_VAX_16,		/* type */
     86 	 0,			/* rightshift */
     87 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
     88 	 16,			/* bitsize */
     89 	 FALSE,			/* pc_relative */
     90 	 0,			/* bitpos */
     91 	 complain_overflow_bitfield, /* complain_on_overflow */
     92 	 bfd_elf_generic_reloc,	/* special_function */
     93 	 "R_VAX_16",		/* name */
     94 	 FALSE,			/* partial_inplace */
     95 	 0,			/* src_mask */
     96 	 0x0000ffff,		/* dst_mask */
     97 	 FALSE),		/* pcrel_offset */
     98 
     99   HOWTO (R_VAX_8,		/* type */
    100 	 0,			/* rightshift */
    101 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
    102 	 8,			/* bitsize */
    103 	 FALSE,			/* pc_relative */
    104 	 0,			/* bitpos */
    105 	 complain_overflow_bitfield, /* complain_on_overflow */
    106 	 bfd_elf_generic_reloc,	/* special_function */
    107 	 "R_VAX_8",		/* name */
    108 	 FALSE,			/* partial_inplace */
    109 	 0,			/* src_mask */
    110 	 0x000000ff,		/* dst_mask */
    111 	 FALSE),		/* pcrel_offset */
    112 
    113   HOWTO (R_VAX_PC32,		/* type */
    114 	 0,			/* rightshift */
    115 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    116 	 32,			/* bitsize */
    117 	 TRUE,			/* pc_relative */
    118 	 0,			/* bitpos */
    119 	 complain_overflow_bitfield, /* complain_on_overflow */
    120 	 bfd_elf_generic_reloc,	/* special_function */
    121 	 "R_VAX_PC32",		/* name */
    122 	 FALSE,			/* partial_inplace */
    123 	 0,			/* src_mask */
    124 	 0xffffffff,		/* dst_mask */
    125 	 TRUE),			/* pcrel_offset */
    126 
    127   HOWTO (R_VAX_PC16,		/* type */
    128 	 0,			/* rightshift */
    129 	 1,			/* size (0 = byte, 1 = short, 2 = long) */
    130 	 16,			/* bitsize */
    131 	 TRUE,			/* pc_relative */
    132 	 0,			/* bitpos */
    133 	 complain_overflow_signed, /* complain_on_overflow */
    134 	 bfd_elf_generic_reloc,	/* special_function */
    135 	 "R_VAX_PC16",		/* name */
    136 	 FALSE,			/* partial_inplace */
    137 	 0,			/* src_mask */
    138 	 0x0000ffff,		/* dst_mask */
    139 	 TRUE),			/* pcrel_offset */
    140 
    141   HOWTO (R_VAX_PC8,		/* type */
    142 	 0,			/* rightshift */
    143 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
    144 	 8,			/* bitsize */
    145 	 TRUE,			/* pc_relative */
    146 	 0,			/* bitpos */
    147 	 complain_overflow_signed, /* complain_on_overflow */
    148 	 bfd_elf_generic_reloc,	/* special_function */
    149 	 "R_VAX_PC8",		/* name */
    150 	 FALSE,			/* partial_inplace */
    151 	 0,			/* src_mask */
    152 	 0x000000ff,		/* dst_mask */
    153 	 TRUE),			/* pcrel_offset */
    154 
    155   HOWTO (R_VAX_GOT32,		/* type */
    156 	 0,			/* rightshift */
    157 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    158 	 32,			/* bitsize */
    159 	 TRUE,			/* pc_relative */
    160 	 0,			/* bitpos */
    161 	 complain_overflow_bitfield, /* complain_on_overflow */
    162 	 bfd_elf_generic_reloc,	/* special_function */
    163 	 "R_VAX_GOT32",		/* name */
    164 	 FALSE,			/* partial_inplace */
    165 	 0,			/* src_mask */
    166 	 0xffffffff,		/* dst_mask */
    167 	 TRUE),			/* pcrel_offset */
    168 
    169   EMPTY_HOWTO (-1),
    170   EMPTY_HOWTO (-1),
    171   EMPTY_HOWTO (-1),
    172   EMPTY_HOWTO (-1),
    173   EMPTY_HOWTO (-1),
    174 
    175   HOWTO (R_VAX_PLT32,		/* type */
    176 	 0,			/* rightshift */
    177 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    178 	 32,			/* bitsize */
    179 	 TRUE,			/* pc_relative */
    180 	 0,			/* bitpos */
    181 	 complain_overflow_bitfield, /* complain_on_overflow */
    182 	 bfd_elf_generic_reloc,	/* special_function */
    183 	 "R_VAX_PLT32",		/* name */
    184 	 FALSE,			/* partial_inplace */
    185 	 0,			/* src_mask */
    186 	 0xffffffff,		/* dst_mask */
    187 	 TRUE),			/* pcrel_offset */
    188 
    189   EMPTY_HOWTO (-1),
    190   EMPTY_HOWTO (-1),
    191   EMPTY_HOWTO (-1),
    192   EMPTY_HOWTO (-1),
    193   EMPTY_HOWTO (-1),
    194 
    195   HOWTO (R_VAX_COPY,		/* type */
    196 	 0,			/* rightshift */
    197 	 0,			/* size (0 = byte, 1 = short, 2 = long) */
    198 	 0,			/* bitsize */
    199 	 FALSE,			/* pc_relative */
    200 	 0,			/* bitpos */
    201 	 complain_overflow_dont, /* complain_on_overflow */
    202 	 bfd_elf_generic_reloc,	/* special_function */
    203 	 "R_VAX_COPY",		/* name */
    204 	 FALSE,			/* partial_inplace */
    205 	 0,			/* src_mask */
    206 	 0xffffffff,		/* dst_mask */
    207 	 FALSE),		/* pcrel_offset */
    208 
    209   HOWTO (R_VAX_GLOB_DAT,	/* type */
    210 	 0,			/* rightshift */
    211 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    212 	 32,			/* bitsize */
    213 	 FALSE,			/* pc_relative */
    214 	 0,			/* bitpos */
    215 	 complain_overflow_dont, /* complain_on_overflow */
    216 	 bfd_elf_generic_reloc,	/* special_function */
    217 	 "R_VAX_GLOB_DAT",	/* name */
    218 	 FALSE,			/* partial_inplace */
    219 	 0,			/* src_mask */
    220 	 0xffffffff,		/* dst_mask */
    221 	 FALSE),		/* pcrel_offset */
    222 
    223   HOWTO (R_VAX_JMP_SLOT,	/* type */
    224 	 0,			/* rightshift */
    225 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    226 	 32,			/* bitsize */
    227 	 FALSE,			/* pc_relative */
    228 	 0,			/* bitpos */
    229 	 complain_overflow_dont, /* complain_on_overflow */
    230 	 bfd_elf_generic_reloc,	/* special_function */
    231 	 "R_VAX_JMP_SLOT",	/* name */
    232 	 FALSE,			/* partial_inplace */
    233 	 0,			/* src_mask */
    234 	 0xffffffff,		/* dst_mask */
    235 	 FALSE),		/* pcrel_offset */
    236 
    237   HOWTO (R_VAX_RELATIVE,	/* type */
    238 	 0,			/* rightshift */
    239 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    240 	 32,			/* bitsize */
    241 	 FALSE,			/* pc_relative */
    242 	 0,			/* bitpos */
    243 	 complain_overflow_dont, /* complain_on_overflow */
    244 	 bfd_elf_generic_reloc,	/* special_function */
    245 	 "R_VAX_RELATIVE",	/* name */
    246 	 FALSE,			/* partial_inplace */
    247 	 0,			/* src_mask */
    248 	 0xffffffff,		/* dst_mask */
    249 	 FALSE),		/* pcrel_offset */
    250 
    251   /* GNU extension to record C++ vtable hierarchy */
    252   HOWTO (R_VAX_GNU_VTINHERIT,	/* type */
    253 	 0,			/* rightshift */
    254 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    255 	 0,			/* bitsize */
    256 	 FALSE,			/* pc_relative */
    257 	 0,			/* bitpos */
    258 	 complain_overflow_dont, /* complain_on_overflow */
    259 	 NULL,			/* special_function */
    260 	 "R_VAX_GNU_VTINHERIT",	/* name */
    261 	 FALSE,			/* partial_inplace */
    262 	 0,			/* src_mask */
    263 	 0,			/* dst_mask */
    264 	 FALSE),		/* pcrel_offset */
    265 
    266   /* GNU extension to record C++ vtable member usage */
    267   HOWTO (R_VAX_GNU_VTENTRY,	/* type */
    268 	 0,			/* rightshift */
    269 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
    270 	 0,			/* bitsize */
    271 	 FALSE,			/* pc_relative */
    272 	 0,			/* bitpos */
    273 	 complain_overflow_dont, /* complain_on_overflow */
    274 	 _bfd_elf_rel_vtable_reloc_fn, /* special_function */
    275 	 "R_VAX_GNU_VTENTRY",	/* name */
    276 	 FALSE,			/* partial_inplace */
    277 	 0,			/* src_mask */
    278 	 0,			/* dst_mask */
    279 	 FALSE),		/* pcrel_offset */
    280 };
    281 
    282 static void
    283 rtype_to_howto (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst)
    284 {
    285   unsigned int r_type;
    286 
    287   r_type = ELF32_R_TYPE (dst->r_info);
    288   if (r_type >= R_VAX_max)
    289     {
    290       (*_bfd_error_handler) (_("%B: unrecognised VAX reloc number: %d"),
    291 			     abfd, r_type);
    292       bfd_set_error (bfd_error_bad_value);
    293       r_type = R_VAX_NONE;
    294     }
    295   cache_ptr->howto = &howto_table[r_type];
    296 }
    297 
    298 #define elf_info_to_howto rtype_to_howto
    299 
    300 static const struct
    301 {
    302   bfd_reloc_code_real_type bfd_val;
    303   int elf_val;
    304 } reloc_map[] = {
    305   { BFD_RELOC_NONE, R_VAX_NONE },
    306   { BFD_RELOC_32, R_VAX_32 },
    307   { BFD_RELOC_16, R_VAX_16 },
    308   { BFD_RELOC_8, R_VAX_8 },
    309   { BFD_RELOC_32_PCREL, R_VAX_PC32 },
    310   { BFD_RELOC_16_PCREL, R_VAX_PC16 },
    311   { BFD_RELOC_8_PCREL, R_VAX_PC8 },
    312   { BFD_RELOC_32_GOT_PCREL, R_VAX_GOT32 },
    313   { BFD_RELOC_32_PLT_PCREL, R_VAX_PLT32 },
    314   { BFD_RELOC_NONE, R_VAX_COPY },
    315   { BFD_RELOC_VAX_GLOB_DAT, R_VAX_GLOB_DAT },
    316   { BFD_RELOC_VAX_JMP_SLOT, R_VAX_JMP_SLOT },
    317   { BFD_RELOC_VAX_RELATIVE, R_VAX_RELATIVE },
    318   { BFD_RELOC_CTOR, R_VAX_32 },
    319   { BFD_RELOC_VTABLE_INHERIT, R_VAX_GNU_VTINHERIT },
    320   { BFD_RELOC_VTABLE_ENTRY, R_VAX_GNU_VTENTRY },
    321 };
    322 
    323 static reloc_howto_type *
    324 reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code)
    325 {
    326   unsigned int i;
    327   for (i = 0; i < sizeof (reloc_map) / sizeof (reloc_map[0]); i++)
    328     {
    329       if (reloc_map[i].bfd_val == code)
    330 	return &howto_table[reloc_map[i].elf_val];
    331     }
    332   return 0;
    333 }
    334 
    335 static reloc_howto_type *
    336 reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
    337 		   const char *r_name)
    338 {
    339   unsigned int i;
    340 
    341   for (i = 0; i < sizeof (howto_table) / sizeof (howto_table[0]); i++)
    342     if (howto_table[i].name != NULL
    343 	&& strcasecmp (howto_table[i].name, r_name) == 0)
    344       return &howto_table[i];
    345 
    346   return NULL;
    347 }
    348 
    349 #define bfd_elf32_bfd_reloc_type_lookup reloc_type_lookup
    350 #define bfd_elf32_bfd_reloc_name_lookup reloc_name_lookup
    351 #define ELF_ARCH bfd_arch_vax
    352 /* end code generated by elf.el */
    353 
    354 /* Functions for the VAX ELF linker.  */
    356 
    357 /* The name of the dynamic interpreter.  This is put in the .interp
    358    section.  */
    359 
    360 #define ELF_DYNAMIC_INTERPRETER "/usr/libexec/ld.elf_so"
    361 
    362 /* The size in bytes of an entry in the procedure linkage table.  */
    363 
    364 #define PLT_ENTRY_SIZE 12
    365 
    366 /* The first entry in a procedure linkage table looks like this.  See
    367    the SVR4 ABI VAX supplement to see how this works.  */
    368 
    369 static const bfd_byte elf_vax_plt0_entry[PLT_ENTRY_SIZE] =
    370 {
    371   0xdd, 0xef,		/* pushl l^ */
    372   0, 0, 0, 0,		/* offset to .plt.got + 4 */
    373   0x17, 0xff,		/* jmp @L^(pc) */
    374   0, 0, 0, 0,		/* offset to .plt.got + 8 */
    375 };
    376 
    377 /* Subsequent entries in a procedure linkage table look like this.  */
    378 
    379 static const bfd_byte elf_vax_plt_entry[PLT_ENTRY_SIZE] =
    380 {
    381   0xfc, 0x0f,		/* .word ^M<r11:r2> */
    382   0x16, 0xef,		/* jsb L^(pc) */
    383   0, 0, 0, 0,		/* replaced with offset to start of .plt  */
    384   0, 0, 0, 0,		/* index into .rela.plt */
    385 };
    386 
    387 /* The VAX linker needs to keep track of the number of relocs that it
    388    decides to copy in check_relocs for each symbol.  This is so that it
    389    can discard PC relative relocs if it doesn't need them when linking
    390    with -Bsymbolic.  We store the information in a field extending the
    391    regular ELF linker hash table.  */
    392 
    393 /* This structure keeps track of the number of PC relative relocs we have
    394    copied for a given symbol.  */
    395 
    396 struct elf_vax_pcrel_relocs_copied
    397 {
    398   /* Next section.  */
    399   struct elf_vax_pcrel_relocs_copied *next;
    400   /* A section in dynobj.  */
    401   asection *section;
    402   /* Number of relocs copied in this section.  */
    403   bfd_size_type count;
    404 };
    405 
    406 /* VAX ELF linker hash entry.  */
    407 
    408 struct elf_vax_link_hash_entry
    409 {
    410   struct elf_link_hash_entry root;
    411 
    412   /* Number of PC relative relocs copied for this symbol.  */
    413   struct elf_vax_pcrel_relocs_copied *pcrel_relocs_copied;
    414 
    415   bfd_vma got_addend;
    416 };
    417 
    418 /* Declare this now that the above structures are defined.  */
    419 
    420 static bfd_boolean elf_vax_discard_copies (struct elf_vax_link_hash_entry *,
    421 					   void *);
    422 
    423 /* Declare this now that the above structures are defined.  */
    424 
    425 static bfd_boolean elf_vax_instantiate_got_entries (struct elf_link_hash_entry *,
    426 						    void *);
    427 
    428 /* Traverse an VAX ELF linker hash table.  */
    429 
    430 #define elf_vax_link_hash_traverse(table, func, info)			\
    431   (elf_link_hash_traverse						\
    432    ((table),								\
    433     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
    434     (info)))
    435 
    436 /* Create an entry in an VAX ELF linker hash table.  */
    437 
    438 static struct bfd_hash_entry *
    439 elf_vax_link_hash_newfunc (struct bfd_hash_entry *entry,
    440 			   struct bfd_hash_table *table,
    441 			   const char *string)
    442 {
    443   struct elf_vax_link_hash_entry *ret =
    444     (struct elf_vax_link_hash_entry *) entry;
    445 
    446   /* Allocate the structure if it has not already been allocated by a
    447      subclass.  */
    448   if (ret == NULL)
    449     ret = ((struct elf_vax_link_hash_entry *)
    450 	   bfd_hash_allocate (table,
    451 			      sizeof (struct elf_vax_link_hash_entry)));
    452   if (ret == NULL)
    453     return (struct bfd_hash_entry *) ret;
    454 
    455   /* Call the allocation method of the superclass.  */
    456   ret = ((struct elf_vax_link_hash_entry *)
    457 	 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
    458 				     table, string));
    459   if (ret != NULL)
    460     {
    461       ret->pcrel_relocs_copied = NULL;
    462     }
    463 
    464   return (struct bfd_hash_entry *) ret;
    465 }
    466 
    467 /* Create an VAX ELF linker hash table.  */
    468 
    469 static struct bfd_link_hash_table *
    470 elf_vax_link_hash_table_create (bfd *abfd)
    471 {
    472   struct elf_link_hash_table *ret;
    473   bfd_size_type amt = sizeof (struct elf_link_hash_table);
    474 
    475   ret = bfd_zmalloc (amt);
    476   if (ret == NULL)
    477     return NULL;
    478 
    479   if (!_bfd_elf_link_hash_table_init (ret, abfd,
    480 				      elf_vax_link_hash_newfunc,
    481 				      sizeof (struct elf_vax_link_hash_entry),
    482 				      GENERIC_ELF_DATA))
    483     {
    484       free (ret);
    485       return NULL;
    486     }
    487 
    488   return &ret->root;
    489 }
    490 
    491 /* Keep vax-specific flags in the ELF header */
    492 static bfd_boolean
    493 elf32_vax_set_private_flags (bfd *abfd, flagword flags)
    494 {
    495   elf_elfheader (abfd)->e_flags = flags;
    496   elf_flags_init (abfd) = TRUE;
    497   return TRUE;
    498 }
    499 
    500 /* Merge backend specific data from an object file to the output
    501    object file when linking.  */
    502 static bfd_boolean
    503 elf32_vax_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
    504 {
    505   flagword in_flags;
    506 
    507   if (   bfd_get_flavour (ibfd) != bfd_target_elf_flavour
    508       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
    509     return TRUE;
    510 
    511   in_flags  = elf_elfheader (ibfd)->e_flags;
    512 
    513   if (!elf_flags_init (obfd))
    514     {
    515       elf_flags_init (obfd) = TRUE;
    516       elf_elfheader (obfd)->e_flags = in_flags;
    517     }
    518 
    519   return TRUE;
    520 }
    521 
    522 /* Display the flags field */
    523 static bfd_boolean
    524 elf32_vax_print_private_bfd_data (bfd *abfd, void * ptr)
    525 {
    526   FILE *file = (FILE *) ptr;
    527 
    528   BFD_ASSERT (abfd != NULL && ptr != NULL);
    529 
    530   /* Print normal ELF private data.  */
    531   _bfd_elf_print_private_bfd_data (abfd, ptr);
    532 
    533   /* Ignore init flag - it may not be set, despite the flags field containing valid data.  */
    534 
    535   /* xgettext:c-format */
    536   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
    537 
    538   if (elf_elfheader (abfd)->e_flags & EF_VAX_NONPIC)
    539     fprintf (file, _(" [nonpic]"));
    540 
    541   if (elf_elfheader (abfd)->e_flags & EF_VAX_DFLOAT)
    542     fprintf (file, _(" [d-float]"));
    543 
    544   if (elf_elfheader (abfd)->e_flags & EF_VAX_GFLOAT)
    545     fprintf (file, _(" [g-float]"));
    546 
    547   fputc ('\n', file);
    548 
    549   return TRUE;
    550 }
    551 /* Look through the relocs for a section during the first phase, and
    552    allocate space in the global offset table or procedure linkage
    553    table.  */
    554 
    555 static bfd_boolean
    556 elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
    557 		      const Elf_Internal_Rela *relocs)
    558 {
    559   bfd *dynobj;
    560   Elf_Internal_Shdr *symtab_hdr;
    561   struct elf_link_hash_entry **sym_hashes;
    562   const Elf_Internal_Rela *rel;
    563   const Elf_Internal_Rela *rel_end;
    564   asection *sgot;
    565   asection *srelgot;
    566   asection *sreloc;
    567 
    568   if (bfd_link_relocatable (info))
    569     return TRUE;
    570 
    571   dynobj = elf_hash_table (info)->dynobj;
    572   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
    573   sym_hashes = elf_sym_hashes (abfd);
    574 
    575   sgot = NULL;
    576   srelgot = NULL;
    577   sreloc = NULL;
    578 
    579   rel_end = relocs + sec->reloc_count;
    580   for (rel = relocs; rel < rel_end; rel++)
    581     {
    582       unsigned long r_symndx;
    583       struct elf_link_hash_entry *h;
    584 
    585       r_symndx = ELF32_R_SYM (rel->r_info);
    586 
    587       if (r_symndx < symtab_hdr->sh_info)
    588 	h = NULL;
    589       else
    590 	{
    591 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
    592 	  while (h->root.type == bfd_link_hash_indirect
    593 		 || h->root.type == bfd_link_hash_warning)
    594 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
    595 
    596 	  /* PR15323, ref flags aren't set for references in the same
    597 	     object.  */
    598 	  h->root.non_ir_ref = 1;
    599 	}
    600 
    601       switch (ELF32_R_TYPE (rel->r_info))
    602 	{
    603 	case R_VAX_GOT32:
    604 	  BFD_ASSERT (h != NULL);
    605 
    606 	  /* If this is a local symbol, we resolve it directly without
    607 	     creating a global offset table entry.  */
    608 	  if (h->forced_local
    609 	      || h == elf_hash_table (info)->hgot
    610 	      || h == elf_hash_table (info)->hplt)
    611 	    break;
    612 
    613 	  /* This symbol requires a global offset table entry.  */
    614 
    615 	  if (dynobj == NULL)
    616 	    {
    617 	      /* Create the .got section.  */
    618 	      elf_hash_table (info)->dynobj = dynobj = abfd;
    619 	      if (!_bfd_elf_create_got_section (dynobj, info))
    620 		return FALSE;
    621 	    }
    622 
    623 	  if (sgot == NULL)
    624 	    {
    625 	      sgot = bfd_get_linker_section (dynobj, ".got");
    626 	      BFD_ASSERT (sgot != NULL);
    627 	    }
    628 
    629 	  if (srelgot == NULL
    630 	      && (h != NULL || bfd_link_pic (info)))
    631 	    {
    632 	      srelgot = bfd_get_linker_section (dynobj, ".rela.got");
    633 	      if (srelgot == NULL)
    634 		{
    635 		  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
    636 				    | SEC_IN_MEMORY | SEC_LINKER_CREATED
    637 				    | SEC_READONLY);
    638 
    639 		  srelgot = bfd_make_section_anyway_with_flags (dynobj,
    640 								".rela.got",
    641 								flags);
    642 		  if (srelgot == NULL
    643 		      || !bfd_set_section_alignment (dynobj, srelgot, 2))
    644 		    return FALSE;
    645 		}
    646 	    }
    647 
    648 	  if (h != NULL)
    649 	    {
    650 	      struct elf_vax_link_hash_entry *eh;
    651 
    652 	      eh = (struct elf_vax_link_hash_entry *) h;
    653 	      if (h->got.refcount == -1)
    654 		{
    655 		  h->got.refcount = 1;
    656 		  eh->got_addend = rel->r_addend;
    657 		}
    658 	      else
    659 		{
    660 		  h->got.refcount++;
    661 		  if (eh->got_addend != (bfd_vma) rel->r_addend)
    662 		    (*_bfd_error_handler)
    663 		      (_("%s: warning: GOT addend of %ld to `%s' does"
    664 			 " not match previous GOT addend of %ld"),
    665 			 bfd_get_filename (abfd), rel->r_addend,
    666 			 h->root.root.string,
    667 			 eh->got_addend);
    668 
    669 		}
    670 	    }
    671 	  break;
    672 
    673 	case R_VAX_PLT32:
    674 	  /* This symbol requires a procedure linkage table entry.  We
    675 	     actually build the entry in adjust_dynamic_symbol,
    676              because this might be a case of linking PIC code which is
    677              never referenced by a dynamic object, in which case we
    678              don't need to generate a procedure linkage table entry
    679              after all.  */
    680 	  BFD_ASSERT (h != NULL);
    681 
    682 	  /* If this is a local symbol, we resolve it directly without
    683 	     creating a procedure linkage table entry.  */
    684 	  if (h->forced_local)
    685 	    break;
    686 
    687 	  h->needs_plt = 1;
    688 	  if (h->plt.refcount == -1)
    689 	    h->plt.refcount = 1;
    690 	  else
    691 	    h->plt.refcount++;
    692 	  break;
    693 
    694 	case R_VAX_PC8:
    695 	case R_VAX_PC16:
    696 	case R_VAX_PC32:
    697 	  /* If we are creating a shared library and this is not a local
    698 	     symbol, we need to copy the reloc into the shared library.
    699 	     However when linking with -Bsymbolic and this is a global
    700 	     symbol which is defined in an object we are including in the
    701 	     link (i.e., DEF_REGULAR is set), then we can resolve the
    702 	     reloc directly.  At this point we have not seen all the input
    703 	     files, so it is possible that DEF_REGULAR is not set now but
    704 	     will be set later (it is never cleared).  We account for that
    705 	     possibility below by storing information in the
    706 	     pcrel_relocs_copied field of the hash table entry.  */
    707 	  if (!(bfd_link_pic (info)
    708 		&& (sec->flags & SEC_ALLOC) != 0
    709 		&& h != NULL
    710 		&& (!info->symbolic
    711 		    || !h->def_regular)))
    712 	    {
    713 	      if (h != NULL
    714 		  && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
    715 		  && !h->forced_local)
    716 		{
    717 		  /* Make sure a plt entry is created for this symbol if
    718 		     it turns out to be a function defined by a dynamic
    719 		     object.  */
    720 		  if (h->plt.refcount == -1)
    721 		    h->plt.refcount = 1;
    722 		  else
    723 		    h->plt.refcount++;
    724 		}
    725 	      break;
    726 	    }
    727 	  /* If this is a local symbol, we can resolve it directly.  */
    728 	  if (h != NULL
    729 	      && (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
    730 		  || h->forced_local))
    731 	    break;
    732 
    733 	  /* Fall through.  */
    734 	case R_VAX_8:
    735 	case R_VAX_16:
    736 	case R_VAX_32:
    737 	  if (h != NULL && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
    738 	    {
    739 	      /* Make sure a plt entry is created for this symbol if it
    740 		 turns out to be a function defined by a dynamic object.  */
    741 	      if (h->plt.refcount == -1)
    742 		h->plt.refcount = 1;
    743 	      else
    744 		h->plt.refcount++;
    745 	    }
    746 
    747 	  /* If we are creating a shared library, we need to copy the
    748 	     reloc into the shared library.  */
    749 	  if (bfd_link_pic (info)
    750 	      && (sec->flags & SEC_ALLOC) != 0)
    751 	    {
    752 	      /* When creating a shared object, we must copy these
    753 		 reloc types into the output file.  We create a reloc
    754 		 section in dynobj and make room for this reloc.  */
    755 	      if (sreloc == NULL)
    756 		{
    757 		  sreloc = _bfd_elf_make_dynamic_reloc_section
    758 		    (sec, dynobj, 2, abfd, /*rela?*/ TRUE);
    759 
    760 		  if (sreloc == NULL)
    761 		    return FALSE;
    762 
    763 		  if (sec->flags & SEC_READONLY)
    764 		    info->flags |= DF_TEXTREL;
    765 		}
    766 
    767 	      sreloc->size += sizeof (Elf32_External_Rela);
    768 
    769 	      /* If we are linking with -Bsymbolic, we count the number of
    770 		 PC relative relocations we have entered for this symbol,
    771 		 so that we can discard them again if the symbol is later
    772 		 defined by a regular object.  Note that this function is
    773 		 only called if we are using a vaxelf linker hash table,
    774 		 which means that h is really a pointer to an
    775 		 elf_vax_link_hash_entry.  */
    776 	      if ((ELF32_R_TYPE (rel->r_info) == R_VAX_PC8
    777 		   || ELF32_R_TYPE (rel->r_info) == R_VAX_PC16
    778 		   || ELF32_R_TYPE (rel->r_info) == R_VAX_PC32)
    779 		  && info->symbolic)
    780 		{
    781 		  struct elf_vax_link_hash_entry *eh;
    782 		  struct elf_vax_pcrel_relocs_copied *p;
    783 
    784 		  eh = (struct elf_vax_link_hash_entry *) h;
    785 
    786 		  for (p = eh->pcrel_relocs_copied; p != NULL; p = p->next)
    787 		    if (p->section == sreloc)
    788 		      break;
    789 
    790 		  if (p == NULL)
    791 		    {
    792 		      p = ((struct elf_vax_pcrel_relocs_copied *)
    793 			   bfd_alloc (dynobj, (bfd_size_type) sizeof *p));
    794 		      if (p == NULL)
    795 			return FALSE;
    796 		      p->next = eh->pcrel_relocs_copied;
    797 		      eh->pcrel_relocs_copied = p;
    798 		      p->section = sreloc;
    799 		      p->count = 0;
    800 		    }
    801 
    802 		  ++p->count;
    803 		}
    804 	    }
    805 
    806 	  break;
    807 
    808 	  /* This relocation describes the C++ object vtable hierarchy.
    809 	     Reconstruct it for later use during GC.  */
    810 	case R_VAX_GNU_VTINHERIT:
    811 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
    812 	    return FALSE;
    813 	  break;
    814 
    815 	  /* This relocation describes which C++ vtable entries are actually
    816 	     used.  Record for later use during GC.  */
    817 	case R_VAX_GNU_VTENTRY:
    818 	  BFD_ASSERT (h != NULL);
    819 	  if (h != NULL
    820 	      && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
    821 	    return FALSE;
    822 	  break;
    823 
    824 	default:
    825 	  break;
    826 	}
    827     }
    828 
    829   return TRUE;
    830 }
    831 
    832 /* Return the section that should be marked against GC for a given
    833    relocation.  */
    834 
    835 static asection *
    836 elf_vax_gc_mark_hook (asection *sec,
    837 		      struct bfd_link_info *info,
    838 		      Elf_Internal_Rela *rel,
    839 		      struct elf_link_hash_entry *h,
    840 		      Elf_Internal_Sym *sym)
    841 {
    842   if (h != NULL)
    843     switch (ELF32_R_TYPE (rel->r_info))
    844       {
    845       case R_VAX_GNU_VTINHERIT:
    846       case R_VAX_GNU_VTENTRY:
    847 	return NULL;
    848       }
    849 
    850   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
    851 }
    852 
    853 /* Update the got entry reference counts for the section being removed.  */
    854 
    855 static bfd_boolean
    856 elf_vax_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, asection *sec,
    857 		       const Elf_Internal_Rela *relocs)
    858 {
    859   Elf_Internal_Shdr *symtab_hdr;
    860   struct elf_link_hash_entry **sym_hashes;
    861   const Elf_Internal_Rela *rel, *relend;
    862   bfd *dynobj;
    863 
    864   if (bfd_link_relocatable (info))
    865     return TRUE;
    866 
    867   dynobj = elf_hash_table (info)->dynobj;
    868   if (dynobj == NULL)
    869     return TRUE;
    870 
    871   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
    872   sym_hashes = elf_sym_hashes (abfd);
    873 
    874   relend = relocs + sec->reloc_count;
    875   for (rel = relocs; rel < relend; rel++)
    876     {
    877       unsigned long r_symndx;
    878       struct elf_link_hash_entry *h = NULL;
    879 
    880       r_symndx = ELF32_R_SYM (rel->r_info);
    881       if (r_symndx >= symtab_hdr->sh_info)
    882 	{
    883 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
    884 	  while (h->root.type == bfd_link_hash_indirect
    885 		 || h->root.type == bfd_link_hash_warning)
    886 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
    887 	}
    888 
    889       switch (ELF32_R_TYPE (rel->r_info))
    890 	{
    891 	case R_VAX_GOT32:
    892 	  if (h != NULL && h->got.refcount > 0)
    893 	    --h->got.refcount;
    894 	  break;
    895 
    896 	case R_VAX_PLT32:
    897 	case R_VAX_PC8:
    898 	case R_VAX_PC16:
    899 	case R_VAX_PC32:
    900 	case R_VAX_8:
    901 	case R_VAX_16:
    902 	case R_VAX_32:
    903 	  if (h != NULL && h->plt.refcount > 0)
    904 	    --h->plt.refcount;
    905 	  break;
    906 
    907 	default:
    908 	  break;
    909 	}
    910     }
    911 
    912   return TRUE;
    913 }
    914 
    915 /* Adjust a symbol defined by a dynamic object and referenced by a
    916    regular object.  The current definition is in some section of the
    917    dynamic object, but we're not including those sections.  We have to
    918    change the definition to something the rest of the link can
    919    understand.  */
    920 
    921 static bfd_boolean
    922 elf_vax_adjust_dynamic_symbol (struct bfd_link_info *info,
    923 			       struct elf_link_hash_entry *h)
    924 {
    925   bfd *dynobj;
    926   asection *s;
    927 
    928   dynobj = elf_hash_table (info)->dynobj;
    929 
    930   /* Make sure we know what is going on here.  */
    931   BFD_ASSERT (dynobj != NULL
    932 	      && (h->needs_plt
    933 		  || h->u.weakdef != NULL
    934 		  || (h->def_dynamic
    935 		      && h->ref_regular
    936 		      && !h->def_regular)));
    937 
    938   /* If this is a function, put it in the procedure linkage table.  We
    939      will fill in the contents of the procedure linkage table later,
    940      when we know the address of the .got section.  */
    941   if (h->type == STT_FUNC
    942       || h->needs_plt)
    943     {
    944       if (h->plt.refcount <= 0
    945 	  || SYMBOL_CALLS_LOCAL (info, h)
    946 	  || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
    947 	      && h->root.type == bfd_link_hash_undefweak))
    948 	{
    949 	  /* This case can occur if we saw a PLTxx reloc in an input
    950 	     file, but the symbol was never referred to by a dynamic
    951 	     object, or if all references were garbage collected.  In
    952 	     such a case, we don't actually need to build a procedure
    953 	     linkage table, and we can just do a PCxx reloc instead.  */
    954 	  h->plt.offset = (bfd_vma) -1;
    955 	  h->needs_plt = 0;
    956 	  return TRUE;
    957 	}
    958 
    959       s = bfd_get_linker_section (dynobj, ".plt");
    960       BFD_ASSERT (s != NULL);
    961 
    962       /* If this is the first .plt entry, make room for the special
    963 	 first entry.  */
    964       if (s->size == 0)
    965 	{
    966 	  s->size += PLT_ENTRY_SIZE;
    967 	}
    968 
    969       /* If this symbol is not defined in a regular file, and we are
    970 	 not generating a shared library, then set the symbol to this
    971 	 location in the .plt.  This is required to make function
    972 	 pointers compare as equal between the normal executable and
    973 	 the shared library.  */
    974       if (!bfd_link_pic (info)
    975 	  && !h->def_regular)
    976 	{
    977 	  h->root.u.def.section = s;
    978 	  h->root.u.def.value = s->size;
    979 	}
    980 
    981       h->plt.offset = s->size;
    982 
    983       /* Make room for this entry.  */
    984       s->size += PLT_ENTRY_SIZE;
    985 
    986       /* We also need to make an entry in the .got.plt section, which
    987 	 will be placed in the .got section by the linker script.  */
    988 
    989       s = bfd_get_linker_section (dynobj, ".got.plt");
    990       BFD_ASSERT (s != NULL);
    991       s->size += 4;
    992 
    993       /* We also need to make an entry in the .rela.plt section.  */
    994 
    995       s = bfd_get_linker_section (dynobj, ".rela.plt");
    996       BFD_ASSERT (s != NULL);
    997       s->size += sizeof (Elf32_External_Rela);
    998 
    999       return TRUE;
   1000     }
   1001 
   1002   /* Reinitialize the plt offset now that it is not used as a reference
   1003      count any more.  */
   1004   h->plt.offset = (bfd_vma) -1;
   1005 
   1006   /* If this is a weak symbol, and there is a real definition, the
   1007      processor independent code will have arranged for us to see the
   1008      real definition first, and we can just use the same value.  */
   1009   if (h->u.weakdef != NULL)
   1010     {
   1011       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
   1012 		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
   1013       h->root.u.def.section = h->u.weakdef->root.u.def.section;
   1014       h->root.u.def.value = h->u.weakdef->root.u.def.value;
   1015       return TRUE;
   1016     }
   1017 
   1018   /* This is a reference to a symbol defined by a dynamic object which
   1019      is not a function.  */
   1020 
   1021   /* If we are creating a shared library, we must presume that the
   1022      only references to the symbol are via the global offset table.
   1023      For such cases we need not do anything here; the relocations will
   1024      be handled correctly by relocate_section.  */
   1025   if (bfd_link_pic (info))
   1026     return TRUE;
   1027 
   1028   /* We must allocate the symbol in our .dynbss section, which will
   1029      become part of the .bss section of the executable.  There will be
   1030      an entry for this symbol in the .dynsym section.  The dynamic
   1031      object will contain position independent code, so all references
   1032      from the dynamic object to this symbol will go through the global
   1033      offset table.  The dynamic linker will use the .dynsym entry to
   1034      determine the address it must put in the global offset table, so
   1035      both the dynamic object and the regular object will refer to the
   1036      same memory location for the variable.  */
   1037 
   1038   s = bfd_get_linker_section (dynobj, ".dynbss");
   1039   BFD_ASSERT (s != NULL);
   1040 
   1041   /* We must generate a R_VAX_COPY reloc to tell the dynamic linker to
   1042      copy the initial value out of the dynamic object and into the
   1043      runtime process image.  We need to remember the offset into the
   1044      .rela.bss section we are going to use.  */
   1045   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
   1046     {
   1047       asection *srel;
   1048 
   1049       srel = bfd_get_linker_section (dynobj, ".rela.bss");
   1050       BFD_ASSERT (srel != NULL);
   1051       srel->size += sizeof (Elf32_External_Rela);
   1052       h->needs_copy = 1;
   1053     }
   1054 
   1055   return _bfd_elf_adjust_dynamic_copy (info, h, s);
   1056 }
   1057 
   1058 /* This function is called via elf_link_hash_traverse.  It resets GOT
   1059    and PLT (.GOT) reference counts back to -1 so normal PC32 relocation
   1060    will be done.  */
   1061 
   1062 static bfd_boolean
   1063 elf_vax_discard_got_entries (struct elf_link_hash_entry *h,
   1064 			     void *infoptr ATTRIBUTE_UNUSED)
   1065 {
   1066   h->got.refcount = -1;
   1067   h->plt.refcount = -1;
   1068 
   1069   return TRUE;
   1070 }
   1071 
   1072 /* Discard unused dynamic data if this is a static link.  */
   1073 
   1074 static bfd_boolean
   1075 elf_vax_always_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
   1076 			      struct bfd_link_info *info)
   1077 {
   1078   bfd *dynobj;
   1079   asection *s;
   1080 
   1081   dynobj = elf_hash_table (info)->dynobj;
   1082 
   1083   if (dynobj && !elf_hash_table (info)->dynamic_sections_created)
   1084     {
   1085       /* We may have created entries in the .rela.got and .got sections.
   1086 	 However, if we are not creating the dynamic sections, we will
   1087 	 not actually use these entries.  Reset the size of .rela.got
   1088 	 and .got, which will cause them to get stripped from the output
   1089 	 file below.  */
   1090       s = bfd_get_linker_section (dynobj, ".rela.got");
   1091       if (s != NULL)
   1092 	s->size = 0;
   1093       s = bfd_get_linker_section (dynobj, ".got.plt");
   1094       if (s != NULL)
   1095 	s->size = 0;
   1096       s = bfd_get_linker_section (dynobj, ".got");
   1097       if (s != NULL)
   1098 	s->size = 0;
   1099     }
   1100 
   1101   /* If this is a static link, we need to discard all the got entries we've
   1102      recorded.  */
   1103   if (!dynobj || !elf_hash_table (info)->dynamic_sections_created)
   1104     elf_link_hash_traverse (elf_hash_table (info),
   1105 			    elf_vax_discard_got_entries,
   1106 			    info);
   1107 
   1108   return TRUE;
   1109 }
   1110 
   1111 /* Set the sizes of the dynamic sections.  */
   1112 
   1113 static bfd_boolean
   1114 elf_vax_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
   1115 {
   1116   bfd *dynobj;
   1117   asection *s;
   1118   bfd_boolean plt;
   1119   bfd_boolean relocs;
   1120   bfd_boolean reltext;
   1121 
   1122   dynobj = elf_hash_table (info)->dynobj;
   1123   BFD_ASSERT (dynobj != NULL);
   1124 
   1125   if (elf_hash_table (info)->dynamic_sections_created)
   1126     {
   1127       /* Set the contents of the .interp section to the interpreter.  */
   1128       if (bfd_link_executable (info) && !info->nointerp)
   1129 	{
   1130 	  s = bfd_get_linker_section (dynobj, ".interp");
   1131 	  BFD_ASSERT (s != NULL);
   1132 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
   1133 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
   1134 	}
   1135     }
   1136 
   1137   /* If this is a -Bsymbolic shared link, then we need to discard all PC
   1138      relative relocs against symbols defined in a regular object.  We
   1139      allocated space for them in the check_relocs routine, but we will not
   1140      fill them in in the relocate_section routine.  */
   1141   if (bfd_link_pic (info) && info->symbolic)
   1142     elf_vax_link_hash_traverse (elf_hash_table (info),
   1143 				elf_vax_discard_copies,
   1144 				NULL);
   1145 
   1146   /* If this is a -Bsymbolic shared link, we need to discard all the got
   1147      entries we've recorded.  Otherwise, we need to instantiate (allocate
   1148      space for them).  */
   1149   elf_link_hash_traverse (elf_hash_table (info),
   1150 			  elf_vax_instantiate_got_entries,
   1151 			  info);
   1152 
   1153   /* The check_relocs and adjust_dynamic_symbol entry points have
   1154      determined the sizes of the various dynamic sections.  Allocate
   1155      memory for them.  */
   1156   plt = FALSE;
   1157   relocs = FALSE;
   1158   reltext = FALSE;
   1159   for (s = dynobj->sections; s != NULL; s = s->next)
   1160     {
   1161       const char *name;
   1162 
   1163       if ((s->flags & SEC_LINKER_CREATED) == 0)
   1164 	continue;
   1165 
   1166       /* It's OK to base decisions on the section name, because none
   1167 	 of the dynobj section names depend upon the input files.  */
   1168       name = bfd_get_section_name (dynobj, s);
   1169 
   1170       if (strcmp (name, ".plt") == 0)
   1171 	{
   1172 	  /* Remember whether there is a PLT.  */
   1173 	  plt = s->size != 0;
   1174 	}
   1175       else if (CONST_STRNEQ (name, ".rela"))
   1176 	{
   1177 	  if (s->size != 0)
   1178 	    {
   1179 	      asection *target;
   1180 
   1181 	      /* Remember whether there are any reloc sections other
   1182                  than .rela.plt.  */
   1183 	      if (strcmp (name, ".rela.plt") != 0)
   1184 		{
   1185 		  const char *outname;
   1186 
   1187 		  relocs = TRUE;
   1188 
   1189 		  /* If this relocation section applies to a read only
   1190 		     section, then we probably need a DT_TEXTREL
   1191 		     entry.  .rela.plt is actually associated with
   1192 		     .got.plt, which is never readonly.  */
   1193 		  outname = bfd_get_section_name (output_bfd,
   1194 						  s->output_section);
   1195 		  target = bfd_get_section_by_name (output_bfd, outname + 5);
   1196 		  if (target != NULL
   1197 		      && (target->flags & SEC_READONLY) != 0
   1198 		      && (target->flags & SEC_ALLOC) != 0)
   1199 		    reltext = TRUE;
   1200 		}
   1201 
   1202 	      /* We use the reloc_count field as a counter if we need
   1203 		 to copy relocs into the output file.  */
   1204 	      s->reloc_count = 0;
   1205 	    }
   1206 	}
   1207       else if (! CONST_STRNEQ (name, ".got")
   1208 	       && strcmp (name, ".dynbss") != 0)
   1209 	{
   1210 	  /* It's not one of our sections, so don't allocate space.  */
   1211 	  continue;
   1212 	}
   1213 
   1214       if (s->size == 0)
   1215 	{
   1216 	  /* If we don't need this section, strip it from the
   1217 	     output file.  This is mostly to handle .rela.bss and
   1218 	     .rela.plt.  We must create both sections in
   1219 	     create_dynamic_sections, because they must be created
   1220 	     before the linker maps input sections to output
   1221 	     sections.  The linker does that before
   1222 	     adjust_dynamic_symbol is called, and it is that
   1223 	     function which decides whether anything needs to go
   1224 	     into these sections.  */
   1225 	  s->flags |= SEC_EXCLUDE;
   1226 	  continue;
   1227 	}
   1228 
   1229       if ((s->flags & SEC_HAS_CONTENTS) == 0)
   1230 	continue;
   1231 
   1232       /* Allocate memory for the section contents.  */
   1233       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
   1234       if (s->contents == NULL)
   1235 	return FALSE;
   1236     }
   1237 
   1238   if (elf_hash_table (info)->dynamic_sections_created)
   1239     {
   1240       /* Add some entries to the .dynamic section.  We fill in the
   1241 	 values later, in elf_vax_finish_dynamic_sections, but we
   1242 	 must add the entries now so that we get the correct size for
   1243 	 the .dynamic section.  The DT_DEBUG entry is filled in by the
   1244 	 dynamic linker and used by the debugger.  */
   1245 #define add_dynamic_entry(TAG, VAL) \
   1246   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
   1247 
   1248       if (!bfd_link_pic (info))
   1249 	{
   1250 	  if (!add_dynamic_entry (DT_DEBUG, 0))
   1251 	    return FALSE;
   1252 	}
   1253 
   1254       if (plt)
   1255 	{
   1256 	  if (!add_dynamic_entry (DT_PLTGOT, 0)
   1257 	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
   1258 	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
   1259 	      || !add_dynamic_entry (DT_JMPREL, 0))
   1260 	    return FALSE;
   1261 	}
   1262 
   1263       if (relocs)
   1264 	{
   1265 	  if (!add_dynamic_entry (DT_RELA, 0)
   1266 	      || !add_dynamic_entry (DT_RELASZ, 0)
   1267 	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
   1268 	    return FALSE;
   1269 	}
   1270 
   1271       if (reltext || (info->flags & DF_TEXTREL) != 0)
   1272 	{
   1273 	  if (!add_dynamic_entry (DT_TEXTREL, 0))
   1274 	    return FALSE;
   1275 	}
   1276     }
   1277 #undef add_dynamic_entry
   1278 
   1279   return TRUE;
   1280 }
   1281 
   1282 /* This function is called via elf_vax_link_hash_traverse if we are
   1283    creating a shared object with -Bsymbolic.  It discards the space
   1284    allocated to copy PC relative relocs against symbols which are defined
   1285    in regular objects.  We allocated space for them in the check_relocs
   1286    routine, but we won't fill them in in the relocate_section routine.  */
   1287 
   1288 static bfd_boolean
   1289 elf_vax_discard_copies (struct elf_vax_link_hash_entry *h,
   1290 			void * ignore ATTRIBUTE_UNUSED)
   1291 {
   1292   struct elf_vax_pcrel_relocs_copied *s;
   1293 
   1294   /* We only discard relocs for symbols defined in a regular object.  */
   1295   if (!h->root.def_regular)
   1296     return TRUE;
   1297 
   1298   for (s = h->pcrel_relocs_copied; s != NULL; s = s->next)
   1299     s->section->size -= s->count * sizeof (Elf32_External_Rela);
   1300 
   1301   return TRUE;
   1302 }
   1303 
   1304 /* This function is called via elf_link_hash_traverse.  It looks for
   1305    entries that have GOT or PLT (.GOT) references.  If creating a shared
   1306    object with -Bsymbolic, or the symbol has been forced local, then it
   1307    resets the reference count back to -1 so normal PC32 relocation will
   1308    be done.  Otherwise space in the .got and .rela.got will be reserved
   1309    for the symbol.  */
   1310 
   1311 static bfd_boolean
   1312 elf_vax_instantiate_got_entries (struct elf_link_hash_entry *h, void * infoptr)
   1313 {
   1314   struct bfd_link_info *info = (struct bfd_link_info *) infoptr;
   1315   bfd *dynobj;
   1316   asection *sgot;
   1317   asection *srelgot;
   1318 
   1319   /* We don't care about non-GOT (and non-PLT) entries.  */
   1320   if (h->got.refcount <= 0 && h->plt.refcount <= 0)
   1321     return TRUE;
   1322 
   1323   dynobj = elf_hash_table (info)->dynobj;
   1324   BFD_ASSERT (dynobj != NULL);
   1325 
   1326   sgot = bfd_get_linker_section (dynobj, ".got");
   1327   srelgot = bfd_get_linker_section (dynobj, ".rela.got");
   1328 
   1329   if (SYMBOL_REFERENCES_LOCAL (info, h))
   1330     {
   1331       h->got.refcount = -1;
   1332       h->plt.refcount = -1;
   1333     }
   1334   else if (h->got.refcount > 0)
   1335     {
   1336       /* Make sure this symbol is output as a dynamic symbol.  */
   1337       if (h->dynindx == -1)
   1338 	{
   1339 	  if (!bfd_elf_link_record_dynamic_symbol (info, h))
   1340 	    return FALSE;
   1341 	}
   1342 
   1343       /* Allocate space in the .got and .rela.got sections.  */
   1344       sgot->size += 4;
   1345       srelgot->size += sizeof (Elf32_External_Rela);
   1346     }
   1347 
   1348   return TRUE;
   1349 }
   1350 
   1351 /* Relocate an VAX ELF section.  */
   1352 
   1353 static bfd_boolean
   1354 elf_vax_relocate_section (bfd *output_bfd,
   1355 			  struct bfd_link_info *info,
   1356 			  bfd *input_bfd,
   1357 			  asection *input_section,
   1358 			  bfd_byte *contents,
   1359 			  Elf_Internal_Rela *relocs,
   1360 			  Elf_Internal_Sym *local_syms,
   1361 			  asection **local_sections)
   1362 {
   1363   bfd *dynobj;
   1364   Elf_Internal_Shdr *symtab_hdr;
   1365   struct elf_link_hash_entry **sym_hashes;
   1366   bfd_vma plt_index;
   1367   bfd_vma got_offset;
   1368   asection *sgot;
   1369   asection *splt;
   1370   asection *sgotplt;
   1371   asection *sreloc;
   1372   Elf_Internal_Rela *rel;
   1373   Elf_Internal_Rela *relend;
   1374 
   1375   dynobj = elf_hash_table (info)->dynobj;
   1376   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   1377   sym_hashes = elf_sym_hashes (input_bfd);
   1378 
   1379   sgot = NULL;
   1380   splt = NULL;
   1381   sgotplt = NULL;
   1382   sreloc = NULL;
   1383 
   1384   rel = relocs;
   1385   relend = relocs + input_section->reloc_count;
   1386   for (; rel < relend; rel++)
   1387     {
   1388       int r_type;
   1389       reloc_howto_type *howto;
   1390       unsigned long r_symndx;
   1391       struct elf_link_hash_entry *h;
   1392       Elf_Internal_Sym *sym;
   1393       asection *sec;
   1394       bfd_vma relocation;
   1395       bfd_reloc_status_type r;
   1396 
   1397       r_type = ELF32_R_TYPE (rel->r_info);
   1398       if (r_type < 0 || r_type >= (int) R_VAX_max)
   1399 	{
   1400 	  bfd_set_error (bfd_error_bad_value);
   1401 	  return FALSE;
   1402 	}
   1403       howto = howto_table + r_type;
   1404 
   1405       r_symndx = ELF32_R_SYM (rel->r_info);
   1406       h = NULL;
   1407       sym = NULL;
   1408       sec = NULL;
   1409       if (r_symndx < symtab_hdr->sh_info)
   1410 	{
   1411 	  sym = local_syms + r_symndx;
   1412 	  sec = local_sections[r_symndx];
   1413 	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
   1414 	}
   1415       else
   1416 	{
   1417 	  bfd_boolean unresolved_reloc;
   1418 	  bfd_boolean warned, ignored;
   1419 
   1420 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
   1421 				   r_symndx, symtab_hdr, sym_hashes,
   1422 				   h, sec, relocation,
   1423 				   unresolved_reloc, warned, ignored);
   1424 
   1425 	  if ((h->root.type == bfd_link_hash_defined
   1426 	      || h->root.type == bfd_link_hash_defweak)
   1427 	      && ((r_type == R_VAX_PLT32
   1428 		   && h->plt.offset != (bfd_vma) -1
   1429 		   && !h->forced_local
   1430 		   && elf_hash_table (info)->dynamic_sections_created)
   1431 		  || (r_type == R_VAX_GOT32
   1432 		      && h->got.offset != (bfd_vma) -1
   1433 		      && !h->forced_local
   1434 		      && elf_hash_table (info)->dynamic_sections_created
   1435 		      && (! bfd_link_pic (info)
   1436 			  || (! info->symbolic && h->dynindx != -1)
   1437 			  || !h->def_regular))
   1438 		  || (bfd_link_pic (info)
   1439 		      && ((! info->symbolic && h->dynindx != -1)
   1440 			  || !h->def_regular)
   1441 		      && ((input_section->flags & SEC_ALLOC) != 0
   1442 			  /* DWARF will emit R_VAX_32 relocations in its
   1443 			     sections against symbols defined externally
   1444 			     in shared libraries.  We can't do anything
   1445 			     with them here.  */
   1446 
   1447 			  || ((input_section->flags & SEC_DEBUGGING) != 0
   1448 			      && h->def_dynamic))
   1449 		      && (r_type == R_VAX_8
   1450 			  || r_type == R_VAX_16
   1451 			  || r_type == R_VAX_32))))
   1452 	    /* In these cases, we don't need the relocation
   1453 	       value.  We check specially because in some
   1454 	       obscure cases sec->output_section will be NULL.  */
   1455 	    relocation = 0;
   1456 	}
   1457 
   1458       if (sec != NULL && discarded_section (sec))
   1459 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
   1460 					 rel, 1, relend, howto, 0, contents);
   1461 
   1462       if (bfd_link_relocatable (info))
   1463 	continue;
   1464 
   1465       switch (r_type)
   1466 	{
   1467 	case R_VAX_GOT32:
   1468 	  /* Relocation is to the address of the entry for this symbol
   1469 	     in the global offset table.  */
   1470 
   1471 	  /* Resolve a GOTxx reloc against a local symbol directly,
   1472 	     without using the global offset table.  */
   1473 	  if (h == NULL
   1474 	      || h->got.offset == (bfd_vma) -1)
   1475 	    break;
   1476 
   1477 	  {
   1478 	    bfd_vma off;
   1479 
   1480 	    if (sgot == NULL)
   1481 	      {
   1482 		sgot = bfd_get_linker_section (dynobj, ".got");
   1483 		BFD_ASSERT (sgot != NULL);
   1484 	      }
   1485 
   1486 	    off = h->got.offset;
   1487 	    BFD_ASSERT (off < sgot->size);
   1488 
   1489 	    bfd_put_32 (output_bfd, rel->r_addend, sgot->contents + off);
   1490 
   1491 	    relocation = sgot->output_offset + off;
   1492 	    /* The GOT relocation uses the addend.  */
   1493 	    rel->r_addend = 0;
   1494 
   1495 	    /* Change the reference to be indirect.  */
   1496 	    contents[rel->r_offset - 1] |= 0x10;
   1497 	    relocation += sgot->output_section->vma;
   1498 	  }
   1499 	  break;
   1500 
   1501 	case R_VAX_PC32:
   1502 	  /* If we are creating an executable and the function this
   1503 	     reloc refers to is in a shared lib, then we made a PLT
   1504 	     entry for this symbol and need to handle the reloc like
   1505 	     a PLT reloc.  */
   1506 	  if (bfd_link_pic (info))
   1507 	     goto r_vax_pc32_shared;
   1508 	  /* Fall through.  */
   1509 	case R_VAX_PLT32:
   1510 	  /* Relocation is to the entry for this symbol in the
   1511 	     procedure linkage table.  */
   1512 
   1513 	  /* Resolve a PLTxx reloc against a local symbol directly,
   1514 	     without using the procedure linkage table.  */
   1515 	  if (h == NULL
   1516 	      || h->plt.offset == (bfd_vma) -1)
   1517 	    break;
   1518 
   1519 	  if (splt == NULL)
   1520 	    {
   1521 	      splt = bfd_get_linker_section (dynobj, ".plt");
   1522 	      BFD_ASSERT (splt != NULL);
   1523 	    }
   1524 
   1525 	  if (sgotplt == NULL)
   1526 	    {
   1527 	      sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
   1528 	      BFD_ASSERT (sgotplt != NULL);
   1529 	    }
   1530 
   1531 	  plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1;
   1532 
   1533 	  /* Get the offset into the .got table of the entry that
   1534 	     corresponds to this function.  Each .got entry is 4 bytes.
   1535 	     The first two are reserved.  */
   1536 	  got_offset = (plt_index + 3) * 4;
   1537 
   1538 	  /* We want the relocation to point into the .got.plt instead
   1539 	     of the plt itself.  */
   1540 	  relocation = (sgotplt->output_section->vma
   1541 			+ sgotplt->output_offset
   1542 			+ got_offset);
   1543 	  contents[rel->r_offset-1] |= 0x10; /* make indirect */
   1544 	  if (rel->r_addend == 2)
   1545 	    {
   1546 	      h->plt.offset |= 1;
   1547 	    }
   1548 	  else if (rel->r_addend != 0)
   1549 	    (*_bfd_error_handler)
   1550 	      (_("%s: warning: PLT addend of %d to `%s' from %s section ignored"),
   1551 		      bfd_get_filename (input_bfd), rel->r_addend,
   1552 		      h->root.root.string,
   1553 		      bfd_get_section_name (input_bfd, input_section));
   1554 	  rel->r_addend = 0;
   1555 
   1556 	  break;
   1557 
   1558 	case R_VAX_PC8:
   1559 	case R_VAX_PC16:
   1560 	r_vax_pc32_shared:
   1561 	  if (h == NULL
   1562 	      || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
   1563 	      || h->forced_local)
   1564 	    break;
   1565 	  /* Fall through.  */
   1566 	case R_VAX_8:
   1567 	case R_VAX_16:
   1568 	case R_VAX_32:
   1569 	  if (bfd_link_pic (info)
   1570 	      && r_symndx != STN_UNDEF
   1571 	      && (input_section->flags & SEC_ALLOC) != 0
   1572 	      && ((r_type != R_VAX_PC8
   1573 		   && r_type != R_VAX_PC16
   1574 		   && r_type != R_VAX_PC32)
   1575 		  || ((input_section->flags & SEC_CODE)
   1576 		      && (!info->symbolic
   1577 			  || (!h->def_regular && h->type != STT_SECTION)))))
   1578 	    {
   1579 	      Elf_Internal_Rela outrel;
   1580 	      bfd_byte *loc;
   1581 	      bfd_boolean skip, relocate;
   1582 
   1583 	      /* When generating a shared object, these relocations
   1584 		 are copied into the output file to be resolved at run
   1585 		 time.  */
   1586 	      if (sreloc == NULL)
   1587 		{
   1588 		  sreloc = _bfd_elf_get_dynamic_reloc_section
   1589 		    (input_bfd, input_section, /*rela?*/ TRUE);
   1590 		  if (sreloc == NULL)
   1591 		    return FALSE;
   1592 		}
   1593 
   1594 	      skip = FALSE;
   1595 	      relocate = FALSE;
   1596 
   1597 	      outrel.r_offset =
   1598 		_bfd_elf_section_offset (output_bfd, info, input_section,
   1599 					 rel->r_offset);
   1600 	      if (outrel.r_offset == (bfd_vma) -1)
   1601 		skip = TRUE;
   1602 	      if (outrel.r_offset == (bfd_vma) -2)
   1603 		skip = TRUE, relocate = TRUE;
   1604 	      outrel.r_offset += (input_section->output_section->vma
   1605 				  + input_section->output_offset);
   1606 
   1607 	      if (skip)
   1608 		  memset (&outrel, 0, sizeof outrel);
   1609 	      /* h->dynindx may be -1 if the symbol was marked to
   1610                  become local.  */
   1611 	      else if (h != NULL
   1612 		       && ((! info->symbolic && h->dynindx != -1)
   1613 			   || !h->def_regular))
   1614 		{
   1615 		  BFD_ASSERT (h->dynindx != -1);
   1616 		  outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
   1617 		  outrel.r_addend = relocation + rel->r_addend;
   1618 		}
   1619 	      else
   1620 		{
   1621 		  if (r_type == R_VAX_32)
   1622 		    {
   1623 		      relocate = TRUE;
   1624 		      outrel.r_info = ELF32_R_INFO (0, R_VAX_RELATIVE);
   1625 		      BFD_ASSERT (bfd_get_signed_32 (input_bfd,
   1626 						     &contents[rel->r_offset]) == 0);
   1627 		      outrel.r_addend = relocation + rel->r_addend;
   1628 		    }
   1629 		  else
   1630 		    {
   1631 		      long indx;
   1632 
   1633 		      if (bfd_is_abs_section (sec))
   1634 			indx = 0;
   1635 		      else if (sec == NULL || sec->owner == NULL)
   1636 			{
   1637 			  bfd_set_error (bfd_error_bad_value);
   1638 			  return FALSE;
   1639 			}
   1640 		      else
   1641 			{
   1642 			  asection *osec;
   1643 
   1644 			  /* We are turning this relocation into one
   1645 			     against a section symbol.  It would be
   1646 			     proper to subtract the symbol's value,
   1647 			     osec->vma, from the emitted reloc addend,
   1648 			     but ld.so expects buggy relocs.  */
   1649 			  osec = sec->output_section;
   1650 			  indx = elf_section_data (osec)->dynindx;
   1651 			  if (indx == 0)
   1652 			    {
   1653 			      struct elf_link_hash_table *htab;
   1654 			      htab = elf_hash_table (info);
   1655 			      osec = htab->text_index_section;
   1656 			      indx = elf_section_data (osec)->dynindx;
   1657 			    }
   1658 			  BFD_ASSERT (indx != 0);
   1659 			}
   1660 
   1661 		      outrel.r_info = ELF32_R_INFO (indx, r_type);
   1662 		      outrel.r_addend = relocation + rel->r_addend;
   1663 		    }
   1664 		}
   1665 
   1666 	      if ((input_section->flags & SEC_CODE) != 0
   1667 		  || (ELF32_R_TYPE (outrel.r_info) != R_VAX_32
   1668 		      && ELF32_R_TYPE (outrel.r_info) != R_VAX_RELATIVE
   1669 		      && ELF32_R_TYPE (outrel.r_info) != R_VAX_COPY
   1670 		      && ELF32_R_TYPE (outrel.r_info) != R_VAX_JMP_SLOT
   1671 		      && ELF32_R_TYPE (outrel.r_info) != R_VAX_GLOB_DAT))
   1672 		{
   1673 		  if (h != NULL)
   1674 		    (*_bfd_error_handler)
   1675 		      (_("%s: warning: %s relocation against symbol `%s' from %s section"),
   1676 		      bfd_get_filename (input_bfd), howto->name,
   1677 		      h->root.root.string,
   1678 		      bfd_get_section_name (input_bfd, input_section));
   1679 		  else
   1680 		    (*_bfd_error_handler)
   1681 		      (_("%s: warning: %s relocation to 0x%x from %s section"),
   1682 		      bfd_get_filename (input_bfd), howto->name,
   1683 		      outrel.r_addend,
   1684 		      bfd_get_section_name (input_bfd, input_section));
   1685 		}
   1686 	      loc = sreloc->contents;
   1687 	      loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rela);
   1688 	      bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
   1689 
   1690 	      /* This reloc will be computed at runtime, so there's no
   1691                  need to do anything now, except for R_VAX_32
   1692                  relocations that have been turned into
   1693                  R_VAX_RELATIVE.  */
   1694 	      if (!relocate)
   1695 		continue;
   1696 	    }
   1697 
   1698 	  break;
   1699 
   1700 	case R_VAX_GNU_VTINHERIT:
   1701 	case R_VAX_GNU_VTENTRY:
   1702 	  /* These are no-ops in the end.  */
   1703 	  continue;
   1704 
   1705 	default:
   1706 	  break;
   1707 	}
   1708 
   1709       /* VAX PCREL relocations are from the end of relocation, not the start.
   1710          So subtract the difference from the relocation amount since we can't
   1711          add it to the offset.  */
   1712       if (howto->pc_relative && howto->pcrel_offset)
   1713 	relocation -= bfd_get_reloc_size(howto);
   1714 
   1715       r = _bfd_final_link_relocate (howto, input_bfd, input_section,
   1716 				    contents, rel->r_offset,
   1717 				    relocation, rel->r_addend);
   1718 
   1719       if (r != bfd_reloc_ok)
   1720 	{
   1721 	  switch (r)
   1722 	    {
   1723 	    default:
   1724 	    case bfd_reloc_outofrange:
   1725 	      abort ();
   1726 	    case bfd_reloc_overflow:
   1727 	      {
   1728 		const char *name;
   1729 
   1730 		if (h != NULL)
   1731 		  name = NULL;
   1732 		else
   1733 		  {
   1734 		    name = bfd_elf_string_from_elf_section (input_bfd,
   1735 							    symtab_hdr->sh_link,
   1736 							    sym->st_name);
   1737 		    if (name == NULL)
   1738 		      return FALSE;
   1739 		    if (*name == '\0')
   1740 		      name = bfd_section_name (input_bfd, sec);
   1741 		  }
   1742 		info->callbacks->reloc_overflow
   1743 		  (info, (h ? &h->root : NULL), name, howto->name,
   1744 		   (bfd_vma) 0, input_bfd, input_section, rel->r_offset);
   1745 	      }
   1746 	      break;
   1747 	    }
   1748 	}
   1749     }
   1750 
   1751   return TRUE;
   1752 }
   1753 
   1754 /* Finish up dynamic symbol handling.  We set the contents of various
   1755    dynamic sections here.  */
   1756 
   1757 static bfd_boolean
   1758 elf_vax_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
   1759 			       struct elf_link_hash_entry *h,
   1760 			       Elf_Internal_Sym *sym)
   1761 {
   1762   bfd *dynobj;
   1763 
   1764   dynobj = elf_hash_table (info)->dynobj;
   1765 
   1766   if (h->plt.offset != (bfd_vma) -1)
   1767     {
   1768       asection *splt;
   1769       asection *sgot;
   1770       asection *srela;
   1771       bfd_vma plt_index;
   1772       bfd_vma got_offset;
   1773       bfd_vma addend;
   1774       Elf_Internal_Rela rela;
   1775       bfd_byte *loc;
   1776 
   1777       /* This symbol has an entry in the procedure linkage table.  Set
   1778 	 it up.  */
   1779       BFD_ASSERT (h->dynindx != -1);
   1780 
   1781       splt = bfd_get_linker_section (dynobj, ".plt");
   1782       sgot = bfd_get_linker_section (dynobj, ".got.plt");
   1783       srela = bfd_get_linker_section (dynobj, ".rela.plt");
   1784       BFD_ASSERT (splt != NULL && sgot != NULL && srela != NULL);
   1785 
   1786       addend = 2 * (h->plt.offset & 1);
   1787       h->plt.offset &= ~1;
   1788 
   1789       /* Get the index in the procedure linkage table which
   1790 	 corresponds to this symbol.  This is the index of this symbol
   1791 	 in all the symbols for which we are making plt entries.  The
   1792 	 first entry in the procedure linkage table is reserved.  */
   1793       plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1;
   1794 
   1795       /* Get the offset into the .got table of the entry that
   1796 	 corresponds to this function.  Each .got entry is 4 bytes.
   1797 	 The first two are reserved.  */
   1798       got_offset = (plt_index + 3) * 4;
   1799 
   1800       /* Fill in the entry in the procedure linkage table.  */
   1801       memcpy (splt->contents + h->plt.offset, elf_vax_plt_entry,
   1802 	          PLT_ENTRY_SIZE);
   1803 
   1804       /* The offset is relative to the first extension word.  */
   1805       bfd_put_32 (output_bfd,
   1806 		  -(h->plt.offset + 8),
   1807 		  splt->contents + h->plt.offset + 4);
   1808 
   1809       bfd_put_32 (output_bfd, plt_index * sizeof (Elf32_External_Rela),
   1810 		  splt->contents + h->plt.offset + 8);
   1811 
   1812       /* Fill in the entry in the global offset table.  */
   1813       bfd_put_32 (output_bfd,
   1814 		  (splt->output_section->vma
   1815 		   + splt->output_offset
   1816 		   + h->plt.offset) + addend,
   1817 		  sgot->contents + got_offset);
   1818 
   1819       /* Fill in the entry in the .rela.plt section.  */
   1820       rela.r_offset = (sgot->output_section->vma
   1821 		       + sgot->output_offset
   1822 		       + got_offset);
   1823       rela.r_info = ELF32_R_INFO (h->dynindx, R_VAX_JMP_SLOT);
   1824       rela.r_addend = addend;
   1825       loc = srela->contents + plt_index * sizeof (Elf32_External_Rela);
   1826       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
   1827 
   1828       if (!h->def_regular)
   1829 	{
   1830 	  /* Mark the symbol as undefined, rather than as defined in
   1831 	     the .plt section.  Leave the value alone.  */
   1832 	  sym->st_shndx = SHN_UNDEF;
   1833 	}
   1834     }
   1835 
   1836   if (h->got.offset != (bfd_vma) -1)
   1837     {
   1838       asection *sgot;
   1839       asection *srela;
   1840       Elf_Internal_Rela rela;
   1841       bfd_byte *loc;
   1842 
   1843       /* This symbol has an entry in the global offset table.  Set it
   1844 	 up.  */
   1845       sgot = bfd_get_linker_section (dynobj, ".got");
   1846       srela = bfd_get_linker_section (dynobj, ".rela.got");
   1847       BFD_ASSERT (sgot != NULL && srela != NULL);
   1848 
   1849       rela.r_offset = (sgot->output_section->vma
   1850 		       + sgot->output_offset
   1851 		       + h->got.offset);
   1852       rela.r_info = ELF32_R_INFO (h->dynindx, R_VAX_GLOB_DAT);
   1853       rela.r_addend = bfd_get_signed_32 (output_bfd,
   1854 					 sgot->contents + h->got.offset);
   1855 
   1856       loc = srela->contents;
   1857       loc += srela->reloc_count++ * sizeof (Elf32_External_Rela);
   1858       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
   1859     }
   1860 
   1861   if (h->needs_copy)
   1862     {
   1863       asection *s;
   1864       Elf_Internal_Rela rela;
   1865       bfd_byte *loc;
   1866 
   1867       /* This symbol needs a copy reloc.  Set it up.  */
   1868       BFD_ASSERT (h->dynindx != -1
   1869 		  && (h->root.type == bfd_link_hash_defined
   1870 		      || h->root.type == bfd_link_hash_defweak));
   1871 
   1872       s = bfd_get_linker_section (dynobj, ".rela.bss");
   1873       BFD_ASSERT (s != NULL);
   1874 
   1875       rela.r_offset = (h->root.u.def.value
   1876 		       + h->root.u.def.section->output_section->vma
   1877 		       + h->root.u.def.section->output_offset);
   1878       rela.r_info = ELF32_R_INFO (h->dynindx, R_VAX_COPY);
   1879       rela.r_addend = 0;
   1880       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
   1881       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
   1882     }
   1883 
   1884   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
   1885   if (h == elf_hash_table (info)->hdynamic
   1886       || h == elf_hash_table (info)->hgot)
   1887     sym->st_shndx = SHN_ABS;
   1888 
   1889   return TRUE;
   1890 }
   1891 
   1892 /* Finish up the dynamic sections.  */
   1893 
   1894 static bfd_boolean
   1895 elf_vax_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
   1896 {
   1897   bfd *dynobj;
   1898   asection *sgot;
   1899   asection *sdyn;
   1900 
   1901   dynobj = elf_hash_table (info)->dynobj;
   1902 
   1903   sgot = bfd_get_linker_section (dynobj, ".got.plt");
   1904   BFD_ASSERT (sgot != NULL);
   1905   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
   1906 
   1907   if (elf_hash_table (info)->dynamic_sections_created)
   1908     {
   1909       asection *splt;
   1910       Elf32_External_Dyn *dyncon, *dynconend;
   1911 
   1912       splt = bfd_get_linker_section (dynobj, ".plt");
   1913       BFD_ASSERT (splt != NULL && sdyn != NULL);
   1914 
   1915       dyncon = (Elf32_External_Dyn *) sdyn->contents;
   1916       dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
   1917       for (; dyncon < dynconend; dyncon++)
   1918 	{
   1919 	  Elf_Internal_Dyn dyn;
   1920 	  const char *name;
   1921 	  asection *s;
   1922 
   1923 	  bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
   1924 
   1925 	  switch (dyn.d_tag)
   1926 	    {
   1927 	    default:
   1928 	      break;
   1929 
   1930 	    case DT_PLTGOT:
   1931 	      name = ".got.plt";
   1932 	      goto get_vma;
   1933 	    case DT_JMPREL:
   1934 	      name = ".rela.plt";
   1935 	    get_vma:
   1936 	      s = bfd_get_linker_section (dynobj, name);
   1937 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
   1938 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
   1939 	      break;
   1940 
   1941 	    case DT_PLTRELSZ:
   1942 	      s = bfd_get_linker_section (dynobj, ".rela.plt");
   1943 	      dyn.d_un.d_val = s->size;
   1944 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
   1945 	      break;
   1946 
   1947 	    case DT_RELASZ:
   1948 	      /* The procedure linkage table relocs (DT_JMPREL) should
   1949 		 not be included in the overall relocs (DT_RELA).
   1950 		 Therefore, we override the DT_RELASZ entry here to
   1951 		 make it not include the JMPREL relocs.  Since the
   1952 		 linker script arranges for .rela.plt to follow all
   1953 		 other relocation sections, we don't have to worry
   1954 		 about changing the DT_RELA entry.  */
   1955 	      s = bfd_get_linker_section (dynobj, ".rela.plt");
   1956 	      if (s != NULL)
   1957 		dyn.d_un.d_val -= s->size;
   1958 	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
   1959 	      break;
   1960 	    }
   1961 	}
   1962 
   1963       /* Fill in the first entry in the procedure linkage table.  */
   1964       if (splt->size > 0)
   1965 	{
   1966 	  memcpy (splt->contents, elf_vax_plt0_entry, PLT_ENTRY_SIZE);
   1967 	  bfd_put_32 (output_bfd,
   1968 		          (sgot->output_section->vma
   1969 		           + sgot->output_offset + 4
   1970 		           - (splt->output_section->vma + 6)),
   1971 		          splt->contents + 2);
   1972 	  bfd_put_32 (output_bfd,
   1973 		          (sgot->output_section->vma
   1974 		           + sgot->output_offset + 8
   1975 		           - (splt->output_section->vma + 12)),
   1976 		          splt->contents + 8);
   1977           elf_section_data (splt->output_section)->this_hdr.sh_entsize
   1978            = PLT_ENTRY_SIZE;
   1979 	}
   1980     }
   1981 
   1982   /* Fill in the first three entries in the global offset table.  */
   1983   if (sgot->size > 0)
   1984     {
   1985       if (sdyn == NULL)
   1986 	bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents);
   1987       else
   1988 	bfd_put_32 (output_bfd,
   1989 		    sdyn->output_section->vma + sdyn->output_offset,
   1990 		    sgot->contents);
   1991       bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 4);
   1992       bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 8);
   1993     }
   1994 
   1995   if (elf_section_data (sgot->output_section) != NULL)
   1996     elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
   1997 
   1998   return TRUE;
   1999 }
   2000 
   2001 static enum elf_reloc_type_class
   2002 elf_vax_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
   2003 			  const asection *rel_sec ATTRIBUTE_UNUSED,
   2004 			  const Elf_Internal_Rela *rela)
   2005 {
   2006   switch ((int) ELF32_R_TYPE (rela->r_info))
   2007     {
   2008     case R_VAX_RELATIVE:
   2009       return reloc_class_relative;
   2010     case R_VAX_JMP_SLOT:
   2011       return reloc_class_plt;
   2012     case R_VAX_COPY:
   2013       return reloc_class_copy;
   2014     default:
   2015       return reloc_class_normal;
   2016     }
   2017 }
   2018 
   2019 static bfd_vma
   2020 elf_vax_plt_sym_val (bfd_vma i, const asection *plt,
   2021 		     const arelent *rel ATTRIBUTE_UNUSED)
   2022 {
   2023   return plt->vma + (i + 1) * PLT_ENTRY_SIZE;
   2024 }
   2025 
   2026 #define TARGET_LITTLE_SYM		vax_elf32_vec
   2027 #define TARGET_LITTLE_NAME		"elf32-vax"
   2028 #define ELF_MACHINE_CODE		EM_VAX
   2029 #define ELF_MAXPAGESIZE			0x1000
   2030 
   2031 #define elf_backend_create_dynamic_sections \
   2032 					_bfd_elf_create_dynamic_sections
   2033 #define bfd_elf32_bfd_link_hash_table_create \
   2034 					elf_vax_link_hash_table_create
   2035 #define bfd_elf32_bfd_final_link	bfd_elf_gc_common_final_link
   2036 
   2037 #define elf_backend_check_relocs	elf_vax_check_relocs
   2038 #define elf_backend_adjust_dynamic_symbol \
   2039 					elf_vax_adjust_dynamic_symbol
   2040 #define elf_backend_always_size_sections \
   2041 					elf_vax_always_size_sections
   2042 #define elf_backend_size_dynamic_sections \
   2043 					elf_vax_size_dynamic_sections
   2044 #define elf_backend_init_index_section	_bfd_elf_init_1_index_section
   2045 #define elf_backend_relocate_section	elf_vax_relocate_section
   2046 #define elf_backend_finish_dynamic_symbol \
   2047 					elf_vax_finish_dynamic_symbol
   2048 #define elf_backend_finish_dynamic_sections \
   2049 					elf_vax_finish_dynamic_sections
   2050 #define elf_backend_reloc_type_class	elf_vax_reloc_type_class
   2051 #define elf_backend_gc_mark_hook	elf_vax_gc_mark_hook
   2052 #define elf_backend_gc_sweep_hook	elf_vax_gc_sweep_hook
   2053 #define elf_backend_plt_sym_val		elf_vax_plt_sym_val
   2054 #define bfd_elf32_bfd_merge_private_bfd_data \
   2055                                         elf32_vax_merge_private_bfd_data
   2056 #define bfd_elf32_bfd_set_private_flags \
   2057                                         elf32_vax_set_private_flags
   2058 #define bfd_elf32_bfd_print_private_bfd_data \
   2059                                         elf32_vax_print_private_bfd_data
   2060 
   2061 #define elf_backend_can_gc_sections	1
   2062 #define elf_backend_want_got_plt	1
   2063 #define elf_backend_plt_readonly	1
   2064 #define elf_backend_want_plt_sym	0
   2065 #define elf_backend_got_header_size	16
   2066 #define elf_backend_rela_normal		1
   2067 
   2068 #include "elf32-target.h"
   2069