summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2011-03-21 17:53:45 +0000
committerjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2011-03-21 17:53:45 +0000
commitc152a033a0262447e5cf0550a256c82a1d9907ff (patch)
tree55fee84ec90333c4b693cc18a625c53e52fed896
parent63e3507e5ed6ddfed40b15e49b96d4553ea6bd58 (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.arm7
-rw-r--r--ports/sysdeps/arm/sysdep.h16
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