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