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>