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