From patchwork Wed Apr 15 20:22:00 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 47237 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-wg0-f70.google.com (mail-wg0-f70.google.com [74.125.82.70]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 57FFF2121F for ; Wed, 15 Apr 2015 20:23:38 +0000 (UTC) Received: by wghm4 with SMTP id m4sf12374854wgh.2 for ; Wed, 15 Apr 2015 13:23:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:mailing-list:precedence:list-id :list-unsubscribe:list-subscribe:list-archive:list-post:list-help :sender:delivered-to:message-id:date:from:user-agent:mime-version:to :subject:content-type:content-transfer-encoding:x-original-sender :x-original-authentication-results; bh=5CuDlMS2/ESlNBNnSv9Muqmq/xsyRA6KwALxqAigDwo=; b=kRKkw9ezwcw7m2hvQeAwKpRSjJuM4TtrT/op42+yWMwHReOT2QEhsjAAO2/KQsYPdM EGJb1HqVzoNVEcamJ9HQBp/+vjEGn5oX1p8mxJojsyU+5ClJtZu0ufV4oRFArbUBr2T5 r+vl//ewkjw7asVxbfc0QB5V1VwKas7cYI6rdCN8dAaQ6UshjQFsMdtZVuT1uW9yNGO9 PrcBAQPtdgJLh0+kPCk7CJOeOxu4y/KNKdEKADxHzi0UbpVPs272XjPelsWy/wPSCxcP Lj260vA7ET1iK1zUGbRPkrCopGHo8d4lLAydvrEIceLcpNkdkMPc+UCihiH/jOdHl0m0 0svg== X-Gm-Message-State: ALoCoQlfNSsNLLDqKR9PfskJNgKa98RxrGMQW9LFms5P07jDtjOApZ9vSsJW8Jy8eP5X9npYXjBP X-Received: by 10.152.19.67 with SMTP id c3mr6057158lae.7.1429129417614; Wed, 15 Apr 2015 13:23:37 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.42.137 with SMTP id o9ls230865lal.16.gmail; Wed, 15 Apr 2015 13:23:37 -0700 (PDT) X-Received: by 10.112.222.133 with SMTP id qm5mr25498789lbc.86.1429129417259; Wed, 15 Apr 2015 13:23:37 -0700 (PDT) Received: from mail-lb0-x22f.google.com (mail-lb0-x22f.google.com. [2a00:1450:4010:c04::22f]) by mx.google.com with ESMTPS id tq9si3730718lbb.126.2015.04.15.13.23.37 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 15 Apr 2015 13:23:37 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 2a00:1450:4010:c04::22f as permitted sender) client-ip=2a00:1450:4010:c04::22f; Received: by lbbzk7 with SMTP id zk7so43174751lbb.0 for ; Wed, 15 Apr 2015 13:23:37 -0700 (PDT) X-Received: by 10.112.125.167 with SMTP id mr7mr25584063lbb.106.1429129417162; Wed, 15 Apr 2015 13:23:37 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.67.65 with SMTP id l1csp2735156lbt; Wed, 15 Apr 2015 13:23:36 -0700 (PDT) X-Received: by 10.70.131.107 with SMTP id ol11mr50151672pdb.63.1429129414093; Wed, 15 Apr 2015 13:23:34 -0700 (PDT) Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id o2si8645709pds.107.2015.04.15.13.23.33 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 15 Apr 2015 13:23:34 -0700 (PDT) Received-SPF: pass (google.com: domain of libc-alpha-return-58461-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Received: (qmail 60040 invoked by alias); 15 Apr 2015 20:22:46 -0000 Mailing-List: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org Precedence: list 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 59985 invoked by uid 89); 15 Apr 2015 20:22:45 -0000 X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-qk0-f177.google.com X-Received: by 10.140.83.202 with SMTP id j68mr32839475qgd.18.1429129325254; Wed, 15 Apr 2015 13:22:05 -0700 (PDT) Message-ID: <552EC868.8060705@linaro.org> Date: Wed, 15 Apr 2015 17:22:00 -0300 From: Adhemerval Zanella User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: libc-alpha@sourceware.org Subject: [PATCH 4/4] x86: clock_gettime and timespec_get vDSO cleanup X-Original-Sender: adhemerval.zanella@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 2a00:1450:4010:c04::22f as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org; dkim=pass header.i=@sourceware.org X-Google-Group-Id: 836684582541 This patch removes the x86 specific timespec_get and clock_gettime implementation to use generic HAVE_CLOCK_GETTIME_VSYSCALL way. --- * sysdeps/unix/sysv/linux/i386/sysdep.h: Include common x86 sysdep.h. * sysdeps/unix/sysv/linux/timespec_get.c: Include errno.h. * sysdeps/unix/sysv/linux/x86/sysdep.h: New file: common x86 sysdep definitions. * sysdeps/unix/sysv/linux/x86/clock_gettime.c: Remove file. * sysdeps/unix/sysv/linux/x86/timespec_get.c: Likewise. * sysdeps/unix/sysv/linux/x86_64/sysdep.h: Move vDSO inline syscall to common x86 header. --- diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h index 7f6fcf3..dd0a9da 100644 --- a/sysdeps/unix/sysv/linux/i386/sysdep.h +++ b/sysdeps/unix/sysv/linux/i386/sysdep.h @@ -580,4 +580,6 @@ struct libc_do_syscall_args # endif #endif +#include_next + #endif /* linux/i386/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/timespec_get.c b/sysdeps/unix/sysv/linux/timespec_get.c index c162695..0965590 100644 --- a/sysdeps/unix/sysv/linux/timespec_get.c +++ b/sysdeps/unix/sysv/linux/timespec_get.c @@ -15,6 +15,7 @@ License along with the GNU C Library; if not, see . */ +#include #include #include @@ -22,7 +23,7 @@ # undef INTERNAL_VSYSCALL # define INTERNAL_VSYSCALL INTERNAL_SYSCALL #else -# include +# include #endif #ifndef INTERNAL_GETTIME diff --git a/sysdeps/unix/sysv/linux/x86/clock_gettime.c b/sysdeps/unix/sysv/linux/x86/clock_gettime.c deleted file mode 100644 index 98ffb01..0000000 --- a/sysdeps/unix/sysv/linux/x86/clock_gettime.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Get the current value of a clock. Linux/x86 version. - Copyright (C) 2015 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 - . */ - -#include - -#ifdef SHARED -# define SYSCALL_GETTIME(id, tp) \ - ({ long int (*f) (clockid_t, struct timespec *) = __vdso_clock_gettime; \ - long int v_ret; \ - PTR_DEMANGLE (f); \ - v_ret = (*f) (id, tp); \ - if (INTERNAL_SYSCALL_ERROR_P (v_ret, )) { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (v_ret, )); \ - v_ret = -1; \ - } \ - v_ret; }) -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/x86/sysdep.h b/sysdeps/unix/sysv/linux/x86/sysdep.h new file mode 100644 index 0000000..fc31f2a --- /dev/null +++ b/sysdeps/unix/sysv/linux/x86/sysdep.h @@ -0,0 +1,80 @@ +/* Common sysdep definitions for x86/Linux. + Copyright (C) 2015 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 _LINUX_X86_SYSDEP_H +#define _LINUX_X86_SYSDEP_H + +#ifdef SHARED +# define INLINE_VSYSCALL(name, nr, args...) \ + ({ \ + __label__ out; \ + __label__ iserr; \ + INTERNAL_SYSCALL_DECL (sc_err); \ + long int sc_ret; \ + \ + __typeof (__vdso_##name) vdsop = __vdso_##name; \ + PTR_DEMANGLE (vdsop); \ + if (vdsop != NULL) \ + { \ + sc_ret = vdsop (args); \ + if (!INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ + goto out; \ + if (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err) != ENOSYS) \ + goto iserr; \ + } \ + \ + sc_ret = INTERNAL_SYSCALL (name, sc_err, nr, ##args); \ + if (INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ + { \ + iserr: \ + __set_errno (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err)); \ + sc_ret = -1L; \ + } \ + out: \ + sc_ret; \ + }) +# define INTERNAL_VSYSCALL(name, err, nr, args...) \ + ({ \ + __label__ out; \ + long int v_ret; \ + \ + __typeof (__vdso_##name) vdsop = __vdso_##name; \ + PTR_DEMANGLE (vdsop); \ + if (vdsop != NULL) \ + { \ + v_ret = vdsop (args); \ + if (!INTERNAL_SYSCALL_ERROR_P (v_ret, err) \ + || INTERNAL_SYSCALL_ERRNO (v_ret, err) != ENOSYS) \ + goto out; \ + } \ + v_ret = INTERNAL_SYSCALL (name, err, nr, ##args); \ + out: \ + v_ret; \ + }) + +#else +# define INLINE_VSYSCALL(name, nr, args...) \ + INLINE_SYSCALL (name, nr, ##args) +# define INTERNAL_VSYSCALL(name, err, nr, args...) \ + INTERNAL_SYSCALL (name, err, nr, ##args) +#endif + +/* List of system calls which are supported as vsyscalls. */ +# define HAVE_CLOCK_GETTIME_VSYSCALL 1 + +#endif diff --git a/sysdeps/unix/sysv/linux/x86/timespec_get.c b/sysdeps/unix/sysv/linux/x86/timespec_get.c deleted file mode 100644 index b21efce..0000000 --- a/sysdeps/unix/sysv/linux/x86/timespec_get.c +++ /dev/null @@ -1,29 +0,0 @@ -/* timespec_get -- returns the calendar time based on a given time base. - Linux/x86 version. - Copyright (C) 2015 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 - . */ - -#include - -#ifdef SHARED -# define INTERNAL_GETTIME(id, tp) \ - ({ long int (*f) (clockid_t, struct timespec *) = __vdso_clock_gettime; \ - PTR_DEMANGLE (f); \ - (*f) (id, tp); }) -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h index 3dbd7d2..a3f7437 100644 --- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h @@ -252,60 +252,6 @@ # undef INTERNAL_SYSCALL_ERRNO # define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) -# ifdef SHARED -# define INLINE_VSYSCALL(name, nr, args...) \ - ({ \ - __label__ out; \ - __label__ iserr; \ - INTERNAL_SYSCALL_DECL (sc_err); \ - long int sc_ret; \ - \ - __typeof (__vdso_##name) vdsop = __vdso_##name; \ - PTR_DEMANGLE (vdsop); \ - if (vdsop != NULL) \ - { \ - sc_ret = vdsop (args); \ - if (!INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ - goto out; \ - if (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err) != ENOSYS) \ - goto iserr; \ - } \ - \ - sc_ret = INTERNAL_SYSCALL (name, sc_err, nr, ##args); \ - if (INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ - { \ - iserr: \ - __set_errno (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err)); \ - sc_ret = -1L; \ - } \ - out: \ - sc_ret; \ - }) -# define INTERNAL_VSYSCALL(name, err, nr, args...) \ - ({ \ - __label__ out; \ - long int v_ret; \ - \ - __typeof (__vdso_##name) vdsop = __vdso_##name; \ - PTR_DEMANGLE (vdsop); \ - if (vdsop != NULL) \ - { \ - v_ret = vdsop (args); \ - if (!INTERNAL_SYSCALL_ERROR_P (v_ret, err) \ - || INTERNAL_SYSCALL_ERRNO (v_ret, err) != ENOSYS) \ - goto out; \ - } \ - v_ret = INTERNAL_SYSCALL (name, err, nr, ##args); \ - out: \ - v_ret; \ - }) - -# else -# define INLINE_VSYSCALL(name, nr, args...) \ - INLINE_SYSCALL (name, nr, ##args) -# define INTERNAL_VSYSCALL(name, err, nr, args...) \ - INTERNAL_SYSCALL (name, err, nr, ##args) -# endif # define LOAD_ARGS_0() # define LOAD_REGS_0 @@ -431,4 +377,6 @@ # endif #endif +#include_next + #endif /* linux/x86_64/sysdep.h */