From 5f7c48c17f99274f06fd77d90a5b653a5fa2596a Mon Sep 17 00:00:00 2001 From: Phil Blundell Date: Sun, 9 Oct 2005 18:29:25 +0000 Subject: [PATCH] 2005-10-09 Phil Blundell * sysdeps/arm/Makefile [subdir=gmon] (sysdep_routines): Add _mcount. * sysdeps/arm/machine-gmon.h (MCOUNT): Replace with empty definition. (_MCOUNT_DECL): Make linkage global. * sysdeps/arm/_mcount.S: New file. --- ChangeLog.arm | 9 +++++++++ sysdeps/arm/Makefile | 3 +++ sysdeps/arm/_mcount.S | 28 ++++++++++++++++++++++++++++ sysdeps/arm/machine-gmon.h | 45 ++------------------------------------------- 4 files changed, 42 insertions(+), 43 deletions(-) create mode 100644 sysdeps/arm/Makefile create mode 100644 sysdeps/arm/_mcount.S diff --git a/ChangeLog.arm b/ChangeLog.arm index a4e547c..1cc4925 100644 --- a/ChangeLog.arm +++ b/ChangeLog.arm @@ -1,5 +1,14 @@ 2005-10-09 Phil Blundell + * sysdeps/arm/Makefile [subdir=gmon] (sysdep_routines): Add + _mcount. + * sysdeps/arm/machine-gmon.h (MCOUNT): Replace with empty + definition. + (_MCOUNT_DECL): Make linkage global. + * sysdeps/arm/_mcount.S: New file. + +2005-10-09 Phil Blundell + * sysdeps/arm/dl-trampoline.S: [PROF] (_dl_runtime_profile): Don't compile. Correct cut'n'paste error with .size. diff --git a/sysdeps/arm/Makefile b/sysdeps/arm/Makefile new file mode 100644 index 0000000..cf18ded --- /dev/null +++ b/sysdeps/arm/Makefile @@ -0,0 +1,3 @@ +ifeq ($(subdir),gmon) +sysdep_routines += _mcount +endif diff --git a/sysdeps/arm/_mcount.S b/sysdeps/arm/_mcount.S new file mode 100644 index 0000000..471af5c --- /dev/null +++ b/sysdeps/arm/_mcount.S @@ -0,0 +1,28 @@ +/* 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. */ + +#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 fa3f652..0af6b5e 100644 --- a/sysdeps/arm/machine-gmon.h +++ b/sysdeps/arm/machine-gmon.h @@ -20,48 +20,7 @@ /* 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) \ -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}"); \ -} + void mcount_internal (u_long frompc, u_long selfpc) +#define MCOUNT /* Nothing herel code in _mcount.S is used. */ -- 2.7.4