svn commit: r199412 - in projects/ppc64/sys: conf powerpc/include
powerpc/powerpc
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Tue Nov 17 17:53:52 UTC 2009
Author: nwhitehorn
Date: Tue Nov 17 17:53:52 2009
New Revision: 199412
URL: http://svn.freebsd.org/changeset/base/199412
Log:
Split up 32 and 64-bit sigcode, add a skeleton implementation of 64-bit
sigcode, and fix 32-bit signal delivery some more.
Added:
projects/ppc64/sys/powerpc/powerpc/sigcode32.S
- copied, changed from r198415, projects/ppc64/sys/powerpc/powerpc/sigcode.S
projects/ppc64/sys/powerpc/powerpc/sigcode64.S
- copied, changed from r198415, projects/ppc64/sys/powerpc/powerpc/sigcode.S
Deleted:
projects/ppc64/sys/powerpc/powerpc/sigcode.S
Modified:
projects/ppc64/sys/conf/files.powerpc
projects/ppc64/sys/conf/files.powerpc64
projects/ppc64/sys/powerpc/include/md_var.h
projects/ppc64/sys/powerpc/powerpc/elf32_machdep.c
projects/ppc64/sys/powerpc/powerpc/elf64_machdep.c
projects/ppc64/sys/powerpc/powerpc/exec_machdep.c
Modified: projects/ppc64/sys/conf/files.powerpc
==============================================================================
--- projects/ppc64/sys/conf/files.powerpc Tue Nov 17 17:38:41 2009 (r199411)
+++ projects/ppc64/sys/conf/files.powerpc Tue Nov 17 17:53:52 2009 (r199412)
@@ -171,7 +171,7 @@ powerpc/powerpc/platform.c standard
powerpc/powerpc/platform_if.m standard
powerpc/powerpc/sc_machdep.c optional sc
powerpc/powerpc/setjmp.S standard
-powerpc/powerpc/sigcode.S standard
+powerpc/powerpc/sigcode32.S standard
powerpc/powerpc/stack_machdep.c optional ddb | stack
powerpc/powerpc/suswintr.c standard
powerpc/powerpc/syncicache.c standard
Modified: projects/ppc64/sys/conf/files.powerpc64
==============================================================================
--- projects/ppc64/sys/conf/files.powerpc64 Tue Nov 17 17:38:41 2009 (r199411)
+++ projects/ppc64/sys/conf/files.powerpc64 Tue Nov 17 17:53:52 2009 (r199412)
@@ -125,7 +125,8 @@ powerpc/powerpc/platform.c standard
powerpc/powerpc/platform_if.m standard
powerpc/powerpc/sc_machdep.c optional sc
powerpc/powerpc/setjmp.S standard
-powerpc/powerpc/sigcode.S standard
+powerpc/powerpc/sigcode32.S optional compat_freebsd32
+powerpc/powerpc/sigcode64.S standard
powerpc/powerpc/stack_machdep.c optional ddb | stack
powerpc/powerpc/suswintr.c standard
powerpc/powerpc/syncicache.c standard
Modified: projects/ppc64/sys/powerpc/include/md_var.h
==============================================================================
--- projects/ppc64/sys/powerpc/include/md_var.h Tue Nov 17 17:38:41 2009 (r199411)
+++ projects/ppc64/sys/powerpc/include/md_var.h Tue Nov 17 17:53:52 2009 (r199412)
@@ -33,9 +33,14 @@
* Miscellaneous machine-dependent declarations.
*/
-extern char sigcode[];
-extern char esigcode[];
-extern int szsigcode;
+extern char sigcode32[];
+extern int szsigcode32;
+
+#ifdef __powerpc64__
+extern char sigcode64[];
+extern int szsigcode64;
+#endif
+
extern long Maxmem;
extern int busdma_swi_pending;
Modified: projects/ppc64/sys/powerpc/powerpc/elf32_machdep.c
==============================================================================
--- projects/ppc64/sys/powerpc/powerpc/elf32_machdep.c Tue Nov 17 17:38:41 2009 (r199411)
+++ projects/ppc64/sys/powerpc/powerpc/elf32_machdep.c Tue Nov 17 17:53:52 2009 (r199412)
@@ -72,8 +72,8 @@ struct sysentvec elf32_freebsd_sysvec =
.sv_transtrap = NULL,
.sv_fixup = __elfN(freebsd_fixup),
.sv_sendsig = sendsig,
- .sv_sigcode = sigcode,
- .sv_szsigcode = &szsigcode,
+ .sv_sigcode = sigcode32,
+ .sv_szsigcode = &szsigcode32,
.sv_prepsyscall = NULL,
.sv_name = "FreeBSD ELF32",
.sv_coredump = __elfN(coredump),
Modified: projects/ppc64/sys/powerpc/powerpc/elf64_machdep.c
==============================================================================
--- projects/ppc64/sys/powerpc/powerpc/elf64_machdep.c Tue Nov 17 17:38:41 2009 (r199411)
+++ projects/ppc64/sys/powerpc/powerpc/elf64_machdep.c Tue Nov 17 17:53:52 2009 (r199412)
@@ -59,8 +59,8 @@ struct sysentvec elf64_freebsd_sysvec =
.sv_transtrap = NULL,
.sv_fixup = __elfN(freebsd_fixup),
.sv_sendsig = sendsig,
- .sv_sigcode = sigcode,
- .sv_szsigcode = &szsigcode,
+ .sv_sigcode = sigcode64,
+ .sv_szsigcode = &szsigcode64,
.sv_prepsyscall = NULL,
.sv_name = "FreeBSD ELF64",
.sv_coredump = __elfN(coredump),
Modified: projects/ppc64/sys/powerpc/powerpc/exec_machdep.c
==============================================================================
--- projects/ppc64/sys/powerpc/powerpc/exec_machdep.c Tue Nov 17 17:38:41 2009 (r199411)
+++ projects/ppc64/sys/powerpc/powerpc/exec_machdep.c Tue Nov 17 17:53:52 2009 (r199412)
@@ -141,8 +141,6 @@ sendsig(sig_t catcher, ksiginfo_t *ksi,
tf = td->td_frame;
oonstack = sigonstack(tf->fixreg[1]);
- rndfsize = ((sizeof(sf) + 15) / 16) * 16;
-
/*
* Fill siginfo structure.
*/
@@ -162,6 +160,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi,
code = siginfo32.si_code;
sfp = (caddr_t)&sf32;
sfpsize = sizeof(sf32);
+ rndfsize = ((sizeof(sf32) + 15) / 16) * 16;
/*
* Save user context
@@ -183,6 +182,15 @@ sendsig(sig_t catcher, ksiginfo_t *ksi,
code = ksi->ksi_code;
sfp = (caddr_t)&sf;
sfpsize = sizeof(sf);
+ #ifdef __powerpc64__
+ /*
+ * 64-bit PPC defines a 288 byte scratch region
+ * below the stack.
+ */
+ rndfsize = 288 + ((sizeof(sf) + 47) / 48) * 48;
+ #else
+ rndfsize = ((sizeof(sf) + 15) / 16) * 16;
+ #endif
/*
* Save user context
@@ -280,15 +288,8 @@ sendsig(sig_t catcher, ksiginfo_t *ksi,
mtx_unlock(&psp->ps_mtx);
PROC_UNLOCK(p);
- #ifdef COMPAT_FREEBSD32
- if (p->p_sysent->sv_flags & SV_ILP32)
- tf->srr0 = (register_t)(FREEBSD32_PS_STRINGS -
- *(p->p_sysent->sv_szsigcode));
- else
- #else
- tf->srr0 = (register_t)(PS_STRINGS -
- *(p->p_sysent->sv_szsigcode));
- #endif
+ tf->srr0 = (register_t)(p->p_sysent->sv_psstrings -
+ *(p->p_sysent->sv_szsigcode));
/*
* copy the frame out to userland.
Copied and modified: projects/ppc64/sys/powerpc/powerpc/sigcode32.S (from r198415, projects/ppc64/sys/powerpc/powerpc/sigcode.S)
==============================================================================
--- projects/ppc64/sys/powerpc/powerpc/sigcode.S Fri Oct 23 16:07:15 2009 (r198415, copy source)
+++ projects/ppc64/sys/powerpc/powerpc/sigcode32.S Tue Nov 17 17:53:52 2009 (r199412)
@@ -43,8 +43,8 @@
* On entry r1 points to a struct sigframe at bottom of current stack.
* All other registers are unchanged.
*/
- .globl CNAME(sigcode),CNAME(szsigcode)
-CNAME(sigcode):
+ .globl CNAME(sigcode32),CNAME(szsigcode32)
+CNAME(sigcode32):
addi 1,1,-16 /* reserved space for callee */
blrl
addi 3,1,16+SF_UC /* restore sp, and get &frame->sf_uc */
@@ -52,8 +52,8 @@ CNAME(sigcode):
sc /* sigreturn(scp) */
li 0,SYS_exit
sc /* exit(errno) */
-endsigcode:
+endsigcode32:
.data
-CNAME(szsigcode):
- .long endsigcode - CNAME(sigcode)
+CNAME(szsigcode32):
+ .long endsigcode32 - CNAME(sigcode32)
Copied and modified: projects/ppc64/sys/powerpc/powerpc/sigcode64.S (from r198415, projects/ppc64/sys/powerpc/powerpc/sigcode.S)
==============================================================================
--- projects/ppc64/sys/powerpc/powerpc/sigcode.S Fri Oct 23 16:07:15 2009 (r198415, copy source)
+++ projects/ppc64/sys/powerpc/powerpc/sigcode64.S Tue Nov 17 17:53:52 2009 (r199412)
@@ -43,17 +43,23 @@
* On entry r1 points to a struct sigframe at bottom of current stack.
* All other registers are unchanged.
*/
- .globl CNAME(sigcode),CNAME(szsigcode)
-CNAME(sigcode):
- addi 1,1,-16 /* reserved space for callee */
+ .globl CNAME(sigcode64),CNAME(szsigcode64)
+CNAME(sigcode64):
+ addi 1,1,-48 /* reserved space for callee */
+ mflr 2 /* resolve function descriptor */
+ ld 0,0(2)
+ ld 2,8(2)
+ mtlr 0
+
blrl
- addi 3,1,16+SF_UC /* restore sp, and get &frame->sf_uc */
+
+ addi 3,1,48+SF_UC /* restore sp, and get &frame->sf_uc */
li 0,SYS_sigreturn
sc /* sigreturn(scp) */
li 0,SYS_exit
sc /* exit(errno) */
-endsigcode:
+endsigcode64:
.data
-CNAME(szsigcode):
- .long endsigcode - CNAME(sigcode)
+CNAME(szsigcode64):
+ .long endsigcode64 - CNAME(sigcode64)
More information about the svn-src-projects
mailing list