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