public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: libc-alpha@sourceware.org,
	Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>,
	Florian Weimer <fweimer@redhat.com>
Subject: Re: [PATCH] Fix building tst-socket-timestamp-compat on older Linux
Date: Mon, 14 Feb 2022 10:08:51 -0300	[thread overview]
Message-ID: <66ae3a9f-0002-2942-d100-db184fca9ab9@linaro.org> (raw)
In-Reply-To: <87czjtqdz1.fsf@oldenburg.str.redhat.com>



On 11/02/2022 18:40, Florian Weimer via Libc-alpha wrote:
> * Tulio Magno Quites Machado Filho:
> 
>> Florian Weimer via Libc-alpha <libc-alpha@sourceware.org> writes:
>>
>>> * Tulio Magno Quites Machado Filho via Libc-alpha:
>>>
>>>> diff --git a/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c b/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c
>>>> index 0ff1a214e6..68b0a0e412 100644
>>>> --- a/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c
>>>> +++ b/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c
>>>> @@ -23,6 +23,23 @@
>>>>  #include <support/xunistd.h>
>>>>  #include <stdbool.h>
>>>>  
>>>> +/* The following macros are only available on ABIs that support 32 bit time_t.
>>>> +   This test has a runtime check to guarantee it runs only on these ABIs.
>>>> +   However, we need to create fake values to guarantee this test is built
>>>> +   for all the ABIs.  */
>>>
>>> Isn't this related to the kernel header version, and not just time32
>>> support?
>>
>> The runtime test does depend on the kernel header version because it depends
>> on the time_t size.
>> However, the definition of these macros depends only on the value of
>> __TIMESIZE, which doesn't depend on the kernel header [1].
>>
>> [1] https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/powerpc/bits/socket-constants.h;hb=HEAD#l50
> 
> What I meant is this: I see the same build failure on aarch64 with our
> 4.18-derived headers, but not with our 5.14-derived headers.  This is on
> the same architecture, so it can't be glibc's time32 support state.

There are two issue in fact, one is that socket-constants.h is only included
for !__USE_MISC, which is then disable for _DEFAULT_SOURCE (enabled with
_GNU_SOURCE).  The another issue is socket-constants.h only defines
the *_OLD and *_NEW variant in some cases, different than kernel header.

I think we should always include socket-constants.h, only define the values
if there are not already defined by the kernel headers, and always define
the *_OLD and *_NEW constants.  Something like the below (it requires to
adapt to other arch-specific socket-constants.h as well).

> 
> Hmm, or is it that ILP32 aarch64 support was upstreamed between the two
> kernel releases?
> 
No and most likely it will never will.

--

diff --git a/sysdeps/unix/sysv/linux/bits/socket-constants.h b/sysdeps/unix/sysv/linux/bits/socket-constants.h
index cbbc2665b2..3ffc2cb9fa 100644
--- a/sysdeps/unix/sysv/linux/bits/socket-constants.h
+++ b/sysdeps/unix/sysv/linux/bits/socket-constants.h
@@ -22,60 +22,118 @@
 
 #include <bits/timesize.h>
 
-#define SOL_SOCKET 1
-#define SO_ACCEPTCONN 30
-#define SO_BROADCAST 6
-#define SO_DONTROUTE 5
-#define SO_ERROR 4
-#define SO_KEEPALIVE 9
-#define SO_LINGER 13
-#define SO_OOBINLINE 10
-#define SO_RCVBUF 8
-#define SO_RCVLOWAT 18
-#define SO_REUSEADDR 2
-#define SO_SNDBUF 7
-#define SO_SNDLOWAT 19
-#define SO_TYPE 3
+#ifndef SOL_SOCKET
+# define SOL_SOCKET 1
+#endif
+#ifndef SO_ACCEPTCONN
+# define SO_ACCEPTCONN 30
+#endif
+#ifndef SO_BROADCAST
+# define SO_BROADCAST 6
+#endif
+#ifndef SO_DONTROUTE
+# define SO_DONTROUTE 5
+#endif
+#ifdef SO_ERROR
+# define SO_ERROR 4
+#endif
+#ifndef SO_KEEPALIVE
+# define SO_KEEPALIVE 9
+#endif
+#ifndef SO_LINGER
+# define SO_LINGER 13
+#endif
+#ifndef SO_OOBINLINE
+# define SO_OOBINLINE 10
+#endif
+#ifndef SO_RCVBUF
+# define SO_RCVBUF 8
+#endif
+#ifndef SO_RCVLOWAT
+# define SO_RCVLOWAT 18
+#endif
+#ifndef SO_REUSEADDR
+# define SO_REUSEADDR 2
+#endif
+#ifndef SO_SNDBUF
+# define SO_SNDBUF 7
+#endif
+#ifndef SO_SNDLOWAT
+# define SO_SNDLOWAT 19
+#endif
+#ifndef SO_TYPE
+# define SO_TYPE 3
+#endif
+
+#ifndef SO_RCVTIMEO_OLD
+# define SO_RCVTIMEO_OLD 20
+#endif
+#ifndef SO_SNDTIMEO_OLD
+# define SO_SNDTIMEO_OLD 21
+#endif
+#ifndef SO_RCVTIMEO_NEW
+# define SO_RCVTIMEO_NEW 66
+#endif
+#ifndef SO_SNDTIMEO_NEW
+# define SO_SNDTIMEO_NEW 67
+#endif
+
+#ifndef SO_TIMESTAMP_OLD
+# define SO_TIMESTAMP_OLD 29
+#endif
+#ifndef SO_TIMESTAMPNS_OLD
+# define SO_TIMESTAMPNS_OLD 35
+#endif
+#ifndef SO_TIMESTAMPING_OLD
+# define SO_TIMESTAMPING_OLD 37
+#endif
+
+#ifndef SO_TIMESTAMP_NEW
+# define SO_TIMESTAMP_NEW 63
+#endif
+#ifndef SO_TIMESTAMPNS_NEW
+# define SO_TIMESTAMPNS_NEW 64
+#endif
+#ifndef SO_TIMESTAMPING_NEW
+# define SO_TIMESTAMPING_NEW 65
+#endif
 
 #if (__TIMESIZE == 64 && __WORDSIZE == 32 \
      && (!defined __SYSCALL_WORDSIZE || __SYSCALL_WORDSIZE == 32))
-# define SO_RCVTIMEO 66
-# define SO_SNDTIMEO 67
-# define SO_TIMESTAMP 63
-# define SO_TIMESTAMPNS 64
-# define SO_TIMESTAMPING 65
+# ifndef SO_RCVTIMEO
+#  define SO_RCVTIMEO SO_RCVTIMEO_NEW
+# endif
+# ifndef SO_SNDTIMEO
+#  define SO_SNDTIMEO SO_SNDTIMEO_NEW
+# endif
+# ifndef SO_TIMESTAMP
+#  define SO_TIMESTAMP SO_TIMESTAMP_NEW
+# endif
+# ifndef SO_TIMESTAMPNS
+#  define SO_TIMESTAMPNS SO_TIMESTAMPNS_NEW
+# endif
+# ifndef SO_TIMESTAMPING
+#  define SO_TIMESTAMPING SO_TIMESTAMPING_NEW
+# endif
 #else
-# if __TIMESIZE == 64
-#  define SO_RCVTIMEO 20
-#  define SO_SNDTIMEO 21
-#  define SO_TIMESTAMP 29
-#  define SO_TIMESTAMPNS 35
-#  define SO_TIMESTAMPING 37
-# else
-#  define SO_RCVTIMEO_OLD 20
-#  define SO_SNDTIMEO_OLD 21
-#  define SO_RCVTIMEO_NEW 66
-#  define SO_SNDTIMEO_NEW 67
-
-#  define SO_TIMESTAMP_OLD 29
-#  define SO_TIMESTAMPNS_OLD 35
-#  define SO_TIMESTAMPING_OLD 37
-#  define SO_TIMESTAMP_NEW 63
-#  define SO_TIMESTAMPNS_NEW 64
-#  define SO_TIMESTAMPING_NEW 65
-
-#  ifdef __USE_TIME_BITS64
-#   define SO_RCVTIMEO SO_RCVTIMEO_NEW
-#   define SO_SNDTIMEO SO_SNDTIMEO_NEW
-#   define SO_TIMESTAMP SO_TIMESTAMP_NEW
-#   define SO_TIMESTAMPNS SO_TIMESTAMPNS_NEW
-#   define SO_TIMESTAMPING SO_TIMESTAMPING_NEW
-#  else
-#   define SO_RCVTIMEO SO_RCVTIMEO_OLD
-#   define SO_SNDTIMEO SO_SNDTIMEO_OLD
-#   define SO_TIMESTAMP SO_TIMESTAMP_OLD
-#   define SO_TIMESTAMPNS SO_TIMESTAMPNS_OLD
-#   define SO_TIMESTAMPING SO_TIMESTAMPING_OLD
-#  endif
+# ifndef SO_RCVTIMEO
+#  define SO_RCVTIMEO (sizeof(time_t) == sizeof(__time_t) \
+		       ? SO_RCVTIMEO_OLD : SO_RCVTIMEO_NEW)
+# endif
+# ifndef SO_SNDTIMEO
+#  define SO_SNDTIMEO (sizeof(time_t) == sizeof(__time_t) \
+		       ? SO_SNDTIMEO_OLD : SO_SNDTIMEO_NEW)
+# endif
+# ifndef SO_TIMESTAMP
+#  define SO_TIMESTAMP (sizeof(time_t) == sizeof(__time_t) \
+			? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)
+# endif
+# ifndef SO_TIMESTAMPNS
+#  define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__time_t) \
+			  ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)
+# endif
+# ifndef SO_TIMESTAMPING
+#  define SO_TIMESTAMPING (sizeof(time_t) == sizeof(__time_t) \
+			   ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW)
 # endif
 #endif
diff --git a/sysdeps/unix/sysv/linux/bits/socket.h b/sysdeps/unix/sysv/linux/bits/socket.h
index 79da9e7597..db4e0c1c98 100644
--- a/sysdeps/unix/sysv/linux/bits/socket.h
+++ b/sysdeps/unix/sysv/linux/bits/socket.h
@@ -354,10 +354,12 @@ struct ucred
 #ifdef __USE_MISC
 # include <bits/types/time_t.h>
 # include <asm/socket.h>
-#else
+#endif
+
+#ifndef SO_DEBUG
 # define SO_DEBUG 1
-# include <bits/socket-constants.h>
 #endif
+#include <bits/socket-constants.h>
 
 /* Structure used to manipulate the SO_LINGER option.  */
 struct linger

  reply	other threads:[~2022-02-14 13:08 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-11 19:16 Tulio Magno Quites Machado Filho
2022-02-11 19:29 ` Florian Weimer
2022-02-11 21:25   ` Tulio Magno Quites Machado Filho
2022-02-11 21:40     ` Florian Weimer
2022-02-14 13:08       ` Adhemerval Zanella [this message]
2022-02-14 13:12         ` Adhemerval Zanella

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=66ae3a9f-0002-2942-d100-db184fca9ab9@linaro.org \
    --to=adhemerval.zanella@linaro.org \
    --cc=fweimer@redhat.com \
    --cc=libc-alpha@sourceware.org \
    --cc=tuliom@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).