* x86-64-tdep.c (x86_64_push_arguments): Align stack to 16-byte
[deliverable/binutils-gdb.git] / bfd / elf64-alpha.c
index aa592fae17dd350552518495947d7c45cc2b201b..767d89c4072e3bf797954c9cc300c1f49fa32e40 100644 (file)
@@ -305,7 +305,9 @@ alpha_elf_dynamic_symbol_p (h, info)
 
   if ((info->shared && !info->symbolic)
       || ((h->elf_link_hash_flags
-          & (ELF_LINK_HASH_DEF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR))
+          & (ELF_LINK_HASH_DEF_DYNAMIC
+             | ELF_LINK_HASH_DEF_REGULAR
+             | ELF_LINK_HASH_REF_REGULAR))
          == (ELF_LINK_HASH_DEF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR)))
     return TRUE;
 
@@ -1554,7 +1556,7 @@ elf64_alpha_relax_opt_call (info, symval)
        }
       else
        {
-         tsec_relocs = (_bfd_elf64_link_read_relocs
+         tsec_relocs = (_bfd_elf_link_read_relocs
                         (info->abfd, info->tsec, (PTR) NULL,
                         (Elf_Internal_Rela *) NULL,
                         info->link_info->keep_memory));
@@ -2056,7 +2058,7 @@ elf64_alpha_relax_section (abfd, sec, link_info, again)
   /* We are not currently changing any sizes, so only one pass.  */
   *again = FALSE;
 
-  if (link_info->relocateable
+  if (link_info->relocatable
       || (sec->flags & SEC_RELOC) == 0
       || sec->reloc_count == 0)
     return TRUE;
@@ -2070,7 +2072,7 @@ elf64_alpha_relax_section (abfd, sec, link_info, again)
   local_got_entries = alpha_elf_tdata(abfd)->local_got_entries;
 
   /* Load the relocations for this section.  */
-  internal_relocs = (_bfd_elf64_link_read_relocs
+  internal_relocs = (_bfd_elf_link_read_relocs
                     (abfd, sec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
                      link_info->keep_memory));
   if (internal_relocs == NULL)
@@ -2463,7 +2465,7 @@ elf64_alpha_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
      bfd_vma *valp;
 {
   if (sym->st_shndx == SHN_COMMON
-      && !info->relocateable
+      && !info->relocatable
       && sym->st_size <= elf_gp_size (abfd))
     {
       /* Common symbols less than or equal to -G nn bytes are
@@ -3055,7 +3057,7 @@ elf64_alpha_check_relocs (abfd, info, sec, relocs)
   bfd_boolean got_created;
   bfd_size_type amt;
 
-  if (info->relocateable)
+  if (info->relocatable)
     return TRUE;
 
   dynobj = elf_hash_table(info)->dynobj;
@@ -3861,7 +3863,7 @@ elf64_alpha_always_size_sections (output_bfd, info)
 {
   bfd *i;
 
-  if (info->relocateable)
+  if (info->relocatable)
     return TRUE;
 
   /* First, take care of the indirect symbols created by versioning.  */
@@ -4088,7 +4090,7 @@ elf64_alpha_size_dynamic_sections (output_bfd, info)
   if (elf_hash_table (info)->dynamic_sections_created)
     {
       /* Set the contents of the .interp section to the interpreter.  */
-      if (!info->shared)
+      if (info->executable)
        {
          s = bfd_get_section_by_name (dynobj, ".interp");
          BFD_ASSERT (s != NULL);
@@ -4174,7 +4176,7 @@ elf64_alpha_size_dynamic_sections (output_bfd, info)
 #define add_dynamic_entry(TAG, VAL) \
   bfd_elf64_add_dynamic_entry (info, (bfd_vma) (TAG), (bfd_vma) (VAL))
 
-      if (!info->shared)
+      if (info->executable)
        {
          if (!add_dynamic_entry (DT_DEBUG, 0))
            return FALSE;
@@ -4328,7 +4330,7 @@ elf64_alpha_relocate_section (output_bfd, info, input_bfd, input_section,
   const char *section_name;
 
   /* Handle relocatable links with a smaller loop.  */
-  if (info->relocateable)
+  if (info->relocatable)
     return elf64_alpha_relocate_section_r (output_bfd, info, input_bfd,
                                           input_section, contents, relocs,
                                           local_syms, local_sections);
@@ -4503,7 +4505,6 @@ elf64_alpha_relocate_section (output_bfd, info, input_bfd, input_section,
          else if (h->root.root.type == bfd_link_hash_undefweak)
            undef_weak_ref = TRUE;
          else if (info->shared
-                  && (!info->symbolic || info->allow_shlib_undefined)
                   && !info->no_undefined
                   && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
            ;
@@ -4515,7 +4516,6 @@ elf64_alpha_relocate_section (output_bfd, info, input_bfd, input_section,
                     (!info->shared || info->no_undefined
                      || ELF_ST_VISIBILITY (h->root.other)))))
                return FALSE;
-             ret_val = FALSE;
              continue;
            }
 
@@ -4581,8 +4581,20 @@ elf64_alpha_relocate_section (output_bfd, info, input_bfd, input_section,
          value -= gp;
          goto default_reloc;
 
-       case R_ALPHA_GPREL16:
        case R_ALPHA_GPREL32:
+         /* If the target section was a removed linkonce section,
+            r_symndx will be zero.  In this case, assume that the
+            switch will not be used, so don't fill it in.  If we
+            do nothing here, we'll get relocation truncated messages,
+            due to the placement of the application above 4GB.  */
+         if (r_symndx == 0)
+           {
+             r = bfd_reloc_ok;
+             break;
+           }
+         /* FALLTHRU */
+
+       case R_ALPHA_GPREL16:
        case R_ALPHA_GPRELLOW:
          if (dynamic_symbol_p)
             {
@@ -5176,7 +5188,7 @@ elf64_alpha_finish_dynamic_sections (output_bfd, info)
          bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
        }
 
-      /* Initialize the PLT0 entry */
+      /* Initialize the PLT0 entry */
       if (splt->_raw_size > 0)
        {
          bfd_put_32 (output_bfd, PLT_HEADER_WORD1, splt->contents);
@@ -5544,7 +5556,7 @@ static const struct elf_size_info alpha_elf_size_info =
   sizeof (Elf_External_Note),
   8,
   1,
-  64, 8,
+  64, 3,
   ELFCLASS64, EV_CURRENT,
   bfd_elf64_write_out_phdrs,
   bfd_elf64_write_shdrs_and_ehdr,
This page took 0.028354 seconds and 4 git commands to generate.