Module Name:    src
Committed By:   ryo
Date:           Wed Feb 10 12:31:34 UTC 2021

Modified Files:
        src/sys/arch/aarch64/include: profile.h

Log Message:
Oh...the name of the mcount call was different between gcc and llvm.
gcc calls it as "_mconut", llvm calls as "__mcount".

Change the main name of mcount to "mcount()", and created "_mcount" and 
"__mcount" entries
to work regardless of which compiler the object was created with.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 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/include/profile.h
diff -u src/sys/arch/aarch64/include/profile.h:1.3 src/sys/arch/aarch64/include/profile.h:1.4
--- src/sys/arch/aarch64/include/profile.h:1.3	Wed Feb 10 08:25:01 2021
+++ src/sys/arch/aarch64/include/profile.h	Wed Feb 10 12:31:34 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: profile.h,v 1.3 2021/02/10 08:25:01 ryo Exp $ */
+/* $NetBSD: profile.h,v 1.4 2021/02/10 12:31:34 ryo Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #ifdef __aarch64__
 
-#define	_MCOUNT_DECL void _mcount
+#define	_MCOUNT_DECL void mcount
 
 /*
  * Cannot implement mcount in C as GCC will trash the ip register when it
@@ -39,7 +39,8 @@
  * prologue.
  */
 
-#define MCOUNT_ASM_NAME "__mcount"
+#define MCOUNT_ASM_NAME "_mcount"		/* gcc */
+#define MCOUNT_ASM_NAME_ALIAS "__mcount"	/* llvm */
 #define	PLTSYM
 
 #define	MCOUNT								\
@@ -47,7 +48,9 @@
 	__asm(".align	6");						\
 	__asm(".type	" MCOUNT_ASM_NAME ",@function");		\
 	__asm(".global	" MCOUNT_ASM_NAME);				\
+	__asm(".global	" MCOUNT_ASM_NAME_ALIAS);			\
 	__asm(MCOUNT_ASM_NAME ":");					\
+	__asm(MCOUNT_ASM_NAME_ALIAS ":");				\
 	/*								\
 	 * Preserve registers that are trashed during mcount		\
 	 */								\
@@ -70,7 +73,7 @@
 	/*								\
 	 * Call the real mcount code					\
 	 */								\
-	__asm("bl	" ___STRING(_C_LABEL(_mcount)));		\
+	__asm("bl	" ___STRING(_C_LABEL(mcount)));			\
 	/*								\
 	 * Restore registers that were trashed during mcount		\
 	 */								\

Reply via email to