32#define FFF_MAX_ARGS (20u) 
   33#ifndef FFF_ARG_HISTORY_LEN 
   34#define FFF_ARG_HISTORY_LEN (50u) 
   36#ifndef FFF_CALL_HISTORY_LEN 
   37#define FFF_CALL_HISTORY_LEN (50u) 
   39#ifndef FFF_GCC_FUNCTION_ATTRIBUTES 
   40#define FFF_GCC_FUNCTION_ATTRIBUTES 
   42#ifndef CUSTOM_FFF_FUNCTION_TEMPLATE 
   43#define CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN, FUNCNAME, ...) RETURN (*FUNCNAME)(__VA_ARGS__) 
   46#define SET_RETURN_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN)                                         \ 
   47        FUNCNAME##_fake.return_val_seq = ARRAY_POINTER;                                            \ 
   48        FUNCNAME##_fake.return_val_seq_len = ARRAY_LEN; 
   49#define SET_CUSTOM_FAKE_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN)                                    \ 
   50        FUNCNAME##_fake.custom_fake_seq = ARRAY_POINTER;                                           \ 
   51        FUNCNAME##_fake.custom_fake_seq_len = ARRAY_LEN; 
   54#define RESET_FAKE(FUNCNAME)                                                                       \ 
   59#define DECLARE_ARG(type, n, FUNCNAME)                                                             \ 
   61        type arg##n##_history[FFF_ARG_HISTORY_LEN]; 
   63#define DECLARE_ALL_FUNC_COMMON                                                                    \ 
   64        unsigned int call_count;                                                                   \ 
   65        unsigned int arg_history_len;                                                              \ 
   66        unsigned int arg_histories_dropped; 
   68#define DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                                  \ 
   69        RETURN_TYPE return_val_history[FFF_ARG_HISTORY_LEN]; 
   71#define SAVE_ARG(FUNCNAME, n)                                                                      \ 
   72        memcpy((void *)&FUNCNAME##_fake.arg##n##_val, (void *)&arg##n, sizeof(arg##n)); 
   74#define ROOM_FOR_MORE_HISTORY(FUNCNAME) FUNCNAME##_fake.call_count < FFF_ARG_HISTORY_LEN 
   76#define SAVE_RET_HISTORY(FUNCNAME, RETVAL)                                                         \ 
   77        if ((FUNCNAME##_fake.call_count - 1) < FFF_ARG_HISTORY_LEN)                                \ 
   78                memcpy((void *)&FUNCNAME##_fake                                                    \ 
   79                               .return_val_history[FUNCNAME##_fake.call_count - 1],                \ 
   80                       (const void *)&RETVAL, sizeof(RETVAL)); 
   82#define SAVE_ARG_HISTORY(FUNCNAME, ARGN)                                                           \ 
   83        memcpy((void *)&FUNCNAME##_fake.arg##ARGN##_history[FUNCNAME##_fake.call_count],           \ 
   84               (void *)&arg##ARGN, sizeof(arg##ARGN)); 
   86#define HISTORY_DROPPED(FUNCNAME) FUNCNAME##_fake.arg_histories_dropped++ 
   88#define DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                              \ 
   89        RETURN_TYPE return_val;                                                                    \ 
   90        int return_val_seq_len;                                                                    \ 
   91        int return_val_seq_idx;                                                                    \ 
   92        RETURN_TYPE *return_val_seq; 
   94#define DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                          \ 
   95        int custom_fake_seq_len;                                                                   \ 
   96        int custom_fake_seq_idx; 
   98#define INCREMENT_CALL_COUNT(FUNCNAME) FUNCNAME##_fake.call_count++ 
  100#define RETURN_FAKE_RESULT(FUNCNAME)                                                               \ 
  101        if (FUNCNAME##_fake.return_val_seq_len) {                         \ 
  102                if (FUNCNAME##_fake.return_val_seq_idx < FUNCNAME##_fake.return_val_seq_len) {     \ 
  106                                        .return_val_seq[FUNCNAME##_fake.return_val_seq_idx])       \ 
  107                        return FUNCNAME##_fake                                                     \ 
  108                                .return_val_seq[FUNCNAME##_fake.return_val_seq_idx++];             \ 
  112                        FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_len - 1])    \ 
  113                return FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_len -         \ 
  116        SAVE_RET_HISTORY(FUNCNAME, FUNCNAME##_fake.return_val)                                     \ 
  117        return FUNCNAME##_fake.return_val; 
  120#define FFF_EXTERN_C     extern "C" {
 
  121#define FFF_END_EXTERN_C } 
  124#define FFF_END_EXTERN_C 
  127#define DEFINE_RESET_FUNCTION(FUNCNAME)                                                            \ 
  128        void FUNCNAME##_reset(void)                                                                \ 
  130                memset((void *)&FUNCNAME##_fake, 0,                                                \ 
  131                       sizeof(FUNCNAME##_fake) - sizeof(FUNCNAME##_fake.custom_fake) -             \ 
  132                               sizeof(FUNCNAME##_fake.custom_fake_seq));                           \ 
  133                FUNCNAME##_fake.custom_fake = NULL;                                                \ 
  134                FUNCNAME##_fake.custom_fake_seq = NULL;                                            \ 
  135                FUNCNAME##_fake.arg_history_len = FFF_ARG_HISTORY_LEN;                             \ 
  149#define DEFINE_FFF_GLOBALS                                                                         \ 
  154#define FFF_RESET_HISTORY()                                                                        \ 
  155        fff.call_history_idx = 0;                                                                  \ 
  156        memset(fff.call_history, 0, sizeof(fff.call_history)); 
  158#define REGISTER_CALL(function)                                                                    \ 
  159        if (fff.call_history_idx < FFF_CALL_HISTORY_LEN)                                           \ 
  160                fff.call_history[fff.call_history_idx++] = (fff_function_t)function; 
  162#define DECLARE_FAKE_VOID_FUNC0(FUNCNAME)                                                          \ 
  163        typedef struct FUNCNAME##_Fake {                                                           \ 
  164                DECLARE_ALL_FUNC_COMMON                                                            \ 
  165                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
  166                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, void);                             \ 
  167                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, void);                        \ 
  169        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
  170        void FUNCNAME##_reset(void);                                                               \ 
  171        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(void); 
  173#define DEFINE_FAKE_VOID_FUNC0(FUNCNAME)                                                           \ 
  174        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
  175        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(void)                                            \ 
  177                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
  179                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
  181                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
  182                REGISTER_CALL(FUNCNAME);                                                           \ 
  183                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
  184                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
  185                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
  187                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](); \ 
  190                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len -     \ 
  194                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
  195                        FUNCNAME##_fake.custom_fake();                                             \ 
  198        DEFINE_RESET_FUNCTION(FUNCNAME) 
  200#define FAKE_VOID_FUNC0(FUNCNAME)                                                                  \ 
  201        DECLARE_FAKE_VOID_FUNC0(FUNCNAME)                                                          \ 
  202        DEFINE_FAKE_VOID_FUNC0(FUNCNAME) 
  204#define DECLARE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE)                                               \ 
  205        typedef struct FUNCNAME##_Fake {                                                           \ 
  206                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
  207                DECLARE_ALL_FUNC_COMMON                                                            \ 
  208                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
  209                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE);                        \ 
  210                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE);                   \ 
  212        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
  213        void FUNCNAME##_reset(void);                                                               \ 
  214        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0); 
  216#define DEFINE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE)                                                \ 
  217        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
  218        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0)                                  \ 
  220                SAVE_ARG(FUNCNAME, 0);                                                             \ 
  221                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
  222                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
  224                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
  226                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
  227                REGISTER_CALL(FUNCNAME);                                                           \ 
  228                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
  229                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
  230                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
  232                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
  236                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
  240                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
  241                        FUNCNAME##_fake.custom_fake(arg0);                                         \ 
  244        DEFINE_RESET_FUNCTION(FUNCNAME) 
  246#define FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE)                                                       \ 
  247        DECLARE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE)                                               \ 
  248        DEFINE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) 
  250#define DECLARE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE)                                    \ 
  251        typedef struct FUNCNAME##_Fake {                                                           \ 
  252                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
  253                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
  254                DECLARE_ALL_FUNC_COMMON                                                            \ 
  255                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
  256                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE);             \ 
  257                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE);        \ 
  259        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
  260        void FUNCNAME##_reset(void);                                                               \ 
  261        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1); 
  263#define DEFINE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE)                                     \ 
  264        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
  265        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1)                  \ 
  267                SAVE_ARG(FUNCNAME, 0);                                                             \ 
  268                SAVE_ARG(FUNCNAME, 1);                                                             \ 
  269                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
  270                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
  271                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
  273                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
  275                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
  276                REGISTER_CALL(FUNCNAME);                                                           \ 
  277                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
  278                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
  279                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
  281                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
  285                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
  289                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
  290                        FUNCNAME##_fake.custom_fake(arg0, arg1);                                   \ 
  293        DEFINE_RESET_FUNCTION(FUNCNAME) 
  295#define FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE)                                            \ 
  296        DECLARE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE)                                    \ 
  297        DEFINE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) 
  299#define DECLARE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE)                         \ 
  300        typedef struct FUNCNAME##_Fake {                                                           \ 
  301                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
  302                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
  303                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
  304                DECLARE_ALL_FUNC_COMMON                                                            \ 
  305                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
  306                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE);  \ 
  307                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
  310        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
  311        void FUNCNAME##_reset(void);                                                               \ 
  312        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); 
  314#define DEFINE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE)                          \ 
  315        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
  316        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2)  \ 
  318                SAVE_ARG(FUNCNAME, 0);                                                             \ 
  319                SAVE_ARG(FUNCNAME, 1);                                                             \ 
  320                SAVE_ARG(FUNCNAME, 2);                                                             \ 
  321                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
  322                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
  323                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
  324                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
  326                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
  328                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
  329                REGISTER_CALL(FUNCNAME);                                                           \ 
  330                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
  331                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
  332                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
  334                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
  338                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
  342                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
  343                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2);                             \ 
  346        DEFINE_RESET_FUNCTION(FUNCNAME) 
  348#define FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE)                                 \ 
  349        DECLARE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE)                         \ 
  350        DEFINE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) 
  352#define DECLARE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE)              \ 
  353        typedef struct FUNCNAME##_Fake {                                                           \ 
  354                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
  355                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
  356                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
  357                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
  358                DECLARE_ALL_FUNC_COMMON                                                            \ 
  359                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
  360                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
  362                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
  363                                             ARG2_TYPE, ARG3_TYPE);                                \ 
  365        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
  366        void FUNCNAME##_reset(void);                                                               \ 
  367        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
  370#define DEFINE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE)               \ 
  371        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
  372        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
  375                SAVE_ARG(FUNCNAME, 0);                                                             \ 
  376                SAVE_ARG(FUNCNAME, 1);                                                             \ 
  377                SAVE_ARG(FUNCNAME, 2);                                                             \ 
  378                SAVE_ARG(FUNCNAME, 3);                                                             \ 
  379                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
  380                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
  381                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
  382                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
  383                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
  385                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
  387                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
  388                REGISTER_CALL(FUNCNAME);                                                           \ 
  389                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
  390                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
  391                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
  393                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
  394                                                arg0, arg1, arg2, arg3);                           \ 
  397                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
  398                                                arg0, arg1, arg2, arg3);                           \ 
  401                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
  402                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3);                       \ 
  405        DEFINE_RESET_FUNCTION(FUNCNAME) 
  407#define FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE)                      \ 
  408        DECLARE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE)              \ 
  409        DEFINE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) 
  411#define DECLARE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE)   \ 
  412        typedef struct FUNCNAME##_Fake {                                                           \ 
  413                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
  414                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
  415                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
  416                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
  417                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
  418                DECLARE_ALL_FUNC_COMMON                                                            \ 
  419                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
  420                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
  421                                             ARG3_TYPE, ARG4_TYPE);                                \ 
  422                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
  423                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE);                     \ 
  425        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
  426        void FUNCNAME##_reset(void);                                                               \ 
  427        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
  428                                                  ARG3_TYPE arg3, ARG4_TYPE arg4); 
  430#define DEFINE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE)    \ 
  431        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
  432        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
  433                                                  ARG3_TYPE arg3, ARG4_TYPE arg4)                  \ 
  435                SAVE_ARG(FUNCNAME, 0);                                                             \ 
  436                SAVE_ARG(FUNCNAME, 1);                                                             \ 
  437                SAVE_ARG(FUNCNAME, 2);                                                             \ 
  438                SAVE_ARG(FUNCNAME, 3);                                                             \ 
  439                SAVE_ARG(FUNCNAME, 4);                                                             \ 
  440                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
  441                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
  442                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
  443                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
  444                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
  445                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
  447                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
  449                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
  450                REGISTER_CALL(FUNCNAME);                                                           \ 
  451                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
  452                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
  453                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
  455                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
  456                                                arg0, arg1, arg2, arg3, arg4);                     \ 
  459                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
  460                                                arg0, arg1, arg2, arg3, arg4);                     \ 
  463                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
  464                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4);                 \ 
  467        DEFINE_RESET_FUNCTION(FUNCNAME) 
  469#define FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE)           \ 
  470        DECLARE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE)   \ 
  471        DEFINE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) 
  473#define DECLARE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
  475        typedef struct FUNCNAME##_Fake {                                                           \ 
  476                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
  477                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
  478                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
  479                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
  480                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
  481                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
  482                DECLARE_ALL_FUNC_COMMON                                                            \ 
  483                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
  484                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
  485                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE);                     \ 
  486                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
  487                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE);          \ 
  489        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
  490        void FUNCNAME##_reset(void);                                                               \ 
  491        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
  492                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); 
  494#define DEFINE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,    \ 
  496        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
  497        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
  498                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5)  \ 
  500                SAVE_ARG(FUNCNAME, 0);                                                             \ 
  501                SAVE_ARG(FUNCNAME, 1);                                                             \ 
  502                SAVE_ARG(FUNCNAME, 2);                                                             \ 
  503                SAVE_ARG(FUNCNAME, 3);                                                             \ 
  504                SAVE_ARG(FUNCNAME, 4);                                                             \ 
  505                SAVE_ARG(FUNCNAME, 5);                                                             \ 
  506                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
  507                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
  508                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
  509                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
  510                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
  511                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
  512                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
  514                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
  516                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
  517                REGISTER_CALL(FUNCNAME);                                                           \ 
  518                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
  519                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
  520                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
  522                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
  523                                                arg0, arg1, arg2, arg3, arg4, arg5);               \ 
  526                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
  527                                                arg0, arg1, arg2, arg3, arg4, arg5);               \ 
  530                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
  531                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5);           \ 
  534        DEFINE_RESET_FUNCTION(FUNCNAME) 
  536#define FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,           \ 
  538        DECLARE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
  540        DEFINE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,    \ 
  543#define DECLARE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
  544                                ARG5_TYPE, ARG6_TYPE)                                              \ 
  545        typedef struct FUNCNAME##_Fake {                                                           \ 
  546                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
  547                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
  548                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
  549                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
  550                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
  551                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
  552                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
  553                DECLARE_ALL_FUNC_COMMON                                                            \ 
  554                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
  555                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
  556                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE);          \ 
  557                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
  558                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
  561        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
  562        void FUNCNAME##_reset(void);                                                               \ 
  563        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
  564                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
  567#define DEFINE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,    \ 
  568                               ARG5_TYPE, ARG6_TYPE)                                               \ 
  569        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
  570        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
  571                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
  574                SAVE_ARG(FUNCNAME, 0);                                                             \ 
  575                SAVE_ARG(FUNCNAME, 1);                                                             \ 
  576                SAVE_ARG(FUNCNAME, 2);                                                             \ 
  577                SAVE_ARG(FUNCNAME, 3);                                                             \ 
  578                SAVE_ARG(FUNCNAME, 4);                                                             \ 
  579                SAVE_ARG(FUNCNAME, 5);                                                             \ 
  580                SAVE_ARG(FUNCNAME, 6);                                                             \ 
  581                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
  582                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
  583                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
  584                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
  585                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
  586                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
  587                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
  588                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
  590                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
  592                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
  593                REGISTER_CALL(FUNCNAME);                                                           \ 
  594                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
  595                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
  596                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
  598                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
  599                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6);         \ 
  602                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
  603                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6);         \ 
  606                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
  607                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6);     \ 
  610        DEFINE_RESET_FUNCTION(FUNCNAME) 
  612#define FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,           \ 
  613                        ARG5_TYPE, ARG6_TYPE)                                                      \ 
  614        DECLARE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
  615                                ARG5_TYPE, ARG6_TYPE)                                              \ 
  616        DEFINE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,    \ 
  617                               ARG5_TYPE, ARG6_TYPE) 
  619#define DECLARE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
  620                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE)                                   \ 
  621        typedef struct FUNCNAME##_Fake {                                                           \ 
  622                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
  623                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
  624                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
  625                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
  626                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
  627                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
  628                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
  629                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
  630                DECLARE_ALL_FUNC_COMMON                                                            \ 
  631                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
  632                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
  633                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
  635                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
  636                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
  637                                             ARG6_TYPE, ARG7_TYPE);                                \ 
  639        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
  640        void FUNCNAME##_reset(void);                                                               \ 
  641        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
  642                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
  643                                                  ARG6_TYPE arg6, ARG7_TYPE arg7); 
  645#define DEFINE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,    \ 
  646                               ARG5_TYPE, ARG6_TYPE, ARG7_TYPE)                                    \ 
  647        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
  648        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
  649                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
  650                                                  ARG6_TYPE arg6, ARG7_TYPE arg7)                  \ 
  652                SAVE_ARG(FUNCNAME, 0);                                                             \ 
  653                SAVE_ARG(FUNCNAME, 1);                                                             \ 
  654                SAVE_ARG(FUNCNAME, 2);                                                             \ 
  655                SAVE_ARG(FUNCNAME, 3);                                                             \ 
  656                SAVE_ARG(FUNCNAME, 4);                                                             \ 
  657                SAVE_ARG(FUNCNAME, 5);                                                             \ 
  658                SAVE_ARG(FUNCNAME, 6);                                                             \ 
  659                SAVE_ARG(FUNCNAME, 7);                                                             \ 
  660                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
  661                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
  662                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
  663                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
  664                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
  665                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
  666                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
  667                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
  668                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
  670                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
  672                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
  673                REGISTER_CALL(FUNCNAME);                                                           \ 
  674                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
  675                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
  676                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
  678                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
  679                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);   \ 
  682                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
  683                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);   \ 
  686                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
  687                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
  691        DEFINE_RESET_FUNCTION(FUNCNAME) 
  693#define FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,           \ 
  694                        ARG5_TYPE, ARG6_TYPE, ARG7_TYPE)                                           \ 
  695        DECLARE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
  696                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE)                                   \ 
  697        DEFINE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,    \ 
  698                               ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) 
  700#define DECLARE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
  701                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE)                        \ 
  702        typedef struct FUNCNAME##_Fake {                                                           \ 
  703                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
  704                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
  705                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
  706                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
  707                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
  708                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
  709                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
  710                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
  711                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
  712                DECLARE_ALL_FUNC_COMMON                                                            \ 
  713                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
  714                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
  715                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
  716                                             ARG7_TYPE, ARG8_TYPE);                                \ 
  717                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
  718                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
  719                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE);                     \ 
  721        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
  722        void FUNCNAME##_reset(void);                                                               \ 
  723        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
  724                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
  725                                                  ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); 
  727#define DEFINE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,    \ 
  728                               ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE)                         \ 
  729        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
  730        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
  731                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
  732                                                  ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8)  \ 
  734                SAVE_ARG(FUNCNAME, 0);                                                             \ 
  735                SAVE_ARG(FUNCNAME, 1);                                                             \ 
  736                SAVE_ARG(FUNCNAME, 2);                                                             \ 
  737                SAVE_ARG(FUNCNAME, 3);                                                             \ 
  738                SAVE_ARG(FUNCNAME, 4);                                                             \ 
  739                SAVE_ARG(FUNCNAME, 5);                                                             \ 
  740                SAVE_ARG(FUNCNAME, 6);                                                             \ 
  741                SAVE_ARG(FUNCNAME, 7);                                                             \ 
  742                SAVE_ARG(FUNCNAME, 8);                                                             \ 
  743                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
  744                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
  745                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
  746                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
  747                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
  748                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
  749                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
  750                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
  751                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
  752                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
  754                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
  756                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
  757                REGISTER_CALL(FUNCNAME);                                                           \ 
  758                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
  759                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
  760                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
  762                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
  763                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
  767                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
  768                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
  772                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
  773                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
  777        DEFINE_RESET_FUNCTION(FUNCNAME) 
  779#define FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,           \ 
  780                        ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE)                                \ 
  781        DECLARE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
  782                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE)                        \ 
  783        DEFINE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,    \ 
  784                               ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) 
  786#define DECLARE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
  787                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE)            \ 
  788        typedef struct FUNCNAME##_Fake {                                                           \ 
  789                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
  790                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
  791                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
  792                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
  793                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
  794                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
  795                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
  796                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
  797                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
  798                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
  799                DECLARE_ALL_FUNC_COMMON                                                            \ 
  800                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
  801                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
  802                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
  803                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE);                     \ 
  804                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
  805                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
  806                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE);          \ 
  808        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
  809        void FUNCNAME##_reset(void);                                                               \ 
  810        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
  811                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
  812                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); 
  814#define DEFINE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
  815                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE)             \ 
  816        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
  817        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
  818                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
  819                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9)    \ 
  821                SAVE_ARG(FUNCNAME, 0);                                                             \ 
  822                SAVE_ARG(FUNCNAME, 1);                                                             \ 
  823                SAVE_ARG(FUNCNAME, 2);                                                             \ 
  824                SAVE_ARG(FUNCNAME, 3);                                                             \ 
  825                SAVE_ARG(FUNCNAME, 4);                                                             \ 
  826                SAVE_ARG(FUNCNAME, 5);                                                             \ 
  827                SAVE_ARG(FUNCNAME, 6);                                                             \ 
  828                SAVE_ARG(FUNCNAME, 7);                                                             \ 
  829                SAVE_ARG(FUNCNAME, 8);                                                             \ 
  830                SAVE_ARG(FUNCNAME, 9);                                                             \ 
  831                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
  832                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
  833                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
  834                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
  835                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
  836                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
  837                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
  838                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
  839                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
  840                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
  841                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
  843                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
  845                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
  846                REGISTER_CALL(FUNCNAME);                                                           \ 
  847                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
  848                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
  849                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
  851                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
  852                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
  856                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
  857                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
  861                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
  862                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
  866        DEFINE_RESET_FUNCTION(FUNCNAME) 
  868#define FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,          \ 
  869                         ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE)                    \ 
  870        DECLARE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
  871                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE)            \ 
  872        DEFINE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
  873                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) 
  875#define DECLARE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
  876                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
  878        typedef struct FUNCNAME##_Fake {                                                           \ 
  879                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
  880                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
  881                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
  882                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
  883                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
  884                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
  885                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
  886                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
  887                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
  888                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
  889                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
  890                DECLARE_ALL_FUNC_COMMON                                                            \ 
  891                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
  892                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
  893                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
  894                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE);         \ 
  895                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
  896                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
  897                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
  900        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
  901        void FUNCNAME##_reset(void);                                                               \ 
  902        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
  903                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
  904                                                  ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8,  \ 
  905                                                  ARG9_TYPE arg9, ARG10_TYPE arg10); 
  907#define DEFINE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
  908                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \ 
  909        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
  910        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
  911                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
  912                                                  ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8,  \ 
  913                                                  ARG9_TYPE arg9, ARG10_TYPE arg10)                \ 
  915                SAVE_ARG(FUNCNAME, 0);                                                             \ 
  916                SAVE_ARG(FUNCNAME, 1);                                                             \ 
  917                SAVE_ARG(FUNCNAME, 2);                                                             \ 
  918                SAVE_ARG(FUNCNAME, 3);                                                             \ 
  919                SAVE_ARG(FUNCNAME, 4);                                                             \ 
  920                SAVE_ARG(FUNCNAME, 5);                                                             \ 
  921                SAVE_ARG(FUNCNAME, 6);                                                             \ 
  922                SAVE_ARG(FUNCNAME, 7);                                                             \ 
  923                SAVE_ARG(FUNCNAME, 8);                                                             \ 
  924                SAVE_ARG(FUNCNAME, 9);                                                             \ 
  925                SAVE_ARG(FUNCNAME, 10);                                                            \ 
  926                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
  927                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
  928                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
  929                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
  930                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
  931                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
  932                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
  933                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
  934                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
  935                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
  936                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
  937                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
  939                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
  941                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
  942                REGISTER_CALL(FUNCNAME);                                                           \ 
  943                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
  944                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
  945                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
  947                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
  948                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
  949                                                arg8, arg9, arg10);                                \ 
  952                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
  953                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
  954                                                arg8, arg9, arg10);                                \ 
  957                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
  958                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
  959                                                    arg7, arg8, arg9, arg10);                      \ 
  962        DEFINE_RESET_FUNCTION(FUNCNAME) 
  964#define FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,          \ 
  965                         ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE)        \ 
  966        DECLARE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
  967                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
  969        DEFINE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
  970                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) 
  972#define DECLARE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
  973                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
  974                                 ARG10_TYPE, ARG11_TYPE)                                           \ 
  975        typedef struct FUNCNAME##_Fake {                                                           \ 
  976                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
  977                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
  978                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
  979                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
  980                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
  981                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
  982                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
  983                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
  984                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
  985                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
  986                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
  987                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
  988                DECLARE_ALL_FUNC_COMMON                                                            \ 
  989                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
  990                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
  991                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
  992                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
  994                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
  995                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
  996                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
  997                                             ARG10_TYPE, ARG11_TYPE);                              \ 
  999        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 1000        void FUNCNAME##_reset(void);                                                               \ 
 1001        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1002                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1003                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1004                ARG10_TYPE arg10, ARG11_TYPE arg11); 
 1006#define DEFINE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1007                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1009        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 1010        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1011                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1012                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1013                ARG10_TYPE arg10, ARG11_TYPE arg11)                                                \ 
 1015                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 1016                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 1017                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 1018                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 1019                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 1020                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 1021                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 1022                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 1023                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 1024                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 1025                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 1026                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 1027                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 1028                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 1029                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 1030                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 1031                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 1032                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 1033                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 1034                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 1035                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 1036                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 1037                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 1038                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 1039                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 1041                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 1043                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 1044                REGISTER_CALL(FUNCNAME);                                                           \ 
 1045                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 1046                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 1047                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 1049                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 1050                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1051                                                arg8, arg9, arg10, arg11);                         \ 
 1054                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 1055                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1056                                                arg8, arg9, arg10, arg11);                         \ 
 1059                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 1060                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 1061                                                    arg7, arg8, arg9, arg10, arg11);               \ 
 1064        DEFINE_RESET_FUNCTION(FUNCNAME) 
 1066#define FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,          \ 
 1067                         ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,        \ 
 1069        DECLARE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1070                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1071                                 ARG10_TYPE, ARG11_TYPE)                                           \ 
 1072        DEFINE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1073                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1076#define DECLARE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1077                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1078                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE)                               \ 
 1079        typedef struct FUNCNAME##_Fake {                                                           \ 
 1080                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 1081                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 1082                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 1083                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 1084                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 1085                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 1086                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 1087                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 1088                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 1089                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 1090                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 1091                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 1092                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 1093                DECLARE_ALL_FUNC_COMMON                                                            \ 
 1094                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 1095                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 1096                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 1097                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 1098                                             ARG11_TYPE, ARG12_TYPE);                              \ 
 1099                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 1100                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 1101                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 1102                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE);                  \ 
 1103        } FUNCNAME##_Fake;                                                                         \ 
 1104        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 1105        void FUNCNAME##_reset(void);                                                               \ 
 1106        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1107                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1108                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1109                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); 
 1111#define DEFINE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1112                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1113                                ARG11_TYPE, ARG12_TYPE)                                            \ 
 1114        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 1115        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1116                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1117                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1118                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12)                              \ 
 1120                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 1121                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 1122                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 1123                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 1124                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 1125                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 1126                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 1127                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 1128                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 1129                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 1130                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 1131                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 1132                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 1133                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 1134                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 1135                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 1136                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 1137                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 1138                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 1139                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 1140                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 1141                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 1142                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 1143                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 1144                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 1145                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 1146                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 1148                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 1150                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 1151                REGISTER_CALL(FUNCNAME);                                                           \ 
 1152                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 1153                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 1154                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 1156                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 1157                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1158                                                arg8, arg9, arg10, arg11, arg12);                  \ 
 1161                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 1162                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1163                                                arg8, arg9, arg10, arg11, arg12);                  \ 
 1166                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 1167                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 1168                                                    arg7, arg8, arg9, arg10, arg11, arg12);        \ 
 1171        DEFINE_RESET_FUNCTION(FUNCNAME) 
 1173#define FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,          \ 
 1174                         ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,        \ 
 1175                         ARG11_TYPE, ARG12_TYPE)                                                   \ 
 1176        DECLARE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1177                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1178                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE)                               \ 
 1179        DEFINE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1180                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1181                                ARG11_TYPE, ARG12_TYPE) 
 1183#define DECLARE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1184                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1185                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE)                   \ 
 1186        typedef struct FUNCNAME##_Fake {                                                           \ 
 1187                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 1188                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 1189                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 1190                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 1191                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 1192                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 1193                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 1194                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 1195                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 1196                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 1197                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 1198                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 1199                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 1200                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 1201                DECLARE_ALL_FUNC_COMMON                                                            \ 
 1202                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 1203                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 1204                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 1205                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 1206                                             ARG11_TYPE, ARG12_TYPE, ARG13_TYPE);                  \ 
 1207                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 1208                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 1209                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 1210                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE);      \ 
 1211        } FUNCNAME##_Fake;                                                                         \ 
 1212        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 1213        void FUNCNAME##_reset(void);                                                               \ 
 1214        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1215                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1216                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1217                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); 
 1219#define DEFINE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1220                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1221                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE)                                \ 
 1222        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 1223        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1224                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1225                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1226                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13)            \ 
 1228                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 1229                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 1230                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 1231                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 1232                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 1233                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 1234                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 1235                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 1236                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 1237                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 1238                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 1239                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 1240                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 1241                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 1242                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 1243                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 1244                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 1245                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 1246                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 1247                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 1248                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 1249                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 1250                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 1251                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 1252                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 1253                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 1254                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 1255                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 1256                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 1258                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 1260                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 1261                REGISTER_CALL(FUNCNAME);                                                           \ 
 1262                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 1263                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 1264                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 1266                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 1267                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1268                                                arg8, arg9, arg10, arg11, arg12, arg13);           \ 
 1271                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 1272                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1273                                                arg8, arg9, arg10, arg11, arg12, arg13);           \ 
 1276                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 1277                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 1278                                                    arg7, arg8, arg9, arg10, arg11, arg12, arg13); \ 
 1281        DEFINE_RESET_FUNCTION(FUNCNAME) 
 1283#define FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,          \ 
 1284                         ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,        \ 
 1285                         ARG11_TYPE, ARG12_TYPE, ARG13_TYPE)                                       \ 
 1286        DECLARE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1287                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1288                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE)                   \ 
 1289        DEFINE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1290                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1291                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) 
 1293#define DECLARE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1294                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1295                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE)       \ 
 1296        typedef struct FUNCNAME##_Fake {                                                           \ 
 1297                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 1298                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 1299                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 1300                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 1301                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 1302                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 1303                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 1304                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 1305                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 1306                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 1307                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 1308                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 1309                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 1310                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 1311                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 1312                DECLARE_ALL_FUNC_COMMON                                                            \ 
 1313                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 1314                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 1315                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 1316                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 1317                                             ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE);      \ 
 1318                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 1319                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 1320                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 1321                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 1323        } FUNCNAME##_Fake;                                                                         \ 
 1324        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 1325        void FUNCNAME##_reset(void);                                                               \ 
 1326        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1327                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1328                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1329                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 1332#define DEFINE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1333                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1334                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE)                    \ 
 1335        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 1336        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1337                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1338                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1339                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 1342                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 1343                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 1344                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 1345                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 1346                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 1347                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 1348                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 1349                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 1350                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 1351                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 1352                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 1353                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 1354                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 1355                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 1356                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 1357                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 1358                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 1359                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 1360                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 1361                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 1362                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 1363                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 1364                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 1365                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 1366                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 1367                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 1368                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 1369                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 1370                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 1371                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 1372                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 1374                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 1376                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 1377                REGISTER_CALL(FUNCNAME);                                                           \ 
 1378                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 1379                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 1380                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 1382                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 1383                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1384                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14);    \ 
 1387                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 1388                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1389                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14);    \ 
 1392                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 1393                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 1394                                                    arg7, arg8, arg9, arg10, arg11, arg12, arg13,  \ 
 1398        DEFINE_RESET_FUNCTION(FUNCNAME) 
 1400#define FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,          \ 
 1401                         ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,        \ 
 1402                         ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE)                           \ 
 1403        DECLARE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1404                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1405                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE)       \ 
 1406        DEFINE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1407                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1408                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) 
 1410#define DECLARE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1411                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1412                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 1414        typedef struct FUNCNAME##_Fake {                                                           \ 
 1415                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 1416                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 1417                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 1418                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 1419                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 1420                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 1421                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 1422                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 1423                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 1424                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 1425                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 1426                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 1427                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 1428                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 1429                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 1430                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 1431                DECLARE_ALL_FUNC_COMMON                                                            \ 
 1432                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 1433                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 1434                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 1435                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 1436                                             ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 1438                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 1439                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 1440                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 1441                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 1442                                             ARG14_TYPE, ARG15_TYPE);                              \ 
 1443        } FUNCNAME##_Fake;                                                                         \ 
 1444        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 1445        void FUNCNAME##_reset(void);                                                               \ 
 1446        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1447                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1448                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1449                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 1450                ARG14_TYPE arg14, ARG15_TYPE arg15); 
 1452#define DEFINE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1453                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1454                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE)        \ 
 1455        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 1456        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1457                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1458                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1459                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 1460                ARG14_TYPE arg14, ARG15_TYPE arg15)                                                \ 
 1462                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 1463                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 1464                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 1465                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 1466                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 1467                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 1468                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 1469                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 1470                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 1471                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 1472                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 1473                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 1474                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 1475                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 1476                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 1477                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 1478                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 1479                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 1480                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 1481                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 1482                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 1483                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 1484                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 1485                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 1486                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 1487                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 1488                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 1489                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 1490                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 1491                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 1492                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 1493                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 1494                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 1496                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 1498                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 1499                REGISTER_CALL(FUNCNAME);                                                           \ 
 1500                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 1501                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 1502                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 1504                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 1505                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1506                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 1510                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 1511                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1512                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 1516                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 1517                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 1518                                                    arg7, arg8, arg9, arg10, arg11, arg12, arg13,  \ 
 1522        DEFINE_RESET_FUNCTION(FUNCNAME) 
 1524#define FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,          \ 
 1525                         ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,        \ 
 1526                         ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE)               \ 
 1527        DECLARE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1528                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1529                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 1531        DEFINE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1532                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1533                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) 
 1535#define DECLARE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1536                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1537                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 1538                                 ARG15_TYPE, ARG16_TYPE)                                           \ 
 1539        typedef struct FUNCNAME##_Fake {                                                           \ 
 1540                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 1541                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 1542                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 1543                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 1544                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 1545                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 1546                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 1547                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 1548                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 1549                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 1550                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 1551                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 1552                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 1553                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 1554                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 1555                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 1556                DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME)                                              \ 
 1557                DECLARE_ALL_FUNC_COMMON                                                            \ 
 1558                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 1559                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 1560                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 1561                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 1562                                             ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 1563                                             ARG15_TYPE, ARG16_TYPE);                              \ 
 1564                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 1565                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 1566                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 1567                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 1568                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE);                  \ 
 1569        } FUNCNAME##_Fake;                                                                         \ 
 1570        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 1571        void FUNCNAME##_reset(void);                                                               \ 
 1572        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1573                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1574                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1575                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 1576                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); 
 1578#define DEFINE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1579                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1580                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,        \ 
 1582        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 1583        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1584                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1585                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1586                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 1587                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16)                              \ 
 1589                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 1590                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 1591                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 1592                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 1593                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 1594                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 1595                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 1596                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 1597                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 1598                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 1599                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 1600                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 1601                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 1602                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 1603                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 1604                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 1605                SAVE_ARG(FUNCNAME, 16);                                                            \ 
 1606                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 1607                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 1608                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 1609                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 1610                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 1611                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 1612                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 1613                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 1614                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 1615                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 1616                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 1617                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 1618                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 1619                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 1620                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 1621                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 1622                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 1623                        SAVE_ARG_HISTORY(FUNCNAME, 16);                                            \ 
 1625                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 1627                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 1628                REGISTER_CALL(FUNCNAME);                                                           \ 
 1629                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 1630                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 1631                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 1633                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 1634                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1635                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 1639                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 1640                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1641                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 1645                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 1646                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 1647                                                    arg7, arg8, arg9, arg10, arg11, arg12, arg13,  \ 
 1648                                                    arg14, arg15, arg16);                          \ 
 1651        DEFINE_RESET_FUNCTION(FUNCNAME) 
 1653#define FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,          \ 
 1654                         ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,        \ 
 1655                         ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE)   \ 
 1656        DECLARE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1657                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1658                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 1659                                 ARG15_TYPE, ARG16_TYPE)                                           \ 
 1660        DEFINE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1661                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1662                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,        \ 
 1665#define DECLARE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1666                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1667                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 1668                                 ARG15_TYPE, ARG16_TYPE, ARG17_TYPE)                               \ 
 1669        typedef struct FUNCNAME##_Fake {                                                           \ 
 1670                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 1671                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 1672                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 1673                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 1674                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 1675                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 1676                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 1677                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 1678                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 1679                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 1680                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 1681                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 1682                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 1683                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 1684                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 1685                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 1686                DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME)                                              \ 
 1687                DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME)                                              \ 
 1688                DECLARE_ALL_FUNC_COMMON                                                            \ 
 1689                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 1690                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 1691                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 1692                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 1693                                             ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 1694                                             ARG15_TYPE, ARG16_TYPE, ARG17_TYPE);                  \ 
 1695                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 1696                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 1697                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 1698                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 1699                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE);      \ 
 1700        } FUNCNAME##_Fake;                                                                         \ 
 1701        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 1702        void FUNCNAME##_reset(void);                                                               \ 
 1703        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1704                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1705                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1706                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 1707                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); 
 1709#define DEFINE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1710                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1711                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,        \ 
 1712                                ARG16_TYPE, ARG17_TYPE)                                            \ 
 1713        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 1714        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1715                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1716                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1717                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 1718                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17)            \ 
 1720                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 1721                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 1722                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 1723                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 1724                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 1725                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 1726                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 1727                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 1728                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 1729                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 1730                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 1731                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 1732                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 1733                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 1734                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 1735                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 1736                SAVE_ARG(FUNCNAME, 16);                                                            \ 
 1737                SAVE_ARG(FUNCNAME, 17);                                                            \ 
 1738                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 1739                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 1740                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 1741                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 1742                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 1743                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 1744                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 1745                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 1746                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 1747                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 1748                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 1749                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 1750                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 1751                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 1752                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 1753                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 1754                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 1755                        SAVE_ARG_HISTORY(FUNCNAME, 16);                                            \ 
 1756                        SAVE_ARG_HISTORY(FUNCNAME, 17);                                            \ 
 1758                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 1760                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 1761                REGISTER_CALL(FUNCNAME);                                                           \ 
 1762                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 1763                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 1764                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 1766                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 1767                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1768                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 1769                                                arg15, arg16, arg17);                              \ 
 1772                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 1773                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1774                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 1775                                                arg15, arg16, arg17);                              \ 
 1778                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 1779                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 1780                                                    arg7, arg8, arg9, arg10, arg11, arg12, arg13,  \ 
 1781                                                    arg14, arg15, arg16, arg17);                   \ 
 1784        DEFINE_RESET_FUNCTION(FUNCNAME) 
 1786#define FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,          \ 
 1787                         ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,        \ 
 1788                         ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE,   \ 
 1790        DECLARE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1791                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1792                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 1793                                 ARG15_TYPE, ARG16_TYPE, ARG17_TYPE)                               \ 
 1794        DEFINE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1795                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1796                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,        \ 
 1797                                ARG16_TYPE, ARG17_TYPE) 
 1799#define DECLARE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1800                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1801                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 1802                                 ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE)                   \ 
 1803        typedef struct FUNCNAME##_Fake {                                                           \ 
 1804                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 1805                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 1806                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 1807                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 1808                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 1809                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 1810                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 1811                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 1812                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 1813                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 1814                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 1815                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 1816                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 1817                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 1818                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 1819                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 1820                DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME)                                              \ 
 1821                DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME)                                              \ 
 1822                DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME)                                              \ 
 1823                DECLARE_ALL_FUNC_COMMON                                                            \ 
 1824                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 1825                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 1826                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 1827                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 1828                                             ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 1829                                             ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE);      \ 
 1830                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 1831                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 1832                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 1833                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 1834                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE,       \ 
 1836        } FUNCNAME##_Fake;                                                                         \ 
 1837        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 1838        void FUNCNAME##_reset(void);                                                               \ 
 1839        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1840                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1841                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1842                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 1843                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17,            \ 
 1846#define DEFINE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1847                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1848                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,        \ 
 1849                                ARG16_TYPE, ARG17_TYPE, ARG18_TYPE)                                \ 
 1850        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 1851        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1852                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1853                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1854                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 1855                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17,            \ 
 1858                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 1859                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 1860                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 1861                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 1862                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 1863                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 1864                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 1865                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 1866                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 1867                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 1868                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 1869                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 1870                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 1871                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 1872                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 1873                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 1874                SAVE_ARG(FUNCNAME, 16);                                                            \ 
 1875                SAVE_ARG(FUNCNAME, 17);                                                            \ 
 1876                SAVE_ARG(FUNCNAME, 18);                                                            \ 
 1877                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 1878                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 1879                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 1880                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 1881                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 1882                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 1883                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 1884                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 1885                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 1886                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 1887                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 1888                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 1889                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 1890                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 1891                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 1892                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 1893                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 1894                        SAVE_ARG_HISTORY(FUNCNAME, 16);                                            \ 
 1895                        SAVE_ARG_HISTORY(FUNCNAME, 17);                                            \ 
 1896                        SAVE_ARG_HISTORY(FUNCNAME, 18);                                            \ 
 1898                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 1900                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 1901                REGISTER_CALL(FUNCNAME);                                                           \ 
 1902                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 1903                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 1904                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 1906                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 1907                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1908                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 1909                                                arg15, arg16, arg17, arg18);                       \ 
 1912                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 1913                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 1914                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 1915                                                arg15, arg16, arg17, arg18);                       \ 
 1918                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 1919                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 1920                                                    arg7, arg8, arg9, arg10, arg11, arg12, arg13,  \ 
 1921                                                    arg14, arg15, arg16, arg17, arg18);            \ 
 1924        DEFINE_RESET_FUNCTION(FUNCNAME) 
 1926#define FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,          \ 
 1927                         ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,        \ 
 1928                         ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE,   \ 
 1929                         ARG17_TYPE, ARG18_TYPE)                                                   \ 
 1930        DECLARE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1931                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1932                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 1933                                 ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE)                   \ 
 1934        DEFINE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1935                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1936                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,        \ 
 1937                                ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) 
 1939#define DECLARE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 1940                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 1941                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 1942                                 ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE)       \ 
 1943        typedef struct FUNCNAME##_Fake {                                                           \ 
 1944                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 1945                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 1946                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 1947                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 1948                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 1949                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 1950                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 1951                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 1952                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 1953                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 1954                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 1955                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 1956                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 1957                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 1958                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 1959                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 1960                DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME)                                              \ 
 1961                DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME)                                              \ 
 1962                DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME)                                              \ 
 1963                DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME)                                              \ 
 1964                DECLARE_ALL_FUNC_COMMON                                                            \ 
 1965                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 1966                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 1967                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 1968                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 1969                                             ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 1970                                             ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE,       \ 
 1972                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 1973                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 1974                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 1975                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 1976                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE,       \ 
 1977                                             ARG18_TYPE, ARG19_TYPE);                              \ 
 1978        } FUNCNAME##_Fake;                                                                         \ 
 1979        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 1980        void FUNCNAME##_reset(void);                                                               \ 
 1981        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1982                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1983                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1984                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 1985                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17,            \ 
 1986                ARG18_TYPE arg18, ARG19_TYPE arg19); 
 1988#define DEFINE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 1989                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 1990                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,        \ 
 1991                                ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE)                    \ 
 1992        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 1993        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 1994                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 1995                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 1996                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 1997                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17,            \ 
 1998                ARG18_TYPE arg18, ARG19_TYPE arg19)                                                \ 
 2000                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 2001                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 2002                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 2003                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 2004                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 2005                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 2006                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 2007                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 2008                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 2009                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 2010                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 2011                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 2012                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 2013                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 2014                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 2015                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 2016                SAVE_ARG(FUNCNAME, 16);                                                            \ 
 2017                SAVE_ARG(FUNCNAME, 17);                                                            \ 
 2018                SAVE_ARG(FUNCNAME, 18);                                                            \ 
 2019                SAVE_ARG(FUNCNAME, 19);                                                            \ 
 2020                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 2021                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 2022                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 2023                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 2024                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 2025                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 2026                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 2027                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 2028                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 2029                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 2030                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 2031                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 2032                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 2033                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 2034                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 2035                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 2036                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 2037                        SAVE_ARG_HISTORY(FUNCNAME, 16);                                            \ 
 2038                        SAVE_ARG_HISTORY(FUNCNAME, 17);                                            \ 
 2039                        SAVE_ARG_HISTORY(FUNCNAME, 18);                                            \ 
 2040                        SAVE_ARG_HISTORY(FUNCNAME, 19);                                            \ 
 2042                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 2044                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 2045                REGISTER_CALL(FUNCNAME);                                                           \ 
 2046                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 2047                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 2048                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 2050                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 2051                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 2052                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 2053                                                arg15, arg16, arg17, arg18, arg19);                \ 
 2056                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 2057                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 2058                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 2059                                                arg15, arg16, arg17, arg18, arg19);                \ 
 2062                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 2063                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 2064                                                    arg7, arg8, arg9, arg10, arg11, arg12, arg13,  \ 
 2065                                                    arg14, arg15, arg16, arg17, arg18, arg19);     \ 
 2068        DEFINE_RESET_FUNCTION(FUNCNAME) 
 2070#define FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,          \ 
 2071                         ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,        \ 
 2072                         ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE,   \ 
 2073                         ARG17_TYPE, ARG18_TYPE, ARG19_TYPE)                                       \ 
 2074        DECLARE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,  \ 
 2075                                 ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,            \ 
 2076                                 ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 2077                                 ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE)       \ 
 2078        DEFINE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 2079                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 2080                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,        \ 
 2081                                ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) 
 2083#define DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME)                                            \ 
 2084        typedef struct FUNCNAME##_Fake {                                                           \ 
 2085                DECLARE_ALL_FUNC_COMMON                                                            \ 
 2086                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 2087                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 2088                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 2089                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, void);                      \ 
 2090                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, void);                 \ 
 2091        } FUNCNAME##_Fake;                                                                         \ 
 2092        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 2093        void FUNCNAME##_reset(void);                                                               \ 
 2094        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(void); 
 2096#define DEFINE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME)                                             \ 
 2097        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 2098        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(void)                                     \ 
 2100                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 2102                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 2104                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 2105                REGISTER_CALL(FUNCNAME);                                                           \ 
 2106                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 2107                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 2108                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 2110                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2111                                                [FUNCNAME##_fake.custom_fake_seq_idx++]();         \ 
 2112                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2116                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2117                                                [FUNCNAME##_fake.custom_fake_seq_len - 1]();       \ 
 2118                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2120                                return FUNCNAME##_fake                                             \ 
 2121                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len -     \ 
 2125                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 2126                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake();                           \ 
 2127                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 2129                        return FUNCNAME##_fake.custom_fake();                                      \ 
 2131                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 2133        DEFINE_RESET_FUNCTION(FUNCNAME) 
 2135#define FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME)                                                    \ 
 2136        DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME)                                            \ 
 2137        DEFINE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) 
 2139#define DECLARE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE)                                 \ 
 2140        typedef struct FUNCNAME##_Fake {                                                           \ 
 2141                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 2142                DECLARE_ALL_FUNC_COMMON                                                            \ 
 2143                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 2144                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 2145                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 2146                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE);                 \ 
 2147                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE);            \ 
 2148        } FUNCNAME##_Fake;                                                                         \ 
 2149        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 2150        void FUNCNAME##_reset(void);                                                               \ 
 2151        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0); 
 2153#define DEFINE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE)                                  \ 
 2154        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 2155        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0)                           \ 
 2157                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 2158                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 2159                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 2161                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 2163                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 2164                REGISTER_CALL(FUNCNAME);                                                           \ 
 2165                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 2166                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 2167                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 2169                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2170                                                [FUNCNAME##_fake.custom_fake_seq_idx++](arg0);     \ 
 2171                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2175                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2176                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](arg0);   \ 
 2177                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2179                                return FUNCNAME##_fake                                             \ 
 2180                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 2184                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 2185                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0);                       \ 
 2186                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 2188                        return FUNCNAME##_fake.custom_fake(arg0);                                  \ 
 2190                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 2192        DEFINE_RESET_FUNCTION(FUNCNAME) 
 2194#define FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE)                                         \ 
 2195        DECLARE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE)                                 \ 
 2196        DEFINE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) 
 2198#define DECLARE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE)                      \ 
 2199        typedef struct FUNCNAME##_Fake {                                                           \ 
 2200                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 2201                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 2202                DECLARE_ALL_FUNC_COMMON                                                            \ 
 2203                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 2204                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 2205                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 2206                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE);      \ 
 2207                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE); \ 
 2208        } FUNCNAME##_Fake;                                                                         \ 
 2209        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 2210        void FUNCNAME##_reset(void);                                                               \ 
 2211        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1); 
 2213#define DEFINE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE)                       \ 
 2214        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 2215        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1)           \ 
 2217                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 2218                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 2219                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 2220                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 2221                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 2223                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 2225                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 2226                REGISTER_CALL(FUNCNAME);                                                           \ 
 2227                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 2228                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 2229                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 2230                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 2231                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 2233                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2237                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2238                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](arg0,    \ 
 2240                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2242                                return FUNCNAME##_fake                                             \ 
 2243                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 2247                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 2248                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1);                 \ 
 2249                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 2251                        return FUNCNAME##_fake.custom_fake(arg0, arg1);                            \ 
 2253                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 2255        DEFINE_RESET_FUNCTION(FUNCNAME) 
 2257#define FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE)                              \ 
 2258        DECLARE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE)                      \ 
 2259        DEFINE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) 
 2261#define DECLARE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE)           \ 
 2262        typedef struct FUNCNAME##_Fake {                                                           \ 
 2263                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 2264                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 2265                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 2266                DECLARE_ALL_FUNC_COMMON                                                            \ 
 2267                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 2268                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 2269                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 2270                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 2272                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 2274        } FUNCNAME##_Fake;                                                                         \ 
 2275        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 2276        void FUNCNAME##_reset(void);                                                               \ 
 2277        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1,           \ 
 2280#define DEFINE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE)            \ 
 2281        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 2282        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1,           \ 
 2285                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 2286                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 2287                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 2288                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 2289                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 2290                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 2291                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 2293                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 2295                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 2296                REGISTER_CALL(FUNCNAME);                                                           \ 
 2297                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 2298                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 2299                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 2300                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 2301                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 2302                                                                  arg0, arg1, arg2);               \ 
 2303                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2307                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2308                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 2309                                                        arg0, arg1, arg2);                         \ 
 2310                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2312                                return FUNCNAME##_fake                                             \ 
 2313                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 2314                                                arg0, arg1, arg2);                                 \ 
 2317                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 2318                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2);           \ 
 2319                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 2321                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2);                      \ 
 2323                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 2325        DEFINE_RESET_FUNCTION(FUNCNAME) 
 2327#define FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE)                   \ 
 2328        DECLARE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE)           \ 
 2329        DEFINE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) 
 2331#define DECLARE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 2333        typedef struct FUNCNAME##_Fake {                                                           \ 
 2334                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 2335                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 2336                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 2337                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 2338                DECLARE_ALL_FUNC_COMMON                                                            \ 
 2339                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 2340                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 2341                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 2342                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 2343                                             ARG2_TYPE, ARG3_TYPE);                                \ 
 2344                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 2345                                             ARG2_TYPE, ARG3_TYPE);                                \ 
 2346        } FUNCNAME##_Fake;                                                                         \ 
 2347        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 2348        void FUNCNAME##_reset(void);                                                               \ 
 2349        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1,           \ 
 2350                                                         ARG2_TYPE arg2, ARG3_TYPE arg3); 
 2352#define DEFINE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \ 
 2353        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 2354        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1,           \ 
 2355                                                         ARG2_TYPE arg2, ARG3_TYPE arg3)           \ 
 2357                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 2358                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 2359                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 2360                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 2361                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 2362                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 2363                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 2364                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 2365                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 2367                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 2369                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 2370                REGISTER_CALL(FUNCNAME);                                                           \ 
 2371                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 2372                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 2373                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 2374                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 2375                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 2376                                                                  arg0, arg1, arg2, arg3);         \ 
 2377                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2381                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2382                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 2383                                                        arg0, arg1, arg2, arg3);                   \ 
 2384                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2386                                return FUNCNAME##_fake                                             \ 
 2387                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 2388                                                arg0, arg1, arg2, arg3);                           \ 
 2391                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 2392                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3);     \ 
 2393                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 2395                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3);                \ 
 2397                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 2399        DEFINE_RESET_FUNCTION(FUNCNAME) 
 2401#define FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE)        \ 
 2402        DECLARE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 2404        DEFINE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) 
 2406#define DECLARE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 2407                                 ARG3_TYPE, ARG4_TYPE)                                             \ 
 2408        typedef struct FUNCNAME##_Fake {                                                           \ 
 2409                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 2410                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 2411                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 2412                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 2413                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 2414                DECLARE_ALL_FUNC_COMMON                                                            \ 
 2415                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 2416                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 2417                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 2418                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 2419                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE);                     \ 
 2420                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 2421                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE);                     \ 
 2422        } FUNCNAME##_Fake;                                                                         \ 
 2423        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 2424        void FUNCNAME##_reset(void);                                                               \ 
 2425        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 2426                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); 
 2428#define DEFINE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 2430        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 2431        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 2432                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4)    \ 
 2434                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 2435                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 2436                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 2437                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 2438                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 2439                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 2440                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 2441                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 2442                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 2443                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 2444                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 2446                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 2448                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 2449                REGISTER_CALL(FUNCNAME);                                                           \ 
 2450                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 2451                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 2452                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 2453                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 2454                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 2455                                                                  arg0, arg1, arg2, arg3, arg4);   \ 
 2456                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2460                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2461                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 2462                                                        arg0, arg1, arg2, arg3, arg4);             \ 
 2463                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2465                                return FUNCNAME##_fake                                             \ 
 2466                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 2467                                                arg0, arg1, arg2, arg3, arg4);                     \ 
 2470                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 2472                                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4);         \ 
 2473                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 2475                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4);          \ 
 2477                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 2479        DEFINE_RESET_FUNCTION(FUNCNAME) 
 2481#define FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,        \ 
 2483        DECLARE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 2484                                 ARG3_TYPE, ARG4_TYPE)                                             \ 
 2485        DEFINE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 2488#define DECLARE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 2489                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE)                                  \ 
 2490        typedef struct FUNCNAME##_Fake {                                                           \ 
 2491                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 2492                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 2493                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 2494                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 2495                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 2496                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 2497                DECLARE_ALL_FUNC_COMMON                                                            \ 
 2498                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 2499                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 2500                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 2501                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 2502                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE);          \ 
 2503                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 2504                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE);          \ 
 2505        } FUNCNAME##_Fake;                                                                         \ 
 2506        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 2507        void FUNCNAME##_reset(void);                                                               \ 
 2508        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1,           \ 
 2509                                                         ARG2_TYPE arg2, ARG3_TYPE arg3,           \ 
 2510                                                         ARG4_TYPE arg4, ARG5_TYPE arg5); 
 2512#define DEFINE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 2513                                ARG4_TYPE, ARG5_TYPE)                                              \ 
 2514        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 2515        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1,           \ 
 2516                                                         ARG2_TYPE arg2, ARG3_TYPE arg3,           \ 
 2517                                                         ARG4_TYPE arg4, ARG5_TYPE arg5)           \ 
 2519                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 2520                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 2521                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 2522                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 2523                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 2524                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 2525                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 2526                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 2527                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 2528                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 2529                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 2530                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 2531                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 2533                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 2535                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 2536                REGISTER_CALL(FUNCNAME);                                                           \ 
 2537                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 2538                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 2539                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 2541                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2542                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 2543                                                        arg0, arg1, arg2, arg3, arg4, arg5);       \ 
 2544                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2548                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2549                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 2550                                                        arg0, arg1, arg2, arg3, arg4, arg5);       \ 
 2551                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2553                                return FUNCNAME##_fake                                             \ 
 2554                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 2555                                                arg0, arg1, arg2, arg3, arg4, arg5);               \ 
 2558                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 2560                                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5);   \ 
 2561                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 2563                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5);    \ 
 2565                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 2567        DEFINE_RESET_FUNCTION(FUNCNAME) 
 2569#define FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,        \ 
 2570                         ARG4_TYPE, ARG5_TYPE)                                                     \ 
 2571        DECLARE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 2572                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE)                                  \ 
 2573        DEFINE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 2574                                ARG4_TYPE, ARG5_TYPE) 
 2576#define DECLARE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 2577                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE)                       \ 
 2578        typedef struct FUNCNAME##_Fake {                                                           \ 
 2579                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 2580                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 2581                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 2582                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 2583                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 2584                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 2585                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 2586                DECLARE_ALL_FUNC_COMMON                                                            \ 
 2587                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 2588                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 2589                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 2590                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 2591                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 2593                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 2594                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 2596        } FUNCNAME##_Fake;                                                                         \ 
 2597        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 2598        void FUNCNAME##_reset(void);                                                               \ 
 2599        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 2600                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 2601                ARG5_TYPE arg5, ARG6_TYPE arg6); 
 2603#define DEFINE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 2604                                ARG4_TYPE, ARG5_TYPE, ARG6_TYPE)                                   \ 
 2605        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 2606        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 2607                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 2608                ARG5_TYPE arg5, ARG6_TYPE arg6)                                                    \ 
 2610                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 2611                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 2612                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 2613                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 2614                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 2615                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 2616                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 2617                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 2618                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 2619                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 2620                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 2621                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 2622                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 2623                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 2624                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 2626                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 2628                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 2629                REGISTER_CALL(FUNCNAME);                                                           \ 
 2630                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 2631                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 2632                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 2634                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2635                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 2636                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6); \ 
 2637                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2641                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2642                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 2643                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6); \ 
 2644                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2646                                return FUNCNAME##_fake                                             \ 
 2647                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 2648                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6);         \ 
 2651                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 2652                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3,      \ 
 2653                                                                      arg4, arg5, arg6);           \ 
 2654                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 2656                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,     \ 
 2659                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 2661        DEFINE_RESET_FUNCTION(FUNCNAME) 
 2663#define FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,        \ 
 2664                         ARG4_TYPE, ARG5_TYPE, ARG6_TYPE)                                          \ 
 2665        DECLARE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 2666                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE)                       \ 
 2667        DEFINE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 2668                                ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) 
 2670#define DECLARE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 2671                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE)            \ 
 2672        typedef struct FUNCNAME##_Fake {                                                           \ 
 2673                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 2674                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 2675                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 2676                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 2677                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 2678                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 2679                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 2680                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 2681                DECLARE_ALL_FUNC_COMMON                                                            \ 
 2682                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 2683                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 2684                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 2685                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 2686                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 2687                                             ARG6_TYPE, ARG7_TYPE);                                \ 
 2688                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 2689                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 2690                                             ARG6_TYPE, ARG7_TYPE);                                \ 
 2691        } FUNCNAME##_Fake;                                                                         \ 
 2692        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 2693        void FUNCNAME##_reset(void);                                                               \ 
 2694        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 2695                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 2696                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); 
 2698#define DEFINE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 2699                                ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE)                        \ 
 2700        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 2701        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 2702                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 2703                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7)                                    \ 
 2705                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 2706                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 2707                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 2708                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 2709                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 2710                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 2711                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 2712                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 2713                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 2714                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 2715                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 2716                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 2717                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 2718                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 2719                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 2720                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 2721                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 2723                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 2725                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 2726                REGISTER_CALL(FUNCNAME);                                                           \ 
 2727                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 2728                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 2729                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 2730                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 2731                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 2732                                                                  arg0, arg1, arg2, arg3, arg4,    \ 
 2733                                                                  arg5, arg6, arg7);               \ 
 2734                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2738                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2739                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 2740                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 2742                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2744                                return FUNCNAME##_fake                                             \ 
 2745                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 2746                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);   \ 
 2749                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 2750                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3,      \ 
 2751                                                                      arg4, arg5, arg6, arg7);     \ 
 2752                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 2754                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,     \ 
 2757                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 2759        DEFINE_RESET_FUNCTION(FUNCNAME) 
 2761#define FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,        \ 
 2762                         ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE)                               \ 
 2763        DECLARE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 2764                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE)            \ 
 2765        DEFINE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 2766                                ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) 
 2768#define DECLARE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 2769                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \ 
 2770        typedef struct FUNCNAME##_Fake {                                                           \ 
 2771                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 2772                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 2773                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 2774                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 2775                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 2776                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 2777                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 2778                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 2779                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 2780                DECLARE_ALL_FUNC_COMMON                                                            \ 
 2781                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 2782                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 2783                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 2784                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 2785                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 2786                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE);                     \ 
 2787                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 2788                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 2789                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE);                     \ 
 2790        } FUNCNAME##_Fake;                                                                         \ 
 2791        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 2792        void FUNCNAME##_reset(void);                                                               \ 
 2793        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 2794                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 2795                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); 
 2797#define DEFINE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 2798                                ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE)             \ 
 2799        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 2800        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 2801                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 2802                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8)                    \ 
 2804                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 2805                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 2806                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 2807                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 2808                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 2809                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 2810                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 2811                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 2812                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 2813                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 2814                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 2815                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 2816                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 2817                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 2818                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 2819                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 2820                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 2821                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 2822                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 2824                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 2826                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 2827                REGISTER_CALL(FUNCNAME);                                                           \ 
 2828                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 2829                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 2830                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 2831                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 2832                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 2833                                                                  arg0, arg1, arg2, arg3, arg4,    \ 
 2834                                                                  arg5, arg6, arg7, arg8);         \ 
 2835                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2839                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2840                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 2841                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 2843                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2845                                return FUNCNAME##_fake                                             \ 
 2846                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 2847                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 2851                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 2852                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(                             \ 
 2853                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);             \ 
 2854                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 2856                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,     \ 
 2857                                                           arg6, arg7, arg8);                      \ 
 2859                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 2861        DEFINE_RESET_FUNCTION(FUNCNAME) 
 2863#define FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,        \ 
 2864                         ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE)                    \ 
 2865        DECLARE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 2866                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \ 
 2867        DEFINE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 2868                                ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) 
 2870#define DECLARE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 2871                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 2872                                  ARG8_TYPE, ARG9_TYPE)                                            \ 
 2873        typedef struct FUNCNAME##_Fake {                                                           \ 
 2874                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 2875                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 2876                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 2877                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 2878                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 2879                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 2880                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 2881                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 2882                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 2883                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 2884                DECLARE_ALL_FUNC_COMMON                                                            \ 
 2885                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 2886                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 2887                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 2888                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 2889                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 2890                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE);          \ 
 2891                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 2892                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 2893                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE);          \ 
 2894        } FUNCNAME##_Fake;                                                                         \ 
 2895        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 2896        void FUNCNAME##_reset(void);                                                               \ 
 2897        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 2898                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 2899                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); 
 2901#define DEFINE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 2902                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 2904        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 2905        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 2906                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 2907                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9)    \ 
 2909                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 2910                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 2911                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 2912                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 2913                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 2914                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 2915                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 2916                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 2917                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 2918                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 2919                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 2920                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 2921                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 2922                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 2923                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 2924                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 2925                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 2926                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 2927                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 2928                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 2929                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 2931                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 2933                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 2934                REGISTER_CALL(FUNCNAME);                                                           \ 
 2935                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 2936                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 2937                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 2938                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 2939                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 2940                                                                  arg0, arg1, arg2, arg3, arg4,    \ 
 2941                                                                  arg5, arg6, arg7, arg8, arg9);   \ 
 2942                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2946                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 2947                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 2948                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 2949                                                        arg7, arg8, arg9);                         \ 
 2950                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 2952                                return FUNCNAME##_fake                                             \ 
 2953                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 2954                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 2958                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 2959                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(                             \ 
 2960                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);       \ 
 2961                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 2963                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,     \ 
 2964                                                           arg6, arg7, arg8, arg9);                \ 
 2966                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 2968        DEFINE_RESET_FUNCTION(FUNCNAME) 
 2970#define FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 2971                          ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE)        \ 
 2972        DECLARE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 2973                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 2974                                  ARG8_TYPE, ARG9_TYPE)                                            \ 
 2975        DEFINE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 2976                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 2979#define DECLARE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 2980                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 2981                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE)                                \ 
 2982        typedef struct FUNCNAME##_Fake {                                                           \ 
 2983                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 2984                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 2985                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 2986                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 2987                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 2988                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 2989                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 2990                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 2991                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 2992                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 2993                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 2994                DECLARE_ALL_FUNC_COMMON                                                            \ 
 2995                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 2996                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 2997                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 2998                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 2999                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3000                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3002                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 3003                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3004                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3006        } FUNCNAME##_Fake;                                                                         \ 
 3007        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 3008        void FUNCNAME##_reset(void);                                                               \ 
 3009        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3010                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3011                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3014#define DEFINE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3015                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3016                                 ARG9_TYPE, ARG10_TYPE)                                            \ 
 3017        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 3018        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3019                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3020                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3023                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 3024                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 3025                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 3026                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 3027                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 3028                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 3029                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 3030                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 3031                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 3032                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 3033                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 3034                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 3035                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 3036                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 3037                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 3038                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 3039                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 3040                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 3041                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 3042                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 3043                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 3044                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 3045                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 3047                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 3049                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 3050                REGISTER_CALL(FUNCNAME);                                                           \ 
 3051                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 3052                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 3053                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 3055                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 3056                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 3057                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 3058                                                        arg7, arg8, arg9, arg10);                  \ 
 3059                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 3063                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 3064                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 3065                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 3066                                                        arg7, arg8, arg9, arg10);                  \ 
 3067                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 3069                                return FUNCNAME##_fake                                             \ 
 3070                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 3071                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 3072                                                arg8, arg9, arg10);                                \ 
 3075                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 3077                                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,    \ 
 3078                                                            arg6, arg7, arg8, arg9, arg10);        \ 
 3079                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 3081                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,     \ 
 3082                                                           arg6, arg7, arg8, arg9, arg10);         \ 
 3084                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 3086        DEFINE_RESET_FUNCTION(FUNCNAME) 
 3088#define FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 3089                          ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,        \ 
 3091        DECLARE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 3092                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 3093                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE)                                \ 
 3094        DEFINE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3095                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3096                                 ARG9_TYPE, ARG10_TYPE) 
 3098#define DECLARE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 3099                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 3100                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE)                    \ 
 3101        typedef struct FUNCNAME##_Fake {                                                           \ 
 3102                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 3103                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 3104                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 3105                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 3106                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 3107                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 3108                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 3109                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 3110                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 3111                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 3112                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 3113                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 3114                DECLARE_ALL_FUNC_COMMON                                                            \ 
 3115                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 3116                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 3117                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 3118                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 3119                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3120                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3121                                             ARG10_TYPE, ARG11_TYPE);                              \ 
 3122                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 3123                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3124                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3125                                             ARG10_TYPE, ARG11_TYPE);                              \ 
 3126        } FUNCNAME##_Fake;                                                                         \ 
 3127        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 3128        void FUNCNAME##_reset(void);                                                               \ 
 3129        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3130                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3131                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3132                ARG10_TYPE arg10, ARG11_TYPE arg11); 
 3134#define DEFINE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3135                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3136                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE)                                \ 
 3137        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 3138        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3139                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3140                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3141                ARG10_TYPE arg10, ARG11_TYPE arg11)                                                \ 
 3143                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 3144                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 3145                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 3146                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 3147                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 3148                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 3149                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 3150                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 3151                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 3152                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 3153                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 3154                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 3155                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 3156                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 3157                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 3158                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 3159                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 3160                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 3161                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 3162                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 3163                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 3164                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 3165                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 3166                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 3167                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 3169                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 3171                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 3172                REGISTER_CALL(FUNCNAME);                                                           \ 
 3173                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 3174                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 3175                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 3177                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 3178                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 3179                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 3180                                                        arg7, arg8, arg9, arg10, arg11);           \ 
 3181                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 3185                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 3186                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 3187                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 3188                                                        arg7, arg8, arg9, arg10, arg11);           \ 
 3189                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 3191                                return FUNCNAME##_fake                                             \ 
 3192                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 3193                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 3194                                                arg8, arg9, arg10, arg11);                         \ 
 3197                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 3199                                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,    \ 
 3200                                                            arg6, arg7, arg8, arg9, arg10, arg11); \ 
 3201                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 3203                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,     \ 
 3204                                                           arg6, arg7, arg8, arg9, arg10, arg11);  \ 
 3206                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 3208        DEFINE_RESET_FUNCTION(FUNCNAME) 
 3210#define FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 3211                          ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,        \ 
 3212                          ARG10_TYPE, ARG11_TYPE)                                                  \ 
 3213        DECLARE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 3214                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 3215                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE)                    \ 
 3216        DEFINE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3217                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3218                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) 
 3220#define DECLARE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 3221                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 3222                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE)        \ 
 3223        typedef struct FUNCNAME##_Fake {                                                           \ 
 3224                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 3225                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 3226                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 3227                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 3228                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 3229                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 3230                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 3231                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 3232                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 3233                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 3234                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 3235                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 3236                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 3237                DECLARE_ALL_FUNC_COMMON                                                            \ 
 3238                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 3239                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 3240                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 3241                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 3242                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3243                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3244                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE);                  \ 
 3245                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 3246                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3247                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3248                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE);                  \ 
 3249        } FUNCNAME##_Fake;                                                                         \ 
 3250        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 3251        void FUNCNAME##_reset(void);                                                               \ 
 3252        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3253                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3254                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3255                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); 
 3257#define DEFINE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3258                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3259                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE)                    \ 
 3260        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 3261        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3262                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3263                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3264                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12)                              \ 
 3266                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 3267                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 3268                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 3269                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 3270                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 3271                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 3272                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 3273                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 3274                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 3275                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 3276                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 3277                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 3278                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 3279                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 3280                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 3281                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 3282                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 3283                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 3284                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 3285                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 3286                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 3287                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 3288                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 3289                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 3290                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 3291                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 3292                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 3294                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 3296                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 3297                REGISTER_CALL(FUNCNAME);                                                           \ 
 3298                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 3299                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 3300                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 3302                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 3303                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 3304                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 3305                                                        arg7, arg8, arg9, arg10, arg11, arg12);    \ 
 3306                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 3310                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 3311                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 3312                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 3313                                                        arg7, arg8, arg9, arg10, arg11, arg12);    \ 
 3314                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 3316                                return FUNCNAME##_fake                                             \ 
 3317                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 3318                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 3319                                                arg8, arg9, arg10, arg11, arg12);                  \ 
 3322                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 3323                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(                             \ 
 3324                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, \ 
 3326                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 3328                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,     \ 
 3329                                                           arg6, arg7, arg8, arg9, arg10, arg11,   \ 
 3332                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 3334        DEFINE_RESET_FUNCTION(FUNCNAME) 
 3336#define FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 3337                          ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,        \ 
 3338                          ARG10_TYPE, ARG11_TYPE, ARG12_TYPE)                                      \ 
 3339        DECLARE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 3340                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 3341                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE)        \ 
 3342        DEFINE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3343                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3344                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) 
 3346#define DECLARE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 3347                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 3348                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,        \ 
 3350        typedef struct FUNCNAME##_Fake {                                                           \ 
 3351                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 3352                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 3353                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 3354                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 3355                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 3356                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 3357                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 3358                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 3359                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 3360                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 3361                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 3362                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 3363                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 3364                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 3365                DECLARE_ALL_FUNC_COMMON                                                            \ 
 3366                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 3367                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 3368                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 3369                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 3370                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3371                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3372                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE);      \ 
 3373                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 3374                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3375                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3376                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE);      \ 
 3377        } FUNCNAME##_Fake;                                                                         \ 
 3378        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 3379        void FUNCNAME##_reset(void);                                                               \ 
 3380        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3381                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3382                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3383                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); 
 3385#define DEFINE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3386                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3387                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE)        \ 
 3388        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 3389        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3390                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3391                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3392                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13)            \ 
 3394                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 3395                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 3396                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 3397                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 3398                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 3399                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 3400                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 3401                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 3402                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 3403                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 3404                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 3405                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 3406                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 3407                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 3408                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 3409                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 3410                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 3411                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 3412                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 3413                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 3414                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 3415                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 3416                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 3417                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 3418                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 3419                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 3420                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 3421                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 3422                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 3424                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 3426                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 3427                REGISTER_CALL(FUNCNAME);                                                           \ 
 3428                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 3429                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 3430                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 3431                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 3432                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 3433                                                                  arg0, arg1, arg2, arg3, arg4,    \ 
 3434                                                                  arg5, arg6, arg7, arg8, arg9,    \ 
 3435                                                                  arg10, arg11, arg12, arg13);     \ 
 3436                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 3440                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 3441                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 3442                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 3443                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 3445                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 3447                                return FUNCNAME##_fake                                             \ 
 3448                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 3449                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 3450                                                arg8, arg9, arg10, arg11, arg12, arg13);           \ 
 3453                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 3454                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(                             \ 
 3455                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, \ 
 3456                                arg11, arg12, arg13);                                              \ 
 3457                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 3459                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,     \ 
 3460                                                           arg6, arg7, arg8, arg9, arg10, arg11,   \ 
 3463                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 3465        DEFINE_RESET_FUNCTION(FUNCNAME) 
 3467#define FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 3468                          ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,        \ 
 3469                          ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE)                          \ 
 3470        DECLARE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 3471                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 3472                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,        \ 
 3474        DEFINE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3475                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3476                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) 
 3478#define DECLARE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 3479                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 3480                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,        \ 
 3481                                  ARG13_TYPE, ARG14_TYPE)                                          \ 
 3482        typedef struct FUNCNAME##_Fake {                                                           \ 
 3483                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 3484                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 3485                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 3486                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 3487                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 3488                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 3489                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 3490                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 3491                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 3492                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 3493                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 3494                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 3495                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 3496                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 3497                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 3498                DECLARE_ALL_FUNC_COMMON                                                            \ 
 3499                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 3500                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 3501                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 3502                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 3503                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3504                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3505                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 3507                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 3508                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3509                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3510                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 3512        } FUNCNAME##_Fake;                                                                         \ 
 3513        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 3514        void FUNCNAME##_reset(void);                                                               \ 
 3515        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3516                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3517                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3518                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 3521#define DEFINE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3522                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3523                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 3525        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 3526        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3527                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3528                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3529                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 3532                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 3533                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 3534                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 3535                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 3536                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 3537                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 3538                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 3539                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 3540                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 3541                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 3542                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 3543                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 3544                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 3545                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 3546                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 3547                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 3548                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 3549                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 3550                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 3551                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 3552                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 3553                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 3554                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 3555                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 3556                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 3557                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 3558                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 3559                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 3560                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 3561                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 3562                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 3564                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 3566                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 3567                REGISTER_CALL(FUNCNAME);                                                           \ 
 3568                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 3569                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 3570                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 3572                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 3573                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 3574                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 3575                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 3577                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 3581                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 3582                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 3583                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 3584                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 3586                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 3588                                return FUNCNAME##_fake                                             \ 
 3589                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 3590                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 3591                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14);    \ 
 3594                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 3595                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(                             \ 
 3596                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, \ 
 3597                                arg11, arg12, arg13, arg14);                                       \ 
 3598                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 3600                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,     \ 
 3601                                                           arg6, arg7, arg8, arg9, arg10, arg11,   \ 
 3602                                                           arg12, arg13, arg14);                   \ 
 3604                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 3606        DEFINE_RESET_FUNCTION(FUNCNAME) 
 3608#define FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 3609                          ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,        \ 
 3610                          ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE)              \ 
 3611        DECLARE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 3612                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 3613                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,        \ 
 3614                                  ARG13_TYPE, ARG14_TYPE)                                          \ 
 3615        DEFINE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3616                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3617                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 3620#define DECLARE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 3621                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 3622                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,        \ 
 3623                                  ARG13_TYPE, ARG14_TYPE, ARG15_TYPE)                              \ 
 3624        typedef struct FUNCNAME##_Fake {                                                           \ 
 3625                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 3626                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 3627                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 3628                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 3629                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 3630                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 3631                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 3632                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 3633                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 3634                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 3635                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 3636                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 3637                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 3638                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 3639                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 3640                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 3641                DECLARE_ALL_FUNC_COMMON                                                            \ 
 3642                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 3643                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 3644                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 3645                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 3646                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3647                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3648                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 3649                                             ARG14_TYPE, ARG15_TYPE);                              \ 
 3650                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 3651                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3652                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3653                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 3654                                             ARG14_TYPE, ARG15_TYPE);                              \ 
 3655        } FUNCNAME##_Fake;                                                                         \ 
 3656        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 3657        void FUNCNAME##_reset(void);                                                               \ 
 3658        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3659                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3660                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3661                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 3662                ARG14_TYPE arg14, ARG15_TYPE arg15); 
 3664#define DEFINE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3665                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3666                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 3667                                 ARG14_TYPE, ARG15_TYPE)                                           \ 
 3668        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 3669        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3670                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3671                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3672                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 3673                ARG14_TYPE arg14, ARG15_TYPE arg15)                                                \ 
 3675                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 3676                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 3677                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 3678                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 3679                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 3680                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 3681                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 3682                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 3683                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 3684                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 3685                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 3686                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 3687                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 3688                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 3689                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 3690                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 3691                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 3692                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 3693                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 3694                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 3695                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 3696                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 3697                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 3698                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 3699                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 3700                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 3701                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 3702                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 3703                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 3704                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 3705                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 3706                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 3707                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 3709                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 3711                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 3712                REGISTER_CALL(FUNCNAME);                                                           \ 
 3713                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 3714                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 3715                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 3717                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 3718                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 3719                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 3720                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 3721                                                        arg13, arg14, arg15);                      \ 
 3722                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 3726                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 3727                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 3728                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 3729                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 3730                                                        arg13, arg14, arg15);                      \ 
 3731                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 3733                                return FUNCNAME##_fake                                             \ 
 3734                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 3735                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 3736                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 3740                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 3741                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(                             \ 
 3742                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, \ 
 3743                                arg11, arg12, arg13, arg14, arg15);                                \ 
 3744                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 3746                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,     \ 
 3747                                                           arg6, arg7, arg8, arg9, arg10, arg11,   \ 
 3748                                                           arg12, arg13, arg14, arg15);            \ 
 3750                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 3752        DEFINE_RESET_FUNCTION(FUNCNAME) 
 3754#define FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 3755                          ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,        \ 
 3756                          ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE)  \ 
 3757        DECLARE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 3758                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 3759                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,        \ 
 3760                                  ARG13_TYPE, ARG14_TYPE, ARG15_TYPE)                              \ 
 3761        DEFINE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3762                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3763                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 3764                                 ARG14_TYPE, ARG15_TYPE) 
 3766#define DECLARE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 3767                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 3768                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,        \ 
 3769                                  ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE)                  \ 
 3770        typedef struct FUNCNAME##_Fake {                                                           \ 
 3771                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 3772                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 3773                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 3774                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 3775                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 3776                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 3777                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 3778                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 3779                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 3780                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 3781                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 3782                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 3783                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 3784                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 3785                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 3786                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 3787                DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME)                                              \ 
 3788                DECLARE_ALL_FUNC_COMMON                                                            \ 
 3789                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 3790                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 3791                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 3792                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 3793                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3794                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3795                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 3796                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE);                  \ 
 3797                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 3798                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3799                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3800                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 3801                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE);                  \ 
 3802        } FUNCNAME##_Fake;                                                                         \ 
 3803        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 3804        void FUNCNAME##_reset(void);                                                               \ 
 3805        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3806                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3807                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3808                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 3809                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); 
 3811#define DEFINE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3812                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3813                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 3814                                 ARG14_TYPE, ARG15_TYPE, ARG16_TYPE)                               \ 
 3815        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 3816        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3817                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3818                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3819                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 3820                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16)                              \ 
 3822                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 3823                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 3824                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 3825                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 3826                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 3827                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 3828                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 3829                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 3830                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 3831                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 3832                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 3833                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 3834                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 3835                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 3836                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 3837                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 3838                SAVE_ARG(FUNCNAME, 16);                                                            \ 
 3839                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 3840                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 3841                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 3842                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 3843                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 3844                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 3845                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 3846                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 3847                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 3848                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 3849                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 3850                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 3851                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 3852                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 3853                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 3854                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 3855                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 3856                        SAVE_ARG_HISTORY(FUNCNAME, 16);                                            \ 
 3858                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 3860                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 3861                REGISTER_CALL(FUNCNAME);                                                           \ 
 3862                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 3863                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 3864                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 3866                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 3867                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 3868                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 3869                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 3870                                                        arg13, arg14, arg15, arg16);               \ 
 3871                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 3875                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 3876                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 3877                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 3878                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 3879                                                        arg13, arg14, arg15, arg16);               \ 
 3880                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 3882                                return FUNCNAME##_fake                                             \ 
 3883                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 3884                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 3885                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 3889                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 3890                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(                             \ 
 3891                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, \ 
 3892                                arg11, arg12, arg13, arg14, arg15, arg16);                         \ 
 3893                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 3895                        return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,     \ 
 3896                                                           arg6, arg7, arg8, arg9, arg10, arg11,   \ 
 3897                                                           arg12, arg13, arg14, arg15, arg16);     \ 
 3899                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 3901        DEFINE_RESET_FUNCTION(FUNCNAME) 
 3903#define FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 3904                          ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,        \ 
 3905                          ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,  \ 
 3907        DECLARE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 3908                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 3909                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,        \ 
 3910                                  ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE)                  \ 
 3911        DEFINE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3912                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3913                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 3914                                 ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) 
 3916#define DECLARE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 3917                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 3918                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,        \ 
 3919                                  ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE)      \ 
 3920        typedef struct FUNCNAME##_Fake {                                                           \ 
 3921                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 3922                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 3923                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 3924                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 3925                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 3926                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 3927                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 3928                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 3929                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 3930                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 3931                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 3932                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 3933                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 3934                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 3935                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 3936                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 3937                DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME)                                              \ 
 3938                DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME)                                              \ 
 3939                DECLARE_ALL_FUNC_COMMON                                                            \ 
 3940                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 3941                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 3942                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 3943                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 3944                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3945                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3946                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 3947                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE);      \ 
 3948                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 3949                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 3950                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 3951                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 3952                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE);      \ 
 3953        } FUNCNAME##_Fake;                                                                         \ 
 3954        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 3955        void FUNCNAME##_reset(void);                                                               \ 
 3956        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3957                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3958                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3959                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 3960                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); 
 3962#define DEFINE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 3963                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 3964                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 3965                                 ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE)                   \ 
 3966        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 3967        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 3968                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 3969                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 3970                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 3971                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17)            \ 
 3973                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 3974                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 3975                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 3976                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 3977                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 3978                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 3979                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 3980                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 3981                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 3982                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 3983                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 3984                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 3985                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 3986                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 3987                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 3988                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 3989                SAVE_ARG(FUNCNAME, 16);                                                            \ 
 3990                SAVE_ARG(FUNCNAME, 17);                                                            \ 
 3991                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 3992                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 3993                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 3994                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 3995                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 3996                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 3997                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 3998                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 3999                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 4000                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 4001                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 4002                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 4003                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 4004                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 4005                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 4006                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 4007                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 4008                        SAVE_ARG_HISTORY(FUNCNAME, 16);                                            \ 
 4009                        SAVE_ARG_HISTORY(FUNCNAME, 17);                                            \ 
 4011                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 4013                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 4014                REGISTER_CALL(FUNCNAME);                                                           \ 
 4015                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 4016                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 4017                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 4019                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 4020                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 4021                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 4022                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 4023                                                        arg13, arg14, arg15, arg16, arg17);        \ 
 4024                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 4028                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 4029                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 4030                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 4031                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 4032                                                        arg13, arg14, arg15, arg16, arg17);        \ 
 4033                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 4035                                return FUNCNAME##_fake                                             \ 
 4036                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 4037                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 4038                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 4039                                                arg15, arg16, arg17);                              \ 
 4042                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 4043                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(                             \ 
 4044                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, \ 
 4045                                arg11, arg12, arg13, arg14, arg15, arg16, arg17);                  \ 
 4046                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 4048                        return FUNCNAME##_fake.custom_fake(                                        \ 
 4049                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, \ 
 4050                                arg11, arg12, arg13, arg14, arg15, arg16, arg17);                  \ 
 4052                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 4054        DEFINE_RESET_FUNCTION(FUNCNAME) 
 4056#define FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 4057                          ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,        \ 
 4058                          ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,  \ 
 4059                          ARG16_TYPE, ARG17_TYPE)                                                  \ 
 4060        DECLARE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 4061                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 4062                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,        \ 
 4063                                  ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE)      \ 
 4064        DEFINE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 4065                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 4066                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 4067                                 ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) 
 4069#define DECLARE_FAKE_VALUE_FUNC19(                                                                 \ 
 4070        RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,   \ 
 4071        ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,            \ 
 4072        ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE)                    \ 
 4073        typedef struct FUNCNAME##_Fake {                                                           \ 
 4074                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 4075                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 4076                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 4077                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 4078                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 4079                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 4080                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 4081                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 4082                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 4083                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 4084                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 4085                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 4086                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 4087                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 4088                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 4089                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 4090                DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME)                                              \ 
 4091                DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME)                                              \ 
 4092                DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME)                                              \ 
 4093                DECLARE_ALL_FUNC_COMMON                                                            \ 
 4094                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 4095                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 4096                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 4097                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 4098                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 4099                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 4100                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 4101                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE,       \ 
 4103                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 4104                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 4105                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 4106                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 4107                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE,       \ 
 4109        } FUNCNAME##_Fake;                                                                         \ 
 4110        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 4111        void FUNCNAME##_reset(void);                                                               \ 
 4112        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 4113                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 4114                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 4115                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 4116                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17,            \ 
 4119#define DEFINE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 4120                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 4121                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 4122                                 ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE)       \ 
 4123        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 4124        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 4125                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 4126                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 4127                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 4128                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17,            \ 
 4131                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 4132                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 4133                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 4134                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 4135                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 4136                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 4137                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 4138                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 4139                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 4140                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 4141                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 4142                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 4143                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 4144                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 4145                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 4146                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 4147                SAVE_ARG(FUNCNAME, 16);                                                            \ 
 4148                SAVE_ARG(FUNCNAME, 17);                                                            \ 
 4149                SAVE_ARG(FUNCNAME, 18);                                                            \ 
 4150                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 4151                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 4152                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 4153                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 4154                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 4155                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 4156                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 4157                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 4158                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 4159                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 4160                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 4161                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 4162                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 4163                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 4164                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 4165                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 4166                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 4167                        SAVE_ARG_HISTORY(FUNCNAME, 16);                                            \ 
 4168                        SAVE_ARG_HISTORY(FUNCNAME, 17);                                            \ 
 4169                        SAVE_ARG_HISTORY(FUNCNAME, 18);                                            \ 
 4171                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 4173                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 4174                REGISTER_CALL(FUNCNAME);                                                           \ 
 4175                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 4176                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 4177                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 4179                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 4180                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 4181                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 4182                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 4183                                                        arg13, arg14, arg15, arg16, arg17, arg18); \ 
 4184                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 4188                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 4189                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 4190                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 4191                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 4192                                                        arg13, arg14, arg15, arg16, arg17, arg18); \ 
 4193                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 4195                                return FUNCNAME##_fake                                             \ 
 4196                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 4197                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 4198                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 4199                                                arg15, arg16, arg17, arg18);                       \ 
 4202                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 4203                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(                             \ 
 4204                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, \ 
 4205                                arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18);           \ 
 4206                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 4208                        return FUNCNAME##_fake.custom_fake(                                        \ 
 4209                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, \ 
 4210                                arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18);           \ 
 4212                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 4214        DEFINE_RESET_FUNCTION(FUNCNAME) 
 4216#define FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 4217                          ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,        \ 
 4218                          ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,  \ 
 4219                          ARG16_TYPE, ARG17_TYPE, ARG18_TYPE)                                      \ 
 4220        DECLARE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 4221                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 4222                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,        \ 
 4223                                  ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE,      \ 
 4225        DEFINE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 4226                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 4227                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 4228                                 ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) 
 4230#define DECLARE_FAKE_VALUE_FUNC20(                                                                 \ 
 4231        RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,   \ 
 4232        ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,            \ 
 4233        ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE)        \ 
 4234        typedef struct FUNCNAME##_Fake {                                                           \ 
 4235                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 4236                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 4237                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 4238                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 4239                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 4240                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 4241                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 4242                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 4243                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 4244                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 4245                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 4246                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 4247                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 4248                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 4249                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 4250                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 4251                DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME)                                              \ 
 4252                DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME)                                              \ 
 4253                DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME)                                              \ 
 4254                DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME)                                              \ 
 4255                DECLARE_ALL_FUNC_COMMON                                                            \ 
 4256                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 4257                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 4258                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 4259                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 4260                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 4261                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 4262                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 4263                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE,       \ 
 4264                                             ARG18_TYPE, ARG19_TYPE);                              \ 
 4265                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 4266                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 4267                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 4268                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 4269                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE,       \ 
 4270                                             ARG18_TYPE, ARG19_TYPE);                              \ 
 4271        } FUNCNAME##_Fake;                                                                         \ 
 4272        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 4273        void FUNCNAME##_reset(void);                                                               \ 
 4274        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 4275                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 4276                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 4277                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 4278                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17,            \ 
 4279                ARG18_TYPE arg18, ARG19_TYPE arg19); 
 4281#define DEFINE_FAKE_VALUE_FUNC20(                                                                  \ 
 4282        RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,   \ 
 4283        ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,            \ 
 4284        ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE)        \ 
 4285        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 4286        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 4287                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 4288                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 4289                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 4290                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17,            \ 
 4291                ARG18_TYPE arg18, ARG19_TYPE arg19)                                                \ 
 4293                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 4294                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 4295                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 4296                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 4297                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 4298                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 4299                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 4300                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 4301                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 4302                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 4303                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 4304                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 4305                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 4306                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 4307                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 4308                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 4309                SAVE_ARG(FUNCNAME, 16);                                                            \ 
 4310                SAVE_ARG(FUNCNAME, 17);                                                            \ 
 4311                SAVE_ARG(FUNCNAME, 18);                                                            \ 
 4312                SAVE_ARG(FUNCNAME, 19);                                                            \ 
 4313                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 4314                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 4315                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 4316                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 4317                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 4318                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 4319                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 4320                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 4321                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 4322                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 4323                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 4324                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 4325                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 4326                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 4327                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 4328                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 4329                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 4330                        SAVE_ARG_HISTORY(FUNCNAME, 16);                                            \ 
 4331                        SAVE_ARG_HISTORY(FUNCNAME, 17);                                            \ 
 4332                        SAVE_ARG_HISTORY(FUNCNAME, 18);                                            \ 
 4333                        SAVE_ARG_HISTORY(FUNCNAME, 19);                                            \ 
 4335                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 4337                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 4338                REGISTER_CALL(FUNCNAME);                                                           \ 
 4339                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 4340                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 4341                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 4343                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 4344                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 4345                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 4346                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 4347                                                        arg13, arg14, arg15, arg16, arg17, arg18,  \ 
 4349                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 4353                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 4354                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 4355                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 4356                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 4357                                                        arg13, arg14, arg15, arg16, arg17, arg18,  \ 
 4359                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 4361                                return FUNCNAME##_fake                                             \ 
 4362                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 4363                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 4364                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 4365                                                arg15, arg16, arg17, arg18, arg19);                \ 
 4368                if (FUNCNAME##_fake.custom_fake != NULL) {                                         \ 
 4369                        RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(                             \ 
 4370                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, \ 
 4371                                arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19);    \ 
 4372                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 4374                        return FUNCNAME##_fake.custom_fake(                                        \ 
 4375                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, \ 
 4376                                arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19);    \ 
 4378                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 4380        DEFINE_RESET_FUNCTION(FUNCNAME) 
 4382#define FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 4383                          ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,        \ 
 4384                          ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,  \ 
 4385                          ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE)                          \ 
 4386        DECLARE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,          \ 
 4387                                  ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,           \ 
 4388                                  ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,        \ 
 4389                                  ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE,      \ 
 4390                                  ARG18_TYPE, ARG19_TYPE)                                          \ 
 4391        DEFINE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 4392                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 4393                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 4394                                 ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE,       \ 
 4397#define DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...)                                   \ 
 4398        typedef struct FUNCNAME##_Fake {                                                           \ 
 4399                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 4400                DECLARE_ALL_FUNC_COMMON                                                            \ 
 4401                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 4402                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, va_list ap);            \ 
 4403                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, va_list ap);       \ 
 4404        } FUNCNAME##_Fake;                                                                         \ 
 4405        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 4406        void FUNCNAME##_reset(void);                                                               \ 
 4407        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ...); 
 4409#define DEFINE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...)                                    \ 
 4410        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 4411        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ...)                             \ 
 4413                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 4414                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 4415                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 4417                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 4419                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 4420                REGISTER_CALL(FUNCNAME);                                                           \ 
 4421                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 4422                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 4423                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 4425                                va_start(ap, arg0);                                                \ 
 4427                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 4432                                va_start(ap, arg0);                                                \ 
 4434                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 4439                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 4441                        va_start(ap, arg0);                                                        \ 
 4442                        FUNCNAME##_fake.custom_fake(arg0, ap);                                     \ 
 4446        DEFINE_RESET_FUNCTION(FUNCNAME) 
 4448#define FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...)                                           \ 
 4449        DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...)                                   \ 
 4450        DEFINE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) 
 4452#define DECLARE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...)                        \ 
 4453        typedef struct FUNCNAME##_Fake {                                                           \ 
 4454                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 4455                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 4456                DECLARE_ALL_FUNC_COMMON                                                            \ 
 4457                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 4458                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, va_list ap); \ 
 4459                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 4461        } FUNCNAME##_Fake;                                                                         \ 
 4462        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 4463        void FUNCNAME##_reset(void);                                                               \ 
 4464        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...); 
 4466#define DEFINE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...)                         \ 
 4467        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 4468        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...)             \ 
 4470                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 4471                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 4472                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 4473                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 4474                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 4476                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 4478                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 4479                REGISTER_CALL(FUNCNAME);                                                           \ 
 4480                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 4481                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 4482                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 4484                                va_start(ap, arg1);                                                \ 
 4486                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 4491                                va_start(ap, arg1);                                                \ 
 4493                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 4498                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 4500                        va_start(ap, arg1);                                                        \ 
 4501                        FUNCNAME##_fake.custom_fake(arg0, arg1, ap);                               \ 
 4505        DEFINE_RESET_FUNCTION(FUNCNAME) 
 4507#define FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...)                                \ 
 4508        DECLARE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...)                        \ 
 4509        DEFINE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) 
 4511#define DECLARE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...)             \ 
 4512        typedef struct FUNCNAME##_Fake {                                                           \ 
 4513                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 4514                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 4515                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 4516                DECLARE_ALL_FUNC_COMMON                                                            \ 
 4517                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 4518                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 4520                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 4521                                             ARG2_TYPE, va_list ap);                               \ 
 4522        } FUNCNAME##_Fake;                                                                         \ 
 4523        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 4524        void FUNCNAME##_reset(void);                                                               \ 
 4525        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 4528#define DEFINE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...)              \ 
 4529        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 4530        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 4533                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 4534                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 4535                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 4536                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 4537                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 4538                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 4539                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 4541                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 4543                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 4544                REGISTER_CALL(FUNCNAME);                                                           \ 
 4545                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 4546                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 4547                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 4549                                va_start(ap, arg2);                                                \ 
 4551                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 4552                                                arg0, arg1, arg2, ap);                             \ 
 4556                                va_start(ap, arg2);                                                \ 
 4558                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 4559                                                arg0, arg1, arg2, ap);                             \ 
 4563                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 4565                        va_start(ap, arg2);                                                        \ 
 4566                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, ap);                         \ 
 4570        DEFINE_RESET_FUNCTION(FUNCNAME) 
 4572#define FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...)                     \ 
 4573        DECLARE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...)             \ 
 4574        DEFINE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) 
 4576#define DECLARE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...)  \ 
 4577        typedef struct FUNCNAME##_Fake {                                                           \ 
 4578                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 4579                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 4580                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 4581                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 4582                DECLARE_ALL_FUNC_COMMON                                                            \ 
 4583                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 4584                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 4585                                             ARG3_TYPE, va_list ap);                               \ 
 4586                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 4587                                             ARG2_TYPE, ARG3_TYPE, va_list ap);                    \ 
 4588        } FUNCNAME##_Fake;                                                                         \ 
 4589        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 4590        void FUNCNAME##_reset(void);                                                               \ 
 4591        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 4592                                                  ARG3_TYPE arg3, ...); 
 4594#define DEFINE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...)   \ 
 4595        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 4596        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 4597                                                  ARG3_TYPE arg3, ...)                             \ 
 4599                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 4600                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 4601                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 4602                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 4603                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 4604                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 4605                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 4606                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 4607                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 4609                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 4611                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 4612                REGISTER_CALL(FUNCNAME);                                                           \ 
 4613                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 4614                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 4615                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 4617                                va_start(ap, arg3);                                                \ 
 4619                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 4620                                                arg0, arg1, arg2, arg3, ap);                       \ 
 4624                                va_start(ap, arg3);                                                \ 
 4626                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 4627                                                arg0, arg1, arg2, arg3, ap);                       \ 
 4631                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 4633                        va_start(ap, arg3);                                                        \ 
 4634                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, ap);                   \ 
 4638        DEFINE_RESET_FUNCTION(FUNCNAME) 
 4640#define FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...)          \ 
 4641        DECLARE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...)  \ 
 4642        DEFINE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) 
 4644#define DECLARE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 4646        typedef struct FUNCNAME##_Fake {                                                           \ 
 4647                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 4648                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 4649                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 4650                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 4651                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 4652                DECLARE_ALL_FUNC_COMMON                                                            \ 
 4653                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 4654                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 4655                                             ARG3_TYPE, ARG4_TYPE, va_list ap);                    \ 
 4656                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 4657                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, va_list ap);         \ 
 4658        } FUNCNAME##_Fake;                                                                         \ 
 4659        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 4660        void FUNCNAME##_reset(void);                                                               \ 
 4661        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 4662                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ...); 
 4664#define DEFINE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,        \ 
 4666        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 4667        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 4668                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ...)             \ 
 4670                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 4671                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 4672                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 4673                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 4674                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 4675                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 4676                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 4677                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 4678                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 4679                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 4680                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 4682                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 4684                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 4685                REGISTER_CALL(FUNCNAME);                                                           \ 
 4686                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 4687                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 4688                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 4690                                va_start(ap, arg4);                                                \ 
 4692                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 4693                                                arg0, arg1, arg2, arg3, arg4, ap);                 \ 
 4697                                va_start(ap, arg4);                                                \ 
 4699                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 4700                                                arg0, arg1, arg2, arg3, arg4, ap);                 \ 
 4704                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 4706                        va_start(ap, arg4);                                                        \ 
 4707                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, ap);             \ 
 4711        DEFINE_RESET_FUNCTION(FUNCNAME) 
 4713#define FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,    \ 
 4715        DECLARE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 4717        DEFINE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,        \ 
 4720#define DECLARE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 4721                                       ARG4_TYPE, ARG5_TYPE, ...)                                  \ 
 4722        typedef struct FUNCNAME##_Fake {                                                           \ 
 4723                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 4724                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 4725                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 4726                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 4727                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 4728                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 4729                DECLARE_ALL_FUNC_COMMON                                                            \ 
 4730                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 4731                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 4732                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, va_list ap);         \ 
 4733                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 4734                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 4736        } FUNCNAME##_Fake;                                                                         \ 
 4737        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 4738        void FUNCNAME##_reset(void);                                                               \ 
 4739        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 4740                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
 4743#define DEFINE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,        \ 
 4744                                      ARG4_TYPE, ARG5_TYPE, ...)                                   \ 
 4745        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 4746        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 4747                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
 4750                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 4751                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 4752                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 4753                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 4754                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 4755                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 4756                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 4757                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 4758                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 4759                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 4760                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 4761                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 4762                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 4764                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 4766                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 4767                REGISTER_CALL(FUNCNAME);                                                           \ 
 4768                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 4769                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 4770                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 4772                                va_start(ap, arg5);                                                \ 
 4774                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 4775                                                arg0, arg1, arg2, arg3, arg4, arg5, ap);           \ 
 4779                                va_start(ap, arg5);                                                \ 
 4781                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 4782                                                arg0, arg1, arg2, arg3, arg4, arg5, ap);           \ 
 4786                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 4788                        va_start(ap, arg5);                                                        \ 
 4789                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, ap);       \ 
 4793        DEFINE_RESET_FUNCTION(FUNCNAME) 
 4795#define FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,    \ 
 4797        DECLARE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 4798                                       ARG4_TYPE, ARG5_TYPE, ...)                                  \ 
 4799        DEFINE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,        \ 
 4800                                      ARG4_TYPE, ARG5_TYPE, ...) 
 4802#define DECLARE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 4803                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...)                       \ 
 4804        typedef struct FUNCNAME##_Fake {                                                           \ 
 4805                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 4806                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 4807                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 4808                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 4809                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 4810                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 4811                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 4812                DECLARE_ALL_FUNC_COMMON                                                            \ 
 4813                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 4814                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 4815                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 4817                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 4818                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 4819                                             ARG6_TYPE, va_list ap);                               \ 
 4820        } FUNCNAME##_Fake;                                                                         \ 
 4821        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 4822        void FUNCNAME##_reset(void);                                                               \ 
 4823        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 4824                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
 4825                                                  ARG6_TYPE arg6, ...); 
 4827#define DEFINE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,        \ 
 4828                                      ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...)                        \ 
 4829        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 4830        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 4831                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
 4832                                                  ARG6_TYPE arg6, ...)                             \ 
 4834                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 4835                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 4836                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 4837                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 4838                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 4839                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 4840                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 4841                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 4842                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 4843                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 4844                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 4845                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 4846                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 4847                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 4848                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 4850                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 4852                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 4853                REGISTER_CALL(FUNCNAME);                                                           \ 
 4854                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 4855                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 4856                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 4858                                va_start(ap, arg6);                                                \ 
 4860                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 4861                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap);     \ 
 4865                                va_start(ap, arg6);                                                \ 
 4867                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 4868                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap);     \ 
 4872                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 4874                        va_start(ap, arg6);                                                        \ 
 4875                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \ 
 4879        DEFINE_RESET_FUNCTION(FUNCNAME) 
 4881#define FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,    \ 
 4882                               ARG5_TYPE, ARG6_TYPE, ...)                                          \ 
 4883        DECLARE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 4884                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...)                       \ 
 4885        DEFINE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,        \ 
 4886                                      ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) 
 4888#define DECLARE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 4889                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...)            \ 
 4890        typedef struct FUNCNAME##_Fake {                                                           \ 
 4891                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 4892                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 4893                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 4894                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 4895                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 4896                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 4897                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 4898                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 4899                DECLARE_ALL_FUNC_COMMON                                                            \ 
 4900                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 4901                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 4902                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 4903                                             ARG7_TYPE, va_list ap);                               \ 
 4904                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 4905                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 4906                                             ARG6_TYPE, ARG7_TYPE, va_list ap);                    \ 
 4907        } FUNCNAME##_Fake;                                                                         \ 
 4908        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 4909        void FUNCNAME##_reset(void);                                                               \ 
 4910        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 4911                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
 4912                                                  ARG6_TYPE arg6, ARG7_TYPE arg7, ...); 
 4914#define DEFINE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,        \ 
 4915                                      ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...)             \ 
 4916        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 4917        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 4918                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
 4919                                                  ARG6_TYPE arg6, ARG7_TYPE arg7, ...)             \ 
 4921                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 4922                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 4923                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 4924                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 4925                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 4926                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 4927                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 4928                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 4929                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 4930                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 4931                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 4932                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 4933                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 4934                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 4935                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 4936                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 4937                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 4939                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 4941                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 4942                REGISTER_CALL(FUNCNAME);                                                           \ 
 4943                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 4944                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 4945                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 4947                                va_start(ap, arg7);                                                \ 
 4949                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 4950                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 4955                                va_start(ap, arg7);                                                \ 
 4957                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 4958                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 4963                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 4965                        va_start(ap, arg7);                                                        \ 
 4966                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 4971        DEFINE_RESET_FUNCTION(FUNCNAME) 
 4973#define FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,    \ 
 4974                               ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...)                               \ 
 4975        DECLARE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 4976                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...)            \ 
 4977        DEFINE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,        \ 
 4978                                      ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) 
 4980#define DECLARE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 4981                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 4983        typedef struct FUNCNAME##_Fake {                                                           \ 
 4984                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 4985                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 4986                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 4987                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 4988                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 4989                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 4990                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 4991                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 4992                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 4993                DECLARE_ALL_FUNC_COMMON                                                            \ 
 4994                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 4995                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 4996                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 4997                                             ARG7_TYPE, ARG8_TYPE, va_list ap);                    \ 
 4998                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 4999                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 5000                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, va_list ap);         \ 
 5001        } FUNCNAME##_Fake;                                                                         \ 
 5002        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 5003        void FUNCNAME##_reset(void);                                                               \ 
 5004        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 5005                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 5006                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...); 
 5008#define DEFINE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5009                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \ 
 5010        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 5011        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 5012                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 5013                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...)               \ 
 5015                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 5016                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 5017                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 5018                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 5019                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 5020                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 5021                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 5022                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 5023                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 5024                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 5025                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 5026                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 5027                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 5028                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 5029                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 5030                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 5031                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 5032                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 5033                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 5035                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 5037                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 5038                REGISTER_CALL(FUNCNAME);                                                           \ 
 5039                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 5040                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 5041                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 5043                                va_start(ap, arg8);                                                \ 
 5045                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 5046                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5051                                va_start(ap, arg8);                                                \ 
 5053                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 5054                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5059                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 5061                        va_start(ap, arg8);                                                        \ 
 5062                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 5067        DEFINE_RESET_FUNCTION(FUNCNAME) 
 5069#define FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 5070                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...)                   \ 
 5071        DECLARE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5072                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5074        DEFINE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5075                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) 
 5077#define DECLARE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5078                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5080        typedef struct FUNCNAME##_Fake {                                                           \ 
 5081                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 5082                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 5083                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 5084                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 5085                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 5086                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 5087                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 5088                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 5089                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 5090                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 5091                DECLARE_ALL_FUNC_COMMON                                                            \ 
 5092                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 5093                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 5094                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 5095                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, va_list ap);         \ 
 5096                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 5097                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 5098                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 5100        } FUNCNAME##_Fake;                                                                         \ 
 5101        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 5102        void FUNCNAME##_reset(void);                                                               \ 
 5103        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 5104                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
 5105                                                  ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8,  \ 
 5106                                                  ARG9_TYPE arg9, ...); 
 5108#define DEFINE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5109                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 5111        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 5112        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 5113                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
 5114                                                  ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8,  \ 
 5115                                                  ARG9_TYPE arg9, ...)                             \ 
 5117                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 5118                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 5119                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 5120                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 5121                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 5122                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 5123                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 5124                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 5125                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 5126                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 5127                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 5128                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 5129                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 5130                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 5131                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 5132                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 5133                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 5134                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 5135                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 5136                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 5137                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 5139                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 5141                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 5142                REGISTER_CALL(FUNCNAME);                                                           \ 
 5143                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 5144                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 5145                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 5147                                va_start(ap, arg9);                                                \ 
 5149                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 5150                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5155                                va_start(ap, arg9);                                                \ 
 5157                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 5158                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5163                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 5165                        va_start(ap, arg9);                                                        \ 
 5166                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 5167                                                    arg7, arg8, arg9, ap);                         \ 
 5171        DEFINE_RESET_FUNCTION(FUNCNAME) 
 5173#define FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 5174                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...)        \ 
 5175        DECLARE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5176                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5178        DEFINE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5179                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 5182#define DECLARE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5183                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5184                                        ARG9_TYPE, ARG10_TYPE, ...)                                \ 
 5185        typedef struct FUNCNAME##_Fake {                                                           \ 
 5186                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 5187                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 5188                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 5189                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 5190                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 5191                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 5192                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 5193                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 5194                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 5195                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 5196                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 5197                DECLARE_ALL_FUNC_COMMON                                                            \ 
 5198                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 5199                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 5200                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 5201                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 5203                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 5204                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 5205                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 5206                                             ARG10_TYPE, va_list ap);                              \ 
 5207        } FUNCNAME##_Fake;                                                                         \ 
 5208        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 5209        void FUNCNAME##_reset(void);                                                               \ 
 5210        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 5211                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
 5212                                                  ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8,  \ 
 5213                                                  ARG9_TYPE arg9, ARG10_TYPE arg10, ...); 
 5215#define DEFINE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5216                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 5217                                       ARG9_TYPE, ARG10_TYPE, ...)                                 \ 
 5218        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 5219        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2,  \ 
 5220                                                  ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5,  \ 
 5221                                                  ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8,  \ 
 5222                                                  ARG9_TYPE arg9, ARG10_TYPE arg10, ...)           \ 
 5224                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 5225                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 5226                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 5227                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 5228                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 5229                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 5230                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 5231                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 5232                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 5233                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 5234                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 5235                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 5236                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 5237                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 5238                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 5239                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 5240                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 5241                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 5242                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 5243                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 5244                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 5245                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 5246                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 5248                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 5250                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 5251                REGISTER_CALL(FUNCNAME);                                                           \ 
 5252                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 5253                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 5254                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 5256                                va_start(ap, arg10);                                               \ 
 5258                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 5259                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5260                                                arg8, arg9, arg10, ap);                            \ 
 5264                                va_start(ap, arg10);                                               \ 
 5266                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 5267                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5268                                                arg8, arg9, arg10, ap);                            \ 
 5272                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 5274                        va_start(ap, arg10);                                                       \ 
 5275                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 5276                                                    arg7, arg8, arg9, arg10, ap);                  \ 
 5280        DEFINE_RESET_FUNCTION(FUNCNAME) 
 5282#define FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 5283                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 5285        DECLARE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5286                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5287                                        ARG9_TYPE, ARG10_TYPE, ...)                                \ 
 5288        DEFINE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5289                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 5290                                       ARG9_TYPE, ARG10_TYPE, ...) 
 5292#define DECLARE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5293                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5294                                        ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...)                    \ 
 5295        typedef struct FUNCNAME##_Fake {                                                           \ 
 5296                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 5297                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 5298                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 5299                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 5300                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 5301                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 5302                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 5303                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 5304                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 5305                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 5306                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 5307                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 5308                DECLARE_ALL_FUNC_COMMON                                                            \ 
 5309                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 5310                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 5311                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 5312                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 5313                                             ARG11_TYPE, va_list ap);                              \ 
 5314                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 5315                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 5316                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 5317                                             ARG10_TYPE, ARG11_TYPE, va_list ap);                  \ 
 5318        } FUNCNAME##_Fake;                                                                         \ 
 5319        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 5320        void FUNCNAME##_reset(void);                                                               \ 
 5321        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 5322                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 5323                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 5324                ARG10_TYPE arg10, ARG11_TYPE arg11, ...); 
 5326#define DEFINE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5327                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 5328                                       ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...)                     \ 
 5329        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 5330        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 5331                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 5332                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 5333                ARG10_TYPE arg10, ARG11_TYPE arg11, ...)                                           \ 
 5335                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 5336                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 5337                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 5338                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 5339                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 5340                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 5341                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 5342                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 5343                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 5344                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 5345                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 5346                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 5347                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 5348                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 5349                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 5350                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 5351                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 5352                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 5353                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 5354                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 5355                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 5356                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 5357                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 5358                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 5359                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 5361                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 5363                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 5364                REGISTER_CALL(FUNCNAME);                                                           \ 
 5365                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 5366                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 5367                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 5369                                va_start(ap, arg11);                                               \ 
 5371                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 5372                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5373                                                arg8, arg9, arg10, arg11, ap);                     \ 
 5377                                va_start(ap, arg11);                                               \ 
 5379                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 5380                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5381                                                arg8, arg9, arg10, arg11, ap);                     \ 
 5385                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 5387                        va_start(ap, arg11);                                                       \ 
 5388                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 5389                                                    arg7, arg8, arg9, arg10, arg11, ap);           \ 
 5393        DEFINE_RESET_FUNCTION(FUNCNAME) 
 5395#define FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 5396                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 5398        DECLARE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5399                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5400                                        ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...)                    \ 
 5401        DEFINE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5402                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 5403                                       ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) 
 5405#define DECLARE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5406                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5407                                        ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...)        \ 
 5408        typedef struct FUNCNAME##_Fake {                                                           \ 
 5409                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 5410                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 5411                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 5412                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 5413                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 5414                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 5415                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 5416                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 5417                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 5418                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 5419                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 5420                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 5421                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 5422                DECLARE_ALL_FUNC_COMMON                                                            \ 
 5423                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 5424                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 5425                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 5426                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 5427                                             ARG11_TYPE, ARG12_TYPE, va_list ap);                  \ 
 5428                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 5429                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 5430                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 5431                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, va_list ap);      \ 
 5432        } FUNCNAME##_Fake;                                                                         \ 
 5433        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 5434        void FUNCNAME##_reset(void);                                                               \ 
 5435        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 5436                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 5437                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 5438                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...); 
 5440#define DEFINE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5441                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 5442                                       ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...)         \ 
 5443        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 5444        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 5445                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 5446                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 5447                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...)                         \ 
 5449                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 5450                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 5451                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 5452                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 5453                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 5454                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 5455                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 5456                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 5457                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 5458                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 5459                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 5460                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 5461                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 5462                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 5463                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 5464                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 5465                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 5466                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 5467                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 5468                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 5469                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 5470                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 5471                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 5472                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 5473                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 5474                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 5475                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 5477                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 5479                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 5480                REGISTER_CALL(FUNCNAME);                                                           \ 
 5481                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 5482                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 5483                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 5485                                va_start(ap, arg12);                                               \ 
 5487                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 5488                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5489                                                arg8, arg9, arg10, arg11, arg12, ap);              \ 
 5493                                va_start(ap, arg12);                                               \ 
 5495                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 5496                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5497                                                arg8, arg9, arg10, arg11, arg12, ap);              \ 
 5501                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 5503                        va_start(ap, arg12);                                                       \ 
 5504                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 5505                                                    arg7, arg8, arg9, arg10, arg11, arg12, ap);    \ 
 5509        DEFINE_RESET_FUNCTION(FUNCNAME) 
 5511#define FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 5512                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 5513                                ARG11_TYPE, ARG12_TYPE, ...)                                       \ 
 5514        DECLARE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5515                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5516                                        ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...)        \ 
 5517        DEFINE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5518                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 5519                                       ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) 
 5521#define DECLARE_FAKE_VOID_FUNC15_VARARG(                                                           \ 
 5522        FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,     \ 
 5523        ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...)      \ 
 5524        typedef struct FUNCNAME##_Fake {                                                           \ 
 5525                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 5526                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 5527                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 5528                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 5529                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 5530                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 5531                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 5532                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 5533                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 5534                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 5535                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 5536                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 5537                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 5538                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 5539                DECLARE_ALL_FUNC_COMMON                                                            \ 
 5540                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 5541                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 5542                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 5543                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 5544                                             ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, va_list ap);      \ 
 5545                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 5546                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 5547                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 5548                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 5550        } FUNCNAME##_Fake;                                                                         \ 
 5551        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 5552        void FUNCNAME##_reset(void);                                                               \ 
 5553        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 5554                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 5555                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 5556                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...); 
 5558#define DEFINE_FAKE_VOID_FUNC15_VARARG(                                                            \ 
 5559        FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,     \ 
 5560        ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...)      \ 
 5561        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 5562        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 5563                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 5564                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 5565                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...)       \ 
 5567                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 5568                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 5569                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 5570                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 5571                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 5572                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 5573                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 5574                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 5575                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 5576                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 5577                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 5578                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 5579                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 5580                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 5581                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 5582                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 5583                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 5584                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 5585                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 5586                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 5587                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 5588                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 5589                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 5590                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 5591                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 5592                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 5593                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 5594                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 5595                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 5597                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 5599                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 5600                REGISTER_CALL(FUNCNAME);                                                           \ 
 5601                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 5602                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 5603                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 5605                                va_start(ap, arg13);                                               \ 
 5607                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 5608                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5609                                                arg8, arg9, arg10, arg11, arg12, arg13, ap);       \ 
 5613                                va_start(ap, arg13);                                               \ 
 5615                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 5616                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5617                                                arg8, arg9, arg10, arg11, arg12, arg13, ap);       \ 
 5621                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 5623                        va_start(ap, arg13);                                                       \ 
 5624                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 5625                                                    arg7, arg8, arg9, arg10, arg11, arg12, arg13,  \ 
 5630        DEFINE_RESET_FUNCTION(FUNCNAME) 
 5632#define FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 5633                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 5634                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...)                           \ 
 5635        DECLARE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5636                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5637                                        ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, \ 
 5639        DEFINE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5640                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 5641                                       ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,  \ 
 5644#define DECLARE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5645                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5646                                        ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, \ 
 5648        typedef struct FUNCNAME##_Fake {                                                           \ 
 5649                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 5650                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 5651                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 5652                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 5653                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 5654                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 5655                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 5656                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 5657                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 5658                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 5659                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 5660                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 5661                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 5662                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 5663                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 5664                DECLARE_ALL_FUNC_COMMON                                                            \ 
 5665                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 5666                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 5667                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 5668                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 5669                                             ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 5671                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 5672                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 5673                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 5674                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 5675                                             ARG14_TYPE, va_list ap);                              \ 
 5676        } FUNCNAME##_Fake;                                                                         \ 
 5677        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 5678        void FUNCNAME##_reset(void);                                                               \ 
 5679        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 5680                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 5681                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 5682                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 5683                ARG14_TYPE arg14, ...); 
 5685#define DEFINE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5686                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 5687                                       ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,  \ 
 5689        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 5690        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 5691                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 5692                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 5693                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 5694                ARG14_TYPE arg14, ...)                                                             \ 
 5696                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 5697                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 5698                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 5699                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 5700                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 5701                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 5702                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 5703                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 5704                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 5705                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 5706                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 5707                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 5708                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 5709                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 5710                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 5711                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 5712                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 5713                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 5714                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 5715                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 5716                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 5717                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 5718                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 5719                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 5720                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 5721                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 5722                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 5723                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 5724                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 5725                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 5726                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 5728                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 5730                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 5731                REGISTER_CALL(FUNCNAME);                                                           \ 
 5732                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 5733                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 5734                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 5736                                va_start(ap, arg14);                                               \ 
 5738                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 5739                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5740                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 5745                                va_start(ap, arg14);                                               \ 
 5747                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 5748                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5749                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 5754                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 5756                        va_start(ap, arg14);                                                       \ 
 5757                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 5758                                                    arg7, arg8, arg9, arg10, arg11, arg12, arg13,  \ 
 5763        DEFINE_RESET_FUNCTION(FUNCNAME) 
 5765#define FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 5766                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 5767                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...)               \ 
 5768        DECLARE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5769                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5770                                        ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, \ 
 5772        DEFINE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5773                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 5774                                       ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,  \ 
 5777#define DECLARE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5778                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5779                                        ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, \ 
 5780                                        ARG14_TYPE, ARG15_TYPE, ...)                               \ 
 5781        typedef struct FUNCNAME##_Fake {                                                           \ 
 5782                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 5783                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 5784                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 5785                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 5786                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 5787                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 5788                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 5789                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 5790                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 5791                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 5792                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 5793                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 5794                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 5795                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 5796                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 5797                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 5798                DECLARE_ALL_FUNC_COMMON                                                            \ 
 5799                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 5800                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 5801                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 5802                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 5803                                             ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 5804                                             ARG15_TYPE, va_list ap);                              \ 
 5805                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 5806                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 5807                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 5808                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 5809                                             ARG14_TYPE, ARG15_TYPE, va_list ap);                  \ 
 5810        } FUNCNAME##_Fake;                                                                         \ 
 5811        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 5812        void FUNCNAME##_reset(void);                                                               \ 
 5813        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 5814                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 5815                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 5816                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 5817                ARG14_TYPE arg14, ARG15_TYPE arg15, ...); 
 5819#define DEFINE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5820                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 5821                                       ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,  \ 
 5822                                       ARG14_TYPE, ARG15_TYPE, ...)                                \ 
 5823        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 5824        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 5825                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 5826                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 5827                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 5828                ARG14_TYPE arg14, ARG15_TYPE arg15, ...)                                           \ 
 5830                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 5831                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 5832                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 5833                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 5834                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 5835                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 5836                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 5837                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 5838                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 5839                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 5840                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 5841                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 5842                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 5843                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 5844                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 5845                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 5846                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 5847                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 5848                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 5849                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 5850                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 5851                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 5852                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 5853                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 5854                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 5855                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 5856                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 5857                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 5858                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 5859                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 5860                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 5861                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 5862                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 5864                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 5866                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 5867                REGISTER_CALL(FUNCNAME);                                                           \ 
 5868                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 5869                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 5870                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 5872                                va_start(ap, arg15);                                               \ 
 5874                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 5875                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5876                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 5881                                va_start(ap, arg15);                                               \ 
 5883                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 5884                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 5885                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 5890                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 5892                        va_start(ap, arg15);                                                       \ 
 5893                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 5894                                                    arg7, arg8, arg9, arg10, arg11, arg12, arg13,  \ 
 5895                                                    arg14, arg15, ap);                             \ 
 5899        DEFINE_RESET_FUNCTION(FUNCNAME) 
 5901#define FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 5902                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 5903                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...)   \ 
 5904        DECLARE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5905                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5906                                        ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, \ 
 5907                                        ARG14_TYPE, ARG15_TYPE, ...)                               \ 
 5908        DEFINE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5909                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 5910                                       ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,  \ 
 5911                                       ARG14_TYPE, ARG15_TYPE, ...) 
 5913#define DECLARE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 5914                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 5915                                        ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, \ 
 5916                                        ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...)                   \ 
 5917        typedef struct FUNCNAME##_Fake {                                                           \ 
 5918                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 5919                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 5920                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 5921                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 5922                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 5923                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 5924                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 5925                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 5926                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 5927                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 5928                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 5929                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 5930                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 5931                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 5932                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 5933                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 5934                DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME)                                              \ 
 5935                DECLARE_ALL_FUNC_COMMON                                                            \ 
 5936                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 5937                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 5938                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 5939                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 5940                                             ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 5941                                             ARG15_TYPE, ARG16_TYPE, va_list ap);                  \ 
 5942                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 5943                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 5944                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 5945                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 5946                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, va_list ap);      \ 
 5947        } FUNCNAME##_Fake;                                                                         \ 
 5948        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 5949        void FUNCNAME##_reset(void);                                                               \ 
 5950        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 5951                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 5952                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 5953                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 5954                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...); 
 5956#define DEFINE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 5957                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 5958                                       ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,  \ 
 5959                                       ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...)                    \ 
 5960        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 5961        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 5962                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 5963                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 5964                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 5965                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...)                         \ 
 5967                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 5968                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 5969                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 5970                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 5971                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 5972                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 5973                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 5974                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 5975                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 5976                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 5977                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 5978                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 5979                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 5980                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 5981                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 5982                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 5983                SAVE_ARG(FUNCNAME, 16);                                                            \ 
 5984                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 5985                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 5986                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 5987                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 5988                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 5989                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 5990                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 5991                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 5992                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 5993                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 5994                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 5995                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 5996                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 5997                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 5998                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 5999                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 6000                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 6001                        SAVE_ARG_HISTORY(FUNCNAME, 16);                                            \ 
 6003                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 6005                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 6006                REGISTER_CALL(FUNCNAME);                                                           \ 
 6007                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 6008                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 6009                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 6011                                va_start(ap, arg16);                                               \ 
 6013                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 6014                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 6015                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 6016                                                arg15, arg16, ap);                                 \ 
 6020                                va_start(ap, arg16);                                               \ 
 6022                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 6023                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 6024                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 6025                                                arg15, arg16, ap);                                 \ 
 6029                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 6031                        va_start(ap, arg16);                                                       \ 
 6032                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 6033                                                    arg7, arg8, arg9, arg10, arg11, arg12, arg13,  \ 
 6034                                                    arg14, arg15, arg16, ap);                      \ 
 6038        DEFINE_RESET_FUNCTION(FUNCNAME) 
 6040#define FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 6041                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 6042                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,        \ 
 6044        DECLARE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 6045                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 6046                                        ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, \ 
 6047                                        ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...)                   \ 
 6048        DEFINE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 6049                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 6050                                       ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,  \ 
 6051                                       ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) 
 6053#define DECLARE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 6054                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 6055                                        ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, \ 
 6056                                        ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...)       \ 
 6057        typedef struct FUNCNAME##_Fake {                                                           \ 
 6058                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 6059                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 6060                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 6061                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 6062                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 6063                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 6064                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 6065                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 6066                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 6067                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 6068                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 6069                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 6070                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 6071                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 6072                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 6073                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 6074                DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME)                                              \ 
 6075                DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME)                                              \ 
 6076                DECLARE_ALL_FUNC_COMMON                                                            \ 
 6077                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 6078                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 6079                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 6080                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 6081                                             ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 6082                                             ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, va_list ap);      \ 
 6083                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 6084                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 6085                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 6086                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 6087                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE,       \ 
 6089        } FUNCNAME##_Fake;                                                                         \ 
 6090        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 6091        void FUNCNAME##_reset(void);                                                               \ 
 6092        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 6093                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 6094                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 6095                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 6096                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...); 
 6098#define DEFINE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 6099                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 6100                                       ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,  \ 
 6101                                       ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...)        \ 
 6102        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 6103        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 6104                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 6105                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 6106                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 6107                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...)       \ 
 6109                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 6110                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 6111                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 6112                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 6113                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 6114                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 6115                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 6116                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 6117                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 6118                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 6119                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 6120                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 6121                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 6122                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 6123                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 6124                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 6125                SAVE_ARG(FUNCNAME, 16);                                                            \ 
 6126                SAVE_ARG(FUNCNAME, 17);                                                            \ 
 6127                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 6128                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 6129                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 6130                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 6131                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 6132                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 6133                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 6134                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 6135                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 6136                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 6137                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 6138                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 6139                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 6140                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 6141                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 6142                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 6143                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 6144                        SAVE_ARG_HISTORY(FUNCNAME, 16);                                            \ 
 6145                        SAVE_ARG_HISTORY(FUNCNAME, 17);                                            \ 
 6147                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 6149                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 6150                REGISTER_CALL(FUNCNAME);                                                           \ 
 6151                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 6152                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 6153                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 6155                                va_start(ap, arg17);                                               \ 
 6157                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 6158                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 6159                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 6160                                                arg15, arg16, arg17, ap);                          \ 
 6164                                va_start(ap, arg17);                                               \ 
 6166                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 6167                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 6168                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 6169                                                arg15, arg16, arg17, ap);                          \ 
 6173                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 6175                        va_start(ap, arg17);                                                       \ 
 6176                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 6177                                                    arg7, arg8, arg9, arg10, arg11, arg12, arg13,  \ 
 6178                                                    arg14, arg15, arg16, arg17, ap);               \ 
 6182        DEFINE_RESET_FUNCTION(FUNCNAME) 
 6184#define FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 6185                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 6186                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,        \ 
 6187                                ARG16_TYPE, ARG17_TYPE, ...)                                       \ 
 6188        DECLARE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,      \ 
 6189                                        ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,     \ 
 6190                                        ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, \ 
 6191                                        ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...)       \ 
 6192        DEFINE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE,       \ 
 6193                                       ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE,      \ 
 6194                                       ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,  \ 
 6195                                       ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) 
 6197#define DECLARE_FAKE_VOID_FUNC20_VARARG(                                                           \ 
 6198        FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,     \ 
 6199        ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,           \ 
 6200        ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...)                           \ 
 6201        typedef struct FUNCNAME##_Fake {                                                           \ 
 6202                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 6203                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 6204                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 6205                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 6206                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 6207                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 6208                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 6209                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 6210                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 6211                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 6212                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 6213                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 6214                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 6215                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 6216                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 6217                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 6218                DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME)                                              \ 
 6219                DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME)                                              \ 
 6220                DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME)                                              \ 
 6221                DECLARE_ALL_FUNC_COMMON                                                            \ 
 6222                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 6223                CUSTOM_FFF_FUNCTION_TEMPLATE(void, custom_fake, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 6224                                             ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,           \ 
 6225                                             ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE,          \ 
 6226                                             ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE,       \ 
 6227                                             ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE,       \ 
 6229                CUSTOM_FFF_FUNCTION_TEMPLATE(void, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,         \ 
 6230                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 6231                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 6232                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 6233                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE,       \ 
 6234                                             ARG18_TYPE, va_list ap);                              \ 
 6235        } FUNCNAME##_Fake;                                                                         \ 
 6236        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 6237        void FUNCNAME##_reset(void);                                                               \ 
 6238        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 6239                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 6240                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 6241                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 6242                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17,            \ 
 6243                ARG18_TYPE arg18, ...); 
 6245#define DEFINE_FAKE_VOID_FUNC20_VARARG(                                                            \ 
 6246        FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE,     \ 
 6247        ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,           \ 
 6248        ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...)                           \ 
 6249        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 6250        void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                                 \ 
 6251                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 6252                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 6253                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 6254                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17,            \ 
 6255                ARG18_TYPE arg18, ...)                                                             \ 
 6257                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 6258                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 6259                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 6260                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 6261                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 6262                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 6263                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 6264                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 6265                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 6266                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 6267                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 6268                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 6269                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 6270                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 6271                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 6272                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 6273                SAVE_ARG(FUNCNAME, 16);                                                            \ 
 6274                SAVE_ARG(FUNCNAME, 17);                                                            \ 
 6275                SAVE_ARG(FUNCNAME, 18);                                                            \ 
 6276                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 6277                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 6278                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 6279                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 6280                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 6281                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 6282                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 6283                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 6284                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 6285                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 6286                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 6287                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 6288                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 6289                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 6290                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 6291                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 6292                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 6293                        SAVE_ARG_HISTORY(FUNCNAME, 16);                                            \ 
 6294                        SAVE_ARG_HISTORY(FUNCNAME, 17);                                            \ 
 6295                        SAVE_ARG_HISTORY(FUNCNAME, 18);                                            \ 
 6297                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 6299                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 6300                REGISTER_CALL(FUNCNAME);                                                           \ 
 6301                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 6302                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 6303                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 6305                                va_start(ap, arg18);                                               \ 
 6307                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](   \ 
 6308                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 6309                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 6310                                                arg15, arg16, arg17, arg18, ap);                   \ 
 6314                                va_start(ap, arg18);                                               \ 
 6316                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 6317                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 6318                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 6319                                                arg15, arg16, arg17, arg18, ap);                   \ 
 6323                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 6325                        va_start(ap, arg18);                                                       \ 
 6326                        FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6,      \ 
 6327                                                    arg7, arg8, arg9, arg10, arg11, arg12, arg13,  \ 
 6328                                                    arg14, arg15, arg16, arg17, arg18, ap);        \ 
 6332        DEFINE_RESET_FUNCTION(FUNCNAME) 
 6334#define FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,   \ 
 6335                                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, \ 
 6336                                ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE,        \ 
 6337                                ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...)                           \ 
 6338        DECLARE_FAKE_VOID_FUNC20_VARARG(                                                           \ 
 6339                FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,        \ 
 6340                ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,    \ 
 6341                ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...)       \ 
 6342        DEFINE_FAKE_VOID_FUNC20_VARARG(                                                            \ 
 6343                FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,        \ 
 6344                ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,    \ 
 6345                ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) 
 6347#define DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...)                     \ 
 6348        typedef struct FUNCNAME##_Fake {                                                           \ 
 6349                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 6350                DECLARE_ALL_FUNC_COMMON                                                            \ 
 6351                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 6352                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 6353                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 6354                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, va_list ap);     \ 
 6355                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE,             \ 
 6357        } FUNCNAME##_Fake;                                                                         \ 
 6358        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 6359        void FUNCNAME##_reset(void);                                                               \ 
 6360        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ...); 
 6362#define DEFINE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...)                      \ 
 6363        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 6364        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ...)                      \ 
 6366                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 6367                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 6368                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 6370                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 6372                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 6373                REGISTER_CALL(FUNCNAME);                                                           \ 
 6374                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 6375                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 6376                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 6378                                va_start(ap, arg0);                                                \ 
 6380                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 6381                                                [FUNCNAME##_fake.custom_fake_seq_idx++](arg0, ap); \ 
 6382                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 6387                                va_start(ap, arg0);                                                \ 
 6389                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 6390                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](arg0,    \ 
 6392                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 6395                                return FUNCNAME##_fake                                             \ 
 6396                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 6400                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 6403                        va_start(ap, arg0);                                                        \ 
 6404                        ret = FUNCNAME##_fake.custom_fake(arg0, ap);                               \ 
 6406                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 6409                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 6411        DEFINE_RESET_FUNCTION(FUNCNAME) 
 6413#define FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...)                             \ 
 6414        DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...)                     \ 
 6415        DEFINE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) 
 6417#define DECLARE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...)          \ 
 6418        typedef struct FUNCNAME##_Fake {                                                           \ 
 6419                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 6420                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 6421                DECLARE_ALL_FUNC_COMMON                                                            \ 
 6422                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 6423                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 6424                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 6425                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 6427                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 6429        } FUNCNAME##_Fake;                                                                         \ 
 6430        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 6431        void FUNCNAME##_reset(void);                                                               \ 
 6432        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...); 
 6434#define DEFINE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...)           \ 
 6435        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 6436        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...)      \ 
 6438                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 6439                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 6440                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 6441                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 6442                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 6444                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 6446                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 6447                REGISTER_CALL(FUNCNAME);                                                           \ 
 6448                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 6449                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 6450                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 6452                                va_start(ap, arg1);                                                \ 
 6453                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 6454                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 6456                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 6461                                va_start(ap, arg1);                                                \ 
 6463                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 6464                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 6466                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 6469                                return FUNCNAME##_fake                                             \ 
 6470                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 6474                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 6477                        va_start(ap, arg1);                                                        \ 
 6478                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, ap);                         \ 
 6480                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 6483                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 6485        DEFINE_RESET_FUNCTION(FUNCNAME) 
 6487#define FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...)                  \ 
 6488        DECLARE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...)          \ 
 6489        DEFINE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) 
 6491#define DECLARE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 6493        typedef struct FUNCNAME##_Fake {                                                           \ 
 6494                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 6495                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 6496                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 6497                DECLARE_ALL_FUNC_COMMON                                                            \ 
 6498                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 6499                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 6500                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 6501                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 6502                                             ARG2_TYPE, va_list ap);                               \ 
 6503                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 6504                                             ARG2_TYPE, va_list ap);                               \ 
 6505        } FUNCNAME##_Fake;                                                                         \ 
 6506        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 6507        void FUNCNAME##_reset(void);                                                               \ 
 6508        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1,           \ 
 6509                                                         ARG2_TYPE arg2, ...); 
 6511#define DEFINE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,     \ 
 6513        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 6514        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1,           \ 
 6515                                                         ARG2_TYPE arg2, ...)                      \ 
 6517                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 6518                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 6519                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 6520                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 6521                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 6522                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 6523                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 6525                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 6527                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 6528                REGISTER_CALL(FUNCNAME);                                                           \ 
 6529                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 6530                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 6531                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 6533                                va_start(ap, arg2);                                                \ 
 6534                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 6535                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 6536                                                                  arg0, arg1, arg2, ap);           \ 
 6537                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 6542                                va_start(ap, arg2);                                                \ 
 6544                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 6545                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 6546                                                        arg0, arg1, arg2, ap);                     \ 
 6547                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 6550                                return FUNCNAME##_fake                                             \ 
 6551                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 6552                                                arg0, arg1, arg2, ap);                             \ 
 6555                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 6558                        va_start(ap, arg2);                                                        \ 
 6559                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, ap);                   \ 
 6561                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 6564                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 6566        DEFINE_RESET_FUNCTION(FUNCNAME) 
 6568#define FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...)       \ 
 6569        DECLARE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 6571        DEFINE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) 
 6573#define DECLARE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 6575        typedef struct FUNCNAME##_Fake {                                                           \ 
 6576                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 6577                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 6578                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 6579                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 6580                DECLARE_ALL_FUNC_COMMON                                                            \ 
 6581                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 6582                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 6583                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 6584                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 6585                                             ARG2_TYPE, ARG3_TYPE, va_list ap);                    \ 
 6586                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 6587                                             ARG2_TYPE, ARG3_TYPE, va_list ap);                    \ 
 6588        } FUNCNAME##_Fake;                                                                         \ 
 6589        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 6590        void FUNCNAME##_reset(void);                                                               \ 
 6591        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1,           \ 
 6592                                                         ARG2_TYPE arg2, ARG3_TYPE arg3, ...); 
 6594#define DEFINE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,     \ 
 6596        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 6597        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1,           \ 
 6598                                                         ARG2_TYPE arg2, ARG3_TYPE arg3, ...)      \ 
 6600                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 6601                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 6602                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 6603                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 6604                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 6605                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 6606                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 6607                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 6608                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 6610                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 6612                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 6613                REGISTER_CALL(FUNCNAME);                                                           \ 
 6614                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 6615                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 6616                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 6618                                va_start(ap, arg3);                                                \ 
 6619                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 6620                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 6621                                                                  arg0, arg1, arg2, arg3, ap);     \ 
 6622                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 6627                                va_start(ap, arg3);                                                \ 
 6629                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 6630                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 6631                                                        arg0, arg1, arg2, arg3, ap);               \ 
 6632                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 6635                                return FUNCNAME##_fake                                             \ 
 6636                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 6637                                                arg0, arg1, arg2, arg3, ap);                       \ 
 6640                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 6643                        va_start(ap, arg3);                                                        \ 
 6644                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, ap);             \ 
 6646                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 6649                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 6651        DEFINE_RESET_FUNCTION(FUNCNAME) 
 6653#define FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 6655        DECLARE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 6657        DEFINE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,     \ 
 6660#define DECLARE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 6661                                        ARG3_TYPE, ARG4_TYPE, ...)                                 \ 
 6662        typedef struct FUNCNAME##_Fake {                                                           \ 
 6663                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 6664                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 6665                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 6666                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 6667                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 6668                DECLARE_ALL_FUNC_COMMON                                                            \ 
 6669                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 6670                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 6671                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 6672                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 6673                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, va_list ap);         \ 
 6674                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 6675                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, va_list ap);         \ 
 6676        } FUNCNAME##_Fake;                                                                         \ 
 6677        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 6678        void FUNCNAME##_reset(void);                                                               \ 
 6679        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1,           \ 
 6680                                                         ARG2_TYPE arg2, ARG3_TYPE arg3,           \ 
 6681                                                         ARG4_TYPE arg4, ...); 
 6683#define DEFINE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,     \ 
 6684                                       ARG3_TYPE, ARG4_TYPE, ...)                                  \ 
 6685        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 6686        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1,           \ 
 6687                                                         ARG2_TYPE arg2, ARG3_TYPE arg3,           \ 
 6688                                                         ARG4_TYPE arg4, ...)                      \ 
 6690                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 6691                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 6692                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 6693                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 6694                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 6695                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 6696                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 6697                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 6698                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 6699                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 6700                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 6702                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 6704                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 6705                REGISTER_CALL(FUNCNAME);                                                           \ 
 6706                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 6707                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 6708                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 6710                                va_start(ap, arg4);                                                \ 
 6712                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 6713                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 6714                                                        arg0, arg1, arg2, arg3, arg4, ap);         \ 
 6715                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 6720                                va_start(ap, arg4);                                                \ 
 6722                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 6723                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 6724                                                        arg0, arg1, arg2, arg3, arg4, ap);         \ 
 6725                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 6728                                return FUNCNAME##_fake                                             \ 
 6729                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 6730                                                arg0, arg1, arg2, arg3, arg4, ap);                 \ 
 6733                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 6736                        va_start(ap, arg4);                                                        \ 
 6737                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, ap);       \ 
 6739                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 6742                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 6744        DEFINE_RESET_FUNCTION(FUNCNAME) 
 6746#define FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 6748        DECLARE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 6749                                        ARG3_TYPE, ARG4_TYPE, ...)                                 \ 
 6750        DEFINE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,     \ 
 6751                                       ARG3_TYPE, ARG4_TYPE, ...) 
 6753#define DECLARE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 6754                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...)                      \ 
 6755        typedef struct FUNCNAME##_Fake {                                                           \ 
 6756                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 6757                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 6758                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 6759                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 6760                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 6761                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 6762                DECLARE_ALL_FUNC_COMMON                                                            \ 
 6763                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 6764                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 6765                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 6766                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 6767                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 6769                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 6770                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 6772        } FUNCNAME##_Fake;                                                                         \ 
 6773        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 6774        void FUNCNAME##_reset(void);                                                               \ 
 6775        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1,           \ 
 6776                                                         ARG2_TYPE arg2, ARG3_TYPE arg3,           \ 
 6777                                                         ARG4_TYPE arg4, ARG5_TYPE arg5, ...); 
 6779#define DEFINE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,     \ 
 6780                                       ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...)                       \ 
 6781        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 6782        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1,           \ 
 6783                                                         ARG2_TYPE arg2, ARG3_TYPE arg3,           \ 
 6784                                                         ARG4_TYPE arg4, ARG5_TYPE arg5, ...)      \ 
 6786                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 6787                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 6788                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 6789                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 6790                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 6791                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 6792                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 6793                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 6794                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 6795                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 6796                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 6797                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 6798                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 6800                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 6802                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 6803                REGISTER_CALL(FUNCNAME);                                                           \ 
 6804                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 6805                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 6806                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 6808                                va_start(ap, arg5);                                                \ 
 6810                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 6811                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 6812                                                        arg0, arg1, arg2, arg3, arg4, arg5, ap);   \ 
 6813                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 6818                                va_start(ap, arg5);                                                \ 
 6820                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 6821                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 6822                                                        arg0, arg1, arg2, arg3, arg4, arg5, ap);   \ 
 6823                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 6826                                return FUNCNAME##_fake                                             \ 
 6827                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 6828                                                arg0, arg1, arg2, arg3, arg4, arg5, ap);           \ 
 6831                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 6834                        va_start(ap, arg5);                                                        \ 
 6835                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, ap); \ 
 6837                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 6840                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 6842        DEFINE_RESET_FUNCTION(FUNCNAME) 
 6844#define FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 6845                                ARG4_TYPE, ARG5_TYPE, ...)                                         \ 
 6846        DECLARE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 6847                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...)                      \ 
 6848        DEFINE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,     \ 
 6849                                       ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) 
 6851#define DECLARE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 6852                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...)           \ 
 6853        typedef struct FUNCNAME##_Fake {                                                           \ 
 6854                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 6855                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 6856                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 6857                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 6858                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 6859                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 6860                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 6861                DECLARE_ALL_FUNC_COMMON                                                            \ 
 6862                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 6863                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 6864                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 6865                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 6866                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 6867                                             ARG6_TYPE, va_list ap);                               \ 
 6868                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 6869                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 6870                                             ARG6_TYPE, va_list ap);                               \ 
 6871        } FUNCNAME##_Fake;                                                                         \ 
 6872        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 6873        void FUNCNAME##_reset(void);                                                               \ 
 6874        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 6875                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 6876                ARG5_TYPE arg5, ARG6_TYPE arg6, ...); 
 6878#define DEFINE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,     \ 
 6879                                       ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...)            \ 
 6880        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 6881        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 6882                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 6883                ARG5_TYPE arg5, ARG6_TYPE arg6, ...)                                               \ 
 6885                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 6886                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 6887                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 6888                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 6889                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 6890                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 6891                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 6892                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 6893                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 6894                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 6895                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 6896                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 6897                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 6898                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 6899                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 6901                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 6903                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 6904                REGISTER_CALL(FUNCNAME);                                                           \ 
 6905                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 6906                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 6907                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 6909                                va_start(ap, arg6);                                                \ 
 6910                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 6911                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 6912                                                                  arg0, arg1, arg2, arg3, arg4,    \ 
 6914                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 6919                                va_start(ap, arg6);                                                \ 
 6921                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 6922                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 6923                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 6925                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 6928                                return FUNCNAME##_fake                                             \ 
 6929                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 6930                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap);     \ 
 6933                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 6936                        va_start(ap, arg6);                                                        \ 
 6937                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,      \ 
 6940                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 6943                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 6945        DEFINE_RESET_FUNCTION(FUNCNAME) 
 6947#define FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 6948                                ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...)                              \ 
 6949        DECLARE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 6950                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...)           \ 
 6951        DEFINE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,     \ 
 6952                                       ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) 
 6954#define DECLARE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 6955                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 6957        typedef struct FUNCNAME##_Fake {                                                           \ 
 6958                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 6959                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 6960                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 6961                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 6962                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 6963                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 6964                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 6965                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 6966                DECLARE_ALL_FUNC_COMMON                                                            \ 
 6967                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 6968                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 6969                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 6970                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 6971                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 6972                                             ARG6_TYPE, ARG7_TYPE, va_list ap);                    \ 
 6973                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 6974                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 6975                                             ARG6_TYPE, ARG7_TYPE, va_list ap);                    \ 
 6976        } FUNCNAME##_Fake;                                                                         \ 
 6977        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 6978        void FUNCNAME##_reset(void);                                                               \ 
 6979        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 6980                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 6981                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...); 
 6983#define DEFINE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,     \ 
 6984                                       ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \ 
 6985        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 6986        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 6987                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 6988                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...)                               \ 
 6990                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 6991                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 6992                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 6993                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 6994                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 6995                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 6996                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 6997                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 6998                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 6999                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 7000                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 7001                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 7002                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 7003                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 7004                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 7005                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 7006                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 7008                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 7010                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 7011                REGISTER_CALL(FUNCNAME);                                                           \ 
 7012                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 7013                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 7014                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 7016                                va_start(ap, arg7);                                                \ 
 7017                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 7018                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 7019                                                                  arg0, arg1, arg2, arg3, arg4,    \ 
 7020                                                                  arg5, arg6, arg7, ap);           \ 
 7021                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7026                                va_start(ap, arg7);                                                \ 
 7028                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 7029                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 7030                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 7032                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7035                                return FUNCNAME##_fake                                             \ 
 7036                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 7037                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 7041                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 7044                        va_start(ap, arg7);                                                        \ 
 7045                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,      \ 
 7048                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 7051                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 7053        DEFINE_RESET_FUNCTION(FUNCNAME) 
 7055#define FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, \ 
 7056                                ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...)                   \ 
 7057        DECLARE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 7058                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 7060        DEFINE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,     \ 
 7061                                       ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) 
 7063#define DECLARE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 7064                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 7066        typedef struct FUNCNAME##_Fake {                                                           \ 
 7067                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 7068                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 7069                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 7070                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 7071                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 7072                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 7073                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 7074                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 7075                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 7076                DECLARE_ALL_FUNC_COMMON                                                            \ 
 7077                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 7078                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 7079                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 7080                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 7081                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 7082                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, va_list ap);         \ 
 7083                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 7084                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 7085                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, va_list ap);         \ 
 7086        } FUNCNAME##_Fake;                                                                         \ 
 7087        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 7088        void FUNCNAME##_reset(void);                                                               \ 
 7089        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 7090                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 7091                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...); 
 7093#define DEFINE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 7094                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 7096        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 7097        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 7098                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 7099                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...)               \ 
 7101                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 7102                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 7103                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 7104                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 7105                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 7106                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 7107                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 7108                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 7109                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 7110                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 7111                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 7112                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 7113                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 7114                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 7115                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 7116                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 7117                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 7118                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 7119                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 7121                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 7123                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 7124                REGISTER_CALL(FUNCNAME);                                                           \ 
 7125                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 7126                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 7127                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 7129                                va_start(ap, arg8);                                                \ 
 7130                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 7131                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 7132                                                                  arg0, arg1, arg2, arg3, arg4,    \ 
 7133                                                                  arg5, arg6, arg7, arg8, ap);     \ 
 7134                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7139                                va_start(ap, arg8);                                                \ 
 7141                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 7142                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 7143                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 7145                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7148                                return FUNCNAME##_fake                                             \ 
 7149                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 7150                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 7154                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 7157                        va_start(ap, arg8);                                                        \ 
 7158                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,      \ 
 7159                                                          arg6, arg7, arg8, ap);                   \ 
 7161                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 7164                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 7166        DEFINE_RESET_FUNCTION(FUNCNAME) 
 7168#define FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 7169                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 7171        DECLARE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 7172                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 7174        DEFINE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 7175                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 7178#define DECLARE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 7179                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 7180                                         ARG8_TYPE, ARG9_TYPE, ...)                                \ 
 7181        typedef struct FUNCNAME##_Fake {                                                           \ 
 7182                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 7183                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 7184                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 7185                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 7186                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 7187                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 7188                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 7189                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 7190                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 7191                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 7192                DECLARE_ALL_FUNC_COMMON                                                            \ 
 7193                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 7194                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 7195                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 7196                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 7197                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 7198                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 7200                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 7201                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 7202                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 7204        } FUNCNAME##_Fake;                                                                         \ 
 7205        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 7206        void FUNCNAME##_reset(void);                                                               \ 
 7207        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 7208                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 7209                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 7212#define DEFINE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 7213                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 7214                                        ARG8_TYPE, ARG9_TYPE, ...)                                 \ 
 7215        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 7216        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 7217                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 7218                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 7221                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 7222                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 7223                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 7224                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 7225                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 7226                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 7227                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 7228                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 7229                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 7230                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 7231                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 7232                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 7233                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 7234                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 7235                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 7236                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 7237                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 7238                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 7239                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 7240                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 7241                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 7243                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 7245                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 7246                REGISTER_CALL(FUNCNAME);                                                           \ 
 7247                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 7248                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 7249                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 7251                                va_start(ap, arg9);                                                \ 
 7253                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 7254                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 7255                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 7256                                                        arg7, arg8, arg9, ap);                     \ 
 7257                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7262                                va_start(ap, arg9);                                                \ 
 7264                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 7265                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 7266                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 7267                                                        arg7, arg8, arg9, ap);                     \ 
 7268                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7271                                return FUNCNAME##_fake                                             \ 
 7272                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 7273                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 7277                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 7280                        va_start(ap, arg9);                                                        \ 
 7281                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,      \ 
 7282                                                          arg6, arg7, arg8, arg9, ap);             \ 
 7284                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 7287                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 7289        DEFINE_RESET_FUNCTION(FUNCNAME) 
 7291#define FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 7292                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 7294        DECLARE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 7295                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 7296                                         ARG8_TYPE, ARG9_TYPE, ...)                                \ 
 7297        DEFINE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 7298                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 7299                                        ARG8_TYPE, ARG9_TYPE, ...) 
 7301#define DECLARE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 7302                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 7303                                         ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...)                    \ 
 7304        typedef struct FUNCNAME##_Fake {                                                           \ 
 7305                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 7306                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 7307                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 7308                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 7309                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 7310                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 7311                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 7312                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 7313                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 7314                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 7315                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 7316                DECLARE_ALL_FUNC_COMMON                                                            \ 
 7317                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 7318                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 7319                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 7320                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 7321                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 7322                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 7323                                             ARG10_TYPE, va_list ap);                              \ 
 7324                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 7325                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 7326                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 7327                                             ARG10_TYPE, va_list ap);                              \ 
 7328        } FUNCNAME##_Fake;                                                                         \ 
 7329        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 7330        void FUNCNAME##_reset(void);                                                               \ 
 7331        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 7332                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 7333                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 7334                ARG10_TYPE arg10, ...); 
 7336#define DEFINE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 7337                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 7338                                        ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...)                     \ 
 7339        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 7340        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 7341                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 7342                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 7343                ARG10_TYPE arg10, ...)                                                             \ 
 7345                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 7346                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 7347                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 7348                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 7349                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 7350                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 7351                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 7352                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 7353                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 7354                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 7355                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 7356                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 7357                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 7358                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 7359                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 7360                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 7361                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 7362                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 7363                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 7364                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 7365                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 7366                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 7367                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 7369                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 7371                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 7372                REGISTER_CALL(FUNCNAME);                                                           \ 
 7373                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 7374                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 7375                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 7377                                va_start(ap, arg10);                                               \ 
 7379                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 7380                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 7381                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 7382                                                        arg7, arg8, arg9, arg10, ap);              \ 
 7383                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7388                                va_start(ap, arg10);                                               \ 
 7390                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 7391                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 7392                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 7393                                                        arg7, arg8, arg9, arg10, ap);              \ 
 7394                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7397                                return FUNCNAME##_fake                                             \ 
 7398                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 7399                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 7400                                                arg8, arg9, arg10, ap);                            \ 
 7403                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 7406                        va_start(ap, arg10);                                                       \ 
 7407                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,      \ 
 7408                                                          arg6, arg7, arg8, arg9, arg10, ap);      \ 
 7410                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 7413                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 7415        DEFINE_RESET_FUNCTION(FUNCNAME) 
 7417#define FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 7418                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 7419                                 ARG9_TYPE, ARG10_TYPE, ...)                                       \ 
 7420        DECLARE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 7421                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 7422                                         ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...)                    \ 
 7423        DEFINE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 7424                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 7425                                        ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) 
 7427#define DECLARE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 7428                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 7429                                         ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...)        \ 
 7430        typedef struct FUNCNAME##_Fake {                                                           \ 
 7431                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 7432                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 7433                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 7434                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 7435                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 7436                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 7437                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 7438                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 7439                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 7440                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 7441                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 7442                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 7443                DECLARE_ALL_FUNC_COMMON                                                            \ 
 7444                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 7445                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 7446                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 7447                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 7448                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 7449                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 7450                                             ARG10_TYPE, ARG11_TYPE, va_list ap);                  \ 
 7451                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 7452                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 7453                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 7454                                             ARG10_TYPE, ARG11_TYPE, va_list ap);                  \ 
 7455        } FUNCNAME##_Fake;                                                                         \ 
 7456        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 7457        void FUNCNAME##_reset(void);                                                               \ 
 7458        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 7459                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 7460                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 7461                ARG10_TYPE arg10, ARG11_TYPE arg11, ...); 
 7463#define DEFINE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 7464                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 7465                                        ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...)         \ 
 7466        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 7467        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 7468                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 7469                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 7470                ARG10_TYPE arg10, ARG11_TYPE arg11, ...)                                           \ 
 7472                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 7473                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 7474                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 7475                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 7476                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 7477                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 7478                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 7479                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 7480                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 7481                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 7482                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 7483                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 7484                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 7485                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 7486                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 7487                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 7488                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 7489                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 7490                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 7491                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 7492                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 7493                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 7494                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 7495                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 7496                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 7498                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 7500                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 7501                REGISTER_CALL(FUNCNAME);                                                           \ 
 7502                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 7503                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 7504                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 7506                                va_start(ap, arg11);                                               \ 
 7508                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 7509                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 7510                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 7511                                                        arg7, arg8, arg9, arg10, arg11, ap);       \ 
 7512                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7517                                va_start(ap, arg11);                                               \ 
 7519                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 7520                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 7521                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 7522                                                        arg7, arg8, arg9, arg10, arg11, ap);       \ 
 7523                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7526                                return FUNCNAME##_fake                                             \ 
 7527                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 7528                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 7529                                                arg8, arg9, arg10, arg11, ap);                     \ 
 7532                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 7535                        va_start(ap, arg11);                                                       \ 
 7536                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,      \ 
 7537                                                          arg6, arg7, arg8, arg9, arg10, arg11,    \ 
 7540                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 7543                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 7545        DEFINE_RESET_FUNCTION(FUNCNAME) 
 7547#define FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 7548                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 7549                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...)                           \ 
 7550        DECLARE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 7551                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 7552                                         ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...)        \ 
 7553        DEFINE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 7554                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 7555                                        ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) 
 7557#define DECLARE_FAKE_VALUE_FUNC14_VARARG(                                                          \ 
 7558        RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,   \ 
 7559        ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...)       \ 
 7560        typedef struct FUNCNAME##_Fake {                                                           \ 
 7561                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 7562                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 7563                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 7564                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 7565                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 7566                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 7567                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 7568                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 7569                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 7570                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 7571                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 7572                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 7573                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 7574                DECLARE_ALL_FUNC_COMMON                                                            \ 
 7575                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 7576                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 7577                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 7578                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 7579                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 7580                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 7581                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, va_list ap);      \ 
 7582                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 7583                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 7584                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 7585                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, va_list ap);      \ 
 7586        } FUNCNAME##_Fake;                                                                         \ 
 7587        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 7588        void FUNCNAME##_reset(void);                                                               \ 
 7589        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 7590                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 7591                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 7592                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...); 
 7594#define DEFINE_FAKE_VALUE_FUNC14_VARARG(                                                           \ 
 7595        RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,   \ 
 7596        ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...)       \ 
 7597        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 7598        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 7599                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 7600                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 7601                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...)                         \ 
 7603                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 7604                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 7605                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 7606                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 7607                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 7608                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 7609                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 7610                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 7611                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 7612                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 7613                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 7614                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 7615                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 7616                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 7617                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 7618                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 7619                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 7620                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 7621                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 7622                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 7623                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 7624                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 7625                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 7626                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 7627                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 7628                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 7629                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 7631                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 7633                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 7634                REGISTER_CALL(FUNCNAME);                                                           \ 
 7635                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 7636                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 7637                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 7639                                va_start(ap, arg12);                                               \ 
 7640                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 7641                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 7642                                                                  arg0, arg1, arg2, arg3, arg4,    \ 
 7643                                                                  arg5, arg6, arg7, arg8, arg9,    \ 
 7644                                                                  arg10, arg11, arg12, ap);        \ 
 7645                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7650                                va_start(ap, arg12);                                               \ 
 7652                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 7653                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 7654                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 7655                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 7657                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7660                                return FUNCNAME##_fake                                             \ 
 7661                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 7662                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 7663                                                arg8, arg9, arg10, arg11, arg12, ap);              \ 
 7666                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 7669                        va_start(ap, arg12);                                                       \ 
 7670                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,      \ 
 7671                                                          arg6, arg7, arg8, arg9, arg10, arg11,    \ 
 7674                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 7677                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 7679        DEFINE_RESET_FUNCTION(FUNCNAME) 
 7681#define FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 7682                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 7683                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...)               \ 
 7684        DECLARE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 7685                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 7686                                         ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, \ 
 7688        DEFINE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 7689                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 7690                                        ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,  \ 
 7693#define DECLARE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 7694                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 7695                                         ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, \ 
 7697        typedef struct FUNCNAME##_Fake {                                                           \ 
 7698                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 7699                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 7700                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 7701                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 7702                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 7703                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 7704                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 7705                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 7706                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 7707                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 7708                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 7709                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 7710                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 7711                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 7712                DECLARE_ALL_FUNC_COMMON                                                            \ 
 7713                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 7714                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 7715                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 7716                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 7717                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 7718                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 7719                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 7721                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 7722                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 7723                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 7724                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 7726        } FUNCNAME##_Fake;                                                                         \ 
 7727        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 7728        void FUNCNAME##_reset(void);                                                               \ 
 7729        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 7730                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 7731                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 7732                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...); 
 7734#define DEFINE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 7735                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 7736                                        ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,  \ 
 7738        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 7739        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 7740                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 7741                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 7742                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...)       \ 
 7744                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 7745                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 7746                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 7747                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 7748                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 7749                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 7750                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 7751                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 7752                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 7753                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 7754                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 7755                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 7756                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 7757                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 7758                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 7759                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 7760                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 7761                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 7762                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 7763                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 7764                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 7765                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 7766                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 7767                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 7768                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 7769                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 7770                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 7771                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 7772                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 7774                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 7776                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 7777                REGISTER_CALL(FUNCNAME);                                                           \ 
 7778                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 7779                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 7780                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 7782                                va_start(ap, arg13);                                               \ 
 7783                                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq                  \ 
 7784                                                          [FUNCNAME##_fake.custom_fake_seq_idx++]( \ 
 7785                                                                  arg0, arg1, arg2, arg3, arg4,    \ 
 7786                                                                  arg5, arg6, arg7, arg8, arg9,    \ 
 7787                                                                  arg10, arg11, arg12, arg13, ap); \ 
 7788                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7793                                va_start(ap, arg13);                                               \ 
 7795                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 7796                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 7797                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 7798                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 7800                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7803                                return FUNCNAME##_fake                                             \ 
 7804                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 7805                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 7806                                                arg8, arg9, arg10, arg11, arg12, arg13, ap);       \ 
 7809                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 7812                        va_start(ap, arg13);                                                       \ 
 7813                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,      \ 
 7814                                                          arg6, arg7, arg8, arg9, arg10, arg11,    \ 
 7815                                                          arg12, arg13, ap);                       \ 
 7817                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 7820                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 7822        DEFINE_RESET_FUNCTION(FUNCNAME) 
 7824#define FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 7825                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 7826                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...)   \ 
 7827        DECLARE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 7828                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 7829                                         ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, \ 
 7831        DEFINE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 7832                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 7833                                        ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,  \ 
 7836#define DECLARE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 7837                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 7838                                         ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, \ 
 7839                                         ARG13_TYPE, ARG14_TYPE, ...)                              \ 
 7840        typedef struct FUNCNAME##_Fake {                                                           \ 
 7841                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 7842                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 7843                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 7844                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 7845                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 7846                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 7847                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 7848                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 7849                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 7850                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 7851                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 7852                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 7853                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 7854                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 7855                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 7856                DECLARE_ALL_FUNC_COMMON                                                            \ 
 7857                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 7858                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 7859                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 7860                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 7861                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 7862                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 7863                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 7864                                             ARG14_TYPE, va_list ap);                              \ 
 7865                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 7866                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 7867                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 7868                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 7869                                             ARG14_TYPE, va_list ap);                              \ 
 7870        } FUNCNAME##_Fake;                                                                         \ 
 7871        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 7872        void FUNCNAME##_reset(void);                                                               \ 
 7873        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 7874                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 7875                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 7876                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 7877                ARG14_TYPE arg14, ...); 
 7879#define DEFINE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 7880                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 7881                                        ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,  \ 
 7882                                        ARG13_TYPE, ARG14_TYPE, ...)                               \ 
 7883        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 7884        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 7885                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 7886                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 7887                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 7888                ARG14_TYPE arg14, ...)                                                             \ 
 7890                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 7891                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 7892                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 7893                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 7894                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 7895                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 7896                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 7897                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 7898                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 7899                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 7900                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 7901                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 7902                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 7903                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 7904                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 7905                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 7906                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 7907                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 7908                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 7909                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 7910                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 7911                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 7912                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 7913                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 7914                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 7915                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 7916                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 7917                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 7918                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 7919                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 7920                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 7922                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 7924                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 7925                REGISTER_CALL(FUNCNAME);                                                           \ 
 7926                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 7927                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 7928                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 7930                                va_start(ap, arg14);                                               \ 
 7932                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 7933                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 7934                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 7935                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 7936                                                        arg13, arg14, ap);                         \ 
 7937                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7942                                va_start(ap, arg14);                                               \ 
 7944                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 7945                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 7946                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 7947                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 7948                                                        arg13, arg14, ap);                         \ 
 7949                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 7952                                return FUNCNAME##_fake                                             \ 
 7953                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 7954                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 7955                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 7959                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 7962                        va_start(ap, arg14);                                                       \ 
 7963                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,      \ 
 7964                                                          arg6, arg7, arg8, arg9, arg10, arg11,    \ 
 7965                                                          arg12, arg13, arg14, ap);                \ 
 7967                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 7970                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 7972        DEFINE_RESET_FUNCTION(FUNCNAME) 
 7974#define FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 7975                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 7976                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 7978        DECLARE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 7979                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 7980                                         ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, \ 
 7981                                         ARG13_TYPE, ARG14_TYPE, ...)                              \ 
 7982        DEFINE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 7983                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 7984                                        ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,  \ 
 7985                                        ARG13_TYPE, ARG14_TYPE, ...) 
 7987#define DECLARE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 7988                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 7989                                         ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, \ 
 7990                                         ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...)                  \ 
 7991        typedef struct FUNCNAME##_Fake {                                                           \ 
 7992                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 7993                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 7994                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 7995                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 7996                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 7997                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 7998                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 7999                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 8000                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 8001                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 8002                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 8003                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 8004                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 8005                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 8006                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 8007                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 8008                DECLARE_ALL_FUNC_COMMON                                                            \ 
 8009                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 8010                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 8011                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 8012                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 8013                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 8014                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 8015                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 8016                                             ARG14_TYPE, ARG15_TYPE, va_list ap);                  \ 
 8017                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 8018                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 8019                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 8020                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 8021                                             ARG14_TYPE, ARG15_TYPE, va_list ap);                  \ 
 8022        } FUNCNAME##_Fake;                                                                         \ 
 8023        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 8024        void FUNCNAME##_reset(void);                                                               \ 
 8025        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 8026                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 8027                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 8028                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 8029                ARG14_TYPE arg14, ARG15_TYPE arg15, ...); 
 8031#define DEFINE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 8032                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 8033                                        ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,  \ 
 8034                                        ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...)                   \ 
 8035        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 8036        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 8037                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 8038                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 8039                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 8040                ARG14_TYPE arg14, ARG15_TYPE arg15, ...)                                           \ 
 8042                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 8043                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 8044                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 8045                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 8046                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 8047                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 8048                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 8049                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 8050                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 8051                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 8052                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 8053                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 8054                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 8055                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 8056                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 8057                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 8058                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 8059                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 8060                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 8061                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 8062                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 8063                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 8064                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 8065                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 8066                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 8067                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 8068                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 8069                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 8070                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 8071                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 8072                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 8073                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 8074                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 8076                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 8078                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 8079                REGISTER_CALL(FUNCNAME);                                                           \ 
 8080                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 8081                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 8082                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 8084                                va_start(ap, arg15);                                               \ 
 8086                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 8087                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 8088                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 8089                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 8090                                                        arg13, arg14, arg15, ap);                  \ 
 8091                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 8096                                va_start(ap, arg15);                                               \ 
 8098                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 8099                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 8100                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 8101                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 8102                                                        arg13, arg14, arg15, ap);                  \ 
 8103                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 8106                                return FUNCNAME##_fake                                             \ 
 8107                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 8108                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 8109                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 8113                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 8116                        va_start(ap, arg15);                                                       \ 
 8117                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,      \ 
 8118                                                          arg6, arg7, arg8, arg9, arg10, arg11,    \ 
 8119                                                          arg12, arg13, arg14, arg15, ap);         \ 
 8121                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 8124                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 8126        DEFINE_RESET_FUNCTION(FUNCNAME) 
 8128#define FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 8129                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 8130                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 8131                                 ARG14_TYPE, ARG15_TYPE, ...)                                      \ 
 8132        DECLARE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 8133                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 8134                                         ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, \ 
 8135                                         ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...)                  \ 
 8136        DEFINE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 8137                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 8138                                        ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,  \ 
 8139                                        ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) 
 8141#define DECLARE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 8142                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 8143                                         ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, \ 
 8144                                         ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...)      \ 
 8145        typedef struct FUNCNAME##_Fake {                                                           \ 
 8146                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 8147                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 8148                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 8149                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 8150                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 8151                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 8152                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 8153                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 8154                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 8155                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 8156                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 8157                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 8158                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 8159                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 8160                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 8161                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 8162                DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME)                                              \ 
 8163                DECLARE_ALL_FUNC_COMMON                                                            \ 
 8164                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 8165                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 8166                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 8167                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 8168                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 8169                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 8170                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 8171                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, va_list ap);      \ 
 8172                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 8173                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 8174                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 8175                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 8176                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, va_list ap);      \ 
 8177        } FUNCNAME##_Fake;                                                                         \ 
 8178        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 8179        void FUNCNAME##_reset(void);                                                               \ 
 8180        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 8181                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 8182                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 8183                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 8184                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...); 
 8186#define DEFINE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 8187                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 8188                                        ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,  \ 
 8189                                        ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...)       \ 
 8190        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 8191        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 8192                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 8193                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 8194                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 8195                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...)                         \ 
 8197                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 8198                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 8199                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 8200                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 8201                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 8202                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 8203                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 8204                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 8205                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 8206                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 8207                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 8208                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 8209                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 8210                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 8211                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 8212                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 8213                SAVE_ARG(FUNCNAME, 16);                                                            \ 
 8214                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 8215                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 8216                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 8217                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 8218                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 8219                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 8220                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 8221                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 8222                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 8223                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 8224                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 8225                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 8226                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 8227                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 8228                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 8229                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 8230                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 8231                        SAVE_ARG_HISTORY(FUNCNAME, 16);                                            \ 
 8233                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 8235                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 8236                REGISTER_CALL(FUNCNAME);                                                           \ 
 8237                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 8238                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 8239                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 8241                                va_start(ap, arg16);                                               \ 
 8243                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 8244                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 8245                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 8246                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 8247                                                        arg13, arg14, arg15, arg16, ap);           \ 
 8248                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 8253                                va_start(ap, arg16);                                               \ 
 8255                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 8256                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 8257                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 8258                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 8259                                                        arg13, arg14, arg15, arg16, ap);           \ 
 8260                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 8263                                return FUNCNAME##_fake                                             \ 
 8264                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 8265                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 8266                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 8267                                                arg15, arg16, ap);                                 \ 
 8270                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 8273                        va_start(ap, arg16);                                                       \ 
 8274                        ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5,      \ 
 8275                                                          arg6, arg7, arg8, arg9, arg10, arg11,    \ 
 8276                                                          arg12, arg13, arg14, arg15, arg16, ap);  \ 
 8278                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 8281                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 8283        DEFINE_RESET_FUNCTION(FUNCNAME) 
 8285#define FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 8286                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 8287                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 8288                                 ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...)                          \ 
 8289        DECLARE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 8290                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 8291                                         ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, \ 
 8292                                         ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...)      \ 
 8293        DEFINE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 8294                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 8295                                        ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,  \ 
 8296                                        ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) 
 8298#define DECLARE_FAKE_VALUE_FUNC19_VARARG(                                                          \ 
 8299        RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,   \ 
 8300        ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,            \ 
 8301        ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...)                           \ 
 8302        typedef struct FUNCNAME##_Fake {                                                           \ 
 8303                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 8304                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 8305                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 8306                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 8307                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 8308                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 8309                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 8310                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 8311                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 8312                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 8313                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 8314                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 8315                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 8316                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 8317                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 8318                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 8319                DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME)                                              \ 
 8320                DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME)                                              \ 
 8321                DECLARE_ALL_FUNC_COMMON                                                            \ 
 8322                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 8323                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 8324                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 8325                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 8326                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 8327                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 8328                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 8329                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE,       \ 
 8331                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 8332                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 8333                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 8334                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 8335                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE,       \ 
 8337        } FUNCNAME##_Fake;                                                                         \ 
 8338        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 8339        void FUNCNAME##_reset(void);                                                               \ 
 8340        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 8341                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 8342                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 8343                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 8344                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...); 
 8346#define DEFINE_FAKE_VALUE_FUNC19_VARARG(                                                           \ 
 8347        RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,   \ 
 8348        ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,            \ 
 8349        ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...)                           \ 
 8350        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 8351        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 8352                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 8353                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 8354                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 8355                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...)       \ 
 8357                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 8358                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 8359                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 8360                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 8361                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 8362                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 8363                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 8364                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 8365                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 8366                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 8367                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 8368                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 8369                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 8370                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 8371                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 8372                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 8373                SAVE_ARG(FUNCNAME, 16);                                                            \ 
 8374                SAVE_ARG(FUNCNAME, 17);                                                            \ 
 8375                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 8376                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 8377                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 8378                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 8379                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 8380                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 8381                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 8382                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 8383                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 8384                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 8385                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 8386                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 8387                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 8388                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 8389                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 8390                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 8391                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 8392                        SAVE_ARG_HISTORY(FUNCNAME, 16);                                            \ 
 8393                        SAVE_ARG_HISTORY(FUNCNAME, 17);                                            \ 
 8395                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 8397                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 8398                REGISTER_CALL(FUNCNAME);                                                           \ 
 8399                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 8400                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 8401                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 8403                                va_start(ap, arg17);                                               \ 
 8405                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 8406                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 8407                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 8408                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 8409                                                        arg13, arg14, arg15, arg16, arg17, ap);    \ 
 8410                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 8415                                va_start(ap, arg17);                                               \ 
 8417                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 8418                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 8419                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 8420                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 8421                                                        arg13, arg14, arg15, arg16, arg17, ap);    \ 
 8422                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 8425                                return FUNCNAME##_fake                                             \ 
 8426                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 8427                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 8428                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 8429                                                arg15, arg16, arg17, ap);                          \ 
 8432                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 8435                        va_start(ap, arg17);                                                       \ 
 8436                        ret = FUNCNAME##_fake.custom_fake(                                         \ 
 8437                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, \ 
 8438                                arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap);              \ 
 8440                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 8443                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 8445        DEFINE_RESET_FUNCTION(FUNCNAME) 
 8447#define FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 8448                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 8449                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 8450                                 ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...)              \ 
 8451        DECLARE_FAKE_VALUE_FUNC19_VARARG(                                                          \ 
 8452                RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,      \ 
 8453                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE,     \ 
 8454                ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...)       \ 
 8455        DEFINE_FAKE_VALUE_FUNC19_VARARG(                                                           \ 
 8456                RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE,      \ 
 8457                ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE,     \ 
 8458                ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) 
 8460#define DECLARE_FAKE_VALUE_FUNC20_VARARG(                                                          \ 
 8461        RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,   \ 
 8462        ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,            \ 
 8463        ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...)               \ 
 8464        typedef struct FUNCNAME##_Fake {                                                           \ 
 8465                DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME)                                                \ 
 8466                DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME)                                                \ 
 8467                DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME)                                                \ 
 8468                DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME)                                                \ 
 8469                DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME)                                                \ 
 8470                DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME)                                                \ 
 8471                DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME)                                                \ 
 8472                DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME)                                                \ 
 8473                DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME)                                                \ 
 8474                DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME)                                                \ 
 8475                DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME)                                              \ 
 8476                DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME)                                              \ 
 8477                DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME)                                              \ 
 8478                DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME)                                              \ 
 8479                DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME)                                              \ 
 8480                DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME)                                              \ 
 8481                DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME)                                              \ 
 8482                DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME)                                              \ 
 8483                DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME)                                              \ 
 8484                DECLARE_ALL_FUNC_COMMON                                                            \ 
 8485                DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)                                      \ 
 8486                DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE)                                          \ 
 8487                DECLARE_CUSTOM_FAKE_SEQ_VARIABLES                                                  \ 
 8488                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, custom_fake, ARG0_TYPE, ARG1_TYPE,       \ 
 8489                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 8490                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 8491                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 8492                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE,       \ 
 8493                                             ARG18_TYPE, va_list ap);                              \ 
 8494                CUSTOM_FFF_FUNCTION_TEMPLATE(RETURN_TYPE, *custom_fake_seq, ARG0_TYPE, ARG1_TYPE,  \ 
 8495                                             ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,           \ 
 8496                                             ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE,           \ 
 8497                                             ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,       \ 
 8498                                             ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE,       \ 
 8499                                             ARG18_TYPE, va_list ap);                              \ 
 8500        } FUNCNAME##_Fake;                                                                         \ 
 8501        extern FUNCNAME##_Fake FUNCNAME##_fake;                                                    \ 
 8502        void FUNCNAME##_reset(void);                                                               \ 
 8503        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 8504                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 8505                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 8506                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 8507                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17,            \ 
 8508                ARG18_TYPE arg18, ...); 
 8510#define DEFINE_FAKE_VALUE_FUNC20_VARARG(                                                           \ 
 8511        RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE,   \ 
 8512        ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,            \ 
 8513        ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...)               \ 
 8514        FUNCNAME##_Fake FUNCNAME##_fake;                                                           \ 
 8515        RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(                                          \ 
 8516                ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4,    \ 
 8517                ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9,    \ 
 8518                ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13,            \ 
 8519                ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17,            \ 
 8520                ARG18_TYPE arg18, ...)                                                             \ 
 8522                SAVE_ARG(FUNCNAME, 0);                                                             \ 
 8523                SAVE_ARG(FUNCNAME, 1);                                                             \ 
 8524                SAVE_ARG(FUNCNAME, 2);                                                             \ 
 8525                SAVE_ARG(FUNCNAME, 3);                                                             \ 
 8526                SAVE_ARG(FUNCNAME, 4);                                                             \ 
 8527                SAVE_ARG(FUNCNAME, 5);                                                             \ 
 8528                SAVE_ARG(FUNCNAME, 6);                                                             \ 
 8529                SAVE_ARG(FUNCNAME, 7);                                                             \ 
 8530                SAVE_ARG(FUNCNAME, 8);                                                             \ 
 8531                SAVE_ARG(FUNCNAME, 9);                                                             \ 
 8532                SAVE_ARG(FUNCNAME, 10);                                                            \ 
 8533                SAVE_ARG(FUNCNAME, 11);                                                            \ 
 8534                SAVE_ARG(FUNCNAME, 12);                                                            \ 
 8535                SAVE_ARG(FUNCNAME, 13);                                                            \ 
 8536                SAVE_ARG(FUNCNAME, 14);                                                            \ 
 8537                SAVE_ARG(FUNCNAME, 15);                                                            \ 
 8538                SAVE_ARG(FUNCNAME, 16);                                                            \ 
 8539                SAVE_ARG(FUNCNAME, 17);                                                            \ 
 8540                SAVE_ARG(FUNCNAME, 18);                                                            \ 
 8541                if (ROOM_FOR_MORE_HISTORY(FUNCNAME)) {                                             \ 
 8542                        SAVE_ARG_HISTORY(FUNCNAME, 0);                                             \ 
 8543                        SAVE_ARG_HISTORY(FUNCNAME, 1);                                             \ 
 8544                        SAVE_ARG_HISTORY(FUNCNAME, 2);                                             \ 
 8545                        SAVE_ARG_HISTORY(FUNCNAME, 3);                                             \ 
 8546                        SAVE_ARG_HISTORY(FUNCNAME, 4);                                             \ 
 8547                        SAVE_ARG_HISTORY(FUNCNAME, 5);                                             \ 
 8548                        SAVE_ARG_HISTORY(FUNCNAME, 6);                                             \ 
 8549                        SAVE_ARG_HISTORY(FUNCNAME, 7);                                             \ 
 8550                        SAVE_ARG_HISTORY(FUNCNAME, 8);                                             \ 
 8551                        SAVE_ARG_HISTORY(FUNCNAME, 9);                                             \ 
 8552                        SAVE_ARG_HISTORY(FUNCNAME, 10);                                            \ 
 8553                        SAVE_ARG_HISTORY(FUNCNAME, 11);                                            \ 
 8554                        SAVE_ARG_HISTORY(FUNCNAME, 12);                                            \ 
 8555                        SAVE_ARG_HISTORY(FUNCNAME, 13);                                            \ 
 8556                        SAVE_ARG_HISTORY(FUNCNAME, 14);                                            \ 
 8557                        SAVE_ARG_HISTORY(FUNCNAME, 15);                                            \ 
 8558                        SAVE_ARG_HISTORY(FUNCNAME, 16);                                            \ 
 8559                        SAVE_ARG_HISTORY(FUNCNAME, 17);                                            \ 
 8560                        SAVE_ARG_HISTORY(FUNCNAME, 18);                                            \ 
 8562                        HISTORY_DROPPED(FUNCNAME);                                                 \ 
 8564                INCREMENT_CALL_COUNT(FUNCNAME);                                                    \ 
 8565                REGISTER_CALL(FUNCNAME);                                                           \ 
 8566                if (FUNCNAME##_fake.custom_fake_seq_len) {         \ 
 8567                        if (FUNCNAME##_fake.custom_fake_seq_idx <                                  \ 
 8568                            FUNCNAME##_fake.custom_fake_seq_len) {                                 \ 
 8570                                va_start(ap, arg18);                                               \ 
 8572                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 8573                                                [FUNCNAME##_fake.custom_fake_seq_idx++](           \ 
 8574                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 8575                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 8576                                                        arg13, arg14, arg15, arg16, arg17, arg18,  \ 
 8578                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 8583                                va_start(ap, arg18);                                               \ 
 8585                                        FUNCNAME##_fake.custom_fake_seq                            \ 
 8586                                                [FUNCNAME##_fake.custom_fake_seq_len - 1](         \ 
 8587                                                        arg0, arg1, arg2, arg3, arg4, arg5, arg6,  \ 
 8588                                                        arg7, arg8, arg9, arg10, arg11, arg12,     \ 
 8589                                                        arg13, arg14, arg15, arg16, arg17, arg18,  \ 
 8591                                SAVE_RET_HISTORY(FUNCNAME, ret);                                   \ 
 8594                                return FUNCNAME##_fake                                             \ 
 8595                                        .custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len - 1]( \ 
 8596                                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7,    \ 
 8597                                                arg8, arg9, arg10, arg11, arg12, arg13, arg14,     \ 
 8598                                                arg15, arg16, arg17, arg18, ap);                   \ 
 8601                if (FUNCNAME##_fake.custom_fake) {                                                 \ 
 8604                        va_start(ap, arg18);                                                       \ 
 8605                        ret = FUNCNAME##_fake.custom_fake(                                         \ 
 8606                                arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, \ 
 8607                                arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap);       \ 
 8609                        SAVE_RET_HISTORY(FUNCNAME, ret);                                           \ 
 8612                RETURN_FAKE_RESULT(FUNCNAME)                                                       \ 
 8614        DEFINE_RESET_FUNCTION(FUNCNAME) 
 8616#define FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,           \ 
 8617                                 ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, \ 
 8618                                 ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE,        \ 
 8619                                 ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...)  \ 
 8620        DECLARE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,   \ 
 8621                                         ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,    \ 
 8622                                         ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, \ 
 8623                                         ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE,           \ 
 8624                                         ARG17_TYPE, ARG18_TYPE, ...)                              \ 
 8625        DEFINE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE,    \ 
 8626                                        ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE,     \ 
 8627                                        ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE,  \ 
 8628                                        ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE,            \ 
 8629                                        ARG17_TYPE, ARG18_TYPE, ...) 
 8634#define PP_NARG_MINUS2(...) EXPAND(PP_NARG_MINUS2_(__VA_ARGS__, PP_RSEQ_N_MINUS2())) 
 8636#define PP_NARG_MINUS2_(...) EXPAND(PP_ARG_MINUS2_N(__VA_ARGS__)) 
 8638#define PP_ARG_MINUS2_N(returnVal, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13,     \ 
 8639                        _14, _15, _16, _17, _18, _19, _20, N, ...)                                 \ 
 8642#define PP_RSEQ_N_MINUS2() 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 
 8644#define PP_NARG_MINUS1(...) EXPAND(PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1())) 
 8646#define PP_NARG_MINUS1_(...) EXPAND(PP_ARG_MINUS1_N(__VA_ARGS__)) 
 8648#define PP_ARG_MINUS1_N(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, \ 
 8649                        _17, _18, _19, _20, N, ...)                                                \ 
 8652#define PP_RSEQ_N_MINUS1() 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 
 8656#define FAKE_VALUE_FUNC(...) EXPAND(FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)) 
 8658#define FUNC_VALUE_(N, ...) EXPAND(FUNC_VALUE_N(N, __VA_ARGS__)) 
 8660#define FUNC_VALUE_N(N, ...) EXPAND(FAKE_VALUE_FUNC##N(__VA_ARGS__)) 
 8662#define FAKE_VOID_FUNC(...) EXPAND(FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)) 
 8664#define FUNC_VOID_(N, ...) EXPAND(FUNC_VOID_N(N, __VA_ARGS__)) 
 8666#define FUNC_VOID_N(N, ...) EXPAND(FAKE_VOID_FUNC##N(__VA_ARGS__)) 
 8668#define FAKE_VALUE_FUNC_VARARG(...)                                                                \ 
 8669        EXPAND(FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)) 
 8671#define FUNC_VALUE_VARARG_(N, ...) EXPAND(FUNC_VALUE_VARARG_N(N, __VA_ARGS__)) 
 8673#define FUNC_VALUE_VARARG_N(N, ...) EXPAND(FAKE_VALUE_FUNC##N##_VARARG(__VA_ARGS__)) 
 8675#define FAKE_VOID_FUNC_VARARG(...)                                                                 \ 
 8676        EXPAND(FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)) 
 8678#define FUNC_VOID_VARARG_(N, ...) EXPAND(FUNC_VOID_VARARG_N(N, __VA_ARGS__)) 
 8680#define FUNC_VOID_VARARG_N(N, ...) EXPAND(FAKE_VOID_FUNC##N##_VARARG(__VA_ARGS__)) 
 8684#define DECLARE_FAKE_VALUE_FUNC(...)                                                               \ 
 8685        EXPAND(DECLARE_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)) 
 8687#define DECLARE_FUNC_VALUE_(N, ...) EXPAND(DECLARE_FUNC_VALUE_N(N, __VA_ARGS__)) 
 8689#define DECLARE_FUNC_VALUE_N(N, ...) EXPAND(DECLARE_FAKE_VALUE_FUNC##N(__VA_ARGS__)) 
 8691#define DECLARE_FAKE_VOID_FUNC(...)                                                                \ 
 8692        EXPAND(DECLARE_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)) 
 8694#define DECLARE_FUNC_VOID_(N, ...) EXPAND(DECLARE_FUNC_VOID_N(N, __VA_ARGS__)) 
 8696#define DECLARE_FUNC_VOID_N(N, ...) EXPAND(DECLARE_FAKE_VOID_FUNC##N(__VA_ARGS__)) 
 8698#define DECLARE_FAKE_VALUE_FUNC_VARARG(...)                                                        \ 
 8699        EXPAND(DECLARE_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)) 
 8701#define DECLARE_FUNC_VALUE_VARARG_(N, ...) EXPAND(DECLARE_FUNC_VALUE_VARARG_N(N, __VA_ARGS__)) 
 8703#define DECLARE_FUNC_VALUE_VARARG_N(N, ...) EXPAND(DECLARE_FAKE_VALUE_FUNC##N##_VARARG(__VA_ARGS__)) 
 8705#define DECLARE_FAKE_VOID_FUNC_VARARG(...)                                                         \ 
 8706        EXPAND(DECLARE_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)) 
 8708#define DECLARE_FUNC_VOID_VARARG_(N, ...) EXPAND(DECLARE_FUNC_VOID_VARARG_N(N, __VA_ARGS__)) 
 8710#define DECLARE_FUNC_VOID_VARARG_N(N, ...) EXPAND(DECLARE_FAKE_VOID_FUNC##N##_VARARG(__VA_ARGS__)) 
 8714#define DEFINE_FAKE_VALUE_FUNC(...)                                                                \ 
 8715        EXPAND(DEFINE_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)) 
 8717#define DEFINE_FUNC_VALUE_(N, ...) EXPAND(DEFINE_FUNC_VALUE_N(N, __VA_ARGS__)) 
 8719#define DEFINE_FUNC_VALUE_N(N, ...) EXPAND(DEFINE_FAKE_VALUE_FUNC##N(__VA_ARGS__)) 
 8721#define DEFINE_FAKE_VOID_FUNC(...)                                                                 \ 
 8722        EXPAND(DEFINE_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)) 
 8724#define DEFINE_FUNC_VOID_(N, ...) EXPAND(DEFINE_FUNC_VOID_N(N, __VA_ARGS__)) 
 8726#define DEFINE_FUNC_VOID_N(N, ...) EXPAND(DEFINE_FAKE_VOID_FUNC##N(__VA_ARGS__)) 
 8728#define DEFINE_FAKE_VALUE_FUNC_VARARG(...)                                                         \ 
 8729        EXPAND(DEFINE_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)) 
 8731#define DEFINE_FUNC_VALUE_VARARG_(N, ...) EXPAND(DEFINE_FUNC_VALUE_VARARG_N(N, __VA_ARGS__)) 
 8733#define DEFINE_FUNC_VALUE_VARARG_N(N, ...) EXPAND(DEFINE_FAKE_VALUE_FUNC##N##_VARARG(__VA_ARGS__)) 
 8735#define DEFINE_FAKE_VOID_FUNC_VARARG(...)                                                          \ 
 8736        EXPAND(DEFINE_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)) 
 8738#define DEFINE_FUNC_VOID_VARARG_(N, ...) EXPAND(DEFINE_FUNC_VOID_VARARG_N(N, __VA_ARGS__)) 
 8740#define DEFINE_FUNC_VOID_VARARG_N(N, ...) EXPAND(DEFINE_FAKE_VOID_FUNC##N##_VARARG(__VA_ARGS__)) 
#define FFF_END_EXTERN_C
Definition: fff.h:124
 
void(* fff_function_t)(void)
Definition: fff.h:139
 
#define FFF_CALL_HISTORY_LEN
Definition: fff.h:37
 
#define FFF_EXTERN_C
Definition: fff.h:123
 
unsigned int call_history_idx
Definition: fff.h:142