301 int Wvla = 1;
302
303 int dump_macro_defs = 0;
304 int dump_macros_only = 0;
305
306 int dbg_compound = 0;
307 int dbg_dead = 0;
308 int dbg_domtree = 0;
309 int dbg_entry = 0;
310 int dbg_ir = 0;
311 int dbg_postorder = 0;
312
313 unsigned long fdump_ir;
314 int fmem_report = 0;
315 unsigned long long fmemcpy_max_count = 100000;
316 unsigned long fpasses = ~0UL;
317 int funsigned_char = UNSIGNED_CHAR;
318
319 int preprocess_only;
320
321 static enum { STANDARD_C89,
322 STANDARD_C94,
323 STANDARD_C99,
324 STANDARD_C11,
325 STANDARD_GNU11,
326 STANDARD_GNU89,
327 STANDARD_GNU99, } standard = STANDARD_GNU89;
328
329 int arch_m64 = ARCH_M64_DEFAULT;
330 int arch_msize_long = 0;
331 int arch_big_endian = ARCH_BIG_ENDIAN;
332 int arch_mach = MACH_NATIVE;
333
334
335 #define CMDLINE_INCLUDE 20
336 static int cmdline_include_nr = 0;
337 static char *cmdline_include[CMDLINE_INCLUDE];
338
339
340 void add_pre_buffer(const char *fmt, ...)
341 {
342 va_list args;
343 unsigned int size;
344 struct token *begin, *end;
345 char buffer[4096];
346
347 va_start(args, fmt);
1296 predefined_sizeof("FLOAT", "", bits_in_float);
1297 predefined_sizeof("DOUBLE", "", bits_in_double);
1298 predefined_sizeof("LONG_DOUBLE", "", bits_in_longdouble);
1299
1300 predefine("__ORDER_LITTLE_ENDIAN__", 1, "1234");
1301 predefine("__ORDER_BIG_ENDIAN__", 1, "4321");
1302 predefine("__ORDER_PDP_ENDIAN__", 1, "3412");
1303 if (arch_big_endian) {
1304 predefine("__BIG_ENDIAN__", 1, "1");
1305 predefine("__BYTE_ORDER__", 1, "__ORDER_BIG_ENDIAN__");
1306 } else {
1307 predefine("__LITTLE_ENDIAN__", 1, "1");
1308 predefine("__BYTE_ORDER__", 1, "__ORDER_LITTLE_ENDIAN__");
1309 }
1310
1311 if (optimize_level)
1312 predefine("__OPTIMIZE__", 0, "1");
1313 if (optimize_size)
1314 predefine("__OPTIMIZE_SIZE__", 0, "1");
1315
1316 // Temporary hacks
1317 predefine("__extension__", 0, NULL);
1318 predefine("__pragma__", 0, NULL);
1319
1320 switch (arch_m64) {
1321 case ARCH_LP32:
1322 break;
1323 case ARCH_X32:
1324 predefine("__ILP32__", 1, "1");
1325 predefine("_ILP32", 1, "1");
1326 break;
1327 case ARCH_LP64:
1328 predefine("__LP64__", 1, "1");
1329 predefine("__LP64", 1, "1");
1330 predefine("_LP64", 1, "1");
1331 break;
1332 case ARCH_LLP64:
1333 predefine("__LLP64__", 1, "1");
1334 break;
1335 }
1336
1337 switch (arch_mach) {
1338 case MACH_ARM64:
1339 predefine("__aarch64__", 1, "1");
1340 break;
1341 case MACH_ARM:
1342 predefine("__arm__", 1, "1");
1343 break;
1344 case MACH_M68K:
1345 predefine("__m68k__", 1, "1");
1346 break;
1347 case MACH_MIPS64:
1348 if (arch_m64 == ARCH_LP64)
1349 predefine("__mips64", 1, "64");
1372 predefine("__riscv", 1, "1");
1373 predefine("__riscv_xlen", 1, "%d", ptr_ctype.bit_size);
1374 break;
1375 case MACH_S390X:
1376 predefine("__zarch__", 1, "1");
1377 predefine("__s390x__", 1, "1");
1378 predefine("__s390__", 1, "1");
1379 break;
1380 case MACH_SPARC64:
1381 if (arch_m64 == ARCH_LP64) {
1382 predefine("__sparc_v9__", 1, "1");
1383 predefine("__sparcv9__", 1, "1");
1384 predefine("__sparcv9", 1, "1");
1385 predefine("__sparc64__", 1, "1");
1386 predefine("__arch64__", 1, "1");
1387 }
1388 /* fall-through */
1389 case MACH_SPARC32:
1390 predefine("__sparc__", 1, "1");
1391 predefine("__sparc", 1, "1");
1392 break;
1393 case MACH_X86_64:
1394 if (arch_m64 != ARCH_LP32) {
1395 predefine("__x86_64__", 1, "1");
1396 predefine("__x86_64", 1, "1");
1397 break;
1398 }
1399 /* fall-through */
1400 case MACH_I386:
1401 predefine("__i386__", 1, "1");
1402 predefine("__i386", 1, "1");
1403 predefine("i386", 1, "1");
1404 break;
1405 }
1406
1407 predefine("__PRAGMA_REDEFINE_EXTNAME", 1, "1");
1408
1409 #ifdef __sun
1410 predefine("__unix__", 1, "1");
1411 predefine("__unix", 1, "1");
1412 predefine("unix", 1, "1");
1413 predefine("__sun__", 1, "1");
1414 predefine("__sun", 1, "1");
1415 predefine("sun", 1, "1");
1416 predefine("__svr4__", 1, "1");
1417 #endif
1418 }
1419
1420 static void create_builtin_stream(void)
1421 {
1422 // Temporary hack
1423 add_pre_buffer("#define _Pragma(x)\n");
1424
1425 /* add the multiarch include directories, if any */
1426 if (multiarch_dir && *multiarch_dir) {
1427 add_pre_buffer("#add_system \"/usr/include/%s\"\n", multiarch_dir);
1428 add_pre_buffer("#add_system \"/usr/local/include/%s\"\n", multiarch_dir);
1429 }
1430
1431 /* We add compiler headers path here because we have to parse
1432 * the arguments to get it, falling back to default. */
1433 add_pre_buffer("#add_system \"%s/include\"\n", gcc_base_dir);
1434 add_pre_buffer("#add_system \"%s/include-fixed\"\n", gcc_base_dir);
1435
1436 add_pre_buffer("#define __has_builtin(x) 0\n");
1437 add_pre_buffer("#define __has_attribute(x) 0\n");
|
301 int Wvla = 1;
302
303 int dump_macro_defs = 0;
304 int dump_macros_only = 0;
305
306 int dbg_compound = 0;
307 int dbg_dead = 0;
308 int dbg_domtree = 0;
309 int dbg_entry = 0;
310 int dbg_ir = 0;
311 int dbg_postorder = 0;
312
313 unsigned long fdump_ir;
314 int fmem_report = 0;
315 unsigned long long fmemcpy_max_count = 100000;
316 unsigned long fpasses = ~0UL;
317 int funsigned_char = UNSIGNED_CHAR;
318
319 int preprocess_only;
320
321 enum standard standard = STANDARD_GNU89;
322
323 int arch_m64 = ARCH_M64_DEFAULT;
324 int arch_msize_long = 0;
325 int arch_big_endian = ARCH_BIG_ENDIAN;
326 int arch_mach = MACH_NATIVE;
327
328
329 #define CMDLINE_INCLUDE 20
330 static int cmdline_include_nr = 0;
331 static char *cmdline_include[CMDLINE_INCLUDE];
332
333
334 void add_pre_buffer(const char *fmt, ...)
335 {
336 va_list args;
337 unsigned int size;
338 struct token *begin, *end;
339 char buffer[4096];
340
341 va_start(args, fmt);
1290 predefined_sizeof("FLOAT", "", bits_in_float);
1291 predefined_sizeof("DOUBLE", "", bits_in_double);
1292 predefined_sizeof("LONG_DOUBLE", "", bits_in_longdouble);
1293
1294 predefine("__ORDER_LITTLE_ENDIAN__", 1, "1234");
1295 predefine("__ORDER_BIG_ENDIAN__", 1, "4321");
1296 predefine("__ORDER_PDP_ENDIAN__", 1, "3412");
1297 if (arch_big_endian) {
1298 predefine("__BIG_ENDIAN__", 1, "1");
1299 predefine("__BYTE_ORDER__", 1, "__ORDER_BIG_ENDIAN__");
1300 } else {
1301 predefine("__LITTLE_ENDIAN__", 1, "1");
1302 predefine("__BYTE_ORDER__", 1, "__ORDER_LITTLE_ENDIAN__");
1303 }
1304
1305 if (optimize_level)
1306 predefine("__OPTIMIZE__", 0, "1");
1307 if (optimize_size)
1308 predefine("__OPTIMIZE_SIZE__", 0, "1");
1309
1310 predefine("__PRAGMA_REDEFINE_EXTNAME", 1, "1");
1311
1312 // Temporary hacks
1313 predefine("__extension__", 0, NULL);
1314 predefine("__pragma__", 0, NULL);
1315
1316 switch (arch_m64) {
1317 case ARCH_LP32:
1318 break;
1319 case ARCH_X32:
1320 predefine("__ILP32__", 1, "1");
1321 predefine("_ILP32", 1, "1");
1322 break;
1323 case ARCH_LP64:
1324 predefine("__LP64__", 1, "1");
1325 predefine("_LP64", 1, "1");
1326 break;
1327 case ARCH_LLP64:
1328 predefine("__LLP64__", 1, "1");
1329 break;
1330 }
1331
1332 switch (arch_mach) {
1333 case MACH_ARM64:
1334 predefine("__aarch64__", 1, "1");
1335 break;
1336 case MACH_ARM:
1337 predefine("__arm__", 1, "1");
1338 break;
1339 case MACH_M68K:
1340 predefine("__m68k__", 1, "1");
1341 break;
1342 case MACH_MIPS64:
1343 if (arch_m64 == ARCH_LP64)
1344 predefine("__mips64", 1, "64");
1367 predefine("__riscv", 1, "1");
1368 predefine("__riscv_xlen", 1, "%d", ptr_ctype.bit_size);
1369 break;
1370 case MACH_S390X:
1371 predefine("__zarch__", 1, "1");
1372 predefine("__s390x__", 1, "1");
1373 predefine("__s390__", 1, "1");
1374 break;
1375 case MACH_SPARC64:
1376 if (arch_m64 == ARCH_LP64) {
1377 predefine("__sparc_v9__", 1, "1");
1378 predefine("__sparcv9__", 1, "1");
1379 predefine("__sparcv9", 1, "1");
1380 predefine("__sparc64__", 1, "1");
1381 predefine("__arch64__", 1, "1");
1382 }
1383 /* fall-through */
1384 case MACH_SPARC32:
1385 predefine("__sparc__", 1, "1");
1386 predefine("__sparc", 1, "1");
1387 predefine_nostd("sparc");
1388 break;
1389 case MACH_X86_64:
1390 if (arch_m64 != ARCH_LP32) {
1391 predefine("__x86_64__", 1, "1");
1392 predefine("__x86_64", 1, "1");
1393 predefine("__amd64__", 1, "1");
1394 predefine("__amd64", 1, "1");
1395 break;
1396 }
1397 /* fall-through */
1398 case MACH_I386:
1399 predefine("__i386__", 1, "1");
1400 predefine("__i386", 1, "1");
1401 predefine_nostd("i386");
1402 break;
1403 }
1404
1405 #if defined(__unix__)
1406 predefine("__unix__", 1, "1");
1407 predefine("__unix", 1, "1");
1408 predefine_nostd("unix");
1409 #endif
1410
1411
1412 #if defined(__sun__) || defined(__sun)
1413 predefine("__sun__", 1, "1");
1414 predefine("__sun", 1, "1");
1415 predefine_nostd("sun");
1416 predefine("__svr4__", 1, "1");
1417 #endif
1418
1419 }
1420
1421 static void create_builtin_stream(void)
1422 {
1423 // Temporary hack
1424 add_pre_buffer("#define _Pragma(x)\n");
1425
1426 /* add the multiarch include directories, if any */
1427 if (multiarch_dir && *multiarch_dir) {
1428 add_pre_buffer("#add_system \"/usr/include/%s\"\n", multiarch_dir);
1429 add_pre_buffer("#add_system \"/usr/local/include/%s\"\n", multiarch_dir);
1430 }
1431
1432 /* We add compiler headers path here because we have to parse
1433 * the arguments to get it, falling back to default. */
1434 add_pre_buffer("#add_system \"%s/include\"\n", gcc_base_dir);
1435 add_pre_buffer("#add_system \"%s/include-fixed\"\n", gcc_base_dir);
1436
1437 add_pre_buffer("#define __has_builtin(x) 0\n");
1438 add_pre_buffer("#define __has_attribute(x) 0\n");
|