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)); \