svn commit: r217400 - in head/sys/powerpc: include powerpc
Konstantin Belousov
kib at FreeBSD.org
Fri Jan 14 11:36:44 UTC 2011
Author: kib
Date: Fri Jan 14 11:36:44 2011
New Revision: 217400
URL: http://svn.freebsd.org/changeset/base/217400
Log:
Enable shared page for the signal trampolines on PowerPC.
Reviewed and tested by: nwhitehorn
Modified:
head/sys/powerpc/include/vmparam.h
head/sys/powerpc/powerpc/elf32_machdep.c
head/sys/powerpc/powerpc/elf64_machdep.c
head/sys/powerpc/powerpc/exec_machdep.c
Modified: head/sys/powerpc/include/vmparam.h
==============================================================================
--- head/sys/powerpc/include/vmparam.h Fri Jan 14 11:34:58 2011 (r217399)
+++ head/sys/powerpc/include/vmparam.h Fri Jan 14 11:36:44 2011 (r217400)
@@ -35,7 +35,7 @@
#ifndef _MACHINE_VMPARAM_H_
#define _MACHINE_VMPARAM_H_
-#define USRSTACK VM_MAXUSER_ADDRESS
+#define USRSTACK SHAREDPAGE
#ifndef MAXTSIZ
#define MAXTSIZ (64*1024*1024) /* max text size */
@@ -64,10 +64,12 @@
#ifdef __powerpc64__
#define VM_MIN_ADDRESS (0x0000000000000000UL)
#define VM_MAXUSER_ADDRESS (0x7ffffffffffff000UL)
+#define SHAREDPAGE (VM_MAXUSER_ADDRESS - PAGE_SIZE)
#define VM_MAX_ADDRESS (0xffffffffffffffffUL)
#else
#define VM_MIN_ADDRESS ((vm_offset_t)0)
#define VM_MAXUSER_ADDRESS ((vm_offset_t)0x7ffff000)
+#define SHAREDPAGE (VM_MAXUSER_ADDRESS - PAGE_SIZE)
#define VM_MAX_ADDRESS VM_MAXUSER_ADDRESS
#endif
#else /* LOCORE */
@@ -77,8 +79,8 @@
#endif
#endif /* LOCORE */
-#define FREEBSD32_USRSTACK 0x7ffff000
-
+#define FREEBSD32_SHAREDPAGE (0x7ffff000 - PAGE_SIZE)
+#define FREEBSD32_USRSTACK FREEBSD32_SHAREDPAGE
#ifdef AIM
#define KERNBASE 0x00100000UL /* start of kernel virtual */
Modified: head/sys/powerpc/powerpc/elf32_machdep.c
==============================================================================
--- head/sys/powerpc/powerpc/elf32_machdep.c Fri Jan 14 11:34:58 2011 (r217399)
+++ head/sys/powerpc/powerpc/elf32_machdep.c Fri Jan 14 11:36:44 2011 (r217400)
@@ -101,10 +101,13 @@ struct sysentvec elf32_freebsd_sysvec =
#endif
.sv_fixlimit = NULL,
.sv_maxssiz = NULL,
- .sv_flags = SV_ABI_FREEBSD | SV_ILP32,
+ .sv_flags = SV_ABI_FREEBSD | SV_ILP32 | SV_SHP,
.sv_set_syscall_retval = cpu_set_syscall_retval,
.sv_fetch_syscall_args = cpu_fetch_syscall_args,
+ .sv_shared_page_base = FREEBSD32_SHAREDPAGE,
+ .sv_shared_page_len = PAGE_SIZE,
};
+INIT_SYSENTVEC(elf32_sysvec, &elf32_freebsd_sysvec);
static Elf32_Brandinfo freebsd_brand_info = {
.brand = ELFOSABI_FREEBSD,
Modified: head/sys/powerpc/powerpc/elf64_machdep.c
==============================================================================
--- head/sys/powerpc/powerpc/elf64_machdep.c Fri Jan 14 11:34:58 2011 (r217399)
+++ head/sys/powerpc/powerpc/elf64_machdep.c Fri Jan 14 11:36:44 2011 (r217400)
@@ -76,11 +76,14 @@ struct sysentvec elf64_freebsd_sysvec =
.sv_setregs = exec_setregs,
.sv_fixlimit = NULL,
.sv_maxssiz = NULL,
- .sv_flags = SV_ABI_FREEBSD | SV_LP64,
+ .sv_flags = SV_ABI_FREEBSD | SV_LP64 | SV_SHP,
.sv_set_syscall_retval = cpu_set_syscall_retval,
.sv_fetch_syscall_args = cpu_fetch_syscall_args,
.sv_syscallnames = syscallnames,
+ .sv_shared_page_base = SHAREDPAGE,
+ .sv_shared_page_len = PAGE_SIZE,
};
+INIT_SYSENTVEC(elf64_sysvec, &elf64_freebsd_sysvec);
static Elf64_Brandinfo freebsd_brand_info = {
.brand = ELFOSABI_FREEBSD,
@@ -114,7 +117,6 @@ SYSINIT(oelf64, SI_SUB_EXEC, SI_ORDER_AN
(sysinit_cfunc_t) elf64_insert_brand_entry,
&freebsd_brand_oinfo);
-
void
elf64_dump_thread(struct thread *td __unused, void *dst __unused,
size_t *off __unused)
Modified: head/sys/powerpc/powerpc/exec_machdep.c
==============================================================================
--- head/sys/powerpc/powerpc/exec_machdep.c Fri Jan 14 11:34:58 2011 (r217399)
+++ head/sys/powerpc/powerpc/exec_machdep.c Fri Jan 14 11:36:44 2011 (r217400)
@@ -290,8 +290,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi,
mtx_unlock(&psp->ps_mtx);
PROC_UNLOCK(p);
- tf->srr0 = (register_t)(p->p_sysent->sv_psstrings -
- *(p->p_sysent->sv_szsigcode));
+ tf->srr0 = (register_t)p->p_sysent->sv_sigcode_base;
/*
* copy the frame out to userland.
More information about the svn-src-head
mailing list