Date: Tue, 17 Nov 2009 17:53:52 +0000 (UTC) From: Nathan Whitehorn <nwhitehorn@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r199412 - in projects/ppc64/sys: conf powerpc/include powerpc/powerpc Message-ID: <200911171753.nAHHrqLm026974@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200911171753.nAHHrqLm026974>