From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oo1-xc29.google.com (mail-oo1-xc29.google.com [IPv6:2607:f8b0:4864:20::c29]) by sourceware.org (Postfix) with ESMTPS id C87133858412 for ; Mon, 14 Feb 2022 13:08:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C87133858412 Received: by mail-oo1-xc29.google.com with SMTP id f11-20020a4abb0b000000b002e9abf6bcbcso19242282oop.0 for ; Mon, 14 Feb 2022 05:08:54 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:references:from:in-reply-to :content-transfer-encoding; bh=9qLRJ+lA2GJTOLpjZTuaDQ1g45jUqy9jDb5fU3PpU1k=; b=djBFCew4ImIPfEFnzJStABHX/CzSGarolmBg3Zf9EBpDnoIn2CAzCdzFhGVa2j33gl jKePERTjdn1UqqfU1iu836qxLNLX4RilyaIiQcAnxYzc1YcDRSqt1Z8kLV0MSvHt/Diy YRu9ETA7XPNBNWI6HgLnEs1qp4TQU5nKUJ6Lh1VwPxIvdWHsnf+OHC/KUPlIgmSyXVl7 hWGUOvL6CtW7L3CA2/5UEXM7YcoeMzXbtRJN7i7y4KHV+6Iqp0z+Y9AqUAFMU9wLLgfO bWJi35n7evJ7MOrTltXE378uQg0LRIWj9iAUcZ6Y+ICFzS9KOOR3RDhobY8sv3xitP5j xtXg== X-Gm-Message-State: AOAM530qQVtLf57f8wt75z64vCHR7CUSFNY/4vxK/sdV2h6LZnOef2uL HclylurQPW3K2ro68CqjaDxnJ8gxm8RbAA== X-Google-Smtp-Source: ABdhPJyTUk9mYBcKALIzjmPbuVHa2cggmP3Woi2fGcw3g3TOoiFNxV5/MC8Q4IOVGdsTQGQryQSVMA== X-Received: by 2002:a05:6870:780a:: with SMTP id hb10mr256262oab.134.1644844133955; Mon, 14 Feb 2022 05:08:53 -0800 (PST) Received: from ?IPV6:2804:431:c7cb:6747:70ce:2039:9f74:f513? ([2804:431:c7cb:6747:70ce:2039:9f74:f513]) by smtp.gmail.com with ESMTPSA id 16sm12360741oat.8.2022.02.14.05.08.52 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 14 Feb 2022 05:08:53 -0800 (PST) Message-ID: <66ae3a9f-0002-2942-d100-db184fca9ab9@linaro.org> Date: Mon, 14 Feb 2022 10:08:51 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.0 Subject: Re: [PATCH] Fix building tst-socket-timestamp-compat on older Linux Content-Language: en-US To: libc-alpha@sourceware.org, Tulio Magno Quites Machado Filho , Florian Weimer References: <20220211191638.324672-1-tuliom@linux.ibm.com> <8735kprym4.fsf@oldenburg.str.redhat.com> <87iltlt7t7.fsf@linux.ibm.com> <87czjtqdz1.fsf@oldenburg.str.redhat.com> From: Adhemerval Zanella In-Reply-To: <87czjtqdz1.fsf@oldenburg.str.redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Feb 2022 13:08:56 -0000 On 11/02/2022 18:40, Florian Weimer via Libc-alpha wrote: > * Tulio Magno Quites Machado Filho: > >> Florian Weimer via Libc-alpha 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 >>>> #include >>>> >>>> +/* 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 -#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 # include -#else +#endif + +#ifndef SO_DEBUG # define SO_DEBUG 1 -# include #endif +#include /* Structure used to manipulate the SO_LINGER option. */ struct linger