summaryrefslogtreecommitdiff
path: root/sysdeps/powerpc/powerpc64/sysdep.h
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2016-08-20 19:50:59 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2016-08-20 19:50:59 +0200
commitd014708ad0bc9f5b20f6b552b6e3222ef10cb0ac (patch)
treec98a3d8c694aa7b7bae665b9b9310abf701c0477 /sysdeps/powerpc/powerpc64/sysdep.h
parent6e5da01333fd28f66e3b24002c0802b341f69ced (diff)
parentf76453c31593957fec1a99b986bfa5506618b79c (diff)
Merge commit 'refs/top-bases/t/bits_atomic.h_multiple_threads' into t/bits_atomic.h_multiple_threads
Diffstat (limited to 'sysdeps/powerpc/powerpc64/sysdep.h')
-rw-r--r--sysdeps/powerpc/powerpc64/sysdep.h56
1 files changed, 25 insertions, 31 deletions
diff --git a/sysdeps/powerpc/powerpc64/sysdep.h b/sysdeps/powerpc/powerpc64/sysdep.h
index b28fb9d8aa..bf2a884b99 100644
--- a/sysdeps/powerpc/powerpc64/sysdep.h
+++ b/sysdeps/powerpc/powerpc64/sysdep.h
@@ -1,5 +1,5 @@
/* Assembly macros for 64-bit PowerPC.
- Copyright (C) 2002-2014 Free Software Foundation, Inc.
+ Copyright (C) 2002-2015 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -140,25 +140,14 @@
name##: OPD_ENT (name); \
.previous;
-#ifdef HAVE_ASM_GLOBAL_DOT_NAME
-# define DOT_LABEL(X) .##X
-# define BODY_LABEL(X) .##X
-# define ENTRY_2(name) \
- .globl BODY_LABEL(name); \
- ENTRY_1(name) \
- .size name, 24;
-# define END_2(name) \
- .size BODY_LABEL(name),.-BODY_LABEL(name);
-#else
-# define DOT_LABEL(X) X
-# define BODY_LABEL(X) .LY##X
-# define ENTRY_2(name) \
+#define DOT_LABEL(X) X
+#define BODY_LABEL(X) .LY##X
+#define ENTRY_2(name) \
.type name,@function; \
ENTRY_1(name)
-# define END_2(name) \
+#define END_2(name) \
.size name,.-BODY_LABEL(name); \
.size BODY_LABEL(name),.-BODY_LABEL(name);
-#endif
#define LOCALENTRY(name)
#else /* _CALL_ELF */
@@ -283,7 +272,23 @@ LT_LABELSUFFIX(name,_name_end): ; \
TRACEBACK_MASK(name,mask) \
END_2(name)
+#if !IS_IN(rtld) && defined (ENABLE_LOCK_ELISION)
+# define ABORT_TRANSACTION \
+ cmpdi 13,0; \
+ beq 1f; \
+ lwz 0,TM_CAPABLE(13); \
+ cmpwi 0,0; \
+ beq 1f; \
+ li 0,_ABORT_SYSCALL; \
+ tabort. 0; \
+ .align 4; \
+1:
+#else
+# define ABORT_TRANSACTION
+#endif
+
#define DO_CALL(syscall) \
+ ABORT_TRANSACTION \
li 0,syscall; \
sc
@@ -387,25 +392,14 @@ LT_LABELSUFFIX(name,_name_end): ; \
OPD_ENT (name) "\n" \
".popsection;"
-#ifdef HAVE_ASM_GLOBAL_DOT_NAME
-# define DOT_PREFIX "."
-# define BODY_PREFIX "."
-# define ENTRY_2(name) \
- ".globl " BODY_PREFIX #name ";\n" \
- ENTRY_1(name) "\n" \
- ".size " #name ", 24;"
-# define END_2(name) \
- ".size " BODY_PREFIX #name ",.-" BODY_PREFIX #name ";"
-#else
-# define DOT_PREFIX ""
-# define BODY_PREFIX ".LY"
-# define ENTRY_2(name) \
+#define DOT_PREFIX ""
+#define BODY_PREFIX ".LY"
+#define ENTRY_2(name) \
".type " #name ",@function;\n" \
ENTRY_1(name)
-# define END_2(name) \
+#define END_2(name) \
".size " #name ",.-" BODY_PREFIX #name ";\n" \
".size " BODY_PREFIX #name ",.-" BODY_PREFIX #name ";"
-#endif
#define LOCALENTRY(name)
#else /* _CALL_ELF */