[PATCH v2 4/7] builtin: directly predefine builtin macros

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

 



Use the newly created predefine()/predefinef() to
define the builtin macros.

Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx>
---
 lib.c | 83 ++++++++++++++++++++++++++++++++---------------------------
 1 file changed, 45 insertions(+), 38 deletions(-)

diff --git a/lib.c b/lib.c
index 30d1cf6d1..ae7508e05 100644
--- a/lib.c
+++ b/lib.c
@@ -477,8 +477,8 @@ static void handle_arch_m64_finalize(void)
 	switch (arch_m64) {
 	case ARCH_X32:
 		max_int_alignment = 8;
-		add_pre_buffer("#weak_define __ILP32__ 1\n");
-		add_pre_buffer("#weak_define _ILP32 1\n");
+		predefine("__ILP32__", 1, "1");
+		predefine("_ILP32", 1, "1");
 		goto case_x86_64;
 	case ARCH_LP32:
 		/* default values */
@@ -488,15 +488,15 @@ static void handle_arch_m64_finalize(void)
 		max_int_alignment = 8;
 		size_t_ctype = &ulong_ctype;
 		ssize_t_ctype = &long_ctype;
-		add_pre_buffer("#weak_define __LP64__ 1\n");
-		add_pre_buffer("#weak_define _LP64 1\n");
+		predefine("__LP64__", 1, "1");
+		predefine("_LP64", 1, "1");
 		goto case_64bit_common;
 	case ARCH_LLP64:
 		bits_in_long = 32;
 		max_int_alignment = 8;
 		size_t_ctype = &ullong_ctype;
 		ssize_t_ctype = &llong_ctype;
-		add_pre_buffer("#weak_define __LLP64__ 1\n");
+		predefine("__LLP64__", 1, "1");
 		goto case_64bit_common;
 	case_64bit_common:
 		bits_in_pointer = 64;
@@ -504,8 +504,8 @@ static void handle_arch_m64_finalize(void)
 		/* fall through */
 	case_x86_64:
 #if defined(__x86_64__) || defined(__x86_64)
-		add_pre_buffer("#weak_define __x86_64__ 1\n");
-		add_pre_buffer("#weak_define __x86_64   1\n");
+		predefine("__x86_64__", 1, "1");
+		predefine("__x86_64", 1, "1");
 #endif
 		break;
 	}
@@ -1111,14 +1111,19 @@ static char **handle_switch(char *arg, char **next)
 
 static void predefined_sizeof(const char *name, unsigned bits)
 {
-	add_pre_buffer("#weak_define __SIZEOF_%s__ %d\n", name, bits/8);
+	char buf[32];
+
+	snprintf(buf, sizeof(buf), "__SIZEOF_%s__", name);
+	predefine(buf, 1, "%d", bits/8);
 }
 
 static void predefined_max(const char *name, const char *suffix, unsigned bits)
 {
 	unsigned long long max = (1ULL << (bits - 1 )) - 1;
+	char buf[32];
 
-	add_pre_buffer("#weak_define __%s_MAX__ %#llx%s\n", name, max, suffix);
+	snprintf(buf, sizeof(buf), "__%s_MAX__", name);
+	predefine(buf, 1, "%#llx%s", max, suffix);
 }
 
 static void predefined_type_size(const char *name, const char *suffix, unsigned bits)
@@ -1129,13 +1134,13 @@ static void predefined_type_size(const char *name, const char *suffix, unsigned
 
 static void predefined_macros(void)
 {
-	add_pre_buffer("#define __CHECKER__ 1\n");
+	predefine("__CHECKER__", 0, "1");
 
 	predefined_sizeof("SHORT", bits_in_short);
 	predefined_max("SHRT", "", bits_in_short);
 	predefined_max("SCHAR", "", bits_in_char);
 	predefined_max("WCHAR", "", bits_in_wchar);
-	add_pre_buffer("#weak_define __CHAR_BIT__ %d\n", bits_in_char);
+	predefine("__CHAR_BIT__", 1, "%d", bits_in_char);
 
 	predefined_type_size("INT", "", bits_in_int);
 	predefined_type_size("LONG", "L", bits_in_long);
@@ -1151,14 +1156,16 @@ static void predefined_macros(void)
 	predefined_sizeof("DOUBLE", bits_in_double);
 	predefined_sizeof("LONG_DOUBLE", bits_in_longdouble);
 
-	add_pre_buffer("#weak_define __%s_ENDIAN__ 1\n",
-		arch_big_endian ? "BIG" : "LITTLE");
-
-	add_pre_buffer("#weak_define __ORDER_LITTLE_ENDIAN__ 1234\n");
-	add_pre_buffer("#weak_define __ORDER_BIG_ENDIAN__ 4321\n");
-	add_pre_buffer("#weak_define __ORDER_PDP_ENDIAN__ 3412\n");
-	add_pre_buffer("#weak_define __BYTE_ORDER__ __ORDER_%s_ENDIAN__\n",
-		arch_big_endian ? "BIG" : "LITTLE");
+	predefine("__ORDER_LITTLE_ENDIAN__", 1, "1234");
+	predefine("__ORDER_BIG_ENDIAN__", 1, "4321");
+	predefine("__ORDER_PDP_ENDIAN__", 1, "3412");
+	if (arch_big_endian) {
+		predefine("__BIG_ENDIAN__", 1, "1");
+		predefine("__BYTE_ORDER__", 1, "__ORDER_BIG_ENDIAN__");
+	} else {
+		predefine("__LITTLE_ENDIAN__", 1, "1");
+		predefine("__BYTE_ORDER__", 1, "__ORDER_LITTLE_ENDIAN__");
+	}
 }
 
 static void declare_builtin_functions(void)
@@ -1180,9 +1187,9 @@ static void declare_builtin_functions(void)
 
 static void create_builtin_stream(void)
 {
-	add_pre_buffer("#weak_define __GNUC__ %d\n", gcc_major);
-	add_pre_buffer("#weak_define __GNUC_MINOR__ %d\n", gcc_minor);
-	add_pre_buffer("#weak_define __GNUC_PATCHLEVEL__ %d\n", gcc_patchlevel);
+	predefine("__GNUC__", 1, "%d", gcc_major);
+	predefine("__GNUC_MINOR__", 1, "%d", gcc_minor);
+	predefine("__GNUC_PATCHLEVEL__", 1, "%d", gcc_patchlevel);
 
 	/* add the multiarch include directories, if any */
 	if (multiarch_dir && *multiarch_dir) {
@@ -1195,8 +1202,8 @@ static void create_builtin_stream(void)
 	add_pre_buffer("#add_system \"%s/include\"\n", gcc_base_dir);
 	add_pre_buffer("#add_system \"%s/include-fixed\"\n", gcc_base_dir);
 
-	add_pre_buffer("#define __extension__\n");
-	add_pre_buffer("#define __pragma__\n");
+	predefine("__extension__", 0, NULL);
+	predefine("__pragma__", 0, NULL);
 	add_pre_buffer("#define _Pragma(x)\n");
 
 	// gcc defines __SIZE_TYPE__ to be size_t.  For linux/i86 and
@@ -1208,38 +1215,38 @@ static void create_builtin_stream(void)
 		add_pre_buffer("#weak_define __SIZE_TYPE__ long unsigned int\n");
 	else
 		add_pre_buffer("#weak_define __SIZE_TYPE__ unsigned int\n");
-	add_pre_buffer("#weak_define __STDC__ 1\n");
+	predefine("__STDC__", 1, "1");
 
 	switch (standard)
 	{
 		case STANDARD_C89:
-			add_pre_buffer("#weak_define __STRICT_ANSI__\n");
+			predefine("__STRICT_ANSI__", 1, "1");
 			break;
 
 		case STANDARD_C94:
-			add_pre_buffer("#weak_define __STDC_VERSION__ 199409L\n");
-			add_pre_buffer("#weak_define __STRICT_ANSI__\n");
+			predefine("__STDC_VERSION__", 1, "199409L");
+			predefine("__STRICT_ANSI__", 1, "1");
 			break;
 
 		case STANDARD_C99:
-			add_pre_buffer("#weak_define __STDC_VERSION__ 199901L\n");
-			add_pre_buffer("#weak_define __STRICT_ANSI__\n");
+			predefine("__STDC_VERSION__", 1, "199901L");
+			predefine("__STRICT_ANSI__", 1, "1");
 			break;
 
 		case STANDARD_GNU89:
 			break;
 
 		case STANDARD_GNU99:
-			add_pre_buffer("#weak_define __STDC_VERSION__ 199901L\n");
+			predefine("__STDC_VERSION__", 1, "199901L");
 			break;
 
 		case STANDARD_C11:
-			add_pre_buffer("#weak_define __STRICT_ANSI__ 1\n");
+			predefine("__STRICT_ANSI__", 1, "1");
 		case STANDARD_GNU11:
-			add_pre_buffer("#weak_define __STDC_NO_ATOMICS__ 1\n");
-			add_pre_buffer("#weak_define __STDC_NO_COMPLEX__ 1\n");
-			add_pre_buffer("#weak_define __STDC_NO_THREADS__ 1\n");
-			add_pre_buffer("#weak_define __STDC_VERSION__ 201112L\n");
+			predefine("__STDC_NO_ATOMICS__", 1, "1");
+			predefine("__STDC_NO_COMPLEX__", 1, "1");
+			predefine("__STDC_NO_THREADS__", 1, "1");
+			predefine("__STDC_VERSION__", 1, "201112L");
 			break;
 
 		default:
@@ -1259,9 +1266,9 @@ static void create_builtin_stream(void)
 	add_pre_buffer("#define __builtin_va_arg_pack()\n");
 
 	if (optimize_level)
-		add_pre_buffer("#define __OPTIMIZE__ 1\n");
+		predefine("__OPTIMIZE__", 0, "1");
 	if (optimize_size)
-		add_pre_buffer("#define __OPTIMIZE_SIZE__ 1\n");
+		predefine("__OPTIMIZE_SIZE__", 0, "1");
 }
 
 static struct symbol_list *sparse_tokenstream(struct token *token)
-- 
2.17.1

--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[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