From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24174 invoked by alias); 29 Jan 2014 07:51:38 -0000 Mailing-List: contact gcc-help-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-help-owner@gcc.gnu.org Received: (qmail 24163 invoked by uid 89); 29 Jan 2014 07:51:37 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.8 required=5.0 tests=AWL,BAYES_50,RDNS_DYNAMIC,T_FILL_THIS_FORM_SHORT autolearn=no version=3.3.2 X-HELO: mail.embedded-brains.de Received: from host-82-135-62-35.customer.m-online.net (HELO mail.embedded-brains.de) (82.135.62.35) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 29 Jan 2014 07:51:35 +0000 Received: by mail.embedded-brains.de (Postfix, from userid 65534) id 5194B652CFF; Wed, 29 Jan 2014 08:51:32 +0100 (CET) Received: from [192.168.100.11] (unknown [192.168.100.11]) by mail.embedded-brains.de (Postfix) with ESMTP id A877D652CFC; Wed, 29 Jan 2014 08:51:31 +0100 (CET) Message-ID: <52E8B2FE.5040102@embedded-brains.de> Date: Wed, 29 Jan 2014 07:51:00 -0000 From: Sebastian Huber User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Ian Lance Taylor CC: "gcc-help@gcc.gnu.org" Subject: Re: ColdFire and Thread-Local Storage References: <52E7D186.4030108@embedded-brains.de> In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-IsSubscribed: yes X-SW-Source: 2014-01/txt/msg00117.txt.bz2 On 2014-01-28 20:15, Ian Lance Taylor wrote: > On Tue, Jan 28, 2014 at 7:49 AM, Sebastian Huber > wrote: >> >> it seems GCC uses this ColdFire TLS ABI: >> >> https://lists.debian.org/debian-68k/2007/11/msg00071.html >> >> Here we have a function >> >> void *__m68k_read_tp(void) >> >> which must return the thread pointer in register a0. >> >> I have to implement this function. Is there a way to instruct GCC to return >> the value in register a0 instead of d0 or do I have to use assembler to >> implement this function? > > I believe that on m68k GNU/Linux a function that returns a pointer > will normally return the value in a0. > > Ian > The function void *__m68k_read_tp(void) { const Thread_Control *executing = _Thread_Get_executing(); return (char *) executing->Start.tls_area + _TLS_Get_thread_control_block_area_size((uintptr_t) _TLS_Alignment) + 0x7000; } translates to __m68k_read_tp: move.l #_TLS_Alignment,%d0 moveq #8,%d1 move.l _Per_CPU_Information+18,%a0 cmp.l %d0,%d1 jls .L2 moveq #8,%d0 .L2: add.l #28672,%d0 add.l 194(%a0),%d0 rts I use now: void __m68k_read_tp(void) { const Thread_Control *executing = _Thread_Get_executing(); void *tp = (char *) executing->Start.tls_area + _TLS_Get_thread_control_block_area_size((uintptr_t) _TLS_Alignment) + 0x7000; __asm__ volatile ( "move.l %0, %%a0" : : "d" (tp) ); } -- Sebastian Huber, embedded brains GmbH Address : Dornierstr. 4, D-82178 Puchheim, Germany Phone : +49 89 189 47 41-16 Fax : +49 89 189 47 41-09 E-Mail : sebastian.huber@embedded-brains.de PGP : Public key available on request. Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.