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>

Reply via email to