From owner-svn-src-projects@FreeBSD.ORG Sun Jan 24 18:56:57 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CDA741065672; Sun, 24 Jan 2010 18:56:57 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B8BAF8FC13; Sun, 24 Jan 2010 18:56:57 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o0OIuv68014404; Sun, 24 Jan 2010 18:56:57 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o0OIuvkY014376; Sun, 24 Jan 2010 18:56:57 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201001241856.o0OIuvkY014376@svn.freebsd.org> From: Nathan Whitehorn Date: Sun, 24 Jan 2010 18:56:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r202942 - in projects/ppc64: gnu/lib/csu gnu/lib/libgcc lib/csu/powerpc64 lib/libc/gmon lib/libc/powerpc64 lib/libc/powerpc64/gen lib/libc/powerpc64/sys lib/libc/stdlib lib/libthr/arch/... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 24 Jan 2010 18:56:57 -0000 Author: nwhitehorn Date: Sun Jan 24 18:56:57 2010 New Revision: 202942 URL: http://svn.freebsd.org/changeset/base/202942 Log: Initial support for a PPC64 userland. RTLD is currently missing, and a shared version of libc fails to build due to bugs in binutils, but this is sufficient to build and run a statically linked 64-bit "Hello World". Added: projects/ppc64/lib/csu/powerpc64/ projects/ppc64/lib/csu/powerpc64/Makefile projects/ppc64/lib/csu/powerpc64/crt1.c projects/ppc64/lib/csu/powerpc64/crti.S projects/ppc64/lib/csu/powerpc64/crtn.S projects/ppc64/lib/libc/powerpc64/ - copied from r202650, projects/ppc64/lib/libc/powerpc/ projects/ppc64/lib/libthr/arch/powerpc64/ - copied from r202650, projects/ppc64/lib/libthr/arch/powerpc/ projects/ppc64/lib/libthr/arch/powerpc64/powerpc64/ - copied from r202650, projects/ppc64/lib/libthr/arch/powerpc/powerpc/ projects/ppc64/secure/lib/libcrypto/opensslconf-powerpc64.h - copied, changed from r202650, projects/ppc64/secure/lib/libcrypto/opensslconf-powerpc.h Deleted: projects/ppc64/lib/libthr/arch/powerpc64/powerpc/ Modified: projects/ppc64/gnu/lib/csu/Makefile projects/ppc64/gnu/lib/libgcc/Makefile projects/ppc64/lib/libc/gmon/gmon.c projects/ppc64/lib/libc/powerpc64/Makefile.inc projects/ppc64/lib/libc/powerpc64/SYS.h projects/ppc64/lib/libc/powerpc64/Symbol.map projects/ppc64/lib/libc/powerpc64/gen/_ctx_start.S projects/ppc64/lib/libc/powerpc64/gen/makecontext.c projects/ppc64/lib/libc/powerpc64/gen/signalcontext.c projects/ppc64/lib/libc/powerpc64/gen/syncicache.c projects/ppc64/lib/libc/powerpc64/sys/brk.S projects/ppc64/lib/libc/powerpc64/sys/cerror.S projects/ppc64/lib/libc/powerpc64/sys/exect.S projects/ppc64/lib/libc/powerpc64/sys/pipe.S projects/ppc64/lib/libc/powerpc64/sys/ptrace.S projects/ppc64/lib/libc/powerpc64/sys/sbrk.S projects/ppc64/lib/libc/powerpc64/sys/setlogin.S projects/ppc64/lib/libc/stdlib/malloc.c projects/ppc64/lib/libthr/arch/powerpc64/include/pthread_md.h projects/ppc64/sys/powerpc/include/asm.h projects/ppc64/sys/powerpc/include/profile.h projects/ppc64/sys/sys/cdefs.h Modified: projects/ppc64/gnu/lib/csu/Makefile ============================================================================== --- projects/ppc64/gnu/lib/csu/Makefile Sun Jan 24 18:18:52 2010 (r202941) +++ projects/ppc64/gnu/lib/csu/Makefile Sun Jan 24 18:56:57 2010 (r202942) @@ -30,7 +30,7 @@ CFLAGS+= -x assembler-with-cpp # Ugly ha CFLAGS+= -include osreldate.h .undef SRCS # hack for 'make depend' .endif -.if ${MACHINE_ARCH} == "powerpc" +.if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpc64" TGTOBJS= crtsavres.o SRCS+= crtsavres.asm .endif Modified: projects/ppc64/gnu/lib/libgcc/Makefile ============================================================================== --- projects/ppc64/gnu/lib/libgcc/Makefile Sun Jan 24 18:18:52 2010 (r202941) +++ projects/ppc64/gnu/lib/libgcc/Makefile Sun Jan 24 18:56:57 2010 (r202942) @@ -136,6 +136,11 @@ LIB2FUNCS_EXTRA = tramp.asm LIB2FUNCS_STATIC_EXTRA = eabi.asm .endif +.if ${TARGET_ARCH} == "powerpc64" +# from config/rs6000/t-ppccomm +LIB2FUNCS_EXTRA = tramp.asm +.endif + .if ${TARGET_ARCH} == "sparc64" # from config/sparc/t-elf LIB1ASMSRC = lb1spc.asm Added: projects/ppc64/lib/csu/powerpc64/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/lib/csu/powerpc64/Makefile Sun Jan 24 18:56:57 2010 (r202942) @@ -0,0 +1,23 @@ +# $FreeBSD: projects/ppc64/lib/csu/powerpc/Makefile 100872 2002-07-29 09:40:17Z ru $ + +.PATH: ${.CURDIR}/../common + +SRCS= crt1.c crti.S crtn.S +OBJS= ${SRCS:N*.h:R:S/$/.o/g} +OBJS+= gcrt1.o +CFLAGS+= -Wall -Wno-unused \ + -I${.CURDIR}/../common \ + -I${.CURDIR}/../../libc/include + +all: ${OBJS} + +CLEANFILES= ${OBJS} + +gcrt1.o: crt1.c + ${CC} ${CFLAGS} -DGCRT -c -o gcrt1.o ${.ALLSRC} + +realinstall: + ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ + ${OBJS} ${DESTDIR}${LIBDIR} + +.include Added: projects/ppc64/lib/csu/powerpc64/crt1.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/lib/csu/powerpc64/crt1.c Sun Jan 24 18:56:57 2010 (r202942) @@ -0,0 +1,123 @@ +/* LINTLIBRARY */ +/*- + * Copyright 2001 David E. O'Brien. + * All rights reserved. + * Copyright 1996-1998 John D. Polstra. + * All rights reserved. + * Copyright (c) 1997 Jason R. Thorpe. + * Copyright (c) 1995 Christopher G. Demetriou + * All rights reserved. + * + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed for the + * FreeBSD Project. See http://www.freebsd.org/ for + * information about FreeBSD. + * This product includes software developed for the + * NetBSD Project. See http://www.netbsd.org/ for + * information about NetBSD. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + */ + +#ifndef lint +#ifndef __GNUC__ +#error "GCC is needed to compile this file" +#endif +#endif /* lint */ + +#include + +#include "libc_private.h" +#include "crtbrand.c" + +struct Struct_Obj_Entry; +struct ps_strings; + +extern int _DYNAMIC; +#pragma weak _DYNAMIC + +extern void _fini(void); +extern void _init(void); +extern int main(int, char **, char **); +extern void _start(int, char **, char **, const struct Struct_Obj_Entry *, + void (*)(void), struct ps_strings *); + +#ifdef GCRT +extern void _mcleanup(void); +extern void monstartup(void *, void *); +extern int eprol; +extern int etext; +#endif + +char **environ; +const char *__progname = ""; +struct ps_strings *__ps_strings; + +/* The entry function. */ +/* + * First 5 arguments are specified by the PowerPC SVR4 ABI. + * The last argument, ps_strings, is a BSD extension. + */ +/* ARGSUSED */ +void +_start(int argc, char **argv, char **env, + const struct Struct_Obj_Entry *obj __unused, void (*cleanup)(void), + struct ps_strings *ps_strings) +{ + const char *s; + + environ = env; + + if (argc > 0 && argv[0] != NULL) { + __progname = argv[0]; + for (s = __progname; *s != '\0'; s++) + if (*s == '/') + __progname = s + 1; + } + + if (ps_strings != (struct ps_strings *)0) + __ps_strings = ps_strings; + + if (&_DYNAMIC != NULL) + atexit(cleanup); + else + _init_tls(); + +#ifdef GCRT + atexit(_mcleanup); +#endif + atexit(_fini); +#ifdef GCRT + monstartup(&eprol, &etext); +#endif + _init(); + exit( main(argc, argv, env) ); +} + +#ifdef GCRT +__asm__(".text"); +__asm__("eprol:"); +__asm__(".previous"); +#endif + +__asm__(".ident\t\"$FreeBSD: projects/ppc64/lib/csu/powerpc/crt1.c 133754 2004-08-15 16:18:52Z dfr $\""); Added: projects/ppc64/lib/csu/powerpc64/crti.S ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/lib/csu/powerpc64/crti.S Sun Jan 24 18:56:57 2010 (r202942) @@ -0,0 +1,67 @@ +/*- + * Copyright 2001 David E. O'Brien + * All rights reserved. + * + * 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 AUTHOR ``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 AUTHOR 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. + */ + + .section .init,"ax",@progbits + .align 2 + .globl _init + .section ".opd","aw" + .align 3 +_init: + .quad ._init,.TOC.@tocbase,0 + .previous + + .align 4 + .global ._init + .type ._init,@function +._init: + stdu 1,-48(1) + mflr 0 + std 31,40(1) + std 0,64(1) + mr 31,1 + + + .section .fini,"ax",@progbits + .align 2 + .globl _fini + .section ".opd","aw" + .align 3 +_fini: + .quad ._fini,.TOC.@tocbase,0 + .previous + + .align 4 + .global ._fini + .type ._fini,@function +._fini: + stdu 1,-48(1) + mflr 0 + std 31,40(1) + std 0,64(1) + mr 31,1 + + + .section .rodata +.ascii "$FreeBSD: projects/ppc64/lib/csu/powerpc/crti.S 96632 2002-05-15 04:19:49Z obrien $\0" Added: projects/ppc64/lib/csu/powerpc64/crtn.S ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/lib/csu/powerpc64/crtn.S Sun Jan 24 18:56:57 2010 (r202942) @@ -0,0 +1,45 @@ +/*- + * Copyright 2001 David E. O'Brien + * All rights reserved. + * + * 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 AUTHOR ``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 AUTHOR 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. + */ + + .section .init,"ax",@progbits + ld 11,0(1) + ld 0,16(11) + mtlr 0 + ld 31,-8(11) + mr 1,11 + blr + + + .section .fini,"ax",@progbits + ld 11,0(1) + ld 0,16(11) + mtlr 0 + ld 31,-8(11) + mr 1,11 + blr + + + .section .rodata +.ascii "$FreeBSD: projects/ppc64/lib/csu/powerpc/crtn.S 96632 2002-05-15 04:19:49Z obrien $\0" Modified: projects/ppc64/lib/libc/gmon/gmon.c ============================================================================== --- projects/ppc64/lib/libc/gmon/gmon.c Sun Jan 24 18:18:52 2010 (r202941) +++ projects/ppc64/lib/libc/gmon/gmon.c Sun Jan 24 18:56:57 2010 (r202942) @@ -49,8 +49,10 @@ __FBSDID("$FreeBSD$"); #include "libc_private.h" -#if defined(__i386__) || defined(__sparc64__) || defined(__amd64__) || defined(__powerpc__) +#if defined(__i386__) || defined(__sparc64__) || defined(__amd64__) || (defined(__powerpc__) && !defined(__powerpc64__)) extern char *minbrk __asm (".minbrk"); +#elif defined(__powerpc64__) +extern char *minbrk __asm ("_minbrk"); #else extern char *minbrk __asm ("minbrk"); #endif Modified: projects/ppc64/lib/libc/powerpc64/Makefile.inc ============================================================================== --- projects/ppc64/lib/libc/powerpc/Makefile.inc Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libc/powerpc64/Makefile.inc Sun Jan 24 18:56:57 2010 (r202942) @@ -2,4 +2,4 @@ # Long double is 64-bits MDSRCS+=machdep_ldisd.c -SYM_MAPS+=${.CURDIR}/powerpc/Symbol.map +SYM_MAPS+=${.CURDIR}/powerpc64/Symbol.map Modified: projects/ppc64/lib/libc/powerpc64/SYS.h ============================================================================== --- projects/ppc64/lib/libc/powerpc/SYS.h Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libc/powerpc64/SYS.h Sun Jan 24 18:56:57 2010 (r202942) @@ -43,11 +43,16 @@ .text; \ .align 2; \ 2: b PIC_PLT(CNAME(HIDENAME(cerror))); \ + nop; \ ENTRY(__CONCAT(__sys_,x)); \ .weak CNAME(x); \ .set CNAME(x),CNAME(__CONCAT(__sys_,x)); \ .weak CNAME(__CONCAT(_,x)); \ .set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \ + .weak CNAME(__CONCAT(.,x)); \ + .set CNAME(__CONCAT(.,x)),CNAME(__CONCAT(.__sys_,x));\ + .weak CNAME(__CONCAT(._,x)); \ + .set CNAME(__CONCAT(._,x)),CNAME(__CONCAT(.__sys_,x));\ _SYSCALL(x); \ bso 2b @@ -57,19 +62,28 @@ ENTRY(__CONCAT(__sys_,x)); \ ENTRY(__CONCAT(__sys_,x)); \ .weak CNAME(__CONCAT(_,x)); \ .set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \ + .weak CNAME(__CONCAT(._,x)); \ + .set CNAME(__CONCAT(._,x)),CNAME(__CONCAT(.__sys_,x));\ _SYSCALL(x); \ bnslr; \ - b PIC_PLT(CNAME(HIDENAME(cerror))) + b PIC_PLT(CNAME(HIDENAME(cerror))); \ + nop #define RSYSCALL(x) \ .text; \ .align 2; \ 2: b PIC_PLT(CNAME(HIDENAME(cerror))); \ + nop; \ ENTRY(__CONCAT(__sys_,x)); \ .weak CNAME(x); \ .set CNAME(x),CNAME(__CONCAT(__sys_,x)); \ .weak CNAME(__CONCAT(_,x)); \ .set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \ + .weak CNAME(__CONCAT(.,x)); \ + .set CNAME(__CONCAT(.,x)),CNAME(__CONCAT(.__sys_,x));\ + .weak CNAME(__CONCAT(._,x)); \ + .set CNAME(__CONCAT(._,x)),CNAME(__CONCAT(.__sys_,x));\ _SYSCALL(x); \ bnslr; \ - b PIC_PLT(CNAME(HIDENAME(cerror))) + b PIC_PLT(CNAME(HIDENAME(cerror))); \ + nop Modified: projects/ppc64/lib/libc/powerpc64/Symbol.map ============================================================================== --- projects/ppc64/lib/libc/powerpc/Symbol.map Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libc/powerpc64/Symbol.map Sun Jan 24 18:56:57 2010 (r202942) @@ -53,7 +53,7 @@ FBSDprivate_1.0 { __signalcontext; __syncicache; _end; - .curbrk; - .minbrk; - .cerror; + _curbrk; + _minbrk; + _cerror; }; Modified: projects/ppc64/lib/libc/powerpc64/gen/_ctx_start.S ============================================================================== --- projects/ppc64/lib/libc/powerpc/gen/_ctx_start.S Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libc/powerpc64/gen/_ctx_start.S Sun Jan 24 18:56:57 2010 (r202942) @@ -32,12 +32,16 @@ .globl CNAME(abort) ENTRY(_ctx_start) + ld %r2,8(%r14) + ld %r14,0(%r14) mtlr %r14 blrl /* branch to start function */ mr %r3,%r15 /* pass pointer to ucontext as argument */ + nop bl PIC_PLT(CNAME(_ctx_done)) /* branch to ctxt completion func */ /* * we should never return from the * above branch. */ + nop bl PIC_PLT(CNAME(abort)) /* abort */ Modified: projects/ppc64/lib/libc/powerpc64/gen/makecontext.c ============================================================================== --- projects/ppc64/lib/libc/powerpc/gen/makecontext.c Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libc/powerpc64/gen/makecontext.c Sun Jan 24 18:56:57 2010 (r202942) @@ -79,33 +79,31 @@ __makecontext(ucontext_t *ucp, void (*st */ stackargs = (argc > 8) ? argc - 8 : 0; sp = (char *) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size - - sizeof(uint32_t)*(stackargs + 2); - sp = (char *)((uint32_t)sp & ~0x1f); + - sizeof(uintptr_t)*(stackargs + 2); + sp = (char *)((uintptr_t)sp & ~0x1f); mc = &ucp->uc_mcontext; /* - * Up to 8 register args. Assumes all args are 32-bit and - * integer only. Not sure how to cater for floating point, - * although 64-bit args will work if aligned correctly - * in the arg list. + * Up to 8 register args. Assumes all args are 64-bit and + * integer only. Not sure how to cater for floating point. */ regargs = (argc > 8) ? 8 : argc; va_start(ap, argc); for (i = 0; i < regargs; i++) - mc->mc_gpr[3 + i] = va_arg(ap, uint32_t); + mc->mc_gpr[3 + i] = va_arg(ap, uint64_t); /* * Overflow args go onto the stack */ if (argc > 8) { - uint32_t *argp; + uint64_t *argp; /* Skip past frame pointer and saved LR */ - argp = (uint32_t *)sp + 2; + argp = (uint64_t *)sp + 6; for (i = 0; i < stackargs; i++) - *argp++ = va_arg(ap, uint32_t); + *argp++ = va_arg(ap, uint64_t); } va_end(ap); @@ -113,8 +111,8 @@ __makecontext(ucontext_t *ucp, void (*st * Use caller-saved regs 14/15 to hold params that _ctx_start * will use to invoke the user-supplied func */ - mc->mc_srr0 = (uint32_t) _ctx_start; - mc->mc_gpr[1] = (uint32_t) sp; /* new stack pointer */ - mc->mc_gpr[14] = (uint32_t) start; /* r14 <- start */ - mc->mc_gpr[15] = (uint32_t) ucp; /* r15 <- ucp */ + mc->mc_srr0 = (uintptr_t) _ctx_start; + mc->mc_gpr[1] = (uintptr_t) sp; /* new stack pointer */ + mc->mc_gpr[14] = (uintptr_t) start; /* r14 <- start */ + mc->mc_gpr[15] = (uintptr_t) ucp; /* r15 <- ucp */ } Modified: projects/ppc64/lib/libc/powerpc64/gen/signalcontext.c ============================================================================== --- projects/ppc64/lib/libc/powerpc/gen/signalcontext.c Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libc/powerpc64/gen/signalcontext.c Sun Jan 24 18:56:57 2010 (r202942) @@ -46,7 +46,7 @@ __signalcontext(ucontext_t *ucp, int sig { siginfo_t *sig_si; ucontext_t *sig_uc; - uint32_t sp; + uintptr_t sp; /* Bail out if we don't have a valid ucontext pointer. */ if (ucp == NULL) @@ -64,9 +64,9 @@ __signalcontext(ucontext_t *ucp, int sig sig_si->si_signo = sig; /* - * Subtract 8 bytes from stack to allow for frameptr + * Subtract 48 bytes from stack to allow for frameptr */ - sp -= 2*sizeof(uint32_t); + sp -= 6*sizeof(uint64_t); sp &= ~15UL; /* @@ -78,12 +78,12 @@ __signalcontext(ucontext_t *ucp, int sig ucp->uc_mcontext.mc_vers = _MC_VERSION; ucp->uc_mcontext.mc_len = sizeof(struct __mcontext); - ucp->uc_mcontext.mc_srr0 = (uint32_t) ctx_wrapper; - ucp->uc_mcontext.mc_gpr[1] = (uint32_t) sp; - ucp->uc_mcontext.mc_gpr[3] = (uint32_t) func; - ucp->uc_mcontext.mc_gpr[4] = (uint32_t) sig; - ucp->uc_mcontext.mc_gpr[5] = (uint32_t) sig_si; - ucp->uc_mcontext.mc_gpr[6] = (uint32_t) sig_uc; + ucp->uc_mcontext.mc_srr0 = (uint64_t) ctx_wrapper; + ucp->uc_mcontext.mc_gpr[1] = (uint64_t) sp; + ucp->uc_mcontext.mc_gpr[3] = (uint64_t) func; + ucp->uc_mcontext.mc_gpr[4] = (uint64_t) sig; + ucp->uc_mcontext.mc_gpr[5] = (uint64_t) sig_si; + ucp->uc_mcontext.mc_gpr[6] = (uint64_t) sig_uc; return (0); } Modified: projects/ppc64/lib/libc/powerpc64/gen/syncicache.c ============================================================================== --- projects/ppc64/lib/libc/powerpc/gen/syncicache.c Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libc/powerpc64/gen/syncicache.c Sun Jan 24 18:56:57 2010 (r202942) @@ -62,7 +62,7 @@ static void getcachelinesize() { static int cachemib[] = { CTL_MACHDEP, CPU_CACHELINE }; - int clen; + long clen; clen = sizeof(cacheline_size); @@ -76,7 +76,7 @@ getcachelinesize() void __syncicache(void *from, int len) { - int l, off; + off_t l, off; char *p; #if !defined(_KERNEL) && !defined(_STANDALONE) @@ -84,7 +84,7 @@ __syncicache(void *from, int len) getcachelinesize(); #endif - off = (u_int)from & (cacheline_size - 1); + off = (uintptr_t)from & (cacheline_size - 1); l = len += off; p = (char *)from - off; Modified: projects/ppc64/lib/libc/powerpc64/sys/brk.S ============================================================================== --- projects/ppc64/lib/libc/powerpc/sys/brk.S Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libc/powerpc64/sys/brk.S Sun Jan 24 18:56:57 2010 (r202942) @@ -36,23 +36,14 @@ __FBSDID("$FreeBSD$"); .data HIDENAME(minbrk): - .long CNAME(_end) + .llong CNAME(_end) .text ENTRY(brk) -#ifdef PIC - mflr %r10 - bl _GLOBAL_OFFSET_TABLE_@local-4 - mflr %r9 - mtlr %r10 - lwz %r5,HIDENAME(minbrk)@got(%r9) - lwz %r6,0(%r5) -#else - lis %r5,HIDENAME(minbrk)@ha - lwz %r6,HIDENAME(minbrk)@l(%r5) -#endif - cmplw %r6,%r3 /* if (minbrk <= r3) */ + ld %r5,HIDENAME(minbrk)@got(%r2) + ld %r6,0(%r5) + cmpld %r6,%r3 /* if (minbrk <= r3) */ bgt 0f mr %r6,%r3 /* r6 = r3 */ 0: @@ -60,14 +51,10 @@ ENTRY(brk) li %r0,SYS_break sc /* assume, that r5 is kept */ bso 1f -#ifdef PIC - lwz %r7,HIDENAME(curbrk)@got(%r9) - stw %r6,0(%r7) -#else - lis %r7,HIDENAME(curbrk)@ha /* record new break */ - stw %r6,HIDENAME(curbrk)@l(%r7) -#endif + ld %r7,HIDENAME(curbrk)@got(%r2) /* record new break */ + std %r6,0(%r7) blr /* return 0 */ 1: b PIC_PLT(HIDENAME(cerror)) + nop Modified: projects/ppc64/lib/libc/powerpc64/sys/cerror.S ============================================================================== --- projects/ppc64/lib/libc/powerpc/sys/cerror.S Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libc/powerpc64/sys/cerror.S Sun Jan 24 18:56:57 2010 (r202942) @@ -38,18 +38,19 @@ __FBSDID("$FreeBSD$"); * programs and the initial threaded in threaded programs, * it returns a pointer to the global errno variable. */ -HIDENAME(cerror): +ENTRY(HIDENAME(cerror)) mflr %r0 - stwu %r1,-16(%r1) /* allocate new stack frame */ - stw %r0,20(%r1) /* and save lr, r31 */ - stw %r31,8(%r1) + stdu %r1,-56(%r1) /* allocate new stack frame */ + std %r0,16(%r1) /* and save lr, r31 */ + std %r31,48(%r1) mr %r31,%r3 /* stash errval in callee-saved register */ bl PIC_PLT(CNAME(__error)) - stw %r31,0(%r3) /* store errval into &errno */ - lwz %r0,20(%r1) - lwz %r31,8(%r1) + nop + std %r31,0(%r3) /* store errval into &errno */ + ld %r0,16(%r1) + ld %r31,48(%r1) mtlr %r0 - la %r1,16(%r1) + ld %r1,0(%r1) li %r3,-1 li %r4,-1 blr /* return to callers caller */ Modified: projects/ppc64/lib/libc/powerpc64/sys/exect.S ============================================================================== --- projects/ppc64/lib/libc/powerpc/sys/exect.S Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libc/powerpc64/sys/exect.S Sun Jan 24 18:56:57 2010 (r202942) @@ -37,3 +37,4 @@ ENTRY(exect) blr 1: b PIC_PLT(HIDENAME(cerror)) + nop Modified: projects/ppc64/lib/libc/powerpc64/sys/pipe.S ============================================================================== --- projects/ppc64/lib/libc/powerpc/sys/pipe.S Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libc/powerpc64/sys/pipe.S Sun Jan 24 18:56:57 2010 (r202942) @@ -41,3 +41,4 @@ ENTRY(pipe) blr /* and return 0 */ 1: b PIC_PLT(HIDENAME(cerror)) + nop Modified: projects/ppc64/lib/libc/powerpc64/sys/ptrace.S ============================================================================== --- projects/ppc64/lib/libc/powerpc/sys/ptrace.S Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libc/powerpc64/sys/ptrace.S Sun Jan 24 18:56:57 2010 (r202942) @@ -32,27 +32,29 @@ __FBSDID("$FreeBSD$"); ENTRY(ptrace) 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) + stdu %r1,-68(%r1) + std %r0,16(%r1) + stw %r3,48(%r1) + stw %r4,52(%r1) + std %r5,56(%r1) + stw %r6,64(%r1) bl PIC_PLT(CNAME(__error)) + nop li %r7,0 stw %r7,0(%r3) - lwz %r3,8(%r1) - lwz %r4,12(%r1) - lwz %r5,16(%r1) - lwz %r0,36(%r1) - lwz %r6,20(%r1) + lwz %r3,48(%r1) + lwz %r4,52(%r1) + ld %r5,56(%r1) + ld %r0,16(%r1) + lwz %r6,64(%r1) mtlr %r0 - la %r1,32(%r1) + ld %r1,0(%r1) li %r0,SYS_ptrace sc bso 1f blr 1: b PIC_PLT(HIDENAME(cerror)) + nop Modified: projects/ppc64/lib/libc/powerpc64/sys/sbrk.S ============================================================================== --- projects/ppc64/lib/libc/powerpc/sys/sbrk.S Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libc/powerpc64/sys/sbrk.S Sun Jan 24 18:56:57 2010 (r202942) @@ -35,36 +35,23 @@ __FBSDID("$FreeBSD$"); .data HIDENAME(curbrk): - .long CNAME(_end) + .llong CNAME(_end) .text ENTRY(sbrk) - -#ifdef PIC - mflr %r10 - bl _GLOBAL_OFFSET_TABLE_@local-4 - mflr %r5 - mtlr %r10 - lwz %r5,HIDENAME(curbrk)@got(%r5) - lwz %r6,0(%r5) -#else - lis %r5,HIDENAME(curbrk)@ha - lwz %r6,HIDENAME(curbrk)@l(%r5) /* r6 = old break */ -#endif - cmpwi %r3,0 /* sbrk(0) - return curbrk */ + ld %r5,HIDENAME(curbrk)@got(%r2) + ld %r6,0(%r5) /* r6 = old break */ + cmpdi %r3,0 /* sbrk(0) - return curbrk */ beq 1f add %r3,%r3,%r6 mr %r7,%r3 /* r7 = new break */ li %r0,SYS_break sc /* break(new_break) */ bso 2f -#ifdef PIC - stw %r7,0(%r5) -#else - stw %r7,HIDENAME(curbrk)@l(%r5) /* record new break */ -#endif + std %r7,0(%r5) 1: mr %r3,%r6 /* set return value */ blr 2: b PIC_PLT(HIDENAME(cerror)) + nop Modified: projects/ppc64/lib/libc/powerpc64/sys/setlogin.S ============================================================================== --- projects/ppc64/lib/libc/powerpc/sys/setlogin.S Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libc/powerpc64/sys/setlogin.S Sun Jan 24 18:56:57 2010 (r202942) @@ -33,17 +33,7 @@ __FBSDID("$FreeBSD$"); .globl CNAME(_logname_valid) /* in _getlogin() */ SYSCALL(setlogin) -#ifdef PIC - mflr %r10 - bl _GLOBAL_OFFSET_TABLE_@local-4 - mflr %r4 - lwz %r4,CNAME(_logname_valid)@got(%r4) + ld %r4,CNAME(_logname_valid)@got(%r2) li %r5,%r0 - stw %r5,0(%r4) - mtlr %r10 -#else - lis %r4,CNAME(_logname_valid)@ha - li %r5,0 - stw %r5,CNAME(_logname_valid)@l(%r4) -#endif + std %r5,0(%r4) blr Modified: projects/ppc64/lib/libc/stdlib/malloc.c ============================================================================== --- projects/ppc64/lib/libc/stdlib/malloc.c Sun Jan 24 18:18:52 2010 (r202941) +++ projects/ppc64/lib/libc/stdlib/malloc.c Sun Jan 24 18:56:57 2010 (r202942) @@ -250,7 +250,10 @@ __FBSDID("$FreeBSD$"); # define SIZEOF_PTR_2POW 2 # define NO_TLS #endif -#ifdef __powerpc__ +#ifdef __powerpc64__ +# define QUANTUM_2POW 4 +# define SIZEOF_PTR_2POW 3 +#elif defined(__powerpc__) # define QUANTUM_2POW 4 # define SIZEOF_PTR_2POW 2 #endif Modified: projects/ppc64/lib/libthr/arch/powerpc64/include/pthread_md.h ============================================================================== --- projects/ppc64/lib/libthr/arch/powerpc/include/pthread_md.h Tue Jan 19 20:36:15 2010 (r202650) +++ projects/ppc64/lib/libthr/arch/powerpc64/include/pthread_md.h Sun Jan 24 18:56:57 2010 (r202942) @@ -39,7 +39,7 @@ #define CPU_SPINWAIT #define DTV_OFFSET offsetof(struct tcb, tcb_dtv) -#define TP_OFFSET 0x7008 +#define TP_OFFSET 0x8000 /* * Variant I tcb. The structure layout is fixed, don't blindly @@ -57,7 +57,7 @@ void _tcb_dtor(struct tcb *); static __inline void _tcb_set(struct tcb *tcb) { - register uint8_t *_tp __asm__("%r2"); + register uint8_t *_tp __asm__("%r13"); __asm __volatile("mr %0,%1" : "=r"(_tp) : "r"((uint8_t *)tcb + TP_OFFSET)); @@ -66,7 +66,7 @@ _tcb_set(struct tcb *tcb) static __inline struct tcb * _tcb_get(void) { - register uint8_t *_tp __asm__("%r2"); + register uint8_t *_tp __asm__("%r13"); return ((struct tcb *)(_tp - TP_OFFSET)); } Copied and modified: projects/ppc64/secure/lib/libcrypto/opensslconf-powerpc64.h (from r202650, projects/ppc64/secure/lib/libcrypto/opensslconf-powerpc.h) ============================================================================== --- projects/ppc64/secure/lib/libcrypto/opensslconf-powerpc.h Tue Jan 19 20:36:15 2010 (r202650, copy source) +++ projects/ppc64/secure/lib/libcrypto/opensslconf-powerpc64.h Sun Jan 24 18:56:57 2010 (r202942) @@ -110,13 +110,13 @@ /* If this is set to 'unsigned int' on a DEC Alpha, this gives about a * %20 speed up (longs are 8 bytes, int's are 4). */ #ifndef DES_LONG -#define DES_LONG unsigned long +#define DES_LONG unsigned int #endif #endif #if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H) #define CONFIG_HEADER_BN_H -#define BN_LLONG +#undef BN_LLONG /* Should we define BN_DIV2W here? */ @@ -124,9 +124,9 @@ /* The prime number generation stuff may not work when * EIGHT_BIT but I don't care since I've only used this mode * for debuging the bignum libraries */ -#undef SIXTY_FOUR_BIT_LONG +#define SIXTY_FOUR_BIT_LONG #undef SIXTY_FOUR_BIT -#define THIRTY_TWO_BIT +#undef THIRTY_TWO_BIT #undef SIXTEEN_BIT #undef EIGHT_BIT #endif Modified: projects/ppc64/sys/powerpc/include/asm.h ============================================================================== --- projects/ppc64/sys/powerpc/include/asm.h Sun Jan 24 18:18:52 2010 (r202941) +++ projects/ppc64/sys/powerpc/include/asm.h Sun Jan 24 18:56:57 2010 (r202942) @@ -53,9 +53,18 @@ #define PIC_GOT(x) x #endif +#ifdef __powerpc64__ +#undef PIC_PLT +#define PIC_PLT(x) __CONCAT(.,x) +#endif + #define CNAME(csym) csym #define ASMNAME(asmsym) asmsym +#ifdef __powerpc64__ +#define HIDENAME(asmsym) __CONCAT(_,asmsym) +#else #define HIDENAME(asmsym) __CONCAT(.,asmsym) +#endif #define _GLOBAL(x) \ .data; .align 2; .globl x; x: Modified: projects/ppc64/sys/powerpc/include/profile.h ============================================================================== --- projects/ppc64/sys/powerpc/include/profile.h Sun Jan 24 18:18:52 2010 (r202941) +++ projects/ppc64/sys/powerpc/include/profile.h Sun Jan 24 18:56:57 2010 (r202942) @@ -36,7 +36,7 @@ #define FUNCTION_ALIGNMENT 16 -typedef u_int fptrdiff_t; +typedef __ptrdiff_t fptrdiff_t; /* * The mcount trampoline macro, expanded in libc/gmon/mcount.c @@ -75,6 +75,13 @@ typedef u_int fptrdiff_t; * to be restored to what it was on entry to the profiled routine. */ +#ifdef __powerpc64__ +/* XXX not implemented */ + +#define MCOUNT int _mcount(void) {return (0);} + +#else + #ifdef PIC #define _PLT "@plt" #else @@ -115,6 +122,7 @@ __asm( " .globl _mcount \n" \ " bctr \n" \ "_mcount_end: \n" \ " .size _mcount,_mcount_end-_mcount"); +#endif #ifdef _KERNEL #define MCOUNT_ENTER(s) s = intr_disable() Modified: projects/ppc64/sys/sys/cdefs.h ============================================================================== --- projects/ppc64/sys/sys/cdefs.h Sun Jan 24 18:18:52 2010 (r202941) +++ projects/ppc64/sys/sys/cdefs.h Sun Jan 24 18:56:57 2010 (r202942) @@ -356,9 +356,17 @@ extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym))) #endif #ifdef __STDC__ +#ifdef __powerpc64__ +#define __weak_reference(sym,alias) \ + __asm__(".weak " #alias); \ + __asm__(".equ " #alias ", " #sym); \ + __asm__(".weak ." #alias); \ + __asm__(".equ ." #alias ", ." #sym) +#else #define __weak_reference(sym,alias) \ __asm__(".weak " #alias); \ __asm__(".equ " #alias ", " #sym) +#endif #define __warn_references(sym,msg) \ __asm__(".section .gnu.warning." #sym); \ __asm__(".asciz \"" msg "\""); \