* elf32-ppc.c (ppc_elf_relocate_section): Adjust addend for GOT16_HA.
authorAlan Modra <amodra@gmail.com>
Thu, 9 Jan 2003 22:51:37 +0000 (22:51 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 9 Jan 2003 22:51:37 +0000 (22:51 +0000)
* elf64-ppc.c (ppc64_elf_relocate_section): Likewise.  PLTGOT16_HA too.

bfd/ChangeLog
bfd/elf32-ppc.c
bfd/elf64-ppc.c

index 44f3ac3d954b8926c025ec0a745b39fa38a635db..6e02f61dbe7290a78e4e81ac273759a47cf2bead 100644 (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>
 
        * Makefile.am (ALL_MACHINES): Use cpu-msp430.lo, not cpu-msp430.c.
index 2406c6751b5dcf8c6f33a3f3b3fcc199345ced0a..c8aae885dbdf2823bd863f708e0e14808ebd5f29 100644 (file)
@@ -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 ();
index 579188397679823b790bbabee018e22b120cd8c7..f78f275460aac53a4df9d948ed70a03201883f91 100644 (file)
@@ -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 <info@swox.com>,
    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: