* elf32-ppc.c (ppc_elf_relocate_section): Adjust addend for GOT16_HA.

* elf64-ppc.c (ppc64_elf_relocate_section): Likewise.  PLTGOT16_HA too.
This commit is contained in:
Alan Modra
2003-01-09 22:51:37 +00:00
parent 2b0ee4544f
commit 86bbe32fa7
3 changed files with 17 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2003-01-10 Alan Modra <amodra@bigpond.net.au>
* 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 <kdienes@apple.com> 2002-01-08 Klee Dienes <kdienes@apple.com>
* Makefile.am (ALL_MACHINES): Use cpu-msp430.lo, not cpu-msp430.c. * Makefile.am (ALL_MACHINES): Use cpu-msp430.lo, not cpu-msp430.c.

View File

@ -1,5 +1,5 @@
/* PowerPC-specific support for 32-bit ELF /* 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. Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support. 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; relocation = sgot->output_offset + off - 4;
} }
if (r_type == R_PPC_GOT16_HA)
addend += ((relocation + addend) & 0x8000) << 1;
break; break;
/* Indirect .sdata relocation */ /* Indirect .sdata relocation */
@ -3946,7 +3948,7 @@ ppc_elf_begin_write_processing (abfd, link_info)
unsigned long datum; unsigned long datum;
char * ptr; char * ptr;
asec = bfd_get_section_by_name (ibfd, APUINFO_SECTION_NAME); asec = bfd_get_section_by_name (ibfd, APUINFO_SECTION_NAME);
if (asec == NULL) if (asec == NULL)
continue; continue;
@ -3957,7 +3959,7 @@ ppc_elf_begin_write_processing (abfd, link_info)
error_message = _("corrupt or empty %s section in %s"); error_message = _("corrupt or empty %s section in %s");
goto fail; goto fail;
} }
if (bfd_seek (ibfd, asec->filepos, SEEK_SET) != 0 if (bfd_seek (ibfd, asec->filepos, SEEK_SET) != 0
|| (bfd_bread (buffer + offset, length, ibfd) != length)) || (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)) if (! bfd_set_section_size (abfd, asec, output_section_size))
ibfd = abfd, ibfd = abfd,
error_message = _("warning: unable to set size of %s section in %s"); error_message = _("warning: unable to set size of %s section in %s");
fail: fail:
free (buffer); 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, num_entries, buffer + 4);
bfd_put_32 (abfd, 0x2, buffer + 8); bfd_put_32 (abfd, 0x2, buffer + 8);
strcpy (buffer + 12, APUINFO_LABEL); strcpy (buffer + 12, APUINFO_LABEL);
length = 20; length = 20;
for (i = 0; i < num_entries; i++) for (i = 0; i < num_entries; i++)
{ {
@ -4081,10 +4083,10 @@ ppc_elf_final_write_processing (abfd, linker)
if (length != asec->_raw_size) if (length != asec->_raw_size)
_bfd_error_handler (_("failed to compute new APUinfo section.")); _bfd_error_handler (_("failed to compute new APUinfo section."));
if (! bfd_set_section_contents (abfd, asec, buffer, (file_ptr) 0, length)) if (! bfd_set_section_contents (abfd, asec, buffer, (file_ptr) 0, length))
_bfd_error_handler (_("failed to install new APUinfo section.")); _bfd_error_handler (_("failed to install new APUinfo section."));
free (buffer); free (buffer);
apuinfo_list_finish (); apuinfo_list_finish ();

View File

@ -1,5 +1,5 @@
/* PowerPC64-specific support for 64-bit ELF. /* 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 <info@swox.com>, Written by Linus Nordberg, Swox AB <info@swox.com>,
based on elf32-ppc.c by Ian Lance Taylor. 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_HA:
case R_PPC64_ADDR16_HIGHERA: case R_PPC64_ADDR16_HIGHERA:
case R_PPC64_ADDR16_HIGHESTA: case R_PPC64_ADDR16_HIGHESTA:
case R_PPC64_GOT16_HA:
case R_PPC64_PLTGOT16_HA:
case R_PPC64_PLT16_HA: case R_PPC64_PLT16_HA:
case R_PPC64_TOC16_HA: case R_PPC64_TOC16_HA:
case R_PPC64_SECTOFF_HA: case R_PPC64_SECTOFF_HA: