X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=builtins.c;h=ef98a9a4aff1fd2e892aa3e539641f663a686e9d;hb=44b30d66b1236f3eaad9170abc1967527d264fe0;hp=9c40e08ed753154d01f2c06997ac577c5408f6cf;hpb=97ab97809ebbe55864b4cddcfecd8d5284b31913;p=cparser diff --git a/builtins.c b/builtins.c index 9c40e08..ef98a9a 100644 --- a/builtins.c +++ b/builtins.c @@ -79,13 +79,19 @@ void create_gnu_builtins(void) GNU_BUILTIN(__memcpy_chk, make_function_type(type_void_ptr, 4, (type_t *[]) { type_void_ptr_restrict, type_const_void_ptr_restrict, type_size_t, type_size_t}, DM_NONE)); GNU_BUILTIN(memcmp, make_function_type(type_int, 3, (type_t *[]) { type_const_void_ptr, type_const_void_ptr, type_size_t }, DM_PURE)); GNU_BUILTIN(memset, make_function_type(type_void_ptr, 3, (type_t *[]) { type_void_ptr, type_int, type_size_t }, DM_NONE)); + GNU_BUILTIN(__memset_chk, make_function_type(type_void_ptr, 4, (type_t *[]) { type_void_ptr, type_int, type_size_t, type_size_t }, DM_NONE)); GNU_BUILTIN(memmove, make_function_type(type_void_ptr, 3, (type_t *[]) { type_void_ptr_restrict, type_const_void_ptr_restrict, type_size_t }, DM_NONE)); + GNU_BUILTIN(__memmove_chk, make_function_type(type_void_ptr, 4, (type_t *[]) { type_void_ptr_restrict, type_const_void_ptr_restrict, type_size_t, type_size_t }, DM_NONE)); GNU_BUILTIN(strcat, make_function_type(type_char_ptr, 2, (type_t *[]) { type_char_ptr_restrict, type_const_char_ptr_restrict }, DM_NONE)); - GNU_BUILTIN(strcat, make_function_type(type_char_ptr, 3, (type_t *[]) { type_char_ptr_restrict, type_const_char_ptr_restrict, type_size_t }, DM_NONE)); + GNU_BUILTIN(__strcat_chk, make_function_type(type_char_ptr, 3, (type_t *[]) { type_char_ptr_restrict, type_const_char_ptr_restrict, type_size_t }, DM_NONE)); + GNU_BUILTIN(strncat, make_function_type(type_char_ptr, 3, (type_t *[]) { type_char_ptr_restrict, type_const_char_ptr_restrict, type_size_t }, DM_NONE)); + GNU_BUILTIN(__strncat_chk, make_function_type(type_char_ptr, 4, (type_t *[]) { type_char_ptr_restrict, type_const_char_ptr_restrict, type_size_t, type_size_t }, DM_NONE)); GNU_BUILTIN(strlen, make_function_type(type_size_t, 1, (type_t *[]) { type_const_char_ptr }, DM_PURE)); GNU_BUILTIN(strcmp, make_function_type(type_int, 2, (type_t *[]) { type_const_char_ptr, type_const_char_ptr }, DM_PURE)); GNU_BUILTIN(strcpy, make_function_type(type_char_ptr, 2, (type_t *[]) { type_char_ptr_restrict, type_const_char_ptr_restrict }, DM_NONE)); + GNU_BUILTIN(__strcpy_chk, make_function_type(type_char_ptr, 3, (type_t *[]) { type_char_ptr_restrict, type_const_char_ptr_restrict }, DM_NONE)); GNU_BUILTIN(strncpy, make_function_type(type_char_ptr, 3, (type_t *[]) { type_char_ptr_restrict, type_char_ptr_restrict, type_size_t }, DM_NONE)); + GNU_BUILTIN(__strncpy_chk, make_function_type(type_char_ptr, 4, (type_t *[]) { type_char_ptr_restrict, type_char_ptr_restrict, type_size_t, type_size_t }, DM_NONE)); GNU_BUILTIN(exit, make_function_type(type_void, 1, (type_t *[]) { type_int }, DM_NORETURN)); GNU_BUILTIN(malloc, make_function_type(type_void_ptr, 1, (type_t *[]) { type_size_t }, DM_MALLOC)); @@ -98,22 +104,37 @@ void create_gnu_builtins(void) static const char *get_builtin_replacement_name(builtin_kind_t kind) { switch (kind) { - case bk_gnu_builtin_abort: return "abort"; - case bk_gnu_builtin_abs: return "abs"; - case bk_gnu_builtin_labs: return "labs"; - case bk_gnu_builtin_llabs: return "llabs"; - case bk_gnu_builtin_exit: return "exit"; - case bk_gnu_builtin_malloc: return "malloc"; - case bk_gnu_builtin_memcmp: return "memcmp"; - case bk_gnu_builtin_memcpy: return "memcpy"; - case bk_gnu_builtin___memcpy_chk: return "memcpy"; - case bk_gnu_builtin_memset: return "memset"; - case bk_gnu_builtin_memmove: return "memmove"; - case bk_gnu_builtin_strlen: return "strlen"; - case bk_gnu_builtin_strcmp: return "strcmp"; - case bk_gnu_builtin_strcpy: return "strcpy"; - case bk_gnu_builtin_strcat: return "strcat"; - case bk_gnu_builtin_strncat: return "strncat"; + case bk_gnu_builtin___memcpy_chk: return "memcpy"; + case bk_gnu_builtin___memmove_chk: return "memmove"; + case bk_gnu_builtin___memset_chk: return "memset"; + case bk_gnu_builtin___snprintf_chk: return "snprintf"; + case bk_gnu_builtin___sprintf_chk: return "sprintf"; + case bk_gnu_builtin___strcat_chk: return "strcat"; + case bk_gnu_builtin___strcpy_chk: return "strcpy"; + case bk_gnu_builtin___strncat_chk: return "strncat"; + case bk_gnu_builtin___strncpy_chk: return "strncpy"; + case bk_gnu_builtin___vsnprintf_chk: return "vsnprintf"; + case bk_gnu_builtin___vsprintf_chk: return "vsprintf"; + case bk_gnu_builtin_abort: return "abort"; + case bk_gnu_builtin_abs: return "abs"; + case bk_gnu_builtin_exit: return "exit"; + case bk_gnu_builtin_labs: return "labs"; + case bk_gnu_builtin_llabs: return "llabs"; + case bk_gnu_builtin_malloc: return "malloc"; + case bk_gnu_builtin_memcmp: return "memcmp"; + case bk_gnu_builtin_memcpy: return "memcpy"; + case bk_gnu_builtin_memmove: return "memmove"; + case bk_gnu_builtin_memset: return "memset"; + case bk_gnu_builtin_snprintf: return "snprintf"; + case bk_gnu_builtin_sprintf: return "sprintf"; + case bk_gnu_builtin_strcat: return "strcat"; + case bk_gnu_builtin_strcmp: return "strcmp"; + case bk_gnu_builtin_strcpy: return "strcpy"; + case bk_gnu_builtin_strlen: return "strlen"; + case bk_gnu_builtin_strncat: return "strncat"; + case bk_gnu_builtin_strncpy: return "strncpy"; + case bk_gnu_builtin_vsnprintf: return "vsnprintf"; + case bk_gnu_builtin_vsprintf: return "vsprintf"; default: break; @@ -124,7 +145,19 @@ static const char *get_builtin_replacement_name(builtin_kind_t kind) int get_builtin_chk_arg_pos(builtin_kind_t kind) { switch (kind) { - case bk_gnu_builtin___memcpy_chk: return 3; + case bk_gnu_builtin___sprintf_chk: + case bk_gnu_builtin___strcat_chk: + case bk_gnu_builtin___strcpy_chk: + case bk_gnu_builtin___vsprintf_chk: + return 2; + case bk_gnu_builtin___memcpy_chk: + case bk_gnu_builtin___memmove_chk: + case bk_gnu_builtin___memset_chk: + case bk_gnu_builtin___snprintf_chk: + case bk_gnu_builtin___strncat_chk: + case bk_gnu_builtin___strncpy_chk: + case bk_gnu_builtin___vsnprintf_chk: + return 3; default: break; }