mirror of git://gcc.gnu.org/git/gcc.git
sjlj.S (CONCAT1, [...]): Respond to __USER_LABEL_PREFIX__ for targets that use it.
libitm: * config/x86/sjlj.S (CONCAT1, CONCAT2, SYM): Respond to __USER_LABEL_PREFIX__ for targets that use it. TYPE, SIZE, HIDDEN): New macros to assist on non-elf targets. (_ITM_beginTransaction): Use SYM, TYPE, SIZE macros to assist in portability to non-elf targets. (GTM_longjmp): LIkewise. * libitm_i.h (begin_transaction): Apply __USER_LABEL_PREFIX__ where required. From-SVN: r181612
This commit is contained in:
parent
9c9d352aba
commit
0b41ebef72
|
@ -1,3 +1,14 @@
|
||||||
|
2011-11-22 Iain Sandoe <iains@gcc.gnu.org>
|
||||||
|
|
||||||
|
* config/x86/sjlj.S (CONCAT1, CONCAT2, SYM): Respond to
|
||||||
|
__USER_LABEL_PREFIX__ for targets that use it.
|
||||||
|
TYPE, SIZE, HIDDEN): New macros to assist on non-elf targets.
|
||||||
|
(_ITM_beginTransaction): Use SYM, TYPE, SIZE macros to assist
|
||||||
|
in portability to non-elf targets.
|
||||||
|
(GTM_longjmp): LIkewise.
|
||||||
|
* libitm_i.h (begin_transaction): Apply __USER_LABEL_PREFIX__
|
||||||
|
where required.
|
||||||
|
|
||||||
2011-11-22 Iain Sandoe <iains@gcc.gnu.org>
|
2011-11-22 Iain Sandoe <iains@gcc.gnu.org>
|
||||||
|
|
||||||
* testsuite/libitm.c/memcpy-1.c: Allow for MAP_ANON spelling.
|
* testsuite/libitm.c/memcpy-1.c: Allow for MAP_ANON spelling.
|
||||||
|
|
|
@ -25,12 +25,39 @@
|
||||||
|
|
||||||
#include "asmcfi.h"
|
#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
|
.text
|
||||||
|
|
||||||
.align 4
|
.align 4
|
||||||
.globl _ITM_beginTransaction
|
.globl SYM(_ITM_beginTransaction)
|
||||||
|
|
||||||
_ITM_beginTransaction:
|
SYM(_ITM_beginTransaction):
|
||||||
cfi_startproc
|
cfi_startproc
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
leaq 8(%rsp), %rax
|
leaq 8(%rsp), %rax
|
||||||
|
@ -46,7 +73,7 @@ _ITM_beginTransaction:
|
||||||
movq %r14, 48(%rsp)
|
movq %r14, 48(%rsp)
|
||||||
movq %r15, 56(%rsp)
|
movq %r15, 56(%rsp)
|
||||||
movq %rsp, %rsi
|
movq %rsp, %rsi
|
||||||
call GTM_begin_transaction
|
call SYM(GTM_begin_transaction)
|
||||||
addq $72, %rsp
|
addq $72, %rsp
|
||||||
cfi_def_cfa_offset(8)
|
cfi_def_cfa_offset(8)
|
||||||
ret
|
ret
|
||||||
|
@ -61,12 +88,12 @@ _ITM_beginTransaction:
|
||||||
movl %ebp, 24(%esp)
|
movl %ebp, 24(%esp)
|
||||||
leal 8(%esp), %edx
|
leal 8(%esp), %edx
|
||||||
#if defined HAVE_ATTRIBUTE_VISIBILITY || !defined __PIC__
|
#if defined HAVE_ATTRIBUTE_VISIBILITY || !defined __PIC__
|
||||||
call GTM_begin_transaction
|
call SYM(GTM_begin_transaction)
|
||||||
#elif defined __ELF__
|
#elif defined __ELF__
|
||||||
call 1f
|
call 1f
|
||||||
1: popl %ebx
|
1: popl %ebx
|
||||||
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
|
||||||
call GTM_begin_transaction@PLT
|
call SYM(GTM_begin_transaction)@PLT
|
||||||
movl 12(%esp), %ebx
|
movl 12(%esp), %ebx
|
||||||
#else
|
#else
|
||||||
# error "Unsupported PIC sequence"
|
# error "Unsupported PIC sequence"
|
||||||
|
@ -77,15 +104,13 @@ _ITM_beginTransaction:
|
||||||
#endif
|
#endif
|
||||||
cfi_endproc
|
cfi_endproc
|
||||||
|
|
||||||
#ifdef __ELF__
|
TYPE(_ITM_beginTransaction)
|
||||||
.type _ITM_beginTransaction, @function
|
SIZE(_ITM_beginTransaction)
|
||||||
.size _ITM_beginTransaction, .-_ITM_beginTransaction
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.align 4
|
.align 4
|
||||||
.globl GTM_longjmp
|
.globl SYM(GTM_longjmp)
|
||||||
|
|
||||||
GTM_longjmp:
|
SYM(GTM_longjmp):
|
||||||
cfi_startproc
|
cfi_startproc
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
movq (%rdi), %rcx
|
movq (%rdi), %rcx
|
||||||
|
@ -116,13 +141,9 @@ GTM_longjmp:
|
||||||
#endif
|
#endif
|
||||||
cfi_endproc
|
cfi_endproc
|
||||||
|
|
||||||
#ifdef __ELF__
|
TYPE(GTM_longjmp)
|
||||||
.type GTM_longjmp, @function
|
HIDDEN(GTM_longjmp)
|
||||||
#ifdef HAVE_ATTRIBUTE_VISIBILITY
|
SIZE(GTM_longjmp)
|
||||||
.hidden GTM_longjmp
|
|
||||||
#endif
|
|
||||||
.size GTM_longjmp, .-GTM_longjmp
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
.section .note.GNU-stack, "", @progbits
|
.section .note.GNU-stack, "", @progbits
|
||||||
|
|
|
@ -240,9 +240,15 @@ struct gtm_thread
|
||||||
|
|
||||||
// Invoked from assembly language, thus the "asm" specifier on
|
// Invoked from assembly language, thus the "asm" specifier on
|
||||||
// the name, avoiding complex name mangling.
|
// the name, avoiding complex name mangling.
|
||||||
|
#ifdef __USER_LABEL_PREFIX__
|
||||||
|
#define UPFX1(t) UPFX(t)
|
||||||
|
#define UPFX(t) #t
|
||||||
|
static uint32_t begin_transaction(uint32_t, const gtm_jmpbuf *)
|
||||||
|
__asm__(UPFX1(__USER_LABEL_PREFIX__) "GTM_begin_transaction") ITM_REGPARM;
|
||||||
|
#else
|
||||||
static uint32_t begin_transaction(uint32_t, const gtm_jmpbuf *)
|
static uint32_t begin_transaction(uint32_t, const gtm_jmpbuf *)
|
||||||
__asm__("GTM_begin_transaction") ITM_REGPARM;
|
__asm__("GTM_begin_transaction") ITM_REGPARM;
|
||||||
|
#endif
|
||||||
// In eh_cpp.cc
|
// In eh_cpp.cc
|
||||||
void revert_cpp_exceptions (gtm_transaction_cp *cp = 0);
|
void revert_cpp_exceptions (gtm_transaction_cp *cp = 0);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue