91 #define __VALGRIND_MAJOR__ 3 92 #define __VALGRIND_MINOR__ 6 112 #undef PLAT_x86_darwin 113 #undef PLAT_amd64_darwin 114 #undef PLAT_x86_win32 115 #undef PLAT_x86_linux 116 #undef PLAT_amd64_linux 117 #undef PLAT_ppc32_linux 118 #undef PLAT_ppc64_linux 119 #undef PLAT_arm_linux 120 #undef PLAT_s390x_linux 123 #if defined(__APPLE__) && defined(__i386__) 124 # define PLAT_x86_darwin 1 125 #elif defined(__APPLE__) && defined(__x86_64__) 126 # define PLAT_amd64_darwin 1 127 #elif defined(__MINGW32__) || defined(__CYGWIN32__) \ 128 || (defined(_WIN32) && defined(_M_IX86)) 129 # define PLAT_x86_win32 1 130 #elif defined(__linux__) && defined(__i386__) 131 # define PLAT_x86_linux 1 132 #elif defined(__linux__) && defined(__x86_64__) 133 # define PLAT_amd64_linux 1 134 #elif defined(__linux__) && defined(__powerpc__) && !defined(__powerpc64__) 135 # define PLAT_ppc32_linux 1 136 #elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) 137 # define PLAT_ppc64_linux 1 138 #elif defined(__linux__) && defined(__arm__) 139 # define PLAT_arm_linux 1 140 #elif defined(__linux__) && defined(__s390__) && defined(__s390x__) 141 # define PLAT_s390x_linux 1 145 # if !defined(NVALGRIND) 165 #define VALGRIND_DO_CLIENT_REQUEST(_zzq_rlval, _zzq_default, \ 166 _zzq_request, _zzq_arg1, _zzq_arg2, \ 167 _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 168 { (_zzq_rlval) = VALGRIND_DO_CLIENT_REQUEST_EXPR((_zzq_default), \ 169 (_zzq_request), (_zzq_arg1), (_zzq_arg2), \ 170 (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } 172 #if defined(NVALGRIND) 177 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 178 _zzq_default, _zzq_request, \ 179 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 221 #if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) \ 222 || (defined(PLAT_x86_win32) && defined(__GNUC__)) 230 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 231 "roll $3, %%edi ; roll $13, %%edi\n\t" \ 232 "roll $29, %%edi ; roll $19, %%edi\n\t" 234 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 235 _zzq_default, _zzq_request, \ 236 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 238 ({volatile unsigned int _zzq_args[6]; \ 239 volatile unsigned int _zzq_result; \ 240 _zzq_args[0] = (unsigned int)(_zzq_request); \ 241 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 242 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 243 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 244 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 245 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 246 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 248 "xchgl %%ebx,%%ebx" \ 249 : "=d" (_zzq_result) \ 250 : "a" (&_zzq_args[0]), "0" (_zzq_default) \ 256 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 257 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 258 volatile unsigned int __addr; \ 259 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 261 "xchgl %%ecx,%%ecx" \ 266 _zzq_orig->nraddr = __addr; \ 269 #define VALGRIND_CALL_NOREDIR_EAX \ 270 __SPECIAL_INSTRUCTION_PREAMBLE \ 272 "xchgl %%edx,%%edx\n\t" 277 #if defined(PLAT_x86_win32) && !defined(__GNUC__) 285 #if defined(_MSC_VER) 287 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 288 __asm rol edi, 3 __asm rol edi, 13 \ 289 __asm rol edi, 29 __asm rol edi, 19 291 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 292 _zzq_default, _zzq_request, \ 293 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 294 valgrind_do_client_request_expr((uintptr_t)(_zzq_default), \ 295 (uintptr_t)(_zzq_request), (uintptr_t)(_zzq_arg1), \ 296 (uintptr_t)(_zzq_arg2), (uintptr_t)(_zzq_arg3), \ 297 (uintptr_t)(_zzq_arg4), (uintptr_t)(_zzq_arg5)) 306 volatile unsigned int _zzq_result;
307 _zzq_args[0] = (
uintptr_t)(_zzq_request);
313 __asm { __asm lea eax, _zzq_args __asm mov edx, _zzq_default
314 __SPECIAL_INSTRUCTION_PREAMBLE
317 __asm mov _zzq_result, edx
322 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 323 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 324 volatile unsigned int __addr; \ 325 __asm { __SPECIAL_INSTRUCTION_PREAMBLE \ 328 __asm mov __addr, eax \ 330 _zzq_orig->nraddr = __addr; \ 333 #define VALGRIND_CALL_NOREDIR_EAX ERROR 336 #error Unsupported compiler. 343 #if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) 351 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 352 "rolq $3, %%rdi ; rolq $13, %%rdi\n\t" \ 353 "rolq $61, %%rdi ; rolq $51, %%rdi\n\t" 355 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 356 _zzq_default, _zzq_request, \ 357 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 359 ({ volatile uint64_t _zzq_args[6]; \ 360 volatile uint64_t _zzq_result; \ 361 _zzq_args[0] = (uint64_t)(_zzq_request); \ 362 _zzq_args[1] = (uint64_t)(_zzq_arg1); \ 363 _zzq_args[2] = (uint64_t)(_zzq_arg2); \ 364 _zzq_args[3] = (uint64_t)(_zzq_arg3); \ 365 _zzq_args[4] = (uint64_t)(_zzq_arg4); \ 366 _zzq_args[5] = (uint64_t)(_zzq_arg5); \ 367 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 369 "xchgq %%rbx,%%rbx" \ 370 : "=d" (_zzq_result) \ 371 : "a" (&_zzq_args[0]), "0" (_zzq_default) \ 377 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 378 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 379 volatile uint64_t __addr; \ 380 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 382 "xchgq %%rcx,%%rcx" \ 387 _zzq_orig->nraddr = __addr; \ 390 #define VALGRIND_CALL_NOREDIR_RAX \ 391 __SPECIAL_INSTRUCTION_PREAMBLE \ 393 "xchgq %%rdx,%%rdx\n\t" 398 #if defined(PLAT_ppc32_linux) 406 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 407 "rlwinm 0,0,3,0,0 ; rlwinm 0,0,13,0,0\n\t" \ 408 "rlwinm 0,0,29,0,0 ; rlwinm 0,0,19,0,0\n\t" 410 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 411 _zzq_default, _zzq_request, \ 412 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 415 ({ unsigned int _zzq_args[6]; \ 416 unsigned int _zzq_result; \ 417 unsigned int* _zzq_ptr; \ 418 _zzq_args[0] = (unsigned int)(_zzq_request); \ 419 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 420 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 421 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 422 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 423 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 424 _zzq_ptr = _zzq_args; \ 425 __asm__ volatile("mr 3,%1\n\t" \ 427 __SPECIAL_INSTRUCTION_PREAMBLE \ 431 : "=b" (_zzq_result) \ 432 : "b" (_zzq_default), "b" (_zzq_ptr) \ 433 : "cc", "memory", "r3", "r4"); \ 437 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 438 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 439 unsigned int __addr; \ 440 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 446 : "cc", "memory", "r3" \ 448 _zzq_orig->nraddr = __addr; \ 451 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 452 __SPECIAL_INSTRUCTION_PREAMBLE \ 459 #if defined(PLAT_ppc64_linux) 468 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 469 "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ 470 "rotldi 0,0,61 ; rotldi 0,0,51\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 ({ uint64_t _zzq_args[6]; \ 478 register uint64_t _zzq_result __asm__("r3"); \ 479 register uint64_t* _zzq_ptr __asm__("r4"); \ 480 _zzq_args[0] = (uint64_t)(_zzq_request); \ 481 _zzq_args[1] = (uint64_t)(_zzq_arg1); \ 482 _zzq_args[2] = (uint64_t)(_zzq_arg2); \ 483 _zzq_args[3] = (uint64_t)(_zzq_arg3); \ 484 _zzq_args[4] = (uint64_t)(_zzq_arg4); \ 485 _zzq_args[5] = (uint64_t)(_zzq_arg5); \ 486 _zzq_ptr = _zzq_args; \ 487 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 490 : "=r" (_zzq_result) \ 491 : "0" (_zzq_default), "r" (_zzq_ptr) \ 496 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 497 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 498 register uint64_t __addr __asm__("r3"); \ 499 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 506 _zzq_orig->nraddr = __addr; \ 507 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 514 _zzq_orig->r2 = __addr; \ 517 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 518 __SPECIAL_INSTRUCTION_PREAMBLE \ 526 #if defined(PLAT_arm_linux) 534 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 535 "mov r12, r12, ror #3 ; mov r12, r12, ror #13 \n\t" \ 536 "mov r12, r12, ror #29 ; mov r12, r12, ror #19 \n\t" 538 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 539 _zzq_default, _zzq_request, \ 540 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 543 ({volatile unsigned int _zzq_args[6]; \ 544 volatile unsigned int _zzq_result; \ 545 _zzq_args[0] = (unsigned int)(_zzq_request); \ 546 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 547 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 548 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 549 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 550 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 551 __asm__ volatile("mov r3, %1\n\t" \ 553 __SPECIAL_INSTRUCTION_PREAMBLE \ 555 "orr r10, r10, r10\n\t" \ 557 : "=r" (_zzq_result) \ 558 : "r" (_zzq_default), "r" (&_zzq_args[0]) \ 559 : "cc","memory", "r3", "r4"); \ 563 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 564 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 565 unsigned int __addr; \ 566 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 568 "orr r11, r11, r11\n\t" \ 572 : "cc", "memory", "r3" \ 574 _zzq_orig->nraddr = __addr; \ 577 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 578 __SPECIAL_INSTRUCTION_PREAMBLE \ 580 "orr r12, r12, r12\n\t" 586 #if defined(PLAT_s390x_linux) 598 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 604 #define __CLIENT_REQUEST_CODE "lr 2,2\n\t" 605 #define __GET_NR_CONTEXT_CODE "lr 3,3\n\t" 606 #define __CALL_NO_REDIR_CODE "lr 4,4\n\t" 608 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 609 _zzq_default, _zzq_request, \ 610 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 612 ({volatile uint64_t _zzq_args[6]; \ 613 volatile uint64_t _zzq_result; \ 614 _zzq_args[0] = (uint64_t)(_zzq_request); \ 615 _zzq_args[1] = (uint64_t)(_zzq_arg1); \ 616 _zzq_args[2] = (uint64_t)(_zzq_arg2); \ 617 _zzq_args[3] = (uint64_t)(_zzq_arg3); \ 618 _zzq_args[4] = (uint64_t)(_zzq_arg4); \ 619 _zzq_args[5] = (uint64_t)(_zzq_arg5); \ 624 __SPECIAL_INSTRUCTION_PREAMBLE \ 625 __CLIENT_REQUEST_CODE \ 628 : "=d" (_zzq_result) \ 629 : "a" (&_zzq_args[0]), "0" (_zzq_default) \ 630 : "cc", "2", "3", "memory" \ 635 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 636 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 637 volatile uint64_t __addr; \ 638 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 639 __GET_NR_CONTEXT_CODE \ 643 : "cc", "3", "memory" \ 645 _zzq_orig->nraddr = __addr; \ 648 #define VALGRIND_CALL_NOREDIR_R1 \ 649 __SPECIAL_INSTRUCTION_PREAMBLE \ 687 #define VG_CONCAT4(_aa,_bb,_cc,_dd) _aa##_bb##_cc##_dd 689 #define I_WRAP_SONAME_FNNAME_ZU(soname,fnname) \ 690 VG_CONCAT4(_vgwZU_,soname,_,fnname) 692 #define I_WRAP_SONAME_FNNAME_ZZ(soname,fnname) \ 693 VG_CONCAT4(_vgwZZ_,soname,_,fnname) 699 #define VALGRIND_GET_ORIG_FN(_lval) VALGRIND_GET_NR_CONTEXT(_lval) 704 #define CALL_FN_v_v(fnptr) \ 705 do { volatile unsigned long _junk; \ 706 CALL_FN_W_v(_junk,fnptr); } while (0) 708 #define CALL_FN_v_W(fnptr, arg1) \ 709 do { volatile unsigned long _junk; \ 710 CALL_FN_W_W(_junk,fnptr,arg1); } while (0) 712 #define CALL_FN_v_WW(fnptr, arg1,arg2) \ 713 do { volatile unsigned long _junk; \ 714 CALL_FN_W_WW(_junk,fnptr,arg1,arg2); } while (0) 716 #define CALL_FN_v_WWW(fnptr, arg1,arg2,arg3) \ 717 do { volatile unsigned long _junk; \ 718 CALL_FN_W_WWW(_junk,fnptr,arg1,arg2,arg3); } while (0) 720 #define CALL_FN_v_WWWW(fnptr, arg1,arg2,arg3,arg4) \ 721 do { volatile unsigned long _junk; \ 722 CALL_FN_W_WWWW(_junk,fnptr,arg1,arg2,arg3,arg4); } while (0) 724 #define CALL_FN_v_5W(fnptr, arg1,arg2,arg3,arg4,arg5) \ 725 do { volatile unsigned long _junk; \ 726 CALL_FN_W_5W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5); } while (0) 728 #define CALL_FN_v_6W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6) \ 729 do { volatile unsigned long _junk; \ 730 CALL_FN_W_6W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6); } while (0) 732 #define CALL_FN_v_7W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6,arg7) \ 733 do { volatile unsigned long _junk; \ 734 CALL_FN_W_7W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6,arg7); } while (0) 738 #if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) 742 #define __CALLER_SAVED_REGS "ecx", "edx" 747 #define CALL_FN_W_v(lval, orig) \ 749 volatile OrigFn _orig = (orig); \ 750 volatile unsigned long _argvec[1]; \ 751 volatile unsigned long _res; \ 752 _argvec[0] = (unsigned long)_orig.nraddr; \ 754 "movl (%%eax), %%eax\n\t" \ 755 VALGRIND_CALL_NOREDIR_EAX \ 757 : "a" (&_argvec[0]) \ 758 : "cc", "memory", __CALLER_SAVED_REGS \ 760 lval = (__typeof__(lval)) _res; \ 763 #define CALL_FN_W_W(lval, orig, arg1) \ 765 volatile OrigFn _orig = (orig); \ 766 volatile unsigned long _argvec[2]; \ 767 volatile unsigned long _res; \ 768 _argvec[0] = (unsigned long)_orig.nraddr; \ 769 _argvec[1] = (unsigned long)(arg1); \ 771 "subl $12, %%esp\n\t" \ 772 "pushl 4(%%eax)\n\t" \ 773 "movl (%%eax), %%eax\n\t" \ 774 VALGRIND_CALL_NOREDIR_EAX \ 775 "addl $16, %%esp\n" \ 777 : "a" (&_argvec[0]) \ 778 : "cc", "memory", __CALLER_SAVED_REGS \ 780 lval = (__typeof__(lval)) _res; \ 783 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 785 volatile OrigFn _orig = (orig); \ 786 volatile unsigned long _argvec[3]; \ 787 volatile unsigned long _res; \ 788 _argvec[0] = (unsigned long)_orig.nraddr; \ 789 _argvec[1] = (unsigned long)(arg1); \ 790 _argvec[2] = (unsigned long)(arg2); \ 792 "subl $8, %%esp\n\t" \ 793 "pushl 8(%%eax)\n\t" \ 794 "pushl 4(%%eax)\n\t" \ 795 "movl (%%eax), %%eax\n\t" \ 796 VALGRIND_CALL_NOREDIR_EAX \ 797 "addl $16, %%esp\n" \ 799 : "a" (&_argvec[0]) \ 800 : "cc", "memory", __CALLER_SAVED_REGS \ 802 lval = (__typeof__(lval)) _res; \ 805 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 807 volatile OrigFn _orig = (orig); \ 808 volatile unsigned long _argvec[4]; \ 809 volatile unsigned long _res; \ 810 _argvec[0] = (unsigned long)_orig.nraddr; \ 811 _argvec[1] = (unsigned long)(arg1); \ 812 _argvec[2] = (unsigned long)(arg2); \ 813 _argvec[3] = (unsigned long)(arg3); \ 815 "subl $4, %%esp\n\t" \ 816 "pushl 12(%%eax)\n\t" \ 817 "pushl 8(%%eax)\n\t" \ 818 "pushl 4(%%eax)\n\t" \ 819 "movl (%%eax), %%eax\n\t" \ 820 VALGRIND_CALL_NOREDIR_EAX \ 821 "addl $16, %%esp\n" \ 823 : "a" (&_argvec[0]) \ 824 : "cc", "memory", __CALLER_SAVED_REGS \ 826 lval = (__typeof__(lval)) _res; \ 829 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 831 volatile OrigFn _orig = (orig); \ 832 volatile unsigned long _argvec[5]; \ 833 volatile unsigned long _res; \ 834 _argvec[0] = (unsigned long)_orig.nraddr; \ 835 _argvec[1] = (unsigned long)(arg1); \ 836 _argvec[2] = (unsigned long)(arg2); \ 837 _argvec[3] = (unsigned long)(arg3); \ 838 _argvec[4] = (unsigned long)(arg4); \ 840 "pushl 16(%%eax)\n\t" \ 841 "pushl 12(%%eax)\n\t" \ 842 "pushl 8(%%eax)\n\t" \ 843 "pushl 4(%%eax)\n\t" \ 844 "movl (%%eax), %%eax\n\t" \ 845 VALGRIND_CALL_NOREDIR_EAX \ 846 "addl $16, %%esp\n" \ 848 : "a" (&_argvec[0]) \ 849 : "cc", "memory", __CALLER_SAVED_REGS \ 851 lval = (__typeof__(lval)) _res; \ 854 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 856 volatile OrigFn _orig = (orig); \ 857 volatile unsigned long _argvec[6]; \ 858 volatile unsigned long _res; \ 859 _argvec[0] = (unsigned long)_orig.nraddr; \ 860 _argvec[1] = (unsigned long)(arg1); \ 861 _argvec[2] = (unsigned long)(arg2); \ 862 _argvec[3] = (unsigned long)(arg3); \ 863 _argvec[4] = (unsigned long)(arg4); \ 864 _argvec[5] = (unsigned long)(arg5); \ 866 "subl $12, %%esp\n\t" \ 867 "pushl 20(%%eax)\n\t" \ 868 "pushl 16(%%eax)\n\t" \ 869 "pushl 12(%%eax)\n\t" \ 870 "pushl 8(%%eax)\n\t" \ 871 "pushl 4(%%eax)\n\t" \ 872 "movl (%%eax), %%eax\n\t" \ 873 VALGRIND_CALL_NOREDIR_EAX \ 874 "addl $32, %%esp\n" \ 876 : "a" (&_argvec[0]) \ 877 : "cc", "memory", __CALLER_SAVED_REGS \ 879 lval = (__typeof__(lval)) _res; \ 882 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 884 volatile OrigFn _orig = (orig); \ 885 volatile unsigned long _argvec[7]; \ 886 volatile unsigned long _res; \ 887 _argvec[0] = (unsigned long)_orig.nraddr; \ 888 _argvec[1] = (unsigned long)(arg1); \ 889 _argvec[2] = (unsigned long)(arg2); \ 890 _argvec[3] = (unsigned long)(arg3); \ 891 _argvec[4] = (unsigned long)(arg4); \ 892 _argvec[5] = (unsigned long)(arg5); \ 893 _argvec[6] = (unsigned long)(arg6); \ 895 "subl $8, %%esp\n\t" \ 896 "pushl 24(%%eax)\n\t" \ 897 "pushl 20(%%eax)\n\t" \ 898 "pushl 16(%%eax)\n\t" \ 899 "pushl 12(%%eax)\n\t" \ 900 "pushl 8(%%eax)\n\t" \ 901 "pushl 4(%%eax)\n\t" \ 902 "movl (%%eax), %%eax\n\t" \ 903 VALGRIND_CALL_NOREDIR_EAX \ 904 "addl $32, %%esp\n" \ 906 : "a" (&_argvec[0]) \ 907 : "cc", "memory", __CALLER_SAVED_REGS \ 909 lval = (__typeof__(lval)) _res; \ 912 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 915 volatile OrigFn _orig = (orig); \ 916 volatile unsigned long _argvec[8]; \ 917 volatile unsigned long _res; \ 918 _argvec[0] = (unsigned long)_orig.nraddr; \ 919 _argvec[1] = (unsigned long)(arg1); \ 920 _argvec[2] = (unsigned long)(arg2); \ 921 _argvec[3] = (unsigned long)(arg3); \ 922 _argvec[4] = (unsigned long)(arg4); \ 923 _argvec[5] = (unsigned long)(arg5); \ 924 _argvec[6] = (unsigned long)(arg6); \ 925 _argvec[7] = (unsigned long)(arg7); \ 927 "subl $4, %%esp\n\t" \ 928 "pushl 28(%%eax)\n\t" \ 929 "pushl 24(%%eax)\n\t" \ 930 "pushl 20(%%eax)\n\t" \ 931 "pushl 16(%%eax)\n\t" \ 932 "pushl 12(%%eax)\n\t" \ 933 "pushl 8(%%eax)\n\t" \ 934 "pushl 4(%%eax)\n\t" \ 935 "movl (%%eax), %%eax\n\t" \ 936 VALGRIND_CALL_NOREDIR_EAX \ 937 "addl $32, %%esp\n" \ 939 : "a" (&_argvec[0]) \ 940 : "cc", "memory", __CALLER_SAVED_REGS \ 942 lval = (__typeof__(lval)) _res; \ 945 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 948 volatile OrigFn _orig = (orig); \ 949 volatile unsigned long _argvec[9]; \ 950 volatile unsigned long _res; \ 951 _argvec[0] = (unsigned long)_orig.nraddr; \ 952 _argvec[1] = (unsigned long)(arg1); \ 953 _argvec[2] = (unsigned long)(arg2); \ 954 _argvec[3] = (unsigned long)(arg3); \ 955 _argvec[4] = (unsigned long)(arg4); \ 956 _argvec[5] = (unsigned long)(arg5); \ 957 _argvec[6] = (unsigned long)(arg6); \ 958 _argvec[7] = (unsigned long)(arg7); \ 959 _argvec[8] = (unsigned long)(arg8); \ 961 "pushl 32(%%eax)\n\t" \ 962 "pushl 28(%%eax)\n\t" \ 963 "pushl 24(%%eax)\n\t" \ 964 "pushl 20(%%eax)\n\t" \ 965 "pushl 16(%%eax)\n\t" \ 966 "pushl 12(%%eax)\n\t" \ 967 "pushl 8(%%eax)\n\t" \ 968 "pushl 4(%%eax)\n\t" \ 969 "movl (%%eax), %%eax\n\t" \ 970 VALGRIND_CALL_NOREDIR_EAX \ 971 "addl $32, %%esp\n" \ 973 : "a" (&_argvec[0]) \ 974 : "cc", "memory", __CALLER_SAVED_REGS \ 976 lval = (__typeof__(lval)) _res; \ 979 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 982 volatile OrigFn _orig = (orig); \ 983 volatile unsigned long _argvec[10]; \ 984 volatile unsigned long _res; \ 985 _argvec[0] = (unsigned long)_orig.nraddr; \ 986 _argvec[1] = (unsigned long)(arg1); \ 987 _argvec[2] = (unsigned long)(arg2); \ 988 _argvec[3] = (unsigned long)(arg3); \ 989 _argvec[4] = (unsigned long)(arg4); \ 990 _argvec[5] = (unsigned long)(arg5); \ 991 _argvec[6] = (unsigned long)(arg6); \ 992 _argvec[7] = (unsigned long)(arg7); \ 993 _argvec[8] = (unsigned long)(arg8); \ 994 _argvec[9] = (unsigned long)(arg9); \ 996 "subl $12, %%esp\n\t" \ 997 "pushl 36(%%eax)\n\t" \ 998 "pushl 32(%%eax)\n\t" \ 999 "pushl 28(%%eax)\n\t" \ 1000 "pushl 24(%%eax)\n\t" \ 1001 "pushl 20(%%eax)\n\t" \ 1002 "pushl 16(%%eax)\n\t" \ 1003 "pushl 12(%%eax)\n\t" \ 1004 "pushl 8(%%eax)\n\t" \ 1005 "pushl 4(%%eax)\n\t" \ 1006 "movl (%%eax), %%eax\n\t" \ 1007 VALGRIND_CALL_NOREDIR_EAX \ 1008 "addl $48, %%esp\n" \ 1010 : "a" (&_argvec[0]) \ 1011 : "cc", "memory", __CALLER_SAVED_REGS \ 1013 lval = (__typeof__(lval)) _res; \ 1016 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1017 arg7,arg8,arg9,arg10) \ 1019 volatile OrigFn _orig = (orig); \ 1020 volatile unsigned long _argvec[11]; \ 1021 volatile unsigned long _res; \ 1022 _argvec[0] = (unsigned long)_orig.nraddr; \ 1023 _argvec[1] = (unsigned long)(arg1); \ 1024 _argvec[2] = (unsigned long)(arg2); \ 1025 _argvec[3] = (unsigned long)(arg3); \ 1026 _argvec[4] = (unsigned long)(arg4); \ 1027 _argvec[5] = (unsigned long)(arg5); \ 1028 _argvec[6] = (unsigned long)(arg6); \ 1029 _argvec[7] = (unsigned long)(arg7); \ 1030 _argvec[8] = (unsigned long)(arg8); \ 1031 _argvec[9] = (unsigned long)(arg9); \ 1032 _argvec[10] = (unsigned long)(arg10); \ 1034 "subl $8, %%esp\n\t" \ 1035 "pushl 40(%%eax)\n\t" \ 1036 "pushl 36(%%eax)\n\t" \ 1037 "pushl 32(%%eax)\n\t" \ 1038 "pushl 28(%%eax)\n\t" \ 1039 "pushl 24(%%eax)\n\t" \ 1040 "pushl 20(%%eax)\n\t" \ 1041 "pushl 16(%%eax)\n\t" \ 1042 "pushl 12(%%eax)\n\t" \ 1043 "pushl 8(%%eax)\n\t" \ 1044 "pushl 4(%%eax)\n\t" \ 1045 "movl (%%eax), %%eax\n\t" \ 1046 VALGRIND_CALL_NOREDIR_EAX \ 1047 "addl $48, %%esp\n" \ 1049 : "a" (&_argvec[0]) \ 1050 : "cc", "memory", __CALLER_SAVED_REGS \ 1052 lval = (__typeof__(lval)) _res; \ 1055 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 1056 arg6,arg7,arg8,arg9,arg10, \ 1059 volatile OrigFn _orig = (orig); \ 1060 volatile unsigned long _argvec[12]; \ 1061 volatile unsigned long _res; \ 1062 _argvec[0] = (unsigned long)_orig.nraddr; \ 1063 _argvec[1] = (unsigned long)(arg1); \ 1064 _argvec[2] = (unsigned long)(arg2); \ 1065 _argvec[3] = (unsigned long)(arg3); \ 1066 _argvec[4] = (unsigned long)(arg4); \ 1067 _argvec[5] = (unsigned long)(arg5); \ 1068 _argvec[6] = (unsigned long)(arg6); \ 1069 _argvec[7] = (unsigned long)(arg7); \ 1070 _argvec[8] = (unsigned long)(arg8); \ 1071 _argvec[9] = (unsigned long)(arg9); \ 1072 _argvec[10] = (unsigned long)(arg10); \ 1073 _argvec[11] = (unsigned long)(arg11); \ 1075 "subl $4, %%esp\n\t" \ 1076 "pushl 44(%%eax)\n\t" \ 1077 "pushl 40(%%eax)\n\t" \ 1078 "pushl 36(%%eax)\n\t" \ 1079 "pushl 32(%%eax)\n\t" \ 1080 "pushl 28(%%eax)\n\t" \ 1081 "pushl 24(%%eax)\n\t" \ 1082 "pushl 20(%%eax)\n\t" \ 1083 "pushl 16(%%eax)\n\t" \ 1084 "pushl 12(%%eax)\n\t" \ 1085 "pushl 8(%%eax)\n\t" \ 1086 "pushl 4(%%eax)\n\t" \ 1087 "movl (%%eax), %%eax\n\t" \ 1088 VALGRIND_CALL_NOREDIR_EAX \ 1089 "addl $48, %%esp\n" \ 1091 : "a" (&_argvec[0]) \ 1092 : "cc", "memory", __CALLER_SAVED_REGS \ 1094 lval = (__typeof__(lval)) _res; \ 1097 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 1098 arg6,arg7,arg8,arg9,arg10, \ 1101 volatile OrigFn _orig = (orig); \ 1102 volatile unsigned long _argvec[13]; \ 1103 volatile unsigned long _res; \ 1104 _argvec[0] = (unsigned long)_orig.nraddr; \ 1105 _argvec[1] = (unsigned long)(arg1); \ 1106 _argvec[2] = (unsigned long)(arg2); \ 1107 _argvec[3] = (unsigned long)(arg3); \ 1108 _argvec[4] = (unsigned long)(arg4); \ 1109 _argvec[5] = (unsigned long)(arg5); \ 1110 _argvec[6] = (unsigned long)(arg6); \ 1111 _argvec[7] = (unsigned long)(arg7); \ 1112 _argvec[8] = (unsigned long)(arg8); \ 1113 _argvec[9] = (unsigned long)(arg9); \ 1114 _argvec[10] = (unsigned long)(arg10); \ 1115 _argvec[11] = (unsigned long)(arg11); \ 1116 _argvec[12] = (unsigned long)(arg12); \ 1118 "pushl 48(%%eax)\n\t" \ 1119 "pushl 44(%%eax)\n\t" \ 1120 "pushl 40(%%eax)\n\t" \ 1121 "pushl 36(%%eax)\n\t" \ 1122 "pushl 32(%%eax)\n\t" \ 1123 "pushl 28(%%eax)\n\t" \ 1124 "pushl 24(%%eax)\n\t" \ 1125 "pushl 20(%%eax)\n\t" \ 1126 "pushl 16(%%eax)\n\t" \ 1127 "pushl 12(%%eax)\n\t" \ 1128 "pushl 8(%%eax)\n\t" \ 1129 "pushl 4(%%eax)\n\t" \ 1130 "movl (%%eax), %%eax\n\t" \ 1131 VALGRIND_CALL_NOREDIR_EAX \ 1132 "addl $48, %%esp\n" \ 1134 : "a" (&_argvec[0]) \ 1135 : "cc", "memory", __CALLER_SAVED_REGS \ 1137 lval = (__typeof__(lval)) _res; \ 1144 #if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) 1149 #define __CALLER_SAVED_REGS "rcx", "rdx", "rsi", \ 1150 "rdi", "r8", "r9", "r10", "r11" 1206 #if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM) 1207 # define __FRAME_POINTER \ 1208 ,"r"(__builtin_dwarf_cfa()) 1209 # define VALGRIND_CFI_PROLOGUE \ 1210 "movq %%rbp, %%r15\n\t" \ 1211 "movq %2, %%rbp\n\t" \ 1212 ".cfi_remember_state\n\t" \ 1213 ".cfi_def_cfa rbp, 0\n\t" 1214 # define VALGRIND_CFI_EPILOGUE \ 1215 "movq %%r15, %%rbp\n\t" \ 1216 ".cfi_restore_state\n\t" 1218 # define __FRAME_POINTER 1219 # define VALGRIND_CFI_PROLOGUE 1220 # define VALGRIND_CFI_EPILOGUE 1248 #define CALL_FN_W_v(lval, orig) \ 1250 volatile OrigFn _orig = (orig); \ 1251 volatile unsigned long _argvec[1]; \ 1252 volatile unsigned long _res; \ 1253 _argvec[0] = (unsigned long)_orig.nraddr; \ 1255 VALGRIND_CFI_PROLOGUE \ 1256 "subq $128,%%rsp\n\t" \ 1257 "movq (%%rax), %%rax\n\t" \ 1258 VALGRIND_CALL_NOREDIR_RAX \ 1259 "addq $128,%%rsp\n\t" \ 1260 VALGRIND_CFI_EPILOGUE \ 1262 : "a" (&_argvec[0]) __FRAME_POINTER \ 1263 : "cc", "memory", __CALLER_SAVED_REGS, "r15" \ 1265 lval = (__typeof__(lval)) _res; \ 1268 #define CALL_FN_W_W(lval, orig, arg1) \ 1270 volatile OrigFn _orig = (orig); \ 1271 volatile unsigned long _argvec[2]; \ 1272 volatile unsigned long _res; \ 1273 _argvec[0] = (unsigned long)_orig.nraddr; \ 1274 _argvec[1] = (unsigned long)(arg1); \ 1276 VALGRIND_CFI_PROLOGUE \ 1277 "subq $128,%%rsp\n\t" \ 1278 "movq 8(%%rax), %%rdi\n\t" \ 1279 "movq (%%rax), %%rax\n\t" \ 1280 VALGRIND_CALL_NOREDIR_RAX \ 1281 "addq $128,%%rsp\n\t" \ 1282 VALGRIND_CFI_EPILOGUE \ 1284 : "a" (&_argvec[0]) __FRAME_POINTER \ 1285 : "cc", "memory", __CALLER_SAVED_REGS, "r15" \ 1287 lval = (__typeof__(lval)) _res; \ 1290 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 1292 volatile OrigFn _orig = (orig); \ 1293 volatile unsigned long _argvec[3]; \ 1294 volatile unsigned long _res; \ 1295 _argvec[0] = (unsigned long)_orig.nraddr; \ 1296 _argvec[1] = (unsigned long)(arg1); \ 1297 _argvec[2] = (unsigned long)(arg2); \ 1299 VALGRIND_CFI_PROLOGUE \ 1300 "subq $128,%%rsp\n\t" \ 1301 "movq 16(%%rax), %%rsi\n\t" \ 1302 "movq 8(%%rax), %%rdi\n\t" \ 1303 "movq (%%rax), %%rax\n\t" \ 1304 VALGRIND_CALL_NOREDIR_RAX \ 1305 "addq $128,%%rsp\n\t" \ 1306 VALGRIND_CFI_EPILOGUE \ 1308 : "a" (&_argvec[0]) __FRAME_POINTER \ 1309 : "cc", "memory", __CALLER_SAVED_REGS, "r15" \ 1311 lval = (__typeof__(lval)) _res; \ 1314 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 1316 volatile OrigFn _orig = (orig); \ 1317 volatile unsigned long _argvec[4]; \ 1318 volatile unsigned long _res; \ 1319 _argvec[0] = (unsigned long)_orig.nraddr; \ 1320 _argvec[1] = (unsigned long)(arg1); \ 1321 _argvec[2] = (unsigned long)(arg2); \ 1322 _argvec[3] = (unsigned long)(arg3); \ 1324 VALGRIND_CFI_PROLOGUE \ 1325 "subq $128,%%rsp\n\t" \ 1326 "movq 24(%%rax), %%rdx\n\t" \ 1327 "movq 16(%%rax), %%rsi\n\t" \ 1328 "movq 8(%%rax), %%rdi\n\t" \ 1329 "movq (%%rax), %%rax\n\t" \ 1330 VALGRIND_CALL_NOREDIR_RAX \ 1331 "addq $128,%%rsp\n\t" \ 1332 VALGRIND_CFI_EPILOGUE \ 1334 : "a" (&_argvec[0]) __FRAME_POINTER \ 1335 : "cc", "memory", __CALLER_SAVED_REGS, "r15" \ 1337 lval = (__typeof__(lval)) _res; \ 1340 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 1342 volatile OrigFn _orig = (orig); \ 1343 volatile unsigned long _argvec[5]; \ 1344 volatile unsigned long _res; \ 1345 _argvec[0] = (unsigned long)_orig.nraddr; \ 1346 _argvec[1] = (unsigned long)(arg1); \ 1347 _argvec[2] = (unsigned long)(arg2); \ 1348 _argvec[3] = (unsigned long)(arg3); \ 1349 _argvec[4] = (unsigned long)(arg4); \ 1351 VALGRIND_CFI_PROLOGUE \ 1352 "subq $128,%%rsp\n\t" \ 1353 "movq 32(%%rax), %%rcx\n\t" \ 1354 "movq 24(%%rax), %%rdx\n\t" \ 1355 "movq 16(%%rax), %%rsi\n\t" \ 1356 "movq 8(%%rax), %%rdi\n\t" \ 1357 "movq (%%rax), %%rax\n\t" \ 1358 VALGRIND_CALL_NOREDIR_RAX \ 1359 "addq $128,%%rsp\n\t" \ 1360 VALGRIND_CFI_EPILOGUE \ 1362 : "a" (&_argvec[0]) __FRAME_POINTER \ 1363 : "cc", "memory", __CALLER_SAVED_REGS, "r15" \ 1365 lval = (__typeof__(lval)) _res; \ 1368 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 1370 volatile OrigFn _orig = (orig); \ 1371 volatile unsigned long _argvec[6]; \ 1372 volatile unsigned long _res; \ 1373 _argvec[0] = (unsigned long)_orig.nraddr; \ 1374 _argvec[1] = (unsigned long)(arg1); \ 1375 _argvec[2] = (unsigned long)(arg2); \ 1376 _argvec[3] = (unsigned long)(arg3); \ 1377 _argvec[4] = (unsigned long)(arg4); \ 1378 _argvec[5] = (unsigned long)(arg5); \ 1380 VALGRIND_CFI_PROLOGUE \ 1381 "subq $128,%%rsp\n\t" \ 1382 "movq 40(%%rax), %%r8\n\t" \ 1383 "movq 32(%%rax), %%rcx\n\t" \ 1384 "movq 24(%%rax), %%rdx\n\t" \ 1385 "movq 16(%%rax), %%rsi\n\t" \ 1386 "movq 8(%%rax), %%rdi\n\t" \ 1387 "movq (%%rax), %%rax\n\t" \ 1388 VALGRIND_CALL_NOREDIR_RAX \ 1389 "addq $128,%%rsp\n\t" \ 1390 VALGRIND_CFI_EPILOGUE \ 1392 : "a" (&_argvec[0]) __FRAME_POINTER \ 1393 : "cc", "memory", __CALLER_SAVED_REGS, "r15" \ 1395 lval = (__typeof__(lval)) _res; \ 1398 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 1400 volatile OrigFn _orig = (orig); \ 1401 volatile unsigned long _argvec[7]; \ 1402 volatile unsigned long _res; \ 1403 _argvec[0] = (unsigned long)_orig.nraddr; \ 1404 _argvec[1] = (unsigned long)(arg1); \ 1405 _argvec[2] = (unsigned long)(arg2); \ 1406 _argvec[3] = (unsigned long)(arg3); \ 1407 _argvec[4] = (unsigned long)(arg4); \ 1408 _argvec[5] = (unsigned long)(arg5); \ 1409 _argvec[6] = (unsigned long)(arg6); \ 1411 VALGRIND_CFI_PROLOGUE \ 1412 "subq $128,%%rsp\n\t" \ 1413 "movq 48(%%rax), %%r9\n\t" \ 1414 "movq 40(%%rax), %%r8\n\t" \ 1415 "movq 32(%%rax), %%rcx\n\t" \ 1416 "movq 24(%%rax), %%rdx\n\t" \ 1417 "movq 16(%%rax), %%rsi\n\t" \ 1418 "movq 8(%%rax), %%rdi\n\t" \ 1419 "movq (%%rax), %%rax\n\t" \ 1420 VALGRIND_CALL_NOREDIR_RAX \ 1421 "addq $128,%%rsp\n\t" \ 1422 VALGRIND_CFI_EPILOGUE \ 1424 : "a" (&_argvec[0]) __FRAME_POINTER \ 1425 : "cc", "memory", __CALLER_SAVED_REGS, "r15" \ 1427 lval = (__typeof__(lval)) _res; \ 1430 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1433 volatile OrigFn _orig = (orig); \ 1434 volatile unsigned long _argvec[8]; \ 1435 volatile unsigned long _res; \ 1436 _argvec[0] = (unsigned long)_orig.nraddr; \ 1437 _argvec[1] = (unsigned long)(arg1); \ 1438 _argvec[2] = (unsigned long)(arg2); \ 1439 _argvec[3] = (unsigned long)(arg3); \ 1440 _argvec[4] = (unsigned long)(arg4); \ 1441 _argvec[5] = (unsigned long)(arg5); \ 1442 _argvec[6] = (unsigned long)(arg6); \ 1443 _argvec[7] = (unsigned long)(arg7); \ 1445 VALGRIND_CFI_PROLOGUE \ 1446 "subq $136,%%rsp\n\t" \ 1447 "pushq 56(%%rax)\n\t" \ 1448 "movq 48(%%rax), %%r9\n\t" \ 1449 "movq 40(%%rax), %%r8\n\t" \ 1450 "movq 32(%%rax), %%rcx\n\t" \ 1451 "movq 24(%%rax), %%rdx\n\t" \ 1452 "movq 16(%%rax), %%rsi\n\t" \ 1453 "movq 8(%%rax), %%rdi\n\t" \ 1454 "movq (%%rax), %%rax\n\t" \ 1455 VALGRIND_CALL_NOREDIR_RAX \ 1456 "addq $8, %%rsp\n" \ 1457 "addq $136,%%rsp\n\t" \ 1458 VALGRIND_CFI_EPILOGUE \ 1460 : "a" (&_argvec[0]) __FRAME_POINTER \ 1461 : "cc", "memory", __CALLER_SAVED_REGS, "r15" \ 1463 lval = (__typeof__(lval)) _res; \ 1466 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1469 volatile OrigFn _orig = (orig); \ 1470 volatile unsigned long _argvec[9]; \ 1471 volatile unsigned long _res; \ 1472 _argvec[0] = (unsigned long)_orig.nraddr; \ 1473 _argvec[1] = (unsigned long)(arg1); \ 1474 _argvec[2] = (unsigned long)(arg2); \ 1475 _argvec[3] = (unsigned long)(arg3); \ 1476 _argvec[4] = (unsigned long)(arg4); \ 1477 _argvec[5] = (unsigned long)(arg5); \ 1478 _argvec[6] = (unsigned long)(arg6); \ 1479 _argvec[7] = (unsigned long)(arg7); \ 1480 _argvec[8] = (unsigned long)(arg8); \ 1482 VALGRIND_CFI_PROLOGUE \ 1483 "subq $128,%%rsp\n\t" \ 1484 "pushq 64(%%rax)\n\t" \ 1485 "pushq 56(%%rax)\n\t" \ 1486 "movq 48(%%rax), %%r9\n\t" \ 1487 "movq 40(%%rax), %%r8\n\t" \ 1488 "movq 32(%%rax), %%rcx\n\t" \ 1489 "movq 24(%%rax), %%rdx\n\t" \ 1490 "movq 16(%%rax), %%rsi\n\t" \ 1491 "movq 8(%%rax), %%rdi\n\t" \ 1492 "movq (%%rax), %%rax\n\t" \ 1493 VALGRIND_CALL_NOREDIR_RAX \ 1494 "addq $16, %%rsp\n" \ 1495 "addq $128,%%rsp\n\t" \ 1496 VALGRIND_CFI_EPILOGUE \ 1498 : "a" (&_argvec[0]) __FRAME_POINTER \ 1499 : "cc", "memory", __CALLER_SAVED_REGS, "r15" \ 1501 lval = (__typeof__(lval)) _res; \ 1504 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1507 volatile OrigFn _orig = (orig); \ 1508 volatile unsigned long _argvec[10]; \ 1509 volatile unsigned long _res; \ 1510 _argvec[0] = (unsigned long)_orig.nraddr; \ 1511 _argvec[1] = (unsigned long)(arg1); \ 1512 _argvec[2] = (unsigned long)(arg2); \ 1513 _argvec[3] = (unsigned long)(arg3); \ 1514 _argvec[4] = (unsigned long)(arg4); \ 1515 _argvec[5] = (unsigned long)(arg5); \ 1516 _argvec[6] = (unsigned long)(arg6); \ 1517 _argvec[7] = (unsigned long)(arg7); \ 1518 _argvec[8] = (unsigned long)(arg8); \ 1519 _argvec[9] = (unsigned long)(arg9); \ 1521 VALGRIND_CFI_PROLOGUE \ 1522 "subq $136,%%rsp\n\t" \ 1523 "pushq 72(%%rax)\n\t" \ 1524 "pushq 64(%%rax)\n\t" \ 1525 "pushq 56(%%rax)\n\t" \ 1526 "movq 48(%%rax), %%r9\n\t" \ 1527 "movq 40(%%rax), %%r8\n\t" \ 1528 "movq 32(%%rax), %%rcx\n\t" \ 1529 "movq 24(%%rax), %%rdx\n\t" \ 1530 "movq 16(%%rax), %%rsi\n\t" \ 1531 "movq 8(%%rax), %%rdi\n\t" \ 1532 "movq (%%rax), %%rax\n\t" \ 1533 VALGRIND_CALL_NOREDIR_RAX \ 1534 "addq $24, %%rsp\n" \ 1535 "addq $136,%%rsp\n\t" \ 1536 VALGRIND_CFI_EPILOGUE \ 1538 : "a" (&_argvec[0]) __FRAME_POINTER \ 1539 : "cc", "memory", __CALLER_SAVED_REGS, "r15" \ 1541 lval = (__typeof__(lval)) _res; \ 1544 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1545 arg7,arg8,arg9,arg10) \ 1547 volatile OrigFn _orig = (orig); \ 1548 volatile unsigned long _argvec[11]; \ 1549 volatile unsigned long _res; \ 1550 _argvec[0] = (unsigned long)_orig.nraddr; \ 1551 _argvec[1] = (unsigned long)(arg1); \ 1552 _argvec[2] = (unsigned long)(arg2); \ 1553 _argvec[3] = (unsigned long)(arg3); \ 1554 _argvec[4] = (unsigned long)(arg4); \ 1555 _argvec[5] = (unsigned long)(arg5); \ 1556 _argvec[6] = (unsigned long)(arg6); \ 1557 _argvec[7] = (unsigned long)(arg7); \ 1558 _argvec[8] = (unsigned long)(arg8); \ 1559 _argvec[9] = (unsigned long)(arg9); \ 1560 _argvec[10] = (unsigned long)(arg10); \ 1562 VALGRIND_CFI_PROLOGUE \ 1563 "subq $128,%%rsp\n\t" \ 1564 "pushq 80(%%rax)\n\t" \ 1565 "pushq 72(%%rax)\n\t" \ 1566 "pushq 64(%%rax)\n\t" \ 1567 "pushq 56(%%rax)\n\t" \ 1568 "movq 48(%%rax), %%r9\n\t" \ 1569 "movq 40(%%rax), %%r8\n\t" \ 1570 "movq 32(%%rax), %%rcx\n\t" \ 1571 "movq 24(%%rax), %%rdx\n\t" \ 1572 "movq 16(%%rax), %%rsi\n\t" \ 1573 "movq 8(%%rax), %%rdi\n\t" \ 1574 "movq (%%rax), %%rax\n\t" \ 1575 VALGRIND_CALL_NOREDIR_RAX \ 1576 "addq $32, %%rsp\n" \ 1577 "addq $128,%%rsp\n\t" \ 1578 VALGRIND_CFI_EPILOGUE \ 1580 : "a" (&_argvec[0]) __FRAME_POINTER \ 1581 : "cc", "memory", __CALLER_SAVED_REGS, "r15" \ 1583 lval = (__typeof__(lval)) _res; \ 1586 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1587 arg7,arg8,arg9,arg10,arg11) \ 1589 volatile OrigFn _orig = (orig); \ 1590 volatile unsigned long _argvec[12]; \ 1591 volatile unsigned long _res; \ 1592 _argvec[0] = (unsigned long)_orig.nraddr; \ 1593 _argvec[1] = (unsigned long)(arg1); \ 1594 _argvec[2] = (unsigned long)(arg2); \ 1595 _argvec[3] = (unsigned long)(arg3); \ 1596 _argvec[4] = (unsigned long)(arg4); \ 1597 _argvec[5] = (unsigned long)(arg5); \ 1598 _argvec[6] = (unsigned long)(arg6); \ 1599 _argvec[7] = (unsigned long)(arg7); \ 1600 _argvec[8] = (unsigned long)(arg8); \ 1601 _argvec[9] = (unsigned long)(arg9); \ 1602 _argvec[10] = (unsigned long)(arg10); \ 1603 _argvec[11] = (unsigned long)(arg11); \ 1605 VALGRIND_CFI_PROLOGUE \ 1606 "subq $136,%%rsp\n\t" \ 1607 "pushq 88(%%rax)\n\t" \ 1608 "pushq 80(%%rax)\n\t" \ 1609 "pushq 72(%%rax)\n\t" \ 1610 "pushq 64(%%rax)\n\t" \ 1611 "pushq 56(%%rax)\n\t" \ 1612 "movq 48(%%rax), %%r9\n\t" \ 1613 "movq 40(%%rax), %%r8\n\t" \ 1614 "movq 32(%%rax), %%rcx\n\t" \ 1615 "movq 24(%%rax), %%rdx\n\t" \ 1616 "movq 16(%%rax), %%rsi\n\t" \ 1617 "movq 8(%%rax), %%rdi\n\t" \ 1618 "movq (%%rax), %%rax\n\t" \ 1619 VALGRIND_CALL_NOREDIR_RAX \ 1620 "addq $40, %%rsp\n" \ 1621 "addq $136,%%rsp\n\t" \ 1622 VALGRIND_CFI_EPILOGUE \ 1624 : "a" (&_argvec[0]) __FRAME_POINTER \ 1625 : "cc", "memory", __CALLER_SAVED_REGS, "r15" \ 1627 lval = (__typeof__(lval)) _res; \ 1630 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1631 arg7,arg8,arg9,arg10,arg11,arg12) \ 1633 volatile OrigFn _orig = (orig); \ 1634 volatile unsigned long _argvec[13]; \ 1635 volatile unsigned long _res; \ 1636 _argvec[0] = (unsigned long)_orig.nraddr; \ 1637 _argvec[1] = (unsigned long)(arg1); \ 1638 _argvec[2] = (unsigned long)(arg2); \ 1639 _argvec[3] = (unsigned long)(arg3); \ 1640 _argvec[4] = (unsigned long)(arg4); \ 1641 _argvec[5] = (unsigned long)(arg5); \ 1642 _argvec[6] = (unsigned long)(arg6); \ 1643 _argvec[7] = (unsigned long)(arg7); \ 1644 _argvec[8] = (unsigned long)(arg8); \ 1645 _argvec[9] = (unsigned long)(arg9); \ 1646 _argvec[10] = (unsigned long)(arg10); \ 1647 _argvec[11] = (unsigned long)(arg11); \ 1648 _argvec[12] = (unsigned long)(arg12); \ 1650 VALGRIND_CFI_PROLOGUE \ 1651 "subq $128,%%rsp\n\t" \ 1652 "pushq 96(%%rax)\n\t" \ 1653 "pushq 88(%%rax)\n\t" \ 1654 "pushq 80(%%rax)\n\t" \ 1655 "pushq 72(%%rax)\n\t" \ 1656 "pushq 64(%%rax)\n\t" \ 1657 "pushq 56(%%rax)\n\t" \ 1658 "movq 48(%%rax), %%r9\n\t" \ 1659 "movq 40(%%rax), %%r8\n\t" \ 1660 "movq 32(%%rax), %%rcx\n\t" \ 1661 "movq 24(%%rax), %%rdx\n\t" \ 1662 "movq 16(%%rax), %%rsi\n\t" \ 1663 "movq 8(%%rax), %%rdi\n\t" \ 1664 "movq (%%rax), %%rax\n\t" \ 1665 VALGRIND_CALL_NOREDIR_RAX \ 1666 "addq $48, %%rsp\n" \ 1667 "addq $128,%%rsp\n\t" \ 1668 VALGRIND_CFI_EPILOGUE \ 1670 : "a" (&_argvec[0]) __FRAME_POINTER \ 1671 : "cc", "memory", __CALLER_SAVED_REGS, "r15" \ 1673 lval = (__typeof__(lval)) _res; \ 1680 #if defined(PLAT_ppc32_linux) 1706 #define __CALLER_SAVED_REGS \ 1707 "lr", "ctr", "xer", \ 1708 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ 1709 "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ 1715 #define CALL_FN_W_v(lval, orig) \ 1717 volatile OrigFn _orig = (orig); \ 1718 volatile unsigned long _argvec[1]; \ 1719 volatile unsigned long _res; \ 1720 _argvec[0] = (unsigned long)_orig.nraddr; \ 1723 "lwz 11,0(11)\n\t" \ 1724 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 1727 : "r" (&_argvec[0]) \ 1728 : "cc", "memory", __CALLER_SAVED_REGS \ 1730 lval = (__typeof__(lval)) _res; \ 1733 #define CALL_FN_W_W(lval, orig, arg1) \ 1735 volatile OrigFn _orig = (orig); \ 1736 volatile unsigned long _argvec[2]; \ 1737 volatile unsigned long _res; \ 1738 _argvec[0] = (unsigned long)_orig.nraddr; \ 1739 _argvec[1] = (unsigned long)arg1; \ 1743 "lwz 11,0(11)\n\t" \ 1744 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 1747 : "r" (&_argvec[0]) \ 1748 : "cc", "memory", __CALLER_SAVED_REGS \ 1750 lval = (__typeof__(lval)) _res; \ 1753 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 1755 volatile OrigFn _orig = (orig); \ 1756 volatile unsigned long _argvec[3]; \ 1757 volatile unsigned long _res; \ 1758 _argvec[0] = (unsigned long)_orig.nraddr; \ 1759 _argvec[1] = (unsigned long)arg1; \ 1760 _argvec[2] = (unsigned long)arg2; \ 1765 "lwz 11,0(11)\n\t" \ 1766 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 1769 : "r" (&_argvec[0]) \ 1770 : "cc", "memory", __CALLER_SAVED_REGS \ 1772 lval = (__typeof__(lval)) _res; \ 1775 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 1777 volatile OrigFn _orig = (orig); \ 1778 volatile unsigned long _argvec[4]; \ 1779 volatile unsigned long _res; \ 1780 _argvec[0] = (unsigned long)_orig.nraddr; \ 1781 _argvec[1] = (unsigned long)arg1; \ 1782 _argvec[2] = (unsigned long)arg2; \ 1783 _argvec[3] = (unsigned long)arg3; \ 1788 "lwz 5,12(11)\n\t" \ 1789 "lwz 11,0(11)\n\t" \ 1790 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 1793 : "r" (&_argvec[0]) \ 1794 : "cc", "memory", __CALLER_SAVED_REGS \ 1796 lval = (__typeof__(lval)) _res; \ 1799 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 1801 volatile OrigFn _orig = (orig); \ 1802 volatile unsigned long _argvec[5]; \ 1803 volatile unsigned long _res; \ 1804 _argvec[0] = (unsigned long)_orig.nraddr; \ 1805 _argvec[1] = (unsigned long)arg1; \ 1806 _argvec[2] = (unsigned long)arg2; \ 1807 _argvec[3] = (unsigned long)arg3; \ 1808 _argvec[4] = (unsigned long)arg4; \ 1813 "lwz 5,12(11)\n\t" \ 1814 "lwz 6,16(11)\n\t" \ 1815 "lwz 11,0(11)\n\t" \ 1816 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 1819 : "r" (&_argvec[0]) \ 1820 : "cc", "memory", __CALLER_SAVED_REGS \ 1822 lval = (__typeof__(lval)) _res; \ 1825 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 1827 volatile OrigFn _orig = (orig); \ 1828 volatile unsigned long _argvec[6]; \ 1829 volatile unsigned long _res; \ 1830 _argvec[0] = (unsigned long)_orig.nraddr; \ 1831 _argvec[1] = (unsigned long)arg1; \ 1832 _argvec[2] = (unsigned long)arg2; \ 1833 _argvec[3] = (unsigned long)arg3; \ 1834 _argvec[4] = (unsigned long)arg4; \ 1835 _argvec[5] = (unsigned long)arg5; \ 1840 "lwz 5,12(11)\n\t" \ 1841 "lwz 6,16(11)\n\t" \ 1842 "lwz 7,20(11)\n\t" \ 1843 "lwz 11,0(11)\n\t" \ 1844 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 1847 : "r" (&_argvec[0]) \ 1848 : "cc", "memory", __CALLER_SAVED_REGS \ 1850 lval = (__typeof__(lval)) _res; \ 1853 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 1855 volatile OrigFn _orig = (orig); \ 1856 volatile unsigned long _argvec[7]; \ 1857 volatile unsigned long _res; \ 1858 _argvec[0] = (unsigned long)_orig.nraddr; \ 1859 _argvec[1] = (unsigned long)arg1; \ 1860 _argvec[2] = (unsigned long)arg2; \ 1861 _argvec[3] = (unsigned long)arg3; \ 1862 _argvec[4] = (unsigned long)arg4; \ 1863 _argvec[5] = (unsigned long)arg5; \ 1864 _argvec[6] = (unsigned long)arg6; \ 1869 "lwz 5,12(11)\n\t" \ 1870 "lwz 6,16(11)\n\t" \ 1871 "lwz 7,20(11)\n\t" \ 1872 "lwz 8,24(11)\n\t" \ 1873 "lwz 11,0(11)\n\t" \ 1874 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 1877 : "r" (&_argvec[0]) \ 1878 : "cc", "memory", __CALLER_SAVED_REGS \ 1880 lval = (__typeof__(lval)) _res; \ 1883 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1886 volatile OrigFn _orig = (orig); \ 1887 volatile unsigned long _argvec[8]; \ 1888 volatile unsigned long _res; \ 1889 _argvec[0] = (unsigned long)_orig.nraddr; \ 1890 _argvec[1] = (unsigned long)arg1; \ 1891 _argvec[2] = (unsigned long)arg2; \ 1892 _argvec[3] = (unsigned long)arg3; \ 1893 _argvec[4] = (unsigned long)arg4; \ 1894 _argvec[5] = (unsigned long)arg5; \ 1895 _argvec[6] = (unsigned long)arg6; \ 1896 _argvec[7] = (unsigned long)arg7; \ 1901 "lwz 5,12(11)\n\t" \ 1902 "lwz 6,16(11)\n\t" \ 1903 "lwz 7,20(11)\n\t" \ 1904 "lwz 8,24(11)\n\t" \ 1905 "lwz 9,28(11)\n\t" \ 1906 "lwz 11,0(11)\n\t" \ 1907 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 1910 : "r" (&_argvec[0]) \ 1911 : "cc", "memory", __CALLER_SAVED_REGS \ 1913 lval = (__typeof__(lval)) _res; \ 1916 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1919 volatile OrigFn _orig = (orig); \ 1920 volatile unsigned long _argvec[9]; \ 1921 volatile unsigned long _res; \ 1922 _argvec[0] = (unsigned long)_orig.nraddr; \ 1923 _argvec[1] = (unsigned long)arg1; \ 1924 _argvec[2] = (unsigned long)arg2; \ 1925 _argvec[3] = (unsigned long)arg3; \ 1926 _argvec[4] = (unsigned long)arg4; \ 1927 _argvec[5] = (unsigned long)arg5; \ 1928 _argvec[6] = (unsigned long)arg6; \ 1929 _argvec[7] = (unsigned long)arg7; \ 1930 _argvec[8] = (unsigned long)arg8; \ 1935 "lwz 5,12(11)\n\t" \ 1936 "lwz 6,16(11)\n\t" \ 1937 "lwz 7,20(11)\n\t" \ 1938 "lwz 8,24(11)\n\t" \ 1939 "lwz 9,28(11)\n\t" \ 1940 "lwz 10,32(11)\n\t" \ 1941 "lwz 11,0(11)\n\t" \ 1942 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 1945 : "r" (&_argvec[0]) \ 1946 : "cc", "memory", __CALLER_SAVED_REGS \ 1948 lval = (__typeof__(lval)) _res; \ 1951 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1954 volatile OrigFn _orig = (orig); \ 1955 volatile unsigned long _argvec[10]; \ 1956 volatile unsigned long _res; \ 1957 _argvec[0] = (unsigned long)_orig.nraddr; \ 1958 _argvec[1] = (unsigned long)arg1; \ 1959 _argvec[2] = (unsigned long)arg2; \ 1960 _argvec[3] = (unsigned long)arg3; \ 1961 _argvec[4] = (unsigned long)arg4; \ 1962 _argvec[5] = (unsigned long)arg5; \ 1963 _argvec[6] = (unsigned long)arg6; \ 1964 _argvec[7] = (unsigned long)arg7; \ 1965 _argvec[8] = (unsigned long)arg8; \ 1966 _argvec[9] = (unsigned long)arg9; \ 1969 "addi 1,1,-16\n\t" \ 1971 "lwz 3,36(11)\n\t" \ 1976 "lwz 5,12(11)\n\t" \ 1977 "lwz 6,16(11)\n\t" \ 1978 "lwz 7,20(11)\n\t" \ 1979 "lwz 8,24(11)\n\t" \ 1980 "lwz 9,28(11)\n\t" \ 1981 "lwz 10,32(11)\n\t" \ 1982 "lwz 11,0(11)\n\t" \ 1983 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 1987 : "r" (&_argvec[0]) \ 1988 : "cc", "memory", __CALLER_SAVED_REGS \ 1990 lval = (__typeof__(lval)) _res; \ 1993 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1994 arg7,arg8,arg9,arg10) \ 1996 volatile OrigFn _orig = (orig); \ 1997 volatile unsigned long _argvec[11]; \ 1998 volatile unsigned long _res; \ 1999 _argvec[0] = (unsigned long)_orig.nraddr; \ 2000 _argvec[1] = (unsigned long)arg1; \ 2001 _argvec[2] = (unsigned long)arg2; \ 2002 _argvec[3] = (unsigned long)arg3; \ 2003 _argvec[4] = (unsigned long)arg4; \ 2004 _argvec[5] = (unsigned long)arg5; \ 2005 _argvec[6] = (unsigned long)arg6; \ 2006 _argvec[7] = (unsigned long)arg7; \ 2007 _argvec[8] = (unsigned long)arg8; \ 2008 _argvec[9] = (unsigned long)arg9; \ 2009 _argvec[10] = (unsigned long)arg10; \ 2012 "addi 1,1,-16\n\t" \ 2014 "lwz 3,40(11)\n\t" \ 2017 "lwz 3,36(11)\n\t" \ 2022 "lwz 5,12(11)\n\t" \ 2023 "lwz 6,16(11)\n\t" \ 2024 "lwz 7,20(11)\n\t" \ 2025 "lwz 8,24(11)\n\t" \ 2026 "lwz 9,28(11)\n\t" \ 2027 "lwz 10,32(11)\n\t" \ 2028 "lwz 11,0(11)\n\t" \ 2029 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2033 : "r" (&_argvec[0]) \ 2034 : "cc", "memory", __CALLER_SAVED_REGS \ 2036 lval = (__typeof__(lval)) _res; \ 2039 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2040 arg7,arg8,arg9,arg10,arg11) \ 2042 volatile OrigFn _orig = (orig); \ 2043 volatile unsigned long _argvec[12]; \ 2044 volatile unsigned long _res; \ 2045 _argvec[0] = (unsigned long)_orig.nraddr; \ 2046 _argvec[1] = (unsigned long)arg1; \ 2047 _argvec[2] = (unsigned long)arg2; \ 2048 _argvec[3] = (unsigned long)arg3; \ 2049 _argvec[4] = (unsigned long)arg4; \ 2050 _argvec[5] = (unsigned long)arg5; \ 2051 _argvec[6] = (unsigned long)arg6; \ 2052 _argvec[7] = (unsigned long)arg7; \ 2053 _argvec[8] = (unsigned long)arg8; \ 2054 _argvec[9] = (unsigned long)arg9; \ 2055 _argvec[10] = (unsigned long)arg10; \ 2056 _argvec[11] = (unsigned long)arg11; \ 2059 "addi 1,1,-32\n\t" \ 2061 "lwz 3,44(11)\n\t" \ 2064 "lwz 3,40(11)\n\t" \ 2067 "lwz 3,36(11)\n\t" \ 2072 "lwz 5,12(11)\n\t" \ 2073 "lwz 6,16(11)\n\t" \ 2074 "lwz 7,20(11)\n\t" \ 2075 "lwz 8,24(11)\n\t" \ 2076 "lwz 9,28(11)\n\t" \ 2077 "lwz 10,32(11)\n\t" \ 2078 "lwz 11,0(11)\n\t" \ 2079 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2083 : "r" (&_argvec[0]) \ 2084 : "cc", "memory", __CALLER_SAVED_REGS \ 2086 lval = (__typeof__(lval)) _res; \ 2089 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2090 arg7,arg8,arg9,arg10,arg11,arg12) \ 2092 volatile OrigFn _orig = (orig); \ 2093 volatile unsigned long _argvec[13]; \ 2094 volatile unsigned long _res; \ 2095 _argvec[0] = (unsigned long)_orig.nraddr; \ 2096 _argvec[1] = (unsigned long)arg1; \ 2097 _argvec[2] = (unsigned long)arg2; \ 2098 _argvec[3] = (unsigned long)arg3; \ 2099 _argvec[4] = (unsigned long)arg4; \ 2100 _argvec[5] = (unsigned long)arg5; \ 2101 _argvec[6] = (unsigned long)arg6; \ 2102 _argvec[7] = (unsigned long)arg7; \ 2103 _argvec[8] = (unsigned long)arg8; \ 2104 _argvec[9] = (unsigned long)arg9; \ 2105 _argvec[10] = (unsigned long)arg10; \ 2106 _argvec[11] = (unsigned long)arg11; \ 2107 _argvec[12] = (unsigned long)arg12; \ 2110 "addi 1,1,-32\n\t" \ 2112 "lwz 3,48(11)\n\t" \ 2115 "lwz 3,44(11)\n\t" \ 2118 "lwz 3,40(11)\n\t" \ 2121 "lwz 3,36(11)\n\t" \ 2126 "lwz 5,12(11)\n\t" \ 2127 "lwz 6,16(11)\n\t" \ 2128 "lwz 7,20(11)\n\t" \ 2129 "lwz 8,24(11)\n\t" \ 2130 "lwz 9,28(11)\n\t" \ 2131 "lwz 10,32(11)\n\t" \ 2132 "lwz 11,0(11)\n\t" \ 2133 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2137 : "r" (&_argvec[0]) \ 2138 : "cc", "memory", __CALLER_SAVED_REGS \ 2140 lval = (__typeof__(lval)) _res; \ 2147 #if defined(PLAT_ppc64_linux) 2152 #define __CALLER_SAVED_REGS \ 2153 "lr", "ctr", "xer", \ 2154 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ 2155 "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ 2161 #define CALL_FN_W_v(lval, orig) \ 2163 volatile OrigFn _orig = (orig); \ 2164 volatile unsigned long _argvec[3+0]; \ 2165 volatile unsigned long _res; \ 2167 _argvec[1] = (unsigned long)_orig.r2; \ 2168 _argvec[2] = (unsigned long)_orig.nraddr; \ 2171 "std 2,-16(11)\n\t" \ 2173 "ld 11, 0(11)\n\t" \ 2174 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2179 : "r" (&_argvec[2]) \ 2180 : "cc", "memory", __CALLER_SAVED_REGS \ 2182 lval = (__typeof__(lval)) _res; \ 2185 #define CALL_FN_W_W(lval, orig, arg1) \ 2187 volatile OrigFn _orig = (orig); \ 2188 volatile unsigned long _argvec[3+1]; \ 2189 volatile unsigned long _res; \ 2191 _argvec[1] = (unsigned long)_orig.r2; \ 2192 _argvec[2] = (unsigned long)_orig.nraddr; \ 2193 _argvec[2+1] = (unsigned long)arg1; \ 2196 "std 2,-16(11)\n\t" \ 2199 "ld 11, 0(11)\n\t" \ 2200 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2205 : "r" (&_argvec[2]) \ 2206 : "cc", "memory", __CALLER_SAVED_REGS \ 2208 lval = (__typeof__(lval)) _res; \ 2211 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 2213 volatile OrigFn _orig = (orig); \ 2214 volatile unsigned long _argvec[3+2]; \ 2215 volatile unsigned long _res; \ 2217 _argvec[1] = (unsigned long)_orig.r2; \ 2218 _argvec[2] = (unsigned long)_orig.nraddr; \ 2219 _argvec[2+1] = (unsigned long)arg1; \ 2220 _argvec[2+2] = (unsigned long)arg2; \ 2223 "std 2,-16(11)\n\t" \ 2226 "ld 4, 16(11)\n\t" \ 2227 "ld 11, 0(11)\n\t" \ 2228 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2233 : "r" (&_argvec[2]) \ 2234 : "cc", "memory", __CALLER_SAVED_REGS \ 2236 lval = (__typeof__(lval)) _res; \ 2239 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 2241 volatile OrigFn _orig = (orig); \ 2242 volatile unsigned long _argvec[3+3]; \ 2243 volatile unsigned long _res; \ 2245 _argvec[1] = (unsigned long)_orig.r2; \ 2246 _argvec[2] = (unsigned long)_orig.nraddr; \ 2247 _argvec[2+1] = (unsigned long)arg1; \ 2248 _argvec[2+2] = (unsigned long)arg2; \ 2249 _argvec[2+3] = (unsigned long)arg3; \ 2252 "std 2,-16(11)\n\t" \ 2255 "ld 4, 16(11)\n\t" \ 2256 "ld 5, 24(11)\n\t" \ 2257 "ld 11, 0(11)\n\t" \ 2258 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2263 : "r" (&_argvec[2]) \ 2264 : "cc", "memory", __CALLER_SAVED_REGS \ 2266 lval = (__typeof__(lval)) _res; \ 2269 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 2271 volatile OrigFn _orig = (orig); \ 2272 volatile unsigned long _argvec[3+4]; \ 2273 volatile unsigned long _res; \ 2275 _argvec[1] = (unsigned long)_orig.r2; \ 2276 _argvec[2] = (unsigned long)_orig.nraddr; \ 2277 _argvec[2+1] = (unsigned long)arg1; \ 2278 _argvec[2+2] = (unsigned long)arg2; \ 2279 _argvec[2+3] = (unsigned long)arg3; \ 2280 _argvec[2+4] = (unsigned long)arg4; \ 2283 "std 2,-16(11)\n\t" \ 2286 "ld 4, 16(11)\n\t" \ 2287 "ld 5, 24(11)\n\t" \ 2288 "ld 6, 32(11)\n\t" \ 2289 "ld 11, 0(11)\n\t" \ 2290 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2295 : "r" (&_argvec[2]) \ 2296 : "cc", "memory", __CALLER_SAVED_REGS \ 2298 lval = (__typeof__(lval)) _res; \ 2301 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 2303 volatile OrigFn _orig = (orig); \ 2304 volatile unsigned long _argvec[3+5]; \ 2305 volatile unsigned long _res; \ 2307 _argvec[1] = (unsigned long)_orig.r2; \ 2308 _argvec[2] = (unsigned long)_orig.nraddr; \ 2309 _argvec[2+1] = (unsigned long)arg1; \ 2310 _argvec[2+2] = (unsigned long)arg2; \ 2311 _argvec[2+3] = (unsigned long)arg3; \ 2312 _argvec[2+4] = (unsigned long)arg4; \ 2313 _argvec[2+5] = (unsigned long)arg5; \ 2316 "std 2,-16(11)\n\t" \ 2319 "ld 4, 16(11)\n\t" \ 2320 "ld 5, 24(11)\n\t" \ 2321 "ld 6, 32(11)\n\t" \ 2322 "ld 7, 40(11)\n\t" \ 2323 "ld 11, 0(11)\n\t" \ 2324 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2329 : "r" (&_argvec[2]) \ 2330 : "cc", "memory", __CALLER_SAVED_REGS \ 2332 lval = (__typeof__(lval)) _res; \ 2335 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 2337 volatile OrigFn _orig = (orig); \ 2338 volatile unsigned long _argvec[3+6]; \ 2339 volatile unsigned long _res; \ 2341 _argvec[1] = (unsigned long)_orig.r2; \ 2342 _argvec[2] = (unsigned long)_orig.nraddr; \ 2343 _argvec[2+1] = (unsigned long)arg1; \ 2344 _argvec[2+2] = (unsigned long)arg2; \ 2345 _argvec[2+3] = (unsigned long)arg3; \ 2346 _argvec[2+4] = (unsigned long)arg4; \ 2347 _argvec[2+5] = (unsigned long)arg5; \ 2348 _argvec[2+6] = (unsigned long)arg6; \ 2351 "std 2,-16(11)\n\t" \ 2354 "ld 4, 16(11)\n\t" \ 2355 "ld 5, 24(11)\n\t" \ 2356 "ld 6, 32(11)\n\t" \ 2357 "ld 7, 40(11)\n\t" \ 2358 "ld 8, 48(11)\n\t" \ 2359 "ld 11, 0(11)\n\t" \ 2360 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2365 : "r" (&_argvec[2]) \ 2366 : "cc", "memory", __CALLER_SAVED_REGS \ 2368 lval = (__typeof__(lval)) _res; \ 2371 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2374 volatile OrigFn _orig = (orig); \ 2375 volatile unsigned long _argvec[3+7]; \ 2376 volatile unsigned long _res; \ 2378 _argvec[1] = (unsigned long)_orig.r2; \ 2379 _argvec[2] = (unsigned long)_orig.nraddr; \ 2380 _argvec[2+1] = (unsigned long)arg1; \ 2381 _argvec[2+2] = (unsigned long)arg2; \ 2382 _argvec[2+3] = (unsigned long)arg3; \ 2383 _argvec[2+4] = (unsigned long)arg4; \ 2384 _argvec[2+5] = (unsigned long)arg5; \ 2385 _argvec[2+6] = (unsigned long)arg6; \ 2386 _argvec[2+7] = (unsigned long)arg7; \ 2389 "std 2,-16(11)\n\t" \ 2392 "ld 4, 16(11)\n\t" \ 2393 "ld 5, 24(11)\n\t" \ 2394 "ld 6, 32(11)\n\t" \ 2395 "ld 7, 40(11)\n\t" \ 2396 "ld 8, 48(11)\n\t" \ 2397 "ld 9, 56(11)\n\t" \ 2398 "ld 11, 0(11)\n\t" \ 2399 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2404 : "r" (&_argvec[2]) \ 2405 : "cc", "memory", __CALLER_SAVED_REGS \ 2407 lval = (__typeof__(lval)) _res; \ 2410 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2413 volatile OrigFn _orig = (orig); \ 2414 volatile unsigned long _argvec[3+8]; \ 2415 volatile unsigned long _res; \ 2417 _argvec[1] = (unsigned long)_orig.r2; \ 2418 _argvec[2] = (unsigned long)_orig.nraddr; \ 2419 _argvec[2+1] = (unsigned long)arg1; \ 2420 _argvec[2+2] = (unsigned long)arg2; \ 2421 _argvec[2+3] = (unsigned long)arg3; \ 2422 _argvec[2+4] = (unsigned long)arg4; \ 2423 _argvec[2+5] = (unsigned long)arg5; \ 2424 _argvec[2+6] = (unsigned long)arg6; \ 2425 _argvec[2+7] = (unsigned long)arg7; \ 2426 _argvec[2+8] = (unsigned long)arg8; \ 2429 "std 2,-16(11)\n\t" \ 2432 "ld 4, 16(11)\n\t" \ 2433 "ld 5, 24(11)\n\t" \ 2434 "ld 6, 32(11)\n\t" \ 2435 "ld 7, 40(11)\n\t" \ 2436 "ld 8, 48(11)\n\t" \ 2437 "ld 9, 56(11)\n\t" \ 2438 "ld 10, 64(11)\n\t" \ 2439 "ld 11, 0(11)\n\t" \ 2440 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2445 : "r" (&_argvec[2]) \ 2446 : "cc", "memory", __CALLER_SAVED_REGS \ 2448 lval = (__typeof__(lval)) _res; \ 2451 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2454 volatile OrigFn _orig = (orig); \ 2455 volatile unsigned long _argvec[3+9]; \ 2456 volatile unsigned long _res; \ 2458 _argvec[1] = (unsigned long)_orig.r2; \ 2459 _argvec[2] = (unsigned long)_orig.nraddr; \ 2460 _argvec[2+1] = (unsigned long)arg1; \ 2461 _argvec[2+2] = (unsigned long)arg2; \ 2462 _argvec[2+3] = (unsigned long)arg3; \ 2463 _argvec[2+4] = (unsigned long)arg4; \ 2464 _argvec[2+5] = (unsigned long)arg5; \ 2465 _argvec[2+6] = (unsigned long)arg6; \ 2466 _argvec[2+7] = (unsigned long)arg7; \ 2467 _argvec[2+8] = (unsigned long)arg8; \ 2468 _argvec[2+9] = (unsigned long)arg9; \ 2471 "std 2,-16(11)\n\t" \ 2473 "addi 1,1,-128\n\t" \ 2476 "std 3,112(1)\n\t" \ 2479 "ld 4, 16(11)\n\t" \ 2480 "ld 5, 24(11)\n\t" \ 2481 "ld 6, 32(11)\n\t" \ 2482 "ld 7, 40(11)\n\t" \ 2483 "ld 8, 48(11)\n\t" \ 2484 "ld 9, 56(11)\n\t" \ 2485 "ld 10, 64(11)\n\t" \ 2486 "ld 11, 0(11)\n\t" \ 2487 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2490 "ld 2,-16(11)\n\t" \ 2493 : "r" (&_argvec[2]) \ 2494 : "cc", "memory", __CALLER_SAVED_REGS \ 2496 lval = (__typeof__(lval)) _res; \ 2499 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2500 arg7,arg8,arg9,arg10) \ 2502 volatile OrigFn _orig = (orig); \ 2503 volatile unsigned long _argvec[3+10]; \ 2504 volatile unsigned long _res; \ 2506 _argvec[1] = (unsigned long)_orig.r2; \ 2507 _argvec[2] = (unsigned long)_orig.nraddr; \ 2508 _argvec[2+1] = (unsigned long)arg1; \ 2509 _argvec[2+2] = (unsigned long)arg2; \ 2510 _argvec[2+3] = (unsigned long)arg3; \ 2511 _argvec[2+4] = (unsigned long)arg4; \ 2512 _argvec[2+5] = (unsigned long)arg5; \ 2513 _argvec[2+6] = (unsigned long)arg6; \ 2514 _argvec[2+7] = (unsigned long)arg7; \ 2515 _argvec[2+8] = (unsigned long)arg8; \ 2516 _argvec[2+9] = (unsigned long)arg9; \ 2517 _argvec[2+10] = (unsigned long)arg10; \ 2520 "std 2,-16(11)\n\t" \ 2522 "addi 1,1,-128\n\t" \ 2525 "std 3,120(1)\n\t" \ 2528 "std 3,112(1)\n\t" \ 2531 "ld 4, 16(11)\n\t" \ 2532 "ld 5, 24(11)\n\t" \ 2533 "ld 6, 32(11)\n\t" \ 2534 "ld 7, 40(11)\n\t" \ 2535 "ld 8, 48(11)\n\t" \ 2536 "ld 9, 56(11)\n\t" \ 2537 "ld 10, 64(11)\n\t" \ 2538 "ld 11, 0(11)\n\t" \ 2539 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2542 "ld 2,-16(11)\n\t" \ 2545 : "r" (&_argvec[2]) \ 2546 : "cc", "memory", __CALLER_SAVED_REGS \ 2548 lval = (__typeof__(lval)) _res; \ 2551 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2552 arg7,arg8,arg9,arg10,arg11) \ 2554 volatile OrigFn _orig = (orig); \ 2555 volatile unsigned long _argvec[3+11]; \ 2556 volatile unsigned long _res; \ 2558 _argvec[1] = (unsigned long)_orig.r2; \ 2559 _argvec[2] = (unsigned long)_orig.nraddr; \ 2560 _argvec[2+1] = (unsigned long)arg1; \ 2561 _argvec[2+2] = (unsigned long)arg2; \ 2562 _argvec[2+3] = (unsigned long)arg3; \ 2563 _argvec[2+4] = (unsigned long)arg4; \ 2564 _argvec[2+5] = (unsigned long)arg5; \ 2565 _argvec[2+6] = (unsigned long)arg6; \ 2566 _argvec[2+7] = (unsigned long)arg7; \ 2567 _argvec[2+8] = (unsigned long)arg8; \ 2568 _argvec[2+9] = (unsigned long)arg9; \ 2569 _argvec[2+10] = (unsigned long)arg10; \ 2570 _argvec[2+11] = (unsigned long)arg11; \ 2573 "std 2,-16(11)\n\t" \ 2575 "addi 1,1,-144\n\t" \ 2578 "std 3,128(1)\n\t" \ 2581 "std 3,120(1)\n\t" \ 2584 "std 3,112(1)\n\t" \ 2587 "ld 4, 16(11)\n\t" \ 2588 "ld 5, 24(11)\n\t" \ 2589 "ld 6, 32(11)\n\t" \ 2590 "ld 7, 40(11)\n\t" \ 2591 "ld 8, 48(11)\n\t" \ 2592 "ld 9, 56(11)\n\t" \ 2593 "ld 10, 64(11)\n\t" \ 2594 "ld 11, 0(11)\n\t" \ 2595 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2598 "ld 2,-16(11)\n\t" \ 2601 : "r" (&_argvec[2]) \ 2602 : "cc", "memory", __CALLER_SAVED_REGS \ 2604 lval = (__typeof__(lval)) _res; \ 2607 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2608 arg7,arg8,arg9,arg10,arg11,arg12) \ 2610 volatile OrigFn _orig = (orig); \ 2611 volatile unsigned long _argvec[3+12]; \ 2612 volatile unsigned long _res; \ 2614 _argvec[1] = (unsigned long)_orig.r2; \ 2615 _argvec[2] = (unsigned long)_orig.nraddr; \ 2616 _argvec[2+1] = (unsigned long)arg1; \ 2617 _argvec[2+2] = (unsigned long)arg2; \ 2618 _argvec[2+3] = (unsigned long)arg3; \ 2619 _argvec[2+4] = (unsigned long)arg4; \ 2620 _argvec[2+5] = (unsigned long)arg5; \ 2621 _argvec[2+6] = (unsigned long)arg6; \ 2622 _argvec[2+7] = (unsigned long)arg7; \ 2623 _argvec[2+8] = (unsigned long)arg8; \ 2624 _argvec[2+9] = (unsigned long)arg9; \ 2625 _argvec[2+10] = (unsigned long)arg10; \ 2626 _argvec[2+11] = (unsigned long)arg11; \ 2627 _argvec[2+12] = (unsigned long)arg12; \ 2630 "std 2,-16(11)\n\t" \ 2632 "addi 1,1,-144\n\t" \ 2635 "std 3,136(1)\n\t" \ 2638 "std 3,128(1)\n\t" \ 2641 "std 3,120(1)\n\t" \ 2644 "std 3,112(1)\n\t" \ 2647 "ld 4, 16(11)\n\t" \ 2648 "ld 5, 24(11)\n\t" \ 2649 "ld 6, 32(11)\n\t" \ 2650 "ld 7, 40(11)\n\t" \ 2651 "ld 8, 48(11)\n\t" \ 2652 "ld 9, 56(11)\n\t" \ 2653 "ld 10, 64(11)\n\t" \ 2654 "ld 11, 0(11)\n\t" \ 2655 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2658 "ld 2,-16(11)\n\t" \ 2661 : "r" (&_argvec[2]) \ 2662 : "cc", "memory", __CALLER_SAVED_REGS \ 2664 lval = (__typeof__(lval)) _res; \ 2671 #if defined(PLAT_arm_linux) 2674 #define __CALLER_SAVED_REGS "r0", "r1", "r2", "r3","r4","r14" 2679 #define CALL_FN_W_v(lval, orig) \ 2681 volatile OrigFn _orig = (orig); \ 2682 volatile unsigned long _argvec[1]; \ 2683 volatile unsigned long _res; \ 2684 _argvec[0] = (unsigned long)_orig.nraddr; \ 2686 "ldr r4, [%1] \n\t" \ 2687 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 2690 : "0" (&_argvec[0]) \ 2691 : "cc", "memory", __CALLER_SAVED_REGS \ 2693 lval = (__typeof__(lval)) _res; \ 2696 #define CALL_FN_W_W(lval, orig, arg1) \ 2698 volatile OrigFn _orig = (orig); \ 2699 volatile unsigned long _argvec[2]; \ 2700 volatile unsigned long _res; \ 2701 _argvec[0] = (unsigned long)_orig.nraddr; \ 2702 _argvec[1] = (unsigned long)(arg1); \ 2704 "ldr r0, [%1, #4] \n\t" \ 2705 "ldr r4, [%1] \n\t" \ 2706 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 2709 : "0" (&_argvec[0]) \ 2710 : "cc", "memory", __CALLER_SAVED_REGS \ 2712 lval = (__typeof__(lval)) _res; \ 2715 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 2717 volatile OrigFn _orig = (orig); \ 2718 volatile unsigned long _argvec[3]; \ 2719 volatile unsigned long _res; \ 2720 _argvec[0] = (unsigned long)_orig.nraddr; \ 2721 _argvec[1] = (unsigned long)(arg1); \ 2722 _argvec[2] = (unsigned long)(arg2); \ 2724 "ldr r0, [%1, #4] \n\t" \ 2725 "ldr r1, [%1, #8] \n\t" \ 2726 "ldr r4, [%1] \n\t" \ 2727 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 2730 : "0" (&_argvec[0]) \ 2731 : "cc", "memory", __CALLER_SAVED_REGS \ 2733 lval = (__typeof__(lval)) _res; \ 2736 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 2738 volatile OrigFn _orig = (orig); \ 2739 volatile unsigned long _argvec[4]; \ 2740 volatile unsigned long _res; \ 2741 _argvec[0] = (unsigned long)_orig.nraddr; \ 2742 _argvec[1] = (unsigned long)(arg1); \ 2743 _argvec[2] = (unsigned long)(arg2); \ 2744 _argvec[3] = (unsigned long)(arg3); \ 2746 "ldr r0, [%1, #4] \n\t" \ 2747 "ldr r1, [%1, #8] \n\t" \ 2748 "ldr r2, [%1, #12] \n\t" \ 2749 "ldr r4, [%1] \n\t" \ 2750 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 2753 : "0" (&_argvec[0]) \ 2754 : "cc", "memory", __CALLER_SAVED_REGS \ 2756 lval = (__typeof__(lval)) _res; \ 2759 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 2761 volatile OrigFn _orig = (orig); \ 2762 volatile unsigned long _argvec[5]; \ 2763 volatile unsigned long _res; \ 2764 _argvec[0] = (unsigned long)_orig.nraddr; \ 2765 _argvec[1] = (unsigned long)(arg1); \ 2766 _argvec[2] = (unsigned long)(arg2); \ 2767 _argvec[3] = (unsigned long)(arg3); \ 2768 _argvec[4] = (unsigned long)(arg4); \ 2770 "ldr r0, [%1, #4] \n\t" \ 2771 "ldr r1, [%1, #8] \n\t" \ 2772 "ldr r2, [%1, #12] \n\t" \ 2773 "ldr r3, [%1, #16] \n\t" \ 2774 "ldr r4, [%1] \n\t" \ 2775 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 2778 : "0" (&_argvec[0]) \ 2779 : "cc", "memory", __CALLER_SAVED_REGS \ 2781 lval = (__typeof__(lval)) _res; \ 2784 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 2786 volatile OrigFn _orig = (orig); \ 2787 volatile unsigned long _argvec[6]; \ 2788 volatile unsigned long _res; \ 2789 _argvec[0] = (unsigned long)_orig.nraddr; \ 2790 _argvec[1] = (unsigned long)(arg1); \ 2791 _argvec[2] = (unsigned long)(arg2); \ 2792 _argvec[3] = (unsigned long)(arg3); \ 2793 _argvec[4] = (unsigned long)(arg4); \ 2794 _argvec[5] = (unsigned long)(arg5); \ 2796 "ldr r0, [%1, #20] \n\t" \ 2798 "ldr r0, [%1, #4] \n\t" \ 2799 "ldr r1, [%1, #8] \n\t" \ 2800 "ldr r2, [%1, #12] \n\t" \ 2801 "ldr r3, [%1, #16] \n\t" \ 2802 "ldr r4, [%1] \n\t" \ 2803 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 2804 "add sp, sp, #4 \n\t" \ 2807 : "0" (&_argvec[0]) \ 2808 : "cc", "memory", __CALLER_SAVED_REGS \ 2810 lval = (__typeof__(lval)) _res; \ 2813 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 2815 volatile OrigFn _orig = (orig); \ 2816 volatile unsigned long _argvec[7]; \ 2817 volatile unsigned long _res; \ 2818 _argvec[0] = (unsigned long)_orig.nraddr; \ 2819 _argvec[1] = (unsigned long)(arg1); \ 2820 _argvec[2] = (unsigned long)(arg2); \ 2821 _argvec[3] = (unsigned long)(arg3); \ 2822 _argvec[4] = (unsigned long)(arg4); \ 2823 _argvec[5] = (unsigned long)(arg5); \ 2824 _argvec[6] = (unsigned long)(arg6); \ 2826 "ldr r0, [%1, #20] \n\t" \ 2827 "ldr r1, [%1, #24] \n\t" \ 2828 "push {r0, r1} \n\t" \ 2829 "ldr r0, [%1, #4] \n\t" \ 2830 "ldr r1, [%1, #8] \n\t" \ 2831 "ldr r2, [%1, #12] \n\t" \ 2832 "ldr r3, [%1, #16] \n\t" \ 2833 "ldr r4, [%1] \n\t" \ 2834 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 2835 "add sp, sp, #8 \n\t" \ 2838 : "0" (&_argvec[0]) \ 2839 : "cc", "memory", __CALLER_SAVED_REGS \ 2841 lval = (__typeof__(lval)) _res; \ 2844 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2847 volatile OrigFn _orig = (orig); \ 2848 volatile unsigned long _argvec[8]; \ 2849 volatile unsigned long _res; \ 2850 _argvec[0] = (unsigned long)_orig.nraddr; \ 2851 _argvec[1] = (unsigned long)(arg1); \ 2852 _argvec[2] = (unsigned long)(arg2); \ 2853 _argvec[3] = (unsigned long)(arg3); \ 2854 _argvec[4] = (unsigned long)(arg4); \ 2855 _argvec[5] = (unsigned long)(arg5); \ 2856 _argvec[6] = (unsigned long)(arg6); \ 2857 _argvec[7] = (unsigned long)(arg7); \ 2859 "ldr r0, [%1, #20] \n\t" \ 2860 "ldr r1, [%1, #24] \n\t" \ 2861 "ldr r2, [%1, #28] \n\t" \ 2862 "push {r0, r1, r2} \n\t" \ 2863 "ldr r0, [%1, #4] \n\t" \ 2864 "ldr r1, [%1, #8] \n\t" \ 2865 "ldr r2, [%1, #12] \n\t" \ 2866 "ldr r3, [%1, #16] \n\t" \ 2867 "ldr r4, [%1] \n\t" \ 2868 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 2869 "add sp, sp, #12 \n\t" \ 2872 : "0" (&_argvec[0]) \ 2873 : "cc", "memory", __CALLER_SAVED_REGS \ 2875 lval = (__typeof__(lval)) _res; \ 2878 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2881 volatile OrigFn _orig = (orig); \ 2882 volatile unsigned long _argvec[9]; \ 2883 volatile unsigned long _res; \ 2884 _argvec[0] = (unsigned long)_orig.nraddr; \ 2885 _argvec[1] = (unsigned long)(arg1); \ 2886 _argvec[2] = (unsigned long)(arg2); \ 2887 _argvec[3] = (unsigned long)(arg3); \ 2888 _argvec[4] = (unsigned long)(arg4); \ 2889 _argvec[5] = (unsigned long)(arg5); \ 2890 _argvec[6] = (unsigned long)(arg6); \ 2891 _argvec[7] = (unsigned long)(arg7); \ 2892 _argvec[8] = (unsigned long)(arg8); \ 2894 "ldr r0, [%1, #20] \n\t" \ 2895 "ldr r1, [%1, #24] \n\t" \ 2896 "ldr r2, [%1, #28] \n\t" \ 2897 "ldr r3, [%1, #32] \n\t" \ 2898 "push {r0, r1, r2, r3} \n\t" \ 2899 "ldr r0, [%1, #4] \n\t" \ 2900 "ldr r1, [%1, #8] \n\t" \ 2901 "ldr r2, [%1, #12] \n\t" \ 2902 "ldr r3, [%1, #16] \n\t" \ 2903 "ldr r4, [%1] \n\t" \ 2904 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 2905 "add sp, sp, #16 \n\t" \ 2908 : "0" (&_argvec[0]) \ 2909 : "cc", "memory", __CALLER_SAVED_REGS \ 2911 lval = (__typeof__(lval)) _res; \ 2914 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2917 volatile OrigFn _orig = (orig); \ 2918 volatile unsigned long _argvec[10]; \ 2919 volatile unsigned long _res; \ 2920 _argvec[0] = (unsigned long)_orig.nraddr; \ 2921 _argvec[1] = (unsigned long)(arg1); \ 2922 _argvec[2] = (unsigned long)(arg2); \ 2923 _argvec[3] = (unsigned long)(arg3); \ 2924 _argvec[4] = (unsigned long)(arg4); \ 2925 _argvec[5] = (unsigned long)(arg5); \ 2926 _argvec[6] = (unsigned long)(arg6); \ 2927 _argvec[7] = (unsigned long)(arg7); \ 2928 _argvec[8] = (unsigned long)(arg8); \ 2929 _argvec[9] = (unsigned long)(arg9); \ 2931 "ldr r0, [%1, #20] \n\t" \ 2932 "ldr r1, [%1, #24] \n\t" \ 2933 "ldr r2, [%1, #28] \n\t" \ 2934 "ldr r3, [%1, #32] \n\t" \ 2935 "ldr r4, [%1, #36] \n\t" \ 2936 "push {r0, r1, r2, r3, r4} \n\t" \ 2937 "ldr r0, [%1, #4] \n\t" \ 2938 "ldr r1, [%1, #8] \n\t" \ 2939 "ldr r2, [%1, #12] \n\t" \ 2940 "ldr r3, [%1, #16] \n\t" \ 2941 "ldr r4, [%1] \n\t" \ 2942 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 2943 "add sp, sp, #20 \n\t" \ 2946 : "0" (&_argvec[0]) \ 2947 : "cc", "memory", __CALLER_SAVED_REGS \ 2949 lval = (__typeof__(lval)) _res; \ 2952 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2953 arg7,arg8,arg9,arg10) \ 2955 volatile OrigFn _orig = (orig); \ 2956 volatile unsigned long _argvec[11]; \ 2957 volatile unsigned long _res; \ 2958 _argvec[0] = (unsigned long)_orig.nraddr; \ 2959 _argvec[1] = (unsigned long)(arg1); \ 2960 _argvec[2] = (unsigned long)(arg2); \ 2961 _argvec[3] = (unsigned long)(arg3); \ 2962 _argvec[4] = (unsigned long)(arg4); \ 2963 _argvec[5] = (unsigned long)(arg5); \ 2964 _argvec[6] = (unsigned long)(arg6); \ 2965 _argvec[7] = (unsigned long)(arg7); \ 2966 _argvec[8] = (unsigned long)(arg8); \ 2967 _argvec[9] = (unsigned long)(arg9); \ 2968 _argvec[10] = (unsigned long)(arg10); \ 2970 "ldr r0, [%1, #40] \n\t" \ 2972 "ldr r0, [%1, #20] \n\t" \ 2973 "ldr r1, [%1, #24] \n\t" \ 2974 "ldr r2, [%1, #28] \n\t" \ 2975 "ldr r3, [%1, #32] \n\t" \ 2976 "ldr r4, [%1, #36] \n\t" \ 2977 "push {r0, r1, r2, r3, r4} \n\t" \ 2978 "ldr r0, [%1, #4] \n\t" \ 2979 "ldr r1, [%1, #8] \n\t" \ 2980 "ldr r2, [%1, #12] \n\t" \ 2981 "ldr r3, [%1, #16] \n\t" \ 2982 "ldr r4, [%1] \n\t" \ 2983 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 2984 "add sp, sp, #24 \n\t" \ 2987 : "0" (&_argvec[0]) \ 2988 : "cc", "memory", __CALLER_SAVED_REGS \ 2990 lval = (__typeof__(lval)) _res; \ 2993 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 2994 arg6,arg7,arg8,arg9,arg10, \ 2997 volatile OrigFn _orig = (orig); \ 2998 volatile unsigned long _argvec[12]; \ 2999 volatile unsigned long _res; \ 3000 _argvec[0] = (unsigned long)_orig.nraddr; \ 3001 _argvec[1] = (unsigned long)(arg1); \ 3002 _argvec[2] = (unsigned long)(arg2); \ 3003 _argvec[3] = (unsigned long)(arg3); \ 3004 _argvec[4] = (unsigned long)(arg4); \ 3005 _argvec[5] = (unsigned long)(arg5); \ 3006 _argvec[6] = (unsigned long)(arg6); \ 3007 _argvec[7] = (unsigned long)(arg7); \ 3008 _argvec[8] = (unsigned long)(arg8); \ 3009 _argvec[9] = (unsigned long)(arg9); \ 3010 _argvec[10] = (unsigned long)(arg10); \ 3011 _argvec[11] = (unsigned long)(arg11); \ 3013 "ldr r0, [%1, #40] \n\t" \ 3014 "ldr r1, [%1, #44] \n\t" \ 3015 "push {r0, r1} \n\t" \ 3016 "ldr r0, [%1, #20] \n\t" \ 3017 "ldr r1, [%1, #24] \n\t" \ 3018 "ldr r2, [%1, #28] \n\t" \ 3019 "ldr r3, [%1, #32] \n\t" \ 3020 "ldr r4, [%1, #36] \n\t" \ 3021 "push {r0, r1, r2, r3, r4} \n\t" \ 3022 "ldr r0, [%1, #4] \n\t" \ 3023 "ldr r1, [%1, #8] \n\t" \ 3024 "ldr r2, [%1, #12] \n\t" \ 3025 "ldr r3, [%1, #16] \n\t" \ 3026 "ldr r4, [%1] \n\t" \ 3027 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3028 "add sp, sp, #28 \n\t" \ 3031 : "0" (&_argvec[0]) \ 3032 : "cc", "memory",__CALLER_SAVED_REGS \ 3034 lval = (__typeof__(lval)) _res; \ 3037 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 3038 arg6,arg7,arg8,arg9,arg10, \ 3041 volatile OrigFn _orig = (orig); \ 3042 volatile unsigned long _argvec[13]; \ 3043 volatile unsigned long _res; \ 3044 _argvec[0] = (unsigned long)_orig.nraddr; \ 3045 _argvec[1] = (unsigned long)(arg1); \ 3046 _argvec[2] = (unsigned long)(arg2); \ 3047 _argvec[3] = (unsigned long)(arg3); \ 3048 _argvec[4] = (unsigned long)(arg4); \ 3049 _argvec[5] = (unsigned long)(arg5); \ 3050 _argvec[6] = (unsigned long)(arg6); \ 3051 _argvec[7] = (unsigned long)(arg7); \ 3052 _argvec[8] = (unsigned long)(arg8); \ 3053 _argvec[9] = (unsigned long)(arg9); \ 3054 _argvec[10] = (unsigned long)(arg10); \ 3055 _argvec[11] = (unsigned long)(arg11); \ 3056 _argvec[12] = (unsigned long)(arg12); \ 3058 "ldr r0, [%1, #40] \n\t" \ 3059 "ldr r1, [%1, #44] \n\t" \ 3060 "ldr r2, [%1, #48] \n\t" \ 3061 "push {r0, r1, r2} \n\t" \ 3062 "ldr r0, [%1, #20] \n\t" \ 3063 "ldr r1, [%1, #24] \n\t" \ 3064 "ldr r2, [%1, #28] \n\t" \ 3065 "ldr r3, [%1, #32] \n\t" \ 3066 "ldr r4, [%1, #36] \n\t" \ 3067 "push {r0, r1, r2, r3, r4} \n\t" \ 3068 "ldr r0, [%1, #4] \n\t" \ 3069 "ldr r1, [%1, #8] \n\t" \ 3070 "ldr r2, [%1, #12] \n\t" \ 3071 "ldr r3, [%1, #16] \n\t" \ 3072 "ldr r4, [%1] \n\t" \ 3073 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3074 "add sp, sp, #32 \n\t" \ 3077 : "0" (&_argvec[0]) \ 3078 : "cc", "memory", __CALLER_SAVED_REGS \ 3080 lval = (__typeof__(lval)) _res; \ 3087 #if defined(PLAT_s390x_linux) 3093 #if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM) 3094 # define __FRAME_POINTER \ 3095 ,"d"(__builtin_dwarf_cfa()) 3096 # define VALGRIND_CFI_PROLOGUE \ 3097 ".cfi_remember_state\n\t" \ 3101 ".cfi_def_cfa r11, 0\n\t" 3102 # define VALGRIND_CFI_EPILOGUE \ 3104 ".cfi_restore_state\n\t" 3106 # define __FRAME_POINTER 3107 # define VALGRIND_CFI_PROLOGUE \ 3109 # define VALGRIND_CFI_EPILOGUE 3119 #define __CALLER_SAVED_REGS "0","1","2","3","4","5","14", \ 3120 "f0","f1","f2","f3","f4","f5","f6","f7" 3123 #define CALL_FN_W_v(lval, orig) \ 3125 volatile OrigFn _orig = (orig); \ 3126 volatile unsigned long _argvec[1]; \ 3127 volatile unsigned long _res; \ 3128 _argvec[0] = (unsigned long)_orig.nraddr; \ 3130 VALGRIND_CFI_PROLOGUE \ 3131 "aghi 15,-160\n\t" \ 3133 VALGRIND_CALL_NOREDIR_R1 \ 3136 VALGRIND_CFI_EPILOGUE \ 3138 : "d" (&_argvec[0]) __FRAME_POINTER \ 3139 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3141 lval = (__typeof__(lval)) _res; \ 3145 #define CALL_FN_W_W(lval, orig, arg1) \ 3147 volatile OrigFn _orig = (orig); \ 3148 volatile unsigned long _argvec[2]; \ 3149 volatile unsigned long _res; \ 3150 _argvec[0] = (unsigned long)_orig.nraddr; \ 3151 _argvec[1] = (unsigned long)arg1; \ 3153 VALGRIND_CFI_PROLOGUE \ 3154 "aghi 15,-160\n\t" \ 3157 VALGRIND_CALL_NOREDIR_R1 \ 3160 VALGRIND_CFI_EPILOGUE \ 3162 : "a" (&_argvec[0]) __FRAME_POINTER \ 3163 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3165 lval = (__typeof__(lval)) _res; \ 3168 #define CALL_FN_W_WW(lval, orig, arg1, arg2) \ 3170 volatile OrigFn _orig = (orig); \ 3171 volatile unsigned long _argvec[3]; \ 3172 volatile unsigned long _res; \ 3173 _argvec[0] = (unsigned long)_orig.nraddr; \ 3174 _argvec[1] = (unsigned long)arg1; \ 3175 _argvec[2] = (unsigned long)arg2; \ 3177 VALGRIND_CFI_PROLOGUE \ 3178 "aghi 15,-160\n\t" \ 3182 VALGRIND_CALL_NOREDIR_R1 \ 3185 VALGRIND_CFI_EPILOGUE \ 3187 : "a" (&_argvec[0]) __FRAME_POINTER \ 3188 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3190 lval = (__typeof__(lval)) _res; \ 3193 #define CALL_FN_W_WWW(lval, orig, arg1, arg2, arg3) \ 3195 volatile OrigFn _orig = (orig); \ 3196 volatile unsigned long _argvec[4]; \ 3197 volatile unsigned long _res; \ 3198 _argvec[0] = (unsigned long)_orig.nraddr; \ 3199 _argvec[1] = (unsigned long)arg1; \ 3200 _argvec[2] = (unsigned long)arg2; \ 3201 _argvec[3] = (unsigned long)arg3; \ 3203 VALGRIND_CFI_PROLOGUE \ 3204 "aghi 15,-160\n\t" \ 3209 VALGRIND_CALL_NOREDIR_R1 \ 3212 VALGRIND_CFI_EPILOGUE \ 3214 : "a" (&_argvec[0]) __FRAME_POINTER \ 3215 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3217 lval = (__typeof__(lval)) _res; \ 3220 #define CALL_FN_W_WWWW(lval, orig, arg1, arg2, arg3, arg4) \ 3222 volatile OrigFn _orig = (orig); \ 3223 volatile unsigned long _argvec[5]; \ 3224 volatile unsigned long _res; \ 3225 _argvec[0] = (unsigned long)_orig.nraddr; \ 3226 _argvec[1] = (unsigned long)arg1; \ 3227 _argvec[2] = (unsigned long)arg2; \ 3228 _argvec[3] = (unsigned long)arg3; \ 3229 _argvec[4] = (unsigned long)arg4; \ 3231 VALGRIND_CFI_PROLOGUE \ 3232 "aghi 15,-160\n\t" \ 3238 VALGRIND_CALL_NOREDIR_R1 \ 3241 VALGRIND_CFI_EPILOGUE \ 3243 : "a" (&_argvec[0]) __FRAME_POINTER \ 3244 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3246 lval = (__typeof__(lval)) _res; \ 3249 #define CALL_FN_W_5W(lval, orig, arg1, arg2, arg3, arg4, arg5) \ 3251 volatile OrigFn _orig = (orig); \ 3252 volatile unsigned long _argvec[6]; \ 3253 volatile unsigned long _res; \ 3254 _argvec[0] = (unsigned long)_orig.nraddr; \ 3255 _argvec[1] = (unsigned long)arg1; \ 3256 _argvec[2] = (unsigned long)arg2; \ 3257 _argvec[3] = (unsigned long)arg3; \ 3258 _argvec[4] = (unsigned long)arg4; \ 3259 _argvec[5] = (unsigned long)arg5; \ 3261 VALGRIND_CFI_PROLOGUE \ 3262 "aghi 15,-160\n\t" \ 3269 VALGRIND_CALL_NOREDIR_R1 \ 3272 VALGRIND_CFI_EPILOGUE \ 3274 : "a" (&_argvec[0]) __FRAME_POINTER \ 3275 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3277 lval = (__typeof__(lval)) _res; \ 3280 #define CALL_FN_W_6W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3283 volatile OrigFn _orig = (orig); \ 3284 volatile unsigned long _argvec[7]; \ 3285 volatile unsigned long _res; \ 3286 _argvec[0] = (unsigned long)_orig.nraddr; \ 3287 _argvec[1] = (unsigned long)arg1; \ 3288 _argvec[2] = (unsigned long)arg2; \ 3289 _argvec[3] = (unsigned long)arg3; \ 3290 _argvec[4] = (unsigned long)arg4; \ 3291 _argvec[5] = (unsigned long)arg5; \ 3292 _argvec[6] = (unsigned long)arg6; \ 3294 VALGRIND_CFI_PROLOGUE \ 3295 "aghi 15,-168\n\t" \ 3301 "mvc 160(8,15), 48(1)\n\t" \ 3303 VALGRIND_CALL_NOREDIR_R1 \ 3306 VALGRIND_CFI_EPILOGUE \ 3308 : "a" (&_argvec[0]) __FRAME_POINTER \ 3309 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3311 lval = (__typeof__(lval)) _res; \ 3314 #define CALL_FN_W_7W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3317 volatile OrigFn _orig = (orig); \ 3318 volatile unsigned long _argvec[8]; \ 3319 volatile unsigned long _res; \ 3320 _argvec[0] = (unsigned long)_orig.nraddr; \ 3321 _argvec[1] = (unsigned long)arg1; \ 3322 _argvec[2] = (unsigned long)arg2; \ 3323 _argvec[3] = (unsigned long)arg3; \ 3324 _argvec[4] = (unsigned long)arg4; \ 3325 _argvec[5] = (unsigned long)arg5; \ 3326 _argvec[6] = (unsigned long)arg6; \ 3327 _argvec[7] = (unsigned long)arg7; \ 3329 VALGRIND_CFI_PROLOGUE \ 3330 "aghi 15,-176\n\t" \ 3336 "mvc 160(8,15), 48(1)\n\t" \ 3337 "mvc 168(8,15), 56(1)\n\t" \ 3339 VALGRIND_CALL_NOREDIR_R1 \ 3342 VALGRIND_CFI_EPILOGUE \ 3344 : "a" (&_argvec[0]) __FRAME_POINTER \ 3345 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3347 lval = (__typeof__(lval)) _res; \ 3350 #define CALL_FN_W_8W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3353 volatile OrigFn _orig = (orig); \ 3354 volatile unsigned long _argvec[9]; \ 3355 volatile unsigned long _res; \ 3356 _argvec[0] = (unsigned long)_orig.nraddr; \ 3357 _argvec[1] = (unsigned long)arg1; \ 3358 _argvec[2] = (unsigned long)arg2; \ 3359 _argvec[3] = (unsigned long)arg3; \ 3360 _argvec[4] = (unsigned long)arg4; \ 3361 _argvec[5] = (unsigned long)arg5; \ 3362 _argvec[6] = (unsigned long)arg6; \ 3363 _argvec[7] = (unsigned long)arg7; \ 3364 _argvec[8] = (unsigned long)arg8; \ 3366 VALGRIND_CFI_PROLOGUE \ 3367 "aghi 15,-184\n\t" \ 3373 "mvc 160(8,15), 48(1)\n\t" \ 3374 "mvc 168(8,15), 56(1)\n\t" \ 3375 "mvc 176(8,15), 64(1)\n\t" \ 3377 VALGRIND_CALL_NOREDIR_R1 \ 3380 VALGRIND_CFI_EPILOGUE \ 3382 : "a" (&_argvec[0]) __FRAME_POINTER \ 3383 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3385 lval = (__typeof__(lval)) _res; \ 3388 #define CALL_FN_W_9W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3389 arg6, arg7 ,arg8, arg9) \ 3391 volatile OrigFn _orig = (orig); \ 3392 volatile unsigned long _argvec[10]; \ 3393 volatile unsigned long _res; \ 3394 _argvec[0] = (unsigned long)_orig.nraddr; \ 3395 _argvec[1] = (unsigned long)arg1; \ 3396 _argvec[2] = (unsigned long)arg2; \ 3397 _argvec[3] = (unsigned long)arg3; \ 3398 _argvec[4] = (unsigned long)arg4; \ 3399 _argvec[5] = (unsigned long)arg5; \ 3400 _argvec[6] = (unsigned long)arg6; \ 3401 _argvec[7] = (unsigned long)arg7; \ 3402 _argvec[8] = (unsigned long)arg8; \ 3403 _argvec[9] = (unsigned long)arg9; \ 3405 VALGRIND_CFI_PROLOGUE \ 3406 "aghi 15,-192\n\t" \ 3412 "mvc 160(8,15), 48(1)\n\t" \ 3413 "mvc 168(8,15), 56(1)\n\t" \ 3414 "mvc 176(8,15), 64(1)\n\t" \ 3415 "mvc 184(8,15), 72(1)\n\t" \ 3417 VALGRIND_CALL_NOREDIR_R1 \ 3420 VALGRIND_CFI_EPILOGUE \ 3422 : "a" (&_argvec[0]) __FRAME_POINTER \ 3423 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3425 lval = (__typeof__(lval)) _res; \ 3428 #define CALL_FN_W_10W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3429 arg6, arg7 ,arg8, arg9, arg10) \ 3431 volatile OrigFn _orig = (orig); \ 3432 volatile unsigned long _argvec[11]; \ 3433 volatile unsigned long _res; \ 3434 _argvec[0] = (unsigned long)_orig.nraddr; \ 3435 _argvec[1] = (unsigned long)arg1; \ 3436 _argvec[2] = (unsigned long)arg2; \ 3437 _argvec[3] = (unsigned long)arg3; \ 3438 _argvec[4] = (unsigned long)arg4; \ 3439 _argvec[5] = (unsigned long)arg5; \ 3440 _argvec[6] = (unsigned long)arg6; \ 3441 _argvec[7] = (unsigned long)arg7; \ 3442 _argvec[8] = (unsigned long)arg8; \ 3443 _argvec[9] = (unsigned long)arg9; \ 3444 _argvec[10] = (unsigned long)arg10; \ 3446 VALGRIND_CFI_PROLOGUE \ 3447 "aghi 15,-200\n\t" \ 3453 "mvc 160(8,15), 48(1)\n\t" \ 3454 "mvc 168(8,15), 56(1)\n\t" \ 3455 "mvc 176(8,15), 64(1)\n\t" \ 3456 "mvc 184(8,15), 72(1)\n\t" \ 3457 "mvc 192(8,15), 80(1)\n\t" \ 3459 VALGRIND_CALL_NOREDIR_R1 \ 3462 VALGRIND_CFI_EPILOGUE \ 3464 : "a" (&_argvec[0]) __FRAME_POINTER \ 3465 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3467 lval = (__typeof__(lval)) _res; \ 3470 #define CALL_FN_W_11W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3471 arg6, arg7 ,arg8, arg9, arg10, arg11) \ 3473 volatile OrigFn _orig = (orig); \ 3474 volatile unsigned long _argvec[12]; \ 3475 volatile unsigned long _res; \ 3476 _argvec[0] = (unsigned long)_orig.nraddr; \ 3477 _argvec[1] = (unsigned long)arg1; \ 3478 _argvec[2] = (unsigned long)arg2; \ 3479 _argvec[3] = (unsigned long)arg3; \ 3480 _argvec[4] = (unsigned long)arg4; \ 3481 _argvec[5] = (unsigned long)arg5; \ 3482 _argvec[6] = (unsigned long)arg6; \ 3483 _argvec[7] = (unsigned long)arg7; \ 3484 _argvec[8] = (unsigned long)arg8; \ 3485 _argvec[9] = (unsigned long)arg9; \ 3486 _argvec[10] = (unsigned long)arg10; \ 3487 _argvec[11] = (unsigned long)arg11; \ 3489 VALGRIND_CFI_PROLOGUE \ 3490 "aghi 15,-208\n\t" \ 3496 "mvc 160(8,15), 48(1)\n\t" \ 3497 "mvc 168(8,15), 56(1)\n\t" \ 3498 "mvc 176(8,15), 64(1)\n\t" \ 3499 "mvc 184(8,15), 72(1)\n\t" \ 3500 "mvc 192(8,15), 80(1)\n\t" \ 3501 "mvc 200(8,15), 88(1)\n\t" \ 3503 VALGRIND_CALL_NOREDIR_R1 \ 3506 VALGRIND_CFI_EPILOGUE \ 3508 : "a" (&_argvec[0]) __FRAME_POINTER \ 3509 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3511 lval = (__typeof__(lval)) _res; \ 3514 #define CALL_FN_W_12W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3515 arg6, arg7 ,arg8, arg9, arg10, arg11, arg12)\ 3517 volatile OrigFn _orig = (orig); \ 3518 volatile unsigned long _argvec[13]; \ 3519 volatile unsigned long _res; \ 3520 _argvec[0] = (unsigned long)_orig.nraddr; \ 3521 _argvec[1] = (unsigned long)arg1; \ 3522 _argvec[2] = (unsigned long)arg2; \ 3523 _argvec[3] = (unsigned long)arg3; \ 3524 _argvec[4] = (unsigned long)arg4; \ 3525 _argvec[5] = (unsigned long)arg5; \ 3526 _argvec[6] = (unsigned long)arg6; \ 3527 _argvec[7] = (unsigned long)arg7; \ 3528 _argvec[8] = (unsigned long)arg8; \ 3529 _argvec[9] = (unsigned long)arg9; \ 3530 _argvec[10] = (unsigned long)arg10; \ 3531 _argvec[11] = (unsigned long)arg11; \ 3532 _argvec[12] = (unsigned long)arg12; \ 3534 VALGRIND_CFI_PROLOGUE \ 3535 "aghi 15,-216\n\t" \ 3541 "mvc 160(8,15), 48(1)\n\t" \ 3542 "mvc 168(8,15), 56(1)\n\t" \ 3543 "mvc 176(8,15), 64(1)\n\t" \ 3544 "mvc 184(8,15), 72(1)\n\t" \ 3545 "mvc 192(8,15), 80(1)\n\t" \ 3546 "mvc 200(8,15), 88(1)\n\t" \ 3547 "mvc 208(8,15), 96(1)\n\t" \ 3549 VALGRIND_CALL_NOREDIR_R1 \ 3552 VALGRIND_CFI_EPILOGUE \ 3554 : "a" (&_argvec[0]) __FRAME_POINTER \ 3555 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3557 lval = (__typeof__(lval)) _res; \ 3579 #define VG_USERREQ_TOOL_BASE(a,b) \ 3580 ((unsigned int)(((a)&0xff) << 24 | ((b)&0xff) << 16)) 3581 #define VG_IS_TOOL_USERREQ(a, b, v) \ 3582 (VG_USERREQ_TOOL_BASE(a,b) == ((v) & 0xffff0000)) 3589 enum { VG_USERREQ__RUNNING_ON_VALGRIND = 0x1001,
3590 VG_USERREQ__DISCARD_TRANSLATIONS = 0x1002,
3597 VG_USERREQ__CLIENT_CALL0 = 0x1101,
3598 VG_USERREQ__CLIENT_CALL1 = 0x1102,
3599 VG_USERREQ__CLIENT_CALL2 = 0x1103,
3600 VG_USERREQ__CLIENT_CALL3 = 0x1104,
3605 VG_USERREQ__COUNT_ERRORS = 0x1201,
3609 VG_USERREQ__GDB_MONITOR_COMMAND = 0x1202,
3613 VG_USERREQ__MALLOCLIKE_BLOCK = 0x1301,
3614 VG_USERREQ__RESIZEINPLACE_BLOCK = 0x130b,
3615 VG_USERREQ__FREELIKE_BLOCK = 0x1302,
3617 VG_USERREQ__CREATE_MEMPOOL = 0x1303,
3618 VG_USERREQ__DESTROY_MEMPOOL = 0x1304,
3619 VG_USERREQ__MEMPOOL_ALLOC = 0x1305,
3620 VG_USERREQ__MEMPOOL_FREE = 0x1306,
3621 VG_USERREQ__MEMPOOL_TRIM = 0x1307,
3622 VG_USERREQ__MOVE_MEMPOOL = 0x1308,
3623 VG_USERREQ__MEMPOOL_CHANGE = 0x1309,
3624 VG_USERREQ__MEMPOOL_EXISTS = 0x130a,
3633 VG_USERREQ__PRINTF = 0x1401,
3634 VG_USERREQ__PRINTF_BACKTRACE = 0x1402,
3636 VG_USERREQ__PRINTF_VALIST_BY_REF = 0x1403,
3637 VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF = 0x1404,
3640 VG_USERREQ__STACK_REGISTER = 0x1501,
3641 VG_USERREQ__STACK_DEREGISTER = 0x1502,
3642 VG_USERREQ__STACK_CHANGE = 0x1503,
3645 VG_USERREQ__LOAD_PDB_DEBUGINFO = 0x1601,
3648 VG_USERREQ__MAP_IP_TO_SRCLOC = 0x1701
3651 #if !defined(__GNUC__) 3652 # define __extension__ 3660 #define RUNNING_ON_VALGRIND \ 3661 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 3662 VG_USERREQ__RUNNING_ON_VALGRIND, \ 3670 #define VALGRIND_DISCARD_TRANSLATIONS(_qzz_addr,_qzz_len) \ 3671 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 3672 VG_USERREQ__DISCARD_TRANSLATIONS, \ 3673 _qzz_addr, _qzz_len, 0, 0, 0) 3681 #if defined(__GNUC__) || defined(__INTEL_COMPILER) 3684 static int VALGRIND_PRINTF(
const char *format, ...)
3685 __attribute__((format(__printf__, 1, 2), __unused__));
3688 #if defined(_MSC_VER) 3691 VALGRIND_PRINTF(
const char *format, ...)
3693 #if defined(NVALGRIND) 3696 #if defined(_MSC_VER) 3699 unsigned long _qzz_res;
3702 va_start(vargs, format);
3703 #if defined(_MSC_VER) 3704 _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0,
3705 VG_USERREQ__PRINTF_VALIST_BY_REF,
3710 _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0,
3711 VG_USERREQ__PRINTF_VALIST_BY_REF,
3712 (
unsigned long)format,
3713 (
unsigned long)&vargs,
3717 return (
int)_qzz_res;
3721 #if defined(__GNUC__) || defined(__INTEL_COMPILER) 3722 static int VALGRIND_PRINTF_BACKTRACE(
const char *format, ...)
3723 __attribute__((format(__printf__, 1, 2), __unused__));
3726 #if defined(_MSC_VER) 3729 VALGRIND_PRINTF_BACKTRACE(
const char *format, ...)
3731 #if defined(NVALGRIND) 3734 #if defined(_MSC_VER) 3737 unsigned long _qzz_res;
3740 va_start(vargs, format);
3741 #if defined(_MSC_VER) 3742 _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0,
3743 VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF,
3748 _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0,
3749 VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF,
3750 (
unsigned long)format,
3751 (
unsigned long)&vargs,
3755 return (
int)_qzz_res;
3783 #define VALGRIND_NON_SIMD_CALL0(_qyy_fn) \ 3784 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 3785 VG_USERREQ__CLIENT_CALL0, \ 3789 #define VALGRIND_NON_SIMD_CALL1(_qyy_fn, _qyy_arg1) \ 3790 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 3791 VG_USERREQ__CLIENT_CALL1, \ 3795 #define VALGRIND_NON_SIMD_CALL2(_qyy_fn, _qyy_arg1, _qyy_arg2) \ 3796 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 3797 VG_USERREQ__CLIENT_CALL2, \ 3799 _qyy_arg1, _qyy_arg2, 0, 0) 3801 #define VALGRIND_NON_SIMD_CALL3(_qyy_fn, _qyy_arg1, _qyy_arg2, _qyy_arg3) \ 3802 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 3803 VG_USERREQ__CLIENT_CALL3, \ 3805 _qyy_arg1, _qyy_arg2, \ 3812 #define VALGRIND_COUNT_ERRORS \ 3813 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 3815 VG_USERREQ__COUNT_ERRORS, \ 3919 #define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed) \ 3920 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 3921 VG_USERREQ__MALLOCLIKE_BLOCK, \ 3922 addr, sizeB, rzB, is_zeroed, 0) 3927 #define VALGRIND_RESIZEINPLACE_BLOCK(addr, oldSizeB, newSizeB, rzB) \ 3928 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 3929 VG_USERREQ__RESIZEINPLACE_BLOCK, \ 3930 addr, oldSizeB, newSizeB, rzB, 0) 3935 #define VALGRIND_FREELIKE_BLOCK(addr, rzB) \ 3936 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 3937 VG_USERREQ__FREELIKE_BLOCK, \ 3941 #define VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed) \ 3942 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 3943 VG_USERREQ__CREATE_MEMPOOL, \ 3944 pool, rzB, is_zeroed, 0, 0) 3947 #define VALGRIND_DESTROY_MEMPOOL(pool) \ 3948 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 3949 VG_USERREQ__DESTROY_MEMPOOL, \ 3953 #define VALGRIND_MEMPOOL_ALLOC(pool, addr, size) \ 3954 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 3955 VG_USERREQ__MEMPOOL_ALLOC, \ 3956 pool, addr, size, 0, 0) 3959 #define VALGRIND_MEMPOOL_FREE(pool, addr) \ 3960 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 3961 VG_USERREQ__MEMPOOL_FREE, \ 3962 pool, addr, 0, 0, 0) 3965 #define VALGRIND_MEMPOOL_TRIM(pool, addr, size) \ 3966 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 3967 VG_USERREQ__MEMPOOL_TRIM, \ 3968 pool, addr, size, 0, 0) 3971 #define VALGRIND_MOVE_MEMPOOL(poolA, poolB) \ 3972 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 3973 VG_USERREQ__MOVE_MEMPOOL, \ 3974 poolA, poolB, 0, 0, 0) 3977 #define VALGRIND_MEMPOOL_CHANGE(pool, addrA, addrB, size) \ 3978 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 3979 VG_USERREQ__MEMPOOL_CHANGE, \ 3980 pool, addrA, addrB, size, 0) 3983 #define VALGRIND_MEMPOOL_EXISTS(pool) \ 3984 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 3985 VG_USERREQ__MEMPOOL_EXISTS, \ 3989 #define VALGRIND_STACK_REGISTER(start, end) \ 3990 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 3991 VG_USERREQ__STACK_REGISTER, \ 3992 start, end, 0, 0, 0) 3996 #define VALGRIND_STACK_DEREGISTER(id) \ 3997 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 3998 VG_USERREQ__STACK_DEREGISTER, \ 4002 #define VALGRIND_STACK_CHANGE(id, start, end) \ 4003 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 4004 VG_USERREQ__STACK_CHANGE, \ 4005 id, start, end, 0, 0) 4008 #define VALGRIND_LOAD_PDB_DEBUGINFO(fd, ptr, total_size, delta) \ 4009 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 4010 VG_USERREQ__LOAD_PDB_DEBUGINFO, \ 4011 fd, ptr, total_size, delta, 0) 4017 #define VALGRIND_MAP_IP_TO_SRCLOC(addr, buf64) \ 4018 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 4019 VG_USERREQ__MAP_IP_TO_SRCLOC, \ 4020 addr, buf64, 0, 0, 0) 4023 #undef PLAT_x86_darwin 4024 #undef PLAT_amd64_darwin 4025 #undef PLAT_x86_win32 4026 #undef PLAT_x86_linux 4027 #undef PLAT_amd64_linux 4028 #undef PLAT_ppc32_linux 4029 #undef PLAT_ppc64_linux 4030 #undef PLAT_arm_linux 4031 #undef PLAT_s390x_linux