From ccf00ab6a1bf897a53932aa904a804e539e66c31 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Fri, 15 Feb 2002 21:26:05 +0000 Subject: [PATCH] * elf64-alpha.c (elf64_alpha_relocate_section) [BRSGP]: A target section with no got matches any got. Simplify error generaion. --- bfd/ChangeLog | 5 +++++ bfd/elf64-alpha.c | 22 ++++++++-------------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 8b43bfff709..3bdae379bda 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2002-02-15 Richard Henderson + + * elf64-alpha.c (elf64_alpha_relocate_section) [BRSGP]: A target + section with no got matches any got. Simplify error generaion. + 2002-02-15 Alan Modra Support arbitrary length fill patterns. diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c index d0d325176cb..53ac1e79175 100644 --- a/bfd/elf64-alpha.c +++ b/bfd/elf64-alpha.c @@ -3581,24 +3581,18 @@ elf64_alpha_relocate_section (output_bfd, info, input_bfd, input_section, the instruction rather than the end. */ addend -= 4; - /* The source and destination gp must be the same. */ - if (h != NULL + /* The source and destination gp must be the same. Note that + the source will always have an assigned gp, since we forced + one in check_relocs, but that the destination may not, as + it might not have had any relocations at all. Also take + care not to crash if H is an undefined symbol. */ + if (h != NULL && sec != NULL + && alpha_elf_tdata (sec->owner)->gotobj && gotobj != alpha_elf_tdata (sec->owner)->gotobj) { - if (h != NULL) - name = h->root.root.root.string; - else - { - name = (bfd_elf_string_from_elf_section - (input_bfd, symtab_hdr->sh_link, sym->st_name)); - if (name == NULL) - name = _(""); - else if (name[0] == 0) - name = bfd_section_name (input_bfd, sec); - } (*_bfd_error_handler) (_("%s: change in gp: BRSGP %s"), - bfd_archive_filename (input_bfd), name); + bfd_archive_filename (input_bfd), h->root.root.root.string); ret_val = false; } -- 2.30.2