Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 23 Sep 2012 09:13:57 +0000 (UTC)
From:      Takahashi Yoshihiro <nyan@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r240855 - head/sys/pc98/pc98
Message-ID:  <201209230913.q8N9DvCA061277@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: nyan
Date: Sun Sep 23 09:13:57 2012
New Revision: 240855
URL: http://svn.freebsd.org/changeset/base/240855

Log:
  MFi386: revision 237445
  
    Commit changes missed from r237435.  Properly calculate the signal
    trampoline addresses after the shared page is enabled.  Handle FreeBSD
    ABIs without shared page support too.
  
  MFi386: revision 238792
  
    Introduce curpcb magic variable.

Modified:
  head/sys/pc98/pc98/machdep.c

Modified: head/sys/pc98/pc98/machdep.c
==============================================================================
--- head/sys/pc98/pc98/machdep.c	Sun Sep 23 08:50:54 2012	(r240854)
+++ head/sys/pc98/pc98/machdep.c	Sun Sep 23 09:13:57 2012	(r240855)
@@ -407,7 +407,13 @@ osendsig(sig_t catcher, ksiginfo_t *ksi,
 	}
 
 	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;
@@ -534,7 +540,8 @@ freebsd4_sendsig(sig_t catcher, ksiginfo
 	}
 
 	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;
@@ -685,7 +692,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, 
 	}
 
 	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;
@@ -1412,7 +1419,7 @@ exec_setregs(struct thread *td, struct i
                 pcb->pcb_dr3 = 0;
                 pcb->pcb_dr6 = 0;
                 pcb->pcb_dr7 = 0;
-                if (pcb == PCPU_GET(curpcb)) {
+                if (pcb == curpcb) {
 		        /*
 			 * Clear the debug registers on the running
 			 * CPU, otherwise they will end up affecting



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201209230913.q8N9DvCA061277>