Home | History | Annotate | Line # | Download | only in bfd
elf32-hppa.c revision 1.12
      1 /* BFD back-end for HP PA-RISC ELF files.
      2    Copyright (C) 1990-2018 Free Software Foundation, Inc.
      3 
      4    Original code by
      5 	Center for Software Science
      6 	Department of Computer Science
      7 	University of Utah
      8    Largely rewritten by Alan Modra <alan (at) linuxcare.com.au>
      9    Naming cleanup by Carlos O'Donell <carlos (at) systemhalted.org>
     10    TLS support written by Randolph Chung <tausq (at) debian.org>
     11 
     12    This file is part of BFD, the Binary File Descriptor library.
     13 
     14    This program is free software; you can redistribute it and/or modify
     15    it under the terms of the GNU General Public License as published by
     16    the Free Software Foundation; either version 3 of the License, or
     17    (at your option) any later version.
     18 
     19    This program is distributed in the hope that it will be useful,
     20    but WITHOUT ANY WARRANTY; without even the implied warranty of
     21    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     22    GNU General Public License for more details.
     23 
     24    You should have received a copy of the GNU General Public License
     25    along with this program; if not, write to the Free Software
     26    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     27    MA 02110-1301, USA.  */
     28 
     29 #include "sysdep.h"
     30 #include "bfd.h"
     31 #include "libbfd.h"
     32 #include "elf-bfd.h"
     33 #include "elf/hppa.h"
     34 #include "libhppa.h"
     35 #include "elf32-hppa.h"
     36 #define ARCH_SIZE		32
     37 #include "elf32-hppa.h"
     38 #include "elf-hppa.h"
     39 
     40 /* In order to gain some understanding of code in this file without
     41    knowing all the intricate details of the linker, note the
     42    following:
     43 
     44    Functions named elf32_hppa_* are called by external routines, other
     45    functions are only called locally.  elf32_hppa_* functions appear
     46    in this file more or less in the order in which they are called
     47    from external routines.  eg. elf32_hppa_check_relocs is called
     48    early in the link process, elf32_hppa_finish_dynamic_sections is
     49    one of the last functions.  */
     50 
     51 /* We use two hash tables to hold information for linking PA ELF objects.
     52 
     53    The first is the elf32_hppa_link_hash_table which is derived
     54    from the standard ELF linker hash table.  We use this as a place to
     55    attach other hash tables and static information.
     56 
     57    The second is the stub hash table which is derived from the
     58    base BFD hash table.  The stub hash table holds the information
     59    necessary to build the linker stubs during a link.
     60 
     61    There are a number of different stubs generated by the linker.
     62 
     63    Long branch stub:
     64    :		ldil LR'X,%r1
     65    :		be,n RR'X(%sr4,%r1)
     66 
     67    PIC long branch stub:
     68    :		b,l .+8,%r1
     69    :		addil LR'X - ($PIC_pcrel$0 - 4),%r1
     70    :		be,n RR'X - ($PIC_pcrel$0 - 8)(%sr4,%r1)
     71 
     72    Import stub to call shared library routine from normal object file
     73    (single sub-space version)
     74    :		addil LR'lt_ptr+ltoff,%dp	; get procedure entry point
     75    :		ldw RR'lt_ptr+ltoff(%r1),%r21
     76    :		bv %r0(%r21)
     77    :		ldw RR'lt_ptr+ltoff+4(%r1),%r19	; get new dlt value.
     78 
     79    Import stub to call shared library routine from shared library
     80    (single sub-space version)
     81    :		addil LR'ltoff,%r19		; get procedure entry point
     82    :		ldw RR'ltoff(%r1),%r21
     83    :		bv %r0(%r21)
     84    :		ldw RR'ltoff+4(%r1),%r19	; get new dlt value.
     85 
     86    Import stub to call shared library routine from normal object file
     87    (multiple sub-space support)
     88    :		addil LR'lt_ptr+ltoff,%dp	; get procedure entry point
     89    :		ldw RR'lt_ptr+ltoff(%r1),%r21
     90    :		ldw RR'lt_ptr+ltoff+4(%r1),%r19	; get new dlt value.
     91    :		ldsid (%r21),%r1
     92    :		mtsp %r1,%sr0
     93    :		be 0(%sr0,%r21)			; branch to target
     94    :		stw %rp,-24(%sp)		; save rp
     95 
     96    Import stub to call shared library routine from shared library
     97    (multiple sub-space support)
     98    :		addil LR'ltoff,%r19		; get procedure entry point
     99    :		ldw RR'ltoff(%r1),%r21
    100    :		ldw RR'ltoff+4(%r1),%r19	; get new dlt value.
    101    :		ldsid (%r21),%r1
    102    :		mtsp %r1,%sr0
    103    :		be 0(%sr0,%r21)			; branch to target
    104    :		stw %rp,-24(%sp)		; save rp
    105 
    106    Export stub to return from shared lib routine (multiple sub-space support)
    107    One of these is created for each exported procedure in a shared
    108    library (and stored in the shared lib).  Shared lib routines are
    109    called via the first instruction in the export stub so that we can
    110    do an inter-space return.  Not required for single sub-space.
    111    :		bl,n X,%rp			; trap the return
    112    :		nop
    113    :		ldw -24(%sp),%rp		; restore the original rp
    114    :		ldsid (%rp),%r1
    115    :		mtsp %r1,%sr0
    116    :		be,n 0(%sr0,%rp)		; inter-space return.  */
    117 
    118 
    119 /* Variable names follow a coding style.
    120    Please follow this (Apps Hungarian) style:
    121 
    122    Structure/Variable			Prefix
    123    elf_link_hash_table			"etab"
    124    elf_link_hash_entry			"eh"
    125 
    126    elf32_hppa_link_hash_table		"htab"
    127    elf32_hppa_link_hash_entry		"hh"
    128 
    129    bfd_hash_table			"btab"
    130    bfd_hash_entry			"bh"
    131 
    132    bfd_hash_table containing stubs	"bstab"
    133    elf32_hppa_stub_hash_entry		"hsh"
    134 
    135    Always remember to use GNU Coding Style. */
    136 
    137 #define PLT_ENTRY_SIZE 8
    138 #define GOT_ENTRY_SIZE 4
    139 #define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1"
    140 
    141 static const bfd_byte plt_stub[] =
    142 {
    143   0x0e, 0x80, 0x10, 0x96,  /* 1: ldw	0(%r20),%r22		*/
    144   0xea, 0xc0, 0xc0, 0x00,  /*    bv	%r0(%r22)		*/
    145   0x0e, 0x88, 0x10, 0x95,  /*    ldw	4(%r20),%r21		*/
    146 #define PLT_STUB_ENTRY (3*4)
    147   0xea, 0x9f, 0x1f, 0xdd,  /*    b,l	1b,%r20			*/
    148   0xd6, 0x80, 0x1c, 0x1e,  /*    depi	0,31,2,%r20		*/
    149   0x00, 0xc0, 0xff, 0xee,  /* 9: .word	fixup_func		*/
    150   0xde, 0xad, 0xbe, 0xef   /*    .word	fixup_ltp		*/
    151 };
    152 
    153 /* Section name for stubs is the associated section name plus this
    154    string.  */
    155 #define STUB_SUFFIX ".stub"
    156 
    157 /* We don't need to copy certain PC- or GP-relative dynamic relocs
    158    into a shared object's dynamic section.  All the relocs of the
    159    limited class we are interested in, are absolute.  */
    160 #ifndef RELATIVE_DYNRELOCS
    161 #define RELATIVE_DYNRELOCS 0
    162 #define IS_ABSOLUTE_RELOC(r_type) 1
    163 #define pc_dynrelocs(hh) 0
    164 #endif
    165 
    166 /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
    167    copying dynamic variables from a shared lib into an app's dynbss
    168    section, and instead use a dynamic relocation to point into the
    169    shared lib.  */
    170 #define ELIMINATE_COPY_RELOCS 1
    171 
    172 enum elf32_hppa_stub_type
    173 {
    174   hppa_stub_long_branch,
    175   hppa_stub_long_branch_shared,
    176   hppa_stub_import,
    177   hppa_stub_import_shared,
    178   hppa_stub_export,
    179   hppa_stub_none
    180 };
    181 
    182 struct elf32_hppa_stub_hash_entry
    183 {
    184   /* Base hash table entry structure.  */
    185   struct bfd_hash_entry bh_root;
    186 
    187   /* The stub section.  */
    188   asection *stub_sec;
    189 
    190   /* Offset within stub_sec of the beginning of this stub.  */
    191   bfd_vma stub_offset;
    192 
    193   /* Given the symbol's value and its section we can determine its final
    194      value when building the stubs (so the stub knows where to jump.  */
    195   bfd_vma target_value;
    196   asection *target_section;
    197 
    198   enum elf32_hppa_stub_type stub_type;
    199 
    200   /* The symbol table entry, if any, that this was derived from.  */
    201   struct elf32_hppa_link_hash_entry *hh;
    202 
    203   /* Where this stub is being called from, or, in the case of combined
    204      stub sections, the first input section in the group.  */
    205   asection *id_sec;
    206 };
    207 
    208 enum _tls_type
    209   {
    210     GOT_UNKNOWN = 0,
    211     GOT_NORMAL = 1,
    212     GOT_TLS_GD = 2,
    213     GOT_TLS_LDM = 4,
    214     GOT_TLS_IE = 8
    215   };
    216 
    217 struct elf32_hppa_link_hash_entry
    218 {
    219   struct elf_link_hash_entry eh;
    220 
    221   /* A pointer to the most recently used stub hash entry against this
    222      symbol.  */
    223   struct elf32_hppa_stub_hash_entry *hsh_cache;
    224 
    225   /* Used to count relocations for delayed sizing of relocation
    226      sections.  */
    227   struct elf_dyn_relocs *dyn_relocs;
    228 
    229   ENUM_BITFIELD (_tls_type) tls_type : 8;
    230 
    231   /* Set if this symbol is used by a plabel reloc.  */
    232   unsigned int plabel:1;
    233 };
    234 
    235 struct elf32_hppa_link_hash_table
    236 {
    237   /* The main hash table.  */
    238   struct elf_link_hash_table etab;
    239 
    240   /* The stub hash table.  */
    241   struct bfd_hash_table bstab;
    242 
    243   /* Linker stub bfd.  */
    244   bfd *stub_bfd;
    245 
    246   /* Linker call-backs.  */
    247   asection * (*add_stub_section) (const char *, asection *);
    248   void (*layout_sections_again) (void);
    249 
    250   /* Array to keep track of which stub sections have been created, and
    251      information on stub grouping.  */
    252   struct map_stub
    253   {
    254     /* This is the section to which stubs in the group will be
    255        attached.  */
    256     asection *link_sec;
    257     /* The stub section.  */
    258     asection *stub_sec;
    259   } *stub_group;
    260 
    261   /* Assorted information used by elf32_hppa_size_stubs.  */
    262   unsigned int bfd_count;
    263   unsigned int top_index;
    264   asection **input_list;
    265   Elf_Internal_Sym **all_local_syms;
    266 
    267   /* Used during a final link to store the base of the text and data
    268      segments so that we can perform SEGREL relocations.  */
    269   bfd_vma text_segment_base;
    270   bfd_vma data_segment_base;
    271 
    272   /* Whether we support multiple sub-spaces for shared libs.  */
    273   unsigned int multi_subspace:1;
    274 
    275   /* Flags set when various size branches are detected.  Used to
    276      select suitable defaults for the stub group size.  */
    277   unsigned int has_12bit_branch:1;
    278   unsigned int has_17bit_branch:1;
    279   unsigned int has_22bit_branch:1;
    280 
    281   /* Set if we need a .plt stub to support lazy dynamic linking.  */
    282   unsigned int need_plt_stub:1;
    283 
    284   /* Small local sym cache.  */
    285   struct sym_cache sym_cache;
    286 
    287   /* Data for LDM relocations.  */
    288   union
    289   {
    290     bfd_signed_vma refcount;
    291     bfd_vma offset;
    292   } tls_ldm_got;
    293 };
    294 
    295 /* Various hash macros and functions.  */
    296 #define hppa_link_hash_table(p) \
    297   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
    298   == HPPA32_ELF_DATA ? ((struct elf32_hppa_link_hash_table *) ((p)->hash)) : NULL)
    299 
    300 #define hppa_elf_hash_entry(ent) \
    301   ((struct elf32_hppa_link_hash_entry *)(ent))
    302 
    303 #define hppa_stub_hash_entry(ent) \
    304   ((struct elf32_hppa_stub_hash_entry *)(ent))
    305 
    306 #define hppa_stub_hash_lookup(table, string, create, copy) \
    307   ((struct elf32_hppa_stub_hash_entry *) \
    308    bfd_hash_lookup ((table), (string), (create), (copy)))
    309 
    310 #define hppa_elf_local_got_tls_type(abfd) \
    311   ((char *)(elf_local_got_offsets (abfd) + (elf_tdata (abfd)->symtab_hdr.sh_info * 2)))
    312 
    313 #define hh_name(hh) \
    314   (hh ? hh->eh.root.root.string : "<undef>")
    315 
    316 #define eh_name(eh) \
    317   (eh ? eh->root.root.string : "<undef>")
    318 
    319 /* Assorted hash table functions.  */
    320 
    321 /* Initialize an entry in the stub hash table.  */
    322 
    323 static struct bfd_hash_entry *
    324 stub_hash_newfunc (struct bfd_hash_entry *entry,
    325 		   struct bfd_hash_table *table,
    326 		   const char *string)
    327 {
    328   /* Allocate the structure if it has not already been allocated by a
    329      subclass.  */
    330   if (entry == NULL)
    331     {
    332       entry = bfd_hash_allocate (table,
    333 				 sizeof (struct elf32_hppa_stub_hash_entry));
    334       if (entry == NULL)
    335 	return entry;
    336     }
    337 
    338   /* Call the allocation method of the superclass.  */
    339   entry = bfd_hash_newfunc (entry, table, string);
    340   if (entry != NULL)
    341     {
    342       struct elf32_hppa_stub_hash_entry *hsh;
    343 
    344       /* Initialize the local fields.  */
    345       hsh = hppa_stub_hash_entry (entry);
    346       hsh->stub_sec = NULL;
    347       hsh->stub_offset = 0;
    348       hsh->target_value = 0;
    349       hsh->target_section = NULL;
    350       hsh->stub_type = hppa_stub_long_branch;
    351       hsh->hh = NULL;
    352       hsh->id_sec = NULL;
    353     }
    354 
    355   return entry;
    356 }
    357 
    358 /* Initialize an entry in the link hash table.  */
    359 
    360 static struct bfd_hash_entry *
    361 hppa_link_hash_newfunc (struct bfd_hash_entry *entry,
    362 			struct bfd_hash_table *table,
    363 			const char *string)
    364 {
    365   /* Allocate the structure if it has not already been allocated by a
    366      subclass.  */
    367   if (entry == NULL)
    368     {
    369       entry = bfd_hash_allocate (table,
    370 				 sizeof (struct elf32_hppa_link_hash_entry));
    371       if (entry == NULL)
    372 	return entry;
    373     }
    374 
    375   /* Call the allocation method of the superclass.  */
    376   entry = _bfd_elf_link_hash_newfunc (entry, table, string);
    377   if (entry != NULL)
    378     {
    379       struct elf32_hppa_link_hash_entry *hh;
    380 
    381       /* Initialize the local fields.  */
    382       hh = hppa_elf_hash_entry (entry);
    383       hh->hsh_cache = NULL;
    384       hh->dyn_relocs = NULL;
    385       hh->plabel = 0;
    386       hh->tls_type = GOT_UNKNOWN;
    387     }
    388 
    389   return entry;
    390 }
    391 
    392 /* Free the derived linker hash table.  */
    393 
    394 static void
    395 elf32_hppa_link_hash_table_free (bfd *obfd)
    396 {
    397   struct elf32_hppa_link_hash_table *htab
    398     = (struct elf32_hppa_link_hash_table *) obfd->link.hash;
    399 
    400   bfd_hash_table_free (&htab->bstab);
    401   _bfd_elf_link_hash_table_free (obfd);
    402 }
    403 
    404 /* Create the derived linker hash table.  The PA ELF port uses the derived
    405    hash table to keep information specific to the PA ELF linker (without
    406    using static variables).  */
    407 
    408 static struct bfd_link_hash_table *
    409 elf32_hppa_link_hash_table_create (bfd *abfd)
    410 {
    411   struct elf32_hppa_link_hash_table *htab;
    412   bfd_size_type amt = sizeof (*htab);
    413 
    414   htab = bfd_zmalloc (amt);
    415   if (htab == NULL)
    416     return NULL;
    417 
    418   if (!_bfd_elf_link_hash_table_init (&htab->etab, abfd, hppa_link_hash_newfunc,
    419 				      sizeof (struct elf32_hppa_link_hash_entry),
    420 				      HPPA32_ELF_DATA))
    421     {
    422       free (htab);
    423       return NULL;
    424     }
    425 
    426   /* Init the stub hash table too.  */
    427   if (!bfd_hash_table_init (&htab->bstab, stub_hash_newfunc,
    428 			    sizeof (struct elf32_hppa_stub_hash_entry)))
    429     {
    430       _bfd_elf_link_hash_table_free (abfd);
    431       return NULL;
    432     }
    433   htab->etab.root.hash_table_free = elf32_hppa_link_hash_table_free;
    434 
    435   htab->text_segment_base = (bfd_vma) -1;
    436   htab->data_segment_base = (bfd_vma) -1;
    437   return &htab->etab.root;
    438 }
    439 
    440 /* Initialize the linker stubs BFD so that we can use it for linker
    441    created dynamic sections.  */
    442 
    443 void
    444 elf32_hppa_init_stub_bfd (bfd *abfd, struct bfd_link_info *info)
    445 {
    446   struct elf32_hppa_link_hash_table *htab = hppa_link_hash_table (info);
    447 
    448   elf_elfheader (abfd)->e_ident[EI_CLASS] = ELFCLASS32;
    449   htab->etab.dynobj = abfd;
    450 }
    451 
    452 /* Build a name for an entry in the stub hash table.  */
    453 
    454 static char *
    455 hppa_stub_name (const asection *input_section,
    456 		const asection *sym_sec,
    457 		const struct elf32_hppa_link_hash_entry *hh,
    458 		const Elf_Internal_Rela *rela)
    459 {
    460   char *stub_name;
    461   bfd_size_type len;
    462 
    463   if (hh)
    464     {
    465       len = 8 + 1 + strlen (hh_name (hh)) + 1 + 8 + 1;
    466       stub_name = bfd_malloc (len);
    467       if (stub_name != NULL)
    468 	sprintf (stub_name, "%08x_%s+%x",
    469 		 input_section->id & 0xffffffff,
    470 		 hh_name (hh),
    471 		 (int) rela->r_addend & 0xffffffff);
    472     }
    473   else
    474     {
    475       len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
    476       stub_name = bfd_malloc (len);
    477       if (stub_name != NULL)
    478 	sprintf (stub_name, "%08x_%x:%x+%x",
    479 		 input_section->id & 0xffffffff,
    480 		 sym_sec->id & 0xffffffff,
    481 		 (int) ELF32_R_SYM (rela->r_info) & 0xffffffff,
    482 		 (int) rela->r_addend & 0xffffffff);
    483     }
    484   return stub_name;
    485 }
    486 
    487 /* Look up an entry in the stub hash.  Stub entries are cached because
    488    creating the stub name takes a bit of time.  */
    489 
    490 static struct elf32_hppa_stub_hash_entry *
    491 hppa_get_stub_entry (const asection *input_section,
    492 		     const asection *sym_sec,
    493 		     struct elf32_hppa_link_hash_entry *hh,
    494 		     const Elf_Internal_Rela *rela,
    495 		     struct elf32_hppa_link_hash_table *htab)
    496 {
    497   struct elf32_hppa_stub_hash_entry *hsh_entry;
    498   const asection *id_sec;
    499 
    500   /* If this input section is part of a group of sections sharing one
    501      stub section, then use the id of the first section in the group.
    502      Stub names need to include a section id, as there may well be
    503      more than one stub used to reach say, printf, and we need to
    504      distinguish between them.  */
    505   id_sec = htab->stub_group[input_section->id].link_sec;
    506   if (id_sec == NULL)
    507     return NULL;
    508 
    509   if (hh != NULL && hh->hsh_cache != NULL
    510       && hh->hsh_cache->hh == hh
    511       && hh->hsh_cache->id_sec == id_sec)
    512     {
    513       hsh_entry = hh->hsh_cache;
    514     }
    515   else
    516     {
    517       char *stub_name;
    518 
    519       stub_name = hppa_stub_name (id_sec, sym_sec, hh, rela);
    520       if (stub_name == NULL)
    521 	return NULL;
    522 
    523       hsh_entry = hppa_stub_hash_lookup (&htab->bstab,
    524 					  stub_name, FALSE, FALSE);
    525       if (hh != NULL)
    526 	hh->hsh_cache = hsh_entry;
    527 
    528       free (stub_name);
    529     }
    530 
    531   return hsh_entry;
    532 }
    533 
    534 /* Add a new stub entry to the stub hash.  Not all fields of the new
    535    stub entry are initialised.  */
    536 
    537 static struct elf32_hppa_stub_hash_entry *
    538 hppa_add_stub (const char *stub_name,
    539 	       asection *section,
    540 	       struct elf32_hppa_link_hash_table *htab)
    541 {
    542   asection *link_sec;
    543   asection *stub_sec;
    544   struct elf32_hppa_stub_hash_entry *hsh;
    545 
    546   link_sec = htab->stub_group[section->id].link_sec;
    547   stub_sec = htab->stub_group[section->id].stub_sec;
    548   if (stub_sec == NULL)
    549     {
    550       stub_sec = htab->stub_group[link_sec->id].stub_sec;
    551       if (stub_sec == NULL)
    552 	{
    553 	  size_t namelen;
    554 	  bfd_size_type len;
    555 	  char *s_name;
    556 
    557 	  namelen = strlen (link_sec->name);
    558 	  len = namelen + sizeof (STUB_SUFFIX);
    559 	  s_name = bfd_alloc (htab->stub_bfd, len);
    560 	  if (s_name == NULL)
    561 	    return NULL;
    562 
    563 	  memcpy (s_name, link_sec->name, namelen);
    564 	  memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
    565 	  stub_sec = (*htab->add_stub_section) (s_name, link_sec);
    566 	  if (stub_sec == NULL)
    567 	    return NULL;
    568 	  htab->stub_group[link_sec->id].stub_sec = stub_sec;
    569 	}
    570       htab->stub_group[section->id].stub_sec = stub_sec;
    571     }
    572 
    573   /* Enter this entry into the linker stub hash table.  */
    574   hsh = hppa_stub_hash_lookup (&htab->bstab, stub_name,
    575 				      TRUE, FALSE);
    576   if (hsh == NULL)
    577     {
    578       /* xgettext:c-format */
    579       _bfd_error_handler (_("%pB: cannot create stub entry %s"),
    580 			  section->owner, stub_name);
    581       return NULL;
    582     }
    583 
    584   hsh->stub_sec = stub_sec;
    585   hsh->stub_offset = 0;
    586   hsh->id_sec = link_sec;
    587   return hsh;
    588 }
    589 
    590 /* Determine the type of stub needed, if any, for a call.  */
    591 
    592 static enum elf32_hppa_stub_type
    593 hppa_type_of_stub (asection *input_sec,
    594 		   const Elf_Internal_Rela *rela,
    595 		   struct elf32_hppa_link_hash_entry *hh,
    596 		   bfd_vma destination,
    597 		   struct bfd_link_info *info)
    598 {
    599   bfd_vma location;
    600   bfd_vma branch_offset;
    601   bfd_vma max_branch_offset;
    602   unsigned int r_type;
    603 
    604   if (hh != NULL
    605       && hh->eh.plt.offset != (bfd_vma) -1
    606       && hh->eh.dynindx != -1
    607       && !hh->plabel
    608       && (bfd_link_pic (info)
    609 	  || !hh->eh.def_regular
    610 	  || hh->eh.root.type == bfd_link_hash_defweak))
    611     {
    612       /* We need an import stub.  Decide between hppa_stub_import
    613 	 and hppa_stub_import_shared later.  */
    614       return hppa_stub_import;
    615     }
    616 
    617   if (destination == (bfd_vma) -1)
    618     return hppa_stub_none;
    619 
    620   /* Determine where the call point is.  */
    621   location = (input_sec->output_offset
    622 	      + input_sec->output_section->vma
    623 	      + rela->r_offset);
    624 
    625   branch_offset = destination - location - 8;
    626   r_type = ELF32_R_TYPE (rela->r_info);
    627 
    628   /* Determine if a long branch stub is needed.  parisc branch offsets
    629      are relative to the second instruction past the branch, ie. +8
    630      bytes on from the branch instruction location.  The offset is
    631      signed and counts in units of 4 bytes.  */
    632   if (r_type == (unsigned int) R_PARISC_PCREL17F)
    633     max_branch_offset = (1 << (17 - 1)) << 2;
    634 
    635   else if (r_type == (unsigned int) R_PARISC_PCREL12F)
    636     max_branch_offset = (1 << (12 - 1)) << 2;
    637 
    638   else /* R_PARISC_PCREL22F.  */
    639     max_branch_offset = (1 << (22 - 1)) << 2;
    640 
    641   if (branch_offset + max_branch_offset >= 2*max_branch_offset)
    642     return hppa_stub_long_branch;
    643 
    644   return hppa_stub_none;
    645 }
    646 
    647 /* Build one linker stub as defined by the stub hash table entry GEN_ENTRY.
    648    IN_ARG contains the link info pointer.  */
    649 
    650 #define LDIL_R1		0x20200000	/* ldil  LR'XXX,%r1		*/
    651 #define BE_SR4_R1	0xe0202002	/* be,n  RR'XXX(%sr4,%r1)	*/
    652 
    653 #define BL_R1		0xe8200000	/* b,l   .+8,%r1		*/
    654 #define ADDIL_R1	0x28200000	/* addil LR'XXX,%r1,%r1		*/
    655 #define DEPI_R1		0xd4201c1e	/* depi  0,31,2,%r1		*/
    656 
    657 #define ADDIL_DP	0x2b600000	/* addil LR'XXX,%dp,%r1		*/
    658 #define LDW_R1_R21	0x48350000	/* ldw   RR'XXX(%sr0,%r1),%r21	*/
    659 #define BV_R0_R21	0xeaa0c000	/* bv    %r0(%r21)		*/
    660 #define LDW_R1_R19	0x48330000	/* ldw   RR'XXX(%sr0,%r1),%r19	*/
    661 
    662 #define ADDIL_R19	0x2a600000	/* addil LR'XXX,%r19,%r1	*/
    663 #define LDW_R1_DP	0x483b0000	/* ldw   RR'XXX(%sr0,%r1),%dp	*/
    664 
    665 #define LDSID_R21_R1	0x02a010a1	/* ldsid (%sr0,%r21),%r1	*/
    666 #define MTSP_R1		0x00011820	/* mtsp  %r1,%sr0		*/
    667 #define BE_SR0_R21	0xe2a00000	/* be    0(%sr0,%r21)		*/
    668 #define STW_RP		0x6bc23fd1	/* stw   %rp,-24(%sr0,%sp)	*/
    669 
    670 #define BL22_RP		0xe800a002	/* b,l,n XXX,%rp		*/
    671 #define BL_RP		0xe8400002	/* b,l,n XXX,%rp		*/
    672 #define NOP		0x08000240	/* nop				*/
    673 #define LDW_RP		0x4bc23fd1	/* ldw   -24(%sr0,%sp),%rp	*/
    674 #define LDSID_RP_R1	0x004010a1	/* ldsid (%sr0,%rp),%r1		*/
    675 #define BE_SR0_RP	0xe0400002	/* be,n  0(%sr0,%rp)		*/
    676 
    677 #ifndef R19_STUBS
    678 #define R19_STUBS 1
    679 #endif
    680 
    681 #if R19_STUBS
    682 #define LDW_R1_DLT	LDW_R1_R19
    683 #else
    684 #define LDW_R1_DLT	LDW_R1_DP
    685 #endif
    686 
    687 static bfd_boolean
    688 hppa_build_one_stub (struct bfd_hash_entry *bh, void *in_arg)
    689 {
    690   struct elf32_hppa_stub_hash_entry *hsh;
    691   struct bfd_link_info *info;
    692   struct elf32_hppa_link_hash_table *htab;
    693   asection *stub_sec;
    694   bfd *stub_bfd;
    695   bfd_byte *loc;
    696   bfd_vma sym_value;
    697   bfd_vma insn;
    698   bfd_vma off;
    699   int val;
    700   int size;
    701 
    702   /* Massage our args to the form they really have.  */
    703   hsh = hppa_stub_hash_entry (bh);
    704   info = (struct bfd_link_info *)in_arg;
    705 
    706   htab = hppa_link_hash_table (info);
    707   if (htab == NULL)
    708     return FALSE;
    709 
    710   stub_sec = hsh->stub_sec;
    711 
    712   /* Make a note of the offset within the stubs for this entry.  */
    713   hsh->stub_offset = stub_sec->size;
    714   loc = stub_sec->contents + hsh->stub_offset;
    715 
    716   stub_bfd = stub_sec->owner;
    717 
    718   switch (hsh->stub_type)
    719     {
    720     case hppa_stub_long_branch:
    721       /* Create the long branch.  A long branch is formed with "ldil"
    722 	 loading the upper bits of the target address into a register,
    723 	 then branching with "be" which adds in the lower bits.
    724 	 The "be" has its delay slot nullified.  */
    725       sym_value = (hsh->target_value
    726 		   + hsh->target_section->output_offset
    727 		   + hsh->target_section->output_section->vma);
    728 
    729       val = hppa_field_adjust (sym_value, 0, e_lrsel);
    730       insn = hppa_rebuild_insn ((int) LDIL_R1, val, 21);
    731       bfd_put_32 (stub_bfd, insn, loc);
    732 
    733       val = hppa_field_adjust (sym_value, 0, e_rrsel) >> 2;
    734       insn = hppa_rebuild_insn ((int) BE_SR4_R1, val, 17);
    735       bfd_put_32 (stub_bfd, insn, loc + 4);
    736 
    737       size = 8;
    738       break;
    739 
    740     case hppa_stub_long_branch_shared:
    741       /* Branches are relative.  This is where we are going to.  */
    742       sym_value = (hsh->target_value
    743 		   + hsh->target_section->output_offset
    744 		   + hsh->target_section->output_section->vma);
    745 
    746       /* And this is where we are coming from, more or less.  */
    747       sym_value -= (hsh->stub_offset
    748 		    + stub_sec->output_offset
    749 		    + stub_sec->output_section->vma);
    750 
    751       bfd_put_32 (stub_bfd, (bfd_vma) BL_R1, loc);
    752       val = hppa_field_adjust (sym_value, (bfd_signed_vma) -8, e_lrsel);
    753       insn = hppa_rebuild_insn ((int) ADDIL_R1, val, 21);
    754       bfd_put_32 (stub_bfd, insn, loc + 4);
    755 
    756       val = hppa_field_adjust (sym_value, (bfd_signed_vma) -8, e_rrsel) >> 2;
    757       insn = hppa_rebuild_insn ((int) BE_SR4_R1, val, 17);
    758       bfd_put_32 (stub_bfd, insn, loc + 8);
    759       size = 12;
    760       break;
    761 
    762     case hppa_stub_import:
    763     case hppa_stub_import_shared:
    764       off = hsh->hh->eh.plt.offset;
    765       if (off >= (bfd_vma) -2)
    766 	abort ();
    767 
    768       off &= ~ (bfd_vma) 1;
    769       sym_value = (off
    770 		   + htab->etab.splt->output_offset
    771 		   + htab->etab.splt->output_section->vma
    772 		   - elf_gp (htab->etab.splt->output_section->owner));
    773 
    774       insn = ADDIL_DP;
    775 #if R19_STUBS
    776       if (hsh->stub_type == hppa_stub_import_shared)
    777 	insn = ADDIL_R19;
    778 #endif
    779       val = hppa_field_adjust (sym_value, 0, e_lrsel),
    780       insn = hppa_rebuild_insn ((int) insn, val, 21);
    781       bfd_put_32 (stub_bfd, insn, loc);
    782 
    783       /* It is critical to use lrsel/rrsel here because we are using
    784 	 two different offsets (+0 and +4) from sym_value.  If we use
    785 	 lsel/rsel then with unfortunate sym_values we will round
    786 	 sym_value+4 up to the next 2k block leading to a mis-match
    787 	 between the lsel and rsel value.  */
    788       val = hppa_field_adjust (sym_value, 0, e_rrsel);
    789       insn = hppa_rebuild_insn ((int) LDW_R1_R21, val, 14);
    790       bfd_put_32 (stub_bfd, insn, loc + 4);
    791 
    792       if (htab->multi_subspace)
    793 	{
    794 	  val = hppa_field_adjust (sym_value, (bfd_signed_vma) 4, e_rrsel);
    795 	  insn = hppa_rebuild_insn ((int) LDW_R1_DLT, val, 14);
    796 	  bfd_put_32 (stub_bfd, insn, loc + 8);
    797 
    798 	  bfd_put_32 (stub_bfd, (bfd_vma) LDSID_R21_R1, loc + 12);
    799 	  bfd_put_32 (stub_bfd, (bfd_vma) MTSP_R1,      loc + 16);
    800 	  bfd_put_32 (stub_bfd, (bfd_vma) BE_SR0_R21,   loc + 20);
    801 	  bfd_put_32 (stub_bfd, (bfd_vma) STW_RP,       loc + 24);
    802 
    803 	  size = 28;
    804 	}
    805       else
    806 	{
    807 	  bfd_put_32 (stub_bfd, (bfd_vma) BV_R0_R21, loc + 8);
    808 	  val = hppa_field_adjust (sym_value, (bfd_signed_vma) 4, e_rrsel);
    809 	  insn = hppa_rebuild_insn ((int) LDW_R1_DLT, val, 14);
    810 	  bfd_put_32 (stub_bfd, insn, loc + 12);
    811 
    812 	  size = 16;
    813 	}
    814 
    815       break;
    816 
    817     case hppa_stub_export:
    818       /* Branches are relative.  This is where we are going to.  */
    819       sym_value = (hsh->target_value
    820 		   + hsh->target_section->output_offset
    821 		   + hsh->target_section->output_section->vma);
    822 
    823       /* And this is where we are coming from.  */
    824       sym_value -= (hsh->stub_offset
    825 		    + stub_sec->output_offset
    826 		    + stub_sec->output_section->vma);
    827 
    828       if (sym_value - 8 + (1 << (17 + 1)) >= (1 << (17 + 2))
    829 	  && (!htab->has_22bit_branch
    830 	      || sym_value - 8 + (1 << (22 + 1)) >= (1 << (22 + 2))))
    831 	{
    832 	  _bfd_error_handler
    833 	    /* xgettext:c-format */
    834 	    (_("%pB(%pA+%#" PRIx64 "): "
    835 	       "cannot reach %s, recompile with -ffunction-sections"),
    836 	     hsh->target_section->owner,
    837 	     stub_sec,
    838 	     (uint64_t) hsh->stub_offset,
    839 	     hsh->bh_root.string);
    840 	  bfd_set_error (bfd_error_bad_value);
    841 	  return FALSE;
    842 	}
    843 
    844       val = hppa_field_adjust (sym_value, (bfd_signed_vma) -8, e_fsel) >> 2;
    845       if (!htab->has_22bit_branch)
    846 	insn = hppa_rebuild_insn ((int) BL_RP, val, 17);
    847       else
    848 	insn = hppa_rebuild_insn ((int) BL22_RP, val, 22);
    849       bfd_put_32 (stub_bfd, insn, loc);
    850 
    851       bfd_put_32 (stub_bfd, (bfd_vma) NOP,	   loc + 4);
    852       bfd_put_32 (stub_bfd, (bfd_vma) LDW_RP,      loc + 8);
    853       bfd_put_32 (stub_bfd, (bfd_vma) LDSID_RP_R1, loc + 12);
    854       bfd_put_32 (stub_bfd, (bfd_vma) MTSP_R1,     loc + 16);
    855       bfd_put_32 (stub_bfd, (bfd_vma) BE_SR0_RP,   loc + 20);
    856 
    857       /* Point the function symbol at the stub.  */
    858       hsh->hh->eh.root.u.def.section = stub_sec;
    859       hsh->hh->eh.root.u.def.value = stub_sec->size;
    860 
    861       size = 24;
    862       break;
    863 
    864     default:
    865       BFD_FAIL ();
    866       return FALSE;
    867     }
    868 
    869   stub_sec->size += size;
    870   return TRUE;
    871 }
    872 
    873 #undef LDIL_R1
    874 #undef BE_SR4_R1
    875 #undef BL_R1
    876 #undef ADDIL_R1
    877 #undef DEPI_R1
    878 #undef LDW_R1_R21
    879 #undef LDW_R1_DLT
    880 #undef LDW_R1_R19
    881 #undef ADDIL_R19
    882 #undef LDW_R1_DP
    883 #undef LDSID_R21_R1
    884 #undef MTSP_R1
    885 #undef BE_SR0_R21
    886 #undef STW_RP
    887 #undef BV_R0_R21
    888 #undef BL_RP
    889 #undef NOP
    890 #undef LDW_RP
    891 #undef LDSID_RP_R1
    892 #undef BE_SR0_RP
    893 
    894 /* As above, but don't actually build the stub.  Just bump offset so
    895    we know stub section sizes.  */
    896 
    897 static bfd_boolean
    898 hppa_size_one_stub (struct bfd_hash_entry *bh, void *in_arg)
    899 {
    900   struct elf32_hppa_stub_hash_entry *hsh;
    901   struct elf32_hppa_link_hash_table *htab;
    902   int size;
    903 
    904   /* Massage our args to the form they really have.  */
    905   hsh = hppa_stub_hash_entry (bh);
    906   htab = in_arg;
    907 
    908   if (hsh->stub_type == hppa_stub_long_branch)
    909     size = 8;
    910   else if (hsh->stub_type == hppa_stub_long_branch_shared)
    911     size = 12;
    912   else if (hsh->stub_type == hppa_stub_export)
    913     size = 24;
    914   else /* hppa_stub_import or hppa_stub_import_shared.  */
    915     {
    916       if (htab->multi_subspace)
    917 	size = 28;
    918       else
    919 	size = 16;
    920     }
    921 
    922   hsh->stub_sec->size += size;
    923   return TRUE;
    924 }
    925 
    926 /* Return nonzero if ABFD represents an HPPA ELF32 file.
    927    Additionally we set the default architecture and machine.  */
    928 
    929 static bfd_boolean
    930 elf32_hppa_object_p (bfd *abfd)
    931 {
    932   Elf_Internal_Ehdr * i_ehdrp;
    933   unsigned int flags;
    934 
    935   i_ehdrp = elf_elfheader (abfd);
    936   if (strcmp (bfd_get_target (abfd), "elf32-hppa-linux") == 0)
    937     {
    938       /* GCC on hppa-linux produces binaries with OSABI=GNU,
    939 	 but the kernel produces corefiles with OSABI=SysV.  */
    940       if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_GNU &&
    941 	  i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_NONE) /* aka SYSV */
    942 	return FALSE;
    943     }
    944   else if (strcmp (bfd_get_target (abfd), "elf32-hppa-netbsd") == 0)
    945     {
    946       /* GCC on hppa-netbsd produces binaries with OSABI=NetBSD,
    947 	 but the kernel produces corefiles with OSABI=SysV.  */
    948       if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_NETBSD &&
    949 	  i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_NONE) /* aka SYSV */
    950 	return FALSE;
    951     }
    952   else
    953     {
    954       if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_HPUX)
    955 	return FALSE;
    956     }
    957 
    958   flags = i_ehdrp->e_flags;
    959   switch (flags & (EF_PARISC_ARCH | EF_PARISC_WIDE))
    960     {
    961     case EFA_PARISC_1_0:
    962       return bfd_default_set_arch_mach (abfd, bfd_arch_hppa, 10);
    963     case EFA_PARISC_1_1:
    964       return bfd_default_set_arch_mach (abfd, bfd_arch_hppa, 11);
    965     case EFA_PARISC_2_0:
    966       return bfd_default_set_arch_mach (abfd, bfd_arch_hppa, 20);
    967     case EFA_PARISC_2_0 | EF_PARISC_WIDE:
    968       return bfd_default_set_arch_mach (abfd, bfd_arch_hppa, 25);
    969     }
    970   return TRUE;
    971 }
    972 
    973 /* Create the .plt and .got sections, and set up our hash table
    974    short-cuts to various dynamic sections.  */
    975 
    976 static bfd_boolean
    977 elf32_hppa_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
    978 {
    979   struct elf32_hppa_link_hash_table *htab;
    980   struct elf_link_hash_entry *eh;
    981 
    982   /* Don't try to create the .plt and .got twice.  */
    983   htab = hppa_link_hash_table (info);
    984   if (htab == NULL)
    985     return FALSE;
    986   if (htab->etab.splt != NULL)
    987     return TRUE;
    988 
    989   /* Call the generic code to do most of the work.  */
    990   if (! _bfd_elf_create_dynamic_sections (abfd, info))
    991     return FALSE;
    992 
    993   /* hppa-linux needs _GLOBAL_OFFSET_TABLE_ to be visible from the main
    994      application, because __canonicalize_funcptr_for_compare needs it.  */
    995   eh = elf_hash_table (info)->hgot;
    996   eh->forced_local = 0;
    997   eh->other = STV_DEFAULT;
    998   return bfd_elf_link_record_dynamic_symbol (info, eh);
    999 }
   1000 
   1001 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
   1002 
   1003 static void
   1004 elf32_hppa_copy_indirect_symbol (struct bfd_link_info *info,
   1005 				 struct elf_link_hash_entry *eh_dir,
   1006 				 struct elf_link_hash_entry *eh_ind)
   1007 {
   1008   struct elf32_hppa_link_hash_entry *hh_dir, *hh_ind;
   1009 
   1010   hh_dir = hppa_elf_hash_entry (eh_dir);
   1011   hh_ind = hppa_elf_hash_entry (eh_ind);
   1012 
   1013   if (hh_ind->dyn_relocs != NULL
   1014       && eh_ind->root.type == bfd_link_hash_indirect)
   1015     {
   1016       if (hh_dir->dyn_relocs != NULL)
   1017 	{
   1018 	  struct elf_dyn_relocs **hdh_pp;
   1019 	  struct elf_dyn_relocs *hdh_p;
   1020 
   1021 	  /* Add reloc counts against the indirect sym to the direct sym
   1022 	     list.  Merge any entries against the same section.  */
   1023 	  for (hdh_pp = &hh_ind->dyn_relocs; (hdh_p = *hdh_pp) != NULL; )
   1024 	    {
   1025 	      struct elf_dyn_relocs *hdh_q;
   1026 
   1027 	      for (hdh_q = hh_dir->dyn_relocs;
   1028 		   hdh_q != NULL;
   1029 		   hdh_q = hdh_q->next)
   1030 		if (hdh_q->sec == hdh_p->sec)
   1031 		  {
   1032 #if RELATIVE_DYNRELOCS
   1033 		    hdh_q->pc_count += hdh_p->pc_count;
   1034 #endif
   1035 		    hdh_q->count += hdh_p->count;
   1036 		    *hdh_pp = hdh_p->next;
   1037 		    break;
   1038 		  }
   1039 	      if (hdh_q == NULL)
   1040 		hdh_pp = &hdh_p->next;
   1041 	    }
   1042 	  *hdh_pp = hh_dir->dyn_relocs;
   1043 	}
   1044 
   1045       hh_dir->dyn_relocs = hh_ind->dyn_relocs;
   1046       hh_ind->dyn_relocs = NULL;
   1047     }
   1048 
   1049   if (eh_ind->root.type == bfd_link_hash_indirect)
   1050     {
   1051       hh_dir->plabel |= hh_ind->plabel;
   1052       hh_dir->tls_type |= hh_ind->tls_type;
   1053       hh_ind->tls_type = GOT_UNKNOWN;
   1054     }
   1055 
   1056   _bfd_elf_link_hash_copy_indirect (info, eh_dir, eh_ind);
   1057 }
   1058 
   1059 static int
   1060 elf32_hppa_optimized_tls_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED,
   1061 				int r_type, int is_local ATTRIBUTE_UNUSED)
   1062 {
   1063   /* For now we don't support linker optimizations.  */
   1064   return r_type;
   1065 }
   1066 
   1067 /* Return a pointer to the local GOT, PLT and TLS reference counts
   1068    for ABFD.  Returns NULL if the storage allocation fails.  */
   1069 
   1070 static bfd_signed_vma *
   1071 hppa32_elf_local_refcounts (bfd *abfd)
   1072 {
   1073   Elf_Internal_Shdr *symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   1074   bfd_signed_vma *local_refcounts;
   1075 
   1076   local_refcounts = elf_local_got_refcounts (abfd);
   1077   if (local_refcounts == NULL)
   1078     {
   1079       bfd_size_type size;
   1080 
   1081       /* Allocate space for local GOT and PLT reference
   1082 	 counts.  Done this way to save polluting elf_obj_tdata
   1083 	 with another target specific pointer.  */
   1084       size = symtab_hdr->sh_info;
   1085       size *= 2 * sizeof (bfd_signed_vma);
   1086       /* Add in space to store the local GOT TLS types.  */
   1087       size += symtab_hdr->sh_info;
   1088       local_refcounts = bfd_zalloc (abfd, size);
   1089       if (local_refcounts == NULL)
   1090 	return NULL;
   1091       elf_local_got_refcounts (abfd) = local_refcounts;
   1092       memset (hppa_elf_local_got_tls_type (abfd), GOT_UNKNOWN,
   1093 	      symtab_hdr->sh_info);
   1094     }
   1095   return local_refcounts;
   1096 }
   1097 
   1098 
   1099 /* Look through the relocs for a section during the first phase, and
   1100    calculate needed space in the global offset table, procedure linkage
   1101    table, and dynamic reloc sections.  At this point we haven't
   1102    necessarily read all the input files.  */
   1103 
   1104 static bfd_boolean
   1105 elf32_hppa_check_relocs (bfd *abfd,
   1106 			 struct bfd_link_info *info,
   1107 			 asection *sec,
   1108 			 const Elf_Internal_Rela *relocs)
   1109 {
   1110   Elf_Internal_Shdr *symtab_hdr;
   1111   struct elf_link_hash_entry **eh_syms;
   1112   const Elf_Internal_Rela *rela;
   1113   const Elf_Internal_Rela *rela_end;
   1114   struct elf32_hppa_link_hash_table *htab;
   1115   asection *sreloc;
   1116 
   1117   if (bfd_link_relocatable (info))
   1118     return TRUE;
   1119 
   1120   htab = hppa_link_hash_table (info);
   1121   if (htab == NULL)
   1122     return FALSE;
   1123   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
   1124   eh_syms = elf_sym_hashes (abfd);
   1125   sreloc = NULL;
   1126 
   1127   rela_end = relocs + sec->reloc_count;
   1128   for (rela = relocs; rela < rela_end; rela++)
   1129     {
   1130       enum {
   1131 	NEED_GOT = 1,
   1132 	NEED_PLT = 2,
   1133 	NEED_DYNREL = 4,
   1134 	PLT_PLABEL = 8
   1135       };
   1136 
   1137       unsigned int r_symndx, r_type;
   1138       struct elf32_hppa_link_hash_entry *hh;
   1139       int need_entry = 0;
   1140 
   1141       r_symndx = ELF32_R_SYM (rela->r_info);
   1142 
   1143       if (r_symndx < symtab_hdr->sh_info)
   1144 	hh = NULL;
   1145       else
   1146 	{
   1147 	  hh =  hppa_elf_hash_entry (eh_syms[r_symndx - symtab_hdr->sh_info]);
   1148 	  while (hh->eh.root.type == bfd_link_hash_indirect
   1149 		 || hh->eh.root.type == bfd_link_hash_warning)
   1150 	    hh = hppa_elf_hash_entry (hh->eh.root.u.i.link);
   1151 	}
   1152 
   1153       r_type = ELF32_R_TYPE (rela->r_info);
   1154       r_type = elf32_hppa_optimized_tls_reloc (info, r_type, hh == NULL);
   1155 
   1156       switch (r_type)
   1157 	{
   1158 	case R_PARISC_DLTIND14F:
   1159 	case R_PARISC_DLTIND14R:
   1160 	case R_PARISC_DLTIND21L:
   1161 	  /* This symbol requires a global offset table entry.  */
   1162 	  need_entry = NEED_GOT;
   1163 	  break;
   1164 
   1165 	case R_PARISC_PLABEL14R: /* "Official" procedure labels.  */
   1166 	case R_PARISC_PLABEL21L:
   1167 	case R_PARISC_PLABEL32:
   1168 	  /* If the addend is non-zero, we break badly.  */
   1169 	  if (rela->r_addend != 0)
   1170 	    abort ();
   1171 
   1172 	  /* If we are creating a shared library, then we need to
   1173 	     create a PLT entry for all PLABELs, because PLABELs with
   1174 	     local symbols may be passed via a pointer to another
   1175 	     object.  Additionally, output a dynamic relocation
   1176 	     pointing to the PLT entry.
   1177 
   1178 	     For executables, the original 32-bit ABI allowed two
   1179 	     different styles of PLABELs (function pointers):  For
   1180 	     global functions, the PLABEL word points into the .plt
   1181 	     two bytes past a (function address, gp) pair, and for
   1182 	     local functions the PLABEL points directly at the
   1183 	     function.  The magic +2 for the first type allows us to
   1184 	     differentiate between the two.  As you can imagine, this
   1185 	     is a real pain when it comes to generating code to call
   1186 	     functions indirectly or to compare function pointers.
   1187 	     We avoid the mess by always pointing a PLABEL into the
   1188 	     .plt, even for local functions.  */
   1189 	  need_entry = PLT_PLABEL | NEED_PLT;
   1190 	  if (bfd_link_pic (info))
   1191 	    need_entry |= NEED_DYNREL;
   1192 	  break;
   1193 
   1194 	case R_PARISC_PCREL12F:
   1195 	  htab->has_12bit_branch = 1;
   1196 	  goto branch_common;
   1197 
   1198 	case R_PARISC_PCREL17C:
   1199 	case R_PARISC_PCREL17F:
   1200 	  htab->has_17bit_branch = 1;
   1201 	  goto branch_common;
   1202 
   1203 	case R_PARISC_PCREL22F:
   1204 	  htab->has_22bit_branch = 1;
   1205 	branch_common:
   1206 	  /* Function calls might need to go through the .plt, and
   1207 	     might require long branch stubs.  */
   1208 	  if (hh == NULL)
   1209 	    {
   1210 	      /* We know local syms won't need a .plt entry, and if
   1211 		 they need a long branch stub we can't guarantee that
   1212 		 we can reach the stub.  So just flag an error later
   1213 		 if we're doing a shared link and find we need a long
   1214 		 branch stub.  */
   1215 	      continue;
   1216 	    }
   1217 	  else
   1218 	    {
   1219 	      /* Global symbols will need a .plt entry if they remain
   1220 		 global, and in most cases won't need a long branch
   1221 		 stub.  Unfortunately, we have to cater for the case
   1222 		 where a symbol is forced local by versioning, or due
   1223 		 to symbolic linking, and we lose the .plt entry.  */
   1224 	      need_entry = NEED_PLT;
   1225 	      if (hh->eh.type == STT_PARISC_MILLI)
   1226 		need_entry = 0;
   1227 	    }
   1228 	  break;
   1229 
   1230 	case R_PARISC_SEGBASE:  /* Used to set segment base.  */
   1231 	case R_PARISC_SEGREL32: /* Relative reloc, used for unwind.  */
   1232 	case R_PARISC_PCREL14F: /* PC relative load/store.  */
   1233 	case R_PARISC_PCREL14R:
   1234 	case R_PARISC_PCREL17R: /* External branches.  */
   1235 	case R_PARISC_PCREL21L: /* As above, and for load/store too.  */
   1236 	case R_PARISC_PCREL32:
   1237 	  /* We don't need to propagate the relocation if linking a
   1238 	     shared object since these are section relative.  */
   1239 	  continue;
   1240 
   1241 	case R_PARISC_DPREL14F: /* Used for gp rel data load/store.  */
   1242 	case R_PARISC_DPREL14R:
   1243 	case R_PARISC_DPREL21L:
   1244 	  if (bfd_link_pic (info))
   1245 	    {
   1246 	      _bfd_error_handler
   1247 		/* xgettext:c-format */
   1248 		(_("%pB: relocation %s can not be used when making a shared object; recompile with -fPIC"),
   1249 		 abfd,
   1250 		 elf_hppa_howto_table[r_type].name);
   1251 	      bfd_set_error (bfd_error_bad_value);
   1252 	      return FALSE;
   1253 	    }
   1254 	  /* Fall through.  */
   1255 
   1256 	case R_PARISC_DIR17F: /* Used for external branches.  */
   1257 	case R_PARISC_DIR17R:
   1258 	case R_PARISC_DIR14F: /* Used for load/store from absolute locn.  */
   1259 	case R_PARISC_DIR14R:
   1260 	case R_PARISC_DIR21L: /* As above, and for ext branches too.  */
   1261 	case R_PARISC_DIR32: /* .word relocs.  */
   1262 	  /* We may want to output a dynamic relocation later.  */
   1263 	  need_entry = NEED_DYNREL;
   1264 	  break;
   1265 
   1266 	  /* This relocation describes the C++ object vtable hierarchy.
   1267 	     Reconstruct it for later use during GC.  */
   1268 	case R_PARISC_GNU_VTINHERIT:
   1269 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, &hh->eh, rela->r_offset))
   1270 	    return FALSE;
   1271 	  continue;
   1272 
   1273 	  /* This relocation describes which C++ vtable entries are actually
   1274 	     used.  Record for later use during GC.  */
   1275 	case R_PARISC_GNU_VTENTRY:
   1276 	  BFD_ASSERT (hh != NULL);
   1277 	  if (hh != NULL
   1278 	      && !bfd_elf_gc_record_vtentry (abfd, sec, &hh->eh, rela->r_addend))
   1279 	    return FALSE;
   1280 	  continue;
   1281 
   1282 	case R_PARISC_TLS_GD21L:
   1283 	case R_PARISC_TLS_GD14R:
   1284 	case R_PARISC_TLS_LDM21L:
   1285 	case R_PARISC_TLS_LDM14R:
   1286 	  need_entry = NEED_GOT;
   1287 	  break;
   1288 
   1289 	case R_PARISC_TLS_IE21L:
   1290 	case R_PARISC_TLS_IE14R:
   1291 	  if (bfd_link_dll (info))
   1292 	    info->flags |= DF_STATIC_TLS;
   1293 	  need_entry = NEED_GOT;
   1294 	  break;
   1295 
   1296 	default:
   1297 	  continue;
   1298 	}
   1299 
   1300       /* Now carry out our orders.  */
   1301       if (need_entry & NEED_GOT)
   1302 	{
   1303 	  int tls_type = GOT_NORMAL;
   1304 
   1305 	  switch (r_type)
   1306 	    {
   1307 	    default:
   1308 	      break;
   1309 	    case R_PARISC_TLS_GD21L:
   1310 	    case R_PARISC_TLS_GD14R:
   1311 	      tls_type = GOT_TLS_GD;
   1312 	      break;
   1313 	    case R_PARISC_TLS_LDM21L:
   1314 	    case R_PARISC_TLS_LDM14R:
   1315 	      tls_type = GOT_TLS_LDM;
   1316 	      break;
   1317 	    case R_PARISC_TLS_IE21L:
   1318 	    case R_PARISC_TLS_IE14R:
   1319 	      tls_type = GOT_TLS_IE;
   1320 	      break;
   1321 	    }
   1322 
   1323 	  /* Allocate space for a GOT entry, as well as a dynamic
   1324 	     relocation for this entry.  */
   1325 	  if (htab->etab.sgot == NULL)
   1326 	    {
   1327 	      if (!elf32_hppa_create_dynamic_sections (htab->etab.dynobj, info))
   1328 		return FALSE;
   1329 	    }
   1330 
   1331 	  if (hh != NULL)
   1332 	    {
   1333 	      if (tls_type == GOT_TLS_LDM)
   1334 		htab->tls_ldm_got.refcount += 1;
   1335 	      else
   1336 		hh->eh.got.refcount += 1;
   1337 	      hh->tls_type |= tls_type;
   1338 	    }
   1339 	  else
   1340 	    {
   1341 	      bfd_signed_vma *local_got_refcounts;
   1342 
   1343 	      /* This is a global offset table entry for a local symbol.  */
   1344 	      local_got_refcounts = hppa32_elf_local_refcounts (abfd);
   1345 	      if (local_got_refcounts == NULL)
   1346 		return FALSE;
   1347 	      if (tls_type == GOT_TLS_LDM)
   1348 		htab->tls_ldm_got.refcount += 1;
   1349 	      else
   1350 		local_got_refcounts[r_symndx] += 1;
   1351 
   1352 	      hppa_elf_local_got_tls_type (abfd) [r_symndx] |= tls_type;
   1353 	    }
   1354 	}
   1355 
   1356       if (need_entry & NEED_PLT)
   1357 	{
   1358 	  /* If we are creating a shared library, and this is a reloc
   1359 	     against a weak symbol or a global symbol in a dynamic
   1360 	     object, then we will be creating an import stub and a
   1361 	     .plt entry for the symbol.  Similarly, on a normal link
   1362 	     to symbols defined in a dynamic object we'll need the
   1363 	     import stub and a .plt entry.  We don't know yet whether
   1364 	     the symbol is defined or not, so make an entry anyway and
   1365 	     clean up later in adjust_dynamic_symbol.  */
   1366 	  if ((sec->flags & SEC_ALLOC) != 0)
   1367 	    {
   1368 	      if (hh != NULL)
   1369 		{
   1370 		  hh->eh.needs_plt = 1;
   1371 		  hh->eh.plt.refcount += 1;
   1372 
   1373 		  /* If this .plt entry is for a plabel, mark it so
   1374 		     that adjust_dynamic_symbol will keep the entry
   1375 		     even if it appears to be local.  */
   1376 		  if (need_entry & PLT_PLABEL)
   1377 		    hh->plabel = 1;
   1378 		}
   1379 	      else if (need_entry & PLT_PLABEL)
   1380 		{
   1381 		  bfd_signed_vma *local_got_refcounts;
   1382 		  bfd_signed_vma *local_plt_refcounts;
   1383 
   1384 		  local_got_refcounts = hppa32_elf_local_refcounts (abfd);
   1385 		  if (local_got_refcounts == NULL)
   1386 		    return FALSE;
   1387 		  local_plt_refcounts = (local_got_refcounts
   1388 					 + symtab_hdr->sh_info);
   1389 		  local_plt_refcounts[r_symndx] += 1;
   1390 		}
   1391 	    }
   1392 	}
   1393 
   1394       if ((need_entry & NEED_DYNREL) != 0
   1395 	  && (sec->flags & SEC_ALLOC) != 0)
   1396 	{
   1397 	  /* Flag this symbol as having a non-got, non-plt reference
   1398 	     so that we generate copy relocs if it turns out to be
   1399 	     dynamic.  */
   1400 	  if (hh != NULL)
   1401 	    hh->eh.non_got_ref = 1;
   1402 
   1403 	  /* If we are creating a shared library then we need to copy
   1404 	     the reloc into the shared library.  However, if we are
   1405 	     linking with -Bsymbolic, we need only copy absolute
   1406 	     relocs or relocs against symbols that are not defined in
   1407 	     an object we are including in the link.  PC- or DP- or
   1408 	     DLT-relative relocs against any local sym or global sym
   1409 	     with DEF_REGULAR set, can be discarded.  At this point we
   1410 	     have not seen all the input files, so it is possible that
   1411 	     DEF_REGULAR is not set now but will be set later (it is
   1412 	     never cleared).  We account for that possibility below by
   1413 	     storing information in the dyn_relocs field of the
   1414 	     hash table entry.
   1415 
   1416 	     A similar situation to the -Bsymbolic case occurs when
   1417 	     creating shared libraries and symbol visibility changes
   1418 	     render the symbol local.
   1419 
   1420 	     As it turns out, all the relocs we will be creating here
   1421 	     are absolute, so we cannot remove them on -Bsymbolic
   1422 	     links or visibility changes anyway.  A STUB_REL reloc
   1423 	     is absolute too, as in that case it is the reloc in the
   1424 	     stub we will be creating, rather than copying the PCREL
   1425 	     reloc in the branch.
   1426 
   1427 	     If on the other hand, we are creating an executable, we
   1428 	     may need to keep relocations for symbols satisfied by a
   1429 	     dynamic library if we manage to avoid copy relocs for the
   1430 	     symbol.  */
   1431 	  if ((bfd_link_pic (info)
   1432 	       && (IS_ABSOLUTE_RELOC (r_type)
   1433 		   || (hh != NULL
   1434 		       && (!SYMBOLIC_BIND (info, &hh->eh)
   1435 			   || hh->eh.root.type == bfd_link_hash_defweak
   1436 			   || !hh->eh.def_regular))))
   1437 	      || (ELIMINATE_COPY_RELOCS
   1438 		  && !bfd_link_pic (info)
   1439 		  && hh != NULL
   1440 		  && (hh->eh.root.type == bfd_link_hash_defweak
   1441 		      || !hh->eh.def_regular)))
   1442 	    {
   1443 	      struct elf_dyn_relocs *hdh_p;
   1444 	      struct elf_dyn_relocs **hdh_head;
   1445 
   1446 	      /* Create a reloc section in dynobj and make room for
   1447 		 this reloc.  */
   1448 	      if (sreloc == NULL)
   1449 		{
   1450 		  sreloc = _bfd_elf_make_dynamic_reloc_section
   1451 		    (sec, htab->etab.dynobj, 2, abfd, /*rela?*/ TRUE);
   1452 
   1453 		  if (sreloc == NULL)
   1454 		    {
   1455 		      bfd_set_error (bfd_error_bad_value);
   1456 		      return FALSE;
   1457 		    }
   1458 		}
   1459 
   1460 	      /* If this is a global symbol, we count the number of
   1461 		 relocations we need for this symbol.  */
   1462 	      if (hh != NULL)
   1463 		{
   1464 		  hdh_head = &hh->dyn_relocs;
   1465 		}
   1466 	      else
   1467 		{
   1468 		  /* Track dynamic relocs needed for local syms too.
   1469 		     We really need local syms available to do this
   1470 		     easily.  Oh well.  */
   1471 		  asection *sr;
   1472 		  void *vpp;
   1473 		  Elf_Internal_Sym *isym;
   1474 
   1475 		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
   1476 						abfd, r_symndx);
   1477 		  if (isym == NULL)
   1478 		    return FALSE;
   1479 
   1480 		  sr = bfd_section_from_elf_index (abfd, isym->st_shndx);
   1481 		  if (sr == NULL)
   1482 		    sr = sec;
   1483 
   1484 		  vpp = &elf_section_data (sr)->local_dynrel;
   1485 		  hdh_head = (struct elf_dyn_relocs **) vpp;
   1486 		}
   1487 
   1488 	      hdh_p = *hdh_head;
   1489 	      if (hdh_p == NULL || hdh_p->sec != sec)
   1490 		{
   1491 		  hdh_p = bfd_alloc (htab->etab.dynobj, sizeof *hdh_p);
   1492 		  if (hdh_p == NULL)
   1493 		    return FALSE;
   1494 		  hdh_p->next = *hdh_head;
   1495 		  *hdh_head = hdh_p;
   1496 		  hdh_p->sec = sec;
   1497 		  hdh_p->count = 0;
   1498 #if RELATIVE_DYNRELOCS
   1499 		  hdh_p->pc_count = 0;
   1500 #endif
   1501 		}
   1502 
   1503 	      hdh_p->count += 1;
   1504 #if RELATIVE_DYNRELOCS
   1505 	      if (!IS_ABSOLUTE_RELOC (rtype))
   1506 		hdh_p->pc_count += 1;
   1507 #endif
   1508 	    }
   1509 	}
   1510     }
   1511 
   1512   return TRUE;
   1513 }
   1514 
   1515 /* Return the section that should be marked against garbage collection
   1516    for a given relocation.  */
   1517 
   1518 static asection *
   1519 elf32_hppa_gc_mark_hook (asection *sec,
   1520 			 struct bfd_link_info *info,
   1521 			 Elf_Internal_Rela *rela,
   1522 			 struct elf_link_hash_entry *hh,
   1523 			 Elf_Internal_Sym *sym)
   1524 {
   1525   if (hh != NULL)
   1526     switch ((unsigned int) ELF32_R_TYPE (rela->r_info))
   1527       {
   1528       case R_PARISC_GNU_VTINHERIT:
   1529       case R_PARISC_GNU_VTENTRY:
   1530 	return NULL;
   1531       }
   1532 
   1533   return _bfd_elf_gc_mark_hook (sec, info, rela, hh, sym);
   1534 }
   1535 
   1536 /* Support for core dump NOTE sections.  */
   1537 
   1538 static bfd_boolean
   1539 elf32_hppa_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
   1540 {
   1541   int offset;
   1542   size_t size;
   1543 
   1544   switch (note->descsz)
   1545     {
   1546       default:
   1547 	return FALSE;
   1548 
   1549       case 396:		/* Linux/hppa */
   1550 	/* pr_cursig */
   1551 	elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
   1552 
   1553 	/* pr_pid */
   1554 	elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 24);
   1555 
   1556 	/* pr_reg */
   1557 	offset = 72;
   1558 	size = 320;
   1559 
   1560 	break;
   1561     }
   1562 
   1563   /* Make a ".reg/999" section.  */
   1564   return _bfd_elfcore_make_pseudosection (abfd, ".reg",
   1565 					  size, note->descpos + offset);
   1566 }
   1567 
   1568 static bfd_boolean
   1569 elf32_hppa_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
   1570 {
   1571   switch (note->descsz)
   1572     {
   1573       default:
   1574 	return FALSE;
   1575 
   1576       case 124:		/* Linux/hppa elf_prpsinfo.  */
   1577 	elf_tdata (abfd)->core->program
   1578 	  = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
   1579 	elf_tdata (abfd)->core->command
   1580 	  = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
   1581     }
   1582 
   1583   /* Note that for some reason, a spurious space is tacked
   1584      onto the end of the args in some (at least one anyway)
   1585      implementations, so strip it off if it exists.  */
   1586   {
   1587     char *command = elf_tdata (abfd)->core->command;
   1588     int n = strlen (command);
   1589 
   1590     if (0 < n && command[n - 1] == ' ')
   1591       command[n - 1] = '\0';
   1592   }
   1593 
   1594   return TRUE;
   1595 }
   1596 
   1597 /* Our own version of hide_symbol, so that we can keep plt entries for
   1598    plabels.  */
   1599 
   1600 static void
   1601 elf32_hppa_hide_symbol (struct bfd_link_info *info,
   1602 			struct elf_link_hash_entry *eh,
   1603 			bfd_boolean force_local)
   1604 {
   1605   if (force_local)
   1606     {
   1607       eh->forced_local = 1;
   1608       if (eh->dynindx != -1)
   1609 	{
   1610 	  eh->dynindx = -1;
   1611 	  _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
   1612 				  eh->dynstr_index);
   1613 	}
   1614 
   1615       /* PR 16082: Remove version information from hidden symbol.  */
   1616       eh->verinfo.verdef = NULL;
   1617       eh->verinfo.vertree = NULL;
   1618     }
   1619 
   1620   /* STT_GNU_IFUNC symbol must go through PLT.  */
   1621   if (! hppa_elf_hash_entry (eh)->plabel
   1622       && eh->type != STT_GNU_IFUNC)
   1623     {
   1624       eh->needs_plt = 0;
   1625       eh->plt = elf_hash_table (info)->init_plt_offset;
   1626     }
   1627 }
   1628 
   1629 /* Find any dynamic relocs that apply to read-only sections.  */
   1630 
   1631 static asection *
   1632 readonly_dynrelocs (struct elf_link_hash_entry *eh)
   1633 {
   1634   struct elf32_hppa_link_hash_entry *hh;
   1635   struct elf_dyn_relocs *hdh_p;
   1636 
   1637   hh = hppa_elf_hash_entry (eh);
   1638   for (hdh_p = hh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->next)
   1639     {
   1640       asection *sec = hdh_p->sec->output_section;
   1641 
   1642       if (sec != NULL && (sec->flags & SEC_READONLY) != 0)
   1643 	return hdh_p->sec;
   1644     }
   1645   return NULL;
   1646 }
   1647 
   1648 /* Return true if we have dynamic relocs against H or any of its weak
   1649    aliases, that apply to read-only sections.  Cannot be used after
   1650    size_dynamic_sections.  */
   1651 
   1652 static bfd_boolean
   1653 alias_readonly_dynrelocs (struct elf_link_hash_entry *eh)
   1654 {
   1655   struct elf32_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh);
   1656   do
   1657     {
   1658       if (readonly_dynrelocs (&hh->eh))
   1659 	return TRUE;
   1660       hh = hppa_elf_hash_entry (hh->eh.u.alias);
   1661     } while (hh != NULL && &hh->eh != eh);
   1662 
   1663   return FALSE;
   1664 }
   1665 
   1666 /* Adjust a symbol defined by a dynamic object and referenced by a
   1667    regular object.  The current definition is in some section of the
   1668    dynamic object, but we're not including those sections.  We have to
   1669    change the definition to something the rest of the link can
   1670    understand.  */
   1671 
   1672 static bfd_boolean
   1673 elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
   1674 				  struct elf_link_hash_entry *eh)
   1675 {
   1676   struct elf32_hppa_link_hash_table *htab;
   1677   asection *sec, *srel;
   1678 
   1679   /* If this is a function, put it in the procedure linkage table.  We
   1680      will fill in the contents of the procedure linkage table later.  */
   1681   if (eh->type == STT_FUNC
   1682       || eh->needs_plt)
   1683     {
   1684       bfd_boolean local = (SYMBOL_CALLS_LOCAL (info, eh)
   1685 			   || UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh));
   1686       /* Discard dyn_relocs when non-pic if we've decided that a
   1687 	 function symbol is local.  */
   1688       if (!bfd_link_pic (info) && local)
   1689 	hppa_elf_hash_entry (eh)->dyn_relocs = NULL;
   1690 
   1691       /* If the symbol is used by a plabel, we must allocate a PLT slot.
   1692 	 The refcounts are not reliable when it has been hidden since
   1693 	 hide_symbol can be called before the plabel flag is set.  */
   1694       if (hppa_elf_hash_entry (eh)->plabel)
   1695 	eh->plt.refcount = 1;
   1696 
   1697       /* Note that unlike some other backends, the refcount is not
   1698 	 incremented for a non-call (and non-plabel) function reference.  */
   1699       else if (eh->plt.refcount <= 0
   1700 	       || local)
   1701 	{
   1702 	  /* The .plt entry is not needed when:
   1703 	     a) Garbage collection has removed all references to the
   1704 	     symbol, or
   1705 	     b) We know for certain the symbol is defined in this
   1706 	     object, and it's not a weak definition, nor is the symbol
   1707 	     used by a plabel relocation.  Either this object is the
   1708 	     application or we are doing a shared symbolic link.  */
   1709 	  eh->plt.offset = (bfd_vma) -1;
   1710 	  eh->needs_plt = 0;
   1711 	}
   1712 
   1713       /* Unlike other targets, elf32-hppa.c does not define a function
   1714 	 symbol in a non-pic executable on PLT stub code, so we don't
   1715 	 have a local definition in that case.  ie. dyn_relocs can't
   1716 	 be discarded.  */
   1717 
   1718       /* Function symbols can't have copy relocs.  */
   1719       return TRUE;
   1720     }
   1721   else
   1722     eh->plt.offset = (bfd_vma) -1;
   1723 
   1724   htab = hppa_link_hash_table (info);
   1725   if (htab == NULL)
   1726     return FALSE;
   1727 
   1728   /* If this is a weak symbol, and there is a real definition, the
   1729      processor independent code will have arranged for us to see the
   1730      real definition first, and we can just use the same value.  */
   1731   if (eh->is_weakalias)
   1732     {
   1733       struct elf_link_hash_entry *def = weakdef (eh);
   1734       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
   1735       eh->root.u.def.section = def->root.u.def.section;
   1736       eh->root.u.def.value = def->root.u.def.value;
   1737       if (def->root.u.def.section == htab->etab.sdynbss
   1738 	  || def->root.u.def.section == htab->etab.sdynrelro)
   1739 	hppa_elf_hash_entry (eh)->dyn_relocs = NULL;
   1740       return TRUE;
   1741     }
   1742 
   1743   /* This is a reference to a symbol defined by a dynamic object which
   1744      is not a function.  */
   1745 
   1746   /* If we are creating a shared library, we must presume that the
   1747      only references to the symbol are via the global offset table.
   1748      For such cases we need not do anything here; the relocations will
   1749      be handled correctly by relocate_section.  */
   1750   if (bfd_link_pic (info))
   1751     return TRUE;
   1752 
   1753   /* If there are no references to this symbol that do not use the
   1754      GOT, we don't need to generate a copy reloc.  */
   1755   if (!eh->non_got_ref)
   1756     return TRUE;
   1757 
   1758   /* If -z nocopyreloc was given, we won't generate them either.  */
   1759   if (info->nocopyreloc)
   1760     return TRUE;
   1761 
   1762   /* If we don't find any dynamic relocs in read-only sections, then
   1763      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
   1764   if (ELIMINATE_COPY_RELOCS
   1765       && !alias_readonly_dynrelocs (eh))
   1766     return TRUE;
   1767 
   1768   /* We must allocate the symbol in our .dynbss section, which will
   1769      become part of the .bss section of the executable.  There will be
   1770      an entry for this symbol in the .dynsym section.  The dynamic
   1771      object will contain position independent code, so all references
   1772      from the dynamic object to this symbol will go through the global
   1773      offset table.  The dynamic linker will use the .dynsym entry to
   1774      determine the address it must put in the global offset table, so
   1775      both the dynamic object and the regular object will refer to the
   1776      same memory location for the variable.  */
   1777   if ((eh->root.u.def.section->flags & SEC_READONLY) != 0)
   1778     {
   1779       sec = htab->etab.sdynrelro;
   1780       srel = htab->etab.sreldynrelro;
   1781     }
   1782   else
   1783     {
   1784       sec = htab->etab.sdynbss;
   1785       srel = htab->etab.srelbss;
   1786     }
   1787   if ((eh->root.u.def.section->flags & SEC_ALLOC) != 0 && eh->size != 0)
   1788     {
   1789       /* We must generate a COPY reloc to tell the dynamic linker to
   1790 	 copy the initial value out of the dynamic object and into the
   1791 	 runtime process image.  */
   1792       srel->size += sizeof (Elf32_External_Rela);
   1793       eh->needs_copy = 1;
   1794     }
   1795 
   1796   /* We no longer want dyn_relocs.  */
   1797   hppa_elf_hash_entry (eh)->dyn_relocs = NULL;
   1798   return _bfd_elf_adjust_dynamic_copy (info, eh, sec);
   1799 }
   1800 
   1801 /* If EH is undefined, make it dynamic if that makes sense.  */
   1802 
   1803 static bfd_boolean
   1804 ensure_undef_dynamic (struct bfd_link_info *info,
   1805 		      struct elf_link_hash_entry *eh)
   1806 {
   1807   struct elf_link_hash_table *htab = elf_hash_table (info);
   1808 
   1809   if (htab->dynamic_sections_created
   1810       && (eh->root.type == bfd_link_hash_undefweak
   1811 	  || eh->root.type == bfd_link_hash_undefined)
   1812       && eh->dynindx == -1
   1813       && !eh->forced_local
   1814       && eh->type != STT_PARISC_MILLI
   1815       && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh)
   1816       && ELF_ST_VISIBILITY (eh->other) == STV_DEFAULT)
   1817     return bfd_elf_link_record_dynamic_symbol (info, eh);
   1818   return TRUE;
   1819 }
   1820 
   1821 /* Allocate space in the .plt for entries that won't have relocations.
   1822    ie. plabel entries.  */
   1823 
   1824 static bfd_boolean
   1825 allocate_plt_static (struct elf_link_hash_entry *eh, void *inf)
   1826 {
   1827   struct bfd_link_info *info;
   1828   struct elf32_hppa_link_hash_table *htab;
   1829   struct elf32_hppa_link_hash_entry *hh;
   1830   asection *sec;
   1831 
   1832   if (eh->root.type == bfd_link_hash_indirect)
   1833     return TRUE;
   1834 
   1835   info = (struct bfd_link_info *) inf;
   1836   hh = hppa_elf_hash_entry (eh);
   1837   htab = hppa_link_hash_table (info);
   1838   if (htab == NULL)
   1839     return FALSE;
   1840 
   1841   if (htab->etab.dynamic_sections_created
   1842       && eh->plt.refcount > 0)
   1843     {
   1844       if (!ensure_undef_dynamic (info, eh))
   1845 	return FALSE;
   1846 
   1847       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), eh))
   1848 	{
   1849 	  /* Allocate these later.  From this point on, h->plabel
   1850 	     means that the plt entry is only used by a plabel.
   1851 	     We'll be using a normal plt entry for this symbol, so
   1852 	     clear the plabel indicator.  */
   1853 
   1854 	  hh->plabel = 0;
   1855 	}
   1856       else if (hh->plabel)
   1857 	{
   1858 	  /* Make an entry in the .plt section for plabel references
   1859 	     that won't have a .plt entry for other reasons.  */
   1860 	  sec = htab->etab.splt;
   1861 	  eh->plt.offset = sec->size;
   1862 	  sec->size += PLT_ENTRY_SIZE;
   1863 	  if (bfd_link_pic (info))
   1864 	    htab->etab.srelplt->size += sizeof (Elf32_External_Rela);
   1865 	}
   1866       else
   1867 	{
   1868 	  /* No .plt entry needed.  */
   1869 	  eh->plt.offset = (bfd_vma) -1;
   1870 	  eh->needs_plt = 0;
   1871 	}
   1872     }
   1873   else
   1874     {
   1875       eh->plt.offset = (bfd_vma) -1;
   1876       eh->needs_plt = 0;
   1877     }
   1878 
   1879   return TRUE;
   1880 }
   1881 
   1882 /* Calculate size of GOT entries for symbol given its TLS_TYPE.  */
   1883 
   1884 static inline unsigned int
   1885 got_entries_needed (int tls_type)
   1886 {
   1887   unsigned int need = 0;
   1888 
   1889   if ((tls_type & GOT_NORMAL) != 0)
   1890     need += GOT_ENTRY_SIZE;
   1891   if ((tls_type & GOT_TLS_GD) != 0)
   1892     need += GOT_ENTRY_SIZE * 2;
   1893   if ((tls_type & GOT_TLS_IE) != 0)
   1894     need += GOT_ENTRY_SIZE;
   1895   return need;
   1896 }
   1897 
   1898 /* Calculate size of relocs needed for symbol given its TLS_TYPE and
   1899    NEEDed GOT entries.  TPREL_KNOWN says a TPREL offset can be
   1900    calculated at link time.  DTPREL_KNOWN says the same for a DTPREL
   1901    offset.  */
   1902 
   1903 static inline unsigned int
   1904 got_relocs_needed (int tls_type, unsigned int need,
   1905 		   bfd_boolean dtprel_known, bfd_boolean tprel_known)
   1906 {
   1907   /* All the entries we allocated need relocs.
   1908      Except for GD and IE with local symbols.  */
   1909   if ((tls_type & GOT_TLS_GD) != 0 && dtprel_known)
   1910     need -= GOT_ENTRY_SIZE;
   1911   if ((tls_type & GOT_TLS_IE) != 0 && tprel_known)
   1912     need -= GOT_ENTRY_SIZE;
   1913   return need * sizeof (Elf32_External_Rela) / GOT_ENTRY_SIZE;
   1914 }
   1915 
   1916 /* Allocate space in .plt, .got and associated reloc sections for
   1917    global syms.  */
   1918 
   1919 static bfd_boolean
   1920 allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf)
   1921 {
   1922   struct bfd_link_info *info;
   1923   struct elf32_hppa_link_hash_table *htab;
   1924   asection *sec;
   1925   struct elf32_hppa_link_hash_entry *hh;
   1926   struct elf_dyn_relocs *hdh_p;
   1927 
   1928   if (eh->root.type == bfd_link_hash_indirect)
   1929     return TRUE;
   1930 
   1931   info = inf;
   1932   htab = hppa_link_hash_table (info);
   1933   if (htab == NULL)
   1934     return FALSE;
   1935 
   1936   hh = hppa_elf_hash_entry (eh);
   1937 
   1938   if (htab->etab.dynamic_sections_created
   1939       && eh->plt.offset != (bfd_vma) -1
   1940       && !hh->plabel
   1941       && eh->plt.refcount > 0)
   1942     {
   1943       /* Make an entry in the .plt section.  */
   1944       sec = htab->etab.splt;
   1945       eh->plt.offset = sec->size;
   1946       sec->size += PLT_ENTRY_SIZE;
   1947 
   1948       /* We also need to make an entry in the .rela.plt section.  */
   1949       htab->etab.srelplt->size += sizeof (Elf32_External_Rela);
   1950       htab->need_plt_stub = 1;
   1951     }
   1952 
   1953   if (eh->got.refcount > 0)
   1954     {
   1955       unsigned int need;
   1956 
   1957       if (!ensure_undef_dynamic (info, eh))
   1958 	return FALSE;
   1959 
   1960       sec = htab->etab.sgot;
   1961       eh->got.offset = sec->size;
   1962       need = got_entries_needed (hh->tls_type);
   1963       sec->size += need;
   1964       if (htab->etab.dynamic_sections_created
   1965 	  && (bfd_link_dll (info)
   1966 	      || (bfd_link_pic (info) && (hh->tls_type & GOT_NORMAL) != 0)
   1967 	      || (eh->dynindx != -1
   1968 		  && !SYMBOL_REFERENCES_LOCAL (info, eh)))
   1969 	  && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh))
   1970 	{
   1971 	  bfd_boolean local = SYMBOL_REFERENCES_LOCAL (info, eh);
   1972 	  htab->etab.srelgot->size
   1973 	    += got_relocs_needed (hh->tls_type, need, local,
   1974 				  local && bfd_link_executable (info));
   1975 	}
   1976     }
   1977   else
   1978     eh->got.offset = (bfd_vma) -1;
   1979 
   1980   /* If no dynamic sections we can't have dynamic relocs.  */
   1981   if (!htab->etab.dynamic_sections_created)
   1982     hh->dyn_relocs = NULL;
   1983 
   1984   /* Discard relocs on undefined syms with non-default visibility.  */
   1985   else if ((eh->root.type == bfd_link_hash_undefined
   1986 	    && ELF_ST_VISIBILITY (eh->other) != STV_DEFAULT)
   1987 	   || UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh))
   1988     hh->dyn_relocs = NULL;
   1989 
   1990   if (hh->dyn_relocs == NULL)
   1991     return TRUE;
   1992 
   1993   /* If this is a -Bsymbolic shared link, then we need to discard all
   1994      space allocated for dynamic pc-relative relocs against symbols
   1995      defined in a regular object.  For the normal shared case, discard
   1996      space for relocs that have become local due to symbol visibility
   1997      changes.  */
   1998   if (bfd_link_pic (info))
   1999     {
   2000 #if RELATIVE_DYNRELOCS
   2001       if (SYMBOL_CALLS_LOCAL (info, eh))
   2002 	{
   2003 	  struct elf_dyn_relocs **hdh_pp;
   2004 
   2005 	  for (hdh_pp = &hh->dyn_relocs; (hdh_p = *hdh_pp) != NULL; )
   2006 	    {
   2007 	      hdh_p->count -= hdh_p->pc_count;
   2008 	      hdh_p->pc_count = 0;
   2009 	      if (hdh_p->count == 0)
   2010 		*hdh_pp = hdh_p->next;
   2011 	      else
   2012 		hdh_pp = &hdh_p->next;
   2013 	    }
   2014 	}
   2015 #endif
   2016 
   2017       if (hh->dyn_relocs != NULL)
   2018 	{
   2019 	  if (!ensure_undef_dynamic (info, eh))
   2020 	    return FALSE;
   2021 	}
   2022     }
   2023   else if (ELIMINATE_COPY_RELOCS)
   2024     {
   2025       /* For the non-shared case, discard space for relocs against
   2026 	 symbols which turn out to need copy relocs or are not
   2027 	 dynamic.  */
   2028 
   2029       if (eh->dynamic_adjusted
   2030 	  && !eh->def_regular
   2031 	  && !ELF_COMMON_DEF_P (eh))
   2032 	{
   2033 	  if (!ensure_undef_dynamic (info, eh))
   2034 	    return FALSE;
   2035 
   2036 	  if (eh->dynindx == -1)
   2037 	    hh->dyn_relocs = NULL;
   2038 	}
   2039       else
   2040 	hh->dyn_relocs = NULL;
   2041     }
   2042 
   2043   /* Finally, allocate space.  */
   2044   for (hdh_p = hh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->next)
   2045     {
   2046       asection *sreloc = elf_section_data (hdh_p->sec)->sreloc;
   2047       sreloc->size += hdh_p->count * sizeof (Elf32_External_Rela);
   2048     }
   2049 
   2050   return TRUE;
   2051 }
   2052 
   2053 /* This function is called via elf_link_hash_traverse to force
   2054    millicode symbols local so they do not end up as globals in the
   2055    dynamic symbol table.  We ought to be able to do this in
   2056    adjust_dynamic_symbol, but our adjust_dynamic_symbol is not called
   2057    for all dynamic symbols.  Arguably, this is a bug in
   2058    elf_adjust_dynamic_symbol.  */
   2059 
   2060 static bfd_boolean
   2061 clobber_millicode_symbols (struct elf_link_hash_entry *eh,
   2062 			   struct bfd_link_info *info)
   2063 {
   2064   if (eh->type == STT_PARISC_MILLI
   2065       && !eh->forced_local)
   2066     {
   2067       elf32_hppa_hide_symbol (info, eh, TRUE);
   2068     }
   2069   return TRUE;
   2070 }
   2071 
   2072 /* Set DF_TEXTREL if we find any dynamic relocs that apply to
   2073    read-only sections.  */
   2074 
   2075 static bfd_boolean
   2076 maybe_set_textrel (struct elf_link_hash_entry *eh, void *inf)
   2077 {
   2078   asection *sec;
   2079 
   2080   if (eh->root.type == bfd_link_hash_indirect)
   2081     return TRUE;
   2082 
   2083   sec = readonly_dynrelocs (eh);
   2084   if (sec != NULL)
   2085     {
   2086       struct bfd_link_info *info = (struct bfd_link_info *) inf;
   2087 
   2088       info->flags |= DF_TEXTREL;
   2089       info->callbacks->minfo
   2090 	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
   2091 	 sec->owner, eh->root.root.string, sec);
   2092       /* Not an error, just cut short the traversal.  */
   2093       return FALSE;
   2094     }
   2095   return TRUE;
   2096 }
   2097 
   2098 /* Set the sizes of the dynamic sections.  */
   2099 
   2100 static bfd_boolean
   2101 elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
   2102 				  struct bfd_link_info *info)
   2103 {
   2104   struct elf32_hppa_link_hash_table *htab;
   2105   bfd *dynobj;
   2106   bfd *ibfd;
   2107   asection *sec;
   2108   bfd_boolean relocs;
   2109 
   2110   htab = hppa_link_hash_table (info);
   2111   if (htab == NULL)
   2112     return FALSE;
   2113 
   2114   dynobj = htab->etab.dynobj;
   2115   if (dynobj == NULL)
   2116     abort ();
   2117 
   2118   if (htab->etab.dynamic_sections_created)
   2119     {
   2120       /* Set the contents of the .interp section to the interpreter.  */
   2121       if (bfd_link_executable (info) && !info->nointerp)
   2122 	{
   2123 	  sec = bfd_get_linker_section (dynobj, ".interp");
   2124 	  if (sec == NULL)
   2125 	    abort ();
   2126 	  sec->size = sizeof ELF_DYNAMIC_INTERPRETER;
   2127 	  sec->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
   2128 	}
   2129 
   2130       /* Force millicode symbols local.  */
   2131       elf_link_hash_traverse (&htab->etab,
   2132 			      clobber_millicode_symbols,
   2133 			      info);
   2134     }
   2135 
   2136   /* Set up .got and .plt offsets for local syms, and space for local
   2137      dynamic relocs.  */
   2138   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
   2139     {
   2140       bfd_signed_vma *local_got;
   2141       bfd_signed_vma *end_local_got;
   2142       bfd_signed_vma *local_plt;
   2143       bfd_signed_vma *end_local_plt;
   2144       bfd_size_type locsymcount;
   2145       Elf_Internal_Shdr *symtab_hdr;
   2146       asection *srel;
   2147       char *local_tls_type;
   2148 
   2149       if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
   2150 	continue;
   2151 
   2152       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
   2153 	{
   2154 	  struct elf_dyn_relocs *hdh_p;
   2155 
   2156 	  for (hdh_p = ((struct elf_dyn_relocs *)
   2157 		    elf_section_data (sec)->local_dynrel);
   2158 	       hdh_p != NULL;
   2159 	       hdh_p = hdh_p->next)
   2160 	    {
   2161 	      if (!bfd_is_abs_section (hdh_p->sec)
   2162 		  && bfd_is_abs_section (hdh_p->sec->output_section))
   2163 		{
   2164 		  /* Input section has been discarded, either because
   2165 		     it is a copy of a linkonce section or due to
   2166 		     linker script /DISCARD/, so we'll be discarding
   2167 		     the relocs too.  */
   2168 		}
   2169 	      else if (hdh_p->count != 0)
   2170 		{
   2171 		  srel = elf_section_data (hdh_p->sec)->sreloc;
   2172 		  srel->size += hdh_p->count * sizeof (Elf32_External_Rela);
   2173 		  if ((hdh_p->sec->output_section->flags & SEC_READONLY) != 0)
   2174 		    info->flags |= DF_TEXTREL;
   2175 		}
   2176 	    }
   2177 	}
   2178 
   2179       local_got = elf_local_got_refcounts (ibfd);
   2180       if (!local_got)
   2181 	continue;
   2182 
   2183       symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
   2184       locsymcount = symtab_hdr->sh_info;
   2185       end_local_got = local_got + locsymcount;
   2186       local_tls_type = hppa_elf_local_got_tls_type (ibfd);
   2187       sec = htab->etab.sgot;
   2188       srel = htab->etab.srelgot;
   2189       for (; local_got < end_local_got; ++local_got)
   2190 	{
   2191 	  if (*local_got > 0)
   2192 	    {
   2193 	      unsigned int need;
   2194 
   2195 	      *local_got = sec->size;
   2196 	      need = got_entries_needed (*local_tls_type);
   2197 	      sec->size += need;
   2198 	      if (bfd_link_dll (info)
   2199 		  || (bfd_link_pic (info)
   2200 		      && (*local_tls_type & GOT_NORMAL) != 0))
   2201 		htab->etab.srelgot->size
   2202 		  += got_relocs_needed (*local_tls_type, need, TRUE,
   2203 					bfd_link_executable (info));
   2204 	    }
   2205 	  else
   2206 	    *local_got = (bfd_vma) -1;
   2207 
   2208 	  ++local_tls_type;
   2209 	}
   2210 
   2211       local_plt = end_local_got;
   2212       end_local_plt = local_plt + locsymcount;
   2213       if (! htab->etab.dynamic_sections_created)
   2214 	{
   2215 	  /* Won't be used, but be safe.  */
   2216 	  for (; local_plt < end_local_plt; ++local_plt)
   2217 	    *local_plt = (bfd_vma) -1;
   2218 	}
   2219       else
   2220 	{
   2221 	  sec = htab->etab.splt;
   2222 	  srel = htab->etab.srelplt;
   2223 	  for (; local_plt < end_local_plt; ++local_plt)
   2224 	    {
   2225 	      if (*local_plt > 0)
   2226 		{
   2227 		  *local_plt = sec->size;
   2228 		  sec->size += PLT_ENTRY_SIZE;
   2229 		  if (bfd_link_pic (info))
   2230 		    srel->size += sizeof (Elf32_External_Rela);
   2231 		}
   2232 	      else
   2233 		*local_plt = (bfd_vma) -1;
   2234 	    }
   2235 	}
   2236     }
   2237 
   2238   if (htab->tls_ldm_got.refcount > 0)
   2239     {
   2240       /* Allocate 2 got entries and 1 dynamic reloc for
   2241 	 R_PARISC_TLS_DTPMOD32 relocs.  */
   2242       htab->tls_ldm_got.offset = htab->etab.sgot->size;
   2243       htab->etab.sgot->size += (GOT_ENTRY_SIZE * 2);
   2244       htab->etab.srelgot->size += sizeof (Elf32_External_Rela);
   2245     }
   2246   else
   2247     htab->tls_ldm_got.offset = -1;
   2248 
   2249   /* Do all the .plt entries without relocs first.  The dynamic linker
   2250      uses the last .plt reloc to find the end of the .plt (and hence
   2251      the start of the .got) for lazy linking.  */
   2252   elf_link_hash_traverse (&htab->etab, allocate_plt_static, info);
   2253 
   2254   /* Allocate global sym .plt and .got entries, and space for global
   2255      sym dynamic relocs.  */
   2256   elf_link_hash_traverse (&htab->etab, allocate_dynrelocs, info);
   2257 
   2258   /* The check_relocs and adjust_dynamic_symbol entry points have
   2259      determined the sizes of the various dynamic sections.  Allocate
   2260      memory for them.  */
   2261   relocs = FALSE;
   2262   for (sec = dynobj->sections; sec != NULL; sec = sec->next)
   2263     {
   2264       if ((sec->flags & SEC_LINKER_CREATED) == 0)
   2265 	continue;
   2266 
   2267       if (sec == htab->etab.splt)
   2268 	{
   2269 	  if (htab->need_plt_stub)
   2270 	    {
   2271 	      /* Make space for the plt stub at the end of the .plt
   2272 		 section.  We want this stub right at the end, up
   2273 		 against the .got section.  */
   2274 	      int gotalign = bfd_section_alignment (dynobj, htab->etab.sgot);
   2275 	      int pltalign = bfd_section_alignment (dynobj, sec);
   2276 	      bfd_size_type mask;
   2277 
   2278 	      if (gotalign > pltalign)
   2279 		(void) bfd_set_section_alignment (dynobj, sec, gotalign);
   2280 	      mask = ((bfd_size_type) 1 << gotalign) - 1;
   2281 	      sec->size = (sec->size + sizeof (plt_stub) + mask) & ~mask;
   2282 	    }
   2283 	}
   2284       else if (sec == htab->etab.sgot
   2285 	       || sec == htab->etab.sdynbss
   2286 	       || sec == htab->etab.sdynrelro)
   2287 	;
   2288       else if (CONST_STRNEQ (bfd_get_section_name (dynobj, sec), ".rela"))
   2289 	{
   2290 	  if (sec->size != 0)
   2291 	    {
   2292 	      /* Remember whether there are any reloc sections other
   2293 		 than .rela.plt.  */
   2294 	      if (sec != htab->etab.srelplt)
   2295 		relocs = TRUE;
   2296 
   2297 	      /* We use the reloc_count field as a counter if we need
   2298 		 to copy relocs into the output file.  */
   2299 	      sec->reloc_count = 0;
   2300 	    }
   2301 	}
   2302       else
   2303 	{
   2304 	  /* It's not one of our sections, so don't allocate space.  */
   2305 	  continue;
   2306 	}
   2307 
   2308       if (sec->size == 0)
   2309 	{
   2310 	  /* If we don't need this section, strip it from the
   2311 	     output file.  This is mostly to handle .rela.bss and
   2312 	     .rela.plt.  We must create both sections in
   2313 	     create_dynamic_sections, because they must be created
   2314 	     before the linker maps input sections to output
   2315 	     sections.  The linker does that before
   2316 	     adjust_dynamic_symbol is called, and it is that
   2317 	     function which decides whether anything needs to go
   2318 	     into these sections.  */
   2319 	  sec->flags |= SEC_EXCLUDE;
   2320 	  continue;
   2321 	}
   2322 
   2323       if ((sec->flags & SEC_HAS_CONTENTS) == 0)
   2324 	continue;
   2325 
   2326       /* Allocate memory for the section contents.  Zero it, because
   2327 	 we may not fill in all the reloc sections.  */
   2328       sec->contents = bfd_zalloc (dynobj, sec->size);
   2329       if (sec->contents == NULL)
   2330 	return FALSE;
   2331     }
   2332 
   2333   if (htab->etab.dynamic_sections_created)
   2334     {
   2335       /* Like IA-64 and HPPA64, always create a DT_PLTGOT.  It
   2336 	 actually has nothing to do with the PLT, it is how we
   2337 	 communicate the LTP value of a load module to the dynamic
   2338 	 linker.  */
   2339 #define add_dynamic_entry(TAG, VAL) \
   2340   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
   2341 
   2342       if (!add_dynamic_entry (DT_PLTGOT, 0))
   2343 	return FALSE;
   2344 
   2345       /* Add some entries to the .dynamic section.  We fill in the
   2346 	 values later, in elf32_hppa_finish_dynamic_sections, but we
   2347 	 must add the entries now so that we get the correct size for
   2348 	 the .dynamic section.  The DT_DEBUG entry is filled in by the
   2349 	 dynamic linker and used by the debugger.  */
   2350       if (bfd_link_executable (info))
   2351 	{
   2352 	  if (!add_dynamic_entry (DT_DEBUG, 0))
   2353 	    return FALSE;
   2354 	}
   2355 
   2356       if (htab->etab.srelplt->size != 0)
   2357 	{
   2358 	  if (!add_dynamic_entry (DT_PLTRELSZ, 0)
   2359 	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
   2360 	      || !add_dynamic_entry (DT_JMPREL, 0))
   2361 	    return FALSE;
   2362 	}
   2363 
   2364       if (relocs)
   2365 	{
   2366 	  if (!add_dynamic_entry (DT_RELA, 0)
   2367 	      || !add_dynamic_entry (DT_RELASZ, 0)
   2368 	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
   2369 	    return FALSE;
   2370 
   2371 	  /* If any dynamic relocs apply to a read-only section,
   2372 	     then we need a DT_TEXTREL entry.  */
   2373 	  if ((info->flags & DF_TEXTREL) == 0)
   2374 	    elf_link_hash_traverse (&htab->etab, maybe_set_textrel, info);
   2375 
   2376 	  if ((info->flags & DF_TEXTREL) != 0)
   2377 	    {
   2378 	      if (!add_dynamic_entry (DT_TEXTREL, 0))
   2379 		return FALSE;
   2380 	    }
   2381 	}
   2382     }
   2383 #undef add_dynamic_entry
   2384 
   2385   return TRUE;
   2386 }
   2387 
   2388 /* External entry points for sizing and building linker stubs.  */
   2389 
   2390 /* Set up various things so that we can make a list of input sections
   2391    for each output section included in the link.  Returns -1 on error,
   2392    0 when no stubs will be needed, and 1 on success.  */
   2393 
   2394 int
   2395 elf32_hppa_setup_section_lists (bfd *output_bfd, struct bfd_link_info *info)
   2396 {
   2397   bfd *input_bfd;
   2398   unsigned int bfd_count;
   2399   unsigned int top_id, top_index;
   2400   asection *section;
   2401   asection **input_list, **list;
   2402   bfd_size_type amt;
   2403   struct elf32_hppa_link_hash_table *htab = hppa_link_hash_table (info);
   2404 
   2405   if (htab == NULL)
   2406     return -1;
   2407 
   2408   /* Count the number of input BFDs and find the top input section id.  */
   2409   for (input_bfd = info->input_bfds, bfd_count = 0, top_id = 0;
   2410        input_bfd != NULL;
   2411        input_bfd = input_bfd->link.next)
   2412     {
   2413       bfd_count += 1;
   2414       for (section = input_bfd->sections;
   2415 	   section != NULL;
   2416 	   section = section->next)
   2417 	{
   2418 	  if (top_id < section->id)
   2419 	    top_id = section->id;
   2420 	}
   2421     }
   2422   htab->bfd_count = bfd_count;
   2423 
   2424   amt = sizeof (struct map_stub) * (top_id + 1);
   2425   htab->stub_group = bfd_zmalloc (amt);
   2426   if (htab->stub_group == NULL)
   2427     return -1;
   2428 
   2429   /* We can't use output_bfd->section_count here to find the top output
   2430      section index as some sections may have been removed, and
   2431      strip_excluded_output_sections doesn't renumber the indices.  */
   2432   for (section = output_bfd->sections, top_index = 0;
   2433        section != NULL;
   2434        section = section->next)
   2435     {
   2436       if (top_index < section->index)
   2437 	top_index = section->index;
   2438     }
   2439 
   2440   htab->top_index = top_index;
   2441   amt = sizeof (asection *) * (top_index + 1);
   2442   input_list = bfd_malloc (amt);
   2443   htab->input_list = input_list;
   2444   if (input_list == NULL)
   2445     return -1;
   2446 
   2447   /* For sections we aren't interested in, mark their entries with a
   2448      value we can check later.  */
   2449   list = input_list + top_index;
   2450   do
   2451     *list = bfd_abs_section_ptr;
   2452   while (list-- != input_list);
   2453 
   2454   for (section = output_bfd->sections;
   2455        section != NULL;
   2456        section = section->next)
   2457     {
   2458       if ((section->flags & SEC_CODE) != 0)
   2459 	input_list[section->index] = NULL;
   2460     }
   2461 
   2462   return 1;
   2463 }
   2464 
   2465 /* The linker repeatedly calls this function for each input section,
   2466    in the order that input sections are linked into output sections.
   2467    Build lists of input sections to determine groupings between which
   2468    we may insert linker stubs.  */
   2469 
   2470 void
   2471 elf32_hppa_next_input_section (struct bfd_link_info *info, asection *isec)
   2472 {
   2473   struct elf32_hppa_link_hash_table *htab = hppa_link_hash_table (info);
   2474 
   2475   if (htab == NULL)
   2476     return;
   2477 
   2478   if (isec->output_section->index <= htab->top_index)
   2479     {
   2480       asection **list = htab->input_list + isec->output_section->index;
   2481       if (*list != bfd_abs_section_ptr)
   2482 	{
   2483 	  /* Steal the link_sec pointer for our list.  */
   2484 #define PREV_SEC(sec) (htab->stub_group[(sec)->id].link_sec)
   2485 	  /* This happens to make the list in reverse order,
   2486 	     which is what we want.  */
   2487 	  PREV_SEC (isec) = *list;
   2488 	  *list = isec;
   2489 	}
   2490     }
   2491 }
   2492 
   2493 /* See whether we can group stub sections together.  Grouping stub
   2494    sections may result in fewer stubs.  More importantly, we need to
   2495    put all .init* and .fini* stubs at the beginning of the .init or
   2496    .fini output sections respectively, because glibc splits the
   2497    _init and _fini functions into multiple parts.  Putting a stub in
   2498    the middle of a function is not a good idea.  */
   2499 
   2500 static void
   2501 group_sections (struct elf32_hppa_link_hash_table *htab,
   2502 		bfd_size_type stub_group_size,
   2503 		bfd_boolean stubs_always_before_branch)
   2504 {
   2505   asection **list = htab->input_list + htab->top_index;
   2506   do
   2507     {
   2508       asection *tail = *list;
   2509       if (tail == bfd_abs_section_ptr)
   2510 	continue;
   2511       while (tail != NULL)
   2512 	{
   2513 	  asection *curr;
   2514 	  asection *prev;
   2515 	  bfd_size_type total;
   2516 	  bfd_boolean big_sec;
   2517 
   2518 	  curr = tail;
   2519 	  total = tail->size;
   2520 	  big_sec = total >= stub_group_size;
   2521 
   2522 	  while ((prev = PREV_SEC (curr)) != NULL
   2523 		 && ((total += curr->output_offset - prev->output_offset)
   2524 		     < stub_group_size))
   2525 	    curr = prev;
   2526 
   2527 	  /* OK, the size from the start of CURR to the end is less
   2528 	     than 240000 bytes and thus can be handled by one stub
   2529 	     section.  (or the tail section is itself larger than
   2530 	     240000 bytes, in which case we may be toast.)
   2531 	     We should really be keeping track of the total size of
   2532 	     stubs added here, as stubs contribute to the final output
   2533 	     section size.  That's a little tricky, and this way will
   2534 	     only break if stubs added total more than 22144 bytes, or
   2535 	     2768 long branch stubs.  It seems unlikely for more than
   2536 	     2768 different functions to be called, especially from
   2537 	     code only 240000 bytes long.  This limit used to be
   2538 	     250000, but c++ code tends to generate lots of little
   2539 	     functions, and sometimes violated the assumption.  */
   2540 	  do
   2541 	    {
   2542 	      prev = PREV_SEC (tail);
   2543 	      /* Set up this stub group.  */
   2544 	      htab->stub_group[tail->id].link_sec = curr;
   2545 	    }
   2546 	  while (tail != curr && (tail = prev) != NULL);
   2547 
   2548 	  /* But wait, there's more!  Input sections up to 240000
   2549 	     bytes before the stub section can be handled by it too.
   2550 	     Don't do this if we have a really large section after the
   2551 	     stubs, as adding more stubs increases the chance that
   2552 	     branches may not reach into the stub section.  */
   2553 	  if (!stubs_always_before_branch && !big_sec)
   2554 	    {
   2555 	      total = 0;
   2556 	      while (prev != NULL
   2557 		     && ((total += tail->output_offset - prev->output_offset)
   2558 			 < stub_group_size))
   2559 		{
   2560 		  tail = prev;
   2561 		  prev = PREV_SEC (tail);
   2562 		  htab->stub_group[tail->id].link_sec = curr;
   2563 		}
   2564 	    }
   2565 	  tail = prev;
   2566 	}
   2567     }
   2568   while (list-- != htab->input_list);
   2569   free (htab->input_list);
   2570 #undef PREV_SEC
   2571 }
   2572 
   2573 /* Read in all local syms for all input bfds, and create hash entries
   2574    for export stubs if we are building a multi-subspace shared lib.
   2575    Returns -1 on error, 1 if export stubs created, 0 otherwise.  */
   2576 
   2577 static int
   2578 get_local_syms (bfd *output_bfd, bfd *input_bfd, struct bfd_link_info *info)
   2579 {
   2580   unsigned int bfd_indx;
   2581   Elf_Internal_Sym *local_syms, **all_local_syms;
   2582   int stub_changed = 0;
   2583   struct elf32_hppa_link_hash_table *htab = hppa_link_hash_table (info);
   2584 
   2585   if (htab == NULL)
   2586     return -1;
   2587 
   2588   /* We want to read in symbol extension records only once.  To do this
   2589      we need to read in the local symbols in parallel and save them for
   2590      later use; so hold pointers to the local symbols in an array.  */
   2591   bfd_size_type amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count;
   2592   all_local_syms = bfd_zmalloc (amt);
   2593   htab->all_local_syms = all_local_syms;
   2594   if (all_local_syms == NULL)
   2595     return -1;
   2596 
   2597   /* Walk over all the input BFDs, swapping in local symbols.
   2598      If we are creating a shared library, create hash entries for the
   2599      export stubs.  */
   2600   for (bfd_indx = 0;
   2601        input_bfd != NULL;
   2602        input_bfd = input_bfd->link.next, bfd_indx++)
   2603     {
   2604       Elf_Internal_Shdr *symtab_hdr;
   2605 
   2606       /* We'll need the symbol table in a second.  */
   2607       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   2608       if (symtab_hdr->sh_info == 0)
   2609 	continue;
   2610 
   2611       /* We need an array of the local symbols attached to the input bfd.  */
   2612       local_syms = (Elf_Internal_Sym *) symtab_hdr->contents;
   2613       if (local_syms == NULL)
   2614 	{
   2615 	  local_syms = bfd_elf_get_elf_syms (input_bfd, symtab_hdr,
   2616 					     symtab_hdr->sh_info, 0,
   2617 					     NULL, NULL, NULL);
   2618 	  /* Cache them for elf_link_input_bfd.  */
   2619 	  symtab_hdr->contents = (unsigned char *) local_syms;
   2620 	}
   2621       if (local_syms == NULL)
   2622 	return -1;
   2623 
   2624       all_local_syms[bfd_indx] = local_syms;
   2625 
   2626       if (bfd_link_pic (info) && htab->multi_subspace)
   2627 	{
   2628 	  struct elf_link_hash_entry **eh_syms;
   2629 	  struct elf_link_hash_entry **eh_symend;
   2630 	  unsigned int symcount;
   2631 
   2632 	  symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
   2633 		      - symtab_hdr->sh_info);
   2634 	  eh_syms = (struct elf_link_hash_entry **) elf_sym_hashes (input_bfd);
   2635 	  eh_symend = (struct elf_link_hash_entry **) (eh_syms + symcount);
   2636 
   2637 	  /* Look through the global syms for functions;  We need to
   2638 	     build export stubs for all globally visible functions.  */
   2639 	  for (; eh_syms < eh_symend; eh_syms++)
   2640 	    {
   2641 	      struct elf32_hppa_link_hash_entry *hh;
   2642 
   2643 	      hh = hppa_elf_hash_entry (*eh_syms);
   2644 
   2645 	      while (hh->eh.root.type == bfd_link_hash_indirect
   2646 		     || hh->eh.root.type == bfd_link_hash_warning)
   2647 		   hh = hppa_elf_hash_entry (hh->eh.root.u.i.link);
   2648 
   2649 	      /* At this point in the link, undefined syms have been
   2650 		 resolved, so we need to check that the symbol was
   2651 		 defined in this BFD.  */
   2652 	      if ((hh->eh.root.type == bfd_link_hash_defined
   2653 		   || hh->eh.root.type == bfd_link_hash_defweak)
   2654 		  && hh->eh.type == STT_FUNC
   2655 		  && hh->eh.root.u.def.section->output_section != NULL
   2656 		  && (hh->eh.root.u.def.section->output_section->owner
   2657 		      == output_bfd)
   2658 		  && hh->eh.root.u.def.section->owner == input_bfd
   2659 		  && hh->eh.def_regular
   2660 		  && !hh->eh.forced_local
   2661 		  && ELF_ST_VISIBILITY (hh->eh.other) == STV_DEFAULT)
   2662 		{
   2663 		  asection *sec;
   2664 		  const char *stub_name;
   2665 		  struct elf32_hppa_stub_hash_entry *hsh;
   2666 
   2667 		  sec = hh->eh.root.u.def.section;
   2668 		  stub_name = hh_name (hh);
   2669 		  hsh = hppa_stub_hash_lookup (&htab->bstab,
   2670 						      stub_name,
   2671 						      FALSE, FALSE);
   2672 		  if (hsh == NULL)
   2673 		    {
   2674 		      hsh = hppa_add_stub (stub_name, sec, htab);
   2675 		      if (!hsh)
   2676 			return -1;
   2677 
   2678 		      hsh->target_value = hh->eh.root.u.def.value;
   2679 		      hsh->target_section = hh->eh.root.u.def.section;
   2680 		      hsh->stub_type = hppa_stub_export;
   2681 		      hsh->hh = hh;
   2682 		      stub_changed = 1;
   2683 		    }
   2684 		  else
   2685 		    {
   2686 		      /* xgettext:c-format */
   2687 		      _bfd_error_handler (_("%pB: duplicate export stub %s"),
   2688 					  input_bfd, stub_name);
   2689 		    }
   2690 		}
   2691 	    }
   2692 	}
   2693     }
   2694 
   2695   return stub_changed;
   2696 }
   2697 
   2698 /* Determine and set the size of the stub section for a final link.
   2699 
   2700    The basic idea here is to examine all the relocations looking for
   2701    PC-relative calls to a target that is unreachable with a "bl"
   2702    instruction.  */
   2703 
   2704 bfd_boolean
   2705 elf32_hppa_size_stubs
   2706   (bfd *output_bfd, bfd *stub_bfd, struct bfd_link_info *info,
   2707    bfd_boolean multi_subspace, bfd_signed_vma group_size,
   2708    asection * (*add_stub_section) (const char *, asection *),
   2709    void (*layout_sections_again) (void))
   2710 {
   2711   bfd_size_type stub_group_size;
   2712   bfd_boolean stubs_always_before_branch;
   2713   bfd_boolean stub_changed;
   2714   struct elf32_hppa_link_hash_table *htab = hppa_link_hash_table (info);
   2715 
   2716   if (htab == NULL)
   2717     return FALSE;
   2718 
   2719   /* Stash our params away.  */
   2720   htab->stub_bfd = stub_bfd;
   2721   htab->multi_subspace = multi_subspace;
   2722   htab->add_stub_section = add_stub_section;
   2723   htab->layout_sections_again = layout_sections_again;
   2724   stubs_always_before_branch = group_size < 0;
   2725   if (group_size < 0)
   2726     stub_group_size = -group_size;
   2727   else
   2728     stub_group_size = group_size;
   2729   if (stub_group_size == 1)
   2730     {
   2731       /* Default values.  */
   2732       if (stubs_always_before_branch)
   2733 	{
   2734 	  stub_group_size = 7680000;
   2735 	  if (htab->has_17bit_branch || htab->multi_subspace)
   2736 	    stub_group_size = 240000;
   2737 	  if (htab->has_12bit_branch)
   2738 	    stub_group_size = 7500;
   2739 	}
   2740       else
   2741 	{
   2742 	  stub_group_size = 6971392;
   2743 	  if (htab->has_17bit_branch || htab->multi_subspace)
   2744 	    stub_group_size = 217856;
   2745 	  if (htab->has_12bit_branch)
   2746 	    stub_group_size = 6808;
   2747 	}
   2748     }
   2749 
   2750   group_sections (htab, stub_group_size, stubs_always_before_branch);
   2751 
   2752   switch (get_local_syms (output_bfd, info->input_bfds, info))
   2753     {
   2754     default:
   2755       if (htab->all_local_syms)
   2756 	goto error_ret_free_local;
   2757       return FALSE;
   2758 
   2759     case 0:
   2760       stub_changed = FALSE;
   2761       break;
   2762 
   2763     case 1:
   2764       stub_changed = TRUE;
   2765       break;
   2766     }
   2767 
   2768   while (1)
   2769     {
   2770       bfd *input_bfd;
   2771       unsigned int bfd_indx;
   2772       asection *stub_sec;
   2773 
   2774       for (input_bfd = info->input_bfds, bfd_indx = 0;
   2775 	   input_bfd != NULL;
   2776 	   input_bfd = input_bfd->link.next, bfd_indx++)
   2777 	{
   2778 	  Elf_Internal_Shdr *symtab_hdr;
   2779 	  asection *section;
   2780 	  Elf_Internal_Sym *local_syms;
   2781 
   2782 	  /* We'll need the symbol table in a second.  */
   2783 	  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   2784 	  if (symtab_hdr->sh_info == 0)
   2785 	    continue;
   2786 
   2787 	  local_syms = htab->all_local_syms[bfd_indx];
   2788 
   2789 	  /* Walk over each section attached to the input bfd.  */
   2790 	  for (section = input_bfd->sections;
   2791 	       section != NULL;
   2792 	       section = section->next)
   2793 	    {
   2794 	      Elf_Internal_Rela *internal_relocs, *irelaend, *irela;
   2795 
   2796 	      /* If there aren't any relocs, then there's nothing more
   2797 		 to do.  */
   2798 	      if ((section->flags & SEC_RELOC) == 0
   2799 		  || (section->flags & SEC_ALLOC) == 0
   2800 		  || (section->flags & SEC_LOAD) == 0
   2801 		  || (section->flags & SEC_CODE) == 0
   2802 		  || section->reloc_count == 0)
   2803 		continue;
   2804 
   2805 	      /* If this section is a link-once section that will be
   2806 		 discarded, then don't create any stubs.  */
   2807 	      if (section->output_section == NULL
   2808 		  || section->output_section->owner != output_bfd)
   2809 		continue;
   2810 
   2811 	      /* Get the relocs.  */
   2812 	      internal_relocs
   2813 		= _bfd_elf_link_read_relocs (input_bfd, section, NULL, NULL,
   2814 					     info->keep_memory);
   2815 	      if (internal_relocs == NULL)
   2816 		goto error_ret_free_local;
   2817 
   2818 	      /* Now examine each relocation.  */
   2819 	      irela = internal_relocs;
   2820 	      irelaend = irela + section->reloc_count;
   2821 	      for (; irela < irelaend; irela++)
   2822 		{
   2823 		  unsigned int r_type, r_indx;
   2824 		  enum elf32_hppa_stub_type stub_type;
   2825 		  struct elf32_hppa_stub_hash_entry *hsh;
   2826 		  asection *sym_sec;
   2827 		  bfd_vma sym_value;
   2828 		  bfd_vma destination;
   2829 		  struct elf32_hppa_link_hash_entry *hh;
   2830 		  char *stub_name;
   2831 		  const asection *id_sec;
   2832 
   2833 		  r_type = ELF32_R_TYPE (irela->r_info);
   2834 		  r_indx = ELF32_R_SYM (irela->r_info);
   2835 
   2836 		  if (r_type >= (unsigned int) R_PARISC_UNIMPLEMENTED)
   2837 		    {
   2838 		      bfd_set_error (bfd_error_bad_value);
   2839 		    error_ret_free_internal:
   2840 		      if (elf_section_data (section)->relocs == NULL)
   2841 			free (internal_relocs);
   2842 		      goto error_ret_free_local;
   2843 		    }
   2844 
   2845 		  /* Only look for stubs on call instructions.  */
   2846 		  if (r_type != (unsigned int) R_PARISC_PCREL12F
   2847 		      && r_type != (unsigned int) R_PARISC_PCREL17F
   2848 		      && r_type != (unsigned int) R_PARISC_PCREL22F)
   2849 		    continue;
   2850 
   2851 		  /* Now determine the call target, its name, value,
   2852 		     section.  */
   2853 		  sym_sec = NULL;
   2854 		  sym_value = 0;
   2855 		  destination = -1;
   2856 		  hh = NULL;
   2857 		  if (r_indx < symtab_hdr->sh_info)
   2858 		    {
   2859 		      /* It's a local symbol.  */
   2860 		      Elf_Internal_Sym *sym;
   2861 		      Elf_Internal_Shdr *hdr;
   2862 		      unsigned int shndx;
   2863 
   2864 		      sym = local_syms + r_indx;
   2865 		      if (ELF_ST_TYPE (sym->st_info) != STT_SECTION)
   2866 			sym_value = sym->st_value;
   2867 		      shndx = sym->st_shndx;
   2868 		      if (shndx < elf_numsections (input_bfd))
   2869 			{
   2870 			  hdr = elf_elfsections (input_bfd)[shndx];
   2871 			  sym_sec = hdr->bfd_section;
   2872 			  destination = (sym_value + irela->r_addend
   2873 					 + sym_sec->output_offset
   2874 					 + sym_sec->output_section->vma);
   2875 			}
   2876 		    }
   2877 		  else
   2878 		    {
   2879 		      /* It's an external symbol.  */
   2880 		      int e_indx;
   2881 
   2882 		      e_indx = r_indx - symtab_hdr->sh_info;
   2883 		      hh = hppa_elf_hash_entry (elf_sym_hashes (input_bfd)[e_indx]);
   2884 
   2885 		      while (hh->eh.root.type == bfd_link_hash_indirect
   2886 			     || hh->eh.root.type == bfd_link_hash_warning)
   2887 			hh = hppa_elf_hash_entry (hh->eh.root.u.i.link);
   2888 
   2889 		      if (hh->eh.root.type == bfd_link_hash_defined
   2890 			  || hh->eh.root.type == bfd_link_hash_defweak)
   2891 			{
   2892 			  sym_sec = hh->eh.root.u.def.section;
   2893 			  sym_value = hh->eh.root.u.def.value;
   2894 			  if (sym_sec->output_section != NULL)
   2895 			    destination = (sym_value + irela->r_addend
   2896 					   + sym_sec->output_offset
   2897 					   + sym_sec->output_section->vma);
   2898 			}
   2899 		      else if (hh->eh.root.type == bfd_link_hash_undefweak)
   2900 			{
   2901 			  if (! bfd_link_pic (info))
   2902 			    continue;
   2903 			}
   2904 		      else if (hh->eh.root.type == bfd_link_hash_undefined)
   2905 			{
   2906 			  if (! (info->unresolved_syms_in_objects == RM_IGNORE
   2907 				 && (ELF_ST_VISIBILITY (hh->eh.other)
   2908 				     == STV_DEFAULT)
   2909 				 && hh->eh.type != STT_PARISC_MILLI))
   2910 			    continue;
   2911 			}
   2912 		      else
   2913 			{
   2914 			  bfd_set_error (bfd_error_bad_value);
   2915 			  goto error_ret_free_internal;
   2916 			}
   2917 		    }
   2918 
   2919 		  /* Determine what (if any) linker stub is needed.  */
   2920 		  stub_type = hppa_type_of_stub (section, irela, hh,
   2921 						 destination, info);
   2922 		  if (stub_type == hppa_stub_none)
   2923 		    continue;
   2924 
   2925 		  /* Support for grouping stub sections.  */
   2926 		  id_sec = htab->stub_group[section->id].link_sec;
   2927 
   2928 		  /* Get the name of this stub.  */
   2929 		  stub_name = hppa_stub_name (id_sec, sym_sec, hh, irela);
   2930 		  if (!stub_name)
   2931 		    goto error_ret_free_internal;
   2932 
   2933 		  hsh = hppa_stub_hash_lookup (&htab->bstab,
   2934 						      stub_name,
   2935 						      FALSE, FALSE);
   2936 		  if (hsh != NULL)
   2937 		    {
   2938 		      /* The proper stub has already been created.  */
   2939 		      free (stub_name);
   2940 		      continue;
   2941 		    }
   2942 
   2943 		  hsh = hppa_add_stub (stub_name, section, htab);
   2944 		  if (hsh == NULL)
   2945 		    {
   2946 		      free (stub_name);
   2947 		      goto error_ret_free_internal;
   2948 		    }
   2949 
   2950 		  hsh->target_value = sym_value;
   2951 		  hsh->target_section = sym_sec;
   2952 		  hsh->stub_type = stub_type;
   2953 		  if (bfd_link_pic (info))
   2954 		    {
   2955 		      if (stub_type == hppa_stub_import)
   2956 			hsh->stub_type = hppa_stub_import_shared;
   2957 		      else if (stub_type == hppa_stub_long_branch)
   2958 			hsh->stub_type = hppa_stub_long_branch_shared;
   2959 		    }
   2960 		  hsh->hh = hh;
   2961 		  stub_changed = TRUE;
   2962 		}
   2963 
   2964 	      /* We're done with the internal relocs, free them.  */
   2965 	      if (elf_section_data (section)->relocs == NULL)
   2966 		free (internal_relocs);
   2967 	    }
   2968 	}
   2969 
   2970       if (!stub_changed)
   2971 	break;
   2972 
   2973       /* OK, we've added some stubs.  Find out the new size of the
   2974 	 stub sections.  */
   2975       for (stub_sec = htab->stub_bfd->sections;
   2976 	   stub_sec != NULL;
   2977 	   stub_sec = stub_sec->next)
   2978 	if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
   2979 	  stub_sec->size = 0;
   2980 
   2981       bfd_hash_traverse (&htab->bstab, hppa_size_one_stub, htab);
   2982 
   2983       /* Ask the linker to do its stuff.  */
   2984       (*htab->layout_sections_again) ();
   2985       stub_changed = FALSE;
   2986     }
   2987 
   2988   free (htab->all_local_syms);
   2989   return TRUE;
   2990 
   2991  error_ret_free_local:
   2992   free (htab->all_local_syms);
   2993   return FALSE;
   2994 }
   2995 
   2996 /* For a final link, this function is called after we have sized the
   2997    stubs to provide a value for __gp.  */
   2998 
   2999 bfd_boolean
   3000 elf32_hppa_set_gp (bfd *abfd, struct bfd_link_info *info)
   3001 {
   3002   struct bfd_link_hash_entry *h;
   3003   asection *sec = NULL;
   3004   bfd_vma gp_val = 0;
   3005 
   3006   h = bfd_link_hash_lookup (info->hash, "$global$", FALSE, FALSE, FALSE);
   3007 
   3008   if (h != NULL
   3009       && (h->type == bfd_link_hash_defined
   3010 	  || h->type == bfd_link_hash_defweak))
   3011     {
   3012       gp_val = h->u.def.value;
   3013       sec = h->u.def.section;
   3014     }
   3015   else
   3016     {
   3017       asection *splt = bfd_get_section_by_name (abfd, ".plt");
   3018       asection *sgot = bfd_get_section_by_name (abfd, ".got");
   3019 
   3020       /* Choose to point our LTP at, in this order, one of .plt, .got,
   3021 	 or .data, if these sections exist.  In the case of choosing
   3022 	 .plt try to make the LTP ideal for addressing anywhere in the
   3023 	 .plt or .got with a 14 bit signed offset.  Typically, the end
   3024 	 of the .plt is the start of the .got, so choose .plt + 0x2000
   3025 	 if either the .plt or .got is larger than 0x2000.  If both
   3026 	 the .plt and .got are smaller than 0x2000, choose the end of
   3027 	 the .plt section.  */
   3028       sec = strcmp (bfd_get_target (abfd), "elf32-hppa-netbsd") == 0
   3029 	  ? NULL : splt;
   3030       if (sec != NULL)
   3031 	{
   3032 	  gp_val = sec->size;
   3033 	  if (gp_val > 0x2000 || (sgot && sgot->size > 0x2000))
   3034 	    {
   3035 	      gp_val = 0x2000;
   3036 	    }
   3037 	}
   3038       else
   3039 	{
   3040 	  sec = sgot;
   3041 	  if (sec != NULL)
   3042 	    {
   3043 	      if (strcmp (bfd_get_target (abfd), "elf32-hppa-netbsd") != 0)
   3044 		{
   3045 		  /* We know we don't have a .plt.  If .got is large,
   3046 		     offset our LTP.  */
   3047 		  if (sec->size > 0x2000)
   3048 		    gp_val = 0x2000;
   3049 		}
   3050 	    }
   3051 	  else
   3052 	    {
   3053 	      /* No .plt or .got.  Who cares what the LTP is?  */
   3054 	      sec = bfd_get_section_by_name (abfd, ".data");
   3055 	    }
   3056 	}
   3057 
   3058       if (h != NULL)
   3059 	{
   3060 	  h->type = bfd_link_hash_defined;
   3061 	  h->u.def.value = gp_val;
   3062 	  if (sec != NULL)
   3063 	    h->u.def.section = sec;
   3064 	  else
   3065 	    h->u.def.section = bfd_abs_section_ptr;
   3066 	}
   3067     }
   3068 
   3069   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
   3070     {
   3071       if (sec != NULL && sec->output_section != NULL)
   3072 	gp_val += sec->output_section->vma + sec->output_offset;
   3073 
   3074       elf_gp (abfd) = gp_val;
   3075     }
   3076   return TRUE;
   3077 }
   3078 
   3079 /* Build all the stubs associated with the current output file.  The
   3080    stubs are kept in a hash table attached to the main linker hash
   3081    table.  We also set up the .plt entries for statically linked PIC
   3082    functions here.  This function is called via hppaelf_finish in the
   3083    linker.  */
   3084 
   3085 bfd_boolean
   3086 elf32_hppa_build_stubs (struct bfd_link_info *info)
   3087 {
   3088   asection *stub_sec;
   3089   struct bfd_hash_table *table;
   3090   struct elf32_hppa_link_hash_table *htab;
   3091 
   3092   htab = hppa_link_hash_table (info);
   3093   if (htab == NULL)
   3094     return FALSE;
   3095 
   3096   for (stub_sec = htab->stub_bfd->sections;
   3097        stub_sec != NULL;
   3098        stub_sec = stub_sec->next)
   3099     if ((stub_sec->flags & SEC_LINKER_CREATED) == 0
   3100 	&& stub_sec->size != 0)
   3101       {
   3102 	/* Allocate memory to hold the linker stubs.  */
   3103 	stub_sec->contents = bfd_zalloc (htab->stub_bfd, stub_sec->size);
   3104 	if (stub_sec->contents == NULL)
   3105 	  return FALSE;
   3106 	stub_sec->size = 0;
   3107       }
   3108 
   3109   /* Build the stubs as directed by the stub hash table.  */
   3110   table = &htab->bstab;
   3111   bfd_hash_traverse (table, hppa_build_one_stub, info);
   3112 
   3113   return TRUE;
   3114 }
   3115 
   3116 /* Return the base vma address which should be subtracted from the real
   3117    address when resolving a dtpoff relocation.
   3118    This is PT_TLS segment p_vaddr.  */
   3119 
   3120 static bfd_vma
   3121 dtpoff_base (struct bfd_link_info *info)
   3122 {
   3123   /* If tls_sec is NULL, we should have signalled an error already.  */
   3124   if (elf_hash_table (info)->tls_sec == NULL)
   3125     return 0;
   3126   return elf_hash_table (info)->tls_sec->vma;
   3127 }
   3128 
   3129 /* Return the relocation value for R_PARISC_TLS_TPOFF*..  */
   3130 
   3131 static bfd_vma
   3132 tpoff (struct bfd_link_info *info, bfd_vma address)
   3133 {
   3134   struct elf_link_hash_table *htab = elf_hash_table (info);
   3135 
   3136   /* If tls_sec is NULL, we should have signalled an error already.  */
   3137   if (htab->tls_sec == NULL)
   3138     return 0;
   3139   /* hppa TLS ABI is variant I and static TLS block start just after
   3140      tcbhead structure which has 2 pointer fields.  */
   3141   return (address - htab->tls_sec->vma
   3142 	  + align_power ((bfd_vma) 8, htab->tls_sec->alignment_power));
   3143 }
   3144 
   3145 /* Perform a final link.  */
   3146 
   3147 static bfd_boolean
   3148 elf32_hppa_final_link (bfd *abfd, struct bfd_link_info *info)
   3149 {
   3150   struct stat buf;
   3151 
   3152   /* Invoke the regular ELF linker to do all the work.  */
   3153   if (!bfd_elf_final_link (abfd, info))
   3154     return FALSE;
   3155 
   3156   /* If we're producing a final executable, sort the contents of the
   3157      unwind section.  */
   3158   if (bfd_link_relocatable (info))
   3159     return TRUE;
   3160 
   3161   /* Do not attempt to sort non-regular files.  This is here
   3162      especially for configure scripts and kernel builds which run
   3163      tests with "ld [...] -o /dev/null".  */
   3164   if (stat (abfd->filename, &buf) != 0
   3165       || !S_ISREG(buf.st_mode))
   3166     return TRUE;
   3167 
   3168   return elf_hppa_sort_unwind (abfd);
   3169 }
   3170 
   3171 /* Record the lowest address for the data and text segments.  */
   3172 
   3173 static void
   3174 hppa_record_segment_addr (bfd *abfd, asection *section, void *data)
   3175 {
   3176   struct elf32_hppa_link_hash_table *htab;
   3177 
   3178   htab = (struct elf32_hppa_link_hash_table*) data;
   3179   if (htab == NULL)
   3180     return;
   3181 
   3182   if ((section->flags & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
   3183     {
   3184       bfd_vma value;
   3185       Elf_Internal_Phdr *p;
   3186 
   3187       p = _bfd_elf_find_segment_containing_section (abfd, section->output_section);
   3188       BFD_ASSERT (p != NULL);
   3189       value = p->p_vaddr;
   3190 
   3191       if ((section->flags & SEC_READONLY) != 0)
   3192 	{
   3193 	  if (value < htab->text_segment_base)
   3194 	    htab->text_segment_base = value;
   3195 	}
   3196       else
   3197 	{
   3198 	  if (value < htab->data_segment_base)
   3199 	    htab->data_segment_base = value;
   3200 	}
   3201     }
   3202 }
   3203 
   3204 /* Perform a relocation as part of a final link.  */
   3205 
   3206 static bfd_reloc_status_type
   3207 final_link_relocate (asection *input_section,
   3208 		     bfd_byte *contents,
   3209 		     const Elf_Internal_Rela *rela,
   3210 		     bfd_vma value,
   3211 		     struct elf32_hppa_link_hash_table *htab,
   3212 		     asection *sym_sec,
   3213 		     struct elf32_hppa_link_hash_entry *hh,
   3214 		     struct bfd_link_info *info)
   3215 {
   3216   int insn;
   3217   unsigned int r_type = ELF32_R_TYPE (rela->r_info);
   3218   unsigned int orig_r_type = r_type;
   3219   reloc_howto_type *howto = elf_hppa_howto_table + r_type;
   3220   int r_format = howto->bitsize;
   3221   enum hppa_reloc_field_selector_type_alt r_field;
   3222   bfd *input_bfd = input_section->owner;
   3223   bfd_vma offset = rela->r_offset;
   3224   bfd_vma max_branch_offset = 0;
   3225   bfd_byte *hit_data = contents + offset;
   3226   bfd_signed_vma addend = rela->r_addend;
   3227   bfd_vma location;
   3228   struct elf32_hppa_stub_hash_entry *hsh = NULL;
   3229   int val;
   3230 
   3231   if (r_type == R_PARISC_NONE)
   3232     return bfd_reloc_ok;
   3233 
   3234   insn = bfd_get_32 (input_bfd, hit_data);
   3235 
   3236   /* Find out where we are and where we're going.  */
   3237   location = (offset +
   3238 	      input_section->output_offset +
   3239 	      input_section->output_section->vma);
   3240 
   3241   /* If we are not building a shared library, convert DLTIND relocs to
   3242      DPREL relocs.  */
   3243   if (!bfd_link_pic (info))
   3244     {
   3245       switch (r_type)
   3246 	{
   3247 	  case R_PARISC_DLTIND21L:
   3248 	  case R_PARISC_TLS_GD21L:
   3249 	  case R_PARISC_TLS_LDM21L:
   3250 	  case R_PARISC_TLS_IE21L:
   3251 	    r_type = R_PARISC_DPREL21L;
   3252 	    break;
   3253 
   3254 	  case R_PARISC_DLTIND14R:
   3255 	  case R_PARISC_TLS_GD14R:
   3256 	  case R_PARISC_TLS_LDM14R:
   3257 	  case R_PARISC_TLS_IE14R:
   3258 	    r_type = R_PARISC_DPREL14R;
   3259 	    break;
   3260 
   3261 	  case R_PARISC_DLTIND14F:
   3262 	    r_type = R_PARISC_DPREL14F;
   3263 	    break;
   3264 	}
   3265     }
   3266 
   3267   switch (r_type)
   3268     {
   3269     case R_PARISC_PCREL12F:
   3270     case R_PARISC_PCREL17F:
   3271     case R_PARISC_PCREL22F:
   3272       /* If this call should go via the plt, find the import stub in
   3273 	 the stub hash.  */
   3274       if (sym_sec == NULL
   3275 	  || sym_sec->output_section == NULL
   3276 	  || (hh != NULL
   3277 	      && hh->eh.plt.offset != (bfd_vma) -1
   3278 	      && hh->eh.dynindx != -1
   3279 	      && !hh->plabel
   3280 	      && (bfd_link_pic (info)
   3281 		  || !hh->eh.def_regular
   3282 		  || hh->eh.root.type == bfd_link_hash_defweak)))
   3283 	{
   3284 	  hsh = hppa_get_stub_entry (input_section, sym_sec,
   3285 				     hh, rela, htab);
   3286 	  if (hsh != NULL)
   3287 	    {
   3288 	      value = (hsh->stub_offset
   3289 		       + hsh->stub_sec->output_offset
   3290 		       + hsh->stub_sec->output_section->vma);
   3291 	      addend = 0;
   3292 	    }
   3293 	  else if (sym_sec == NULL && hh != NULL
   3294 		   && hh->eh.root.type == bfd_link_hash_undefweak)
   3295 	    {
   3296 	      /* It's OK if undefined weak.  Calls to undefined weak
   3297 		 symbols behave as if the "called" function
   3298 		 immediately returns.  We can thus call to a weak
   3299 		 function without first checking whether the function
   3300 		 is defined.  */
   3301 	      value = location;
   3302 	      addend = 8;
   3303 	    }
   3304 	  else
   3305 	    return bfd_reloc_undefined;
   3306 	}
   3307       /* Fall thru.  */
   3308 
   3309     case R_PARISC_PCREL21L:
   3310     case R_PARISC_PCREL17C:
   3311     case R_PARISC_PCREL17R:
   3312     case R_PARISC_PCREL14R:
   3313     case R_PARISC_PCREL14F:
   3314     case R_PARISC_PCREL32:
   3315       /* Make it a pc relative offset.  */
   3316       value -= location;
   3317       addend -= 8;
   3318       break;
   3319 
   3320     case R_PARISC_DPREL21L:
   3321     case R_PARISC_DPREL14R:
   3322     case R_PARISC_DPREL14F:
   3323       /* Convert instructions that use the linkage table pointer (r19) to
   3324 	 instructions that use the global data pointer (dp).  This is the
   3325 	 most efficient way of using PIC code in an incomplete executable,
   3326 	 but the user must follow the standard runtime conventions for
   3327 	 accessing data for this to work.  */
   3328       if (orig_r_type != r_type)
   3329 	{
   3330 	  if (r_type == R_PARISC_DPREL21L)
   3331 	    {
   3332 	      /* GCC sometimes uses a register other than r19 for the
   3333 		 operation, so we must convert any addil instruction
   3334 		 that uses this relocation.  */
   3335 	      if ((insn & 0xfc000000) == ((int) OP_ADDIL << 26))
   3336 		insn = ADDIL_DP;
   3337 	      else
   3338 		/* We must have a ldil instruction.  It's too hard to find
   3339 		   and convert the associated add instruction, so issue an
   3340 		   error.  */
   3341 		_bfd_error_handler
   3342 		  /* xgettext:c-format */
   3343 		  (_("%pB(%pA+%#" PRIx64 "): %s fixup for insn %#x "
   3344 		     "is not supported in a non-shared link"),
   3345 		   input_bfd,
   3346 		   input_section,
   3347 		   (uint64_t) offset,
   3348 		   howto->name,
   3349 		   insn);
   3350 	    }
   3351 	  else if (r_type == R_PARISC_DPREL14F)
   3352 	    {
   3353 	      /* This must be a format 1 load/store.  Change the base
   3354 		 register to dp.  */
   3355 	      insn = (insn & 0xfc1ffff) | (27 << 21);
   3356 	    }
   3357 	}
   3358 
   3359       /* For all the DP relative relocations, we need to examine the symbol's
   3360 	 section.  If it has no section or if it's a code section, then
   3361 	 "data pointer relative" makes no sense.  In that case we don't
   3362 	 adjust the "value", and for 21 bit addil instructions, we change the
   3363 	 source addend register from %dp to %r0.  This situation commonly
   3364 	 arises for undefined weak symbols and when a variable's "constness"
   3365 	 is declared differently from the way the variable is defined.  For
   3366 	 instance: "extern int foo" with foo defined as "const int foo".  */
   3367       if (sym_sec == NULL || (sym_sec->flags & SEC_CODE) != 0)
   3368 	{
   3369 	  if ((insn & ((0x3f << 26) | (0x1f << 21)))
   3370 	      == (((int) OP_ADDIL << 26) | (27 << 21)))
   3371 	    {
   3372 	      insn &= ~ (0x1f << 21);
   3373 	    }
   3374 	  /* Now try to make things easy for the dynamic linker.  */
   3375 
   3376 	  break;
   3377 	}
   3378       /* Fall thru.  */
   3379 
   3380     case R_PARISC_DLTIND21L:
   3381     case R_PARISC_DLTIND14R:
   3382     case R_PARISC_DLTIND14F:
   3383     case R_PARISC_TLS_GD21L:
   3384     case R_PARISC_TLS_LDM21L:
   3385     case R_PARISC_TLS_IE21L:
   3386     case R_PARISC_TLS_GD14R:
   3387     case R_PARISC_TLS_LDM14R:
   3388     case R_PARISC_TLS_IE14R:
   3389       value -= elf_gp (input_section->output_section->owner);
   3390       break;
   3391 
   3392     case R_PARISC_SEGREL32:
   3393       if ((sym_sec->flags & SEC_CODE) != 0)
   3394 	value -= htab->text_segment_base;
   3395       else
   3396 	value -= htab->data_segment_base;
   3397       break;
   3398 
   3399     default:
   3400       break;
   3401     }
   3402 
   3403   switch (r_type)
   3404     {
   3405     case R_PARISC_DIR32:
   3406     case R_PARISC_DIR14F:
   3407     case R_PARISC_DIR17F:
   3408     case R_PARISC_PCREL17C:
   3409     case R_PARISC_PCREL14F:
   3410     case R_PARISC_PCREL32:
   3411     case R_PARISC_DPREL14F:
   3412     case R_PARISC_PLABEL32:
   3413     case R_PARISC_DLTIND14F:
   3414     case R_PARISC_SEGBASE:
   3415     case R_PARISC_SEGREL32:
   3416     case R_PARISC_TLS_DTPMOD32:
   3417     case R_PARISC_TLS_DTPOFF32:
   3418     case R_PARISC_TLS_TPREL32:
   3419       r_field = e_fsel;
   3420       break;
   3421 
   3422     case R_PARISC_DLTIND21L:
   3423     case R_PARISC_PCREL21L:
   3424     case R_PARISC_PLABEL21L:
   3425       r_field = e_lsel;
   3426       break;
   3427 
   3428     case R_PARISC_DIR21L:
   3429     case R_PARISC_DPREL21L:
   3430     case R_PARISC_TLS_GD21L:
   3431     case R_PARISC_TLS_LDM21L:
   3432     case R_PARISC_TLS_LDO21L:
   3433     case R_PARISC_TLS_IE21L:
   3434     case R_PARISC_TLS_LE21L:
   3435       r_field = e_lrsel;
   3436       break;
   3437 
   3438     case R_PARISC_PCREL17R:
   3439     case R_PARISC_PCREL14R:
   3440     case R_PARISC_PLABEL14R:
   3441     case R_PARISC_DLTIND14R:
   3442       r_field = e_rsel;
   3443       break;
   3444 
   3445     case R_PARISC_DIR17R:
   3446     case R_PARISC_DIR14R:
   3447     case R_PARISC_DPREL14R:
   3448     case R_PARISC_TLS_GD14R:
   3449     case R_PARISC_TLS_LDM14R:
   3450     case R_PARISC_TLS_LDO14R:
   3451     case R_PARISC_TLS_IE14R:
   3452     case R_PARISC_TLS_LE14R:
   3453       r_field = e_rrsel;
   3454       break;
   3455 
   3456     case R_PARISC_PCREL12F:
   3457     case R_PARISC_PCREL17F:
   3458     case R_PARISC_PCREL22F:
   3459       r_field = e_fsel;
   3460 
   3461       if (r_type == (unsigned int) R_PARISC_PCREL17F)
   3462 	{
   3463 	  max_branch_offset = (1 << (17-1)) << 2;
   3464 	}
   3465       else if (r_type == (unsigned int) R_PARISC_PCREL12F)
   3466 	{
   3467 	  max_branch_offset = (1 << (12-1)) << 2;
   3468 	}
   3469       else
   3470 	{
   3471 	  max_branch_offset = (1 << (22-1)) << 2;
   3472 	}
   3473 
   3474       /* sym_sec is NULL on undefined weak syms or when shared on
   3475 	 undefined syms.  We've already checked for a stub for the
   3476 	 shared undefined case.  */
   3477       if (sym_sec == NULL)
   3478 	break;
   3479 
   3480       /* If the branch is out of reach, then redirect the
   3481 	 call to the local stub for this function.  */
   3482       if (value + addend + max_branch_offset >= 2*max_branch_offset)
   3483 	{
   3484 	  hsh = hppa_get_stub_entry (input_section, sym_sec,
   3485 				     hh, rela, htab);
   3486 	  if (hsh == NULL)
   3487 	    return bfd_reloc_undefined;
   3488 
   3489 	  /* Munge up the value and addend so that we call the stub
   3490 	     rather than the procedure directly.  */
   3491 	  value = (hsh->stub_offset
   3492 		   + hsh->stub_sec->output_offset
   3493 		   + hsh->stub_sec->output_section->vma
   3494 		   - location);
   3495 	  addend = -8;
   3496 	}
   3497       break;
   3498 
   3499     /* Something we don't know how to handle.  */
   3500     default:
   3501       return bfd_reloc_notsupported;
   3502     }
   3503 
   3504   /* Make sure we can reach the stub.  */
   3505   if (max_branch_offset != 0
   3506       && value + addend + max_branch_offset >= 2*max_branch_offset)
   3507     {
   3508       _bfd_error_handler
   3509 	/* xgettext:c-format */
   3510 	(_("%pB(%pA+%#" PRIx64 "): cannot reach %s, "
   3511 	   "recompile with -ffunction-sections"),
   3512 	 input_bfd,
   3513 	 input_section,
   3514 	 (uint64_t) offset,
   3515 	 hsh->bh_root.string);
   3516       bfd_set_error (bfd_error_bad_value);
   3517       return bfd_reloc_notsupported;
   3518     }
   3519 
   3520   val = hppa_field_adjust (value, addend, r_field);
   3521 
   3522   switch (r_type)
   3523     {
   3524     case R_PARISC_PCREL12F:
   3525     case R_PARISC_PCREL17C:
   3526     case R_PARISC_PCREL17F:
   3527     case R_PARISC_PCREL17R:
   3528     case R_PARISC_PCREL22F:
   3529     case R_PARISC_DIR17F:
   3530     case R_PARISC_DIR17R:
   3531       /* This is a branch.  Divide the offset by four.
   3532 	 Note that we need to decide whether it's a branch or
   3533 	 otherwise by inspecting the reloc.  Inspecting insn won't
   3534 	 work as insn might be from a .word directive.  */
   3535       val >>= 2;
   3536       break;
   3537 
   3538     default:
   3539       break;
   3540     }
   3541 
   3542   insn = hppa_rebuild_insn (insn, val, r_format);
   3543 
   3544   /* Update the instruction word.  */
   3545   bfd_put_32 (input_bfd, (bfd_vma) insn, hit_data);
   3546   return bfd_reloc_ok;
   3547 }
   3548 
   3549 /* Relocate an HPPA ELF section.  */
   3550 
   3551 static bfd_boolean
   3552 elf32_hppa_relocate_section (bfd *output_bfd,
   3553 			     struct bfd_link_info *info,
   3554 			     bfd *input_bfd,
   3555 			     asection *input_section,
   3556 			     bfd_byte *contents,
   3557 			     Elf_Internal_Rela *relocs,
   3558 			     Elf_Internal_Sym *local_syms,
   3559 			     asection **local_sections)
   3560 {
   3561   bfd_vma *local_got_offsets;
   3562   struct elf32_hppa_link_hash_table *htab;
   3563   Elf_Internal_Shdr *symtab_hdr;
   3564   Elf_Internal_Rela *rela;
   3565   Elf_Internal_Rela *relend;
   3566 
   3567   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   3568 
   3569   htab = hppa_link_hash_table (info);
   3570   if (htab == NULL)
   3571     return FALSE;
   3572 
   3573   local_got_offsets = elf_local_got_offsets (input_bfd);
   3574 
   3575   rela = relocs;
   3576   relend = relocs + input_section->reloc_count;
   3577   for (; rela < relend; rela++)
   3578     {
   3579       unsigned int r_type;
   3580       reloc_howto_type *howto;
   3581       unsigned int r_symndx;
   3582       struct elf32_hppa_link_hash_entry *hh;
   3583       Elf_Internal_Sym *sym;
   3584       asection *sym_sec;
   3585       bfd_vma relocation;
   3586       bfd_reloc_status_type rstatus;
   3587       const char *sym_name;
   3588       bfd_boolean plabel;
   3589       bfd_boolean warned_undef;
   3590 
   3591       r_type = ELF32_R_TYPE (rela->r_info);
   3592       if (r_type >= (unsigned int) R_PARISC_UNIMPLEMENTED)
   3593 	{
   3594 	  bfd_set_error (bfd_error_bad_value);
   3595 	  return FALSE;
   3596 	}
   3597       if (r_type == (unsigned int) R_PARISC_GNU_VTENTRY
   3598 	  || r_type == (unsigned int) R_PARISC_GNU_VTINHERIT)
   3599 	continue;
   3600 
   3601       r_symndx = ELF32_R_SYM (rela->r_info);
   3602       hh = NULL;
   3603       sym = NULL;
   3604       sym_sec = NULL;
   3605       warned_undef = FALSE;
   3606       if (r_symndx < symtab_hdr->sh_info)
   3607 	{
   3608 	  /* This is a local symbol, h defaults to NULL.  */
   3609 	  sym = local_syms + r_symndx;
   3610 	  sym_sec = local_sections[r_symndx];
   3611 	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sym_sec, rela);
   3612 	}
   3613       else
   3614 	{
   3615 	  struct elf_link_hash_entry *eh;
   3616 	  bfd_boolean unresolved_reloc, ignored;
   3617 	  struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
   3618 
   3619 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rela,
   3620 				   r_symndx, symtab_hdr, sym_hashes,
   3621 				   eh, sym_sec, relocation,
   3622 				   unresolved_reloc, warned_undef,
   3623 				   ignored);
   3624 
   3625 	  if (!bfd_link_relocatable (info)
   3626 	      && relocation == 0
   3627 	      && eh->root.type != bfd_link_hash_defined
   3628 	      && eh->root.type != bfd_link_hash_defweak
   3629 	      && eh->root.type != bfd_link_hash_undefweak)
   3630 	    {
   3631 	      if (info->unresolved_syms_in_objects == RM_IGNORE
   3632 		  && ELF_ST_VISIBILITY (eh->other) == STV_DEFAULT
   3633 		  && eh->type == STT_PARISC_MILLI)
   3634 		{
   3635 		  (*info->callbacks->undefined_symbol)
   3636 		    (info, eh_name (eh), input_bfd,
   3637 		     input_section, rela->r_offset, FALSE);
   3638 		  warned_undef = TRUE;
   3639 		}
   3640 	    }
   3641 	  hh = hppa_elf_hash_entry (eh);
   3642 	}
   3643 
   3644       if (sym_sec != NULL && discarded_section (sym_sec))
   3645 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
   3646 					 rela, 1, relend,
   3647 					 elf_hppa_howto_table + r_type, 0,
   3648 					 contents);
   3649 
   3650       if (bfd_link_relocatable (info))
   3651 	continue;
   3652 
   3653       /* Do any required modifications to the relocation value, and
   3654 	 determine what types of dynamic info we need to output, if
   3655 	 any.  */
   3656       plabel = 0;
   3657       switch (r_type)
   3658 	{
   3659 	case R_PARISC_DLTIND14F:
   3660 	case R_PARISC_DLTIND14R:
   3661 	case R_PARISC_DLTIND21L:
   3662 	  {
   3663 	    bfd_vma off;
   3664 	    bfd_boolean do_got = FALSE;
   3665 	    bfd_boolean reloc = bfd_link_pic (info);
   3666 
   3667 	    /* Relocation is to the entry for this symbol in the
   3668 	       global offset table.  */
   3669 	    if (hh != NULL)
   3670 	      {
   3671 		bfd_boolean dyn;
   3672 
   3673 		off = hh->eh.got.offset;
   3674 		dyn = htab->etab.dynamic_sections_created;
   3675 		reloc = (!UNDEFWEAK_NO_DYNAMIC_RELOC (info, &hh->eh)
   3676 			 && (reloc
   3677 			     || (hh->eh.dynindx != -1
   3678 				 && !SYMBOL_REFERENCES_LOCAL (info, &hh->eh))));
   3679 		if (!reloc
   3680 		    || !WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
   3681 							 bfd_link_pic (info),
   3682 							 &hh->eh))
   3683 		  {
   3684 		    /* If we aren't going to call finish_dynamic_symbol,
   3685 		       then we need to handle initialisation of the .got
   3686 		       entry and create needed relocs here.  Since the
   3687 		       offset must always be a multiple of 4, we use the
   3688 		       least significant bit to record whether we have
   3689 		       initialised it already.  */
   3690 		    if ((off & 1) != 0)
   3691 		      off &= ~1;
   3692 		    else
   3693 		      {
   3694 			hh->eh.got.offset |= 1;
   3695 			do_got = TRUE;
   3696 		      }
   3697 		  }
   3698 	      }
   3699 	    else
   3700 	      {
   3701 		/* Local symbol case.  */
   3702 		if (local_got_offsets == NULL)
   3703 		  abort ();
   3704 
   3705 		off = local_got_offsets[r_symndx];
   3706 
   3707 		/* The offset must always be a multiple of 4.  We use
   3708 		   the least significant bit to record whether we have
   3709 		   already generated the necessary reloc.  */
   3710 		if ((off & 1) != 0)
   3711 		  off &= ~1;
   3712 		else
   3713 		  {
   3714 		    local_got_offsets[r_symndx] |= 1;
   3715 		    do_got = TRUE;
   3716 		  }
   3717 	      }
   3718 
   3719 	    if (do_got)
   3720 	      {
   3721 		if (reloc)
   3722 		  {
   3723 		    /* Output a dynamic relocation for this GOT entry.
   3724 		       In this case it is relative to the base of the
   3725 		       object because the symbol index is zero.  */
   3726 		    Elf_Internal_Rela outrel;
   3727 		    bfd_byte *loc;
   3728 		    asection *sec = htab->etab.srelgot;
   3729 
   3730 		    outrel.r_offset = (off
   3731 				       + htab->etab.sgot->output_offset
   3732 				       + htab->etab.sgot->output_section->vma);
   3733 		    outrel.r_info = ELF32_R_INFO (0, R_PARISC_DIR32);
   3734 		    outrel.r_addend = relocation;
   3735 		    loc = sec->contents;
   3736 		    loc += sec->reloc_count++ * sizeof (Elf32_External_Rela);
   3737 		    bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
   3738 		  }
   3739 		else
   3740 		  bfd_put_32 (output_bfd, relocation,
   3741 			      htab->etab.sgot->contents + off);
   3742 	      }
   3743 
   3744 	    if (off >= (bfd_vma) -2)
   3745 	      abort ();
   3746 
   3747 	    /* Add the base of the GOT to the relocation value.  */
   3748 	    relocation = (off
   3749 			  + htab->etab.sgot->output_offset
   3750 			  + htab->etab.sgot->output_section->vma);
   3751 	  }
   3752 	  break;
   3753 
   3754 	case R_PARISC_SEGREL32:
   3755 	  /* If this is the first SEGREL relocation, then initialize
   3756 	     the segment base values.  */
   3757 	  if (htab->text_segment_base == (bfd_vma) -1)
   3758 	    bfd_map_over_sections (output_bfd, hppa_record_segment_addr, htab);
   3759 	  break;
   3760 
   3761 	case R_PARISC_PLABEL14R:
   3762 	case R_PARISC_PLABEL21L:
   3763 	case R_PARISC_PLABEL32:
   3764 	  if (htab->etab.dynamic_sections_created)
   3765 	    {
   3766 	      bfd_vma off;
   3767 	      bfd_boolean do_plt = 0;
   3768 	      /* If we have a global symbol with a PLT slot, then
   3769 		 redirect this relocation to it.  */
   3770 	      if (hh != NULL)
   3771 		{
   3772 		  off = hh->eh.plt.offset;
   3773 		  if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (1,
   3774 							 bfd_link_pic (info),
   3775 							 &hh->eh))
   3776 		    {
   3777 		      /* In a non-shared link, adjust_dynamic_symbol
   3778 			 isn't called for symbols forced local.  We
   3779 			 need to write out the plt entry here.  */
   3780 		      if ((off & 1) != 0)
   3781 			off &= ~1;
   3782 		      else
   3783 			{
   3784 			  hh->eh.plt.offset |= 1;
   3785 			  do_plt = 1;
   3786 			}
   3787 		    }
   3788 		}
   3789 	      else
   3790 		{
   3791 		  bfd_vma *local_plt_offsets;
   3792 
   3793 		  if (local_got_offsets == NULL)
   3794 		    abort ();
   3795 
   3796 		  local_plt_offsets = local_got_offsets + symtab_hdr->sh_info;
   3797 		  off = local_plt_offsets[r_symndx];
   3798 
   3799 		  /* As for the local .got entry case, we use the last
   3800 		     bit to record whether we've already initialised
   3801 		     this local .plt entry.  */
   3802 		  if ((off & 1) != 0)
   3803 		    off &= ~1;
   3804 		  else
   3805 		    {
   3806 		      local_plt_offsets[r_symndx] |= 1;
   3807 		      do_plt = 1;
   3808 		    }
   3809 		}
   3810 
   3811 	      if (do_plt)
   3812 		{
   3813 		  if (bfd_link_pic (info))
   3814 		    {
   3815 		      /* Output a dynamic IPLT relocation for this
   3816 			 PLT entry.  */
   3817 		      Elf_Internal_Rela outrel;
   3818 		      bfd_byte *loc;
   3819 		      asection *s = htab->etab.srelplt;
   3820 
   3821 		      outrel.r_offset = (off
   3822 					 + htab->etab.splt->output_offset
   3823 					 + htab->etab.splt->output_section->vma);
   3824 		      outrel.r_info = ELF32_R_INFO (0, R_PARISC_IPLT);
   3825 		      outrel.r_addend = relocation;
   3826 		      loc = s->contents;
   3827 		      loc += s->reloc_count++ * sizeof (Elf32_External_Rela);
   3828 		      bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
   3829 		    }
   3830 		  else
   3831 		    {
   3832 		      bfd_put_32 (output_bfd,
   3833 				  relocation,
   3834 				  htab->etab.splt->contents + off);
   3835 		      bfd_put_32 (output_bfd,
   3836 				  elf_gp (htab->etab.splt->output_section->owner),
   3837 				  htab->etab.splt->contents + off + 4);
   3838 		    }
   3839 		}
   3840 
   3841 	      if (off >= (bfd_vma) -2)
   3842 		abort ();
   3843 
   3844 	      /* PLABELs contain function pointers.  Relocation is to
   3845 		 the entry for the function in the .plt.  The magic +2
   3846 		 offset signals to $$dyncall that the function pointer
   3847 		 is in the .plt and thus has a gp pointer too.
   3848 		 Exception:  Undefined PLABELs should have a value of
   3849 		 zero.  */
   3850 	      if (hh == NULL
   3851 		  || (hh->eh.root.type != bfd_link_hash_undefweak
   3852 		      && hh->eh.root.type != bfd_link_hash_undefined))
   3853 		{
   3854 		  relocation = (off
   3855 				+ htab->etab.splt->output_offset
   3856 				+ htab->etab.splt->output_section->vma
   3857 				+ 2);
   3858 		}
   3859 	      plabel = 1;
   3860 	    }
   3861 	  /* Fall through.  */
   3862 
   3863 	case R_PARISC_DIR17F:
   3864 	case R_PARISC_DIR17R:
   3865 	case R_PARISC_DIR14F:
   3866 	case R_PARISC_DIR14R:
   3867 	case R_PARISC_DIR21L:
   3868 	case R_PARISC_DPREL14F:
   3869 	case R_PARISC_DPREL14R:
   3870 	case R_PARISC_DPREL21L:
   3871 	case R_PARISC_DIR32:
   3872 	  if ((input_section->flags & SEC_ALLOC) == 0)
   3873 	    break;
   3874 
   3875 	  if (bfd_link_pic (info)
   3876 	      ? ((hh == NULL
   3877 		  || hh->dyn_relocs != NULL)
   3878 		 && ((hh != NULL && pc_dynrelocs (hh))
   3879 		     || IS_ABSOLUTE_RELOC (r_type)))
   3880 	      : (hh != NULL
   3881 		 && hh->dyn_relocs != NULL))
   3882 	    {
   3883 	      Elf_Internal_Rela outrel;
   3884 	      bfd_boolean skip;
   3885 	      asection *sreloc;
   3886 	      bfd_byte *loc;
   3887 
   3888 	      /* When generating a shared object, these relocations
   3889 		 are copied into the output file to be resolved at run
   3890 		 time.  */
   3891 
   3892 	      outrel.r_addend = rela->r_addend;
   3893 	      outrel.r_offset =
   3894 		_bfd_elf_section_offset (output_bfd, info, input_section,
   3895 					 rela->r_offset);
   3896 	      skip = (outrel.r_offset == (bfd_vma) -1
   3897 		      || outrel.r_offset == (bfd_vma) -2);
   3898 	      outrel.r_offset += (input_section->output_offset
   3899 				  + input_section->output_section->vma);
   3900 
   3901 	      if (skip)
   3902 		{
   3903 		  memset (&outrel, 0, sizeof (outrel));
   3904 		}
   3905 	      else if (hh != NULL
   3906 		       && hh->eh.dynindx != -1
   3907 		       && (plabel
   3908 			   || !IS_ABSOLUTE_RELOC (r_type)
   3909 			   || !bfd_link_pic (info)
   3910 			   || !SYMBOLIC_BIND (info, &hh->eh)
   3911 			   || !hh->eh.def_regular))
   3912 		{
   3913 		  outrel.r_info = ELF32_R_INFO (hh->eh.dynindx, r_type);
   3914 		}
   3915 	      else /* It's a local symbol, or one marked to become local.  */
   3916 		{
   3917 		  int indx = 0;
   3918 
   3919 		  /* Add the absolute offset of the symbol.  */
   3920 		  outrel.r_addend += relocation;
   3921 
   3922 		  /* Global plabels need to be processed by the
   3923 		     dynamic linker so that functions have at most one
   3924 		     fptr.  For this reason, we need to differentiate
   3925 		     between global and local plabels, which we do by
   3926 		     providing the function symbol for a global plabel
   3927 		     reloc, and no symbol for local plabels.  */
   3928 		  if (! plabel
   3929 		      && sym_sec != NULL
   3930 		      && sym_sec->output_section != NULL
   3931 		      && ! bfd_is_abs_section (sym_sec))
   3932 		    {
   3933 		      asection *osec;
   3934 
   3935 		      osec = sym_sec->output_section;
   3936 		      indx = elf_section_data (osec)->dynindx;
   3937 		      if (indx == 0)
   3938 			{
   3939 			  osec = htab->etab.text_index_section;
   3940 			  indx = elf_section_data (osec)->dynindx;
   3941 			}
   3942 		      BFD_ASSERT (indx != 0);
   3943 
   3944 		      /* We are turning this relocation into one
   3945 			 against a section symbol, so subtract out the
   3946 			 output section's address but not the offset
   3947 			 of the input section in the output section.  */
   3948 		      outrel.r_addend -= osec->vma;
   3949 		    }
   3950 
   3951 		  outrel.r_info = ELF32_R_INFO (indx, r_type);
   3952 		}
   3953 	      sreloc = elf_section_data (input_section)->sreloc;
   3954 	      if (sreloc == NULL)
   3955 		abort ();
   3956 
   3957 	      loc = sreloc->contents;
   3958 	      loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rela);
   3959 	      bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
   3960 	    }
   3961 	  break;
   3962 
   3963 	case R_PARISC_TLS_LDM21L:
   3964 	case R_PARISC_TLS_LDM14R:
   3965 	  {
   3966 	    bfd_vma off;
   3967 
   3968 	    off = htab->tls_ldm_got.offset;
   3969 	    if (off & 1)
   3970 	      off &= ~1;
   3971 	    else
   3972 	      {
   3973 		Elf_Internal_Rela outrel;
   3974 		bfd_byte *loc;
   3975 
   3976 		outrel.r_offset = (off
   3977 				   + htab->etab.sgot->output_section->vma
   3978 				   + htab->etab.sgot->output_offset);
   3979 		outrel.r_addend = 0;
   3980 		outrel.r_info = ELF32_R_INFO (0, R_PARISC_TLS_DTPMOD32);
   3981 		loc = htab->etab.srelgot->contents;
   3982 		loc += htab->etab.srelgot->reloc_count++ * sizeof (Elf32_External_Rela);
   3983 
   3984 		bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
   3985 		htab->tls_ldm_got.offset |= 1;
   3986 	      }
   3987 
   3988 	    /* Add the base of the GOT to the relocation value.  */
   3989 	    relocation = (off
   3990 			  + htab->etab.sgot->output_offset
   3991 			  + htab->etab.sgot->output_section->vma);
   3992 
   3993 	    break;
   3994 	  }
   3995 
   3996 	case R_PARISC_TLS_LDO21L:
   3997 	case R_PARISC_TLS_LDO14R:
   3998 	  relocation -= dtpoff_base (info);
   3999 	  break;
   4000 
   4001 	case R_PARISC_TLS_GD21L:
   4002 	case R_PARISC_TLS_GD14R:
   4003 	case R_PARISC_TLS_IE21L:
   4004 	case R_PARISC_TLS_IE14R:
   4005 	  {
   4006 	    bfd_vma off;
   4007 	    int indx;
   4008 	    char tls_type;
   4009 
   4010 	    indx = 0;
   4011 	    if (hh != NULL)
   4012 	      {
   4013 		if (!htab->etab.dynamic_sections_created
   4014 		    || hh->eh.dynindx == -1
   4015 		    || SYMBOL_REFERENCES_LOCAL (info, &hh->eh)
   4016 		    || UNDEFWEAK_NO_DYNAMIC_RELOC (info, &hh->eh))
   4017 		  /* This is actually a static link, or it is a
   4018 		     -Bsymbolic link and the symbol is defined
   4019 		     locally, or the symbol was forced to be local
   4020 		     because of a version file.  */
   4021 		  ;
   4022 		else
   4023 		  indx = hh->eh.dynindx;
   4024 		off = hh->eh.got.offset;
   4025 		tls_type = hh->tls_type;
   4026 	      }
   4027 	    else
   4028 	      {
   4029 		off = local_got_offsets[r_symndx];
   4030 		tls_type = hppa_elf_local_got_tls_type (input_bfd)[r_symndx];
   4031 	      }
   4032 
   4033 	    if (tls_type == GOT_UNKNOWN)
   4034 	      abort ();
   4035 
   4036 	    if ((off & 1) != 0)
   4037 	      off &= ~1;
   4038 	    else
   4039 	      {
   4040 		bfd_boolean need_relocs = FALSE;
   4041 		Elf_Internal_Rela outrel;
   4042 		bfd_byte *loc = NULL;
   4043 		int cur_off = off;
   4044 
   4045 		/* The GOT entries have not been initialized yet.  Do it
   4046 		   now, and emit any relocations.  If both an IE GOT and a
   4047 		   GD GOT are necessary, we emit the GD first.  */
   4048 
   4049 		if (indx != 0
   4050 		    || (bfd_link_dll (info)
   4051 			&& (hh == NULL
   4052 			    || !UNDEFWEAK_NO_DYNAMIC_RELOC (info, &hh->eh))))
   4053 		  {
   4054 		    need_relocs = TRUE;
   4055 		    loc = htab->etab.srelgot->contents;
   4056 		    loc += (htab->etab.srelgot->reloc_count
   4057 			    * sizeof (Elf32_External_Rela));
   4058 		  }
   4059 
   4060 		if (tls_type & GOT_TLS_GD)
   4061 		  {
   4062 		    if (need_relocs)
   4063 		      {
   4064 			outrel.r_offset
   4065 			  = (cur_off
   4066 			     + htab->etab.sgot->output_section->vma
   4067 			     + htab->etab.sgot->output_offset);
   4068 			outrel.r_info
   4069 			  = ELF32_R_INFO (indx, R_PARISC_TLS_DTPMOD32);
   4070 			outrel.r_addend = 0;
   4071 			bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
   4072 			htab->etab.srelgot->reloc_count++;
   4073 			loc += sizeof (Elf32_External_Rela);
   4074 			bfd_put_32 (output_bfd, 0,
   4075 				    htab->etab.sgot->contents + cur_off);
   4076 		      }
   4077 		    else
   4078 		      /* If we are not emitting relocations for a
   4079 			 general dynamic reference, then we must be in a
   4080 			 static link or an executable link with the
   4081 			 symbol binding locally.  Mark it as belonging
   4082 			 to module 1, the executable.  */
   4083 		      bfd_put_32 (output_bfd, 1,
   4084 				  htab->etab.sgot->contents + cur_off);
   4085 
   4086 		    if (indx != 0)
   4087 		      {
   4088 			outrel.r_info
   4089 			  = ELF32_R_INFO (indx, R_PARISC_TLS_DTPOFF32);
   4090 			outrel.r_offset += 4;
   4091 			bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
   4092 			htab->etab.srelgot->reloc_count++;
   4093 			loc += sizeof (Elf32_External_Rela);
   4094 			bfd_put_32 (output_bfd, 0,
   4095 				    htab->etab.sgot->contents + cur_off + 4);
   4096 		      }
   4097 		    else
   4098 		      bfd_put_32 (output_bfd, relocation - dtpoff_base (info),
   4099 				  htab->etab.sgot->contents + cur_off + 4);
   4100 		    cur_off += 8;
   4101 		  }
   4102 
   4103 		if (tls_type & GOT_TLS_IE)
   4104 		  {
   4105 		    if (need_relocs
   4106 			&& !(bfd_link_executable (info)
   4107 			     && SYMBOL_REFERENCES_LOCAL (info, &hh->eh)))
   4108 		      {
   4109 			outrel.r_offset
   4110 			  = (cur_off
   4111 			     + htab->etab.sgot->output_section->vma
   4112 			     + htab->etab.sgot->output_offset);
   4113 			outrel.r_info = ELF32_R_INFO (indx,
   4114 						      R_PARISC_TLS_TPREL32);
   4115 			if (indx == 0)
   4116 			  outrel.r_addend = relocation - dtpoff_base (info);
   4117 			else
   4118 			  outrel.r_addend = 0;
   4119 			bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
   4120 			htab->etab.srelgot->reloc_count++;
   4121 			loc += sizeof (Elf32_External_Rela);
   4122 		      }
   4123 		    else
   4124 		      bfd_put_32 (output_bfd, tpoff (info, relocation),
   4125 				  htab->etab.sgot->contents + cur_off);
   4126 		    cur_off += 4;
   4127 		  }
   4128 
   4129 		if (hh != NULL)
   4130 		  hh->eh.got.offset |= 1;
   4131 		else
   4132 		  local_got_offsets[r_symndx] |= 1;
   4133 	      }
   4134 
   4135 	    if ((tls_type & GOT_NORMAL) != 0
   4136 		&& (tls_type & (GOT_TLS_GD | GOT_TLS_LDM | GOT_TLS_IE)) != 0)
   4137 	      {
   4138 		if (hh != NULL)
   4139 		  _bfd_error_handler (_("%s has both normal and TLS relocs"),
   4140 				      hh_name (hh));
   4141 		else
   4142 		  {
   4143 		    Elf_Internal_Sym *isym
   4144 		      = bfd_sym_from_r_symndx (&htab->sym_cache,
   4145 					       input_bfd, r_symndx);
   4146 		    if (isym == NULL)
   4147 		      return FALSE;
   4148 		    sym_name
   4149 		      = bfd_elf_string_from_elf_section (input_bfd,
   4150 							 symtab_hdr->sh_link,
   4151 							 isym->st_name);
   4152 		    if (sym_name == NULL)
   4153 		      return FALSE;
   4154 		    if (*sym_name == '\0')
   4155 		      sym_name = bfd_section_name (input_bfd, sym_sec);
   4156 		    _bfd_error_handler
   4157 		      (_("%pB:%s has both normal and TLS relocs"),
   4158 		       input_bfd, sym_name);
   4159 		  }
   4160 		bfd_set_error (bfd_error_bad_value);
   4161 		return FALSE;
   4162 	      }
   4163 
   4164 	    if ((tls_type & GOT_TLS_GD)
   4165 		&& r_type != R_PARISC_TLS_GD21L
   4166 		&& r_type != R_PARISC_TLS_GD14R)
   4167 	      off += 2 * GOT_ENTRY_SIZE;
   4168 
   4169 	    /* Add the base of the GOT to the relocation value.  */
   4170 	    relocation = (off
   4171 			  + htab->etab.sgot->output_offset
   4172 			  + htab->etab.sgot->output_section->vma);
   4173 
   4174 	    break;
   4175 	  }
   4176 
   4177 	case R_PARISC_TLS_LE21L:
   4178 	case R_PARISC_TLS_LE14R:
   4179 	  {
   4180 	    relocation = tpoff (info, relocation);
   4181 	    break;
   4182 	  }
   4183 	  break;
   4184 
   4185 	default:
   4186 	  break;
   4187 	}
   4188 
   4189       rstatus = final_link_relocate (input_section, contents, rela, relocation,
   4190 			       htab, sym_sec, hh, info);
   4191 
   4192       if (rstatus == bfd_reloc_ok)
   4193 	continue;
   4194 
   4195       if (hh != NULL)
   4196 	sym_name = hh_name (hh);
   4197       else
   4198 	{
   4199 	  sym_name = bfd_elf_string_from_elf_section (input_bfd,
   4200 						      symtab_hdr->sh_link,
   4201 						      sym->st_name);
   4202 	  if (sym_name == NULL)
   4203 	    return FALSE;
   4204 	  if (*sym_name == '\0')
   4205 	    sym_name = bfd_section_name (input_bfd, sym_sec);
   4206 	}
   4207 
   4208       howto = elf_hppa_howto_table + r_type;
   4209 
   4210       if (rstatus == bfd_reloc_undefined || rstatus == bfd_reloc_notsupported)
   4211 	{
   4212 	  if (rstatus == bfd_reloc_notsupported || !warned_undef)
   4213 	    {
   4214 	      _bfd_error_handler
   4215 		/* xgettext:c-format */
   4216 		(_("%pB(%pA+%#" PRIx64 "): cannot handle %s for %s"),
   4217 		 input_bfd,
   4218 		 input_section,
   4219 		 (uint64_t) rela->r_offset,
   4220 		 howto->name,
   4221 		 sym_name);
   4222 	      bfd_set_error (bfd_error_bad_value);
   4223 	      return FALSE;
   4224 	    }
   4225 	}
   4226       else
   4227 	(*info->callbacks->reloc_overflow)
   4228 	  (info, (hh ? &hh->eh.root : NULL), sym_name, howto->name,
   4229 	   (bfd_vma) 0, input_bfd, input_section, rela->r_offset);
   4230     }
   4231 
   4232   return TRUE;
   4233 }
   4234 
   4235 /* Finish up dynamic symbol handling.  We set the contents of various
   4236    dynamic sections here.  */
   4237 
   4238 static bfd_boolean
   4239 elf32_hppa_finish_dynamic_symbol (bfd *output_bfd,
   4240 				  struct bfd_link_info *info,
   4241 				  struct elf_link_hash_entry *eh,
   4242 				  Elf_Internal_Sym *sym)
   4243 {
   4244   struct elf32_hppa_link_hash_table *htab;
   4245   Elf_Internal_Rela rela;
   4246   bfd_byte *loc;
   4247 
   4248   htab = hppa_link_hash_table (info);
   4249   if (htab == NULL)
   4250     return FALSE;
   4251 
   4252   if (eh->plt.offset != (bfd_vma) -1)
   4253     {
   4254       bfd_vma value;
   4255 
   4256       if (eh->plt.offset & 1)
   4257 	abort ();
   4258 
   4259       /* This symbol has an entry in the procedure linkage table.  Set
   4260 	 it up.
   4261 
   4262 	 The format of a plt entry is
   4263 	 <funcaddr>
   4264 	 <__gp>
   4265       */
   4266       value = 0;
   4267       if (eh->root.type == bfd_link_hash_defined
   4268 	  || eh->root.type == bfd_link_hash_defweak)
   4269 	{
   4270 	  value = eh->root.u.def.value;
   4271 	  if (eh->root.u.def.section->output_section != NULL)
   4272 	    value += (eh->root.u.def.section->output_offset
   4273 		      + eh->root.u.def.section->output_section->vma);
   4274 	}
   4275 
   4276       /* Create a dynamic IPLT relocation for this entry.  */
   4277       rela.r_offset = (eh->plt.offset
   4278 		      + htab->etab.splt->output_offset
   4279 		      + htab->etab.splt->output_section->vma);
   4280       if (eh->dynindx != -1)
   4281 	{
   4282 	  rela.r_info = ELF32_R_INFO (eh->dynindx, R_PARISC_IPLT);
   4283 	  rela.r_addend = 0;
   4284 	}
   4285       else
   4286 	{
   4287 	  /* This symbol has been marked to become local, and is
   4288 	     used by a plabel so must be kept in the .plt.  */
   4289 	  rela.r_info = ELF32_R_INFO (0, R_PARISC_IPLT);
   4290 	  rela.r_addend = value;
   4291 	}
   4292 
   4293       loc = htab->etab.srelplt->contents;
   4294       loc += htab->etab.srelplt->reloc_count++ * sizeof (Elf32_External_Rela);
   4295       bfd_elf32_swap_reloca_out (htab->etab.splt->output_section->owner, &rela, loc);
   4296 
   4297       if (!eh->def_regular)
   4298 	{
   4299 	  /* Mark the symbol as undefined, rather than as defined in
   4300 	     the .plt section.  Leave the value alone.  */
   4301 	  sym->st_shndx = SHN_UNDEF;
   4302 	}
   4303     }
   4304 
   4305   if (eh->got.offset != (bfd_vma) -1
   4306       && (hppa_elf_hash_entry (eh)->tls_type & GOT_NORMAL) != 0
   4307       && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh))
   4308     {
   4309       bfd_boolean is_dyn = (eh->dynindx != -1
   4310 			    && !SYMBOL_REFERENCES_LOCAL (info, eh));
   4311 
   4312       if (is_dyn || bfd_link_pic (info))
   4313 	{
   4314 	  /* This symbol has an entry in the global offset table.  Set
   4315 	     it up.  */
   4316 
   4317 	  rela.r_offset = ((eh->got.offset &~ (bfd_vma) 1)
   4318 			   + htab->etab.sgot->output_offset
   4319 			   + htab->etab.sgot->output_section->vma);
   4320 
   4321 	  /* If this is a -Bsymbolic link and the symbol is defined
   4322 	     locally or was forced to be local because of a version
   4323 	     file, we just want to emit a RELATIVE reloc.  The entry
   4324 	     in the global offset table will already have been
   4325 	     initialized in the relocate_section function.  */
   4326 	  if (!is_dyn)
   4327 	    {
   4328 	      rela.r_info = ELF32_R_INFO (0, R_PARISC_DIR32);
   4329 	      rela.r_addend = (eh->root.u.def.value
   4330 			       + eh->root.u.def.section->output_offset
   4331 			       + eh->root.u.def.section->output_section->vma);
   4332 	    }
   4333 	  else
   4334 	    {
   4335 	      if ((eh->got.offset & 1) != 0)
   4336 		abort ();
   4337 
   4338 	      bfd_put_32 (output_bfd, 0,
   4339 			  htab->etab.sgot->contents + (eh->got.offset & ~1));
   4340 	      rela.r_info = ELF32_R_INFO (eh->dynindx, R_PARISC_DIR32);
   4341 	      rela.r_addend = 0;
   4342 	    }
   4343 
   4344 	  loc = htab->etab.srelgot->contents;
   4345 	  loc += (htab->etab.srelgot->reloc_count++
   4346 		  * sizeof (Elf32_External_Rela));
   4347 	  bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
   4348 	}
   4349     }
   4350 
   4351   if (eh->needs_copy)
   4352     {
   4353       asection *sec;
   4354 
   4355       /* This symbol needs a copy reloc.  Set it up.  */
   4356 
   4357       if (! (eh->dynindx != -1
   4358 	     && (eh->root.type == bfd_link_hash_defined
   4359 		 || eh->root.type == bfd_link_hash_defweak)))
   4360 	abort ();
   4361 
   4362       rela.r_offset = (eh->root.u.def.value
   4363 		      + eh->root.u.def.section->output_offset
   4364 		      + eh->root.u.def.section->output_section->vma);
   4365       rela.r_addend = 0;
   4366       rela.r_info = ELF32_R_INFO (eh->dynindx, R_PARISC_COPY);
   4367       if (eh->root.u.def.section == htab->etab.sdynrelro)
   4368 	sec = htab->etab.sreldynrelro;
   4369       else
   4370 	sec = htab->etab.srelbss;
   4371       loc = sec->contents + sec->reloc_count++ * sizeof (Elf32_External_Rela);
   4372       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
   4373     }
   4374 
   4375   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
   4376   if (eh == htab->etab.hdynamic || eh == htab->etab.hgot)
   4377     {
   4378       sym->st_shndx = SHN_ABS;
   4379     }
   4380 
   4381   return TRUE;
   4382 }
   4383 
   4384 /* Used to decide how to sort relocs in an optimal manner for the
   4385    dynamic linker, before writing them out.  */
   4386 
   4387 static enum elf_reloc_type_class
   4388 elf32_hppa_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
   4389 			     const asection *rel_sec ATTRIBUTE_UNUSED,
   4390 			     const Elf_Internal_Rela *rela)
   4391 {
   4392   /* Handle TLS relocs first; we don't want them to be marked
   4393      relative by the "if (ELF32_R_SYM (rela->r_info) == STN_UNDEF)"
   4394      check below.  */
   4395   switch ((int) ELF32_R_TYPE (rela->r_info))
   4396     {
   4397       case R_PARISC_TLS_DTPMOD32:
   4398       case R_PARISC_TLS_DTPOFF32:
   4399       case R_PARISC_TLS_TPREL32:
   4400 	return reloc_class_normal;
   4401     }
   4402 
   4403   if (ELF32_R_SYM (rela->r_info) == STN_UNDEF)
   4404     return reloc_class_relative;
   4405 
   4406   switch ((int) ELF32_R_TYPE (rela->r_info))
   4407     {
   4408     case R_PARISC_IPLT:
   4409       return reloc_class_plt;
   4410     case R_PARISC_COPY:
   4411       return reloc_class_copy;
   4412     default:
   4413       return reloc_class_normal;
   4414     }
   4415 }
   4416 
   4417 /* Finish up the dynamic sections.  */
   4418 
   4419 static bfd_boolean
   4420 elf32_hppa_finish_dynamic_sections (bfd *output_bfd,
   4421 				    struct bfd_link_info *info)
   4422 {
   4423   bfd *dynobj;
   4424   struct elf32_hppa_link_hash_table *htab;
   4425   asection *sdyn;
   4426   asection * sgot;
   4427 
   4428   htab = hppa_link_hash_table (info);
   4429   if (htab == NULL)
   4430     return FALSE;
   4431 
   4432   dynobj = htab->etab.dynobj;
   4433 
   4434   sgot = htab->etab.sgot;
   4435   /* A broken linker script might have discarded the dynamic sections.
   4436      Catch this here so that we do not seg-fault later on.  */
   4437   if (sgot != NULL && bfd_is_abs_section (sgot->output_section))
   4438     return FALSE;
   4439 
   4440   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
   4441 
   4442   if (htab->etab.dynamic_sections_created)
   4443     {
   4444       Elf32_External_Dyn *dyncon, *dynconend;
   4445 
   4446       if (sdyn == NULL)
   4447 	abort ();
   4448 
   4449       dyncon = (Elf32_External_Dyn *) sdyn->contents;
   4450       dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
   4451       for (; dyncon < dynconend; dyncon++)
   4452 	{
   4453 	  Elf_Internal_Dyn dyn;
   4454 	  asection *s;
   4455 
   4456 	  bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
   4457 
   4458 	  switch (dyn.d_tag)
   4459 	    {
   4460 	    default:
   4461 	      continue;
   4462 
   4463 	    case DT_PLTGOT:
   4464 	      /* Use PLTGOT to set the GOT register.  */
   4465 	      dyn.d_un.d_ptr = elf_gp (output_bfd);
   4466 	      break;
   4467 
   4468 	    case DT_JMPREL:
   4469 	      s = htab->etab.srelplt;
   4470 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
   4471 	      break;
   4472 
   4473 	    case DT_PLTRELSZ:
   4474 	      s = htab->etab.srelplt;
   4475 	      dyn.d_un.d_val = s->size;
   4476 	      break;
   4477 	    }
   4478 
   4479 	  bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
   4480 	}
   4481     }
   4482 
   4483   if (sgot != NULL && sgot->size != 0)
   4484     {
   4485       /* Fill in the first entry in the global offset table.
   4486 	 We use it to point to our dynamic section, if we have one.  */
   4487       bfd_put_32 (output_bfd,
   4488 		  sdyn ? sdyn->output_section->vma + sdyn->output_offset : 0,
   4489 		  sgot->contents);
   4490 
   4491       /* The second entry is reserved for use by the dynamic linker.  */
   4492       memset (sgot->contents + GOT_ENTRY_SIZE, 0, GOT_ENTRY_SIZE);
   4493 
   4494       /* Set .got entry size.  */
   4495       elf_section_data (sgot->output_section)
   4496 	->this_hdr.sh_entsize = GOT_ENTRY_SIZE;
   4497     }
   4498 
   4499   if (htab->etab.splt != NULL && htab->etab.splt->size != 0)
   4500     {
   4501       /* Set plt entry size to 0 instead of PLT_ENTRY_SIZE, since we add the
   4502 	 plt stubs and as such the section does not hold a table of fixed-size
   4503 	 entries.  */
   4504       elf_section_data (htab->etab.splt->output_section)->this_hdr.sh_entsize = 0;
   4505 
   4506       if (htab->need_plt_stub)
   4507 	{
   4508 	  /* Set up the .plt stub.  */
   4509 	  memcpy (htab->etab.splt->contents
   4510 		  + htab->etab.splt->size - sizeof (plt_stub),
   4511 		  plt_stub, sizeof (plt_stub));
   4512 
   4513 	  if ((htab->etab.splt->output_offset
   4514 	       + htab->etab.splt->output_section->vma
   4515 	       + htab->etab.splt->size)
   4516 	      != (sgot->output_offset
   4517 		  + sgot->output_section->vma))
   4518 	    {
   4519 	      _bfd_error_handler
   4520 		(_(".got section not immediately after .plt section"));
   4521 	      return FALSE;
   4522 	    }
   4523 	}
   4524     }
   4525 
   4526   return TRUE;
   4527 }
   4528 
   4529 /* Called when writing out an object file to decide the type of a
   4530    symbol.  */
   4531 static int
   4532 elf32_hppa_elf_get_symbol_type (Elf_Internal_Sym *elf_sym, int type)
   4533 {
   4534   if (ELF_ST_TYPE (elf_sym->st_info) == STT_PARISC_MILLI)
   4535     return STT_PARISC_MILLI;
   4536   else
   4537     return type;
   4538 }
   4539 
   4540 /* Misc BFD support code.  */
   4541 #define bfd_elf32_bfd_is_local_label_name    elf_hppa_is_local_label_name
   4542 #define bfd_elf32_bfd_reloc_type_lookup	     elf_hppa_reloc_type_lookup
   4543 #define bfd_elf32_bfd_reloc_name_lookup      elf_hppa_reloc_name_lookup
   4544 #define elf_info_to_howto		     elf_hppa_info_to_howto
   4545 #define elf_info_to_howto_rel		     elf_hppa_info_to_howto_rel
   4546 
   4547 /* Stuff for the BFD linker.  */
   4548 #define bfd_elf32_bfd_final_link	     elf32_hppa_final_link
   4549 #define bfd_elf32_bfd_link_hash_table_create elf32_hppa_link_hash_table_create
   4550 #define elf_backend_adjust_dynamic_symbol    elf32_hppa_adjust_dynamic_symbol
   4551 #define elf_backend_copy_indirect_symbol     elf32_hppa_copy_indirect_symbol
   4552 #define elf_backend_check_relocs	     elf32_hppa_check_relocs
   4553 #define elf_backend_relocs_compatible	     _bfd_elf_relocs_compatible
   4554 #define elf_backend_create_dynamic_sections  elf32_hppa_create_dynamic_sections
   4555 #define elf_backend_fake_sections	     elf_hppa_fake_sections
   4556 #define elf_backend_relocate_section	     elf32_hppa_relocate_section
   4557 #define elf_backend_hide_symbol		     elf32_hppa_hide_symbol
   4558 #define elf_backend_finish_dynamic_symbol    elf32_hppa_finish_dynamic_symbol
   4559 #define elf_backend_finish_dynamic_sections  elf32_hppa_finish_dynamic_sections
   4560 #define elf_backend_size_dynamic_sections    elf32_hppa_size_dynamic_sections
   4561 #define elf_backend_init_index_section	     _bfd_elf_init_1_index_section
   4562 #define elf_backend_gc_mark_hook	     elf32_hppa_gc_mark_hook
   4563 #define elf_backend_grok_prstatus	     elf32_hppa_grok_prstatus
   4564 #define elf_backend_grok_psinfo		     elf32_hppa_grok_psinfo
   4565 #define elf_backend_object_p		     elf32_hppa_object_p
   4566 #define elf_backend_final_write_processing   elf_hppa_final_write_processing
   4567 #define elf_backend_get_symbol_type	     elf32_hppa_elf_get_symbol_type
   4568 #define elf_backend_reloc_type_class	     elf32_hppa_reloc_type_class
   4569 #define elf_backend_action_discarded	     elf_hppa_action_discarded
   4570 
   4571 #define elf_backend_can_gc_sections	     1
   4572 #define elf_backend_can_refcount	     1
   4573 #define elf_backend_plt_alignment	     2
   4574 #define elf_backend_want_got_plt	     0
   4575 #define elf_backend_plt_readonly	     0
   4576 #define elf_backend_want_plt_sym	     0
   4577 #define elf_backend_got_header_size	     8
   4578 #define elf_backend_want_dynrelro	     1
   4579 #define elf_backend_rela_normal		     1
   4580 #define elf_backend_dtrel_excludes_plt	     1
   4581 #define elf_backend_no_page_alias	     1
   4582 
   4583 #define TARGET_BIG_SYM		hppa_elf32_vec
   4584 #define TARGET_BIG_NAME		"elf32-hppa"
   4585 #define ELF_ARCH		bfd_arch_hppa
   4586 #define ELF_TARGET_ID		HPPA32_ELF_DATA
   4587 #define ELF_MACHINE_CODE	EM_PARISC
   4588 #define ELF_MAXPAGESIZE		0x1000
   4589 #define ELF_OSABI		ELFOSABI_HPUX
   4590 #define elf32_bed		elf32_hppa_hpux_bed
   4591 
   4592 #include "elf32-target.h"
   4593 
   4594 #undef TARGET_BIG_SYM
   4595 #define TARGET_BIG_SYM		hppa_elf32_linux_vec
   4596 #undef TARGET_BIG_NAME
   4597 #define TARGET_BIG_NAME		"elf32-hppa-linux"
   4598 #undef ELF_OSABI
   4599 #define ELF_OSABI		ELFOSABI_GNU
   4600 #undef elf32_bed
   4601 #define elf32_bed		elf32_hppa_linux_bed
   4602 
   4603 #include "elf32-target.h"
   4604 
   4605 #undef TARGET_BIG_SYM
   4606 #define TARGET_BIG_SYM		hppa_elf32_nbsd_vec
   4607 #undef TARGET_BIG_NAME
   4608 #define TARGET_BIG_NAME		"elf32-hppa-netbsd"
   4609 #undef ELF_OSABI
   4610 #define ELF_OSABI		ELFOSABI_NETBSD
   4611 #undef elf32_bed
   4612 #define elf32_bed		elf32_hppa_netbsd_bed
   4613 
   4614 #include "elf32-target.h"
   4615