[PATCH v2 13/14] add predefined macros for [u]int32_t

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



These are a pain. All LP64 archs use [u]int. Good.
But some LP32 archs use [u]int and some others use [u]long.
Some even use [u]int for some ABI and [u]loing for some others
(bare metal).

This really need to be target-specific to be correct.

Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx>
---
 lib.c                            | 10 ++++++++++
 target.c                         |  2 ++
 target.h                         |  2 ++
 validation/preprocessor/predef.c |  2 ++
 4 files changed, 16 insertions(+)

diff --git a/lib.c b/lib.c
index 2aac93955..78f33fa63 100644
--- a/lib.c
+++ b/lib.c
@@ -495,6 +495,14 @@ static void handle_arch_m64_finalize(void)
 		goto case_x86_64;
 	case ARCH_LP32:
 		/* default values */
+#if defined(__m68k__) \
+	|| ((defined(__sparc__) || defined(__sparc)) && !defined(__sparc_v9__)) \
+	|| defined(__mips__) || defined(__mips) \
+	|| defined(__powerpc__) || defined(__PPC__) || defined(PPC) \
+	|| defined(__riscv__) || defined(__riscv)
+		int32_ctype = &long_ctype;
+		uint32_ctype = &ulong_ctype;
+#endif
 		int64_ctype = &llong_ctype;
 		uint64_ctype = &ullong_ctype;
 		intmax_ctype = &llong_ctype;
@@ -1278,6 +1286,8 @@ static void predefined_macros(void)
 	predefined_ctype("UINT8",     &uchar_ctype, PTYPE_MAX|PTYPE_TYPE);
 	predefined_ctype("INT16",     &short_ctype, PTYPE_MAX|PTYPE_TYPE);
 	predefined_ctype("UINT16",   &ushort_ctype, PTYPE_MAX|PTYPE_TYPE);
+	predefined_ctype("INT32",      int32_ctype, PTYPE_MAX|PTYPE_TYPE);
+	predefined_ctype("UINT32",    uint32_ctype, PTYPE_MAX|PTYPE_TYPE);
 	predefined_ctype("INT64",      int64_ctype, PTYPE_MAX|PTYPE_TYPE);
 	predefined_ctype("UINT64",    uint64_ctype, PTYPE_MAX|PTYPE_TYPE);
 
diff --git a/target.c b/target.c
index 0476f0cd6..7512b0bda 100644
--- a/target.c
+++ b/target.c
@@ -9,6 +9,8 @@ struct symbol *intmax_ctype = &llong_ctype;
 struct symbol *uintmax_ctype = &ullong_ctype;
 struct symbol *int64_ctype = &long_ctype;
 struct symbol *uint64_ctype = &ulong_ctype;
+struct symbol *int32_ctype = &int_ctype;
+struct symbol *uint32_ctype = &uint_ctype;
 struct symbol *wchar_ctype = &int_ctype;
 struct symbol *wint_ctype = &uint_ctype;
 
diff --git a/target.h b/target.h
index 7b1d96498..8bbe494f8 100644
--- a/target.h
+++ b/target.h
@@ -7,6 +7,8 @@ extern struct symbol *intmax_ctype;
 extern struct symbol *uintmax_ctype;
 extern struct symbol *int64_ctype;
 extern struct symbol *uint64_ctype;
+extern struct symbol *int32_ctype;
+extern struct symbol *uint32_ctype;
 extern struct symbol *wchar_ctype;
 extern struct symbol *wint_ctype;
 
diff --git a/validation/preprocessor/predef.c b/validation/preprocessor/predef.c
index f00a471fc..5678acedf 100644
--- a/validation/preprocessor/predef.c
+++ b/validation/preprocessor/predef.c
@@ -21,6 +21,8 @@ int test(void)
 	TEST_MAX(UINT8,  0xffU);
 	TEST_MAX( INT16, 0x7fff);
 	TEST_MAX(UINT16, 0xffffU);
+	TEST_MAX( INT32, 0x7fffffff);
+	TEST_MAX(UINT32, 0xffffffffU);
 	TEST_MAX( INT64, 0x7fffffffffffffffLL);
 	TEST_MAX(UINT64, 0xffffffffffffffffULL);
 	TEST_SMAX(INTMAX, __INTMAX_TYPE__);
-- 
2.19.0




[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux