Module Name: src Committed By: ryo Date: Wed Feb 10 08:25:01 UTC 2021
Modified Files: src/sys/arch/aarch64/conf: Makefile.aarch64 kern.ldscript src/sys/arch/aarch64/include: profile.h Log Message: add support kernel profiling on aarch64 - add MCOUNT_ENTER, MCOUNT_EXIT macro - __mcount() function should be aligned - add "-fno-optimize-sibling-calls" option when PROF. for accurate profiling, it is better to suppress the tail call. To generate a diff of this commit: cvs rdiff -u -r1.21 -r1.22 src/sys/arch/aarch64/conf/Makefile.aarch64 cvs rdiff -u -r1.11 -r1.12 src/sys/arch/aarch64/conf/kern.ldscript cvs rdiff -u -r1.2 -r1.3 src/sys/arch/aarch64/include/profile.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/aarch64/conf/Makefile.aarch64 diff -u src/sys/arch/aarch64/conf/Makefile.aarch64:1.21 src/sys/arch/aarch64/conf/Makefile.aarch64:1.22 --- src/sys/arch/aarch64/conf/Makefile.aarch64:1.21 Mon May 11 03:00:57 2020 +++ src/sys/arch/aarch64/conf/Makefile.aarch64 Wed Feb 10 08:25:01 2021 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.aarch64,v 1.21 2020/05/11 03:00:57 ryo Exp $ +# $NetBSD: Makefile.aarch64,v 1.22 2021/02/10 08:25:01 ryo Exp $ # Makefile for NetBSD # @@ -39,6 +39,11 @@ CFLAGS+= -fno-omit-frame-pointer CFLAGS+= -mno-omit-leaf-frame-pointer #CFLAGS+= -mno-unaligned-access +.if defined(PROF) && ${HAVE_GCC:U0} > 0 +# For accurate profiling, it is better to suppress the tail call. +CFLAGS+= -fno-optimize-sibling-calls +.endif + .if ${HAVE_LLVM:Uno} == "yes" .if ${ARMV83_PAC:U0} > 0 && ${ARMV85_BTI:U0} > 0 CFLAGS+= -mbranch-protection=pac-ret+bti Index: src/sys/arch/aarch64/conf/kern.ldscript diff -u src/sys/arch/aarch64/conf/kern.ldscript:1.11 src/sys/arch/aarch64/conf/kern.ldscript:1.12 --- src/sys/arch/aarch64/conf/kern.ldscript:1.11 Thu Nov 1 20:34:49 2018 +++ src/sys/arch/aarch64/conf/kern.ldscript Wed Feb 10 08:25:01 2021 @@ -11,6 +11,7 @@ SECTIONS .text : { PROVIDE(__kernel_text = .); + PROVIDE(kernel_text = .); *(.text) *(.text.*) *(.stub) Index: src/sys/arch/aarch64/include/profile.h diff -u src/sys/arch/aarch64/include/profile.h:1.2 src/sys/arch/aarch64/include/profile.h:1.3 --- src/sys/arch/aarch64/include/profile.h:1.2 Thu Apr 23 23:22:41 2020 +++ src/sys/arch/aarch64/include/profile.h Wed Feb 10 08:25:01 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: profile.h,v 1.2 2020/04/23 23:22:41 jakllsch Exp $ */ +/* $NetBSD: profile.h,v 1.3 2021/02/10 08:25:01 ryo Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -44,7 +44,7 @@ #define MCOUNT \ __asm(".text"); \ - __asm(".align 0"); \ + __asm(".align 6"); \ __asm(".type " MCOUNT_ASM_NAME ",@function"); \ __asm(".global " MCOUNT_ASM_NAME); \ __asm(MCOUNT_ASM_NAME ":"); \ @@ -82,6 +82,13 @@ __asm("ret"); \ __asm(".size " MCOUNT_ASM_NAME ", .-" MCOUNT_ASM_NAME); +#ifdef _KERNEL +#define MCOUNT_ENTER \ + __asm __volatile ("mrs %x0, daif; msr daifset, #3": "=r"(s):: "memory") +#define MCOUNT_EXIT \ + __asm __volatile ("msr daif, %x0":: "r"(s): "memory") +#endif /* _KERNEL */ + #elif defined(__arm__) #include <arm/profile.h>