diff options
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/arch/aarch64/aarch64/start.S | 9 | ||||
| -rw-r--r-- | sys/arch/aarch64/aarch64/trap.c | 29 | ||||
| -rw-r--r-- | sys/arch/aarch64/conf/Makefile.aarch64 | 4 | ||||
| -rw-r--r-- | sys/arch/aarch64/include/frame.h | 4 | ||||
| -rw-r--r-- | sys/arch/evbarm/conf/mk.generic64 | 18 | ||||
| -rw-r--r-- | sys/modules/cyclic/Makefile | 2 | ||||
| -rw-r--r-- | sys/modules/dtrace/Makefile | 5 |
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 |
