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
>
next prev parent 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).