[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