91 #define __VALGRIND_MAJOR__ 3 92 #define __VALGRIND_MINOR__ 10 111 #undef PLAT_x86_darwin 112 #undef PLAT_amd64_darwin 113 #undef PLAT_x86_win32 114 #undef PLAT_amd64_win64 115 #undef PLAT_x86_linux 116 #undef PLAT_amd64_linux 117 #undef PLAT_ppc32_linux 118 #undef PLAT_ppc64be_linux 119 #undef PLAT_ppc64le_linux 120 #undef PLAT_arm_linux 121 #undef PLAT_arm64_linux 122 #undef PLAT_s390x_linux 123 #undef PLAT_mips32_linux 124 #undef PLAT_mips64_linux 127 #if defined(__APPLE__) && defined(__i386__) 128 # define PLAT_x86_darwin 1 129 #elif defined(__APPLE__) && defined(__x86_64__) 130 # define PLAT_amd64_darwin 1 131 #elif (defined(__MINGW32__) && !defined(__MINGW64__)) \ 132 || defined(__CYGWIN32__) \ 133 || (defined(_WIN32) && defined(_M_IX86) && defined(__GNUC__)) 134 # define PLAT_x86_win32 1 135 #elif defined(__MINGW64__) \ 136 || (defined(_WIN64) && defined(_M_X64) && defined(__GNUC__)) 137 # define PLAT_amd64_win64 1 138 #elif defined(__linux__) && defined(__i386__) 139 # define PLAT_x86_linux 1 140 #elif defined(__linux__) && defined(__x86_64__) 141 # define PLAT_amd64_linux 1 142 #elif defined(__linux__) && defined(__powerpc__) && !defined(__powerpc64__) 143 # define PLAT_ppc32_linux 1 144 #elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) && _CALL_ELF != 2 146 # define PLAT_ppc64be_linux 1 147 #elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) && _CALL_ELF == 2 149 # define PLAT_ppc64le_linux 1 150 #elif defined(__linux__) && defined(__arm__) && !defined(__aarch64__) 151 # define PLAT_arm_linux 1 152 #elif defined(__linux__) && defined(__aarch64__) && !defined(__arm__) 153 # define PLAT_arm64_linux 1 154 #elif defined(__linux__) && defined(__s390__) && defined(__s390x__) 155 # define PLAT_s390x_linux 1 156 #elif defined(__linux__) && defined(__mips__) && (__mips==64) 157 # define PLAT_mips64_linux 1 158 #elif defined(__linux__) && defined(__mips__) && (__mips!=64) 159 # define PLAT_mips32_linux 1 163 # if !defined(NVALGRIND) 187 #define VALGRIND_DO_CLIENT_REQUEST(_zzq_rlval, _zzq_default, \ 188 _zzq_request, _zzq_arg1, _zzq_arg2, \ 189 _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 190 do { (_zzq_rlval) = VALGRIND_DO_CLIENT_REQUEST_EXPR((_zzq_default), \ 191 (_zzq_request), (_zzq_arg1), (_zzq_arg2), \ 192 (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0) 194 #define VALGRIND_DO_CLIENT_REQUEST_STMT(_zzq_request, _zzq_arg1, \ 195 _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 196 do { (void) VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 197 (_zzq_request), (_zzq_arg1), (_zzq_arg2), \ 198 (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0) 200 #if defined(NVALGRIND) 205 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 206 _zzq_default, _zzq_request, \ 207 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 249 #if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) \ 250 || (defined(PLAT_x86_win32) && defined(__GNUC__)) 258 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 259 "roll $3, %%edi ; roll $13, %%edi\n\t" \ 260 "roll $29, %%edi ; roll $19, %%edi\n\t" 262 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 263 _zzq_default, _zzq_request, \ 264 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 266 ({volatile unsigned int _zzq_args[6]; \ 267 volatile unsigned int _zzq_result; \ 268 _zzq_args[0] = (unsigned int)(_zzq_request); \ 269 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 270 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 271 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 272 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 273 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 274 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 276 "xchgl %%ebx,%%ebx" \ 277 : "=d" (_zzq_result) \ 278 : "a" (&_zzq_args[0]), "0" (_zzq_default) \ 284 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 285 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 286 volatile unsigned int __addr; \ 287 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 289 "xchgl %%ecx,%%ecx" \ 294 _zzq_orig->nraddr = __addr; \ 297 #define VALGRIND_CALL_NOREDIR_EAX \ 298 __SPECIAL_INSTRUCTION_PREAMBLE \ 300 "xchgl %%edx,%%edx\n\t" 302 #define VALGRIND_VEX_INJECT_IR() \ 304 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 305 "xchgl %%edi,%%edi\n\t" \ 306 : : : "cc", "memory" \ 314 #if defined(PLAT_x86_win32) && !defined(__GNUC__) 322 #if defined(_MSC_VER) 324 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 325 __asm rol edi, 3 __asm rol edi, 13 \ 326 __asm rol edi, 29 __asm rol edi, 19 328 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 329 _zzq_default, _zzq_request, \ 330 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 331 valgrind_do_client_request_expr((uintptr_t)(_zzq_default), \ 332 (uintptr_t)(_zzq_request), (uintptr_t)(_zzq_arg1), \ 333 (uintptr_t)(_zzq_arg2), (uintptr_t)(_zzq_arg3), \ 334 (uintptr_t)(_zzq_arg4), (uintptr_t)(_zzq_arg5)) 336 static __inline uintptr_t
337 valgrind_do_client_request_expr(uintptr_t _zzq_default, uintptr_t _zzq_request,
338 uintptr_t _zzq_arg1, uintptr_t _zzq_arg2,
339 uintptr_t _zzq_arg3, uintptr_t _zzq_arg4,
342 volatile uintptr_t _zzq_args[6];
343 volatile unsigned int _zzq_result;
344 _zzq_args[0] = (uintptr_t)(_zzq_request);
345 _zzq_args[1] = (uintptr_t)(_zzq_arg1);
346 _zzq_args[2] = (uintptr_t)(_zzq_arg2);
347 _zzq_args[3] = (uintptr_t)(_zzq_arg3);
348 _zzq_args[4] = (uintptr_t)(_zzq_arg4);
349 _zzq_args[5] = (uintptr_t)(_zzq_arg5);
350 __asm { __asm lea eax, _zzq_args __asm mov edx, _zzq_default
351 __SPECIAL_INSTRUCTION_PREAMBLE
354 __asm mov _zzq_result, edx
359 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 360 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 361 volatile unsigned int __addr; \ 362 __asm { __SPECIAL_INSTRUCTION_PREAMBLE \ 365 __asm mov __addr, eax \ 367 _zzq_orig->nraddr = __addr; \ 370 #define VALGRIND_CALL_NOREDIR_EAX ERROR 372 #define VALGRIND_VEX_INJECT_IR() \ 374 __asm { __SPECIAL_INSTRUCTION_PREAMBLE \ 380 #error Unsupported compiler. 387 #if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) \ 388 || (defined(PLAT_amd64_win64) && defined(__GNUC__)) 392 unsigned long long int nraddr;
396 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 397 "rolq $3, %%rdi ; rolq $13, %%rdi\n\t" \ 398 "rolq $61, %%rdi ; rolq $51, %%rdi\n\t" 400 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 401 _zzq_default, _zzq_request, \ 402 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 404 ({ volatile unsigned long long int _zzq_args[6]; \ 405 volatile unsigned long long int _zzq_result; \ 406 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 407 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 408 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 409 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 410 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 411 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 412 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 414 "xchgq %%rbx,%%rbx" \ 415 : "=d" (_zzq_result) \ 416 : "a" (&_zzq_args[0]), "0" (_zzq_default) \ 422 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 423 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 424 volatile unsigned long long int __addr; \ 425 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 427 "xchgq %%rcx,%%rcx" \ 432 _zzq_orig->nraddr = __addr; \ 435 #define VALGRIND_CALL_NOREDIR_RAX \ 436 __SPECIAL_INSTRUCTION_PREAMBLE \ 438 "xchgq %%rdx,%%rdx\n\t" 440 #define VALGRIND_VEX_INJECT_IR() \ 442 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 443 "xchgq %%rdi,%%rdi\n\t" \ 444 : : : "cc", "memory" \ 452 #if defined(PLAT_amd64_win64) && !defined(__GNUC__) 454 #error Unsupported compiler. 460 #if defined(PLAT_ppc32_linux) 468 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 469 "rlwinm 0,0,3,0,31 ; rlwinm 0,0,13,0,31\n\t" \ 470 "rlwinm 0,0,29,0,31 ; rlwinm 0,0,19,0,31\n\t" 472 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 473 _zzq_default, _zzq_request, \ 474 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 477 ({ unsigned int _zzq_args[6]; \ 478 unsigned int _zzq_result; \ 479 unsigned int* _zzq_ptr; \ 480 _zzq_args[0] = (unsigned int)(_zzq_request); \ 481 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 482 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 483 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 484 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 485 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 486 _zzq_ptr = _zzq_args; \ 487 __asm__ volatile("mr 3,%1\n\t" \ 489 __SPECIAL_INSTRUCTION_PREAMBLE \ 493 : "=b" (_zzq_result) \ 494 : "b" (_zzq_default), "b" (_zzq_ptr) \ 495 : "cc", "memory", "r3", "r4"); \ 499 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 500 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 501 unsigned int __addr; \ 502 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 508 : "cc", "memory", "r3" \ 510 _zzq_orig->nraddr = __addr; \ 513 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 514 __SPECIAL_INSTRUCTION_PREAMBLE \ 518 #define VALGRIND_VEX_INJECT_IR() \ 520 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 529 #if defined(PLAT_ppc64be_linux) 533 unsigned long long int nraddr;
534 unsigned long long int r2;
538 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 539 "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ 540 "rotldi 0,0,61 ; rotldi 0,0,51\n\t" 542 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 543 _zzq_default, _zzq_request, \ 544 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 547 ({ unsigned long long int _zzq_args[6]; \ 548 unsigned long long int _zzq_result; \ 549 unsigned long long int* _zzq_ptr; \ 550 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 551 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 552 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 553 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 554 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 555 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 556 _zzq_ptr = _zzq_args; \ 557 __asm__ volatile("mr 3,%1\n\t" \ 559 __SPECIAL_INSTRUCTION_PREAMBLE \ 563 : "=b" (_zzq_result) \ 564 : "b" (_zzq_default), "b" (_zzq_ptr) \ 565 : "cc", "memory", "r3", "r4"); \ 569 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 570 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 571 unsigned long long int __addr; \ 572 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 578 : "cc", "memory", "r3" \ 580 _zzq_orig->nraddr = __addr; \ 581 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 587 : "cc", "memory", "r3" \ 589 _zzq_orig->r2 = __addr; \ 592 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 593 __SPECIAL_INSTRUCTION_PREAMBLE \ 597 #define VALGRIND_VEX_INJECT_IR() \ 599 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 606 #if defined(PLAT_ppc64le_linux) 610 unsigned long long int nraddr;
611 unsigned long long int r2;
615 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 616 "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ 617 "rotldi 0,0,61 ; rotldi 0,0,51\n\t" 619 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 620 _zzq_default, _zzq_request, \ 621 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 624 ({ unsigned long long int _zzq_args[6]; \ 625 unsigned long long int _zzq_result; \ 626 unsigned long long int* _zzq_ptr; \ 627 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 628 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 629 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 630 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 631 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 632 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 633 _zzq_ptr = _zzq_args; \ 634 __asm__ volatile("mr 3,%1\n\t" \ 636 __SPECIAL_INSTRUCTION_PREAMBLE \ 640 : "=b" (_zzq_result) \ 641 : "b" (_zzq_default), "b" (_zzq_ptr) \ 642 : "cc", "memory", "r3", "r4"); \ 646 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 647 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 648 unsigned long long int __addr; \ 649 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 655 : "cc", "memory", "r3" \ 657 _zzq_orig->nraddr = __addr; \ 658 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 664 : "cc", "memory", "r3" \ 666 _zzq_orig->r2 = __addr; \ 669 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ 670 __SPECIAL_INSTRUCTION_PREAMBLE \ 674 #define VALGRIND_VEX_INJECT_IR() \ 676 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 685 #if defined(PLAT_arm_linux) 693 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 694 "mov r12, r12, ror #3 ; mov r12, r12, ror #13 \n\t" \ 695 "mov r12, r12, ror #29 ; mov r12, r12, ror #19 \n\t" 697 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 698 _zzq_default, _zzq_request, \ 699 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 702 ({volatile unsigned int _zzq_args[6]; \ 703 volatile unsigned int _zzq_result; \ 704 _zzq_args[0] = (unsigned int)(_zzq_request); \ 705 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 706 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 707 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 708 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 709 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 710 __asm__ volatile("mov r3, %1\n\t" \ 712 __SPECIAL_INSTRUCTION_PREAMBLE \ 714 "orr r10, r10, r10\n\t" \ 716 : "=r" (_zzq_result) \ 717 : "r" (_zzq_default), "r" (&_zzq_args[0]) \ 718 : "cc","memory", "r3", "r4"); \ 722 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 723 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 724 unsigned int __addr; \ 725 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 727 "orr r11, r11, r11\n\t" \ 731 : "cc", "memory", "r3" \ 733 _zzq_orig->nraddr = __addr; \ 736 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 737 __SPECIAL_INSTRUCTION_PREAMBLE \ 739 "orr r12, r12, r12\n\t" 741 #define VALGRIND_VEX_INJECT_IR() \ 743 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 744 "orr r9, r9, r9\n\t" \ 745 : : : "cc", "memory" \ 753 #if defined(PLAT_arm64_linux) 757 unsigned long long int nraddr;
761 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 762 "ror x12, x12, #3 ; ror x12, x12, #13 \n\t" \ 763 "ror x12, x12, #51 ; ror x12, x12, #61 \n\t" 765 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 766 _zzq_default, _zzq_request, \ 767 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 770 ({volatile unsigned long long int _zzq_args[6]; \ 771 volatile unsigned long long int _zzq_result; \ 772 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 773 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 774 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 775 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 776 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 777 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 778 __asm__ volatile("mov x3, %1\n\t" \ 780 __SPECIAL_INSTRUCTION_PREAMBLE \ 782 "orr x10, x10, x10\n\t" \ 784 : "=r" (_zzq_result) \ 785 : "r" (_zzq_default), "r" (&_zzq_args[0]) \ 786 : "cc","memory", "x3", "x4"); \ 790 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 791 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 792 unsigned long long int __addr; \ 793 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 795 "orr x11, x11, x11\n\t" \ 799 : "cc", "memory", "x3" \ 801 _zzq_orig->nraddr = __addr; \ 804 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 805 __SPECIAL_INSTRUCTION_PREAMBLE \ 807 "orr x12, x12, x12\n\t" 809 #define VALGRIND_VEX_INJECT_IR() \ 811 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 812 "orr x9, x9, x9\n\t" \ 813 : : : "cc", "memory" \ 821 #if defined(PLAT_s390x_linux) 825 unsigned long long int nraddr;
833 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 839 #define __CLIENT_REQUEST_CODE "lr 2,2\n\t" 840 #define __GET_NR_CONTEXT_CODE "lr 3,3\n\t" 841 #define __CALL_NO_REDIR_CODE "lr 4,4\n\t" 842 #define __VEX_INJECT_IR_CODE "lr 5,5\n\t" 844 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 845 _zzq_default, _zzq_request, \ 846 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 848 ({volatile unsigned long long int _zzq_args[6]; \ 849 volatile unsigned long long int _zzq_result; \ 850 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 851 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 852 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 853 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 854 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 855 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 860 __SPECIAL_INSTRUCTION_PREAMBLE \ 861 __CLIENT_REQUEST_CODE \ 864 : "=d" (_zzq_result) \ 865 : "a" (&_zzq_args[0]), "0" (_zzq_default) \ 866 : "cc", "2", "3", "memory" \ 871 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 872 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 873 volatile unsigned long long int __addr; \ 874 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 875 __GET_NR_CONTEXT_CODE \ 879 : "cc", "3", "memory" \ 881 _zzq_orig->nraddr = __addr; \ 884 #define VALGRIND_CALL_NOREDIR_R1 \ 885 __SPECIAL_INSTRUCTION_PREAMBLE \ 888 #define VALGRIND_VEX_INJECT_IR() \ 890 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 891 __VEX_INJECT_IR_CODE); \ 898 #if defined(PLAT_mips32_linux) 910 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 911 "srl $0, $0, 13\n\t" \ 912 "srl $0, $0, 29\n\t" \ 913 "srl $0, $0, 3\n\t" \ 916 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 917 _zzq_default, _zzq_request, \ 918 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 920 ({ volatile unsigned int _zzq_args[6]; \ 921 volatile unsigned int _zzq_result; \ 922 _zzq_args[0] = (unsigned int)(_zzq_request); \ 923 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 924 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 925 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 926 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 927 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 928 __asm__ volatile("move $11, %1\n\t" \ 930 __SPECIAL_INSTRUCTION_PREAMBLE \ 932 "or $13, $13, $13\n\t" \ 934 : "=r" (_zzq_result) \ 935 : "r" (_zzq_default), "r" (&_zzq_args[0]) \ 940 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 941 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 942 volatile unsigned int __addr; \ 943 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 945 "or $14, $14, $14\n\t" \ 951 _zzq_orig->nraddr = __addr; \ 954 #define VALGRIND_CALL_NOREDIR_T9 \ 955 __SPECIAL_INSTRUCTION_PREAMBLE \ 957 "or $15, $15, $15\n\t" 959 #define VALGRIND_VEX_INJECT_IR() \ 961 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 962 "or $11, $11, $11\n\t" \ 971 #if defined(PLAT_mips64_linux) 975 unsigned long long nraddr;
983 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 984 "dsll $0,$0, 3 ; dsll $0,$0,13\n\t" \ 985 "dsll $0,$0,29 ; dsll $0,$0,19\n\t" 987 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 988 _zzq_default, _zzq_request, \ 989 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 991 ({ volatile unsigned long long int _zzq_args[6]; \ 992 volatile unsigned long long int _zzq_result; \ 993 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 994 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 995 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 996 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 997 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 998 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 999 __asm__ volatile("move $11, %1\n\t" \ 1000 "move $12, %2\n\t" \ 1001 __SPECIAL_INSTRUCTION_PREAMBLE \ 1003 "or $13, $13, $13\n\t" \ 1004 "move %0, $11\n\t" \ 1005 : "=r" (_zzq_result) \ 1006 : "r" (_zzq_default), "r" (&_zzq_args[0]) \ 1011 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 1012 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 1013 volatile unsigned long long int __addr; \ 1014 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 1016 "or $14, $14, $14\n\t" \ 1021 _zzq_orig->nraddr = __addr; \ 1024 #define VALGRIND_CALL_NOREDIR_T9 \ 1025 __SPECIAL_INSTRUCTION_PREAMBLE \ 1027 "or $15, $15, $15\n\t" 1029 #define VALGRIND_VEX_INJECT_IR() \ 1031 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 1032 "or $11, $11, $11\n\t" \ 1074 #define VG_CONCAT4(_aa,_bb,_cc,_dd) _aa##_bb##_cc##_dd 1076 #define I_WRAP_SONAME_FNNAME_ZU(soname,fnname) \ 1077 VG_CONCAT4(_vgw00000ZU_,soname,_,fnname) 1079 #define I_WRAP_SONAME_FNNAME_ZZ(soname,fnname) \ 1080 VG_CONCAT4(_vgw00000ZZ_,soname,_,fnname) 1086 #define VALGRIND_GET_ORIG_FN(_lval) VALGRIND_GET_NR_CONTEXT(_lval) 1094 #define I_REPLACE_SONAME_FNNAME_ZU(soname,fnname) \ 1095 VG_CONCAT4(_vgr00000ZU_,soname,_,fnname) 1097 #define I_REPLACE_SONAME_FNNAME_ZZ(soname,fnname) \ 1098 VG_CONCAT4(_vgr00000ZZ_,soname,_,fnname) 1103 #define CALL_FN_v_v(fnptr) \ 1104 do { volatile unsigned long _junk; \ 1105 CALL_FN_W_v(_junk,fnptr); } while (0) 1107 #define CALL_FN_v_W(fnptr, arg1) \ 1108 do { volatile unsigned long _junk; \ 1109 CALL_FN_W_W(_junk,fnptr,arg1); } while (0) 1111 #define CALL_FN_v_WW(fnptr, arg1,arg2) \ 1112 do { volatile unsigned long _junk; \ 1113 CALL_FN_W_WW(_junk,fnptr,arg1,arg2); } while (0) 1115 #define CALL_FN_v_WWW(fnptr, arg1,arg2,arg3) \ 1116 do { volatile unsigned long _junk; \ 1117 CALL_FN_W_WWW(_junk,fnptr,arg1,arg2,arg3); } while (0) 1119 #define CALL_FN_v_WWWW(fnptr, arg1,arg2,arg3,arg4) \ 1120 do { volatile unsigned long _junk; \ 1121 CALL_FN_W_WWWW(_junk,fnptr,arg1,arg2,arg3,arg4); } while (0) 1123 #define CALL_FN_v_5W(fnptr, arg1,arg2,arg3,arg4,arg5) \ 1124 do { volatile unsigned long _junk; \ 1125 CALL_FN_W_5W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5); } while (0) 1127 #define CALL_FN_v_6W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6) \ 1128 do { volatile unsigned long _junk; \ 1129 CALL_FN_W_6W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6); } while (0) 1131 #define CALL_FN_v_7W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6,arg7) \ 1132 do { volatile unsigned long _junk; \ 1133 CALL_FN_W_7W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6,arg7); } while (0) 1137 #if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) 1141 #define __CALLER_SAVED_REGS "ecx", "edx" 1148 #define VALGRIND_ALIGN_STACK \ 1149 "movl %%esp,%%edi\n\t" \ 1150 "andl $0xfffffff0,%%esp\n\t" 1151 #define VALGRIND_RESTORE_STACK \ 1152 "movl %%edi,%%esp\n\t" 1157 #define CALL_FN_W_v(lval, orig) \ 1159 volatile OrigFn _orig = (orig); \ 1160 volatile unsigned long _argvec[1]; \ 1161 volatile unsigned long _res; \ 1162 _argvec[0] = (unsigned long)_orig.nraddr; \ 1164 VALGRIND_ALIGN_STACK \ 1165 "movl (%%eax), %%eax\n\t" \ 1166 VALGRIND_CALL_NOREDIR_EAX \ 1167 VALGRIND_RESTORE_STACK \ 1169 : "a" (&_argvec[0]) \ 1170 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1172 lval = (__typeof__(lval)) _res; \ 1175 #define CALL_FN_W_W(lval, orig, arg1) \ 1177 volatile OrigFn _orig = (orig); \ 1178 volatile unsigned long _argvec[2]; \ 1179 volatile unsigned long _res; \ 1180 _argvec[0] = (unsigned long)_orig.nraddr; \ 1181 _argvec[1] = (unsigned long)(arg1); \ 1183 VALGRIND_ALIGN_STACK \ 1184 "subl $12, %%esp\n\t" \ 1185 "pushl 4(%%eax)\n\t" \ 1186 "movl (%%eax), %%eax\n\t" \ 1187 VALGRIND_CALL_NOREDIR_EAX \ 1188 VALGRIND_RESTORE_STACK \ 1190 : "a" (&_argvec[0]) \ 1191 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1193 lval = (__typeof__(lval)) _res; \ 1196 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 1198 volatile OrigFn _orig = (orig); \ 1199 volatile unsigned long _argvec[3]; \ 1200 volatile unsigned long _res; \ 1201 _argvec[0] = (unsigned long)_orig.nraddr; \ 1202 _argvec[1] = (unsigned long)(arg1); \ 1203 _argvec[2] = (unsigned long)(arg2); \ 1205 VALGRIND_ALIGN_STACK \ 1206 "subl $8, %%esp\n\t" \ 1207 "pushl 8(%%eax)\n\t" \ 1208 "pushl 4(%%eax)\n\t" \ 1209 "movl (%%eax), %%eax\n\t" \ 1210 VALGRIND_CALL_NOREDIR_EAX \ 1211 VALGRIND_RESTORE_STACK \ 1213 : "a" (&_argvec[0]) \ 1214 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1216 lval = (__typeof__(lval)) _res; \ 1219 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 1221 volatile OrigFn _orig = (orig); \ 1222 volatile unsigned long _argvec[4]; \ 1223 volatile unsigned long _res; \ 1224 _argvec[0] = (unsigned long)_orig.nraddr; \ 1225 _argvec[1] = (unsigned long)(arg1); \ 1226 _argvec[2] = (unsigned long)(arg2); \ 1227 _argvec[3] = (unsigned long)(arg3); \ 1229 VALGRIND_ALIGN_STACK \ 1230 "subl $4, %%esp\n\t" \ 1231 "pushl 12(%%eax)\n\t" \ 1232 "pushl 8(%%eax)\n\t" \ 1233 "pushl 4(%%eax)\n\t" \ 1234 "movl (%%eax), %%eax\n\t" \ 1235 VALGRIND_CALL_NOREDIR_EAX \ 1236 VALGRIND_RESTORE_STACK \ 1238 : "a" (&_argvec[0]) \ 1239 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1241 lval = (__typeof__(lval)) _res; \ 1244 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 1246 volatile OrigFn _orig = (orig); \ 1247 volatile unsigned long _argvec[5]; \ 1248 volatile unsigned long _res; \ 1249 _argvec[0] = (unsigned long)_orig.nraddr; \ 1250 _argvec[1] = (unsigned long)(arg1); \ 1251 _argvec[2] = (unsigned long)(arg2); \ 1252 _argvec[3] = (unsigned long)(arg3); \ 1253 _argvec[4] = (unsigned long)(arg4); \ 1255 VALGRIND_ALIGN_STACK \ 1256 "pushl 16(%%eax)\n\t" \ 1257 "pushl 12(%%eax)\n\t" \ 1258 "pushl 8(%%eax)\n\t" \ 1259 "pushl 4(%%eax)\n\t" \ 1260 "movl (%%eax), %%eax\n\t" \ 1261 VALGRIND_CALL_NOREDIR_EAX \ 1262 VALGRIND_RESTORE_STACK \ 1264 : "a" (&_argvec[0]) \ 1265 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1267 lval = (__typeof__(lval)) _res; \ 1270 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 1272 volatile OrigFn _orig = (orig); \ 1273 volatile unsigned long _argvec[6]; \ 1274 volatile unsigned long _res; \ 1275 _argvec[0] = (unsigned long)_orig.nraddr; \ 1276 _argvec[1] = (unsigned long)(arg1); \ 1277 _argvec[2] = (unsigned long)(arg2); \ 1278 _argvec[3] = (unsigned long)(arg3); \ 1279 _argvec[4] = (unsigned long)(arg4); \ 1280 _argvec[5] = (unsigned long)(arg5); \ 1282 VALGRIND_ALIGN_STACK \ 1283 "subl $12, %%esp\n\t" \ 1284 "pushl 20(%%eax)\n\t" \ 1285 "pushl 16(%%eax)\n\t" \ 1286 "pushl 12(%%eax)\n\t" \ 1287 "pushl 8(%%eax)\n\t" \ 1288 "pushl 4(%%eax)\n\t" \ 1289 "movl (%%eax), %%eax\n\t" \ 1290 VALGRIND_CALL_NOREDIR_EAX \ 1291 VALGRIND_RESTORE_STACK \ 1293 : "a" (&_argvec[0]) \ 1294 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1296 lval = (__typeof__(lval)) _res; \ 1299 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 1301 volatile OrigFn _orig = (orig); \ 1302 volatile unsigned long _argvec[7]; \ 1303 volatile unsigned long _res; \ 1304 _argvec[0] = (unsigned long)_orig.nraddr; \ 1305 _argvec[1] = (unsigned long)(arg1); \ 1306 _argvec[2] = (unsigned long)(arg2); \ 1307 _argvec[3] = (unsigned long)(arg3); \ 1308 _argvec[4] = (unsigned long)(arg4); \ 1309 _argvec[5] = (unsigned long)(arg5); \ 1310 _argvec[6] = (unsigned long)(arg6); \ 1312 VALGRIND_ALIGN_STACK \ 1313 "subl $8, %%esp\n\t" \ 1314 "pushl 24(%%eax)\n\t" \ 1315 "pushl 20(%%eax)\n\t" \ 1316 "pushl 16(%%eax)\n\t" \ 1317 "pushl 12(%%eax)\n\t" \ 1318 "pushl 8(%%eax)\n\t" \ 1319 "pushl 4(%%eax)\n\t" \ 1320 "movl (%%eax), %%eax\n\t" \ 1321 VALGRIND_CALL_NOREDIR_EAX \ 1322 VALGRIND_RESTORE_STACK \ 1324 : "a" (&_argvec[0]) \ 1325 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1327 lval = (__typeof__(lval)) _res; \ 1330 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1333 volatile OrigFn _orig = (orig); \ 1334 volatile unsigned long _argvec[8]; \ 1335 volatile unsigned long _res; \ 1336 _argvec[0] = (unsigned long)_orig.nraddr; \ 1337 _argvec[1] = (unsigned long)(arg1); \ 1338 _argvec[2] = (unsigned long)(arg2); \ 1339 _argvec[3] = (unsigned long)(arg3); \ 1340 _argvec[4] = (unsigned long)(arg4); \ 1341 _argvec[5] = (unsigned long)(arg5); \ 1342 _argvec[6] = (unsigned long)(arg6); \ 1343 _argvec[7] = (unsigned long)(arg7); \ 1345 VALGRIND_ALIGN_STACK \ 1346 "subl $4, %%esp\n\t" \ 1347 "pushl 28(%%eax)\n\t" \ 1348 "pushl 24(%%eax)\n\t" \ 1349 "pushl 20(%%eax)\n\t" \ 1350 "pushl 16(%%eax)\n\t" \ 1351 "pushl 12(%%eax)\n\t" \ 1352 "pushl 8(%%eax)\n\t" \ 1353 "pushl 4(%%eax)\n\t" \ 1354 "movl (%%eax), %%eax\n\t" \ 1355 VALGRIND_CALL_NOREDIR_EAX \ 1356 VALGRIND_RESTORE_STACK \ 1358 : "a" (&_argvec[0]) \ 1359 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1361 lval = (__typeof__(lval)) _res; \ 1364 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1367 volatile OrigFn _orig = (orig); \ 1368 volatile unsigned long _argvec[9]; \ 1369 volatile unsigned long _res; \ 1370 _argvec[0] = (unsigned long)_orig.nraddr; \ 1371 _argvec[1] = (unsigned long)(arg1); \ 1372 _argvec[2] = (unsigned long)(arg2); \ 1373 _argvec[3] = (unsigned long)(arg3); \ 1374 _argvec[4] = (unsigned long)(arg4); \ 1375 _argvec[5] = (unsigned long)(arg5); \ 1376 _argvec[6] = (unsigned long)(arg6); \ 1377 _argvec[7] = (unsigned long)(arg7); \ 1378 _argvec[8] = (unsigned long)(arg8); \ 1380 VALGRIND_ALIGN_STACK \ 1381 "pushl 32(%%eax)\n\t" \ 1382 "pushl 28(%%eax)\n\t" \ 1383 "pushl 24(%%eax)\n\t" \ 1384 "pushl 20(%%eax)\n\t" \ 1385 "pushl 16(%%eax)\n\t" \ 1386 "pushl 12(%%eax)\n\t" \ 1387 "pushl 8(%%eax)\n\t" \ 1388 "pushl 4(%%eax)\n\t" \ 1389 "movl (%%eax), %%eax\n\t" \ 1390 VALGRIND_CALL_NOREDIR_EAX \ 1391 VALGRIND_RESTORE_STACK \ 1393 : "a" (&_argvec[0]) \ 1394 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1396 lval = (__typeof__(lval)) _res; \ 1399 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1402 volatile OrigFn _orig = (orig); \ 1403 volatile unsigned long _argvec[10]; \ 1404 volatile unsigned long _res; \ 1405 _argvec[0] = (unsigned long)_orig.nraddr; \ 1406 _argvec[1] = (unsigned long)(arg1); \ 1407 _argvec[2] = (unsigned long)(arg2); \ 1408 _argvec[3] = (unsigned long)(arg3); \ 1409 _argvec[4] = (unsigned long)(arg4); \ 1410 _argvec[5] = (unsigned long)(arg5); \ 1411 _argvec[6] = (unsigned long)(arg6); \ 1412 _argvec[7] = (unsigned long)(arg7); \ 1413 _argvec[8] = (unsigned long)(arg8); \ 1414 _argvec[9] = (unsigned long)(arg9); \ 1416 VALGRIND_ALIGN_STACK \ 1417 "subl $12, %%esp\n\t" \ 1418 "pushl 36(%%eax)\n\t" \ 1419 "pushl 32(%%eax)\n\t" \ 1420 "pushl 28(%%eax)\n\t" \ 1421 "pushl 24(%%eax)\n\t" \ 1422 "pushl 20(%%eax)\n\t" \ 1423 "pushl 16(%%eax)\n\t" \ 1424 "pushl 12(%%eax)\n\t" \ 1425 "pushl 8(%%eax)\n\t" \ 1426 "pushl 4(%%eax)\n\t" \ 1427 "movl (%%eax), %%eax\n\t" \ 1428 VALGRIND_CALL_NOREDIR_EAX \ 1429 VALGRIND_RESTORE_STACK \ 1431 : "a" (&_argvec[0]) \ 1432 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1434 lval = (__typeof__(lval)) _res; \ 1437 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1438 arg7,arg8,arg9,arg10) \ 1440 volatile OrigFn _orig = (orig); \ 1441 volatile unsigned long _argvec[11]; \ 1442 volatile unsigned long _res; \ 1443 _argvec[0] = (unsigned long)_orig.nraddr; \ 1444 _argvec[1] = (unsigned long)(arg1); \ 1445 _argvec[2] = (unsigned long)(arg2); \ 1446 _argvec[3] = (unsigned long)(arg3); \ 1447 _argvec[4] = (unsigned long)(arg4); \ 1448 _argvec[5] = (unsigned long)(arg5); \ 1449 _argvec[6] = (unsigned long)(arg6); \ 1450 _argvec[7] = (unsigned long)(arg7); \ 1451 _argvec[8] = (unsigned long)(arg8); \ 1452 _argvec[9] = (unsigned long)(arg9); \ 1453 _argvec[10] = (unsigned long)(arg10); \ 1455 VALGRIND_ALIGN_STACK \ 1456 "subl $8, %%esp\n\t" \ 1457 "pushl 40(%%eax)\n\t" \ 1458 "pushl 36(%%eax)\n\t" \ 1459 "pushl 32(%%eax)\n\t" \ 1460 "pushl 28(%%eax)\n\t" \ 1461 "pushl 24(%%eax)\n\t" \ 1462 "pushl 20(%%eax)\n\t" \ 1463 "pushl 16(%%eax)\n\t" \ 1464 "pushl 12(%%eax)\n\t" \ 1465 "pushl 8(%%eax)\n\t" \ 1466 "pushl 4(%%eax)\n\t" \ 1467 "movl (%%eax), %%eax\n\t" \ 1468 VALGRIND_CALL_NOREDIR_EAX \ 1469 VALGRIND_RESTORE_STACK \ 1471 : "a" (&_argvec[0]) \ 1472 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1474 lval = (__typeof__(lval)) _res; \ 1477 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 1478 arg6,arg7,arg8,arg9,arg10, \ 1481 volatile OrigFn _orig = (orig); \ 1482 volatile unsigned long _argvec[12]; \ 1483 volatile unsigned long _res; \ 1484 _argvec[0] = (unsigned long)_orig.nraddr; \ 1485 _argvec[1] = (unsigned long)(arg1); \ 1486 _argvec[2] = (unsigned long)(arg2); \ 1487 _argvec[3] = (unsigned long)(arg3); \ 1488 _argvec[4] = (unsigned long)(arg4); \ 1489 _argvec[5] = (unsigned long)(arg5); \ 1490 _argvec[6] = (unsigned long)(arg6); \ 1491 _argvec[7] = (unsigned long)(arg7); \ 1492 _argvec[8] = (unsigned long)(arg8); \ 1493 _argvec[9] = (unsigned long)(arg9); \ 1494 _argvec[10] = (unsigned long)(arg10); \ 1495 _argvec[11] = (unsigned long)(arg11); \ 1497 VALGRIND_ALIGN_STACK \ 1498 "subl $4, %%esp\n\t" \ 1499 "pushl 44(%%eax)\n\t" \ 1500 "pushl 40(%%eax)\n\t" \ 1501 "pushl 36(%%eax)\n\t" \ 1502 "pushl 32(%%eax)\n\t" \ 1503 "pushl 28(%%eax)\n\t" \ 1504 "pushl 24(%%eax)\n\t" \ 1505 "pushl 20(%%eax)\n\t" \ 1506 "pushl 16(%%eax)\n\t" \ 1507 "pushl 12(%%eax)\n\t" \ 1508 "pushl 8(%%eax)\n\t" \ 1509 "pushl 4(%%eax)\n\t" \ 1510 "movl (%%eax), %%eax\n\t" \ 1511 VALGRIND_CALL_NOREDIR_EAX \ 1512 VALGRIND_RESTORE_STACK \ 1514 : "a" (&_argvec[0]) \ 1515 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1517 lval = (__typeof__(lval)) _res; \ 1520 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 1521 arg6,arg7,arg8,arg9,arg10, \ 1524 volatile OrigFn _orig = (orig); \ 1525 volatile unsigned long _argvec[13]; \ 1526 volatile unsigned long _res; \ 1527 _argvec[0] = (unsigned long)_orig.nraddr; \ 1528 _argvec[1] = (unsigned long)(arg1); \ 1529 _argvec[2] = (unsigned long)(arg2); \ 1530 _argvec[3] = (unsigned long)(arg3); \ 1531 _argvec[4] = (unsigned long)(arg4); \ 1532 _argvec[5] = (unsigned long)(arg5); \ 1533 _argvec[6] = (unsigned long)(arg6); \ 1534 _argvec[7] = (unsigned long)(arg7); \ 1535 _argvec[8] = (unsigned long)(arg8); \ 1536 _argvec[9] = (unsigned long)(arg9); \ 1537 _argvec[10] = (unsigned long)(arg10); \ 1538 _argvec[11] = (unsigned long)(arg11); \ 1539 _argvec[12] = (unsigned long)(arg12); \ 1541 VALGRIND_ALIGN_STACK \ 1542 "pushl 48(%%eax)\n\t" \ 1543 "pushl 44(%%eax)\n\t" \ 1544 "pushl 40(%%eax)\n\t" \ 1545 "pushl 36(%%eax)\n\t" \ 1546 "pushl 32(%%eax)\n\t" \ 1547 "pushl 28(%%eax)\n\t" \ 1548 "pushl 24(%%eax)\n\t" \ 1549 "pushl 20(%%eax)\n\t" \ 1550 "pushl 16(%%eax)\n\t" \ 1551 "pushl 12(%%eax)\n\t" \ 1552 "pushl 8(%%eax)\n\t" \ 1553 "pushl 4(%%eax)\n\t" \ 1554 "movl (%%eax), %%eax\n\t" \ 1555 VALGRIND_CALL_NOREDIR_EAX \ 1556 VALGRIND_RESTORE_STACK \ 1558 : "a" (&_argvec[0]) \ 1559 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1561 lval = (__typeof__(lval)) _res; \ 1568 #if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) 1573 #define __CALLER_SAVED_REGS "rcx", "rdx", "rsi", \ 1574 "rdi", "r8", "r9", "r10", "r11" 1630 #if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM) 1631 # define __FRAME_POINTER \ 1632 ,"r"(__builtin_dwarf_cfa()) 1633 # define VALGRIND_CFI_PROLOGUE \ 1634 "movq %%rbp, %%r15\n\t" \ 1635 "movq %2, %%rbp\n\t" \ 1636 ".cfi_remember_state\n\t" \ 1637 ".cfi_def_cfa rbp, 0\n\t" 1638 # define VALGRIND_CFI_EPILOGUE \ 1639 "movq %%r15, %%rbp\n\t" \ 1640 ".cfi_restore_state\n\t" 1642 # define __FRAME_POINTER 1643 # define VALGRIND_CFI_PROLOGUE 1644 # define VALGRIND_CFI_EPILOGUE 1652 #define VALGRIND_ALIGN_STACK \ 1653 "movq %%rsp,%%r14\n\t" \ 1654 "andq $0xfffffffffffffff0,%%rsp\n\t" 1655 #define VALGRIND_RESTORE_STACK \ 1656 "movq %%r14,%%rsp\n\t" 1682 #define CALL_FN_W_v(lval, orig) \ 1684 volatile OrigFn _orig = (orig); \ 1685 volatile unsigned long _argvec[1]; \ 1686 volatile unsigned long _res; \ 1687 _argvec[0] = (unsigned long)_orig.nraddr; \ 1689 VALGRIND_CFI_PROLOGUE \ 1690 VALGRIND_ALIGN_STACK \ 1691 "subq $128,%%rsp\n\t" \ 1692 "movq (%%rax), %%rax\n\t" \ 1693 VALGRIND_CALL_NOREDIR_RAX \ 1694 VALGRIND_RESTORE_STACK \ 1695 VALGRIND_CFI_EPILOGUE \ 1697 : "a" (&_argvec[0]) __FRAME_POINTER \ 1698 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1700 lval = (__typeof__(lval)) _res; \ 1703 #define CALL_FN_W_W(lval, orig, arg1) \ 1705 volatile OrigFn _orig = (orig); \ 1706 volatile unsigned long _argvec[2]; \ 1707 volatile unsigned long _res; \ 1708 _argvec[0] = (unsigned long)_orig.nraddr; \ 1709 _argvec[1] = (unsigned long)(arg1); \ 1711 VALGRIND_CFI_PROLOGUE \ 1712 VALGRIND_ALIGN_STACK \ 1713 "subq $128,%%rsp\n\t" \ 1714 "movq 8(%%rax), %%rdi\n\t" \ 1715 "movq (%%rax), %%rax\n\t" \ 1716 VALGRIND_CALL_NOREDIR_RAX \ 1717 VALGRIND_RESTORE_STACK \ 1718 VALGRIND_CFI_EPILOGUE \ 1720 : "a" (&_argvec[0]) __FRAME_POINTER \ 1721 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1723 lval = (__typeof__(lval)) _res; \ 1726 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 1728 volatile OrigFn _orig = (orig); \ 1729 volatile unsigned long _argvec[3]; \ 1730 volatile unsigned long _res; \ 1731 _argvec[0] = (unsigned long)_orig.nraddr; \ 1732 _argvec[1] = (unsigned long)(arg1); \ 1733 _argvec[2] = (unsigned long)(arg2); \ 1735 VALGRIND_CFI_PROLOGUE \ 1736 VALGRIND_ALIGN_STACK \ 1737 "subq $128,%%rsp\n\t" \ 1738 "movq 16(%%rax), %%rsi\n\t" \ 1739 "movq 8(%%rax), %%rdi\n\t" \ 1740 "movq (%%rax), %%rax\n\t" \ 1741 VALGRIND_CALL_NOREDIR_RAX \ 1742 VALGRIND_RESTORE_STACK \ 1743 VALGRIND_CFI_EPILOGUE \ 1745 : "a" (&_argvec[0]) __FRAME_POINTER \ 1746 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1748 lval = (__typeof__(lval)) _res; \ 1751 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 1753 volatile OrigFn _orig = (orig); \ 1754 volatile unsigned long _argvec[4]; \ 1755 volatile unsigned long _res; \ 1756 _argvec[0] = (unsigned long)_orig.nraddr; \ 1757 _argvec[1] = (unsigned long)(arg1); \ 1758 _argvec[2] = (unsigned long)(arg2); \ 1759 _argvec[3] = (unsigned long)(arg3); \ 1761 VALGRIND_CFI_PROLOGUE \ 1762 VALGRIND_ALIGN_STACK \ 1763 "subq $128,%%rsp\n\t" \ 1764 "movq 24(%%rax), %%rdx\n\t" \ 1765 "movq 16(%%rax), %%rsi\n\t" \ 1766 "movq 8(%%rax), %%rdi\n\t" \ 1767 "movq (%%rax), %%rax\n\t" \ 1768 VALGRIND_CALL_NOREDIR_RAX \ 1769 VALGRIND_RESTORE_STACK \ 1770 VALGRIND_CFI_EPILOGUE \ 1772 : "a" (&_argvec[0]) __FRAME_POINTER \ 1773 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1775 lval = (__typeof__(lval)) _res; \ 1778 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 1780 volatile OrigFn _orig = (orig); \ 1781 volatile unsigned long _argvec[5]; \ 1782 volatile unsigned long _res; \ 1783 _argvec[0] = (unsigned long)_orig.nraddr; \ 1784 _argvec[1] = (unsigned long)(arg1); \ 1785 _argvec[2] = (unsigned long)(arg2); \ 1786 _argvec[3] = (unsigned long)(arg3); \ 1787 _argvec[4] = (unsigned long)(arg4); \ 1789 VALGRIND_CFI_PROLOGUE \ 1790 VALGRIND_ALIGN_STACK \ 1791 "subq $128,%%rsp\n\t" \ 1792 "movq 32(%%rax), %%rcx\n\t" \ 1793 "movq 24(%%rax), %%rdx\n\t" \ 1794 "movq 16(%%rax), %%rsi\n\t" \ 1795 "movq 8(%%rax), %%rdi\n\t" \ 1796 "movq (%%rax), %%rax\n\t" \ 1797 VALGRIND_CALL_NOREDIR_RAX \ 1798 VALGRIND_RESTORE_STACK \ 1799 VALGRIND_CFI_EPILOGUE \ 1801 : "a" (&_argvec[0]) __FRAME_POINTER \ 1802 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1804 lval = (__typeof__(lval)) _res; \ 1807 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 1809 volatile OrigFn _orig = (orig); \ 1810 volatile unsigned long _argvec[6]; \ 1811 volatile unsigned long _res; \ 1812 _argvec[0] = (unsigned long)_orig.nraddr; \ 1813 _argvec[1] = (unsigned long)(arg1); \ 1814 _argvec[2] = (unsigned long)(arg2); \ 1815 _argvec[3] = (unsigned long)(arg3); \ 1816 _argvec[4] = (unsigned long)(arg4); \ 1817 _argvec[5] = (unsigned long)(arg5); \ 1819 VALGRIND_CFI_PROLOGUE \ 1820 VALGRIND_ALIGN_STACK \ 1821 "subq $128,%%rsp\n\t" \ 1822 "movq 40(%%rax), %%r8\n\t" \ 1823 "movq 32(%%rax), %%rcx\n\t" \ 1824 "movq 24(%%rax), %%rdx\n\t" \ 1825 "movq 16(%%rax), %%rsi\n\t" \ 1826 "movq 8(%%rax), %%rdi\n\t" \ 1827 "movq (%%rax), %%rax\n\t" \ 1828 VALGRIND_CALL_NOREDIR_RAX \ 1829 VALGRIND_RESTORE_STACK \ 1830 VALGRIND_CFI_EPILOGUE \ 1832 : "a" (&_argvec[0]) __FRAME_POINTER \ 1833 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1835 lval = (__typeof__(lval)) _res; \ 1838 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 1840 volatile OrigFn _orig = (orig); \ 1841 volatile unsigned long _argvec[7]; \ 1842 volatile unsigned long _res; \ 1843 _argvec[0] = (unsigned long)_orig.nraddr; \ 1844 _argvec[1] = (unsigned long)(arg1); \ 1845 _argvec[2] = (unsigned long)(arg2); \ 1846 _argvec[3] = (unsigned long)(arg3); \ 1847 _argvec[4] = (unsigned long)(arg4); \ 1848 _argvec[5] = (unsigned long)(arg5); \ 1849 _argvec[6] = (unsigned long)(arg6); \ 1851 VALGRIND_CFI_PROLOGUE \ 1852 VALGRIND_ALIGN_STACK \ 1853 "subq $128,%%rsp\n\t" \ 1854 "movq 48(%%rax), %%r9\n\t" \ 1855 "movq 40(%%rax), %%r8\n\t" \ 1856 "movq 32(%%rax), %%rcx\n\t" \ 1857 "movq 24(%%rax), %%rdx\n\t" \ 1858 "movq 16(%%rax), %%rsi\n\t" \ 1859 "movq 8(%%rax), %%rdi\n\t" \ 1860 "movq (%%rax), %%rax\n\t" \ 1861 VALGRIND_CALL_NOREDIR_RAX \ 1862 VALGRIND_RESTORE_STACK \ 1863 VALGRIND_CFI_EPILOGUE \ 1865 : "a" (&_argvec[0]) __FRAME_POINTER \ 1866 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1868 lval = (__typeof__(lval)) _res; \ 1871 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1874 volatile OrigFn _orig = (orig); \ 1875 volatile unsigned long _argvec[8]; \ 1876 volatile unsigned long _res; \ 1877 _argvec[0] = (unsigned long)_orig.nraddr; \ 1878 _argvec[1] = (unsigned long)(arg1); \ 1879 _argvec[2] = (unsigned long)(arg2); \ 1880 _argvec[3] = (unsigned long)(arg3); \ 1881 _argvec[4] = (unsigned long)(arg4); \ 1882 _argvec[5] = (unsigned long)(arg5); \ 1883 _argvec[6] = (unsigned long)(arg6); \ 1884 _argvec[7] = (unsigned long)(arg7); \ 1886 VALGRIND_CFI_PROLOGUE \ 1887 VALGRIND_ALIGN_STACK \ 1888 "subq $136,%%rsp\n\t" \ 1889 "pushq 56(%%rax)\n\t" \ 1890 "movq 48(%%rax), %%r9\n\t" \ 1891 "movq 40(%%rax), %%r8\n\t" \ 1892 "movq 32(%%rax), %%rcx\n\t" \ 1893 "movq 24(%%rax), %%rdx\n\t" \ 1894 "movq 16(%%rax), %%rsi\n\t" \ 1895 "movq 8(%%rax), %%rdi\n\t" \ 1896 "movq (%%rax), %%rax\n\t" \ 1897 VALGRIND_CALL_NOREDIR_RAX \ 1898 VALGRIND_RESTORE_STACK \ 1899 VALGRIND_CFI_EPILOGUE \ 1901 : "a" (&_argvec[0]) __FRAME_POINTER \ 1902 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1904 lval = (__typeof__(lval)) _res; \ 1907 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1910 volatile OrigFn _orig = (orig); \ 1911 volatile unsigned long _argvec[9]; \ 1912 volatile unsigned long _res; \ 1913 _argvec[0] = (unsigned long)_orig.nraddr; \ 1914 _argvec[1] = (unsigned long)(arg1); \ 1915 _argvec[2] = (unsigned long)(arg2); \ 1916 _argvec[3] = (unsigned long)(arg3); \ 1917 _argvec[4] = (unsigned long)(arg4); \ 1918 _argvec[5] = (unsigned long)(arg5); \ 1919 _argvec[6] = (unsigned long)(arg6); \ 1920 _argvec[7] = (unsigned long)(arg7); \ 1921 _argvec[8] = (unsigned long)(arg8); \ 1923 VALGRIND_CFI_PROLOGUE \ 1924 VALGRIND_ALIGN_STACK \ 1925 "subq $128,%%rsp\n\t" \ 1926 "pushq 64(%%rax)\n\t" \ 1927 "pushq 56(%%rax)\n\t" \ 1928 "movq 48(%%rax), %%r9\n\t" \ 1929 "movq 40(%%rax), %%r8\n\t" \ 1930 "movq 32(%%rax), %%rcx\n\t" \ 1931 "movq 24(%%rax), %%rdx\n\t" \ 1932 "movq 16(%%rax), %%rsi\n\t" \ 1933 "movq 8(%%rax), %%rdi\n\t" \ 1934 "movq (%%rax), %%rax\n\t" \ 1935 VALGRIND_CALL_NOREDIR_RAX \ 1936 VALGRIND_RESTORE_STACK \ 1937 VALGRIND_CFI_EPILOGUE \ 1939 : "a" (&_argvec[0]) __FRAME_POINTER \ 1940 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1942 lval = (__typeof__(lval)) _res; \ 1945 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1948 volatile OrigFn _orig = (orig); \ 1949 volatile unsigned long _argvec[10]; \ 1950 volatile unsigned long _res; \ 1951 _argvec[0] = (unsigned long)_orig.nraddr; \ 1952 _argvec[1] = (unsigned long)(arg1); \ 1953 _argvec[2] = (unsigned long)(arg2); \ 1954 _argvec[3] = (unsigned long)(arg3); \ 1955 _argvec[4] = (unsigned long)(arg4); \ 1956 _argvec[5] = (unsigned long)(arg5); \ 1957 _argvec[6] = (unsigned long)(arg6); \ 1958 _argvec[7] = (unsigned long)(arg7); \ 1959 _argvec[8] = (unsigned long)(arg8); \ 1960 _argvec[9] = (unsigned long)(arg9); \ 1962 VALGRIND_CFI_PROLOGUE \ 1963 VALGRIND_ALIGN_STACK \ 1964 "subq $136,%%rsp\n\t" \ 1965 "pushq 72(%%rax)\n\t" \ 1966 "pushq 64(%%rax)\n\t" \ 1967 "pushq 56(%%rax)\n\t" \ 1968 "movq 48(%%rax), %%r9\n\t" \ 1969 "movq 40(%%rax), %%r8\n\t" \ 1970 "movq 32(%%rax), %%rcx\n\t" \ 1971 "movq 24(%%rax), %%rdx\n\t" \ 1972 "movq 16(%%rax), %%rsi\n\t" \ 1973 "movq 8(%%rax), %%rdi\n\t" \ 1974 "movq (%%rax), %%rax\n\t" \ 1975 VALGRIND_CALL_NOREDIR_RAX \ 1976 VALGRIND_RESTORE_STACK \ 1977 VALGRIND_CFI_EPILOGUE \ 1979 : "a" (&_argvec[0]) __FRAME_POINTER \ 1980 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1982 lval = (__typeof__(lval)) _res; \ 1985 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1986 arg7,arg8,arg9,arg10) \ 1988 volatile OrigFn _orig = (orig); \ 1989 volatile unsigned long _argvec[11]; \ 1990 volatile unsigned long _res; \ 1991 _argvec[0] = (unsigned long)_orig.nraddr; \ 1992 _argvec[1] = (unsigned long)(arg1); \ 1993 _argvec[2] = (unsigned long)(arg2); \ 1994 _argvec[3] = (unsigned long)(arg3); \ 1995 _argvec[4] = (unsigned long)(arg4); \ 1996 _argvec[5] = (unsigned long)(arg5); \ 1997 _argvec[6] = (unsigned long)(arg6); \ 1998 _argvec[7] = (unsigned long)(arg7); \ 1999 _argvec[8] = (unsigned long)(arg8); \ 2000 _argvec[9] = (unsigned long)(arg9); \ 2001 _argvec[10] = (unsigned long)(arg10); \ 2003 VALGRIND_CFI_PROLOGUE \ 2004 VALGRIND_ALIGN_STACK \ 2005 "subq $128,%%rsp\n\t" \ 2006 "pushq 80(%%rax)\n\t" \ 2007 "pushq 72(%%rax)\n\t" \ 2008 "pushq 64(%%rax)\n\t" \ 2009 "pushq 56(%%rax)\n\t" \ 2010 "movq 48(%%rax), %%r9\n\t" \ 2011 "movq 40(%%rax), %%r8\n\t" \ 2012 "movq 32(%%rax), %%rcx\n\t" \ 2013 "movq 24(%%rax), %%rdx\n\t" \ 2014 "movq 16(%%rax), %%rsi\n\t" \ 2015 "movq 8(%%rax), %%rdi\n\t" \ 2016 "movq (%%rax), %%rax\n\t" \ 2017 VALGRIND_CALL_NOREDIR_RAX \ 2018 VALGRIND_RESTORE_STACK \ 2019 VALGRIND_CFI_EPILOGUE \ 2021 : "a" (&_argvec[0]) __FRAME_POINTER \ 2022 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 2024 lval = (__typeof__(lval)) _res; \ 2027 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2028 arg7,arg8,arg9,arg10,arg11) \ 2030 volatile OrigFn _orig = (orig); \ 2031 volatile unsigned long _argvec[12]; \ 2032 volatile unsigned long _res; \ 2033 _argvec[0] = (unsigned long)_orig.nraddr; \ 2034 _argvec[1] = (unsigned long)(arg1); \ 2035 _argvec[2] = (unsigned long)(arg2); \ 2036 _argvec[3] = (unsigned long)(arg3); \ 2037 _argvec[4] = (unsigned long)(arg4); \ 2038 _argvec[5] = (unsigned long)(arg5); \ 2039 _argvec[6] = (unsigned long)(arg6); \ 2040 _argvec[7] = (unsigned long)(arg7); \ 2041 _argvec[8] = (unsigned long)(arg8); \ 2042 _argvec[9] = (unsigned long)(arg9); \ 2043 _argvec[10] = (unsigned long)(arg10); \ 2044 _argvec[11] = (unsigned long)(arg11); \ 2046 VALGRIND_CFI_PROLOGUE \ 2047 VALGRIND_ALIGN_STACK \ 2048 "subq $136,%%rsp\n\t" \ 2049 "pushq 88(%%rax)\n\t" \ 2050 "pushq 80(%%rax)\n\t" \ 2051 "pushq 72(%%rax)\n\t" \ 2052 "pushq 64(%%rax)\n\t" \ 2053 "pushq 56(%%rax)\n\t" \ 2054 "movq 48(%%rax), %%r9\n\t" \ 2055 "movq 40(%%rax), %%r8\n\t" \ 2056 "movq 32(%%rax), %%rcx\n\t" \ 2057 "movq 24(%%rax), %%rdx\n\t" \ 2058 "movq 16(%%rax), %%rsi\n\t" \ 2059 "movq 8(%%rax), %%rdi\n\t" \ 2060 "movq (%%rax), %%rax\n\t" \ 2061 VALGRIND_CALL_NOREDIR_RAX \ 2062 VALGRIND_RESTORE_STACK \ 2063 VALGRIND_CFI_EPILOGUE \ 2065 : "a" (&_argvec[0]) __FRAME_POINTER \ 2066 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 2068 lval = (__typeof__(lval)) _res; \ 2071 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2072 arg7,arg8,arg9,arg10,arg11,arg12) \ 2074 volatile OrigFn _orig = (orig); \ 2075 volatile unsigned long _argvec[13]; \ 2076 volatile unsigned long _res; \ 2077 _argvec[0] = (unsigned long)_orig.nraddr; \ 2078 _argvec[1] = (unsigned long)(arg1); \ 2079 _argvec[2] = (unsigned long)(arg2); \ 2080 _argvec[3] = (unsigned long)(arg3); \ 2081 _argvec[4] = (unsigned long)(arg4); \ 2082 _argvec[5] = (unsigned long)(arg5); \ 2083 _argvec[6] = (unsigned long)(arg6); \ 2084 _argvec[7] = (unsigned long)(arg7); \ 2085 _argvec[8] = (unsigned long)(arg8); \ 2086 _argvec[9] = (unsigned long)(arg9); \ 2087 _argvec[10] = (unsigned long)(arg10); \ 2088 _argvec[11] = (unsigned long)(arg11); \ 2089 _argvec[12] = (unsigned long)(arg12); \ 2091 VALGRIND_CFI_PROLOGUE \ 2092 VALGRIND_ALIGN_STACK \ 2093 "subq $128,%%rsp\n\t" \ 2094 "pushq 96(%%rax)\n\t" \ 2095 "pushq 88(%%rax)\n\t" \ 2096 "pushq 80(%%rax)\n\t" \ 2097 "pushq 72(%%rax)\n\t" \ 2098 "pushq 64(%%rax)\n\t" \ 2099 "pushq 56(%%rax)\n\t" \ 2100 "movq 48(%%rax), %%r9\n\t" \ 2101 "movq 40(%%rax), %%r8\n\t" \ 2102 "movq 32(%%rax), %%rcx\n\t" \ 2103 "movq 24(%%rax), %%rdx\n\t" \ 2104 "movq 16(%%rax), %%rsi\n\t" \ 2105 "movq 8(%%rax), %%rdi\n\t" \ 2106 "movq (%%rax), %%rax\n\t" \ 2107 VALGRIND_CALL_NOREDIR_RAX \ 2108 VALGRIND_RESTORE_STACK \ 2109 VALGRIND_CFI_EPILOGUE \ 2111 : "a" (&_argvec[0]) __FRAME_POINTER \ 2112 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 2114 lval = (__typeof__(lval)) _res; \ 2121 #if defined(PLAT_ppc32_linux) 2147 #define __CALLER_SAVED_REGS \ 2148 "lr", "ctr", "xer", \ 2149 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ 2150 "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ 2158 #define VALGRIND_ALIGN_STACK \ 2160 "rlwinm 1,1,0,0,27\n\t" 2161 #define VALGRIND_RESTORE_STACK \ 2167 #define CALL_FN_W_v(lval, orig) \ 2169 volatile OrigFn _orig = (orig); \ 2170 volatile unsigned long _argvec[1]; \ 2171 volatile unsigned long _res; \ 2172 _argvec[0] = (unsigned long)_orig.nraddr; \ 2174 VALGRIND_ALIGN_STACK \ 2176 "lwz 11,0(11)\n\t" \ 2177 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2178 VALGRIND_RESTORE_STACK \ 2181 : "r" (&_argvec[0]) \ 2182 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2184 lval = (__typeof__(lval)) _res; \ 2187 #define CALL_FN_W_W(lval, orig, arg1) \ 2189 volatile OrigFn _orig = (orig); \ 2190 volatile unsigned long _argvec[2]; \ 2191 volatile unsigned long _res; \ 2192 _argvec[0] = (unsigned long)_orig.nraddr; \ 2193 _argvec[1] = (unsigned long)arg1; \ 2195 VALGRIND_ALIGN_STACK \ 2198 "lwz 11,0(11)\n\t" \ 2199 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2200 VALGRIND_RESTORE_STACK \ 2203 : "r" (&_argvec[0]) \ 2204 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2206 lval = (__typeof__(lval)) _res; \ 2209 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 2211 volatile OrigFn _orig = (orig); \ 2212 volatile unsigned long _argvec[3]; \ 2213 volatile unsigned long _res; \ 2214 _argvec[0] = (unsigned long)_orig.nraddr; \ 2215 _argvec[1] = (unsigned long)arg1; \ 2216 _argvec[2] = (unsigned long)arg2; \ 2218 VALGRIND_ALIGN_STACK \ 2222 "lwz 11,0(11)\n\t" \ 2223 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2224 VALGRIND_RESTORE_STACK \ 2227 : "r" (&_argvec[0]) \ 2228 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2230 lval = (__typeof__(lval)) _res; \ 2233 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 2235 volatile OrigFn _orig = (orig); \ 2236 volatile unsigned long _argvec[4]; \ 2237 volatile unsigned long _res; \ 2238 _argvec[0] = (unsigned long)_orig.nraddr; \ 2239 _argvec[1] = (unsigned long)arg1; \ 2240 _argvec[2] = (unsigned long)arg2; \ 2241 _argvec[3] = (unsigned long)arg3; \ 2243 VALGRIND_ALIGN_STACK \ 2247 "lwz 5,12(11)\n\t" \ 2248 "lwz 11,0(11)\n\t" \ 2249 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2250 VALGRIND_RESTORE_STACK \ 2253 : "r" (&_argvec[0]) \ 2254 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2256 lval = (__typeof__(lval)) _res; \ 2259 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 2261 volatile OrigFn _orig = (orig); \ 2262 volatile unsigned long _argvec[5]; \ 2263 volatile unsigned long _res; \ 2264 _argvec[0] = (unsigned long)_orig.nraddr; \ 2265 _argvec[1] = (unsigned long)arg1; \ 2266 _argvec[2] = (unsigned long)arg2; \ 2267 _argvec[3] = (unsigned long)arg3; \ 2268 _argvec[4] = (unsigned long)arg4; \ 2270 VALGRIND_ALIGN_STACK \ 2274 "lwz 5,12(11)\n\t" \ 2275 "lwz 6,16(11)\n\t" \ 2276 "lwz 11,0(11)\n\t" \ 2277 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2278 VALGRIND_RESTORE_STACK \ 2281 : "r" (&_argvec[0]) \ 2282 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2284 lval = (__typeof__(lval)) _res; \ 2287 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 2289 volatile OrigFn _orig = (orig); \ 2290 volatile unsigned long _argvec[6]; \ 2291 volatile unsigned long _res; \ 2292 _argvec[0] = (unsigned long)_orig.nraddr; \ 2293 _argvec[1] = (unsigned long)arg1; \ 2294 _argvec[2] = (unsigned long)arg2; \ 2295 _argvec[3] = (unsigned long)arg3; \ 2296 _argvec[4] = (unsigned long)arg4; \ 2297 _argvec[5] = (unsigned long)arg5; \ 2299 VALGRIND_ALIGN_STACK \ 2303 "lwz 5,12(11)\n\t" \ 2304 "lwz 6,16(11)\n\t" \ 2305 "lwz 7,20(11)\n\t" \ 2306 "lwz 11,0(11)\n\t" \ 2307 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2308 VALGRIND_RESTORE_STACK \ 2311 : "r" (&_argvec[0]) \ 2312 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2314 lval = (__typeof__(lval)) _res; \ 2317 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 2319 volatile OrigFn _orig = (orig); \ 2320 volatile unsigned long _argvec[7]; \ 2321 volatile unsigned long _res; \ 2322 _argvec[0] = (unsigned long)_orig.nraddr; \ 2323 _argvec[1] = (unsigned long)arg1; \ 2324 _argvec[2] = (unsigned long)arg2; \ 2325 _argvec[3] = (unsigned long)arg3; \ 2326 _argvec[4] = (unsigned long)arg4; \ 2327 _argvec[5] = (unsigned long)arg5; \ 2328 _argvec[6] = (unsigned long)arg6; \ 2330 VALGRIND_ALIGN_STACK \ 2334 "lwz 5,12(11)\n\t" \ 2335 "lwz 6,16(11)\n\t" \ 2336 "lwz 7,20(11)\n\t" \ 2337 "lwz 8,24(11)\n\t" \ 2338 "lwz 11,0(11)\n\t" \ 2339 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2340 VALGRIND_RESTORE_STACK \ 2343 : "r" (&_argvec[0]) \ 2344 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2346 lval = (__typeof__(lval)) _res; \ 2349 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2352 volatile OrigFn _orig = (orig); \ 2353 volatile unsigned long _argvec[8]; \ 2354 volatile unsigned long _res; \ 2355 _argvec[0] = (unsigned long)_orig.nraddr; \ 2356 _argvec[1] = (unsigned long)arg1; \ 2357 _argvec[2] = (unsigned long)arg2; \ 2358 _argvec[3] = (unsigned long)arg3; \ 2359 _argvec[4] = (unsigned long)arg4; \ 2360 _argvec[5] = (unsigned long)arg5; \ 2361 _argvec[6] = (unsigned long)arg6; \ 2362 _argvec[7] = (unsigned long)arg7; \ 2364 VALGRIND_ALIGN_STACK \ 2368 "lwz 5,12(11)\n\t" \ 2369 "lwz 6,16(11)\n\t" \ 2370 "lwz 7,20(11)\n\t" \ 2371 "lwz 8,24(11)\n\t" \ 2372 "lwz 9,28(11)\n\t" \ 2373 "lwz 11,0(11)\n\t" \ 2374 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2375 VALGRIND_RESTORE_STACK \ 2378 : "r" (&_argvec[0]) \ 2379 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2381 lval = (__typeof__(lval)) _res; \ 2384 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2387 volatile OrigFn _orig = (orig); \ 2388 volatile unsigned long _argvec[9]; \ 2389 volatile unsigned long _res; \ 2390 _argvec[0] = (unsigned long)_orig.nraddr; \ 2391 _argvec[1] = (unsigned long)arg1; \ 2392 _argvec[2] = (unsigned long)arg2; \ 2393 _argvec[3] = (unsigned long)arg3; \ 2394 _argvec[4] = (unsigned long)arg4; \ 2395 _argvec[5] = (unsigned long)arg5; \ 2396 _argvec[6] = (unsigned long)arg6; \ 2397 _argvec[7] = (unsigned long)arg7; \ 2398 _argvec[8] = (unsigned long)arg8; \ 2400 VALGRIND_ALIGN_STACK \ 2404 "lwz 5,12(11)\n\t" \ 2405 "lwz 6,16(11)\n\t" \ 2406 "lwz 7,20(11)\n\t" \ 2407 "lwz 8,24(11)\n\t" \ 2408 "lwz 9,28(11)\n\t" \ 2409 "lwz 10,32(11)\n\t" \ 2410 "lwz 11,0(11)\n\t" \ 2411 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2412 VALGRIND_RESTORE_STACK \ 2415 : "r" (&_argvec[0]) \ 2416 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2418 lval = (__typeof__(lval)) _res; \ 2421 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2424 volatile OrigFn _orig = (orig); \ 2425 volatile unsigned long _argvec[10]; \ 2426 volatile unsigned long _res; \ 2427 _argvec[0] = (unsigned long)_orig.nraddr; \ 2428 _argvec[1] = (unsigned long)arg1; \ 2429 _argvec[2] = (unsigned long)arg2; \ 2430 _argvec[3] = (unsigned long)arg3; \ 2431 _argvec[4] = (unsigned long)arg4; \ 2432 _argvec[5] = (unsigned long)arg5; \ 2433 _argvec[6] = (unsigned long)arg6; \ 2434 _argvec[7] = (unsigned long)arg7; \ 2435 _argvec[8] = (unsigned long)arg8; \ 2436 _argvec[9] = (unsigned long)arg9; \ 2438 VALGRIND_ALIGN_STACK \ 2440 "addi 1,1,-16\n\t" \ 2442 "lwz 3,36(11)\n\t" \ 2447 "lwz 5,12(11)\n\t" \ 2448 "lwz 6,16(11)\n\t" \ 2449 "lwz 7,20(11)\n\t" \ 2450 "lwz 8,24(11)\n\t" \ 2451 "lwz 9,28(11)\n\t" \ 2452 "lwz 10,32(11)\n\t" \ 2453 "lwz 11,0(11)\n\t" \ 2454 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2455 VALGRIND_RESTORE_STACK \ 2458 : "r" (&_argvec[0]) \ 2459 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2461 lval = (__typeof__(lval)) _res; \ 2464 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2465 arg7,arg8,arg9,arg10) \ 2467 volatile OrigFn _orig = (orig); \ 2468 volatile unsigned long _argvec[11]; \ 2469 volatile unsigned long _res; \ 2470 _argvec[0] = (unsigned long)_orig.nraddr; \ 2471 _argvec[1] = (unsigned long)arg1; \ 2472 _argvec[2] = (unsigned long)arg2; \ 2473 _argvec[3] = (unsigned long)arg3; \ 2474 _argvec[4] = (unsigned long)arg4; \ 2475 _argvec[5] = (unsigned long)arg5; \ 2476 _argvec[6] = (unsigned long)arg6; \ 2477 _argvec[7] = (unsigned long)arg7; \ 2478 _argvec[8] = (unsigned long)arg8; \ 2479 _argvec[9] = (unsigned long)arg9; \ 2480 _argvec[10] = (unsigned long)arg10; \ 2482 VALGRIND_ALIGN_STACK \ 2484 "addi 1,1,-16\n\t" \ 2486 "lwz 3,40(11)\n\t" \ 2489 "lwz 3,36(11)\n\t" \ 2494 "lwz 5,12(11)\n\t" \ 2495 "lwz 6,16(11)\n\t" \ 2496 "lwz 7,20(11)\n\t" \ 2497 "lwz 8,24(11)\n\t" \ 2498 "lwz 9,28(11)\n\t" \ 2499 "lwz 10,32(11)\n\t" \ 2500 "lwz 11,0(11)\n\t" \ 2501 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2502 VALGRIND_RESTORE_STACK \ 2505 : "r" (&_argvec[0]) \ 2506 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2508 lval = (__typeof__(lval)) _res; \ 2511 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2512 arg7,arg8,arg9,arg10,arg11) \ 2514 volatile OrigFn _orig = (orig); \ 2515 volatile unsigned long _argvec[12]; \ 2516 volatile unsigned long _res; \ 2517 _argvec[0] = (unsigned long)_orig.nraddr; \ 2518 _argvec[1] = (unsigned long)arg1; \ 2519 _argvec[2] = (unsigned long)arg2; \ 2520 _argvec[3] = (unsigned long)arg3; \ 2521 _argvec[4] = (unsigned long)arg4; \ 2522 _argvec[5] = (unsigned long)arg5; \ 2523 _argvec[6] = (unsigned long)arg6; \ 2524 _argvec[7] = (unsigned long)arg7; \ 2525 _argvec[8] = (unsigned long)arg8; \ 2526 _argvec[9] = (unsigned long)arg9; \ 2527 _argvec[10] = (unsigned long)arg10; \ 2528 _argvec[11] = (unsigned long)arg11; \ 2530 VALGRIND_ALIGN_STACK \ 2532 "addi 1,1,-32\n\t" \ 2534 "lwz 3,44(11)\n\t" \ 2537 "lwz 3,40(11)\n\t" \ 2540 "lwz 3,36(11)\n\t" \ 2545 "lwz 5,12(11)\n\t" \ 2546 "lwz 6,16(11)\n\t" \ 2547 "lwz 7,20(11)\n\t" \ 2548 "lwz 8,24(11)\n\t" \ 2549 "lwz 9,28(11)\n\t" \ 2550 "lwz 10,32(11)\n\t" \ 2551 "lwz 11,0(11)\n\t" \ 2552 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2553 VALGRIND_RESTORE_STACK \ 2556 : "r" (&_argvec[0]) \ 2557 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2559 lval = (__typeof__(lval)) _res; \ 2562 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2563 arg7,arg8,arg9,arg10,arg11,arg12) \ 2565 volatile OrigFn _orig = (orig); \ 2566 volatile unsigned long _argvec[13]; \ 2567 volatile unsigned long _res; \ 2568 _argvec[0] = (unsigned long)_orig.nraddr; \ 2569 _argvec[1] = (unsigned long)arg1; \ 2570 _argvec[2] = (unsigned long)arg2; \ 2571 _argvec[3] = (unsigned long)arg3; \ 2572 _argvec[4] = (unsigned long)arg4; \ 2573 _argvec[5] = (unsigned long)arg5; \ 2574 _argvec[6] = (unsigned long)arg6; \ 2575 _argvec[7] = (unsigned long)arg7; \ 2576 _argvec[8] = (unsigned long)arg8; \ 2577 _argvec[9] = (unsigned long)arg9; \ 2578 _argvec[10] = (unsigned long)arg10; \ 2579 _argvec[11] = (unsigned long)arg11; \ 2580 _argvec[12] = (unsigned long)arg12; \ 2582 VALGRIND_ALIGN_STACK \ 2584 "addi 1,1,-32\n\t" \ 2586 "lwz 3,48(11)\n\t" \ 2589 "lwz 3,44(11)\n\t" \ 2592 "lwz 3,40(11)\n\t" \ 2595 "lwz 3,36(11)\n\t" \ 2600 "lwz 5,12(11)\n\t" \ 2601 "lwz 6,16(11)\n\t" \ 2602 "lwz 7,20(11)\n\t" \ 2603 "lwz 8,24(11)\n\t" \ 2604 "lwz 9,28(11)\n\t" \ 2605 "lwz 10,32(11)\n\t" \ 2606 "lwz 11,0(11)\n\t" \ 2607 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2608 VALGRIND_RESTORE_STACK \ 2611 : "r" (&_argvec[0]) \ 2612 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2614 lval = (__typeof__(lval)) _res; \ 2621 #if defined(PLAT_ppc64be_linux) 2626 #define __CALLER_SAVED_REGS \ 2627 "lr", "ctr", "xer", \ 2628 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ 2629 "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ 2637 #define VALGRIND_ALIGN_STACK \ 2639 "rldicr 1,1,0,59\n\t" 2640 #define VALGRIND_RESTORE_STACK \ 2646 #define CALL_FN_W_v(lval, orig) \ 2648 volatile OrigFn _orig = (orig); \ 2649 volatile unsigned long _argvec[3+0]; \ 2650 volatile unsigned long _res; \ 2652 _argvec[1] = (unsigned long)_orig.r2; \ 2653 _argvec[2] = (unsigned long)_orig.nraddr; \ 2655 VALGRIND_ALIGN_STACK \ 2657 "std 2,-16(11)\n\t" \ 2659 "ld 11, 0(11)\n\t" \ 2660 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2663 "ld 2,-16(11)\n\t" \ 2664 VALGRIND_RESTORE_STACK \ 2666 : "r" (&_argvec[2]) \ 2667 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2669 lval = (__typeof__(lval)) _res; \ 2672 #define CALL_FN_W_W(lval, orig, arg1) \ 2674 volatile OrigFn _orig = (orig); \ 2675 volatile unsigned long _argvec[3+1]; \ 2676 volatile unsigned long _res; \ 2678 _argvec[1] = (unsigned long)_orig.r2; \ 2679 _argvec[2] = (unsigned long)_orig.nraddr; \ 2680 _argvec[2+1] = (unsigned long)arg1; \ 2682 VALGRIND_ALIGN_STACK \ 2684 "std 2,-16(11)\n\t" \ 2687 "ld 11, 0(11)\n\t" \ 2688 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2691 "ld 2,-16(11)\n\t" \ 2692 VALGRIND_RESTORE_STACK \ 2694 : "r" (&_argvec[2]) \ 2695 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2697 lval = (__typeof__(lval)) _res; \ 2700 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 2702 volatile OrigFn _orig = (orig); \ 2703 volatile unsigned long _argvec[3+2]; \ 2704 volatile unsigned long _res; \ 2706 _argvec[1] = (unsigned long)_orig.r2; \ 2707 _argvec[2] = (unsigned long)_orig.nraddr; \ 2708 _argvec[2+1] = (unsigned long)arg1; \ 2709 _argvec[2+2] = (unsigned long)arg2; \ 2711 VALGRIND_ALIGN_STACK \ 2713 "std 2,-16(11)\n\t" \ 2716 "ld 4, 16(11)\n\t" \ 2717 "ld 11, 0(11)\n\t" \ 2718 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2721 "ld 2,-16(11)\n\t" \ 2722 VALGRIND_RESTORE_STACK \ 2724 : "r" (&_argvec[2]) \ 2725 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2727 lval = (__typeof__(lval)) _res; \ 2730 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 2732 volatile OrigFn _orig = (orig); \ 2733 volatile unsigned long _argvec[3+3]; \ 2734 volatile unsigned long _res; \ 2736 _argvec[1] = (unsigned long)_orig.r2; \ 2737 _argvec[2] = (unsigned long)_orig.nraddr; \ 2738 _argvec[2+1] = (unsigned long)arg1; \ 2739 _argvec[2+2] = (unsigned long)arg2; \ 2740 _argvec[2+3] = (unsigned long)arg3; \ 2742 VALGRIND_ALIGN_STACK \ 2744 "std 2,-16(11)\n\t" \ 2747 "ld 4, 16(11)\n\t" \ 2748 "ld 5, 24(11)\n\t" \ 2749 "ld 11, 0(11)\n\t" \ 2750 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2753 "ld 2,-16(11)\n\t" \ 2754 VALGRIND_RESTORE_STACK \ 2756 : "r" (&_argvec[2]) \ 2757 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2759 lval = (__typeof__(lval)) _res; \ 2762 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 2764 volatile OrigFn _orig = (orig); \ 2765 volatile unsigned long _argvec[3+4]; \ 2766 volatile unsigned long _res; \ 2768 _argvec[1] = (unsigned long)_orig.r2; \ 2769 _argvec[2] = (unsigned long)_orig.nraddr; \ 2770 _argvec[2+1] = (unsigned long)arg1; \ 2771 _argvec[2+2] = (unsigned long)arg2; \ 2772 _argvec[2+3] = (unsigned long)arg3; \ 2773 _argvec[2+4] = (unsigned long)arg4; \ 2775 VALGRIND_ALIGN_STACK \ 2777 "std 2,-16(11)\n\t" \ 2780 "ld 4, 16(11)\n\t" \ 2781 "ld 5, 24(11)\n\t" \ 2782 "ld 6, 32(11)\n\t" \ 2783 "ld 11, 0(11)\n\t" \ 2784 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2787 "ld 2,-16(11)\n\t" \ 2788 VALGRIND_RESTORE_STACK \ 2790 : "r" (&_argvec[2]) \ 2791 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2793 lval = (__typeof__(lval)) _res; \ 2796 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 2798 volatile OrigFn _orig = (orig); \ 2799 volatile unsigned long _argvec[3+5]; \ 2800 volatile unsigned long _res; \ 2802 _argvec[1] = (unsigned long)_orig.r2; \ 2803 _argvec[2] = (unsigned long)_orig.nraddr; \ 2804 _argvec[2+1] = (unsigned long)arg1; \ 2805 _argvec[2+2] = (unsigned long)arg2; \ 2806 _argvec[2+3] = (unsigned long)arg3; \ 2807 _argvec[2+4] = (unsigned long)arg4; \ 2808 _argvec[2+5] = (unsigned long)arg5; \ 2810 VALGRIND_ALIGN_STACK \ 2812 "std 2,-16(11)\n\t" \ 2815 "ld 4, 16(11)\n\t" \ 2816 "ld 5, 24(11)\n\t" \ 2817 "ld 6, 32(11)\n\t" \ 2818 "ld 7, 40(11)\n\t" \ 2819 "ld 11, 0(11)\n\t" \ 2820 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2823 "ld 2,-16(11)\n\t" \ 2824 VALGRIND_RESTORE_STACK \ 2826 : "r" (&_argvec[2]) \ 2827 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2829 lval = (__typeof__(lval)) _res; \ 2832 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 2834 volatile OrigFn _orig = (orig); \ 2835 volatile unsigned long _argvec[3+6]; \ 2836 volatile unsigned long _res; \ 2838 _argvec[1] = (unsigned long)_orig.r2; \ 2839 _argvec[2] = (unsigned long)_orig.nraddr; \ 2840 _argvec[2+1] = (unsigned long)arg1; \ 2841 _argvec[2+2] = (unsigned long)arg2; \ 2842 _argvec[2+3] = (unsigned long)arg3; \ 2843 _argvec[2+4] = (unsigned long)arg4; \ 2844 _argvec[2+5] = (unsigned long)arg5; \ 2845 _argvec[2+6] = (unsigned long)arg6; \ 2847 VALGRIND_ALIGN_STACK \ 2849 "std 2,-16(11)\n\t" \ 2852 "ld 4, 16(11)\n\t" \ 2853 "ld 5, 24(11)\n\t" \ 2854 "ld 6, 32(11)\n\t" \ 2855 "ld 7, 40(11)\n\t" \ 2856 "ld 8, 48(11)\n\t" \ 2857 "ld 11, 0(11)\n\t" \ 2858 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2861 "ld 2,-16(11)\n\t" \ 2862 VALGRIND_RESTORE_STACK \ 2864 : "r" (&_argvec[2]) \ 2865 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2867 lval = (__typeof__(lval)) _res; \ 2870 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2873 volatile OrigFn _orig = (orig); \ 2874 volatile unsigned long _argvec[3+7]; \ 2875 volatile unsigned long _res; \ 2877 _argvec[1] = (unsigned long)_orig.r2; \ 2878 _argvec[2] = (unsigned long)_orig.nraddr; \ 2879 _argvec[2+1] = (unsigned long)arg1; \ 2880 _argvec[2+2] = (unsigned long)arg2; \ 2881 _argvec[2+3] = (unsigned long)arg3; \ 2882 _argvec[2+4] = (unsigned long)arg4; \ 2883 _argvec[2+5] = (unsigned long)arg5; \ 2884 _argvec[2+6] = (unsigned long)arg6; \ 2885 _argvec[2+7] = (unsigned long)arg7; \ 2887 VALGRIND_ALIGN_STACK \ 2889 "std 2,-16(11)\n\t" \ 2892 "ld 4, 16(11)\n\t" \ 2893 "ld 5, 24(11)\n\t" \ 2894 "ld 6, 32(11)\n\t" \ 2895 "ld 7, 40(11)\n\t" \ 2896 "ld 8, 48(11)\n\t" \ 2897 "ld 9, 56(11)\n\t" \ 2898 "ld 11, 0(11)\n\t" \ 2899 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2902 "ld 2,-16(11)\n\t" \ 2903 VALGRIND_RESTORE_STACK \ 2905 : "r" (&_argvec[2]) \ 2906 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2908 lval = (__typeof__(lval)) _res; \ 2911 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2914 volatile OrigFn _orig = (orig); \ 2915 volatile unsigned long _argvec[3+8]; \ 2916 volatile unsigned long _res; \ 2918 _argvec[1] = (unsigned long)_orig.r2; \ 2919 _argvec[2] = (unsigned long)_orig.nraddr; \ 2920 _argvec[2+1] = (unsigned long)arg1; \ 2921 _argvec[2+2] = (unsigned long)arg2; \ 2922 _argvec[2+3] = (unsigned long)arg3; \ 2923 _argvec[2+4] = (unsigned long)arg4; \ 2924 _argvec[2+5] = (unsigned long)arg5; \ 2925 _argvec[2+6] = (unsigned long)arg6; \ 2926 _argvec[2+7] = (unsigned long)arg7; \ 2927 _argvec[2+8] = (unsigned long)arg8; \ 2929 VALGRIND_ALIGN_STACK \ 2931 "std 2,-16(11)\n\t" \ 2934 "ld 4, 16(11)\n\t" \ 2935 "ld 5, 24(11)\n\t" \ 2936 "ld 6, 32(11)\n\t" \ 2937 "ld 7, 40(11)\n\t" \ 2938 "ld 8, 48(11)\n\t" \ 2939 "ld 9, 56(11)\n\t" \ 2940 "ld 10, 64(11)\n\t" \ 2941 "ld 11, 0(11)\n\t" \ 2942 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2945 "ld 2,-16(11)\n\t" \ 2946 VALGRIND_RESTORE_STACK \ 2948 : "r" (&_argvec[2]) \ 2949 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2951 lval = (__typeof__(lval)) _res; \ 2954 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2957 volatile OrigFn _orig = (orig); \ 2958 volatile unsigned long _argvec[3+9]; \ 2959 volatile unsigned long _res; \ 2961 _argvec[1] = (unsigned long)_orig.r2; \ 2962 _argvec[2] = (unsigned long)_orig.nraddr; \ 2963 _argvec[2+1] = (unsigned long)arg1; \ 2964 _argvec[2+2] = (unsigned long)arg2; \ 2965 _argvec[2+3] = (unsigned long)arg3; \ 2966 _argvec[2+4] = (unsigned long)arg4; \ 2967 _argvec[2+5] = (unsigned long)arg5; \ 2968 _argvec[2+6] = (unsigned long)arg6; \ 2969 _argvec[2+7] = (unsigned long)arg7; \ 2970 _argvec[2+8] = (unsigned long)arg8; \ 2971 _argvec[2+9] = (unsigned long)arg9; \ 2973 VALGRIND_ALIGN_STACK \ 2975 "std 2,-16(11)\n\t" \ 2977 "addi 1,1,-128\n\t" \ 2980 "std 3,112(1)\n\t" \ 2983 "ld 4, 16(11)\n\t" \ 2984 "ld 5, 24(11)\n\t" \ 2985 "ld 6, 32(11)\n\t" \ 2986 "ld 7, 40(11)\n\t" \ 2987 "ld 8, 48(11)\n\t" \ 2988 "ld 9, 56(11)\n\t" \ 2989 "ld 10, 64(11)\n\t" \ 2990 "ld 11, 0(11)\n\t" \ 2991 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2994 "ld 2,-16(11)\n\t" \ 2995 VALGRIND_RESTORE_STACK \ 2997 : "r" (&_argvec[2]) \ 2998 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3000 lval = (__typeof__(lval)) _res; \ 3003 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3004 arg7,arg8,arg9,arg10) \ 3006 volatile OrigFn _orig = (orig); \ 3007 volatile unsigned long _argvec[3+10]; \ 3008 volatile unsigned long _res; \ 3010 _argvec[1] = (unsigned long)_orig.r2; \ 3011 _argvec[2] = (unsigned long)_orig.nraddr; \ 3012 _argvec[2+1] = (unsigned long)arg1; \ 3013 _argvec[2+2] = (unsigned long)arg2; \ 3014 _argvec[2+3] = (unsigned long)arg3; \ 3015 _argvec[2+4] = (unsigned long)arg4; \ 3016 _argvec[2+5] = (unsigned long)arg5; \ 3017 _argvec[2+6] = (unsigned long)arg6; \ 3018 _argvec[2+7] = (unsigned long)arg7; \ 3019 _argvec[2+8] = (unsigned long)arg8; \ 3020 _argvec[2+9] = (unsigned long)arg9; \ 3021 _argvec[2+10] = (unsigned long)arg10; \ 3023 VALGRIND_ALIGN_STACK \ 3025 "std 2,-16(11)\n\t" \ 3027 "addi 1,1,-128\n\t" \ 3030 "std 3,120(1)\n\t" \ 3033 "std 3,112(1)\n\t" \ 3036 "ld 4, 16(11)\n\t" \ 3037 "ld 5, 24(11)\n\t" \ 3038 "ld 6, 32(11)\n\t" \ 3039 "ld 7, 40(11)\n\t" \ 3040 "ld 8, 48(11)\n\t" \ 3041 "ld 9, 56(11)\n\t" \ 3042 "ld 10, 64(11)\n\t" \ 3043 "ld 11, 0(11)\n\t" \ 3044 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 3047 "ld 2,-16(11)\n\t" \ 3048 VALGRIND_RESTORE_STACK \ 3050 : "r" (&_argvec[2]) \ 3051 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3053 lval = (__typeof__(lval)) _res; \ 3056 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3057 arg7,arg8,arg9,arg10,arg11) \ 3059 volatile OrigFn _orig = (orig); \ 3060 volatile unsigned long _argvec[3+11]; \ 3061 volatile unsigned long _res; \ 3063 _argvec[1] = (unsigned long)_orig.r2; \ 3064 _argvec[2] = (unsigned long)_orig.nraddr; \ 3065 _argvec[2+1] = (unsigned long)arg1; \ 3066 _argvec[2+2] = (unsigned long)arg2; \ 3067 _argvec[2+3] = (unsigned long)arg3; \ 3068 _argvec[2+4] = (unsigned long)arg4; \ 3069 _argvec[2+5] = (unsigned long)arg5; \ 3070 _argvec[2+6] = (unsigned long)arg6; \ 3071 _argvec[2+7] = (unsigned long)arg7; \ 3072 _argvec[2+8] = (unsigned long)arg8; \ 3073 _argvec[2+9] = (unsigned long)arg9; \ 3074 _argvec[2+10] = (unsigned long)arg10; \ 3075 _argvec[2+11] = (unsigned long)arg11; \ 3077 VALGRIND_ALIGN_STACK \ 3079 "std 2,-16(11)\n\t" \ 3081 "addi 1,1,-144\n\t" \ 3084 "std 3,128(1)\n\t" \ 3087 "std 3,120(1)\n\t" \ 3090 "std 3,112(1)\n\t" \ 3093 "ld 4, 16(11)\n\t" \ 3094 "ld 5, 24(11)\n\t" \ 3095 "ld 6, 32(11)\n\t" \ 3096 "ld 7, 40(11)\n\t" \ 3097 "ld 8, 48(11)\n\t" \ 3098 "ld 9, 56(11)\n\t" \ 3099 "ld 10, 64(11)\n\t" \ 3100 "ld 11, 0(11)\n\t" \ 3101 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 3104 "ld 2,-16(11)\n\t" \ 3105 VALGRIND_RESTORE_STACK \ 3107 : "r" (&_argvec[2]) \ 3108 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3110 lval = (__typeof__(lval)) _res; \ 3113 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3114 arg7,arg8,arg9,arg10,arg11,arg12) \ 3116 volatile OrigFn _orig = (orig); \ 3117 volatile unsigned long _argvec[3+12]; \ 3118 volatile unsigned long _res; \ 3120 _argvec[1] = (unsigned long)_orig.r2; \ 3121 _argvec[2] = (unsigned long)_orig.nraddr; \ 3122 _argvec[2+1] = (unsigned long)arg1; \ 3123 _argvec[2+2] = (unsigned long)arg2; \ 3124 _argvec[2+3] = (unsigned long)arg3; \ 3125 _argvec[2+4] = (unsigned long)arg4; \ 3126 _argvec[2+5] = (unsigned long)arg5; \ 3127 _argvec[2+6] = (unsigned long)arg6; \ 3128 _argvec[2+7] = (unsigned long)arg7; \ 3129 _argvec[2+8] = (unsigned long)arg8; \ 3130 _argvec[2+9] = (unsigned long)arg9; \ 3131 _argvec[2+10] = (unsigned long)arg10; \ 3132 _argvec[2+11] = (unsigned long)arg11; \ 3133 _argvec[2+12] = (unsigned long)arg12; \ 3135 VALGRIND_ALIGN_STACK \ 3137 "std 2,-16(11)\n\t" \ 3139 "addi 1,1,-144\n\t" \ 3142 "std 3,136(1)\n\t" \ 3145 "std 3,128(1)\n\t" \ 3148 "std 3,120(1)\n\t" \ 3151 "std 3,112(1)\n\t" \ 3154 "ld 4, 16(11)\n\t" \ 3155 "ld 5, 24(11)\n\t" \ 3156 "ld 6, 32(11)\n\t" \ 3157 "ld 7, 40(11)\n\t" \ 3158 "ld 8, 48(11)\n\t" \ 3159 "ld 9, 56(11)\n\t" \ 3160 "ld 10, 64(11)\n\t" \ 3161 "ld 11, 0(11)\n\t" \ 3162 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 3165 "ld 2,-16(11)\n\t" \ 3166 VALGRIND_RESTORE_STACK \ 3168 : "r" (&_argvec[2]) \ 3169 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3171 lval = (__typeof__(lval)) _res; \ 3177 #if defined(PLAT_ppc64le_linux) 3182 #define __CALLER_SAVED_REGS \ 3183 "lr", "ctr", "xer", \ 3184 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ 3185 "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ 3193 #define VALGRIND_ALIGN_STACK \ 3195 "rldicr 1,1,0,59\n\t" 3196 #define VALGRIND_RESTORE_STACK \ 3202 #define CALL_FN_W_v(lval, orig) \ 3204 volatile OrigFn _orig = (orig); \ 3205 volatile unsigned long _argvec[3+0]; \ 3206 volatile unsigned long _res; \ 3208 _argvec[1] = (unsigned long)_orig.r2; \ 3209 _argvec[2] = (unsigned long)_orig.nraddr; \ 3211 VALGRIND_ALIGN_STACK \ 3213 "std 2,-16(12)\n\t" \ 3215 "ld 12, 0(12)\n\t" \ 3216 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ 3219 "ld 2,-16(12)\n\t" \ 3220 VALGRIND_RESTORE_STACK \ 3222 : "r" (&_argvec[2]) \ 3223 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3225 lval = (__typeof__(lval)) _res; \ 3228 #define CALL_FN_W_W(lval, orig, arg1) \ 3230 volatile OrigFn _orig = (orig); \ 3231 volatile unsigned long _argvec[3+1]; \ 3232 volatile unsigned long _res; \ 3234 _argvec[1] = (unsigned long)_orig.r2; \ 3235 _argvec[2] = (unsigned long)_orig.nraddr; \ 3236 _argvec[2+1] = (unsigned long)arg1; \ 3238 VALGRIND_ALIGN_STACK \ 3240 "std 2,-16(12)\n\t" \ 3243 "ld 12, 0(12)\n\t" \ 3244 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ 3247 "ld 2,-16(12)\n\t" \ 3248 VALGRIND_RESTORE_STACK \ 3250 : "r" (&_argvec[2]) \ 3251 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3253 lval = (__typeof__(lval)) _res; \ 3256 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 3258 volatile OrigFn _orig = (orig); \ 3259 volatile unsigned long _argvec[3+2]; \ 3260 volatile unsigned long _res; \ 3262 _argvec[1] = (unsigned long)_orig.r2; \ 3263 _argvec[2] = (unsigned long)_orig.nraddr; \ 3264 _argvec[2+1] = (unsigned long)arg1; \ 3265 _argvec[2+2] = (unsigned long)arg2; \ 3267 VALGRIND_ALIGN_STACK \ 3269 "std 2,-16(12)\n\t" \ 3272 "ld 4, 16(12)\n\t" \ 3273 "ld 12, 0(12)\n\t" \ 3274 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ 3277 "ld 2,-16(12)\n\t" \ 3278 VALGRIND_RESTORE_STACK \ 3280 : "r" (&_argvec[2]) \ 3281 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3283 lval = (__typeof__(lval)) _res; \ 3286 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 3288 volatile OrigFn _orig = (orig); \ 3289 volatile unsigned long _argvec[3+3]; \ 3290 volatile unsigned long _res; \ 3292 _argvec[1] = (unsigned long)_orig.r2; \ 3293 _argvec[2] = (unsigned long)_orig.nraddr; \ 3294 _argvec[2+1] = (unsigned long)arg1; \ 3295 _argvec[2+2] = (unsigned long)arg2; \ 3296 _argvec[2+3] = (unsigned long)arg3; \ 3298 VALGRIND_ALIGN_STACK \ 3300 "std 2,-16(12)\n\t" \ 3303 "ld 4, 16(12)\n\t" \ 3304 "ld 5, 24(12)\n\t" \ 3305 "ld 12, 0(12)\n\t" \ 3306 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ 3309 "ld 2,-16(12)\n\t" \ 3310 VALGRIND_RESTORE_STACK \ 3312 : "r" (&_argvec[2]) \ 3313 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3315 lval = (__typeof__(lval)) _res; \ 3318 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 3320 volatile OrigFn _orig = (orig); \ 3321 volatile unsigned long _argvec[3+4]; \ 3322 volatile unsigned long _res; \ 3324 _argvec[1] = (unsigned long)_orig.r2; \ 3325 _argvec[2] = (unsigned long)_orig.nraddr; \ 3326 _argvec[2+1] = (unsigned long)arg1; \ 3327 _argvec[2+2] = (unsigned long)arg2; \ 3328 _argvec[2+3] = (unsigned long)arg3; \ 3329 _argvec[2+4] = (unsigned long)arg4; \ 3331 VALGRIND_ALIGN_STACK \ 3333 "std 2,-16(12)\n\t" \ 3336 "ld 4, 16(12)\n\t" \ 3337 "ld 5, 24(12)\n\t" \ 3338 "ld 6, 32(12)\n\t" \ 3339 "ld 12, 0(12)\n\t" \ 3340 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ 3343 "ld 2,-16(12)\n\t" \ 3344 VALGRIND_RESTORE_STACK \ 3346 : "r" (&_argvec[2]) \ 3347 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3349 lval = (__typeof__(lval)) _res; \ 3352 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 3354 volatile OrigFn _orig = (orig); \ 3355 volatile unsigned long _argvec[3+5]; \ 3356 volatile unsigned long _res; \ 3358 _argvec[1] = (unsigned long)_orig.r2; \ 3359 _argvec[2] = (unsigned long)_orig.nraddr; \ 3360 _argvec[2+1] = (unsigned long)arg1; \ 3361 _argvec[2+2] = (unsigned long)arg2; \ 3362 _argvec[2+3] = (unsigned long)arg3; \ 3363 _argvec[2+4] = (unsigned long)arg4; \ 3364 _argvec[2+5] = (unsigned long)arg5; \ 3366 VALGRIND_ALIGN_STACK \ 3368 "std 2,-16(12)\n\t" \ 3371 "ld 4, 16(12)\n\t" \ 3372 "ld 5, 24(12)\n\t" \ 3373 "ld 6, 32(12)\n\t" \ 3374 "ld 7, 40(12)\n\t" \ 3375 "ld 12, 0(12)\n\t" \ 3376 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ 3379 "ld 2,-16(12)\n\t" \ 3380 VALGRIND_RESTORE_STACK \ 3382 : "r" (&_argvec[2]) \ 3383 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3385 lval = (__typeof__(lval)) _res; \ 3388 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 3390 volatile OrigFn _orig = (orig); \ 3391 volatile unsigned long _argvec[3+6]; \ 3392 volatile unsigned long _res; \ 3394 _argvec[1] = (unsigned long)_orig.r2; \ 3395 _argvec[2] = (unsigned long)_orig.nraddr; \ 3396 _argvec[2+1] = (unsigned long)arg1; \ 3397 _argvec[2+2] = (unsigned long)arg2; \ 3398 _argvec[2+3] = (unsigned long)arg3; \ 3399 _argvec[2+4] = (unsigned long)arg4; \ 3400 _argvec[2+5] = (unsigned long)arg5; \ 3401 _argvec[2+6] = (unsigned long)arg6; \ 3403 VALGRIND_ALIGN_STACK \ 3405 "std 2,-16(12)\n\t" \ 3408 "ld 4, 16(12)\n\t" \ 3409 "ld 5, 24(12)\n\t" \ 3410 "ld 6, 32(12)\n\t" \ 3411 "ld 7, 40(12)\n\t" \ 3412 "ld 8, 48(12)\n\t" \ 3413 "ld 12, 0(12)\n\t" \ 3414 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ 3417 "ld 2,-16(12)\n\t" \ 3418 VALGRIND_RESTORE_STACK \ 3420 : "r" (&_argvec[2]) \ 3421 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3423 lval = (__typeof__(lval)) _res; \ 3426 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3429 volatile OrigFn _orig = (orig); \ 3430 volatile unsigned long _argvec[3+7]; \ 3431 volatile unsigned long _res; \ 3433 _argvec[1] = (unsigned long)_orig.r2; \ 3434 _argvec[2] = (unsigned long)_orig.nraddr; \ 3435 _argvec[2+1] = (unsigned long)arg1; \ 3436 _argvec[2+2] = (unsigned long)arg2; \ 3437 _argvec[2+3] = (unsigned long)arg3; \ 3438 _argvec[2+4] = (unsigned long)arg4; \ 3439 _argvec[2+5] = (unsigned long)arg5; \ 3440 _argvec[2+6] = (unsigned long)arg6; \ 3441 _argvec[2+7] = (unsigned long)arg7; \ 3443 VALGRIND_ALIGN_STACK \ 3445 "std 2,-16(12)\n\t" \ 3448 "ld 4, 16(12)\n\t" \ 3449 "ld 5, 24(12)\n\t" \ 3450 "ld 6, 32(12)\n\t" \ 3451 "ld 7, 40(12)\n\t" \ 3452 "ld 8, 48(12)\n\t" \ 3453 "ld 9, 56(12)\n\t" \ 3454 "ld 12, 0(12)\n\t" \ 3455 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ 3458 "ld 2,-16(12)\n\t" \ 3459 VALGRIND_RESTORE_STACK \ 3461 : "r" (&_argvec[2]) \ 3462 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3464 lval = (__typeof__(lval)) _res; \ 3467 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3470 volatile OrigFn _orig = (orig); \ 3471 volatile unsigned long _argvec[3+8]; \ 3472 volatile unsigned long _res; \ 3474 _argvec[1] = (unsigned long)_orig.r2; \ 3475 _argvec[2] = (unsigned long)_orig.nraddr; \ 3476 _argvec[2+1] = (unsigned long)arg1; \ 3477 _argvec[2+2] = (unsigned long)arg2; \ 3478 _argvec[2+3] = (unsigned long)arg3; \ 3479 _argvec[2+4] = (unsigned long)arg4; \ 3480 _argvec[2+5] = (unsigned long)arg5; \ 3481 _argvec[2+6] = (unsigned long)arg6; \ 3482 _argvec[2+7] = (unsigned long)arg7; \ 3483 _argvec[2+8] = (unsigned long)arg8; \ 3485 VALGRIND_ALIGN_STACK \ 3487 "std 2,-16(12)\n\t" \ 3490 "ld 4, 16(12)\n\t" \ 3491 "ld 5, 24(12)\n\t" \ 3492 "ld 6, 32(12)\n\t" \ 3493 "ld 7, 40(12)\n\t" \ 3494 "ld 8, 48(12)\n\t" \ 3495 "ld 9, 56(12)\n\t" \ 3496 "ld 10, 64(12)\n\t" \ 3497 "ld 12, 0(12)\n\t" \ 3498 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ 3501 "ld 2,-16(12)\n\t" \ 3502 VALGRIND_RESTORE_STACK \ 3504 : "r" (&_argvec[2]) \ 3505 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3507 lval = (__typeof__(lval)) _res; \ 3510 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3513 volatile OrigFn _orig = (orig); \ 3514 volatile unsigned long _argvec[3+9]; \ 3515 volatile unsigned long _res; \ 3517 _argvec[1] = (unsigned long)_orig.r2; \ 3518 _argvec[2] = (unsigned long)_orig.nraddr; \ 3519 _argvec[2+1] = (unsigned long)arg1; \ 3520 _argvec[2+2] = (unsigned long)arg2; \ 3521 _argvec[2+3] = (unsigned long)arg3; \ 3522 _argvec[2+4] = (unsigned long)arg4; \ 3523 _argvec[2+5] = (unsigned long)arg5; \ 3524 _argvec[2+6] = (unsigned long)arg6; \ 3525 _argvec[2+7] = (unsigned long)arg7; \ 3526 _argvec[2+8] = (unsigned long)arg8; \ 3527 _argvec[2+9] = (unsigned long)arg9; \ 3529 VALGRIND_ALIGN_STACK \ 3531 "std 2,-16(12)\n\t" \ 3533 "addi 1,1,-128\n\t" \ 3539 "ld 4, 16(12)\n\t" \ 3540 "ld 5, 24(12)\n\t" \ 3541 "ld 6, 32(12)\n\t" \ 3542 "ld 7, 40(12)\n\t" \ 3543 "ld 8, 48(12)\n\t" \ 3544 "ld 9, 56(12)\n\t" \ 3545 "ld 10, 64(12)\n\t" \ 3546 "ld 12, 0(12)\n\t" \ 3547 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ 3550 "ld 2,-16(12)\n\t" \ 3551 VALGRIND_RESTORE_STACK \ 3553 : "r" (&_argvec[2]) \ 3554 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3556 lval = (__typeof__(lval)) _res; \ 3559 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3560 arg7,arg8,arg9,arg10) \ 3562 volatile OrigFn _orig = (orig); \ 3563 volatile unsigned long _argvec[3+10]; \ 3564 volatile unsigned long _res; \ 3566 _argvec[1] = (unsigned long)_orig.r2; \ 3567 _argvec[2] = (unsigned long)_orig.nraddr; \ 3568 _argvec[2+1] = (unsigned long)arg1; \ 3569 _argvec[2+2] = (unsigned long)arg2; \ 3570 _argvec[2+3] = (unsigned long)arg3; \ 3571 _argvec[2+4] = (unsigned long)arg4; \ 3572 _argvec[2+5] = (unsigned long)arg5; \ 3573 _argvec[2+6] = (unsigned long)arg6; \ 3574 _argvec[2+7] = (unsigned long)arg7; \ 3575 _argvec[2+8] = (unsigned long)arg8; \ 3576 _argvec[2+9] = (unsigned long)arg9; \ 3577 _argvec[2+10] = (unsigned long)arg10; \ 3579 VALGRIND_ALIGN_STACK \ 3581 "std 2,-16(12)\n\t" \ 3583 "addi 1,1,-128\n\t" \ 3586 "std 3,104(1)\n\t" \ 3592 "ld 4, 16(12)\n\t" \ 3593 "ld 5, 24(12)\n\t" \ 3594 "ld 6, 32(12)\n\t" \ 3595 "ld 7, 40(12)\n\t" \ 3596 "ld 8, 48(12)\n\t" \ 3597 "ld 9, 56(12)\n\t" \ 3598 "ld 10, 64(12)\n\t" \ 3599 "ld 12, 0(12)\n\t" \ 3600 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ 3603 "ld 2,-16(12)\n\t" \ 3604 VALGRIND_RESTORE_STACK \ 3606 : "r" (&_argvec[2]) \ 3607 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3609 lval = (__typeof__(lval)) _res; \ 3612 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3613 arg7,arg8,arg9,arg10,arg11) \ 3615 volatile OrigFn _orig = (orig); \ 3616 volatile unsigned long _argvec[3+11]; \ 3617 volatile unsigned long _res; \ 3619 _argvec[1] = (unsigned long)_orig.r2; \ 3620 _argvec[2] = (unsigned long)_orig.nraddr; \ 3621 _argvec[2+1] = (unsigned long)arg1; \ 3622 _argvec[2+2] = (unsigned long)arg2; \ 3623 _argvec[2+3] = (unsigned long)arg3; \ 3624 _argvec[2+4] = (unsigned long)arg4; \ 3625 _argvec[2+5] = (unsigned long)arg5; \ 3626 _argvec[2+6] = (unsigned long)arg6; \ 3627 _argvec[2+7] = (unsigned long)arg7; \ 3628 _argvec[2+8] = (unsigned long)arg8; \ 3629 _argvec[2+9] = (unsigned long)arg9; \ 3630 _argvec[2+10] = (unsigned long)arg10; \ 3631 _argvec[2+11] = (unsigned long)arg11; \ 3633 VALGRIND_ALIGN_STACK \ 3635 "std 2,-16(12)\n\t" \ 3637 "addi 1,1,-144\n\t" \ 3640 "std 3,112(1)\n\t" \ 3643 "std 3,104(1)\n\t" \ 3649 "ld 4, 16(12)\n\t" \ 3650 "ld 5, 24(12)\n\t" \ 3651 "ld 6, 32(12)\n\t" \ 3652 "ld 7, 40(12)\n\t" \ 3653 "ld 8, 48(12)\n\t" \ 3654 "ld 9, 56(12)\n\t" \ 3655 "ld 10, 64(12)\n\t" \ 3656 "ld 12, 0(12)\n\t" \ 3657 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ 3660 "ld 2,-16(12)\n\t" \ 3661 VALGRIND_RESTORE_STACK \ 3663 : "r" (&_argvec[2]) \ 3664 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3666 lval = (__typeof__(lval)) _res; \ 3669 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3670 arg7,arg8,arg9,arg10,arg11,arg12) \ 3672 volatile OrigFn _orig = (orig); \ 3673 volatile unsigned long _argvec[3+12]; \ 3674 volatile unsigned long _res; \ 3676 _argvec[1] = (unsigned long)_orig.r2; \ 3677 _argvec[2] = (unsigned long)_orig.nraddr; \ 3678 _argvec[2+1] = (unsigned long)arg1; \ 3679 _argvec[2+2] = (unsigned long)arg2; \ 3680 _argvec[2+3] = (unsigned long)arg3; \ 3681 _argvec[2+4] = (unsigned long)arg4; \ 3682 _argvec[2+5] = (unsigned long)arg5; \ 3683 _argvec[2+6] = (unsigned long)arg6; \ 3684 _argvec[2+7] = (unsigned long)arg7; \ 3685 _argvec[2+8] = (unsigned long)arg8; \ 3686 _argvec[2+9] = (unsigned long)arg9; \ 3687 _argvec[2+10] = (unsigned long)arg10; \ 3688 _argvec[2+11] = (unsigned long)arg11; \ 3689 _argvec[2+12] = (unsigned long)arg12; \ 3691 VALGRIND_ALIGN_STACK \ 3693 "std 2,-16(12)\n\t" \ 3695 "addi 1,1,-144\n\t" \ 3698 "std 3,120(1)\n\t" \ 3701 "std 3,112(1)\n\t" \ 3704 "std 3,104(1)\n\t" \ 3710 "ld 4, 16(12)\n\t" \ 3711 "ld 5, 24(12)\n\t" \ 3712 "ld 6, 32(12)\n\t" \ 3713 "ld 7, 40(12)\n\t" \ 3714 "ld 8, 48(12)\n\t" \ 3715 "ld 9, 56(12)\n\t" \ 3716 "ld 10, 64(12)\n\t" \ 3717 "ld 12, 0(12)\n\t" \ 3718 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ 3721 "ld 2,-16(12)\n\t" \ 3722 VALGRIND_RESTORE_STACK \ 3724 : "r" (&_argvec[2]) \ 3725 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3727 lval = (__typeof__(lval)) _res; \ 3734 #if defined(PLAT_arm_linux) 3737 #define __CALLER_SAVED_REGS "r0", "r1", "r2", "r3","r4","r14" 3752 #define VALGRIND_ALIGN_STACK \ 3755 "bic r4, r4, #7\n\t" \ 3757 #define VALGRIND_RESTORE_STACK \ 3763 #define CALL_FN_W_v(lval, orig) \ 3765 volatile OrigFn _orig = (orig); \ 3766 volatile unsigned long _argvec[1]; \ 3767 volatile unsigned long _res; \ 3768 _argvec[0] = (unsigned long)_orig.nraddr; \ 3770 VALGRIND_ALIGN_STACK \ 3771 "ldr r4, [%1] \n\t" \ 3772 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3773 VALGRIND_RESTORE_STACK \ 3776 : "0" (&_argvec[0]) \ 3777 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3779 lval = (__typeof__(lval)) _res; \ 3782 #define CALL_FN_W_W(lval, orig, arg1) \ 3784 volatile OrigFn _orig = (orig); \ 3785 volatile unsigned long _argvec[2]; \ 3786 volatile unsigned long _res; \ 3787 _argvec[0] = (unsigned long)_orig.nraddr; \ 3788 _argvec[1] = (unsigned long)(arg1); \ 3790 VALGRIND_ALIGN_STACK \ 3791 "ldr r0, [%1, #4] \n\t" \ 3792 "ldr r4, [%1] \n\t" \ 3793 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3794 VALGRIND_RESTORE_STACK \ 3797 : "0" (&_argvec[0]) \ 3798 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3800 lval = (__typeof__(lval)) _res; \ 3803 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 3805 volatile OrigFn _orig = (orig); \ 3806 volatile unsigned long _argvec[3]; \ 3807 volatile unsigned long _res; \ 3808 _argvec[0] = (unsigned long)_orig.nraddr; \ 3809 _argvec[1] = (unsigned long)(arg1); \ 3810 _argvec[2] = (unsigned long)(arg2); \ 3812 VALGRIND_ALIGN_STACK \ 3813 "ldr r0, [%1, #4] \n\t" \ 3814 "ldr r1, [%1, #8] \n\t" \ 3815 "ldr r4, [%1] \n\t" \ 3816 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3817 VALGRIND_RESTORE_STACK \ 3820 : "0" (&_argvec[0]) \ 3821 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3823 lval = (__typeof__(lval)) _res; \ 3826 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 3828 volatile OrigFn _orig = (orig); \ 3829 volatile unsigned long _argvec[4]; \ 3830 volatile unsigned long _res; \ 3831 _argvec[0] = (unsigned long)_orig.nraddr; \ 3832 _argvec[1] = (unsigned long)(arg1); \ 3833 _argvec[2] = (unsigned long)(arg2); \ 3834 _argvec[3] = (unsigned long)(arg3); \ 3836 VALGRIND_ALIGN_STACK \ 3837 "ldr r0, [%1, #4] \n\t" \ 3838 "ldr r1, [%1, #8] \n\t" \ 3839 "ldr r2, [%1, #12] \n\t" \ 3840 "ldr r4, [%1] \n\t" \ 3841 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3842 VALGRIND_RESTORE_STACK \ 3845 : "0" (&_argvec[0]) \ 3846 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3848 lval = (__typeof__(lval)) _res; \ 3851 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 3853 volatile OrigFn _orig = (orig); \ 3854 volatile unsigned long _argvec[5]; \ 3855 volatile unsigned long _res; \ 3856 _argvec[0] = (unsigned long)_orig.nraddr; \ 3857 _argvec[1] = (unsigned long)(arg1); \ 3858 _argvec[2] = (unsigned long)(arg2); \ 3859 _argvec[3] = (unsigned long)(arg3); \ 3860 _argvec[4] = (unsigned long)(arg4); \ 3862 VALGRIND_ALIGN_STACK \ 3863 "ldr r0, [%1, #4] \n\t" \ 3864 "ldr r1, [%1, #8] \n\t" \ 3865 "ldr r2, [%1, #12] \n\t" \ 3866 "ldr r3, [%1, #16] \n\t" \ 3867 "ldr r4, [%1] \n\t" \ 3868 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3869 VALGRIND_RESTORE_STACK \ 3872 : "0" (&_argvec[0]) \ 3873 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3875 lval = (__typeof__(lval)) _res; \ 3878 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 3880 volatile OrigFn _orig = (orig); \ 3881 volatile unsigned long _argvec[6]; \ 3882 volatile unsigned long _res; \ 3883 _argvec[0] = (unsigned long)_orig.nraddr; \ 3884 _argvec[1] = (unsigned long)(arg1); \ 3885 _argvec[2] = (unsigned long)(arg2); \ 3886 _argvec[3] = (unsigned long)(arg3); \ 3887 _argvec[4] = (unsigned long)(arg4); \ 3888 _argvec[5] = (unsigned long)(arg5); \ 3890 VALGRIND_ALIGN_STACK \ 3891 "sub sp, sp, #4 \n\t" \ 3892 "ldr r0, [%1, #20] \n\t" \ 3894 "ldr r0, [%1, #4] \n\t" \ 3895 "ldr r1, [%1, #8] \n\t" \ 3896 "ldr r2, [%1, #12] \n\t" \ 3897 "ldr r3, [%1, #16] \n\t" \ 3898 "ldr r4, [%1] \n\t" \ 3899 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3900 VALGRIND_RESTORE_STACK \ 3903 : "0" (&_argvec[0]) \ 3904 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3906 lval = (__typeof__(lval)) _res; \ 3909 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 3911 volatile OrigFn _orig = (orig); \ 3912 volatile unsigned long _argvec[7]; \ 3913 volatile unsigned long _res; \ 3914 _argvec[0] = (unsigned long)_orig.nraddr; \ 3915 _argvec[1] = (unsigned long)(arg1); \ 3916 _argvec[2] = (unsigned long)(arg2); \ 3917 _argvec[3] = (unsigned long)(arg3); \ 3918 _argvec[4] = (unsigned long)(arg4); \ 3919 _argvec[5] = (unsigned long)(arg5); \ 3920 _argvec[6] = (unsigned long)(arg6); \ 3922 VALGRIND_ALIGN_STACK \ 3923 "ldr r0, [%1, #20] \n\t" \ 3924 "ldr r1, [%1, #24] \n\t" \ 3925 "push {r0, r1} \n\t" \ 3926 "ldr r0, [%1, #4] \n\t" \ 3927 "ldr r1, [%1, #8] \n\t" \ 3928 "ldr r2, [%1, #12] \n\t" \ 3929 "ldr r3, [%1, #16] \n\t" \ 3930 "ldr r4, [%1] \n\t" \ 3931 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3932 VALGRIND_RESTORE_STACK \ 3935 : "0" (&_argvec[0]) \ 3936 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3938 lval = (__typeof__(lval)) _res; \ 3941 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3944 volatile OrigFn _orig = (orig); \ 3945 volatile unsigned long _argvec[8]; \ 3946 volatile unsigned long _res; \ 3947 _argvec[0] = (unsigned long)_orig.nraddr; \ 3948 _argvec[1] = (unsigned long)(arg1); \ 3949 _argvec[2] = (unsigned long)(arg2); \ 3950 _argvec[3] = (unsigned long)(arg3); \ 3951 _argvec[4] = (unsigned long)(arg4); \ 3952 _argvec[5] = (unsigned long)(arg5); \ 3953 _argvec[6] = (unsigned long)(arg6); \ 3954 _argvec[7] = (unsigned long)(arg7); \ 3956 VALGRIND_ALIGN_STACK \ 3957 "sub sp, sp, #4 \n\t" \ 3958 "ldr r0, [%1, #20] \n\t" \ 3959 "ldr r1, [%1, #24] \n\t" \ 3960 "ldr r2, [%1, #28] \n\t" \ 3961 "push {r0, r1, r2} \n\t" \ 3962 "ldr r0, [%1, #4] \n\t" \ 3963 "ldr r1, [%1, #8] \n\t" \ 3964 "ldr r2, [%1, #12] \n\t" \ 3965 "ldr r3, [%1, #16] \n\t" \ 3966 "ldr r4, [%1] \n\t" \ 3967 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3968 VALGRIND_RESTORE_STACK \ 3971 : "0" (&_argvec[0]) \ 3972 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3974 lval = (__typeof__(lval)) _res; \ 3977 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3980 volatile OrigFn _orig = (orig); \ 3981 volatile unsigned long _argvec[9]; \ 3982 volatile unsigned long _res; \ 3983 _argvec[0] = (unsigned long)_orig.nraddr; \ 3984 _argvec[1] = (unsigned long)(arg1); \ 3985 _argvec[2] = (unsigned long)(arg2); \ 3986 _argvec[3] = (unsigned long)(arg3); \ 3987 _argvec[4] = (unsigned long)(arg4); \ 3988 _argvec[5] = (unsigned long)(arg5); \ 3989 _argvec[6] = (unsigned long)(arg6); \ 3990 _argvec[7] = (unsigned long)(arg7); \ 3991 _argvec[8] = (unsigned long)(arg8); \ 3993 VALGRIND_ALIGN_STACK \ 3994 "ldr r0, [%1, #20] \n\t" \ 3995 "ldr r1, [%1, #24] \n\t" \ 3996 "ldr r2, [%1, #28] \n\t" \ 3997 "ldr r3, [%1, #32] \n\t" \ 3998 "push {r0, r1, r2, r3} \n\t" \ 3999 "ldr r0, [%1, #4] \n\t" \ 4000 "ldr r1, [%1, #8] \n\t" \ 4001 "ldr r2, [%1, #12] \n\t" \ 4002 "ldr r3, [%1, #16] \n\t" \ 4003 "ldr r4, [%1] \n\t" \ 4004 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 4005 VALGRIND_RESTORE_STACK \ 4008 : "0" (&_argvec[0]) \ 4009 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 4011 lval = (__typeof__(lval)) _res; \ 4014 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4017 volatile OrigFn _orig = (orig); \ 4018 volatile unsigned long _argvec[10]; \ 4019 volatile unsigned long _res; \ 4020 _argvec[0] = (unsigned long)_orig.nraddr; \ 4021 _argvec[1] = (unsigned long)(arg1); \ 4022 _argvec[2] = (unsigned long)(arg2); \ 4023 _argvec[3] = (unsigned long)(arg3); \ 4024 _argvec[4] = (unsigned long)(arg4); \ 4025 _argvec[5] = (unsigned long)(arg5); \ 4026 _argvec[6] = (unsigned long)(arg6); \ 4027 _argvec[7] = (unsigned long)(arg7); \ 4028 _argvec[8] = (unsigned long)(arg8); \ 4029 _argvec[9] = (unsigned long)(arg9); \ 4031 VALGRIND_ALIGN_STACK \ 4032 "sub sp, sp, #4 \n\t" \ 4033 "ldr r0, [%1, #20] \n\t" \ 4034 "ldr r1, [%1, #24] \n\t" \ 4035 "ldr r2, [%1, #28] \n\t" \ 4036 "ldr r3, [%1, #32] \n\t" \ 4037 "ldr r4, [%1, #36] \n\t" \ 4038 "push {r0, r1, r2, r3, r4} \n\t" \ 4039 "ldr r0, [%1, #4] \n\t" \ 4040 "ldr r1, [%1, #8] \n\t" \ 4041 "ldr r2, [%1, #12] \n\t" \ 4042 "ldr r3, [%1, #16] \n\t" \ 4043 "ldr r4, [%1] \n\t" \ 4044 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 4045 VALGRIND_RESTORE_STACK \ 4048 : "0" (&_argvec[0]) \ 4049 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 4051 lval = (__typeof__(lval)) _res; \ 4054 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4055 arg7,arg8,arg9,arg10) \ 4057 volatile OrigFn _orig = (orig); \ 4058 volatile unsigned long _argvec[11]; \ 4059 volatile unsigned long _res; \ 4060 _argvec[0] = (unsigned long)_orig.nraddr; \ 4061 _argvec[1] = (unsigned long)(arg1); \ 4062 _argvec[2] = (unsigned long)(arg2); \ 4063 _argvec[3] = (unsigned long)(arg3); \ 4064 _argvec[4] = (unsigned long)(arg4); \ 4065 _argvec[5] = (unsigned long)(arg5); \ 4066 _argvec[6] = (unsigned long)(arg6); \ 4067 _argvec[7] = (unsigned long)(arg7); \ 4068 _argvec[8] = (unsigned long)(arg8); \ 4069 _argvec[9] = (unsigned long)(arg9); \ 4070 _argvec[10] = (unsigned long)(arg10); \ 4072 VALGRIND_ALIGN_STACK \ 4073 "ldr r0, [%1, #40] \n\t" \ 4075 "ldr r0, [%1, #20] \n\t" \ 4076 "ldr r1, [%1, #24] \n\t" \ 4077 "ldr r2, [%1, #28] \n\t" \ 4078 "ldr r3, [%1, #32] \n\t" \ 4079 "ldr r4, [%1, #36] \n\t" \ 4080 "push {r0, r1, r2, r3, r4} \n\t" \ 4081 "ldr r0, [%1, #4] \n\t" \ 4082 "ldr r1, [%1, #8] \n\t" \ 4083 "ldr r2, [%1, #12] \n\t" \ 4084 "ldr r3, [%1, #16] \n\t" \ 4085 "ldr r4, [%1] \n\t" \ 4086 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 4087 VALGRIND_RESTORE_STACK \ 4090 : "0" (&_argvec[0]) \ 4091 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 4093 lval = (__typeof__(lval)) _res; \ 4096 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 4097 arg6,arg7,arg8,arg9,arg10, \ 4100 volatile OrigFn _orig = (orig); \ 4101 volatile unsigned long _argvec[12]; \ 4102 volatile unsigned long _res; \ 4103 _argvec[0] = (unsigned long)_orig.nraddr; \ 4104 _argvec[1] = (unsigned long)(arg1); \ 4105 _argvec[2] = (unsigned long)(arg2); \ 4106 _argvec[3] = (unsigned long)(arg3); \ 4107 _argvec[4] = (unsigned long)(arg4); \ 4108 _argvec[5] = (unsigned long)(arg5); \ 4109 _argvec[6] = (unsigned long)(arg6); \ 4110 _argvec[7] = (unsigned long)(arg7); \ 4111 _argvec[8] = (unsigned long)(arg8); \ 4112 _argvec[9] = (unsigned long)(arg9); \ 4113 _argvec[10] = (unsigned long)(arg10); \ 4114 _argvec[11] = (unsigned long)(arg11); \ 4116 VALGRIND_ALIGN_STACK \ 4117 "sub sp, sp, #4 \n\t" \ 4118 "ldr r0, [%1, #40] \n\t" \ 4119 "ldr r1, [%1, #44] \n\t" \ 4120 "push {r0, r1} \n\t" \ 4121 "ldr r0, [%1, #20] \n\t" \ 4122 "ldr r1, [%1, #24] \n\t" \ 4123 "ldr r2, [%1, #28] \n\t" \ 4124 "ldr r3, [%1, #32] \n\t" \ 4125 "ldr r4, [%1, #36] \n\t" \ 4126 "push {r0, r1, r2, r3, r4} \n\t" \ 4127 "ldr r0, [%1, #4] \n\t" \ 4128 "ldr r1, [%1, #8] \n\t" \ 4129 "ldr r2, [%1, #12] \n\t" \ 4130 "ldr r3, [%1, #16] \n\t" \ 4131 "ldr r4, [%1] \n\t" \ 4132 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 4133 VALGRIND_RESTORE_STACK \ 4136 : "0" (&_argvec[0]) \ 4137 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 4139 lval = (__typeof__(lval)) _res; \ 4142 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 4143 arg6,arg7,arg8,arg9,arg10, \ 4146 volatile OrigFn _orig = (orig); \ 4147 volatile unsigned long _argvec[13]; \ 4148 volatile unsigned long _res; \ 4149 _argvec[0] = (unsigned long)_orig.nraddr; \ 4150 _argvec[1] = (unsigned long)(arg1); \ 4151 _argvec[2] = (unsigned long)(arg2); \ 4152 _argvec[3] = (unsigned long)(arg3); \ 4153 _argvec[4] = (unsigned long)(arg4); \ 4154 _argvec[5] = (unsigned long)(arg5); \ 4155 _argvec[6] = (unsigned long)(arg6); \ 4156 _argvec[7] = (unsigned long)(arg7); \ 4157 _argvec[8] = (unsigned long)(arg8); \ 4158 _argvec[9] = (unsigned long)(arg9); \ 4159 _argvec[10] = (unsigned long)(arg10); \ 4160 _argvec[11] = (unsigned long)(arg11); \ 4161 _argvec[12] = (unsigned long)(arg12); \ 4163 VALGRIND_ALIGN_STACK \ 4164 "ldr r0, [%1, #40] \n\t" \ 4165 "ldr r1, [%1, #44] \n\t" \ 4166 "ldr r2, [%1, #48] \n\t" \ 4167 "push {r0, r1, r2} \n\t" \ 4168 "ldr r0, [%1, #20] \n\t" \ 4169 "ldr r1, [%1, #24] \n\t" \ 4170 "ldr r2, [%1, #28] \n\t" \ 4171 "ldr r3, [%1, #32] \n\t" \ 4172 "ldr r4, [%1, #36] \n\t" \ 4173 "push {r0, r1, r2, r3, r4} \n\t" \ 4174 "ldr r0, [%1, #4] \n\t" \ 4175 "ldr r1, [%1, #8] \n\t" \ 4176 "ldr r2, [%1, #12] \n\t" \ 4177 "ldr r3, [%1, #16] \n\t" \ 4178 "ldr r4, [%1] \n\t" \ 4179 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 4180 VALGRIND_RESTORE_STACK \ 4183 : "0" (&_argvec[0]) \ 4184 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 4186 lval = (__typeof__(lval)) _res; \ 4193 #if defined(PLAT_arm64_linux) 4196 #define __CALLER_SAVED_REGS \ 4197 "x0", "x1", "x2", "x3","x4", "x5", "x6", "x7", "x8", "x9", \ 4198 "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", \ 4199 "x18", "x19", "x20", "x30", \ 4200 "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", \ 4201 "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", \ 4202 "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", \ 4203 "v26", "v27", "v28", "v29", "v30", "v31" 4207 #define VALGRIND_ALIGN_STACK \ 4209 "bic sp, x21, #15\n\t" 4210 #define VALGRIND_RESTORE_STACK \ 4216 #define CALL_FN_W_v(lval, orig) \ 4218 volatile OrigFn _orig = (orig); \ 4219 volatile unsigned long _argvec[1]; \ 4220 volatile unsigned long _res; \ 4221 _argvec[0] = (unsigned long)_orig.nraddr; \ 4223 VALGRIND_ALIGN_STACK \ 4224 "ldr x8, [%1] \n\t" \ 4225 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 4226 VALGRIND_RESTORE_STACK \ 4229 : "0" (&_argvec[0]) \ 4230 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 4232 lval = (__typeof__(lval)) _res; \ 4235 #define CALL_FN_W_W(lval, orig, arg1) \ 4237 volatile OrigFn _orig = (orig); \ 4238 volatile unsigned long _argvec[2]; \ 4239 volatile unsigned long _res; \ 4240 _argvec[0] = (unsigned long)_orig.nraddr; \ 4241 _argvec[1] = (unsigned long)(arg1); \ 4243 VALGRIND_ALIGN_STACK \ 4244 "ldr x0, [%1, #8] \n\t" \ 4245 "ldr x8, [%1] \n\t" \ 4246 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 4247 VALGRIND_RESTORE_STACK \ 4250 : "0" (&_argvec[0]) \ 4251 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 4253 lval = (__typeof__(lval)) _res; \ 4256 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 4258 volatile OrigFn _orig = (orig); \ 4259 volatile unsigned long _argvec[3]; \ 4260 volatile unsigned long _res; \ 4261 _argvec[0] = (unsigned long)_orig.nraddr; \ 4262 _argvec[1] = (unsigned long)(arg1); \ 4263 _argvec[2] = (unsigned long)(arg2); \ 4265 VALGRIND_ALIGN_STACK \ 4266 "ldr x0, [%1, #8] \n\t" \ 4267 "ldr x1, [%1, #16] \n\t" \ 4268 "ldr x8, [%1] \n\t" \ 4269 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 4270 VALGRIND_RESTORE_STACK \ 4273 : "0" (&_argvec[0]) \ 4274 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 4276 lval = (__typeof__(lval)) _res; \ 4279 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 4281 volatile OrigFn _orig = (orig); \ 4282 volatile unsigned long _argvec[4]; \ 4283 volatile unsigned long _res; \ 4284 _argvec[0] = (unsigned long)_orig.nraddr; \ 4285 _argvec[1] = (unsigned long)(arg1); \ 4286 _argvec[2] = (unsigned long)(arg2); \ 4287 _argvec[3] = (unsigned long)(arg3); \ 4289 VALGRIND_ALIGN_STACK \ 4290 "ldr x0, [%1, #8] \n\t" \ 4291 "ldr x1, [%1, #16] \n\t" \ 4292 "ldr x2, [%1, #24] \n\t" \ 4293 "ldr x8, [%1] \n\t" \ 4294 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 4295 VALGRIND_RESTORE_STACK \ 4298 : "0" (&_argvec[0]) \ 4299 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 4301 lval = (__typeof__(lval)) _res; \ 4304 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 4306 volatile OrigFn _orig = (orig); \ 4307 volatile unsigned long _argvec[5]; \ 4308 volatile unsigned long _res; \ 4309 _argvec[0] = (unsigned long)_orig.nraddr; \ 4310 _argvec[1] = (unsigned long)(arg1); \ 4311 _argvec[2] = (unsigned long)(arg2); \ 4312 _argvec[3] = (unsigned long)(arg3); \ 4313 _argvec[4] = (unsigned long)(arg4); \ 4315 VALGRIND_ALIGN_STACK \ 4316 "ldr x0, [%1, #8] \n\t" \ 4317 "ldr x1, [%1, #16] \n\t" \ 4318 "ldr x2, [%1, #24] \n\t" \ 4319 "ldr x3, [%1, #32] \n\t" \ 4320 "ldr x8, [%1] \n\t" \ 4321 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 4322 VALGRIND_RESTORE_STACK \ 4325 : "0" (&_argvec[0]) \ 4326 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 4328 lval = (__typeof__(lval)) _res; \ 4331 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 4333 volatile OrigFn _orig = (orig); \ 4334 volatile unsigned long _argvec[6]; \ 4335 volatile unsigned long _res; \ 4336 _argvec[0] = (unsigned long)_orig.nraddr; \ 4337 _argvec[1] = (unsigned long)(arg1); \ 4338 _argvec[2] = (unsigned long)(arg2); \ 4339 _argvec[3] = (unsigned long)(arg3); \ 4340 _argvec[4] = (unsigned long)(arg4); \ 4341 _argvec[5] = (unsigned long)(arg5); \ 4343 VALGRIND_ALIGN_STACK \ 4344 "ldr x0, [%1, #8] \n\t" \ 4345 "ldr x1, [%1, #16] \n\t" \ 4346 "ldr x2, [%1, #24] \n\t" \ 4347 "ldr x3, [%1, #32] \n\t" \ 4348 "ldr x4, [%1, #40] \n\t" \ 4349 "ldr x8, [%1] \n\t" \ 4350 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 4351 VALGRIND_RESTORE_STACK \ 4354 : "0" (&_argvec[0]) \ 4355 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 4357 lval = (__typeof__(lval)) _res; \ 4360 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 4362 volatile OrigFn _orig = (orig); \ 4363 volatile unsigned long _argvec[7]; \ 4364 volatile unsigned long _res; \ 4365 _argvec[0] = (unsigned long)_orig.nraddr; \ 4366 _argvec[1] = (unsigned long)(arg1); \ 4367 _argvec[2] = (unsigned long)(arg2); \ 4368 _argvec[3] = (unsigned long)(arg3); \ 4369 _argvec[4] = (unsigned long)(arg4); \ 4370 _argvec[5] = (unsigned long)(arg5); \ 4371 _argvec[6] = (unsigned long)(arg6); \ 4373 VALGRIND_ALIGN_STACK \ 4374 "ldr x0, [%1, #8] \n\t" \ 4375 "ldr x1, [%1, #16] \n\t" \ 4376 "ldr x2, [%1, #24] \n\t" \ 4377 "ldr x3, [%1, #32] \n\t" \ 4378 "ldr x4, [%1, #40] \n\t" \ 4379 "ldr x5, [%1, #48] \n\t" \ 4380 "ldr x8, [%1] \n\t" \ 4381 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 4382 VALGRIND_RESTORE_STACK \ 4385 : "0" (&_argvec[0]) \ 4386 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 4388 lval = (__typeof__(lval)) _res; \ 4391 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4394 volatile OrigFn _orig = (orig); \ 4395 volatile unsigned long _argvec[8]; \ 4396 volatile unsigned long _res; \ 4397 _argvec[0] = (unsigned long)_orig.nraddr; \ 4398 _argvec[1] = (unsigned long)(arg1); \ 4399 _argvec[2] = (unsigned long)(arg2); \ 4400 _argvec[3] = (unsigned long)(arg3); \ 4401 _argvec[4] = (unsigned long)(arg4); \ 4402 _argvec[5] = (unsigned long)(arg5); \ 4403 _argvec[6] = (unsigned long)(arg6); \ 4404 _argvec[7] = (unsigned long)(arg7); \ 4406 VALGRIND_ALIGN_STACK \ 4407 "ldr x0, [%1, #8] \n\t" \ 4408 "ldr x1, [%1, #16] \n\t" \ 4409 "ldr x2, [%1, #24] \n\t" \ 4410 "ldr x3, [%1, #32] \n\t" \ 4411 "ldr x4, [%1, #40] \n\t" \ 4412 "ldr x5, [%1, #48] \n\t" \ 4413 "ldr x6, [%1, #56] \n\t" \ 4414 "ldr x8, [%1] \n\t" \ 4415 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 4416 VALGRIND_RESTORE_STACK \ 4419 : "0" (&_argvec[0]) \ 4420 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 4422 lval = (__typeof__(lval)) _res; \ 4425 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4428 volatile OrigFn _orig = (orig); \ 4429 volatile unsigned long _argvec[9]; \ 4430 volatile unsigned long _res; \ 4431 _argvec[0] = (unsigned long)_orig.nraddr; \ 4432 _argvec[1] = (unsigned long)(arg1); \ 4433 _argvec[2] = (unsigned long)(arg2); \ 4434 _argvec[3] = (unsigned long)(arg3); \ 4435 _argvec[4] = (unsigned long)(arg4); \ 4436 _argvec[5] = (unsigned long)(arg5); \ 4437 _argvec[6] = (unsigned long)(arg6); \ 4438 _argvec[7] = (unsigned long)(arg7); \ 4439 _argvec[8] = (unsigned long)(arg8); \ 4441 VALGRIND_ALIGN_STACK \ 4442 "ldr x0, [%1, #8] \n\t" \ 4443 "ldr x1, [%1, #16] \n\t" \ 4444 "ldr x2, [%1, #24] \n\t" \ 4445 "ldr x3, [%1, #32] \n\t" \ 4446 "ldr x4, [%1, #40] \n\t" \ 4447 "ldr x5, [%1, #48] \n\t" \ 4448 "ldr x6, [%1, #56] \n\t" \ 4449 "ldr x7, [%1, #64] \n\t" \ 4450 "ldr x8, [%1] \n\t" \ 4451 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 4452 VALGRIND_RESTORE_STACK \ 4455 : "0" (&_argvec[0]) \ 4456 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 4458 lval = (__typeof__(lval)) _res; \ 4461 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4464 volatile OrigFn _orig = (orig); \ 4465 volatile unsigned long _argvec[10]; \ 4466 volatile unsigned long _res; \ 4467 _argvec[0] = (unsigned long)_orig.nraddr; \ 4468 _argvec[1] = (unsigned long)(arg1); \ 4469 _argvec[2] = (unsigned long)(arg2); \ 4470 _argvec[3] = (unsigned long)(arg3); \ 4471 _argvec[4] = (unsigned long)(arg4); \ 4472 _argvec[5] = (unsigned long)(arg5); \ 4473 _argvec[6] = (unsigned long)(arg6); \ 4474 _argvec[7] = (unsigned long)(arg7); \ 4475 _argvec[8] = (unsigned long)(arg8); \ 4476 _argvec[9] = (unsigned long)(arg9); \ 4478 VALGRIND_ALIGN_STACK \ 4479 "sub sp, sp, #0x20 \n\t" \ 4480 "ldr x0, [%1, #8] \n\t" \ 4481 "ldr x1, [%1, #16] \n\t" \ 4482 "ldr x2, [%1, #24] \n\t" \ 4483 "ldr x3, [%1, #32] \n\t" \ 4484 "ldr x4, [%1, #40] \n\t" \ 4485 "ldr x5, [%1, #48] \n\t" \ 4486 "ldr x6, [%1, #56] \n\t" \ 4487 "ldr x7, [%1, #64] \n\t" \ 4488 "ldr x8, [%1, #72] \n\t" \ 4489 "str x8, [sp, #0] \n\t" \ 4490 "ldr x8, [%1] \n\t" \ 4491 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 4492 VALGRIND_RESTORE_STACK \ 4495 : "0" (&_argvec[0]) \ 4496 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 4498 lval = (__typeof__(lval)) _res; \ 4501 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4502 arg7,arg8,arg9,arg10) \ 4504 volatile OrigFn _orig = (orig); \ 4505 volatile unsigned long _argvec[11]; \ 4506 volatile unsigned long _res; \ 4507 _argvec[0] = (unsigned long)_orig.nraddr; \ 4508 _argvec[1] = (unsigned long)(arg1); \ 4509 _argvec[2] = (unsigned long)(arg2); \ 4510 _argvec[3] = (unsigned long)(arg3); \ 4511 _argvec[4] = (unsigned long)(arg4); \ 4512 _argvec[5] = (unsigned long)(arg5); \ 4513 _argvec[6] = (unsigned long)(arg6); \ 4514 _argvec[7] = (unsigned long)(arg7); \ 4515 _argvec[8] = (unsigned long)(arg8); \ 4516 _argvec[9] = (unsigned long)(arg9); \ 4517 _argvec[10] = (unsigned long)(arg10); \ 4519 VALGRIND_ALIGN_STACK \ 4520 "sub sp, sp, #0x20 \n\t" \ 4521 "ldr x0, [%1, #8] \n\t" \ 4522 "ldr x1, [%1, #16] \n\t" \ 4523 "ldr x2, [%1, #24] \n\t" \ 4524 "ldr x3, [%1, #32] \n\t" \ 4525 "ldr x4, [%1, #40] \n\t" \ 4526 "ldr x5, [%1, #48] \n\t" \ 4527 "ldr x6, [%1, #56] \n\t" \ 4528 "ldr x7, [%1, #64] \n\t" \ 4529 "ldr x8, [%1, #72] \n\t" \ 4530 "str x8, [sp, #0] \n\t" \ 4531 "ldr x8, [%1, #80] \n\t" \ 4532 "str x8, [sp, #8] \n\t" \ 4533 "ldr x8, [%1] \n\t" \ 4534 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 4535 VALGRIND_RESTORE_STACK \ 4538 : "0" (&_argvec[0]) \ 4539 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 4541 lval = (__typeof__(lval)) _res; \ 4544 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4545 arg7,arg8,arg9,arg10,arg11) \ 4547 volatile OrigFn _orig = (orig); \ 4548 volatile unsigned long _argvec[12]; \ 4549 volatile unsigned long _res; \ 4550 _argvec[0] = (unsigned long)_orig.nraddr; \ 4551 _argvec[1] = (unsigned long)(arg1); \ 4552 _argvec[2] = (unsigned long)(arg2); \ 4553 _argvec[3] = (unsigned long)(arg3); \ 4554 _argvec[4] = (unsigned long)(arg4); \ 4555 _argvec[5] = (unsigned long)(arg5); \ 4556 _argvec[6] = (unsigned long)(arg6); \ 4557 _argvec[7] = (unsigned long)(arg7); \ 4558 _argvec[8] = (unsigned long)(arg8); \ 4559 _argvec[9] = (unsigned long)(arg9); \ 4560 _argvec[10] = (unsigned long)(arg10); \ 4561 _argvec[11] = (unsigned long)(arg11); \ 4563 VALGRIND_ALIGN_STACK \ 4564 "sub sp, sp, #0x30 \n\t" \ 4565 "ldr x0, [%1, #8] \n\t" \ 4566 "ldr x1, [%1, #16] \n\t" \ 4567 "ldr x2, [%1, #24] \n\t" \ 4568 "ldr x3, [%1, #32] \n\t" \ 4569 "ldr x4, [%1, #40] \n\t" \ 4570 "ldr x5, [%1, #48] \n\t" \ 4571 "ldr x6, [%1, #56] \n\t" \ 4572 "ldr x7, [%1, #64] \n\t" \ 4573 "ldr x8, [%1, #72] \n\t" \ 4574 "str x8, [sp, #0] \n\t" \ 4575 "ldr x8, [%1, #80] \n\t" \ 4576 "str x8, [sp, #8] \n\t" \ 4577 "ldr x8, [%1, #88] \n\t" \ 4578 "str x8, [sp, #16] \n\t" \ 4579 "ldr x8, [%1] \n\t" \ 4580 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 4581 VALGRIND_RESTORE_STACK \ 4584 : "0" (&_argvec[0]) \ 4585 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 4587 lval = (__typeof__(lval)) _res; \ 4590 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4591 arg7,arg8,arg9,arg10,arg11, \ 4594 volatile OrigFn _orig = (orig); \ 4595 volatile unsigned long _argvec[13]; \ 4596 volatile unsigned long _res; \ 4597 _argvec[0] = (unsigned long)_orig.nraddr; \ 4598 _argvec[1] = (unsigned long)(arg1); \ 4599 _argvec[2] = (unsigned long)(arg2); \ 4600 _argvec[3] = (unsigned long)(arg3); \ 4601 _argvec[4] = (unsigned long)(arg4); \ 4602 _argvec[5] = (unsigned long)(arg5); \ 4603 _argvec[6] = (unsigned long)(arg6); \ 4604 _argvec[7] = (unsigned long)(arg7); \ 4605 _argvec[8] = (unsigned long)(arg8); \ 4606 _argvec[9] = (unsigned long)(arg9); \ 4607 _argvec[10] = (unsigned long)(arg10); \ 4608 _argvec[11] = (unsigned long)(arg11); \ 4609 _argvec[12] = (unsigned long)(arg12); \ 4611 VALGRIND_ALIGN_STACK \ 4612 "sub sp, sp, #0x30 \n\t" \ 4613 "ldr x0, [%1, #8] \n\t" \ 4614 "ldr x1, [%1, #16] \n\t" \ 4615 "ldr x2, [%1, #24] \n\t" \ 4616 "ldr x3, [%1, #32] \n\t" \ 4617 "ldr x4, [%1, #40] \n\t" \ 4618 "ldr x5, [%1, #48] \n\t" \ 4619 "ldr x6, [%1, #56] \n\t" \ 4620 "ldr x7, [%1, #64] \n\t" \ 4621 "ldr x8, [%1, #72] \n\t" \ 4622 "str x8, [sp, #0] \n\t" \ 4623 "ldr x8, [%1, #80] \n\t" \ 4624 "str x8, [sp, #8] \n\t" \ 4625 "ldr x8, [%1, #88] \n\t" \ 4626 "str x8, [sp, #16] \n\t" \ 4627 "ldr x8, [%1, #96] \n\t" \ 4628 "str x8, [sp, #24] \n\t" \ 4629 "ldr x8, [%1] \n\t" \ 4630 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 4631 VALGRIND_RESTORE_STACK \ 4634 : "0" (&_argvec[0]) \ 4635 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 4637 lval = (__typeof__(lval)) _res; \ 4644 #if defined(PLAT_s390x_linux) 4650 #if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM) 4651 # define __FRAME_POINTER \ 4652 ,"d"(__builtin_dwarf_cfa()) 4653 # define VALGRIND_CFI_PROLOGUE \ 4654 ".cfi_remember_state\n\t" \ 4658 ".cfi_def_cfa r11, 0\n\t" 4659 # define VALGRIND_CFI_EPILOGUE \ 4661 ".cfi_restore_state\n\t" 4663 # define __FRAME_POINTER 4664 # define VALGRIND_CFI_PROLOGUE \ 4666 # define VALGRIND_CFI_EPILOGUE 4678 #define __CALLER_SAVED_REGS "0","1","2","3","4","5","14", \ 4679 "f0","f1","f2","f3","f4","f5","f6","f7" 4690 #define CALL_FN_W_v(lval, orig) \ 4692 volatile OrigFn _orig = (orig); \ 4693 volatile unsigned long _argvec[1]; \ 4694 volatile unsigned long _res; \ 4695 _argvec[0] = (unsigned long)_orig.nraddr; \ 4697 VALGRIND_CFI_PROLOGUE \ 4698 "aghi 15,-160\n\t" \ 4700 VALGRIND_CALL_NOREDIR_R1 \ 4703 VALGRIND_CFI_EPILOGUE \ 4705 : "d" (&_argvec[0]) __FRAME_POINTER \ 4706 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 4708 lval = (__typeof__(lval)) _res; \ 4712 #define CALL_FN_W_W(lval, orig, arg1) \ 4714 volatile OrigFn _orig = (orig); \ 4715 volatile unsigned long _argvec[2]; \ 4716 volatile unsigned long _res; \ 4717 _argvec[0] = (unsigned long)_orig.nraddr; \ 4718 _argvec[1] = (unsigned long)arg1; \ 4720 VALGRIND_CFI_PROLOGUE \ 4721 "aghi 15,-160\n\t" \ 4724 VALGRIND_CALL_NOREDIR_R1 \ 4727 VALGRIND_CFI_EPILOGUE \ 4729 : "a" (&_argvec[0]) __FRAME_POINTER \ 4730 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 4732 lval = (__typeof__(lval)) _res; \ 4735 #define CALL_FN_W_WW(lval, orig, arg1, arg2) \ 4737 volatile OrigFn _orig = (orig); \ 4738 volatile unsigned long _argvec[3]; \ 4739 volatile unsigned long _res; \ 4740 _argvec[0] = (unsigned long)_orig.nraddr; \ 4741 _argvec[1] = (unsigned long)arg1; \ 4742 _argvec[2] = (unsigned long)arg2; \ 4744 VALGRIND_CFI_PROLOGUE \ 4745 "aghi 15,-160\n\t" \ 4749 VALGRIND_CALL_NOREDIR_R1 \ 4752 VALGRIND_CFI_EPILOGUE \ 4754 : "a" (&_argvec[0]) __FRAME_POINTER \ 4755 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 4757 lval = (__typeof__(lval)) _res; \ 4760 #define CALL_FN_W_WWW(lval, orig, arg1, arg2, arg3) \ 4762 volatile OrigFn _orig = (orig); \ 4763 volatile unsigned long _argvec[4]; \ 4764 volatile unsigned long _res; \ 4765 _argvec[0] = (unsigned long)_orig.nraddr; \ 4766 _argvec[1] = (unsigned long)arg1; \ 4767 _argvec[2] = (unsigned long)arg2; \ 4768 _argvec[3] = (unsigned long)arg3; \ 4770 VALGRIND_CFI_PROLOGUE \ 4771 "aghi 15,-160\n\t" \ 4776 VALGRIND_CALL_NOREDIR_R1 \ 4779 VALGRIND_CFI_EPILOGUE \ 4781 : "a" (&_argvec[0]) __FRAME_POINTER \ 4782 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 4784 lval = (__typeof__(lval)) _res; \ 4787 #define CALL_FN_W_WWWW(lval, orig, arg1, arg2, arg3, arg4) \ 4789 volatile OrigFn _orig = (orig); \ 4790 volatile unsigned long _argvec[5]; \ 4791 volatile unsigned long _res; \ 4792 _argvec[0] = (unsigned long)_orig.nraddr; \ 4793 _argvec[1] = (unsigned long)arg1; \ 4794 _argvec[2] = (unsigned long)arg2; \ 4795 _argvec[3] = (unsigned long)arg3; \ 4796 _argvec[4] = (unsigned long)arg4; \ 4798 VALGRIND_CFI_PROLOGUE \ 4799 "aghi 15,-160\n\t" \ 4805 VALGRIND_CALL_NOREDIR_R1 \ 4808 VALGRIND_CFI_EPILOGUE \ 4810 : "a" (&_argvec[0]) __FRAME_POINTER \ 4811 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 4813 lval = (__typeof__(lval)) _res; \ 4816 #define CALL_FN_W_5W(lval, orig, arg1, arg2, arg3, arg4, arg5) \ 4818 volatile OrigFn _orig = (orig); \ 4819 volatile unsigned long _argvec[6]; \ 4820 volatile unsigned long _res; \ 4821 _argvec[0] = (unsigned long)_orig.nraddr; \ 4822 _argvec[1] = (unsigned long)arg1; \ 4823 _argvec[2] = (unsigned long)arg2; \ 4824 _argvec[3] = (unsigned long)arg3; \ 4825 _argvec[4] = (unsigned long)arg4; \ 4826 _argvec[5] = (unsigned long)arg5; \ 4828 VALGRIND_CFI_PROLOGUE \ 4829 "aghi 15,-160\n\t" \ 4836 VALGRIND_CALL_NOREDIR_R1 \ 4839 VALGRIND_CFI_EPILOGUE \ 4841 : "a" (&_argvec[0]) __FRAME_POINTER \ 4842 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 4844 lval = (__typeof__(lval)) _res; \ 4847 #define CALL_FN_W_6W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 4850 volatile OrigFn _orig = (orig); \ 4851 volatile unsigned long _argvec[7]; \ 4852 volatile unsigned long _res; \ 4853 _argvec[0] = (unsigned long)_orig.nraddr; \ 4854 _argvec[1] = (unsigned long)arg1; \ 4855 _argvec[2] = (unsigned long)arg2; \ 4856 _argvec[3] = (unsigned long)arg3; \ 4857 _argvec[4] = (unsigned long)arg4; \ 4858 _argvec[5] = (unsigned long)arg5; \ 4859 _argvec[6] = (unsigned long)arg6; \ 4861 VALGRIND_CFI_PROLOGUE \ 4862 "aghi 15,-168\n\t" \ 4868 "mvc 160(8,15), 48(1)\n\t" \ 4870 VALGRIND_CALL_NOREDIR_R1 \ 4873 VALGRIND_CFI_EPILOGUE \ 4875 : "a" (&_argvec[0]) __FRAME_POINTER \ 4876 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 4878 lval = (__typeof__(lval)) _res; \ 4881 #define CALL_FN_W_7W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 4884 volatile OrigFn _orig = (orig); \ 4885 volatile unsigned long _argvec[8]; \ 4886 volatile unsigned long _res; \ 4887 _argvec[0] = (unsigned long)_orig.nraddr; \ 4888 _argvec[1] = (unsigned long)arg1; \ 4889 _argvec[2] = (unsigned long)arg2; \ 4890 _argvec[3] = (unsigned long)arg3; \ 4891 _argvec[4] = (unsigned long)arg4; \ 4892 _argvec[5] = (unsigned long)arg5; \ 4893 _argvec[6] = (unsigned long)arg6; \ 4894 _argvec[7] = (unsigned long)arg7; \ 4896 VALGRIND_CFI_PROLOGUE \ 4897 "aghi 15,-176\n\t" \ 4903 "mvc 160(8,15), 48(1)\n\t" \ 4904 "mvc 168(8,15), 56(1)\n\t" \ 4906 VALGRIND_CALL_NOREDIR_R1 \ 4909 VALGRIND_CFI_EPILOGUE \ 4911 : "a" (&_argvec[0]) __FRAME_POINTER \ 4912 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 4914 lval = (__typeof__(lval)) _res; \ 4917 #define CALL_FN_W_8W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 4920 volatile OrigFn _orig = (orig); \ 4921 volatile unsigned long _argvec[9]; \ 4922 volatile unsigned long _res; \ 4923 _argvec[0] = (unsigned long)_orig.nraddr; \ 4924 _argvec[1] = (unsigned long)arg1; \ 4925 _argvec[2] = (unsigned long)arg2; \ 4926 _argvec[3] = (unsigned long)arg3; \ 4927 _argvec[4] = (unsigned long)arg4; \ 4928 _argvec[5] = (unsigned long)arg5; \ 4929 _argvec[6] = (unsigned long)arg6; \ 4930 _argvec[7] = (unsigned long)arg7; \ 4931 _argvec[8] = (unsigned long)arg8; \ 4933 VALGRIND_CFI_PROLOGUE \ 4934 "aghi 15,-184\n\t" \ 4940 "mvc 160(8,15), 48(1)\n\t" \ 4941 "mvc 168(8,15), 56(1)\n\t" \ 4942 "mvc 176(8,15), 64(1)\n\t" \ 4944 VALGRIND_CALL_NOREDIR_R1 \ 4947 VALGRIND_CFI_EPILOGUE \ 4949 : "a" (&_argvec[0]) __FRAME_POINTER \ 4950 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 4952 lval = (__typeof__(lval)) _res; \ 4955 #define CALL_FN_W_9W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 4956 arg6, arg7 ,arg8, arg9) \ 4958 volatile OrigFn _orig = (orig); \ 4959 volatile unsigned long _argvec[10]; \ 4960 volatile unsigned long _res; \ 4961 _argvec[0] = (unsigned long)_orig.nraddr; \ 4962 _argvec[1] = (unsigned long)arg1; \ 4963 _argvec[2] = (unsigned long)arg2; \ 4964 _argvec[3] = (unsigned long)arg3; \ 4965 _argvec[4] = (unsigned long)arg4; \ 4966 _argvec[5] = (unsigned long)arg5; \ 4967 _argvec[6] = (unsigned long)arg6; \ 4968 _argvec[7] = (unsigned long)arg7; \ 4969 _argvec[8] = (unsigned long)arg8; \ 4970 _argvec[9] = (unsigned long)arg9; \ 4972 VALGRIND_CFI_PROLOGUE \ 4973 "aghi 15,-192\n\t" \ 4979 "mvc 160(8,15), 48(1)\n\t" \ 4980 "mvc 168(8,15), 56(1)\n\t" \ 4981 "mvc 176(8,15), 64(1)\n\t" \ 4982 "mvc 184(8,15), 72(1)\n\t" \ 4984 VALGRIND_CALL_NOREDIR_R1 \ 4987 VALGRIND_CFI_EPILOGUE \ 4989 : "a" (&_argvec[0]) __FRAME_POINTER \ 4990 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 4992 lval = (__typeof__(lval)) _res; \ 4995 #define CALL_FN_W_10W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 4996 arg6, arg7 ,arg8, arg9, arg10) \ 4998 volatile OrigFn _orig = (orig); \ 4999 volatile unsigned long _argvec[11]; \ 5000 volatile unsigned long _res; \ 5001 _argvec[0] = (unsigned long)_orig.nraddr; \ 5002 _argvec[1] = (unsigned long)arg1; \ 5003 _argvec[2] = (unsigned long)arg2; \ 5004 _argvec[3] = (unsigned long)arg3; \ 5005 _argvec[4] = (unsigned long)arg4; \ 5006 _argvec[5] = (unsigned long)arg5; \ 5007 _argvec[6] = (unsigned long)arg6; \ 5008 _argvec[7] = (unsigned long)arg7; \ 5009 _argvec[8] = (unsigned long)arg8; \ 5010 _argvec[9] = (unsigned long)arg9; \ 5011 _argvec[10] = (unsigned long)arg10; \ 5013 VALGRIND_CFI_PROLOGUE \ 5014 "aghi 15,-200\n\t" \ 5020 "mvc 160(8,15), 48(1)\n\t" \ 5021 "mvc 168(8,15), 56(1)\n\t" \ 5022 "mvc 176(8,15), 64(1)\n\t" \ 5023 "mvc 184(8,15), 72(1)\n\t" \ 5024 "mvc 192(8,15), 80(1)\n\t" \ 5026 VALGRIND_CALL_NOREDIR_R1 \ 5029 VALGRIND_CFI_EPILOGUE \ 5031 : "a" (&_argvec[0]) __FRAME_POINTER \ 5032 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 5034 lval = (__typeof__(lval)) _res; \ 5037 #define CALL_FN_W_11W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 5038 arg6, arg7 ,arg8, arg9, arg10, arg11) \ 5040 volatile OrigFn _orig = (orig); \ 5041 volatile unsigned long _argvec[12]; \ 5042 volatile unsigned long _res; \ 5043 _argvec[0] = (unsigned long)_orig.nraddr; \ 5044 _argvec[1] = (unsigned long)arg1; \ 5045 _argvec[2] = (unsigned long)arg2; \ 5046 _argvec[3] = (unsigned long)arg3; \ 5047 _argvec[4] = (unsigned long)arg4; \ 5048 _argvec[5] = (unsigned long)arg5; \ 5049 _argvec[6] = (unsigned long)arg6; \ 5050 _argvec[7] = (unsigned long)arg7; \ 5051 _argvec[8] = (unsigned long)arg8; \ 5052 _argvec[9] = (unsigned long)arg9; \ 5053 _argvec[10] = (unsigned long)arg10; \ 5054 _argvec[11] = (unsigned long)arg11; \ 5056 VALGRIND_CFI_PROLOGUE \ 5057 "aghi 15,-208\n\t" \ 5063 "mvc 160(8,15), 48(1)\n\t" \ 5064 "mvc 168(8,15), 56(1)\n\t" \ 5065 "mvc 176(8,15), 64(1)\n\t" \ 5066 "mvc 184(8,15), 72(1)\n\t" \ 5067 "mvc 192(8,15), 80(1)\n\t" \ 5068 "mvc 200(8,15), 88(1)\n\t" \ 5070 VALGRIND_CALL_NOREDIR_R1 \ 5073 VALGRIND_CFI_EPILOGUE \ 5075 : "a" (&_argvec[0]) __FRAME_POINTER \ 5076 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 5078 lval = (__typeof__(lval)) _res; \ 5081 #define CALL_FN_W_12W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 5082 arg6, arg7 ,arg8, arg9, arg10, arg11, arg12)\ 5084 volatile OrigFn _orig = (orig); \ 5085 volatile unsigned long _argvec[13]; \ 5086 volatile unsigned long _res; \ 5087 _argvec[0] = (unsigned long)_orig.nraddr; \ 5088 _argvec[1] = (unsigned long)arg1; \ 5089 _argvec[2] = (unsigned long)arg2; \ 5090 _argvec[3] = (unsigned long)arg3; \ 5091 _argvec[4] = (unsigned long)arg4; \ 5092 _argvec[5] = (unsigned long)arg5; \ 5093 _argvec[6] = (unsigned long)arg6; \ 5094 _argvec[7] = (unsigned long)arg7; \ 5095 _argvec[8] = (unsigned long)arg8; \ 5096 _argvec[9] = (unsigned long)arg9; \ 5097 _argvec[10] = (unsigned long)arg10; \ 5098 _argvec[11] = (unsigned long)arg11; \ 5099 _argvec[12] = (unsigned long)arg12; \ 5101 VALGRIND_CFI_PROLOGUE \ 5102 "aghi 15,-216\n\t" \ 5108 "mvc 160(8,15), 48(1)\n\t" \ 5109 "mvc 168(8,15), 56(1)\n\t" \ 5110 "mvc 176(8,15), 64(1)\n\t" \ 5111 "mvc 184(8,15), 72(1)\n\t" \ 5112 "mvc 192(8,15), 80(1)\n\t" \ 5113 "mvc 200(8,15), 88(1)\n\t" \ 5114 "mvc 208(8,15), 96(1)\n\t" \ 5116 VALGRIND_CALL_NOREDIR_R1 \ 5119 VALGRIND_CFI_EPILOGUE \ 5121 : "a" (&_argvec[0]) __FRAME_POINTER \ 5122 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 5124 lval = (__typeof__(lval)) _res; \ 5132 #if defined(PLAT_mips32_linux) 5135 #define __CALLER_SAVED_REGS "$2", "$3", "$4", "$5", "$6", \ 5136 "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 5142 #define CALL_FN_W_v(lval, orig) \ 5144 volatile OrigFn _orig = (orig); \ 5145 volatile unsigned long _argvec[1]; \ 5146 volatile unsigned long _res; \ 5147 _argvec[0] = (unsigned long)_orig.nraddr; \ 5149 "subu $29, $29, 8 \n\t" \ 5150 "sw $28, 0($29) \n\t" \ 5151 "sw $31, 4($29) \n\t" \ 5152 "subu $29, $29, 16 \n\t" \ 5153 "lw $25, 0(%1) \n\t" \ 5154 VALGRIND_CALL_NOREDIR_T9 \ 5155 "addu $29, $29, 16\n\t" \ 5156 "lw $28, 0($29) \n\t" \ 5157 "lw $31, 4($29) \n\t" \ 5158 "addu $29, $29, 8 \n\t" \ 5161 : "0" (&_argvec[0]) \ 5162 : "memory", __CALLER_SAVED_REGS \ 5164 lval = (__typeof__(lval)) _res; \ 5167 #define CALL_FN_W_W(lval, orig, arg1) \ 5169 volatile OrigFn _orig = (orig); \ 5170 volatile unsigned long _argvec[2]; \ 5171 volatile unsigned long _res; \ 5172 _argvec[0] = (unsigned long)_orig.nraddr; \ 5173 _argvec[1] = (unsigned long)(arg1); \ 5175 "subu $29, $29, 8 \n\t" \ 5176 "sw $28, 0($29) \n\t" \ 5177 "sw $31, 4($29) \n\t" \ 5178 "subu $29, $29, 16 \n\t" \ 5179 "lw $4, 4(%1) \n\t" \ 5180 "lw $25, 0(%1) \n\t" \ 5181 VALGRIND_CALL_NOREDIR_T9 \ 5182 "addu $29, $29, 16 \n\t" \ 5183 "lw $28, 0($29) \n\t" \ 5184 "lw $31, 4($29) \n\t" \ 5185 "addu $29, $29, 8 \n\t" \ 5188 : "0" (&_argvec[0]) \ 5189 : "memory", __CALLER_SAVED_REGS \ 5191 lval = (__typeof__(lval)) _res; \ 5194 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 5196 volatile OrigFn _orig = (orig); \ 5197 volatile unsigned long _argvec[3]; \ 5198 volatile unsigned long _res; \ 5199 _argvec[0] = (unsigned long)_orig.nraddr; \ 5200 _argvec[1] = (unsigned long)(arg1); \ 5201 _argvec[2] = (unsigned long)(arg2); \ 5203 "subu $29, $29, 8 \n\t" \ 5204 "sw $28, 0($29) \n\t" \ 5205 "sw $31, 4($29) \n\t" \ 5206 "subu $29, $29, 16 \n\t" \ 5207 "lw $4, 4(%1) \n\t" \ 5208 "lw $5, 8(%1) \n\t" \ 5209 "lw $25, 0(%1) \n\t" \ 5210 VALGRIND_CALL_NOREDIR_T9 \ 5211 "addu $29, $29, 16 \n\t" \ 5212 "lw $28, 0($29) \n\t" \ 5213 "lw $31, 4($29) \n\t" \ 5214 "addu $29, $29, 8 \n\t" \ 5217 : "0" (&_argvec[0]) \ 5218 : "memory", __CALLER_SAVED_REGS \ 5220 lval = (__typeof__(lval)) _res; \ 5223 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 5225 volatile OrigFn _orig = (orig); \ 5226 volatile unsigned long _argvec[4]; \ 5227 volatile unsigned long _res; \ 5228 _argvec[0] = (unsigned long)_orig.nraddr; \ 5229 _argvec[1] = (unsigned long)(arg1); \ 5230 _argvec[2] = (unsigned long)(arg2); \ 5231 _argvec[3] = (unsigned long)(arg3); \ 5233 "subu $29, $29, 8 \n\t" \ 5234 "sw $28, 0($29) \n\t" \ 5235 "sw $31, 4($29) \n\t" \ 5236 "subu $29, $29, 16 \n\t" \ 5237 "lw $4, 4(%1) \n\t" \ 5238 "lw $5, 8(%1) \n\t" \ 5239 "lw $6, 12(%1) \n\t" \ 5240 "lw $25, 0(%1) \n\t" \ 5241 VALGRIND_CALL_NOREDIR_T9 \ 5242 "addu $29, $29, 16 \n\t" \ 5243 "lw $28, 0($29) \n\t" \ 5244 "lw $31, 4($29) \n\t" \ 5245 "addu $29, $29, 8 \n\t" \ 5248 : "0" (&_argvec[0]) \ 5249 : "memory", __CALLER_SAVED_REGS \ 5251 lval = (__typeof__(lval)) _res; \ 5254 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 5256 volatile OrigFn _orig = (orig); \ 5257 volatile unsigned long _argvec[5]; \ 5258 volatile unsigned long _res; \ 5259 _argvec[0] = (unsigned long)_orig.nraddr; \ 5260 _argvec[1] = (unsigned long)(arg1); \ 5261 _argvec[2] = (unsigned long)(arg2); \ 5262 _argvec[3] = (unsigned long)(arg3); \ 5263 _argvec[4] = (unsigned long)(arg4); \ 5265 "subu $29, $29, 8 \n\t" \ 5266 "sw $28, 0($29) \n\t" \ 5267 "sw $31, 4($29) \n\t" \ 5268 "subu $29, $29, 16 \n\t" \ 5269 "lw $4, 4(%1) \n\t" \ 5270 "lw $5, 8(%1) \n\t" \ 5271 "lw $6, 12(%1) \n\t" \ 5272 "lw $7, 16(%1) \n\t" \ 5273 "lw $25, 0(%1) \n\t" \ 5274 VALGRIND_CALL_NOREDIR_T9 \ 5275 "addu $29, $29, 16 \n\t" \ 5276 "lw $28, 0($29) \n\t" \ 5277 "lw $31, 4($29) \n\t" \ 5278 "addu $29, $29, 8 \n\t" \ 5281 : "0" (&_argvec[0]) \ 5282 : "memory", __CALLER_SAVED_REGS \ 5284 lval = (__typeof__(lval)) _res; \ 5287 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 5289 volatile OrigFn _orig = (orig); \ 5290 volatile unsigned long _argvec[6]; \ 5291 volatile unsigned long _res; \ 5292 _argvec[0] = (unsigned long)_orig.nraddr; \ 5293 _argvec[1] = (unsigned long)(arg1); \ 5294 _argvec[2] = (unsigned long)(arg2); \ 5295 _argvec[3] = (unsigned long)(arg3); \ 5296 _argvec[4] = (unsigned long)(arg4); \ 5297 _argvec[5] = (unsigned long)(arg5); \ 5299 "subu $29, $29, 8 \n\t" \ 5300 "sw $28, 0($29) \n\t" \ 5301 "sw $31, 4($29) \n\t" \ 5302 "lw $4, 20(%1) \n\t" \ 5303 "subu $29, $29, 24\n\t" \ 5304 "sw $4, 16($29) \n\t" \ 5305 "lw $4, 4(%1) \n\t" \ 5306 "lw $5, 8(%1) \n\t" \ 5307 "lw $6, 12(%1) \n\t" \ 5308 "lw $7, 16(%1) \n\t" \ 5309 "lw $25, 0(%1) \n\t" \ 5310 VALGRIND_CALL_NOREDIR_T9 \ 5311 "addu $29, $29, 24 \n\t" \ 5312 "lw $28, 0($29) \n\t" \ 5313 "lw $31, 4($29) \n\t" \ 5314 "addu $29, $29, 8 \n\t" \ 5317 : "0" (&_argvec[0]) \ 5318 : "memory", __CALLER_SAVED_REGS \ 5320 lval = (__typeof__(lval)) _res; \ 5322 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 5324 volatile OrigFn _orig = (orig); \ 5325 volatile unsigned long _argvec[7]; \ 5326 volatile unsigned long _res; \ 5327 _argvec[0] = (unsigned long)_orig.nraddr; \ 5328 _argvec[1] = (unsigned long)(arg1); \ 5329 _argvec[2] = (unsigned long)(arg2); \ 5330 _argvec[3] = (unsigned long)(arg3); \ 5331 _argvec[4] = (unsigned long)(arg4); \ 5332 _argvec[5] = (unsigned long)(arg5); \ 5333 _argvec[6] = (unsigned long)(arg6); \ 5335 "subu $29, $29, 8 \n\t" \ 5336 "sw $28, 0($29) \n\t" \ 5337 "sw $31, 4($29) \n\t" \ 5338 "lw $4, 20(%1) \n\t" \ 5339 "subu $29, $29, 32\n\t" \ 5340 "sw $4, 16($29) \n\t" \ 5341 "lw $4, 24(%1) \n\t" \ 5343 "sw $4, 20($29) \n\t" \ 5344 "lw $4, 4(%1) \n\t" \ 5345 "lw $5, 8(%1) \n\t" \ 5346 "lw $6, 12(%1) \n\t" \ 5347 "lw $7, 16(%1) \n\t" \ 5348 "lw $25, 0(%1) \n\t" \ 5349 VALGRIND_CALL_NOREDIR_T9 \ 5350 "addu $29, $29, 32 \n\t" \ 5351 "lw $28, 0($29) \n\t" \ 5352 "lw $31, 4($29) \n\t" \ 5353 "addu $29, $29, 8 \n\t" \ 5356 : "0" (&_argvec[0]) \ 5357 : "memory", __CALLER_SAVED_REGS \ 5359 lval = (__typeof__(lval)) _res; \ 5362 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 5365 volatile OrigFn _orig = (orig); \ 5366 volatile unsigned long _argvec[8]; \ 5367 volatile unsigned long _res; \ 5368 _argvec[0] = (unsigned long)_orig.nraddr; \ 5369 _argvec[1] = (unsigned long)(arg1); \ 5370 _argvec[2] = (unsigned long)(arg2); \ 5371 _argvec[3] = (unsigned long)(arg3); \ 5372 _argvec[4] = (unsigned long)(arg4); \ 5373 _argvec[5] = (unsigned long)(arg5); \ 5374 _argvec[6] = (unsigned long)(arg6); \ 5375 _argvec[7] = (unsigned long)(arg7); \ 5377 "subu $29, $29, 8 \n\t" \ 5378 "sw $28, 0($29) \n\t" \ 5379 "sw $31, 4($29) \n\t" \ 5380 "lw $4, 20(%1) \n\t" \ 5381 "subu $29, $29, 32\n\t" \ 5382 "sw $4, 16($29) \n\t" \ 5383 "lw $4, 24(%1) \n\t" \ 5384 "sw $4, 20($29) \n\t" \ 5385 "lw $4, 28(%1) \n\t" \ 5386 "sw $4, 24($29) \n\t" \ 5387 "lw $4, 4(%1) \n\t" \ 5388 "lw $5, 8(%1) \n\t" \ 5389 "lw $6, 12(%1) \n\t" \ 5390 "lw $7, 16(%1) \n\t" \ 5391 "lw $25, 0(%1) \n\t" \ 5392 VALGRIND_CALL_NOREDIR_T9 \ 5393 "addu $29, $29, 32 \n\t" \ 5394 "lw $28, 0($29) \n\t" \ 5395 "lw $31, 4($29) \n\t" \ 5396 "addu $29, $29, 8 \n\t" \ 5399 : "0" (&_argvec[0]) \ 5400 : "memory", __CALLER_SAVED_REGS \ 5402 lval = (__typeof__(lval)) _res; \ 5405 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 5408 volatile OrigFn _orig = (orig); \ 5409 volatile unsigned long _argvec[9]; \ 5410 volatile unsigned long _res; \ 5411 _argvec[0] = (unsigned long)_orig.nraddr; \ 5412 _argvec[1] = (unsigned long)(arg1); \ 5413 _argvec[2] = (unsigned long)(arg2); \ 5414 _argvec[3] = (unsigned long)(arg3); \ 5415 _argvec[4] = (unsigned long)(arg4); \ 5416 _argvec[5] = (unsigned long)(arg5); \ 5417 _argvec[6] = (unsigned long)(arg6); \ 5418 _argvec[7] = (unsigned long)(arg7); \ 5419 _argvec[8] = (unsigned long)(arg8); \ 5421 "subu $29, $29, 8 \n\t" \ 5422 "sw $28, 0($29) \n\t" \ 5423 "sw $31, 4($29) \n\t" \ 5424 "lw $4, 20(%1) \n\t" \ 5425 "subu $29, $29, 40\n\t" \ 5426 "sw $4, 16($29) \n\t" \ 5427 "lw $4, 24(%1) \n\t" \ 5428 "sw $4, 20($29) \n\t" \ 5429 "lw $4, 28(%1) \n\t" \ 5430 "sw $4, 24($29) \n\t" \ 5431 "lw $4, 32(%1) \n\t" \ 5432 "sw $4, 28($29) \n\t" \ 5433 "lw $4, 4(%1) \n\t" \ 5434 "lw $5, 8(%1) \n\t" \ 5435 "lw $6, 12(%1) \n\t" \ 5436 "lw $7, 16(%1) \n\t" \ 5437 "lw $25, 0(%1) \n\t" \ 5438 VALGRIND_CALL_NOREDIR_T9 \ 5439 "addu $29, $29, 40 \n\t" \ 5440 "lw $28, 0($29) \n\t" \ 5441 "lw $31, 4($29) \n\t" \ 5442 "addu $29, $29, 8 \n\t" \ 5445 : "0" (&_argvec[0]) \ 5446 : "memory", __CALLER_SAVED_REGS \ 5448 lval = (__typeof__(lval)) _res; \ 5451 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 5454 volatile OrigFn _orig = (orig); \ 5455 volatile unsigned long _argvec[10]; \ 5456 volatile unsigned long _res; \ 5457 _argvec[0] = (unsigned long)_orig.nraddr; \ 5458 _argvec[1] = (unsigned long)(arg1); \ 5459 _argvec[2] = (unsigned long)(arg2); \ 5460 _argvec[3] = (unsigned long)(arg3); \ 5461 _argvec[4] = (unsigned long)(arg4); \ 5462 _argvec[5] = (unsigned long)(arg5); \ 5463 _argvec[6] = (unsigned long)(arg6); \ 5464 _argvec[7] = (unsigned long)(arg7); \ 5465 _argvec[8] = (unsigned long)(arg8); \ 5466 _argvec[9] = (unsigned long)(arg9); \ 5468 "subu $29, $29, 8 \n\t" \ 5469 "sw $28, 0($29) \n\t" \ 5470 "sw $31, 4($29) \n\t" \ 5471 "lw $4, 20(%1) \n\t" \ 5472 "subu $29, $29, 40\n\t" \ 5473 "sw $4, 16($29) \n\t" \ 5474 "lw $4, 24(%1) \n\t" \ 5475 "sw $4, 20($29) \n\t" \ 5476 "lw $4, 28(%1) \n\t" \ 5477 "sw $4, 24($29) \n\t" \ 5478 "lw $4, 32(%1) \n\t" \ 5479 "sw $4, 28($29) \n\t" \ 5480 "lw $4, 36(%1) \n\t" \ 5481 "sw $4, 32($29) \n\t" \ 5482 "lw $4, 4(%1) \n\t" \ 5483 "lw $5, 8(%1) \n\t" \ 5484 "lw $6, 12(%1) \n\t" \ 5485 "lw $7, 16(%1) \n\t" \ 5486 "lw $25, 0(%1) \n\t" \ 5487 VALGRIND_CALL_NOREDIR_T9 \ 5488 "addu $29, $29, 40 \n\t" \ 5489 "lw $28, 0($29) \n\t" \ 5490 "lw $31, 4($29) \n\t" \ 5491 "addu $29, $29, 8 \n\t" \ 5494 : "0" (&_argvec[0]) \ 5495 : "memory", __CALLER_SAVED_REGS \ 5497 lval = (__typeof__(lval)) _res; \ 5500 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 5501 arg7,arg8,arg9,arg10) \ 5503 volatile OrigFn _orig = (orig); \ 5504 volatile unsigned long _argvec[11]; \ 5505 volatile unsigned long _res; \ 5506 _argvec[0] = (unsigned long)_orig.nraddr; \ 5507 _argvec[1] = (unsigned long)(arg1); \ 5508 _argvec[2] = (unsigned long)(arg2); \ 5509 _argvec[3] = (unsigned long)(arg3); \ 5510 _argvec[4] = (unsigned long)(arg4); \ 5511 _argvec[5] = (unsigned long)(arg5); \ 5512 _argvec[6] = (unsigned long)(arg6); \ 5513 _argvec[7] = (unsigned long)(arg7); \ 5514 _argvec[8] = (unsigned long)(arg8); \ 5515 _argvec[9] = (unsigned long)(arg9); \ 5516 _argvec[10] = (unsigned long)(arg10); \ 5518 "subu $29, $29, 8 \n\t" \ 5519 "sw $28, 0($29) \n\t" \ 5520 "sw $31, 4($29) \n\t" \ 5521 "lw $4, 20(%1) \n\t" \ 5522 "subu $29, $29, 48\n\t" \ 5523 "sw $4, 16($29) \n\t" \ 5524 "lw $4, 24(%1) \n\t" \ 5525 "sw $4, 20($29) \n\t" \ 5526 "lw $4, 28(%1) \n\t" \ 5527 "sw $4, 24($29) \n\t" \ 5528 "lw $4, 32(%1) \n\t" \ 5529 "sw $4, 28($29) \n\t" \ 5530 "lw $4, 36(%1) \n\t" \ 5531 "sw $4, 32($29) \n\t" \ 5532 "lw $4, 40(%1) \n\t" \ 5533 "sw $4, 36($29) \n\t" \ 5534 "lw $4, 4(%1) \n\t" \ 5535 "lw $5, 8(%1) \n\t" \ 5536 "lw $6, 12(%1) \n\t" \ 5537 "lw $7, 16(%1) \n\t" \ 5538 "lw $25, 0(%1) \n\t" \ 5539 VALGRIND_CALL_NOREDIR_T9 \ 5540 "addu $29, $29, 48 \n\t" \ 5541 "lw $28, 0($29) \n\t" \ 5542 "lw $31, 4($29) \n\t" \ 5543 "addu $29, $29, 8 \n\t" \ 5546 : "0" (&_argvec[0]) \ 5547 : "memory", __CALLER_SAVED_REGS \ 5549 lval = (__typeof__(lval)) _res; \ 5552 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 5553 arg6,arg7,arg8,arg9,arg10, \ 5556 volatile OrigFn _orig = (orig); \ 5557 volatile unsigned long _argvec[12]; \ 5558 volatile unsigned long _res; \ 5559 _argvec[0] = (unsigned long)_orig.nraddr; \ 5560 _argvec[1] = (unsigned long)(arg1); \ 5561 _argvec[2] = (unsigned long)(arg2); \ 5562 _argvec[3] = (unsigned long)(arg3); \ 5563 _argvec[4] = (unsigned long)(arg4); \ 5564 _argvec[5] = (unsigned long)(arg5); \ 5565 _argvec[6] = (unsigned long)(arg6); \ 5566 _argvec[7] = (unsigned long)(arg7); \ 5567 _argvec[8] = (unsigned long)(arg8); \ 5568 _argvec[9] = (unsigned long)(arg9); \ 5569 _argvec[10] = (unsigned long)(arg10); \ 5570 _argvec[11] = (unsigned long)(arg11); \ 5572 "subu $29, $29, 8 \n\t" \ 5573 "sw $28, 0($29) \n\t" \ 5574 "sw $31, 4($29) \n\t" \ 5575 "lw $4, 20(%1) \n\t" \ 5576 "subu $29, $29, 48\n\t" \ 5577 "sw $4, 16($29) \n\t" \ 5578 "lw $4, 24(%1) \n\t" \ 5579 "sw $4, 20($29) \n\t" \ 5580 "lw $4, 28(%1) \n\t" \ 5581 "sw $4, 24($29) \n\t" \ 5582 "lw $4, 32(%1) \n\t" \ 5583 "sw $4, 28($29) \n\t" \ 5584 "lw $4, 36(%1) \n\t" \ 5585 "sw $4, 32($29) \n\t" \ 5586 "lw $4, 40(%1) \n\t" \ 5587 "sw $4, 36($29) \n\t" \ 5588 "lw $4, 44(%1) \n\t" \ 5589 "sw $4, 40($29) \n\t" \ 5590 "lw $4, 4(%1) \n\t" \ 5591 "lw $5, 8(%1) \n\t" \ 5592 "lw $6, 12(%1) \n\t" \ 5593 "lw $7, 16(%1) \n\t" \ 5594 "lw $25, 0(%1) \n\t" \ 5595 VALGRIND_CALL_NOREDIR_T9 \ 5596 "addu $29, $29, 48 \n\t" \ 5597 "lw $28, 0($29) \n\t" \ 5598 "lw $31, 4($29) \n\t" \ 5599 "addu $29, $29, 8 \n\t" \ 5602 : "0" (&_argvec[0]) \ 5603 : "memory", __CALLER_SAVED_REGS \ 5605 lval = (__typeof__(lval)) _res; \ 5608 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 5609 arg6,arg7,arg8,arg9,arg10, \ 5612 volatile OrigFn _orig = (orig); \ 5613 volatile unsigned long _argvec[13]; \ 5614 volatile unsigned long _res; \ 5615 _argvec[0] = (unsigned long)_orig.nraddr; \ 5616 _argvec[1] = (unsigned long)(arg1); \ 5617 _argvec[2] = (unsigned long)(arg2); \ 5618 _argvec[3] = (unsigned long)(arg3); \ 5619 _argvec[4] = (unsigned long)(arg4); \ 5620 _argvec[5] = (unsigned long)(arg5); \ 5621 _argvec[6] = (unsigned long)(arg6); \ 5622 _argvec[7] = (unsigned long)(arg7); \ 5623 _argvec[8] = (unsigned long)(arg8); \ 5624 _argvec[9] = (unsigned long)(arg9); \ 5625 _argvec[10] = (unsigned long)(arg10); \ 5626 _argvec[11] = (unsigned long)(arg11); \ 5627 _argvec[12] = (unsigned long)(arg12); \ 5629 "subu $29, $29, 8 \n\t" \ 5630 "sw $28, 0($29) \n\t" \ 5631 "sw $31, 4($29) \n\t" \ 5632 "lw $4, 20(%1) \n\t" \ 5633 "subu $29, $29, 56\n\t" \ 5634 "sw $4, 16($29) \n\t" \ 5635 "lw $4, 24(%1) \n\t" \ 5636 "sw $4, 20($29) \n\t" \ 5637 "lw $4, 28(%1) \n\t" \ 5638 "sw $4, 24($29) \n\t" \ 5639 "lw $4, 32(%1) \n\t" \ 5640 "sw $4, 28($29) \n\t" \ 5641 "lw $4, 36(%1) \n\t" \ 5642 "sw $4, 32($29) \n\t" \ 5643 "lw $4, 40(%1) \n\t" \ 5644 "sw $4, 36($29) \n\t" \ 5645 "lw $4, 44(%1) \n\t" \ 5646 "sw $4, 40($29) \n\t" \ 5647 "lw $4, 48(%1) \n\t" \ 5648 "sw $4, 44($29) \n\t" \ 5649 "lw $4, 4(%1) \n\t" \ 5650 "lw $5, 8(%1) \n\t" \ 5651 "lw $6, 12(%1) \n\t" \ 5652 "lw $7, 16(%1) \n\t" \ 5653 "lw $25, 0(%1) \n\t" \ 5654 VALGRIND_CALL_NOREDIR_T9 \ 5655 "addu $29, $29, 56 \n\t" \ 5656 "lw $28, 0($29) \n\t" \ 5657 "lw $31, 4($29) \n\t" \ 5658 "addu $29, $29, 8 \n\t" \ 5661 : "r" (&_argvec[0]) \ 5662 : "memory", __CALLER_SAVED_REGS \ 5664 lval = (__typeof__(lval)) _res; \ 5671 #if defined(PLAT_mips64_linux) 5674 #define __CALLER_SAVED_REGS "$2", "$3", "$4", "$5", "$6", \ 5675 "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 5681 #define CALL_FN_W_v(lval, orig) \ 5683 volatile OrigFn _orig = (orig); \ 5684 volatile unsigned long _argvec[1]; \ 5685 volatile unsigned long _res; \ 5686 _argvec[0] = (unsigned long)_orig.nraddr; \ 5688 "ld $25, 0(%1)\n\t" \ 5689 VALGRIND_CALL_NOREDIR_T9 \ 5692 : "0" (&_argvec[0]) \ 5693 : "memory", __CALLER_SAVED_REGS \ 5695 lval = (__typeof__(lval)) _res; \ 5698 #define CALL_FN_W_W(lval, orig, arg1) \ 5700 volatile OrigFn _orig = (orig); \ 5701 volatile unsigned long _argvec[2]; \ 5702 volatile unsigned long _res; \ 5703 _argvec[0] = (unsigned long)_orig.nraddr; \ 5704 _argvec[1] = (unsigned long)(arg1); \ 5706 "ld $4, 8(%1)\n\t" \ 5707 "ld $25, 0(%1)\n\t" \ 5708 VALGRIND_CALL_NOREDIR_T9 \ 5711 : "r" (&_argvec[0]) \ 5712 : "memory", __CALLER_SAVED_REGS \ 5714 lval = (__typeof__(lval)) _res; \ 5717 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 5719 volatile OrigFn _orig = (orig); \ 5720 volatile unsigned long _argvec[3]; \ 5721 volatile unsigned long _res; \ 5722 _argvec[0] = (unsigned long)_orig.nraddr; \ 5723 _argvec[1] = (unsigned long)(arg1); \ 5724 _argvec[2] = (unsigned long)(arg2); \ 5726 "ld $4, 8(%1)\n\t" \ 5727 "ld $5, 16(%1)\n\t" \ 5728 "ld $25, 0(%1)\n\t" \ 5729 VALGRIND_CALL_NOREDIR_T9 \ 5732 : "r" (&_argvec[0]) \ 5733 : "memory", __CALLER_SAVED_REGS \ 5735 lval = (__typeof__(lval)) _res; \ 5738 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 5740 volatile OrigFn _orig = (orig); \ 5741 volatile unsigned long _argvec[4]; \ 5742 volatile unsigned long _res; \ 5743 _argvec[0] = (unsigned long)_orig.nraddr; \ 5744 _argvec[1] = (unsigned long)(arg1); \ 5745 _argvec[2] = (unsigned long)(arg2); \ 5746 _argvec[3] = (unsigned long)(arg3); \ 5748 "ld $4, 8(%1)\n\t" \ 5749 "ld $5, 16(%1)\n\t" \ 5750 "ld $6, 24(%1)\n\t" \ 5751 "ld $25, 0(%1)\n\t" \ 5752 VALGRIND_CALL_NOREDIR_T9 \ 5755 : "r" (&_argvec[0]) \ 5756 : "memory", __CALLER_SAVED_REGS \ 5758 lval = (__typeof__(lval)) _res; \ 5761 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 5763 volatile OrigFn _orig = (orig); \ 5764 volatile unsigned long _argvec[5]; \ 5765 volatile unsigned long _res; \ 5766 _argvec[0] = (unsigned long)_orig.nraddr; \ 5767 _argvec[1] = (unsigned long)(arg1); \ 5768 _argvec[2] = (unsigned long)(arg2); \ 5769 _argvec[3] = (unsigned long)(arg3); \ 5770 _argvec[4] = (unsigned long)(arg4); \ 5772 "ld $4, 8(%1)\n\t" \ 5773 "ld $5, 16(%1)\n\t" \ 5774 "ld $6, 24(%1)\n\t" \ 5775 "ld $7, 32(%1)\n\t" \ 5776 "ld $25, 0(%1)\n\t" \ 5777 VALGRIND_CALL_NOREDIR_T9 \ 5780 : "r" (&_argvec[0]) \ 5781 : "memory", __CALLER_SAVED_REGS \ 5783 lval = (__typeof__(lval)) _res; \ 5786 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 5788 volatile OrigFn _orig = (orig); \ 5789 volatile unsigned long _argvec[6]; \ 5790 volatile unsigned long _res; \ 5791 _argvec[0] = (unsigned long)_orig.nraddr; \ 5792 _argvec[1] = (unsigned long)(arg1); \ 5793 _argvec[2] = (unsigned long)(arg2); \ 5794 _argvec[3] = (unsigned long)(arg3); \ 5795 _argvec[4] = (unsigned long)(arg4); \ 5796 _argvec[5] = (unsigned long)(arg5); \ 5798 "ld $4, 8(%1)\n\t" \ 5799 "ld $5, 16(%1)\n\t" \ 5800 "ld $6, 24(%1)\n\t" \ 5801 "ld $7, 32(%1)\n\t" \ 5802 "ld $8, 40(%1)\n\t" \ 5803 "ld $25, 0(%1)\n\t" \ 5804 VALGRIND_CALL_NOREDIR_T9 \ 5807 : "r" (&_argvec[0]) \ 5808 : "memory", __CALLER_SAVED_REGS \ 5810 lval = (__typeof__(lval)) _res; \ 5813 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 5815 volatile OrigFn _orig = (orig); \ 5816 volatile unsigned long _argvec[7]; \ 5817 volatile unsigned long _res; \ 5818 _argvec[0] = (unsigned long)_orig.nraddr; \ 5819 _argvec[1] = (unsigned long)(arg1); \ 5820 _argvec[2] = (unsigned long)(arg2); \ 5821 _argvec[3] = (unsigned long)(arg3); \ 5822 _argvec[4] = (unsigned long)(arg4); \ 5823 _argvec[5] = (unsigned long)(arg5); \ 5824 _argvec[6] = (unsigned long)(arg6); \ 5826 "ld $4, 8(%1)\n\t" \ 5827 "ld $5, 16(%1)\n\t" \ 5828 "ld $6, 24(%1)\n\t" \ 5829 "ld $7, 32(%1)\n\t" \ 5830 "ld $8, 40(%1)\n\t" \ 5831 "ld $9, 48(%1)\n\t" \ 5832 "ld $25, 0(%1)\n\t" \ 5833 VALGRIND_CALL_NOREDIR_T9 \ 5836 : "r" (&_argvec[0]) \ 5837 : "memory", __CALLER_SAVED_REGS \ 5839 lval = (__typeof__(lval)) _res; \ 5842 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 5845 volatile OrigFn _orig = (orig); \ 5846 volatile unsigned long _argvec[8]; \ 5847 volatile unsigned long _res; \ 5848 _argvec[0] = (unsigned long)_orig.nraddr; \ 5849 _argvec[1] = (unsigned long)(arg1); \ 5850 _argvec[2] = (unsigned long)(arg2); \ 5851 _argvec[3] = (unsigned long)(arg3); \ 5852 _argvec[4] = (unsigned long)(arg4); \ 5853 _argvec[5] = (unsigned long)(arg5); \ 5854 _argvec[6] = (unsigned long)(arg6); \ 5855 _argvec[7] = (unsigned long)(arg7); \ 5857 "ld $4, 8(%1)\n\t" \ 5858 "ld $5, 16(%1)\n\t" \ 5859 "ld $6, 24(%1)\n\t" \ 5860 "ld $7, 32(%1)\n\t" \ 5861 "ld $8, 40(%1)\n\t" \ 5862 "ld $9, 48(%1)\n\t" \ 5863 "ld $10, 56(%1)\n\t" \ 5864 "ld $25, 0(%1) \n\t" \ 5865 VALGRIND_CALL_NOREDIR_T9 \ 5868 : "r" (&_argvec[0]) \ 5869 : "memory", __CALLER_SAVED_REGS \ 5871 lval = (__typeof__(lval)) _res; \ 5874 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 5877 volatile OrigFn _orig = (orig); \ 5878 volatile unsigned long _argvec[9]; \ 5879 volatile unsigned long _res; \ 5880 _argvec[0] = (unsigned long)_orig.nraddr; \ 5881 _argvec[1] = (unsigned long)(arg1); \ 5882 _argvec[2] = (unsigned long)(arg2); \ 5883 _argvec[3] = (unsigned long)(arg3); \ 5884 _argvec[4] = (unsigned long)(arg4); \ 5885 _argvec[5] = (unsigned long)(arg5); \ 5886 _argvec[6] = (unsigned long)(arg6); \ 5887 _argvec[7] = (unsigned long)(arg7); \ 5888 _argvec[8] = (unsigned long)(arg8); \ 5890 "ld $4, 8(%1)\n\t" \ 5891 "ld $5, 16(%1)\n\t" \ 5892 "ld $6, 24(%1)\n\t" \ 5893 "ld $7, 32(%1)\n\t" \ 5894 "ld $8, 40(%1)\n\t" \ 5895 "ld $9, 48(%1)\n\t" \ 5896 "ld $10, 56(%1)\n\t" \ 5897 "ld $11, 64(%1)\n\t" \ 5898 "ld $25, 0(%1) \n\t" \ 5899 VALGRIND_CALL_NOREDIR_T9 \ 5902 : "r" (&_argvec[0]) \ 5903 : "memory", __CALLER_SAVED_REGS \ 5905 lval = (__typeof__(lval)) _res; \ 5908 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 5911 volatile OrigFn _orig = (orig); \ 5912 volatile unsigned long _argvec[10]; \ 5913 volatile unsigned long _res; \ 5914 _argvec[0] = (unsigned long)_orig.nraddr; \ 5915 _argvec[1] = (unsigned long)(arg1); \ 5916 _argvec[2] = (unsigned long)(arg2); \ 5917 _argvec[3] = (unsigned long)(arg3); \ 5918 _argvec[4] = (unsigned long)(arg4); \ 5919 _argvec[5] = (unsigned long)(arg5); \ 5920 _argvec[6] = (unsigned long)(arg6); \ 5921 _argvec[7] = (unsigned long)(arg7); \ 5922 _argvec[8] = (unsigned long)(arg8); \ 5923 _argvec[9] = (unsigned long)(arg9); \ 5925 "dsubu $29, $29, 8\n\t" \ 5926 "ld $4, 72(%1)\n\t" \ 5927 "sd $4, 0($29)\n\t" \ 5928 "ld $4, 8(%1)\n\t" \ 5929 "ld $5, 16(%1)\n\t" \ 5930 "ld $6, 24(%1)\n\t" \ 5931 "ld $7, 32(%1)\n\t" \ 5932 "ld $8, 40(%1)\n\t" \ 5933 "ld $9, 48(%1)\n\t" \ 5934 "ld $10, 56(%1)\n\t" \ 5935 "ld $11, 64(%1)\n\t" \ 5936 "ld $25, 0(%1)\n\t" \ 5937 VALGRIND_CALL_NOREDIR_T9 \ 5938 "daddu $29, $29, 8\n\t" \ 5941 : "r" (&_argvec[0]) \ 5942 : "memory", __CALLER_SAVED_REGS \ 5944 lval = (__typeof__(lval)) _res; \ 5947 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 5948 arg7,arg8,arg9,arg10) \ 5950 volatile OrigFn _orig = (orig); \ 5951 volatile unsigned long _argvec[11]; \ 5952 volatile unsigned long _res; \ 5953 _argvec[0] = (unsigned long)_orig.nraddr; \ 5954 _argvec[1] = (unsigned long)(arg1); \ 5955 _argvec[2] = (unsigned long)(arg2); \ 5956 _argvec[3] = (unsigned long)(arg3); \ 5957 _argvec[4] = (unsigned long)(arg4); \ 5958 _argvec[5] = (unsigned long)(arg5); \ 5959 _argvec[6] = (unsigned long)(arg6); \ 5960 _argvec[7] = (unsigned long)(arg7); \ 5961 _argvec[8] = (unsigned long)(arg8); \ 5962 _argvec[9] = (unsigned long)(arg9); \ 5963 _argvec[10] = (unsigned long)(arg10); \ 5965 "dsubu $29, $29, 16\n\t" \ 5966 "ld $4, 72(%1)\n\t" \ 5967 "sd $4, 0($29)\n\t" \ 5968 "ld $4, 80(%1)\n\t" \ 5969 "sd $4, 8($29)\n\t" \ 5970 "ld $4, 8(%1)\n\t" \ 5971 "ld $5, 16(%1)\n\t" \ 5972 "ld $6, 24(%1)\n\t" \ 5973 "ld $7, 32(%1)\n\t" \ 5974 "ld $8, 40(%1)\n\t" \ 5975 "ld $9, 48(%1)\n\t" \ 5976 "ld $10, 56(%1)\n\t" \ 5977 "ld $11, 64(%1)\n\t" \ 5978 "ld $25, 0(%1)\n\t" \ 5979 VALGRIND_CALL_NOREDIR_T9 \ 5980 "daddu $29, $29, 16\n\t" \ 5983 : "r" (&_argvec[0]) \ 5984 : "memory", __CALLER_SAVED_REGS \ 5986 lval = (__typeof__(lval)) _res; \ 5989 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 5990 arg6,arg7,arg8,arg9,arg10, \ 5993 volatile OrigFn _orig = (orig); \ 5994 volatile unsigned long _argvec[12]; \ 5995 volatile unsigned long _res; \ 5996 _argvec[0] = (unsigned long)_orig.nraddr; \ 5997 _argvec[1] = (unsigned long)(arg1); \ 5998 _argvec[2] = (unsigned long)(arg2); \ 5999 _argvec[3] = (unsigned long)(arg3); \ 6000 _argvec[4] = (unsigned long)(arg4); \ 6001 _argvec[5] = (unsigned long)(arg5); \ 6002 _argvec[6] = (unsigned long)(arg6); \ 6003 _argvec[7] = (unsigned long)(arg7); \ 6004 _argvec[8] = (unsigned long)(arg8); \ 6005 _argvec[9] = (unsigned long)(arg9); \ 6006 _argvec[10] = (unsigned long)(arg10); \ 6007 _argvec[11] = (unsigned long)(arg11); \ 6009 "dsubu $29, $29, 24\n\t" \ 6010 "ld $4, 72(%1)\n\t" \ 6011 "sd $4, 0($29)\n\t" \ 6012 "ld $4, 80(%1)\n\t" \ 6013 "sd $4, 8($29)\n\t" \ 6014 "ld $4, 88(%1)\n\t" \ 6015 "sd $4, 16($29)\n\t" \ 6016 "ld $4, 8(%1)\n\t" \ 6017 "ld $5, 16(%1)\n\t" \ 6018 "ld $6, 24(%1)\n\t" \ 6019 "ld $7, 32(%1)\n\t" \ 6020 "ld $8, 40(%1)\n\t" \ 6021 "ld $9, 48(%1)\n\t" \ 6022 "ld $10, 56(%1)\n\t" \ 6023 "ld $11, 64(%1)\n\t" \ 6024 "ld $25, 0(%1)\n\t" \ 6025 VALGRIND_CALL_NOREDIR_T9 \ 6026 "daddu $29, $29, 24\n\t" \ 6029 : "r" (&_argvec[0]) \ 6030 : "memory", __CALLER_SAVED_REGS \ 6032 lval = (__typeof__(lval)) _res; \ 6035 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 6036 arg6,arg7,arg8,arg9,arg10, \ 6039 volatile OrigFn _orig = (orig); \ 6040 volatile unsigned long _argvec[13]; \ 6041 volatile unsigned long _res; \ 6042 _argvec[0] = (unsigned long)_orig.nraddr; \ 6043 _argvec[1] = (unsigned long)(arg1); \ 6044 _argvec[2] = (unsigned long)(arg2); \ 6045 _argvec[3] = (unsigned long)(arg3); \ 6046 _argvec[4] = (unsigned long)(arg4); \ 6047 _argvec[5] = (unsigned long)(arg5); \ 6048 _argvec[6] = (unsigned long)(arg6); \ 6049 _argvec[7] = (unsigned long)(arg7); \ 6050 _argvec[8] = (unsigned long)(arg8); \ 6051 _argvec[9] = (unsigned long)(arg9); \ 6052 _argvec[10] = (unsigned long)(arg10); \ 6053 _argvec[11] = (unsigned long)(arg11); \ 6054 _argvec[12] = (unsigned long)(arg12); \ 6056 "dsubu $29, $29, 32\n\t" \ 6057 "ld $4, 72(%1)\n\t" \ 6058 "sd $4, 0($29)\n\t" \ 6059 "ld $4, 80(%1)\n\t" \ 6060 "sd $4, 8($29)\n\t" \ 6061 "ld $4, 88(%1)\n\t" \ 6062 "sd $4, 16($29)\n\t" \ 6063 "ld $4, 96(%1)\n\t" \ 6064 "sd $4, 24($29)\n\t" \ 6065 "ld $4, 8(%1)\n\t" \ 6066 "ld $5, 16(%1)\n\t" \ 6067 "ld $6, 24(%1)\n\t" \ 6068 "ld $7, 32(%1)\n\t" \ 6069 "ld $8, 40(%1)\n\t" \ 6070 "ld $9, 48(%1)\n\t" \ 6071 "ld $10, 56(%1)\n\t" \ 6072 "ld $11, 64(%1)\n\t" \ 6073 "ld $25, 0(%1)\n\t" \ 6074 VALGRIND_CALL_NOREDIR_T9 \ 6075 "daddu $29, $29, 32\n\t" \ 6078 : "r" (&_argvec[0]) \ 6079 : "memory", __CALLER_SAVED_REGS \ 6081 lval = (__typeof__(lval)) _res; \ 6102 #define VG_USERREQ_TOOL_BASE(a,b) \ 6103 ((unsigned int)(((a)&0xff) << 24 | ((b)&0xff) << 16)) 6104 #define VG_IS_TOOL_USERREQ(a, b, v) \ 6105 (VG_USERREQ_TOOL_BASE(a,b) == ((v) & 0xffff0000)) 6184 #if !defined(__GNUC__) 6185 # define __extension__ 6193 #define RUNNING_ON_VALGRIND \ 6194 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 6195 VG_USERREQ__RUNNING_ON_VALGRIND, \ 6203 #define VALGRIND_DISCARD_TRANSLATIONS(_qzz_addr,_qzz_len) \ 6204 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DISCARD_TRANSLATIONS, \ 6205 _qzz_addr, _qzz_len, 0, 0, 0) 6213 #if defined(__GNUC__) || defined(__INTEL_COMPILER) && !defined(_MSC_VER) 6216 static int VALGRIND_PRINTF(
const char *format, ...)
6220 #if defined(_MSC_VER) 6223 VALGRIND_PRINTF(
const char *format, ...)
6225 #if defined(NVALGRIND) 6228 #if defined(_MSC_VER) || defined(__MINGW64__) 6231 unsigned long _qzz_res;
6234 va_start(vargs, format);
6235 #if defined(_MSC_VER) || defined(__MINGW64__) 6244 (
unsigned long)format,
6245 (
unsigned long)&vargs,
6249 return (
int)_qzz_res;
6253 #if defined(__GNUC__) || defined(__INTEL_COMPILER) && !defined(_MSC_VER) 6254 static int VALGRIND_PRINTF_BACKTRACE(
const char *format, ...)
6258 #if defined(_MSC_VER) 6261 VALGRIND_PRINTF_BACKTRACE(
const char *format, ...)
6263 #if defined(NVALGRIND) 6266 #if defined(_MSC_VER) || defined(__MINGW64__) 6269 unsigned long _qzz_res;
6272 va_start(vargs, format);
6273 #if defined(_MSC_VER) || defined(__MINGW64__) 6282 (
unsigned long)format,
6283 (
unsigned long)&vargs,
6287 return (
int)_qzz_res;
6315 #define VALGRIND_NON_SIMD_CALL0(_qyy_fn) \ 6316 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 6317 VG_USERREQ__CLIENT_CALL0, \ 6321 #define VALGRIND_NON_SIMD_CALL1(_qyy_fn, _qyy_arg1) \ 6322 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 6323 VG_USERREQ__CLIENT_CALL1, \ 6327 #define VALGRIND_NON_SIMD_CALL2(_qyy_fn, _qyy_arg1, _qyy_arg2) \ 6328 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 6329 VG_USERREQ__CLIENT_CALL2, \ 6331 _qyy_arg1, _qyy_arg2, 0, 0) 6333 #define VALGRIND_NON_SIMD_CALL3(_qyy_fn, _qyy_arg1, _qyy_arg2, _qyy_arg3) \ 6334 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 6335 VG_USERREQ__CLIENT_CALL3, \ 6337 _qyy_arg1, _qyy_arg2, \ 6344 #define VALGRIND_COUNT_ERRORS \ 6345 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 6347 VG_USERREQ__COUNT_ERRORS, \ 6451 #define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed) \ 6452 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MALLOCLIKE_BLOCK, \ 6453 addr, sizeB, rzB, is_zeroed, 0) 6458 #define VALGRIND_RESIZEINPLACE_BLOCK(addr, oldSizeB, newSizeB, rzB) \ 6459 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__RESIZEINPLACE_BLOCK, \ 6460 addr, oldSizeB, newSizeB, rzB, 0) 6465 #define VALGRIND_FREELIKE_BLOCK(addr, rzB) \ 6466 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__FREELIKE_BLOCK, \ 6470 #define VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed) \ 6471 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CREATE_MEMPOOL, \ 6472 pool, rzB, is_zeroed, 0, 0) 6475 #define VALGRIND_DESTROY_MEMPOOL(pool) \ 6476 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DESTROY_MEMPOOL, \ 6480 #define VALGRIND_MEMPOOL_ALLOC(pool, addr, size) \ 6481 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_ALLOC, \ 6482 pool, addr, size, 0, 0) 6485 #define VALGRIND_MEMPOOL_FREE(pool, addr) \ 6486 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_FREE, \ 6487 pool, addr, 0, 0, 0) 6490 #define VALGRIND_MEMPOOL_TRIM(pool, addr, size) \ 6491 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_TRIM, \ 6492 pool, addr, size, 0, 0) 6495 #define VALGRIND_MOVE_MEMPOOL(poolA, poolB) \ 6496 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MOVE_MEMPOOL, \ 6497 poolA, poolB, 0, 0, 0) 6500 #define VALGRIND_MEMPOOL_CHANGE(pool, addrA, addrB, size) \ 6501 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_CHANGE, \ 6502 pool, addrA, addrB, size, 0) 6505 #define VALGRIND_MEMPOOL_EXISTS(pool) \ 6506 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 6507 VG_USERREQ__MEMPOOL_EXISTS, \ 6513 #define VALGRIND_STACK_REGISTER(start, end) \ 6514 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 6515 VG_USERREQ__STACK_REGISTER, \ 6516 start, end, 0, 0, 0) 6520 #define VALGRIND_STACK_DEREGISTER(id) \ 6521 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_DEREGISTER, \ 6527 #define VALGRIND_STACK_CHANGE(id, start, end) \ 6528 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_CHANGE, \ 6529 id, start, end, 0, 0) 6532 #define VALGRIND_LOAD_PDB_DEBUGINFO(fd, ptr, total_size, delta) \ 6533 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__LOAD_PDB_DEBUGINFO, \ 6534 fd, ptr, total_size, delta, 0) 6540 #define VALGRIND_MAP_IP_TO_SRCLOC(addr, buf64) \ 6541 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 6542 VG_USERREQ__MAP_IP_TO_SRCLOC, \ 6543 addr, buf64, 0, 0, 0) 6553 #define VALGRIND_DISABLE_ERROR_REPORTING \ 6554 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, \ 6559 #define VALGRIND_ENABLE_ERROR_REPORTING \ 6560 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, \ 6568 #define VALGRIND_MONITOR_COMMAND(command) \ 6569 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__GDB_MONITOR_COMMAND, \ 6570 command, 0, 0, 0, 0) 6573 #undef PLAT_x86_darwin 6574 #undef PLAT_amd64_darwin 6575 #undef PLAT_x86_win32 6576 #undef PLAT_amd64_win64 6577 #undef PLAT_x86_linux 6578 #undef PLAT_amd64_linux 6579 #undef PLAT_ppc32_linux 6580 #undef PLAT_ppc64be_linux 6581 #undef PLAT_ppc64le_linux 6582 #undef PLAT_arm_linux 6583 #undef PLAT_s390x_linux 6584 #undef PLAT_mips32_linux 6585 #undef PLAT_mips64_linux
#define VALGRIND_DO_CLIENT_REQUEST_EXPR(_zzq_default, _zzq_request,_zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)
const epicsMemFS *epicsRtemsFSImage __attribute__((weak))