diff options
-rw-r--r-- | sys/arch/macppc/conf/Makefile.macppc | 34 | ||||
-rw-r--r-- | sys/arch/macppc/conf/files.macppc | 3 | ||||
-rw-r--r-- | sys/arch/macppc/macppc/locore.S | 83 | ||||
-rw-r--r-- | sys/arch/macppc/macppc/locore0.S | 132 |
4 files changed, 164 insertions, 88 deletions
diff --git a/sys/arch/macppc/conf/Makefile.macppc b/sys/arch/macppc/conf/Makefile.macppc index a5edef7ea7a..3a827ddf541 100644 --- a/sys/arch/macppc/conf/Makefile.macppc +++ b/sys/arch/macppc/conf/Makefile.macppc @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.macppc,v 1.82 2017/06/11 22:51:21 deraadt Exp $ +# $OpenBSD: Makefile.macppc,v 1.83 2017/06/13 01:44:27 deraadt Exp $ # For instructions on building kernels consult the config(8) and options(4) # manual pages. @@ -31,9 +31,13 @@ CMACHFLAGS= -msoft-float -Wa,-many CMACHFLAGS+= -fno-builtin-printf -fno-builtin-snprintf \ -fno-builtin-vsnprintf -fno-builtin-log \ -fno-builtin-log2 -fno-builtin-malloc ${NOPIE_FLAGS} +SORTR= sort -R .if ${IDENT:M-DNO_PROPOLICE} CMACHFLAGS+= -fno-stack-protector .endif +.if ${IDENT:M-DSMALL_KERNEL} +SORTR= cat +.endif DEBUG?= -g COPTS?= -O2 @@ -67,13 +71,14 @@ NORMAL_S= ${CC} ${AFLAGS} ${CPPFLAGS} -c $< # ${SYSTEM_LD_HEAD} # ${SYSTEM_LD} swapxxx.o # ${SYSTEM_LD_TAIL} -SYSTEM_HEAD= locore.o param.o ioconf.o -SYSTEM_OBJ= ${SYSTEM_HEAD} ${OBJS} -SYSTEM_DEP= Makefile ${SYSTEM_OBJ} +SYSTEM_HEAD= locore0.o gap.o +SYSTEM_OBJ= ${SYSTEM_HEAD} ${OBJS} param.o ioconf.o +SYSTEM_DEP= Makefile ${SYSTEM_OBJ} ld.script SYSTEM_LD_HEAD= @rm -f $@ SYSTEM_LD= @echo ${LD} ${LINKFLAGS} -o $@ '$${SYSTEM_HEAD} vers.o $${OBJS}'; \ umask 007; \ - ${LD} ${LINKFLAGS} -o $@ ${SYSTEM_HEAD} vers.o ${OBJS} + echo ${OBJS} param.o ioconf.o vers.o | tr " " "\n" | ${SORTR} > lorder; \ + ${LD} ${LINKFLAGS} -o $@ ${SYSTEM_HEAD} `cat lorder` SYSTEM_LD_TAIL= @${SIZE} $@ .if ${DEBUG} == "-g" @@ -88,6 +93,12 @@ LINKFLAGS+= -S %LOAD +newbsd: + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapgeneric.o + ${SYSTEM_LD_TAIL} + mv -f newbsd bsd + # cc's -MD puts the source and output paths in the dependency file; # since those are temp files here we need to fix it up. It also # puts the file in /tmp, so we use -MF to put it in the current @@ -113,12 +124,22 @@ mcount.o: $S/lib/libkern/mcount.c Makefile ioconf.o: ioconf.c ${NORMAL_C} +ld.script: ${_machdir}/conf/ld.script + cp ${_machdir}/conf/ld.script $@ + vers.o: ${SYSTEM_DEP:Ngap.o} ${SYSTEM_SWAP_DEP} sh $S/conf/newvers.sh ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c +gap.S: ${SYSTEM_SWAP_DEP} Makefile + umask 007; sh $S/conf/makegap.sh 0xcc > gap.S + +gap.o: gap.S + umask 007; ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c gap.S + clean: - rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} param.c + rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \ + gap.S lorder param.c cleandir: clean rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c @@ -130,6 +151,7 @@ db_structinfo.h: $S/ddb/db_structinfo.c $S/ddb/parse_structinfo.pl objdump -g db_structinfo.o | perl $S/ddb/parse_structinfo.pl > $@ rm -f db_structinfo.o +locore0.o: ${_machdir}/${_mach}/locore0.S assym.h locore.o: ${_machdir}/${_mach}/locore.S assym.h mutex.o: assym.h diff --git a/sys/arch/macppc/conf/files.macppc b/sys/arch/macppc/conf/files.macppc index de66b63c4fe..f237bd0295a 100644 --- a/sys/arch/macppc/conf/files.macppc +++ b/sys/arch/macppc/conf/files.macppc @@ -1,4 +1,4 @@ -# $OpenBSD: files.macppc,v 1.87 2016/05/20 21:45:04 mglocker Exp $ +# $OpenBSD: files.macppc,v 1.88 2017/06/13 01:44:27 deraadt Exp $ # # macppc-specific configuration info @@ -17,6 +17,7 @@ file arch/macppc/macppc/mem.c file arch/macppc/macppc/ofw_machdep.c file arch/macppc/macppc/openfirm.c file arch/macppc/macppc/openprom.c +file arch/macppc/macppc/locore.o file dev/cninit.c file arch/macppc/macppc/ofwreal.S diff --git a/sys/arch/macppc/macppc/locore.S b/sys/arch/macppc/macppc/locore.S index ce18aaf1f2b..305b24b9fe3 100644 --- a/sys/arch/macppc/macppc/locore.S +++ b/sys/arch/macppc/macppc/locore.S @@ -1,4 +1,4 @@ -/* $OpenBSD: locore.S,v 1.55 2016/05/23 20:11:49 deraadt Exp $ */ +/* $OpenBSD: locore.S,v 1.56 2017/06/13 01:44:29 deraadt Exp $ */ /* $NetBSD: locore.S,v 1.2 1996/10/16 19:33:09 ws Exp $ */ /* @@ -48,87 +48,8 @@ #define SPILLSTK (1*1024) #define DDBSTK (7*1024) -/* - * Globals - */ - .globl _C_LABEL(esym),_C_LABEL(proc0paddr) - .type _C_LABEL(esym),@object - .type _C_LABEL(proc0paddr),@object - .data -_C_LABEL(esym): .long 0 /* end of symbol table */ -_C_LABEL(proc0paddr): .long 0 /* proc0 p_addr */ - -fwargsave: - .long 0 - .long 0 - -/* - * Startup entry - */ -_ENTRY(_C_LABEL(kernel_text)) -_ENTRY(_ASM_LABEL(start)) -/* arguments to start - * r1 - stack provided by firmware/bootloader - * r3 - unused - * r4 - unused - * r5 - firmware pointer (NULL for PPC1bug) - * r6 - arg list - * r7 - length - */ - .globl start - .type start,@function -start: - lis %r3, fwargsave@ha - stw %r6, fwargsave@l(%r3) - stw %r7, fwargsave@l+4(%r3) - bl ofw_init - li %r0,0 - mtmsr %r0 /* Disable FPU/MMU/exceptions */ - isync + .text -/* compute end of kernel memory */ - lis %r8,_end@ha - addi %r8,%r8,_end@l - lis %r3, fwargsave@ha - lwz %r6, fwargsave@l(%r3) - lwz %r7, fwargsave@l+4(%r3) -#if defined(DDB) - cmpwi %r6, 0 - beq 1f - add %r9,%r6,%r7 - lwz %r9, -4(%r9) - cmpwi %r9,0 - beq 1f - lis %r8,_C_LABEL(esym)@ha - stw %r9,_C_LABEL(esym)@l(%r8) - mr %r8, %r9 -1: -#endif - li %r9,PGOFSET - add %r8,%r8,%r9 - andc %r8,%r8,%r9 - lis %r9,_C_LABEL(cpu_info)@ha - addi %r9,%r9,_C_LABEL(cpu_info)@l - mtsprg 0,%r9 - addi %r8,%r8,INTSTK - stw %r8,CI_INTSTK(%r9) - li %r0,-1 - stw %r0,CI_INTRDEPTH(%r9) - addi %r8,%r8,SPILLSTK+DDBSTK /* leave room for spillstk and ddbstk */ - lis %r9,_C_LABEL(proc0paddr)@ha - stw %r8,_C_LABEL(proc0paddr)@l(%r9) - addi %r1,%r8,USPACE-FRAMELEN /* stackpointer for proc0 */ - mr %r4,%r1 /* end of mem reserved for kernel */ - li %r0,0 - stwu %r0,-16(%r1) /* end of stack chain */ - - lis %r3,start@ha - addi %r3,%r3,start@l - mr %r5,%r6 /* args string */ - bl _C_LABEL(initppc) - bl _C_LABEL(main) - b _C_LABEL(OF_exit) - #ifdef MULTIPROCESSOR _ENTRY(_C_LABEL(cpu_spinup_trampoline)) lis %r3,_C_LABEL(cpu_hatch_stack)@ha diff --git a/sys/arch/macppc/macppc/locore0.S b/sys/arch/macppc/macppc/locore0.S new file mode 100644 index 00000000000..3bc89c2a441 --- /dev/null +++ b/sys/arch/macppc/macppc/locore0.S @@ -0,0 +1,132 @@ +/* $OpenBSD: locore0.S,v 1.1 2017/06/13 01:44:29 deraadt Exp $ */ +/* $NetBSD: locore.S,v 1.2 1996/10/16 19:33:09 ws Exp $ */ + +/* + * Copyright (C) 1995, 1996 Wolfgang Solfrank. + * Copyright (C) 1995, 1996 TooLs GmbH. + * 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 by TooLs GmbH. + * 4. The name of TooLs GmbH may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``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 TOOLS GMBH 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 "assym.h" + +#include <sys/syscall.h> + +#include <machine/asm.h> +#include <machine/param.h> +#include <machine/pmap.h> +#include <machine/psl.h> +#include <machine/trap.h> + +#define GET_CPUINFO(r) mfsprg r,0 + +#define INTSTK (8*1024) /* 8K interrupt stack */ +#define SPILLSTK (1*1024) +#define DDBSTK (7*1024) + +/* + * Globals + */ + .globl _C_LABEL(esym),_C_LABEL(proc0paddr) + .type _C_LABEL(esym),@object + .type _C_LABEL(proc0paddr),@object + .data +_C_LABEL(esym): .long 0 /* end of symbol table */ +_C_LABEL(proc0paddr): .long 0 /* proc0 p_addr */ + + .globl fwargsave +fwargsave: + .long 0 + .long 0 + + .text +/* + * Startup entry + */ +_ENTRY(_C_LABEL(kernel_text)) +_ENTRY(_ASM_LABEL(start)) +/* arguments to start + * r1 - stack provided by firmware/bootloader + * r3 - unused + * r4 - unused + * r5 - firmware pointer (NULL for PPC1bug) + * r6 - arg list + * r7 - length + */ + .globl start + .type start,@function +start: + lis %r3, fwargsave@ha + stw %r6, fwargsave@l(%r3) + stw %r7, fwargsave@l+4(%r3) + bl ofw_init + li %r0,0 + mtmsr %r0 /* Disable FPU/MMU/exceptions */ + isync + +/* compute end of kernel memory */ + lis %r8,_end@ha + addi %r8,%r8,_end@l + lis %r3, fwargsave@ha + lwz %r6, fwargsave@l(%r3) + lwz %r7, fwargsave@l+4(%r3) +#if defined(DDB) + cmpwi %r6, 0 + beq 1f + add %r9,%r6,%r7 + lwz %r9, -4(%r9) + cmpwi %r9,0 + beq 1f + lis %r8,_C_LABEL(esym)@ha + stw %r9,_C_LABEL(esym)@l(%r8) + mr %r8, %r9 +1: +#endif + li %r9,PGOFSET + add %r8,%r8,%r9 + andc %r8,%r8,%r9 + lis %r9,_C_LABEL(cpu_info)@ha + addi %r9,%r9,_C_LABEL(cpu_info)@l + mtsprg 0,%r9 + addi %r8,%r8,INTSTK + stw %r8,CI_INTSTK(%r9) + li %r0,-1 + stw %r0,CI_INTRDEPTH(%r9) + addi %r8,%r8,SPILLSTK+DDBSTK /* leave room for spillstk and ddbstk */ + lis %r9,_C_LABEL(proc0paddr)@ha + stw %r8,_C_LABEL(proc0paddr)@l(%r9) + addi %r1,%r8,USPACE-FRAMELEN /* stackpointer for proc0 */ + mr %r4,%r1 /* end of mem reserved for kernel */ + li %r0,0 + stwu %r0,-16(%r1) /* end of stack chain */ + + lis %r3,start@ha + addi %r3,%r3,start@l + mr %r5,%r6 /* args string */ + bl _C_LABEL(initppc) + bl _C_LABEL(main) + b _C_LABEL(OF_exit) |