From 5e1a27a96de16ad0cd67a81e25741790b32e2c25 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 22 May 2012 05:32:34 -0700 Subject: Pad each field to __syscall_slong_t in struct rusage --- ChangeLog | 7 +++ sysdeps/unix/sysv/linux/bits/resource.h | 95 +++++++++++++++++++++++++++------ 2 files changed, 85 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index caa476e7f9..f1921def94 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2012-05-22 H.J. Lu + + * sysdeps/unix/sysv/linux/bits/resource.h (RLIM_INFINITY): Use + __rlim_t cast. + (struct rusage): Use anonymous union to pad each field to + __syscall_slong_t. + 2012-05-21 David S. Miller * Makefules (o-iterator): Remove .s cases. diff --git a/sysdeps/unix/sysv/linux/bits/resource.h b/sysdeps/unix/sysv/linux/bits/resource.h index be852e5247..62cb257410 100644 --- a/sysdeps/unix/sysv/linux/bits/resource.h +++ b/sysdeps/unix/sysv/linux/bits/resource.h @@ -1,6 +1,5 @@ /* Bit values & structures for resource limits. Linux version. - Copyright (C) 1994, 1996-2000, 2004, 2005, 2008, 2009, 2010, 2011, 2012 - Free Software Foundation, Inc. + Copyright (C) 1994-2012 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 @@ -113,7 +112,7 @@ enum __rlimit_resource /* Value to indicate that there is no limit. */ #ifndef __USE_FILE_OFFSET64 -# define RLIM_INFINITY ((unsigned long int)(~0UL)) +# define RLIM_INFINITY ((__rlim_t) -1) #else # define RLIM_INFINITY 0xffffffffffffffffuLL #endif @@ -180,6 +179,11 @@ enum __rusage_who #include /* For `struct timeval'. */ /* Structure which says how much of each resource has been used. */ + +/* The purpose of all the unions is to have the kernel-compatible layout + while keeping the API type as 'long int', and among machines where + __syscall_slong_t is not 'long int', this only does the right thing + for little-endian ones, like x32. */ struct rusage { /* Total amount of user time used. */ @@ -187,39 +191,96 @@ struct rusage /* Total amount of system time used. */ struct timeval ru_stime; /* Maximum resident set size (in kilobytes). */ - long int ru_maxrss; + __extension__ union + { + long int ru_maxrss; + __syscall_slong_t __ru_maxrss_word; + }; /* Amount of sharing of text segment memory with other processes (kilobyte-seconds). */ - long int ru_ixrss; + /* Maximum resident set size (in kilobytes). */ + __extension__ union + { + long int ru_ixrss; + __syscall_slong_t __ru_ixrss_word; + }; /* Amount of data segment memory used (kilobyte-seconds). */ - long int ru_idrss; + __extension__ union + { + long int ru_idrss; + __syscall_slong_t __ru_idrss_word; + }; /* Amount of stack memory used (kilobyte-seconds). */ - long int ru_isrss; + __extension__ union + { + long int ru_isrss; + __syscall_slong_t __ru_isrss_word; + }; /* Number of soft page faults (i.e. those serviced by reclaiming a page from the list of pages awaiting reallocation. */ - long int ru_minflt; + __extension__ union + { + long int ru_minflt; + __syscall_slong_t __ru_minflt_word; + }; /* Number of hard page faults (i.e. those that required I/O). */ - long int ru_majflt; + __extension__ union + { + long int ru_majflt; + __syscall_slong_t __ru_majflt_word; + }; /* Number of times a process was swapped out of physical memory. */ - long int ru_nswap; + __extension__ union + { + long int ru_nswap; + __syscall_slong_t __ru_nswap_word; + }; /* Number of input operations via the file system. Note: This and `ru_oublock' do not include operations with the cache. */ - long int ru_inblock; + __extension__ union + { + long int ru_inblock; + __syscall_slong_t __ru_inblock_word; + }; /* Number of output operations via the file system. */ - long int ru_oublock; + __extension__ union + { + long int ru_oublock; + __syscall_slong_t __ru_oublock_word; + }; /* Number of IPC messages sent. */ - long int ru_msgsnd; + __extension__ union + { + long int ru_msgsnd; + __syscall_slong_t __ru_msgsnd_word; + }; /* Number of IPC messages received. */ - long int ru_msgrcv; + __extension__ union + { + long int ru_msgrcv; + __syscall_slong_t __ru_msgrcv_word; + }; /* Number of signals delivered. */ - long int ru_nsignals; + __extension__ union + { + long int ru_nsignals; + __syscall_slong_t __ru_nsignals_word; + }; /* Number of voluntary context switches, i.e. because the process gave up the process before it had to (usually to wait for some resource to be available). */ - long int ru_nvcsw; + __extension__ union + { + long int ru_nvcsw; + __syscall_slong_t __ru_nvcsw_word; + }; /* Number of involuntary context switches, i.e. a higher priority process became runnable or the current process used up its time slice. */ - long int ru_nivcsw; + __extension__ union + { + long int ru_nivcsw; + __syscall_slong_t __ru_nivcsw_word; + }; }; /* Priority limits. */ -- cgit 1.4.1