aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/elf64-alpha.c11
2 files changed, 16 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 4285f6f..944790f 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,7 +1,11 @@
+2001-09-11 Richard Henderson <rth@redhat.com>
+
+ * elf64-alpha.c (elf64_alpha_relocate_section): Do not
+ apply HINT relocations against dynamic symbols.
+
2001-09-11 H.J. Lu <hjl@gnu.org>
- * inker.c (link_action): Change COMMON_ROW\defw from CREF to
- COM.
+ * linker.c (link_action): Change COMMON_ROW\defw from CREF to COM.
2001-09-09 Richard Henderson <rth@redhat.com>
diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c
index 8efd4ee..e345b6d 100644
--- a/bfd/elf64-alpha.c
+++ b/bfd/elf64-alpha.c
@@ -3462,8 +3462,17 @@ elf64_alpha_relocate_section (output_bfd, info, input_bfd, input_section,
+ ((relocation >> 15) & 1));
goto default_reloc;
- case R_ALPHA_BRADDR:
case R_ALPHA_HINT:
+ /* A call to a dynamic symbol is definitely out of range of
+ the 16-bit displacement. Don't bother writing anything. */
+ if (h && alpha_elf_dynamic_symbol_p (&h->root, info))
+ {
+ r = bfd_reloc_ok;
+ break;
+ }
+ /* FALLTHRU */
+
+ case R_ALPHA_BRADDR:
/* The regular PC-relative stuff measures from the start of
the instruction rather than the end. */
addend -= 4;