From patchwork Tue Nov 22 10:01:04 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iain Sandoe X-Patchwork-Id: 127045 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id C0CFCB70C0 for ; Tue, 22 Nov 2011 21:01:37 +1100 (EST) Received: (qmail 17168 invoked by alias); 22 Nov 2011 10:01:34 -0000 Received: (qmail 17150 invoked by uid 22791); 22 Nov 2011 10:01:33 -0000 X-SWARE-Spam-Status: No, hits=-1.7 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, TW_DD, TW_GJ, TW_OV X-Spam-Check-By: sourceware.org Received: from c2beaomr08.btconnect.com (HELO mail.btconnect.com) (213.123.26.186) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 22 Nov 2011 10:01:07 +0000 Received: from host81-138-1-83.in-addr.btopenworld.com (EHLO thor.office) ([81.138.1.83]) by c2beaomr08.btconnect.com with ESMTP id FEV46428; Tue, 22 Nov 2011 10:01:06 +0000 (GMT) Cc: GCC Patches , Mike Stump , Rainer Orth Message-Id: <4A345D44-6007-423E-AF85-42F7DF71D9F0@sandoe-acoustics.co.uk> From: Iain Sandoe To: Richard Henderson In-Reply-To: <4EC69780.6000800@redhat.com> Mime-Version: 1.0 (Apple Message framework v936) Subject: Re: [Patch RFA libitm] Deal with __USER_LABEL_PREFIX__ in the asm Date: Tue, 22 Nov 2011 10:01:04 +0000 References: <04AFC3C8-2BBF-48F7-9E84-D7D8E03CA3AE@sandoe-acoustics.co.uk> <4EC69780.6000800@redhat.com> X-Mirapoint-IP-Reputation: reputation=Fair-1, source=Queried, refid=tid=0001.0A0B0303.4ECB72E1.0057, actions=tag X-Junkmail-Premium-Raw: score=8/50, refid=2.7.2:2011.11.22.90915:17:8.129, ip=81.138.1.83, rules=__MULTIPLE_RCPTS_CC_X2, __HAS_MSGID, __SANE_MSGID, __MSGID_APPLEMAIL, __TO_MALFORMED_2, __CT, __CTYPE_HAS_BOUNDARY, __CTYPE_MULTIPART, CTYPE_MULTIPART_NO_QUOTE, __CTYPE_MULTIPART_MIXED, __MIME_VERSION, __MIME_VERSION_APPLEMAIL, __BOUNCE_CHALLENGE_SUBJ, __BOUNCE_NDR_SUBJ_EXEMPT, __SUBJ_ALPHA_END, __HAS_X_MAILER, __X_MAILER_APPLEMAIL, TXT_ATTACHED, __CP_MEDIA_BODY, __STOCK_PHRASE_7, __OEM_PRICE, __STOCK_SYMBOL1, BODY_SIZE_4000_4999, BODYTEXTP_SIZE_3000_LESS, __MIME_TEXT_ONLY, RDNS_GENERIC_POOLED, BODY_SIZE_5000_LESS, RDNS_SUSP_GENERIC, __STOCK_SYMBOL_X1, __USER_AGENT_APPLEMAIL, RDNS_SUSP, BODY_SIZE_7000_LESS, NO_URI_FOUND, MIME_TEXT_ONLY_MP_MIXED, MULTIPLE_RCPTS X-Junkmail-Signature-Raw: score=unknown, refid=str=0001.0A0B0205.4ECB72E2.006E, ss=1, re=0.000, fgs=0, ip=0.0.0.0, so=2011-07-25 19:15:43, dmn=2011-05-27 18:58:46, mode=multiengine X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org On 18 Nov 2011, at 17:36, Richard Henderson wrote: > On 11/18/2011 04:00 AM, Iain Sandoe wrote: >> 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. > > Ok modulo the conflict you're going to have with RO's patch. > Adjust for his use of .hidden, of course, and the extra symbol ref. This is what I applied (r181611) after checking I could build the lib on a cross to x86_64-unknown-linux and that the sjlj.S file assembled for the case where __USER_LABEL_PREFIX__ is not defined. Iain Index: libitm/libitm_i.h =================================================================== --- libitm/libitm_i.h (revision 181610) +++ libitm/libitm_i.h (working copy) @@ -240,9 +240,15 @@ // 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); Index: libitm/config/x86/sjlj.S =================================================================== --- libitm/config/x86/sjlj.S (revision 181610) +++ libitm/config/x86/sjlj.S (working copy) @@ -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 @@ 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 @@ 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 @@ #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 @@ #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