]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_fixup_plt): cvs/sparc-2_0_x-branch
authorDavid S. Miller <davem@redhat.com>
Sat, 23 May 1998 04:35:34 +0000 (04:35 +0000)
committerDavid S. Miller <davem@redhat.com>
Sat, 23 May 1998 04:35:34 +0000 (04:35 +0000)
Always perform the flush during RTLD_BOOTSTRAP.

ChangeLog.SPARC
sysdeps/sparc/sparc32/dl-machine.h

index b5ed4f33d4783161e8157d44d543c38b5d4a2694..c12a5c236ee7c95185bc0bd09a1b0f3425f5392b 100644 (file)
@@ -1,3 +1,8 @@
+1998-05-23  David S. Miller  <davem@dm.cobaltmicro.com>
+
+       * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_fixup_plt):
+       Always perform the flush during RTLD_BOOTSTRAP.
+
 1998-05-21  David S. Miller  <davem@dm.cobaltmicro.com>
 
        * sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list: Add
index ef041e2e1151f0479f5a1aa33a814fe233bbec9e..fde559d999ef52ef36b0484c1bfe023bd7d8b1b7 100644 (file)
@@ -274,6 +274,10 @@ elf_machine_fixup_plt (struct link_map *map, const Elf32_Rela *reloc,
      if we execute it and hw does not support it. */
   __asm ("" : "=r" (hwcap) : "0" (hwcap));
   do_flush = (!hwcap || (*hwcap & HWCAP_SPARC_FLUSH));
+#else
+  /* Unfortunately, this is necessary, so that we can ensure
+     ld.so will not execute corrupt PLT entry instructions. */
+  const int do_flush = 1;
 #endif
 
   /* For thread safety, write the instructions from the bottom and
@@ -282,16 +286,12 @@ elf_machine_fixup_plt (struct link_map *map, const Elf32_Rela *reloc,
      But we also can't tell if we _can_ use flush, so don't. */
 
   reloc_addr[2] = OPCODE_JMP_G1 | (value & 0x3ff);
-#ifndef RTLD_BOOTSTRAP
   if (do_flush)
     __asm __volatile ("flush %0+8" : : "r"(reloc_addr));
-#endif
 
   reloc_addr[1] = OPCODE_SETHI_G1 | (value >> 10);
-#ifndef RTLD_BOOTSTRAP
   if (do_flush)
     __asm __volatile ("flush %0+4" : : "r"(reloc_addr));
-#endif
 }
 
 #ifdef RESOLVE