This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

error gprel relocs vs dynamic symbols


Such relocations cannot be resolved by the dynamic linker,
since it doesn't know what the GP base value is.  Also, there
is the implicit intent that the symbol was _supposed_ to be
resolved locally.


r~

        * elf64-alpha.c (elf64_alpha_relocate_section): Soft fail
        relocation errors.  Fail gp-relative relocations against
        dynamic symbols.

Index: elf64-alpha.c
===================================================================
RCS file: /cvs/src/src/bfd/elf64-alpha.c,v
retrieving revision 1.34
diff -c -p -d -r1.34 elf64-alpha.c
*** elf64-alpha.c	2001/09/05 03:00:13	1.34
--- elf64-alpha.c	2001/09/09 06:55:56
*************** elf64_alpha_relocate_section (output_bfd
*** 3241,3246 ****
--- 3241,3247 ----
    asection *sec, *sgot, *srel, *srelgot;
    bfd *dynobj, *gotobj;
    bfd_vma gp;
+   boolean ret_val = true;
  
    srelgot = srel = NULL;
    symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
*************** elf64_alpha_relocate_section (output_bfd
*** 3389,3395 ****
  		     input_section, rel->r_offset,
  		     (!info->shared || info->no_undefined
  		      || ELF_ST_VISIBILITY (h->root.other)))))
! 		return false;
  	      relocation = 0;
  	    }
  	}
--- 3390,3396 ----
  		     input_section, rel->r_offset,
  		     (!info->shared || info->no_undefined
  		      || ELF_ST_VISIBILITY (h->root.other)))))
! 		ret_val = false;
  	      relocation = 0;
  	    }
  	}
*************** elf64_alpha_relocate_section (output_bfd
*** 3488,3498 ****
--- 3489,3513 ----
  	case R_ALPHA_GPREL16:
  	case R_ALPHA_GPREL32:
  	case R_ALPHA_GPRELLOW:
+ 	  if (h && alpha_elf_dynamic_symbol_p (&h->root, info))
+             {
+               (*_bfd_error_handler)
+                 (_("%s: gp-relative relocation against dynamic symbol %s"),
+                  bfd_get_filename (input_bfd), h->root.root.root.string);
+               ret_val = false;
+             }
  	  BFD_ASSERT(gp != 0);
  	  relocation -= gp;
  	  goto default_reloc;
  
  	case R_ALPHA_GPRELHIGH:
+ 	  if (h && alpha_elf_dynamic_symbol_p (&h->root, info))
+             {
+               (*_bfd_error_handler)
+                 (_("%s: gp-relative relocation against dynamic symbol %s"),
+                  bfd_get_filename (input_bfd), h->root.root.root.string);
+               ret_val = false;
+             }
  	  BFD_ASSERT(gp != 0);
  	  relocation -= gp;
  	  relocation += addend;
*************** elf64_alpha_relocate_section (output_bfd
*** 3609,3615 ****
  	    if (! ((*info->callbacks->reloc_overflow)
  		   (info, name, howto->name, (bfd_vma) 0,
  		    input_bfd, input_section, rel->r_offset)))
! 	      return false;
  	  }
  	  break;
  
--- 3624,3630 ----
  	    if (! ((*info->callbacks->reloc_overflow)
  		   (info, name, howto->name, (bfd_vma) 0,
  		    input_bfd, input_section, rel->r_offset)))
! 	      ret_val = false;
  	  }
  	  break;
  
*************** elf64_alpha_relocate_section (output_bfd
*** 3619,3625 ****
  	}
      }
  
!   return true;
  }
  
  /* Finish up dynamic symbol handling.  We set the contents of various
--- 3634,3640 ----
  	}
      }
  
!   return ret_val;
  }
  
  /* Finish up dynamic symbol handling.  We set the contents of various


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]