From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 27786 invoked from network); 26 Jan 2021 17:23:52 -0000 Received: from mother.openwall.net (195.42.179.200) by inbox.vuxu.org with ESMTPUTF8; 26 Jan 2021 17:23:52 -0000 Received: (qmail 26268 invoked by uid 550); 26 Jan 2021 17:23:45 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 26178 invoked from network); 26 Jan 2021 17:23:44 -0000 Date: Tue, 26 Jan 2021 12:23:31 -0500 From: Rich Felker To: Andrey Melnikov Cc: musl@lists.openwall.com Message-ID: <20210126172330.GB23432@brightrain.aerifal.cx> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Subject: [musl] Re: move __BYTE_ORDER definition to alltypes.h On Tue, Jan 26, 2021 at 02:55:09PM +0300, Andrey Melnikov wrote: > Hi. > > Your commit 97d35a552ec5b6ddf7923dd2f9a8eb973526acea leads to > miscompile programs which rely on one of defines __LITTLE_ENDIAN or > __BIG_ENDIAN. > Now, both unconditionally defined when included stdarg.h and programs > which define __(BIG|LITTE)_ENDIAN itself - miscompiled. linux kernel > for example - it internally uses #if defined __BIG_ENDIAN and defines > it only for BIGENDAIN arches. > > Any ideas? The conditionally-defined macros that on some archs tell you the endianness are __BIG_ENDIAN__ and __LITTLE_ENDIAN__ (note the final __) or other arch-specific macros. __BIG_ENDIAN and __LITTLE_ENDIAN (without the final __) have always been the possible values for __BYTE_ORDER from endian.h. In any case, all of these are in the reserved namespace and should not be defined by applications or inspected in any way other than a manner documented by the implementation. How did this come up with the Linux kernel? AFAIK it uses -nostdinc and should not see the libc headers at all. But if that #ifdef is present in Linux it's probably a bug since it's contrary to all historical use of __BIG_ENDIAN... Rich