diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf64-alpha.c | 14 |
2 files changed, 18 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index eb9b28b..2396d5b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2003-04-09 Richard Henderson <rth@redhat.com> + + * elf64-alpha.c (elf64_alpha_relocate_section) <R_ALPHA_GPREL32>: + Ignore relocations against r_symndx == 0. + 2003-04-09 H.J. Lu <hjl@gnu.org> * elf64-alpha.c (elf64_alpha_relocate_section): Don't return diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c index ddf7395..bf18e205 100644 --- a/bfd/elf64-alpha.c +++ b/bfd/elf64-alpha.c @@ -4579,8 +4579,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) { |