summaryrefslogtreecommitdiff
path: root/sys/arch/alpha
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/alpha')
-rw-r--r--sys/arch/alpha/alpha/autoconf.c15
-rw-r--r--sys/arch/alpha/alpha/locore.s74
-rw-r--r--sys/arch/alpha/alpha/locore0.S166
-rw-r--r--sys/arch/alpha/conf/Makefile.alpha25
-rw-r--r--sys/arch/alpha/conf/files.alpha3
-rw-r--r--sys/arch/alpha/include/param.h4
6 files changed, 205 insertions, 82 deletions
diff --git a/sys/arch/alpha/alpha/autoconf.c b/sys/arch/alpha/alpha/autoconf.c
index e24b03c3f84..300f7b90457 100644
--- a/sys/arch/alpha/alpha/autoconf.c
+++ b/sys/arch/alpha/alpha/autoconf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: autoconf.c,v 1.36 2016/06/08 17:24:44 tedu Exp $ */
+/* $OpenBSD: autoconf.c,v 1.37 2017/06/05 17:49:05 deraadt Exp $ */
/* $NetBSD: autoconf.c,v 1.16 1996/11/13 21:13:04 cgd Exp $ */
/*
@@ -67,6 +67,17 @@ char boot_dev[128];
void parse_prom_bootdev(void);
int atoi(char *);
+void
+unmap_startup(void)
+{
+ extern uint32_t kernel_text[], endboot[];
+ uint32_t *word = kernel_text;
+
+ /* Cannot unmap KSEG0; smash with 0x00000000 (call_pall PAL_halt) */
+ while (word < endboot)
+ *word++ = 0x00000000;
+}
+
/*
* cpu_configure:
* called at boot time, configure all devices on system
@@ -77,6 +88,8 @@ cpu_configure()
parse_prom_bootdev();
softintr_init();
+ unmap_startup();
+
/*
* Disable interrupts during autoconfiguration. splhigh() won't
* work, because it simply _raises_ the IPL, so if machine checks
diff --git a/sys/arch/alpha/alpha/locore.s b/sys/arch/alpha/alpha/locore.s
index a55cec33c62..32fc2269025 100644
--- a/sys/arch/alpha/alpha/locore.s
+++ b/sys/arch/alpha/alpha/locore.s
@@ -1,4 +1,4 @@
-/* $OpenBSD: locore.s,v 1.46 2017/05/27 14:33:39 kettenis Exp $ */
+/* $OpenBSD: locore.s,v 1.47 2017/06/05 17:49:05 deraadt Exp $ */
/* $NetBSD: locore.s,v 1.94 2001/04/26 03:10:44 ross Exp $ */
/*-
@@ -132,78 +132,6 @@ IMPORT(cpu_info_primary, CPU_INFO_SIZEOF)
bne \reg, \dst
.endm
-/*
- * This is for kvm_mkdb, and should be the address of the beginning
- * of the kernel text segment (not necessarily the same as kernbase).
- */
- EXPORT(kernel_text)
-.loc 1 __LINE__
-kernel_text:
-
-/*
- * bootstack: a temporary stack, for booting.
- *
- * Extends from 'start' down.
- */
-bootstack:
-
-/*
- * __start: Kernel start.
- *
- * Arguments:
- * a0 is the first free page frame number (PFN) (no longer used)
- * a1 is the page table base register (PTBR)
- * a2 is the bootinfo magic number
- * a3 is the pointer to the bootinfo structure
- *
- * All arguments are passed to alpha_init().
- */
-NESTED_NOPROFILE(__start,1,0,ra,0,0)
- br pv,Lstart1
-Lstart1: LDGP(pv)
-
- /* Switch to the boot stack. */
- lda sp,bootstack
-
- /* Load KGP with current GP. */
- or gp,zero,a0
- call_pal PAL_OSF1_wrkgp /* clobbers a0, t0, t8-t11 */
-
- /*
- * Call alpha_init() to do pre-main initialization.
- * alpha_init() gets the arguments we were called with,
- * which are already in a0 (destroyed), a1, a2, a3 and a4.
- */
- CALL(alpha_init)
-
- /* Set up the virtual page table pointer. */
- ldiq a0, VPTBASE
- call_pal PAL_OSF1_wrvptptr /* clobbers a0, t0, t8-t11 */
-
- /*
- * Switch to proc0's PCB.
- */
- lda a0, proc0
- ldq a0, P_MD_PCBPADDR(a0) /* phys addr of PCB */
- SWITCH_CONTEXT
-
- /*
- * We've switched to a new page table base, so invalidate the TLB
- * and I-stream. This happens automatically everywhere but here.
- */
- ldiq a0, -2 /* TBIA */
- call_pal PAL_OSF1_tbi
- call_pal PAL_imb
-
- /*
- * All ready to go! Call main()!
- */
- CALL(main)
-
- /* This should never happen. */
- PANIC("main() returned",Lmain_returned_pmsg)
- END(__start)
-
/**************************************************************************/
/*
diff --git a/sys/arch/alpha/alpha/locore0.S b/sys/arch/alpha/alpha/locore0.S
new file mode 100644
index 00000000000..9c6e5a77617
--- /dev/null
+++ b/sys/arch/alpha/alpha/locore0.S
@@ -0,0 +1,166 @@
+/* $OpenBSD: locore0.S,v 1.1 2017/06/05 17:49:05 deraadt Exp $ */
+/* $NetBSD: locore.s,v 1.94 2001/04/26 03:10:44 ross Exp $ */
+
+/*-
+ * Copyright (c) 1999, 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
+ * NASA Ames Research Center.
+ *
+ * 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.
+ */
+
+/*
+ * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
+ * All rights reserved.
+ *
+ * Author: Chris G. Demetriou
+ *
+ * Permission to use, copy, modify and distribute this software and
+ * its documentation is hereby granted, provided that both the copyright
+ * notice and this permission notice appear in all copies of the
+ * software, derivative works or modified versions, and any portions
+ * thereof, and that both notices appear in supporting documentation.
+ *
+ * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
+ * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+ *
+ * Carnegie Mellon requests users of this software to return to
+ *
+ * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
+ * School of Computer Science
+ * Carnegie Mellon University
+ * Pittsburgh PA 15213-3890
+ *
+ * any improvements or extensions that they make and grant Carnegie the
+ * rights to redistribute these changes.
+ */
+
+.file 1 __FILE__
+
+#include <machine/asm.h>
+
+#include "assym.h"
+
+/*
+ * Perform actions necessary to switch to a new context. The
+ * hwpcb should be in a0. Clobbers v0, t0, t8..t11, a0.
+ */
+#define SWITCH_CONTEXT \
+ /* Make a note of the context we're running on. */ \
+ GET_CURPCB ; \
+ stq a0, 0(v0) ; \
+ \
+ /* Swap in the new context. */ \
+ call_pal PAL_OSF1_swpctx
+
+
+ /* don't reorder instructions; paranoia. */
+ .set noreorder
+ .text
+
+ .macro bfalse reg, dst
+ beq \reg, \dst
+ .endm
+
+ .macro btrue reg, dst
+ bne \reg, \dst
+ .endm
+
+#define GET_CURPCB \
+ call_pal PAL_OSF1_rdval ; \
+ addq v0, CPU_INFO_CURPCB, v0
+
+/*
+ * This is for kvm_mkdb, and should be the address of the beginning
+ * of the kernel text segment (not necessarily the same as kernbase).
+ */
+ EXPORT(kernel_text)
+.loc 1 __LINE__
+kernel_text:
+
+/*
+ * bootstack: a temporary stack, for booting.
+ *
+ * Extends from 'start' down.
+ */
+bootstack:
+
+/*
+ * __start: Kernel start.
+ *
+ * Arguments:
+ * a0 is the first free page frame number (PFN) (no longer used)
+ * a1 is the page table base register (PTBR)
+ * a2 is the bootinfo magic number
+ * a3 is the pointer to the bootinfo structure
+ *
+ * All arguments are passed to alpha_init().
+ */
+NESTED_NOPROFILE(__start,1,0,ra,0,0)
+ br pv,Lstart1
+Lstart1: LDGP(pv)
+
+ /* Switch to the boot stack. */
+ lda sp,bootstack
+
+ /* Load KGP with current GP. */
+ or gp,zero,a0
+ call_pal PAL_OSF1_wrkgp /* clobbers a0, t0, t8-t11 */
+
+ /*
+ * Call alpha_init() to do pre-main initialization.
+ * alpha_init() gets the arguments we were called with,
+ * which are already in a0 (destroyed), a1, a2, a3 and a4.
+ */
+ CALL(alpha_init)
+
+ /* Set up the virtual page table pointer. */
+ ldiq a0, VPTBASE
+ call_pal PAL_OSF1_wrvptptr /* clobbers a0, t0, t8-t11 */
+
+ /*
+ * Switch to proc0's PCB.
+ */
+ lda a0, proc0
+ ldq a0, P_MD_PCBPADDR(a0) /* phys addr of PCB */
+ SWITCH_CONTEXT
+
+ /*
+ * We've switched to a new page table base, so invalidate the TLB
+ * and I-stream. This happens automatically everywhere but here.
+ */
+ ldiq a0, -2 /* TBIA */
+ call_pal PAL_OSF1_tbi
+ call_pal PAL_imb
+
+ /*
+ * All ready to go! Call main()!
+ */
+ CALL(main)
+
+ /* This should never happen. */
+ PANIC("main() returned",Lmain_returned_pmsg)
+ END(__start)
diff --git a/sys/arch/alpha/conf/Makefile.alpha b/sys/arch/alpha/conf/Makefile.alpha
index 468ee699105..fafd19cbf0e 100644
--- a/sys/arch/alpha/conf/Makefile.alpha
+++ b/sys/arch/alpha/conf/Makefile.alpha
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.alpha,v 1.97 2017/06/05 12:43:57 deraadt Exp $
+# $OpenBSD: Makefile.alpha,v 1.98 2017/06/05 17:49:06 deraadt Exp $
# For instructions on building kernels consult the config(8) and options(4)
# manual pages.
@@ -31,9 +31,13 @@ CMACHFLAGS= -mno-fp-regs -Wa,-mev56
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_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"
@@ -120,8 +125,15 @@ vers.o: ${SYSTEM_DEP} ${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 0x00 > 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
@@ -133,6 +145,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
# The install target can be redefined by putting a
@@ -142,7 +155,7 @@ install: install-kernel-${MACHINE_NAME}
.if !target(install-kernel-${MACHINE_NAME}})
install-kernel-${MACHINE_NAME}:
cmp -s bsd /bsd || ln -f /bsd /obsd
- cp bsd /nbsd
+ cp -p bsd /nbsd
mv /nbsd /bsd
.endif
diff --git a/sys/arch/alpha/conf/files.alpha b/sys/arch/alpha/conf/files.alpha
index 524be16ac72..b4edb201c66 100644
--- a/sys/arch/alpha/conf/files.alpha
+++ b/sys/arch/alpha/conf/files.alpha
@@ -1,4 +1,4 @@
-# $OpenBSD: files.alpha,v 1.103 2016/01/08 15:54:12 jcs Exp $
+# $OpenBSD: files.alpha,v 1.104 2017/06/05 17:49:06 deraadt Exp $
# $NetBSD: files.alpha,v 1.32 1996/11/25 04:03:21 cgd Exp $
#
# alpha-specific configuration info
@@ -297,6 +297,7 @@ file arch/alpha/alpha/ipifuncs.c multiprocessor
file arch/alpha/alpha/lock_machdep.c multiprocessor
file arch/alpha/alpha/machdep.c
file arch/alpha/alpha/mainbus.c
+file arch/alpha/alpha/locore.s
file arch/alpha/alpha/mem.c
file arch/alpha/alpha/pmap.c
file arch/alpha/alpha/process_machdep.c
diff --git a/sys/arch/alpha/include/param.h b/sys/arch/alpha/include/param.h
index 07f02070545..ee57f83f50c 100644
--- a/sys/arch/alpha/include/param.h
+++ b/sys/arch/alpha/include/param.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: param.h,v 1.40 2016/09/03 14:25:27 bluhm Exp $ */
+/* $OpenBSD: param.h,v 1.41 2017/06/05 17:49:06 deraadt Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -43,9 +43,11 @@
#define MACHINE_ARCH "alpha"
#define MID_MACHINE MID_ALPHA
+#ifndef _LOCORE
#ifdef _KERNEL
#include <machine/cpu.h>
#endif
+#endif
#define PAGE_SHIFT 13
#define PAGE_SIZE (1 << PAGE_SHIFT)