unofficial mirror of libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Adhemerval Zanella via Libc-alpha <libc-alpha@sourceware.org>
To: libc-alpha@sourceware.org
Subject: Re: [PATCH] Move vtimes to a compatibility symbol
Date: Fri, 16 Oct 2020 15:11:47 -0300	[thread overview]
Message-ID: <db4e8fe9-fd19-65f9-488b-4f4ff72b9655@linaro.org> (raw)
In-Reply-To: <20201016180830.1310739-1-adhemerval.zanella@linaro.org>



On 16/10/2020 15:08, Adhemerval Zanella wrote:
> I couldn't pinpoint which standard has added it, but no other POSIX
> system supports it and/or no longer provide it.  The 'struct vtimes'
> also has a lot of drawbacks due its limited internal type size.
> 
> I couldn't also see find any project that actually uses this symbol,
> either in some dignostic way (such as sanitizer).  So I think it should
> be safer to just move to compat symbol, instead of deprecated.  The
> idea it to avoid new ports to export such broken interface (riscv32
> for instance).
> 
> Checked on x86_64-linux-gnu and i686-linux-gnu.

And I noted that I forgot to add NEWS entry:

  * The function vtimes is no longer available to newly linked binaries.
    Applications should use the getrlimit or prlimit.

> ---
>  include/sys/vtimes.h                          |  1 -
>  manual/resource.texi                          | 61 -----------------
>  resource/Makefile                             |  2 +-
>  resource/sys/vtimes.h                         | 68 -------------------
>  resource/vtimes.c                             | 45 +++++++++++-
>  .../unix/sysv/linux/riscv/rv32/libc.abilist   |  1 -
>  6 files changed, 43 insertions(+), 135 deletions(-)
>  delete mode 100644 include/sys/vtimes.h
>  delete mode 100644 resource/sys/vtimes.h
> 
> diff --git a/include/sys/vtimes.h b/include/sys/vtimes.h
> deleted file mode 100644
> index dd666ca443..0000000000
> --- a/include/sys/vtimes.h
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <resource/sys/vtimes.h>
> diff --git a/manual/resource.texi b/manual/resource.texi
> index 60e6d61611..37462abc9e 100644
> --- a/manual/resource.texi
> +++ b/manual/resource.texi
> @@ -121,67 +121,6 @@ scheduled).
>  @end table
>  @end deftp
>  
> -@code{vtimes} is a historical function that does some of what
> -@code{getrusage} does.  @code{getrusage} is a better choice.
> -
> -@code{vtimes} and its @code{vtimes} data structure are declared in
> -@file{sys/vtimes.h}.
> -@pindex sys/vtimes.h
> -
> -@deftypefun int vtimes (struct vtimes *@var{current}, struct vtimes *@var{child})
> -@standards{???, sys/vtimes.h}
> -@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
> -@c Calls getrusage twice.
> -
> -@code{vtimes} reports resource usage totals for a process.
> -
> -If @var{current} is non-null, @code{vtimes} stores resource usage totals for
> -the invoking process alone in the structure to which it points.  If
> -@var{child} is non-null, @code{vtimes} stores resource usage totals for all
> -past children (which have terminated) of the invoking process in the structure
> -to which it points.
> -
> -@deftp {Data Type} {struct vtimes}
> -This data type contains information about the resource usage of a process.
> -Each member corresponds to a member of the @code{struct rusage} data type
> -described above.
> -
> -@table @code
> -@item vm_utime
> -User CPU time.  Analogous to @code{ru_utime} in @code{struct rusage}
> -@item vm_stime
> -System CPU time.  Analogous to @code{ru_stime} in @code{struct rusage}
> -@item vm_idsrss
> -Data and stack memory.  The sum of the values that would be reported as
> -@code{ru_idrss} and @code{ru_isrss} in @code{struct rusage}
> -@item vm_ixrss
> -Shared memory.  Analogous to @code{ru_ixrss} in @code{struct rusage}
> -@item vm_maxrss
> -Maximent resident set size.  Analogous to @code{ru_maxrss} in
> -@code{struct rusage}
> -@item vm_majflt
> -Major page faults.  Analogous to @code{ru_majflt} in @code{struct rusage}
> -@item vm_minflt
> -Minor page faults.  Analogous to @code{ru_minflt} in @code{struct rusage}
> -@item vm_nswap
> -Swap count.  Analogous to @code{ru_nswap} in @code{struct rusage}
> -@item vm_inblk
> -Disk reads.  Analogous to @code{ru_inblk} in @code{struct rusage}
> -@item vm_oublk
> -Disk writes.  Analogous to @code{ru_oublk} in @code{struct rusage}
> -@end table
> -@end deftp
> -
> -
> -The return value is zero if the function succeeds; @code{-1} otherwise.
> -
> -
> -
> -@end deftypefun
> -An additional historical function for examining resource usage,
> -@code{vtimes}, is supported but not documented here.  It is declared in
> -@file{sys/vtimes.h}.
> -
>  @node Limits on Resources
>  @section Limiting Resource Usage
>  @cindex resource limits
> diff --git a/resource/Makefile b/resource/Makefile
> index 62e0046ae9..416564207d 100644
> --- a/resource/Makefile
> +++ b/resource/Makefile
> @@ -19,7 +19,7 @@ subdir := resource
>  
>  include ../Makeconfig
>  
> -headers	  := sys/resource.h bits/resource.h sys/vlimit.h sys/vtimes.h	\
> +headers	  := sys/resource.h bits/resource.h sys/vlimit.h	\
>  	     ulimit.h bits/types/struct_rusage.h
>  
>  routines := getrlimit setrlimit getrlimit64 setrlimit64 getrusage ulimit      \
> diff --git a/resource/sys/vtimes.h b/resource/sys/vtimes.h
> deleted file mode 100644
> index 659f655a8b..0000000000
> --- a/resource/sys/vtimes.h
> +++ /dev/null
> @@ -1,68 +0,0 @@
> -/* Copyright (C) 1991-2020 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
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SYS_VTIMES_H
> -#define _SYS_VTIMES_H	1
> -
> -#include <features.h>
> -
> -__BEGIN_DECLS
> -
> -/* This interface is obsolete; use `getrusage' instead.  */
> -
> -/* Granularity of the `vm_utime' and `vm_stime' fields of a `struct vtimes'.
> -   (This is the frequency of the machine's power supply, in Hz.)  */
> -#define	VTIMES_UNITS_PER_SECOND	60
> -
> -struct vtimes
> -{
> -  /* User time used in units of 1/VTIMES_UNITS_PER_SECOND seconds.  */
> -  int vm_utime;
> -  /* System time used in units of 1/VTIMES_UNITS_PER_SECOND seconds.  */
> -  int vm_stime;
> -
> -  /* Amount of data and stack memory used (kilobyte-seconds).  */
> -  unsigned int vm_idsrss;
> -  /* Amount of text memory used (kilobyte-seconds).  */
> -  unsigned int vm_ixrss;
> -  /* Maximum resident set size (text, data, and stack) (kilobytes).  */
> -  int vm_maxrss;
> -
> -  /* Number of hard page faults (i.e. those that required I/O).  */
> -  int vm_majflt;
> -  /* Number of soft page faults (i.e. those serviced by reclaiming
> -     a page from the list of pages awaiting reallocation.  */
> -  int vm_minflt;
> -
> -  /* Number of times a process was swapped out of physical memory.  */
> -  int vm_nswap;
> -
> -  /* Number of input operations via the file system.  Note: This
> -     and `ru_oublock' do not include operations with the cache.  */
> -  int vm_inblk;
> -  /* Number of output operations via the file system.  */
> -  int vm_oublk;
> -};
> -
> -/* If CURRENT is not NULL, write statistics for the current process into
> -   *CURRENT.  If CHILD is not NULL, write statistics for all terminated child
> -   processes into *CHILD.  Returns 0 for success, -1 for failure.  */
> -extern int vtimes (struct vtimes * __current, struct vtimes * __child) __THROW;
> -
> -__END_DECLS
> -
> -#endif /* sys/vtimes.h  */
> diff --git a/resource/vtimes.c b/resource/vtimes.c
> index 56eed4cb35..a18c8188a6 100644
> --- a/resource/vtimes.c
> +++ b/resource/vtimes.c
> @@ -16,12 +16,48 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  #include <stddef.h>
> -#include <sys/vtimes.h>
>  #include <sys/resource.h>
> +#include <shlib-compat.h>
> +
> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_33)
> +
> +/* Granularity of the `vm_utime' and `vm_stime' fields of a `struct vtimes'.
> +   (This is the frequency of the machine's power supply, in Hz.)  */
> +# define VTIMES_UNITS_PER_SECOND 60
> +
> +struct vtimes
> +{
> +  /* User time used in units of 1/VTIMES_UNITS_PER_SECOND seconds.  */
> +  int vm_utime;
> +  /* System time used in units of 1/VTIMES_UNITS_PER_SECOND seconds.  */
> +  int vm_stime;
> +
> +  /* Amount of data and stack memory used (kilobyte-seconds).  */
> +  unsigned int vm_idsrss;
> +  /* Amount of text memory used (kilobyte-seconds).  */
> +  unsigned int vm_ixrss;
> +  /* Maximum resident set size (text, data, and stack) (kilobytes).  */
> +  int vm_maxrss;
> +
> +  /* Number of hard page faults (i.e. those that required I/O).  */
> +  int vm_majflt;
> +  /* Number of soft page faults (i.e. those serviced by reclaiming
> +     a page from the list of pages awaiting reallocation.  */
> +  int vm_minflt;
> +
> +  /* Number of times a process was swapped out of physical memory.  */
> +  int vm_nswap;
> +
> +  /* Number of input operations via the file system.  Note: This
> +     and `ru_oublock' do not include operations with the cache.  */
> +  int vm_inblk;
> +  /* Number of output operations via the file system.  */
> +  int vm_oublk;
> +};
>  
>  /* Return the number of 1/VTIMES_UNITS_PER_SECOND-second
>     units in the `struct timeval' TV.  */
> -#define TIMEVAL_TO_VTIMES(tv) \
> +# define TIMEVAL_TO_VTIMES(tv) \
>    ((tv.tv_sec * VTIMES_UNITS_PER_SECOND) \
>     + (tv.tv_usec * VTIMES_UNITS_PER_SECOND / 1000000))
>  
> @@ -53,10 +89,13 @@ vtimes_one (struct vtimes *vt, enum __rusage_who who)
>     *CURRENT.  If CHILD is not NULL, write statistics for all terminated child
>     processes into *CHILD.  Returns 0 for success, -1 for failure.  */
>  int
> -vtimes (struct vtimes *current, struct vtimes *child)
> +__vtimes (struct vtimes *current, struct vtimes *child)
>  {
>    if (vtimes_one (current, RUSAGE_SELF) < 0
>        || vtimes_one (child, RUSAGE_CHILDREN) < 0)
>      return -1;
>    return 0;
>  }
> +compat_symbol (libc, __vtimes, vtimes, GLIBC_2_0);
> +
> +#endif /* SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_33)  */
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index e977715088..66459efdba 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -1839,7 +1839,6 @@ GLIBC_2.33 vsscanf F
>  GLIBC_2.33 vswprintf F
>  GLIBC_2.33 vswscanf F
>  GLIBC_2.33 vsyslog F
> -GLIBC_2.33 vtimes F
>  GLIBC_2.33 vwarn F
>  GLIBC_2.33 vwarnx F
>  GLIBC_2.33 vwprintf F
> 

  reply	other threads:[~2020-10-16 18:11 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-16 18:08 [PATCH] Move vtimes to a compatibility symbol Adhemerval Zanella via Libc-alpha
2020-10-16 18:11 ` Adhemerval Zanella via Libc-alpha [this message]
2020-10-16 20:05   ` Florian Weimer via Libc-alpha
2020-10-16 18:57 ` Paul Eggert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/libc/involved.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=db4e8fe9-fd19-65f9-488b-4f4ff72b9655@linaro.org \
    --to=libc-alpha@sourceware.org \
    --cc=adhemerval.zanella@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).