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:
Iain Sandoe 2011-11-22 09:57:19 +00:00
parent 9c9d352aba
commit 0b41ebef72
3 changed files with 57 additions and 19 deletions

View File

@ -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>
* testsuite/libitm.c/memcpy-1.c: Allow for MAP_ANON spelling.

View File

@ -25,12 +25,39 @@
#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
@ -46,7 +73,7 @@ _ITM_beginTransaction:
movq %r14, 48(%rsp)
movq %r15, 56(%rsp)
movq %rsp, %rsi
call GTM_begin_transaction
call SYM(GTM_begin_transaction)
addq $72, %rsp
cfi_def_cfa_offset(8)
ret
@ -61,12 +88,12 @@ _ITM_beginTransaction:
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"
@ -77,15 +104,13 @@ _ITM_beginTransaction:
#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
@ -116,13 +141,9 @@ GTM_longjmp:
#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

View File

@ -240,9 +240,15 @@ struct gtm_thread
// Invoked from assembly language, thus the "asm" specifier on
// 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 *)
__asm__("GTM_begin_transaction") ITM_REGPARM;
#endif
// In eh_cpp.cc
void revert_cpp_exceptions (gtm_transaction_cp *cp = 0);