svn commit: r203331 - projects/ppc64/libexec/rtld-elf/powerpc64

Nathan Whitehorn nwhitehorn at FreeBSD.org
Mon Feb 1 00:13:30 UTC 2010


Author: nwhitehorn
Date: Mon Feb  1 00:13:30 2010
New Revision: 203331
URL: http://svn.freebsd.org/changeset/base/203331

Log:
  Do not restore the original stack pointer: the PPC64 ABI stores things in
  the parent's stack frame, which becomes the program arguments if R1 is
  restored. This leads to bad. Also add some cache-related paranoia to
  setting of PLT slots, following glibc. With these changes, nearly all
  dynamic executables run correctly with LD_BIND_NOW=1.

Modified:
  projects/ppc64/libexec/rtld-elf/powerpc64/reloc.c
  projects/ppc64/libexec/rtld-elf/powerpc64/rtld_start.S

Modified: projects/ppc64/libexec/rtld-elf/powerpc64/reloc.c
==============================================================================
--- projects/ppc64/libexec/rtld-elf/powerpc64/reloc.c	Sun Jan 31 23:39:55 2010	(r203330)
+++ projects/ppc64/libexec/rtld-elf/powerpc64/reloc.c	Mon Feb  1 00:13:30 2010	(r203331)
@@ -441,6 +441,8 @@ reloc_jmpslot(Elf_Addr *wherep, Elf_Addr
 		    (Elf_Addr)defobj->relocbase;
 	}
 
+	__asm __volatile("dcbst 0,%0; sync" :: "r"(wherep) : "memory");
+
 	return (target);
 }
 

Modified: projects/ppc64/libexec/rtld-elf/powerpc64/rtld_start.S
==============================================================================
--- projects/ppc64/libexec/rtld-elf/powerpc64/rtld_start.S	Sun Jan 31 23:39:55 2010	(r203330)
+++ projects/ppc64/libexec/rtld-elf/powerpc64/rtld_start.S	Mon Feb  1 00:13:30 2010	(r203331)
@@ -96,7 +96,6 @@ _ENTRY(_rtld_start)
 	ld      %r6,72(%r1)	/* obj */
 	ld      %r7,80(%r1)	/* exit proc */
 	ld      %r8,88(%r1)	/* ps_strings */
-        addi    %r1,%r1,96	/* restore original stackptr */
 
 	blrl	/* _start(argc, argv, envp, obj, cleanup, ps_strings) */
 


More information about the svn-src-projects mailing list