This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: PATCH [3/n]: Add __snseconds_t and __SNSECONDS_T_TYPE
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Roland McGrath <roland at hack dot frob dot com>
- Cc: "H.J. Lu" <hongjiu dot lu at intel dot com>, GNU C Library <libc-alpha at sourceware dot org>
- Date: Thu, 15 Mar 2012 13:26:41 -0700
- Subject: Re: PATCH [3/n]: Add __snseconds_t and __SNSECONDS_T_TYPE
- References: <20120315192515.GA6585@intel.com><20120315195000.7E3BE2C0A3@topped-with-meat.com>
On Thu, Mar 15, 2012 at 12:50 PM, Roland McGrath <roland@hack.frob.com> wrote:
>> Linux/x32 uses long long for time_t. timespec has
>>
>> struct timespec
>> ? {
>> ? ? __time_t tv_sec; ? ? ? ? ?/* Seconds. ?*/
>> ? ? long int tv_nsec; ? ? ? ? /* Nanoseconds. ?*/
>> ? };
>>
>> Linux/x32 uses the same timespec as x86-64 inside kernel. That means
>> tv_nsec must also be 64bit for Linux/x32. However, we don't have
>> __snseconds_t. ?This patch defines time_t to 64bit and adds __snseconds_t
>> similar to __suseconds_t.
>
> That's fine, but it's its own one change to start using that and
> a separate change to add sysdeps/unix/sysv/linux/x86_64/bits/typesizes.h
> afterwards.
Here is a patch just to add __snseconds_t.
>> This patch defines __SSYSCALL_LONG_TYPE and __USYSCALL_LONG_TYPE to
>
> That doesn't belong in the __snseconds_t patch.
>
>> struct ipc_perm
>> ? {
>> ? ? __key_t __key; ? ? ? ? ? ? ? ? ? ?/* Key. ?*/
>> ? ? __uid_t uid; ? ? ? ? ? ? ? ? ? ? ?/* Owner's user ID. ?*/
>> ? ? __gid_t gid; ? ? ? ? ? ? ? ? ? ? ?/* Owner's group ID. ?*/
>> ? ? __uid_t cuid; ? ? ? ? ? ? ? ? ? ? /* Creator's user ID. ?*/
>> ? ? __gid_t cgid; ? ? ? ? ? ? ? ? ? ? /* Creator's group ID. ?*/
>> ? ? unsigned short int mode; ? ? ? ? ?/* Read/write permission. ?*/
>> ? ? unsigned short int __pad1;
>> ? ? unsigned short int __seq; ? ? ? ? /* Sequence number. ?*/
>> ? ? unsigned short int __pad2;
>> ? ? __USYSCALL_LONG_TYPE __unused1;
>> ? ? __USYSCALL_LONG_TYPE __unused2;
>> ? };
>
> Definitions like this shouldn't use __*_TYPE macros at all.
> They should use typedefs instead.
>
I will add __ssyscall_long_t and __usyscall_long_t in a separate
patch.
Thanks.
--
H.J.
----
2012-03-15 H.J. Lu <hongjiu.lu@intel.com>
* bits/types.h (__snseconds_t): New.
* bits/typesizes.h (__SNSECONDS_T_TYPE): Likewise.
* sysdeps/unix/bsd/bsd4.4/freebsd/bits/typesizes.h (__SNSECONDS_T_TYPE):
Likewise.
* sysdeps/unix/sysv/linux/s390/bits/typesizes.h (__SNSECONDS_T_TYPE):
Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/typesizes.h (__SNSECONDS_T_TYPE):
Likewise.
* time/time.h (timespec): Use __snseconds_t on tv_nsec.
2012-03-15 H.J. Lu <hongjiu.lu@intel.com>
* bits/types.h (__snseconds_t): New.
* bits/typesizes.h (__SNSECONDS_T_TYPE): Likewise.
* sysdeps/unix/bsd/bsd4.4/freebsd/bits/typesizes.h (__SNSECONDS_T_TYPE):
Likewise.
* sysdeps/unix/sysv/linux/s390/bits/typesizes.h (__SNSECONDS_T_TYPE):
Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/typesizes.h (__SNSECONDS_T_TYPE):
Likewise.
* time/time.h (timespec): Use __snseconds_t on tv_nsec.
diff --git a/bits/types.h b/bits/types.h
index a9bf0ad..ae79a6f 100644
--- a/bits/types.h
+++ b/bits/types.h
@@ -148,6 +148,7 @@ __STD_TYPE __ID_T_TYPE __id_t; /* General type for IDs. */
__STD_TYPE __TIME_T_TYPE __time_t; /* Seconds since the Epoch. */
__STD_TYPE __USECONDS_T_TYPE __useconds_t; /* Count of microseconds. */
__STD_TYPE __SUSECONDS_T_TYPE __suseconds_t; /* Signed count of microseconds. */
+__STD_TYPE __SNSECONDS_T_TYPE __snseconds_t; /* Signed count of nanoseconds. */
__STD_TYPE __DADDR_T_TYPE __daddr_t; /* The type of a disk address. */
__STD_TYPE __SWBLK_T_TYPE __swblk_t; /* Type of a swap block maybe? */
diff --git a/bits/typesizes.h b/bits/typesizes.h
index e1c5a27..abd9fbe 100644
--- a/bits/typesizes.h
+++ b/bits/typesizes.h
@@ -1,5 +1,6 @@
/* bits/typesizes.h -- underlying types for *_t. Generic version.
- Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2011
+ 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
@@ -57,6 +58,7 @@
#define __BLKSIZE_T_TYPE __SLONGWORD_TYPE
#define __FSID_T_TYPE struct { int __val[2]; }
#define __SSIZE_T_TYPE __SWORD_TYPE
+#define __SNSECONDS_T_TYPE __SLONGWORD_TYPE
/* Number of descriptors that can fit in an `fd_set'. */
#define __FD_SETSIZE 1024
diff --git a/sysdeps/mach/hurd/bits/typesizes.h b/sysdeps/mach/hurd/bits/typesizes.h
index 7bde5d5..bca63ed 100644
--- a/sysdeps/mach/hurd/bits/typesizes.h
+++ b/sysdeps/mach/hurd/bits/typesizes.h
@@ -57,6 +57,7 @@
#define __BLKSIZE_T_TYPE __SLONGWORD_TYPE
#define __FSID_T_TYPE __UQUAD_TYPE
#define __SSIZE_T_TYPE __SWORD_TYPE
+#define __SNSECONDS_T_TYPE __SLONGWORD_TYPE
/* Number of descriptors that can fit in an `fd_set'. */
#define __FD_SETSIZE 256
diff --git a/sysdeps/unix/bsd/bsd4.4/freebsd/bits/typesizes.h b/sysdeps/unix/bsd/bsd4.4/freebsd/bits/typesizes.h
index 6703473..1c763c2 100644
--- a/sysdeps/unix/bsd/bsd4.4/freebsd/bits/typesizes.h
+++ b/sysdeps/unix/bsd/bsd4.4/freebsd/bits/typesizes.h
@@ -57,6 +57,7 @@
#define __BLKSIZE_T_TYPE __U32_TYPE
#define __FSID_T_TYPE struct { int __val[2]; }
#define __SSIZE_T_TYPE __SWORD_TYPE
+#define __SNSECONDS_T_TYPE __SLONGWORD_TYPE
/* Number of descriptors that can fit in an `fd_set'. */
#define __FD_SETSIZE 1024
diff --git a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
index ee85531..af7021f 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
@@ -63,6 +63,7 @@
/* size_t is unsigned long int on s390 -m31. */
#define __SSIZE_T_TYPE __SLONGWORD_TYPE
#endif
+#define __SNSECONDS_T_TYPE __SLONGWORD_TYPE
/* Number of descriptors that can fit in an `fd_set'. */
#define __FD_SETSIZE 1024
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h b/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
index 37b7656..bba82b3 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
@@ -57,6 +57,7 @@
#define __BLKSIZE_T_TYPE __SLONGWORD_TYPE
#define __FSID_T_TYPE struct { int __val[2]; }
#define __SSIZE_T_TYPE __SWORD_TYPE
+#define __SNSECONDS_T_TYPE __SLONGWORD_TYPE
/* Number of descriptors that can fit in an `fd_set'. */
#define __FD_SETSIZE 1024
diff --git a/time/time.h b/time/time.h
index 775c092..776dc40 100644
--- a/time/time.h
+++ b/time/time.h
@@ -120,7 +120,7 @@ typedef __timer_t timer_t;
struct timespec
{
__time_t tv_sec; /* Seconds. */
- long int tv_nsec; /* Nanoseconds. */
+ __snseconds_t tv_nsec; /* Nanoseconds. */
};
#endif /* timespec not defined and <time.h> or need timespec. */
--
1.7.6.5