1999-12-19 00:02:03 +00:00
|
|
|
/* Bit values & structures for resource limits. Alpha/Linux version.
|
2019-01-01 00:11:28 +00:00
|
|
|
Copyright (C) 1994-2019 Free Software Foundation, Inc.
|
1999-12-19 00:02:03 +00:00
|
|
|
This file is part of the GNU C Library.
|
|
|
|
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
2001-07-06 04:56:23 +00:00
|
|
|
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.
|
1999-12-19 00:02:03 +00:00
|
|
|
|
|
|
|
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
|
2001-07-06 04:56:23 +00:00
|
|
|
Lesser General Public License for more details.
|
1999-12-19 00:02:03 +00:00
|
|
|
|
2001-07-06 04:56:23 +00:00
|
|
|
You should have received a copy of the GNU Lesser General Public
|
2012-03-09 23:56:38 +00:00
|
|
|
License along with the GNU C Library. If not, see
|
|
|
|
<http://www.gnu.org/licenses/>. */
|
1999-12-19 00:02:03 +00:00
|
|
|
|
|
|
|
#ifndef _SYS_RESOURCE_H
|
|
|
|
# error "Never use <bits/resource.h> directly; include <sys/resource.h> instead."
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <bits/types.h>
|
|
|
|
|
|
|
|
/* Transmute defines to enumerations. The macro re-definitions are
|
|
|
|
necessary because some programs want to test for operating system
|
|
|
|
features with #ifdef RUSAGE_SELF. In ISO C the reflexive
|
|
|
|
definition is a no-op. */
|
|
|
|
|
|
|
|
/* Kinds of resource limit. */
|
|
|
|
enum __rlimit_resource
|
|
|
|
{
|
|
|
|
/* Per-process CPU limit, in seconds. */
|
|
|
|
RLIMIT_CPU = 0,
|
|
|
|
#define RLIMIT_CPU RLIMIT_CPU
|
|
|
|
|
|
|
|
/* Largest file that can be created, in bytes. */
|
|
|
|
RLIMIT_FSIZE = 1,
|
|
|
|
#define RLIMIT_FSIZE RLIMIT_FSIZE
|
|
|
|
|
|
|
|
/* Maximum size of data segment, in bytes. */
|
|
|
|
RLIMIT_DATA = 2,
|
|
|
|
#define RLIMIT_DATA RLIMIT_DATA
|
|
|
|
|
|
|
|
/* Maximum size of stack segment, in bytes. */
|
|
|
|
RLIMIT_STACK = 3,
|
|
|
|
#define RLIMIT_STACK RLIMIT_STACK
|
|
|
|
|
|
|
|
/* Largest core file that can be created, in bytes. */
|
|
|
|
RLIMIT_CORE = 4,
|
|
|
|
#define RLIMIT_CORE RLIMIT_CORE
|
|
|
|
|
|
|
|
/* Largest resident set size, in bytes.
|
|
|
|
This affects swapping; processes that are exceeding their
|
|
|
|
resident set size will be more likely to have physical memory
|
|
|
|
taken from them. */
|
2004-08-12 18:04:51 +00:00
|
|
|
__RLIMIT_RSS = 5,
|
|
|
|
#define RLIMIT_RSS __RLIMIT_RSS
|
1999-12-19 00:02:03 +00:00
|
|
|
|
|
|
|
/* Number of open files. */
|
|
|
|
RLIMIT_NOFILE = 6,
|
2004-08-12 18:04:51 +00:00
|
|
|
__RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */
|
1999-12-19 00:02:03 +00:00
|
|
|
#define RLIMIT_NOFILE RLIMIT_NOFILE
|
2004-08-12 18:04:51 +00:00
|
|
|
#define RLIMIT_OFILE __RLIMIT_OFILE
|
1999-12-19 00:02:03 +00:00
|
|
|
|
|
|
|
/* Address space limit (?) */
|
|
|
|
RLIMIT_AS = 7,
|
|
|
|
#define RLIMIT_AS RLIMIT_AS
|
|
|
|
|
|
|
|
/* Number of processes. */
|
2004-08-12 18:04:51 +00:00
|
|
|
__RLIMIT_NPROC = 8,
|
|
|
|
#define RLIMIT_NPROC __RLIMIT_NPROC
|
1999-12-19 00:02:03 +00:00
|
|
|
|
|
|
|
/* Locked-in-memory address space. */
|
2004-08-12 18:04:51 +00:00
|
|
|
__RLIMIT_MEMLOCK = 9,
|
|
|
|
#define RLIMIT_MEMLOCK __RLIMIT_MEMLOCK
|
1999-12-19 00:02:03 +00:00
|
|
|
|
2000-10-02 08:49:05 +00:00
|
|
|
/* Maximum number of file locks. */
|
2004-08-12 18:04:51 +00:00
|
|
|
__RLIMIT_LOCKS = 10,
|
|
|
|
#define RLIMIT_LOCKS __RLIMIT_LOCKS
|
2000-10-02 08:49:05 +00:00
|
|
|
|
2004-08-12 18:04:51 +00:00
|
|
|
/* Maximum number of pending signals. */
|
|
|
|
__RLIMIT_SIGPENDING = 11,
|
|
|
|
#define RLIMIT_SIGPENDING __RLIMIT_SIGPENDING
|
|
|
|
|
|
|
|
/* Maximum bytes in POSIX message queues. */
|
|
|
|
__RLIMIT_MSGQUEUE = 12,
|
|
|
|
#define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE
|
|
|
|
|
2005-06-20 15:07:34 +00:00
|
|
|
/* Maximum nice priority allowed to raise to.
|
|
|
|
Nice levels 19 .. -20 correspond to 0 .. 39
|
|
|
|
values of this resource limit. */
|
|
|
|
__RLIMIT_NICE = 13,
|
|
|
|
#define RLIMIT_NICE __RLIMIT_NICE
|
|
|
|
|
|
|
|
/* Maximum realtime priority allowed for non-priviledged
|
|
|
|
processes. */
|
|
|
|
__RLIMIT_RTPRIO = 14,
|
2005-06-21 18:38:49 +00:00
|
|
|
#define RLIMIT_RTPRIO __RLIMIT_RTPRIO
|
2005-06-20 15:07:34 +00:00
|
|
|
|
2012-06-15 19:01:39 +00:00
|
|
|
/* Maximum CPU time in µs that a process scheduled under a real-time
|
|
|
|
scheduling policy may consume without making a blocking system
|
|
|
|
call before being forcibly descheduled. */
|
|
|
|
__RLIMIT_RTTIME = 15,
|
|
|
|
#define RLIMIT_RTTIME __RLIMIT_RTTIME
|
|
|
|
|
|
|
|
__RLIMIT_NLIMITS = 16,
|
2004-08-12 18:04:51 +00:00
|
|
|
__RLIM_NLIMITS = __RLIMIT_NLIMITS
|
|
|
|
#define RLIMIT_NLIMITS __RLIMIT_NLIMITS
|
|
|
|
#define RLIM_NLIMITS __RLIM_NLIMITS
|
1999-12-19 00:02:03 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Value to indicate that there is no limit. */
|
|
|
|
#ifndef __USE_FILE_OFFSET64
|
Alpha: Fix the RLIM_INFINITY and RLIM64_INFINITY constants
Fix the RLIM_INFINITY and RLIM64_INFINITY constants on alpha to match
the kernel one and all other architectures. Change the getrlimit,
getrlimit64, setrlimit, setrlimit64 into old compat symbols, and provide
the Linux generic functions as GLIBC_2_27 version.
Changelog:
* sysdeps/unix/sysv/linux/getrlimit64.c [USE_VERSIONED_RLIMIT]: Do not
define getrlimit and getrlimit64 as weak aliases of __getrlimit64.
Define __GI_getrlimit64 as weak alias of __getrlimit64.
[__RLIM_T_MATCHES_RLIM64_T]: Do not redefine SHLIB_COMPAT, use #elif
instead.
* sysdeps/unix/sysv/linux/setrlimit64.c [USE_VERSIONED_RLIMIT]: Do not
define setrlimit and setrlimit64 as weak aliases of __setrlimit64.
* sysdeps/unix/sysv/linux/alpha/bits/resource.h (RLIM_INFINITY,
RLIM64_INFINITY): Fix values to match the kernel ones.
* sysdeps/unix/sysv/linux/alpha/getrlimit64.c: Define
USE_VERSIONED_RLIMIT. Rename __getrlimit64 into __old_getrlimit64 and
provide it as getrlimit@@GLIBC_2_0 and getrlimit64@@GLIBC_2_1. Add a
__getrlimit64 function and provide it as getrlimit@@GLIBC_2_27 and
getrlimit64@@GLIBC_2_27.
* sysdeps/unix/sysv/linux/alpha/setrlimit64.c: Ditto with setrlimit
and setrlimit64.
* sysdeps/unix/sysv/linux/alpha/libc.abilist (GLIBC_2.27): Add
getrlimit, setrlimit, getrlimit64 and setrlimit64.
* sysdeps/unix/sysv/linux/alpha/Versions (libc): Add getrlimit,
setrlimit, getrlimit64 and setrlimit64.
2018-01-05 19:34:10 +00:00
|
|
|
# define RLIM_INFINITY ((__rlim_t) -1)
|
1999-12-19 00:02:03 +00:00
|
|
|
#else
|
Alpha: Fix the RLIM_INFINITY and RLIM64_INFINITY constants
Fix the RLIM_INFINITY and RLIM64_INFINITY constants on alpha to match
the kernel one and all other architectures. Change the getrlimit,
getrlimit64, setrlimit, setrlimit64 into old compat symbols, and provide
the Linux generic functions as GLIBC_2_27 version.
Changelog:
* sysdeps/unix/sysv/linux/getrlimit64.c [USE_VERSIONED_RLIMIT]: Do not
define getrlimit and getrlimit64 as weak aliases of __getrlimit64.
Define __GI_getrlimit64 as weak alias of __getrlimit64.
[__RLIM_T_MATCHES_RLIM64_T]: Do not redefine SHLIB_COMPAT, use #elif
instead.
* sysdeps/unix/sysv/linux/setrlimit64.c [USE_VERSIONED_RLIMIT]: Do not
define setrlimit and setrlimit64 as weak aliases of __setrlimit64.
* sysdeps/unix/sysv/linux/alpha/bits/resource.h (RLIM_INFINITY,
RLIM64_INFINITY): Fix values to match the kernel ones.
* sysdeps/unix/sysv/linux/alpha/getrlimit64.c: Define
USE_VERSIONED_RLIMIT. Rename __getrlimit64 into __old_getrlimit64 and
provide it as getrlimit@@GLIBC_2_0 and getrlimit64@@GLIBC_2_1. Add a
__getrlimit64 function and provide it as getrlimit@@GLIBC_2_27 and
getrlimit64@@GLIBC_2_27.
* sysdeps/unix/sysv/linux/alpha/setrlimit64.c: Ditto with setrlimit
and setrlimit64.
* sysdeps/unix/sysv/linux/alpha/libc.abilist (GLIBC_2.27): Add
getrlimit, setrlimit, getrlimit64 and setrlimit64.
* sysdeps/unix/sysv/linux/alpha/Versions (libc): Add getrlimit,
setrlimit, getrlimit64 and setrlimit64.
2018-01-05 19:34:10 +00:00
|
|
|
# define RLIM_INFINITY 0xffffffffffffffffuLL
|
1999-12-19 00:02:03 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef __USE_LARGEFILE64
|
Alpha: Fix the RLIM_INFINITY and RLIM64_INFINITY constants
Fix the RLIM_INFINITY and RLIM64_INFINITY constants on alpha to match
the kernel one and all other architectures. Change the getrlimit,
getrlimit64, setrlimit, setrlimit64 into old compat symbols, and provide
the Linux generic functions as GLIBC_2_27 version.
Changelog:
* sysdeps/unix/sysv/linux/getrlimit64.c [USE_VERSIONED_RLIMIT]: Do not
define getrlimit and getrlimit64 as weak aliases of __getrlimit64.
Define __GI_getrlimit64 as weak alias of __getrlimit64.
[__RLIM_T_MATCHES_RLIM64_T]: Do not redefine SHLIB_COMPAT, use #elif
instead.
* sysdeps/unix/sysv/linux/setrlimit64.c [USE_VERSIONED_RLIMIT]: Do not
define setrlimit and setrlimit64 as weak aliases of __setrlimit64.
* sysdeps/unix/sysv/linux/alpha/bits/resource.h (RLIM_INFINITY,
RLIM64_INFINITY): Fix values to match the kernel ones.
* sysdeps/unix/sysv/linux/alpha/getrlimit64.c: Define
USE_VERSIONED_RLIMIT. Rename __getrlimit64 into __old_getrlimit64 and
provide it as getrlimit@@GLIBC_2_0 and getrlimit64@@GLIBC_2_1. Add a
__getrlimit64 function and provide it as getrlimit@@GLIBC_2_27 and
getrlimit64@@GLIBC_2_27.
* sysdeps/unix/sysv/linux/alpha/setrlimit64.c: Ditto with setrlimit
and setrlimit64.
* sysdeps/unix/sysv/linux/alpha/libc.abilist (GLIBC_2.27): Add
getrlimit, setrlimit, getrlimit64 and setrlimit64.
* sysdeps/unix/sysv/linux/alpha/Versions (libc): Add getrlimit,
setrlimit, getrlimit64 and setrlimit64.
2018-01-05 19:34:10 +00:00
|
|
|
# define RLIM64_INFINITY 0xffffffffffffffffuLL
|
1999-12-19 00:02:03 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* We can represent all limits. */
|
|
|
|
#define RLIM_SAVED_MAX RLIM_INFINITY
|
|
|
|
#define RLIM_SAVED_CUR RLIM_INFINITY
|
|
|
|
|
|
|
|
|
|
|
|
/* Type for resource quantity measurement. */
|
|
|
|
#ifndef __USE_FILE_OFFSET64
|
|
|
|
typedef __rlim_t rlim_t;
|
|
|
|
#else
|
|
|
|
typedef __rlim64_t rlim_t;
|
|
|
|
#endif
|
|
|
|
#ifdef __USE_LARGEFILE64
|
|
|
|
typedef __rlim64_t rlim64_t;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
struct rlimit
|
|
|
|
{
|
|
|
|
/* The current (soft) limit. */
|
|
|
|
rlim_t rlim_cur;
|
|
|
|
/* The hard limit. */
|
|
|
|
rlim_t rlim_max;
|
|
|
|
};
|
|
|
|
|
|
|
|
#ifdef __USE_LARGEFILE64
|
|
|
|
struct rlimit64
|
|
|
|
{
|
|
|
|
/* The current (soft) limit. */
|
|
|
|
rlim64_t rlim_cur;
|
|
|
|
/* The hard limit. */
|
|
|
|
rlim64_t rlim_max;
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Whose usage statistics do you want? */
|
|
|
|
enum __rusage_who
|
|
|
|
{
|
|
|
|
/* The calling process. */
|
|
|
|
RUSAGE_SELF = 0,
|
|
|
|
#define RUSAGE_SELF RUSAGE_SELF
|
|
|
|
|
|
|
|
/* All of its terminated child processes. */
|
2012-06-15 19:01:39 +00:00
|
|
|
RUSAGE_CHILDREN = -1
|
1999-12-19 00:02:03 +00:00
|
|
|
#define RUSAGE_CHILDREN RUSAGE_CHILDREN
|
2008-05-01 05:37:45 +00:00
|
|
|
|
|
|
|
#ifdef __USE_GNU
|
2012-06-15 19:01:39 +00:00
|
|
|
,
|
2008-05-01 05:37:45 +00:00
|
|
|
/* The calling thread. */
|
|
|
|
RUSAGE_THREAD = 1
|
|
|
|
# define RUSAGE_THREAD RUSAGE_THREAD
|
|
|
|
/* Name for the same functionality on Solaris. */
|
|
|
|
# define RUSAGE_LWP RUSAGE_THREAD
|
|
|
|
#endif
|
1999-12-19 00:02:03 +00:00
|
|
|
};
|
|
|
|
|
Installed-header hygiene (BZ#20366): time.h types.
Many headers are expected to expose a subset of the type definitions
in time.h. time.h has a whole bunch of messy logic for conditionally
defining some its types and structs, but, as best I can tell, this
has never worked 100%. In particular, __need_timespec is ineffective
if _TIME_H has already been defined, which means that if you compile
#include <time.h>
#include <sched.h>
with e.g. -fsyntax-only -std=c89 -Wall -Wsystem-headers, you will get
In file included from test.c:2:0:
/usr/include/sched.h:74:57: warning: "struct timespec" declared inside
parameter list will not be visible outside of this definition or declaration
extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW;
^~~~~~~~
And if you want to _use_ sched_rr_get_interval in a TU compiled that
way, you're hosed.
This patch replaces all of that with small bits/types/TYPE.h headers
as introduced earlier. time.h and bits/time.h are now *much* simpler,
and a lot of other headers are slightly simpler.
* time/time.h, bits/time.h, sysdeps/unix/sysv/linux/bits/time.h:
Remove all logic conditional on __need macros. Move all the
conditionally defined types to their own headers...
* time/bits/types/clock_t.h: Define clock_t here.
* time/bits/types/clockid_t.h: Define clockid_t here.
* time/bits/types/struct_itimerspec.h: Define struct itimerspec here.
* time/bits/types/struct_timespec.h: Define struct timespec here.
* time/bits/types/struct_timeval.h: Define struct timeval here.
* time/bits/types/struct_tm.h: Define struct tm here.
* time/bits/types/time_t.h: Define time_t here.
* time/bits/types/timer_t.h: Define timer_t here.
* time/Makefile: Install the new headers.
* bits/resource.h, io/fcntl.h, io/sys/poll.h, io/sys/stat.h
* io/utime.h, misc/sys/select.h, posix/sched.h, posix/sys/times.h
* posix/sys/types.h, resolv/netdb.h, rt/aio.h, rt/mqueue.h
* signal/signal.h, pthread/semaphore.h, sysdeps/nptl/pthread.h
* sysdeps/unix/sysv/linux/alpha/bits/resource.h
* sysdeps/unix/sysv/linux/alpha/sys/acct.h
* sysdeps/unix/sysv/linux/bits/resource.h
* sysdeps/unix/sysv/linux/bits/timex.h
* sysdeps/unix/sysv/linux/mips/bits/resource.h
* sysdeps/unix/sysv/linux/net/ppp_defs.h
* sysdeps/unix/sysv/linux/sparc/bits/resource.h
* sysdeps/unix/sysv/linux/sys/acct.h
* sysdeps/unix/sysv/linux/sys/timerfd.h
* sysvipc/sys/msg.h, sysvipc/sys/sem.h, sysvipc/sys/shm.h
* time/sys/time.h, time/sys/timeb.h
Use the new bits/types headers.
* include/time.h: Remove __need logic.
* include/bits/time.h
* include/bits/types/clock_t.h, include/bits/types/clockid_t.h
* include/bits/types/time_t.h, include/bits/types/timer_t.h
* include/bits/types/struct_itimerspec.h
* include/bits/types/struct_timespec.h
* include/bits/types/struct_timeval.h
* include/bits/types/struct_tm.h:
New wrapper headers.
2016-08-24 15:54:34 +00:00
|
|
|
#include <bits/types/struct_timeval.h>
|
2017-06-19 11:59:19 +00:00
|
|
|
#include <bits/types/struct_rusage.h>
|
1999-12-19 00:02:03 +00:00
|
|
|
|
|
|
|
/* Priority limits. */
|
|
|
|
#define PRIO_MIN -20 /* Minimum priority a process can have. */
|
|
|
|
#define PRIO_MAX 20 /* Maximum priority a process can have. */
|
|
|
|
|
|
|
|
/* The type of the WHICH argument to `getpriority' and `setpriority',
|
|
|
|
indicating what flavor of entity the WHO argument specifies. */
|
|
|
|
enum __priority_which
|
|
|
|
{
|
|
|
|
PRIO_PROCESS = 0, /* WHO is a process ID. */
|
|
|
|
#define PRIO_PROCESS PRIO_PROCESS
|
|
|
|
PRIO_PGRP = 1, /* WHO is a process group ID. */
|
|
|
|
#define PRIO_PGRP PRIO_PGRP
|
|
|
|
PRIO_USER = 2 /* WHO is a user ID. */
|
|
|
|
#define PRIO_USER PRIO_USER
|
|
|
|
};
|
2012-06-15 19:01:39 +00:00
|
|
|
|
|
|
|
|
|
|
|
__BEGIN_DECLS
|
|
|
|
|
|
|
|
#ifdef __USE_GNU
|
|
|
|
/* Modify and return resource limits of a process atomically. */
|
|
|
|
# ifndef __USE_FILE_OFFSET64
|
|
|
|
extern int prlimit (__pid_t __pid, enum __rlimit_resource __resource,
|
|
|
|
const struct rlimit *__new_limit,
|
|
|
|
struct rlimit *__old_limit) __THROW;
|
|
|
|
# else
|
|
|
|
# ifdef __REDIRECT_NTH
|
|
|
|
extern int __REDIRECT_NTH (prlimit, (__pid_t __pid,
|
|
|
|
enum __rlimit_resource __resource,
|
|
|
|
const struct rlimit *__new_limit,
|
|
|
|
struct rlimit *__old_limit), prlimit64);
|
|
|
|
# else
|
|
|
|
# define prlimit prlimit64
|
|
|
|
# endif
|
|
|
|
# endif
|
|
|
|
# ifdef __USE_LARGEFILE64
|
|
|
|
extern int prlimit64 (__pid_t __pid, enum __rlimit_resource __resource,
|
|
|
|
const struct rlimit64 *__new_limit,
|
|
|
|
struct rlimit64 *__old_limit) __THROW;
|
|
|
|
# endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
__END_DECLS
|