Update.
authorAndreas Jaeger <aj@suse.de>
Wed, 10 May 2000 15:58:36 +0000 (15:58 +0000)
committerAndreas Jaeger <aj@suse.de>
Wed, 10 May 2000 15:58:36 +0000 (15:58 +0000)
  * elf/dl-reloc.c (_dl_reloc_bad_type): Sync messages with plt
  argument.
  * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Handle
  R_SPARC_UA64.
  * sysdeps/unix/sysv/linux/sparc/sparc64/time.c: New file.

2000-05-10  Jakub Jelinek  <jakub@redhat.com>

ChangeLog
elf/dl-reloc.c
sysdeps/sparc/sparc64/dl-machine.h
sysdeps/unix/sysv/linux/sparc/sparc64/time.c [new file with mode: 0644]

index eaabc81..b607e38 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2000-05-10  Jakub Jelinek  <jakub@redhat.com>
 
+       * elf/dl-reloc.c (_dl_reloc_bad_type): Sync messages with plt
+       argument.
+       * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Handle
+       R_SPARC_UA64.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/time.c: New file.
+
+2000-05-10  Jakub Jelinek  <jakub@redhat.com>
+
        * elf/dl-reloc.c (_dl_reloc_bad_type): Write type into the message
        at proper place.  Compute the high nibble correctly.
 
index 3ee6f08..3bfba77 100644 (file)
@@ -157,14 +157,14 @@ _dl_reloc_bad_type (struct link_map *map, uint_fast8_t type, int plt)
   extern const char _itoa_lower_digits[];
   if (plt)
     {
-      char msg[] = "unexpected reloc type 0x??";
+      char msg[] = "unexpected PLT reloc type 0x??";
       msg[sizeof msg - 3] = DIGIT(type >> 4);
       msg[sizeof msg - 2] = DIGIT(type);
       _dl_signal_error (0, map->l_name, msg);
     }
   else
     {
-      char msg[] = "unexpected PLT reloc type 0x??";
+      char msg[] = "unexpected reloc type 0x??";
       msg[sizeof msg - 3] = DIGIT(type >> 4);
       msg[sizeof msg - 2] = DIGIT(type);
       _dl_signal_error (0, map->l_name, msg);
index 552076a..35efc8e 100644 (file)
@@ -316,6 +316,24 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
          elf_machine_fixup_plt(map, NULL, reloc, reloc_addr, value);
          break;
 
+       case R_SPARC_UA64:
+         if (! ((long) reloc_addr & 3))
+           {
+             /* Common in .eh_frame */
+             ((unsigned int *) reloc_addr) [0] = value >> 32;
+             ((unsigned int *) reloc_addr) [1] = value;
+             break;
+           }
+         ((unsigned char *) reloc_addr) [0] = value >> 56;
+         ((unsigned char *) reloc_addr) [1] = value >> 48;
+         ((unsigned char *) reloc_addr) [2] = value >> 40;
+         ((unsigned char *) reloc_addr) [3] = value >> 32;
+         ((unsigned char *) reloc_addr) [4] = value >> 24;
+         ((unsigned char *) reloc_addr) [5] = value >> 16;
+         ((unsigned char *) reloc_addr) [6] = value >> 8;
+         ((unsigned char *) reloc_addr) [7] = value;
+         break;
+
        default:
          _dl_reloc_bad_type (map, ELFW(R_TYPE) (reloc->r_info), 0);
          break;
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/time.c b/sysdeps/unix/sysv/linux/sparc/sparc64/time.c
new file mode 100644 (file)
index 0000000..3a64ef1
--- /dev/null
@@ -0,0 +1 @@
+#include <sysdeps/unix/time.c>