Fix profiling libc for ARM EABI to use __gnu_mcount_nc interface when available.

This commit is contained in:
Manjunath Matti 2011-02-16 17:30:13 +00:00 committed by Joseph Myers
parent 75bbd65833
commit 94fd527b67
2 changed files with 23 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2011-02-16 Manjunath Matti <manjunath81@gmail.com>
* 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 <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/arm/bits/mman.h (MADV_HUGEPAGE,

View File

@ -18,6 +18,7 @@
02111-1307 USA. */
#include <sysdeps/generic/sysdep.h>
#include <features.h>
#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