about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h167
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h209
3 files changed, 53 insertions, 336 deletions
diff --git a/ChangeLog b/ChangeLog
index 404ef7af2b..f6d309fbee 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2014-03-27  Andi Kleen  <ak@linux.intel.com>
+
+	* nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h (lll_lock,
+	lll_robust_lock, lll_cond_lock, lll_timedlock, lll_robust_cond_lock,
+	lll_robust_timedlock, lll_unlock, lll_robust_unlock):
+	Remove out of line section. Use cfi intrinsics.
+	(LLL_STUB_UNWIND_INFO*): Remove.
+	* nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h (lll_lock,
+	lll_robust_lock, lll_cond_lock, lll_timedlock, lll_robust_cond_lock,
+	lll_robust_timedlock, lll_unlock, lll_robust_unlock):
+	Remove out of line section. Use cfi intrinsics.
+	(LLL_STUB_UNWIND_INFO*): Remove.
+
 2014-03-27  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
 	[BZ #16758]
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
index 44ef4190b5..6903f92bd0 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
+++ b/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
@@ -126,83 +126,6 @@
 /* Delay in spinlock loop.  */
 #define BUSY_WAIT_NOP	asm ("rep; nop")
 
-
-#define LLL_STUB_UNWIND_INFO_START \
-	".section	.eh_frame,\"a\",@progbits\n"		\
-"5:\t"	".long	7f-6f	# Length of Common Information Entry\n"	\
-"6:\t"	".long	0x0	# CIE Identifier Tag\n\t"		\
-	".byte	0x1	# CIE Version\n\t"			\
-	".ascii \"zR\\0\"	# CIE Augmentation\n\t"		\
-	".uleb128 0x1	# CIE Code Alignment Factor\n\t"	\
-	".sleb128 -4	# CIE Data Alignment Factor\n\t"	\
-	".byte	0x8	# CIE RA Column\n\t"			\
-	".uleb128 0x1	# Augmentation size\n\t"		\
-	".byte	0x1b	# FDE Encoding (pcrel sdata4)\n\t"	\
-	".byte	0xc	# DW_CFA_def_cfa\n\t"			\
-	".uleb128 0x4\n\t"					\
-	".uleb128 0x0\n\t"					\
-	".align 4\n"						\
-"7:\t"	".long	17f-8f	# FDE Length\n"				\
-"8:\t"	".long	8b-5b	# FDE CIE offset\n\t"			\
-	".long	1b-.	# FDE initial location\n\t"		\
-	".long	4b-1b	# FDE address range\n\t"		\
-	".uleb128 0x0	# Augmentation size\n\t"		\
-	".byte	0x16	# DW_CFA_val_expression\n\t"		\
-	".uleb128 0x8\n\t"					\
-	".uleb128 10f-9f\n"					\
-"9:\t"	".byte	0x78	# DW_OP_breg8\n\t"			\
-	".sleb128 3b-1b\n"
-#define LLL_STUB_UNWIND_INFO_END \
-	".byte	0x16	# DW_CFA_val_expression\n\t"		\
-	".uleb128 0x8\n\t"					\
-	".uleb128 12f-11f\n"					\
-"11:\t"	".byte	0x78	# DW_OP_breg8\n\t"			\
-	".sleb128 3b-2b\n"					\
-"12:\t"	".byte	0x40 + (3b-2b-1) # DW_CFA_advance_loc\n\t"	\
-	".byte	0x16	# DW_CFA_val_expression\n\t"		\
-	".uleb128 0x8\n\t"					\
-	".uleb128 16f-13f\n"					\
-"13:\t"	".byte	0x78	# DW_OP_breg8\n\t"			\
-	".sleb128 15f-14f\n\t"					\
-	".byte	0x0d	# DW_OP_const4s\n"			\
-"14:\t"	".4byte	3b-.\n\t"					\
-	".byte	0x1c	# DW_OP_minus\n\t"			\
-	".byte	0x0d	# DW_OP_const4s\n"			\
-"15:\t"	".4byte	18f-.\n\t"					\
-	".byte	0x22	# DW_OP_plus\n"				\
-"16:\t"	".align 4\n"						\
-"17:\t"	".previous\n"
-
-/* Unwind info for
-   1: lea ..., ...
-   2: call ...
-   3: jmp 18f
-   4:
-   snippet.  */
-#define LLL_STUB_UNWIND_INFO_3 \
-LLL_STUB_UNWIND_INFO_START					\
-"10:\t"	".byte	0x40 + (2b-1b) # DW_CFA_advance_loc\n\t"	\
-LLL_STUB_UNWIND_INFO_END
-
-/* Unwind info for
-   1: lea ..., ...
-   0: movl ..., ...
-   2: call ...
-   3: jmp 18f
-   4:
-   snippet.  */
-#define LLL_STUB_UNWIND_INFO_4 \
-LLL_STUB_UNWIND_INFO_START					\
-"10:\t"	".byte	0x40 + (0b-1b) # DW_CFA_advance_loc\n\t"	\
-	".byte	0x16	# DW_CFA_val_expression\n\t"		\
-	".uleb128 0x8\n\t"					\
-	".uleb128 20f-19f\n"					\
-"19:\t"	".byte	0x78	# DW_OP_breg8\n\t"			\
-	".sleb128 3b-0b\n"					\
-"20:\t"	".byte	0x40 + (2b-0b) # DW_CFA_advance_loc\n\t"	\
-LLL_STUB_UNWIND_INFO_END
-
-
 #define lll_futex_wait(futex, val, private) \
   lll_futex_timed_wait (futex, val, NULL, private)
 
@@ -298,16 +221,9 @@ LLL_STUB_UNWIND_INFO_END
     ({ int ignore1, ignore2;						      \
        if (__builtin_constant_p (private) && (private) == LLL_PRIVATE)	      \
 	 __asm __volatile (__lll_lock_asm_start				      \
-			   "jnz _L_lock_%=\n\t"				      \
-			   ".subsection 1\n\t"				      \
-			   ".type _L_lock_%=,@function\n"		      \
-			   "_L_lock_%=:\n"				      \
+			   "jz 18f\n\t"				      \
 			   "1:\tleal %2, %%ecx\n"			      \
 			   "2:\tcall __lll_lock_wait_private\n" 	      \
-			   "3:\tjmp 18f\n"				      \
-			   "4:\t.size _L_lock_%=, 4b-1b\n\t"		      \
-			   ".previous\n"				      \
-			   LLL_STUB_UNWIND_INFO_3			      \
 			   "18:"					      \
 			   : "=a" (ignore1), "=c" (ignore2), "=m" (futex)     \
 			   : "0" (0), "1" (1), "m" (futex),		      \
@@ -317,17 +233,10 @@ LLL_STUB_UNWIND_INFO_END
 	 {								      \
 	   int ignore3;							      \
 	   __asm __volatile (__lll_lock_asm_start			      \
-			     "jnz _L_lock_%=\n\t"			      \
-			     ".subsection 1\n\t"			      \
-			     ".type _L_lock_%=,@function\n"		      \
-			     "_L_lock_%=:\n"				      \
+			     "jz 18f\n\t"			 	      \
 			     "1:\tleal %2, %%edx\n"			      \
 			     "0:\tmovl %8, %%ecx\n"			      \
 			     "2:\tcall __lll_lock_wait\n"		      \
-			     "3:\tjmp 18f\n"				      \
-			     "4:\t.size _L_lock_%=, 4b-1b\n\t"		      \
-			     ".previous\n"				      \
-			     LLL_STUB_UNWIND_INFO_4			      \
 			     "18:"					      \
 			     : "=a" (ignore1), "=c" (ignore2),		      \
 			       "=m" (futex), "=&d" (ignore3) 		      \
@@ -341,17 +250,10 @@ LLL_STUB_UNWIND_INFO_END
 #define lll_robust_lock(futex, id, private) \
   ({ int result, ignore1, ignore2;					      \
      __asm __volatile (LOCK_INSTR "cmpxchgl %1, %2\n\t"			      \
-		       "jnz _L_robust_lock_%=\n\t"			      \
-		       ".subsection 1\n\t"				      \
-		       ".type _L_robust_lock_%=,@function\n"		      \
-		       "_L_robust_lock_%=:\n"				      \
+		       "jz 18f\n\t"					      \
 		       "1:\tleal %2, %%edx\n"				      \
 		       "0:\tmovl %7, %%ecx\n"				      \
 		       "2:\tcall __lll_robust_lock_wait\n"		      \
-		       "3:\tjmp 18f\n"					      \
-		       "4:\t.size _L_robust_lock_%=, 4b-1b\n\t"		      \
-		       ".previous\n"					      \
-		       LLL_STUB_UNWIND_INFO_4				      \
 		       "18:"						      \
 		       : "=a" (result), "=c" (ignore1), "=m" (futex),	      \
 			 "=&d" (ignore2)				      \
@@ -366,17 +268,10 @@ LLL_STUB_UNWIND_INFO_END
   (void)								      \
     ({ int ignore1, ignore2, ignore3;					      \
        __asm __volatile (LOCK_INSTR "cmpxchgl %1, %2\n\t"		      \
-			 "jnz _L_cond_lock_%=\n\t"			      \
-			 ".subsection 1\n\t"				      \
-			 ".type _L_cond_lock_%=,@function\n"		      \
-			 "_L_cond_lock_%=:\n"				      \
+			 "jz 18f\n\t"					      \
 			 "1:\tleal %2, %%edx\n"				      \
 			 "0:\tmovl %7, %%ecx\n"				      \
 			 "2:\tcall __lll_lock_wait\n"			      \
-			 "3:\tjmp 18f\n"				      \
-			 "4:\t.size _L_cond_lock_%=, 4b-1b\n\t"		      \
-			 ".previous\n"					      \
-			 LLL_STUB_UNWIND_INFO_4				      \
 			 "18:"						      \
 			 : "=a" (ignore1), "=c" (ignore2), "=m" (futex),      \
 			   "=&d" (ignore3)				      \
@@ -388,17 +283,10 @@ LLL_STUB_UNWIND_INFO_END
 #define lll_robust_cond_lock(futex, id, private) \
   ({ int result, ignore1, ignore2;					      \
      __asm __volatile (LOCK_INSTR "cmpxchgl %1, %2\n\t"			      \
-		       "jnz _L_robust_cond_lock_%=\n\t"			      \
-		       ".subsection 1\n\t"				      \
-		       ".type _L_robust_cond_lock_%=,@function\n"	      \
-		       "_L_robust_cond_lock_%=:\n"			      \
+		       "jz 18f\n\t"					      \
 		       "1:\tleal %2, %%edx\n"				      \
 		       "0:\tmovl %7, %%ecx\n"				      \
 		       "2:\tcall __lll_robust_lock_wait\n"		      \
-		       "3:\tjmp 18f\n"					      \
-		       "4:\t.size _L_robust_cond_lock_%=, 4b-1b\n\t"	      \
-		       ".previous\n"					      \
-		       LLL_STUB_UNWIND_INFO_4				      \
 		       "18:"						      \
 		       : "=a" (result), "=c" (ignore1), "=m" (futex),	      \
 			 "=&d" (ignore2)				      \
@@ -411,17 +299,10 @@ LLL_STUB_UNWIND_INFO_END
 #define lll_timedlock(futex, timeout, private) \
   ({ int result, ignore1, ignore2, ignore3;				      \
      __asm __volatile (LOCK_INSTR "cmpxchgl %1, %3\n\t"			      \
-		       "jnz _L_timedlock_%=\n\t"			      \
-		       ".subsection 1\n\t"				      \
-		       ".type _L_timedlock_%=,@function\n"		      \
-		       "_L_timedlock_%=:\n"				      \
+		       "jz 18f\n\t"					      \
 		       "1:\tleal %3, %%ecx\n"				      \
 		       "0:\tmovl %8, %%edx\n"				      \
 		       "2:\tcall __lll_timedlock_wait\n"		      \
-		       "3:\tjmp 18f\n"					      \
-		       "4:\t.size _L_timedlock_%=, 4b-1b\n\t"		      \
-		       ".previous\n"					      \
-		       LLL_STUB_UNWIND_INFO_4				      \
 		       "18:"						      \
 		       : "=a" (result), "=c" (ignore1), "=&d" (ignore2),      \
 			 "=m" (futex), "=S" (ignore3)			      \
@@ -440,17 +321,10 @@ extern int __lll_timedlock_elision (int *futex, short *adapt_count,
 #define lll_robust_timedlock(futex, timeout, id, private) \
   ({ int result, ignore1, ignore2, ignore3;				      \
      __asm __volatile (LOCK_INSTR "cmpxchgl %1, %3\n\t"			      \
-		       "jnz _L_robust_timedlock_%=\n\t"			      \
-		       ".subsection 1\n\t"				      \
-		       ".type _L_robust_timedlock_%=,@function\n"	      \
-		       "_L_robust_timedlock_%=:\n"			      \
+		       "jz 18f\n\t"			   		      \
 		       "1:\tleal %3, %%ecx\n"				      \
 		       "0:\tmovl %8, %%edx\n"				      \
 		       "2:\tcall __lll_robust_timedlock_wait\n"		      \
-		       "3:\tjmp 18f\n"					      \
-		       "4:\t.size _L_robust_timedlock_%=, 4b-1b\n\t"	      \
-		       ".previous\n"					      \
-		       LLL_STUB_UNWIND_INFO_4				      \
 		       "18:"						      \
 		       : "=a" (result), "=c" (ignore1), "=&d" (ignore2),      \
 			 "=m" (futex), "=S" (ignore3)			      \
@@ -473,16 +347,9 @@ extern int __lll_timedlock_elision (int *futex, short *adapt_count,
     ({ int ignore;							      \
        if (__builtin_constant_p (private) && (private) == LLL_PRIVATE)	      \
 	 __asm __volatile (__lll_unlock_asm				      \
-			   "jne _L_unlock_%=\n\t"			      \
-			   ".subsection 1\n\t"				      \
-			   ".type _L_unlock_%=,@function\n"		      \
-			   "_L_unlock_%=:\n"				      \
+			   "je 18f\n\t"					      \
 			   "1:\tleal %0, %%eax\n"			      \
 			   "2:\tcall __lll_unlock_wake_private\n"	      \
-			   "3:\tjmp 18f\n"				      \
-			   "4:\t.size _L_unlock_%=, 4b-1b\n\t"		      \
-			   ".previous\n"				      \
-			   LLL_STUB_UNWIND_INFO_3			      \
 			   "18:"					      \
 			   : "=m" (futex), "=&a" (ignore)		      \
 			   : "m" (futex), "i" (MULTIPLE_THREADS_OFFSET)	      \
@@ -491,17 +358,10 @@ extern int __lll_timedlock_elision (int *futex, short *adapt_count,
 	 {								      \
 	   int ignore2;							      \
 	   __asm __volatile (__lll_unlock_asm				      \
-			     "jne _L_unlock_%=\n\t"			      \
-			     ".subsection 1\n\t"			      \
-			     ".type _L_unlock_%=,@function\n"		      \
-			     "_L_unlock_%=:\n"				      \
+			     "je 18f\n\t"				      \
 			     "1:\tleal %0, %%eax\n"			      \
 			     "0:\tmovl %5, %%ecx\n"			      \
 			     "2:\tcall __lll_unlock_wake\n"		      \
-			     "3:\tjmp 18f\n"				      \
-			     "4:\t.size _L_unlock_%=, 4b-1b\n\t"	      \
-			     ".previous\n"				      \
-			     LLL_STUB_UNWIND_INFO_4			      \
 			     "18:"					      \
 			     : "=m" (futex), "=&a" (ignore), "=&c" (ignore2)  \
 			     : "i" (MULTIPLE_THREADS_OFFSET), "m" (futex),    \
@@ -514,17 +374,10 @@ extern int __lll_timedlock_elision (int *futex, short *adapt_count,
   (void)								      \
     ({ int ignore, ignore2;						      \
        __asm __volatile (LOCK_INSTR "andl %3, %0\n\t"			      \
-			 "jne _L_robust_unlock_%=\n\t"			      \
-			 ".subsection 1\n\t"				      \
-			 ".type _L_robust_unlock_%=,@function\n"	      \
-			 "_L_robust_unlock_%=:\n\t"			      \
+			 "je 18f\n\t"					      \
 			 "1:\tleal %0, %%eax\n"				      \
 			 "0:\tmovl %5, %%ecx\n"				      \
 			 "2:\tcall __lll_unlock_wake\n"			      \
-			 "3:\tjmp 18f\n"				      \
-			 "4:\t.size _L_robust_unlock_%=, 4b-1b\n\t"	      \
-			 ".previous\n"					      \
-			 LLL_STUB_UNWIND_INFO_4				      \
 			 "18:"						      \
 			 : "=m" (futex), "=&a" (ignore), "=&c" (ignore2)      \
 			 : "i" (FUTEX_WAITERS), "m" (futex),		      \
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
index 0a2673974e..c13ca084df 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
@@ -106,105 +106,6 @@
 /* Delay in spinlock loop.  */
 #define BUSY_WAIT_NOP	  asm ("rep; nop")
 
-
-#define LLL_STUB_UNWIND_INFO_START \
-	".section	.eh_frame,\"a\",@progbits\n" 		\
-"7:\t"	".long	9f-8f	# Length of Common Information Entry\n" \
-"8:\t"	".long	0x0	# CIE Identifier Tag\n\t" 		\
-	".byte	0x1	# CIE Version\n\t" 			\
-	".ascii \"zR\\0\"	# CIE Augmentation\n\t" 	\
-	".uleb128 0x1	# CIE Code Alignment Factor\n\t" 	\
-	".sleb128 -8	# CIE Data Alignment Factor\n\t" 	\
-	".byte	0x10	# CIE RA Column\n\t" 			\
-	".uleb128 0x1	# Augmentation size\n\t" 		\
-	".byte	0x1b	# FDE Encoding (pcrel sdata4)\n\t" 	\
-	".byte	0x12	# DW_CFA_def_cfa_sf\n\t" 		\
-	".uleb128 0x7\n\t" 					\
-	".sleb128 16\n\t" 					\
-	".align " LP_SIZE "\n" 					\
-"9:\t"	".long	23f-10f	# FDE Length\n" 			\
-"10:\t"	".long	10b-7b	# FDE CIE offset\n\t" 			\
-	".long	1b-.	# FDE initial location\n\t" 		\
-	".long	6b-1b	# FDE address range\n\t" 		\
-	".uleb128 0x0	# Augmentation size\n\t" 		\
-	".byte	0x16	# DW_CFA_val_expression\n\t" 		\
-	".uleb128 0x10\n\t" 					\
-	".uleb128 12f-11f\n" 					\
-"11:\t"	".byte	0x80	# DW_OP_breg16\n\t" 			\
-	".sleb128 4b-1b\n"
-#define LLL_STUB_UNWIND_INFO_END \
-	".byte	0x16	# DW_CFA_val_expression\n\t" 		\
-	".uleb128 0x10\n\t" 					\
-	".uleb128 14f-13f\n" 					\
-"13:\t"	".byte	0x80	# DW_OP_breg16\n\t" 			\
-	".sleb128 4b-2b\n" 					\
-"14:\t"	".byte	0x40 + (3b-2b) # DW_CFA_advance_loc\n\t" 	\
-	".byte	0x0e	# DW_CFA_def_cfa_offset\n\t" 		\
-	".uleb128 0\n\t" 					\
-	".byte	0x16	# DW_CFA_val_expression\n\t" 		\
-	".uleb128 0x10\n\t" 					\
-	".uleb128 16f-15f\n" 					\
-"15:\t"	".byte	0x80	# DW_OP_breg16\n\t" 			\
-	".sleb128 4b-3b\n" 					\
-"16:\t"	".byte	0x40 + (4b-3b-1) # DW_CFA_advance_loc\n\t" 	\
-	".byte	0x0e	# DW_CFA_def_cfa_offset\n\t" 		\
-	".uleb128 128\n\t" 					\
-	".byte	0x16	# DW_CFA_val_expression\n\t" 		\
-	".uleb128 0x10\n\t" 					\
-	".uleb128 20f-17f\n" 					\
-"17:\t"	".byte	0x80	# DW_OP_breg16\n\t" 			\
-	".sleb128 19f-18f\n\t" 					\
-	".byte	0x0d	# DW_OP_const4s\n" 			\
-"18:\t"	".4byte	4b-.\n\t" 					\
-	".byte	0x1c	# DW_OP_minus\n\t" 			\
-	".byte	0x0d	# DW_OP_const4s\n" 			\
-"19:\t"	".4byte	24f-.\n\t" 					\
-	".byte	0x22	# DW_OP_plus\n" 			\
-"20:\t"	".byte	0x40 + (5b-4b+1) # DW_CFA_advance_loc\n\t" 	\
-	".byte	0x13	# DW_CFA_def_cfa_offset_sf\n\t" 	\
-	".sleb128 16\n\t" 					\
-	".byte	0x16	# DW_CFA_val_expression\n\t" 		\
-	".uleb128 0x10\n\t" 					\
-	".uleb128 22f-21f\n" 					\
-"21:\t"	".byte	0x80	# DW_OP_breg16\n\t" 			\
-	".sleb128 4b-5b\n" 					\
-"22:\t"	".align " LP_SIZE "\n" 					\
-"23:\t"	".previous\n"
-
-/* Unwind info for
-   1: leaq ..., %rdi
-   2: subq $128, %rsp
-   3: callq ...
-   4: addq $128, %rsp
-   5: jmp 24f
-   6:
-   snippet.  */
-#define LLL_STUB_UNWIND_INFO_5 \
-LLL_STUB_UNWIND_INFO_START					\
-"12:\t"	".byte	0x40 + (2b-1b) # DW_CFA_advance_loc\n\t" 	\
-LLL_STUB_UNWIND_INFO_END
-
-/* Unwind info for
-   1: leaq ..., %rdi
-   0: movq ..., %rdx
-   2: subq $128, %rsp
-   3: callq ...
-   4: addq $128, %rsp
-   5: jmp 24f
-   6:
-   snippet.  */
-#define LLL_STUB_UNWIND_INFO_6 \
-LLL_STUB_UNWIND_INFO_START					\
-"12:\t"	".byte	0x40 + (0b-1b) # DW_CFA_advance_loc\n\t" 	\
-	".byte	0x16	# DW_CFA_val_expression\n\t" 		\
-	".uleb128 0x10\n\t" 					\
-	".uleb128 26f-25f\n" 					\
-"25:\t"	".byte	0x80	# DW_OP_breg16\n\t" 			\
-	".sleb128 4b-0b\n" 					\
-"26:\t"	".byte	0x40 + (2b-0b) # DW_CFA_advance_loc\n\t" 	\
-LLL_STUB_UNWIND_INFO_END
-
-
 #define lll_futex_wait(futex, val, private) \
   lll_futex_timed_wait(futex, val, NULL, private)
 
@@ -283,7 +184,7 @@ LLL_STUB_UNWIND_INFO_END
 
 #if defined NOT_IN_libc || defined UP
 # define __lll_lock_asm_start LOCK_INSTR "cmpxchgl %4, %2\n\t"		      \
-			      "jnz 1f\n\t"
+			      "jz 24f\n\t"
 #else
 # define __lll_lock_asm_start "cmpl $0, __libc_multiple_threads(%%rip)\n\t"   \
 			      "je 0f\n\t"				      \
@@ -291,7 +192,7 @@ LLL_STUB_UNWIND_INFO_END
 			      "jnz 1f\n\t"				      \
 			      "jmp 24f\n"				      \
 			      "0:\tcmpxchgl %4, %2\n\t"			      \
-			      "jnz 1f\n\t"
+			      "jz 24f\n\t"
 #endif
 
 #define lll_lock(futex, private) \
@@ -299,17 +200,12 @@ LLL_STUB_UNWIND_INFO_END
     ({ int ignore1, ignore2, ignore3;					      \
        if (__builtin_constant_p (private) && (private) == LLL_PRIVATE)	      \
 	 __asm __volatile (__lll_lock_asm_start				      \
-			   ".subsection 1\n\t"				      \
-			   ".type _L_lock_%=, @function\n"		      \
-			   "_L_lock_%=:\n"				      \
 			   "1:\tlea %2, %%" RDI_LP "\n"			      \
 			   "2:\tsub $128, %%" RSP_LP "\n"		      \
+			   ".cfi_adjust_cfa_offset 128\n"		      \
 			   "3:\tcallq __lll_lock_wait_private\n"	      \
 			   "4:\tadd $128, %%" RSP_LP "\n"		      \
-			   "5:\tjmp 24f\n"				      \
-			   "6:\t.size _L_lock_%=, 6b-1b\n\t"		      \
-			   ".previous\n"				      \
-			   LLL_STUB_UNWIND_INFO_5			      \
+			   ".cfi_adjust_cfa_offset -128\n"		      \
 			   "24:"					      \
 			   : "=S" (ignore1), "=&D" (ignore2), "=m" (futex),   \
 			     "=a" (ignore3)				      \
@@ -317,17 +213,12 @@ LLL_STUB_UNWIND_INFO_END
 			   : "cx", "r11", "cc", "memory");		      \
        else								      \
 	 __asm __volatile (__lll_lock_asm_start				      \
-			   ".subsection 1\n\t"				      \
-			   ".type _L_lock_%=, @function\n"		      \
-			   "_L_lock_%=:\n"				      \
 			   "1:\tlea %2, %%" RDI_LP "\n"			      \
 			   "2:\tsub $128, %%" RSP_LP "\n"		      \
+			   ".cfi_adjust_cfa_offset 128\n"		      \
 			   "3:\tcallq __lll_lock_wait\n"		      \
 			   "4:\tadd $128, %%" RSP_LP "\n"		      \
-			   "5:\tjmp 24f\n"				      \
-			   "6:\t.size _L_lock_%=, 6b-1b\n\t"		      \
-			   ".previous\n"				      \
-			   LLL_STUB_UNWIND_INFO_5			      \
+			   ".cfi_adjust_cfa_offset -128\n"		      \
 			   "24:"					      \
 			   : "=S" (ignore1), "=D" (ignore2), "=m" (futex),    \
 			     "=a" (ignore3)				      \
@@ -338,18 +229,13 @@ LLL_STUB_UNWIND_INFO_END
 #define lll_robust_lock(futex, id, private) \
   ({ int result, ignore1, ignore2;					      \
     __asm __volatile (LOCK_INSTR "cmpxchgl %4, %2\n\t"			      \
-		      "jnz 1f\n\t"					      \
-		      ".subsection 1\n\t"				      \
-		      ".type _L_robust_lock_%=, @function\n"		      \
-		      "_L_robust_lock_%=:\n"				      \
+		      "jz 24f\n"					      \
 		      "1:\tlea %2, %%" RDI_LP "\n"			      \
 		      "2:\tsub $128, %%" RSP_LP "\n"			      \
+		      ".cfi_adjust_cfa_offset 128\n"			      \
 		      "3:\tcallq __lll_robust_lock_wait\n"		      \
 		      "4:\tadd $128, %%" RSP_LP "\n"			      \
-		      "5:\tjmp 24f\n"					      \
-		      "6:\t.size _L_robust_lock_%=, 6b-1b\n\t"		      \
-		      ".previous\n"					      \
-		      LLL_STUB_UNWIND_INFO_5				      \
+		      ".cfi_adjust_cfa_offset -128\n"			      \
 		      "24:"						      \
 		      : "=S" (ignore1), "=D" (ignore2), "=m" (futex),	      \
 			"=a" (result)					      \
@@ -361,18 +247,13 @@ LLL_STUB_UNWIND_INFO_END
   (void)								      \
     ({ int ignore1, ignore2, ignore3;					      \
        __asm __volatile (LOCK_INSTR "cmpxchgl %4, %2\n\t"		      \
-			 "jnz 1f\n\t"					      \
-			 ".subsection 1\n\t"				      \
-			 ".type _L_cond_lock_%=, @function\n"		      \
-			 "_L_cond_lock_%=:\n"				      \
+			 "jz 24f\n"					      \
 			 "1:\tlea %2, %%" RDI_LP "\n"			      \
 			 "2:\tsub $128, %%" RSP_LP "\n"			      \
+			 ".cfi_adjust_cfa_offset 128\n"			      \
 			 "3:\tcallq __lll_lock_wait\n"			      \
 			 "4:\tadd $128, %%" RSP_LP "\n"			      \
-			 "5:\tjmp 24f\n"				      \
-			 "6:\t.size _L_cond_lock_%=, 6b-1b\n\t"		      \
-			 ".previous\n"					      \
-			 LLL_STUB_UNWIND_INFO_5				      \
+			 ".cfi_adjust_cfa_offset -128\n"		      \
 			 "24:"						      \
 			 : "=S" (ignore1), "=D" (ignore2), "=m" (futex),      \
 			   "=a" (ignore3)				      \
@@ -383,18 +264,13 @@ LLL_STUB_UNWIND_INFO_END
 #define lll_robust_cond_lock(futex, id, private) \
   ({ int result, ignore1, ignore2;					      \
     __asm __volatile (LOCK_INSTR "cmpxchgl %4, %2\n\t"			      \
-		      "jnz 1f\n\t"					      \
-		      ".subsection 1\n\t"				      \
-		      ".type _L_robust_cond_lock_%=, @function\n"	      \
-		      "_L_robust_cond_lock_%=:\n"			      \
+		      "jz 24f\n"					      \
 		      "1:\tlea %2, %%" RDI_LP "\n"			      \
 		      "2:\tsub $128, %%" RSP_LP "\n"			      \
+		      ".cfi_adjust_cfa_offset 128\n"			      \
 		      "3:\tcallq __lll_robust_lock_wait\n"		      \
 		      "4:\tadd $128, %%" RSP_LP "\n"			      \
-		      "5:\tjmp 24f\n"					      \
-		      "6:\t.size _L_robust_cond_lock_%=, 6b-1b\n\t"	      \
-		      ".previous\n"					      \
-		      LLL_STUB_UNWIND_INFO_5				      \
+		      ".cfi_adjust_cfa_offset -128\n"			      \
 		      "24:"						      \
 		      : "=S" (ignore1), "=D" (ignore2), "=m" (futex),	      \
 			"=a" (result)					      \
@@ -406,19 +282,14 @@ LLL_STUB_UNWIND_INFO_END
 #define lll_timedlock(futex, timeout, private) \
   ({ int result, ignore1, ignore2, ignore3;				      \
      __asm __volatile (LOCK_INSTR "cmpxchgl %1, %4\n\t"			      \
-		       "jnz 1f\n\t"					      \
-		       ".subsection 1\n\t"				      \
-		       ".type _L_timedlock_%=, @function\n"		      \
-		       "_L_timedlock_%=:\n"				      \
+		       "jz 24f\n"					      \
 		       "1:\tlea %4, %%" RDI_LP "\n"			      \
 		       "0:\tmov %8, %%" RDX_LP "\n"			      \
 		       "2:\tsub $128, %%" RSP_LP "\n"			      \
+		       ".cfi_adjust_cfa_offset 128\n"			      \
 		       "3:\tcallq __lll_timedlock_wait\n"		      \
 		       "4:\tadd $128, %%" RSP_LP "\n"			      \
-		       "5:\tjmp 24f\n"					      \
-		       "6:\t.size _L_timedlock_%=, 6b-1b\n\t"		      \
-		       ".previous\n"					      \
-		       LLL_STUB_UNWIND_INFO_6				      \
+		       ".cfi_adjust_cfa_offset -128\n"			      \
 		       "24:"						      \
 		       : "=a" (result), "=D" (ignore1), "=S" (ignore2),	      \
 			 "=&d" (ignore3), "=m" (futex)			      \
@@ -437,19 +308,14 @@ extern int __lll_timedlock_elision (int *futex, short *adapt_count,
 #define lll_robust_timedlock(futex, timeout, id, private) \
   ({ int result, ignore1, ignore2, ignore3;				      \
      __asm __volatile (LOCK_INSTR "cmpxchgl %1, %4\n\t"			      \
-		       "jnz 1f\n\t"					      \
-		       ".subsection 1\n\t"				      \
-		       ".type _L_robust_timedlock_%=, @function\n"	      \
-		       "_L_robust_timedlock_%=:\n"			      \
+		       "jz 24f\n\t"					      \
 		       "1:\tlea %4, %%" RDI_LP "\n"			      \
 		       "0:\tmov %8, %%" RDX_LP "\n"			      \
 		       "2:\tsub $128, %%" RSP_LP "\n"			      \
+		       ".cfi_adjust_cfa_offset 128\n"			      \
 		       "3:\tcallq __lll_robust_timedlock_wait\n"	      \
 		       "4:\tadd $128, %%" RSP_LP "\n"			      \
-		       "5:\tjmp 24f\n"					      \
-		       "6:\t.size _L_robust_timedlock_%=, 6b-1b\n\t"	      \
-		       ".previous\n"					      \
-		       LLL_STUB_UNWIND_INFO_6				      \
+		       ".cfi_adjust_cfa_offset -128\n"			      \
 		       "24:"						      \
 		       : "=a" (result), "=D" (ignore1), "=S" (ignore2),       \
 			 "=&d" (ignore3), "=m" (futex)			      \
@@ -460,7 +326,7 @@ extern int __lll_timedlock_elision (int *futex, short *adapt_count,
 
 #if defined NOT_IN_libc || defined UP
 # define __lll_unlock_asm_start LOCK_INSTR "decl %0\n\t"		      \
-				"jne 1f\n\t"
+				"je 24f\n\t"
 #else
 # define __lll_unlock_asm_start "cmpl $0, __libc_multiple_threads(%%rip)\n\t" \
 				"je 0f\n\t"				      \
@@ -468,7 +334,7 @@ extern int __lll_timedlock_elision (int *futex, short *adapt_count,
 				"jne 1f\n\t"				      \
 				"jmp 24f\n\t"				      \
 				"0:\tdecl %0\n\t"			      \
-				"jne 1f\n\t"
+				"je 24f\n\t"
 #endif
 
 #define lll_unlock(futex, private) \
@@ -476,34 +342,24 @@ extern int __lll_timedlock_elision (int *futex, short *adapt_count,
     ({ int ignore;							      \
        if (__builtin_constant_p (private) && (private) == LLL_PRIVATE)	      \
 	 __asm __volatile (__lll_unlock_asm_start			      \
-			   ".subsection 1\n\t"				      \
-			   ".type _L_unlock_%=, @function\n"		      \
-			   "_L_unlock_%=:\n"				      \
 			   "1:\tlea %0, %%" RDI_LP "\n"			      \
 			   "2:\tsub $128, %%" RSP_LP "\n"		      \
+			   ".cfi_adjust_cfa_offset 128\n"		      \
 			   "3:\tcallq __lll_unlock_wake_private\n"	      \
 			   "4:\tadd $128, %%" RSP_LP "\n"		      \
-			   "5:\tjmp 24f\n"				      \
-			   "6:\t.size _L_unlock_%=, 6b-1b\n\t"		      \
-			   ".previous\n"				      \
-			   LLL_STUB_UNWIND_INFO_5			      \
+			   ".cfi_adjust_cfa_offset -128\n"		      \
 			   "24:"					      \
 			   : "=m" (futex), "=&D" (ignore)		      \
 			   : "m" (futex)				      \
 			   : "ax", "cx", "r11", "cc", "memory");	      \
        else								      \
 	 __asm __volatile (__lll_unlock_asm_start			      \
-			   ".subsection 1\n\t"				      \
-			   ".type _L_unlock_%=, @function\n"		      \
-			   "_L_unlock_%=:\n"				      \
 			   "1:\tlea %0, %%" RDI_LP "\n"			      \
 			   "2:\tsub $128, %%" RSP_LP "\n"		      \
+			   ".cfi_adjust_cfa_offset 128\n"		      \
 			   "3:\tcallq __lll_unlock_wake\n"		      \
 			   "4:\tadd $128, %%" RSP_LP "\n"		      \
-			   "5:\tjmp 24f\n"				      \
-			   "6:\t.size _L_unlock_%=, 6b-1b\n\t"		      \
-			   ".previous\n"				      \
-			   LLL_STUB_UNWIND_INFO_5			      \
+			   ".cfi_adjust_cfa_offset -128\n"		      \
 			   "24:"					      \
 			   : "=m" (futex), "=&D" (ignore)		      \
 			   : "m" (futex), "S" (private)			      \
@@ -515,18 +371,13 @@ extern int __lll_timedlock_elision (int *futex, short *adapt_count,
     {									      \
       int ignore;							      \
       __asm __volatile (LOCK_INSTR "andl %2, %0\n\t"			      \
-			"jne 1f\n\t"					      \
-			".subsection 1\n\t"				      \
-			".type _L_robust_unlock_%=, @function\n"	      \
-			"_L_robust_unlock_%=:\n"			      \
+			"je 24f\n\t"					      \
 			"1:\tlea %0, %%" RDI_LP "\n"			      \
 			"2:\tsub $128, %%" RSP_LP "\n"			      \
+			".cfi_adjust_cfa_offset 128\n"			      \
 			"3:\tcallq __lll_unlock_wake\n"			      \
 			"4:\tadd $128, %%" RSP_LP "\n"			      \
-			"5:\tjmp 24f\n"					      \
-			"6:\t.size _L_robust_unlock_%=, 6b-1b\n\t"	      \
-			".previous\n"					      \
-			LLL_STUB_UNWIND_INFO_5				      \
+			".cfi_adjust_cfa_offset -128\n"			      \
 			"24:"						      \
 			: "=m" (futex), "=&D" (ignore)			      \
 			: "i" (FUTEX_WAITERS), "m" (futex),		      \