Message ID | 20230621211200.4132989-3-andrew.cooper3@citrix.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | xen/types: Cleanup | expand |
On Thu, Jun 22, 2023 at 7:12 AM Andrew Cooper <andrew.cooper3@citrix.com> wrote: > > Xen uses the stdint types. Rearrange the types headers to define the > compatibility __{u,s}$N types in terms of the stdint types, not the other way > around. > > All all supported compilers on architectures other than x86 support the stdint > __*_TYPE__ macros. Move these into the common types.h to avoid them being > duplicated in each architecture. > > For x86 on obsolete compilers, synthesize appropriate types. > > This cleanup has the side effect of removing all use of the undocumented > __signed__ GCC keyword. This is a vestigial remnant of `gcc -traditional` > mode for dialetcs of C prior to the introduction of the signed keyword. > > No functional change. > > Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Alistair > --- > CC: Jan Beulich <JBeulich@suse.com> > CC: Roger Pau Monné <roger.pau@citrix.com> > CC: Wei Liu <wl@xen.org> > CC: Stefano Stabellini <sstabellini@kernel.org> > CC: Julien Grall <julien@xen.org> > CC: Volodymyr Babchuk <Volodymyr_Babchuk@epam.com> > CC: Bertrand Marquis <bertrand.marquis@arm.com> > CC: Bob Eshleman <bobbyeshleman@gmail.com> > CC: Alistair Francis <alistair.francis@wdc.com> > CC: Connor Davis <connojdavis@gmail.com> > CC: Oleksii Kurochko <oleksii.kurochko@gmail.com> > CC: Shawn Anastasio <sanastasio@raptorengineering.com> > CC: Timothy Pearson <tpearson@raptorengineering.com> > CC: Roberto Bagnara <roberto.bagnara@bugseng.com> > > I've left the non __ types alone for now. They're complicated mostly by ARM > having differing ideas of what a paddr_t is. > > A different option would be to sort out the stdint types ahead of including > <asm/types.h>, which can either be done by introducing a <asm/stdint.h> or > upping the minimum compiler version for x86; a task which is massively > overdue. > --- > xen/arch/arm/include/asm/types.h | 19 ------------------- > xen/arch/riscv/include/asm/types.h | 19 ------------------- > xen/arch/x86/include/asm/types.h | 21 +++++++++------------ > xen/include/xen/types.h | 28 +++++++++++++++++----------- > 4 files changed, 26 insertions(+), 61 deletions(-) > > diff --git a/xen/arch/arm/include/asm/types.h b/xen/arch/arm/include/asm/types.h > index fb6618ef247f..545a5e9d1175 100644 > --- a/xen/arch/arm/include/asm/types.h > +++ b/xen/arch/arm/include/asm/types.h > @@ -1,25 +1,6 @@ > #ifndef __ARM_TYPES_H__ > #define __ARM_TYPES_H__ > > -typedef __signed__ char __s8; > -typedef unsigned char __u8; > - > -typedef __signed__ short __s16; > -typedef unsigned short __u16; > - > -typedef __signed__ int __s32; > -typedef unsigned int __u32; > - > -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) > -#if defined(CONFIG_ARM_32) > -typedef __signed__ long long __s64; > -typedef unsigned long long __u64; > -#elif defined (CONFIG_ARM_64) > -typedef __signed__ long __s64; > -typedef unsigned long __u64; > -#endif > -#endif > - > typedef signed char s8; > typedef unsigned char u8; > > diff --git a/xen/arch/riscv/include/asm/types.h b/xen/arch/riscv/include/asm/types.h > index 0c0ce78c8f6e..93a680a8f323 100644 > --- a/xen/arch/riscv/include/asm/types.h > +++ b/xen/arch/riscv/include/asm/types.h > @@ -1,25 +1,6 @@ > #ifndef __RISCV_TYPES_H__ > #define __RISCV_TYPES_H__ > > -typedef __signed__ char __s8; > -typedef unsigned char __u8; > - > -typedef __signed__ short __s16; > -typedef unsigned short __u16; > - > -typedef __signed__ int __s32; > -typedef unsigned int __u32; > - > -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) > -#if defined(CONFIG_RISCV_32) > -typedef __signed__ long long __s64; > -typedef unsigned long long __u64; > -#elif defined (CONFIG_RISCV_64) > -typedef __signed__ long __s64; > -typedef unsigned long __u64; > -#endif > -#endif > - > typedef signed char s8; > typedef unsigned char u8; > > diff --git a/xen/arch/x86/include/asm/types.h b/xen/arch/x86/include/asm/types.h > index 2d56aed66782..a5d4f6e9587a 100644 > --- a/xen/arch/x86/include/asm/types.h > +++ b/xen/arch/x86/include/asm/types.h > @@ -1,18 +1,15 @@ > #ifndef __X86_TYPES_H__ > #define __X86_TYPES_H__ > > -typedef __signed__ char __s8; > -typedef unsigned char __u8; > - > -typedef __signed__ short __s16; > -typedef unsigned short __u16; > - > -typedef __signed__ int __s32; > -typedef unsigned int __u32; > - > -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) > -typedef __signed__ long __s64; > -typedef unsigned long __u64; > +#ifndef __INT8_TYPE__ /* GCC <= 4.4 */ > +# define __INT8_TYPE__ signed char > +# define __UINT8_TYPE__ unsigned char > +# define __INT16_TYPE__ short > +# define __UINT16_TYPE__ unsigned short > +# define __INT32_TYPE__ int > +# define __UINT32_TYPE__ unsigned int > +# define __INT64_TYPE__ long > +# define __UINT64_TYPE__ unsigned long > #endif > > typedef signed char s8; > diff --git a/xen/include/xen/types.h b/xen/include/xen/types.h > index 8b22a02eeaa4..4083f1bf18b0 100644 > --- a/xen/include/xen/types.h > +++ b/xen/include/xen/types.h > @@ -11,6 +11,15 @@ typedef signed long ssize_t; > > typedef __PTRDIFF_TYPE__ ptrdiff_t; > > +typedef __INT8_TYPE__ int8_t; > +typedef __UINT8_TYPE__ uint8_t; > +typedef __INT16_TYPE__ int16_t; > +typedef __UINT16_TYPE__ uint16_t; > +typedef __INT32_TYPE__ int32_t; > +typedef __UINT32_TYPE__ uint32_t; > +typedef __INT64_TYPE__ int64_t; > +typedef __UINT64_TYPE__ uint64_t; > + > #define BITS_TO_LONGS(bits) \ > (((bits)+BITS_PER_LONG-1)/BITS_PER_LONG) > #define DECLARE_BITMAP(name,bits) \ > @@ -39,17 +48,14 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t; > #define LONG_MIN (-LONG_MAX - 1) > #define ULONG_MAX (~0UL) > > -typedef __u8 uint8_t; > -typedef __s8 int8_t; > - > -typedef __u16 uint16_t; > -typedef __s16 int16_t; > - > -typedef __u32 uint32_t; > -typedef __s32 int32_t; > - > -typedef __u64 uint64_t; > -typedef __s64 int64_t; > +typedef uint8_t __u8; > +typedef int8_t __s8; > +typedef uint16_t __u16; > +typedef int16_t __s16; > +typedef uint32_t __u32; > +typedef int32_t __s32; > +typedef uint64_t __u64; > +typedef int64_t __s64; > > typedef __u16 __le16; > typedef __u16 __be16; > -- > 2.30.2 > >
On 21.06.2023 23:12, Andrew Cooper wrote: > A different option would be to sort out the stdint types ahead of including > <asm/types.h>, which can either be done by introducing a <asm/stdint.h> or > upping the minimum compiler version for x86; a task which is massively > overdue. As per my patch moving in this same direction, I strongly think this is the direction we want to take. (I don't see a reason to introduce asm/stdint.h for this - the logic you put in x86'es asm/types.h can well be put in xen/types.h as well, suitably limited by a slightly more involved #if than you have it now.) Personally I think using "mode" attributes for the fallbacks would be the more widely compatible way, but I'm not going to object to your approach avoiding them. It would feel more safe though if without using that attribute the fallback wasn't tied to __INT8_TYPE__ being defined (but instead directly to being on very old gcc). As to upping the minimal gcc version for x86: While I'm pretty sure I'm considered the hindering factor here, I continue to think that my "blocking" request isn't unreasonable at all: We want to establish clear criteria, by which we can then also go in the future. And we want to make clear what, if any, baseline requirements are acceptable to put up beyond consideration of just binutils and compilers (basic utilities, make, perl, python, etc). Jan
diff --git a/xen/arch/arm/include/asm/types.h b/xen/arch/arm/include/asm/types.h index fb6618ef247f..545a5e9d1175 100644 --- a/xen/arch/arm/include/asm/types.h +++ b/xen/arch/arm/include/asm/types.h @@ -1,25 +1,6 @@ #ifndef __ARM_TYPES_H__ #define __ARM_TYPES_H__ -typedef __signed__ char __s8; -typedef unsigned char __u8; - -typedef __signed__ short __s16; -typedef unsigned short __u16; - -typedef __signed__ int __s32; -typedef unsigned int __u32; - -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -#if defined(CONFIG_ARM_32) -typedef __signed__ long long __s64; -typedef unsigned long long __u64; -#elif defined (CONFIG_ARM_64) -typedef __signed__ long __s64; -typedef unsigned long __u64; -#endif -#endif - typedef signed char s8; typedef unsigned char u8; diff --git a/xen/arch/riscv/include/asm/types.h b/xen/arch/riscv/include/asm/types.h index 0c0ce78c8f6e..93a680a8f323 100644 --- a/xen/arch/riscv/include/asm/types.h +++ b/xen/arch/riscv/include/asm/types.h @@ -1,25 +1,6 @@ #ifndef __RISCV_TYPES_H__ #define __RISCV_TYPES_H__ -typedef __signed__ char __s8; -typedef unsigned char __u8; - -typedef __signed__ short __s16; -typedef unsigned short __u16; - -typedef __signed__ int __s32; -typedef unsigned int __u32; - -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -#if defined(CONFIG_RISCV_32) -typedef __signed__ long long __s64; -typedef unsigned long long __u64; -#elif defined (CONFIG_RISCV_64) -typedef __signed__ long __s64; -typedef unsigned long __u64; -#endif -#endif - typedef signed char s8; typedef unsigned char u8; diff --git a/xen/arch/x86/include/asm/types.h b/xen/arch/x86/include/asm/types.h index 2d56aed66782..a5d4f6e9587a 100644 --- a/xen/arch/x86/include/asm/types.h +++ b/xen/arch/x86/include/asm/types.h @@ -1,18 +1,15 @@ #ifndef __X86_TYPES_H__ #define __X86_TYPES_H__ -typedef __signed__ char __s8; -typedef unsigned char __u8; - -typedef __signed__ short __s16; -typedef unsigned short __u16; - -typedef __signed__ int __s32; -typedef unsigned int __u32; - -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long __s64; -typedef unsigned long __u64; +#ifndef __INT8_TYPE__ /* GCC <= 4.4 */ +# define __INT8_TYPE__ signed char +# define __UINT8_TYPE__ unsigned char +# define __INT16_TYPE__ short +# define __UINT16_TYPE__ unsigned short +# define __INT32_TYPE__ int +# define __UINT32_TYPE__ unsigned int +# define __INT64_TYPE__ long +# define __UINT64_TYPE__ unsigned long #endif typedef signed char s8; diff --git a/xen/include/xen/types.h b/xen/include/xen/types.h index 8b22a02eeaa4..4083f1bf18b0 100644 --- a/xen/include/xen/types.h +++ b/xen/include/xen/types.h @@ -11,6 +11,15 @@ typedef signed long ssize_t; typedef __PTRDIFF_TYPE__ ptrdiff_t; +typedef __INT8_TYPE__ int8_t; +typedef __UINT8_TYPE__ uint8_t; +typedef __INT16_TYPE__ int16_t; +typedef __UINT16_TYPE__ uint16_t; +typedef __INT32_TYPE__ int32_t; +typedef __UINT32_TYPE__ uint32_t; +typedef __INT64_TYPE__ int64_t; +typedef __UINT64_TYPE__ uint64_t; + #define BITS_TO_LONGS(bits) \ (((bits)+BITS_PER_LONG-1)/BITS_PER_LONG) #define DECLARE_BITMAP(name,bits) \ @@ -39,17 +48,14 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t; #define LONG_MIN (-LONG_MAX - 1) #define ULONG_MAX (~0UL) -typedef __u8 uint8_t; -typedef __s8 int8_t; - -typedef __u16 uint16_t; -typedef __s16 int16_t; - -typedef __u32 uint32_t; -typedef __s32 int32_t; - -typedef __u64 uint64_t; -typedef __s64 int64_t; +typedef uint8_t __u8; +typedef int8_t __s8; +typedef uint16_t __u16; +typedef int16_t __s16; +typedef uint32_t __u32; +typedef int32_t __s32; +typedef uint64_t __u64; +typedef int64_t __s64; typedef __u16 __le16; typedef __u16 __be16;
Xen uses the stdint types. Rearrange the types headers to define the compatibility __{u,s}$N types in terms of the stdint types, not the other way around. All all supported compilers on architectures other than x86 support the stdint __*_TYPE__ macros. Move these into the common types.h to avoid them being duplicated in each architecture. For x86 on obsolete compilers, synthesize appropriate types. This cleanup has the side effect of removing all use of the undocumented __signed__ GCC keyword. This is a vestigial remnant of `gcc -traditional` mode for dialetcs of C prior to the introduction of the signed keyword. No functional change. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> --- CC: Jan Beulich <JBeulich@suse.com> CC: Roger Pau Monné <roger.pau@citrix.com> CC: Wei Liu <wl@xen.org> CC: Stefano Stabellini <sstabellini@kernel.org> CC: Julien Grall <julien@xen.org> CC: Volodymyr Babchuk <Volodymyr_Babchuk@epam.com> CC: Bertrand Marquis <bertrand.marquis@arm.com> CC: Bob Eshleman <bobbyeshleman@gmail.com> CC: Alistair Francis <alistair.francis@wdc.com> CC: Connor Davis <connojdavis@gmail.com> CC: Oleksii Kurochko <oleksii.kurochko@gmail.com> CC: Shawn Anastasio <sanastasio@raptorengineering.com> CC: Timothy Pearson <tpearson@raptorengineering.com> CC: Roberto Bagnara <roberto.bagnara@bugseng.com> I've left the non __ types alone for now. They're complicated mostly by ARM having differing ideas of what a paddr_t is. A different option would be to sort out the stdint types ahead of including <asm/types.h>, which can either be done by introducing a <asm/stdint.h> or upping the minimum compiler version for x86; a task which is massively overdue. --- xen/arch/arm/include/asm/types.h | 19 ------------------- xen/arch/riscv/include/asm/types.h | 19 ------------------- xen/arch/x86/include/asm/types.h | 21 +++++++++------------ xen/include/xen/types.h | 28 +++++++++++++++++----------- 4 files changed, 26 insertions(+), 61 deletions(-)