From 86bbe32fa7a502c07ecde03f51bb0441eff907b6 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 9 Jan 2003 22:51:37 +0000 Subject: [PATCH] * elf32-ppc.c (ppc_elf_relocate_section): Adjust addend for GOT16_HA. * elf64-ppc.c (ppc64_elf_relocate_section): Likewise. PLTGOT16_HA too. --- bfd/ChangeLog | 5 +++++ bfd/elf32-ppc.c | 16 +++++++++------- bfd/elf64-ppc.c | 4 +++- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 44f3ac3d954..6e02f61dbe7 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2003-01-10 Alan Modra + + * elf32-ppc.c (ppc_elf_relocate_section): Adjust addend for GOT16_HA. + * elf64-ppc.c (ppc64_elf_relocate_section): Likewise. PLTGOT16_HA too. + 2002-01-08 Klee Dienes * Makefile.am (ALL_MACHINES): Use cpu-msp430.lo, not cpu-msp430.c. diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index 2406c6751b5..c8aae885dbd 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -1,5 +1,5 @@ /* PowerPC-specific support for 32-bit ELF - Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 + Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. @@ -3414,6 +3414,8 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section, relocation = sgot->output_offset + off - 4; } + if (r_type == R_PPC_GOT16_HA) + addend += ((relocation + addend) & 0x8000) << 1; break; /* Indirect .sdata relocation */ @@ -3946,7 +3948,7 @@ ppc_elf_begin_write_processing (abfd, link_info) unsigned long datum; char * ptr; - + asec = bfd_get_section_by_name (ibfd, APUINFO_SECTION_NAME); if (asec == NULL) continue; @@ -3957,7 +3959,7 @@ ppc_elf_begin_write_processing (abfd, link_info) error_message = _("corrupt or empty %s section in %s"); goto fail; } - + if (bfd_seek (ibfd, asec->filepos, SEEK_SET) != 0 || (bfd_bread (buffer + offset, length, ibfd) != length)) { @@ -4011,7 +4013,7 @@ ppc_elf_begin_write_processing (abfd, link_info) if (! bfd_set_section_size (abfd, asec, output_section_size)) ibfd = abfd, error_message = _("warning: unable to set size of %s section in %s"); - + fail: free (buffer); @@ -4071,7 +4073,7 @@ ppc_elf_final_write_processing (abfd, linker) bfd_put_32 (abfd, num_entries, buffer + 4); bfd_put_32 (abfd, 0x2, buffer + 8); strcpy (buffer + 12, APUINFO_LABEL); - + length = 20; for (i = 0; i < num_entries; i++) { @@ -4081,10 +4083,10 @@ ppc_elf_final_write_processing (abfd, linker) if (length != asec->_raw_size) _bfd_error_handler (_("failed to compute new APUinfo section.")); - + if (! bfd_set_section_contents (abfd, asec, buffer, (file_ptr) 0, length)) _bfd_error_handler (_("failed to install new APUinfo section.")); - + free (buffer); apuinfo_list_finish (); diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 57918839767..f78f275460a 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -1,5 +1,5 @@ /* PowerPC64-specific support for 64-bit ELF. - Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Written by Linus Nordberg, Swox AB , based on elf32-ppc.c by Ian Lance Taylor. @@ -5903,6 +5903,8 @@ ppc64_elf_relocate_section (output_bfd, info, input_bfd, input_section, case R_PPC64_ADDR16_HA: case R_PPC64_ADDR16_HIGHERA: case R_PPC64_ADDR16_HIGHESTA: + case R_PPC64_GOT16_HA: + case R_PPC64_PLTGOT16_HA: case R_PPC64_PLT16_HA: case R_PPC64_TOC16_HA: case R_PPC64_SECTOFF_HA: -- 2.30.2