diff options
| author | rajdakin <rajdakin@gmail.com> | 2024-09-20 17:06:25 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-20 17:06:25 +0200 |
| commit | e18846fac57c6b75fe9d918034159415e73c20cd (patch) | |
| tree | 68513d9973e59ec2a606ab0acd0a8b980ac105f9 | |
| parent | 4aeb8ea1b037f8db84837f723253133277d0995b (diff) | |
| download | box64-e18846fac57c6b75fe9d918034159415e73c20cd.tar.gz box64-e18846fac57c6b75fe9d918034159415e73c20cd.zip | |
[WRAPPERHELPER] Fixed some bugs, added partial multiarch support (#1847)
| -rw-r--r-- | wrapperhelper/include-override/aarch64/bits/pthreadtypes-arch.h | 47 | ||||
| -rw-r--r-- | wrapperhelper/include-override/aarch64/stdc-predef.h | 672 | ||||
| -rw-r--r-- | wrapperhelper/include-override/common/stdc-predef.h | 4 | ||||
| -rw-r--r-- | wrapperhelper/include-override/x86_64/bits/pthreadtypes-arch.h | 55 | ||||
| -rw-r--r-- | wrapperhelper/include-override/x86_64/stdc-predef.h | 18 | ||||
| -rw-r--r-- | wrapperhelper/src/generator.c | 83 | ||||
| -rw-r--r-- | wrapperhelper/src/generator.h | 6 | ||||
| -rw-r--r-- | wrapperhelper/src/lang.c | 1 | ||||
| -rw-r--r-- | wrapperhelper/src/machine.c | 94 | ||||
| -rw-r--r-- | wrapperhelper/src/machine.h | 9 | ||||
| -rw-r--r-- | wrapperhelper/src/parse.c | 65 |
11 files changed, 640 insertions, 414 deletions
diff --git a/wrapperhelper/include-override/aarch64/bits/pthreadtypes-arch.h b/wrapperhelper/include-override/aarch64/bits/pthreadtypes-arch.h new file mode 100644 index 00000000..5fe9577f --- /dev/null +++ b/wrapperhelper/include-override/aarch64/bits/pthreadtypes-arch.h @@ -0,0 +1,47 @@ +/* Copyright (C) 2002-2024 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _BITS_PTHREADTYPES_ARCH_H +#define _BITS_PTHREADTYPES_ARCH_H 1 + +#include <bits/endian.h> + +#ifdef __ILP32__ +# define __SIZEOF_PTHREAD_ATTR_T 32 +# define __SIZEOF_PTHREAD_MUTEX_T 32 +# define __SIZEOF_PTHREAD_MUTEXATTR_T 4 +# define __SIZEOF_PTHREAD_CONDATTR_T 4 +# define __SIZEOF_PTHREAD_RWLOCK_T 48 +# define __SIZEOF_PTHREAD_BARRIER_T 20 +# define __SIZEOF_PTHREAD_BARRIERATTR_T 4 +#else +# define __SIZEOF_PTHREAD_ATTR_T 64 +# define __SIZEOF_PTHREAD_MUTEX_T 48 +# define __SIZEOF_PTHREAD_MUTEXATTR_T 8 +# define __SIZEOF_PTHREAD_CONDATTR_T 8 +# define __SIZEOF_PTHREAD_RWLOCK_T 56 +# define __SIZEOF_PTHREAD_BARRIER_T 32 +# define __SIZEOF_PTHREAD_BARRIERATTR_T 8 +#endif +#define __SIZEOF_PTHREAD_COND_T 48 +#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 + +#define __LOCK_ALIGNMENT +#define __ONCE_ALIGNMENT + +#endif /* bits/pthreadtypes.h */ diff --git a/wrapperhelper/include-override/aarch64/stdc-predef.h b/wrapperhelper/include-override/aarch64/stdc-predef.h index bc1f5de3..b2609a3c 100644 --- a/wrapperhelper/include-override/aarch64/stdc-predef.h +++ b/wrapperhelper/include-override/aarch64/stdc-predef.h @@ -1,4 +1,65 @@ -#define __aarch64__ 1 +// C standard +#define __STDC__ 1 +#define __STDC_HOSTED__ 1 +#define __STDC_UTF_16__ 1 +#define __STDC_UTF_32__ 1 +#define __STDC_VERSION__ 201710L +// Generic aarch64 infos +#define __ELF__ 1 +#define __NO_INLINE__ 1 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __ORDER_PDP_ENDIAN__ 3412 +#define __PIC__ 2 +#define __pic__ 2 +#define __PIE__ 2 +#define __pie__ 2 +#define __USER_LABEL_PREFIX__ +#define __gnu_linux__ 1 +#define __linux__ 1 +#define __linux 1 +#define linux 1 +#define __unix__ 1 +#define __unix 1 +#define unix 1 +// GCC +//#define __GCC_ASM_FLAG_OUTPUTS__ 1 +//#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +//#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +//#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +//#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +//#define __GCC_ATOMIC_INT_LOCK_FREE 2 +//#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +//#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +//#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +//#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +//#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +//#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +//#define __GCC_CONSTRUCTIVE_SIZE 64 +//#define __GCC_DESTRUCTIVE_SIZE 256 +//#define __GCC_HAVE_DWARF2_CFI_ASM 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 1 +//#define __GCC_IEC_559 2 +//#define __GCC_IEC_559_COMPLEX 2 +//#define __GNUC__ 14 +//#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +//#define __GNUC_MINOR__ 2 +//#define __GNUC_PATCHLEVEL__ 0 +//#define __GNUC_STDC_INLINE__ 1 +//#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +//#define __GXX_ABI_VERSION 1019 +//#define __PRAGMA_REDEFINE_EXTNAME 1 +//#define __VERSION__ "14.2.0" +// Specific aarch64 architecture +#define __FINITE_MATH_ONLY__ 0 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __LP64__ 1 +#define _LP64 1 +#define __REGISTER_PREFIX__ #define __AARCH64_CMODEL_SMALL__ 1 #define __AARCH64EL__ 1 #define __ARM_64BIT_STATE 1 @@ -16,406 +77,349 @@ #define __ARM_FP 14 #define __ARM_FP16_ARGS 1 #define __ARM_FP16_FORMAT_IEEE 1 -#define __arm_in(...) [[__extension__ arm::in(__VA_ARGS__)]] -#define __arm_inout(...) [[__extension__ arm::inout(__VA_ARGS__)]] -#define __arm_locally_streaming [[__extension__ arm::locally_streaming]] #define __ARM_NEON 1 #define __ARM_NEON_SVE_BRIDGE 1 -#define __arm_new(...) [[__extension__ arm::new(__VA_ARGS__)]] -#define __arm_out(...) [[__extension__ arm::out(__VA_ARGS__)]] #define __ARM_PCS_AAPCS64 1 -#define __arm_preserves(...) [[__extension__ arm::preserves(__VA_ARGS__)]] #define __ARM_SIZEOF_MINIMAL_ENUM 4 #define __ARM_SIZEOF_WCHAR_T 4 #define __ARM_STATE_ZA 1 #define __ARM_STATE_ZT0 1 +#define __arm_in(...) [[__extension__ arm::in(__VA_ARGS__)]] +#define __arm_inout(...) [[__extension__ arm::inout(__VA_ARGS__)]] +#define __arm_locally_streaming [[__extension__ arm::locally_streaming]] +#define __arm_new(...) [[__extension__ arm::new(__VA_ARGS__)]] +#define __arm_out(...) [[__extension__ arm::out(__VA_ARGS__)]] +#define __arm_preserves(...) [[__extension__ arm::preserves(__VA_ARGS__)]] #define __arm_streaming_compatible [[__extension__ arm::streaming_compatible]] #define __arm_streaming [[__extension__ arm::streaming]] -#define __ATOMIC_ACQ_REL 4 -#define __ATOMIC_ACQUIRE 2 -#define __ATOMIC_CONSUME 1 -#define __ATOMIC_RELAXED 0 -#define __ATOMIC_RELEASE 3 -#define __ATOMIC_SEQ_CST 5 -#define __BFLT16_DECIMAL_DIG__ 4 -#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 -#define __BFLT16_DIG__ 2 -#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 -#define __BFLT16_HAS_DENORM__ 1 -#define __BFLT16_HAS_INFINITY__ 1 -#define __BFLT16_HAS_QUIET_NAN__ 1 -#define __BFLT16_IS_IEC_60559__ 0 -#define __BFLT16_MANT_DIG__ 8 -#define __BFLT16_MAX_10_EXP__ 38 -#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 -#define __BFLT16_MAX_EXP__ 128 -#define __BFLT16_MIN_10_EXP__ (-37) -#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 -#define __BFLT16_MIN_EXP__ (-125) -#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 -#define __BIGGEST_ALIGNMENT__ 16 -#define __BITINT_MAXWIDTH__ 65535 -#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ -#define __CHAR16_TYPE__ short unsigned int -#define __CHAR32_TYPE__ unsigned int -#define __CHAR_BIT__ 8 +#define __aarch64__ 1 +// Atomic +#define __ATOMIC_RELAXED 0 +#define __ATOMIC_CONSUME 1 +#define __ATOMIC_ACQUIRE 2 +#define __ATOMIC_RELEASE 3 +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_SEQ_CST 5 +// Metainfo on types +#define __BIGGEST_ALIGNMENT__ 16 +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __CHAR_BIT__ 8 #define __CHAR_UNSIGNED__ 1 -#define __DBL_DECIMAL_DIG__ 17 -#define __DBL_DENORM_MIN__ ((double)4.94065645841246544176568792868221372e-324L) -#define __DBL_DIG__ 15 -#define __DBL_EPSILON__ ((double)2.22044604925031308084726333618164062e-16L) -#define __DBL_HAS_DENORM__ 1 -#define __DBL_HAS_INFINITY__ 1 -#define __DBL_HAS_QUIET_NAN__ 1 -#define __DBL_IS_IEC_60559__ 1 -#define __DBL_MANT_DIG__ 53 -#define __DBL_MAX_10_EXP__ 308 -#define __DBL_MAX__ ((double)1.79769313486231570814527423731704357e+308L) -#define __DBL_MAX_EXP__ 1024 -#define __DBL_MIN_10_EXP__ (-307) -#define __DBL_MIN__ ((double)2.22507385850720138309023271733240406e-308L) -#define __DBL_MIN_EXP__ (-1021) -#define __DBL_NORM_MAX__ ((double)1.79769313486231570814527423731704357e+308L) -#define __DEC128_EPSILON__ 1E-33DL -#define __DEC128_MANT_DIG__ 34 -#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL -#define __DEC128_MAX_EXP__ 6145 -#define __DEC128_MIN__ 1E-6143DL -#define __DEC128_MIN_EXP__ (-6142) -#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL -#define __DEC32_EPSILON__ 1E-6DF -#define __DEC32_MANT_DIG__ 7 -#define __DEC32_MAX__ 9.999999E96DF -#define __DEC32_MAX_EXP__ 97 -#define __DEC32_MIN__ 1E-95DF -#define __DEC32_MIN_EXP__ (-94) -#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF -#define __DEC64_EPSILON__ 1E-15DD -#define __DEC64_MANT_DIG__ 16 -#define __DEC64_MAX__ 9.999999999999999E384DD -#define __DEC64_MAX_EXP__ 385 -#define __DEC64_MIN__ 1E-383DD -#define __DEC64_MIN_EXP__ (-382) -#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD -#define __DEC_EVAL_METHOD__ 2 -#define __DECIMAL_BID_FORMAT__ 1 -#define __DECIMAL_DIG__ 36 -#define __ELF__ 1 -#define __FINITE_MATH_ONLY__ 0 -#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ -#define __FLT128_DECIMAL_DIG__ 36 -#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 -#define __FLT128_DIG__ 33 -#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 -#define __FLT128_HAS_DENORM__ 1 -#define __FLT128_HAS_INFINITY__ 1 -#define __FLT128_HAS_QUIET_NAN__ 1 -#define __FLT128_IS_IEC_60559__ 1 -#define __FLT128_MANT_DIG__ 113 -#define __FLT128_MAX_10_EXP__ 4932 -#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 -#define __FLT128_MAX_EXP__ 16384 -#define __FLT128_MIN_10_EXP__ (-4931) -#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 -#define __FLT128_MIN_EXP__ (-16381) -#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 -#define __FLT16_DECIMAL_DIG__ 5 -#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 -#define __FLT16_DIG__ 3 -#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 -#define __FLT16_HAS_DENORM__ 1 -#define __FLT16_HAS_INFINITY__ 1 -#define __FLT16_HAS_QUIET_NAN__ 1 -#define __FLT16_IS_IEC_60559__ 1 -#define __FLT16_MANT_DIG__ 11 -#define __FLT16_MAX_10_EXP__ 4 -#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 -#define __FLT16_MAX_EXP__ 16 -#define __FLT16_MIN_10_EXP__ (-4) -#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 -#define __FLT16_MIN_EXP__ (-13) -#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 -#define __FLT32_DECIMAL_DIG__ 9 -#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 -#define __FLT32_DIG__ 6 -#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 -#define __FLT32_HAS_DENORM__ 1 -#define __FLT32_HAS_INFINITY__ 1 -#define __FLT32_HAS_QUIET_NAN__ 1 -#define __FLT32_IS_IEC_60559__ 1 -#define __FLT32_MANT_DIG__ 24 -#define __FLT32_MAX_10_EXP__ 38 -#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 -#define __FLT32_MAX_EXP__ 128 -#define __FLT32_MIN_10_EXP__ (-37) -#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 -#define __FLT32_MIN_EXP__ (-125) -#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 -#define __FLT32X_DECIMAL_DIG__ 17 -#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x -#define __FLT32X_DIG__ 15 -#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x -#define __FLT32X_HAS_DENORM__ 1 -#define __FLT32X_HAS_INFINITY__ 1 -#define __FLT32X_HAS_QUIET_NAN__ 1 -#define __FLT32X_IS_IEC_60559__ 1 -#define __FLT32X_MANT_DIG__ 53 -#define __FLT32X_MAX_10_EXP__ 308 -#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x -#define __FLT32X_MAX_EXP__ 1024 -#define __FLT32X_MIN_10_EXP__ (-307) -#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x -#define __FLT32X_MIN_EXP__ (-1021) -#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x -#define __FLT64_DECIMAL_DIG__ 17 -#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 -#define __FLT64_DIG__ 15 -#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 -#define __FLT64_HAS_DENORM__ 1 -#define __FLT64_HAS_INFINITY__ 1 -#define __FLT64_HAS_QUIET_NAN__ 1 -#define __FLT64_IS_IEC_60559__ 1 -#define __FLT64_MANT_DIG__ 53 -#define __FLT64_MAX_10_EXP__ 308 -#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 -#define __FLT64_MAX_EXP__ 1024 -#define __FLT64_MIN_10_EXP__ (-307) -#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 -#define __FLT64_MIN_EXP__ (-1021) -#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 -#define __FLT64X_DECIMAL_DIG__ 36 -#define __FLT64X_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F64x -#define __FLT64X_DIG__ 33 -#define __FLT64X_EPSILON__ 1.92592994438723585305597794258492732e-34F64x -#define __FLT64X_HAS_DENORM__ 1 -#define __FLT64X_HAS_INFINITY__ 1 -#define __FLT64X_HAS_QUIET_NAN__ 1 -#define __FLT64X_IS_IEC_60559__ 1 -#define __FLT64X_MANT_DIG__ 113 -#define __FLT64X_MAX_10_EXP__ 4932 -#define __FLT64X_MAX__ 1.18973149535723176508575932662800702e+4932F64x -#define __FLT64X_MAX_EXP__ 16384 -#define __FLT64X_MIN_10_EXP__ (-4931) -#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x -#define __FLT64X_MIN_EXP__ (-16381) -#define __FLT64X_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F64x -#define __FLT_DECIMAL_DIG__ 9 -#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F -#define __FLT_DIG__ 6 -#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F -#define __FLT_EVAL_METHOD__ 0 -#define __FLT_EVAL_METHOD_C99__ 0 -#define __FLT_EVAL_METHOD_TS_18661_3__ 0 -#define __FLT_HAS_DENORM__ 1 -#define __FLT_HAS_INFINITY__ 1 -#define __FLT_HAS_QUIET_NAN__ 1 -#define __FLT_IS_IEC_60559__ 1 -#define __FLT_MANT_DIG__ 24 -#define __FLT_MAX_10_EXP__ 38 -#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F -#define __FLT_MAX_EXP__ 128 -#define __FLT_MIN_10_EXP__ (-37) -#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F -#define __FLT_MIN_EXP__ (-125) -#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F -#define __FLT_RADIX__ 2 -#define __FP_FAST_FMA 1 -#define __FP_FAST_FMAF 1 -#define __FP_FAST_FMAF32 1 -#define __FP_FAST_FMAF32x 1 -#define __FP_FAST_FMAF64 1 -#define __GCC_ASM_FLAG_OUTPUTS__ 1 -#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 -#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 -#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 -#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 -#define __GCC_ATOMIC_INT_LOCK_FREE 2 -#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 -#define __GCC_ATOMIC_LONG_LOCK_FREE 2 -#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 -#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 -#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 -#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 -#define __GCC_CONSTRUCTIVE_SIZE 64 -#define __GCC_DESTRUCTIVE_SIZE 256 -#define __GCC_HAVE_DWARF2_CFI_ASM 1 -#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 -#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 1 -#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 -#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 -#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 -#define __GCC_IEC_559 2 -#define __GCC_IEC_559_COMPLEX 2 -#define __GNUC__ 14 -#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" -#define __GNUC_MINOR__ 2 -#define __GNUC_PATCHLEVEL__ 0 -#define __GNUC_STDC_INLINE__ 1 -#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" -#define __gnu_linux__ 1 -#define __GXX_ABI_VERSION 1019 -#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __SIZEOF_SHORT__ 2 +#define __SIZEOF_WCHAR_T__ 4 +#define __SIZEOF_INT__ 4 +#define __SIZEOF_WINT_T__ 4 +#define __SIZEOF_LONG__ 8 +#define __SIZEOF_LONG_LONG__ 8 +#define __SIZEOF_POINTER__ 8 +#define __SIZEOF_PTRDIFF_T__ 8 +#define __SIZEOF_SIZE_T__ 8 +#define __SIZEOF_INT128__ 16 +#define __SIZEOF_FLOAT__ 4 +#define __SIZEOF_DOUBLE__ 8 +#define __SIZEOF_LONG_DOUBLE__ 16 +// Integers +//#define __BITINT_MAXWIDTH__ 65535 +//#define __CHAR16_TYPE__ short unsigned int +//#define __CHAR32_TYPE__ unsigned int +#define __INT8_C(c) c +#define __INT8_MAX__ 0x7f +//#define __INT8_TYPE__ signed char #define __INT16_C(c) c #define __INT16_MAX__ 0x7fff -#define __INT16_TYPE__ short int +//#define __INT16_TYPE__ short int #define __INT32_C(c) c #define __INT32_MAX__ 0x7fffffff -#define __INT32_TYPE__ int +//#define __INT32_TYPE__ int #define __INT64_C(c) c ## L #define __INT64_MAX__ 0x7fffffffffffffffL -#define __INT64_TYPE__ long int -#define __INT8_C(c) c -#define __INT8_MAX__ 0x7f -#define __INT8_TYPE__ signed char +//#define __INT64_TYPE__ long int +#define __INT_FAST8_MAX__ 0x7f +//#define __INT_FAST8_TYPE__ signed char +#define __INT_FAST8_WIDTH__ 8 #define __INT_FAST16_MAX__ 0x7fffffffffffffffL -#define __INT_FAST16_TYPE__ long int +//#define __INT_FAST16_TYPE__ long int #define __INT_FAST16_WIDTH__ 64 #define __INT_FAST32_MAX__ 0x7fffffffffffffffL -#define __INT_FAST32_TYPE__ long int +//#define __INT_FAST32_TYPE__ long int #define __INT_FAST32_WIDTH__ 64 #define __INT_FAST64_MAX__ 0x7fffffffffffffffL -#define __INT_FAST64_TYPE__ long int +//#define __INT_FAST64_TYPE__ long int #define __INT_FAST64_WIDTH__ 64 -#define __INT_FAST8_MAX__ 0x7f -#define __INT_FAST8_TYPE__ signed char -#define __INT_FAST8_WIDTH__ 8 +#define __INT_LEAST8_MAX__ 0x7f +//#define __INT_LEAST8_TYPE__ signed char +#define __INT_LEAST8_WIDTH__ 8 #define __INT_LEAST16_MAX__ 0x7fff -#define __INT_LEAST16_TYPE__ short int +//#define __INT_LEAST16_TYPE__ short int #define __INT_LEAST16_WIDTH__ 16 #define __INT_LEAST32_MAX__ 0x7fffffff -#define __INT_LEAST32_TYPE__ int +//#define __INT_LEAST32_TYPE__ int #define __INT_LEAST32_WIDTH__ 32 #define __INT_LEAST64_MAX__ 0x7fffffffffffffffL -#define __INT_LEAST64_TYPE__ long int +//#define __INT_LEAST64_TYPE__ long int #define __INT_LEAST64_WIDTH__ 64 -#define __INT_LEAST8_MAX__ 0x7f -#define __INT_LEAST8_TYPE__ signed char -#define __INT_LEAST8_WIDTH__ 8 #define __INT_MAX__ 0x7fffffff +#define __INT_WIDTH__ 32 #define __INTMAX_C(c) c ## L #define __INTMAX_MAX__ 0x7fffffffffffffffL -#define __INTMAX_TYPE__ long int +//#define __INTMAX_TYPE__ long int #define __INTMAX_WIDTH__ 64 #define __INTPTR_MAX__ 0x7fffffffffffffffL -#define __INTPTR_TYPE__ long int +//#define __INTPTR_TYPE__ long int #define __INTPTR_WIDTH__ 64 -#define __INT_WIDTH__ 32 -#define __LDBL_DECIMAL_DIG__ 36 -#define __LDBL_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966L -#define __LDBL_DIG__ 33 -#define __LDBL_EPSILON__ 1.92592994438723585305597794258492732e-34L -#define __LDBL_HAS_DENORM__ 1 -#define __LDBL_HAS_INFINITY__ 1 -#define __LDBL_HAS_QUIET_NAN__ 1 -#define __LDBL_IS_IEC_60559__ 1 -#define __LDBL_MANT_DIG__ 113 -#define __LDBL_MAX_10_EXP__ 4932 -#define __LDBL_MAX__ 1.18973149535723176508575932662800702e+4932L -#define __LDBL_MAX_EXP__ 16384 -#define __LDBL_MIN_10_EXP__ (-4931) -#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L -#define __LDBL_MIN_EXP__ (-16381) -#define __LDBL_NORM_MAX__ 1.18973149535723176508575932662800702e+4932L -#define __linux 1 -#define __linux__ 1 -#define linux 1 #define __LONG_LONG_MAX__ 0x7fffffffffffffffLL #define __LONG_LONG_WIDTH__ 64 #define __LONG_MAX__ 0x7fffffffffffffffL #define __LONG_WIDTH__ 64 -#define __LP64__ 1 -#define _LP64 1 -#define __NO_INLINE__ 1 -#define __ORDER_BIG_ENDIAN__ 4321 -#define __ORDER_LITTLE_ENDIAN__ 1234 -#define __ORDER_PDP_ENDIAN__ 3412 -#define __pic__ 2 -#define __PIC__ 2 -#define __pie__ 2 -#define __PIE__ 2 -#define __PRAGMA_REDEFINE_EXTNAME 1 #define __PTRDIFF_MAX__ 0x7fffffffffffffffL -#define __PTRDIFF_TYPE__ long int +//#define __PTRDIFF_TYPE__ long int #define __PTRDIFF_WIDTH__ 64 -#define __REGISTER_PREFIX__ #define __SCHAR_MAX__ 0x7f #define __SCHAR_WIDTH__ 8 #define __SHRT_MAX__ 0x7fff #define __SHRT_WIDTH__ 16 #define __SIG_ATOMIC_MAX__ 0x7fffffff #define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) -#define __SIG_ATOMIC_TYPE__ int +//#define __SIG_ATOMIC_TYPE__ int #define __SIG_ATOMIC_WIDTH__ 32 #define __SIZE_MAX__ 0xffffffffffffffffUL -#define __SIZEOF_DOUBLE__ 8 -#define __SIZEOF_FLOAT__ 4 -#define __SIZEOF_INT128__ 16 -#define __SIZEOF_INT__ 4 -#define __SIZEOF_LONG__ 8 -#define __SIZEOF_LONG_DOUBLE__ 16 -#define __SIZEOF_LONG_LONG__ 8 -#define __SIZEOF_POINTER__ 8 -#define __SIZEOF_PTRDIFF_T__ 8 -#define __SIZEOF_SHORT__ 2 -#define __SIZEOF_SIZE_T__ 8 -#define __SIZEOF_WCHAR_T__ 4 -#define __SIZEOF_WINT_T__ 4 -#define __SIZE_TYPE__ long unsigned int +//#define __SIZE_TYPE__ long unsigned int #define __SIZE_WIDTH__ 64 -#define __STDC__ 1 -#define __STDC_HOSTED__ 1 -#define __STDC_IEC_559__ 1 -#define __STDC_IEC_559_COMPLEX__ 1 -#define __STDC_IEC_60559_BFP__ 201404L -#define __STDC_IEC_60559_COMPLEX__ 201404L -#define __STDC_ISO_10646__ 201706L -#define _STDC_PREDEF_H 1 -#define __STDC_UTF_16__ 1 -#define __STDC_UTF_32__ 1 -#define __STDC_VERSION__ 201710L +#define __UINT8_C(c) c +#define __UINT8_MAX__ 0xff +//#define __UINT8_TYPE__ unsigned char #define __UINT16_C(c) c #define __UINT16_MAX__ 0xffff -#define __UINT16_TYPE__ short unsigned int +//#define __UINT16_TYPE__ short unsigned int #define __UINT32_C(c) c ## U #define __UINT32_MAX__ 0xffffffffU -#define __UINT32_TYPE__ unsigned int +//#define __UINT32_TYPE__ unsigned int #define __UINT64_C(c) c ## UL #define __UINT64_MAX__ 0xffffffffffffffffUL -#define __UINT64_TYPE__ long unsigned int -#define __UINT8_C(c) c -#define __UINT8_MAX__ 0xff -#define __UINT8_TYPE__ unsigned char +//#define __UINT64_TYPE__ long unsigned int +#define __UINT_FAST8_MAX__ 0xff +//#define __UINT_FAST8_TYPE__ unsigned char #define __UINT_FAST16_MAX__ 0xffffffffffffffffUL -#define __UINT_FAST16_TYPE__ long unsigned int +//#define __UINT_FAST16_TYPE__ long unsigned int #define __UINT_FAST32_MAX__ 0xffffffffffffffffUL -#define __UINT_FAST32_TYPE__ long unsigned int +//#define __UINT_FAST32_TYPE__ long unsigned int #define __UINT_FAST64_MAX__ 0xffffffffffffffffUL -#define __UINT_FAST64_TYPE__ long unsigned int -#define __UINT_FAST8_MAX__ 0xff -#define __UINT_FAST8_TYPE__ unsigned char +//#define __UINT_FAST64_TYPE__ long unsigned int +#define __UINT_LEAST8_MAX__ 0xff +//#define __UINT_LEAST8_TYPE__ unsigned char #define __UINT_LEAST16_MAX__ 0xffff -#define __UINT_LEAST16_TYPE__ short unsigned int +//#define __UINT_LEAST16_TYPE__ short unsigned int #define __UINT_LEAST32_MAX__ 0xffffffffU -#define __UINT_LEAST32_TYPE__ unsigned int +//#define __UINT_LEAST32_TYPE__ unsigned int #define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL -#define __UINT_LEAST64_TYPE__ long unsigned int -#define __UINT_LEAST8_MAX__ 0xff -#define __UINT_LEAST8_TYPE__ unsigned char +//#define __UINT_LEAST64_TYPE__ long unsigned int #define __UINTMAX_C(c) c ## UL #define __UINTMAX_MAX__ 0xffffffffffffffffUL -#define __UINTMAX_TYPE__ long unsigned int +//#define __UINTMAX_TYPE__ long unsigned int #define __UINTPTR_MAX__ 0xffffffffffffffffUL -#define __UINTPTR_TYPE__ long unsigned int -#define __unix 1 -#define __unix__ 1 -#define unix 1 -#define __USER_LABEL_PREFIX__ -#define __VERSION__ "14.2.0" +//#define __UINTPTR_TYPE__ long unsigned int #define __WCHAR_MAX__ 0xffffffffU #define __WCHAR_MIN__ 0U -#define __WCHAR_TYPE__ unsigned int +//#define __WCHAR_TYPE__ unsigned int #define __WCHAR_WIDTH__ 32 #define __WINT_MAX__ 0xffffffffU #define __WINT_MIN__ 0U -#define __WINT_TYPE__ unsigned int +//#define __WINT_TYPE__ unsigned int #define __WINT_WIDTH__ 32 +// Floats +//#define __BFLT16_DECIMAL_DIG__ 4 +//#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +//#define __BFLT16_DIG__ 2 +//#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +//#define __BFLT16_HAS_DENORM__ 1 +//#define __BFLT16_HAS_INFINITY__ 1 +//#define __BFLT16_HAS_QUIET_NAN__ 1 +//#define __BFLT16_IS_IEC_60559__ 0 +//#define __BFLT16_MANT_DIG__ 8 +//#define __BFLT16_MAX_10_EXP__ 38 +//#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +//#define __BFLT16_MAX_EXP__ 128 +//#define __BFLT16_MIN_10_EXP__ (-37) +//#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +//#define __BFLT16_MIN_EXP__ (-125) +//#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __DBL_DECIMAL_DIG__ 17 +#define __DBL_DENORM_MIN__ ((double)4.94065645841246544176568792868221372e-324L) +#define __DBL_DIG__ 15 +#define __DBL_EPSILON__ ((double)2.22044604925031308084726333618164062e-16L) +#define __DBL_HAS_DENORM__ 1 +#define __DBL_HAS_INFINITY__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __DBL_IS_IEC_60559__ 1 +#define __DBL_MANT_DIG__ 53 +#define __DBL_MAX_10_EXP__ 308 +#define __DBL_MAX__ ((double)1.79769313486231570814527423731704357e+308L) +#define __DBL_MAX_EXP__ 1024 +#define __DBL_MIN_10_EXP__ (-307) +#define __DBL_MIN__ ((double)2.22507385850720138309023271733240406e-308L) +#define __DBL_MIN_EXP__ (-1021) +#define __DBL_NORM_MAX__ ((double)1.79769313486231570814527423731704357e+308L) +//#define __DEC32_EPSILON__ 1E-6DF +//#define __DEC32_MANT_DIG__ 7 +//#define __DEC32_MAX__ 9.999999E96DF +//#define __DEC32_MAX_EXP__ 97 +//#define __DEC32_MIN__ 1E-95DF +//#define __DEC32_MIN_EXP__ (-94) +//#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +//#define __DEC64_EPSILON__ 1E-15DD +//#define __DEC64_MANT_DIG__ 16 +//#define __DEC64_MAX__ 9.999999999999999E384DD +//#define __DEC64_MAX_EXP__ 385 +//#define __DEC64_MIN__ 1E-383DD +//#define __DEC64_MIN_EXP__ (-382) +//#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +//#define __DEC128_EPSILON__ 1E-33DL +//#define __DEC128_MANT_DIG__ 34 +//#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +//#define __DEC128_MAX_EXP__ 6145 +//#define __DEC128_MIN__ 1E-6143DL +//#define __DEC128_MIN_EXP__ (-6142) +//#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +//#define __DEC_EVAL_METHOD__ 2 +//#define __DECIMAL_BID_FORMAT__ 1 +//#define __DECIMAL_DIG__ 36 +//#define __FLT16_DECIMAL_DIG__ 5 +//#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +//#define __FLT16_DIG__ 3 +//#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +//#define __FLT16_HAS_DENORM__ 1 +//#define __FLT16_HAS_INFINITY__ 1 +//#define __FLT16_HAS_QUIET_NAN__ 1 +//#define __FLT16_IS_IEC_60559__ 1 +//#define __FLT16_MANT_DIG__ 11 +//#define __FLT16_MAX_10_EXP__ 4 +//#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +//#define __FLT16_MAX_EXP__ 16 +//#define __FLT16_MIN_10_EXP__ (-4) +//#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +//#define __FLT16_MIN_EXP__ (-13) +//#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +//#define __FLT32_DECIMAL_DIG__ 9 +//#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +//#define __FLT32_DIG__ 6 +//#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +//#define __FLT32_HAS_DENORM__ 1 +//#define __FLT32_HAS_INFINITY__ 1 +//#define __FLT32_HAS_QUIET_NAN__ 1 +//#define __FLT32_IS_IEC_60559__ 1 +//#define __FLT32_MANT_DIG__ 24 +//#define __FLT32_MAX_10_EXP__ 38 +//#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +//#define __FLT32_MAX_EXP__ 128 +//#define __FLT32_MIN_10_EXP__ (-37) +//#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +//#define __FLT32_MIN_EXP__ (-125) +//#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +//#define __FLT32X_DECIMAL_DIG__ 17 +//#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +//#define __FLT32X_DIG__ 15 +//#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +//#define __FLT32X_HAS_DENORM__ 1 +//#define __FLT32X_HAS_INFINITY__ 1 +//#define __FLT32X_HAS_QUIET_NAN__ 1 +//#define __FLT32X_IS_IEC_60559__ 1 +//#define __FLT32X_MANT_DIG__ 53 +//#define __FLT32X_MAX_10_EXP__ 308 +//#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +//#define __FLT32X_MAX_EXP__ 1024 +//#define __FLT32X_MIN_10_EXP__ (-307) +//#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +//#define __FLT32X_MIN_EXP__ (-1021) +//#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +//#define __FLT64_DECIMAL_DIG__ 17 +//#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +//#define __FLT64_DIG__ 15 +//#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +//#define __FLT64_HAS_DENORM__ 1 +//#define __FLT64_HAS_INFINITY__ 1 +//#define __FLT64_HAS_QUIET_NAN__ 1 +//#define __FLT64_IS_IEC_60559__ 1 +//#define __FLT64_MANT_DIG__ 53 +//#define __FLT64_MAX_10_EXP__ 308 +//#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +//#define __FLT64_MAX_EXP__ 1024 +//#define __FLT64_MIN_10_EXP__ (-307) +//#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +//#define __FLT64_MIN_EXP__ (-1021) +//#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +//#define __FLT64X_DECIMAL_DIG__ 36 +//#define __FLT64X_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F64x +//#define __FLT64X_DIG__ 33 +//#define __FLT64X_EPSILON__ 1.92592994438723585305597794258492732e-34F64x +//#define __FLT64X_HAS_DENORM__ 1 +//#define __FLT64X_HAS_INFINITY__ 1 +//#define __FLT64X_HAS_QUIET_NAN__ 1 +//#define __FLT64X_IS_IEC_60559__ 1 +//#define __FLT64X_MANT_DIG__ 113 +//#define __FLT64X_MAX_10_EXP__ 4932 +//#define __FLT64X_MAX__ 1.18973149535723176508575932662800702e+4932F64x +//#define __FLT64X_MAX_EXP__ 16384 +//#define __FLT64X_MIN_10_EXP__ (-4931) +//#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +//#define __FLT64X_MIN_EXP__ (-16381) +//#define __FLT64X_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F64x +//#define __FLT128_DECIMAL_DIG__ 36 +//#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +//#define __FLT128_DIG__ 33 +//#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +//#define __FLT128_HAS_DENORM__ 1 +//#define __FLT128_HAS_INFINITY__ 1 +//#define __FLT128_HAS_QUIET_NAN__ 1 +//#define __FLT128_IS_IEC_60559__ 1 +//#define __FLT128_MANT_DIG__ 113 +//#define __FLT128_MAX_10_EXP__ 4932 +//#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +//#define __FLT128_MAX_EXP__ 16384 +//#define __FLT128_MIN_10_EXP__ (-4931) +//#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +//#define __FLT128_MIN_EXP__ (-16381) +//#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT_DECIMAL_DIG__ 9 +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT_DIG__ 6 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __FLT_EVAL_METHOD__ 0 +#define __FLT_EVAL_METHOD_C99__ 0 +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __FLT_HAS_DENORM__ 1 +#define __FLT_HAS_INFINITY__ 1 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_IS_IEC_60559__ 1 +#define __FLT_MANT_DIG__ 24 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT_MAX_EXP__ 128 +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __FLT_MIN_EXP__ (-125) +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT_RADIX__ 2 +#define __FP_FAST_FMA 1 +#define __FP_FAST_FMAF 1 +#define __FP_FAST_FMAF32 1 +#define __FP_FAST_FMAF32x 1 +#define __FP_FAST_FMAF64 1 +#define __LDBL_DECIMAL_DIG__ 36 +#define __LDBL_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966L +#define __LDBL_DIG__ 33 +#define __LDBL_EPSILON__ 1.92592994438723585305597794258492732e-34L +#define __LDBL_HAS_DENORM__ 1 +#define __LDBL_HAS_INFINITY__ 1 +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __LDBL_IS_IEC_60559__ 1 +#define __LDBL_MANT_DIG__ 113 +#define __LDBL_MAX_10_EXP__ 4932 +#define __LDBL_MAX__ 1.18973149535723176508575932662800702e+4932L +#define __LDBL_MAX_EXP__ 16384 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __LDBL_MIN_EXP__ (-16381) +#define __LDBL_NORM_MAX__ 1.18973149535723176508575932662800702e+4932L + +#include_next "stdc-predef.h" diff --git a/wrapperhelper/include-override/common/stdc-predef.h b/wrapperhelper/include-override/common/stdc-predef.h new file mode 100644 index 00000000..ace6ec7d --- /dev/null +++ b/wrapperhelper/include-override/common/stdc-predef.h @@ -0,0 +1,4 @@ +// Ignore all attributes +#define __attribute__(_) + +#include_next "stdc-predef.h" diff --git a/wrapperhelper/include-override/x86_64/bits/pthreadtypes-arch.h b/wrapperhelper/include-override/x86_64/bits/pthreadtypes-arch.h new file mode 100644 index 00000000..b23ff3b0 --- /dev/null +++ b/wrapperhelper/include-override/x86_64/bits/pthreadtypes-arch.h @@ -0,0 +1,55 @@ +/* Copyright (C) 2002-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _BITS_PTHREADTYPES_ARCH_H +#define _BITS_PTHREADTYPES_ARCH_H 1 + +#include <bits/wordsize.h> + +#ifdef __x86_64__ +# if __WORDSIZE == 64 +# define __SIZEOF_PTHREAD_MUTEX_T 40 +# define __SIZEOF_PTHREAD_ATTR_T 56 +# define __SIZEOF_PTHREAD_RWLOCK_T 56 +# define __SIZEOF_PTHREAD_BARRIER_T 32 +# else +# define __SIZEOF_PTHREAD_MUTEX_T 32 +# define __SIZEOF_PTHREAD_ATTR_T 32 +# define __SIZEOF_PTHREAD_RWLOCK_T 44 +# define __SIZEOF_PTHREAD_BARRIER_T 20 +# endif +#else +# define __SIZEOF_PTHREAD_MUTEX_T 24 +# define __SIZEOF_PTHREAD_ATTR_T 36 +# define __SIZEOF_PTHREAD_RWLOCK_T 32 +# define __SIZEOF_PTHREAD_BARRIER_T 20 +#endif +#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 +#define __SIZEOF_PTHREAD_COND_T 48 +#define __SIZEOF_PTHREAD_CONDATTR_T 4 +#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 +#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 + +#define __LOCK_ALIGNMENT +#define __ONCE_ALIGNMENT + +#ifndef __x86_64__ +/* Extra attributes for the cleanup functions. */ +# define __cleanup_fct_attribute __attribute__ ((__regparm__ (1))) +#endif + +#endif /* bits/pthreadtypes.h */ diff --git a/wrapperhelper/include-override/x86_64/stdc-predef.h b/wrapperhelper/include-override/x86_64/stdc-predef.h index f88103d8..5ed6af02 100644 --- a/wrapperhelper/include-override/x86_64/stdc-predef.h +++ b/wrapperhelper/include-override/x86_64/stdc-predef.h @@ -14,7 +14,6 @@ #define __pic__ 2 #define __PIE__ 2 #define __pie__ 2 -#define __SSP_STRONG__ 3 #define __USER_LABEL_PREFIX__ #define __gnu_linux__ 1 #define __linux__ 1 @@ -55,20 +54,21 @@ //#define __PRAGMA_REDEFINE_EXTNAME 1 //#define __VERSION__ "14.2.1 20240805" // Specific x86_64 architecture -#define __FXSR__ 1 #define __FINITE_MATH_ONLY__ 0 #define __HAVE_SPECULATION_SAFE_VALUE 1 #define __LP64__ 1 #define _LP64 1 +#define __REGISTER_PREFIX__ +#define __FXSR__ 1 #define __MMX__ 1 #define __MMX_WITH_SSE__ 1 -#define __REGISTER_PREFIX__ #define __SEG_FS 1 #define __SEG_GS 1 #define __SSE__ 1 #define __SSE_MATH__ 1 #define __SSE2__ 1 #define __SSE2_MATH__ 1 +#define __SSP_STRONG__ 3 #define __amd64__ 1 #define __amd64 1 #define __code_model_small__ 1 @@ -88,8 +88,8 @@ // Metainfo on types #define __BIGGEST_ALIGNMENT__ 16 #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ -#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ #define __CHAR_BIT__ 8 +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ #define __SIZEOF_SHORT__ 2 #define __SIZEOF_WCHAR_T__ 4 #define __SIZEOF_INT__ 4 @@ -291,16 +291,16 @@ //#define __FLT32_DIG__ 6 //#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 //#define __FLT32_HAS_DENORM__ 1 -//#define __FLT32_HAS_QUIET_NAN__ 1 //#define __FLT32_HAS_INFINITY__ 1 +//#define __FLT32_HAS_QUIET_NAN__ 1 //#define __FLT32_IS_IEC_60559__ 1 +//#define __FLT32_MANT_DIG__ 24 //#define __FLT32_MAX_10_EXP__ 38 //#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 //#define __FLT32_MAX_EXP__ 128 //#define __FLT32_MIN_10_EXP__ (-37) //#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 //#define __FLT32_MIN_EXP__ (-125) -//#define __FLT32_MANT_DIG__ 24 //#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 //#define __FLT32X_DECIMAL_DIG__ 17 //#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x @@ -359,8 +359,8 @@ //#define __FLT128_HAS_QUIET_NAN__ 1 //#define __FLT128_IS_IEC_60559__ 1 //#define __FLT128_MANT_DIG__ 113 -//#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 //#define __FLT128_MAX_10_EXP__ 4932 +//#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 //#define __FLT128_MAX_EXP__ 16384 //#define __FLT128_MIN_10_EXP__ (-4931) //#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 @@ -403,7 +403,3 @@ #define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L #include_next "stdc-predef.h" - -#define __attribute__(_) -#define inline -#define _Noreturn diff --git a/wrapperhelper/src/generator.c b/wrapperhelper/src/generator.c index 8839f484..cf4d1851 100644 --- a/wrapperhelper/src/generator.c +++ b/wrapperhelper/src/generator.c @@ -964,8 +964,12 @@ static int convert_type_post(string_t *dest, type_t *typ, string_t *obj_name) { } } -int solve_request(request_t *req, type_t *typ, khash_t(conv_map) *conv_map) { - if (typ->typ == TYPE_FUNCTION) { +int solve_request(request_t *req, type_t *emu_typ, type_t *target_typ, khash_t(conv_map) *conv_map) { + if (!type_t_equal(emu_typ, target_typ)) { + printf("Error: TODO: %s: emulated and target types are different\n", string_content(req->obj_name)); + return 0; + } + if (emu_typ->typ == TYPE_FUNCTION) { int needs_D = 0, needs_my = req->def.fun.typ && (req->def.rty == RQT_FUN_MY), needs_2 = 0; int convert_post; size_t idx_conv; @@ -974,15 +978,15 @@ int solve_request(request_t *req, type_t *typ, khash_t(conv_map) *conv_map) { printf("Error: failed to create function type string\n"); return 0; } - if (!convert_type(req->val.fun.typ, typ->val.fun.ret, 1, &needs_D, &needs_my, conv_map, req->obj_name)) goto fun_fail; + if (!convert_type(req->val.fun.typ, emu_typ->val.fun.ret, 1, &needs_D, &needs_my, conv_map, req->obj_name)) goto fun_fail; idx_conv = string_len(req->val.fun.typ); if (!string_add_char(req->val.fun.typ, 'F')) { printf("Error: failed to add convention char\n"); goto fun_fail; } - convert_post = convert_type_post(req->val.fun.typ, typ->val.fun.ret, req->obj_name); + convert_post = convert_type_post(req->val.fun.typ, emu_typ->val.fun.ret, req->obj_name); if (!convert_post) goto fun_fail; - if (typ->val.fun.nargs == (size_t)-1) { + if (emu_typ->val.fun.nargs == (size_t)-1) { printf("Warning: assuming empty specification is void specification\n"); if (convert_post == 1) { if (!string_add_char(req->val.fun.typ, 'v')) { @@ -990,7 +994,7 @@ int solve_request(request_t *req, type_t *typ, khash_t(conv_map) *conv_map) { goto fun_fail; } } - } else if (!typ->val.fun.nargs && !typ->val.fun.has_varargs) { + } else if (!emu_typ->val.fun.nargs && !emu_typ->val.fun.has_varargs) { if (convert_post == 1) { if (!string_add_char(req->val.fun.typ, 'v')) { printf("Error: failed to add void specification char\n"); @@ -998,10 +1002,10 @@ int solve_request(request_t *req, type_t *typ, khash_t(conv_map) *conv_map) { } } } else { - for (size_t i = 0; i < typ->val.fun.nargs; ++i) { - if (!convert_type(req->val.fun.typ, typ->val.fun.args[i], 0, &needs_D, &needs_my, conv_map, req->obj_name)) goto fun_fail; + for (size_t i = 0; i < emu_typ->val.fun.nargs; ++i) { + if (!convert_type(req->val.fun.typ, emu_typ->val.fun.args[i], 0, &needs_D, &needs_my, conv_map, req->obj_name)) goto fun_fail; } - if (typ->val.fun.has_varargs) { + if (emu_typ->val.fun.has_varargs) { if (req->def.fun.typ && (string_len(req->def.fun.typ) == string_len(req->val.fun.typ) + 1) && !strncmp(string_content(req->def.fun.typ), string_content(req->val.fun.typ), string_len(req->val.fun.typ)) @@ -1010,13 +1014,13 @@ int solve_request(request_t *req, type_t *typ, khash_t(conv_map) *conv_map) { if (!string_add_char(req->val.fun.typ, string_content(req->def.fun.typ)[string_len(req->val.fun.typ)])) { printf("Error: failed to add type char '%c' for %s\n", string_content(req->def.fun.typ)[string_len(req->val.fun.typ)], - builtin2str[typ->val.builtin]); + builtin2str[emu_typ->val.builtin]); goto fun_fail; } } else { needs_my = 1; if (!string_add_char(req->val.fun.typ, 'V')) { - printf("Error: failed to add type char 'V' for %s\n", builtin2str[typ->val.builtin]); + printf("Error: failed to add type char 'V' for %s\n", builtin2str[emu_typ->val.builtin]); goto fun_fail; } } @@ -1024,8 +1028,10 @@ int solve_request(request_t *req, type_t *typ, khash_t(conv_map) *conv_map) { } // fun_succ: - // Add 'E' by default - if (needs_my) { + // Add 'E' by default, unless we have the same function as before + if (needs_my && (req->default_comment + || (req->def.rty != RQT_FUN_MY) + || strcmp(string_content(req->def.fun.typ), string_content(req->val.fun.typ)))) { if (!string_add_char_at(req->val.fun.typ, 'E', idx_conv + 1)) { printf("Error: failed to add emu char\n"); goto fun_fail; @@ -1064,45 +1070,62 @@ int solve_request(request_t *req, type_t *typ, khash_t(conv_map) *conv_map) { return 0; } else { int needs_D = 0, needs_my = req->def.dat.has_size && (req->def.rty == RQT_DATAM); - if (is_simple_type(typ, &needs_D, &needs_my, conv_map)) { + if (is_simple_type(emu_typ, &needs_D, &needs_my, conv_map)) { // TODO: Hmm... req->val.rty = needs_my ? RQT_DATAM : req->def.rty; req->val.dat.has_size = 1; - req->val.dat.sz = typ->szinfo.size; + req->val.dat.sz = emu_typ->szinfo.size; req->has_val = 1; return 1; } else { printf("Error: TODO: solve_request for data %s with non-simple type ", string_content(req->obj_name)); - type_print(typ); + type_print(emu_typ); printf("\n"); return 0; } } } -int solve_request_map(request_t *req, khash_t(decl_map) *decl_map, khash_t(conv_map) *conv_map) { - khiter_t it = kh_get(decl_map, decl_map, string_content(req->obj_name)); - if (it == kh_end(decl_map)) { - if (string_content(req->obj_name)[0] != '_') { - printf("Error: %s was not declared\n", string_content(req->obj_name)); - } - return 0; +int solve_request_map(request_t *req, khash_t(decl_map) *emu_decl_map, khash_t(decl_map) *target_decl_map, khash_t(conv_map) *conv_map) { + int hasemu = 0, hastarget = 0; + khiter_t emuit, targetit; + emuit = kh_get(decl_map, emu_decl_map, string_content(req->obj_name)); + if (emuit == kh_end(emu_decl_map)) { + goto failed; + } + if ((kh_val(emu_decl_map, emuit)->storage == STORAGE_STATIC) || (kh_val(emu_decl_map, emuit)->storage == STORAGE_TLS_STATIC)) { + goto failed; + } + targetit = kh_get(decl_map, target_decl_map, string_content(req->obj_name)); + if (targetit == kh_end(target_decl_map)) { + goto failed; } - if ((kh_val(decl_map, it)->storage == STORAGE_STATIC) || (kh_val(decl_map, it)->storage == STORAGE_TLS_STATIC)) { - if (string_content(req->obj_name)[0] != '_') { - printf("Error: %s was not declared\n", string_content(req->obj_name)); + if ((kh_val(target_decl_map, targetit)->storage == STORAGE_STATIC) || (kh_val(target_decl_map, targetit)->storage == STORAGE_TLS_STATIC)) { + goto failed; + } + return solve_request(req, kh_val(emu_decl_map, emuit)->typ, kh_val(target_decl_map, targetit)->typ, conv_map); + +failed: + if (string_content(req->obj_name)[0] != '_') { + if (!hasemu && !hastarget) { + printf("Error: %s was not declared in the emulated and target architectures\n", string_content(req->obj_name)); + } else if (!hasemu) { + printf("Error: %s was not declared only in the emulated architecture\n", string_content(req->obj_name)); + } else if (!hastarget) { + printf("Error: %s was not declared only in the target architecture\n", string_content(req->obj_name)); + } else { + printf("Error: internal error: failed but found for %s\n", string_content(req->obj_name)); } - return 0; } - return solve_request(req, kh_val(decl_map, it)->typ, conv_map); + return 0; } -int solve_references(VECTOR(references) *refs, khash_t(decl_map) *decl_map, khash_t(conv_map) *conv_map) { +int solve_references(VECTOR(references) *refs, khash_t(decl_map) *emu_decl_map, khash_t(decl_map) *target_decl_map, khash_t(conv_map) *conv_map) { int ret = 1; int cond_depth = 0, ok_depth = 0; vector_for(references, ref, refs) { switch (ref->typ) { case REF_REQ: if (ok_depth == cond_depth) { - if (!solve_request_map(&ref->req, decl_map, conv_map)) ret = 0; + if (!solve_request_map(&ref->req, emu_decl_map, target_decl_map, conv_map)) ret = 0; } else { ref->req.ignored = 1; } diff --git a/wrapperhelper/src/generator.h b/wrapperhelper/src/generator.h index 59115eb0..4d8ef120 100644 --- a/wrapperhelper/src/generator.h +++ b/wrapperhelper/src/generator.h @@ -57,8 +57,8 @@ void references_print_check(const VECTOR(references) *refs); void output_from_references(FILE *f, const VECTOR(references) *reqs); VECTOR(references) *references_from_file(const char *filename, FILE *f); // Takes ownership of f -int solve_request(request_t *req, type_t *typ, khash_t(conv_map) *conv_map); -int solve_request_map(request_t *req, khash_t(decl_map) *decl_map, khash_t(conv_map) *conv_map); -int solve_references(VECTOR(references) *reqs, khash_t(decl_map) *decl_map, khash_t(conv_map) *conv_map); +int solve_request(request_t *req, type_t *emu_typ, type_t *target_typ, khash_t(conv_map) *conv_map); +int solve_request_map(request_t *req, khash_t(decl_map) *emu_decl_map, khash_t(decl_map) *target_decl_map, khash_t(conv_map) *conv_map); +int solve_references(VECTOR(references) *reqs, khash_t(decl_map) *emu_decl_map, khash_t(decl_map) *target_decl_map, khash_t(conv_map) *conv_map); #endif // GENERATOR_H diff --git a/wrapperhelper/src/lang.c b/wrapperhelper/src/lang.c index 8aaacc36..c3b5ca19 100644 --- a/wrapperhelper/src/lang.c +++ b/wrapperhelper/src/lang.c @@ -783,6 +783,7 @@ struct_t *struct_new(int is_struct, string_t *tag) { ret->is_struct = is_struct; ret->tag = tag; ret->is_defined = 0; + ret->is_simple = 0; ret->nrefs = 1; return ret; } diff --git a/wrapperhelper/src/machine.c b/wrapperhelper/src/machine.c index 9b54df7a..b89a64ae 100644 --- a/wrapperhelper/src/machine.c +++ b/wrapperhelper/src/machine.c @@ -6,33 +6,34 @@ machine_t machine_x86_64; // machine_t machine_x86; -// machine_t machine_arm64; +machine_t machine_aarch64; #define PASTE2(a, b) a ## b #define PASTE(a, b) PASTE2(a, b) #define STRINGIFY2(a) #a #define STRINGIFY(a) STRINGIFY2(a) #define MACHINE_STR STRINGIFY(CUR_MACHINE) +#define MACHINE_VAL PASTE(machine_, CUR_MACHINE) #define PATHS_OFFSET_PRE 2 // There are two paths that are always included before any other #define ADD_PATH(path) \ - if (!(PASTE(machine_, CUR_MACHINE).include_path[failure_id] = strdup(path))) { \ - printf("Failed to add include path to " MACHINE_STR " platform\n"); \ - goto PASTE(failed_, PASTE(CUR_MACHINE, _paths)); \ - } \ + if (!(MACHINE_VAL.include_path[failure_id] = strdup(path))) { \ + printf("Failed to add include path to " MACHINE_STR " platform\n"); \ + goto PASTE(failed_, PASTE(CUR_MACHINE, _paths)); \ + } \ ++failure_id; #define INIT_PATHS \ - PASTE(machine_, CUR_MACHINE).npaths = PATHS_OFFSET_PRE + npaths + paths_offset_post; \ - if (!(PASTE(machine_, CUR_MACHINE).include_path = \ - malloc(PASTE(machine_, CUR_MACHINE).npaths * sizeof *PASTE(machine_, CUR_MACHINE).include_path))) { \ - printf("Failed to add include path to " MACHINE_STR " platform\n"); \ - goto PASTE(failed_, PASTE(CUR_MACHINE, _nopath)); \ - } \ - failure_id = 0; \ - ADD_PATH("include-override/" MACHINE_STR) \ - ADD_PATH("include-override/common") \ - while (failure_id < PATHS_OFFSET_PRE + npaths) { \ - ADD_PATH(extra_include_path[failure_id - PATHS_OFFSET_PRE]) \ + MACHINE_VAL.npaths = PATHS_OFFSET_PRE + npaths + paths_offset_post; \ + if (!(MACHINE_VAL.include_path = \ + malloc(MACHINE_VAL.npaths * sizeof *MACHINE_VAL.include_path))) { \ + printf("Failed to add include path to " MACHINE_STR " platform\n"); \ + goto PASTE(failed_, PASTE(CUR_MACHINE, _nopath)); \ + } \ + failure_id = 0; \ + ADD_PATH("include-override/" MACHINE_STR) \ + ADD_PATH("include-override/common") \ + while (failure_id < PATHS_OFFSET_PRE + npaths) { \ + ADD_PATH(extra_include_path[failure_id - PATHS_OFFSET_PRE]) \ } int init_machines(size_t npaths, const char *const *extra_include_path) { @@ -49,6 +50,23 @@ int init_machines(size_t npaths, const char *const *extra_include_path) { machine_x86_64.size_long = 8; machine_x86_64.align_valist = 8; machine_x86_64.size_valist = 24; + machine_x86_64.unsigned_char = 1; + machine_x86_64.unnamed_bitfield_aligns = 0; + INIT_PATHS +#define DO_PATH ADD_PATH +#include "machine.gen" +#undef DO_PATH +#undef CUR_MACHINE +#pragma GCC diagnostic pop + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wanalyzer-malloc-leak" +#define CUR_MACHINE aarch64 + machine_aarch64.size_long = 8; + machine_aarch64.align_valist = 8; + machine_aarch64.size_valist = 32; + machine_aarch64.unsigned_char = 0; + machine_aarch64.unnamed_bitfield_aligns = 1; INIT_PATHS #define DO_PATH ADD_PATH #include "machine.gen" @@ -58,6 +76,13 @@ int init_machines(size_t npaths, const char *const *extra_include_path) { return 1; +failed_aarch64_paths: + while (failure_id--) { + free(machine_aarch64.include_path[failure_id]); + } + free(machine_aarch64.include_path); +failed_aarch64_nopath: + failure_id = machine_x86_64.npaths; failed_x86_64_paths: while (failure_id--) { free(machine_x86_64.include_path[failure_id]); @@ -71,10 +96,19 @@ static void machine_del(machine_t *m) { for (size_t path_no = m->npaths; path_no--;) { free(m->include_path[path_no]); } - free(machine_x86_64.include_path); + free(m->include_path); } void del_machines(void) { machine_del(&machine_x86_64); + machine_del(&machine_aarch64); +} + +machine_t *convert_machine_name(const char *archname) { + if (!strcmp(archname, "x86_64")) + return &machine_x86_64; + if (!strcmp(archname, "aarch64")) + return &machine_aarch64; + return NULL; } int validate_type(machine_t *target, type_t *typ) { @@ -238,17 +272,33 @@ int validate_type(machine_t *target, type_t *typ) { printf("Error: bitfields can only have a specific subset of types\n"); return 0; } - if ((mem->typ->val.builtin != BTT_BOOL) && (mem->typ->val.builtin != BTT_INT) - && (mem->typ->val.builtin != BTT_SINT) && (mem->typ->val.builtin != BTT_UINT)) { + if ((mem->typ->val.builtin != BTT_BOOL) && (mem->typ->val.builtin != BTT_CHAR) + && (mem->typ->val.builtin != BTT_SHORT) && (mem->typ->val.builtin != BTT_INT) + && (mem->typ->val.builtin != BTT_LONG) && (mem->typ->val.builtin != BTT_LONGLONG) + && (mem->typ->val.builtin != BTT_SCHAR) && (mem->typ->val.builtin != BTT_UCHAR) + && (mem->typ->val.builtin != BTT_SSHORT) && (mem->typ->val.builtin != BTT_USHORT) + && (mem->typ->val.builtin != BTT_SINT) && (mem->typ->val.builtin != BTT_UINT) + && (mem->typ->val.builtin != BTT_SLONG) && (mem->typ->val.builtin != BTT_ULONG) + && (mem->typ->val.builtin != BTT_S8) && (mem->typ->val.builtin != BTT_U8) + && (mem->typ->val.builtin != BTT_S16) && (mem->typ->val.builtin != BTT_U16) + && (mem->typ->val.builtin != BTT_S32) && (mem->typ->val.builtin != BTT_U32) + && (mem->typ->val.builtin != BTT_S64) && (mem->typ->val.builtin != BTT_U64)) { + // C standard: allow _Bool, (s/u)int + // Implementation: also allow (u/s)char, (u/s)short, (u/s)long, (u/s)long long, [u]intx_t printf("Error: bitfields can only have a specific subset of types\n"); return 0; } - if (!mem->name && (mem->typ->szinfo.align > max_align)) { - printf("Error: TODO: unnamed bitfield member with greater alignment (width=%zu)\n", mem->bitfield_width); + if (mem->typ->szinfo.size < mem->bitfield_width / 8) { + printf("Error: bitfield member %c%s%c has width (%zu) greater than its container size (%zu * 8)\n", + mem->name ? '\'' : '<', + mem->name ? string_content(mem->name) : "unnamed", + mem->name ? '\'' : '>', + mem->bitfield_width, + mem->typ->szinfo.size); return 0; } if (mem->bitfield_width) { - if (mem->name && (max_align < mem->typ->szinfo.align)) max_align = mem->typ->szinfo.align; + if ((target->unnamed_bitfield_aligns || mem->name) && (max_align < mem->typ->szinfo.align)) max_align = mem->typ->szinfo.align; size_t cur_block = cur_sz / mem->typ->szinfo.align; size_t end_block = (cur_sz + (cur_bit + mem->bitfield_width - 1) / 8) / mem->typ->szinfo.align; if (cur_block == end_block) { diff --git a/wrapperhelper/src/machine.h b/wrapperhelper/src/machine.h index b5a5b0ea..566f1d43 100644 --- a/wrapperhelper/src/machine.h +++ b/wrapperhelper/src/machine.h @@ -17,15 +17,14 @@ typedef struct machine_s { // Parsing size_t size_long; size_t align_valist, size_valist; - // TODO: also have info on unnamed bitfields, etc + _Bool unsigned_char; + // Structure parsing + _Bool unnamed_bitfield_aligns; } machine_t; -extern machine_t machine_x86_64; -// extern machine_t machine_x86; -// extern machine_t machine_arm64; - int init_machines(size_t npaths, const char *const *extra_include_path); void del_machines(void); +machine_t *convert_machine_name(const char *archname); int validate_type(machine_t *target, struct type_s *typ); diff --git a/wrapperhelper/src/parse.c b/wrapperhelper/src/parse.c index 4b5b90b9..0254d8df 100644 --- a/wrapperhelper/src/parse.c +++ b/wrapperhelper/src/parse.c @@ -735,7 +735,7 @@ expr_new_token: // expr2 ::= sizeof expr2 // which includes expr2 ::= sizeof ( expr16 ) // expr2 ::= sizeof ( type-name ) - if ((has_level == -1) && (expr_level >= 2) && (tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw = KW_SIZEOF)) { + if ((has_level == -1) && (expr_level >= 2) && (tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_SIZEOF)) { *tok = proc_next_token(prep); if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_LPAREN)) { struct expr_partial_op pop = { @@ -765,8 +765,8 @@ expr_new_token: if (!parse_type_name(target, struct_map, type_map, enum_map, builtins, const_map, type_set, prep, tok, SYM_RPAREN, &typ)) { goto failed; } - if (!typ->is_validated || typ->is_incomplete) { - printf("Error: cannot get the size of an incomplete type\n"); + if (!typ->is_validated || typ->is_incomplete || (typ->typ == TYPE_FUNCTION)) { + printf("Error: cannot get the size of a function or incomplete type\n"); type_del(typ); proc_token_del(tok); goto failed; @@ -817,6 +817,51 @@ expr_new_token: goto pushed_expr; } } + // expr2 ::= _Alignof ( type-name ) + if ((has_level == -1) && (expr_level >= 2) && (tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_ALIGNOF)) { + *tok = proc_next_token(prep); + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_LPAREN)) { + printf("Error: invalid _Alignof expression\n"); + proc_token_del(tok); + goto failed; + } + // Empty destructor + *tok = proc_next_token(prep); + type_t *typ = type_new(); + if (!typ) { + printf("Error: failed to create new type info structure\n"); + proc_token_del(tok); + goto failed; + } + if (!parse_type_name(target, struct_map, type_map, enum_map, builtins, const_map, type_set, prep, tok, SYM_RPAREN, &typ)) { + goto failed; + } + if (!typ->is_validated || typ->is_incomplete || (typ->typ == TYPE_FUNCTION)) { + printf("Error: cannot get the alignment of a function or incomplete type\n"); + type_del(typ); + proc_token_del(tok); + goto failed; + } + e = malloc(sizeof *e); + if (!e) { + printf("Error: failed to create new expression atom\n"); + type_del(typ); + proc_token_del(tok); + goto failed; + } + e->typ = ETY_CONST; + e->val.cst.typ = NCT_UINT64; + e->val.cst.val.u64 = typ->szinfo.align; + has_level = 2; + type_del(typ); + if (!e->val.cst.val.u64) { + proc_token_del(tok); + goto failed; + } + // Empty destructor + *tok = proc_next_token(prep); + goto expr_new_token; + } // expr0 ::= ( expr16 ) // expr1 ::= expr1 ( ) @@ -1327,7 +1372,7 @@ static int eval_expression(expr_t *e, khash_t(const_map) *const_map, num_constan return 1; case BTT_VOID: case BTT_BOOL: - case BTT_CHAR: + case BTT_CHAR: // May be signed or unsigned depending on the machine case BTT_SCHAR: case BTT_SHORT: case BTT_SSHORT: @@ -1960,6 +2005,7 @@ parse_cur_token_decl: } typ->is_incomplete = 0; + typ->is_validated = 0; typ->val.st->has_incomplete = 0; // Filled by the validate_type step typ->val.st->nmembers = vector_size(st_members, members); typ->val.st->members = vector_steal(st_members, members); @@ -3178,14 +3224,14 @@ failed0: return 0; } -int finalize_file(file_t *file) { +static int finalize_file(machine_t *target, file_t *file) { #define MARK_SIMPLE(sname) \ it = kh_get(struct_map, file->struct_map, #sname); \ if (it != kh_end(file->struct_map)) { \ kh_val(file->struct_map, it)->is_simple = 1; \ } else { \ it = kh_get(type_map, file->type_map, #sname); \ - if (it != kh_end(file->struct_map)) { \ + if (it != kh_end(file->type_map)) { \ type_t *typ2 = kh_val(file->type_map, it); \ if (typ2->typ != TYPE_STRUCT_UNION) { \ printf("Error: invalid typedef " #sname ": not a structure\n"); \ @@ -3195,6 +3241,7 @@ int finalize_file(file_t *file) { } \ } #define SET_WEAK(converted) \ + validate_type(target, typ); \ typ = type_try_merge(typ, file->type_set); \ it = kh_put(conv_map, file->relaxed_type_conversion, typ, &iret); \ if (iret < 0) { \ @@ -3206,8 +3253,7 @@ int finalize_file(file_t *file) { type_del(typ); \ return 0; \ } \ - kh_val(file->relaxed_type_conversion, it) = string_new_cstr(#converted); \ - type_del(typ); + kh_val(file->relaxed_type_conversion, it) = string_new_cstr(#converted); #define SET_WEAK_PTR_TO(to_typ, converted) \ it = kh_get(type_map, file->type_map, #to_typ); \ if (it != kh_end(file->type_map)) { \ @@ -3216,6 +3262,7 @@ int finalize_file(file_t *file) { printf("Failed to create type " #to_typ "*\n"); \ return 0; \ } \ + ++kh_val(file->type_map, it)->nrefs; \ SET_WEAK(converted) \ } @@ -3417,7 +3464,7 @@ file_t *parse_file(machine_t *target, const char *filename, FILE *file) { success: preproc_del(prep); type_del(typ); - if (!finalize_file(ret)) { + if (!finalize_file(target, ret)) { printf("Error: failed to add builtin aliases\n"); file_del(ret); return NULL; |