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
43#define SET_RETURN_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN) \
44 FUNCNAME##_fake.return_val_seq = ARRAY_POINTER; \
45 FUNCNAME##_fake.return_val_seq_len = ARRAY_LEN;
46#define SET_CUSTOM_FAKE_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN) \
47 FUNCNAME##_fake.custom_fake_seq = ARRAY_POINTER; \
48 FUNCNAME##_fake.custom_fake_seq_len = ARRAY_LEN;
51#define RESET_FAKE(FUNCNAME) { \
56#define DECLARE_ARG(type, n, FUNCNAME) \
58 type arg##n##_history[FFF_ARG_HISTORY_LEN];
60#define DECLARE_ALL_FUNC_COMMON \
61 unsigned int call_count; \
62 unsigned int arg_history_len; \
63 unsigned int arg_histories_dropped; \
65#define DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
66 RETURN_TYPE return_val_history[FFF_ARG_HISTORY_LEN];
68#define SAVE_ARG(FUNCNAME, n) \
69 memcpy((void*)&FUNCNAME##_fake.arg##n##_val, (void*)&arg##n, sizeof(arg##n));
71#define ROOM_FOR_MORE_HISTORY(FUNCNAME) \
72 FUNCNAME##_fake.call_count < FFF_ARG_HISTORY_LEN
74#define SAVE_RET_HISTORY(FUNCNAME, RETVAL) \
75 if ((FUNCNAME##_fake.call_count - 1) < FFF_ARG_HISTORY_LEN) \
76 memcpy((void *)&FUNCNAME##_fake.return_val_history[FUNCNAME##_fake.call_count - 1], (const void *) &RETVAL, sizeof(RETVAL)); \
78#define SAVE_ARG_HISTORY(FUNCNAME, ARGN) \
79 memcpy((void*)&FUNCNAME##_fake.arg##ARGN##_history[FUNCNAME##_fake.call_count], (void*)&arg##ARGN, sizeof(arg##ARGN));
81#define HISTORY_DROPPED(FUNCNAME) \
82 FUNCNAME##_fake.arg_histories_dropped++
84#define DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
85 RETURN_TYPE return_val; \
86 int return_val_seq_len; \
87 int return_val_seq_idx; \
88 RETURN_TYPE * return_val_seq; \
90#define DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
91 int custom_fake_seq_len; \
92 int custom_fake_seq_idx; \
94#define INCREMENT_CALL_COUNT(FUNCNAME) \
95 FUNCNAME##_fake.call_count++
97#define RETURN_FAKE_RESULT(FUNCNAME) \
98 if (FUNCNAME##_fake.return_val_seq_len){ \
99 if(FUNCNAME##_fake.return_val_seq_idx < FUNCNAME##_fake.return_val_seq_len) { \
100 SAVE_RET_HISTORY(FUNCNAME, FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_idx]) \
101 return FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_idx++]; \
103 SAVE_RET_HISTORY(FUNCNAME, FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_len-1]) \
104 return FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_len-1]; \
106 SAVE_RET_HISTORY(FUNCNAME, FUNCNAME##_fake.return_val) \
107 return FUNCNAME##_fake.return_val; \
110 #define FFF_EXTERN_C extern "C"{
111 #define FFF_END_EXTERN_C }
114 #define FFF_END_EXTERN_C
117#define DEFINE_RESET_FUNCTION(FUNCNAME) \
118 void FUNCNAME##_reset(void){ \
119 memset(&FUNCNAME##_fake, 0, sizeof(FUNCNAME##_fake)); \
120 FUNCNAME##_fake.arg_history_len = FFF_ARG_HISTORY_LEN; \
134#define DEFINE_FFF_GLOBALS \
139#define FFF_RESET_HISTORY() \
140 fff.call_history_idx = 0; \
141 memset(fff.call_history, 0, sizeof(fff.call_history));
143#define REGISTER_CALL(function) \
144 if(fff.call_history_idx < FFF_CALL_HISTORY_LEN) \
145 fff.call_history[fff.call_history_idx++] = (fff_function_t)function;
147#define DECLARE_FAKE_VOID_FUNC0(FUNCNAME) \
148 typedef struct FUNCNAME##_Fake { \
149 DECLARE_ALL_FUNC_COMMON \
150 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
151 void(*custom_fake)(void); \
152 void(**custom_fake_seq)(void); \
154 extern FUNCNAME##_Fake FUNCNAME##_fake; \
155 void FUNCNAME##_reset(void); \
156 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(void); \
158#define DEFINE_FAKE_VOID_FUNC0(FUNCNAME) \
159 FUNCNAME##_Fake FUNCNAME##_fake; \
160 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(void){ \
161 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
164 HISTORY_DROPPED(FUNCNAME); \
166 INCREMENT_CALL_COUNT(FUNCNAME); \
167 REGISTER_CALL(FUNCNAME); \
168 if (FUNCNAME##_fake.custom_fake_seq_len){ \
169 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
170 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](); \
173 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \
176 if (FUNCNAME##_fake.custom_fake){ \
177 FUNCNAME##_fake.custom_fake(); \
180 DEFINE_RESET_FUNCTION(FUNCNAME) \
182#define FAKE_VOID_FUNC0(FUNCNAME) \
183 DECLARE_FAKE_VOID_FUNC0(FUNCNAME) \
184 DEFINE_FAKE_VOID_FUNC0(FUNCNAME) \
187#define DECLARE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
188 typedef struct FUNCNAME##_Fake { \
189 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
190 DECLARE_ALL_FUNC_COMMON \
191 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
192 void(*custom_fake)(ARG0_TYPE arg0); \
193 void(**custom_fake_seq)(ARG0_TYPE arg0); \
195 extern FUNCNAME##_Fake FUNCNAME##_fake; \
196 void FUNCNAME##_reset(void); \
197 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0); \
199#define DEFINE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
200 FUNCNAME##_Fake FUNCNAME##_fake; \
201 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0){ \
202 SAVE_ARG(FUNCNAME, 0); \
203 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
204 SAVE_ARG_HISTORY(FUNCNAME, 0); \
207 HISTORY_DROPPED(FUNCNAME); \
209 INCREMENT_CALL_COUNT(FUNCNAME); \
210 REGISTER_CALL(FUNCNAME); \
211 if (FUNCNAME##_fake.custom_fake_seq_len){ \
212 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
213 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0); \
216 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \
219 if (FUNCNAME##_fake.custom_fake){ \
220 FUNCNAME##_fake.custom_fake(arg0); \
223 DEFINE_RESET_FUNCTION(FUNCNAME) \
225#define FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
226 DECLARE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
227 DEFINE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
230#define DECLARE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
231 typedef struct FUNCNAME##_Fake { \
232 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
233 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
234 DECLARE_ALL_FUNC_COMMON \
235 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
236 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
237 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
239 extern FUNCNAME##_Fake FUNCNAME##_fake; \
240 void FUNCNAME##_reset(void); \
241 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1); \
243#define DEFINE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
244 FUNCNAME##_Fake FUNCNAME##_fake; \
245 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1){ \
246 SAVE_ARG(FUNCNAME, 0); \
247 SAVE_ARG(FUNCNAME, 1); \
248 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
249 SAVE_ARG_HISTORY(FUNCNAME, 0); \
250 SAVE_ARG_HISTORY(FUNCNAME, 1); \
253 HISTORY_DROPPED(FUNCNAME); \
255 INCREMENT_CALL_COUNT(FUNCNAME); \
256 REGISTER_CALL(FUNCNAME); \
257 if (FUNCNAME##_fake.custom_fake_seq_len){ \
258 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
259 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1); \
262 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \
265 if (FUNCNAME##_fake.custom_fake){ \
266 FUNCNAME##_fake.custom_fake(arg0, arg1); \
269 DEFINE_RESET_FUNCTION(FUNCNAME) \
271#define FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
272 DECLARE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
273 DEFINE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
276#define DECLARE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
277 typedef struct FUNCNAME##_Fake { \
278 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
279 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
280 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
281 DECLARE_ALL_FUNC_COMMON \
282 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
283 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
284 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
286 extern FUNCNAME##_Fake FUNCNAME##_fake; \
287 void FUNCNAME##_reset(void); \
288 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
290#define DEFINE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
291 FUNCNAME##_Fake FUNCNAME##_fake; \
292 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2){ \
293 SAVE_ARG(FUNCNAME, 0); \
294 SAVE_ARG(FUNCNAME, 1); \
295 SAVE_ARG(FUNCNAME, 2); \
296 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
297 SAVE_ARG_HISTORY(FUNCNAME, 0); \
298 SAVE_ARG_HISTORY(FUNCNAME, 1); \
299 SAVE_ARG_HISTORY(FUNCNAME, 2); \
302 HISTORY_DROPPED(FUNCNAME); \
304 INCREMENT_CALL_COUNT(FUNCNAME); \
305 REGISTER_CALL(FUNCNAME); \
306 if (FUNCNAME##_fake.custom_fake_seq_len){ \
307 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
308 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2); \
311 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \
314 if (FUNCNAME##_fake.custom_fake){ \
315 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
318 DEFINE_RESET_FUNCTION(FUNCNAME) \
320#define FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
321 DECLARE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
322 DEFINE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
325#define DECLARE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
326 typedef struct FUNCNAME##_Fake { \
327 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
328 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
329 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
330 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
331 DECLARE_ALL_FUNC_COMMON \
332 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
333 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
334 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
336 extern FUNCNAME##_Fake FUNCNAME##_fake; \
337 void FUNCNAME##_reset(void); \
338 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
340#define DEFINE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
341 FUNCNAME##_Fake FUNCNAME##_fake; \
342 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3){ \
343 SAVE_ARG(FUNCNAME, 0); \
344 SAVE_ARG(FUNCNAME, 1); \
345 SAVE_ARG(FUNCNAME, 2); \
346 SAVE_ARG(FUNCNAME, 3); \
347 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
348 SAVE_ARG_HISTORY(FUNCNAME, 0); \
349 SAVE_ARG_HISTORY(FUNCNAME, 1); \
350 SAVE_ARG_HISTORY(FUNCNAME, 2); \
351 SAVE_ARG_HISTORY(FUNCNAME, 3); \
354 HISTORY_DROPPED(FUNCNAME); \
356 INCREMENT_CALL_COUNT(FUNCNAME); \
357 REGISTER_CALL(FUNCNAME); \
358 if (FUNCNAME##_fake.custom_fake_seq_len){ \
359 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
360 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3); \
363 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \
366 if (FUNCNAME##_fake.custom_fake){ \
367 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
370 DEFINE_RESET_FUNCTION(FUNCNAME) \
372#define FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
373 DECLARE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
374 DEFINE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
377#define DECLARE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
378 typedef struct FUNCNAME##_Fake { \
379 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
380 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
381 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
382 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
383 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
384 DECLARE_ALL_FUNC_COMMON \
385 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
386 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
387 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
389 extern FUNCNAME##_Fake FUNCNAME##_fake; \
390 void FUNCNAME##_reset(void); \
391 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
393#define DEFINE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
394 FUNCNAME##_Fake FUNCNAME##_fake; \
395 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4){ \
396 SAVE_ARG(FUNCNAME, 0); \
397 SAVE_ARG(FUNCNAME, 1); \
398 SAVE_ARG(FUNCNAME, 2); \
399 SAVE_ARG(FUNCNAME, 3); \
400 SAVE_ARG(FUNCNAME, 4); \
401 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
402 SAVE_ARG_HISTORY(FUNCNAME, 0); \
403 SAVE_ARG_HISTORY(FUNCNAME, 1); \
404 SAVE_ARG_HISTORY(FUNCNAME, 2); \
405 SAVE_ARG_HISTORY(FUNCNAME, 3); \
406 SAVE_ARG_HISTORY(FUNCNAME, 4); \
409 HISTORY_DROPPED(FUNCNAME); \
411 INCREMENT_CALL_COUNT(FUNCNAME); \
412 REGISTER_CALL(FUNCNAME); \
413 if (FUNCNAME##_fake.custom_fake_seq_len){ \
414 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
415 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4); \
418 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \
421 if (FUNCNAME##_fake.custom_fake){ \
422 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
425 DEFINE_RESET_FUNCTION(FUNCNAME) \
427#define FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
428 DECLARE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
429 DEFINE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
432#define DECLARE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
433 typedef struct FUNCNAME##_Fake { \
434 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
435 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
436 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
437 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
438 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
439 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
440 DECLARE_ALL_FUNC_COMMON \
441 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
442 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
443 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
445 extern FUNCNAME##_Fake FUNCNAME##_fake; \
446 void FUNCNAME##_reset(void); \
447 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
449#define DEFINE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
450 FUNCNAME##_Fake FUNCNAME##_fake; \
451 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5){ \
452 SAVE_ARG(FUNCNAME, 0); \
453 SAVE_ARG(FUNCNAME, 1); \
454 SAVE_ARG(FUNCNAME, 2); \
455 SAVE_ARG(FUNCNAME, 3); \
456 SAVE_ARG(FUNCNAME, 4); \
457 SAVE_ARG(FUNCNAME, 5); \
458 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
459 SAVE_ARG_HISTORY(FUNCNAME, 0); \
460 SAVE_ARG_HISTORY(FUNCNAME, 1); \
461 SAVE_ARG_HISTORY(FUNCNAME, 2); \
462 SAVE_ARG_HISTORY(FUNCNAME, 3); \
463 SAVE_ARG_HISTORY(FUNCNAME, 4); \
464 SAVE_ARG_HISTORY(FUNCNAME, 5); \
467 HISTORY_DROPPED(FUNCNAME); \
469 INCREMENT_CALL_COUNT(FUNCNAME); \
470 REGISTER_CALL(FUNCNAME); \
471 if (FUNCNAME##_fake.custom_fake_seq_len){ \
472 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
473 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5); \
476 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \
479 if (FUNCNAME##_fake.custom_fake){ \
480 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
483 DEFINE_RESET_FUNCTION(FUNCNAME) \
485#define FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
486 DECLARE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
487 DEFINE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
490#define DECLARE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
491 typedef struct FUNCNAME##_Fake { \
492 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
493 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
494 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
495 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
496 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
497 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
498 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
499 DECLARE_ALL_FUNC_COMMON \
500 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
501 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
502 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
504 extern FUNCNAME##_Fake FUNCNAME##_fake; \
505 void FUNCNAME##_reset(void); \
506 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
508#define DEFINE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
509 FUNCNAME##_Fake FUNCNAME##_fake; \
510 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6){ \
511 SAVE_ARG(FUNCNAME, 0); \
512 SAVE_ARG(FUNCNAME, 1); \
513 SAVE_ARG(FUNCNAME, 2); \
514 SAVE_ARG(FUNCNAME, 3); \
515 SAVE_ARG(FUNCNAME, 4); \
516 SAVE_ARG(FUNCNAME, 5); \
517 SAVE_ARG(FUNCNAME, 6); \
518 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
519 SAVE_ARG_HISTORY(FUNCNAME, 0); \
520 SAVE_ARG_HISTORY(FUNCNAME, 1); \
521 SAVE_ARG_HISTORY(FUNCNAME, 2); \
522 SAVE_ARG_HISTORY(FUNCNAME, 3); \
523 SAVE_ARG_HISTORY(FUNCNAME, 4); \
524 SAVE_ARG_HISTORY(FUNCNAME, 5); \
525 SAVE_ARG_HISTORY(FUNCNAME, 6); \
528 HISTORY_DROPPED(FUNCNAME); \
530 INCREMENT_CALL_COUNT(FUNCNAME); \
531 REGISTER_CALL(FUNCNAME); \
532 if (FUNCNAME##_fake.custom_fake_seq_len){ \
533 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
534 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
537 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
540 if (FUNCNAME##_fake.custom_fake){ \
541 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
544 DEFINE_RESET_FUNCTION(FUNCNAME) \
546#define FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
547 DECLARE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
548 DEFINE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
551#define DECLARE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
552 typedef struct FUNCNAME##_Fake { \
553 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
554 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
555 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
556 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
557 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
558 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
559 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
560 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
561 DECLARE_ALL_FUNC_COMMON \
562 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
563 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
564 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
566 extern FUNCNAME##_Fake FUNCNAME##_fake; \
567 void FUNCNAME##_reset(void); \
568 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
570#define DEFINE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
571 FUNCNAME##_Fake FUNCNAME##_fake; \
572 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7){ \
573 SAVE_ARG(FUNCNAME, 0); \
574 SAVE_ARG(FUNCNAME, 1); \
575 SAVE_ARG(FUNCNAME, 2); \
576 SAVE_ARG(FUNCNAME, 3); \
577 SAVE_ARG(FUNCNAME, 4); \
578 SAVE_ARG(FUNCNAME, 5); \
579 SAVE_ARG(FUNCNAME, 6); \
580 SAVE_ARG(FUNCNAME, 7); \
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); \
589 SAVE_ARG_HISTORY(FUNCNAME, 7); \
592 HISTORY_DROPPED(FUNCNAME); \
594 INCREMENT_CALL_COUNT(FUNCNAME); \
595 REGISTER_CALL(FUNCNAME); \
596 if (FUNCNAME##_fake.custom_fake_seq_len){ \
597 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
598 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
601 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
604 if (FUNCNAME##_fake.custom_fake){ \
605 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
608 DEFINE_RESET_FUNCTION(FUNCNAME) \
610#define FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
611 DECLARE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
612 DEFINE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
615#define DECLARE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
616 typedef struct FUNCNAME##_Fake { \
617 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
618 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
619 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
620 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
621 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
622 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
623 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
624 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
625 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
626 DECLARE_ALL_FUNC_COMMON \
627 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
628 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
629 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
631 extern FUNCNAME##_Fake FUNCNAME##_fake; \
632 void FUNCNAME##_reset(void); \
633 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
635#define DEFINE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
636 FUNCNAME##_Fake FUNCNAME##_fake; \
637 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8){ \
638 SAVE_ARG(FUNCNAME, 0); \
639 SAVE_ARG(FUNCNAME, 1); \
640 SAVE_ARG(FUNCNAME, 2); \
641 SAVE_ARG(FUNCNAME, 3); \
642 SAVE_ARG(FUNCNAME, 4); \
643 SAVE_ARG(FUNCNAME, 5); \
644 SAVE_ARG(FUNCNAME, 6); \
645 SAVE_ARG(FUNCNAME, 7); \
646 SAVE_ARG(FUNCNAME, 8); \
647 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
648 SAVE_ARG_HISTORY(FUNCNAME, 0); \
649 SAVE_ARG_HISTORY(FUNCNAME, 1); \
650 SAVE_ARG_HISTORY(FUNCNAME, 2); \
651 SAVE_ARG_HISTORY(FUNCNAME, 3); \
652 SAVE_ARG_HISTORY(FUNCNAME, 4); \
653 SAVE_ARG_HISTORY(FUNCNAME, 5); \
654 SAVE_ARG_HISTORY(FUNCNAME, 6); \
655 SAVE_ARG_HISTORY(FUNCNAME, 7); \
656 SAVE_ARG_HISTORY(FUNCNAME, 8); \
659 HISTORY_DROPPED(FUNCNAME); \
661 INCREMENT_CALL_COUNT(FUNCNAME); \
662 REGISTER_CALL(FUNCNAME); \
663 if (FUNCNAME##_fake.custom_fake_seq_len){ \
664 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
665 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
668 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
671 if (FUNCNAME##_fake.custom_fake){ \
672 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
675 DEFINE_RESET_FUNCTION(FUNCNAME) \
677#define FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
678 DECLARE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
679 DEFINE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
682#define DECLARE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
683 typedef struct FUNCNAME##_Fake { \
684 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
685 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
686 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
687 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
688 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
689 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
690 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
691 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
692 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
693 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
694 DECLARE_ALL_FUNC_COMMON \
695 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
696 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
697 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
699 extern FUNCNAME##_Fake FUNCNAME##_fake; \
700 void FUNCNAME##_reset(void); \
701 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
703#define DEFINE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
704 FUNCNAME##_Fake FUNCNAME##_fake; \
705 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9){ \
706 SAVE_ARG(FUNCNAME, 0); \
707 SAVE_ARG(FUNCNAME, 1); \
708 SAVE_ARG(FUNCNAME, 2); \
709 SAVE_ARG(FUNCNAME, 3); \
710 SAVE_ARG(FUNCNAME, 4); \
711 SAVE_ARG(FUNCNAME, 5); \
712 SAVE_ARG(FUNCNAME, 6); \
713 SAVE_ARG(FUNCNAME, 7); \
714 SAVE_ARG(FUNCNAME, 8); \
715 SAVE_ARG(FUNCNAME, 9); \
716 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
717 SAVE_ARG_HISTORY(FUNCNAME, 0); \
718 SAVE_ARG_HISTORY(FUNCNAME, 1); \
719 SAVE_ARG_HISTORY(FUNCNAME, 2); \
720 SAVE_ARG_HISTORY(FUNCNAME, 3); \
721 SAVE_ARG_HISTORY(FUNCNAME, 4); \
722 SAVE_ARG_HISTORY(FUNCNAME, 5); \
723 SAVE_ARG_HISTORY(FUNCNAME, 6); \
724 SAVE_ARG_HISTORY(FUNCNAME, 7); \
725 SAVE_ARG_HISTORY(FUNCNAME, 8); \
726 SAVE_ARG_HISTORY(FUNCNAME, 9); \
729 HISTORY_DROPPED(FUNCNAME); \
731 INCREMENT_CALL_COUNT(FUNCNAME); \
732 REGISTER_CALL(FUNCNAME); \
733 if (FUNCNAME##_fake.custom_fake_seq_len){ \
734 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
735 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
738 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
741 if (FUNCNAME##_fake.custom_fake){ \
742 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
745 DEFINE_RESET_FUNCTION(FUNCNAME) \
747#define FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
748 DECLARE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
749 DEFINE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
752#define DECLARE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
753 typedef struct FUNCNAME##_Fake { \
754 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
755 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
756 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
757 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
758 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
759 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
760 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
761 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
762 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
763 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
764 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
765 DECLARE_ALL_FUNC_COMMON \
766 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
767 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
768 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
770 extern FUNCNAME##_Fake FUNCNAME##_fake; \
771 void FUNCNAME##_reset(void); \
772 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
774#define DEFINE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
775 FUNCNAME##_Fake FUNCNAME##_fake; \
776 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10){ \
777 SAVE_ARG(FUNCNAME, 0); \
778 SAVE_ARG(FUNCNAME, 1); \
779 SAVE_ARG(FUNCNAME, 2); \
780 SAVE_ARG(FUNCNAME, 3); \
781 SAVE_ARG(FUNCNAME, 4); \
782 SAVE_ARG(FUNCNAME, 5); \
783 SAVE_ARG(FUNCNAME, 6); \
784 SAVE_ARG(FUNCNAME, 7); \
785 SAVE_ARG(FUNCNAME, 8); \
786 SAVE_ARG(FUNCNAME, 9); \
787 SAVE_ARG(FUNCNAME, 10); \
788 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
789 SAVE_ARG_HISTORY(FUNCNAME, 0); \
790 SAVE_ARG_HISTORY(FUNCNAME, 1); \
791 SAVE_ARG_HISTORY(FUNCNAME, 2); \
792 SAVE_ARG_HISTORY(FUNCNAME, 3); \
793 SAVE_ARG_HISTORY(FUNCNAME, 4); \
794 SAVE_ARG_HISTORY(FUNCNAME, 5); \
795 SAVE_ARG_HISTORY(FUNCNAME, 6); \
796 SAVE_ARG_HISTORY(FUNCNAME, 7); \
797 SAVE_ARG_HISTORY(FUNCNAME, 8); \
798 SAVE_ARG_HISTORY(FUNCNAME, 9); \
799 SAVE_ARG_HISTORY(FUNCNAME, 10); \
802 HISTORY_DROPPED(FUNCNAME); \
804 INCREMENT_CALL_COUNT(FUNCNAME); \
805 REGISTER_CALL(FUNCNAME); \
806 if (FUNCNAME##_fake.custom_fake_seq_len){ \
807 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
808 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
811 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
814 if (FUNCNAME##_fake.custom_fake){ \
815 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
818 DEFINE_RESET_FUNCTION(FUNCNAME) \
820#define FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
821 DECLARE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
822 DEFINE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
825#define DECLARE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
826 typedef struct FUNCNAME##_Fake { \
827 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
828 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
829 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
830 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
831 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
832 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
833 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
834 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
835 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
836 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
837 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
838 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
839 DECLARE_ALL_FUNC_COMMON \
840 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
841 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
842 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
844 extern FUNCNAME##_Fake FUNCNAME##_fake; \
845 void FUNCNAME##_reset(void); \
846 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
848#define DEFINE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
849 FUNCNAME##_Fake FUNCNAME##_fake; \
850 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11){ \
851 SAVE_ARG(FUNCNAME, 0); \
852 SAVE_ARG(FUNCNAME, 1); \
853 SAVE_ARG(FUNCNAME, 2); \
854 SAVE_ARG(FUNCNAME, 3); \
855 SAVE_ARG(FUNCNAME, 4); \
856 SAVE_ARG(FUNCNAME, 5); \
857 SAVE_ARG(FUNCNAME, 6); \
858 SAVE_ARG(FUNCNAME, 7); \
859 SAVE_ARG(FUNCNAME, 8); \
860 SAVE_ARG(FUNCNAME, 9); \
861 SAVE_ARG(FUNCNAME, 10); \
862 SAVE_ARG(FUNCNAME, 11); \
863 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
864 SAVE_ARG_HISTORY(FUNCNAME, 0); \
865 SAVE_ARG_HISTORY(FUNCNAME, 1); \
866 SAVE_ARG_HISTORY(FUNCNAME, 2); \
867 SAVE_ARG_HISTORY(FUNCNAME, 3); \
868 SAVE_ARG_HISTORY(FUNCNAME, 4); \
869 SAVE_ARG_HISTORY(FUNCNAME, 5); \
870 SAVE_ARG_HISTORY(FUNCNAME, 6); \
871 SAVE_ARG_HISTORY(FUNCNAME, 7); \
872 SAVE_ARG_HISTORY(FUNCNAME, 8); \
873 SAVE_ARG_HISTORY(FUNCNAME, 9); \
874 SAVE_ARG_HISTORY(FUNCNAME, 10); \
875 SAVE_ARG_HISTORY(FUNCNAME, 11); \
878 HISTORY_DROPPED(FUNCNAME); \
880 INCREMENT_CALL_COUNT(FUNCNAME); \
881 REGISTER_CALL(FUNCNAME); \
882 if (FUNCNAME##_fake.custom_fake_seq_len){ \
883 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
884 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
887 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
890 if (FUNCNAME##_fake.custom_fake){ \
891 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
894 DEFINE_RESET_FUNCTION(FUNCNAME) \
896#define FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
897 DECLARE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
898 DEFINE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
901#define DECLARE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
902 typedef struct FUNCNAME##_Fake { \
903 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
904 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
905 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
906 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
907 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
908 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
909 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
910 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
911 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
912 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
913 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
914 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
915 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
916 DECLARE_ALL_FUNC_COMMON \
917 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
918 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
919 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
921 extern FUNCNAME##_Fake FUNCNAME##_fake; \
922 void FUNCNAME##_reset(void); \
923 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
925#define DEFINE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
926 FUNCNAME##_Fake FUNCNAME##_fake; \
927 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12){ \
928 SAVE_ARG(FUNCNAME, 0); \
929 SAVE_ARG(FUNCNAME, 1); \
930 SAVE_ARG(FUNCNAME, 2); \
931 SAVE_ARG(FUNCNAME, 3); \
932 SAVE_ARG(FUNCNAME, 4); \
933 SAVE_ARG(FUNCNAME, 5); \
934 SAVE_ARG(FUNCNAME, 6); \
935 SAVE_ARG(FUNCNAME, 7); \
936 SAVE_ARG(FUNCNAME, 8); \
937 SAVE_ARG(FUNCNAME, 9); \
938 SAVE_ARG(FUNCNAME, 10); \
939 SAVE_ARG(FUNCNAME, 11); \
940 SAVE_ARG(FUNCNAME, 12); \
941 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
942 SAVE_ARG_HISTORY(FUNCNAME, 0); \
943 SAVE_ARG_HISTORY(FUNCNAME, 1); \
944 SAVE_ARG_HISTORY(FUNCNAME, 2); \
945 SAVE_ARG_HISTORY(FUNCNAME, 3); \
946 SAVE_ARG_HISTORY(FUNCNAME, 4); \
947 SAVE_ARG_HISTORY(FUNCNAME, 5); \
948 SAVE_ARG_HISTORY(FUNCNAME, 6); \
949 SAVE_ARG_HISTORY(FUNCNAME, 7); \
950 SAVE_ARG_HISTORY(FUNCNAME, 8); \
951 SAVE_ARG_HISTORY(FUNCNAME, 9); \
952 SAVE_ARG_HISTORY(FUNCNAME, 10); \
953 SAVE_ARG_HISTORY(FUNCNAME, 11); \
954 SAVE_ARG_HISTORY(FUNCNAME, 12); \
957 HISTORY_DROPPED(FUNCNAME); \
959 INCREMENT_CALL_COUNT(FUNCNAME); \
960 REGISTER_CALL(FUNCNAME); \
961 if (FUNCNAME##_fake.custom_fake_seq_len){ \
962 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
963 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
966 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
969 if (FUNCNAME##_fake.custom_fake){ \
970 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
973 DEFINE_RESET_FUNCTION(FUNCNAME) \
975#define FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
976 DECLARE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
977 DEFINE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
980#define DECLARE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
981 typedef struct FUNCNAME##_Fake { \
982 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
983 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
984 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
985 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
986 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
987 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
988 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
989 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
990 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
991 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
992 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
993 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
994 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
995 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
996 DECLARE_ALL_FUNC_COMMON \
997 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
998 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
999 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
1000 } FUNCNAME##_Fake; \
1001 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1002 void FUNCNAME##_reset(void); \
1003 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
1005#define DEFINE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
1006 FUNCNAME##_Fake FUNCNAME##_fake; \
1007 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13){ \
1008 SAVE_ARG(FUNCNAME, 0); \
1009 SAVE_ARG(FUNCNAME, 1); \
1010 SAVE_ARG(FUNCNAME, 2); \
1011 SAVE_ARG(FUNCNAME, 3); \
1012 SAVE_ARG(FUNCNAME, 4); \
1013 SAVE_ARG(FUNCNAME, 5); \
1014 SAVE_ARG(FUNCNAME, 6); \
1015 SAVE_ARG(FUNCNAME, 7); \
1016 SAVE_ARG(FUNCNAME, 8); \
1017 SAVE_ARG(FUNCNAME, 9); \
1018 SAVE_ARG(FUNCNAME, 10); \
1019 SAVE_ARG(FUNCNAME, 11); \
1020 SAVE_ARG(FUNCNAME, 12); \
1021 SAVE_ARG(FUNCNAME, 13); \
1022 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1023 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1024 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1025 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1026 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1027 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1028 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1029 SAVE_ARG_HISTORY(FUNCNAME, 6); \
1030 SAVE_ARG_HISTORY(FUNCNAME, 7); \
1031 SAVE_ARG_HISTORY(FUNCNAME, 8); \
1032 SAVE_ARG_HISTORY(FUNCNAME, 9); \
1033 SAVE_ARG_HISTORY(FUNCNAME, 10); \
1034 SAVE_ARG_HISTORY(FUNCNAME, 11); \
1035 SAVE_ARG_HISTORY(FUNCNAME, 12); \
1036 SAVE_ARG_HISTORY(FUNCNAME, 13); \
1039 HISTORY_DROPPED(FUNCNAME); \
1041 INCREMENT_CALL_COUNT(FUNCNAME); \
1042 REGISTER_CALL(FUNCNAME); \
1043 if (FUNCNAME##_fake.custom_fake_seq_len){ \
1044 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1045 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
1048 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
1051 if (FUNCNAME##_fake.custom_fake){ \
1052 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
1055 DEFINE_RESET_FUNCTION(FUNCNAME) \
1057#define FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
1058 DECLARE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
1059 DEFINE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
1062#define DECLARE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
1063 typedef struct FUNCNAME##_Fake { \
1064 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1065 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1066 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1067 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1068 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1069 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1070 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
1071 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
1072 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
1073 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
1074 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
1075 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
1076 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
1077 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
1078 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
1079 DECLARE_ALL_FUNC_COMMON \
1080 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1081 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
1082 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
1083 } FUNCNAME##_Fake; \
1084 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1085 void FUNCNAME##_reset(void); \
1086 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
1088#define DEFINE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
1089 FUNCNAME##_Fake FUNCNAME##_fake; \
1090 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14){ \
1091 SAVE_ARG(FUNCNAME, 0); \
1092 SAVE_ARG(FUNCNAME, 1); \
1093 SAVE_ARG(FUNCNAME, 2); \
1094 SAVE_ARG(FUNCNAME, 3); \
1095 SAVE_ARG(FUNCNAME, 4); \
1096 SAVE_ARG(FUNCNAME, 5); \
1097 SAVE_ARG(FUNCNAME, 6); \
1098 SAVE_ARG(FUNCNAME, 7); \
1099 SAVE_ARG(FUNCNAME, 8); \
1100 SAVE_ARG(FUNCNAME, 9); \
1101 SAVE_ARG(FUNCNAME, 10); \
1102 SAVE_ARG(FUNCNAME, 11); \
1103 SAVE_ARG(FUNCNAME, 12); \
1104 SAVE_ARG(FUNCNAME, 13); \
1105 SAVE_ARG(FUNCNAME, 14); \
1106 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1107 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1108 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1109 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1110 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1111 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1112 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1113 SAVE_ARG_HISTORY(FUNCNAME, 6); \
1114 SAVE_ARG_HISTORY(FUNCNAME, 7); \
1115 SAVE_ARG_HISTORY(FUNCNAME, 8); \
1116 SAVE_ARG_HISTORY(FUNCNAME, 9); \
1117 SAVE_ARG_HISTORY(FUNCNAME, 10); \
1118 SAVE_ARG_HISTORY(FUNCNAME, 11); \
1119 SAVE_ARG_HISTORY(FUNCNAME, 12); \
1120 SAVE_ARG_HISTORY(FUNCNAME, 13); \
1121 SAVE_ARG_HISTORY(FUNCNAME, 14); \
1124 HISTORY_DROPPED(FUNCNAME); \
1126 INCREMENT_CALL_COUNT(FUNCNAME); \
1127 REGISTER_CALL(FUNCNAME); \
1128 if (FUNCNAME##_fake.custom_fake_seq_len){ \
1129 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1130 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
1133 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
1136 if (FUNCNAME##_fake.custom_fake){ \
1137 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
1140 DEFINE_RESET_FUNCTION(FUNCNAME) \
1142#define FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
1143 DECLARE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
1144 DEFINE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
1147#define DECLARE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
1148 typedef struct FUNCNAME##_Fake { \
1149 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1150 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1151 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1152 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1153 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1154 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1155 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
1156 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
1157 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
1158 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
1159 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
1160 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
1161 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
1162 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
1163 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
1164 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
1165 DECLARE_ALL_FUNC_COMMON \
1166 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1167 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
1168 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
1169 } FUNCNAME##_Fake; \
1170 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1171 void FUNCNAME##_reset(void); \
1172 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
1174#define DEFINE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
1175 FUNCNAME##_Fake FUNCNAME##_fake; \
1176 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15){ \
1177 SAVE_ARG(FUNCNAME, 0); \
1178 SAVE_ARG(FUNCNAME, 1); \
1179 SAVE_ARG(FUNCNAME, 2); \
1180 SAVE_ARG(FUNCNAME, 3); \
1181 SAVE_ARG(FUNCNAME, 4); \
1182 SAVE_ARG(FUNCNAME, 5); \
1183 SAVE_ARG(FUNCNAME, 6); \
1184 SAVE_ARG(FUNCNAME, 7); \
1185 SAVE_ARG(FUNCNAME, 8); \
1186 SAVE_ARG(FUNCNAME, 9); \
1187 SAVE_ARG(FUNCNAME, 10); \
1188 SAVE_ARG(FUNCNAME, 11); \
1189 SAVE_ARG(FUNCNAME, 12); \
1190 SAVE_ARG(FUNCNAME, 13); \
1191 SAVE_ARG(FUNCNAME, 14); \
1192 SAVE_ARG(FUNCNAME, 15); \
1193 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1194 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1195 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1196 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1197 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1198 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1199 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1200 SAVE_ARG_HISTORY(FUNCNAME, 6); \
1201 SAVE_ARG_HISTORY(FUNCNAME, 7); \
1202 SAVE_ARG_HISTORY(FUNCNAME, 8); \
1203 SAVE_ARG_HISTORY(FUNCNAME, 9); \
1204 SAVE_ARG_HISTORY(FUNCNAME, 10); \
1205 SAVE_ARG_HISTORY(FUNCNAME, 11); \
1206 SAVE_ARG_HISTORY(FUNCNAME, 12); \
1207 SAVE_ARG_HISTORY(FUNCNAME, 13); \
1208 SAVE_ARG_HISTORY(FUNCNAME, 14); \
1209 SAVE_ARG_HISTORY(FUNCNAME, 15); \
1212 HISTORY_DROPPED(FUNCNAME); \
1214 INCREMENT_CALL_COUNT(FUNCNAME); \
1215 REGISTER_CALL(FUNCNAME); \
1216 if (FUNCNAME##_fake.custom_fake_seq_len){ \
1217 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1218 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
1221 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
1224 if (FUNCNAME##_fake.custom_fake){ \
1225 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
1228 DEFINE_RESET_FUNCTION(FUNCNAME) \
1230#define FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
1231 DECLARE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
1232 DEFINE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
1235#define DECLARE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
1236 typedef struct FUNCNAME##_Fake { \
1237 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1238 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1239 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1240 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1241 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1242 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1243 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
1244 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
1245 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
1246 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
1247 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
1248 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
1249 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
1250 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
1251 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
1252 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
1253 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
1254 DECLARE_ALL_FUNC_COMMON \
1255 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1256 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
1257 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
1258 } FUNCNAME##_Fake; \
1259 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1260 void FUNCNAME##_reset(void); \
1261 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
1263#define DEFINE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
1264 FUNCNAME##_Fake FUNCNAME##_fake; \
1265 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16){ \
1266 SAVE_ARG(FUNCNAME, 0); \
1267 SAVE_ARG(FUNCNAME, 1); \
1268 SAVE_ARG(FUNCNAME, 2); \
1269 SAVE_ARG(FUNCNAME, 3); \
1270 SAVE_ARG(FUNCNAME, 4); \
1271 SAVE_ARG(FUNCNAME, 5); \
1272 SAVE_ARG(FUNCNAME, 6); \
1273 SAVE_ARG(FUNCNAME, 7); \
1274 SAVE_ARG(FUNCNAME, 8); \
1275 SAVE_ARG(FUNCNAME, 9); \
1276 SAVE_ARG(FUNCNAME, 10); \
1277 SAVE_ARG(FUNCNAME, 11); \
1278 SAVE_ARG(FUNCNAME, 12); \
1279 SAVE_ARG(FUNCNAME, 13); \
1280 SAVE_ARG(FUNCNAME, 14); \
1281 SAVE_ARG(FUNCNAME, 15); \
1282 SAVE_ARG(FUNCNAME, 16); \
1283 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1284 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1285 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1286 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1287 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1288 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1289 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1290 SAVE_ARG_HISTORY(FUNCNAME, 6); \
1291 SAVE_ARG_HISTORY(FUNCNAME, 7); \
1292 SAVE_ARG_HISTORY(FUNCNAME, 8); \
1293 SAVE_ARG_HISTORY(FUNCNAME, 9); \
1294 SAVE_ARG_HISTORY(FUNCNAME, 10); \
1295 SAVE_ARG_HISTORY(FUNCNAME, 11); \
1296 SAVE_ARG_HISTORY(FUNCNAME, 12); \
1297 SAVE_ARG_HISTORY(FUNCNAME, 13); \
1298 SAVE_ARG_HISTORY(FUNCNAME, 14); \
1299 SAVE_ARG_HISTORY(FUNCNAME, 15); \
1300 SAVE_ARG_HISTORY(FUNCNAME, 16); \
1303 HISTORY_DROPPED(FUNCNAME); \
1305 INCREMENT_CALL_COUNT(FUNCNAME); \
1306 REGISTER_CALL(FUNCNAME); \
1307 if (FUNCNAME##_fake.custom_fake_seq_len){ \
1308 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1309 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
1312 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
1315 if (FUNCNAME##_fake.custom_fake){ \
1316 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
1319 DEFINE_RESET_FUNCTION(FUNCNAME) \
1321#define FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
1322 DECLARE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
1323 DEFINE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
1326#define DECLARE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
1327 typedef struct FUNCNAME##_Fake { \
1328 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1329 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1330 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1331 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1332 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1333 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1334 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
1335 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
1336 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
1337 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
1338 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
1339 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
1340 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
1341 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
1342 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
1343 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
1344 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
1345 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
1346 DECLARE_ALL_FUNC_COMMON \
1347 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1348 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
1349 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
1350 } FUNCNAME##_Fake; \
1351 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1352 void FUNCNAME##_reset(void); \
1353 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
1355#define DEFINE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
1356 FUNCNAME##_Fake FUNCNAME##_fake; \
1357 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17){ \
1358 SAVE_ARG(FUNCNAME, 0); \
1359 SAVE_ARG(FUNCNAME, 1); \
1360 SAVE_ARG(FUNCNAME, 2); \
1361 SAVE_ARG(FUNCNAME, 3); \
1362 SAVE_ARG(FUNCNAME, 4); \
1363 SAVE_ARG(FUNCNAME, 5); \
1364 SAVE_ARG(FUNCNAME, 6); \
1365 SAVE_ARG(FUNCNAME, 7); \
1366 SAVE_ARG(FUNCNAME, 8); \
1367 SAVE_ARG(FUNCNAME, 9); \
1368 SAVE_ARG(FUNCNAME, 10); \
1369 SAVE_ARG(FUNCNAME, 11); \
1370 SAVE_ARG(FUNCNAME, 12); \
1371 SAVE_ARG(FUNCNAME, 13); \
1372 SAVE_ARG(FUNCNAME, 14); \
1373 SAVE_ARG(FUNCNAME, 15); \
1374 SAVE_ARG(FUNCNAME, 16); \
1375 SAVE_ARG(FUNCNAME, 17); \
1376 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1377 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1378 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1379 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1380 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1381 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1382 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1383 SAVE_ARG_HISTORY(FUNCNAME, 6); \
1384 SAVE_ARG_HISTORY(FUNCNAME, 7); \
1385 SAVE_ARG_HISTORY(FUNCNAME, 8); \
1386 SAVE_ARG_HISTORY(FUNCNAME, 9); \
1387 SAVE_ARG_HISTORY(FUNCNAME, 10); \
1388 SAVE_ARG_HISTORY(FUNCNAME, 11); \
1389 SAVE_ARG_HISTORY(FUNCNAME, 12); \
1390 SAVE_ARG_HISTORY(FUNCNAME, 13); \
1391 SAVE_ARG_HISTORY(FUNCNAME, 14); \
1392 SAVE_ARG_HISTORY(FUNCNAME, 15); \
1393 SAVE_ARG_HISTORY(FUNCNAME, 16); \
1394 SAVE_ARG_HISTORY(FUNCNAME, 17); \
1397 HISTORY_DROPPED(FUNCNAME); \
1399 INCREMENT_CALL_COUNT(FUNCNAME); \
1400 REGISTER_CALL(FUNCNAME); \
1401 if (FUNCNAME##_fake.custom_fake_seq_len){ \
1402 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1403 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
1406 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
1409 if (FUNCNAME##_fake.custom_fake){ \
1410 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
1413 DEFINE_RESET_FUNCTION(FUNCNAME) \
1415#define FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
1416 DECLARE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
1417 DEFINE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
1420#define DECLARE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
1421 typedef struct FUNCNAME##_Fake { \
1422 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1423 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1424 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1425 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1426 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1427 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1428 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
1429 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
1430 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
1431 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
1432 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
1433 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
1434 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
1435 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
1436 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
1437 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
1438 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
1439 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
1440 DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
1441 DECLARE_ALL_FUNC_COMMON \
1442 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1443 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
1444 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
1445 } FUNCNAME##_Fake; \
1446 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1447 void FUNCNAME##_reset(void); \
1448 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
1450#define DEFINE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
1451 FUNCNAME##_Fake FUNCNAME##_fake; \
1452 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18){ \
1453 SAVE_ARG(FUNCNAME, 0); \
1454 SAVE_ARG(FUNCNAME, 1); \
1455 SAVE_ARG(FUNCNAME, 2); \
1456 SAVE_ARG(FUNCNAME, 3); \
1457 SAVE_ARG(FUNCNAME, 4); \
1458 SAVE_ARG(FUNCNAME, 5); \
1459 SAVE_ARG(FUNCNAME, 6); \
1460 SAVE_ARG(FUNCNAME, 7); \
1461 SAVE_ARG(FUNCNAME, 8); \
1462 SAVE_ARG(FUNCNAME, 9); \
1463 SAVE_ARG(FUNCNAME, 10); \
1464 SAVE_ARG(FUNCNAME, 11); \
1465 SAVE_ARG(FUNCNAME, 12); \
1466 SAVE_ARG(FUNCNAME, 13); \
1467 SAVE_ARG(FUNCNAME, 14); \
1468 SAVE_ARG(FUNCNAME, 15); \
1469 SAVE_ARG(FUNCNAME, 16); \
1470 SAVE_ARG(FUNCNAME, 17); \
1471 SAVE_ARG(FUNCNAME, 18); \
1472 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1473 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1474 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1475 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1476 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1477 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1478 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1479 SAVE_ARG_HISTORY(FUNCNAME, 6); \
1480 SAVE_ARG_HISTORY(FUNCNAME, 7); \
1481 SAVE_ARG_HISTORY(FUNCNAME, 8); \
1482 SAVE_ARG_HISTORY(FUNCNAME, 9); \
1483 SAVE_ARG_HISTORY(FUNCNAME, 10); \
1484 SAVE_ARG_HISTORY(FUNCNAME, 11); \
1485 SAVE_ARG_HISTORY(FUNCNAME, 12); \
1486 SAVE_ARG_HISTORY(FUNCNAME, 13); \
1487 SAVE_ARG_HISTORY(FUNCNAME, 14); \
1488 SAVE_ARG_HISTORY(FUNCNAME, 15); \
1489 SAVE_ARG_HISTORY(FUNCNAME, 16); \
1490 SAVE_ARG_HISTORY(FUNCNAME, 17); \
1491 SAVE_ARG_HISTORY(FUNCNAME, 18); \
1494 HISTORY_DROPPED(FUNCNAME); \
1496 INCREMENT_CALL_COUNT(FUNCNAME); \
1497 REGISTER_CALL(FUNCNAME); \
1498 if (FUNCNAME##_fake.custom_fake_seq_len){ \
1499 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1500 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
1503 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
1506 if (FUNCNAME##_fake.custom_fake){ \
1507 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
1510 DEFINE_RESET_FUNCTION(FUNCNAME) \
1512#define FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
1513 DECLARE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
1514 DEFINE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
1517#define DECLARE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
1518 typedef struct FUNCNAME##_Fake { \
1519 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1520 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1521 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1522 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1523 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1524 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1525 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
1526 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
1527 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
1528 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
1529 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
1530 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
1531 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
1532 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
1533 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
1534 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
1535 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
1536 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
1537 DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
1538 DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
1539 DECLARE_ALL_FUNC_COMMON \
1540 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1541 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
1542 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
1543 } FUNCNAME##_Fake; \
1544 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1545 void FUNCNAME##_reset(void); \
1546 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
1548#define DEFINE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
1549 FUNCNAME##_Fake FUNCNAME##_fake; \
1550 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19){ \
1551 SAVE_ARG(FUNCNAME, 0); \
1552 SAVE_ARG(FUNCNAME, 1); \
1553 SAVE_ARG(FUNCNAME, 2); \
1554 SAVE_ARG(FUNCNAME, 3); \
1555 SAVE_ARG(FUNCNAME, 4); \
1556 SAVE_ARG(FUNCNAME, 5); \
1557 SAVE_ARG(FUNCNAME, 6); \
1558 SAVE_ARG(FUNCNAME, 7); \
1559 SAVE_ARG(FUNCNAME, 8); \
1560 SAVE_ARG(FUNCNAME, 9); \
1561 SAVE_ARG(FUNCNAME, 10); \
1562 SAVE_ARG(FUNCNAME, 11); \
1563 SAVE_ARG(FUNCNAME, 12); \
1564 SAVE_ARG(FUNCNAME, 13); \
1565 SAVE_ARG(FUNCNAME, 14); \
1566 SAVE_ARG(FUNCNAME, 15); \
1567 SAVE_ARG(FUNCNAME, 16); \
1568 SAVE_ARG(FUNCNAME, 17); \
1569 SAVE_ARG(FUNCNAME, 18); \
1570 SAVE_ARG(FUNCNAME, 19); \
1571 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1572 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1573 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1574 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1575 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1576 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1577 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1578 SAVE_ARG_HISTORY(FUNCNAME, 6); \
1579 SAVE_ARG_HISTORY(FUNCNAME, 7); \
1580 SAVE_ARG_HISTORY(FUNCNAME, 8); \
1581 SAVE_ARG_HISTORY(FUNCNAME, 9); \
1582 SAVE_ARG_HISTORY(FUNCNAME, 10); \
1583 SAVE_ARG_HISTORY(FUNCNAME, 11); \
1584 SAVE_ARG_HISTORY(FUNCNAME, 12); \
1585 SAVE_ARG_HISTORY(FUNCNAME, 13); \
1586 SAVE_ARG_HISTORY(FUNCNAME, 14); \
1587 SAVE_ARG_HISTORY(FUNCNAME, 15); \
1588 SAVE_ARG_HISTORY(FUNCNAME, 16); \
1589 SAVE_ARG_HISTORY(FUNCNAME, 17); \
1590 SAVE_ARG_HISTORY(FUNCNAME, 18); \
1591 SAVE_ARG_HISTORY(FUNCNAME, 19); \
1594 HISTORY_DROPPED(FUNCNAME); \
1596 INCREMENT_CALL_COUNT(FUNCNAME); \
1597 REGISTER_CALL(FUNCNAME); \
1598 if (FUNCNAME##_fake.custom_fake_seq_len){ \
1599 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1600 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
1603 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
1606 if (FUNCNAME##_fake.custom_fake){ \
1607 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
1610 DEFINE_RESET_FUNCTION(FUNCNAME) \
1612#define FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
1613 DECLARE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
1614 DEFINE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
1617#define DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
1618 typedef struct FUNCNAME##_Fake { \
1619 DECLARE_ALL_FUNC_COMMON \
1620 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1621 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1622 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1623 RETURN_TYPE(*custom_fake)(void); \
1624 RETURN_TYPE(**custom_fake_seq)(void); \
1625 } FUNCNAME##_Fake; \
1626 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1627 void FUNCNAME##_reset(void); \
1628 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(void); \
1630#define DEFINE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
1631 FUNCNAME##_Fake FUNCNAME##_fake; \
1632 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(void){ \
1633 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1636 HISTORY_DROPPED(FUNCNAME); \
1638 INCREMENT_CALL_COUNT(FUNCNAME); \
1639 REGISTER_CALL(FUNCNAME); \
1640 if (FUNCNAME##_fake.custom_fake_seq_len){ \
1641 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1642 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](); \
1643 SAVE_RET_HISTORY(FUNCNAME, ret); \
1647 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \
1648 SAVE_RET_HISTORY(FUNCNAME, ret); \
1650 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \
1653 if (FUNCNAME##_fake.custom_fake){ \
1654 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(); \
1655 SAVE_RET_HISTORY(FUNCNAME, ret); \
1657 return FUNCNAME##_fake.custom_fake(); \
1659 RETURN_FAKE_RESULT(FUNCNAME) \
1661 DEFINE_RESET_FUNCTION(FUNCNAME) \
1663#define FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
1664 DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
1665 DEFINE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
1668#define DECLARE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
1669 typedef struct FUNCNAME##_Fake { \
1670 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1671 DECLARE_ALL_FUNC_COMMON \
1672 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1673 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1674 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1675 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0); \
1676 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0); \
1677 } FUNCNAME##_Fake; \
1678 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1679 void FUNCNAME##_reset(void); \
1680 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0); \
1682#define DEFINE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
1683 FUNCNAME##_Fake FUNCNAME##_fake; \
1684 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0){ \
1685 SAVE_ARG(FUNCNAME, 0); \
1686 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1687 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1690 HISTORY_DROPPED(FUNCNAME); \
1692 INCREMENT_CALL_COUNT(FUNCNAME); \
1693 REGISTER_CALL(FUNCNAME); \
1694 if (FUNCNAME##_fake.custom_fake_seq_len){ \
1695 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1696 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0); \
1697 SAVE_RET_HISTORY(FUNCNAME, ret); \
1701 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \
1702 SAVE_RET_HISTORY(FUNCNAME, ret); \
1704 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \
1707 if (FUNCNAME##_fake.custom_fake){ \
1708 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0); \
1709 SAVE_RET_HISTORY(FUNCNAME, ret); \
1711 return FUNCNAME##_fake.custom_fake(arg0); \
1713 RETURN_FAKE_RESULT(FUNCNAME) \
1715 DEFINE_RESET_FUNCTION(FUNCNAME) \
1717#define FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
1718 DECLARE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
1719 DEFINE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
1722#define DECLARE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
1723 typedef struct FUNCNAME##_Fake { \
1724 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1725 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1726 DECLARE_ALL_FUNC_COMMON \
1727 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1728 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1729 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1730 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
1731 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
1732 } FUNCNAME##_Fake; \
1733 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1734 void FUNCNAME##_reset(void); \
1735 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1); \
1737#define DEFINE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
1738 FUNCNAME##_Fake FUNCNAME##_fake; \
1739 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1){ \
1740 SAVE_ARG(FUNCNAME, 0); \
1741 SAVE_ARG(FUNCNAME, 1); \
1742 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1743 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1744 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1747 HISTORY_DROPPED(FUNCNAME); \
1749 INCREMENT_CALL_COUNT(FUNCNAME); \
1750 REGISTER_CALL(FUNCNAME); \
1751 if (FUNCNAME##_fake.custom_fake_seq_len){ \
1752 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1753 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1); \
1754 SAVE_RET_HISTORY(FUNCNAME, ret); \
1758 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \
1759 SAVE_RET_HISTORY(FUNCNAME, ret); \
1761 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \
1764 if (FUNCNAME##_fake.custom_fake){ \
1765 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1); \
1766 SAVE_RET_HISTORY(FUNCNAME, ret); \
1768 return FUNCNAME##_fake.custom_fake(arg0, arg1); \
1770 RETURN_FAKE_RESULT(FUNCNAME) \
1772 DEFINE_RESET_FUNCTION(FUNCNAME) \
1774#define FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
1775 DECLARE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
1776 DEFINE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
1779#define DECLARE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
1780 typedef struct FUNCNAME##_Fake { \
1781 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1782 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1783 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1784 DECLARE_ALL_FUNC_COMMON \
1785 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1786 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1787 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1788 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
1789 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
1790 } FUNCNAME##_Fake; \
1791 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1792 void FUNCNAME##_reset(void); \
1793 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
1795#define DEFINE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
1796 FUNCNAME##_Fake FUNCNAME##_fake; \
1797 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2){ \
1798 SAVE_ARG(FUNCNAME, 0); \
1799 SAVE_ARG(FUNCNAME, 1); \
1800 SAVE_ARG(FUNCNAME, 2); \
1801 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1802 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1803 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1804 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1807 HISTORY_DROPPED(FUNCNAME); \
1809 INCREMENT_CALL_COUNT(FUNCNAME); \
1810 REGISTER_CALL(FUNCNAME); \
1811 if (FUNCNAME##_fake.custom_fake_seq_len){ \
1812 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1813 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2); \
1814 SAVE_RET_HISTORY(FUNCNAME, ret); \
1818 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \
1819 SAVE_RET_HISTORY(FUNCNAME, ret); \
1821 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \
1824 if (FUNCNAME##_fake.custom_fake){ \
1825 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
1826 SAVE_RET_HISTORY(FUNCNAME, ret); \
1828 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
1830 RETURN_FAKE_RESULT(FUNCNAME) \
1832 DEFINE_RESET_FUNCTION(FUNCNAME) \
1834#define FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
1835 DECLARE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
1836 DEFINE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
1839#define DECLARE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
1840 typedef struct FUNCNAME##_Fake { \
1841 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1842 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1843 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1844 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1845 DECLARE_ALL_FUNC_COMMON \
1846 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1847 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1848 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1849 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
1850 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
1851 } FUNCNAME##_Fake; \
1852 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1853 void FUNCNAME##_reset(void); \
1854 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
1856#define DEFINE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
1857 FUNCNAME##_Fake FUNCNAME##_fake; \
1858 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3){ \
1859 SAVE_ARG(FUNCNAME, 0); \
1860 SAVE_ARG(FUNCNAME, 1); \
1861 SAVE_ARG(FUNCNAME, 2); \
1862 SAVE_ARG(FUNCNAME, 3); \
1863 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1864 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1865 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1866 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1867 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1870 HISTORY_DROPPED(FUNCNAME); \
1872 INCREMENT_CALL_COUNT(FUNCNAME); \
1873 REGISTER_CALL(FUNCNAME); \
1874 if (FUNCNAME##_fake.custom_fake_seq_len){ \
1875 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1876 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3); \
1877 SAVE_RET_HISTORY(FUNCNAME, ret); \
1881 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \
1882 SAVE_RET_HISTORY(FUNCNAME, ret); \
1884 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \
1887 if (FUNCNAME##_fake.custom_fake){ \
1888 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
1889 SAVE_RET_HISTORY(FUNCNAME, ret); \
1891 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
1893 RETURN_FAKE_RESULT(FUNCNAME) \
1895 DEFINE_RESET_FUNCTION(FUNCNAME) \
1897#define FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
1898 DECLARE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
1899 DEFINE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
1902#define DECLARE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
1903 typedef struct FUNCNAME##_Fake { \
1904 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1905 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1906 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1907 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1908 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1909 DECLARE_ALL_FUNC_COMMON \
1910 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1911 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1912 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1913 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
1914 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
1915 } FUNCNAME##_Fake; \
1916 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1917 void FUNCNAME##_reset(void); \
1918 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
1920#define DEFINE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
1921 FUNCNAME##_Fake FUNCNAME##_fake; \
1922 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4){ \
1923 SAVE_ARG(FUNCNAME, 0); \
1924 SAVE_ARG(FUNCNAME, 1); \
1925 SAVE_ARG(FUNCNAME, 2); \
1926 SAVE_ARG(FUNCNAME, 3); \
1927 SAVE_ARG(FUNCNAME, 4); \
1928 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1929 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1930 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1931 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1932 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1933 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1936 HISTORY_DROPPED(FUNCNAME); \
1938 INCREMENT_CALL_COUNT(FUNCNAME); \
1939 REGISTER_CALL(FUNCNAME); \
1940 if (FUNCNAME##_fake.custom_fake_seq_len){ \
1941 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1942 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4); \
1943 SAVE_RET_HISTORY(FUNCNAME, ret); \
1947 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \
1948 SAVE_RET_HISTORY(FUNCNAME, ret); \
1950 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \
1953 if (FUNCNAME##_fake.custom_fake){ \
1954 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
1955 SAVE_RET_HISTORY(FUNCNAME, ret); \
1957 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
1959 RETURN_FAKE_RESULT(FUNCNAME) \
1961 DEFINE_RESET_FUNCTION(FUNCNAME) \
1963#define FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
1964 DECLARE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
1965 DEFINE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
1968#define DECLARE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
1969 typedef struct FUNCNAME##_Fake { \
1970 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1971 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1972 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1973 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1974 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1975 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1976 DECLARE_ALL_FUNC_COMMON \
1977 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1978 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1979 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1980 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
1981 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
1982 } FUNCNAME##_Fake; \
1983 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1984 void FUNCNAME##_reset(void); \
1985 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
1987#define DEFINE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
1988 FUNCNAME##_Fake FUNCNAME##_fake; \
1989 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5){ \
1990 SAVE_ARG(FUNCNAME, 0); \
1991 SAVE_ARG(FUNCNAME, 1); \
1992 SAVE_ARG(FUNCNAME, 2); \
1993 SAVE_ARG(FUNCNAME, 3); \
1994 SAVE_ARG(FUNCNAME, 4); \
1995 SAVE_ARG(FUNCNAME, 5); \
1996 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1997 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1998 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1999 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2000 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2001 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2002 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2005 HISTORY_DROPPED(FUNCNAME); \
2007 INCREMENT_CALL_COUNT(FUNCNAME); \
2008 REGISTER_CALL(FUNCNAME); \
2009 if (FUNCNAME##_fake.custom_fake_seq_len){ \
2010 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2011 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5); \
2012 SAVE_RET_HISTORY(FUNCNAME, ret); \
2016 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \
2017 SAVE_RET_HISTORY(FUNCNAME, ret); \
2019 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \
2022 if (FUNCNAME##_fake.custom_fake){ \
2023 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
2024 SAVE_RET_HISTORY(FUNCNAME, ret); \
2026 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
2028 RETURN_FAKE_RESULT(FUNCNAME) \
2030 DEFINE_RESET_FUNCTION(FUNCNAME) \
2032#define FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
2033 DECLARE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
2034 DEFINE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
2037#define DECLARE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
2038 typedef struct FUNCNAME##_Fake { \
2039 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2040 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2041 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2042 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2043 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2044 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2045 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2046 DECLARE_ALL_FUNC_COMMON \
2047 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2048 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2049 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2050 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
2051 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
2052 } FUNCNAME##_Fake; \
2053 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2054 void FUNCNAME##_reset(void); \
2055 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
2057#define DEFINE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
2058 FUNCNAME##_Fake FUNCNAME##_fake; \
2059 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6){ \
2060 SAVE_ARG(FUNCNAME, 0); \
2061 SAVE_ARG(FUNCNAME, 1); \
2062 SAVE_ARG(FUNCNAME, 2); \
2063 SAVE_ARG(FUNCNAME, 3); \
2064 SAVE_ARG(FUNCNAME, 4); \
2065 SAVE_ARG(FUNCNAME, 5); \
2066 SAVE_ARG(FUNCNAME, 6); \
2067 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2068 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2069 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2070 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2071 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2072 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2073 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2074 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2077 HISTORY_DROPPED(FUNCNAME); \
2079 INCREMENT_CALL_COUNT(FUNCNAME); \
2080 REGISTER_CALL(FUNCNAME); \
2081 if (FUNCNAME##_fake.custom_fake_seq_len){ \
2082 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2083 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
2084 SAVE_RET_HISTORY(FUNCNAME, ret); \
2088 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
2089 SAVE_RET_HISTORY(FUNCNAME, ret); \
2091 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
2094 if (FUNCNAME##_fake.custom_fake){ \
2095 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
2096 SAVE_RET_HISTORY(FUNCNAME, ret); \
2098 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
2100 RETURN_FAKE_RESULT(FUNCNAME) \
2102 DEFINE_RESET_FUNCTION(FUNCNAME) \
2104#define FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
2105 DECLARE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
2106 DEFINE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
2109#define DECLARE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
2110 typedef struct FUNCNAME##_Fake { \
2111 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2112 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2113 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2114 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2115 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2116 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2117 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2118 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2119 DECLARE_ALL_FUNC_COMMON \
2120 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2121 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2122 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2123 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
2124 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
2125 } FUNCNAME##_Fake; \
2126 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2127 void FUNCNAME##_reset(void); \
2128 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
2130#define DEFINE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
2131 FUNCNAME##_Fake FUNCNAME##_fake; \
2132 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7){ \
2133 SAVE_ARG(FUNCNAME, 0); \
2134 SAVE_ARG(FUNCNAME, 1); \
2135 SAVE_ARG(FUNCNAME, 2); \
2136 SAVE_ARG(FUNCNAME, 3); \
2137 SAVE_ARG(FUNCNAME, 4); \
2138 SAVE_ARG(FUNCNAME, 5); \
2139 SAVE_ARG(FUNCNAME, 6); \
2140 SAVE_ARG(FUNCNAME, 7); \
2141 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2142 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2143 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2144 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2145 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2146 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2147 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2148 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2149 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2152 HISTORY_DROPPED(FUNCNAME); \
2154 INCREMENT_CALL_COUNT(FUNCNAME); \
2155 REGISTER_CALL(FUNCNAME); \
2156 if (FUNCNAME##_fake.custom_fake_seq_len){ \
2157 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2158 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
2159 SAVE_RET_HISTORY(FUNCNAME, ret); \
2163 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
2164 SAVE_RET_HISTORY(FUNCNAME, ret); \
2166 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
2169 if (FUNCNAME##_fake.custom_fake){ \
2170 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
2171 SAVE_RET_HISTORY(FUNCNAME, ret); \
2173 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
2175 RETURN_FAKE_RESULT(FUNCNAME) \
2177 DEFINE_RESET_FUNCTION(FUNCNAME) \
2179#define FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
2180 DECLARE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
2181 DEFINE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
2184#define DECLARE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
2185 typedef struct FUNCNAME##_Fake { \
2186 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2187 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2188 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2189 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2190 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2191 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2192 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2193 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2194 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2195 DECLARE_ALL_FUNC_COMMON \
2196 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2197 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2198 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2199 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
2200 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
2201 } FUNCNAME##_Fake; \
2202 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2203 void FUNCNAME##_reset(void); \
2204 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
2206#define DEFINE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
2207 FUNCNAME##_Fake FUNCNAME##_fake; \
2208 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8){ \
2209 SAVE_ARG(FUNCNAME, 0); \
2210 SAVE_ARG(FUNCNAME, 1); \
2211 SAVE_ARG(FUNCNAME, 2); \
2212 SAVE_ARG(FUNCNAME, 3); \
2213 SAVE_ARG(FUNCNAME, 4); \
2214 SAVE_ARG(FUNCNAME, 5); \
2215 SAVE_ARG(FUNCNAME, 6); \
2216 SAVE_ARG(FUNCNAME, 7); \
2217 SAVE_ARG(FUNCNAME, 8); \
2218 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2219 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2220 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2221 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2222 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2223 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2224 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2225 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2226 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2227 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2230 HISTORY_DROPPED(FUNCNAME); \
2232 INCREMENT_CALL_COUNT(FUNCNAME); \
2233 REGISTER_CALL(FUNCNAME); \
2234 if (FUNCNAME##_fake.custom_fake_seq_len){ \
2235 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2236 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
2237 SAVE_RET_HISTORY(FUNCNAME, ret); \
2241 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
2242 SAVE_RET_HISTORY(FUNCNAME, ret); \
2244 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
2247 if (FUNCNAME##_fake.custom_fake){ \
2248 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
2249 SAVE_RET_HISTORY(FUNCNAME, ret); \
2251 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
2253 RETURN_FAKE_RESULT(FUNCNAME) \
2255 DEFINE_RESET_FUNCTION(FUNCNAME) \
2257#define FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
2258 DECLARE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
2259 DEFINE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
2262#define DECLARE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
2263 typedef struct FUNCNAME##_Fake { \
2264 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2265 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2266 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2267 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2268 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2269 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2270 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2271 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2272 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2273 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2274 DECLARE_ALL_FUNC_COMMON \
2275 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2276 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2277 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2278 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
2279 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
2280 } FUNCNAME##_Fake; \
2281 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2282 void FUNCNAME##_reset(void); \
2283 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
2285#define DEFINE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
2286 FUNCNAME##_Fake FUNCNAME##_fake; \
2287 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9){ \
2288 SAVE_ARG(FUNCNAME, 0); \
2289 SAVE_ARG(FUNCNAME, 1); \
2290 SAVE_ARG(FUNCNAME, 2); \
2291 SAVE_ARG(FUNCNAME, 3); \
2292 SAVE_ARG(FUNCNAME, 4); \
2293 SAVE_ARG(FUNCNAME, 5); \
2294 SAVE_ARG(FUNCNAME, 6); \
2295 SAVE_ARG(FUNCNAME, 7); \
2296 SAVE_ARG(FUNCNAME, 8); \
2297 SAVE_ARG(FUNCNAME, 9); \
2298 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2299 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2300 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2301 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2302 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2303 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2304 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2305 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2306 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2307 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2308 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2311 HISTORY_DROPPED(FUNCNAME); \
2313 INCREMENT_CALL_COUNT(FUNCNAME); \
2314 REGISTER_CALL(FUNCNAME); \
2315 if (FUNCNAME##_fake.custom_fake_seq_len){ \
2316 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2317 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
2318 SAVE_RET_HISTORY(FUNCNAME, ret); \
2322 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
2323 SAVE_RET_HISTORY(FUNCNAME, ret); \
2325 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
2328 if (FUNCNAME##_fake.custom_fake){ \
2329 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
2330 SAVE_RET_HISTORY(FUNCNAME, ret); \
2332 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
2334 RETURN_FAKE_RESULT(FUNCNAME) \
2336 DEFINE_RESET_FUNCTION(FUNCNAME) \
2338#define FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
2339 DECLARE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
2340 DEFINE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
2343#define DECLARE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
2344 typedef struct FUNCNAME##_Fake { \
2345 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2346 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2347 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2348 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2349 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2350 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2351 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2352 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2353 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2354 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2355 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2356 DECLARE_ALL_FUNC_COMMON \
2357 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2358 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2359 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2360 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
2361 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
2362 } FUNCNAME##_Fake; \
2363 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2364 void FUNCNAME##_reset(void); \
2365 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
2367#define DEFINE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
2368 FUNCNAME##_Fake FUNCNAME##_fake; \
2369 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10){ \
2370 SAVE_ARG(FUNCNAME, 0); \
2371 SAVE_ARG(FUNCNAME, 1); \
2372 SAVE_ARG(FUNCNAME, 2); \
2373 SAVE_ARG(FUNCNAME, 3); \
2374 SAVE_ARG(FUNCNAME, 4); \
2375 SAVE_ARG(FUNCNAME, 5); \
2376 SAVE_ARG(FUNCNAME, 6); \
2377 SAVE_ARG(FUNCNAME, 7); \
2378 SAVE_ARG(FUNCNAME, 8); \
2379 SAVE_ARG(FUNCNAME, 9); \
2380 SAVE_ARG(FUNCNAME, 10); \
2381 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2382 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2383 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2384 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2385 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2386 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2387 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2388 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2389 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2390 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2391 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2392 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2395 HISTORY_DROPPED(FUNCNAME); \
2397 INCREMENT_CALL_COUNT(FUNCNAME); \
2398 REGISTER_CALL(FUNCNAME); \
2399 if (FUNCNAME##_fake.custom_fake_seq_len){ \
2400 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2401 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
2402 SAVE_RET_HISTORY(FUNCNAME, ret); \
2406 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
2407 SAVE_RET_HISTORY(FUNCNAME, ret); \
2409 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
2412 if (FUNCNAME##_fake.custom_fake){ \
2413 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
2414 SAVE_RET_HISTORY(FUNCNAME, ret); \
2416 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
2418 RETURN_FAKE_RESULT(FUNCNAME) \
2420 DEFINE_RESET_FUNCTION(FUNCNAME) \
2422#define FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
2423 DECLARE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
2424 DEFINE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
2427#define DECLARE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
2428 typedef struct FUNCNAME##_Fake { \
2429 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2430 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2431 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2432 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2433 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2434 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2435 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2436 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2437 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2438 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2439 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2440 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
2441 DECLARE_ALL_FUNC_COMMON \
2442 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2443 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2444 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2445 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
2446 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
2447 } FUNCNAME##_Fake; \
2448 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2449 void FUNCNAME##_reset(void); \
2450 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
2452#define DEFINE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
2453 FUNCNAME##_Fake FUNCNAME##_fake; \
2454 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11){ \
2455 SAVE_ARG(FUNCNAME, 0); \
2456 SAVE_ARG(FUNCNAME, 1); \
2457 SAVE_ARG(FUNCNAME, 2); \
2458 SAVE_ARG(FUNCNAME, 3); \
2459 SAVE_ARG(FUNCNAME, 4); \
2460 SAVE_ARG(FUNCNAME, 5); \
2461 SAVE_ARG(FUNCNAME, 6); \
2462 SAVE_ARG(FUNCNAME, 7); \
2463 SAVE_ARG(FUNCNAME, 8); \
2464 SAVE_ARG(FUNCNAME, 9); \
2465 SAVE_ARG(FUNCNAME, 10); \
2466 SAVE_ARG(FUNCNAME, 11); \
2467 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2468 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2469 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2470 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2471 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2472 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2473 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2474 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2475 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2476 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2477 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2478 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2479 SAVE_ARG_HISTORY(FUNCNAME, 11); \
2482 HISTORY_DROPPED(FUNCNAME); \
2484 INCREMENT_CALL_COUNT(FUNCNAME); \
2485 REGISTER_CALL(FUNCNAME); \
2486 if (FUNCNAME##_fake.custom_fake_seq_len){ \
2487 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2488 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
2489 SAVE_RET_HISTORY(FUNCNAME, ret); \
2493 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
2494 SAVE_RET_HISTORY(FUNCNAME, ret); \
2496 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
2499 if (FUNCNAME##_fake.custom_fake){ \
2500 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
2501 SAVE_RET_HISTORY(FUNCNAME, ret); \
2503 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
2505 RETURN_FAKE_RESULT(FUNCNAME) \
2507 DEFINE_RESET_FUNCTION(FUNCNAME) \
2509#define FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
2510 DECLARE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
2511 DEFINE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
2514#define DECLARE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
2515 typedef struct FUNCNAME##_Fake { \
2516 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2517 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2518 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2519 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2520 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2521 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2522 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2523 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2524 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2525 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2526 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2527 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
2528 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
2529 DECLARE_ALL_FUNC_COMMON \
2530 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2531 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2532 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2533 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
2534 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
2535 } FUNCNAME##_Fake; \
2536 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2537 void FUNCNAME##_reset(void); \
2538 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
2540#define DEFINE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
2541 FUNCNAME##_Fake FUNCNAME##_fake; \
2542 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12){ \
2543 SAVE_ARG(FUNCNAME, 0); \
2544 SAVE_ARG(FUNCNAME, 1); \
2545 SAVE_ARG(FUNCNAME, 2); \
2546 SAVE_ARG(FUNCNAME, 3); \
2547 SAVE_ARG(FUNCNAME, 4); \
2548 SAVE_ARG(FUNCNAME, 5); \
2549 SAVE_ARG(FUNCNAME, 6); \
2550 SAVE_ARG(FUNCNAME, 7); \
2551 SAVE_ARG(FUNCNAME, 8); \
2552 SAVE_ARG(FUNCNAME, 9); \
2553 SAVE_ARG(FUNCNAME, 10); \
2554 SAVE_ARG(FUNCNAME, 11); \
2555 SAVE_ARG(FUNCNAME, 12); \
2556 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2557 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2558 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2559 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2560 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2561 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2562 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2563 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2564 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2565 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2566 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2567 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2568 SAVE_ARG_HISTORY(FUNCNAME, 11); \
2569 SAVE_ARG_HISTORY(FUNCNAME, 12); \
2572 HISTORY_DROPPED(FUNCNAME); \
2574 INCREMENT_CALL_COUNT(FUNCNAME); \
2575 REGISTER_CALL(FUNCNAME); \
2576 if (FUNCNAME##_fake.custom_fake_seq_len){ \
2577 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2578 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
2579 SAVE_RET_HISTORY(FUNCNAME, ret); \
2583 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
2584 SAVE_RET_HISTORY(FUNCNAME, ret); \
2586 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
2589 if (FUNCNAME##_fake.custom_fake){ \
2590 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
2591 SAVE_RET_HISTORY(FUNCNAME, ret); \
2593 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
2595 RETURN_FAKE_RESULT(FUNCNAME) \
2597 DEFINE_RESET_FUNCTION(FUNCNAME) \
2599#define FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
2600 DECLARE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
2601 DEFINE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
2604#define DECLARE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
2605 typedef struct FUNCNAME##_Fake { \
2606 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2607 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2608 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2609 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2610 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2611 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2612 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2613 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2614 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2615 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2616 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2617 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
2618 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
2619 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
2620 DECLARE_ALL_FUNC_COMMON \
2621 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2622 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2623 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2624 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
2625 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
2626 } FUNCNAME##_Fake; \
2627 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2628 void FUNCNAME##_reset(void); \
2629 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
2631#define DEFINE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
2632 FUNCNAME##_Fake FUNCNAME##_fake; \
2633 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13){ \
2634 SAVE_ARG(FUNCNAME, 0); \
2635 SAVE_ARG(FUNCNAME, 1); \
2636 SAVE_ARG(FUNCNAME, 2); \
2637 SAVE_ARG(FUNCNAME, 3); \
2638 SAVE_ARG(FUNCNAME, 4); \
2639 SAVE_ARG(FUNCNAME, 5); \
2640 SAVE_ARG(FUNCNAME, 6); \
2641 SAVE_ARG(FUNCNAME, 7); \
2642 SAVE_ARG(FUNCNAME, 8); \
2643 SAVE_ARG(FUNCNAME, 9); \
2644 SAVE_ARG(FUNCNAME, 10); \
2645 SAVE_ARG(FUNCNAME, 11); \
2646 SAVE_ARG(FUNCNAME, 12); \
2647 SAVE_ARG(FUNCNAME, 13); \
2648 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2649 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2650 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2651 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2652 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2653 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2654 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2655 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2656 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2657 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2658 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2659 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2660 SAVE_ARG_HISTORY(FUNCNAME, 11); \
2661 SAVE_ARG_HISTORY(FUNCNAME, 12); \
2662 SAVE_ARG_HISTORY(FUNCNAME, 13); \
2665 HISTORY_DROPPED(FUNCNAME); \
2667 INCREMENT_CALL_COUNT(FUNCNAME); \
2668 REGISTER_CALL(FUNCNAME); \
2669 if (FUNCNAME##_fake.custom_fake_seq_len){ \
2670 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2671 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
2672 SAVE_RET_HISTORY(FUNCNAME, ret); \
2676 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
2677 SAVE_RET_HISTORY(FUNCNAME, ret); \
2679 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
2682 if (FUNCNAME##_fake.custom_fake){ \
2683 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
2684 SAVE_RET_HISTORY(FUNCNAME, ret); \
2686 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
2688 RETURN_FAKE_RESULT(FUNCNAME) \
2690 DEFINE_RESET_FUNCTION(FUNCNAME) \
2692#define FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
2693 DECLARE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
2694 DEFINE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
2697#define DECLARE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
2698 typedef struct FUNCNAME##_Fake { \
2699 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2700 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2701 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2702 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2703 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2704 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2705 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2706 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2707 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2708 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2709 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2710 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
2711 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
2712 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
2713 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
2714 DECLARE_ALL_FUNC_COMMON \
2715 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2716 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2717 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2718 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
2719 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
2720 } FUNCNAME##_Fake; \
2721 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2722 void FUNCNAME##_reset(void); \
2723 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
2725#define DEFINE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
2726 FUNCNAME##_Fake FUNCNAME##_fake; \
2727 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14){ \
2728 SAVE_ARG(FUNCNAME, 0); \
2729 SAVE_ARG(FUNCNAME, 1); \
2730 SAVE_ARG(FUNCNAME, 2); \
2731 SAVE_ARG(FUNCNAME, 3); \
2732 SAVE_ARG(FUNCNAME, 4); \
2733 SAVE_ARG(FUNCNAME, 5); \
2734 SAVE_ARG(FUNCNAME, 6); \
2735 SAVE_ARG(FUNCNAME, 7); \
2736 SAVE_ARG(FUNCNAME, 8); \
2737 SAVE_ARG(FUNCNAME, 9); \
2738 SAVE_ARG(FUNCNAME, 10); \
2739 SAVE_ARG(FUNCNAME, 11); \
2740 SAVE_ARG(FUNCNAME, 12); \
2741 SAVE_ARG(FUNCNAME, 13); \
2742 SAVE_ARG(FUNCNAME, 14); \
2743 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2744 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2745 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2746 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2747 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2748 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2749 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2750 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2751 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2752 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2753 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2754 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2755 SAVE_ARG_HISTORY(FUNCNAME, 11); \
2756 SAVE_ARG_HISTORY(FUNCNAME, 12); \
2757 SAVE_ARG_HISTORY(FUNCNAME, 13); \
2758 SAVE_ARG_HISTORY(FUNCNAME, 14); \
2761 HISTORY_DROPPED(FUNCNAME); \
2763 INCREMENT_CALL_COUNT(FUNCNAME); \
2764 REGISTER_CALL(FUNCNAME); \
2765 if (FUNCNAME##_fake.custom_fake_seq_len){ \
2766 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2767 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
2768 SAVE_RET_HISTORY(FUNCNAME, ret); \
2772 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
2773 SAVE_RET_HISTORY(FUNCNAME, ret); \
2775 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
2778 if (FUNCNAME##_fake.custom_fake){ \
2779 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
2780 SAVE_RET_HISTORY(FUNCNAME, ret); \
2782 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
2784 RETURN_FAKE_RESULT(FUNCNAME) \
2786 DEFINE_RESET_FUNCTION(FUNCNAME) \
2788#define FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
2789 DECLARE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
2790 DEFINE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
2793#define DECLARE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
2794 typedef struct FUNCNAME##_Fake { \
2795 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2796 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2797 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2798 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2799 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2800 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2801 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2802 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2803 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2804 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2805 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2806 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
2807 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
2808 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
2809 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
2810 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
2811 DECLARE_ALL_FUNC_COMMON \
2812 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2813 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2814 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2815 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
2816 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
2817 } FUNCNAME##_Fake; \
2818 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2819 void FUNCNAME##_reset(void); \
2820 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
2822#define DEFINE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
2823 FUNCNAME##_Fake FUNCNAME##_fake; \
2824 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15){ \
2825 SAVE_ARG(FUNCNAME, 0); \
2826 SAVE_ARG(FUNCNAME, 1); \
2827 SAVE_ARG(FUNCNAME, 2); \
2828 SAVE_ARG(FUNCNAME, 3); \
2829 SAVE_ARG(FUNCNAME, 4); \
2830 SAVE_ARG(FUNCNAME, 5); \
2831 SAVE_ARG(FUNCNAME, 6); \
2832 SAVE_ARG(FUNCNAME, 7); \
2833 SAVE_ARG(FUNCNAME, 8); \
2834 SAVE_ARG(FUNCNAME, 9); \
2835 SAVE_ARG(FUNCNAME, 10); \
2836 SAVE_ARG(FUNCNAME, 11); \
2837 SAVE_ARG(FUNCNAME, 12); \
2838 SAVE_ARG(FUNCNAME, 13); \
2839 SAVE_ARG(FUNCNAME, 14); \
2840 SAVE_ARG(FUNCNAME, 15); \
2841 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2842 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2843 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2844 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2845 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2846 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2847 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2848 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2849 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2850 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2851 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2852 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2853 SAVE_ARG_HISTORY(FUNCNAME, 11); \
2854 SAVE_ARG_HISTORY(FUNCNAME, 12); \
2855 SAVE_ARG_HISTORY(FUNCNAME, 13); \
2856 SAVE_ARG_HISTORY(FUNCNAME, 14); \
2857 SAVE_ARG_HISTORY(FUNCNAME, 15); \
2860 HISTORY_DROPPED(FUNCNAME); \
2862 INCREMENT_CALL_COUNT(FUNCNAME); \
2863 REGISTER_CALL(FUNCNAME); \
2864 if (FUNCNAME##_fake.custom_fake_seq_len){ \
2865 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2866 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
2867 SAVE_RET_HISTORY(FUNCNAME, ret); \
2871 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
2872 SAVE_RET_HISTORY(FUNCNAME, ret); \
2874 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
2877 if (FUNCNAME##_fake.custom_fake){ \
2878 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
2879 SAVE_RET_HISTORY(FUNCNAME, ret); \
2881 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
2883 RETURN_FAKE_RESULT(FUNCNAME) \
2885 DEFINE_RESET_FUNCTION(FUNCNAME) \
2887#define FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
2888 DECLARE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
2889 DEFINE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
2892#define DECLARE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
2893 typedef struct FUNCNAME##_Fake { \
2894 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2895 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2896 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2897 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2898 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2899 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2900 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2901 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2902 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2903 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2904 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2905 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
2906 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
2907 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
2908 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
2909 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
2910 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
2911 DECLARE_ALL_FUNC_COMMON \
2912 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2913 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2914 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2915 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
2916 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
2917 } FUNCNAME##_Fake; \
2918 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2919 void FUNCNAME##_reset(void); \
2920 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
2922#define DEFINE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
2923 FUNCNAME##_Fake FUNCNAME##_fake; \
2924 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16){ \
2925 SAVE_ARG(FUNCNAME, 0); \
2926 SAVE_ARG(FUNCNAME, 1); \
2927 SAVE_ARG(FUNCNAME, 2); \
2928 SAVE_ARG(FUNCNAME, 3); \
2929 SAVE_ARG(FUNCNAME, 4); \
2930 SAVE_ARG(FUNCNAME, 5); \
2931 SAVE_ARG(FUNCNAME, 6); \
2932 SAVE_ARG(FUNCNAME, 7); \
2933 SAVE_ARG(FUNCNAME, 8); \
2934 SAVE_ARG(FUNCNAME, 9); \
2935 SAVE_ARG(FUNCNAME, 10); \
2936 SAVE_ARG(FUNCNAME, 11); \
2937 SAVE_ARG(FUNCNAME, 12); \
2938 SAVE_ARG(FUNCNAME, 13); \
2939 SAVE_ARG(FUNCNAME, 14); \
2940 SAVE_ARG(FUNCNAME, 15); \
2941 SAVE_ARG(FUNCNAME, 16); \
2942 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2943 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2944 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2945 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2946 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2947 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2948 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2949 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2950 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2951 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2952 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2953 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2954 SAVE_ARG_HISTORY(FUNCNAME, 11); \
2955 SAVE_ARG_HISTORY(FUNCNAME, 12); \
2956 SAVE_ARG_HISTORY(FUNCNAME, 13); \
2957 SAVE_ARG_HISTORY(FUNCNAME, 14); \
2958 SAVE_ARG_HISTORY(FUNCNAME, 15); \
2959 SAVE_ARG_HISTORY(FUNCNAME, 16); \
2962 HISTORY_DROPPED(FUNCNAME); \
2964 INCREMENT_CALL_COUNT(FUNCNAME); \
2965 REGISTER_CALL(FUNCNAME); \
2966 if (FUNCNAME##_fake.custom_fake_seq_len){ \
2967 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2968 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
2969 SAVE_RET_HISTORY(FUNCNAME, ret); \
2973 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
2974 SAVE_RET_HISTORY(FUNCNAME, ret); \
2976 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
2979 if (FUNCNAME##_fake.custom_fake){ \
2980 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
2981 SAVE_RET_HISTORY(FUNCNAME, ret); \
2983 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
2985 RETURN_FAKE_RESULT(FUNCNAME) \
2987 DEFINE_RESET_FUNCTION(FUNCNAME) \
2989#define FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
2990 DECLARE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
2991 DEFINE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
2994#define DECLARE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
2995 typedef struct FUNCNAME##_Fake { \
2996 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2997 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2998 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2999 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3000 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3001 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3002 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3003 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
3004 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
3005 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
3006 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
3007 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
3008 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
3009 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
3010 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
3011 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
3012 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
3013 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
3014 DECLARE_ALL_FUNC_COMMON \
3015 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
3016 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
3017 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3018 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
3019 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
3020 } FUNCNAME##_Fake; \
3021 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3022 void FUNCNAME##_reset(void); \
3023 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
3025#define DEFINE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
3026 FUNCNAME##_Fake FUNCNAME##_fake; \
3027 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17){ \
3028 SAVE_ARG(FUNCNAME, 0); \
3029 SAVE_ARG(FUNCNAME, 1); \
3030 SAVE_ARG(FUNCNAME, 2); \
3031 SAVE_ARG(FUNCNAME, 3); \
3032 SAVE_ARG(FUNCNAME, 4); \
3033 SAVE_ARG(FUNCNAME, 5); \
3034 SAVE_ARG(FUNCNAME, 6); \
3035 SAVE_ARG(FUNCNAME, 7); \
3036 SAVE_ARG(FUNCNAME, 8); \
3037 SAVE_ARG(FUNCNAME, 9); \
3038 SAVE_ARG(FUNCNAME, 10); \
3039 SAVE_ARG(FUNCNAME, 11); \
3040 SAVE_ARG(FUNCNAME, 12); \
3041 SAVE_ARG(FUNCNAME, 13); \
3042 SAVE_ARG(FUNCNAME, 14); \
3043 SAVE_ARG(FUNCNAME, 15); \
3044 SAVE_ARG(FUNCNAME, 16); \
3045 SAVE_ARG(FUNCNAME, 17); \
3046 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3047 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3048 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3049 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3050 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3051 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3052 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3053 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3054 SAVE_ARG_HISTORY(FUNCNAME, 7); \
3055 SAVE_ARG_HISTORY(FUNCNAME, 8); \
3056 SAVE_ARG_HISTORY(FUNCNAME, 9); \
3057 SAVE_ARG_HISTORY(FUNCNAME, 10); \
3058 SAVE_ARG_HISTORY(FUNCNAME, 11); \
3059 SAVE_ARG_HISTORY(FUNCNAME, 12); \
3060 SAVE_ARG_HISTORY(FUNCNAME, 13); \
3061 SAVE_ARG_HISTORY(FUNCNAME, 14); \
3062 SAVE_ARG_HISTORY(FUNCNAME, 15); \
3063 SAVE_ARG_HISTORY(FUNCNAME, 16); \
3064 SAVE_ARG_HISTORY(FUNCNAME, 17); \
3067 HISTORY_DROPPED(FUNCNAME); \
3069 INCREMENT_CALL_COUNT(FUNCNAME); \
3070 REGISTER_CALL(FUNCNAME); \
3071 if (FUNCNAME##_fake.custom_fake_seq_len){ \
3072 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3073 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
3074 SAVE_RET_HISTORY(FUNCNAME, ret); \
3078 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
3079 SAVE_RET_HISTORY(FUNCNAME, ret); \
3081 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
3084 if (FUNCNAME##_fake.custom_fake){ \
3085 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
3086 SAVE_RET_HISTORY(FUNCNAME, ret); \
3088 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
3090 RETURN_FAKE_RESULT(FUNCNAME) \
3092 DEFINE_RESET_FUNCTION(FUNCNAME) \
3094#define FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
3095 DECLARE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
3096 DEFINE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
3099#define DECLARE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
3100 typedef struct FUNCNAME##_Fake { \
3101 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3102 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3103 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3104 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3105 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3106 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3107 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3108 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
3109 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
3110 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
3111 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
3112 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
3113 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
3114 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
3115 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
3116 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
3117 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
3118 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
3119 DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
3120 DECLARE_ALL_FUNC_COMMON \
3121 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
3122 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
3123 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3124 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
3125 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
3126 } FUNCNAME##_Fake; \
3127 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3128 void FUNCNAME##_reset(void); \
3129 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
3131#define DEFINE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
3132 FUNCNAME##_Fake FUNCNAME##_fake; \
3133 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18){ \
3134 SAVE_ARG(FUNCNAME, 0); \
3135 SAVE_ARG(FUNCNAME, 1); \
3136 SAVE_ARG(FUNCNAME, 2); \
3137 SAVE_ARG(FUNCNAME, 3); \
3138 SAVE_ARG(FUNCNAME, 4); \
3139 SAVE_ARG(FUNCNAME, 5); \
3140 SAVE_ARG(FUNCNAME, 6); \
3141 SAVE_ARG(FUNCNAME, 7); \
3142 SAVE_ARG(FUNCNAME, 8); \
3143 SAVE_ARG(FUNCNAME, 9); \
3144 SAVE_ARG(FUNCNAME, 10); \
3145 SAVE_ARG(FUNCNAME, 11); \
3146 SAVE_ARG(FUNCNAME, 12); \
3147 SAVE_ARG(FUNCNAME, 13); \
3148 SAVE_ARG(FUNCNAME, 14); \
3149 SAVE_ARG(FUNCNAME, 15); \
3150 SAVE_ARG(FUNCNAME, 16); \
3151 SAVE_ARG(FUNCNAME, 17); \
3152 SAVE_ARG(FUNCNAME, 18); \
3153 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3154 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3155 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3156 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3157 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3158 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3159 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3160 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3161 SAVE_ARG_HISTORY(FUNCNAME, 7); \
3162 SAVE_ARG_HISTORY(FUNCNAME, 8); \
3163 SAVE_ARG_HISTORY(FUNCNAME, 9); \
3164 SAVE_ARG_HISTORY(FUNCNAME, 10); \
3165 SAVE_ARG_HISTORY(FUNCNAME, 11); \
3166 SAVE_ARG_HISTORY(FUNCNAME, 12); \
3167 SAVE_ARG_HISTORY(FUNCNAME, 13); \
3168 SAVE_ARG_HISTORY(FUNCNAME, 14); \
3169 SAVE_ARG_HISTORY(FUNCNAME, 15); \
3170 SAVE_ARG_HISTORY(FUNCNAME, 16); \
3171 SAVE_ARG_HISTORY(FUNCNAME, 17); \
3172 SAVE_ARG_HISTORY(FUNCNAME, 18); \
3175 HISTORY_DROPPED(FUNCNAME); \
3177 INCREMENT_CALL_COUNT(FUNCNAME); \
3178 REGISTER_CALL(FUNCNAME); \
3179 if (FUNCNAME##_fake.custom_fake_seq_len){ \
3180 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3181 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
3182 SAVE_RET_HISTORY(FUNCNAME, ret); \
3186 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
3187 SAVE_RET_HISTORY(FUNCNAME, ret); \
3189 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
3192 if (FUNCNAME##_fake.custom_fake){ \
3193 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
3194 SAVE_RET_HISTORY(FUNCNAME, ret); \
3196 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
3198 RETURN_FAKE_RESULT(FUNCNAME) \
3200 DEFINE_RESET_FUNCTION(FUNCNAME) \
3202#define FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
3203 DECLARE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
3204 DEFINE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
3207#define DECLARE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
3208 typedef struct FUNCNAME##_Fake { \
3209 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3210 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3211 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3212 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3213 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3214 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3215 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3216 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
3217 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
3218 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
3219 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
3220 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
3221 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
3222 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
3223 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
3224 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
3225 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
3226 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
3227 DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
3228 DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
3229 DECLARE_ALL_FUNC_COMMON \
3230 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
3231 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
3232 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3233 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
3234 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
3235 } FUNCNAME##_Fake; \
3236 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3237 void FUNCNAME##_reset(void); \
3238 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
3240#define DEFINE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
3241 FUNCNAME##_Fake FUNCNAME##_fake; \
3242 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19){ \
3243 SAVE_ARG(FUNCNAME, 0); \
3244 SAVE_ARG(FUNCNAME, 1); \
3245 SAVE_ARG(FUNCNAME, 2); \
3246 SAVE_ARG(FUNCNAME, 3); \
3247 SAVE_ARG(FUNCNAME, 4); \
3248 SAVE_ARG(FUNCNAME, 5); \
3249 SAVE_ARG(FUNCNAME, 6); \
3250 SAVE_ARG(FUNCNAME, 7); \
3251 SAVE_ARG(FUNCNAME, 8); \
3252 SAVE_ARG(FUNCNAME, 9); \
3253 SAVE_ARG(FUNCNAME, 10); \
3254 SAVE_ARG(FUNCNAME, 11); \
3255 SAVE_ARG(FUNCNAME, 12); \
3256 SAVE_ARG(FUNCNAME, 13); \
3257 SAVE_ARG(FUNCNAME, 14); \
3258 SAVE_ARG(FUNCNAME, 15); \
3259 SAVE_ARG(FUNCNAME, 16); \
3260 SAVE_ARG(FUNCNAME, 17); \
3261 SAVE_ARG(FUNCNAME, 18); \
3262 SAVE_ARG(FUNCNAME, 19); \
3263 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3264 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3265 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3266 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3267 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3268 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3269 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3270 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3271 SAVE_ARG_HISTORY(FUNCNAME, 7); \
3272 SAVE_ARG_HISTORY(FUNCNAME, 8); \
3273 SAVE_ARG_HISTORY(FUNCNAME, 9); \
3274 SAVE_ARG_HISTORY(FUNCNAME, 10); \
3275 SAVE_ARG_HISTORY(FUNCNAME, 11); \
3276 SAVE_ARG_HISTORY(FUNCNAME, 12); \
3277 SAVE_ARG_HISTORY(FUNCNAME, 13); \
3278 SAVE_ARG_HISTORY(FUNCNAME, 14); \
3279 SAVE_ARG_HISTORY(FUNCNAME, 15); \
3280 SAVE_ARG_HISTORY(FUNCNAME, 16); \
3281 SAVE_ARG_HISTORY(FUNCNAME, 17); \
3282 SAVE_ARG_HISTORY(FUNCNAME, 18); \
3283 SAVE_ARG_HISTORY(FUNCNAME, 19); \
3286 HISTORY_DROPPED(FUNCNAME); \
3288 INCREMENT_CALL_COUNT(FUNCNAME); \
3289 REGISTER_CALL(FUNCNAME); \
3290 if (FUNCNAME##_fake.custom_fake_seq_len){ \
3291 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3292 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
3293 SAVE_RET_HISTORY(FUNCNAME, ret); \
3297 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
3298 SAVE_RET_HISTORY(FUNCNAME, ret); \
3300 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
3303 if (FUNCNAME##_fake.custom_fake){ \
3304 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
3305 SAVE_RET_HISTORY(FUNCNAME, ret); \
3307 return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
3309 RETURN_FAKE_RESULT(FUNCNAME) \
3311 DEFINE_RESET_FUNCTION(FUNCNAME) \
3313#define FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
3314 DECLARE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
3315 DEFINE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
3318#define DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
3319 typedef struct FUNCNAME##_Fake { \
3320 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3321 DECLARE_ALL_FUNC_COMMON \
3322 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3323 void(*custom_fake)(ARG0_TYPE arg0, va_list ap); \
3324 void(**custom_fake_seq)(ARG0_TYPE arg0, va_list ap); \
3325 } FUNCNAME##_Fake; \
3326 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3327 void FUNCNAME##_reset(void); \
3328 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ...); \
3330#define DEFINE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
3331 FUNCNAME##_Fake FUNCNAME##_fake; \
3332 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ...){ \
3333 SAVE_ARG(FUNCNAME, 0); \
3334 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3335 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3338 HISTORY_DROPPED(FUNCNAME); \
3340 INCREMENT_CALL_COUNT(FUNCNAME); \
3341 REGISTER_CALL(FUNCNAME); \
3342 if (FUNCNAME##_fake.custom_fake_seq_len){ \
3343 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3345 va_start(ap, arg0); \
3346 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, ap); \
3351 va_start(ap, arg0); \
3352 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, ap); \
3356 if(FUNCNAME##_fake.custom_fake){ \
3358 va_start(ap, arg0); \
3359 FUNCNAME##_fake.custom_fake(arg0, ap); \
3363 DEFINE_RESET_FUNCTION(FUNCNAME) \
3365#define FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
3366 DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
3367 DEFINE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
3370#define DECLARE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
3371 typedef struct FUNCNAME##_Fake { \
3372 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3373 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3374 DECLARE_ALL_FUNC_COMMON \
3375 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3376 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
3377 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
3378 } FUNCNAME##_Fake; \
3379 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3380 void FUNCNAME##_reset(void); \
3381 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...); \
3383#define DEFINE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
3384 FUNCNAME##_Fake FUNCNAME##_fake; \
3385 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...){ \
3386 SAVE_ARG(FUNCNAME, 0); \
3387 SAVE_ARG(FUNCNAME, 1); \
3388 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3389 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3390 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3393 HISTORY_DROPPED(FUNCNAME); \
3395 INCREMENT_CALL_COUNT(FUNCNAME); \
3396 REGISTER_CALL(FUNCNAME); \
3397 if (FUNCNAME##_fake.custom_fake_seq_len){ \
3398 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3400 va_start(ap, arg1); \
3401 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, ap); \
3406 va_start(ap, arg1); \
3407 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, ap); \
3411 if(FUNCNAME##_fake.custom_fake){ \
3413 va_start(ap, arg1); \
3414 FUNCNAME##_fake.custom_fake(arg0, arg1, ap); \
3418 DEFINE_RESET_FUNCTION(FUNCNAME) \
3420#define FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
3421 DECLARE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
3422 DEFINE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
3425#define DECLARE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
3426 typedef struct FUNCNAME##_Fake { \
3427 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3428 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3429 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3430 DECLARE_ALL_FUNC_COMMON \
3431 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3432 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
3433 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
3434 } FUNCNAME##_Fake; \
3435 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3436 void FUNCNAME##_reset(void); \
3437 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...); \
3439#define DEFINE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
3440 FUNCNAME##_Fake FUNCNAME##_fake; \
3441 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...){ \
3442 SAVE_ARG(FUNCNAME, 0); \
3443 SAVE_ARG(FUNCNAME, 1); \
3444 SAVE_ARG(FUNCNAME, 2); \
3445 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3446 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3447 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3448 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3451 HISTORY_DROPPED(FUNCNAME); \
3453 INCREMENT_CALL_COUNT(FUNCNAME); \
3454 REGISTER_CALL(FUNCNAME); \
3455 if (FUNCNAME##_fake.custom_fake_seq_len){ \
3456 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3458 va_start(ap, arg2); \
3459 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, ap); \
3464 va_start(ap, arg2); \
3465 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, ap); \
3469 if(FUNCNAME##_fake.custom_fake){ \
3471 va_start(ap, arg2); \
3472 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, ap); \
3476 DEFINE_RESET_FUNCTION(FUNCNAME) \
3478#define FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
3479 DECLARE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
3480 DEFINE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
3483#define DECLARE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
3484 typedef struct FUNCNAME##_Fake { \
3485 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3486 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3487 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3488 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3489 DECLARE_ALL_FUNC_COMMON \
3490 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3491 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
3492 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
3493 } FUNCNAME##_Fake; \
3494 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3495 void FUNCNAME##_reset(void); \
3496 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...); \
3498#define DEFINE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
3499 FUNCNAME##_Fake FUNCNAME##_fake; \
3500 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...){ \
3501 SAVE_ARG(FUNCNAME, 0); \
3502 SAVE_ARG(FUNCNAME, 1); \
3503 SAVE_ARG(FUNCNAME, 2); \
3504 SAVE_ARG(FUNCNAME, 3); \
3505 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3506 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3507 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3508 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3509 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3512 HISTORY_DROPPED(FUNCNAME); \
3514 INCREMENT_CALL_COUNT(FUNCNAME); \
3515 REGISTER_CALL(FUNCNAME); \
3516 if (FUNCNAME##_fake.custom_fake_seq_len){ \
3517 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3519 va_start(ap, arg3); \
3520 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, ap); \
3525 va_start(ap, arg3); \
3526 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, ap); \
3530 if(FUNCNAME##_fake.custom_fake){ \
3532 va_start(ap, arg3); \
3533 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, ap); \
3537 DEFINE_RESET_FUNCTION(FUNCNAME) \
3539#define FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
3540 DECLARE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
3541 DEFINE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
3544#define DECLARE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
3545 typedef struct FUNCNAME##_Fake { \
3546 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3547 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3548 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3549 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3550 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3551 DECLARE_ALL_FUNC_COMMON \
3552 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3553 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
3554 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
3555 } FUNCNAME##_Fake; \
3556 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3557 void FUNCNAME##_reset(void); \
3558 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...); \
3560#define DEFINE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
3561 FUNCNAME##_Fake FUNCNAME##_fake; \
3562 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...){ \
3563 SAVE_ARG(FUNCNAME, 0); \
3564 SAVE_ARG(FUNCNAME, 1); \
3565 SAVE_ARG(FUNCNAME, 2); \
3566 SAVE_ARG(FUNCNAME, 3); \
3567 SAVE_ARG(FUNCNAME, 4); \
3568 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3569 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3570 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3571 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3572 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3573 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3576 HISTORY_DROPPED(FUNCNAME); \
3578 INCREMENT_CALL_COUNT(FUNCNAME); \
3579 REGISTER_CALL(FUNCNAME); \
3580 if (FUNCNAME##_fake.custom_fake_seq_len){ \
3581 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3583 va_start(ap, arg4); \
3584 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, ap); \
3589 va_start(ap, arg4); \
3590 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, ap); \
3594 if(FUNCNAME##_fake.custom_fake){ \
3596 va_start(ap, arg4); \
3597 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, ap); \
3601 DEFINE_RESET_FUNCTION(FUNCNAME) \
3603#define FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
3604 DECLARE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
3605 DEFINE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
3608#define DECLARE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
3609 typedef struct FUNCNAME##_Fake { \
3610 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3611 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3612 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3613 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3614 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3615 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3616 DECLARE_ALL_FUNC_COMMON \
3617 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3618 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
3619 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
3620 } FUNCNAME##_Fake; \
3621 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3622 void FUNCNAME##_reset(void); \
3623 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...); \
3625#define DEFINE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
3626 FUNCNAME##_Fake FUNCNAME##_fake; \
3627 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...){ \
3628 SAVE_ARG(FUNCNAME, 0); \
3629 SAVE_ARG(FUNCNAME, 1); \
3630 SAVE_ARG(FUNCNAME, 2); \
3631 SAVE_ARG(FUNCNAME, 3); \
3632 SAVE_ARG(FUNCNAME, 4); \
3633 SAVE_ARG(FUNCNAME, 5); \
3634 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3635 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3636 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3637 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3638 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3639 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3640 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3643 HISTORY_DROPPED(FUNCNAME); \
3645 INCREMENT_CALL_COUNT(FUNCNAME); \
3646 REGISTER_CALL(FUNCNAME); \
3647 if (FUNCNAME##_fake.custom_fake_seq_len){ \
3648 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3650 va_start(ap, arg5); \
3651 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
3656 va_start(ap, arg5); \
3657 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
3661 if(FUNCNAME##_fake.custom_fake){ \
3663 va_start(ap, arg5); \
3664 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, ap); \
3668 DEFINE_RESET_FUNCTION(FUNCNAME) \
3670#define FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
3671 DECLARE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
3672 DEFINE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
3675#define DECLARE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
3676 typedef struct FUNCNAME##_Fake { \
3677 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3678 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3679 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3680 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3681 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3682 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3683 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3684 DECLARE_ALL_FUNC_COMMON \
3685 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3686 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
3687 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
3688 } FUNCNAME##_Fake; \
3689 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3690 void FUNCNAME##_reset(void); \
3691 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...); \
3693#define DEFINE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
3694 FUNCNAME##_Fake FUNCNAME##_fake; \
3695 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...){ \
3696 SAVE_ARG(FUNCNAME, 0); \
3697 SAVE_ARG(FUNCNAME, 1); \
3698 SAVE_ARG(FUNCNAME, 2); \
3699 SAVE_ARG(FUNCNAME, 3); \
3700 SAVE_ARG(FUNCNAME, 4); \
3701 SAVE_ARG(FUNCNAME, 5); \
3702 SAVE_ARG(FUNCNAME, 6); \
3703 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3704 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3705 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3706 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3707 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3708 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3709 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3710 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3713 HISTORY_DROPPED(FUNCNAME); \
3715 INCREMENT_CALL_COUNT(FUNCNAME); \
3716 REGISTER_CALL(FUNCNAME); \
3717 if (FUNCNAME##_fake.custom_fake_seq_len){ \
3718 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3720 va_start(ap, arg6); \
3721 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
3726 va_start(ap, arg6); \
3727 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
3731 if(FUNCNAME##_fake.custom_fake){ \
3733 va_start(ap, arg6); \
3734 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
3738 DEFINE_RESET_FUNCTION(FUNCNAME) \
3740#define FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
3741 DECLARE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
3742 DEFINE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
3745#define DECLARE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
3746 typedef struct FUNCNAME##_Fake { \
3747 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3748 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3749 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3750 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3751 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3752 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3753 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3754 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
3755 DECLARE_ALL_FUNC_COMMON \
3756 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3757 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
3758 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
3759 } FUNCNAME##_Fake; \
3760 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3761 void FUNCNAME##_reset(void); \
3762 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...); \
3764#define DEFINE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
3765 FUNCNAME##_Fake FUNCNAME##_fake; \
3766 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...){ \
3767 SAVE_ARG(FUNCNAME, 0); \
3768 SAVE_ARG(FUNCNAME, 1); \
3769 SAVE_ARG(FUNCNAME, 2); \
3770 SAVE_ARG(FUNCNAME, 3); \
3771 SAVE_ARG(FUNCNAME, 4); \
3772 SAVE_ARG(FUNCNAME, 5); \
3773 SAVE_ARG(FUNCNAME, 6); \
3774 SAVE_ARG(FUNCNAME, 7); \
3775 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3776 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3777 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3778 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3779 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3780 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3781 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3782 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3783 SAVE_ARG_HISTORY(FUNCNAME, 7); \
3786 HISTORY_DROPPED(FUNCNAME); \
3788 INCREMENT_CALL_COUNT(FUNCNAME); \
3789 REGISTER_CALL(FUNCNAME); \
3790 if (FUNCNAME##_fake.custom_fake_seq_len){ \
3791 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3793 va_start(ap, arg7); \
3794 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
3799 va_start(ap, arg7); \
3800 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
3804 if(FUNCNAME##_fake.custom_fake){ \
3806 va_start(ap, arg7); \
3807 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
3811 DEFINE_RESET_FUNCTION(FUNCNAME) \
3813#define FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
3814 DECLARE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
3815 DEFINE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
3818#define DECLARE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
3819 typedef struct FUNCNAME##_Fake { \
3820 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3821 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3822 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3823 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3824 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3825 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3826 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3827 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
3828 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
3829 DECLARE_ALL_FUNC_COMMON \
3830 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3831 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
3832 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
3833 } FUNCNAME##_Fake; \
3834 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3835 void FUNCNAME##_reset(void); \
3836 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...); \
3838#define DEFINE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
3839 FUNCNAME##_Fake FUNCNAME##_fake; \
3840 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...){ \
3841 SAVE_ARG(FUNCNAME, 0); \
3842 SAVE_ARG(FUNCNAME, 1); \
3843 SAVE_ARG(FUNCNAME, 2); \
3844 SAVE_ARG(FUNCNAME, 3); \
3845 SAVE_ARG(FUNCNAME, 4); \
3846 SAVE_ARG(FUNCNAME, 5); \
3847 SAVE_ARG(FUNCNAME, 6); \
3848 SAVE_ARG(FUNCNAME, 7); \
3849 SAVE_ARG(FUNCNAME, 8); \
3850 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3851 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3852 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3853 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3854 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3855 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3856 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3857 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3858 SAVE_ARG_HISTORY(FUNCNAME, 7); \
3859 SAVE_ARG_HISTORY(FUNCNAME, 8); \
3862 HISTORY_DROPPED(FUNCNAME); \
3864 INCREMENT_CALL_COUNT(FUNCNAME); \
3865 REGISTER_CALL(FUNCNAME); \
3866 if (FUNCNAME##_fake.custom_fake_seq_len){ \
3867 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3869 va_start(ap, arg8); \
3870 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
3875 va_start(ap, arg8); \
3876 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
3880 if(FUNCNAME##_fake.custom_fake){ \
3882 va_start(ap, arg8); \
3883 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
3887 DEFINE_RESET_FUNCTION(FUNCNAME) \
3889#define FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
3890 DECLARE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
3891 DEFINE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
3894#define DECLARE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
3895 typedef struct FUNCNAME##_Fake { \
3896 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3897 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3898 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3899 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3900 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3901 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3902 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3903 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
3904 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
3905 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
3906 DECLARE_ALL_FUNC_COMMON \
3907 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3908 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
3909 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
3910 } FUNCNAME##_Fake; \
3911 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3912 void FUNCNAME##_reset(void); \
3913 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ...); \
3915#define DEFINE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
3916 FUNCNAME##_Fake FUNCNAME##_fake; \
3917 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ...){ \
3918 SAVE_ARG(FUNCNAME, 0); \
3919 SAVE_ARG(FUNCNAME, 1); \
3920 SAVE_ARG(FUNCNAME, 2); \
3921 SAVE_ARG(FUNCNAME, 3); \
3922 SAVE_ARG(FUNCNAME, 4); \
3923 SAVE_ARG(FUNCNAME, 5); \
3924 SAVE_ARG(FUNCNAME, 6); \
3925 SAVE_ARG(FUNCNAME, 7); \
3926 SAVE_ARG(FUNCNAME, 8); \
3927 SAVE_ARG(FUNCNAME, 9); \
3928 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3929 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3930 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3931 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3932 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3933 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3934 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3935 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3936 SAVE_ARG_HISTORY(FUNCNAME, 7); \
3937 SAVE_ARG_HISTORY(FUNCNAME, 8); \
3938 SAVE_ARG_HISTORY(FUNCNAME, 9); \
3941 HISTORY_DROPPED(FUNCNAME); \
3943 INCREMENT_CALL_COUNT(FUNCNAME); \
3944 REGISTER_CALL(FUNCNAME); \
3945 if (FUNCNAME##_fake.custom_fake_seq_len){ \
3946 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3948 va_start(ap, arg9); \
3949 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
3954 va_start(ap, arg9); \
3955 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
3959 if(FUNCNAME##_fake.custom_fake){ \
3961 va_start(ap, arg9); \
3962 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
3966 DEFINE_RESET_FUNCTION(FUNCNAME) \
3968#define FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
3969 DECLARE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
3970 DEFINE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
3973#define DECLARE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
3974 typedef struct FUNCNAME##_Fake { \
3975 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3976 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3977 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3978 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3979 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3980 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3981 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3982 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
3983 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
3984 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
3985 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
3986 DECLARE_ALL_FUNC_COMMON \
3987 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3988 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
3989 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
3990 } FUNCNAME##_Fake; \
3991 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3992 void FUNCNAME##_reset(void); \
3993 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ...); \
3995#define DEFINE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
3996 FUNCNAME##_Fake FUNCNAME##_fake; \
3997 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ...){ \
3998 SAVE_ARG(FUNCNAME, 0); \
3999 SAVE_ARG(FUNCNAME, 1); \
4000 SAVE_ARG(FUNCNAME, 2); \
4001 SAVE_ARG(FUNCNAME, 3); \
4002 SAVE_ARG(FUNCNAME, 4); \
4003 SAVE_ARG(FUNCNAME, 5); \
4004 SAVE_ARG(FUNCNAME, 6); \
4005 SAVE_ARG(FUNCNAME, 7); \
4006 SAVE_ARG(FUNCNAME, 8); \
4007 SAVE_ARG(FUNCNAME, 9); \
4008 SAVE_ARG(FUNCNAME, 10); \
4009 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4010 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4011 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4012 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4013 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4014 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4015 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4016 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4017 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4018 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4019 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4020 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4023 HISTORY_DROPPED(FUNCNAME); \
4025 INCREMENT_CALL_COUNT(FUNCNAME); \
4026 REGISTER_CALL(FUNCNAME); \
4027 if (FUNCNAME##_fake.custom_fake_seq_len){ \
4028 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4030 va_start(ap, arg10); \
4031 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
4036 va_start(ap, arg10); \
4037 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
4041 if(FUNCNAME##_fake.custom_fake){ \
4043 va_start(ap, arg10); \
4044 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
4048 DEFINE_RESET_FUNCTION(FUNCNAME) \
4050#define FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
4051 DECLARE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
4052 DEFINE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
4055#define DECLARE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
4056 typedef struct FUNCNAME##_Fake { \
4057 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4058 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4059 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4060 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4061 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4062 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
4063 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
4064 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4065 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4066 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4067 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4068 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4069 DECLARE_ALL_FUNC_COMMON \
4070 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4071 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
4072 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
4073 } FUNCNAME##_Fake; \
4074 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4075 void FUNCNAME##_reset(void); \
4076 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ...); \
4078#define DEFINE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
4079 FUNCNAME##_Fake FUNCNAME##_fake; \
4080 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ...){ \
4081 SAVE_ARG(FUNCNAME, 0); \
4082 SAVE_ARG(FUNCNAME, 1); \
4083 SAVE_ARG(FUNCNAME, 2); \
4084 SAVE_ARG(FUNCNAME, 3); \
4085 SAVE_ARG(FUNCNAME, 4); \
4086 SAVE_ARG(FUNCNAME, 5); \
4087 SAVE_ARG(FUNCNAME, 6); \
4088 SAVE_ARG(FUNCNAME, 7); \
4089 SAVE_ARG(FUNCNAME, 8); \
4090 SAVE_ARG(FUNCNAME, 9); \
4091 SAVE_ARG(FUNCNAME, 10); \
4092 SAVE_ARG(FUNCNAME, 11); \
4093 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4094 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4095 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4096 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4097 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4098 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4099 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4100 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4101 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4102 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4103 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4104 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4105 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4108 HISTORY_DROPPED(FUNCNAME); \
4110 INCREMENT_CALL_COUNT(FUNCNAME); \
4111 REGISTER_CALL(FUNCNAME); \
4112 if (FUNCNAME##_fake.custom_fake_seq_len){ \
4113 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4115 va_start(ap, arg11); \
4116 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
4121 va_start(ap, arg11); \
4122 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
4126 if(FUNCNAME##_fake.custom_fake){ \
4128 va_start(ap, arg11); \
4129 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
4133 DEFINE_RESET_FUNCTION(FUNCNAME) \
4135#define FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
4136 DECLARE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
4137 DEFINE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
4140#define DECLARE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
4141 typedef struct FUNCNAME##_Fake { \
4142 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4143 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4144 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4145 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4146 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4147 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
4148 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
4149 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4150 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4151 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4152 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4153 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4154 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
4155 DECLARE_ALL_FUNC_COMMON \
4156 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4157 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
4158 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
4159 } FUNCNAME##_Fake; \
4160 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4161 void FUNCNAME##_reset(void); \
4162 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...); \
4164#define DEFINE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
4165 FUNCNAME##_Fake FUNCNAME##_fake; \
4166 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...){ \
4167 SAVE_ARG(FUNCNAME, 0); \
4168 SAVE_ARG(FUNCNAME, 1); \
4169 SAVE_ARG(FUNCNAME, 2); \
4170 SAVE_ARG(FUNCNAME, 3); \
4171 SAVE_ARG(FUNCNAME, 4); \
4172 SAVE_ARG(FUNCNAME, 5); \
4173 SAVE_ARG(FUNCNAME, 6); \
4174 SAVE_ARG(FUNCNAME, 7); \
4175 SAVE_ARG(FUNCNAME, 8); \
4176 SAVE_ARG(FUNCNAME, 9); \
4177 SAVE_ARG(FUNCNAME, 10); \
4178 SAVE_ARG(FUNCNAME, 11); \
4179 SAVE_ARG(FUNCNAME, 12); \
4180 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4181 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4182 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4183 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4184 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4185 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4186 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4187 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4188 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4189 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4190 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4191 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4192 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4193 SAVE_ARG_HISTORY(FUNCNAME, 12); \
4196 HISTORY_DROPPED(FUNCNAME); \
4198 INCREMENT_CALL_COUNT(FUNCNAME); \
4199 REGISTER_CALL(FUNCNAME); \
4200 if (FUNCNAME##_fake.custom_fake_seq_len){ \
4201 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4203 va_start(ap, arg12); \
4204 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
4209 va_start(ap, arg12); \
4210 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
4214 if(FUNCNAME##_fake.custom_fake){ \
4216 va_start(ap, arg12); \
4217 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
4221 DEFINE_RESET_FUNCTION(FUNCNAME) \
4223#define FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
4224 DECLARE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
4225 DEFINE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
4228#define DECLARE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
4229 typedef struct FUNCNAME##_Fake { \
4230 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4231 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4232 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4233 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4234 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4235 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
4236 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
4237 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4238 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4239 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4240 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4241 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4242 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
4243 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
4244 DECLARE_ALL_FUNC_COMMON \
4245 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4246 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
4247 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
4248 } FUNCNAME##_Fake; \
4249 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4250 void FUNCNAME##_reset(void); \
4251 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...); \
4253#define DEFINE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
4254 FUNCNAME##_Fake FUNCNAME##_fake; \
4255 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...){ \
4256 SAVE_ARG(FUNCNAME, 0); \
4257 SAVE_ARG(FUNCNAME, 1); \
4258 SAVE_ARG(FUNCNAME, 2); \
4259 SAVE_ARG(FUNCNAME, 3); \
4260 SAVE_ARG(FUNCNAME, 4); \
4261 SAVE_ARG(FUNCNAME, 5); \
4262 SAVE_ARG(FUNCNAME, 6); \
4263 SAVE_ARG(FUNCNAME, 7); \
4264 SAVE_ARG(FUNCNAME, 8); \
4265 SAVE_ARG(FUNCNAME, 9); \
4266 SAVE_ARG(FUNCNAME, 10); \
4267 SAVE_ARG(FUNCNAME, 11); \
4268 SAVE_ARG(FUNCNAME, 12); \
4269 SAVE_ARG(FUNCNAME, 13); \
4270 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4271 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4272 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4273 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4274 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4275 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4276 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4277 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4278 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4279 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4280 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4281 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4282 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4283 SAVE_ARG_HISTORY(FUNCNAME, 12); \
4284 SAVE_ARG_HISTORY(FUNCNAME, 13); \
4287 HISTORY_DROPPED(FUNCNAME); \
4289 INCREMENT_CALL_COUNT(FUNCNAME); \
4290 REGISTER_CALL(FUNCNAME); \
4291 if (FUNCNAME##_fake.custom_fake_seq_len){ \
4292 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4294 va_start(ap, arg13); \
4295 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
4300 va_start(ap, arg13); \
4301 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
4305 if(FUNCNAME##_fake.custom_fake){ \
4307 va_start(ap, arg13); \
4308 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
4312 DEFINE_RESET_FUNCTION(FUNCNAME) \
4314#define FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
4315 DECLARE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
4316 DEFINE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
4319#define DECLARE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
4320 typedef struct FUNCNAME##_Fake { \
4321 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4322 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4323 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4324 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4325 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4326 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
4327 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
4328 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4329 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4330 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4331 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4332 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4333 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
4334 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
4335 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
4336 DECLARE_ALL_FUNC_COMMON \
4337 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4338 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
4339 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
4340 } FUNCNAME##_Fake; \
4341 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4342 void FUNCNAME##_reset(void); \
4343 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ...); \
4345#define DEFINE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
4346 FUNCNAME##_Fake FUNCNAME##_fake; \
4347 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ...){ \
4348 SAVE_ARG(FUNCNAME, 0); \
4349 SAVE_ARG(FUNCNAME, 1); \
4350 SAVE_ARG(FUNCNAME, 2); \
4351 SAVE_ARG(FUNCNAME, 3); \
4352 SAVE_ARG(FUNCNAME, 4); \
4353 SAVE_ARG(FUNCNAME, 5); \
4354 SAVE_ARG(FUNCNAME, 6); \
4355 SAVE_ARG(FUNCNAME, 7); \
4356 SAVE_ARG(FUNCNAME, 8); \
4357 SAVE_ARG(FUNCNAME, 9); \
4358 SAVE_ARG(FUNCNAME, 10); \
4359 SAVE_ARG(FUNCNAME, 11); \
4360 SAVE_ARG(FUNCNAME, 12); \
4361 SAVE_ARG(FUNCNAME, 13); \
4362 SAVE_ARG(FUNCNAME, 14); \
4363 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4364 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4365 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4366 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4367 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4368 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4369 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4370 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4371 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4372 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4373 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4374 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4375 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4376 SAVE_ARG_HISTORY(FUNCNAME, 12); \
4377 SAVE_ARG_HISTORY(FUNCNAME, 13); \
4378 SAVE_ARG_HISTORY(FUNCNAME, 14); \
4381 HISTORY_DROPPED(FUNCNAME); \
4383 INCREMENT_CALL_COUNT(FUNCNAME); \
4384 REGISTER_CALL(FUNCNAME); \
4385 if (FUNCNAME##_fake.custom_fake_seq_len){ \
4386 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4388 va_start(ap, arg14); \
4389 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
4394 va_start(ap, arg14); \
4395 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
4399 if(FUNCNAME##_fake.custom_fake){ \
4401 va_start(ap, arg14); \
4402 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
4406 DEFINE_RESET_FUNCTION(FUNCNAME) \
4408#define FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
4409 DECLARE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
4410 DEFINE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
4413#define DECLARE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
4414 typedef struct FUNCNAME##_Fake { \
4415 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4416 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4417 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4418 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4419 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4420 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
4421 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
4422 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4423 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4424 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4425 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4426 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4427 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
4428 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
4429 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
4430 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
4431 DECLARE_ALL_FUNC_COMMON \
4432 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4433 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
4434 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
4435 } FUNCNAME##_Fake; \
4436 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4437 void FUNCNAME##_reset(void); \
4438 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ...); \
4440#define DEFINE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
4441 FUNCNAME##_Fake FUNCNAME##_fake; \
4442 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ...){ \
4443 SAVE_ARG(FUNCNAME, 0); \
4444 SAVE_ARG(FUNCNAME, 1); \
4445 SAVE_ARG(FUNCNAME, 2); \
4446 SAVE_ARG(FUNCNAME, 3); \
4447 SAVE_ARG(FUNCNAME, 4); \
4448 SAVE_ARG(FUNCNAME, 5); \
4449 SAVE_ARG(FUNCNAME, 6); \
4450 SAVE_ARG(FUNCNAME, 7); \
4451 SAVE_ARG(FUNCNAME, 8); \
4452 SAVE_ARG(FUNCNAME, 9); \
4453 SAVE_ARG(FUNCNAME, 10); \
4454 SAVE_ARG(FUNCNAME, 11); \
4455 SAVE_ARG(FUNCNAME, 12); \
4456 SAVE_ARG(FUNCNAME, 13); \
4457 SAVE_ARG(FUNCNAME, 14); \
4458 SAVE_ARG(FUNCNAME, 15); \
4459 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4460 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4461 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4462 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4463 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4464 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4465 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4466 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4467 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4468 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4469 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4470 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4471 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4472 SAVE_ARG_HISTORY(FUNCNAME, 12); \
4473 SAVE_ARG_HISTORY(FUNCNAME, 13); \
4474 SAVE_ARG_HISTORY(FUNCNAME, 14); \
4475 SAVE_ARG_HISTORY(FUNCNAME, 15); \
4478 HISTORY_DROPPED(FUNCNAME); \
4480 INCREMENT_CALL_COUNT(FUNCNAME); \
4481 REGISTER_CALL(FUNCNAME); \
4482 if (FUNCNAME##_fake.custom_fake_seq_len){ \
4483 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4485 va_start(ap, arg15); \
4486 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
4491 va_start(ap, arg15); \
4492 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
4496 if(FUNCNAME##_fake.custom_fake){ \
4498 va_start(ap, arg15); \
4499 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
4503 DEFINE_RESET_FUNCTION(FUNCNAME) \
4505#define FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
4506 DECLARE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
4507 DEFINE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
4510#define DECLARE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
4511 typedef struct FUNCNAME##_Fake { \
4512 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4513 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4514 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4515 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4516 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4517 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
4518 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
4519 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4520 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4521 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4522 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4523 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4524 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
4525 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
4526 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
4527 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
4528 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
4529 DECLARE_ALL_FUNC_COMMON \
4530 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4531 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
4532 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
4533 } FUNCNAME##_Fake; \
4534 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4535 void FUNCNAME##_reset(void); \
4536 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...); \
4538#define DEFINE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
4539 FUNCNAME##_Fake FUNCNAME##_fake; \
4540 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...){ \
4541 SAVE_ARG(FUNCNAME, 0); \
4542 SAVE_ARG(FUNCNAME, 1); \
4543 SAVE_ARG(FUNCNAME, 2); \
4544 SAVE_ARG(FUNCNAME, 3); \
4545 SAVE_ARG(FUNCNAME, 4); \
4546 SAVE_ARG(FUNCNAME, 5); \
4547 SAVE_ARG(FUNCNAME, 6); \
4548 SAVE_ARG(FUNCNAME, 7); \
4549 SAVE_ARG(FUNCNAME, 8); \
4550 SAVE_ARG(FUNCNAME, 9); \
4551 SAVE_ARG(FUNCNAME, 10); \
4552 SAVE_ARG(FUNCNAME, 11); \
4553 SAVE_ARG(FUNCNAME, 12); \
4554 SAVE_ARG(FUNCNAME, 13); \
4555 SAVE_ARG(FUNCNAME, 14); \
4556 SAVE_ARG(FUNCNAME, 15); \
4557 SAVE_ARG(FUNCNAME, 16); \
4558 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4559 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4560 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4561 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4562 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4563 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4564 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4565 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4566 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4567 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4568 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4569 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4570 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4571 SAVE_ARG_HISTORY(FUNCNAME, 12); \
4572 SAVE_ARG_HISTORY(FUNCNAME, 13); \
4573 SAVE_ARG_HISTORY(FUNCNAME, 14); \
4574 SAVE_ARG_HISTORY(FUNCNAME, 15); \
4575 SAVE_ARG_HISTORY(FUNCNAME, 16); \
4578 HISTORY_DROPPED(FUNCNAME); \
4580 INCREMENT_CALL_COUNT(FUNCNAME); \
4581 REGISTER_CALL(FUNCNAME); \
4582 if (FUNCNAME##_fake.custom_fake_seq_len){ \
4583 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4585 va_start(ap, arg16); \
4586 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
4591 va_start(ap, arg16); \
4592 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
4596 if(FUNCNAME##_fake.custom_fake){ \
4598 va_start(ap, arg16); \
4599 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
4603 DEFINE_RESET_FUNCTION(FUNCNAME) \
4605#define FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
4606 DECLARE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
4607 DEFINE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
4610#define DECLARE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
4611 typedef struct FUNCNAME##_Fake { \
4612 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4613 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4614 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4615 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4616 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4617 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
4618 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
4619 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4620 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4621 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4622 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4623 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4624 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
4625 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
4626 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
4627 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
4628 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
4629 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
4630 DECLARE_ALL_FUNC_COMMON \
4631 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4632 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
4633 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
4634 } FUNCNAME##_Fake; \
4635 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4636 void FUNCNAME##_reset(void); \
4637 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...); \
4639#define DEFINE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
4640 FUNCNAME##_Fake FUNCNAME##_fake; \
4641 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...){ \
4642 SAVE_ARG(FUNCNAME, 0); \
4643 SAVE_ARG(FUNCNAME, 1); \
4644 SAVE_ARG(FUNCNAME, 2); \
4645 SAVE_ARG(FUNCNAME, 3); \
4646 SAVE_ARG(FUNCNAME, 4); \
4647 SAVE_ARG(FUNCNAME, 5); \
4648 SAVE_ARG(FUNCNAME, 6); \
4649 SAVE_ARG(FUNCNAME, 7); \
4650 SAVE_ARG(FUNCNAME, 8); \
4651 SAVE_ARG(FUNCNAME, 9); \
4652 SAVE_ARG(FUNCNAME, 10); \
4653 SAVE_ARG(FUNCNAME, 11); \
4654 SAVE_ARG(FUNCNAME, 12); \
4655 SAVE_ARG(FUNCNAME, 13); \
4656 SAVE_ARG(FUNCNAME, 14); \
4657 SAVE_ARG(FUNCNAME, 15); \
4658 SAVE_ARG(FUNCNAME, 16); \
4659 SAVE_ARG(FUNCNAME, 17); \
4660 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4661 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4662 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4663 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4664 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4665 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4666 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4667 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4668 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4669 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4670 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4671 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4672 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4673 SAVE_ARG_HISTORY(FUNCNAME, 12); \
4674 SAVE_ARG_HISTORY(FUNCNAME, 13); \
4675 SAVE_ARG_HISTORY(FUNCNAME, 14); \
4676 SAVE_ARG_HISTORY(FUNCNAME, 15); \
4677 SAVE_ARG_HISTORY(FUNCNAME, 16); \
4678 SAVE_ARG_HISTORY(FUNCNAME, 17); \
4681 HISTORY_DROPPED(FUNCNAME); \
4683 INCREMENT_CALL_COUNT(FUNCNAME); \
4684 REGISTER_CALL(FUNCNAME); \
4685 if (FUNCNAME##_fake.custom_fake_seq_len){ \
4686 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4688 va_start(ap, arg17); \
4689 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
4694 va_start(ap, arg17); \
4695 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
4699 if(FUNCNAME##_fake.custom_fake){ \
4701 va_start(ap, arg17); \
4702 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
4706 DEFINE_RESET_FUNCTION(FUNCNAME) \
4708#define FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
4709 DECLARE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
4710 DEFINE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
4713#define DECLARE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
4714 typedef struct FUNCNAME##_Fake { \
4715 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4716 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4717 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4718 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4719 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4720 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
4721 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
4722 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4723 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4724 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4725 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4726 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4727 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
4728 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
4729 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
4730 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
4731 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
4732 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
4733 DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
4734 DECLARE_ALL_FUNC_COMMON \
4735 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4736 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
4737 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
4738 } FUNCNAME##_Fake; \
4739 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4740 void FUNCNAME##_reset(void); \
4741 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ...); \
4743#define DEFINE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
4744 FUNCNAME##_Fake FUNCNAME##_fake; \
4745 void FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ...){ \
4746 SAVE_ARG(FUNCNAME, 0); \
4747 SAVE_ARG(FUNCNAME, 1); \
4748 SAVE_ARG(FUNCNAME, 2); \
4749 SAVE_ARG(FUNCNAME, 3); \
4750 SAVE_ARG(FUNCNAME, 4); \
4751 SAVE_ARG(FUNCNAME, 5); \
4752 SAVE_ARG(FUNCNAME, 6); \
4753 SAVE_ARG(FUNCNAME, 7); \
4754 SAVE_ARG(FUNCNAME, 8); \
4755 SAVE_ARG(FUNCNAME, 9); \
4756 SAVE_ARG(FUNCNAME, 10); \
4757 SAVE_ARG(FUNCNAME, 11); \
4758 SAVE_ARG(FUNCNAME, 12); \
4759 SAVE_ARG(FUNCNAME, 13); \
4760 SAVE_ARG(FUNCNAME, 14); \
4761 SAVE_ARG(FUNCNAME, 15); \
4762 SAVE_ARG(FUNCNAME, 16); \
4763 SAVE_ARG(FUNCNAME, 17); \
4764 SAVE_ARG(FUNCNAME, 18); \
4765 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4766 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4767 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4768 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4769 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4770 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4771 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4772 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4773 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4774 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4775 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4776 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4777 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4778 SAVE_ARG_HISTORY(FUNCNAME, 12); \
4779 SAVE_ARG_HISTORY(FUNCNAME, 13); \
4780 SAVE_ARG_HISTORY(FUNCNAME, 14); \
4781 SAVE_ARG_HISTORY(FUNCNAME, 15); \
4782 SAVE_ARG_HISTORY(FUNCNAME, 16); \
4783 SAVE_ARG_HISTORY(FUNCNAME, 17); \
4784 SAVE_ARG_HISTORY(FUNCNAME, 18); \
4787 HISTORY_DROPPED(FUNCNAME); \
4789 INCREMENT_CALL_COUNT(FUNCNAME); \
4790 REGISTER_CALL(FUNCNAME); \
4791 if (FUNCNAME##_fake.custom_fake_seq_len){ \
4792 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4794 va_start(ap, arg18); \
4795 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
4800 va_start(ap, arg18); \
4801 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
4805 if(FUNCNAME##_fake.custom_fake){ \
4807 va_start(ap, arg18); \
4808 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
4812 DEFINE_RESET_FUNCTION(FUNCNAME) \
4814#define FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
4815 DECLARE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
4816 DEFINE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
4819#define DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
4820 typedef struct FUNCNAME##_Fake { \
4821 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4822 DECLARE_ALL_FUNC_COMMON \
4823 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
4824 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
4825 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4826 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, va_list ap); \
4827 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, va_list ap); \
4828 } FUNCNAME##_Fake; \
4829 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4830 void FUNCNAME##_reset(void); \
4831 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ...); \
4833#define DEFINE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
4834 FUNCNAME##_Fake FUNCNAME##_fake; \
4835 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ...){ \
4836 SAVE_ARG(FUNCNAME, 0); \
4837 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4838 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4841 HISTORY_DROPPED(FUNCNAME); \
4843 INCREMENT_CALL_COUNT(FUNCNAME); \
4844 REGISTER_CALL(FUNCNAME); \
4845 if (FUNCNAME##_fake.custom_fake_seq_len){ \
4846 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4848 va_start(ap, arg0); \
4849 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, ap); \
4850 SAVE_RET_HISTORY(FUNCNAME, ret); \
4856 va_start(ap, arg0); \
4857 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, ap); \
4858 SAVE_RET_HISTORY(FUNCNAME, ret); \
4861 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, ap); \
4864 if(FUNCNAME##_fake.custom_fake){ \
4867 va_start(ap, arg0); \
4868 ret = FUNCNAME##_fake.custom_fake(arg0, ap); \
4870 SAVE_RET_HISTORY(FUNCNAME, ret); \
4873 RETURN_FAKE_RESULT(FUNCNAME) \
4875 DEFINE_RESET_FUNCTION(FUNCNAME) \
4877#define FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
4878 DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
4879 DEFINE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
4882#define DECLARE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
4883 typedef struct FUNCNAME##_Fake { \
4884 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4885 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4886 DECLARE_ALL_FUNC_COMMON \
4887 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
4888 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
4889 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4890 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
4891 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
4892 } FUNCNAME##_Fake; \
4893 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4894 void FUNCNAME##_reset(void); \
4895 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...); \
4897#define DEFINE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
4898 FUNCNAME##_Fake FUNCNAME##_fake; \
4899 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...){ \
4900 SAVE_ARG(FUNCNAME, 0); \
4901 SAVE_ARG(FUNCNAME, 1); \
4902 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4903 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4904 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4907 HISTORY_DROPPED(FUNCNAME); \
4909 INCREMENT_CALL_COUNT(FUNCNAME); \
4910 REGISTER_CALL(FUNCNAME); \
4911 if (FUNCNAME##_fake.custom_fake_seq_len){ \
4912 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4914 va_start(ap, arg1); \
4915 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, ap); \
4916 SAVE_RET_HISTORY(FUNCNAME, ret); \
4922 va_start(ap, arg1); \
4923 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, ap); \
4924 SAVE_RET_HISTORY(FUNCNAME, ret); \
4927 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, ap); \
4930 if(FUNCNAME##_fake.custom_fake){ \
4933 va_start(ap, arg1); \
4934 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, ap); \
4936 SAVE_RET_HISTORY(FUNCNAME, ret); \
4939 RETURN_FAKE_RESULT(FUNCNAME) \
4941 DEFINE_RESET_FUNCTION(FUNCNAME) \
4943#define FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
4944 DECLARE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
4945 DEFINE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
4948#define DECLARE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
4949 typedef struct FUNCNAME##_Fake { \
4950 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4951 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4952 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4953 DECLARE_ALL_FUNC_COMMON \
4954 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
4955 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
4956 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4957 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
4958 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
4959 } FUNCNAME##_Fake; \
4960 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4961 void FUNCNAME##_reset(void); \
4962 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...); \
4964#define DEFINE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
4965 FUNCNAME##_Fake FUNCNAME##_fake; \
4966 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...){ \
4967 SAVE_ARG(FUNCNAME, 0); \
4968 SAVE_ARG(FUNCNAME, 1); \
4969 SAVE_ARG(FUNCNAME, 2); \
4970 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4971 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4972 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4973 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4976 HISTORY_DROPPED(FUNCNAME); \
4978 INCREMENT_CALL_COUNT(FUNCNAME); \
4979 REGISTER_CALL(FUNCNAME); \
4980 if (FUNCNAME##_fake.custom_fake_seq_len){ \
4981 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4983 va_start(ap, arg2); \
4984 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, ap); \
4985 SAVE_RET_HISTORY(FUNCNAME, ret); \
4991 va_start(ap, arg2); \
4992 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, ap); \
4993 SAVE_RET_HISTORY(FUNCNAME, ret); \
4996 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, ap); \
4999 if(FUNCNAME##_fake.custom_fake){ \
5002 va_start(ap, arg2); \
5003 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, ap); \
5005 SAVE_RET_HISTORY(FUNCNAME, ret); \
5008 RETURN_FAKE_RESULT(FUNCNAME) \
5010 DEFINE_RESET_FUNCTION(FUNCNAME) \
5012#define FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
5013 DECLARE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
5014 DEFINE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
5017#define DECLARE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
5018 typedef struct FUNCNAME##_Fake { \
5019 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5020 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5021 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5022 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5023 DECLARE_ALL_FUNC_COMMON \
5024 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5025 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5026 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5027 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
5028 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
5029 } FUNCNAME##_Fake; \
5030 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5031 void FUNCNAME##_reset(void); \
5032 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...); \
5034#define DEFINE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
5035 FUNCNAME##_Fake FUNCNAME##_fake; \
5036 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...){ \
5037 SAVE_ARG(FUNCNAME, 0); \
5038 SAVE_ARG(FUNCNAME, 1); \
5039 SAVE_ARG(FUNCNAME, 2); \
5040 SAVE_ARG(FUNCNAME, 3); \
5041 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5042 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5043 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5044 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5045 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5048 HISTORY_DROPPED(FUNCNAME); \
5050 INCREMENT_CALL_COUNT(FUNCNAME); \
5051 REGISTER_CALL(FUNCNAME); \
5052 if (FUNCNAME##_fake.custom_fake_seq_len){ \
5053 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5055 va_start(ap, arg3); \
5056 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, ap); \
5057 SAVE_RET_HISTORY(FUNCNAME, ret); \
5063 va_start(ap, arg3); \
5064 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, ap); \
5065 SAVE_RET_HISTORY(FUNCNAME, ret); \
5068 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, ap); \
5071 if(FUNCNAME##_fake.custom_fake){ \
5074 va_start(ap, arg3); \
5075 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, ap); \
5077 SAVE_RET_HISTORY(FUNCNAME, ret); \
5080 RETURN_FAKE_RESULT(FUNCNAME) \
5082 DEFINE_RESET_FUNCTION(FUNCNAME) \
5084#define FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
5085 DECLARE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
5086 DEFINE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
5089#define DECLARE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
5090 typedef struct FUNCNAME##_Fake { \
5091 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5092 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5093 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5094 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5095 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5096 DECLARE_ALL_FUNC_COMMON \
5097 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5098 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5099 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5100 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
5101 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
5102 } FUNCNAME##_Fake; \
5103 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5104 void FUNCNAME##_reset(void); \
5105 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...); \
5107#define DEFINE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
5108 FUNCNAME##_Fake FUNCNAME##_fake; \
5109 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...){ \
5110 SAVE_ARG(FUNCNAME, 0); \
5111 SAVE_ARG(FUNCNAME, 1); \
5112 SAVE_ARG(FUNCNAME, 2); \
5113 SAVE_ARG(FUNCNAME, 3); \
5114 SAVE_ARG(FUNCNAME, 4); \
5115 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5116 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5117 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5118 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5119 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5120 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5123 HISTORY_DROPPED(FUNCNAME); \
5125 INCREMENT_CALL_COUNT(FUNCNAME); \
5126 REGISTER_CALL(FUNCNAME); \
5127 if (FUNCNAME##_fake.custom_fake_seq_len){ \
5128 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5130 va_start(ap, arg4); \
5131 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, ap); \
5132 SAVE_RET_HISTORY(FUNCNAME, ret); \
5138 va_start(ap, arg4); \
5139 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, ap); \
5140 SAVE_RET_HISTORY(FUNCNAME, ret); \
5143 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, ap); \
5146 if(FUNCNAME##_fake.custom_fake){ \
5149 va_start(ap, arg4); \
5150 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, ap); \
5152 SAVE_RET_HISTORY(FUNCNAME, ret); \
5155 RETURN_FAKE_RESULT(FUNCNAME) \
5157 DEFINE_RESET_FUNCTION(FUNCNAME) \
5159#define FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
5160 DECLARE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
5161 DEFINE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
5164#define DECLARE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
5165 typedef struct FUNCNAME##_Fake { \
5166 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5167 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5168 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5169 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5170 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5171 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5172 DECLARE_ALL_FUNC_COMMON \
5173 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5174 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5175 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5176 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
5177 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
5178 } FUNCNAME##_Fake; \
5179 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5180 void FUNCNAME##_reset(void); \
5181 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...); \
5183#define DEFINE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
5184 FUNCNAME##_Fake FUNCNAME##_fake; \
5185 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...){ \
5186 SAVE_ARG(FUNCNAME, 0); \
5187 SAVE_ARG(FUNCNAME, 1); \
5188 SAVE_ARG(FUNCNAME, 2); \
5189 SAVE_ARG(FUNCNAME, 3); \
5190 SAVE_ARG(FUNCNAME, 4); \
5191 SAVE_ARG(FUNCNAME, 5); \
5192 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5193 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5194 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5195 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5196 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5197 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5198 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5201 HISTORY_DROPPED(FUNCNAME); \
5203 INCREMENT_CALL_COUNT(FUNCNAME); \
5204 REGISTER_CALL(FUNCNAME); \
5205 if (FUNCNAME##_fake.custom_fake_seq_len){ \
5206 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5208 va_start(ap, arg5); \
5209 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
5210 SAVE_RET_HISTORY(FUNCNAME, ret); \
5216 va_start(ap, arg5); \
5217 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
5218 SAVE_RET_HISTORY(FUNCNAME, ret); \
5221 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
5224 if(FUNCNAME##_fake.custom_fake){ \
5227 va_start(ap, arg5); \
5228 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, ap); \
5230 SAVE_RET_HISTORY(FUNCNAME, ret); \
5233 RETURN_FAKE_RESULT(FUNCNAME) \
5235 DEFINE_RESET_FUNCTION(FUNCNAME) \
5237#define FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
5238 DECLARE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
5239 DEFINE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
5242#define DECLARE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
5243 typedef struct FUNCNAME##_Fake { \
5244 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5245 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5246 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5247 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5248 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5249 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5250 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5251 DECLARE_ALL_FUNC_COMMON \
5252 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5253 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5254 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5255 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
5256 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
5257 } FUNCNAME##_Fake; \
5258 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5259 void FUNCNAME##_reset(void); \
5260 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...); \
5262#define DEFINE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
5263 FUNCNAME##_Fake FUNCNAME##_fake; \
5264 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...){ \
5265 SAVE_ARG(FUNCNAME, 0); \
5266 SAVE_ARG(FUNCNAME, 1); \
5267 SAVE_ARG(FUNCNAME, 2); \
5268 SAVE_ARG(FUNCNAME, 3); \
5269 SAVE_ARG(FUNCNAME, 4); \
5270 SAVE_ARG(FUNCNAME, 5); \
5271 SAVE_ARG(FUNCNAME, 6); \
5272 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5273 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5274 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5275 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5276 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5277 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5278 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5279 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5282 HISTORY_DROPPED(FUNCNAME); \
5284 INCREMENT_CALL_COUNT(FUNCNAME); \
5285 REGISTER_CALL(FUNCNAME); \
5286 if (FUNCNAME##_fake.custom_fake_seq_len){ \
5287 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5289 va_start(ap, arg6); \
5290 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
5291 SAVE_RET_HISTORY(FUNCNAME, ret); \
5297 va_start(ap, arg6); \
5298 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
5299 SAVE_RET_HISTORY(FUNCNAME, ret); \
5302 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
5305 if(FUNCNAME##_fake.custom_fake){ \
5308 va_start(ap, arg6); \
5309 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
5311 SAVE_RET_HISTORY(FUNCNAME, ret); \
5314 RETURN_FAKE_RESULT(FUNCNAME) \
5316 DEFINE_RESET_FUNCTION(FUNCNAME) \
5318#define FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
5319 DECLARE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
5320 DEFINE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
5323#define DECLARE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
5324 typedef struct FUNCNAME##_Fake { \
5325 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5326 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5327 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5328 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5329 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5330 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5331 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5332 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5333 DECLARE_ALL_FUNC_COMMON \
5334 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5335 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5336 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5337 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
5338 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
5339 } FUNCNAME##_Fake; \
5340 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5341 void FUNCNAME##_reset(void); \
5342 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...); \
5344#define DEFINE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
5345 FUNCNAME##_Fake FUNCNAME##_fake; \
5346 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...){ \
5347 SAVE_ARG(FUNCNAME, 0); \
5348 SAVE_ARG(FUNCNAME, 1); \
5349 SAVE_ARG(FUNCNAME, 2); \
5350 SAVE_ARG(FUNCNAME, 3); \
5351 SAVE_ARG(FUNCNAME, 4); \
5352 SAVE_ARG(FUNCNAME, 5); \
5353 SAVE_ARG(FUNCNAME, 6); \
5354 SAVE_ARG(FUNCNAME, 7); \
5355 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5356 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5357 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5358 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5359 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5360 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5361 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5362 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5363 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5366 HISTORY_DROPPED(FUNCNAME); \
5368 INCREMENT_CALL_COUNT(FUNCNAME); \
5369 REGISTER_CALL(FUNCNAME); \
5370 if (FUNCNAME##_fake.custom_fake_seq_len){ \
5371 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5373 va_start(ap, arg7); \
5374 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
5375 SAVE_RET_HISTORY(FUNCNAME, ret); \
5381 va_start(ap, arg7); \
5382 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
5383 SAVE_RET_HISTORY(FUNCNAME, ret); \
5386 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
5389 if(FUNCNAME##_fake.custom_fake){ \
5392 va_start(ap, arg7); \
5393 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
5395 SAVE_RET_HISTORY(FUNCNAME, ret); \
5398 RETURN_FAKE_RESULT(FUNCNAME) \
5400 DEFINE_RESET_FUNCTION(FUNCNAME) \
5402#define FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
5403 DECLARE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
5404 DEFINE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
5407#define DECLARE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_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_ALL_FUNC_COMMON \
5419 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5420 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5421 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5422 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
5423 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
5424 } FUNCNAME##_Fake; \
5425 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5426 void FUNCNAME##_reset(void); \
5427 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...); \
5429#define DEFINE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
5430 FUNCNAME##_Fake FUNCNAME##_fake; \
5431 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...){ \
5432 SAVE_ARG(FUNCNAME, 0); \
5433 SAVE_ARG(FUNCNAME, 1); \
5434 SAVE_ARG(FUNCNAME, 2); \
5435 SAVE_ARG(FUNCNAME, 3); \
5436 SAVE_ARG(FUNCNAME, 4); \
5437 SAVE_ARG(FUNCNAME, 5); \
5438 SAVE_ARG(FUNCNAME, 6); \
5439 SAVE_ARG(FUNCNAME, 7); \
5440 SAVE_ARG(FUNCNAME, 8); \
5441 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5442 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5443 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5444 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5445 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5446 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5447 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5448 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5449 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5450 SAVE_ARG_HISTORY(FUNCNAME, 8); \
5453 HISTORY_DROPPED(FUNCNAME); \
5455 INCREMENT_CALL_COUNT(FUNCNAME); \
5456 REGISTER_CALL(FUNCNAME); \
5457 if (FUNCNAME##_fake.custom_fake_seq_len){ \
5458 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5460 va_start(ap, arg8); \
5461 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
5462 SAVE_RET_HISTORY(FUNCNAME, ret); \
5468 va_start(ap, arg8); \
5469 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
5470 SAVE_RET_HISTORY(FUNCNAME, ret); \
5473 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
5476 if(FUNCNAME##_fake.custom_fake){ \
5479 va_start(ap, arg8); \
5480 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
5482 SAVE_RET_HISTORY(FUNCNAME, ret); \
5485 RETURN_FAKE_RESULT(FUNCNAME) \
5487 DEFINE_RESET_FUNCTION(FUNCNAME) \
5489#define FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
5490 DECLARE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
5491 DEFINE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
5494#define DECLARE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
5495 typedef struct FUNCNAME##_Fake { \
5496 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5497 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5498 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5499 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5500 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5501 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5502 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5503 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5504 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
5505 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
5506 DECLARE_ALL_FUNC_COMMON \
5507 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5508 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5509 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5510 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
5511 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
5512 } FUNCNAME##_Fake; \
5513 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5514 void FUNCNAME##_reset(void); \
5515 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ...); \
5517#define DEFINE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
5518 FUNCNAME##_Fake FUNCNAME##_fake; \
5519 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ...){ \
5520 SAVE_ARG(FUNCNAME, 0); \
5521 SAVE_ARG(FUNCNAME, 1); \
5522 SAVE_ARG(FUNCNAME, 2); \
5523 SAVE_ARG(FUNCNAME, 3); \
5524 SAVE_ARG(FUNCNAME, 4); \
5525 SAVE_ARG(FUNCNAME, 5); \
5526 SAVE_ARG(FUNCNAME, 6); \
5527 SAVE_ARG(FUNCNAME, 7); \
5528 SAVE_ARG(FUNCNAME, 8); \
5529 SAVE_ARG(FUNCNAME, 9); \
5530 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5531 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5532 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5533 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5534 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5535 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5536 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5537 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5538 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5539 SAVE_ARG_HISTORY(FUNCNAME, 8); \
5540 SAVE_ARG_HISTORY(FUNCNAME, 9); \
5543 HISTORY_DROPPED(FUNCNAME); \
5545 INCREMENT_CALL_COUNT(FUNCNAME); \
5546 REGISTER_CALL(FUNCNAME); \
5547 if (FUNCNAME##_fake.custom_fake_seq_len){ \
5548 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5550 va_start(ap, arg9); \
5551 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
5552 SAVE_RET_HISTORY(FUNCNAME, ret); \
5558 va_start(ap, arg9); \
5559 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
5560 SAVE_RET_HISTORY(FUNCNAME, ret); \
5563 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
5566 if(FUNCNAME##_fake.custom_fake){ \
5569 va_start(ap, arg9); \
5570 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
5572 SAVE_RET_HISTORY(FUNCNAME, ret); \
5575 RETURN_FAKE_RESULT(FUNCNAME) \
5577 DEFINE_RESET_FUNCTION(FUNCNAME) \
5579#define FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
5580 DECLARE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
5581 DEFINE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
5584#define DECLARE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
5585 typedef struct FUNCNAME##_Fake { \
5586 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5587 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5588 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5589 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5590 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5591 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5592 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5593 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5594 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
5595 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
5596 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
5597 DECLARE_ALL_FUNC_COMMON \
5598 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5599 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5600 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5601 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
5602 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
5603 } FUNCNAME##_Fake; \
5604 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5605 void FUNCNAME##_reset(void); \
5606 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ...); \
5608#define DEFINE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
5609 FUNCNAME##_Fake FUNCNAME##_fake; \
5610 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ...){ \
5611 SAVE_ARG(FUNCNAME, 0); \
5612 SAVE_ARG(FUNCNAME, 1); \
5613 SAVE_ARG(FUNCNAME, 2); \
5614 SAVE_ARG(FUNCNAME, 3); \
5615 SAVE_ARG(FUNCNAME, 4); \
5616 SAVE_ARG(FUNCNAME, 5); \
5617 SAVE_ARG(FUNCNAME, 6); \
5618 SAVE_ARG(FUNCNAME, 7); \
5619 SAVE_ARG(FUNCNAME, 8); \
5620 SAVE_ARG(FUNCNAME, 9); \
5621 SAVE_ARG(FUNCNAME, 10); \
5622 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5623 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5624 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5625 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5626 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5627 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5628 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5629 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5630 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5631 SAVE_ARG_HISTORY(FUNCNAME, 8); \
5632 SAVE_ARG_HISTORY(FUNCNAME, 9); \
5633 SAVE_ARG_HISTORY(FUNCNAME, 10); \
5636 HISTORY_DROPPED(FUNCNAME); \
5638 INCREMENT_CALL_COUNT(FUNCNAME); \
5639 REGISTER_CALL(FUNCNAME); \
5640 if (FUNCNAME##_fake.custom_fake_seq_len){ \
5641 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5643 va_start(ap, arg10); \
5644 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
5645 SAVE_RET_HISTORY(FUNCNAME, ret); \
5651 va_start(ap, arg10); \
5652 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
5653 SAVE_RET_HISTORY(FUNCNAME, ret); \
5656 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
5659 if(FUNCNAME##_fake.custom_fake){ \
5662 va_start(ap, arg10); \
5663 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
5665 SAVE_RET_HISTORY(FUNCNAME, ret); \
5668 RETURN_FAKE_RESULT(FUNCNAME) \
5670 DEFINE_RESET_FUNCTION(FUNCNAME) \
5672#define FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
5673 DECLARE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
5674 DEFINE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
5677#define DECLARE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
5678 typedef struct FUNCNAME##_Fake { \
5679 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5680 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5681 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5682 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5683 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5684 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5685 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5686 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5687 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
5688 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
5689 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
5690 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
5691 DECLARE_ALL_FUNC_COMMON \
5692 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5693 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5694 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5695 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
5696 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
5697 } FUNCNAME##_Fake; \
5698 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5699 void FUNCNAME##_reset(void); \
5700 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ...); \
5702#define DEFINE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
5703 FUNCNAME##_Fake FUNCNAME##_fake; \
5704 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ...){ \
5705 SAVE_ARG(FUNCNAME, 0); \
5706 SAVE_ARG(FUNCNAME, 1); \
5707 SAVE_ARG(FUNCNAME, 2); \
5708 SAVE_ARG(FUNCNAME, 3); \
5709 SAVE_ARG(FUNCNAME, 4); \
5710 SAVE_ARG(FUNCNAME, 5); \
5711 SAVE_ARG(FUNCNAME, 6); \
5712 SAVE_ARG(FUNCNAME, 7); \
5713 SAVE_ARG(FUNCNAME, 8); \
5714 SAVE_ARG(FUNCNAME, 9); \
5715 SAVE_ARG(FUNCNAME, 10); \
5716 SAVE_ARG(FUNCNAME, 11); \
5717 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5718 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5719 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5720 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5721 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5722 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5723 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5724 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5725 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5726 SAVE_ARG_HISTORY(FUNCNAME, 8); \
5727 SAVE_ARG_HISTORY(FUNCNAME, 9); \
5728 SAVE_ARG_HISTORY(FUNCNAME, 10); \
5729 SAVE_ARG_HISTORY(FUNCNAME, 11); \
5732 HISTORY_DROPPED(FUNCNAME); \
5734 INCREMENT_CALL_COUNT(FUNCNAME); \
5735 REGISTER_CALL(FUNCNAME); \
5736 if (FUNCNAME##_fake.custom_fake_seq_len){ \
5737 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5739 va_start(ap, arg11); \
5740 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
5741 SAVE_RET_HISTORY(FUNCNAME, ret); \
5747 va_start(ap, arg11); \
5748 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
5749 SAVE_RET_HISTORY(FUNCNAME, ret); \
5752 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
5755 if(FUNCNAME##_fake.custom_fake){ \
5758 va_start(ap, arg11); \
5759 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
5761 SAVE_RET_HISTORY(FUNCNAME, ret); \
5764 RETURN_FAKE_RESULT(FUNCNAME) \
5766 DEFINE_RESET_FUNCTION(FUNCNAME) \
5768#define FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
5769 DECLARE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
5770 DEFINE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
5773#define DECLARE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
5774 typedef struct FUNCNAME##_Fake { \
5775 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5776 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5777 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5778 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5779 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5780 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5781 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5782 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5783 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
5784 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
5785 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
5786 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
5787 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
5788 DECLARE_ALL_FUNC_COMMON \
5789 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5790 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5791 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5792 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
5793 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
5794 } FUNCNAME##_Fake; \
5795 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5796 void FUNCNAME##_reset(void); \
5797 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...); \
5799#define DEFINE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
5800 FUNCNAME##_Fake FUNCNAME##_fake; \
5801 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...){ \
5802 SAVE_ARG(FUNCNAME, 0); \
5803 SAVE_ARG(FUNCNAME, 1); \
5804 SAVE_ARG(FUNCNAME, 2); \
5805 SAVE_ARG(FUNCNAME, 3); \
5806 SAVE_ARG(FUNCNAME, 4); \
5807 SAVE_ARG(FUNCNAME, 5); \
5808 SAVE_ARG(FUNCNAME, 6); \
5809 SAVE_ARG(FUNCNAME, 7); \
5810 SAVE_ARG(FUNCNAME, 8); \
5811 SAVE_ARG(FUNCNAME, 9); \
5812 SAVE_ARG(FUNCNAME, 10); \
5813 SAVE_ARG(FUNCNAME, 11); \
5814 SAVE_ARG(FUNCNAME, 12); \
5815 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5816 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5817 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5818 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5819 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5820 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5821 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5822 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5823 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5824 SAVE_ARG_HISTORY(FUNCNAME, 8); \
5825 SAVE_ARG_HISTORY(FUNCNAME, 9); \
5826 SAVE_ARG_HISTORY(FUNCNAME, 10); \
5827 SAVE_ARG_HISTORY(FUNCNAME, 11); \
5828 SAVE_ARG_HISTORY(FUNCNAME, 12); \
5831 HISTORY_DROPPED(FUNCNAME); \
5833 INCREMENT_CALL_COUNT(FUNCNAME); \
5834 REGISTER_CALL(FUNCNAME); \
5835 if (FUNCNAME##_fake.custom_fake_seq_len){ \
5836 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5838 va_start(ap, arg12); \
5839 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
5840 SAVE_RET_HISTORY(FUNCNAME, ret); \
5846 va_start(ap, arg12); \
5847 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
5848 SAVE_RET_HISTORY(FUNCNAME, ret); \
5851 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
5854 if(FUNCNAME##_fake.custom_fake){ \
5857 va_start(ap, arg12); \
5858 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
5860 SAVE_RET_HISTORY(FUNCNAME, ret); \
5863 RETURN_FAKE_RESULT(FUNCNAME) \
5865 DEFINE_RESET_FUNCTION(FUNCNAME) \
5867#define FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
5868 DECLARE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
5869 DEFINE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
5872#define DECLARE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
5873 typedef struct FUNCNAME##_Fake { \
5874 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5875 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5876 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5877 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5878 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5879 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5880 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5881 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5882 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
5883 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
5884 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
5885 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
5886 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
5887 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
5888 DECLARE_ALL_FUNC_COMMON \
5889 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5890 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5891 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5892 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
5893 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
5894 } FUNCNAME##_Fake; \
5895 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5896 void FUNCNAME##_reset(void); \
5897 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...); \
5899#define DEFINE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
5900 FUNCNAME##_Fake FUNCNAME##_fake; \
5901 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...){ \
5902 SAVE_ARG(FUNCNAME, 0); \
5903 SAVE_ARG(FUNCNAME, 1); \
5904 SAVE_ARG(FUNCNAME, 2); \
5905 SAVE_ARG(FUNCNAME, 3); \
5906 SAVE_ARG(FUNCNAME, 4); \
5907 SAVE_ARG(FUNCNAME, 5); \
5908 SAVE_ARG(FUNCNAME, 6); \
5909 SAVE_ARG(FUNCNAME, 7); \
5910 SAVE_ARG(FUNCNAME, 8); \
5911 SAVE_ARG(FUNCNAME, 9); \
5912 SAVE_ARG(FUNCNAME, 10); \
5913 SAVE_ARG(FUNCNAME, 11); \
5914 SAVE_ARG(FUNCNAME, 12); \
5915 SAVE_ARG(FUNCNAME, 13); \
5916 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5917 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5918 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5919 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5920 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5921 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5922 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5923 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5924 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5925 SAVE_ARG_HISTORY(FUNCNAME, 8); \
5926 SAVE_ARG_HISTORY(FUNCNAME, 9); \
5927 SAVE_ARG_HISTORY(FUNCNAME, 10); \
5928 SAVE_ARG_HISTORY(FUNCNAME, 11); \
5929 SAVE_ARG_HISTORY(FUNCNAME, 12); \
5930 SAVE_ARG_HISTORY(FUNCNAME, 13); \
5933 HISTORY_DROPPED(FUNCNAME); \
5935 INCREMENT_CALL_COUNT(FUNCNAME); \
5936 REGISTER_CALL(FUNCNAME); \
5937 if (FUNCNAME##_fake.custom_fake_seq_len){ \
5938 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5940 va_start(ap, arg13); \
5941 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
5942 SAVE_RET_HISTORY(FUNCNAME, ret); \
5948 va_start(ap, arg13); \
5949 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
5950 SAVE_RET_HISTORY(FUNCNAME, ret); \
5953 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
5956 if(FUNCNAME##_fake.custom_fake){ \
5959 va_start(ap, arg13); \
5960 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
5962 SAVE_RET_HISTORY(FUNCNAME, ret); \
5965 RETURN_FAKE_RESULT(FUNCNAME) \
5967 DEFINE_RESET_FUNCTION(FUNCNAME) \
5969#define FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
5970 DECLARE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
5971 DEFINE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
5974#define DECLARE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
5975 typedef struct FUNCNAME##_Fake { \
5976 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5977 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5978 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5979 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5980 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5981 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5982 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5983 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5984 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
5985 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
5986 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
5987 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
5988 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
5989 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
5990 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
5991 DECLARE_ALL_FUNC_COMMON \
5992 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5993 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5994 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5995 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
5996 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
5997 } FUNCNAME##_Fake; \
5998 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5999 void FUNCNAME##_reset(void); \
6000 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ...); \
6002#define DEFINE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
6003 FUNCNAME##_Fake FUNCNAME##_fake; \
6004 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ...){ \
6005 SAVE_ARG(FUNCNAME, 0); \
6006 SAVE_ARG(FUNCNAME, 1); \
6007 SAVE_ARG(FUNCNAME, 2); \
6008 SAVE_ARG(FUNCNAME, 3); \
6009 SAVE_ARG(FUNCNAME, 4); \
6010 SAVE_ARG(FUNCNAME, 5); \
6011 SAVE_ARG(FUNCNAME, 6); \
6012 SAVE_ARG(FUNCNAME, 7); \
6013 SAVE_ARG(FUNCNAME, 8); \
6014 SAVE_ARG(FUNCNAME, 9); \
6015 SAVE_ARG(FUNCNAME, 10); \
6016 SAVE_ARG(FUNCNAME, 11); \
6017 SAVE_ARG(FUNCNAME, 12); \
6018 SAVE_ARG(FUNCNAME, 13); \
6019 SAVE_ARG(FUNCNAME, 14); \
6020 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
6021 SAVE_ARG_HISTORY(FUNCNAME, 0); \
6022 SAVE_ARG_HISTORY(FUNCNAME, 1); \
6023 SAVE_ARG_HISTORY(FUNCNAME, 2); \
6024 SAVE_ARG_HISTORY(FUNCNAME, 3); \
6025 SAVE_ARG_HISTORY(FUNCNAME, 4); \
6026 SAVE_ARG_HISTORY(FUNCNAME, 5); \
6027 SAVE_ARG_HISTORY(FUNCNAME, 6); \
6028 SAVE_ARG_HISTORY(FUNCNAME, 7); \
6029 SAVE_ARG_HISTORY(FUNCNAME, 8); \
6030 SAVE_ARG_HISTORY(FUNCNAME, 9); \
6031 SAVE_ARG_HISTORY(FUNCNAME, 10); \
6032 SAVE_ARG_HISTORY(FUNCNAME, 11); \
6033 SAVE_ARG_HISTORY(FUNCNAME, 12); \
6034 SAVE_ARG_HISTORY(FUNCNAME, 13); \
6035 SAVE_ARG_HISTORY(FUNCNAME, 14); \
6038 HISTORY_DROPPED(FUNCNAME); \
6040 INCREMENT_CALL_COUNT(FUNCNAME); \
6041 REGISTER_CALL(FUNCNAME); \
6042 if (FUNCNAME##_fake.custom_fake_seq_len){ \
6043 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
6045 va_start(ap, arg14); \
6046 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
6047 SAVE_RET_HISTORY(FUNCNAME, ret); \
6053 va_start(ap, arg14); \
6054 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
6055 SAVE_RET_HISTORY(FUNCNAME, ret); \
6058 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
6061 if(FUNCNAME##_fake.custom_fake){ \
6064 va_start(ap, arg14); \
6065 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
6067 SAVE_RET_HISTORY(FUNCNAME, ret); \
6070 RETURN_FAKE_RESULT(FUNCNAME) \
6072 DEFINE_RESET_FUNCTION(FUNCNAME) \
6074#define FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
6075 DECLARE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
6076 DEFINE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
6079#define DECLARE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
6080 typedef struct FUNCNAME##_Fake { \
6081 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
6082 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
6083 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
6084 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
6085 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
6086 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
6087 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
6088 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
6089 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
6090 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
6091 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
6092 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
6093 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
6094 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
6095 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
6096 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
6097 DECLARE_ALL_FUNC_COMMON \
6098 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
6099 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
6100 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
6101 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
6102 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
6103 } FUNCNAME##_Fake; \
6104 extern FUNCNAME##_Fake FUNCNAME##_fake; \
6105 void FUNCNAME##_reset(void); \
6106 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ...); \
6108#define DEFINE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
6109 FUNCNAME##_Fake FUNCNAME##_fake; \
6110 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ...){ \
6111 SAVE_ARG(FUNCNAME, 0); \
6112 SAVE_ARG(FUNCNAME, 1); \
6113 SAVE_ARG(FUNCNAME, 2); \
6114 SAVE_ARG(FUNCNAME, 3); \
6115 SAVE_ARG(FUNCNAME, 4); \
6116 SAVE_ARG(FUNCNAME, 5); \
6117 SAVE_ARG(FUNCNAME, 6); \
6118 SAVE_ARG(FUNCNAME, 7); \
6119 SAVE_ARG(FUNCNAME, 8); \
6120 SAVE_ARG(FUNCNAME, 9); \
6121 SAVE_ARG(FUNCNAME, 10); \
6122 SAVE_ARG(FUNCNAME, 11); \
6123 SAVE_ARG(FUNCNAME, 12); \
6124 SAVE_ARG(FUNCNAME, 13); \
6125 SAVE_ARG(FUNCNAME, 14); \
6126 SAVE_ARG(FUNCNAME, 15); \
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); \
6146 HISTORY_DROPPED(FUNCNAME); \
6148 INCREMENT_CALL_COUNT(FUNCNAME); \
6149 REGISTER_CALL(FUNCNAME); \
6150 if (FUNCNAME##_fake.custom_fake_seq_len){ \
6151 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
6153 va_start(ap, arg15); \
6154 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
6155 SAVE_RET_HISTORY(FUNCNAME, ret); \
6161 va_start(ap, arg15); \
6162 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
6163 SAVE_RET_HISTORY(FUNCNAME, ret); \
6166 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
6169 if(FUNCNAME##_fake.custom_fake){ \
6172 va_start(ap, arg15); \
6173 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
6175 SAVE_RET_HISTORY(FUNCNAME, ret); \
6178 RETURN_FAKE_RESULT(FUNCNAME) \
6180 DEFINE_RESET_FUNCTION(FUNCNAME) \
6182#define FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
6183 DECLARE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
6184 DEFINE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
6187#define DECLARE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
6188 typedef struct FUNCNAME##_Fake { \
6189 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
6190 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
6191 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
6192 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
6193 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
6194 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
6195 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
6196 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
6197 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
6198 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
6199 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
6200 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
6201 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
6202 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
6203 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
6204 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
6205 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
6206 DECLARE_ALL_FUNC_COMMON \
6207 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
6208 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
6209 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
6210 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
6211 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
6212 } FUNCNAME##_Fake; \
6213 extern FUNCNAME##_Fake FUNCNAME##_fake; \
6214 void FUNCNAME##_reset(void); \
6215 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...); \
6217#define DEFINE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
6218 FUNCNAME##_Fake FUNCNAME##_fake; \
6219 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...){ \
6220 SAVE_ARG(FUNCNAME, 0); \
6221 SAVE_ARG(FUNCNAME, 1); \
6222 SAVE_ARG(FUNCNAME, 2); \
6223 SAVE_ARG(FUNCNAME, 3); \
6224 SAVE_ARG(FUNCNAME, 4); \
6225 SAVE_ARG(FUNCNAME, 5); \
6226 SAVE_ARG(FUNCNAME, 6); \
6227 SAVE_ARG(FUNCNAME, 7); \
6228 SAVE_ARG(FUNCNAME, 8); \
6229 SAVE_ARG(FUNCNAME, 9); \
6230 SAVE_ARG(FUNCNAME, 10); \
6231 SAVE_ARG(FUNCNAME, 11); \
6232 SAVE_ARG(FUNCNAME, 12); \
6233 SAVE_ARG(FUNCNAME, 13); \
6234 SAVE_ARG(FUNCNAME, 14); \
6235 SAVE_ARG(FUNCNAME, 15); \
6236 SAVE_ARG(FUNCNAME, 16); \
6237 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
6238 SAVE_ARG_HISTORY(FUNCNAME, 0); \
6239 SAVE_ARG_HISTORY(FUNCNAME, 1); \
6240 SAVE_ARG_HISTORY(FUNCNAME, 2); \
6241 SAVE_ARG_HISTORY(FUNCNAME, 3); \
6242 SAVE_ARG_HISTORY(FUNCNAME, 4); \
6243 SAVE_ARG_HISTORY(FUNCNAME, 5); \
6244 SAVE_ARG_HISTORY(FUNCNAME, 6); \
6245 SAVE_ARG_HISTORY(FUNCNAME, 7); \
6246 SAVE_ARG_HISTORY(FUNCNAME, 8); \
6247 SAVE_ARG_HISTORY(FUNCNAME, 9); \
6248 SAVE_ARG_HISTORY(FUNCNAME, 10); \
6249 SAVE_ARG_HISTORY(FUNCNAME, 11); \
6250 SAVE_ARG_HISTORY(FUNCNAME, 12); \
6251 SAVE_ARG_HISTORY(FUNCNAME, 13); \
6252 SAVE_ARG_HISTORY(FUNCNAME, 14); \
6253 SAVE_ARG_HISTORY(FUNCNAME, 15); \
6254 SAVE_ARG_HISTORY(FUNCNAME, 16); \
6257 HISTORY_DROPPED(FUNCNAME); \
6259 INCREMENT_CALL_COUNT(FUNCNAME); \
6260 REGISTER_CALL(FUNCNAME); \
6261 if (FUNCNAME##_fake.custom_fake_seq_len){ \
6262 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
6264 va_start(ap, arg16); \
6265 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
6266 SAVE_RET_HISTORY(FUNCNAME, ret); \
6272 va_start(ap, arg16); \
6273 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
6274 SAVE_RET_HISTORY(FUNCNAME, ret); \
6277 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
6280 if(FUNCNAME##_fake.custom_fake){ \
6283 va_start(ap, arg16); \
6284 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
6286 SAVE_RET_HISTORY(FUNCNAME, ret); \
6289 RETURN_FAKE_RESULT(FUNCNAME) \
6291 DEFINE_RESET_FUNCTION(FUNCNAME) \
6293#define FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
6294 DECLARE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
6295 DEFINE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
6298#define DECLARE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
6299 typedef struct FUNCNAME##_Fake { \
6300 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
6301 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
6302 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
6303 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
6304 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
6305 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
6306 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
6307 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
6308 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
6309 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
6310 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
6311 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
6312 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
6313 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
6314 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
6315 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
6316 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
6317 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
6318 DECLARE_ALL_FUNC_COMMON \
6319 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
6320 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
6321 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
6322 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
6323 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
6324 } FUNCNAME##_Fake; \
6325 extern FUNCNAME##_Fake FUNCNAME##_fake; \
6326 void FUNCNAME##_reset(void); \
6327 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...); \
6329#define DEFINE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
6330 FUNCNAME##_Fake FUNCNAME##_fake; \
6331 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...){ \
6332 SAVE_ARG(FUNCNAME, 0); \
6333 SAVE_ARG(FUNCNAME, 1); \
6334 SAVE_ARG(FUNCNAME, 2); \
6335 SAVE_ARG(FUNCNAME, 3); \
6336 SAVE_ARG(FUNCNAME, 4); \
6337 SAVE_ARG(FUNCNAME, 5); \
6338 SAVE_ARG(FUNCNAME, 6); \
6339 SAVE_ARG(FUNCNAME, 7); \
6340 SAVE_ARG(FUNCNAME, 8); \
6341 SAVE_ARG(FUNCNAME, 9); \
6342 SAVE_ARG(FUNCNAME, 10); \
6343 SAVE_ARG(FUNCNAME, 11); \
6344 SAVE_ARG(FUNCNAME, 12); \
6345 SAVE_ARG(FUNCNAME, 13); \
6346 SAVE_ARG(FUNCNAME, 14); \
6347 SAVE_ARG(FUNCNAME, 15); \
6348 SAVE_ARG(FUNCNAME, 16); \
6349 SAVE_ARG(FUNCNAME, 17); \
6350 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
6351 SAVE_ARG_HISTORY(FUNCNAME, 0); \
6352 SAVE_ARG_HISTORY(FUNCNAME, 1); \
6353 SAVE_ARG_HISTORY(FUNCNAME, 2); \
6354 SAVE_ARG_HISTORY(FUNCNAME, 3); \
6355 SAVE_ARG_HISTORY(FUNCNAME, 4); \
6356 SAVE_ARG_HISTORY(FUNCNAME, 5); \
6357 SAVE_ARG_HISTORY(FUNCNAME, 6); \
6358 SAVE_ARG_HISTORY(FUNCNAME, 7); \
6359 SAVE_ARG_HISTORY(FUNCNAME, 8); \
6360 SAVE_ARG_HISTORY(FUNCNAME, 9); \
6361 SAVE_ARG_HISTORY(FUNCNAME, 10); \
6362 SAVE_ARG_HISTORY(FUNCNAME, 11); \
6363 SAVE_ARG_HISTORY(FUNCNAME, 12); \
6364 SAVE_ARG_HISTORY(FUNCNAME, 13); \
6365 SAVE_ARG_HISTORY(FUNCNAME, 14); \
6366 SAVE_ARG_HISTORY(FUNCNAME, 15); \
6367 SAVE_ARG_HISTORY(FUNCNAME, 16); \
6368 SAVE_ARG_HISTORY(FUNCNAME, 17); \
6371 HISTORY_DROPPED(FUNCNAME); \
6373 INCREMENT_CALL_COUNT(FUNCNAME); \
6374 REGISTER_CALL(FUNCNAME); \
6375 if (FUNCNAME##_fake.custom_fake_seq_len){ \
6376 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
6378 va_start(ap, arg17); \
6379 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
6380 SAVE_RET_HISTORY(FUNCNAME, ret); \
6386 va_start(ap, arg17); \
6387 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
6388 SAVE_RET_HISTORY(FUNCNAME, ret); \
6391 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
6394 if(FUNCNAME##_fake.custom_fake){ \
6397 va_start(ap, arg17); \
6398 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
6400 SAVE_RET_HISTORY(FUNCNAME, ret); \
6403 RETURN_FAKE_RESULT(FUNCNAME) \
6405 DEFINE_RESET_FUNCTION(FUNCNAME) \
6407#define FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
6408 DECLARE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
6409 DEFINE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
6412#define DECLARE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
6413 typedef struct FUNCNAME##_Fake { \
6414 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
6415 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
6416 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
6417 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
6418 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
6419 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
6420 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
6421 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
6422 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
6423 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
6424 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
6425 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
6426 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
6427 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
6428 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
6429 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
6430 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
6431 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
6432 DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
6433 DECLARE_ALL_FUNC_COMMON \
6434 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
6435 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
6436 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
6437 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
6438 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
6439 } FUNCNAME##_Fake; \
6440 extern FUNCNAME##_Fake FUNCNAME##_fake; \
6441 void FUNCNAME##_reset(void); \
6442 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ...); \
6444#define DEFINE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
6445 FUNCNAME##_Fake FUNCNAME##_fake; \
6446 RETURN_TYPE FFF_GCC_FUNCTION_ATTRIBUTES FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ...){ \
6447 SAVE_ARG(FUNCNAME, 0); \
6448 SAVE_ARG(FUNCNAME, 1); \
6449 SAVE_ARG(FUNCNAME, 2); \
6450 SAVE_ARG(FUNCNAME, 3); \
6451 SAVE_ARG(FUNCNAME, 4); \
6452 SAVE_ARG(FUNCNAME, 5); \
6453 SAVE_ARG(FUNCNAME, 6); \
6454 SAVE_ARG(FUNCNAME, 7); \
6455 SAVE_ARG(FUNCNAME, 8); \
6456 SAVE_ARG(FUNCNAME, 9); \
6457 SAVE_ARG(FUNCNAME, 10); \
6458 SAVE_ARG(FUNCNAME, 11); \
6459 SAVE_ARG(FUNCNAME, 12); \
6460 SAVE_ARG(FUNCNAME, 13); \
6461 SAVE_ARG(FUNCNAME, 14); \
6462 SAVE_ARG(FUNCNAME, 15); \
6463 SAVE_ARG(FUNCNAME, 16); \
6464 SAVE_ARG(FUNCNAME, 17); \
6465 SAVE_ARG(FUNCNAME, 18); \
6466 if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
6467 SAVE_ARG_HISTORY(FUNCNAME, 0); \
6468 SAVE_ARG_HISTORY(FUNCNAME, 1); \
6469 SAVE_ARG_HISTORY(FUNCNAME, 2); \
6470 SAVE_ARG_HISTORY(FUNCNAME, 3); \
6471 SAVE_ARG_HISTORY(FUNCNAME, 4); \
6472 SAVE_ARG_HISTORY(FUNCNAME, 5); \
6473 SAVE_ARG_HISTORY(FUNCNAME, 6); \
6474 SAVE_ARG_HISTORY(FUNCNAME, 7); \
6475 SAVE_ARG_HISTORY(FUNCNAME, 8); \
6476 SAVE_ARG_HISTORY(FUNCNAME, 9); \
6477 SAVE_ARG_HISTORY(FUNCNAME, 10); \
6478 SAVE_ARG_HISTORY(FUNCNAME, 11); \
6479 SAVE_ARG_HISTORY(FUNCNAME, 12); \
6480 SAVE_ARG_HISTORY(FUNCNAME, 13); \
6481 SAVE_ARG_HISTORY(FUNCNAME, 14); \
6482 SAVE_ARG_HISTORY(FUNCNAME, 15); \
6483 SAVE_ARG_HISTORY(FUNCNAME, 16); \
6484 SAVE_ARG_HISTORY(FUNCNAME, 17); \
6485 SAVE_ARG_HISTORY(FUNCNAME, 18); \
6488 HISTORY_DROPPED(FUNCNAME); \
6490 INCREMENT_CALL_COUNT(FUNCNAME); \
6491 REGISTER_CALL(FUNCNAME); \
6492 if (FUNCNAME##_fake.custom_fake_seq_len){ \
6493 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
6495 va_start(ap, arg18); \
6496 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
6497 SAVE_RET_HISTORY(FUNCNAME, ret); \
6503 va_start(ap, arg18); \
6504 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
6505 SAVE_RET_HISTORY(FUNCNAME, ret); \
6508 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
6511 if(FUNCNAME##_fake.custom_fake){ \
6514 va_start(ap, arg18); \
6515 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
6517 SAVE_RET_HISTORY(FUNCNAME, ret); \
6520 RETURN_FAKE_RESULT(FUNCNAME) \
6522 DEFINE_RESET_FUNCTION(FUNCNAME) \
6524#define FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
6525 DECLARE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
6526 DEFINE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
6531#define PP_NARG_MINUS2(...) EXPAND(PP_NARG_MINUS2_(__VA_ARGS__, PP_RSEQ_N_MINUS2()))
6533#define PP_NARG_MINUS2_(...) EXPAND(PP_ARG_MINUS2_N(__VA_ARGS__))
6535#define PP_ARG_MINUS2_N(returnVal, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, N, ...) N
6537#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
6539#define PP_NARG_MINUS1(...) EXPAND(PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1()))
6541#define PP_NARG_MINUS1_(...) EXPAND(PP_ARG_MINUS1_N(__VA_ARGS__))
6543#define PP_ARG_MINUS1_N( _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, N, ...) N
6545#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
6551#define FAKE_VALUE_FUNC(...) EXPAND(FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
6553#define FUNC_VALUE_(N,...) EXPAND(FUNC_VALUE_N(N,__VA_ARGS__))
6555#define FUNC_VALUE_N(N,...) EXPAND(FAKE_VALUE_FUNC ## N(__VA_ARGS__))
6558#define FAKE_VOID_FUNC(...) EXPAND(FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
6560#define FUNC_VOID_(N,...) EXPAND(FUNC_VOID_N(N,__VA_ARGS__))
6562#define FUNC_VOID_N(N,...) EXPAND(FAKE_VOID_FUNC ## N(__VA_ARGS__))
6565#define FAKE_VALUE_FUNC_VARARG(...) EXPAND(FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
6567#define FUNC_VALUE_VARARG_(N,...) EXPAND(FUNC_VALUE_VARARG_N(N,__VA_ARGS__))
6569#define FUNC_VALUE_VARARG_N(N,...) EXPAND(FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__))
6572#define FAKE_VOID_FUNC_VARARG(...) EXPAND(FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
6574#define FUNC_VOID_VARARG_(N,...) EXPAND(FUNC_VOID_VARARG_N(N,__VA_ARGS__))
6576#define FUNC_VOID_VARARG_N(N,...) EXPAND(FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__))
6582#define DECLARE_FAKE_VALUE_FUNC(...) EXPAND(DECLARE_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
6584#define DECLARE_FUNC_VALUE_(N,...) EXPAND(DECLARE_FUNC_VALUE_N(N,__VA_ARGS__))
6586#define DECLARE_FUNC_VALUE_N(N,...) EXPAND(DECLARE_FAKE_VALUE_FUNC ## N(__VA_ARGS__))
6589#define DECLARE_FAKE_VOID_FUNC(...) EXPAND(DECLARE_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
6591#define DECLARE_FUNC_VOID_(N,...) EXPAND(DECLARE_FUNC_VOID_N(N,__VA_ARGS__))
6593#define DECLARE_FUNC_VOID_N(N,...) EXPAND(DECLARE_FAKE_VOID_FUNC ## N(__VA_ARGS__))
6596#define DECLARE_FAKE_VALUE_FUNC_VARARG(...) EXPAND(DECLARE_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
6598#define DECLARE_FUNC_VALUE_VARARG_(N,...) EXPAND(DECLARE_FUNC_VALUE_VARARG_N(N,__VA_ARGS__))
6600#define DECLARE_FUNC_VALUE_VARARG_N(N,...) EXPAND(DECLARE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__))
6603#define DECLARE_FAKE_VOID_FUNC_VARARG(...) EXPAND(DECLARE_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
6605#define DECLARE_FUNC_VOID_VARARG_(N,...) EXPAND(DECLARE_FUNC_VOID_VARARG_N(N,__VA_ARGS__))
6607#define DECLARE_FUNC_VOID_VARARG_N(N,...) EXPAND(DECLARE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__))
6613#define DEFINE_FAKE_VALUE_FUNC(...) EXPAND(DEFINE_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
6615#define DEFINE_FUNC_VALUE_(N,...) EXPAND(DEFINE_FUNC_VALUE_N(N,__VA_ARGS__))
6617#define DEFINE_FUNC_VALUE_N(N,...) EXPAND(DEFINE_FAKE_VALUE_FUNC ## N(__VA_ARGS__))
6620#define DEFINE_FAKE_VOID_FUNC(...) EXPAND(DEFINE_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
6622#define DEFINE_FUNC_VOID_(N,...) EXPAND(DEFINE_FUNC_VOID_N(N,__VA_ARGS__))
6624#define DEFINE_FUNC_VOID_N(N,...) EXPAND(DEFINE_FAKE_VOID_FUNC ## N(__VA_ARGS__))
6627#define DEFINE_FAKE_VALUE_FUNC_VARARG(...) EXPAND(DEFINE_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
6629#define DEFINE_FUNC_VALUE_VARARG_(N,...) EXPAND(DEFINE_FUNC_VALUE_VARARG_N(N,__VA_ARGS__))
6631#define DEFINE_FUNC_VALUE_VARARG_N(N,...) EXPAND(DEFINE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__))
6634#define DEFINE_FAKE_VOID_FUNC_VARARG(...) EXPAND(DEFINE_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
6636#define DEFINE_FUNC_VOID_VARARG_(N,...) EXPAND(DEFINE_FUNC_VOID_VARARG_N(N,__VA_ARGS__))
6638#define DEFINE_FUNC_VOID_VARARG_N(N,...) EXPAND(DEFINE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__))
void(* fff_function_t)(void)
#define FFF_CALL_HISTORY_LEN
unsigned int call_history_idx