Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 Mar 2010 20:58:09 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r205392 - in projects/ppc64: contrib/gcc/config/rs6000 sys/powerpc/include
Message-ID:  <201003202058.o2KKw9K0086150@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: nwhitehorn
Date: Sat Mar 20 20:58:08 2010
New Revision: 205392
URL: http://svn.freebsd.org/changeset/base/205392

Log:
  Support profiling on powerpc64. The only remaining thing on the todo
  list is DMA bounce buffers.

Modified:
  projects/ppc64/contrib/gcc/config/rs6000/freebsd.h
  projects/ppc64/sys/powerpc/include/profile.h

Modified: projects/ppc64/contrib/gcc/config/rs6000/freebsd.h
==============================================================================
--- projects/ppc64/contrib/gcc/config/rs6000/freebsd.h	Sat Mar 20 19:47:30 2010	(r205391)
+++ projects/ppc64/contrib/gcc/config/rs6000/freebsd.h	Sat Mar 20 20:58:08 2010	(r205392)
@@ -237,3 +237,9 @@
    are compatible. */
 #define OS_MISSING_POWERPC64 !TARGET_64BIT
 
+/* Function profiling bits */
+#undef  RS6000_MCOUNT
+#define RS6000_MCOUNT ((TARGET_64BIT) ? "._mcount" : "_mcount")
+#define PROFILE_HOOK(LABEL) \
+  do { if (TARGET_64BIT) output_profile_hook (LABEL); } while (0)
+

Modified: projects/ppc64/sys/powerpc/include/profile.h
==============================================================================
--- projects/ppc64/sys/powerpc/include/profile.h	Sat Mar 20 19:47:30 2010	(r205391)
+++ projects/ppc64/sys/powerpc/include/profile.h	Sat Mar 20 20:58:08 2010	(r205392)
@@ -76,10 +76,47 @@ typedef __ptrdiff_t	fptrdiff_t;
  */
 
 #ifdef __powerpc64__
-/* XXX not implemented */
-
-#define MCOUNT int _mcount(void) {return (0);}
-
+#define	MCOUNT					\
+__asm(	"	.text				\n" \
+	"	.align	2			\n" \
+	"	.globl	_mcount			\n" \
+	"	.section \".opd\",\"aw\"	\n" \
+	"	.align	3			\n" \
+	"_mcount:				\n" \
+	"	.quad ._mcount,.TOC.@tocbase,0	\n" \
+	"	.previous			\n" \
+	"	.align	4			\n" \
+	"	.globl	._mcount		\n" \
+	"	.type	._mcount,@function	\n" \
+	"._mcount:				\n" \
+	"	stdu	%r1,-(288+120)(%r1)	\n" \
+	"	std	%r3,48(%r1)		\n" \
+	"	std	%r4,56(%r1)		\n" \
+	"	std	%r5,64(%r1)		\n" \
+	"	std	%r6,72(%r1)		\n" \
+	"	std	%r7,80(%r1)		\n" \
+	"	std	%r8,88(%r1)		\n" \
+	"	std	%r9,96(%r1)		\n" \
+	"	std	%r10,104(%r1)		\n" \
+	"	mflr	%r4			\n" \
+	"	std	%r4,112(%r1)		\n" \
+	"	ld	%r3,0(%r1)		\n" \
+	"	ld	%r3,0(%r3)		\n" \
+	"	ld	%r3,16(%r3)		\n" \
+	"	bl	.__mcount		\n" \
+	"	nop				\n" \
+	"	ld	%r4,112(%r1)		\n" \
+	"	mtlr	%r4			\n" \
+	"	ld	%r3,48(%r1)		\n" \
+	"	ld	%r4,56(%r1)		\n" \
+	"	ld	%r5,64(%r1)		\n" \
+	"	ld	%r6,72(%r1)		\n" \
+	"	ld	%r7,80(%r1)		\n" \
+	"	ld	%r8,88(%r1)		\n" \
+	"	ld	%r9,96(%r1)		\n" \
+	"	ld	%r10,104(%r1)		\n" \
+	"	addi	%r1,%r1,(288+120)	\n" \
+	"	blr				\n");
 #else
 
 #ifdef PIC



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201003202058.o2KKw9K0086150>