[Midnightbsd-cvs] src [8102] trunk/sys/i386: enable shared page on i386, now it has a use for vdso_timehands.
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Thu Sep 15 19:07:52 EDT 2016
Revision: 8102
http://svnweb.midnightbsd.org/src/?rev=8102
Author: laffer1
Date: 2016-09-15 19:07:52 -0400 (Thu, 15 Sep 2016)
Log Message:
-----------
enable shared page on i386, now it has a use for vdso_timehands.
Modified Paths:
--------------
trunk/sys/i386/i386/elf_machdep.c
trunk/sys/i386/i386/machdep.c
trunk/sys/i386/include/vmparam.h
Modified: trunk/sys/i386/i386/elf_machdep.c
===================================================================
--- trunk/sys/i386/i386/elf_machdep.c 2016-09-15 23:04:42 UTC (rev 8101)
+++ trunk/sys/i386/i386/elf_machdep.c 2016-09-15 23:07:52 UTC (rev 8102)
@@ -74,12 +74,15 @@
.sv_setregs = exec_setregs,
.sv_fixlimit = NULL,
.sv_maxssiz = NULL,
- .sv_flags = SV_ABI_FREEBSD | SV_IA32 | SV_ILP32,
+ .sv_flags = SV_ABI_FREEBSD | SV_IA32 | SV_ILP32 | 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,
.sv_schedtail = NULL,
};
+INIT_SYSENTVEC(elf32_sysvec, &elf32_freebsd_sysvec);
static Elf32_Brandinfo freebsd_brand_info = {
.brand = ELFOSABI_FREEBSD,
Modified: trunk/sys/i386/i386/machdep.c
===================================================================
--- trunk/sys/i386/i386/machdep.c 2016-09-15 23:04:42 UTC (rev 8101)
+++ trunk/sys/i386/i386/machdep.c 2016-09-15 23:07:52 UTC (rev 8102)
@@ -472,7 +472,13 @@
}
regs->tf_esp = (int)fp;
- regs->tf_eip = PS_STRINGS - szosigcode;
+ if (p->p_sysent->sv_sigcode_base != 0) {
+ regs->tf_eip = p->p_sysent->sv_sigcode_base + szsigcode -
+ szosigcode;
+ } else {
+ /* a.out sysentvec does not use shared page */
+ regs->tf_eip = p->p_sysent->sv_psstrings - szosigcode;
+ }
regs->tf_eflags &= ~(PSL_T | PSL_D);
regs->tf_cs = _ucodesel;
regs->tf_ds = _udatasel;
@@ -599,7 +605,8 @@
}
regs->tf_esp = (int)sfp;
- regs->tf_eip = PS_STRINGS - szfreebsd4_sigcode;
+ regs->tf_eip = p->p_sysent->sv_sigcode_base + szsigcode -
+ szfreebsd4_sigcode;
regs->tf_eflags &= ~(PSL_T | PSL_D);
regs->tf_cs = _ucodesel;
regs->tf_ds = _udatasel;
@@ -750,7 +757,7 @@
}
regs->tf_esp = (int)sfp;
- regs->tf_eip = PS_STRINGS - *(p->p_sysent->sv_szsigcode);
+ regs->tf_eip = p->p_sysent->sv_sigcode_base;
regs->tf_eflags &= ~(PSL_T | PSL_D);
regs->tf_cs = _ucodesel;
regs->tf_ds = _udatasel;
Modified: trunk/sys/i386/include/vmparam.h
===================================================================
--- trunk/sys/i386/include/vmparam.h 2016-09-15 23:04:42 UTC (rev 8101)
+++ trunk/sys/i386/include/vmparam.h 2016-09-15 23:07:52 UTC (rev 8102)
@@ -165,7 +165,8 @@
#define VM_MAXUSER_ADDRESS VADDR(PTDPTDI, 0)
-#define USRSTACK VM_MAXUSER_ADDRESS
+#define SHAREDPAGE (VM_MAXUSER_ADDRESS - PAGE_SIZE)
+#define USRSTACK SHAREDPAGE
#define VM_MAX_ADDRESS VADDR(PTDPTDI, PTDPTDI)
#define VM_MIN_ADDRESS ((vm_offset_t)0)
More information about the Midnightbsd-cvs
mailing list