From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13691 invoked by alias); 14 Oct 2002 14:27:38 -0000 Mailing-List: contact libc-hacker-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-hacker-owner@sources.redhat.com Received: (qmail 13675 invoked from network); 14 Oct 2002 14:27:37 -0000 Received: from unknown (HELO sunsite.mff.cuni.cz) (195.113.19.66) by sources.redhat.com with SMTP; 14 Oct 2002 14:27:37 -0000 Received: (from jakub@localhost) by sunsite.mff.cuni.cz (8.11.6/8.11.6) id g9EERI030838; Mon, 14 Oct 2002 16:27:18 +0200 Date: Mon, 14 Oct 2002 12:38:00 -0000 From: Jakub Jelinek To: Roland McGrath , Ulrich Drepper Cc: Glibc hackers Subject: [PATCH] libc x86-64 __thread fix Message-ID: <20021014162717.G3451@sunsite.ms.mff.cuni.cz> Reply-To: Jakub Jelinek Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i X-SW-Source: 2002-10/txt/msg00054.txt.bz2 Hi! 2002-10-14 Jakub Jelinek * sysdeps/unix/sysv/linux/x86_64/sysdep.h: Include tls.h. (SYSCALL_ERROR_HANDLER): Use RTLD_PRIVATE_ERRNO sequence in ld.so even if __thread is supported. --- libc/sysdeps/unix/sysv/linux/x86_64/sysdep.h.jj 2002-10-11 08:54:41.000000000 -0400 +++ libc/sysdeps/unix/sysv/linux/x86_64/sysdep.h 2002-10-14 08:16:36.000000000 -0400 @@ -23,6 +23,7 @@ #include #include #include +#include #ifdef IS_IN_rtld # include /* Defines RTLD_PRIVATE_ERRNO. */ @@ -82,22 +83,22 @@ #ifndef PIC #define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ -#elif USE___THREAD +#elif RTLD_PRIVATE_ERRNO # define SYSCALL_ERROR_HANDLER \ 0: \ - movq errno@GOTTPOFF(%rip), %rcx; \ + leaq errno(%rip), %rcx; \ xorq %rdx, %rdx; \ subq %rax, %rdx; \ - movl %edx, %fs:(%rcx); \ + movl %edx, (%rcx); \ orq $-1, %rax; \ jmp L(pseudo_end); -#elif RTLD_PRIVATE_ERRNO +#elif USE___THREAD # define SYSCALL_ERROR_HANDLER \ 0: \ - leaq errno(%rip), %rcx; \ + movq errno@GOTTPOFF(%rip), %rcx; \ xorq %rdx, %rdx; \ subq %rax, %rdx; \ - movl %edx, (%rcx); \ + movl %edx, %fs:(%rcx); \ orq $-1, %rax; \ jmp L(pseudo_end); #elif defined _LIBC_REENTRANT Jakub