From patchwork Mon May 12 23:53:24 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Myers X-Patchwork-Id: 879 Return-Path: X-Original-To: siddhesh@wilcox.dreamhost.com Delivered-To: siddhesh@wilcox.dreamhost.com Received: from homiemail-mx23.g.dreamhost.com (mx2.sub5.homie.mail.dreamhost.com [208.113.200.128]) by wilcox.dreamhost.com (Postfix) with ESMTP id 51C4D3600C0 for ; Mon, 12 May 2014 16:53:37 -0700 (PDT) Received: by homiemail-mx23.g.dreamhost.com (Postfix, from userid 14307373) id DFCBE638455E7; Mon, 12 May 2014 16:53:36 -0700 (PDT) X-Original-To: glibc@patchwork.siddhesh.in Delivered-To: x14307373@homiemail-mx23.g.dreamhost.com Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by homiemail-mx23.g.dreamhost.com (Postfix) with ESMTPS id BA5F263845587 for ; Mon, 12 May 2014 16:53:36 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:subject:message-id:mime-version :content-type; q=dns; s=default; b=NNPqbGx9xAop+2eL1T3y/N+jcPM5g M3PHaaNOwY+E88gAIKCntBjaG4yKVF934/XnnfWYMT+JvURl9HpurZ7C/40KiZKR M5aISO7QGOjgE8I/eXslt7f0auTGX6TLtnb6q1cm+0p9XYlE1NcnqqkYv/yrgeIP UsHoP9JoP3f674= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:subject:message-id:mime-version :content-type; s=default; bh=eGf3ffYjQX/HVI1s08Ax0BIRfKY=; b=V8Y hHyI1HNwY8vin+IOuEaAycoxGaryZRf5IaJysqd8Vg+aRnmpi61Lb5iEQSi2485M YqonC+hKLsZzUXnAVtA6zEoRP/Bsjf/hL37l2Oz+eKiNXWQ2is90k/DwmBbvquRJ tNnC2dd0wzrXF2C9VZuIUMC77a3UOwQeOumF6JJI= Received: (qmail 8493 invoked by alias); 12 May 2014 23:53:33 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 8477 invoked by uid 89); 12 May 2014 23:53:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.0 required=5.0 tests=none autolearn=ham version=3.3.2 X-HELO: relay1.mentorg.com Date: Mon, 12 May 2014 23:53:24 +0000 From: "Joseph S. Myers" To: Subject: Reduce kernel-features.h duplication Message-ID: MIME-Version: 1.0 X-DH-Original-To: glibc@patchwork.siddhesh.in This patch reduces duplication between different architectures' kernel-features.h files by making the architecture-independent file define various macros unconditionally (instead of only for a particular list of architectures), with the architecture-specific files then undefining the macros if necessary. Specifically, __ASSUME_O_CLOEXEC (O_CLOEXEC flag to open) and __ASSUME_SOCK_CLOEXEC (SOCK_NONBLOCK and SOCK_CLOEXEC flags to socket) are supported on all architectures as of 2.6.32 or the minimum kernel version for the architecture if later. For __ASSUME_IN_NONBLOCK, __ASSUME_PIPE2, __ASSUME_EVENTFD2, __ASSUME_SIGNALFD4 and __ASSUME_DUP3, the relevant syscalls were added for alpha in 2.6.33 but otherwise the features are available as of 2.6.32. For __ASSUME_UTIMES, support is everywhere in 2.6.32 except for asm-generic architectures and hppa. Although those were the main cases of duplication among kernel-features.h files, some other cases of unnecessary definitions were also cleaned up: the hppa file defined various macros that were either no longer used at all, or defined by the main file by default anyway, the ia64 file had duplicative definitions of __ASSUME_PSELECT and __ASSUME_PPOLL, while mips had such a definition of __ASSUME_IPC64. Really, rather than being defined in the main file then undefined for asm-generic architectures, __ASSUME_UTIMES should become an hppa-specific macro. Given that __ASSUME_ATFCTS and __ASSUME_UTIMENSAT are now always true, the only live __ASSUME_UTIMES conditional is in sysdeps/unix/sysv/linux/utimes.c, which is not used for asm-generic architectures. I think the desired state would be an hppa-specific file (that includes sysdeps/unix/sysv/linux/utimes.c if __ASSUME_UTIMES, and otherwise has fallback code), with the fallback code being removed from the main utimes.c. But I think that's most reasonably a separate cleanup once __ASSUME_ATFCTS and __ASSUME_UTIMESAT have both had conditional code cleaned up. Given this patch, I think it's straightforward to move non-ex-ports architectures to having their own kernel-features.h files, like ex-ports architectures, rather than conditionals in the main file (i.e., such a move won't require the architecture-specific file to contain anything that isn't genuinely architecture-specific), and would encourage architecture maintainers to do so. Tested x86_64 that the installed shared libraries are unchanged by this patch. Note that on some architectures this *will* cause __ASSUME_* macros to be defined in cases where they weren't previously but should have been (but this is just optimization, not a fix to a user-visible bug, so doesn't need a bug report in Bugzilla). 2014-05-12 Joseph Myers * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_UTIMES): Define unconditionally. (__ASSUME_O_CLOEXEC): Likewise. (__ASSUME_SOCK_CLOEXEC): Likewise. (__ASSUME_IN_NONBLOCK): Likewise. (__ASSUME_PIPE2): Likewise. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. (__ASSUME_DUP3): Likewise. * sysdeps/unix/sysv/linux/aarch64/kernel-features.h (__ASSUME_DUP3): Do not define. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_IN_NONBLOCK): Likewise. (__ASSUME_O_CLOEXEC): Likewise. (__ASSUME_PIPE2): Likewise. (__ASSUME_SIGNALFD4): Likewise. (__ASSUME_SOCK_CLOEXEC): Likewise. (__ASSUME_UTIMES): Undefine. * sysdeps/unix/sysv/linux/alpha/kernel-features.h (__ASSUME_UTIMES): Do not define. (__ASSUME_O_CLOEXEC): Likewise. (__ASSUME_SOCK_CLOEXEC): Likewise. (__ASSUME_IN_NONBLOCK): Undefine if [__LINUX_KERNEL_VERSION < 0x020621] instead of defining if [__LINUX_KERNEL_VERSION >= 0x020621]. (__ASSUME_PIPE2): Likewise. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. [__LINUX_KERNEL_VERSION < 0x020621] (__ASSUME_DUP3): Undefine. * sysdeps/unix/sysv/linux/arm/kernel-features.h (__ASSUME_UTIMES): Do not define. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. * sysdeps/unix/sysv/linux/hppa/kernel-features.h (__ASSUME_32BITUIDS): Likewise. (__ASSUME_TRUNCATE64_SYSCALL): Likewise. (__ASSUME_IPC64): Likewise. (__ASSUME_ST_INO_64_BIT): Likewise. (__ASSUME_GETDENTS64_SYSCALL): Likewise. [__LINUX_KERNEL_VERSION < 0x030e00] (__ASSUME_UTIMES): Undefine. * sysdeps/unix/sysv/linux/ia64/kernel-features.h (__ASSUME_UTIMES): Do not define. (__ASSUME_PSELECT): Likewise. (__ASSUME_PPOLL): Likewise. (__ASSUME_O_CLOEXEC): Likewise. (__ASSUME_SOCK_CLOEXEC): Likewise. (__ASSUME_IN_NONBLOCK): Likewise. (__ASSUME_PIPE2): Likewise. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. (__ASSUME_DUP3): Likewise. * sysdeps/unix/sysv/linux/m68k/kernel-features.h (__ASSUME_UTIMES): Likewise. (__ASSUME_O_CLOEXEC): Likewise. (__ASSUME_SOCK_CLOEXEC): Likewise. (__ASSUME_IN_NONBLOCK): Likewise. (__ASSUME_PIPE2): Likewise. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. (__ASSUME_DUP3): Likewise. * sysdeps/unix/sysv/linux/microblaze/kernel-features.h (__ASSUME_UTIMES): Likewise. (__ASSUME_O_CLOEXEC): Likewise. (__ASSUME_SOCK_CLOEXEC): Likewise. (__ASSUME_IN_NONBLOCK): Likewise. (__ASSUME_PIPE2): Likewise. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. (__ASSUME_DUP3): Likewise. * sysdeps/unix/sysv/linux/mips/kernel-features.h (__ASSUME_IPC64): Likewise. (__ASSUME_UTIMES): Likewise. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. * sysdeps/unix/sysv/linux/tile/kernel-features.h (__ASSUME_O_CLOEXEC): Likewise. (__ASSUME_SOCK_CLOEXEC): Likewise. (__ASSUME_IN_NONBLOCK): Likewise. (__ASSUME_PIPE2): Likewise. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. (__ASSUME_DUP3): Likewise. (__ASSUME_UTIMES): Undefine. diff --git a/sysdeps/unix/sysv/linux/aarch64/kernel-features.h b/sysdeps/unix/sysv/linux/aarch64/kernel-features.h index 53039f9..bd94fe1 100644 --- a/sysdeps/unix/sysv/linux/aarch64/kernel-features.h +++ b/sysdeps/unix/sysv/linux/aarch64/kernel-features.h @@ -25,14 +25,10 @@ features. */ #define __ASSUME_ACCEPT4_SYSCALL 1 -#define __ASSUME_DUP3 1 -#define __ASSUME_EVENTFD2 1 -#define __ASSUME_IN_NONBLOCK 1 -#define __ASSUME_O_CLOEXEC 1 -#define __ASSUME_PIPE2 1 #define __ASSUME_RECVMMSG_SYSCALL 1 #define __ASSUME_SENDMMSG_SYSCALL 1 -#define __ASSUME_SIGNALFD4 1 -#define __ASSUME_SOCK_CLOEXEC 1 #include_next + +/* asm-generic architectures do not have the utimes syscall. */ +#undef __ASSUME_UTIMES diff --git a/sysdeps/unix/sysv/linux/alpha/kernel-features.h b/sysdeps/unix/sysv/linux/alpha/kernel-features.h index 2e3fc7d..bea7057 100644 --- a/sysdeps/unix/sysv/linux/alpha/kernel-features.h +++ b/sysdeps/unix/sysv/linux/alpha/kernel-features.h @@ -20,26 +20,6 @@ #ifndef _KERNEL_FEATURES_H #define _KERNEL_FEATURES_H 1 -#define __ASSUME_UTIMES 1 - -/* Support for the O_CLOEXEC flag was added for alpha in 2.6.23. */ -#define __ASSUME_O_CLOEXEC 1 - -/* Support for various CLOEXEC and NONBLOCK flags was added for alpha after - 2.6.33-rc1. */ -#if __LINUX_KERNEL_VERSION >= 0x020621 -# define __ASSUME_SOCK_CLOEXEC 1 -# define __ASSUME_IN_NONBLOCK 1 -#endif - -/* Support for the pipe2, eventfd2, signalfd4 syscalls was added for alpha - after 2.6.33-rc1. */ -#if __LINUX_KERNEL_VERSION >= 0x020621 -# define __ASSUME_PIPE2 1 -# define __ASSUME_EVENTFD2 1 -# define __ASSUME_SIGNALFD4 1 -#endif - /* Support for recvmmsg was added for alpha in 2.6.33. */ #if __LINUX_KERNEL_VERSION >= 0x020621 # define __ASSUME_RECVMMSG_SYSCALL 1 @@ -67,10 +47,15 @@ /* Support for fsyncdata was added for alpha after 2.6.21. */ #define __ASSUME_FDATASYNC 1 -/* Support for preadv and pwritev was added for alpha in 2.6.33. */ +/* Support for various syscalls was added for alpha in 2.6.33. */ #if __LINUX_KERNEL_VERSION < 0x020621 # undef __ASSUME_PREADV # undef __ASSUME_PWRITEV +# undef __ASSUME_IN_NONBLOCK +# undef __ASSUME_PIPE2 +# undef __ASSUME_EVENTFD2 +# undef __ASSUME_SIGNALFD4 +# undef __ASSUME_DUP3 #endif #endif /* _KERNEL_FEATURES_H */ diff --git a/sysdeps/unix/sysv/linux/arm/kernel-features.h b/sysdeps/unix/sysv/linux/arm/kernel-features.h index ce0f03e..354f2ca 100644 --- a/sysdeps/unix/sysv/linux/arm/kernel-features.h +++ b/sysdeps/unix/sysv/linux/arm/kernel-features.h @@ -17,16 +17,9 @@ License along with the GNU C Library. If not, see . */ -/* The utimes syscall was added before 2.6.1. */ -#define __ASSUME_UTIMES 1 - /* The signal frame layout changed in 2.6.18. */ #define __ASSUME_SIGFRAME_V2 1 -/* Support for the eventfd2 and signalfd4 syscalls was added in 2.6.27. */ -#define __ASSUME_EVENTFD2 1 -#define __ASSUME_SIGNALFD4 1 - /* Support for the recvmmsg syscall was added in 2.6.33. */ #if __LINUX_KERNEL_VERSION >= 0x020621 # define __ASSUME_RECVMMSG_SYSCALL 1 diff --git a/sysdeps/unix/sysv/linux/hppa/kernel-features.h b/sysdeps/unix/sysv/linux/hppa/kernel-features.h index e869c14..25c3e36 100644 --- a/sysdeps/unix/sysv/linux/hppa/kernel-features.h +++ b/sysdeps/unix/sysv/linux/hppa/kernel-features.h @@ -18,15 +18,6 @@ . */ -/* There are an infinite number of PA-RISC kernel versions numbered - 2.4.0. But they've not really been released as such. We require - and expect the final version here. */ -#define __ASSUME_32BITUIDS 1 -#define __ASSUME_TRUNCATE64_SYSCALL 1 -#define __ASSUME_IPC64 1 -#define __ASSUME_ST_INO_64_BIT 1 -#define __ASSUME_GETDENTS64_SYSCALL 1 - /* PA-RISC 2.6.9 kernels had the first LWS CAS support */ #define __ASSUME_LWS_CAS 1 @@ -42,3 +33,8 @@ #endif #include_next + +/* hppa did not get the utimes syscall until 3.14. */ +#if __LINUX_KERNEL_VERSION < 0x030e00 +# undef __ASSUME_UTIMES +#endif diff --git a/sysdeps/unix/sysv/linux/ia64/kernel-features.h b/sysdeps/unix/sysv/linux/ia64/kernel-features.h index 471fb88..c32789b 100644 --- a/sysdeps/unix/sysv/linux/ia64/kernel-features.h +++ b/sysdeps/unix/sysv/linux/ia64/kernel-features.h @@ -20,25 +20,6 @@ #ifndef _KERNEL_FEATURES_H #define _KERNEL_FEATURES_H 1 -/* The utimes syscall has been available for some architectures - forever. */ -#define __ASSUME_UTIMES 1 - -/* pselect/ppoll were introduced just after 2.6.16-rc1. */ -#define __ASSUME_PSELECT 1 -#define __ASSUME_PPOLL 1 - -/* Support for various CLOEXEC and NONBLOCK flags was added in 2.6.23. */ -#define __ASSUME_O_CLOEXEC 1 - -/* Support for various CLOEXEC and NONBLOCK flags was added in 2.6.27. */ -#define __ASSUME_SOCK_CLOEXEC 1 -#define __ASSUME_IN_NONBLOCK 1 -#define __ASSUME_PIPE2 1 -#define __ASSUME_EVENTFD2 1 -#define __ASSUME_SIGNALFD4 1 -#define __ASSUME_DUP3 1 - /* Support for the recvmmsg syscall was added in 2.6.33. */ #if __LINUX_KERNEL_VERSION >= 0x020621 # define __ASSUME_RECVMMSG_SYSCALL 1 diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h index 46e16f6..026f89f 100644 --- a/sysdeps/unix/sysv/linux/kernel-features.h +++ b/sysdeps/unix/sysv/linux/kernel-features.h @@ -76,14 +76,7 @@ forever. For x86 it was introduced after 2.5.75, for x86-64, ppc, and ppc64 it was introduced in 2.6.0-test3, for s390 it was introduced in 2.6.21-rc5. */ -#if defined __sparc__ \ - || defined __i386__ \ - || defined __x86_64__ \ - || defined __powerpc__ \ - || defined __sh__ \ - || defined __s390__ -# define __ASSUME_UTIMES 1 -#endif +#define __ASSUME_UTIMES 1 /* pselect/ppoll were introduced just after 2.6.16-rc1. On x86_64 and SH this appeared first in 2.6.19-rc1, on ia64 in 2.6.22-rc1. */ @@ -123,27 +116,21 @@ only after 2.6.23-rc1. */ #define __ASSUME_FALLOCATE 1 -/* Support for various CLOEXEC and NONBLOCK flags was added for x86, - x86-64, PPC, IA-64, SPARC< and S390 in 2.6.23. */ -#if (defined __i386__ || defined __x86_64__ || defined __powerpc__ \ - || defined __sparc__ || defined __s390__) -# define __ASSUME_O_CLOEXEC 1 -#endif +/* Support for various CLOEXEC and NONBLOCK flags was added in + 2.6.23. */ +#define __ASSUME_O_CLOEXEC 1 /* Support for ADJ_OFFSET_SS_READ was added in 2.6.24. */ #define __ASSUME_ADJ_OFFSET_SS_READ 1 -/* Support for various CLOEXEC and NONBLOCK flags was added for x86, - x86-64, PPC, IA-64, and SPARC in 2.6.27. */ -#if (defined __i386__ || defined __x86_64__ || defined __powerpc__ \ - || defined __sparc__ || defined __s390__) -# define __ASSUME_SOCK_CLOEXEC 1 -# define __ASSUME_IN_NONBLOCK 1 -# define __ASSUME_PIPE2 1 -# define __ASSUME_EVENTFD2 1 -# define __ASSUME_SIGNALFD4 1 -# define __ASSUME_DUP3 1 -#endif +/* Support for various CLOEXEC and NONBLOCK flags was added in + 2.6.27. */ +#define __ASSUME_SOCK_CLOEXEC 1 +#define __ASSUME_IN_NONBLOCK 1 +#define __ASSUME_PIPE2 1 +#define __ASSUME_EVENTFD2 1 +#define __ASSUME_SIGNALFD4 1 +#define __ASSUME_DUP3 1 /* Support for accept4 functionality was added in 2.6.28, but for some architectures using a separate syscall rather than socketcall that diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h index e47fd3b..03bcadb 100644 --- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h +++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h @@ -20,20 +20,6 @@ /* m68k uses socketcall. */ #define __ASSUME_SOCKETCALL 1 -/* Many syscalls were added in 2.6.10 for m68k. */ -#define __ASSUME_UTIMES 1 - -/* Support for various CLOEXEC and NONBLOCK flags was added 2.6.23. */ -#define __ASSUME_O_CLOEXEC 1 - -/* Support for various CLOEXEC and NONBLOCK flags was added in 2.6.27. */ -#define __ASSUME_SOCK_CLOEXEC 1 -#define __ASSUME_IN_NONBLOCK 1 -#define __ASSUME_PIPE2 1 -#define __ASSUME_EVENTFD2 1 -#define __ASSUME_SIGNALFD4 1 -#define __ASSUME_DUP3 1 - #include_next /* These syscalls were added only in 3.0 for m68k. */ diff --git a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h index c7c8c03..066c12d 100644 --- a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h +++ b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h @@ -19,16 +19,6 @@ /* MicroBlaze uses socketcall. */ #define __ASSUME_SOCKETCALL 1 -/* MicroBlaze glibc support starts with 2.6.30, guaranteeing many kernel features. */ -#define __ASSUME_UTIMES 1 -#define __ASSUME_O_CLOEXEC 1 -#define __ASSUME_SOCK_CLOEXEC 1 -#define __ASSUME_IN_NONBLOCK 1 -#define __ASSUME_PIPE2 1 -#define __ASSUME_EVENTFD2 1 -#define __ASSUME_SIGNALFD4 1 -#define __ASSUME_DUP3 1 - /* Support for the accept4 and recvmmsg syscalls was added in 2.6.33. */ #if __LINUX_KERNEL_VERSION >= 0x020621 # define __ASSUME_ACCEPT4_SYSCALL 1 diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h index a1ebf79..b53118d 100644 --- a/sysdeps/unix/sysv/linux/mips/kernel-features.h +++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h @@ -19,16 +19,6 @@ #include -/* MIPS platforms had IPC64 all along. */ -#define __ASSUME_IPC64 1 - -/* MIPS had the utimes syscall by 2.6.0. */ -#define __ASSUME_UTIMES 1 - -/* Support for the eventfd2 and signalfd4 syscalls was added in 2.6.27. */ -#define __ASSUME_EVENTFD2 1 -#define __ASSUME_SIGNALFD4 1 - /* Support for the accept4 syscall was added in 2.6.31. */ #define __ASSUME_ACCEPT4_SYSCALL 1 diff --git a/sysdeps/unix/sysv/linux/tile/kernel-features.h b/sysdeps/unix/sysv/linux/tile/kernel-features.h index b028152..78aacac 100644 --- a/sysdeps/unix/sysv/linux/tile/kernel-features.h +++ b/sysdeps/unix/sysv/linux/tile/kernel-features.h @@ -18,14 +18,7 @@ /* TILE glibc support starts with 2.6.36, guaranteeing many kernel features. */ -#define __ASSUME_O_CLOEXEC 1 -#define __ASSUME_SOCK_CLOEXEC 1 -#define __ASSUME_IN_NONBLOCK 1 -#define __ASSUME_PIPE2 1 -#define __ASSUME_EVENTFD2 1 -#define __ASSUME_SIGNALFD4 1 #define __ASSUME_ACCEPT4_SYSCALL 1 -#define __ASSUME_DUP3 1 #define __ASSUME_RECVMMSG_SYSCALL 1 /* Support for the sendmmsg syscall was added in 3.0. */ @@ -35,6 +28,9 @@ #include_next +/* asm-generic architectures do not have the utimes syscall. */ +#undef __ASSUME_UTIMES + /* Define this if your 32-bit syscall API requires 64-bit register pairs to start with an even-number register. */ #define __ASSUME_ALIGNED_REGISTER_PAIRS 1