Go to the documentation of this file.
54 long_long_int_width=8*8;
58 long_double_width=16*8;
59 char_is_unsigned=
false;
60 wchar_t_is_unsigned=
false;
63 memory_operand_size=int_width/8;
78 long_long_int_width=8*8;
82 long_double_width=8*8;
83 char_is_unsigned=
false;
84 wchar_t_is_unsigned=
false;
87 memory_operand_size=int_width/8;
98 long_long_int_width=8*8;
102 long_double_width=8*8;
103 char_is_unsigned=
false;
104 wchar_t_is_unsigned=
false;
107 memory_operand_size=int_width/8;
118 long_long_int_width=8*8;
122 long_double_width=12*8;
123 char_is_unsigned=
false;
124 wchar_t_is_unsigned=
false;
127 memory_operand_size=int_width/8;
138 long_long_int_width=8*8;
142 long_double_width=8*8;
143 char_is_unsigned=
false;
144 wchar_t_is_unsigned=
false;
147 memory_operand_size=int_width/8;
153 endianness=endiannesst::IS_LITTLE_ENDIAN;
154 char_is_unsigned=
false;
160 case flavourt::CLANG:
161 defines.push_back(
"i386");
162 defines.push_back(
"__i386");
163 defines.push_back(
"__i386__");
164 if(mode == flavourt::CLANG)
165 defines.push_back(
"__LITTLE_ENDIAN__");
168 case flavourt::VISUAL_STUDIO:
169 defines.push_back(
"_M_IX86");
172 case flavourt::CODEWARRIOR:
185 endianness=endiannesst::IS_LITTLE_ENDIAN;
186 long_double_width=16*8;
187 char_is_unsigned=
false;
193 case flavourt::CLANG:
194 defines.push_back(
"__LP64__");
195 defines.push_back(
"__x86_64");
196 defines.push_back(
"__x86_64__");
197 defines.push_back(
"_LP64");
198 defines.push_back(
"__amd64__");
199 defines.push_back(
"__amd64");
201 if(os == ost::OS_MACOS)
202 defines.push_back(
"__LITTLE_ENDIAN__");
205 case flavourt::VISUAL_STUDIO:
206 defines.push_back(
"_M_X64");
207 defines.push_back(
"_M_AMD64");
210 case flavourt::CODEWARRIOR:
222 if(subarch==
"powerpc")
227 if(subarch==
"ppc64le")
228 endianness=endiannesst::IS_LITTLE_ENDIAN;
230 endianness=endiannesst::IS_BIG_ENDIAN;
232 long_double_width=16*8;
233 char_is_unsigned=
true;
239 case flavourt::CLANG:
240 defines.push_back(
"__powerpc");
241 defines.push_back(
"__powerpc__");
242 defines.push_back(
"__POWERPC__");
243 defines.push_back(
"__ppc__");
245 if(os == ost::OS_MACOS)
246 defines.push_back(
"__BIG_ENDIAN__");
248 if(subarch!=
"powerpc")
250 defines.push_back(
"__powerpc64");
251 defines.push_back(
"__powerpc64__");
252 defines.push_back(
"__PPC64__");
253 defines.push_back(
"__ppc64__");
254 if(subarch==
"ppc64le")
256 defines.push_back(
"_CALL_ELF=2");
257 defines.push_back(
"__LITTLE_ENDIAN__");
261 defines.push_back(
"_CALL_ELF=1");
262 defines.push_back(
"__BIG_ENDIAN__");
267 case flavourt::VISUAL_STUDIO:
268 defines.push_back(
"_M_PPC");
271 case flavourt::CODEWARRIOR:
286 long_double_width=16*8;
291 long_double_width=8*8;
294 endianness=endiannesst::IS_LITTLE_ENDIAN;
295 char_is_unsigned=
true;
301 case flavourt::CLANG:
303 defines.push_back(
"__aarch64__");
305 defines.push_back(
"__arm__");
307 defines.push_back(
"__ARM_PCS_VFP");
310 case flavourt::VISUAL_STUDIO:
311 defines.push_back(
"_M_ARM");
314 case flavourt::CODEWARRIOR:
327 endianness=endiannesst::IS_LITTLE_ENDIAN;
328 long_double_width=16*8;
329 char_is_unsigned=
false;
335 defines.push_back(
"__alpha__");
338 case flavourt::VISUAL_STUDIO:
339 defines.push_back(
"_M_ALPHA");
342 case flavourt::CLANG:
343 case flavourt::CODEWARRIOR:
355 if(subarch==
"mipsel" ||
357 subarch==
"mipsn32el" ||
361 long_double_width=8*8;
366 long_double_width=16*8;
369 if(subarch==
"mipsel" ||
370 subarch==
"mipsn32el" ||
372 endianness=endiannesst::IS_LITTLE_ENDIAN;
374 endianness=endiannesst::IS_BIG_ENDIAN;
376 char_is_unsigned=
false;
382 defines.push_back(
"__mips__");
383 defines.push_back(
"mips");
388 case flavourt::VISUAL_STUDIO:
392 case flavourt::CLANG:
393 case flavourt::CODEWARRIOR:
406 endianness = endiannesst::IS_LITTLE_ENDIAN;
407 long_double_width = 16 * 8;
408 char_is_unsigned =
true;
414 defines.push_back(
"__riscv");
417 case flavourt::VISUAL_STUDIO:
418 case flavourt::CLANG:
419 case flavourt::CODEWARRIOR:
432 endianness=endiannesst::IS_BIG_ENDIAN;
433 long_double_width=16*8;
434 char_is_unsigned=
true;
440 defines.push_back(
"__s390__");
443 case flavourt::VISUAL_STUDIO:
447 case flavourt::CLANG:
448 case flavourt::CODEWARRIOR:
461 endianness=endiannesst::IS_BIG_ENDIAN;
462 char_is_unsigned=
true;
468 defines.push_back(
"__s390x__");
471 case flavourt::VISUAL_STUDIO:
475 case flavourt::CLANG:
476 case flavourt::CODEWARRIOR:
488 if(subarch==
"sparc64")
491 long_double_width=16*8;
496 long_double_width=16*8;
499 endianness=endiannesst::IS_BIG_ENDIAN;
500 char_is_unsigned=
false;
506 defines.push_back(
"__sparc__");
507 if(subarch==
"sparc64")
508 defines.push_back(
"__arch64__");
511 case flavourt::VISUAL_STUDIO:
515 case flavourt::CLANG:
516 case flavourt::CODEWARRIOR:
529 long_double_width=16*8;
530 endianness=endiannesst::IS_LITTLE_ENDIAN;
531 char_is_unsigned=
false;
537 defines.push_back(
"__ia64__");
538 defines.push_back(
"_IA64");
539 defines.push_back(
"__IA64__");
542 case flavourt::VISUAL_STUDIO:
543 defines.push_back(
"_M_IA64");
546 case flavourt::CLANG:
547 case flavourt::CODEWARRIOR:
562 long_double_width=16*8;
563 endianness=endiannesst::IS_LITTLE_ENDIAN;
564 char_is_unsigned=
false;
570 defines.push_back(
"__ILP32__");
571 defines.push_back(
"__x86_64");
572 defines.push_back(
"__x86_64__");
573 defines.push_back(
"__amd64__");
574 defines.push_back(
"__amd64");
577 case flavourt::VISUAL_STUDIO:
581 case flavourt::CLANG:
582 case flavourt::CODEWARRIOR:
606 long_double_width=8*8;
607 endianness=endiannesst::IS_LITTLE_ENDIAN;
610 char_is_unsigned=
false;
619 long_double_width=8*8;
620 endianness=endiannesst::IS_BIG_ENDIAN;
621 char_is_unsigned=
false;
627 defines.push_back(
"__hppa__");
630 case flavourt::VISUAL_STUDIO:
634 case flavourt::CLANG:
635 case flavourt::CODEWARRIOR:
648 long_double_width=8*8;
649 endianness=endiannesst::IS_LITTLE_ENDIAN;
650 char_is_unsigned=
false;
656 defines.push_back(
"__sh__");
657 defines.push_back(
"__SH4__");
660 case flavourt::VISUAL_STUDIO:
664 case flavourt::CLANG:
665 case flavourt::CODEWARRIOR:
677 #if defined(__APPLE__)
679 return c_standardt::C11;
680 #elif defined(__FreeBSD__) || defined(__OpenBSD__)
683 return c_standardt::C99;
686 return c_standardt::C11;
696 return cpp_standardt::CPP14;
698 return cpp_standardt::CPP98;
713 if(
sizeof(
long int)==8)
718 else if(arch==
"alpha")
720 else if(arch==
"arm64" ||
725 else if(arch==
"mips64el" ||
732 else if(arch==
"powerpc" ||
736 else if(arch ==
"riscv64")
738 else if(arch==
"sparc" ||
741 else if(arch==
"ia64")
743 else if(arch==
"s390x")
745 else if(arch==
"s390")
749 else if(arch==
"v850")
751 else if(arch==
"hppa")
755 else if(arch==
"x86_64")
757 else if(arch==
"i386")
776 const std::string &argument,
777 const std::size_t pointer_width)
779 const auto throw_for_reason = [&](
const std::string &reason) {
781 "Value of \"" + argument +
"\" given for object-bits is " + reason +
782 ". object-bits must be positive and less than the pointer width (" +
786 const auto object_bits = string2optional<unsigned int>(argument);
788 throw_for_reason(
"not a valid unsigned integer");
789 if(*object_bits == 0 || *object_bits >= pointer_width)
790 throw_for_reason(
"out of range");
822 if(cmdline.
isset(
"function"))
825 if(cmdline.
isset(
'D'))
828 if(cmdline.
isset(
'I'))
831 if(cmdline.
isset(
"classpath"))
837 else if(cmdline.
isset(
"cp"))
846 const char *CLASSPATH=getenv(
"CLASSPATH");
847 if(CLASSPATH!=
nullptr)
853 if(cmdline.
isset(
"main-class"))
856 if(cmdline.
isset(
"include"))
868 if(cmdline.
isset(
"i386-linux"))
873 else if(cmdline.
isset(
"i386-win32") ||
874 cmdline.
isset(
"win32"))
879 else if(cmdline.
isset(
"winx64"))
884 else if(cmdline.
isset(
"i386-macos"))
889 else if(cmdline.
isset(
"ppc-macos"))
895 if(cmdline.
isset(
"arch"))
900 if(cmdline.
isset(
"os"))
912 if(cmdline.
isset(
"gcc"))
955 else if(os==
"linux" || os==
"solaris")
962 else if(os==
"freebsd")
996 if(arch ==
"x86_64" && cmdline.
isset(
"gcc"))
1001 else if(os ==
"macos" && arch ==
"arm64")
1011 if(arch==this_arch && os==this_os)
1015 "int width shall be equal to the system int width");
1018 "long int width shall be equal to the system long int width");
1021 "bool width shall be equal to the system bool width");
1024 "char width shall be equal to the system char width");
1027 "short int width shall be equal to the system short int width");
1030 "long long int width shall be equal to the system long long int width");
1033 "pointer width shall be equal to the system pointer width");
1036 "float width shall be equal to the system float width");
1039 "double width shall be equal to the system double width");
1042 (
static_cast<char>((1 << CHAR_BIT) - 1) == (1 << CHAR_BIT) - 1),
1043 "char_is_unsigned flag shall indicate system char unsignedness");
1049 "long double width shall be equal to the system long double width");
1055 if(cmdline.
isset(
"16"))
1058 if(cmdline.
isset(
"32"))
1061 if(cmdline.
isset(
"64"))
1064 if(cmdline.
isset(
"LP64"))
1067 if(cmdline.
isset(
"ILP64"))
1070 if(cmdline.
isset(
"LLP64"))
1073 if(cmdline.
isset(
"ILP32"))
1076 if(cmdline.
isset(
"LP32"))
1079 if(cmdline.
isset(
"string-abstraction"))
1084 if(cmdline.
isset(
"no-library"))
1087 if(cmdline.
isset(
"little-endian"))
1090 if(cmdline.
isset(
"big-endian"))
1093 if(cmdline.
isset(
"little-endian") &&
1094 cmdline.
isset(
"big-endian"))
1097 if(cmdline.
isset(
"unsigned-char"))
1100 if(cmdline.
isset(
"round-to-even") ||
1101 cmdline.
isset(
"round-to-nearest"))
1104 if(cmdline.
isset(
"round-to-plus-inf"))
1107 if(cmdline.
isset(
"round-to-minus-inf"))
1110 if(cmdline.
isset(
"round-to-zero"))
1113 if(cmdline.
isset(
"object-bits"))
1119 if(cmdline.
isset(
"malloc-fail-assert") && cmdline.
isset(
"malloc-fail-null"))
1122 "at most one malloc failure mode is acceptable",
"--malloc-fail-null"};
1124 if(cmdline.
isset(
"malloc-fail-null"))
1126 if(cmdline.
isset(
"malloc-fail-assert"))
1131 if(cmdline.
isset(
"c89"))
1134 if(cmdline.
isset(
"c99"))
1137 if(cmdline.
isset(
"c11"))
1140 if(cmdline.
isset(
"cpp98"))
1143 if(cmdline.
isset(
"cpp03"))
1146 if(cmdline.
isset(
"cpp11"))
1163 const auto pointer_bits_2log =
1180 case ost::OS_LINUX:
return "linux";
1181 case ost::OS_MACOS:
return "macos";
1182 case ost::OS_WIN:
return "win";
1183 case ost::NO_OS:
return "none";
1193 return ost::OS_LINUX;
1194 else if(os==
"macos")
1195 return ost::OS_MACOS;
1204 const std::string &what)
1209 const bool not_found = ns.
lookup(
id, symbol);
1215 tmp.
id() == ID_address_of &&
1219 "symbol table configuration entry '" +
id2string(
id) +
1220 "' must be a string constant");
1227 const std::string &what)
1232 const bool not_found = ns.
lookup(
id, symbol);
1239 tmp.
id() == ID_constant,
1240 "symbol table configuration entry '" +
id2string(
id) +
1241 "' must be a constant");
1248 "symbol table configuration entry '" +
id2string(
id) +
1249 "' must be convertible to mp_integer");
1251 return numeric_cast_v<unsigned>(int_value);
1325 const symbolt &entry_point_symbol=*maybe_symbol;
1327 if(entry_point_symbol.
mode==ID_java)
1329 else if(entry_point_symbol.
mode==ID_C)
1331 else if(entry_point_symbol.
mode==ID_cpp)
1335 "object_bits should fit into pointer width");
1357 this_arch =
"alpha";
1358 #elif defined(__armel__)
1359 this_arch =
"armel";
1360 #elif defined(__aarch64__)
1361 this_arch =
"arm64";
1362 #elif defined(__arm__)
1363 #ifdef __ARM_PCS_VFP
1364 this_arch =
"armhf";
1368 #elif defined(__mipsel__)
1369 #if _MIPS_SIM==_ABIO32
1370 this_arch =
"mipsel";
1371 #elif _MIPS_SIM==_ABIN32
1372 this_arch =
"mipsn32el";
1374 this_arch =
"mips64el";
1376 #elif defined(__mips__)
1377 #if _MIPS_SIM==_ABIO32
1379 #elif _MIPS_SIM==_ABIN32
1380 this_arch =
"mipsn32";
1382 this_arch =
"mips64";
1384 #elif defined(__powerpc__)
1385 #if defined(__ppc64__) || defined(__PPC64__) || \
1386 defined(__powerpc64__) || defined(__POWERPC64__)
1387 #ifdef __LITTLE_ENDIAN__
1388 this_arch =
"ppc64le";
1390 this_arch =
"ppc64";
1393 this_arch =
"powerpc";
1395 #elif defined(__riscv)
1396 this_arch =
"riscv64";
1397 #elif defined(__sparc__)
1399 this_arch =
"sparc64";
1401 this_arch =
"sparc";
1403 #elif defined(__ia64__)
1405 #elif defined(__s390x__)
1406 this_arch =
"s390x";
1407 #elif defined(__s390__)
1409 #elif defined(__x86_64__)
1413 this_arch =
"x86_64";
1415 #elif defined(__i386__)
1417 #elif defined(_WIN64)
1418 this_arch =
"x86_64";
1419 #elif defined(_WIN32)
1421 #elif defined(__hppa__)
1423 #elif defined(__sh__)
1427 this_arch =
"unknown";
1439 const char cp_separator =
';';
1441 const char cp_separator =
':';
1444 std::vector<std::string> class_path =
1447 java.
classpath.end(), class_path.begin(), class_path.end());
#define UNREACHABLE
This should be used to mark dead code.
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
bool ts_18661_3_Floatn_types
std::list< std::string > defines
std::string object_bits_info()
static ost string_to_os(const std::string &)
struct configt::bv_encodingt bv_encoding
virtual bool isset(char option) const
void set_arch_spec_s390x()
std::size_t wchar_t_width
std::list< std::string > include_paths
@ malloc_failure_mode_assert_then_assume
const index_exprt & to_index_expr(const exprt &expr)
Cast an exprt to an index_exprt.
void set_arch_spec_mips(const irep_idt &subarch)
optionalt< std::string > main
void set_arch_spec_i386()
Base class for all expressions.
ieee_floatt::rounding_modet rounding_mode
void set_LP32()
int=16, long=32, pointer=32
std::string to_string(const string_not_contains_constraintt &expr)
Used for debug printing.
void set_arch_spec_power(const irep_idt &subarch)
struct configt::ansi_ct ansi_c
void set_arch_spec_hppa()
Globally accessible architectural configuration.
configt::bv_encodingt parse_object_bits_encoding(const std::string &argument, const std::size_t pointer_width)
Parses the object_bits argument from the command line arguments.
const irep_idt & get(const irep_idt &name) const
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
void set_arch_spec_ia64()
bool lookup(const irep_idt &name, const symbolt *&symbol) const override
See documentation for namespace_baset::lookup().
void split_string(const std::string &s, char delim, std::vector< std::string > &result, bool strip, bool remove_empty)
irep_idt mode
Language mode.
void set_arch_spec_arm(const irep_idt &subarch)
static unsigned unsigned_from_ns(const namespacet &ns, const std::string &what)
#define DATA_INVARIANT(CONDITION, REASON)
This condition should be used to document that assumptions that are made on goto_functions,...
const std::string & id2string(const irep_idt &d)
void set_arch_spec_s390()
preprocessort preprocessor
@ malloc_failure_mode_return_null
void set_arch_spec_riscv64()
static const std::size_t default_object_bits
static const std::size_t default_object_bits
void set_arch_spec_alpha()
bool is_object_bits_default
std::size_t memory_operand_size
std::string get_value(char option) const
optionalt< mp_integer > max_argc
Maximum value of argc, which is operating-systems dependent: Windows limits the number of characters ...
bool simplify(exprt &expr, const namespacet &ns)
std::size_t long_long_int_width
void set_ILP64()
int=64, long=64, pointer=64
mp_integer alignment(const typet &type, const namespacet &ns)
static irep_idt this_operating_system()
const irep_idt & id() const
void set_LLP64()
int=32, long=32, pointer=64
void set_from_symbol_table(const symbol_tablet &)
static std::string os_to_string(ost)
static const std::size_t default_object_bits
std::list< std::string > include_files
static c_standardt default_c_standard()
void set_ILP32()
int=32, long=32, pointer=32
static irep_idt this_architecture()
exprt value
Initial value of symbol.
static irep_idt string_from_ns(const namespacet &ns, const std::string &what)
bool set(const cmdlinet &cmdline)
static cpp_standardt default_cpp_standard()
enum configt::ansi_ct::c_standardt c_standard
void set_arch_spec_sparc(const irep_idt &subarch)
const symbolst & symbols
Read-only field, used to look up symbols given their names.
void set_LP64()
int=32, long=64, pointer=64
std::size_t long_double_width
struct configt::javat java
void set_arch_spec_v850()
Sets up the widths of variables for the Renesas V850.
std::size_t short_int_width
const symbolt * lookup(const irep_idt &name) const
Find a symbol in the symbol table for read-only access.
void set_arch_spec_x86_64()
const address_of_exprt & to_address_of_expr(const exprt &expr)
Cast an exprt to an address_of_exprt.
malloc_failure_modet malloc_failure_mode
std::size_t pointer_width
void set_classpath(const std::string &cp)
Thrown when users pass incorrect command line arguments, for example passing no files to analysis or ...
bool single_precision_constant
const std::list< std::string > & get_values(const std::string &option) const
void set_object_bits_from_symbol_table(const symbol_tablet &)
Sets the number of bits used for object addresses.
void set_arch(const irep_idt &)
std::size_t long_int_width
enum configt::cppt::cpp_standardt cpp_standard
const constant_exprt & to_constant_expr(const exprt &expr)
Cast an exprt to a constant_exprt.