91 #define __VALGRIND_MAJOR__ 3 92 #define __VALGRIND_MINOR__ 8 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_ppc64_linux 119 #undef PLAT_arm_linux 120 #undef PLAT_s390x_linux 121 #undef PLAT_mips32_linux 122 #undef PLAT_mips64_linux 125 #if defined(__APPLE__) && defined(__i386__) 126 # define PLAT_x86_darwin 1 127 #elif defined(__APPLE__) && defined(__x86_64__) 128 # define PLAT_amd64_darwin 1 129 #elif defined(__MINGW32__) || defined(__CYGWIN32__) \ 130 || (defined(_WIN32) && defined(_M_IX86)) 131 # define PLAT_x86_win32 1 132 #elif defined(__MINGW64__) || (defined(_WIN64) && defined(_M_X64)) 133 # define PLAT_amd64_win64 1 134 #elif defined(__linux__) && defined(__i386__) 135 # define PLAT_x86_linux 1 136 #elif defined(__linux__) && defined(__x86_64__) 137 # define PLAT_amd64_linux 1 138 #elif defined(__linux__) && defined(__powerpc__) && !defined(__powerpc64__) 139 # define PLAT_ppc32_linux 1 140 #elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) 141 # define PLAT_ppc64_linux 1 142 #elif defined(__linux__) && defined(__arm__) 143 # define PLAT_arm_linux 1 144 #elif defined(__linux__) && defined(__s390__) && defined(__s390x__) 145 # define PLAT_s390x_linux 1 146 #elif defined(__linux__) && defined(__mips__) 148 # define PLAT_mips64_linux 1 150 # define PLAT_mips32_linux 1 155 # if !defined(NVALGRIND) 179 #define VALGRIND_DO_CLIENT_REQUEST(_zzq_rlval, _zzq_default, \ 180 _zzq_request, _zzq_arg1, _zzq_arg2, \ 181 _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 182 do { (_zzq_rlval) = VALGRIND_DO_CLIENT_REQUEST_EXPR((_zzq_default), \ 183 (_zzq_request), (_zzq_arg1), (_zzq_arg2), \ 184 (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0) 186 #define VALGRIND_DO_CLIENT_REQUEST_STMT(_zzq_request, _zzq_arg1, \ 187 _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 188 do { (void) VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 189 (_zzq_request), (_zzq_arg1), (_zzq_arg2), \ 190 (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0) 192 #if defined(NVALGRIND) 197 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 198 _zzq_default, _zzq_request, \ 199 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 241 #if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) \ 242 || (defined(PLAT_x86_win32) && defined(__GNUC__)) 250 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 251 "roll $3, %%edi ; roll $13, %%edi\n\t" \ 252 "roll $29, %%edi ; roll $19, %%edi\n\t" 254 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 255 _zzq_default, _zzq_request, \ 256 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 258 ({volatile unsigned int _zzq_args[6]; \ 259 volatile unsigned int _zzq_result; \ 260 _zzq_args[0] = (unsigned int)(_zzq_request); \ 261 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 262 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 263 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 264 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 265 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 266 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 268 "xchgl %%ebx,%%ebx" \ 269 : "=d" (_zzq_result) \ 270 : "a" (&_zzq_args[0]), "0" (_zzq_default) \ 276 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 277 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 278 volatile unsigned int __addr; \ 279 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 281 "xchgl %%ecx,%%ecx" \ 286 _zzq_orig->nraddr = __addr; \ 289 #define VALGRIND_CALL_NOREDIR_EAX \ 290 __SPECIAL_INSTRUCTION_PREAMBLE \ 292 "xchgl %%edx,%%edx\n\t" 294 #define VALGRIND_VEX_INJECT_IR() \ 296 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 297 "xchgl %%edi,%%edi\n\t" \ 298 : : : "cc", "memory" \ 306 #if defined(PLAT_x86_win32) && !defined(__GNUC__) 314 #if defined(_MSC_VER) 316 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 317 __asm rol edi, 3 __asm rol edi, 13 \ 318 __asm rol edi, 29 __asm rol edi, 19 320 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 321 _zzq_default, _zzq_request, \ 322 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 323 valgrind_do_client_request_expr((uintptr_t)(_zzq_default), \ 324 (uintptr_t)(_zzq_request), (uintptr_t)(_zzq_arg1), \ 325 (uintptr_t)(_zzq_arg2), (uintptr_t)(_zzq_arg3), \ 326 (uintptr_t)(_zzq_arg4), (uintptr_t)(_zzq_arg5)) 328 static __inline uintptr_t
329 valgrind_do_client_request_expr(uintptr_t _zzq_default, uintptr_t _zzq_request,
330 uintptr_t _zzq_arg1, uintptr_t _zzq_arg2,
331 uintptr_t _zzq_arg3, uintptr_t _zzq_arg4,
334 volatile uintptr_t _zzq_args[6];
335 volatile unsigned int _zzq_result;
336 _zzq_args[0] = (uintptr_t)(_zzq_request);
337 _zzq_args[1] = (uintptr_t)(_zzq_arg1);
338 _zzq_args[2] = (uintptr_t)(_zzq_arg2);
339 _zzq_args[3] = (uintptr_t)(_zzq_arg3);
340 _zzq_args[4] = (uintptr_t)(_zzq_arg4);
341 _zzq_args[5] = (uintptr_t)(_zzq_arg5);
342 __asm { __asm lea eax, _zzq_args __asm mov edx, _zzq_default
343 __SPECIAL_INSTRUCTION_PREAMBLE
346 __asm mov _zzq_result, edx
351 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 352 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 353 volatile unsigned int __addr; \ 354 __asm { __SPECIAL_INSTRUCTION_PREAMBLE \ 357 __asm mov __addr, eax \ 359 _zzq_orig->nraddr = __addr; \ 362 #define VALGRIND_CALL_NOREDIR_EAX ERROR 364 #define VALGRIND_VEX_INJECT_IR() \ 366 __asm { __SPECIAL_INSTRUCTION_PREAMBLE \ 372 #error Unsupported compiler. 379 #if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) 383 unsigned long long int nraddr;
387 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 388 "rolq $3, %%rdi ; rolq $13, %%rdi\n\t" \ 389 "rolq $61, %%rdi ; rolq $51, %%rdi\n\t" 391 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 392 _zzq_default, _zzq_request, \ 393 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 395 ({ volatile unsigned long long int _zzq_args[6]; \ 396 volatile unsigned long long int _zzq_result; \ 397 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 398 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 399 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 400 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 401 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 402 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 403 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 405 "xchgq %%rbx,%%rbx" \ 406 : "=d" (_zzq_result) \ 407 : "a" (&_zzq_args[0]), "0" (_zzq_default) \ 413 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 414 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 415 volatile unsigned long long int __addr; \ 416 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 418 "xchgq %%rcx,%%rcx" \ 423 _zzq_orig->nraddr = __addr; \ 426 #define VALGRIND_CALL_NOREDIR_RAX \ 427 __SPECIAL_INSTRUCTION_PREAMBLE \ 429 "xchgq %%rdx,%%rdx\n\t" 431 #define VALGRIND_VEX_INJECT_IR() \ 433 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 434 "xchgq %%rdi,%%rdi\n\t" \ 435 : : : "cc", "memory" \ 443 #if defined(PLAT_ppc32_linux) 451 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 452 "rlwinm 0,0,3,0,0 ; rlwinm 0,0,13,0,0\n\t" \ 453 "rlwinm 0,0,29,0,0 ; rlwinm 0,0,19,0,0\n\t" 455 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 456 _zzq_default, _zzq_request, \ 457 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 460 ({ unsigned int _zzq_args[6]; \ 461 unsigned int _zzq_result; \ 462 unsigned int* _zzq_ptr; \ 463 _zzq_args[0] = (unsigned int)(_zzq_request); \ 464 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 465 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 466 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 467 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 468 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 469 _zzq_ptr = _zzq_args; \ 470 __asm__ volatile("mr 3,%1\n\t" \ 472 __SPECIAL_INSTRUCTION_PREAMBLE \ 476 : "=b" (_zzq_result) \ 477 : "b" (_zzq_default), "b" (_zzq_ptr) \ 478 : "cc", "memory", "r3", "r4"); \ 482 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 483 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 484 unsigned int __addr; \ 485 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 491 : "cc", "memory", "r3" \ 493 _zzq_orig->nraddr = __addr; \ 496 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 497 __SPECIAL_INSTRUCTION_PREAMBLE \ 501 #define VALGRIND_VEX_INJECT_IR() \ 503 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 512 #if defined(PLAT_ppc64_linux) 516 unsigned long long int nraddr;
517 unsigned long long int r2;
521 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 522 "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ 523 "rotldi 0,0,61 ; rotldi 0,0,51\n\t" 525 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 526 _zzq_default, _zzq_request, \ 527 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 530 ({ unsigned long long int _zzq_args[6]; \ 531 unsigned long long int _zzq_result; \ 532 unsigned long long int* _zzq_ptr; \ 533 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 534 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 535 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 536 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 537 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 538 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 539 _zzq_ptr = _zzq_args; \ 540 __asm__ volatile("mr 3,%1\n\t" \ 542 __SPECIAL_INSTRUCTION_PREAMBLE \ 546 : "=b" (_zzq_result) \ 547 : "b" (_zzq_default), "b" (_zzq_ptr) \ 548 : "cc", "memory", "r3", "r4"); \ 552 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 553 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 554 unsigned long long int __addr; \ 555 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 561 : "cc", "memory", "r3" \ 563 _zzq_orig->nraddr = __addr; \ 564 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 570 : "cc", "memory", "r3" \ 572 _zzq_orig->r2 = __addr; \ 575 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 576 __SPECIAL_INSTRUCTION_PREAMBLE \ 580 #define VALGRIND_VEX_INJECT_IR() \ 582 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 591 #if defined(PLAT_arm_linux) 599 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 600 "mov r12, r12, ror #3 ; mov r12, r12, ror #13 \n\t" \ 601 "mov r12, r12, ror #29 ; mov r12, r12, ror #19 \n\t" 603 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 604 _zzq_default, _zzq_request, \ 605 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 608 ({volatile unsigned int _zzq_args[6]; \ 609 volatile unsigned int _zzq_result; \ 610 _zzq_args[0] = (unsigned int)(_zzq_request); \ 611 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 612 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 613 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 614 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 615 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 616 __asm__ volatile("mov r3, %1\n\t" \ 618 __SPECIAL_INSTRUCTION_PREAMBLE \ 620 "orr r10, r10, r10\n\t" \ 622 : "=r" (_zzq_result) \ 623 : "r" (_zzq_default), "r" (&_zzq_args[0]) \ 624 : "cc","memory", "r3", "r4"); \ 628 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 629 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 630 unsigned int __addr; \ 631 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 633 "orr r11, r11, r11\n\t" \ 637 : "cc", "memory", "r3" \ 639 _zzq_orig->nraddr = __addr; \ 642 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 643 __SPECIAL_INSTRUCTION_PREAMBLE \ 645 "orr r12, r12, r12\n\t" 647 #define VALGRIND_VEX_INJECT_IR() \ 649 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 650 "orr r9, r9, r9\n\t" \ 651 : : : "cc", "memory" \ 659 #if defined(PLAT_s390x_linux) 663 unsigned long long int nraddr;
671 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 677 #define __CLIENT_REQUEST_CODE "lr 2,2\n\t" 678 #define __GET_NR_CONTEXT_CODE "lr 3,3\n\t" 679 #define __CALL_NO_REDIR_CODE "lr 4,4\n\t" 680 #define __VEX_INJECT_IR_CODE "lr 5,5\n\t" 682 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 683 _zzq_default, _zzq_request, \ 684 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 686 ({volatile unsigned long long int _zzq_args[6]; \ 687 volatile unsigned long long int _zzq_result; \ 688 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 689 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 690 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 691 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 692 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 693 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 698 __SPECIAL_INSTRUCTION_PREAMBLE \ 699 __CLIENT_REQUEST_CODE \ 702 : "=d" (_zzq_result) \ 703 : "a" (&_zzq_args[0]), "0" (_zzq_default) \ 704 : "cc", "2", "3", "memory" \ 709 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 710 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 711 volatile unsigned long long int __addr; \ 712 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 713 __GET_NR_CONTEXT_CODE \ 717 : "cc", "3", "memory" \ 719 _zzq_orig->nraddr = __addr; \ 722 #define VALGRIND_CALL_NOREDIR_R1 \ 723 __SPECIAL_INSTRUCTION_PREAMBLE \ 726 #define VALGRIND_VEX_INJECT_IR() \ 728 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 729 __VEX_INJECT_IR_CODE); \ 736 #if defined(PLAT_mips32_linux) 748 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 749 "srl $0, $0, 13\n\t" \ 750 "srl $0, $0, 29\n\t" \ 751 "srl $0, $0, 3\n\t" \ 754 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 755 _zzq_default, _zzq_request, \ 756 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 758 ({ volatile unsigned int _zzq_args[6]; \ 759 volatile unsigned int _zzq_result; \ 760 _zzq_args[0] = (unsigned int)(_zzq_request); \ 761 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 762 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 763 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 764 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 765 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 766 __asm__ volatile("move $11, %1\n\t" \ 768 __SPECIAL_INSTRUCTION_PREAMBLE \ 770 "or $13, $13, $13\n\t" \ 772 : "=r" (_zzq_result) \ 773 : "r" (_zzq_default), "r" (&_zzq_args[0]) \ 778 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 779 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 780 volatile unsigned int __addr; \ 781 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 783 "or $14, $14, $14\n\t" \ 789 _zzq_orig->nraddr = __addr; \ 792 #define VALGRIND_CALL_NOREDIR_T9 \ 793 __SPECIAL_INSTRUCTION_PREAMBLE \ 795 "or $15, $15, $15\n\t" 797 #define VALGRIND_VEX_INJECT_IR() \ 799 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 800 "or $11, $11, $11\n\t" \ 809 #if defined(PLAT_mips64_linux) 813 unsigned long long nraddr;
821 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 822 "dsll $0,$0, 3 ; dsll $0,$0,13\n\t" \ 823 "dsll $0,$0,29 ; dsll $0,$0,19\n\t" 825 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 826 _zzq_default, _zzq_request, \ 827 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 829 ({ volatile unsigned long long int _zzq_args[6]; \ 830 volatile unsigned long long int _zzq_result; \ 831 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 832 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 833 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 834 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 835 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 836 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 837 __asm__ volatile("move $11, %1\n\t" \ 839 __SPECIAL_INSTRUCTION_PREAMBLE \ 841 "or $13, $13, $13\n\t" \ 843 : "=r" (_zzq_result) \ 844 : "r" (_zzq_default), "r" (&_zzq_args[0]) \ 849 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 850 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 851 volatile unsigned long long int __addr; \ 852 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 854 "or $14, $14, $14\n\t" \ 859 _zzq_orig->nraddr = __addr; \ 862 #define VALGRIND_CALL_NOREDIR_T9 \ 863 __SPECIAL_INSTRUCTION_PREAMBLE \ 865 "or $15, $15, $15\n\t" 867 #define VALGRIND_VEX_INJECT_IR() \ 869 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 870 "or $11, $11, $11\n\t" \ 912 #define VG_CONCAT4(_aa,_bb,_cc,_dd) _aa##_bb##_cc##_dd 914 #define I_WRAP_SONAME_FNNAME_ZU(soname,fnname) \ 915 VG_CONCAT4(_vgw00000ZU_,soname,_,fnname) 917 #define I_WRAP_SONAME_FNNAME_ZZ(soname,fnname) \ 918 VG_CONCAT4(_vgw00000ZZ_,soname,_,fnname) 924 #define VALGRIND_GET_ORIG_FN(_lval) VALGRIND_GET_NR_CONTEXT(_lval) 932 #define I_REPLACE_SONAME_FNNAME_ZU(soname,fnname) \ 933 VG_CONCAT4(_vgr00000ZU_,soname,_,fnname) 935 #define I_REPLACE_SONAME_FNNAME_ZZ(soname,fnname) \ 936 VG_CONCAT4(_vgr00000ZZ_,soname,_,fnname) 941 #define CALL_FN_v_v(fnptr) \ 942 do { volatile unsigned long _junk; \ 943 CALL_FN_W_v(_junk,fnptr); } while (0) 945 #define CALL_FN_v_W(fnptr, arg1) \ 946 do { volatile unsigned long _junk; \ 947 CALL_FN_W_W(_junk,fnptr,arg1); } while (0) 949 #define CALL_FN_v_WW(fnptr, arg1,arg2) \ 950 do { volatile unsigned long _junk; \ 951 CALL_FN_W_WW(_junk,fnptr,arg1,arg2); } while (0) 953 #define CALL_FN_v_WWW(fnptr, arg1,arg2,arg3) \ 954 do { volatile unsigned long _junk; \ 955 CALL_FN_W_WWW(_junk,fnptr,arg1,arg2,arg3); } while (0) 957 #define CALL_FN_v_WWWW(fnptr, arg1,arg2,arg3,arg4) \ 958 do { volatile unsigned long _junk; \ 959 CALL_FN_W_WWWW(_junk,fnptr,arg1,arg2,arg3,arg4); } while (0) 961 #define CALL_FN_v_5W(fnptr, arg1,arg2,arg3,arg4,arg5) \ 962 do { volatile unsigned long _junk; \ 963 CALL_FN_W_5W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5); } while (0) 965 #define CALL_FN_v_6W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6) \ 966 do { volatile unsigned long _junk; \ 967 CALL_FN_W_6W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6); } while (0) 969 #define CALL_FN_v_7W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6,arg7) \ 970 do { volatile unsigned long _junk; \ 971 CALL_FN_W_7W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6,arg7); } while (0) 975 #if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) 979 #define __CALLER_SAVED_REGS "ecx", "edx" 986 #define VALGRIND_ALIGN_STACK \ 987 "movl %%esp,%%edi\n\t" \ 988 "andl $0xfffffff0,%%esp\n\t" 989 #define VALGRIND_RESTORE_STACK \ 990 "movl %%edi,%%esp\n\t" 995 #define CALL_FN_W_v(lval, orig) \ 997 volatile OrigFn _orig = (orig); \ 998 volatile unsigned long _argvec[1]; \ 999 volatile unsigned long _res; \ 1000 _argvec[0] = (unsigned long)_orig.nraddr; \ 1002 VALGRIND_ALIGN_STACK \ 1003 "movl (%%eax), %%eax\n\t" \ 1004 VALGRIND_CALL_NOREDIR_EAX \ 1005 VALGRIND_RESTORE_STACK \ 1007 : "a" (&_argvec[0]) \ 1008 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1010 lval = (__typeof__(lval)) _res; \ 1013 #define CALL_FN_W_W(lval, orig, arg1) \ 1015 volatile OrigFn _orig = (orig); \ 1016 volatile unsigned long _argvec[2]; \ 1017 volatile unsigned long _res; \ 1018 _argvec[0] = (unsigned long)_orig.nraddr; \ 1019 _argvec[1] = (unsigned long)(arg1); \ 1021 VALGRIND_ALIGN_STACK \ 1022 "subl $12, %%esp\n\t" \ 1023 "pushl 4(%%eax)\n\t" \ 1024 "movl (%%eax), %%eax\n\t" \ 1025 VALGRIND_CALL_NOREDIR_EAX \ 1026 VALGRIND_RESTORE_STACK \ 1028 : "a" (&_argvec[0]) \ 1029 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1031 lval = (__typeof__(lval)) _res; \ 1034 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 1036 volatile OrigFn _orig = (orig); \ 1037 volatile unsigned long _argvec[3]; \ 1038 volatile unsigned long _res; \ 1039 _argvec[0] = (unsigned long)_orig.nraddr; \ 1040 _argvec[1] = (unsigned long)(arg1); \ 1041 _argvec[2] = (unsigned long)(arg2); \ 1043 VALGRIND_ALIGN_STACK \ 1044 "subl $8, %%esp\n\t" \ 1045 "pushl 8(%%eax)\n\t" \ 1046 "pushl 4(%%eax)\n\t" \ 1047 "movl (%%eax), %%eax\n\t" \ 1048 VALGRIND_CALL_NOREDIR_EAX \ 1049 VALGRIND_RESTORE_STACK \ 1051 : "a" (&_argvec[0]) \ 1052 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1054 lval = (__typeof__(lval)) _res; \ 1057 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 1059 volatile OrigFn _orig = (orig); \ 1060 volatile unsigned long _argvec[4]; \ 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); \ 1067 VALGRIND_ALIGN_STACK \ 1068 "subl $4, %%esp\n\t" \ 1069 "pushl 12(%%eax)\n\t" \ 1070 "pushl 8(%%eax)\n\t" \ 1071 "pushl 4(%%eax)\n\t" \ 1072 "movl (%%eax), %%eax\n\t" \ 1073 VALGRIND_CALL_NOREDIR_EAX \ 1074 VALGRIND_RESTORE_STACK \ 1076 : "a" (&_argvec[0]) \ 1077 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1079 lval = (__typeof__(lval)) _res; \ 1082 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 1084 volatile OrigFn _orig = (orig); \ 1085 volatile unsigned long _argvec[5]; \ 1086 volatile unsigned long _res; \ 1087 _argvec[0] = (unsigned long)_orig.nraddr; \ 1088 _argvec[1] = (unsigned long)(arg1); \ 1089 _argvec[2] = (unsigned long)(arg2); \ 1090 _argvec[3] = (unsigned long)(arg3); \ 1091 _argvec[4] = (unsigned long)(arg4); \ 1093 VALGRIND_ALIGN_STACK \ 1094 "pushl 16(%%eax)\n\t" \ 1095 "pushl 12(%%eax)\n\t" \ 1096 "pushl 8(%%eax)\n\t" \ 1097 "pushl 4(%%eax)\n\t" \ 1098 "movl (%%eax), %%eax\n\t" \ 1099 VALGRIND_CALL_NOREDIR_EAX \ 1100 VALGRIND_RESTORE_STACK \ 1102 : "a" (&_argvec[0]) \ 1103 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1105 lval = (__typeof__(lval)) _res; \ 1108 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 1110 volatile OrigFn _orig = (orig); \ 1111 volatile unsigned long _argvec[6]; \ 1112 volatile unsigned long _res; \ 1113 _argvec[0] = (unsigned long)_orig.nraddr; \ 1114 _argvec[1] = (unsigned long)(arg1); \ 1115 _argvec[2] = (unsigned long)(arg2); \ 1116 _argvec[3] = (unsigned long)(arg3); \ 1117 _argvec[4] = (unsigned long)(arg4); \ 1118 _argvec[5] = (unsigned long)(arg5); \ 1120 VALGRIND_ALIGN_STACK \ 1121 "subl $12, %%esp\n\t" \ 1122 "pushl 20(%%eax)\n\t" \ 1123 "pushl 16(%%eax)\n\t" \ 1124 "pushl 12(%%eax)\n\t" \ 1125 "pushl 8(%%eax)\n\t" \ 1126 "pushl 4(%%eax)\n\t" \ 1127 "movl (%%eax), %%eax\n\t" \ 1128 VALGRIND_CALL_NOREDIR_EAX \ 1129 VALGRIND_RESTORE_STACK \ 1131 : "a" (&_argvec[0]) \ 1132 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1134 lval = (__typeof__(lval)) _res; \ 1137 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 1139 volatile OrigFn _orig = (orig); \ 1140 volatile unsigned long _argvec[7]; \ 1141 volatile unsigned long _res; \ 1142 _argvec[0] = (unsigned long)_orig.nraddr; \ 1143 _argvec[1] = (unsigned long)(arg1); \ 1144 _argvec[2] = (unsigned long)(arg2); \ 1145 _argvec[3] = (unsigned long)(arg3); \ 1146 _argvec[4] = (unsigned long)(arg4); \ 1147 _argvec[5] = (unsigned long)(arg5); \ 1148 _argvec[6] = (unsigned long)(arg6); \ 1150 VALGRIND_ALIGN_STACK \ 1151 "subl $8, %%esp\n\t" \ 1152 "pushl 24(%%eax)\n\t" \ 1153 "pushl 20(%%eax)\n\t" \ 1154 "pushl 16(%%eax)\n\t" \ 1155 "pushl 12(%%eax)\n\t" \ 1156 "pushl 8(%%eax)\n\t" \ 1157 "pushl 4(%%eax)\n\t" \ 1158 "movl (%%eax), %%eax\n\t" \ 1159 VALGRIND_CALL_NOREDIR_EAX \ 1160 VALGRIND_RESTORE_STACK \ 1162 : "a" (&_argvec[0]) \ 1163 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1165 lval = (__typeof__(lval)) _res; \ 1168 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1171 volatile OrigFn _orig = (orig); \ 1172 volatile unsigned long _argvec[8]; \ 1173 volatile unsigned long _res; \ 1174 _argvec[0] = (unsigned long)_orig.nraddr; \ 1175 _argvec[1] = (unsigned long)(arg1); \ 1176 _argvec[2] = (unsigned long)(arg2); \ 1177 _argvec[3] = (unsigned long)(arg3); \ 1178 _argvec[4] = (unsigned long)(arg4); \ 1179 _argvec[5] = (unsigned long)(arg5); \ 1180 _argvec[6] = (unsigned long)(arg6); \ 1181 _argvec[7] = (unsigned long)(arg7); \ 1183 VALGRIND_ALIGN_STACK \ 1184 "subl $4, %%esp\n\t" \ 1185 "pushl 28(%%eax)\n\t" \ 1186 "pushl 24(%%eax)\n\t" \ 1187 "pushl 20(%%eax)\n\t" \ 1188 "pushl 16(%%eax)\n\t" \ 1189 "pushl 12(%%eax)\n\t" \ 1190 "pushl 8(%%eax)\n\t" \ 1191 "pushl 4(%%eax)\n\t" \ 1192 "movl (%%eax), %%eax\n\t" \ 1193 VALGRIND_CALL_NOREDIR_EAX \ 1194 VALGRIND_RESTORE_STACK \ 1196 : "a" (&_argvec[0]) \ 1197 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1199 lval = (__typeof__(lval)) _res; \ 1202 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1205 volatile OrigFn _orig = (orig); \ 1206 volatile unsigned long _argvec[9]; \ 1207 volatile unsigned long _res; \ 1208 _argvec[0] = (unsigned long)_orig.nraddr; \ 1209 _argvec[1] = (unsigned long)(arg1); \ 1210 _argvec[2] = (unsigned long)(arg2); \ 1211 _argvec[3] = (unsigned long)(arg3); \ 1212 _argvec[4] = (unsigned long)(arg4); \ 1213 _argvec[5] = (unsigned long)(arg5); \ 1214 _argvec[6] = (unsigned long)(arg6); \ 1215 _argvec[7] = (unsigned long)(arg7); \ 1216 _argvec[8] = (unsigned long)(arg8); \ 1218 VALGRIND_ALIGN_STACK \ 1219 "pushl 32(%%eax)\n\t" \ 1220 "pushl 28(%%eax)\n\t" \ 1221 "pushl 24(%%eax)\n\t" \ 1222 "pushl 20(%%eax)\n\t" \ 1223 "pushl 16(%%eax)\n\t" \ 1224 "pushl 12(%%eax)\n\t" \ 1225 "pushl 8(%%eax)\n\t" \ 1226 "pushl 4(%%eax)\n\t" \ 1227 "movl (%%eax), %%eax\n\t" \ 1228 VALGRIND_CALL_NOREDIR_EAX \ 1229 VALGRIND_RESTORE_STACK \ 1231 : "a" (&_argvec[0]) \ 1232 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1234 lval = (__typeof__(lval)) _res; \ 1237 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1240 volatile OrigFn _orig = (orig); \ 1241 volatile unsigned long _argvec[10]; \ 1242 volatile unsigned long _res; \ 1243 _argvec[0] = (unsigned long)_orig.nraddr; \ 1244 _argvec[1] = (unsigned long)(arg1); \ 1245 _argvec[2] = (unsigned long)(arg2); \ 1246 _argvec[3] = (unsigned long)(arg3); \ 1247 _argvec[4] = (unsigned long)(arg4); \ 1248 _argvec[5] = (unsigned long)(arg5); \ 1249 _argvec[6] = (unsigned long)(arg6); \ 1250 _argvec[7] = (unsigned long)(arg7); \ 1251 _argvec[8] = (unsigned long)(arg8); \ 1252 _argvec[9] = (unsigned long)(arg9); \ 1254 VALGRIND_ALIGN_STACK \ 1255 "subl $12, %%esp\n\t" \ 1256 "pushl 36(%%eax)\n\t" \ 1257 "pushl 32(%%eax)\n\t" \ 1258 "pushl 28(%%eax)\n\t" \ 1259 "pushl 24(%%eax)\n\t" \ 1260 "pushl 20(%%eax)\n\t" \ 1261 "pushl 16(%%eax)\n\t" \ 1262 "pushl 12(%%eax)\n\t" \ 1263 "pushl 8(%%eax)\n\t" \ 1264 "pushl 4(%%eax)\n\t" \ 1265 "movl (%%eax), %%eax\n\t" \ 1266 VALGRIND_CALL_NOREDIR_EAX \ 1267 VALGRIND_RESTORE_STACK \ 1269 : "a" (&_argvec[0]) \ 1270 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1272 lval = (__typeof__(lval)) _res; \ 1275 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1276 arg7,arg8,arg9,arg10) \ 1278 volatile OrigFn _orig = (orig); \ 1279 volatile unsigned long _argvec[11]; \ 1280 volatile unsigned long _res; \ 1281 _argvec[0] = (unsigned long)_orig.nraddr; \ 1282 _argvec[1] = (unsigned long)(arg1); \ 1283 _argvec[2] = (unsigned long)(arg2); \ 1284 _argvec[3] = (unsigned long)(arg3); \ 1285 _argvec[4] = (unsigned long)(arg4); \ 1286 _argvec[5] = (unsigned long)(arg5); \ 1287 _argvec[6] = (unsigned long)(arg6); \ 1288 _argvec[7] = (unsigned long)(arg7); \ 1289 _argvec[8] = (unsigned long)(arg8); \ 1290 _argvec[9] = (unsigned long)(arg9); \ 1291 _argvec[10] = (unsigned long)(arg10); \ 1293 VALGRIND_ALIGN_STACK \ 1294 "subl $8, %%esp\n\t" \ 1295 "pushl 40(%%eax)\n\t" \ 1296 "pushl 36(%%eax)\n\t" \ 1297 "pushl 32(%%eax)\n\t" \ 1298 "pushl 28(%%eax)\n\t" \ 1299 "pushl 24(%%eax)\n\t" \ 1300 "pushl 20(%%eax)\n\t" \ 1301 "pushl 16(%%eax)\n\t" \ 1302 "pushl 12(%%eax)\n\t" \ 1303 "pushl 8(%%eax)\n\t" \ 1304 "pushl 4(%%eax)\n\t" \ 1305 "movl (%%eax), %%eax\n\t" \ 1306 VALGRIND_CALL_NOREDIR_EAX \ 1307 VALGRIND_RESTORE_STACK \ 1309 : "a" (&_argvec[0]) \ 1310 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1312 lval = (__typeof__(lval)) _res; \ 1315 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 1316 arg6,arg7,arg8,arg9,arg10, \ 1319 volatile OrigFn _orig = (orig); \ 1320 volatile unsigned long _argvec[12]; \ 1321 volatile unsigned long _res; \ 1322 _argvec[0] = (unsigned long)_orig.nraddr; \ 1323 _argvec[1] = (unsigned long)(arg1); \ 1324 _argvec[2] = (unsigned long)(arg2); \ 1325 _argvec[3] = (unsigned long)(arg3); \ 1326 _argvec[4] = (unsigned long)(arg4); \ 1327 _argvec[5] = (unsigned long)(arg5); \ 1328 _argvec[6] = (unsigned long)(arg6); \ 1329 _argvec[7] = (unsigned long)(arg7); \ 1330 _argvec[8] = (unsigned long)(arg8); \ 1331 _argvec[9] = (unsigned long)(arg9); \ 1332 _argvec[10] = (unsigned long)(arg10); \ 1333 _argvec[11] = (unsigned long)(arg11); \ 1335 VALGRIND_ALIGN_STACK \ 1336 "subl $4, %%esp\n\t" \ 1337 "pushl 44(%%eax)\n\t" \ 1338 "pushl 40(%%eax)\n\t" \ 1339 "pushl 36(%%eax)\n\t" \ 1340 "pushl 32(%%eax)\n\t" \ 1341 "pushl 28(%%eax)\n\t" \ 1342 "pushl 24(%%eax)\n\t" \ 1343 "pushl 20(%%eax)\n\t" \ 1344 "pushl 16(%%eax)\n\t" \ 1345 "pushl 12(%%eax)\n\t" \ 1346 "pushl 8(%%eax)\n\t" \ 1347 "pushl 4(%%eax)\n\t" \ 1348 "movl (%%eax), %%eax\n\t" \ 1349 VALGRIND_CALL_NOREDIR_EAX \ 1350 VALGRIND_RESTORE_STACK \ 1352 : "a" (&_argvec[0]) \ 1353 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1355 lval = (__typeof__(lval)) _res; \ 1358 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 1359 arg6,arg7,arg8,arg9,arg10, \ 1362 volatile OrigFn _orig = (orig); \ 1363 volatile unsigned long _argvec[13]; \ 1364 volatile unsigned long _res; \ 1365 _argvec[0] = (unsigned long)_orig.nraddr; \ 1366 _argvec[1] = (unsigned long)(arg1); \ 1367 _argvec[2] = (unsigned long)(arg2); \ 1368 _argvec[3] = (unsigned long)(arg3); \ 1369 _argvec[4] = (unsigned long)(arg4); \ 1370 _argvec[5] = (unsigned long)(arg5); \ 1371 _argvec[6] = (unsigned long)(arg6); \ 1372 _argvec[7] = (unsigned long)(arg7); \ 1373 _argvec[8] = (unsigned long)(arg8); \ 1374 _argvec[9] = (unsigned long)(arg9); \ 1375 _argvec[10] = (unsigned long)(arg10); \ 1376 _argvec[11] = (unsigned long)(arg11); \ 1377 _argvec[12] = (unsigned long)(arg12); \ 1379 VALGRIND_ALIGN_STACK \ 1380 "pushl 48(%%eax)\n\t" \ 1381 "pushl 44(%%eax)\n\t" \ 1382 "pushl 40(%%eax)\n\t" \ 1383 "pushl 36(%%eax)\n\t" \ 1384 "pushl 32(%%eax)\n\t" \ 1385 "pushl 28(%%eax)\n\t" \ 1386 "pushl 24(%%eax)\n\t" \ 1387 "pushl 20(%%eax)\n\t" \ 1388 "pushl 16(%%eax)\n\t" \ 1389 "pushl 12(%%eax)\n\t" \ 1390 "pushl 8(%%eax)\n\t" \ 1391 "pushl 4(%%eax)\n\t" \ 1392 "movl (%%eax), %%eax\n\t" \ 1393 VALGRIND_CALL_NOREDIR_EAX \ 1394 VALGRIND_RESTORE_STACK \ 1396 : "a" (&_argvec[0]) \ 1397 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1399 lval = (__typeof__(lval)) _res; \ 1406 #if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) 1411 #define __CALLER_SAVED_REGS "rcx", "rdx", "rsi", \ 1412 "rdi", "r8", "r9", "r10", "r11" 1468 #if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM) 1469 # define __FRAME_POINTER \ 1470 ,"r"(__builtin_dwarf_cfa()) 1471 # define VALGRIND_CFI_PROLOGUE \ 1472 "movq %%rbp, %%r15\n\t" \ 1473 "movq %2, %%rbp\n\t" \ 1474 ".cfi_remember_state\n\t" \ 1475 ".cfi_def_cfa rbp, 0\n\t" 1476 # define VALGRIND_CFI_EPILOGUE \ 1477 "movq %%r15, %%rbp\n\t" \ 1478 ".cfi_restore_state\n\t" 1480 # define __FRAME_POINTER 1481 # define VALGRIND_CFI_PROLOGUE 1482 # define VALGRIND_CFI_EPILOGUE 1490 #define VALGRIND_ALIGN_STACK \ 1491 "movq %%rsp,%%r14\n\t" \ 1492 "andq $0xfffffffffffffff0,%%rsp\n\t" 1493 #define VALGRIND_RESTORE_STACK \ 1494 "movq %%r14,%%rsp\n\t" 1520 #define CALL_FN_W_v(lval, orig) \ 1522 volatile OrigFn _orig = (orig); \ 1523 volatile unsigned long _argvec[1]; \ 1524 volatile unsigned long _res; \ 1525 _argvec[0] = (unsigned long)_orig.nraddr; \ 1527 VALGRIND_CFI_PROLOGUE \ 1528 VALGRIND_ALIGN_STACK \ 1529 "subq $128,%%rsp\n\t" \ 1530 "movq (%%rax), %%rax\n\t" \ 1531 VALGRIND_CALL_NOREDIR_RAX \ 1532 VALGRIND_RESTORE_STACK \ 1533 VALGRIND_CFI_EPILOGUE \ 1535 : "a" (&_argvec[0]) __FRAME_POINTER \ 1536 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1538 lval = (__typeof__(lval)) _res; \ 1541 #define CALL_FN_W_W(lval, orig, arg1) \ 1543 volatile OrigFn _orig = (orig); \ 1544 volatile unsigned long _argvec[2]; \ 1545 volatile unsigned long _res; \ 1546 _argvec[0] = (unsigned long)_orig.nraddr; \ 1547 _argvec[1] = (unsigned long)(arg1); \ 1549 VALGRIND_CFI_PROLOGUE \ 1550 VALGRIND_ALIGN_STACK \ 1551 "subq $128,%%rsp\n\t" \ 1552 "movq 8(%%rax), %%rdi\n\t" \ 1553 "movq (%%rax), %%rax\n\t" \ 1554 VALGRIND_CALL_NOREDIR_RAX \ 1555 VALGRIND_RESTORE_STACK \ 1556 VALGRIND_CFI_EPILOGUE \ 1558 : "a" (&_argvec[0]) __FRAME_POINTER \ 1559 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1561 lval = (__typeof__(lval)) _res; \ 1564 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 1566 volatile OrigFn _orig = (orig); \ 1567 volatile unsigned long _argvec[3]; \ 1568 volatile unsigned long _res; \ 1569 _argvec[0] = (unsigned long)_orig.nraddr; \ 1570 _argvec[1] = (unsigned long)(arg1); \ 1571 _argvec[2] = (unsigned long)(arg2); \ 1573 VALGRIND_CFI_PROLOGUE \ 1574 VALGRIND_ALIGN_STACK \ 1575 "subq $128,%%rsp\n\t" \ 1576 "movq 16(%%rax), %%rsi\n\t" \ 1577 "movq 8(%%rax), %%rdi\n\t" \ 1578 "movq (%%rax), %%rax\n\t" \ 1579 VALGRIND_CALL_NOREDIR_RAX \ 1580 VALGRIND_RESTORE_STACK \ 1581 VALGRIND_CFI_EPILOGUE \ 1583 : "a" (&_argvec[0]) __FRAME_POINTER \ 1584 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1586 lval = (__typeof__(lval)) _res; \ 1589 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 1591 volatile OrigFn _orig = (orig); \ 1592 volatile unsigned long _argvec[4]; \ 1593 volatile unsigned long _res; \ 1594 _argvec[0] = (unsigned long)_orig.nraddr; \ 1595 _argvec[1] = (unsigned long)(arg1); \ 1596 _argvec[2] = (unsigned long)(arg2); \ 1597 _argvec[3] = (unsigned long)(arg3); \ 1599 VALGRIND_CFI_PROLOGUE \ 1600 VALGRIND_ALIGN_STACK \ 1601 "subq $128,%%rsp\n\t" \ 1602 "movq 24(%%rax), %%rdx\n\t" \ 1603 "movq 16(%%rax), %%rsi\n\t" \ 1604 "movq 8(%%rax), %%rdi\n\t" \ 1605 "movq (%%rax), %%rax\n\t" \ 1606 VALGRIND_CALL_NOREDIR_RAX \ 1607 VALGRIND_RESTORE_STACK \ 1608 VALGRIND_CFI_EPILOGUE \ 1610 : "a" (&_argvec[0]) __FRAME_POINTER \ 1611 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1613 lval = (__typeof__(lval)) _res; \ 1616 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 1618 volatile OrigFn _orig = (orig); \ 1619 volatile unsigned long _argvec[5]; \ 1620 volatile unsigned long _res; \ 1621 _argvec[0] = (unsigned long)_orig.nraddr; \ 1622 _argvec[1] = (unsigned long)(arg1); \ 1623 _argvec[2] = (unsigned long)(arg2); \ 1624 _argvec[3] = (unsigned long)(arg3); \ 1625 _argvec[4] = (unsigned long)(arg4); \ 1627 VALGRIND_CFI_PROLOGUE \ 1628 VALGRIND_ALIGN_STACK \ 1629 "subq $128,%%rsp\n\t" \ 1630 "movq 32(%%rax), %%rcx\n\t" \ 1631 "movq 24(%%rax), %%rdx\n\t" \ 1632 "movq 16(%%rax), %%rsi\n\t" \ 1633 "movq 8(%%rax), %%rdi\n\t" \ 1634 "movq (%%rax), %%rax\n\t" \ 1635 VALGRIND_CALL_NOREDIR_RAX \ 1636 VALGRIND_RESTORE_STACK \ 1637 VALGRIND_CFI_EPILOGUE \ 1639 : "a" (&_argvec[0]) __FRAME_POINTER \ 1640 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1642 lval = (__typeof__(lval)) _res; \ 1645 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 1647 volatile OrigFn _orig = (orig); \ 1648 volatile unsigned long _argvec[6]; \ 1649 volatile unsigned long _res; \ 1650 _argvec[0] = (unsigned long)_orig.nraddr; \ 1651 _argvec[1] = (unsigned long)(arg1); \ 1652 _argvec[2] = (unsigned long)(arg2); \ 1653 _argvec[3] = (unsigned long)(arg3); \ 1654 _argvec[4] = (unsigned long)(arg4); \ 1655 _argvec[5] = (unsigned long)(arg5); \ 1657 VALGRIND_CFI_PROLOGUE \ 1658 VALGRIND_ALIGN_STACK \ 1659 "subq $128,%%rsp\n\t" \ 1660 "movq 40(%%rax), %%r8\n\t" \ 1661 "movq 32(%%rax), %%rcx\n\t" \ 1662 "movq 24(%%rax), %%rdx\n\t" \ 1663 "movq 16(%%rax), %%rsi\n\t" \ 1664 "movq 8(%%rax), %%rdi\n\t" \ 1665 "movq (%%rax), %%rax\n\t" \ 1666 VALGRIND_CALL_NOREDIR_RAX \ 1667 VALGRIND_RESTORE_STACK \ 1668 VALGRIND_CFI_EPILOGUE \ 1670 : "a" (&_argvec[0]) __FRAME_POINTER \ 1671 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1673 lval = (__typeof__(lval)) _res; \ 1676 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 1678 volatile OrigFn _orig = (orig); \ 1679 volatile unsigned long _argvec[7]; \ 1680 volatile unsigned long _res; \ 1681 _argvec[0] = (unsigned long)_orig.nraddr; \ 1682 _argvec[1] = (unsigned long)(arg1); \ 1683 _argvec[2] = (unsigned long)(arg2); \ 1684 _argvec[3] = (unsigned long)(arg3); \ 1685 _argvec[4] = (unsigned long)(arg4); \ 1686 _argvec[5] = (unsigned long)(arg5); \ 1687 _argvec[6] = (unsigned long)(arg6); \ 1689 VALGRIND_CFI_PROLOGUE \ 1690 VALGRIND_ALIGN_STACK \ 1691 "subq $128,%%rsp\n\t" \ 1692 "movq 48(%%rax), %%r9\n\t" \ 1693 "movq 40(%%rax), %%r8\n\t" \ 1694 "movq 32(%%rax), %%rcx\n\t" \ 1695 "movq 24(%%rax), %%rdx\n\t" \ 1696 "movq 16(%%rax), %%rsi\n\t" \ 1697 "movq 8(%%rax), %%rdi\n\t" \ 1698 "movq (%%rax), %%rax\n\t" \ 1699 VALGRIND_CALL_NOREDIR_RAX \ 1700 VALGRIND_RESTORE_STACK \ 1701 VALGRIND_CFI_EPILOGUE \ 1703 : "a" (&_argvec[0]) __FRAME_POINTER \ 1704 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1706 lval = (__typeof__(lval)) _res; \ 1709 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1712 volatile OrigFn _orig = (orig); \ 1713 volatile unsigned long _argvec[8]; \ 1714 volatile unsigned long _res; \ 1715 _argvec[0] = (unsigned long)_orig.nraddr; \ 1716 _argvec[1] = (unsigned long)(arg1); \ 1717 _argvec[2] = (unsigned long)(arg2); \ 1718 _argvec[3] = (unsigned long)(arg3); \ 1719 _argvec[4] = (unsigned long)(arg4); \ 1720 _argvec[5] = (unsigned long)(arg5); \ 1721 _argvec[6] = (unsigned long)(arg6); \ 1722 _argvec[7] = (unsigned long)(arg7); \ 1724 VALGRIND_CFI_PROLOGUE \ 1725 VALGRIND_ALIGN_STACK \ 1726 "subq $136,%%rsp\n\t" \ 1727 "pushq 56(%%rax)\n\t" \ 1728 "movq 48(%%rax), %%r9\n\t" \ 1729 "movq 40(%%rax), %%r8\n\t" \ 1730 "movq 32(%%rax), %%rcx\n\t" \ 1731 "movq 24(%%rax), %%rdx\n\t" \ 1732 "movq 16(%%rax), %%rsi\n\t" \ 1733 "movq 8(%%rax), %%rdi\n\t" \ 1734 "movq (%%rax), %%rax\n\t" \ 1735 VALGRIND_CALL_NOREDIR_RAX \ 1736 VALGRIND_RESTORE_STACK \ 1737 VALGRIND_CFI_EPILOGUE \ 1739 : "a" (&_argvec[0]) __FRAME_POINTER \ 1740 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1742 lval = (__typeof__(lval)) _res; \ 1745 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1748 volatile OrigFn _orig = (orig); \ 1749 volatile unsigned long _argvec[9]; \ 1750 volatile unsigned long _res; \ 1751 _argvec[0] = (unsigned long)_orig.nraddr; \ 1752 _argvec[1] = (unsigned long)(arg1); \ 1753 _argvec[2] = (unsigned long)(arg2); \ 1754 _argvec[3] = (unsigned long)(arg3); \ 1755 _argvec[4] = (unsigned long)(arg4); \ 1756 _argvec[5] = (unsigned long)(arg5); \ 1757 _argvec[6] = (unsigned long)(arg6); \ 1758 _argvec[7] = (unsigned long)(arg7); \ 1759 _argvec[8] = (unsigned long)(arg8); \ 1761 VALGRIND_CFI_PROLOGUE \ 1762 VALGRIND_ALIGN_STACK \ 1763 "subq $128,%%rsp\n\t" \ 1764 "pushq 64(%%rax)\n\t" \ 1765 "pushq 56(%%rax)\n\t" \ 1766 "movq 48(%%rax), %%r9\n\t" \ 1767 "movq 40(%%rax), %%r8\n\t" \ 1768 "movq 32(%%rax), %%rcx\n\t" \ 1769 "movq 24(%%rax), %%rdx\n\t" \ 1770 "movq 16(%%rax), %%rsi\n\t" \ 1771 "movq 8(%%rax), %%rdi\n\t" \ 1772 "movq (%%rax), %%rax\n\t" \ 1773 VALGRIND_CALL_NOREDIR_RAX \ 1774 VALGRIND_RESTORE_STACK \ 1775 VALGRIND_CFI_EPILOGUE \ 1777 : "a" (&_argvec[0]) __FRAME_POINTER \ 1778 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1780 lval = (__typeof__(lval)) _res; \ 1783 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1786 volatile OrigFn _orig = (orig); \ 1787 volatile unsigned long _argvec[10]; \ 1788 volatile unsigned long _res; \ 1789 _argvec[0] = (unsigned long)_orig.nraddr; \ 1790 _argvec[1] = (unsigned long)(arg1); \ 1791 _argvec[2] = (unsigned long)(arg2); \ 1792 _argvec[3] = (unsigned long)(arg3); \ 1793 _argvec[4] = (unsigned long)(arg4); \ 1794 _argvec[5] = (unsigned long)(arg5); \ 1795 _argvec[6] = (unsigned long)(arg6); \ 1796 _argvec[7] = (unsigned long)(arg7); \ 1797 _argvec[8] = (unsigned long)(arg8); \ 1798 _argvec[9] = (unsigned long)(arg9); \ 1800 VALGRIND_CFI_PROLOGUE \ 1801 VALGRIND_ALIGN_STACK \ 1802 "subq $136,%%rsp\n\t" \ 1803 "pushq 72(%%rax)\n\t" \ 1804 "pushq 64(%%rax)\n\t" \ 1805 "pushq 56(%%rax)\n\t" \ 1806 "movq 48(%%rax), %%r9\n\t" \ 1807 "movq 40(%%rax), %%r8\n\t" \ 1808 "movq 32(%%rax), %%rcx\n\t" \ 1809 "movq 24(%%rax), %%rdx\n\t" \ 1810 "movq 16(%%rax), %%rsi\n\t" \ 1811 "movq 8(%%rax), %%rdi\n\t" \ 1812 "movq (%%rax), %%rax\n\t" \ 1813 VALGRIND_CALL_NOREDIR_RAX \ 1814 VALGRIND_RESTORE_STACK \ 1815 VALGRIND_CFI_EPILOGUE \ 1817 : "a" (&_argvec[0]) __FRAME_POINTER \ 1818 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1820 lval = (__typeof__(lval)) _res; \ 1823 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1824 arg7,arg8,arg9,arg10) \ 1826 volatile OrigFn _orig = (orig); \ 1827 volatile unsigned long _argvec[11]; \ 1828 volatile unsigned long _res; \ 1829 _argvec[0] = (unsigned long)_orig.nraddr; \ 1830 _argvec[1] = (unsigned long)(arg1); \ 1831 _argvec[2] = (unsigned long)(arg2); \ 1832 _argvec[3] = (unsigned long)(arg3); \ 1833 _argvec[4] = (unsigned long)(arg4); \ 1834 _argvec[5] = (unsigned long)(arg5); \ 1835 _argvec[6] = (unsigned long)(arg6); \ 1836 _argvec[7] = (unsigned long)(arg7); \ 1837 _argvec[8] = (unsigned long)(arg8); \ 1838 _argvec[9] = (unsigned long)(arg9); \ 1839 _argvec[10] = (unsigned long)(arg10); \ 1841 VALGRIND_CFI_PROLOGUE \ 1842 VALGRIND_ALIGN_STACK \ 1843 "subq $128,%%rsp\n\t" \ 1844 "pushq 80(%%rax)\n\t" \ 1845 "pushq 72(%%rax)\n\t" \ 1846 "pushq 64(%%rax)\n\t" \ 1847 "pushq 56(%%rax)\n\t" \ 1848 "movq 48(%%rax), %%r9\n\t" \ 1849 "movq 40(%%rax), %%r8\n\t" \ 1850 "movq 32(%%rax), %%rcx\n\t" \ 1851 "movq 24(%%rax), %%rdx\n\t" \ 1852 "movq 16(%%rax), %%rsi\n\t" \ 1853 "movq 8(%%rax), %%rdi\n\t" \ 1854 "movq (%%rax), %%rax\n\t" \ 1855 VALGRIND_CALL_NOREDIR_RAX \ 1856 VALGRIND_RESTORE_STACK \ 1857 VALGRIND_CFI_EPILOGUE \ 1859 : "a" (&_argvec[0]) __FRAME_POINTER \ 1860 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1862 lval = (__typeof__(lval)) _res; \ 1865 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1866 arg7,arg8,arg9,arg10,arg11) \ 1868 volatile OrigFn _orig = (orig); \ 1869 volatile unsigned long _argvec[12]; \ 1870 volatile unsigned long _res; \ 1871 _argvec[0] = (unsigned long)_orig.nraddr; \ 1872 _argvec[1] = (unsigned long)(arg1); \ 1873 _argvec[2] = (unsigned long)(arg2); \ 1874 _argvec[3] = (unsigned long)(arg3); \ 1875 _argvec[4] = (unsigned long)(arg4); \ 1876 _argvec[5] = (unsigned long)(arg5); \ 1877 _argvec[6] = (unsigned long)(arg6); \ 1878 _argvec[7] = (unsigned long)(arg7); \ 1879 _argvec[8] = (unsigned long)(arg8); \ 1880 _argvec[9] = (unsigned long)(arg9); \ 1881 _argvec[10] = (unsigned long)(arg10); \ 1882 _argvec[11] = (unsigned long)(arg11); \ 1884 VALGRIND_CFI_PROLOGUE \ 1885 VALGRIND_ALIGN_STACK \ 1886 "subq $136,%%rsp\n\t" \ 1887 "pushq 88(%%rax)\n\t" \ 1888 "pushq 80(%%rax)\n\t" \ 1889 "pushq 72(%%rax)\n\t" \ 1890 "pushq 64(%%rax)\n\t" \ 1891 "pushq 56(%%rax)\n\t" \ 1892 "movq 48(%%rax), %%r9\n\t" \ 1893 "movq 40(%%rax), %%r8\n\t" \ 1894 "movq 32(%%rax), %%rcx\n\t" \ 1895 "movq 24(%%rax), %%rdx\n\t" \ 1896 "movq 16(%%rax), %%rsi\n\t" \ 1897 "movq 8(%%rax), %%rdi\n\t" \ 1898 "movq (%%rax), %%rax\n\t" \ 1899 VALGRIND_CALL_NOREDIR_RAX \ 1900 VALGRIND_RESTORE_STACK \ 1901 VALGRIND_CFI_EPILOGUE \ 1903 : "a" (&_argvec[0]) __FRAME_POINTER \ 1904 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1906 lval = (__typeof__(lval)) _res; \ 1909 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1910 arg7,arg8,arg9,arg10,arg11,arg12) \ 1912 volatile OrigFn _orig = (orig); \ 1913 volatile unsigned long _argvec[13]; \ 1914 volatile unsigned long _res; \ 1915 _argvec[0] = (unsigned long)_orig.nraddr; \ 1916 _argvec[1] = (unsigned long)(arg1); \ 1917 _argvec[2] = (unsigned long)(arg2); \ 1918 _argvec[3] = (unsigned long)(arg3); \ 1919 _argvec[4] = (unsigned long)(arg4); \ 1920 _argvec[5] = (unsigned long)(arg5); \ 1921 _argvec[6] = (unsigned long)(arg6); \ 1922 _argvec[7] = (unsigned long)(arg7); \ 1923 _argvec[8] = (unsigned long)(arg8); \ 1924 _argvec[9] = (unsigned long)(arg9); \ 1925 _argvec[10] = (unsigned long)(arg10); \ 1926 _argvec[11] = (unsigned long)(arg11); \ 1927 _argvec[12] = (unsigned long)(arg12); \ 1929 VALGRIND_CFI_PROLOGUE \ 1930 VALGRIND_ALIGN_STACK \ 1931 "subq $128,%%rsp\n\t" \ 1932 "pushq 96(%%rax)\n\t" \ 1933 "pushq 88(%%rax)\n\t" \ 1934 "pushq 80(%%rax)\n\t" \ 1935 "pushq 72(%%rax)\n\t" \ 1936 "pushq 64(%%rax)\n\t" \ 1937 "pushq 56(%%rax)\n\t" \ 1938 "movq 48(%%rax), %%r9\n\t" \ 1939 "movq 40(%%rax), %%r8\n\t" \ 1940 "movq 32(%%rax), %%rcx\n\t" \ 1941 "movq 24(%%rax), %%rdx\n\t" \ 1942 "movq 16(%%rax), %%rsi\n\t" \ 1943 "movq 8(%%rax), %%rdi\n\t" \ 1944 "movq (%%rax), %%rax\n\t" \ 1945 VALGRIND_CALL_NOREDIR_RAX \ 1946 VALGRIND_RESTORE_STACK \ 1947 VALGRIND_CFI_EPILOGUE \ 1949 : "a" (&_argvec[0]) __FRAME_POINTER \ 1950 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1952 lval = (__typeof__(lval)) _res; \ 1959 #if defined(PLAT_ppc32_linux) 1985 #define __CALLER_SAVED_REGS \ 1986 "lr", "ctr", "xer", \ 1987 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ 1988 "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ 1996 #define VALGRIND_ALIGN_STACK \ 1998 "rlwinm 1,1,0,0,27\n\t" 1999 #define VALGRIND_RESTORE_STACK \ 2005 #define CALL_FN_W_v(lval, orig) \ 2007 volatile OrigFn _orig = (orig); \ 2008 volatile unsigned long _argvec[1]; \ 2009 volatile unsigned long _res; \ 2010 _argvec[0] = (unsigned long)_orig.nraddr; \ 2012 VALGRIND_ALIGN_STACK \ 2014 "lwz 11,0(11)\n\t" \ 2015 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2016 VALGRIND_RESTORE_STACK \ 2019 : "r" (&_argvec[0]) \ 2020 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2022 lval = (__typeof__(lval)) _res; \ 2025 #define CALL_FN_W_W(lval, orig, arg1) \ 2027 volatile OrigFn _orig = (orig); \ 2028 volatile unsigned long _argvec[2]; \ 2029 volatile unsigned long _res; \ 2030 _argvec[0] = (unsigned long)_orig.nraddr; \ 2031 _argvec[1] = (unsigned long)arg1; \ 2033 VALGRIND_ALIGN_STACK \ 2036 "lwz 11,0(11)\n\t" \ 2037 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2038 VALGRIND_RESTORE_STACK \ 2041 : "r" (&_argvec[0]) \ 2042 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2044 lval = (__typeof__(lval)) _res; \ 2047 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 2049 volatile OrigFn _orig = (orig); \ 2050 volatile unsigned long _argvec[3]; \ 2051 volatile unsigned long _res; \ 2052 _argvec[0] = (unsigned long)_orig.nraddr; \ 2053 _argvec[1] = (unsigned long)arg1; \ 2054 _argvec[2] = (unsigned long)arg2; \ 2056 VALGRIND_ALIGN_STACK \ 2060 "lwz 11,0(11)\n\t" \ 2061 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2062 VALGRIND_RESTORE_STACK \ 2065 : "r" (&_argvec[0]) \ 2066 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2068 lval = (__typeof__(lval)) _res; \ 2071 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 2073 volatile OrigFn _orig = (orig); \ 2074 volatile unsigned long _argvec[4]; \ 2075 volatile unsigned long _res; \ 2076 _argvec[0] = (unsigned long)_orig.nraddr; \ 2077 _argvec[1] = (unsigned long)arg1; \ 2078 _argvec[2] = (unsigned long)arg2; \ 2079 _argvec[3] = (unsigned long)arg3; \ 2081 VALGRIND_ALIGN_STACK \ 2085 "lwz 5,12(11)\n\t" \ 2086 "lwz 11,0(11)\n\t" \ 2087 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2088 VALGRIND_RESTORE_STACK \ 2091 : "r" (&_argvec[0]) \ 2092 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2094 lval = (__typeof__(lval)) _res; \ 2097 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 2099 volatile OrigFn _orig = (orig); \ 2100 volatile unsigned long _argvec[5]; \ 2101 volatile unsigned long _res; \ 2102 _argvec[0] = (unsigned long)_orig.nraddr; \ 2103 _argvec[1] = (unsigned long)arg1; \ 2104 _argvec[2] = (unsigned long)arg2; \ 2105 _argvec[3] = (unsigned long)arg3; \ 2106 _argvec[4] = (unsigned long)arg4; \ 2108 VALGRIND_ALIGN_STACK \ 2112 "lwz 5,12(11)\n\t" \ 2113 "lwz 6,16(11)\n\t" \ 2114 "lwz 11,0(11)\n\t" \ 2115 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2116 VALGRIND_RESTORE_STACK \ 2119 : "r" (&_argvec[0]) \ 2120 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2122 lval = (__typeof__(lval)) _res; \ 2125 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 2127 volatile OrigFn _orig = (orig); \ 2128 volatile unsigned long _argvec[6]; \ 2129 volatile unsigned long _res; \ 2130 _argvec[0] = (unsigned long)_orig.nraddr; \ 2131 _argvec[1] = (unsigned long)arg1; \ 2132 _argvec[2] = (unsigned long)arg2; \ 2133 _argvec[3] = (unsigned long)arg3; \ 2134 _argvec[4] = (unsigned long)arg4; \ 2135 _argvec[5] = (unsigned long)arg5; \ 2137 VALGRIND_ALIGN_STACK \ 2141 "lwz 5,12(11)\n\t" \ 2142 "lwz 6,16(11)\n\t" \ 2143 "lwz 7,20(11)\n\t" \ 2144 "lwz 11,0(11)\n\t" \ 2145 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2146 VALGRIND_RESTORE_STACK \ 2149 : "r" (&_argvec[0]) \ 2150 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2152 lval = (__typeof__(lval)) _res; \ 2155 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 2157 volatile OrigFn _orig = (orig); \ 2158 volatile unsigned long _argvec[7]; \ 2159 volatile unsigned long _res; \ 2160 _argvec[0] = (unsigned long)_orig.nraddr; \ 2161 _argvec[1] = (unsigned long)arg1; \ 2162 _argvec[2] = (unsigned long)arg2; \ 2163 _argvec[3] = (unsigned long)arg3; \ 2164 _argvec[4] = (unsigned long)arg4; \ 2165 _argvec[5] = (unsigned long)arg5; \ 2166 _argvec[6] = (unsigned long)arg6; \ 2168 VALGRIND_ALIGN_STACK \ 2172 "lwz 5,12(11)\n\t" \ 2173 "lwz 6,16(11)\n\t" \ 2174 "lwz 7,20(11)\n\t" \ 2175 "lwz 8,24(11)\n\t" \ 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_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2190 volatile OrigFn _orig = (orig); \ 2191 volatile unsigned long _argvec[8]; \ 2192 volatile unsigned long _res; \ 2193 _argvec[0] = (unsigned long)_orig.nraddr; \ 2194 _argvec[1] = (unsigned long)arg1; \ 2195 _argvec[2] = (unsigned long)arg2; \ 2196 _argvec[3] = (unsigned long)arg3; \ 2197 _argvec[4] = (unsigned long)arg4; \ 2198 _argvec[5] = (unsigned long)arg5; \ 2199 _argvec[6] = (unsigned long)arg6; \ 2200 _argvec[7] = (unsigned long)arg7; \ 2202 VALGRIND_ALIGN_STACK \ 2206 "lwz 5,12(11)\n\t" \ 2207 "lwz 6,16(11)\n\t" \ 2208 "lwz 7,20(11)\n\t" \ 2209 "lwz 8,24(11)\n\t" \ 2210 "lwz 9,28(11)\n\t" \ 2211 "lwz 11,0(11)\n\t" \ 2212 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2213 VALGRIND_RESTORE_STACK \ 2216 : "r" (&_argvec[0]) \ 2217 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2219 lval = (__typeof__(lval)) _res; \ 2222 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2225 volatile OrigFn _orig = (orig); \ 2226 volatile unsigned long _argvec[9]; \ 2227 volatile unsigned long _res; \ 2228 _argvec[0] = (unsigned long)_orig.nraddr; \ 2229 _argvec[1] = (unsigned long)arg1; \ 2230 _argvec[2] = (unsigned long)arg2; \ 2231 _argvec[3] = (unsigned long)arg3; \ 2232 _argvec[4] = (unsigned long)arg4; \ 2233 _argvec[5] = (unsigned long)arg5; \ 2234 _argvec[6] = (unsigned long)arg6; \ 2235 _argvec[7] = (unsigned long)arg7; \ 2236 _argvec[8] = (unsigned long)arg8; \ 2238 VALGRIND_ALIGN_STACK \ 2242 "lwz 5,12(11)\n\t" \ 2243 "lwz 6,16(11)\n\t" \ 2244 "lwz 7,20(11)\n\t" \ 2245 "lwz 8,24(11)\n\t" \ 2246 "lwz 9,28(11)\n\t" \ 2247 "lwz 10,32(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_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2262 volatile OrigFn _orig = (orig); \ 2263 volatile unsigned long _argvec[10]; \ 2264 volatile unsigned long _res; \ 2265 _argvec[0] = (unsigned long)_orig.nraddr; \ 2266 _argvec[1] = (unsigned long)arg1; \ 2267 _argvec[2] = (unsigned long)arg2; \ 2268 _argvec[3] = (unsigned long)arg3; \ 2269 _argvec[4] = (unsigned long)arg4; \ 2270 _argvec[5] = (unsigned long)arg5; \ 2271 _argvec[6] = (unsigned long)arg6; \ 2272 _argvec[7] = (unsigned long)arg7; \ 2273 _argvec[8] = (unsigned long)arg8; \ 2274 _argvec[9] = (unsigned long)arg9; \ 2276 VALGRIND_ALIGN_STACK \ 2278 "addi 1,1,-16\n\t" \ 2280 "lwz 3,36(11)\n\t" \ 2285 "lwz 5,12(11)\n\t" \ 2286 "lwz 6,16(11)\n\t" \ 2287 "lwz 7,20(11)\n\t" \ 2288 "lwz 8,24(11)\n\t" \ 2289 "lwz 9,28(11)\n\t" \ 2290 "lwz 10,32(11)\n\t" \ 2291 "lwz 11,0(11)\n\t" \ 2292 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2293 VALGRIND_RESTORE_STACK \ 2296 : "r" (&_argvec[0]) \ 2297 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2299 lval = (__typeof__(lval)) _res; \ 2302 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2303 arg7,arg8,arg9,arg10) \ 2305 volatile OrigFn _orig = (orig); \ 2306 volatile unsigned long _argvec[11]; \ 2307 volatile unsigned long _res; \ 2308 _argvec[0] = (unsigned long)_orig.nraddr; \ 2309 _argvec[1] = (unsigned long)arg1; \ 2310 _argvec[2] = (unsigned long)arg2; \ 2311 _argvec[3] = (unsigned long)arg3; \ 2312 _argvec[4] = (unsigned long)arg4; \ 2313 _argvec[5] = (unsigned long)arg5; \ 2314 _argvec[6] = (unsigned long)arg6; \ 2315 _argvec[7] = (unsigned long)arg7; \ 2316 _argvec[8] = (unsigned long)arg8; \ 2317 _argvec[9] = (unsigned long)arg9; \ 2318 _argvec[10] = (unsigned long)arg10; \ 2320 VALGRIND_ALIGN_STACK \ 2322 "addi 1,1,-16\n\t" \ 2324 "lwz 3,40(11)\n\t" \ 2327 "lwz 3,36(11)\n\t" \ 2332 "lwz 5,12(11)\n\t" \ 2333 "lwz 6,16(11)\n\t" \ 2334 "lwz 7,20(11)\n\t" \ 2335 "lwz 8,24(11)\n\t" \ 2336 "lwz 9,28(11)\n\t" \ 2337 "lwz 10,32(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_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2350 arg7,arg8,arg9,arg10,arg11) \ 2352 volatile OrigFn _orig = (orig); \ 2353 volatile unsigned long _argvec[12]; \ 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; \ 2363 _argvec[8] = (unsigned long)arg8; \ 2364 _argvec[9] = (unsigned long)arg9; \ 2365 _argvec[10] = (unsigned long)arg10; \ 2366 _argvec[11] = (unsigned long)arg11; \ 2368 VALGRIND_ALIGN_STACK \ 2370 "addi 1,1,-32\n\t" \ 2372 "lwz 3,44(11)\n\t" \ 2375 "lwz 3,40(11)\n\t" \ 2378 "lwz 3,36(11)\n\t" \ 2383 "lwz 5,12(11)\n\t" \ 2384 "lwz 6,16(11)\n\t" \ 2385 "lwz 7,20(11)\n\t" \ 2386 "lwz 8,24(11)\n\t" \ 2387 "lwz 9,28(11)\n\t" \ 2388 "lwz 10,32(11)\n\t" \ 2389 "lwz 11,0(11)\n\t" \ 2390 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2391 VALGRIND_RESTORE_STACK \ 2394 : "r" (&_argvec[0]) \ 2395 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2397 lval = (__typeof__(lval)) _res; \ 2400 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2401 arg7,arg8,arg9,arg10,arg11,arg12) \ 2403 volatile OrigFn _orig = (orig); \ 2404 volatile unsigned long _argvec[13]; \ 2405 volatile unsigned long _res; \ 2406 _argvec[0] = (unsigned long)_orig.nraddr; \ 2407 _argvec[1] = (unsigned long)arg1; \ 2408 _argvec[2] = (unsigned long)arg2; \ 2409 _argvec[3] = (unsigned long)arg3; \ 2410 _argvec[4] = (unsigned long)arg4; \ 2411 _argvec[5] = (unsigned long)arg5; \ 2412 _argvec[6] = (unsigned long)arg6; \ 2413 _argvec[7] = (unsigned long)arg7; \ 2414 _argvec[8] = (unsigned long)arg8; \ 2415 _argvec[9] = (unsigned long)arg9; \ 2416 _argvec[10] = (unsigned long)arg10; \ 2417 _argvec[11] = (unsigned long)arg11; \ 2418 _argvec[12] = (unsigned long)arg12; \ 2420 VALGRIND_ALIGN_STACK \ 2422 "addi 1,1,-32\n\t" \ 2424 "lwz 3,48(11)\n\t" \ 2427 "lwz 3,44(11)\n\t" \ 2430 "lwz 3,40(11)\n\t" \ 2433 "lwz 3,36(11)\n\t" \ 2438 "lwz 5,12(11)\n\t" \ 2439 "lwz 6,16(11)\n\t" \ 2440 "lwz 7,20(11)\n\t" \ 2441 "lwz 8,24(11)\n\t" \ 2442 "lwz 9,28(11)\n\t" \ 2443 "lwz 10,32(11)\n\t" \ 2444 "lwz 11,0(11)\n\t" \ 2445 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2446 VALGRIND_RESTORE_STACK \ 2449 : "r" (&_argvec[0]) \ 2450 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2452 lval = (__typeof__(lval)) _res; \ 2459 #if defined(PLAT_ppc64_linux) 2464 #define __CALLER_SAVED_REGS \ 2465 "lr", "ctr", "xer", \ 2466 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ 2467 "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ 2475 #define VALGRIND_ALIGN_STACK \ 2477 "rldicr 1,1,0,59\n\t" 2478 #define VALGRIND_RESTORE_STACK \ 2484 #define CALL_FN_W_v(lval, orig) \ 2486 volatile OrigFn _orig = (orig); \ 2487 volatile unsigned long _argvec[3+0]; \ 2488 volatile unsigned long _res; \ 2490 _argvec[1] = (unsigned long)_orig.r2; \ 2491 _argvec[2] = (unsigned long)_orig.nraddr; \ 2493 VALGRIND_ALIGN_STACK \ 2495 "std 2,-16(11)\n\t" \ 2497 "ld 11, 0(11)\n\t" \ 2498 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2501 "ld 2,-16(11)\n\t" \ 2502 VALGRIND_RESTORE_STACK \ 2504 : "r" (&_argvec[2]) \ 2505 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2507 lval = (__typeof__(lval)) _res; \ 2510 #define CALL_FN_W_W(lval, orig, arg1) \ 2512 volatile OrigFn _orig = (orig); \ 2513 volatile unsigned long _argvec[3+1]; \ 2514 volatile unsigned long _res; \ 2516 _argvec[1] = (unsigned long)_orig.r2; \ 2517 _argvec[2] = (unsigned long)_orig.nraddr; \ 2518 _argvec[2+1] = (unsigned long)arg1; \ 2520 VALGRIND_ALIGN_STACK \ 2522 "std 2,-16(11)\n\t" \ 2525 "ld 11, 0(11)\n\t" \ 2526 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2529 "ld 2,-16(11)\n\t" \ 2530 VALGRIND_RESTORE_STACK \ 2532 : "r" (&_argvec[2]) \ 2533 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2535 lval = (__typeof__(lval)) _res; \ 2538 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 2540 volatile OrigFn _orig = (orig); \ 2541 volatile unsigned long _argvec[3+2]; \ 2542 volatile unsigned long _res; \ 2544 _argvec[1] = (unsigned long)_orig.r2; \ 2545 _argvec[2] = (unsigned long)_orig.nraddr; \ 2546 _argvec[2+1] = (unsigned long)arg1; \ 2547 _argvec[2+2] = (unsigned long)arg2; \ 2549 VALGRIND_ALIGN_STACK \ 2551 "std 2,-16(11)\n\t" \ 2554 "ld 4, 16(11)\n\t" \ 2555 "ld 11, 0(11)\n\t" \ 2556 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2559 "ld 2,-16(11)\n\t" \ 2560 VALGRIND_RESTORE_STACK \ 2562 : "r" (&_argvec[2]) \ 2563 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2565 lval = (__typeof__(lval)) _res; \ 2568 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 2570 volatile OrigFn _orig = (orig); \ 2571 volatile unsigned long _argvec[3+3]; \ 2572 volatile unsigned long _res; \ 2574 _argvec[1] = (unsigned long)_orig.r2; \ 2575 _argvec[2] = (unsigned long)_orig.nraddr; \ 2576 _argvec[2+1] = (unsigned long)arg1; \ 2577 _argvec[2+2] = (unsigned long)arg2; \ 2578 _argvec[2+3] = (unsigned long)arg3; \ 2580 VALGRIND_ALIGN_STACK \ 2582 "std 2,-16(11)\n\t" \ 2585 "ld 4, 16(11)\n\t" \ 2586 "ld 5, 24(11)\n\t" \ 2587 "ld 11, 0(11)\n\t" \ 2588 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2591 "ld 2,-16(11)\n\t" \ 2592 VALGRIND_RESTORE_STACK \ 2594 : "r" (&_argvec[2]) \ 2595 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2597 lval = (__typeof__(lval)) _res; \ 2600 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 2602 volatile OrigFn _orig = (orig); \ 2603 volatile unsigned long _argvec[3+4]; \ 2604 volatile unsigned long _res; \ 2606 _argvec[1] = (unsigned long)_orig.r2; \ 2607 _argvec[2] = (unsigned long)_orig.nraddr; \ 2608 _argvec[2+1] = (unsigned long)arg1; \ 2609 _argvec[2+2] = (unsigned long)arg2; \ 2610 _argvec[2+3] = (unsigned long)arg3; \ 2611 _argvec[2+4] = (unsigned long)arg4; \ 2613 VALGRIND_ALIGN_STACK \ 2615 "std 2,-16(11)\n\t" \ 2618 "ld 4, 16(11)\n\t" \ 2619 "ld 5, 24(11)\n\t" \ 2620 "ld 6, 32(11)\n\t" \ 2621 "ld 11, 0(11)\n\t" \ 2622 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2625 "ld 2,-16(11)\n\t" \ 2626 VALGRIND_RESTORE_STACK \ 2628 : "r" (&_argvec[2]) \ 2629 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2631 lval = (__typeof__(lval)) _res; \ 2634 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 2636 volatile OrigFn _orig = (orig); \ 2637 volatile unsigned long _argvec[3+5]; \ 2638 volatile unsigned long _res; \ 2640 _argvec[1] = (unsigned long)_orig.r2; \ 2641 _argvec[2] = (unsigned long)_orig.nraddr; \ 2642 _argvec[2+1] = (unsigned long)arg1; \ 2643 _argvec[2+2] = (unsigned long)arg2; \ 2644 _argvec[2+3] = (unsigned long)arg3; \ 2645 _argvec[2+4] = (unsigned long)arg4; \ 2646 _argvec[2+5] = (unsigned long)arg5; \ 2648 VALGRIND_ALIGN_STACK \ 2650 "std 2,-16(11)\n\t" \ 2653 "ld 4, 16(11)\n\t" \ 2654 "ld 5, 24(11)\n\t" \ 2655 "ld 6, 32(11)\n\t" \ 2656 "ld 7, 40(11)\n\t" \ 2657 "ld 11, 0(11)\n\t" \ 2658 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2661 "ld 2,-16(11)\n\t" \ 2662 VALGRIND_RESTORE_STACK \ 2664 : "r" (&_argvec[2]) \ 2665 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2667 lval = (__typeof__(lval)) _res; \ 2670 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 2672 volatile OrigFn _orig = (orig); \ 2673 volatile unsigned long _argvec[3+6]; \ 2674 volatile unsigned long _res; \ 2676 _argvec[1] = (unsigned long)_orig.r2; \ 2677 _argvec[2] = (unsigned long)_orig.nraddr; \ 2678 _argvec[2+1] = (unsigned long)arg1; \ 2679 _argvec[2+2] = (unsigned long)arg2; \ 2680 _argvec[2+3] = (unsigned long)arg3; \ 2681 _argvec[2+4] = (unsigned long)arg4; \ 2682 _argvec[2+5] = (unsigned long)arg5; \ 2683 _argvec[2+6] = (unsigned long)arg6; \ 2685 VALGRIND_ALIGN_STACK \ 2687 "std 2,-16(11)\n\t" \ 2690 "ld 4, 16(11)\n\t" \ 2691 "ld 5, 24(11)\n\t" \ 2692 "ld 6, 32(11)\n\t" \ 2693 "ld 7, 40(11)\n\t" \ 2694 "ld 8, 48(11)\n\t" \ 2695 "ld 11, 0(11)\n\t" \ 2696 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2699 "ld 2,-16(11)\n\t" \ 2700 VALGRIND_RESTORE_STACK \ 2702 : "r" (&_argvec[2]) \ 2703 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2705 lval = (__typeof__(lval)) _res; \ 2708 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2711 volatile OrigFn _orig = (orig); \ 2712 volatile unsigned long _argvec[3+7]; \ 2713 volatile unsigned long _res; \ 2715 _argvec[1] = (unsigned long)_orig.r2; \ 2716 _argvec[2] = (unsigned long)_orig.nraddr; \ 2717 _argvec[2+1] = (unsigned long)arg1; \ 2718 _argvec[2+2] = (unsigned long)arg2; \ 2719 _argvec[2+3] = (unsigned long)arg3; \ 2720 _argvec[2+4] = (unsigned long)arg4; \ 2721 _argvec[2+5] = (unsigned long)arg5; \ 2722 _argvec[2+6] = (unsigned long)arg6; \ 2723 _argvec[2+7] = (unsigned long)arg7; \ 2725 VALGRIND_ALIGN_STACK \ 2727 "std 2,-16(11)\n\t" \ 2730 "ld 4, 16(11)\n\t" \ 2731 "ld 5, 24(11)\n\t" \ 2732 "ld 6, 32(11)\n\t" \ 2733 "ld 7, 40(11)\n\t" \ 2734 "ld 8, 48(11)\n\t" \ 2735 "ld 9, 56(11)\n\t" \ 2736 "ld 11, 0(11)\n\t" \ 2737 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2740 "ld 2,-16(11)\n\t" \ 2741 VALGRIND_RESTORE_STACK \ 2743 : "r" (&_argvec[2]) \ 2744 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2746 lval = (__typeof__(lval)) _res; \ 2749 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2752 volatile OrigFn _orig = (orig); \ 2753 volatile unsigned long _argvec[3+8]; \ 2754 volatile unsigned long _res; \ 2756 _argvec[1] = (unsigned long)_orig.r2; \ 2757 _argvec[2] = (unsigned long)_orig.nraddr; \ 2758 _argvec[2+1] = (unsigned long)arg1; \ 2759 _argvec[2+2] = (unsigned long)arg2; \ 2760 _argvec[2+3] = (unsigned long)arg3; \ 2761 _argvec[2+4] = (unsigned long)arg4; \ 2762 _argvec[2+5] = (unsigned long)arg5; \ 2763 _argvec[2+6] = (unsigned long)arg6; \ 2764 _argvec[2+7] = (unsigned long)arg7; \ 2765 _argvec[2+8] = (unsigned long)arg8; \ 2767 VALGRIND_ALIGN_STACK \ 2769 "std 2,-16(11)\n\t" \ 2772 "ld 4, 16(11)\n\t" \ 2773 "ld 5, 24(11)\n\t" \ 2774 "ld 6, 32(11)\n\t" \ 2775 "ld 7, 40(11)\n\t" \ 2776 "ld 8, 48(11)\n\t" \ 2777 "ld 9, 56(11)\n\t" \ 2778 "ld 10, 64(11)\n\t" \ 2779 "ld 11, 0(11)\n\t" \ 2780 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2783 "ld 2,-16(11)\n\t" \ 2784 VALGRIND_RESTORE_STACK \ 2786 : "r" (&_argvec[2]) \ 2787 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2789 lval = (__typeof__(lval)) _res; \ 2792 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2795 volatile OrigFn _orig = (orig); \ 2796 volatile unsigned long _argvec[3+9]; \ 2797 volatile unsigned long _res; \ 2799 _argvec[1] = (unsigned long)_orig.r2; \ 2800 _argvec[2] = (unsigned long)_orig.nraddr; \ 2801 _argvec[2+1] = (unsigned long)arg1; \ 2802 _argvec[2+2] = (unsigned long)arg2; \ 2803 _argvec[2+3] = (unsigned long)arg3; \ 2804 _argvec[2+4] = (unsigned long)arg4; \ 2805 _argvec[2+5] = (unsigned long)arg5; \ 2806 _argvec[2+6] = (unsigned long)arg6; \ 2807 _argvec[2+7] = (unsigned long)arg7; \ 2808 _argvec[2+8] = (unsigned long)arg8; \ 2809 _argvec[2+9] = (unsigned long)arg9; \ 2811 VALGRIND_ALIGN_STACK \ 2813 "std 2,-16(11)\n\t" \ 2815 "addi 1,1,-128\n\t" \ 2818 "std 3,112(1)\n\t" \ 2821 "ld 4, 16(11)\n\t" \ 2822 "ld 5, 24(11)\n\t" \ 2823 "ld 6, 32(11)\n\t" \ 2824 "ld 7, 40(11)\n\t" \ 2825 "ld 8, 48(11)\n\t" \ 2826 "ld 9, 56(11)\n\t" \ 2827 "ld 10, 64(11)\n\t" \ 2828 "ld 11, 0(11)\n\t" \ 2829 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2832 "ld 2,-16(11)\n\t" \ 2833 VALGRIND_RESTORE_STACK \ 2835 : "r" (&_argvec[2]) \ 2836 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2838 lval = (__typeof__(lval)) _res; \ 2841 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2842 arg7,arg8,arg9,arg10) \ 2844 volatile OrigFn _orig = (orig); \ 2845 volatile unsigned long _argvec[3+10]; \ 2846 volatile unsigned long _res; \ 2848 _argvec[1] = (unsigned long)_orig.r2; \ 2849 _argvec[2] = (unsigned long)_orig.nraddr; \ 2850 _argvec[2+1] = (unsigned long)arg1; \ 2851 _argvec[2+2] = (unsigned long)arg2; \ 2852 _argvec[2+3] = (unsigned long)arg3; \ 2853 _argvec[2+4] = (unsigned long)arg4; \ 2854 _argvec[2+5] = (unsigned long)arg5; \ 2855 _argvec[2+6] = (unsigned long)arg6; \ 2856 _argvec[2+7] = (unsigned long)arg7; \ 2857 _argvec[2+8] = (unsigned long)arg8; \ 2858 _argvec[2+9] = (unsigned long)arg9; \ 2859 _argvec[2+10] = (unsigned long)arg10; \ 2861 VALGRIND_ALIGN_STACK \ 2863 "std 2,-16(11)\n\t" \ 2865 "addi 1,1,-128\n\t" \ 2868 "std 3,120(1)\n\t" \ 2871 "std 3,112(1)\n\t" \ 2874 "ld 4, 16(11)\n\t" \ 2875 "ld 5, 24(11)\n\t" \ 2876 "ld 6, 32(11)\n\t" \ 2877 "ld 7, 40(11)\n\t" \ 2878 "ld 8, 48(11)\n\t" \ 2879 "ld 9, 56(11)\n\t" \ 2880 "ld 10, 64(11)\n\t" \ 2881 "ld 11, 0(11)\n\t" \ 2882 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2885 "ld 2,-16(11)\n\t" \ 2886 VALGRIND_RESTORE_STACK \ 2888 : "r" (&_argvec[2]) \ 2889 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2891 lval = (__typeof__(lval)) _res; \ 2894 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2895 arg7,arg8,arg9,arg10,arg11) \ 2897 volatile OrigFn _orig = (orig); \ 2898 volatile unsigned long _argvec[3+11]; \ 2899 volatile unsigned long _res; \ 2901 _argvec[1] = (unsigned long)_orig.r2; \ 2902 _argvec[2] = (unsigned long)_orig.nraddr; \ 2903 _argvec[2+1] = (unsigned long)arg1; \ 2904 _argvec[2+2] = (unsigned long)arg2; \ 2905 _argvec[2+3] = (unsigned long)arg3; \ 2906 _argvec[2+4] = (unsigned long)arg4; \ 2907 _argvec[2+5] = (unsigned long)arg5; \ 2908 _argvec[2+6] = (unsigned long)arg6; \ 2909 _argvec[2+7] = (unsigned long)arg7; \ 2910 _argvec[2+8] = (unsigned long)arg8; \ 2911 _argvec[2+9] = (unsigned long)arg9; \ 2912 _argvec[2+10] = (unsigned long)arg10; \ 2913 _argvec[2+11] = (unsigned long)arg11; \ 2915 VALGRIND_ALIGN_STACK \ 2917 "std 2,-16(11)\n\t" \ 2919 "addi 1,1,-144\n\t" \ 2922 "std 3,128(1)\n\t" \ 2925 "std 3,120(1)\n\t" \ 2928 "std 3,112(1)\n\t" \ 2931 "ld 4, 16(11)\n\t" \ 2932 "ld 5, 24(11)\n\t" \ 2933 "ld 6, 32(11)\n\t" \ 2934 "ld 7, 40(11)\n\t" \ 2935 "ld 8, 48(11)\n\t" \ 2936 "ld 9, 56(11)\n\t" \ 2937 "ld 10, 64(11)\n\t" \ 2938 "ld 11, 0(11)\n\t" \ 2939 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2942 "ld 2,-16(11)\n\t" \ 2943 VALGRIND_RESTORE_STACK \ 2945 : "r" (&_argvec[2]) \ 2946 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2948 lval = (__typeof__(lval)) _res; \ 2951 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2952 arg7,arg8,arg9,arg10,arg11,arg12) \ 2954 volatile OrigFn _orig = (orig); \ 2955 volatile unsigned long _argvec[3+12]; \ 2956 volatile unsigned long _res; \ 2958 _argvec[1] = (unsigned long)_orig.r2; \ 2959 _argvec[2] = (unsigned long)_orig.nraddr; \ 2960 _argvec[2+1] = (unsigned long)arg1; \ 2961 _argvec[2+2] = (unsigned long)arg2; \ 2962 _argvec[2+3] = (unsigned long)arg3; \ 2963 _argvec[2+4] = (unsigned long)arg4; \ 2964 _argvec[2+5] = (unsigned long)arg5; \ 2965 _argvec[2+6] = (unsigned long)arg6; \ 2966 _argvec[2+7] = (unsigned long)arg7; \ 2967 _argvec[2+8] = (unsigned long)arg8; \ 2968 _argvec[2+9] = (unsigned long)arg9; \ 2969 _argvec[2+10] = (unsigned long)arg10; \ 2970 _argvec[2+11] = (unsigned long)arg11; \ 2971 _argvec[2+12] = (unsigned long)arg12; \ 2973 VALGRIND_ALIGN_STACK \ 2975 "std 2,-16(11)\n\t" \ 2977 "addi 1,1,-144\n\t" \ 2980 "std 3,136(1)\n\t" \ 2983 "std 3,128(1)\n\t" \ 2986 "std 3,120(1)\n\t" \ 2989 "std 3,112(1)\n\t" \ 2992 "ld 4, 16(11)\n\t" \ 2993 "ld 5, 24(11)\n\t" \ 2994 "ld 6, 32(11)\n\t" \ 2995 "ld 7, 40(11)\n\t" \ 2996 "ld 8, 48(11)\n\t" \ 2997 "ld 9, 56(11)\n\t" \ 2998 "ld 10, 64(11)\n\t" \ 2999 "ld 11, 0(11)\n\t" \ 3000 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 3003 "ld 2,-16(11)\n\t" \ 3004 VALGRIND_RESTORE_STACK \ 3006 : "r" (&_argvec[2]) \ 3007 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3009 lval = (__typeof__(lval)) _res; \ 3016 #if defined(PLAT_arm_linux) 3019 #define __CALLER_SAVED_REGS "r0", "r1", "r2", "r3","r4","r14" 3034 #define VALGRIND_ALIGN_STACK \ 3037 "bic r4, r4, #7\n\t" \ 3039 #define VALGRIND_RESTORE_STACK \ 3045 #define CALL_FN_W_v(lval, orig) \ 3047 volatile OrigFn _orig = (orig); \ 3048 volatile unsigned long _argvec[1]; \ 3049 volatile unsigned long _res; \ 3050 _argvec[0] = (unsigned long)_orig.nraddr; \ 3052 VALGRIND_ALIGN_STACK \ 3053 "ldr r4, [%1] \n\t" \ 3054 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3055 VALGRIND_RESTORE_STACK \ 3058 : "0" (&_argvec[0]) \ 3059 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3061 lval = (__typeof__(lval)) _res; \ 3064 #define CALL_FN_W_W(lval, orig, arg1) \ 3066 volatile OrigFn _orig = (orig); \ 3067 volatile unsigned long _argvec[2]; \ 3068 volatile unsigned long _res; \ 3069 _argvec[0] = (unsigned long)_orig.nraddr; \ 3070 _argvec[1] = (unsigned long)(arg1); \ 3072 VALGRIND_ALIGN_STACK \ 3073 "ldr r0, [%1, #4] \n\t" \ 3074 "ldr r4, [%1] \n\t" \ 3075 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3076 VALGRIND_RESTORE_STACK \ 3079 : "0" (&_argvec[0]) \ 3080 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3082 lval = (__typeof__(lval)) _res; \ 3085 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 3087 volatile OrigFn _orig = (orig); \ 3088 volatile unsigned long _argvec[3]; \ 3089 volatile unsigned long _res; \ 3090 _argvec[0] = (unsigned long)_orig.nraddr; \ 3091 _argvec[1] = (unsigned long)(arg1); \ 3092 _argvec[2] = (unsigned long)(arg2); \ 3094 VALGRIND_ALIGN_STACK \ 3095 "ldr r0, [%1, #4] \n\t" \ 3096 "ldr r1, [%1, #8] \n\t" \ 3097 "ldr r4, [%1] \n\t" \ 3098 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3099 VALGRIND_RESTORE_STACK \ 3102 : "0" (&_argvec[0]) \ 3103 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3105 lval = (__typeof__(lval)) _res; \ 3108 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 3110 volatile OrigFn _orig = (orig); \ 3111 volatile unsigned long _argvec[4]; \ 3112 volatile unsigned long _res; \ 3113 _argvec[0] = (unsigned long)_orig.nraddr; \ 3114 _argvec[1] = (unsigned long)(arg1); \ 3115 _argvec[2] = (unsigned long)(arg2); \ 3116 _argvec[3] = (unsigned long)(arg3); \ 3118 VALGRIND_ALIGN_STACK \ 3119 "ldr r0, [%1, #4] \n\t" \ 3120 "ldr r1, [%1, #8] \n\t" \ 3121 "ldr r2, [%1, #12] \n\t" \ 3122 "ldr r4, [%1] \n\t" \ 3123 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3124 VALGRIND_RESTORE_STACK \ 3127 : "0" (&_argvec[0]) \ 3128 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3130 lval = (__typeof__(lval)) _res; \ 3133 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 3135 volatile OrigFn _orig = (orig); \ 3136 volatile unsigned long _argvec[5]; \ 3137 volatile unsigned long _res; \ 3138 _argvec[0] = (unsigned long)_orig.nraddr; \ 3139 _argvec[1] = (unsigned long)(arg1); \ 3140 _argvec[2] = (unsigned long)(arg2); \ 3141 _argvec[3] = (unsigned long)(arg3); \ 3142 _argvec[4] = (unsigned long)(arg4); \ 3144 VALGRIND_ALIGN_STACK \ 3145 "ldr r0, [%1, #4] \n\t" \ 3146 "ldr r1, [%1, #8] \n\t" \ 3147 "ldr r2, [%1, #12] \n\t" \ 3148 "ldr r3, [%1, #16] \n\t" \ 3149 "ldr r4, [%1] \n\t" \ 3150 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3151 VALGRIND_RESTORE_STACK \ 3154 : "0" (&_argvec[0]) \ 3155 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3157 lval = (__typeof__(lval)) _res; \ 3160 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 3162 volatile OrigFn _orig = (orig); \ 3163 volatile unsigned long _argvec[6]; \ 3164 volatile unsigned long _res; \ 3165 _argvec[0] = (unsigned long)_orig.nraddr; \ 3166 _argvec[1] = (unsigned long)(arg1); \ 3167 _argvec[2] = (unsigned long)(arg2); \ 3168 _argvec[3] = (unsigned long)(arg3); \ 3169 _argvec[4] = (unsigned long)(arg4); \ 3170 _argvec[5] = (unsigned long)(arg5); \ 3172 VALGRIND_ALIGN_STACK \ 3173 "sub sp, sp, #4 \n\t" \ 3174 "ldr r0, [%1, #20] \n\t" \ 3176 "ldr r0, [%1, #4] \n\t" \ 3177 "ldr r1, [%1, #8] \n\t" \ 3178 "ldr r2, [%1, #12] \n\t" \ 3179 "ldr r3, [%1, #16] \n\t" \ 3180 "ldr r4, [%1] \n\t" \ 3181 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3182 VALGRIND_RESTORE_STACK \ 3185 : "0" (&_argvec[0]) \ 3186 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3188 lval = (__typeof__(lval)) _res; \ 3191 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 3193 volatile OrigFn _orig = (orig); \ 3194 volatile unsigned long _argvec[7]; \ 3195 volatile unsigned long _res; \ 3196 _argvec[0] = (unsigned long)_orig.nraddr; \ 3197 _argvec[1] = (unsigned long)(arg1); \ 3198 _argvec[2] = (unsigned long)(arg2); \ 3199 _argvec[3] = (unsigned long)(arg3); \ 3200 _argvec[4] = (unsigned long)(arg4); \ 3201 _argvec[5] = (unsigned long)(arg5); \ 3202 _argvec[6] = (unsigned long)(arg6); \ 3204 VALGRIND_ALIGN_STACK \ 3205 "ldr r0, [%1, #20] \n\t" \ 3206 "ldr r1, [%1, #24] \n\t" \ 3207 "push {r0, r1} \n\t" \ 3208 "ldr r0, [%1, #4] \n\t" \ 3209 "ldr r1, [%1, #8] \n\t" \ 3210 "ldr r2, [%1, #12] \n\t" \ 3211 "ldr r3, [%1, #16] \n\t" \ 3212 "ldr r4, [%1] \n\t" \ 3213 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3214 VALGRIND_RESTORE_STACK \ 3217 : "0" (&_argvec[0]) \ 3218 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3220 lval = (__typeof__(lval)) _res; \ 3223 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3226 volatile OrigFn _orig = (orig); \ 3227 volatile unsigned long _argvec[8]; \ 3228 volatile unsigned long _res; \ 3229 _argvec[0] = (unsigned long)_orig.nraddr; \ 3230 _argvec[1] = (unsigned long)(arg1); \ 3231 _argvec[2] = (unsigned long)(arg2); \ 3232 _argvec[3] = (unsigned long)(arg3); \ 3233 _argvec[4] = (unsigned long)(arg4); \ 3234 _argvec[5] = (unsigned long)(arg5); \ 3235 _argvec[6] = (unsigned long)(arg6); \ 3236 _argvec[7] = (unsigned long)(arg7); \ 3238 VALGRIND_ALIGN_STACK \ 3239 "sub sp, sp, #4 \n\t" \ 3240 "ldr r0, [%1, #20] \n\t" \ 3241 "ldr r1, [%1, #24] \n\t" \ 3242 "ldr r2, [%1, #28] \n\t" \ 3243 "push {r0, r1, r2} \n\t" \ 3244 "ldr r0, [%1, #4] \n\t" \ 3245 "ldr r1, [%1, #8] \n\t" \ 3246 "ldr r2, [%1, #12] \n\t" \ 3247 "ldr r3, [%1, #16] \n\t" \ 3248 "ldr r4, [%1] \n\t" \ 3249 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3250 VALGRIND_RESTORE_STACK \ 3253 : "0" (&_argvec[0]) \ 3254 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3256 lval = (__typeof__(lval)) _res; \ 3259 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3262 volatile OrigFn _orig = (orig); \ 3263 volatile unsigned long _argvec[9]; \ 3264 volatile unsigned long _res; \ 3265 _argvec[0] = (unsigned long)_orig.nraddr; \ 3266 _argvec[1] = (unsigned long)(arg1); \ 3267 _argvec[2] = (unsigned long)(arg2); \ 3268 _argvec[3] = (unsigned long)(arg3); \ 3269 _argvec[4] = (unsigned long)(arg4); \ 3270 _argvec[5] = (unsigned long)(arg5); \ 3271 _argvec[6] = (unsigned long)(arg6); \ 3272 _argvec[7] = (unsigned long)(arg7); \ 3273 _argvec[8] = (unsigned long)(arg8); \ 3275 VALGRIND_ALIGN_STACK \ 3276 "ldr r0, [%1, #20] \n\t" \ 3277 "ldr r1, [%1, #24] \n\t" \ 3278 "ldr r2, [%1, #28] \n\t" \ 3279 "ldr r3, [%1, #32] \n\t" \ 3280 "push {r0, r1, r2, r3} \n\t" \ 3281 "ldr r0, [%1, #4] \n\t" \ 3282 "ldr r1, [%1, #8] \n\t" \ 3283 "ldr r2, [%1, #12] \n\t" \ 3284 "ldr r3, [%1, #16] \n\t" \ 3285 "ldr r4, [%1] \n\t" \ 3286 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3287 VALGRIND_RESTORE_STACK \ 3290 : "0" (&_argvec[0]) \ 3291 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3293 lval = (__typeof__(lval)) _res; \ 3296 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3299 volatile OrigFn _orig = (orig); \ 3300 volatile unsigned long _argvec[10]; \ 3301 volatile unsigned long _res; \ 3302 _argvec[0] = (unsigned long)_orig.nraddr; \ 3303 _argvec[1] = (unsigned long)(arg1); \ 3304 _argvec[2] = (unsigned long)(arg2); \ 3305 _argvec[3] = (unsigned long)(arg3); \ 3306 _argvec[4] = (unsigned long)(arg4); \ 3307 _argvec[5] = (unsigned long)(arg5); \ 3308 _argvec[6] = (unsigned long)(arg6); \ 3309 _argvec[7] = (unsigned long)(arg7); \ 3310 _argvec[8] = (unsigned long)(arg8); \ 3311 _argvec[9] = (unsigned long)(arg9); \ 3313 VALGRIND_ALIGN_STACK \ 3314 "sub sp, sp, #4 \n\t" \ 3315 "ldr r0, [%1, #20] \n\t" \ 3316 "ldr r1, [%1, #24] \n\t" \ 3317 "ldr r2, [%1, #28] \n\t" \ 3318 "ldr r3, [%1, #32] \n\t" \ 3319 "ldr r4, [%1, #36] \n\t" \ 3320 "push {r0, r1, r2, r3, r4} \n\t" \ 3321 "ldr r0, [%1, #4] \n\t" \ 3322 "ldr r1, [%1, #8] \n\t" \ 3323 "ldr r2, [%1, #12] \n\t" \ 3324 "ldr r3, [%1, #16] \n\t" \ 3325 "ldr r4, [%1] \n\t" \ 3326 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3327 VALGRIND_RESTORE_STACK \ 3330 : "0" (&_argvec[0]) \ 3331 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3333 lval = (__typeof__(lval)) _res; \ 3336 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3337 arg7,arg8,arg9,arg10) \ 3339 volatile OrigFn _orig = (orig); \ 3340 volatile unsigned long _argvec[11]; \ 3341 volatile unsigned long _res; \ 3342 _argvec[0] = (unsigned long)_orig.nraddr; \ 3343 _argvec[1] = (unsigned long)(arg1); \ 3344 _argvec[2] = (unsigned long)(arg2); \ 3345 _argvec[3] = (unsigned long)(arg3); \ 3346 _argvec[4] = (unsigned long)(arg4); \ 3347 _argvec[5] = (unsigned long)(arg5); \ 3348 _argvec[6] = (unsigned long)(arg6); \ 3349 _argvec[7] = (unsigned long)(arg7); \ 3350 _argvec[8] = (unsigned long)(arg8); \ 3351 _argvec[9] = (unsigned long)(arg9); \ 3352 _argvec[10] = (unsigned long)(arg10); \ 3354 VALGRIND_ALIGN_STACK \ 3355 "ldr r0, [%1, #40] \n\t" \ 3357 "ldr r0, [%1, #20] \n\t" \ 3358 "ldr r1, [%1, #24] \n\t" \ 3359 "ldr r2, [%1, #28] \n\t" \ 3360 "ldr r3, [%1, #32] \n\t" \ 3361 "ldr r4, [%1, #36] \n\t" \ 3362 "push {r0, r1, r2, r3, r4} \n\t" \ 3363 "ldr r0, [%1, #4] \n\t" \ 3364 "ldr r1, [%1, #8] \n\t" \ 3365 "ldr r2, [%1, #12] \n\t" \ 3366 "ldr r3, [%1, #16] \n\t" \ 3367 "ldr r4, [%1] \n\t" \ 3368 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3369 VALGRIND_RESTORE_STACK \ 3372 : "0" (&_argvec[0]) \ 3373 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3375 lval = (__typeof__(lval)) _res; \ 3378 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 3379 arg6,arg7,arg8,arg9,arg10, \ 3382 volatile OrigFn _orig = (orig); \ 3383 volatile unsigned long _argvec[12]; \ 3384 volatile unsigned long _res; \ 3385 _argvec[0] = (unsigned long)_orig.nraddr; \ 3386 _argvec[1] = (unsigned long)(arg1); \ 3387 _argvec[2] = (unsigned long)(arg2); \ 3388 _argvec[3] = (unsigned long)(arg3); \ 3389 _argvec[4] = (unsigned long)(arg4); \ 3390 _argvec[5] = (unsigned long)(arg5); \ 3391 _argvec[6] = (unsigned long)(arg6); \ 3392 _argvec[7] = (unsigned long)(arg7); \ 3393 _argvec[8] = (unsigned long)(arg8); \ 3394 _argvec[9] = (unsigned long)(arg9); \ 3395 _argvec[10] = (unsigned long)(arg10); \ 3396 _argvec[11] = (unsigned long)(arg11); \ 3398 VALGRIND_ALIGN_STACK \ 3399 "sub sp, sp, #4 \n\t" \ 3400 "ldr r0, [%1, #40] \n\t" \ 3401 "ldr r1, [%1, #44] \n\t" \ 3402 "push {r0, r1} \n\t" \ 3403 "ldr r0, [%1, #20] \n\t" \ 3404 "ldr r1, [%1, #24] \n\t" \ 3405 "ldr r2, [%1, #28] \n\t" \ 3406 "ldr r3, [%1, #32] \n\t" \ 3407 "ldr r4, [%1, #36] \n\t" \ 3408 "push {r0, r1, r2, r3, r4} \n\t" \ 3409 "ldr r0, [%1, #4] \n\t" \ 3410 "ldr r1, [%1, #8] \n\t" \ 3411 "ldr r2, [%1, #12] \n\t" \ 3412 "ldr r3, [%1, #16] \n\t" \ 3413 "ldr r4, [%1] \n\t" \ 3414 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3415 VALGRIND_RESTORE_STACK \ 3418 : "0" (&_argvec[0]) \ 3419 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3421 lval = (__typeof__(lval)) _res; \ 3424 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 3425 arg6,arg7,arg8,arg9,arg10, \ 3428 volatile OrigFn _orig = (orig); \ 3429 volatile unsigned long _argvec[13]; \ 3430 volatile unsigned long _res; \ 3431 _argvec[0] = (unsigned long)_orig.nraddr; \ 3432 _argvec[1] = (unsigned long)(arg1); \ 3433 _argvec[2] = (unsigned long)(arg2); \ 3434 _argvec[3] = (unsigned long)(arg3); \ 3435 _argvec[4] = (unsigned long)(arg4); \ 3436 _argvec[5] = (unsigned long)(arg5); \ 3437 _argvec[6] = (unsigned long)(arg6); \ 3438 _argvec[7] = (unsigned long)(arg7); \ 3439 _argvec[8] = (unsigned long)(arg8); \ 3440 _argvec[9] = (unsigned long)(arg9); \ 3441 _argvec[10] = (unsigned long)(arg10); \ 3442 _argvec[11] = (unsigned long)(arg11); \ 3443 _argvec[12] = (unsigned long)(arg12); \ 3445 VALGRIND_ALIGN_STACK \ 3446 "ldr r0, [%1, #40] \n\t" \ 3447 "ldr r1, [%1, #44] \n\t" \ 3448 "ldr r2, [%1, #48] \n\t" \ 3449 "push {r0, r1, r2} \n\t" \ 3450 "ldr r0, [%1, #20] \n\t" \ 3451 "ldr r1, [%1, #24] \n\t" \ 3452 "ldr r2, [%1, #28] \n\t" \ 3453 "ldr r3, [%1, #32] \n\t" \ 3454 "ldr r4, [%1, #36] \n\t" \ 3455 "push {r0, r1, r2, r3, r4} \n\t" \ 3456 "ldr r0, [%1, #4] \n\t" \ 3457 "ldr r1, [%1, #8] \n\t" \ 3458 "ldr r2, [%1, #12] \n\t" \ 3459 "ldr r3, [%1, #16] \n\t" \ 3460 "ldr r4, [%1] \n\t" \ 3461 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3462 VALGRIND_RESTORE_STACK \ 3465 : "0" (&_argvec[0]) \ 3466 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3468 lval = (__typeof__(lval)) _res; \ 3475 #if defined(PLAT_s390x_linux) 3481 #if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM) 3482 # define __FRAME_POINTER \ 3483 ,"d"(__builtin_dwarf_cfa()) 3484 # define VALGRIND_CFI_PROLOGUE \ 3485 ".cfi_remember_state\n\t" \ 3489 ".cfi_def_cfa r11, 0\n\t" 3490 # define VALGRIND_CFI_EPILOGUE \ 3492 ".cfi_restore_state\n\t" 3494 # define __FRAME_POINTER 3495 # define VALGRIND_CFI_PROLOGUE \ 3497 # define VALGRIND_CFI_EPILOGUE 3509 #define __CALLER_SAVED_REGS "0","1","2","3","4","5","14", \ 3510 "f0","f1","f2","f3","f4","f5","f6","f7" 3521 #define CALL_FN_W_v(lval, orig) \ 3523 volatile OrigFn _orig = (orig); \ 3524 volatile unsigned long _argvec[1]; \ 3525 volatile unsigned long _res; \ 3526 _argvec[0] = (unsigned long)_orig.nraddr; \ 3528 VALGRIND_CFI_PROLOGUE \ 3529 "aghi 15,-160\n\t" \ 3531 VALGRIND_CALL_NOREDIR_R1 \ 3534 VALGRIND_CFI_EPILOGUE \ 3536 : "d" (&_argvec[0]) __FRAME_POINTER \ 3537 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3539 lval = (__typeof__(lval)) _res; \ 3543 #define CALL_FN_W_W(lval, orig, arg1) \ 3545 volatile OrigFn _orig = (orig); \ 3546 volatile unsigned long _argvec[2]; \ 3547 volatile unsigned long _res; \ 3548 _argvec[0] = (unsigned long)_orig.nraddr; \ 3549 _argvec[1] = (unsigned long)arg1; \ 3551 VALGRIND_CFI_PROLOGUE \ 3552 "aghi 15,-160\n\t" \ 3555 VALGRIND_CALL_NOREDIR_R1 \ 3558 VALGRIND_CFI_EPILOGUE \ 3560 : "a" (&_argvec[0]) __FRAME_POINTER \ 3561 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3563 lval = (__typeof__(lval)) _res; \ 3566 #define CALL_FN_W_WW(lval, orig, arg1, arg2) \ 3568 volatile OrigFn _orig = (orig); \ 3569 volatile unsigned long _argvec[3]; \ 3570 volatile unsigned long _res; \ 3571 _argvec[0] = (unsigned long)_orig.nraddr; \ 3572 _argvec[1] = (unsigned long)arg1; \ 3573 _argvec[2] = (unsigned long)arg2; \ 3575 VALGRIND_CFI_PROLOGUE \ 3576 "aghi 15,-160\n\t" \ 3580 VALGRIND_CALL_NOREDIR_R1 \ 3583 VALGRIND_CFI_EPILOGUE \ 3585 : "a" (&_argvec[0]) __FRAME_POINTER \ 3586 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3588 lval = (__typeof__(lval)) _res; \ 3591 #define CALL_FN_W_WWW(lval, orig, arg1, arg2, arg3) \ 3593 volatile OrigFn _orig = (orig); \ 3594 volatile unsigned long _argvec[4]; \ 3595 volatile unsigned long _res; \ 3596 _argvec[0] = (unsigned long)_orig.nraddr; \ 3597 _argvec[1] = (unsigned long)arg1; \ 3598 _argvec[2] = (unsigned long)arg2; \ 3599 _argvec[3] = (unsigned long)arg3; \ 3601 VALGRIND_CFI_PROLOGUE \ 3602 "aghi 15,-160\n\t" \ 3607 VALGRIND_CALL_NOREDIR_R1 \ 3610 VALGRIND_CFI_EPILOGUE \ 3612 : "a" (&_argvec[0]) __FRAME_POINTER \ 3613 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3615 lval = (__typeof__(lval)) _res; \ 3618 #define CALL_FN_W_WWWW(lval, orig, arg1, arg2, arg3, arg4) \ 3620 volatile OrigFn _orig = (orig); \ 3621 volatile unsigned long _argvec[5]; \ 3622 volatile unsigned long _res; \ 3623 _argvec[0] = (unsigned long)_orig.nraddr; \ 3624 _argvec[1] = (unsigned long)arg1; \ 3625 _argvec[2] = (unsigned long)arg2; \ 3626 _argvec[3] = (unsigned long)arg3; \ 3627 _argvec[4] = (unsigned long)arg4; \ 3629 VALGRIND_CFI_PROLOGUE \ 3630 "aghi 15,-160\n\t" \ 3636 VALGRIND_CALL_NOREDIR_R1 \ 3639 VALGRIND_CFI_EPILOGUE \ 3641 : "a" (&_argvec[0]) __FRAME_POINTER \ 3642 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3644 lval = (__typeof__(lval)) _res; \ 3647 #define CALL_FN_W_5W(lval, orig, arg1, arg2, arg3, arg4, arg5) \ 3649 volatile OrigFn _orig = (orig); \ 3650 volatile unsigned long _argvec[6]; \ 3651 volatile unsigned long _res; \ 3652 _argvec[0] = (unsigned long)_orig.nraddr; \ 3653 _argvec[1] = (unsigned long)arg1; \ 3654 _argvec[2] = (unsigned long)arg2; \ 3655 _argvec[3] = (unsigned long)arg3; \ 3656 _argvec[4] = (unsigned long)arg4; \ 3657 _argvec[5] = (unsigned long)arg5; \ 3659 VALGRIND_CFI_PROLOGUE \ 3660 "aghi 15,-160\n\t" \ 3667 VALGRIND_CALL_NOREDIR_R1 \ 3670 VALGRIND_CFI_EPILOGUE \ 3672 : "a" (&_argvec[0]) __FRAME_POINTER \ 3673 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3675 lval = (__typeof__(lval)) _res; \ 3678 #define CALL_FN_W_6W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3681 volatile OrigFn _orig = (orig); \ 3682 volatile unsigned long _argvec[7]; \ 3683 volatile unsigned long _res; \ 3684 _argvec[0] = (unsigned long)_orig.nraddr; \ 3685 _argvec[1] = (unsigned long)arg1; \ 3686 _argvec[2] = (unsigned long)arg2; \ 3687 _argvec[3] = (unsigned long)arg3; \ 3688 _argvec[4] = (unsigned long)arg4; \ 3689 _argvec[5] = (unsigned long)arg5; \ 3690 _argvec[6] = (unsigned long)arg6; \ 3692 VALGRIND_CFI_PROLOGUE \ 3693 "aghi 15,-168\n\t" \ 3699 "mvc 160(8,15), 48(1)\n\t" \ 3701 VALGRIND_CALL_NOREDIR_R1 \ 3704 VALGRIND_CFI_EPILOGUE \ 3706 : "a" (&_argvec[0]) __FRAME_POINTER \ 3707 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3709 lval = (__typeof__(lval)) _res; \ 3712 #define CALL_FN_W_7W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3715 volatile OrigFn _orig = (orig); \ 3716 volatile unsigned long _argvec[8]; \ 3717 volatile unsigned long _res; \ 3718 _argvec[0] = (unsigned long)_orig.nraddr; \ 3719 _argvec[1] = (unsigned long)arg1; \ 3720 _argvec[2] = (unsigned long)arg2; \ 3721 _argvec[3] = (unsigned long)arg3; \ 3722 _argvec[4] = (unsigned long)arg4; \ 3723 _argvec[5] = (unsigned long)arg5; \ 3724 _argvec[6] = (unsigned long)arg6; \ 3725 _argvec[7] = (unsigned long)arg7; \ 3727 VALGRIND_CFI_PROLOGUE \ 3728 "aghi 15,-176\n\t" \ 3734 "mvc 160(8,15), 48(1)\n\t" \ 3735 "mvc 168(8,15), 56(1)\n\t" \ 3737 VALGRIND_CALL_NOREDIR_R1 \ 3740 VALGRIND_CFI_EPILOGUE \ 3742 : "a" (&_argvec[0]) __FRAME_POINTER \ 3743 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3745 lval = (__typeof__(lval)) _res; \ 3748 #define CALL_FN_W_8W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3751 volatile OrigFn _orig = (orig); \ 3752 volatile unsigned long _argvec[9]; \ 3753 volatile unsigned long _res; \ 3754 _argvec[0] = (unsigned long)_orig.nraddr; \ 3755 _argvec[1] = (unsigned long)arg1; \ 3756 _argvec[2] = (unsigned long)arg2; \ 3757 _argvec[3] = (unsigned long)arg3; \ 3758 _argvec[4] = (unsigned long)arg4; \ 3759 _argvec[5] = (unsigned long)arg5; \ 3760 _argvec[6] = (unsigned long)arg6; \ 3761 _argvec[7] = (unsigned long)arg7; \ 3762 _argvec[8] = (unsigned long)arg8; \ 3764 VALGRIND_CFI_PROLOGUE \ 3765 "aghi 15,-184\n\t" \ 3771 "mvc 160(8,15), 48(1)\n\t" \ 3772 "mvc 168(8,15), 56(1)\n\t" \ 3773 "mvc 176(8,15), 64(1)\n\t" \ 3775 VALGRIND_CALL_NOREDIR_R1 \ 3778 VALGRIND_CFI_EPILOGUE \ 3780 : "a" (&_argvec[0]) __FRAME_POINTER \ 3781 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3783 lval = (__typeof__(lval)) _res; \ 3786 #define CALL_FN_W_9W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3787 arg6, arg7 ,arg8, arg9) \ 3789 volatile OrigFn _orig = (orig); \ 3790 volatile unsigned long _argvec[10]; \ 3791 volatile unsigned long _res; \ 3792 _argvec[0] = (unsigned long)_orig.nraddr; \ 3793 _argvec[1] = (unsigned long)arg1; \ 3794 _argvec[2] = (unsigned long)arg2; \ 3795 _argvec[3] = (unsigned long)arg3; \ 3796 _argvec[4] = (unsigned long)arg4; \ 3797 _argvec[5] = (unsigned long)arg5; \ 3798 _argvec[6] = (unsigned long)arg6; \ 3799 _argvec[7] = (unsigned long)arg7; \ 3800 _argvec[8] = (unsigned long)arg8; \ 3801 _argvec[9] = (unsigned long)arg9; \ 3803 VALGRIND_CFI_PROLOGUE \ 3804 "aghi 15,-192\n\t" \ 3810 "mvc 160(8,15), 48(1)\n\t" \ 3811 "mvc 168(8,15), 56(1)\n\t" \ 3812 "mvc 176(8,15), 64(1)\n\t" \ 3813 "mvc 184(8,15), 72(1)\n\t" \ 3815 VALGRIND_CALL_NOREDIR_R1 \ 3818 VALGRIND_CFI_EPILOGUE \ 3820 : "a" (&_argvec[0]) __FRAME_POINTER \ 3821 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3823 lval = (__typeof__(lval)) _res; \ 3826 #define CALL_FN_W_10W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3827 arg6, arg7 ,arg8, arg9, arg10) \ 3829 volatile OrigFn _orig = (orig); \ 3830 volatile unsigned long _argvec[11]; \ 3831 volatile unsigned long _res; \ 3832 _argvec[0] = (unsigned long)_orig.nraddr; \ 3833 _argvec[1] = (unsigned long)arg1; \ 3834 _argvec[2] = (unsigned long)arg2; \ 3835 _argvec[3] = (unsigned long)arg3; \ 3836 _argvec[4] = (unsigned long)arg4; \ 3837 _argvec[5] = (unsigned long)arg5; \ 3838 _argvec[6] = (unsigned long)arg6; \ 3839 _argvec[7] = (unsigned long)arg7; \ 3840 _argvec[8] = (unsigned long)arg8; \ 3841 _argvec[9] = (unsigned long)arg9; \ 3842 _argvec[10] = (unsigned long)arg10; \ 3844 VALGRIND_CFI_PROLOGUE \ 3845 "aghi 15,-200\n\t" \ 3851 "mvc 160(8,15), 48(1)\n\t" \ 3852 "mvc 168(8,15), 56(1)\n\t" \ 3853 "mvc 176(8,15), 64(1)\n\t" \ 3854 "mvc 184(8,15), 72(1)\n\t" \ 3855 "mvc 192(8,15), 80(1)\n\t" \ 3857 VALGRIND_CALL_NOREDIR_R1 \ 3860 VALGRIND_CFI_EPILOGUE \ 3862 : "a" (&_argvec[0]) __FRAME_POINTER \ 3863 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3865 lval = (__typeof__(lval)) _res; \ 3868 #define CALL_FN_W_11W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3869 arg6, arg7 ,arg8, arg9, arg10, arg11) \ 3871 volatile OrigFn _orig = (orig); \ 3872 volatile unsigned long _argvec[12]; \ 3873 volatile unsigned long _res; \ 3874 _argvec[0] = (unsigned long)_orig.nraddr; \ 3875 _argvec[1] = (unsigned long)arg1; \ 3876 _argvec[2] = (unsigned long)arg2; \ 3877 _argvec[3] = (unsigned long)arg3; \ 3878 _argvec[4] = (unsigned long)arg4; \ 3879 _argvec[5] = (unsigned long)arg5; \ 3880 _argvec[6] = (unsigned long)arg6; \ 3881 _argvec[7] = (unsigned long)arg7; \ 3882 _argvec[8] = (unsigned long)arg8; \ 3883 _argvec[9] = (unsigned long)arg9; \ 3884 _argvec[10] = (unsigned long)arg10; \ 3885 _argvec[11] = (unsigned long)arg11; \ 3887 VALGRIND_CFI_PROLOGUE \ 3888 "aghi 15,-208\n\t" \ 3894 "mvc 160(8,15), 48(1)\n\t" \ 3895 "mvc 168(8,15), 56(1)\n\t" \ 3896 "mvc 176(8,15), 64(1)\n\t" \ 3897 "mvc 184(8,15), 72(1)\n\t" \ 3898 "mvc 192(8,15), 80(1)\n\t" \ 3899 "mvc 200(8,15), 88(1)\n\t" \ 3901 VALGRIND_CALL_NOREDIR_R1 \ 3904 VALGRIND_CFI_EPILOGUE \ 3906 : "a" (&_argvec[0]) __FRAME_POINTER \ 3907 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3909 lval = (__typeof__(lval)) _res; \ 3912 #define CALL_FN_W_12W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3913 arg6, arg7 ,arg8, arg9, arg10, arg11, arg12)\ 3915 volatile OrigFn _orig = (orig); \ 3916 volatile unsigned long _argvec[13]; \ 3917 volatile unsigned long _res; \ 3918 _argvec[0] = (unsigned long)_orig.nraddr; \ 3919 _argvec[1] = (unsigned long)arg1; \ 3920 _argvec[2] = (unsigned long)arg2; \ 3921 _argvec[3] = (unsigned long)arg3; \ 3922 _argvec[4] = (unsigned long)arg4; \ 3923 _argvec[5] = (unsigned long)arg5; \ 3924 _argvec[6] = (unsigned long)arg6; \ 3925 _argvec[7] = (unsigned long)arg7; \ 3926 _argvec[8] = (unsigned long)arg8; \ 3927 _argvec[9] = (unsigned long)arg9; \ 3928 _argvec[10] = (unsigned long)arg10; \ 3929 _argvec[11] = (unsigned long)arg11; \ 3930 _argvec[12] = (unsigned long)arg12; \ 3932 VALGRIND_CFI_PROLOGUE \ 3933 "aghi 15,-216\n\t" \ 3939 "mvc 160(8,15), 48(1)\n\t" \ 3940 "mvc 168(8,15), 56(1)\n\t" \ 3941 "mvc 176(8,15), 64(1)\n\t" \ 3942 "mvc 184(8,15), 72(1)\n\t" \ 3943 "mvc 192(8,15), 80(1)\n\t" \ 3944 "mvc 200(8,15), 88(1)\n\t" \ 3945 "mvc 208(8,15), 96(1)\n\t" \ 3947 VALGRIND_CALL_NOREDIR_R1 \ 3950 VALGRIND_CFI_EPILOGUE \ 3952 : "a" (&_argvec[0]) __FRAME_POINTER \ 3953 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3955 lval = (__typeof__(lval)) _res; \ 3963 #if defined(PLAT_mips32_linux) 3966 #define __CALLER_SAVED_REGS "$2", "$3", "$4", "$5", "$6", \ 3967 "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 3973 #define CALL_FN_W_v(lval, orig) \ 3975 volatile OrigFn _orig = (orig); \ 3976 volatile unsigned long _argvec[1]; \ 3977 volatile unsigned long _res; \ 3978 _argvec[0] = (unsigned long)_orig.nraddr; \ 3980 "subu $29, $29, 8 \n\t" \ 3981 "sw $28, 0($29) \n\t" \ 3982 "sw $31, 4($29) \n\t" \ 3983 "subu $29, $29, 16 \n\t" \ 3984 "lw $25, 0(%1) \n\t" \ 3985 VALGRIND_CALL_NOREDIR_T9 \ 3986 "addu $29, $29, 16\n\t" \ 3987 "lw $28, 0($29) \n\t" \ 3988 "lw $31, 4($29) \n\t" \ 3989 "addu $29, $29, 8 \n\t" \ 3992 : "0" (&_argvec[0]) \ 3993 : "memory", __CALLER_SAVED_REGS \ 3995 lval = (__typeof__(lval)) _res; \ 3998 #define CALL_FN_W_W(lval, orig, arg1) \ 4000 volatile OrigFn _orig = (orig); \ 4001 volatile unsigned long _argvec[2]; \ 4002 volatile unsigned long _res; \ 4003 _argvec[0] = (unsigned long)_orig.nraddr; \ 4004 _argvec[1] = (unsigned long)(arg1); \ 4006 "subu $29, $29, 8 \n\t" \ 4007 "sw $28, 0($29) \n\t" \ 4008 "sw $31, 4($29) \n\t" \ 4009 "subu $29, $29, 16 \n\t" \ 4010 "lw $4, 4(%1) \n\t" \ 4011 "lw $25, 0(%1) \n\t" \ 4012 VALGRIND_CALL_NOREDIR_T9 \ 4013 "addu $29, $29, 16 \n\t" \ 4014 "lw $28, 0($29) \n\t" \ 4015 "lw $31, 4($29) \n\t" \ 4016 "addu $29, $29, 8 \n\t" \ 4019 : "0" (&_argvec[0]) \ 4020 : "memory", __CALLER_SAVED_REGS \ 4022 lval = (__typeof__(lval)) _res; \ 4025 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 4027 volatile OrigFn _orig = (orig); \ 4028 volatile unsigned long _argvec[3]; \ 4029 volatile unsigned long _res; \ 4030 _argvec[0] = (unsigned long)_orig.nraddr; \ 4031 _argvec[1] = (unsigned long)(arg1); \ 4032 _argvec[2] = (unsigned long)(arg2); \ 4034 "subu $29, $29, 8 \n\t" \ 4035 "sw $28, 0($29) \n\t" \ 4036 "sw $31, 4($29) \n\t" \ 4037 "subu $29, $29, 16 \n\t" \ 4038 "lw $4, 4(%1) \n\t" \ 4039 "lw $5, 8(%1) \n\t" \ 4040 "lw $25, 0(%1) \n\t" \ 4041 VALGRIND_CALL_NOREDIR_T9 \ 4042 "addu $29, $29, 16 \n\t" \ 4043 "lw $28, 0($29) \n\t" \ 4044 "lw $31, 4($29) \n\t" \ 4045 "addu $29, $29, 8 \n\t" \ 4048 : "0" (&_argvec[0]) \ 4049 : "memory", __CALLER_SAVED_REGS \ 4051 lval = (__typeof__(lval)) _res; \ 4054 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 4056 volatile OrigFn _orig = (orig); \ 4057 volatile unsigned long _argvec[4]; \ 4058 volatile unsigned long _res; \ 4059 _argvec[0] = (unsigned long)_orig.nraddr; \ 4060 _argvec[1] = (unsigned long)(arg1); \ 4061 _argvec[2] = (unsigned long)(arg2); \ 4062 _argvec[3] = (unsigned long)(arg3); \ 4064 "subu $29, $29, 8 \n\t" \ 4065 "sw $28, 0($29) \n\t" \ 4066 "sw $31, 4($29) \n\t" \ 4067 "subu $29, $29, 16 \n\t" \ 4068 "lw $4, 4(%1) \n\t" \ 4069 "lw $5, 8(%1) \n\t" \ 4070 "lw $6, 12(%1) \n\t" \ 4071 "lw $25, 0(%1) \n\t" \ 4072 VALGRIND_CALL_NOREDIR_T9 \ 4073 "addu $29, $29, 16 \n\t" \ 4074 "lw $28, 0($29) \n\t" \ 4075 "lw $31, 4($29) \n\t" \ 4076 "addu $29, $29, 8 \n\t" \ 4079 : "0" (&_argvec[0]) \ 4080 : "memory", __CALLER_SAVED_REGS \ 4082 lval = (__typeof__(lval)) _res; \ 4085 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 4087 volatile OrigFn _orig = (orig); \ 4088 volatile unsigned long _argvec[5]; \ 4089 volatile unsigned long _res; \ 4090 _argvec[0] = (unsigned long)_orig.nraddr; \ 4091 _argvec[1] = (unsigned long)(arg1); \ 4092 _argvec[2] = (unsigned long)(arg2); \ 4093 _argvec[3] = (unsigned long)(arg3); \ 4094 _argvec[4] = (unsigned long)(arg4); \ 4096 "subu $29, $29, 8 \n\t" \ 4097 "sw $28, 0($29) \n\t" \ 4098 "sw $31, 4($29) \n\t" \ 4099 "subu $29, $29, 16 \n\t" \ 4100 "lw $4, 4(%1) \n\t" \ 4101 "lw $5, 8(%1) \n\t" \ 4102 "lw $6, 12(%1) \n\t" \ 4103 "lw $7, 16(%1) \n\t" \ 4104 "lw $25, 0(%1) \n\t" \ 4105 VALGRIND_CALL_NOREDIR_T9 \ 4106 "addu $29, $29, 16 \n\t" \ 4107 "lw $28, 0($29) \n\t" \ 4108 "lw $31, 4($29) \n\t" \ 4109 "addu $29, $29, 8 \n\t" \ 4112 : "0" (&_argvec[0]) \ 4113 : "memory", __CALLER_SAVED_REGS \ 4115 lval = (__typeof__(lval)) _res; \ 4118 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 4120 volatile OrigFn _orig = (orig); \ 4121 volatile unsigned long _argvec[6]; \ 4122 volatile unsigned long _res; \ 4123 _argvec[0] = (unsigned long)_orig.nraddr; \ 4124 _argvec[1] = (unsigned long)(arg1); \ 4125 _argvec[2] = (unsigned long)(arg2); \ 4126 _argvec[3] = (unsigned long)(arg3); \ 4127 _argvec[4] = (unsigned long)(arg4); \ 4128 _argvec[5] = (unsigned long)(arg5); \ 4130 "subu $29, $29, 8 \n\t" \ 4131 "sw $28, 0($29) \n\t" \ 4132 "sw $31, 4($29) \n\t" \ 4133 "lw $4, 20(%1) \n\t" \ 4134 "subu $29, $29, 24\n\t" \ 4135 "sw $4, 16($29) \n\t" \ 4136 "lw $4, 4(%1) \n\t" \ 4137 "lw $5, 8(%1) \n\t" \ 4138 "lw $6, 12(%1) \n\t" \ 4139 "lw $7, 16(%1) \n\t" \ 4140 "lw $25, 0(%1) \n\t" \ 4141 VALGRIND_CALL_NOREDIR_T9 \ 4142 "addu $29, $29, 24 \n\t" \ 4143 "lw $28, 0($29) \n\t" \ 4144 "lw $31, 4($29) \n\t" \ 4145 "addu $29, $29, 8 \n\t" \ 4148 : "0" (&_argvec[0]) \ 4149 : "memory", __CALLER_SAVED_REGS \ 4151 lval = (__typeof__(lval)) _res; \ 4153 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 4155 volatile OrigFn _orig = (orig); \ 4156 volatile unsigned long _argvec[7]; \ 4157 volatile unsigned long _res; \ 4158 _argvec[0] = (unsigned long)_orig.nraddr; \ 4159 _argvec[1] = (unsigned long)(arg1); \ 4160 _argvec[2] = (unsigned long)(arg2); \ 4161 _argvec[3] = (unsigned long)(arg3); \ 4162 _argvec[4] = (unsigned long)(arg4); \ 4163 _argvec[5] = (unsigned long)(arg5); \ 4164 _argvec[6] = (unsigned long)(arg6); \ 4166 "subu $29, $29, 8 \n\t" \ 4167 "sw $28, 0($29) \n\t" \ 4168 "sw $31, 4($29) \n\t" \ 4169 "lw $4, 20(%1) \n\t" \ 4170 "subu $29, $29, 32\n\t" \ 4171 "sw $4, 16($29) \n\t" \ 4172 "lw $4, 24(%1) \n\t" \ 4174 "sw $4, 20($29) \n\t" \ 4175 "lw $4, 4(%1) \n\t" \ 4176 "lw $5, 8(%1) \n\t" \ 4177 "lw $6, 12(%1) \n\t" \ 4178 "lw $7, 16(%1) \n\t" \ 4179 "lw $25, 0(%1) \n\t" \ 4180 VALGRIND_CALL_NOREDIR_T9 \ 4181 "addu $29, $29, 32 \n\t" \ 4182 "lw $28, 0($29) \n\t" \ 4183 "lw $31, 4($29) \n\t" \ 4184 "addu $29, $29, 8 \n\t" \ 4187 : "0" (&_argvec[0]) \ 4188 : "memory", __CALLER_SAVED_REGS \ 4190 lval = (__typeof__(lval)) _res; \ 4193 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4196 volatile OrigFn _orig = (orig); \ 4197 volatile unsigned long _argvec[8]; \ 4198 volatile unsigned long _res; \ 4199 _argvec[0] = (unsigned long)_orig.nraddr; \ 4200 _argvec[1] = (unsigned long)(arg1); \ 4201 _argvec[2] = (unsigned long)(arg2); \ 4202 _argvec[3] = (unsigned long)(arg3); \ 4203 _argvec[4] = (unsigned long)(arg4); \ 4204 _argvec[5] = (unsigned long)(arg5); \ 4205 _argvec[6] = (unsigned long)(arg6); \ 4206 _argvec[7] = (unsigned long)(arg7); \ 4208 "subu $29, $29, 8 \n\t" \ 4209 "sw $28, 0($29) \n\t" \ 4210 "sw $31, 4($29) \n\t" \ 4211 "lw $4, 20(%1) \n\t" \ 4212 "subu $29, $29, 32\n\t" \ 4213 "sw $4, 16($29) \n\t" \ 4214 "lw $4, 24(%1) \n\t" \ 4215 "sw $4, 20($29) \n\t" \ 4216 "lw $4, 28(%1) \n\t" \ 4217 "sw $4, 24($29) \n\t" \ 4218 "lw $4, 4(%1) \n\t" \ 4219 "lw $5, 8(%1) \n\t" \ 4220 "lw $6, 12(%1) \n\t" \ 4221 "lw $7, 16(%1) \n\t" \ 4222 "lw $25, 0(%1) \n\t" \ 4223 VALGRIND_CALL_NOREDIR_T9 \ 4224 "addu $29, $29, 32 \n\t" \ 4225 "lw $28, 0($29) \n\t" \ 4226 "lw $31, 4($29) \n\t" \ 4227 "addu $29, $29, 8 \n\t" \ 4230 : "0" (&_argvec[0]) \ 4231 : "memory", __CALLER_SAVED_REGS \ 4233 lval = (__typeof__(lval)) _res; \ 4236 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4239 volatile OrigFn _orig = (orig); \ 4240 volatile unsigned long _argvec[9]; \ 4241 volatile unsigned long _res; \ 4242 _argvec[0] = (unsigned long)_orig.nraddr; \ 4243 _argvec[1] = (unsigned long)(arg1); \ 4244 _argvec[2] = (unsigned long)(arg2); \ 4245 _argvec[3] = (unsigned long)(arg3); \ 4246 _argvec[4] = (unsigned long)(arg4); \ 4247 _argvec[5] = (unsigned long)(arg5); \ 4248 _argvec[6] = (unsigned long)(arg6); \ 4249 _argvec[7] = (unsigned long)(arg7); \ 4250 _argvec[8] = (unsigned long)(arg8); \ 4252 "subu $29, $29, 8 \n\t" \ 4253 "sw $28, 0($29) \n\t" \ 4254 "sw $31, 4($29) \n\t" \ 4255 "lw $4, 20(%1) \n\t" \ 4256 "subu $29, $29, 40\n\t" \ 4257 "sw $4, 16($29) \n\t" \ 4258 "lw $4, 24(%1) \n\t" \ 4259 "sw $4, 20($29) \n\t" \ 4260 "lw $4, 28(%1) \n\t" \ 4261 "sw $4, 24($29) \n\t" \ 4262 "lw $4, 32(%1) \n\t" \ 4263 "sw $4, 28($29) \n\t" \ 4264 "lw $4, 4(%1) \n\t" \ 4265 "lw $5, 8(%1) \n\t" \ 4266 "lw $6, 12(%1) \n\t" \ 4267 "lw $7, 16(%1) \n\t" \ 4268 "lw $25, 0(%1) \n\t" \ 4269 VALGRIND_CALL_NOREDIR_T9 \ 4270 "addu $29, $29, 40 \n\t" \ 4271 "lw $28, 0($29) \n\t" \ 4272 "lw $31, 4($29) \n\t" \ 4273 "addu $29, $29, 8 \n\t" \ 4276 : "0" (&_argvec[0]) \ 4277 : "memory", __CALLER_SAVED_REGS \ 4279 lval = (__typeof__(lval)) _res; \ 4282 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4285 volatile OrigFn _orig = (orig); \ 4286 volatile unsigned long _argvec[10]; \ 4287 volatile unsigned long _res; \ 4288 _argvec[0] = (unsigned long)_orig.nraddr; \ 4289 _argvec[1] = (unsigned long)(arg1); \ 4290 _argvec[2] = (unsigned long)(arg2); \ 4291 _argvec[3] = (unsigned long)(arg3); \ 4292 _argvec[4] = (unsigned long)(arg4); \ 4293 _argvec[5] = (unsigned long)(arg5); \ 4294 _argvec[6] = (unsigned long)(arg6); \ 4295 _argvec[7] = (unsigned long)(arg7); \ 4296 _argvec[8] = (unsigned long)(arg8); \ 4297 _argvec[9] = (unsigned long)(arg9); \ 4299 "subu $29, $29, 8 \n\t" \ 4300 "sw $28, 0($29) \n\t" \ 4301 "sw $31, 4($29) \n\t" \ 4302 "lw $4, 20(%1) \n\t" \ 4303 "subu $29, $29, 40\n\t" \ 4304 "sw $4, 16($29) \n\t" \ 4305 "lw $4, 24(%1) \n\t" \ 4306 "sw $4, 20($29) \n\t" \ 4307 "lw $4, 28(%1) \n\t" \ 4308 "sw $4, 24($29) \n\t" \ 4309 "lw $4, 32(%1) \n\t" \ 4310 "sw $4, 28($29) \n\t" \ 4311 "lw $4, 36(%1) \n\t" \ 4312 "sw $4, 32($29) \n\t" \ 4313 "lw $4, 4(%1) \n\t" \ 4314 "lw $5, 8(%1) \n\t" \ 4315 "lw $6, 12(%1) \n\t" \ 4316 "lw $7, 16(%1) \n\t" \ 4317 "lw $25, 0(%1) \n\t" \ 4318 VALGRIND_CALL_NOREDIR_T9 \ 4319 "addu $29, $29, 40 \n\t" \ 4320 "lw $28, 0($29) \n\t" \ 4321 "lw $31, 4($29) \n\t" \ 4322 "addu $29, $29, 8 \n\t" \ 4325 : "0" (&_argvec[0]) \ 4326 : "memory", __CALLER_SAVED_REGS \ 4328 lval = (__typeof__(lval)) _res; \ 4331 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4332 arg7,arg8,arg9,arg10) \ 4334 volatile OrigFn _orig = (orig); \ 4335 volatile unsigned long _argvec[11]; \ 4336 volatile unsigned long _res; \ 4337 _argvec[0] = (unsigned long)_orig.nraddr; \ 4338 _argvec[1] = (unsigned long)(arg1); \ 4339 _argvec[2] = (unsigned long)(arg2); \ 4340 _argvec[3] = (unsigned long)(arg3); \ 4341 _argvec[4] = (unsigned long)(arg4); \ 4342 _argvec[5] = (unsigned long)(arg5); \ 4343 _argvec[6] = (unsigned long)(arg6); \ 4344 _argvec[7] = (unsigned long)(arg7); \ 4345 _argvec[8] = (unsigned long)(arg8); \ 4346 _argvec[9] = (unsigned long)(arg9); \ 4347 _argvec[10] = (unsigned long)(arg10); \ 4349 "subu $29, $29, 8 \n\t" \ 4350 "sw $28, 0($29) \n\t" \ 4351 "sw $31, 4($29) \n\t" \ 4352 "lw $4, 20(%1) \n\t" \ 4353 "subu $29, $29, 48\n\t" \ 4354 "sw $4, 16($29) \n\t" \ 4355 "lw $4, 24(%1) \n\t" \ 4356 "sw $4, 20($29) \n\t" \ 4357 "lw $4, 28(%1) \n\t" \ 4358 "sw $4, 24($29) \n\t" \ 4359 "lw $4, 32(%1) \n\t" \ 4360 "sw $4, 28($29) \n\t" \ 4361 "lw $4, 36(%1) \n\t" \ 4362 "sw $4, 32($29) \n\t" \ 4363 "lw $4, 40(%1) \n\t" \ 4364 "sw $4, 36($29) \n\t" \ 4365 "lw $4, 4(%1) \n\t" \ 4366 "lw $5, 8(%1) \n\t" \ 4367 "lw $6, 12(%1) \n\t" \ 4368 "lw $7, 16(%1) \n\t" \ 4369 "lw $25, 0(%1) \n\t" \ 4370 VALGRIND_CALL_NOREDIR_T9 \ 4371 "addu $29, $29, 48 \n\t" \ 4372 "lw $28, 0($29) \n\t" \ 4373 "lw $31, 4($29) \n\t" \ 4374 "addu $29, $29, 8 \n\t" \ 4377 : "0" (&_argvec[0]) \ 4378 : "memory", __CALLER_SAVED_REGS \ 4380 lval = (__typeof__(lval)) _res; \ 4383 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 4384 arg6,arg7,arg8,arg9,arg10, \ 4387 volatile OrigFn _orig = (orig); \ 4388 volatile unsigned long _argvec[12]; \ 4389 volatile unsigned long _res; \ 4390 _argvec[0] = (unsigned long)_orig.nraddr; \ 4391 _argvec[1] = (unsigned long)(arg1); \ 4392 _argvec[2] = (unsigned long)(arg2); \ 4393 _argvec[3] = (unsigned long)(arg3); \ 4394 _argvec[4] = (unsigned long)(arg4); \ 4395 _argvec[5] = (unsigned long)(arg5); \ 4396 _argvec[6] = (unsigned long)(arg6); \ 4397 _argvec[7] = (unsigned long)(arg7); \ 4398 _argvec[8] = (unsigned long)(arg8); \ 4399 _argvec[9] = (unsigned long)(arg9); \ 4400 _argvec[10] = (unsigned long)(arg10); \ 4401 _argvec[11] = (unsigned long)(arg11); \ 4403 "subu $29, $29, 8 \n\t" \ 4404 "sw $28, 0($29) \n\t" \ 4405 "sw $31, 4($29) \n\t" \ 4406 "lw $4, 20(%1) \n\t" \ 4407 "subu $29, $29, 48\n\t" \ 4408 "sw $4, 16($29) \n\t" \ 4409 "lw $4, 24(%1) \n\t" \ 4410 "sw $4, 20($29) \n\t" \ 4411 "lw $4, 28(%1) \n\t" \ 4412 "sw $4, 24($29) \n\t" \ 4413 "lw $4, 32(%1) \n\t" \ 4414 "sw $4, 28($29) \n\t" \ 4415 "lw $4, 36(%1) \n\t" \ 4416 "sw $4, 32($29) \n\t" \ 4417 "lw $4, 40(%1) \n\t" \ 4418 "sw $4, 36($29) \n\t" \ 4419 "lw $4, 44(%1) \n\t" \ 4420 "sw $4, 40($29) \n\t" \ 4421 "lw $4, 4(%1) \n\t" \ 4422 "lw $5, 8(%1) \n\t" \ 4423 "lw $6, 12(%1) \n\t" \ 4424 "lw $7, 16(%1) \n\t" \ 4425 "lw $25, 0(%1) \n\t" \ 4426 VALGRIND_CALL_NOREDIR_T9 \ 4427 "addu $29, $29, 48 \n\t" \ 4428 "lw $28, 0($29) \n\t" \ 4429 "lw $31, 4($29) \n\t" \ 4430 "addu $29, $29, 8 \n\t" \ 4433 : "0" (&_argvec[0]) \ 4434 : "memory", __CALLER_SAVED_REGS \ 4436 lval = (__typeof__(lval)) _res; \ 4439 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 4440 arg6,arg7,arg8,arg9,arg10, \ 4443 volatile OrigFn _orig = (orig); \ 4444 volatile unsigned long _argvec[13]; \ 4445 volatile unsigned long _res; \ 4446 _argvec[0] = (unsigned long)_orig.nraddr; \ 4447 _argvec[1] = (unsigned long)(arg1); \ 4448 _argvec[2] = (unsigned long)(arg2); \ 4449 _argvec[3] = (unsigned long)(arg3); \ 4450 _argvec[4] = (unsigned long)(arg4); \ 4451 _argvec[5] = (unsigned long)(arg5); \ 4452 _argvec[6] = (unsigned long)(arg6); \ 4453 _argvec[7] = (unsigned long)(arg7); \ 4454 _argvec[8] = (unsigned long)(arg8); \ 4455 _argvec[9] = (unsigned long)(arg9); \ 4456 _argvec[10] = (unsigned long)(arg10); \ 4457 _argvec[11] = (unsigned long)(arg11); \ 4458 _argvec[12] = (unsigned long)(arg12); \ 4460 "subu $29, $29, 8 \n\t" \ 4461 "sw $28, 0($29) \n\t" \ 4462 "sw $31, 4($29) \n\t" \ 4463 "lw $4, 20(%1) \n\t" \ 4464 "subu $29, $29, 56\n\t" \ 4465 "sw $4, 16($29) \n\t" \ 4466 "lw $4, 24(%1) \n\t" \ 4467 "sw $4, 20($29) \n\t" \ 4468 "lw $4, 28(%1) \n\t" \ 4469 "sw $4, 24($29) \n\t" \ 4470 "lw $4, 32(%1) \n\t" \ 4471 "sw $4, 28($29) \n\t" \ 4472 "lw $4, 36(%1) \n\t" \ 4473 "sw $4, 32($29) \n\t" \ 4474 "lw $4, 40(%1) \n\t" \ 4475 "sw $4, 36($29) \n\t" \ 4476 "lw $4, 44(%1) \n\t" \ 4477 "sw $4, 40($29) \n\t" \ 4478 "lw $4, 48(%1) \n\t" \ 4479 "sw $4, 44($29) \n\t" \ 4480 "lw $4, 4(%1) \n\t" \ 4481 "lw $5, 8(%1) \n\t" \ 4482 "lw $6, 12(%1) \n\t" \ 4483 "lw $7, 16(%1) \n\t" \ 4484 "lw $25, 0(%1) \n\t" \ 4485 VALGRIND_CALL_NOREDIR_T9 \ 4486 "addu $29, $29, 56 \n\t" \ 4487 "lw $28, 0($29) \n\t" \ 4488 "lw $31, 4($29) \n\t" \ 4489 "addu $29, $29, 8 \n\t" \ 4492 : "r" (&_argvec[0]) \ 4493 : "memory", __CALLER_SAVED_REGS \ 4495 lval = (__typeof__(lval)) _res; \ 4502 #if defined(PLAT_mips64_linux) 4505 #define __CALLER_SAVED_REGS "$2", "$3", "$4", "$5", "$6", \ 4506 "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 4512 #define CALL_FN_W_v(lval, orig) \ 4514 volatile OrigFn _orig = (orig); \ 4515 volatile unsigned long _argvec[1]; \ 4516 volatile unsigned long _res; \ 4517 _argvec[0] = (unsigned long)_orig.nraddr; \ 4519 "ld $25, 0(%1)\n\t" \ 4520 VALGRIND_CALL_NOREDIR_T9 \ 4523 : "0" (&_argvec[0]) \ 4524 : "memory", __CALLER_SAVED_REGS \ 4526 lval = (__typeof__(lval)) _res; \ 4529 #define CALL_FN_W_W(lval, orig, arg1) \ 4531 volatile OrigFn _orig = (orig); \ 4532 volatile unsigned long _argvec[2]; \ 4533 volatile unsigned long _res; \ 4534 _argvec[0] = (unsigned long)_orig.nraddr; \ 4535 _argvec[1] = (unsigned long)(arg1); \ 4537 "ld $4, 8(%1)\n\t" \ 4538 "ld $25, 0(%1)\n\t" \ 4539 VALGRIND_CALL_NOREDIR_T9 \ 4542 : "r" (&_argvec[0]) \ 4543 : "memory", __CALLER_SAVED_REGS \ 4545 lval = (__typeof__(lval)) _res; \ 4548 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 4550 volatile OrigFn _orig = (orig); \ 4551 volatile unsigned long _argvec[3]; \ 4552 volatile unsigned long _res; \ 4553 _argvec[0] = (unsigned long)_orig.nraddr; \ 4554 _argvec[1] = (unsigned long)(arg1); \ 4555 _argvec[2] = (unsigned long)(arg2); \ 4557 "ld $4, 8(%1)\n\t" \ 4558 "ld $5, 16(%1)\n\t" \ 4559 "ld $25, 0(%1)\n\t" \ 4560 VALGRIND_CALL_NOREDIR_T9 \ 4563 : "r" (&_argvec[0]) \ 4564 : "memory", __CALLER_SAVED_REGS \ 4566 lval = (__typeof__(lval)) _res; \ 4569 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 4571 volatile OrigFn _orig = (orig); \ 4572 volatile unsigned long _argvec[4]; \ 4573 volatile unsigned long _res; \ 4574 _argvec[0] = (unsigned long)_orig.nraddr; \ 4575 _argvec[1] = (unsigned long)(arg1); \ 4576 _argvec[2] = (unsigned long)(arg2); \ 4577 _argvec[3] = (unsigned long)(arg3); \ 4579 "ld $4, 8(%1)\n\t" \ 4580 "ld $5, 16(%1)\n\t" \ 4581 "ld $6, 24(%1)\n\t" \ 4582 "ld $25, 0(%1)\n\t" \ 4583 VALGRIND_CALL_NOREDIR_T9 \ 4586 : "r" (&_argvec[0]) \ 4587 : "memory", __CALLER_SAVED_REGS \ 4589 lval = (__typeof__(lval)) _res; \ 4592 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 4594 volatile OrigFn _orig = (orig); \ 4595 volatile unsigned long _argvec[5]; \ 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); \ 4603 "ld $4, 8(%1)\n\t" \ 4604 "ld $5, 16(%1)\n\t" \ 4605 "ld $6, 24(%1)\n\t" \ 4606 "ld $7, 32(%1)\n\t" \ 4607 "ld $25, 0(%1)\n\t" \ 4608 VALGRIND_CALL_NOREDIR_T9 \ 4611 : "r" (&_argvec[0]) \ 4612 : "memory", __CALLER_SAVED_REGS \ 4614 lval = (__typeof__(lval)) _res; \ 4617 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 4619 volatile OrigFn _orig = (orig); \ 4620 volatile unsigned long _argvec[6]; \ 4621 volatile unsigned long _res; \ 4622 _argvec[0] = (unsigned long)_orig.nraddr; \ 4623 _argvec[1] = (unsigned long)(arg1); \ 4624 _argvec[2] = (unsigned long)(arg2); \ 4625 _argvec[3] = (unsigned long)(arg3); \ 4626 _argvec[4] = (unsigned long)(arg4); \ 4627 _argvec[5] = (unsigned long)(arg5); \ 4629 "ld $4, 8(%1)\n\t" \ 4630 "ld $5, 16(%1)\n\t" \ 4631 "ld $6, 24(%1)\n\t" \ 4632 "ld $7, 32(%1)\n\t" \ 4633 "ld $8, 40(%1)\n\t" \ 4634 "ld $25, 0(%1)\n\t" \ 4635 VALGRIND_CALL_NOREDIR_T9 \ 4638 : "r" (&_argvec[0]) \ 4639 : "memory", __CALLER_SAVED_REGS \ 4641 lval = (__typeof__(lval)) _res; \ 4644 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 4646 volatile OrigFn _orig = (orig); \ 4647 volatile unsigned long _argvec[7]; \ 4648 volatile unsigned long _res; \ 4649 _argvec[0] = (unsigned long)_orig.nraddr; \ 4650 _argvec[1] = (unsigned long)(arg1); \ 4651 _argvec[2] = (unsigned long)(arg2); \ 4652 _argvec[3] = (unsigned long)(arg3); \ 4653 _argvec[4] = (unsigned long)(arg4); \ 4654 _argvec[5] = (unsigned long)(arg5); \ 4655 _argvec[6] = (unsigned long)(arg6); \ 4657 "ld $4, 8(%1)\n\t" \ 4658 "ld $5, 16(%1)\n\t" \ 4659 "ld $6, 24(%1)\n\t" \ 4660 "ld $7, 32(%1)\n\t" \ 4661 "ld $8, 40(%1)\n\t" \ 4662 "ld $9, 48(%1)\n\t" \ 4663 "ld $25, 0(%1)\n\t" \ 4664 VALGRIND_CALL_NOREDIR_T9 \ 4667 : "r" (&_argvec[0]) \ 4668 : "memory", __CALLER_SAVED_REGS \ 4670 lval = (__typeof__(lval)) _res; \ 4673 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4676 volatile OrigFn _orig = (orig); \ 4677 volatile unsigned long _argvec[8]; \ 4678 volatile unsigned long _res; \ 4679 _argvec[0] = (unsigned long)_orig.nraddr; \ 4680 _argvec[1] = (unsigned long)(arg1); \ 4681 _argvec[2] = (unsigned long)(arg2); \ 4682 _argvec[3] = (unsigned long)(arg3); \ 4683 _argvec[4] = (unsigned long)(arg4); \ 4684 _argvec[5] = (unsigned long)(arg5); \ 4685 _argvec[6] = (unsigned long)(arg6); \ 4686 _argvec[7] = (unsigned long)(arg7); \ 4688 "ld $4, 8(%1)\n\t" \ 4689 "ld $5, 16(%1)\n\t" \ 4690 "ld $6, 24(%1)\n\t" \ 4691 "ld $7, 32(%1)\n\t" \ 4692 "ld $8, 40(%1)\n\t" \ 4693 "ld $9, 48(%1)\n\t" \ 4694 "ld $10, 56(%1)\n\t" \ 4695 "ld $25, 0(%1) \n\t" \ 4696 VALGRIND_CALL_NOREDIR_T9 \ 4699 : "r" (&_argvec[0]) \ 4700 : "memory", __CALLER_SAVED_REGS \ 4702 lval = (__typeof__(lval)) _res; \ 4705 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4708 volatile OrigFn _orig = (orig); \ 4709 volatile unsigned long _argvec[9]; \ 4710 volatile unsigned long _res; \ 4711 _argvec[0] = (unsigned long)_orig.nraddr; \ 4712 _argvec[1] = (unsigned long)(arg1); \ 4713 _argvec[2] = (unsigned long)(arg2); \ 4714 _argvec[3] = (unsigned long)(arg3); \ 4715 _argvec[4] = (unsigned long)(arg4); \ 4716 _argvec[5] = (unsigned long)(arg5); \ 4717 _argvec[6] = (unsigned long)(arg6); \ 4718 _argvec[7] = (unsigned long)(arg7); \ 4719 _argvec[8] = (unsigned long)(arg8); \ 4721 "ld $4, 8(%1)\n\t" \ 4722 "ld $5, 16(%1)\n\t" \ 4723 "ld $6, 24(%1)\n\t" \ 4724 "ld $7, 32(%1)\n\t" \ 4725 "ld $8, 40(%1)\n\t" \ 4726 "ld $9, 48(%1)\n\t" \ 4727 "ld $10, 56(%1)\n\t" \ 4728 "ld $11, 64(%1)\n\t" \ 4729 "ld $25, 0(%1) \n\t" \ 4730 VALGRIND_CALL_NOREDIR_T9 \ 4733 : "r" (&_argvec[0]) \ 4734 : "memory", __CALLER_SAVED_REGS \ 4736 lval = (__typeof__(lval)) _res; \ 4739 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4742 volatile OrigFn _orig = (orig); \ 4743 volatile unsigned long _argvec[10]; \ 4744 volatile unsigned long _res; \ 4745 _argvec[0] = (unsigned long)_orig.nraddr; \ 4746 _argvec[1] = (unsigned long)(arg1); \ 4747 _argvec[2] = (unsigned long)(arg2); \ 4748 _argvec[3] = (unsigned long)(arg3); \ 4749 _argvec[4] = (unsigned long)(arg4); \ 4750 _argvec[5] = (unsigned long)(arg5); \ 4751 _argvec[6] = (unsigned long)(arg6); \ 4752 _argvec[7] = (unsigned long)(arg7); \ 4753 _argvec[8] = (unsigned long)(arg8); \ 4754 _argvec[9] = (unsigned long)(arg9); \ 4756 "dsubu $29, $29, 8\n\t" \ 4757 "ld $4, 72(%1)\n\t" \ 4758 "sd $4, 0($29)\n\t" \ 4759 "ld $4, 8(%1)\n\t" \ 4760 "ld $5, 16(%1)\n\t" \ 4761 "ld $6, 24(%1)\n\t" \ 4762 "ld $7, 32(%1)\n\t" \ 4763 "ld $8, 40(%1)\n\t" \ 4764 "ld $9, 48(%1)\n\t" \ 4765 "ld $10, 56(%1)\n\t" \ 4766 "ld $11, 64(%1)\n\t" \ 4767 "ld $25, 0(%1)\n\t" \ 4768 VALGRIND_CALL_NOREDIR_T9 \ 4769 "daddu $29, $29, 8\n\t" \ 4772 : "r" (&_argvec[0]) \ 4773 : "memory", __CALLER_SAVED_REGS \ 4775 lval = (__typeof__(lval)) _res; \ 4778 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4779 arg7,arg8,arg9,arg10) \ 4781 volatile OrigFn _orig = (orig); \ 4782 volatile unsigned long _argvec[11]; \ 4783 volatile unsigned long _res; \ 4784 _argvec[0] = (unsigned long)_orig.nraddr; \ 4785 _argvec[1] = (unsigned long)(arg1); \ 4786 _argvec[2] = (unsigned long)(arg2); \ 4787 _argvec[3] = (unsigned long)(arg3); \ 4788 _argvec[4] = (unsigned long)(arg4); \ 4789 _argvec[5] = (unsigned long)(arg5); \ 4790 _argvec[6] = (unsigned long)(arg6); \ 4791 _argvec[7] = (unsigned long)(arg7); \ 4792 _argvec[8] = (unsigned long)(arg8); \ 4793 _argvec[9] = (unsigned long)(arg9); \ 4794 _argvec[10] = (unsigned long)(arg10); \ 4796 "dsubu $29, $29, 16\n\t" \ 4797 "ld $4, 72(%1)\n\t" \ 4798 "sd $4, 0($29)\n\t" \ 4799 "ld $4, 80(%1)\n\t" \ 4800 "sd $4, 8($29)\n\t" \ 4801 "ld $4, 8(%1)\n\t" \ 4802 "ld $5, 16(%1)\n\t" \ 4803 "ld $6, 24(%1)\n\t" \ 4804 "ld $7, 32(%1)\n\t" \ 4805 "ld $8, 40(%1)\n\t" \ 4806 "ld $9, 48(%1)\n\t" \ 4807 "ld $10, 56(%1)\n\t" \ 4808 "ld $11, 64(%1)\n\t" \ 4809 "ld $25, 0(%1)\n\t" \ 4810 VALGRIND_CALL_NOREDIR_T9 \ 4811 "daddu $29, $29, 16\n\t" \ 4814 : "r" (&_argvec[0]) \ 4815 : "memory", __CALLER_SAVED_REGS \ 4817 lval = (__typeof__(lval)) _res; \ 4820 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 4821 arg6,arg7,arg8,arg9,arg10, \ 4824 volatile OrigFn _orig = (orig); \ 4825 volatile unsigned long _argvec[12]; \ 4826 volatile unsigned long _res; \ 4827 _argvec[0] = (unsigned long)_orig.nraddr; \ 4828 _argvec[1] = (unsigned long)(arg1); \ 4829 _argvec[2] = (unsigned long)(arg2); \ 4830 _argvec[3] = (unsigned long)(arg3); \ 4831 _argvec[4] = (unsigned long)(arg4); \ 4832 _argvec[5] = (unsigned long)(arg5); \ 4833 _argvec[6] = (unsigned long)(arg6); \ 4834 _argvec[7] = (unsigned long)(arg7); \ 4835 _argvec[8] = (unsigned long)(arg8); \ 4836 _argvec[9] = (unsigned long)(arg9); \ 4837 _argvec[10] = (unsigned long)(arg10); \ 4838 _argvec[11] = (unsigned long)(arg11); \ 4840 "dsubu $29, $29, 24\n\t" \ 4841 "ld $4, 72(%1)\n\t" \ 4842 "sd $4, 0($29)\n\t" \ 4843 "ld $4, 80(%1)\n\t" \ 4844 "sd $4, 8($29)\n\t" \ 4845 "ld $4, 88(%1)\n\t" \ 4846 "sd $4, 16($29)\n\t" \ 4847 "ld $4, 8(%1)\n\t" \ 4848 "ld $5, 16(%1)\n\t" \ 4849 "ld $6, 24(%1)\n\t" \ 4850 "ld $7, 32(%1)\n\t" \ 4851 "ld $8, 40(%1)\n\t" \ 4852 "ld $9, 48(%1)\n\t" \ 4853 "ld $10, 56(%1)\n\t" \ 4854 "ld $11, 64(%1)\n\t" \ 4855 "ld $25, 0(%1)\n\t" \ 4856 VALGRIND_CALL_NOREDIR_T9 \ 4857 "daddu $29, $29, 24\n\t" \ 4860 : "r" (&_argvec[0]) \ 4861 : "memory", __CALLER_SAVED_REGS \ 4863 lval = (__typeof__(lval)) _res; \ 4866 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 4867 arg6,arg7,arg8,arg9,arg10, \ 4870 volatile OrigFn _orig = (orig); \ 4871 volatile unsigned long _argvec[13]; \ 4872 volatile unsigned long _res; \ 4873 _argvec[0] = (unsigned long)_orig.nraddr; \ 4874 _argvec[1] = (unsigned long)(arg1); \ 4875 _argvec[2] = (unsigned long)(arg2); \ 4876 _argvec[3] = (unsigned long)(arg3); \ 4877 _argvec[4] = (unsigned long)(arg4); \ 4878 _argvec[5] = (unsigned long)(arg5); \ 4879 _argvec[6] = (unsigned long)(arg6); \ 4880 _argvec[7] = (unsigned long)(arg7); \ 4881 _argvec[8] = (unsigned long)(arg8); \ 4882 _argvec[9] = (unsigned long)(arg9); \ 4883 _argvec[10] = (unsigned long)(arg10); \ 4884 _argvec[11] = (unsigned long)(arg11); \ 4885 _argvec[12] = (unsigned long)(arg12); \ 4887 "dsubu $29, $29, 32\n\t" \ 4888 "ld $4, 72(%1)\n\t" \ 4889 "sd $4, 0($29)\n\t" \ 4890 "ld $4, 80(%1)\n\t" \ 4891 "sd $4, 8($29)\n\t" \ 4892 "ld $4, 88(%1)\n\t" \ 4893 "sd $4, 16($29)\n\t" \ 4894 "ld $4, 96(%1)\n\t" \ 4895 "sd $4, 24($29)\n\t" \ 4896 "ld $4, 8(%1)\n\t" \ 4897 "ld $5, 16(%1)\n\t" \ 4898 "ld $6, 24(%1)\n\t" \ 4899 "ld $7, 32(%1)\n\t" \ 4900 "ld $8, 40(%1)\n\t" \ 4901 "ld $9, 48(%1)\n\t" \ 4902 "ld $10, 56(%1)\n\t" \ 4903 "ld $11, 64(%1)\n\t" \ 4904 "ld $25, 0(%1)\n\t" \ 4905 VALGRIND_CALL_NOREDIR_T9 \ 4906 "daddu $29, $29, 32\n\t" \ 4909 : "r" (&_argvec[0]) \ 4910 : "memory", __CALLER_SAVED_REGS \ 4912 lval = (__typeof__(lval)) _res; \ 4933 #define VG_USERREQ_TOOL_BASE(a,b) \ 4934 ((unsigned int)(((a)&0xff) << 24 | ((b)&0xff) << 16)) 4935 #define VG_IS_TOOL_USERREQ(a, b, v) \ 4936 (VG_USERREQ_TOOL_BASE(a,b) == ((v) & 0xffff0000)) 5015 #if !defined(__GNUC__) 5016 # define __extension__ 5024 #define RUNNING_ON_VALGRIND \ 5025 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 5026 VG_USERREQ__RUNNING_ON_VALGRIND, \ 5034 #define VALGRIND_DISCARD_TRANSLATIONS(_qzz_addr,_qzz_len) \ 5035 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DISCARD_TRANSLATIONS, \ 5036 _qzz_addr, _qzz_len, 0, 0, 0) 5044 #if defined(__GNUC__) || defined(__INTEL_COMPILER) && !defined(_MSC_VER) 5047 static int VALGRIND_PRINTF(
const char *
format, ...)
5051 #if defined(_MSC_VER) 5054 VALGRIND_PRINTF(
const char *format, ...)
5056 #if defined(NVALGRIND) 5059 #if defined(_MSC_VER) || defined(__MINGW64__) 5062 unsigned long _qzz_res;
5065 va_start(vargs, format);
5066 #if defined(_MSC_VER) || defined(__MINGW64__) 5075 (
unsigned long)format,
5076 (
unsigned long)&vargs,
5080 return (
int)_qzz_res;
5084 #if defined(__GNUC__) || defined(__INTEL_COMPILER) && !defined(_MSC_VER) 5085 static int VALGRIND_PRINTF_BACKTRACE(
const char *format, ...)
5089 #if defined(_MSC_VER) 5092 VALGRIND_PRINTF_BACKTRACE(
const char *format, ...)
5094 #if defined(NVALGRIND) 5097 #if defined(_MSC_VER) || defined(__MINGW64__) 5100 unsigned long _qzz_res;
5103 va_start(vargs, format);
5104 #if defined(_MSC_VER) || defined(__MINGW64__) 5113 (
unsigned long)format,
5114 (
unsigned long)&vargs,
5118 return (
int)_qzz_res;
5146 #define VALGRIND_NON_SIMD_CALL0(_qyy_fn) \ 5147 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 5148 VG_USERREQ__CLIENT_CALL0, \ 5152 #define VALGRIND_NON_SIMD_CALL1(_qyy_fn, _qyy_arg1) \ 5153 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 5154 VG_USERREQ__CLIENT_CALL1, \ 5158 #define VALGRIND_NON_SIMD_CALL2(_qyy_fn, _qyy_arg1, _qyy_arg2) \ 5159 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 5160 VG_USERREQ__CLIENT_CALL2, \ 5162 _qyy_arg1, _qyy_arg2, 0, 0) 5164 #define VALGRIND_NON_SIMD_CALL3(_qyy_fn, _qyy_arg1, _qyy_arg2, _qyy_arg3) \ 5165 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 5166 VG_USERREQ__CLIENT_CALL3, \ 5168 _qyy_arg1, _qyy_arg2, \ 5175 #define VALGRIND_COUNT_ERRORS \ 5176 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 5178 VG_USERREQ__COUNT_ERRORS, \ 5282 #define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed) \ 5283 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MALLOCLIKE_BLOCK, \ 5284 addr, sizeB, rzB, is_zeroed, 0) 5289 #define VALGRIND_RESIZEINPLACE_BLOCK(addr, oldSizeB, newSizeB, rzB) \ 5290 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__RESIZEINPLACE_BLOCK, \ 5291 addr, oldSizeB, newSizeB, rzB, 0) 5296 #define VALGRIND_FREELIKE_BLOCK(addr, rzB) \ 5297 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__FREELIKE_BLOCK, \ 5301 #define VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed) \ 5302 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CREATE_MEMPOOL, \ 5303 pool, rzB, is_zeroed, 0, 0) 5306 #define VALGRIND_DESTROY_MEMPOOL(pool) \ 5307 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DESTROY_MEMPOOL, \ 5311 #define VALGRIND_MEMPOOL_ALLOC(pool, addr, size) \ 5312 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_ALLOC, \ 5313 pool, addr, size, 0, 0) 5316 #define VALGRIND_MEMPOOL_FREE(pool, addr) \ 5317 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_FREE, \ 5318 pool, addr, 0, 0, 0) 5321 #define VALGRIND_MEMPOOL_TRIM(pool, addr, size) \ 5322 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_TRIM, \ 5323 pool, addr, size, 0, 0) 5326 #define VALGRIND_MOVE_MEMPOOL(poolA, poolB) \ 5327 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MOVE_MEMPOOL, \ 5328 poolA, poolB, 0, 0, 0) 5331 #define VALGRIND_MEMPOOL_CHANGE(pool, addrA, addrB, size) \ 5332 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_CHANGE, \ 5333 pool, addrA, addrB, size, 0) 5336 #define VALGRIND_MEMPOOL_EXISTS(pool) \ 5337 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 5338 VG_USERREQ__MEMPOOL_EXISTS, \ 5342 #define VALGRIND_STACK_REGISTER(start, end) \ 5343 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 5344 VG_USERREQ__STACK_REGISTER, \ 5345 start, end, 0, 0, 0) 5349 #define VALGRIND_STACK_DEREGISTER(id) \ 5350 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_DEREGISTER, \ 5354 #define VALGRIND_STACK_CHANGE(id, start, end) \ 5355 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_CHANGE, \ 5356 id, start, end, 0, 0) 5359 #define VALGRIND_LOAD_PDB_DEBUGINFO(fd, ptr, total_size, delta) \ 5360 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__LOAD_PDB_DEBUGINFO, \ 5361 fd, ptr, total_size, delta, 0) 5367 #define VALGRIND_MAP_IP_TO_SRCLOC(addr, buf64) \ 5368 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 5369 VG_USERREQ__MAP_IP_TO_SRCLOC, \ 5370 addr, buf64, 0, 0, 0) 5380 #define VALGRIND_DISABLE_ERROR_REPORTING \ 5381 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, \ 5386 #define VALGRIND_ENABLE_ERROR_REPORTING \ 5387 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, \ 5395 #define VALGRIND_MONITOR_COMMAND(command) \ 5396 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__GDB_MONITOR_COMMAND, \ 5397 command, 0, 0, 0, 0) 5400 #undef PLAT_x86_darwin 5401 #undef PLAT_amd64_darwin 5402 #undef PLAT_x86_win32 5403 #undef PLAT_amd64_win64 5404 #undef PLAT_x86_linux 5405 #undef PLAT_amd64_linux 5406 #undef PLAT_ppc32_linux 5407 #undef PLAT_ppc64_linux 5408 #undef PLAT_arm_linux 5409 #undef PLAT_s390x_linux 5410 #undef PLAT_mips32_linux 5411 #undef PLAT_mips64_linux
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
#define VALGRIND_DO_CLIENT_REQUEST_EXPR( _zzq_default, _zzq_request, _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)