Fix bits/socket.h SIOCGSTAMP* namespace issues

Message ID 1560395203-6944-1-git-send-email-vincentc@andestech.com
State New
Headers show
Series
  • Fix bits/socket.h SIOCGSTAMP* namespace issues
Related show

Commit Message

Vincent Chen June 13, 2019, 3:06 a.m.
Macro SIOCGSTAMP_OLD and SIOCGSTAMPNS_OLD are added to asm/socket.h in
Linux 5.1 for 64-bit timestamps implementation.

sysdeps/unix/sysv/linux/bits/socket.h includes asm/socket.h. That
includes asm/sockios.h resulting in namespace violations from
SIOCGSTAMP_OLD and SIOCGSTAMPNS_OLD macros. Add these two macros to
workaound list in sysdeps/unix/sysv/linux/bits/socket.h like other
macros in asm/sockios.h.

Tested (compilation only) with build-many-glibcs.py.

        * sysdeps/unix/sysv/linux/bits/socket.h (SIOCGSTAMP_OLD): Undefine
        if defined by <asm/socket.h> and not previously defined.
        (SIOCGSTAMPNS_OLD): Likewise.
---
 ChangeLog                             |  6 ++++++
 sysdeps/unix/sysv/linux/bits/socket.h | 14 ++++++++++++++
 2 files changed, 20 insertions(+)

-- 
1.9.5

Comments

Florian Weimer June 13, 2019, 8:41 a.m. | #1
* Vincent Chen:

> Macro SIOCGSTAMP_OLD and SIOCGSTAMPNS_OLD are added to asm/socket.h in

> Linux 5.1 for 64-bit timestamps implementation.

>

> sysdeps/unix/sysv/linux/bits/socket.h includes asm/socket.h. That

> includes asm/sockios.h resulting in namespace violations from

> SIOCGSTAMP_OLD and SIOCGSTAMPNS_OLD macros. Add these two macros to

> workaound list in sysdeps/unix/sysv/linux/bits/socket.h like other

> macros in asm/sockios.h.


I wonder if it is time to copy the definitions we need for !_GNU_SOURCE
into the glibc source tree.  It would also address the recent namespace
cleanliness issue.  Only some architectures (alpha, mips, hppa, powerpc,
sparc) have custom definitions in the UAPI headers, it seems.  For
_GNU_SOURCE, we would still include <asm/socket.h>.

Or am I totally off about this and it doesn't make sense?

Would you want to work on this?  It requires a reasonably fast machine
for running build-many-glibcs.py.

Thanks,
Florian
Vincent Chen June 14, 2019, 8:28 a.m. | #2
On Thu, Jun 13, 2019 at 04:41:13PM +0800, Florian Weimer wrote:
> * Vincent Chen:

> 

> > Macro SIOCGSTAMP_OLD and SIOCGSTAMPNS_OLD are added to asm/socket.h in

> > Linux 5.1 for 64-bit timestamps implementation.

> >

> > sysdeps/unix/sysv/linux/bits/socket.h includes asm/socket.h. That

> > includes asm/sockios.h resulting in namespace violations from

> > SIOCGSTAMP_OLD and SIOCGSTAMPNS_OLD macros. Add these two macros to

> > workaound list in sysdeps/unix/sysv/linux/bits/socket.h like other

> > macros in asm/sockios.h.

> 

> I wonder if it is time to copy the definitions we need for !_GNU_SOURCE

> into the glibc source tree.  It would also address the recent namespace

> cleanliness issue.  Only some architectures (alpha, mips, hppa, powerpc,

> sparc) have custom definitions in the UAPI headers, it seems.  For

> _GNU_SOURCE, we would still include <asm/socket.h>.

> 

> Or am I totally off about this and it doesn't make sense?


I think your concerns are reasonable.

> Would you want to work on this?  It requires a reasonably fast machine

> for running build-many-glibcs.py.

>

Currently, I do not have enough resource to do this.
Hence, If anyone wants to work on this, I will be very grateful.


Thanks,
Vincent Chen

Patch

diff --git a/ChangeLog b/ChangeLog
index 2afedc1..63ed2ed 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@ 
+2019-06-13  Vincent Chen  <vincentc@andestech.com>
+
+	* sysdeps/unix/sysv/linux/bits/socket.h (SIOCGSTAMP_OLD): Undefine
+	if defined by <asm/socket.h> and not previously defined.
+	(SIOCGSTAMPNS_OLD): Likewise.
+
 2019-06-12  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
 	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile
diff --git a/sysdeps/unix/sysv/linux/bits/socket.h b/sysdeps/unix/sysv/linux/bits/socket.h
index 99af01d..4e5d58a 100644
--- a/sysdeps/unix/sysv/linux/bits/socket.h
+++ b/sysdeps/unix/sysv/linux/bits/socket.h
@@ -372,6 +372,12 @@  struct ucred
 # ifndef SIOCSPGRP
 #  define __SYS_SOCKET_H_undef_SIOCSPGRP
 # endif
+# ifndef SIOCGSTAMP_OLD
+#  define __SYS_SOCKET_H_undef_SIOCGSTAMP_OLD
+# endif
+# ifndef SIOCGSTAMPNS_OLD
+#  define __SYS_SOCKET_H_undef_SIOCGSTAMPNS_OLD
+# endif
 #endif
 #ifndef IOCSIZE_MASK
 # define __SYS_SOCKET_H_undef_IOCSIZE_MASK
@@ -421,6 +427,14 @@  struct ucred
 #  undef __SYS_SOCKET_H_undef_SIOCSPGRP
 #  undef SIOCSPGRP
 # endif
+# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMP_OLD
+#  undef __SYS_SOCKET_H_undef_SIOCGSTAMP_OLD
+#  undef SIOCGSTAMP_OLD
+# endif
+# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMPNS_OLD
+#  undef __SYS_SOCKET_H_undef_SIOCGSTAMPNS_OLD
+#  undef SIOCGSTAMPNS_OLD
+# endif
 #endif
 #ifdef __SYS_SOCKET_H_undef_IOCSIZE_MASK
 # undef __SYS_SOCKET_H_undef_IOCSIZE_MASK