From c152a033a0262447e5cf0550a256c82a1d9907ff Mon Sep 17 00:00:00 2001 From: joseph Date: Mon, 21 Mar 2011 17:53:45 +0000 Subject: Merge changes between r12754 and r13229 from /fsf/glibc-2_12-branch. git-svn-id: svn://svn.eglibc.org/branches/eglibc-2_12@13230 7b3dc134-2b1b-0410-93df-9e9f96275f8d --- ports/ChangeLog.arm | 7 +++++++ ports/sysdeps/arm/sysdep.h | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm index 29d3fe98d..958c77505 100644 --- a/ports/ChangeLog.arm +++ b/ports/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. + 2010-05-21 Joseph Myers * sysdeps/unix/sysv/linux/arm/eabi/internal_recvmmsg.S: New. diff --git a/ports/sysdeps/arm/sysdep.h b/ports/sysdeps/arm/sysdep.h index 9ffd7df2b..5c01ef0e2 100644 --- a/ports/sysdeps/arm/sysdep.h +++ b/ports/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 -- cgit v1.2.3