From: Manjunath Matti Date: Wed, 16 Feb 2011 17:30:13 +0000 (+0000) Subject: Fix profiling libc for ARM EABI to use __gnu_mcount_nc interface when available. X-Git-Tag: glibc-2.16-ports-merge^2~422 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=94fd527b67373373ebf6364d8b42c1d9fac1ea1c;p=platform%2Fupstream%2Fglibc.git Fix profiling libc for ARM EABI to use __gnu_mcount_nc interface when available. --- diff --git a/ChangeLog.arm b/ChangeLog.arm index 8ea3b9e..5e59f09 100644 --- a/ChangeLog.arm +++ b/ChangeLog.arm @@ -1,3 +1,10 @@ +2011-02-16 Manjunath Matti + + * sysdeps/arm/sysdep.h (CALL_MCOUNT): Use __gnu_mcount_nc + interface for EABI with GCC 4.4 or later. + (mcount): Define to __gnu_mcount_nc for EABI with GCC 4.4 or + later. + 2011-01-25 Joseph Myers * sysdeps/unix/sysv/linux/arm/bits/mman.h (MADV_HUGEPAGE, diff --git a/sysdeps/arm/sysdep.h b/sysdeps/arm/sysdep.h index 9ffd7df..5c01ef0 100644 --- a/sysdeps/arm/sysdep.h +++ b/sysdeps/arm/sysdep.h @@ -18,6 +18,7 @@ 02111-1307 USA. */ #include +#include #if (!defined (__ARM_ARCH_2__) && !defined (__ARM_ARCH_3__) \ && !defined (__ARM_ARCH_3M__) && !defined (__ARM_ARCH_4__)) @@ -92,6 +93,16 @@ /* If compiled for profiling, call `mcount' at the start of each function. */ #ifdef PROF +/* Call __gnu_mcount_nc if GCC >= 4.4 and abi = EABI. */ +#if __GNUC_PREREQ(4,4) && defined(__ARM_EABI__) +#define CALL_MCOUNT \ + str lr,[sp, #-4]!; \ + cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (lr, 0); \ + bl PLTJMP(mcount); \ + cfi_adjust_cfa_offset (-4); \ + cfi_restore (lr) +#else /* else call _mcount */ #define CALL_MCOUNT \ str lr,[sp, #-4]!; \ cfi_adjust_cfa_offset (4); \ @@ -100,6 +111,7 @@ ldr lr, [sp], #4; \ cfi_adjust_cfa_offset (-4); \ cfi_restore (lr) +#endif #else #define CALL_MCOUNT /* Do nothing. */ #endif @@ -109,8 +121,12 @@ on this system, the asm identifier `syscall_error' intrudes on the C name space. Make sure we use an innocuous name. */ #define syscall_error __syscall_error +#if __GNUC_PREREQ(4,4) && defined(__ARM_EABI__) +#define mcount __gnu_mcount_nc +#else #define mcount _mcount #endif +#endif #if defined(__ARM_EABI__) /* Tag_ABI_align8_preserved: This code preserves 8-byte