Move vtimes to a compatibility symbol

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.
This commit is contained in:
Adhemerval Zanella 2020-10-16 14:51:40 -03:00
parent 75c4044b9a
commit ab5ee31e14
7 changed files with 48 additions and 135 deletions

5
NEWS
View File

@ -42,6 +42,11 @@ Deprecated and removed features, and other changes affecting compatibility:
as a compatibility symbol (on those architectures which had it). All
programs should use gettimeofday or clock_gettime instead.
* The deprecated <sys/vtimes.h> header and the function vtimes have been
removed. To support old binaries, the vtimes function continues to exist
as a compatibility symbol. Applications should use the getrlimit or
prlimit.
Changes to build and runtime requirements:
* On Linux, the system administrator needs to configure /dev/pts with

View File

@ -1 +0,0 @@
#include <resource/sys/vtimes.h>

View File

@ -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

View File

@ -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 \

View File

@ -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 */

View File

@ -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) */

View File

@ -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