Module Name: src Committed By: martin Date: Wed Feb 4 22:00:25 UTC 2015
Modified Files: src/compat/powerpc64/powerpc [netbsd-7]: bsd.powerpc.mk src/lib/libc/arch/powerpc [netbsd-7]: SYS.h src/lib/libc/arch/powerpc/sys [netbsd-7]: __clone.S __syscall.S brk.S getcontext.S pipe.S sbrk.S src/lib/libc/arch/powerpc64 [netbsd-7]: Makefile.inc SYS.h src/lib/libc/arch/powerpc64/gen [netbsd-7]: __setjmp14.S __sigsetjmp14.S src/lib/libc/arch/powerpc64/sys [netbsd-7]: __clone.S __sigtramp2.S __syscall.S __vfork14.S brk.S cerror.S fork.S getcontext.S pipe.S ptrace.S sbrk.S syscall.S src/lib/libc/compiler_rt [netbsd-7]: Makefile.inc src/sys/arch/powerpc/include [netbsd-7]: asm.h Added Files: src/lib/libc/arch/powerpc64 [netbsd-7]: genassym.cf Log Message: Pull up following revision(s) (requested by chs in ticket #492): lib/libc/arch/powerpc64/sys/__vfork14.S: revision 1.2 lib/libc/arch/powerpc64/sys/__syscall.S: revision 1.2 lib/libc/arch/powerpc/sys/__syscall.S: revision 1.3 lib/libc/arch/powerpc64/sys/syscall.S: revision 1.2 lib/libc/arch/powerpc/sys/__clone.S: revision 1.6 lib/libc/arch/powerpc64/gen/__setjmp14.S: revision 1.3 sys/arch/powerpc/include/asm.h: revision 1.47 lib/libc/arch/powerpc64/sys/cerror.S: revision 1.6 lib/libc/arch/powerpc64/sys/getcontext.S: revision 1.5 lib/libc/arch/powerpc64/sys/brk.S: revision 1.5 lib/libc/arch/powerpc64/sys/ptrace.S: revision 1.3 lib/libc/arch/powerpc64/genassym.cf: revision 1.1 lib/libc/arch/powerpc64/gen/__sigsetjmp14.S: revision 1.3 lib/libc/arch/powerpc/sys/getcontext.S: revision 1.6 compat/powerpc64/powerpc/bsd.powerpc.mk: revision 1.3 lib/libc/arch/powerpc64/sys/pipe.S: revision 1.2 lib/libc/arch/powerpc/sys/brk.S: revision 1.14 lib/libc/arch/powerpc64/SYS.h: revision 1.3 lib/libc/arch/powerpc64/sys/fork.S: revision 1.2 lib/libc/arch/powerpc64/sys/__sigtramp2.S: revision 1.4 lib/libc/arch/powerpc64/Makefile.inc: revision 1.3 lib/libc/arch/powerpc/sys/pipe.S: revision 1.9 lib/libc/compiler_rt/Makefile.inc: revision 1.25 lib/libc/arch/powerpc64/sys/sbrk.S: revision 1.4, 1.5 lib/libc/arch/powerpc64/sys/__clone.S: revision 1.2 lib/libc/arch/powerpc/sys/sbrk.S: revision 1.13 lib/libc/arch/powerpc/SYS.h: revision 1.13 powerpc64 uses the same sources as powerpc and needs the long double as double-double sources. - Spell LdAddr consistently - Add LDFLAGS+=-Wl,-m,elf32ppc_nbsd - Fix cmpptr/cmpreq/etc to use right mnemonics - Minimize differences between powerpc and powerpc64 - Fix powerpc64 assembly to use right instructions for 64bit CPUs. - Use hidden for __curbrk and __minbrk to avoid GOT/TOC relocations. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.2.6.1 src/compat/powerpc64/powerpc/bsd.powerpc.mk cvs rdiff -u -r1.12 -r1.12.24.1 src/lib/libc/arch/powerpc/SYS.h cvs rdiff -u -r1.5 -r1.5.4.1 src/lib/libc/arch/powerpc/sys/__clone.S cvs rdiff -u -r1.2 -r1.2.4.1 src/lib/libc/arch/powerpc/sys/__syscall.S cvs rdiff -u -r1.13 -r1.13.4.1 src/lib/libc/arch/powerpc/sys/brk.S cvs rdiff -u -r1.5 -r1.5.24.1 src/lib/libc/arch/powerpc/sys/getcontext.S cvs rdiff -u -r1.8 -r1.8.24.1 src/lib/libc/arch/powerpc/sys/pipe.S cvs rdiff -u -r1.12 -r1.12.4.1 src/lib/libc/arch/powerpc/sys/sbrk.S cvs rdiff -u -r1.2 -r1.2.64.1 src/lib/libc/arch/powerpc64/Makefile.inc cvs rdiff -u -r1.2 -r1.2.24.1 src/lib/libc/arch/powerpc64/SYS.h cvs rdiff -u -r0 -r1.1.2.2 src/lib/libc/arch/powerpc64/genassym.cf cvs rdiff -u -r1.2 -r1.2.24.1 src/lib/libc/arch/powerpc64/gen/__setjmp14.S \ src/lib/libc/arch/powerpc64/gen/__sigsetjmp14.S cvs rdiff -u -r1.1 -r1.1.64.1 src/lib/libc/arch/powerpc64/sys/__clone.S \ src/lib/libc/arch/powerpc64/sys/__syscall.S \ src/lib/libc/arch/powerpc64/sys/__vfork14.S \ src/lib/libc/arch/powerpc64/sys/fork.S \ src/lib/libc/arch/powerpc64/sys/pipe.S \ src/lib/libc/arch/powerpc64/sys/syscall.S cvs rdiff -u -r1.3 -r1.3.24.1 src/lib/libc/arch/powerpc64/sys/__sigtramp2.S cvs rdiff -u -r1.4 -r1.4.20.1 src/lib/libc/arch/powerpc64/sys/brk.S \ src/lib/libc/arch/powerpc64/sys/getcontext.S cvs rdiff -u -r1.5 -r1.5.4.1 src/lib/libc/arch/powerpc64/sys/cerror.S cvs rdiff -u -r1.2 -r1.2.4.1 src/lib/libc/arch/powerpc64/sys/ptrace.S cvs rdiff -u -r1.3 -r1.3.64.1 src/lib/libc/arch/powerpc64/sys/sbrk.S cvs rdiff -u -r1.24.2.1 -r1.24.2.2 src/lib/libc/compiler_rt/Makefile.inc cvs rdiff -u -r1.46 -r1.46.4.1 src/sys/arch/powerpc/include/asm.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/compat/powerpc64/powerpc/bsd.powerpc.mk diff -u src/compat/powerpc64/powerpc/bsd.powerpc.mk:1.2 src/compat/powerpc64/powerpc/bsd.powerpc.mk:1.2.6.1 --- src/compat/powerpc64/powerpc/bsd.powerpc.mk:1.2 Fri Mar 7 05:48:30 2014 +++ src/compat/powerpc64/powerpc/bsd.powerpc.mk Wed Feb 4 22:00:24 2015 @@ -1,6 +1,10 @@ -# $NetBSD: bsd.powerpc.mk,v 1.2 2014/03/07 05:48:30 matt Exp $ +# $NetBSD: bsd.powerpc.mk,v 1.2.6.1 2015/02/04 22:00:24 martin Exp $ LD+= -m elf32ppc_nbsd +.if empty(LDFLAGS:M*elf32ppc_nbsd*) +LDFLAGS+= -Wl,-m,elf32ppc_nbsd +.endif +.ifndef MLIBDIR MLIBDIR= powerpc LIBC_MACHINE_ARCH= ${MLIBDIR} COMMON_MACHINE_ARCH= ${MLIBDIR} @@ -13,3 +17,4 @@ LDELFSO_MACHINE_ARCH= ${MLIBDIR} GOMP_MACHINE_ARCH= ${MLIBDIR} .include "${.PARSEDIR}/../../m32.mk" +.endif Index: src/lib/libc/arch/powerpc/SYS.h diff -u src/lib/libc/arch/powerpc/SYS.h:1.12 src/lib/libc/arch/powerpc/SYS.h:1.12.24.1 --- src/lib/libc/arch/powerpc/SYS.h:1.12 Sat Jan 15 07:31:12 2011 +++ src/lib/libc/arch/powerpc/SYS.h Wed Feb 4 22:00:24 2015 @@ -1,24 +1,21 @@ -/* $NetBSD: SYS.h,v 1.12 2011/01/15 07:31:12 matt Exp $ */ +/* $NetBSD: SYS.h,v 1.12.24.1 2015/02/04 22:00:24 martin Exp $ */ #include <machine/asm.h> #include <sys/syscall.h> -#ifdef __STDC__ +#define BRANCH_TO_CERROR() b _C_LABEL(__cerror) + #define _DOSYSCALL(x) li %r0,(SYS_ ## x) ;\ sc -#else -#define _DOSYSCALL(x) li %r0,(SYS_/**/x) ;\ - sc -#endif /* __STDC__ */ #define _SYSCALL_NOERROR(x,y) .text ;\ - .align 2 ;\ + .p2align 2 ;\ ENTRY(x) ;\ _DOSYSCALL(y) #define _SYSCALL(x,y) .text ;\ - .align 2 ;\ - 2: b _C_LABEL(__cerror) ;\ + .p2align 2 ;\ + 2: BRANCH_TO_CERROR() ;\ _SYSCALL_NOERROR(x,y) ;\ bso 2b @@ -32,7 +29,7 @@ #define PSEUDO(x,y) _SYSCALL_NOERROR(x,y) ;\ bnslr ;\ - b _C_LABEL(__cerror) ;\ + BRANCH_TO_CERROR() ;\ END(x) #define RSYSCALL_NOERROR(x) PSEUDO_NOERROR(x,x) Index: src/lib/libc/arch/powerpc/sys/__clone.S diff -u src/lib/libc/arch/powerpc/sys/__clone.S:1.5 src/lib/libc/arch/powerpc/sys/__clone.S:1.5.4.1 --- src/lib/libc/arch/powerpc/sys/__clone.S:1.5 Thu Sep 12 15:36:15 2013 +++ src/lib/libc/arch/powerpc/sys/__clone.S Wed Feb 4 22:00:24 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: __clone.S,v 1.5 2013/09/12 15:36:15 joerg Exp $ */ +/* $NetBSD: __clone.S,v 1.5.4.1 2015/02/04 22:00:24 martin Exp $ */ /*- * Copyright (c) 2001 Tsubai Masanari. All rights reserved. @@ -30,7 +30,7 @@ #include "SYS.h" #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: __clone.S,v 1.5 2013/09/12 15:36:15 joerg Exp $") +__RCSID("$NetBSD: __clone.S,v 1.5.4.1 2015/02/04 22:00:24 martin Exp $") #endif /* LIBC_SCCS && !lint */ #ifdef WEAK_ALIAS @@ -44,9 +44,9 @@ ENTRY(__clone) /* * Sanity checks: func and stack may not be NULL. */ - cmpwi %r3,0 + cmpptri %r3,0 beq 1f - cmpwi %r4,0 + cmpptri %r4,0 beq 1f mr %r7,%r3 /* Save fn in r7. */ @@ -54,7 +54,7 @@ ENTRY(__clone) _DOSYSCALL(__clone) /* (flags, stack) */ bso 2f /* error... */ - cmpwi %r3,0 + cmpptri %r3,0 bnelr /* We're the parent, just return. */ mtlr %r7 /* fn */ @@ -69,5 +69,5 @@ ENTRY(__clone) 1: li %r3,EINVAL 2: - b _C_LABEL(__cerror) + BRANCH_TO_CERROR() END(__clone) Index: src/lib/libc/arch/powerpc/sys/__syscall.S diff -u src/lib/libc/arch/powerpc/sys/__syscall.S:1.2 src/lib/libc/arch/powerpc/sys/__syscall.S:1.2.4.1 --- src/lib/libc/arch/powerpc/sys/__syscall.S:1.2 Sat Feb 1 20:26:21 2014 +++ src/lib/libc/arch/powerpc/sys/__syscall.S Wed Feb 4 22:00:24 2015 @@ -1,9 +1,9 @@ -/* $NetBSD: __syscall.S,v 1.2 2014/02/01 20:26:21 matt Exp $ */ +/* $NetBSD: __syscall.S,v 1.2.4.1 2015/02/04 22:00:24 martin Exp $ */ -#include <powerpc/asm.h> +#include "SYS.h" .text - .align 2 + .p2align 2 ENTRY(__syscall) mr %r0,%r3 /* syscall number */ mr %r3,%r4 @@ -13,10 +13,10 @@ ENTRY(__syscall) mr %r7,%r8 mr %r8,%r9 mr %r9,%r10 - lwz %r10,8(%r1) /* final argument is on the stack */ + ldreg %r10,(2*__SIZEOF_POINTER__)(%r1) /* final argument is on the stack */ sc bnslr - b _C_LABEL(__cerror) + BRANCH_TO_CERROR() END(__syscall) STRONG_ALIAS(syscall, __syscall) Index: src/lib/libc/arch/powerpc/sys/brk.S diff -u src/lib/libc/arch/powerpc/sys/brk.S:1.13 src/lib/libc/arch/powerpc/sys/brk.S:1.13.4.1 --- src/lib/libc/arch/powerpc/sys/brk.S:1.13 Thu Sep 12 15:36:15 2013 +++ src/lib/libc/arch/powerpc/sys/brk.S Wed Feb 4 22:00:24 2015 @@ -1,12 +1,14 @@ -/* $NetBSD: brk.S,v 1.13 2013/09/12 15:36:15 joerg Exp $ */ +/* $NetBSD: brk.S,v 1.13.4.1 2015/02/04 22:00:24 martin Exp $ */ #include "SYS.h" #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: brk.S,v 1.13 2013/09/12 15:36:15 joerg Exp $") +__RCSID("$NetBSD: brk.S,v 1.13.4.1 2015/02/04 22:00:24 martin Exp $") #endif /* LIBC_SCCS && !lint */ + .hidden _C_LABEL(__curbrk) .globl _C_LABEL(__curbrk) + .hidden _C_LABEL(__minbrk) .globl _C_LABEL(__minbrk) .globl _C_LABEL(_end) @@ -15,36 +17,38 @@ WEAK_ALIAS(brk, _brk) #endif .data + .p2align 2 _C_LABEL(__minbrk): - .long _C_LABEL(_end) # XXX not used yet + .long _C_LABEL(_end) +_C_LABEL(__curbrk): + .long _C_LABEL(_end) - .text ENTRY(_brk) #ifdef __PIC__ - mflr %r10 - PIC_GOTSETUP(%r9) - mtlr %r10 - lwz %r5,_C_LABEL(_end)@got(%r9) + mflr %r0 + bcl 20,31,.LPIC0 +.LPIC0: mflr %r9 + mtlr %r0 + addis %r9,%r9,(_C_LABEL(__minbrk)-.LPIC0)@ha + ldptru %r5,(_C_LABEL(__minbrk)-.LPIC0)@l(%r9) # r5 = &_end #else - lis %r5,_C_LABEL(_end)@ha # r5 = &_end - addi %r5,%r5,_C_LABEL(_end)@l + lis %r9,_C_LABEL(__minbrk)@ha + ldptru %r5,_C_LABEL(__minbrk)@l(%r9) # r5 = &_end #endif - cmplw %r5,%r3 # if (&_end <= r3) + cmpptrl %r5,%r3 # if (__minbrk <= r3) +#ifdef __PPC_ISEL__ + iselgt %r3,%r5,%r3 +#else bgt 0f mr %r5,%r3 # r5 = r3 0: mr %r3,%r5 # new break value - _DOSYSCALL(break) # assume, that r5 is kept - bso 1f -#ifdef __PIC__ - lwz %r6,_C_LABEL(__curbrk)@got(%r9) - stw %r5,0(%r6) -#else - lis %r6,_C_LABEL(__curbrk)@ha # record new break - stw %r5,_C_LABEL(__curbrk)@l(%r6) #endif + _DOSYSCALL(break) # assume that r5 is preserved + bso 1f + stptr %r5,__SIZEOF_POINTER__(%r9) blr # return 0 1: - b _C_LABEL(__cerror) + BRANCH_TO_CERROR() END(_brk) Index: src/lib/libc/arch/powerpc/sys/getcontext.S diff -u src/lib/libc/arch/powerpc/sys/getcontext.S:1.5 src/lib/libc/arch/powerpc/sys/getcontext.S:1.5.24.1 --- src/lib/libc/arch/powerpc/sys/getcontext.S:1.5 Sat Jan 15 07:31:13 2011 +++ src/lib/libc/arch/powerpc/sys/getcontext.S Wed Feb 4 22:00:24 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: getcontext.S,v 1.5 2011/01/15 07:31:13 matt Exp $ */ +/* $NetBSD: getcontext.S,v 1.5.24.1 2015/02/04 22:00:24 martin Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #include "assym.h" #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: getcontext.S,v 1.5 2011/01/15 07:31:13 matt Exp $") +__RCSID("$NetBSD: getcontext.S,v 1.5.24.1 2015/02/04 22:00:24 martin Exp $") #endif /* LIBC_SCCS && !lint */ #ifdef WEAK_ALIAS @@ -45,9 +45,9 @@ ENTRY(_getcontext) _DOSYSCALL(getcontext) bso 1f mflr %r4 - stw %r4,UC_GREGS_PC(%r5) # saved pc <- lr - stw %r3,UC_GREGS_R3(%r5) # arrange for return value 0 + stptr %r4,UC_GREGS_PC(%r5) # saved pc <- lr + stint %r3,UC_GREGS_R3(%r5) # arrange for return value 0 blr 1: - b _C_LABEL(__cerror) + BRANCH_TO_CERROR() END(_getcontext) Index: src/lib/libc/arch/powerpc/sys/pipe.S diff -u src/lib/libc/arch/powerpc/sys/pipe.S:1.8 src/lib/libc/arch/powerpc/sys/pipe.S:1.8.24.1 --- src/lib/libc/arch/powerpc/sys/pipe.S:1.8 Sat Jan 15 07:31:13 2011 +++ src/lib/libc/arch/powerpc/sys/pipe.S Wed Feb 4 22:00:24 2015 @@ -1,9 +1,9 @@ -/* $NetBSD: pipe.S,v 1.8 2011/01/15 07:31:13 matt Exp $ */ +/* $NetBSD: pipe.S,v 1.8.24.1 2015/02/04 22:00:24 martin Exp $ */ #include "SYS.h" #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: pipe.S,v 1.8 2011/01/15 07:31:13 matt Exp $") +__RCSID("$NetBSD: pipe.S,v 1.8.24.1 2015/02/04 22:00:24 martin Exp $") #endif /* LIBC_SCCS && !lint */ #ifdef WEAK_ALIAS @@ -14,10 +14,10 @@ ENTRY(_pipe) mr %r5,%r3 # save pointer _DOSYSCALL(pipe) # assume, that r5 is kept bso 1f - stw %r3,0(%r5) # success, store fds - stw %r4,4(%r5) + stint %r3,0(%r5) # success, store fds + stint %r4,4(%r5) li %r3,0 blr # and return 0 1: - b _C_LABEL(__cerror) + BRANCH_TO_CERROR() END(_pipe) Index: src/lib/libc/arch/powerpc/sys/sbrk.S diff -u src/lib/libc/arch/powerpc/sys/sbrk.S:1.12 src/lib/libc/arch/powerpc/sys/sbrk.S:1.12.4.1 --- src/lib/libc/arch/powerpc/sys/sbrk.S:1.12 Thu Sep 12 15:36:15 2013 +++ src/lib/libc/arch/powerpc/sys/sbrk.S Wed Feb 4 22:00:24 2015 @@ -1,41 +1,37 @@ -/* $NetBSD: sbrk.S,v 1.12 2013/09/12 15:36:15 joerg Exp $ */ +/* $NetBSD: sbrk.S,v 1.12.4.1 2015/02/04 22:00:24 martin Exp $ */ #include "SYS.h" #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: sbrk.S,v 1.12 2013/09/12 15:36:15 joerg Exp $") +__RCSID("$NetBSD: sbrk.S,v 1.12.4.1 2015/02/04 22:00:24 martin Exp $") #endif /* LIBC_SCCS && !lint */ + .hidden _C_LABEL(__curbrk) .globl _C_LABEL(__curbrk) - .globl _C_LABEL(_end) #ifdef WEAK_ALIAS WEAK_ALIAS(sbrk, _sbrk) #endif - .data -_C_LABEL(__curbrk): - .long _C_LABEL(_end) - .text - ENTRY(_sbrk) #ifdef __PIC__ - mflr %r10 - PIC_GOTSETUP(%r5) - mtlr %r10 - lwz %r5,_C_LABEL(__curbrk)@got(%r5) - lwz %r6,0(%r5) + mflr %r0 + bcl 20,31,.LPIC0 +.LPIC0: mflr %r5 + mtlr %r0 + addis %r8,%r5,(_C_LABEL(__curbrk)-.LPIC0)@ha + ldptru %r6,(_C_LABEL(__curbrk)-.LPIC0)@l(%r8) #else - lis %r5,_C_LABEL(__curbrk)@ha - lwzu %r6,_C_LABEL(__curbrk)@l(%r5) # r6 = old break, r5 = &curbrk + lis %r8,_C_LABEL(__curbrk)@ha + ldptru %r6,_C_LABEL(__curbrk)@l(%r8) # r6 = old break, r5 = &curbrk #endif add %r3,%r3,%r6 mr %r7,%r3 # r7 = new break _DOSYSCALL(break) # break(new_break) bso 1f mr %r3,%r6 # set return value - stw %r7,0(%r5) # record new break + stptr %r7,0(%r8) # record new break blr 1: - b _C_LABEL(__cerror) + BRANCH_TO_CERROR() END(_sbrk) Index: src/lib/libc/arch/powerpc64/Makefile.inc diff -u src/lib/libc/arch/powerpc64/Makefile.inc:1.2 src/lib/libc/arch/powerpc64/Makefile.inc:1.2.64.1 --- src/lib/libc/arch/powerpc64/Makefile.inc:1.2 Fri Jul 7 06:56:34 2006 +++ src/lib/libc/arch/powerpc64/Makefile.inc Wed Feb 4 22:00:24 2015 @@ -1,6 +1,8 @@ -# $NetBSD: Makefile.inc,v 1.2 2006/07/07 06:56:34 ross Exp $ +# $NetBSD: Makefile.inc,v 1.2.64.1 2015/02/04 22:00:24 martin Exp $ KMINCLUDES= KMSRCS= -SRCS+= __sigaction14_sigtramp.c __sigtramp2.S +CPPFLAGS+= -I. + +SRCS+= __sigaction14_sigtramp.c __sigtramp2.S Index: src/lib/libc/arch/powerpc64/SYS.h diff -u src/lib/libc/arch/powerpc64/SYS.h:1.2 src/lib/libc/arch/powerpc64/SYS.h:1.2.24.1 --- src/lib/libc/arch/powerpc64/SYS.h:1.2 Mon Mar 22 02:17:23 2010 +++ src/lib/libc/arch/powerpc64/SYS.h Wed Feb 4 22:00:24 2015 @@ -1,25 +1,25 @@ -/* $NetBSD: SYS.h,v 1.2 2010/03/22 02:17:23 mrg Exp $ */ +/* $NetBSD: SYS.h,v 1.2.24.1 2015/02/04 22:00:24 martin Exp $ */ #include <machine/asm.h> #include <sys/syscall.h> -#ifdef __STDC__ -#define _DOSYSCALL(x) li %r0,(SYS_ ## x) ;\ - sc +#ifdef _CALL_AIX +#define BRANCH_TO_CERROR() b ._C_LABEL(__cerror); nop #else -#define _DOSYSCALL(x) li %r0,(SYS_/**/x) ;\ +#define BRANCH_TO_CERROR() b _C_LABEL(__cerror) +#endif + +#define _DOSYSCALL(x) li %r0,(SYS_ ## x) ;\ sc -#endif /* __STDC__ */ #define _SYSCALL_NOERROR(x,y) .text ;\ - .align 2 ;\ + .p2align 2 ;\ ENTRY(x) ;\ _DOSYSCALL(y) #define _SYSCALL(x,y) .text ;\ - .align 2 ;\ - 2: b PIC_PLT(_C_LABEL(__cerror));\ - nop ;\ + .p2align 2 ;\ + 2: BRANCH_TO_CERROR() ;\ _SYSCALL_NOERROR(x,y) ;\ bso 2b @@ -28,12 +28,13 @@ #define SYSCALL(x) _SYSCALL(x,x) #define PSEUDO_NOERROR(x,y) _SYSCALL_NOERROR(x,y) ;\ - blr + blr ;\ + END(x) #define PSEUDO(x,y) _SYSCALL_NOERROR(x,y) ;\ bnslr ;\ - b PIC_PLT(_C_LABEL(__cerror));\ - nop + BRANCH_TO_CERROR() ;\ + END(x) #define RSYSCALL_NOERROR(x) PSEUDO_NOERROR(x,x) Index: src/lib/libc/arch/powerpc64/gen/__setjmp14.S diff -u src/lib/libc/arch/powerpc64/gen/__setjmp14.S:1.2 src/lib/libc/arch/powerpc64/gen/__setjmp14.S:1.2.24.1 --- src/lib/libc/arch/powerpc64/gen/__setjmp14.S:1.2 Sun Mar 8 18:57:12 2009 +++ src/lib/libc/arch/powerpc64/gen/__setjmp14.S Wed Feb 4 22:00:24 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: __setjmp14.S,v 1.2 2009/03/08 18:57:12 he Exp $ */ +/* $NetBSD: __setjmp14.S,v 1.2.24.1 2015/02/04 22:00:24 martin Exp $ */ #include <sys/syscall.h> @@ -6,7 +6,7 @@ #if defined(LIBC_SCCS) .text - .asciz "$NetBSD: __setjmp14.S,v 1.2 2009/03/08 18:57:12 he Exp $" + .asciz "$NetBSD: __setjmp14.S,v 1.2.24.1 2015/02/04 22:00:24 martin Exp $" #endif /* @@ -24,8 +24,7 @@ ENTRY(__setjmp14) li %r3,1 # SIG_BLOCK li %r4,0 addi %r5,%r6,100 # &sigmask - li %r0,SYS___sigprocmask14 - sc # assume no error XXX + _DOSYSCALL(__sigprocmask14) # assume no error XXX mflr %r11 mfcr %r12 mr %r10,%r1 @@ -58,6 +57,7 @@ ENTRY(__setjmp14) li %r3,0 blr +END(__setjmp14) ENTRY(__longjmp14) ld %r8,8(%r6) # load r8-r31 @@ -93,9 +93,9 @@ ENTRY(__longjmp14) addi %r4,%r3,100 # &sigmask li %r3,3 # SIG_SETMASK li %r5,0 - li %r0,SYS___sigprocmask14 - sc # assume no error XXX + _DOSYSCALL(__sigprocmask14) # assume no error XXX or. %r3,%r6,%r6 bnelr li %r3,1 blr +END(__longjmp14) Index: src/lib/libc/arch/powerpc64/gen/__sigsetjmp14.S diff -u src/lib/libc/arch/powerpc64/gen/__sigsetjmp14.S:1.2 src/lib/libc/arch/powerpc64/gen/__sigsetjmp14.S:1.2.24.1 --- src/lib/libc/arch/powerpc64/gen/__sigsetjmp14.S:1.2 Mon Mar 22 01:39:11 2010 +++ src/lib/libc/arch/powerpc64/gen/__sigsetjmp14.S Wed Feb 4 22:00:24 2015 @@ -1,11 +1,10 @@ -/* $NetBSD: __sigsetjmp14.S,v 1.2 2010/03/22 01:39:11 mrg Exp $ */ +/* $NetBSD: __sigsetjmp14.S,v 1.2.24.1 2015/02/04 22:00:24 martin Exp $ */ -#include <sys/syscall.h> -#include <machine/asm.h> +#include "SYS.h" #if defined(LIBC_SCCS) .text - .asciz "$NetBSD: __sigsetjmp14.S,v 1.2 2010/03/22 01:39:11 mrg Exp $" + .asciz "$NetBSD: __sigsetjmp14.S,v 1.2.24.1 2015/02/04 22:00:24 martin Exp $" #endif ENTRY(__sigsetjmp14) @@ -15,8 +14,7 @@ ENTRY(__sigsetjmp14) li %r3,1 # SIG_BLOCK li %r4,0 addi %r5,%r6,100 # &sigmask - li %r0,SYS___sigprocmask14 - sc # assume no error XXX + _DOSYSCALL(__sigprocmask14) # assume no error XXX 1: mflr %r11 mfcr %r12 @@ -29,6 +27,7 @@ ENTRY(__sigsetjmp14) .endr li %r3,0 blr +END(__sigsetjmp14) ENTRY(__siglongjmp14) i = 0 @@ -46,10 +45,10 @@ ENTRY(__siglongjmp14) addi %r4,%r3,100 # &sigmask li %r3,3 # SIG_SETMASK li %r5,0 - li %r0,SYS___sigprocmask14 - sc # assume no error XXX + _DOSYSCALL(__sigprocmask14) # assume no error XXX 1: or. %r3,%r6,%r6 bnelr li %r3,1 blr +END(__siglongjmp14) Index: src/lib/libc/arch/powerpc64/sys/__clone.S diff -u src/lib/libc/arch/powerpc64/sys/__clone.S:1.1 src/lib/libc/arch/powerpc64/sys/__clone.S:1.1.64.1 --- src/lib/libc/arch/powerpc64/sys/__clone.S:1.1 Sat Jul 1 16:37:20 2006 +++ src/lib/libc/arch/powerpc64/sys/__clone.S Wed Feb 4 22:00:24 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: __clone.S,v 1.1 2006/07/01 16:37:20 ross Exp $ */ +/* $NetBSD: __clone.S,v 1.1.64.1 2015/02/04 22:00:24 martin Exp $ */ /*- * Copyright (c) 2001 Tsubai Masanari. All rights reserved. @@ -40,18 +40,17 @@ ENTRY(__clone) /* * Sanity checks: func and stack may not be NULL. */ - cmpdi %r3,0 + cmpptri %r3,0 beq 1f - cmpdi %r4,0 + cmpptri %r4,0 beq 1f mr %r7,%r3 /* Save fn in r7. */ mr %r3,%r5 - li %r0,SYS___clone /* (flags, stack) */ - sc + _DOSYSCALL(__clone) /* (flags, stack) */ bso 2f /* error... */ - cmpdi %r3,0 + cmpptri %r3,0 bnelr /* We're the parent, just return. */ mtlr %r7 /* fn */ @@ -59,8 +58,10 @@ ENTRY(__clone) blrl /* Call the clone's entry point. */ bl PIC_PLT(_C_LABEL(_exit)) + nop 1: li %r3,EINVAL 2: - b PIC_PLT(_C_LABEL(__cerror)) + BRANCH_TO_CERROR() +END(__clone) Index: src/lib/libc/arch/powerpc64/sys/__syscall.S diff -u src/lib/libc/arch/powerpc64/sys/__syscall.S:1.1 src/lib/libc/arch/powerpc64/sys/__syscall.S:1.1.64.1 --- src/lib/libc/arch/powerpc64/sys/__syscall.S:1.1 Sat Jul 1 16:37:20 2006 +++ src/lib/libc/arch/powerpc64/sys/__syscall.S Wed Feb 4 22:00:24 2015 @@ -1,5 +1,22 @@ -/* $NetBSD: __syscall.S,v 1.1 2006/07/01 16:37:20 ross Exp $ */ +/* $NetBSD: __syscall.S,v 1.1.64.1 2015/02/04 22:00:24 martin Exp $ */ #include "SYS.h" -RSYSCALL(__syscall) + .text + .p2align 2 +ENTRY(__syscall) + mr %r0,%r3 /* syscall number */ + mr %r3,%r4 + mr %r4,%r5 + mr %r5,%r6 + mr %r6,%r7 + mr %r7,%r8 + mr %r8,%r9 + mr %r9,%r10 + ldreg %r10,(2*__SIZEOF_POINTER__)(%r1) /* final argument is on the stack */ + sc + bnslr + BRANCH_TO_CERROR() +END(__syscall) + +STRONG_ALIAS(syscall, __syscall) Index: src/lib/libc/arch/powerpc64/sys/__vfork14.S diff -u src/lib/libc/arch/powerpc64/sys/__vfork14.S:1.1 src/lib/libc/arch/powerpc64/sys/__vfork14.S:1.1.64.1 --- src/lib/libc/arch/powerpc64/sys/__vfork14.S:1.1 Thu Jul 6 17:04:22 2006 +++ src/lib/libc/arch/powerpc64/sys/__vfork14.S Wed Feb 4 22:00:24 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: __vfork14.S,v 1.1 2006/07/06 17:04:22 ross Exp $ */ +/* $NetBSD: __vfork14.S,v 1.1.64.1 2015/02/04 22:00:24 martin Exp $ */ /* * pid = vfork(); @@ -13,3 +13,4 @@ SYSCALL(__vfork14) addi %r4,%r4,-1 # from 1 to 0 in child, 0 to -1 in parent and %r3,%r3,%r4 # return 0 in child, pid in parent blr +END(__vfork14) Index: src/lib/libc/arch/powerpc64/sys/fork.S diff -u src/lib/libc/arch/powerpc64/sys/fork.S:1.1 src/lib/libc/arch/powerpc64/sys/fork.S:1.1.64.1 --- src/lib/libc/arch/powerpc64/sys/fork.S:1.1 Sat Jul 1 16:37:20 2006 +++ src/lib/libc/arch/powerpc64/sys/fork.S Wed Feb 4 22:00:24 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: fork.S,v 1.1 2006/07/01 16:37:20 ross Exp $ */ +/* $NetBSD: fork.S,v 1.1.64.1 2015/02/04 22:00:24 martin Exp $ */ /* * pid = fork(); @@ -13,3 +13,4 @@ _SYSCALL(__fork,fork) addi %r4,%r4,-1 # from 1 to 0 in child, 0 to -1 in parent and %r3,%r3,%r4 # return 0 in child, pid in parent blr +END(__fork) Index: src/lib/libc/arch/powerpc64/sys/pipe.S diff -u src/lib/libc/arch/powerpc64/sys/pipe.S:1.1 src/lib/libc/arch/powerpc64/sys/pipe.S:1.1.64.1 --- src/lib/libc/arch/powerpc64/sys/pipe.S:1.1 Sat Jul 1 16:37:20 2006 +++ src/lib/libc/arch/powerpc64/sys/pipe.S Wed Feb 4 22:00:24 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: pipe.S,v 1.1 2006/07/01 16:37:20 ross Exp $ */ +/* $NetBSD: pipe.S,v 1.1.64.1 2015/02/04 22:00:24 martin Exp $ */ #include "SYS.h" @@ -8,12 +8,12 @@ WEAK_ALIAS(pipe, _pipe) ENTRY(_pipe) mr %r5,%r3 # save pointer - li %r0,SYS_pipe - sc # assume, that r5 is kept + _DOSYSCALL(pipe) # assume, that r5 is kept bso 1f - stw %r3,0(%r5) # success, store fds - stw %r4,4(%r5) + stint %r3,0(%r5) # success, store fds + stint %r4,4(%r5) li %r3,0 blr # and return 0 1: - b PIC_PLT(_C_LABEL(__cerror)) + BRANCH_TO_CERROR() +END(_pipe) Index: src/lib/libc/arch/powerpc64/sys/syscall.S diff -u src/lib/libc/arch/powerpc64/sys/syscall.S:1.1 src/lib/libc/arch/powerpc64/sys/syscall.S:1.1.64.1 --- src/lib/libc/arch/powerpc64/sys/syscall.S:1.1 Sat Jul 1 16:37:20 2006 +++ src/lib/libc/arch/powerpc64/sys/syscall.S Wed Feb 4 22:00:24 2015 @@ -1,5 +1,3 @@ -/* $NetBSD: syscall.S,v 1.1 2006/07/01 16:37:20 ross Exp $ */ +/* $NetBSD: syscall.S,v 1.1.64.1 2015/02/04 22:00:24 martin Exp $ */ -#include "SYS.h" - -RSYSCALL(syscall) +/* aliased to __syscall */ Index: src/lib/libc/arch/powerpc64/sys/__sigtramp2.S diff -u src/lib/libc/arch/powerpc64/sys/__sigtramp2.S:1.3 src/lib/libc/arch/powerpc64/sys/__sigtramp2.S:1.3.24.1 --- src/lib/libc/arch/powerpc64/sys/__sigtramp2.S:1.3 Mon Jan 17 08:23:54 2011 +++ src/lib/libc/arch/powerpc64/sys/__sigtramp2.S Wed Feb 4 22:00:24 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: __sigtramp2.S,v 1.3 2011/01/17 08:23:54 matt Exp $ */ +/* $NetBSD: __sigtramp2.S,v 1.3.24.1 2015/02/04 22:00:24 martin Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -46,3 +46,4 @@ ENTRY_NOPROFILE(__sigtramp_siginfo_2) mr %r3,%r30 /* restore ucontext pointer */ _DOSYSCALL(setcontext) /* restore machine state */ _DOSYSCALL(exit) /* or exit with errno if failed */ +END(__sigtramp_siginfo_2) Index: src/lib/libc/arch/powerpc64/sys/brk.S diff -u src/lib/libc/arch/powerpc64/sys/brk.S:1.4 src/lib/libc/arch/powerpc64/sys/brk.S:1.4.20.1 --- src/lib/libc/arch/powerpc64/sys/brk.S:1.4 Sat Oct 29 16:03:33 2011 +++ src/lib/libc/arch/powerpc64/sys/brk.S Wed Feb 4 22:00:24 2015 @@ -1,8 +1,11 @@ -/* $NetBSD: brk.S,v 1.4 2011/10/29 16:03:33 christos Exp $ */ +/* $NetBSD: brk.S,v 1.4.20.1 2015/02/04 22:00:24 martin Exp $ */ #include "SYS.h" + + .hidden _C_LABEL(__curbrk) .globl _C_LABEL(__curbrk) + .hidden _C_LABEL(__minbrk) .globl _C_LABEL(__minbrk) .globl _C_LABEL(_end) @@ -10,32 +13,30 @@ WEAK_ALIAS(brk, _brk) #endif - .macro LdAddr r,sym - .pushsection ".toc","aw" -100: .tc \sym[TC],\sym - .popsection - ld \r,100b@toc(2) - .endm - - .data + .data + .p2align 3 _C_LABEL(__minbrk): - .long _C_LABEL(_end) - .text + .quad _C_LABEL(_end) +_C_LABEL(__curbrk): + .quad _C_LABEL(_end) ENTRY(_brk) - LdAddr %r5,_end - cmpld %r5,%r3 # if (&_end <= r3) + addis %r9,%r2,_C_LABEL(__minbrk)@toc@ha + ldptru %r5,_C_LABEL(__minbrk)@toc@l(%r9) + cmpptrl %r5,%r3 # if (__minbrk <= r3) +#ifdef __PPC_ISEL__ + iselgt %r3,%r5,%r3 +#else bgt 0f mr %r5,%r3 # r5 = r3 0: mr %r3,%r5 # new break value - li %r0,SYS_break - sc # assume, that r5 is kept +#endif + _DOSYSCALL(break) # assume that r5 is preserved bso 1f - LdAddr %r6,__curbrk - std %r5,0(%r6) + stptr %r5,__SIZEOF_POINTER__(%r9) blr # return 0 1: - b PIC_PLT(_C_LABEL(__cerror)) - + BRANCH_TO_CERROR() +END(_brk) Index: src/lib/libc/arch/powerpc64/sys/getcontext.S diff -u src/lib/libc/arch/powerpc64/sys/getcontext.S:1.4 src/lib/libc/arch/powerpc64/sys/getcontext.S:1.4.20.1 --- src/lib/libc/arch/powerpc64/sys/getcontext.S:1.4 Sat Oct 29 16:03:33 2011 +++ src/lib/libc/arch/powerpc64/sys/getcontext.S Wed Feb 4 22:00:24 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: getcontext.S,v 1.4 2011/10/29 16:03:33 christos Exp $ */ +/* $NetBSD: getcontext.S,v 1.4.20.1 2015/02/04 22:00:24 martin Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #if defined(SYSLIBC_SCCS) && !defined(lint) .text - .asciz "$NetBSD: getcontext.S,v 1.4 2011/10/29 16:03:33 christos Exp $" + .asciz "$NetBSD: getcontext.S,v 1.4.20.1 2015/02/04 22:00:24 martin Exp $" #endif /* SYSLIBC_SCCS && !lint */ #ifdef WEAK_ALIAS @@ -42,12 +42,12 @@ WEAK_ALIAS(getcontext, _getcontext) ENTRY(_getcontext) mr %r5,%r3 # must save pointer - li %r0,SYS_getcontext - sc + _DOSYSCALL(getcontext) bso 1f mflr %r4 - stw %r4,(48 + 34 * 4)(%r5) # saved pc <- lr - stw %r3,(48 + 3 * 4)(%r5) # arrange for return value 0 + stptr %r4,UC_GREGS_PC(%r5) # saved pc <- lr + stint %r3,UC_GREGS_R3(%r5) # arrange for return value 0 blr 1: - b PIC_PLT(_C_LABEL(__cerror)) + BRANCH_TO_CERROR() +END(_getcontext) Index: src/lib/libc/arch/powerpc64/sys/cerror.S diff -u src/lib/libc/arch/powerpc64/sys/cerror.S:1.5 src/lib/libc/arch/powerpc64/sys/cerror.S:1.5.4.1 --- src/lib/libc/arch/powerpc64/sys/cerror.S:1.5 Thu Sep 12 15:36:15 2013 +++ src/lib/libc/arch/powerpc64/sys/cerror.S Wed Feb 4 22:00:24 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: cerror.S,v 1.5 2013/09/12 15:36:15 joerg Exp $ */ +/* $NetBSD: cerror.S,v 1.5.4.1 2015/02/04 22:00:24 martin Exp $ */ #include <machine/asm.h> #include "SYS.h" @@ -13,29 +13,26 @@ ENTRY(__cerror) #ifdef _REENTRANT mflr %r0 - stwu %r1,-16(%r1) # allocate new stack frame - stw %r0,20(%r1) - stw %r31,8(%r1) + streg %r0,__SIZEOF_POINTER__(%r1) + stptru %r1,-(4*__SIZEOF_POINTER__)(%r1) # allocate new stack frame + streg %r31,(3*__SIZEOF_POINTER__)(%r1) mr %r31,%r3 # stash away in callee-saved register bl PIC_PLT(_C_LABEL(__errno)) - stw %r31,0(%r3) - lwz %r0,20(%r1) - lwz %r31,8(%r1) + nop + stint %r31,0(%r3) + + ldreg %r31,(3*__SIZEOF_POINTER__)(%r1) + addi %r1,%r1,4*__SIZEOF_POINTER__ + ldreg %r0,__SIZEOF_POINTER__(%r1) mtlr %r0 - la %r1,16(%r1) #else -#ifdef __PIC__ - mflr %r10 - bl _GLOBAL_OFFSET_TABLE_@local-4 - mflr %r4 - lwz %r4,_C_LABEL(errno)@got(%r4) + .pushsection ".toc", "aw" +.Lerrno:.tc errno[TC], errno + .popsection + lwz %r4,_C_LABEL(.Lerrno)@toc(%r2) stw %r3,0(%r4) - mtlr %r10 -#else - lis %r4,_C_LABEL(errno)@ha - stw %r3,_C_LABEL(errno)@l(%r4) -#endif /* __PIC__ */ #endif /* _REENTRANT */ li %r3,-1 li %r4,-1 blr +END(__cerror) Index: src/lib/libc/arch/powerpc64/sys/ptrace.S diff -u src/lib/libc/arch/powerpc64/sys/ptrace.S:1.2 src/lib/libc/arch/powerpc64/sys/ptrace.S:1.2.4.1 --- src/lib/libc/arch/powerpc64/sys/ptrace.S:1.2 Thu Sep 12 15:36:15 2013 +++ src/lib/libc/arch/powerpc64/sys/ptrace.S Wed Feb 4 22:00:24 2015 @@ -1,46 +1,43 @@ -/* $NetBSD: ptrace.S,v 1.2 2013/09/12 15:36:15 joerg Exp $ */ +/* $NetBSD: ptrace.S,v 1.2.4.1 2015/02/04 22:00:24 martin Exp $ */ #include "SYS.h" ENTRY(ptrace) #ifdef _REENTRANT mflr %r0 - stwu %r1,-32(%r1) - stw %r0,36(%r1) - stw %r3,8(%r1) - stw %r4,12(%r1) - stw %r5,16(%r1) - stw %r6,20(%r1) + streg %r0,SZREG(%r1) + stregu %r1,-(SZREG*6)(%r1) + streg %r3,(SZREG*2)(%r1) + streg %r4,(SZREG*3)(%r1) + streg %r5,(SZREG*4)(%r1) + streg %r6,(SZREG*5)(%r1) bl PIC_PLT(_C_LABEL(__errno)) + nop li %r7,0 - stw %r7,0(%r3) + stint %r7,0(%r3) - lwz %r3,8(%r1) - lwz %r4,12(%r1) - lwz %r5,16(%r1) - lwz %r0,36(%r1) - lwz %r6,20(%r1) + ldreg %r3,(SZREG*2)(%r1) + ldreg %r4,(SZREG*3)(%r1) + ldreg %r5,(SZREG*4)(%r1) + ldreg %r6,(SZREG*5)(%r1) + addi %r1,%r1,SZREG*6 + ldreg %r0,SZREG(%r1) mtlr %r0 - la %r1,32(%r1) #else -#ifdef __PIC__ - mflr %r0 - bl _GLOBAL_OFFSET_TABLE_@local-4 - mflr %r7 - lwz %r7,_C_LABEL(errno)@got(%r7) + .pushsection ".toc","aw" +.Lerrno: + .tc errno[TC], errno + .popsection + addis %r7,%r2,_C_LABEL(errno)@toc@ha + ldptr %r7,_C_LABEL(errno)@toc@l(%r7) li %r8,0 - stw %r8,0(%r7) + stint %r8,0(%r7) mtlr 0 -#else - lis %r7,_C_LABEL(errno)@ha - li %r8,0 - stw %r8,_C_LABEL(errno)@l(%r7) -#endif /* __PIC__ */ #endif /* _REENTRANT */ - li %r0,SYS_ptrace - sc + _DOSYSCALL(ptrace) bso 1f blr 1: - b PIC_PLT(_C_LABEL(__cerror)) + BRANCH_TO_CERROR() +END(ptrace) Index: src/lib/libc/arch/powerpc64/sys/sbrk.S diff -u src/lib/libc/arch/powerpc64/sys/sbrk.S:1.3 src/lib/libc/arch/powerpc64/sys/sbrk.S:1.3.64.1 --- src/lib/libc/arch/powerpc64/sys/sbrk.S:1.3 Fri Jul 7 06:50:06 2006 +++ src/lib/libc/arch/powerpc64/sys/sbrk.S Wed Feb 4 22:00:24 2015 @@ -1,37 +1,24 @@ -/* $NetBSD: sbrk.S,v 1.3 2006/07/07 06:50:06 ross Exp $ */ +/* $NetBSD: sbrk.S,v 1.3.64.1 2015/02/04 22:00:24 martin Exp $ */ #include "SYS.h" + .hidden _C_LABEL(__curbrk) .globl _C_LABEL(__curbrk) - .globl _C_LABEL(_end) #ifdef WEAK_ALIAS WEAK_ALIAS(sbrk, _sbrk) #endif - - .data -_C_LABEL(__curbrk): - .long _C_LABEL(_end) - .text - - .macro LdAddr r,sym - .pushsection ".toc","aw" -100: .tc \sym[TC],\sym - .popsection - ld \r,100b@toc(2) - .endm - ENTRY(_sbrk) - ldAddr %r6,__curbrk + addis %r8,%r2,_C_LABEL(__curbrk)@toc@ha + ldptru %r6,_C_LABEL(__curbrk)@toc@l(%r8) add %r3,%r3,%r6 mr %r7,%r3 # r7 = new break - li %r0,SYS_break - sc # break(new_break) + _DOSYSCALL(break) # break(new_break) bso 1f mr %r3,%r6 # set return value - LdAddr %r6,__curbrk - std %r7,0(%r6) + stptr %r7,0(%r8) # record new break blr 1: - b PIC_PLT(_C_LABEL(__cerror)) + BRANCH_TO_CERROR() +END(_sbrk) Index: src/lib/libc/compiler_rt/Makefile.inc diff -u src/lib/libc/compiler_rt/Makefile.inc:1.24.2.1 src/lib/libc/compiler_rt/Makefile.inc:1.24.2.2 --- src/lib/libc/compiler_rt/Makefile.inc:1.24.2.1 Wed Aug 20 13:49:28 2014 +++ src/lib/libc/compiler_rt/Makefile.inc Wed Feb 4 22:00:24 2015 @@ -1,8 +1,8 @@ -# $NetBSD: Makefile.inc,v 1.24.2.1 2014/08/20 13:49:28 martin Exp $ +# $NetBSD: Makefile.inc,v 1.24.2.2 2015/02/04 22:00:24 martin Exp $ COMPILER_RT_SRCDIR= ${NETBSDSRCDIR}/sys/external/bsd/compiler_rt/dist -.if ${LIBC_MACHINE_ARCH} == "powerpc" +.if ${LIBC_MACHINE_ARCH} == "powerpc" || ${LIBC_MACHINE_ARCH} == "powerpc64" COMPILER_RT_CPU_DIR= ${COMPILER_RT_SRCDIR}/lib/builtins/ppc COMPILER_RT_ARCH_DIR= ${COMPILER_RT_SRCDIR}/lib/builtins/ppc .else @@ -206,7 +206,7 @@ GENERIC_SRCS+= \ InstrProfilingFile.c \ InstrProfilingPlatformOther.c -.if ${LIBC_MACHINE_ARCH} == "powerpc" +.if ${LIBC_MACHINE_ARCH} == "powerpc" || ${LIBC_MACHINE_ARCH} == "powerpc64" GENERIC_SRCS+= \ fixtfdi.c \ fixunstfdi.c \ Index: src/sys/arch/powerpc/include/asm.h diff -u src/sys/arch/powerpc/include/asm.h:1.46 src/sys/arch/powerpc/include/asm.h:1.46.4.1 --- src/sys/arch/powerpc/include/asm.h:1.46 Thu Mar 6 19:05:24 2014 +++ src/sys/arch/powerpc/include/asm.h Wed Feb 4 22:00:24 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: asm.h,v 1.46 2014/03/06 19:05:24 matt Exp $ */ +/* $NetBSD: asm.h,v 1.46.4.1 2015/02/04 22:00:24 martin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -356,12 +356,12 @@ y: .quad .##y,.TOC.@tocbase,0; \ # define cmpptri cmpwi # define cmplongi cmpwi # define cmpregi cmpwi -# define cmpptrl cmpwl -# define cmplongl cmpwl -# define cmpregl cmpwl -# define cmpptrli cmpwli -# define cmplongli cmpwli -# define cmpregli cmpwli +# define cmpptrl cmplw +# define cmplongl cmplw +# define cmpregl cmplw +# define cmpptrli cmplwi +# define cmplongli cmplwi +# define cmpregli cmplwi #else /* __LP64__ */ @@ -401,12 +401,12 @@ y: .quad .##y,.TOC.@tocbase,0; \ # define cmpptri cmpdi # define cmplongi cmpdi # define cmpregi cmpdi -# define cmpptrl cmpdl -# define cmplongl cmpdl -# define cmpregl cmpdl -# define cmpptrli cmpdli -# define cmplongli cmpdli -# define cmpregli cmpdli +# define cmpptrl cmpld +# define cmplongl cmpld +# define cmpregl cmpld +# define cmpptrli cmpldi +# define cmplongli cmpldi +# define cmpregli cmpldi #endif /* __LP64__ */ Added files: Index: src/lib/libc/arch/powerpc64/genassym.cf diff -u /dev/null src/lib/libc/arch/powerpc64/genassym.cf:1.1.2.2 --- /dev/null Wed Feb 4 22:00:25 2015 +++ src/lib/libc/arch/powerpc64/genassym.cf Wed Feb 4 22:00:24 2015 @@ -0,0 +1,45 @@ +# $NetBSD: genassym.cf,v 1.1.2.2 2015/02/04 22:00:24 martin Exp $ + +# +# Copyright (c) 2001 The NetBSD Foundation, Inc. +# All rights reserved. +# +# This code is derived from software contributed to The NetBSD Foundation +# by Matt Thomas <m...@3am-sfotware.com>. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +include <sys/types.h> +include <sys/queue.h> +include <sys/cpu.h> +include <sys/signal.h> +include <sys/ucontext.h> + +include <machine/frame.h> + +define UC_GREGS_R1 offsetof(ucontext_t, uc_mcontext.__gregs[_REG_R1]) +define UC_GREGS_R3 offsetof(ucontext_t, uc_mcontext.__gregs[_REG_R3]) +define UC_GREGS_PC offsetof(ucontext_t, uc_mcontext.__gregs[_REG_PC]) + +define SIG_BLOCK SIG_BLOCK +define SIG_SETMASK SIG_SETMASK