123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145(****************************************************************************)(* *)(* This file is part of MOPSA, a Modular Open Platform for Static Analysis. *)(* *)(* Copyright (C) 2017-2019 The MOPSA Project. *)(* *)(* This program 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 3 of the License, or *)(* (at your option) any later version. *)(* *)(* This program 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 this program. If not, see <http://www.gnu.org/licenses/>. *)(* *)(****************************************************************************)(** List of builtin functions *)letbuiltin_functions=Hashtbl.create16let_=List.iter(funa->Hashtbl.addbuiltin_functionsa())["__builtin_constant_p";"__builtin_expect";"__builtin_va_start";"__builtin_va_end";"__builtin_va_copy";"__builtin_alloca";"alloca";"printf";"__printf_chk";"fprintf";"__fprintf_chk";"dprintf";"sprintf";"__sprintf_chk";"__builtin___sprintf_chk";"snprintf";"asprintf";"vasprintf";"fscanf";"scanf";"sscanf";"fwprintf";"wprintf";"swprintf";"syslog";"_mopsa_rand_s8";"_mopsa_rand_u8";"_mopsa_rand_s16";"_mopsa_rand_u16";"_mopsa_rand_s32";"_mopsa_rand_u32";"_mopsa_rand_s64";"_mopsa_rand_u64";"_mopsa_rand_float";"_mopsa_rand_double";"_mopsa_rand_void_pointer";"_mopsa_range_s8";"_mopsa_range_u8";"_mopsa_range_s16";"_mopsa_range_u16";"_mopsa_range_s32";"_mopsa_range_u32";"_mopsa_range_s64";"_mopsa_range_u64";"_mopsa_range_int";"_mopsa_range_float";"_mopsa_range_double";"_mopsa_invalid_pointer";"_mopsa_panic";"_mopsa_print";"_mopsa_assume";"_mopsa_assert_exists";"_mopsa_assert";"_mopsa_assert_safe";"_mopsa_assert_unsafe";"_mopsa_assert_unreachable";"_mopsa_assert_reachable";"_mopsa_register_file_resource";"_mopsa_register_file_resource_at";"_mopsa_find_file_resource";(* "error"; *)(* "error_at_line"; *)"exit";"quick_exit";"__builtin_isfinite";"__builtin_isnormal";"__builtin_isnan";"__builtin_isinf_sign";"__builtin_huge_val";"__builtin_huge_valf";"__builtin_huge_vall";"__builtin_inff";"__builtin_nanf";"__builtin_signbit";"__builtin_fpclassify";"__builtin_isgreater";"__builtin_isgreaterequal";"__builtin_isless";"__builtin_islessequal";"__builtin_islessgreater";"__builtin_isunordered";"__builtin_sadd_overflow";"__builtin_saddl_overflow";"__builtin_saddll_overflow";"__builtin_uadd_overflow";"__builtin_uaddl_overflow";"__builtin_uaddll_overflow";"__builtin_smul_overflow";"__builtin_smull_overflow";"__builtin_smulll_overflow";"__builtin_umul_overflow";"__builtin_umull_overflow";"__builtin_umulll_overflow";"__builtin___memcpy_chk";"__builtin___memmove_chk";"__builtin___memset_chk";"__builtin___strcpy_chk"]letis_builtin_function=Hashtbl.membuiltin_functions