summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/aarch64/aarch64/start.S9
-rw-r--r--sys/arch/aarch64/aarch64/trap.c29
-rw-r--r--sys/arch/aarch64/conf/Makefile.aarch644
-rw-r--r--sys/arch/aarch64/include/frame.h4
-rw-r--r--sys/arch/evbarm/conf/mk.generic6418
-rw-r--r--sys/modules/cyclic/Makefile2
-rw-r--r--sys/modules/dtrace/Makefile5
7 files changed, 53 insertions, 18 deletions
diff --git a/sys/arch/aarch64/aarch64/start.S b/sys/arch/aarch64/aarch64/start.S
index 1299bcf826d..fec275d9393 100644
--- a/sys/arch/aarch64/aarch64/start.S
+++ b/sys/arch/aarch64/aarch64/start.S
@@ -1,4 +1,4 @@
-/* $NetBSD: start.S,v 1.2 2018/10/18 09:01:51 skrll Exp $ */
+/* $NetBSD: start.S,v 1.2.6.1 2019/12/09 15:19:31 martin Exp $ */
/*
* Copyright (c) 2017 Ryo Shimizu <ryo@nerv.org>
@@ -32,7 +32,7 @@
#include <aarch64/asm.h>
-RCSID("$NetBSD: start.S,v 1.2 2018/10/18 09:01:51 skrll Exp $")
+RCSID("$NetBSD: start.S,v 1.2.6.1 2019/12/09 15:19:31 martin Exp $")
/* load far effective address (pc relative) */
.macro ADDR, reg, addr
@@ -41,6 +41,11 @@ RCSID("$NetBSD: start.S,v 1.2 2018/10/18 09:01:51 skrll Exp $")
.endm
/*
+ * Padding at start of kernel image to make room for 64-byte header (non-ELF booting)
+ */
+.space 64, 0x0
+
+/*
* Kernel start routine for aarch64 boards.
*/
.global start
diff --git a/sys/arch/aarch64/aarch64/trap.c b/sys/arch/aarch64/aarch64/trap.c
index 1bc0a13a700..cd49e5e4b07 100644
--- a/sys/arch/aarch64/aarch64/trap.c
+++ b/sys/arch/aarch64/aarch64/trap.c
@@ -1,4 +1,4 @@
-/* $NetBSD: trap.c,v 1.17.4.1 2019/08/07 10:19:54 martin Exp $ */
+/* $NetBSD: trap.c,v 1.17.4.2 2019/12/09 15:19:31 martin Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -31,10 +31,11 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: trap.c,v 1.17.4.1 2019/08/07 10:19:54 martin Exp $");
+__KERNEL_RCSID(1, "$NetBSD: trap.c,v 1.17.4.2 2019/12/09 15:19:31 martin Exp $");
#include "opt_arm_intr_impl.h"
#include "opt_compat_netbsd32.h"
+#include "opt_dtrace.h"
#include <sys/param.h>
#include <sys/kauth.h>
@@ -73,11 +74,20 @@ __KERNEL_RCSID(1, "$NetBSD: trap.c,v 1.17.4.1 2019/08/07 10:19:54 martin Exp $")
#include <ddb/db_output.h>
#include <machine/db_machdep.h>
#endif
+#ifdef KDTRACE_HOOKS
+#include <sys/dtrace_bsd.h>
+#endif
#ifdef DDB
int sigill_debug = 0;
#endif
+#ifdef KDTRACE_HOOKS
+dtrace_doubletrap_func_t dtrace_doubletrap_func = NULL;
+dtrace_trap_func_t dtrace_trap_func = NULL;
+int (*dtrace_invop_jump_addr)(struct trapframe *);
+#endif
+
const char * const trap_names[] = {
[ESR_EC_UNKNOWN] = "Unknown Reason (Illegal Instruction)",
[ESR_EC_SERROR] = "SError Interrupt",
@@ -186,16 +196,29 @@ trap_el1h_sync(struct trapframe *tf)
else
daif_enable(DAIF_D|DAIF_A);
+#ifdef KDTRACE_HOOKS
+ if (dtrace_trap_func != NULL && (*dtrace_trap_func)(tf, eclass))
+ return;
+#endif
+
switch (eclass) {
case ESR_EC_INSN_ABT_EL1:
case ESR_EC_DATA_ABT_EL1:
data_abort_handler(tf, eclass);
break;
+ case ESR_EC_BKPT_INSN_A64:
+#ifdef KDTRACE_HOOKS
+ if (__SHIFTOUT(esr, ESR_ISS) == 0x40d &&
+ dtrace_invop_jump_addr != 0) {
+ (*dtrace_invop_jump_addr)(tf);
+ break;
+ }
+ /* FALLTHROUGH */
+#endif
case ESR_EC_BRKPNT_EL1:
case ESR_EC_SW_STEP_EL1:
case ESR_EC_WTCHPNT_EL1:
- case ESR_EC_BKPT_INSN_A64:
#ifdef DDB
if (eclass == ESR_EC_BRKPNT_EL1)
kdb_trap(DB_TRAP_BREAKPOINT, tf);
diff --git a/sys/arch/aarch64/conf/Makefile.aarch64 b/sys/arch/aarch64/conf/Makefile.aarch64
index 282f863c7ba..d19aab72a05 100644
--- a/sys/arch/aarch64/conf/Makefile.aarch64
+++ b/sys/arch/aarch64/conf/Makefile.aarch64
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile.aarch64,v 1.15 2019/03/03 07:04:40 maxv Exp $
+# $NetBSD: Makefile.aarch64,v 1.15.4.1 2019/12/09 15:19:31 martin Exp $
# Makefile for NetBSD
#
@@ -74,7 +74,7 @@ locore.o: ${ARM}/aarch64/locore.S assym.h
## (5) link settings
##
KERNLDSCRIPT?= ${ARM}/conf/kern.ldscript
-LOADADDRESS?= 0xffffffc000000040
+LOADADDRESS?= 0xffffffc000000000
LINKFLAGS_NORMAL= -X
# Strip AArch64 mapping symbols from the kernel image, as they interfere
diff --git a/sys/arch/aarch64/include/frame.h b/sys/arch/aarch64/include/frame.h
index c01b82e148e..717479d36b1 100644
--- a/sys/arch/aarch64/include/frame.h
+++ b/sys/arch/aarch64/include/frame.h
@@ -1,4 +1,4 @@
-/* $NetBSD: frame.h,v 1.2 2018/04/01 04:35:03 ryo Exp $ */
+/* $NetBSD: frame.h,v 1.2.6.1 2019/12/09 15:19:31 martin Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -72,6 +72,8 @@ struct faultbuf {
register_t fb_reg[FB_MAX];
};
+#define lwp_trapframe(l) ((l)->l_md.md_utf)
+
#elif defined(__arm__)
#include <arm/frame.h>
diff --git a/sys/arch/evbarm/conf/mk.generic64 b/sys/arch/evbarm/conf/mk.generic64
index a6af068cc09..80fcfe16fc1 100644
--- a/sys/arch/evbarm/conf/mk.generic64
+++ b/sys/arch/evbarm/conf/mk.generic64
@@ -1,4 +1,4 @@
-# $NetBSD: mk.generic64,v 1.3 2018/09/29 17:05:55 jmcneill Exp $
+# $NetBSD: mk.generic64,v 1.3.4.1 2019/12/09 15:19:31 martin Exp $
SYSTEM_FIRST_OBJ= start.o
SYSTEM_FIRST_SFILE= ${ARM}/aarch64/start.S
@@ -7,15 +7,15 @@ _OSRELEASE!= ${HOST_SH} $S/conf/osrelease.sh
BOARDTYPE= evbarm64
-MKUBOOTIMAGEARGS= -f arm64 -a 0x200000
+MKUBOOTIMAGEARGS= -f arm64 -u -a 0x200000
MKKNLIMG= ${THISARM}/compile/rpi-mkknlimg.sh
-SYSTEM_LD_TAIL_EXTRA+=; \
- echo ${OBJCOPY} -S -O binary $@ $@.bin; \
- ${OBJCOPY} -S -O binary $@ $@.bin; \
- echo ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS} $@.bin $@.ub; \
- ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS} $@.bin $@.ub; \
- echo ${MKKNLIMG} $@.ub $@.img; \
- ${HOST_SH} ${MKKNLIMG} $@.ub $@.img;
+SYSTEM_LD_TAIL_EXTRA+= && \
+ echo ${OBJCOPY} -S -O binary $@ $@.bin && \
+ ${OBJCOPY} -S -O binary $@ $@.bin && \
+ echo ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS} $@.bin $@.ub && \
+ ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS} $@.bin $@.ub && \
+ echo ${MKKNLIMG} $@.ub $@.img && \
+ ${HOST_SH} ${MKKNLIMG} $@.ub $@.img
EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.img@}
diff --git a/sys/modules/cyclic/Makefile b/sys/modules/cyclic/Makefile
index cc1222c8add..58f8e0deead 100644
--- a/sys/modules/cyclic/Makefile
+++ b/sys/modules/cyclic/Makefile
@@ -8,6 +8,8 @@ OSNETDIR=${NETBSDSRCDIR}/external/cddl/osnet
.if exists(${OSNETDIR}/dev/cyclic/${MACHINE:S/amd64/i386/})
ARCH=${MACHINE:S/amd64/i386/}
+.elif exists(${OSNETDIR}/dev/cyclic/${MACHINE_CPU:S/aarch64/arm/})
+ARCH=${MACHINE_CPU:S/aarch64/arm/}
.elif exists(${OSNETDIR}/dev/cyclic/${MACHINE_CPU})
ARCH=${MACHINE_CPU}
.else
diff --git a/sys/modules/dtrace/Makefile b/sys/modules/dtrace/Makefile
index b26c6317937..a92117334cb 100644
--- a/sys/modules/dtrace/Makefile
+++ b/sys/modules/dtrace/Makefile
@@ -1,10 +1,13 @@
-# $NetBSD: Makefile,v 1.6 2015/03/08 17:11:57 christos Exp $
+# $NetBSD: Makefile,v 1.6.22.1 2019/12/09 15:19:31 martin Exp $
# $FreeBSD: src/sys/modules/dtrace/Makefile,v 1.6.2.1 2009/08/03 08:13:06 kensmith Exp $
.include <bsd.own.mk>
SUBDIR= dtrace sdt fbt lockstat profile syscall
+
+.if ${MACHINE_ARCH} != "aarch64"
SUBDIR+= linux_syscall
+.endif
.if ${MACHINE_ARCH} == "x86_64"
SUBDIR+= netbsd32_syscall