diff options
author | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2011-03-21 17:53:45 +0000 |
---|---|---|
committer | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2011-03-21 17:53:45 +0000 |
commit | c152a033a0262447e5cf0550a256c82a1d9907ff (patch) | |
tree | 55fee84ec90333c4b693cc18a625c53e52fed896 | |
parent | 63e3507e5ed6ddfed40b15e49b96d4553ea6bd58 (diff) |
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
-rw-r--r-- | ports/ChangeLog.arm | 7 | ||||
-rw-r--r-- | ports/sysdeps/arm/sysdep.h | 16 |
2 files changed, 23 insertions, 0 deletions
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 <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. + 2010-05-21 Joseph Myers <joseph@codesourcery.com> * 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 <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 |