From patchwork Tue Apr 4 19:05:13 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 19851 Received: (qmail 47825 invoked by alias); 4 Apr 2017 19:05:24 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 47809 invoked by uid 89); 4 Apr 2017 19:05:23 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-qk0-f173.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=e0z4mktIWdbto3S+MJfgK/9DlZ0H74XHPji0MUfKiIQ=; b=Oksge2LUbYoqCTeQIYqGisY/PaQ0JUPxKHfKp8RlfvZQkzxmoi6TBg61W16/CRIfbo hTWkdgg0Ku5gYWJwnZPSUsMCoYXsDBiYPp1569mMpf1A/E4jVhZ9yn2YnugIvYzhtEyf zvv/9Odd3O3HY7HI3fy0OUcbCQS9PwXdA2CISPVtHp5q+FSCiEj+oEB1iYCtRx+QpfHl F6m+HZXKkS+DnXGKfDZKHeQOFB3sB5w4txoeKEceIz0FoHhjBjYzpDQLYATpo2fTHB/e OO/aACwhooq7CoJYzahO6lc7XtRelpu5w9Gwzny0DMYN6cCan0iIpjBGZZyUgPpVPzuQ OGwQ== X-Gm-Message-State: AFeK/H21LsnUZRUm18/5FU33UQ+Q31jjF1g2JUuMTolU/DP7dEld7DtoUBBTRulD+c7TF70K X-Received: by 10.55.15.72 with SMTP id z69mr18581690qkg.69.1491332720410; Tue, 04 Apr 2017 12:05:20 -0700 (PDT) From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH] Remove CALL_THREAD_FCT macro Date: Tue, 4 Apr 2017 16:05:13 -0300 Message-Id: <1491332713-10642-1-git-send-email-adhemerval.zanella@linaro.org> This patch removes CALL_THREAD_FCT macro usage and its defition for x86. For 32 bits it usage is only for force 16 stack alignment, however stack is already explicit aligned in clone syscall. For 64 bits and x32 it just a function call and there is no need to code it with inline assembly. Checked on i686-linux-gnu, x86_64-linux-gnu, and x86_64-linux-gnu-x32. * nptl/pthread_create.c (START_THREAD_DEFN): Remove CALL_THREAD_FCT macro usage. * sysdeps/i386/nptl/tls.h (CALL_THREAD_FCT): Remove definition. * sysdeps/x86_64/nptl/tls.h (CALL_THREAD_FCT): Likewise. * sysdeps/x86_64/32/nptl/tls.h: Remove file. --- ChangeLog | 8 ++++++++ nptl/pthread_create.c | 4 ---- sysdeps/i386/nptl/tls.h | 16 --------------- sysdeps/x86_64/nptl/tls.h | 12 ----------- sysdeps/x86_64/x32/nptl/tls.h | 46 ------------------------------------------- 5 files changed, 8 insertions(+), 78 deletions(-) delete mode 100644 sysdeps/x86_64/x32/nptl/tls.h diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c index 2ef2bcb..d0d7414 100644 --- a/nptl/pthread_create.c +++ b/nptl/pthread_create.c @@ -452,11 +452,7 @@ START_THREAD_DEFN LIBC_PROBE (pthread_start, 3, (pthread_t) pd, pd->start_routine, pd->arg); /* Run the code the user provided. */ -#ifdef CALL_THREAD_FCT - THREAD_SETMEM (pd, result, CALL_THREAD_FCT (pd)); -#else THREAD_SETMEM (pd, result, pd->start_routine (pd->arg)); -#endif } /* Call destructors for the thread_local TLS variables. */ diff --git a/sysdeps/i386/nptl/tls.h b/sysdeps/i386/nptl/tls.h index 04dc6ae..f9a6b11 100644 --- a/sysdeps/i386/nptl/tls.h +++ b/sysdeps/i386/nptl/tls.h @@ -394,22 +394,6 @@ tls_fill_user_desc (union user_desc_init *desc, abort (); }) -/* Call the user-provided thread function. */ -#define CALL_THREAD_FCT(descr) \ - ({ void *__res; \ - int __ignore1, __ignore2; \ - asm volatile ("pushl %%eax\n\t" \ - "pushl %%eax\n\t" \ - "pushl %%eax\n\t" \ - "pushl %%gs:%P4\n\t" \ - "call *%%gs:%P3\n\t" \ - "addl $16, %%esp" \ - : "=a" (__res), "=c" (__ignore1), "=d" (__ignore2) \ - : "i" (offsetof (struct pthread, start_routine)), \ - "i" (offsetof (struct pthread, arg))); \ - __res; }) - - /* Set the stack guard field in TCB head. */ #define THREAD_SET_STACK_GUARD(value) \ THREAD_SETMEM (THREAD_SELF, header.stack_guard, value) diff --git a/sysdeps/x86_64/nptl/tls.h b/sysdeps/x86_64/nptl/tls.h index 53b41bc..9b8ad82 100644 --- a/sysdeps/x86_64/nptl/tls.h +++ b/sysdeps/x86_64/nptl/tls.h @@ -326,18 +326,6 @@ typedef struct abort (); }) -# define CALL_THREAD_FCT(descr) \ - ({ void *__res; \ - asm volatile ("movq %%fs:%P2, %%rdi\n\t" \ - "callq *%%fs:%P1" \ - : "=a" (__res) \ - : "i" (offsetof (struct pthread, start_routine)), \ - "i" (offsetof (struct pthread, arg)) \ - : "di", "si", "cx", "dx", "r8", "r9", "r10", "r11", \ - "memory", "cc"); \ - __res; }) - - /* Set the stack guard field in TCB head. */ # define THREAD_SET_STACK_GUARD(value) \ THREAD_SETMEM (THREAD_SELF, header.stack_guard, value) diff --git a/sysdeps/x86_64/x32/nptl/tls.h b/sysdeps/x86_64/x32/nptl/tls.h deleted file mode 100644 index 68f65a6..0000000 --- a/sysdeps/x86_64/x32/nptl/tls.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Definition for thread-local data handling. nptl/x32 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _X32_TLS_H -#define _X32_TLS_H 1 - -#include_next - -#ifndef __ASSEMBLER__ - -/* X32 doesn't support 32-bit indirect calls via memory. Instead, we - load the 32-bit address from memory into the lower 32 bits of the - return-value register, which will automatically zero-extend the upper - 32 bits of the return-value register. We then do the indirect call - via the 64-bit return-value register. */ -# undef CALL_THREAD_FCT -# define CALL_THREAD_FCT(descr) \ - ({ void *__res; \ - asm volatile ("movl %%fs:%P2, %%edi\n\t" \ - "movl %%fs:%P1, %k0\n\t" \ - "callq *%q0" \ - : "=a" (__res) \ - : "i" (offsetof (struct pthread, start_routine)), \ - "i" (offsetof (struct pthread, arg)) \ - : "di", "si", "cx", "dx", "r8", "r9", "r10", "r11", \ - "memory", "cc"); \ - __res; }) - -#endif /* __ASSEMBLER__ */ - -#endif /* x32/tls.h */