Module Name:    src
Committed By:   christos
Date:           Thu Jun  8 18:25:14 UTC 2017

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

Log Message:
use compiler builtins to compute addresses instead %ebp assembly arithmetic.
(from joerg)


To generate a diff of this commit:
cvs rdiff -u -r1.36 -r1.37 src/sys/arch/i386/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/i386/include/profile.h
diff -u src/sys/arch/i386/include/profile.h:1.36 src/sys/arch/i386/include/profile.h:1.37
--- src/sys/arch/i386/include/profile.h:1.36	Sun Jun  4 12:35:59 2017
+++ src/sys/arch/i386/include/profile.h	Thu Jun  8 14:25:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: profile.h,v 1.36 2017/06/04 16:35:59 christos Exp $	*/
+/*	$NetBSD: profile.h,v 1.37 2017/06/08 18:25:14 christos Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -54,8 +54,7 @@
 #define	MCOUNT \
 MCOUNT_COMPAT								\
 extern void mcount(void) __asm(MCOUNT_ENTRY)				\
-	__attribute__((__no_instrument_function__))			\
-	__attribute__((__optimize__("-fno-omit-frame-pointer")));	\
+	__attribute__((__no_instrument_function__));			\
 void									\
 mcount(void)								\
 {									\
@@ -72,12 +71,11 @@ mcount(void)								\
 	 *								\
 	 * selfpc = pc pushed by mcount call				\
 	 */								\
-	__asm volatile("movl 4(%%ebp),%0" : "=r" (selfpc));		\
+	selfpc = (int)__builtin_return_address(0);			\
 	/*								\
-	 * frompcindex = pc pushed by call into self.			\
+	 * frompcindex = stack frame of caller, assuming frame pointer	\
 	 */								\
-	__asm volatile("movl (%%ebp),%0" : "=r" (frompcindex));		\
-	frompcindex = ((int *)frompcindex)[1];				\
+	frompcindex = ((int *)__builtin_frame_address(1))[1];		\
 	_mcount((u_long)frompcindex, (u_long)selfpc);			\
 									\
 	__asm volatile("movl %0,%%edx" : : "g" (edx));			\

Reply via email to