#include "asmcfi.h"
+#define CONCAT1(a, b) CONCAT2(a, b)
+#define CONCAT2(a, b) a ## b
+
+#ifdef __USER_LABEL_PREFIX__
+# define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
+#else
+# define SYM(x) x
+#endif
+
+#ifdef __ELF__
+# define TYPE(x) .type SYM(x), @function
+# define SIZE(x) .size SYM(x), . - SYM(x)
+# ifdef HAVE_ATTRIBUTE_VISIBILITY
+# define HIDDEN(x) .hidden SYM(x)
+# else
+# define HIDDEN(x)
+# endif
+#else
+# define TYPE(x)
+# define SIZE(x)
+# ifdef __MACH__
+# define HIDDEN(x) .private_extern SYM(x)
+# else
+# define HIDDEN(x)
+# endif
+#endif
+
.text
.align 4
- .globl _ITM_beginTransaction
+ .globl SYM(_ITM_beginTransaction)
-_ITM_beginTransaction:
+SYM(_ITM_beginTransaction):
cfi_startproc
#ifdef __x86_64__
leaq 8(%rsp), %rax
- movq (%rsp), %r8
- subq $72, %rsp
- cfi_def_cfa_offset(80)
+ subq $56, %rsp
+ cfi_def_cfa_offset(64)
movq %rax, (%rsp)
- movq %r8, 8(%rsp)
- movq %rbx, 16(%rsp)
- movq %rbp, 24(%rsp)
- movq %r12, 32(%rsp)
- movq %r13, 40(%rsp)
- movq %r14, 48(%rsp)
- movq %r15, 56(%rsp)
+ movq %rbx, 8(%rsp)
+ movq %rbp, 16(%rsp)
+ movq %r12, 24(%rsp)
+ movq %r13, 32(%rsp)
+ movq %r14, 40(%rsp)
+ movq %r15, 48(%rsp)
movq %rsp, %rsi
- call GTM_begin_transaction
- addq $72, %rsp
+ call SYM(GTM_begin_transaction)
+ addq $56, %rsp
cfi_def_cfa_offset(8)
ret
#else
leal 4(%esp), %ecx
+ movl 4(%esp), %eax
subl $28, %esp
cfi_def_cfa_offset(32)
movl %ecx, 8(%esp)
movl %ebp, 24(%esp)
leal 8(%esp), %edx
#if defined HAVE_ATTRIBUTE_VISIBILITY || !defined __PIC__
- call GTM_begin_transaction
+ call SYM(GTM_begin_transaction)
#elif defined __ELF__
call 1f
1: popl %ebx
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
- call GTM_begin_transaction@PLT
+ call SYM(GTM_begin_transaction)@PLT
movl 12(%esp), %ebx
#else
# error "Unsupported PIC sequence"
#endif
cfi_endproc
-#ifdef __ELF__
- .type _ITM_beginTransaction, @function
- .size _ITM_beginTransaction, .-_ITM_beginTransaction
-#endif
+ TYPE(_ITM_beginTransaction)
+ SIZE(_ITM_beginTransaction)
.align 4
- .globl GTM_longjmp
+ .globl SYM(GTM_longjmp)
-GTM_longjmp:
+SYM(GTM_longjmp):
cfi_startproc
#ifdef __x86_64__
- movq (%rdi), %rcx
- movq 8(%rdi), %rdx
- movq 16(%rdi), %rbx
- movq 24(%rdi), %rbp
- movq 32(%rdi), %r12
- movq 40(%rdi), %r13
- movq 48(%rdi), %r14
- movq 56(%rdi), %r15
- movl %esi, %eax
- cfi_def_cfa(%rcx, 0)
- cfi_register(%rip, %rdx)
+ cfi_def_cfa(%rsi, 0)
+ movq (%rsi), %rcx
+ movq 8(%rsi), %rbx
+ movq 16(%rsi), %rbp
+ movq 24(%rsi), %r12
+ movq 32(%rsi), %r13
+ movq 40(%rsi), %r14
+ movq 48(%rsi), %r15
+ cfi_offset(%rip, 56)
+ movl %edi, %eax
movq %rcx, %rsp
- jmp *%rdx
+ cfi_register(%rsp, %rcx)
+ jmp *56(%rsi)
#else
- xchgl %eax, %edx
+ cfi_def_cfa(%edx, 0)
movl (%edx), %ecx
movl 4(%edx), %ebx
movl 8(%edx), %esi
movl 12(%edx), %edi
movl 16(%edx), %ebp
- movl 20(%edx), %edx
- cfi_def_cfa(%ecx, 0)
- cfi_register(%eip, %edx)
+ cfi_offset(%eip, 20)
movl %ecx, %esp
- jmp *%edx
+ cfi_register(%esp, %ecx)
+ jmp *20(%edx)
#endif
cfi_endproc
-#ifdef __ELF__
- .type GTM_longjmp, @function
-#ifdef HAVE_ATTRIBUTE_VISIBILITY
- .hidden GTM_longjmp
-#endif
- .size GTM_longjmp, .-GTM_longjmp
-#endif
+ TYPE(GTM_longjmp)
+ HIDDEN(GTM_longjmp)
+ SIZE(GTM_longjmp)
#ifdef __linux__
.section .note.GNU-stack, "", @progbits