From 4ce0c8e4c89cf14955d2115c05fcc19139f56153 Mon Sep 17 00:00:00 2001 From: Phil Blundell Date: Mon, 10 Oct 2005 15:09:14 +0000 Subject: [PATCH] 2005-10-10 Philip Blundell * sysdeps/arm/Makefile, sysdeps/arm/machine-gmon.h, sysdeps/arm/_mcount.S: Revert previous bogus changes. --- ChangeLog.arm | 5 +++++ sysdeps/arm/Makefile | 3 --- sysdeps/arm/_mcount.S | 30 ------------------------- sysdeps/arm/machine-gmon.h | 45 ++++++++++++++++++++++++++++++++++++-- 4 files changed, 48 insertions(+), 35 deletions(-) delete mode 100644 sysdeps/arm/Makefile delete mode 100644 sysdeps/arm/_mcount.S diff --git a/ChangeLog.arm b/ChangeLog.arm index 16156899fde..edb7517a602 100644 --- a/ChangeLog.arm +++ b/ChangeLog.arm @@ -3,6 +3,11 @@ * sysdeps/arm/memset.S (memset): Correct handling of negative arguments. +2005-10-10 Philip Blundell + + * sysdeps/arm/Makefile, sysdeps/arm/machine-gmon.h, + sysdeps/arm/_mcount.S: Revert previous bogus changes. + 2005-10-10 Philip Blundell * sysdeps/arm/_mcount.S: Suppress profiling when building this diff --git a/sysdeps/arm/Makefile b/sysdeps/arm/Makefile deleted file mode 100644 index cf18dedc45e..00000000000 --- a/sysdeps/arm/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),gmon) -sysdep_routines += _mcount -endif diff --git a/sysdeps/arm/_mcount.S b/sysdeps/arm/_mcount.S deleted file mode 100644 index 795d9998689..00000000000 --- a/sysdeps/arm/_mcount.S +++ /dev/null @@ -1,30 +0,0 @@ -/* Profiling entry point. ARM version. - Copyright (C) 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#undef PROF - -#include - -ENTRY(_mcount) - stmfd sp!, {r0-r3, lr} - mov r0, lr - mov r1, ip - bl mcount_internal - ldmfd sp!, {r0-r3, pc} -END(_mcount) diff --git a/sysdeps/arm/machine-gmon.h b/sysdeps/arm/machine-gmon.h index 0af6b5ed45e..fa3f65237d0 100644 --- a/sysdeps/arm/machine-gmon.h +++ b/sysdeps/arm/machine-gmon.h @@ -20,7 +20,48 @@ /* GCC for the ARM cannot compile __builtin_return_address(N) for N != 0, so we must use an assembly stub. */ +#include +#ifndef NO_UNDERSCORES +/* The asm symbols for C functions are `_function'. + The canonical name for the counter function is `mcount', no _. */ +void _mcount (void) asm ("mcount"); +#else +/* The canonical name for the function is `_mcount' in both C and asm, + but some old asm code might assume it's `mcount'. */ +void _mcount (void); +weak_alias (_mcount, mcount) +#endif + +static void mcount_internal (u_long frompc, u_long selfpc) __attribute_used__; + #define _MCOUNT_DECL(frompc, selfpc) \ - void mcount_internal (u_long frompc, u_long selfpc) +static void mcount_internal (u_long frompc, u_long selfpc) + +/* This macro/func MUST save r0, r1 because the compiler inserts + blind calls to _mount(), ignoring the fact that _mcount may + clobber registers; therefore, _mcount may NOT clobber registers */ +/* if (this_fp!=0) { + r0 = this_fp + r1 = this_lr + r1 = [r1-4] which is caller's lr + if (r1!=0) + r1 = caller's lr + call mcount_internal(this_lr, caller's_lr) + } +*/ + +#define MCOUNT \ +void _mcount (void) \ +{ \ + __asm__("stmdb sp!, {r0, r1, r2, r3};" \ + "movs fp, fp;" \ + "moveq r1, #0;" \ + "ldrne r1, [fp, $-4];" \ + "ldrne r0, [fp, $-12];" \ + "movnes r0, r0;" \ + "ldrne r0, [r0, $-4];" \ + "movs r0, r0;" \ + "blne mcount_internal;" \ + "ldmia sp!, {r0, r1, r2, r3}"); \ +} -#define MCOUNT /* Nothing herel code in _mcount.S is used. */ -- 2.47.2