91 #define __VALGRIND_MAJOR__ 3 92 #define __VALGRIND_MINOR__ 9 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_arm64_linux 121 #undef PLAT_s390x_linux 122 #undef PLAT_mips32_linux 123 #undef PLAT_mips64_linux 126 #if defined(__APPLE__) && defined(__i386__) 127 # define PLAT_x86_darwin 1 128 #elif defined(__APPLE__) && defined(__x86_64__) 129 # define PLAT_amd64_darwin 1 130 #elif defined(__MINGW32__) || defined(__CYGWIN32__) \ 131 || (defined(_WIN32) && defined(_M_IX86)) 132 # define PLAT_x86_win32 1 133 #elif defined(__MINGW64__) || (defined(_WIN64) && defined(_M_X64)) 134 # define PLAT_amd64_win64 1 135 #elif defined(__linux__) && defined(__i386__) 136 # define PLAT_x86_linux 1 137 #elif defined(__linux__) && defined(__x86_64__) 138 # define PLAT_amd64_linux 1 139 #elif defined(__linux__) && defined(__powerpc__) && !defined(__powerpc64__) 140 # define PLAT_ppc32_linux 1 141 #elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) 142 # define PLAT_ppc64_linux 1 143 #elif defined(__linux__) && defined(__arm__) && !defined(__aarch64__) 144 # define PLAT_arm_linux 1 145 #elif defined(__linux__) && defined(__aarch64__) && !defined(__arm__) 146 # define PLAT_arm64_linux 1 147 #elif defined(__linux__) && defined(__s390__) && defined(__s390x__) 148 # define PLAT_s390x_linux 1 149 #elif defined(__linux__) && defined(__mips__) && (__mips==64) 150 # define PLAT_mips64_linux 1 151 #elif defined(__linux__) && defined(__mips__) && (__mips!=64) 152 # define PLAT_mips32_linux 1 156 # if !defined(NVALGRIND) 180 #define VALGRIND_DO_CLIENT_REQUEST(_zzq_rlval, _zzq_default, \ 181 _zzq_request, _zzq_arg1, _zzq_arg2, \ 182 _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 183 do { (_zzq_rlval) = VALGRIND_DO_CLIENT_REQUEST_EXPR((_zzq_default), \ 184 (_zzq_request), (_zzq_arg1), (_zzq_arg2), \ 185 (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0) 187 #define VALGRIND_DO_CLIENT_REQUEST_STMT(_zzq_request, _zzq_arg1, \ 188 _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 189 do { (void) VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 190 (_zzq_request), (_zzq_arg1), (_zzq_arg2), \ 191 (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0) 193 #if defined(NVALGRIND) 198 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 199 _zzq_default, _zzq_request, \ 200 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 242 #if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) \ 243 || (defined(PLAT_x86_win32) && defined(__GNUC__)) 251 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 252 "roll $3, %%edi ; roll $13, %%edi\n\t" \ 253 "roll $29, %%edi ; roll $19, %%edi\n\t" 255 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 256 _zzq_default, _zzq_request, \ 257 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 259 ({volatile unsigned int _zzq_args[6]; \ 260 volatile unsigned int _zzq_result; \ 261 _zzq_args[0] = (unsigned int)(_zzq_request); \ 262 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 263 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 264 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 265 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 266 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 267 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 269 "xchgl %%ebx,%%ebx" \ 270 : "=d" (_zzq_result) \ 271 : "a" (&_zzq_args[0]), "0" (_zzq_default) \ 277 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 278 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 279 volatile unsigned int __addr; \ 280 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 282 "xchgl %%ecx,%%ecx" \ 287 _zzq_orig->nraddr = __addr; \ 290 #define VALGRIND_CALL_NOREDIR_EAX \ 291 __SPECIAL_INSTRUCTION_PREAMBLE \ 293 "xchgl %%edx,%%edx\n\t" 295 #define VALGRIND_VEX_INJECT_IR() \ 297 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 298 "xchgl %%edi,%%edi\n\t" \ 299 : : : "cc", "memory" \ 307 #if defined(PLAT_x86_win32) && !defined(__GNUC__) 315 #if defined(_MSC_VER) 317 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 318 __asm rol edi, 3 __asm rol edi, 13 \ 319 __asm rol edi, 29 __asm rol edi, 19 321 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 322 _zzq_default, _zzq_request, \ 323 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 324 valgrind_do_client_request_expr((uintptr_t)(_zzq_default), \ 325 (uintptr_t)(_zzq_request), (uintptr_t)(_zzq_arg1), \ 326 (uintptr_t)(_zzq_arg2), (uintptr_t)(_zzq_arg3), \ 327 (uintptr_t)(_zzq_arg4), (uintptr_t)(_zzq_arg5)) 329 static __inline uintptr_t
330 valgrind_do_client_request_expr(uintptr_t _zzq_default, uintptr_t _zzq_request,
331 uintptr_t _zzq_arg1, uintptr_t _zzq_arg2,
332 uintptr_t _zzq_arg3, uintptr_t _zzq_arg4,
335 volatile uintptr_t _zzq_args[6];
336 volatile unsigned int _zzq_result;
337 _zzq_args[0] = (uintptr_t)(_zzq_request);
338 _zzq_args[1] = (uintptr_t)(_zzq_arg1);
339 _zzq_args[2] = (uintptr_t)(_zzq_arg2);
340 _zzq_args[3] = (uintptr_t)(_zzq_arg3);
341 _zzq_args[4] = (uintptr_t)(_zzq_arg4);
342 _zzq_args[5] = (uintptr_t)(_zzq_arg5);
343 __asm { __asm lea eax, _zzq_args __asm mov edx, _zzq_default
344 __SPECIAL_INSTRUCTION_PREAMBLE
347 __asm mov _zzq_result, edx
352 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 353 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 354 volatile unsigned int __addr; \ 355 __asm { __SPECIAL_INSTRUCTION_PREAMBLE \ 358 __asm mov __addr, eax \ 360 _zzq_orig->nraddr = __addr; \ 363 #define VALGRIND_CALL_NOREDIR_EAX ERROR 365 #define VALGRIND_VEX_INJECT_IR() \ 367 __asm { __SPECIAL_INSTRUCTION_PREAMBLE \ 373 #error Unsupported compiler. 380 #if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) 384 unsigned long long int nraddr;
388 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 389 "rolq $3, %%rdi ; rolq $13, %%rdi\n\t" \ 390 "rolq $61, %%rdi ; rolq $51, %%rdi\n\t" 392 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 393 _zzq_default, _zzq_request, \ 394 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 396 ({ volatile unsigned long long int _zzq_args[6]; \ 397 volatile unsigned long long int _zzq_result; \ 398 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 399 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 400 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 401 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 402 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 403 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 404 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 406 "xchgq %%rbx,%%rbx" \ 407 : "=d" (_zzq_result) \ 408 : "a" (&_zzq_args[0]), "0" (_zzq_default) \ 414 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 415 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 416 volatile unsigned long long int __addr; \ 417 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 419 "xchgq %%rcx,%%rcx" \ 424 _zzq_orig->nraddr = __addr; \ 427 #define VALGRIND_CALL_NOREDIR_RAX \ 428 __SPECIAL_INSTRUCTION_PREAMBLE \ 430 "xchgq %%rdx,%%rdx\n\t" 432 #define VALGRIND_VEX_INJECT_IR() \ 434 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 435 "xchgq %%rdi,%%rdi\n\t" \ 436 : : : "cc", "memory" \ 444 #if defined(PLAT_ppc32_linux) 452 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 453 "rlwinm 0,0,3,0,31 ; rlwinm 0,0,13,0,31\n\t" \ 454 "rlwinm 0,0,29,0,31 ; rlwinm 0,0,19,0,31\n\t" 456 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 457 _zzq_default, _zzq_request, \ 458 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 461 ({ unsigned int _zzq_args[6]; \ 462 unsigned int _zzq_result; \ 463 unsigned int* _zzq_ptr; \ 464 _zzq_args[0] = (unsigned int)(_zzq_request); \ 465 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 466 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 467 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 468 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 469 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 470 _zzq_ptr = _zzq_args; \ 471 __asm__ volatile("mr 3,%1\n\t" \ 473 __SPECIAL_INSTRUCTION_PREAMBLE \ 477 : "=b" (_zzq_result) \ 478 : "b" (_zzq_default), "b" (_zzq_ptr) \ 479 : "cc", "memory", "r3", "r4"); \ 483 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 484 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 485 unsigned int __addr; \ 486 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 492 : "cc", "memory", "r3" \ 494 _zzq_orig->nraddr = __addr; \ 497 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 498 __SPECIAL_INSTRUCTION_PREAMBLE \ 502 #define VALGRIND_VEX_INJECT_IR() \ 504 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 513 #if defined(PLAT_ppc64_linux) 517 unsigned long long int nraddr;
518 unsigned long long int r2;
522 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 523 "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ 524 "rotldi 0,0,61 ; rotldi 0,0,51\n\t" 526 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 527 _zzq_default, _zzq_request, \ 528 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 531 ({ unsigned long long int _zzq_args[6]; \ 532 unsigned long long int _zzq_result; \ 533 unsigned long long int* _zzq_ptr; \ 534 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 535 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 536 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 537 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 538 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 539 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 540 _zzq_ptr = _zzq_args; \ 541 __asm__ volatile("mr 3,%1\n\t" \ 543 __SPECIAL_INSTRUCTION_PREAMBLE \ 547 : "=b" (_zzq_result) \ 548 : "b" (_zzq_default), "b" (_zzq_ptr) \ 549 : "cc", "memory", "r3", "r4"); \ 553 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 554 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 555 unsigned long long int __addr; \ 556 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 562 : "cc", "memory", "r3" \ 564 _zzq_orig->nraddr = __addr; \ 565 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 571 : "cc", "memory", "r3" \ 573 _zzq_orig->r2 = __addr; \ 576 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 577 __SPECIAL_INSTRUCTION_PREAMBLE \ 581 #define VALGRIND_VEX_INJECT_IR() \ 583 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 592 #if defined(PLAT_arm_linux) 600 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 601 "mov r12, r12, ror #3 ; mov r12, r12, ror #13 \n\t" \ 602 "mov r12, r12, ror #29 ; mov r12, r12, ror #19 \n\t" 604 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 605 _zzq_default, _zzq_request, \ 606 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 609 ({volatile unsigned int _zzq_args[6]; \ 610 volatile unsigned int _zzq_result; \ 611 _zzq_args[0] = (unsigned int)(_zzq_request); \ 612 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 613 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 614 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 615 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 616 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 617 __asm__ volatile("mov r3, %1\n\t" \ 619 __SPECIAL_INSTRUCTION_PREAMBLE \ 621 "orr r10, r10, r10\n\t" \ 623 : "=r" (_zzq_result) \ 624 : "r" (_zzq_default), "r" (&_zzq_args[0]) \ 625 : "cc","memory", "r3", "r4"); \ 629 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 630 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 631 unsigned int __addr; \ 632 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 634 "orr r11, r11, r11\n\t" \ 638 : "cc", "memory", "r3" \ 640 _zzq_orig->nraddr = __addr; \ 643 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 644 __SPECIAL_INSTRUCTION_PREAMBLE \ 646 "orr r12, r12, r12\n\t" 648 #define VALGRIND_VEX_INJECT_IR() \ 650 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 651 "orr r9, r9, r9\n\t" \ 652 : : : "cc", "memory" \ 660 #if defined(PLAT_arm64_linux) 664 unsigned long long int nraddr;
668 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 669 "ror x12, x12, #3 ; ror x12, x12, #13 \n\t" \ 670 "ror x12, x12, #51 ; ror x12, x12, #61 \n\t" 672 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 673 _zzq_default, _zzq_request, \ 674 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 677 ({volatile unsigned long long int _zzq_args[6]; \ 678 volatile unsigned long long int _zzq_result; \ 679 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 680 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 681 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 682 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 683 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 684 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 685 __asm__ volatile("mov x3, %1\n\t" \ 687 __SPECIAL_INSTRUCTION_PREAMBLE \ 689 "orr x10, x10, x10\n\t" \ 691 : "=r" (_zzq_result) \ 692 : "r" (_zzq_default), "r" (&_zzq_args[0]) \ 693 : "cc","memory", "x3", "x4"); \ 697 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 698 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 699 unsigned long long int __addr; \ 700 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 702 "orr x11, x11, x11\n\t" \ 706 : "cc", "memory", "x3" \ 708 _zzq_orig->nraddr = __addr; \ 711 #define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 712 __SPECIAL_INSTRUCTION_PREAMBLE \ 714 "orr x12, x12, x12\n\t" 716 #define VALGRIND_VEX_INJECT_IR() \ 718 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 719 "orr x9, x9, x9\n\t" \ 720 : : : "cc", "memory" \ 728 #if defined(PLAT_s390x_linux) 732 unsigned long long int nraddr;
740 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 746 #define __CLIENT_REQUEST_CODE "lr 2,2\n\t" 747 #define __GET_NR_CONTEXT_CODE "lr 3,3\n\t" 748 #define __CALL_NO_REDIR_CODE "lr 4,4\n\t" 749 #define __VEX_INJECT_IR_CODE "lr 5,5\n\t" 751 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 752 _zzq_default, _zzq_request, \ 753 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 755 ({volatile unsigned long long int _zzq_args[6]; \ 756 volatile unsigned long long int _zzq_result; \ 757 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 758 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 759 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 760 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 761 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 762 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 767 __SPECIAL_INSTRUCTION_PREAMBLE \ 768 __CLIENT_REQUEST_CODE \ 771 : "=d" (_zzq_result) \ 772 : "a" (&_zzq_args[0]), "0" (_zzq_default) \ 773 : "cc", "2", "3", "memory" \ 778 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 779 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 780 volatile unsigned long long int __addr; \ 781 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 782 __GET_NR_CONTEXT_CODE \ 786 : "cc", "3", "memory" \ 788 _zzq_orig->nraddr = __addr; \ 791 #define VALGRIND_CALL_NOREDIR_R1 \ 792 __SPECIAL_INSTRUCTION_PREAMBLE \ 795 #define VALGRIND_VEX_INJECT_IR() \ 797 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 798 __VEX_INJECT_IR_CODE); \ 805 #if defined(PLAT_mips32_linux) 817 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 818 "srl $0, $0, 13\n\t" \ 819 "srl $0, $0, 29\n\t" \ 820 "srl $0, $0, 3\n\t" \ 823 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 824 _zzq_default, _zzq_request, \ 825 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 827 ({ volatile unsigned int _zzq_args[6]; \ 828 volatile unsigned int _zzq_result; \ 829 _zzq_args[0] = (unsigned int)(_zzq_request); \ 830 _zzq_args[1] = (unsigned int)(_zzq_arg1); \ 831 _zzq_args[2] = (unsigned int)(_zzq_arg2); \ 832 _zzq_args[3] = (unsigned int)(_zzq_arg3); \ 833 _zzq_args[4] = (unsigned int)(_zzq_arg4); \ 834 _zzq_args[5] = (unsigned int)(_zzq_arg5); \ 835 __asm__ volatile("move $11, %1\n\t" \ 837 __SPECIAL_INSTRUCTION_PREAMBLE \ 839 "or $13, $13, $13\n\t" \ 841 : "=r" (_zzq_result) \ 842 : "r" (_zzq_default), "r" (&_zzq_args[0]) \ 847 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 848 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 849 volatile unsigned int __addr; \ 850 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 852 "or $14, $14, $14\n\t" \ 858 _zzq_orig->nraddr = __addr; \ 861 #define VALGRIND_CALL_NOREDIR_T9 \ 862 __SPECIAL_INSTRUCTION_PREAMBLE \ 864 "or $15, $15, $15\n\t" 866 #define VALGRIND_VEX_INJECT_IR() \ 868 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 869 "or $11, $11, $11\n\t" \ 878 #if defined(PLAT_mips64_linux) 882 unsigned long long nraddr;
890 #define __SPECIAL_INSTRUCTION_PREAMBLE \ 891 "dsll $0,$0, 3 ; dsll $0,$0,13\n\t" \ 892 "dsll $0,$0,29 ; dsll $0,$0,19\n\t" 894 #define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 895 _zzq_default, _zzq_request, \ 896 _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ 898 ({ volatile unsigned long long int _zzq_args[6]; \ 899 volatile unsigned long long int _zzq_result; \ 900 _zzq_args[0] = (unsigned long long int)(_zzq_request); \ 901 _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ 902 _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ 903 _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ 904 _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ 905 _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ 906 __asm__ volatile("move $11, %1\n\t" \ 908 __SPECIAL_INSTRUCTION_PREAMBLE \ 910 "or $13, $13, $13\n\t" \ 912 : "=r" (_zzq_result) \ 913 : "r" (_zzq_default), "r" (&_zzq_args[0]) \ 918 #define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ 919 { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ 920 volatile unsigned long long int __addr; \ 921 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 923 "or $14, $14, $14\n\t" \ 928 _zzq_orig->nraddr = __addr; \ 931 #define VALGRIND_CALL_NOREDIR_T9 \ 932 __SPECIAL_INSTRUCTION_PREAMBLE \ 934 "or $15, $15, $15\n\t" 936 #define VALGRIND_VEX_INJECT_IR() \ 938 __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ 939 "or $11, $11, $11\n\t" \ 981 #define VG_CONCAT4(_aa,_bb,_cc,_dd) _aa##_bb##_cc##_dd 983 #define I_WRAP_SONAME_FNNAME_ZU(soname,fnname) \ 984 VG_CONCAT4(_vgw00000ZU_,soname,_,fnname) 986 #define I_WRAP_SONAME_FNNAME_ZZ(soname,fnname) \ 987 VG_CONCAT4(_vgw00000ZZ_,soname,_,fnname) 993 #define VALGRIND_GET_ORIG_FN(_lval) VALGRIND_GET_NR_CONTEXT(_lval) 1001 #define I_REPLACE_SONAME_FNNAME_ZU(soname,fnname) \ 1002 VG_CONCAT4(_vgr00000ZU_,soname,_,fnname) 1004 #define I_REPLACE_SONAME_FNNAME_ZZ(soname,fnname) \ 1005 VG_CONCAT4(_vgr00000ZZ_,soname,_,fnname) 1010 #define CALL_FN_v_v(fnptr) \ 1011 do { volatile unsigned long _junk; \ 1012 CALL_FN_W_v(_junk,fnptr); } while (0) 1014 #define CALL_FN_v_W(fnptr, arg1) \ 1015 do { volatile unsigned long _junk; \ 1016 CALL_FN_W_W(_junk,fnptr,arg1); } while (0) 1018 #define CALL_FN_v_WW(fnptr, arg1,arg2) \ 1019 do { volatile unsigned long _junk; \ 1020 CALL_FN_W_WW(_junk,fnptr,arg1,arg2); } while (0) 1022 #define CALL_FN_v_WWW(fnptr, arg1,arg2,arg3) \ 1023 do { volatile unsigned long _junk; \ 1024 CALL_FN_W_WWW(_junk,fnptr,arg1,arg2,arg3); } while (0) 1026 #define CALL_FN_v_WWWW(fnptr, arg1,arg2,arg3,arg4) \ 1027 do { volatile unsigned long _junk; \ 1028 CALL_FN_W_WWWW(_junk,fnptr,arg1,arg2,arg3,arg4); } while (0) 1030 #define CALL_FN_v_5W(fnptr, arg1,arg2,arg3,arg4,arg5) \ 1031 do { volatile unsigned long _junk; \ 1032 CALL_FN_W_5W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5); } while (0) 1034 #define CALL_FN_v_6W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6) \ 1035 do { volatile unsigned long _junk; \ 1036 CALL_FN_W_6W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6); } while (0) 1038 #define CALL_FN_v_7W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6,arg7) \ 1039 do { volatile unsigned long _junk; \ 1040 CALL_FN_W_7W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6,arg7); } while (0) 1044 #if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) 1048 #define __CALLER_SAVED_REGS "ecx", "edx" 1055 #define VALGRIND_ALIGN_STACK \ 1056 "movl %%esp,%%edi\n\t" \ 1057 "andl $0xfffffff0,%%esp\n\t" 1058 #define VALGRIND_RESTORE_STACK \ 1059 "movl %%edi,%%esp\n\t" 1064 #define CALL_FN_W_v(lval, orig) \ 1066 volatile OrigFn _orig = (orig); \ 1067 volatile unsigned long _argvec[1]; \ 1068 volatile unsigned long _res; \ 1069 _argvec[0] = (unsigned long)_orig.nraddr; \ 1071 VALGRIND_ALIGN_STACK \ 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_W(lval, orig, arg1) \ 1084 volatile OrigFn _orig = (orig); \ 1085 volatile unsigned long _argvec[2]; \ 1086 volatile unsigned long _res; \ 1087 _argvec[0] = (unsigned long)_orig.nraddr; \ 1088 _argvec[1] = (unsigned long)(arg1); \ 1090 VALGRIND_ALIGN_STACK \ 1091 "subl $12, %%esp\n\t" \ 1092 "pushl 4(%%eax)\n\t" \ 1093 "movl (%%eax), %%eax\n\t" \ 1094 VALGRIND_CALL_NOREDIR_EAX \ 1095 VALGRIND_RESTORE_STACK \ 1097 : "a" (&_argvec[0]) \ 1098 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1100 lval = (__typeof__(lval)) _res; \ 1103 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 1105 volatile OrigFn _orig = (orig); \ 1106 volatile unsigned long _argvec[3]; \ 1107 volatile unsigned long _res; \ 1108 _argvec[0] = (unsigned long)_orig.nraddr; \ 1109 _argvec[1] = (unsigned long)(arg1); \ 1110 _argvec[2] = (unsigned long)(arg2); \ 1112 VALGRIND_ALIGN_STACK \ 1113 "subl $8, %%esp\n\t" \ 1114 "pushl 8(%%eax)\n\t" \ 1115 "pushl 4(%%eax)\n\t" \ 1116 "movl (%%eax), %%eax\n\t" \ 1117 VALGRIND_CALL_NOREDIR_EAX \ 1118 VALGRIND_RESTORE_STACK \ 1120 : "a" (&_argvec[0]) \ 1121 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1123 lval = (__typeof__(lval)) _res; \ 1126 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 1128 volatile OrigFn _orig = (orig); \ 1129 volatile unsigned long _argvec[4]; \ 1130 volatile unsigned long _res; \ 1131 _argvec[0] = (unsigned long)_orig.nraddr; \ 1132 _argvec[1] = (unsigned long)(arg1); \ 1133 _argvec[2] = (unsigned long)(arg2); \ 1134 _argvec[3] = (unsigned long)(arg3); \ 1136 VALGRIND_ALIGN_STACK \ 1137 "subl $4, %%esp\n\t" \ 1138 "pushl 12(%%eax)\n\t" \ 1139 "pushl 8(%%eax)\n\t" \ 1140 "pushl 4(%%eax)\n\t" \ 1141 "movl (%%eax), %%eax\n\t" \ 1142 VALGRIND_CALL_NOREDIR_EAX \ 1143 VALGRIND_RESTORE_STACK \ 1145 : "a" (&_argvec[0]) \ 1146 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1148 lval = (__typeof__(lval)) _res; \ 1151 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 1153 volatile OrigFn _orig = (orig); \ 1154 volatile unsigned long _argvec[5]; \ 1155 volatile unsigned long _res; \ 1156 _argvec[0] = (unsigned long)_orig.nraddr; \ 1157 _argvec[1] = (unsigned long)(arg1); \ 1158 _argvec[2] = (unsigned long)(arg2); \ 1159 _argvec[3] = (unsigned long)(arg3); \ 1160 _argvec[4] = (unsigned long)(arg4); \ 1162 VALGRIND_ALIGN_STACK \ 1163 "pushl 16(%%eax)\n\t" \ 1164 "pushl 12(%%eax)\n\t" \ 1165 "pushl 8(%%eax)\n\t" \ 1166 "pushl 4(%%eax)\n\t" \ 1167 "movl (%%eax), %%eax\n\t" \ 1168 VALGRIND_CALL_NOREDIR_EAX \ 1169 VALGRIND_RESTORE_STACK \ 1171 : "a" (&_argvec[0]) \ 1172 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1174 lval = (__typeof__(lval)) _res; \ 1177 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 1179 volatile OrigFn _orig = (orig); \ 1180 volatile unsigned long _argvec[6]; \ 1181 volatile unsigned long _res; \ 1182 _argvec[0] = (unsigned long)_orig.nraddr; \ 1183 _argvec[1] = (unsigned long)(arg1); \ 1184 _argvec[2] = (unsigned long)(arg2); \ 1185 _argvec[3] = (unsigned long)(arg3); \ 1186 _argvec[4] = (unsigned long)(arg4); \ 1187 _argvec[5] = (unsigned long)(arg5); \ 1189 VALGRIND_ALIGN_STACK \ 1190 "subl $12, %%esp\n\t" \ 1191 "pushl 20(%%eax)\n\t" \ 1192 "pushl 16(%%eax)\n\t" \ 1193 "pushl 12(%%eax)\n\t" \ 1194 "pushl 8(%%eax)\n\t" \ 1195 "pushl 4(%%eax)\n\t" \ 1196 "movl (%%eax), %%eax\n\t" \ 1197 VALGRIND_CALL_NOREDIR_EAX \ 1198 VALGRIND_RESTORE_STACK \ 1200 : "a" (&_argvec[0]) \ 1201 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1203 lval = (__typeof__(lval)) _res; \ 1206 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 1208 volatile OrigFn _orig = (orig); \ 1209 volatile unsigned long _argvec[7]; \ 1210 volatile unsigned long _res; \ 1211 _argvec[0] = (unsigned long)_orig.nraddr; \ 1212 _argvec[1] = (unsigned long)(arg1); \ 1213 _argvec[2] = (unsigned long)(arg2); \ 1214 _argvec[3] = (unsigned long)(arg3); \ 1215 _argvec[4] = (unsigned long)(arg4); \ 1216 _argvec[5] = (unsigned long)(arg5); \ 1217 _argvec[6] = (unsigned long)(arg6); \ 1219 VALGRIND_ALIGN_STACK \ 1220 "subl $8, %%esp\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_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1240 volatile OrigFn _orig = (orig); \ 1241 volatile unsigned long _argvec[8]; \ 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); \ 1252 VALGRIND_ALIGN_STACK \ 1253 "subl $4, %%esp\n\t" \ 1254 "pushl 28(%%eax)\n\t" \ 1255 "pushl 24(%%eax)\n\t" \ 1256 "pushl 20(%%eax)\n\t" \ 1257 "pushl 16(%%eax)\n\t" \ 1258 "pushl 12(%%eax)\n\t" \ 1259 "pushl 8(%%eax)\n\t" \ 1260 "pushl 4(%%eax)\n\t" \ 1261 "movl (%%eax), %%eax\n\t" \ 1262 VALGRIND_CALL_NOREDIR_EAX \ 1263 VALGRIND_RESTORE_STACK \ 1265 : "a" (&_argvec[0]) \ 1266 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1268 lval = (__typeof__(lval)) _res; \ 1271 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1274 volatile OrigFn _orig = (orig); \ 1275 volatile unsigned long _argvec[9]; \ 1276 volatile unsigned long _res; \ 1277 _argvec[0] = (unsigned long)_orig.nraddr; \ 1278 _argvec[1] = (unsigned long)(arg1); \ 1279 _argvec[2] = (unsigned long)(arg2); \ 1280 _argvec[3] = (unsigned long)(arg3); \ 1281 _argvec[4] = (unsigned long)(arg4); \ 1282 _argvec[5] = (unsigned long)(arg5); \ 1283 _argvec[6] = (unsigned long)(arg6); \ 1284 _argvec[7] = (unsigned long)(arg7); \ 1285 _argvec[8] = (unsigned long)(arg8); \ 1287 VALGRIND_ALIGN_STACK \ 1288 "pushl 32(%%eax)\n\t" \ 1289 "pushl 28(%%eax)\n\t" \ 1290 "pushl 24(%%eax)\n\t" \ 1291 "pushl 20(%%eax)\n\t" \ 1292 "pushl 16(%%eax)\n\t" \ 1293 "pushl 12(%%eax)\n\t" \ 1294 "pushl 8(%%eax)\n\t" \ 1295 "pushl 4(%%eax)\n\t" \ 1296 "movl (%%eax), %%eax\n\t" \ 1297 VALGRIND_CALL_NOREDIR_EAX \ 1298 VALGRIND_RESTORE_STACK \ 1300 : "a" (&_argvec[0]) \ 1301 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1303 lval = (__typeof__(lval)) _res; \ 1306 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1309 volatile OrigFn _orig = (orig); \ 1310 volatile unsigned long _argvec[10]; \ 1311 volatile unsigned long _res; \ 1312 _argvec[0] = (unsigned long)_orig.nraddr; \ 1313 _argvec[1] = (unsigned long)(arg1); \ 1314 _argvec[2] = (unsigned long)(arg2); \ 1315 _argvec[3] = (unsigned long)(arg3); \ 1316 _argvec[4] = (unsigned long)(arg4); \ 1317 _argvec[5] = (unsigned long)(arg5); \ 1318 _argvec[6] = (unsigned long)(arg6); \ 1319 _argvec[7] = (unsigned long)(arg7); \ 1320 _argvec[8] = (unsigned long)(arg8); \ 1321 _argvec[9] = (unsigned long)(arg9); \ 1323 VALGRIND_ALIGN_STACK \ 1324 "subl $12, %%esp\n\t" \ 1325 "pushl 36(%%eax)\n\t" \ 1326 "pushl 32(%%eax)\n\t" \ 1327 "pushl 28(%%eax)\n\t" \ 1328 "pushl 24(%%eax)\n\t" \ 1329 "pushl 20(%%eax)\n\t" \ 1330 "pushl 16(%%eax)\n\t" \ 1331 "pushl 12(%%eax)\n\t" \ 1332 "pushl 8(%%eax)\n\t" \ 1333 "pushl 4(%%eax)\n\t" \ 1334 "movl (%%eax), %%eax\n\t" \ 1335 VALGRIND_CALL_NOREDIR_EAX \ 1336 VALGRIND_RESTORE_STACK \ 1338 : "a" (&_argvec[0]) \ 1339 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1341 lval = (__typeof__(lval)) _res; \ 1344 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1345 arg7,arg8,arg9,arg10) \ 1347 volatile OrigFn _orig = (orig); \ 1348 volatile unsigned long _argvec[11]; \ 1349 volatile unsigned long _res; \ 1350 _argvec[0] = (unsigned long)_orig.nraddr; \ 1351 _argvec[1] = (unsigned long)(arg1); \ 1352 _argvec[2] = (unsigned long)(arg2); \ 1353 _argvec[3] = (unsigned long)(arg3); \ 1354 _argvec[4] = (unsigned long)(arg4); \ 1355 _argvec[5] = (unsigned long)(arg5); \ 1356 _argvec[6] = (unsigned long)(arg6); \ 1357 _argvec[7] = (unsigned long)(arg7); \ 1358 _argvec[8] = (unsigned long)(arg8); \ 1359 _argvec[9] = (unsigned long)(arg9); \ 1360 _argvec[10] = (unsigned long)(arg10); \ 1362 VALGRIND_ALIGN_STACK \ 1363 "subl $8, %%esp\n\t" \ 1364 "pushl 40(%%eax)\n\t" \ 1365 "pushl 36(%%eax)\n\t" \ 1366 "pushl 32(%%eax)\n\t" \ 1367 "pushl 28(%%eax)\n\t" \ 1368 "pushl 24(%%eax)\n\t" \ 1369 "pushl 20(%%eax)\n\t" \ 1370 "pushl 16(%%eax)\n\t" \ 1371 "pushl 12(%%eax)\n\t" \ 1372 "pushl 8(%%eax)\n\t" \ 1373 "pushl 4(%%eax)\n\t" \ 1374 "movl (%%eax), %%eax\n\t" \ 1375 VALGRIND_CALL_NOREDIR_EAX \ 1376 VALGRIND_RESTORE_STACK \ 1378 : "a" (&_argvec[0]) \ 1379 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1381 lval = (__typeof__(lval)) _res; \ 1384 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 1385 arg6,arg7,arg8,arg9,arg10, \ 1388 volatile OrigFn _orig = (orig); \ 1389 volatile unsigned long _argvec[12]; \ 1390 volatile unsigned long _res; \ 1391 _argvec[0] = (unsigned long)_orig.nraddr; \ 1392 _argvec[1] = (unsigned long)(arg1); \ 1393 _argvec[2] = (unsigned long)(arg2); \ 1394 _argvec[3] = (unsigned long)(arg3); \ 1395 _argvec[4] = (unsigned long)(arg4); \ 1396 _argvec[5] = (unsigned long)(arg5); \ 1397 _argvec[6] = (unsigned long)(arg6); \ 1398 _argvec[7] = (unsigned long)(arg7); \ 1399 _argvec[8] = (unsigned long)(arg8); \ 1400 _argvec[9] = (unsigned long)(arg9); \ 1401 _argvec[10] = (unsigned long)(arg10); \ 1402 _argvec[11] = (unsigned long)(arg11); \ 1404 VALGRIND_ALIGN_STACK \ 1405 "subl $4, %%esp\n\t" \ 1406 "pushl 44(%%eax)\n\t" \ 1407 "pushl 40(%%eax)\n\t" \ 1408 "pushl 36(%%eax)\n\t" \ 1409 "pushl 32(%%eax)\n\t" \ 1410 "pushl 28(%%eax)\n\t" \ 1411 "pushl 24(%%eax)\n\t" \ 1412 "pushl 20(%%eax)\n\t" \ 1413 "pushl 16(%%eax)\n\t" \ 1414 "pushl 12(%%eax)\n\t" \ 1415 "pushl 8(%%eax)\n\t" \ 1416 "pushl 4(%%eax)\n\t" \ 1417 "movl (%%eax), %%eax\n\t" \ 1418 VALGRIND_CALL_NOREDIR_EAX \ 1419 VALGRIND_RESTORE_STACK \ 1421 : "a" (&_argvec[0]) \ 1422 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1424 lval = (__typeof__(lval)) _res; \ 1427 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 1428 arg6,arg7,arg8,arg9,arg10, \ 1431 volatile OrigFn _orig = (orig); \ 1432 volatile unsigned long _argvec[13]; \ 1433 volatile unsigned long _res; \ 1434 _argvec[0] = (unsigned long)_orig.nraddr; \ 1435 _argvec[1] = (unsigned long)(arg1); \ 1436 _argvec[2] = (unsigned long)(arg2); \ 1437 _argvec[3] = (unsigned long)(arg3); \ 1438 _argvec[4] = (unsigned long)(arg4); \ 1439 _argvec[5] = (unsigned long)(arg5); \ 1440 _argvec[6] = (unsigned long)(arg6); \ 1441 _argvec[7] = (unsigned long)(arg7); \ 1442 _argvec[8] = (unsigned long)(arg8); \ 1443 _argvec[9] = (unsigned long)(arg9); \ 1444 _argvec[10] = (unsigned long)(arg10); \ 1445 _argvec[11] = (unsigned long)(arg11); \ 1446 _argvec[12] = (unsigned long)(arg12); \ 1448 VALGRIND_ALIGN_STACK \ 1449 "pushl 48(%%eax)\n\t" \ 1450 "pushl 44(%%eax)\n\t" \ 1451 "pushl 40(%%eax)\n\t" \ 1452 "pushl 36(%%eax)\n\t" \ 1453 "pushl 32(%%eax)\n\t" \ 1454 "pushl 28(%%eax)\n\t" \ 1455 "pushl 24(%%eax)\n\t" \ 1456 "pushl 20(%%eax)\n\t" \ 1457 "pushl 16(%%eax)\n\t" \ 1458 "pushl 12(%%eax)\n\t" \ 1459 "pushl 8(%%eax)\n\t" \ 1460 "pushl 4(%%eax)\n\t" \ 1461 "movl (%%eax), %%eax\n\t" \ 1462 VALGRIND_CALL_NOREDIR_EAX \ 1463 VALGRIND_RESTORE_STACK \ 1465 : "a" (&_argvec[0]) \ 1466 : "cc", "memory", __CALLER_SAVED_REGS, "edi" \ 1468 lval = (__typeof__(lval)) _res; \ 1475 #if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) 1480 #define __CALLER_SAVED_REGS "rcx", "rdx", "rsi", \ 1481 "rdi", "r8", "r9", "r10", "r11" 1537 #if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM) 1538 # define __FRAME_POINTER \ 1539 ,"r"(__builtin_dwarf_cfa()) 1540 # define VALGRIND_CFI_PROLOGUE \ 1541 "movq %%rbp, %%r15\n\t" \ 1542 "movq %2, %%rbp\n\t" \ 1543 ".cfi_remember_state\n\t" \ 1544 ".cfi_def_cfa rbp, 0\n\t" 1545 # define VALGRIND_CFI_EPILOGUE \ 1546 "movq %%r15, %%rbp\n\t" \ 1547 ".cfi_restore_state\n\t" 1549 # define __FRAME_POINTER 1550 # define VALGRIND_CFI_PROLOGUE 1551 # define VALGRIND_CFI_EPILOGUE 1559 #define VALGRIND_ALIGN_STACK \ 1560 "movq %%rsp,%%r14\n\t" \ 1561 "andq $0xfffffffffffffff0,%%rsp\n\t" 1562 #define VALGRIND_RESTORE_STACK \ 1563 "movq %%r14,%%rsp\n\t" 1589 #define CALL_FN_W_v(lval, orig) \ 1591 volatile OrigFn _orig = (orig); \ 1592 volatile unsigned long _argvec[1]; \ 1593 volatile unsigned long _res; \ 1594 _argvec[0] = (unsigned long)_orig.nraddr; \ 1596 VALGRIND_CFI_PROLOGUE \ 1597 VALGRIND_ALIGN_STACK \ 1598 "subq $128,%%rsp\n\t" \ 1599 "movq (%%rax), %%rax\n\t" \ 1600 VALGRIND_CALL_NOREDIR_RAX \ 1601 VALGRIND_RESTORE_STACK \ 1602 VALGRIND_CFI_EPILOGUE \ 1604 : "a" (&_argvec[0]) __FRAME_POINTER \ 1605 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1607 lval = (__typeof__(lval)) _res; \ 1610 #define CALL_FN_W_W(lval, orig, arg1) \ 1612 volatile OrigFn _orig = (orig); \ 1613 volatile unsigned long _argvec[2]; \ 1614 volatile unsigned long _res; \ 1615 _argvec[0] = (unsigned long)_orig.nraddr; \ 1616 _argvec[1] = (unsigned long)(arg1); \ 1618 VALGRIND_CFI_PROLOGUE \ 1619 VALGRIND_ALIGN_STACK \ 1620 "subq $128,%%rsp\n\t" \ 1621 "movq 8(%%rax), %%rdi\n\t" \ 1622 "movq (%%rax), %%rax\n\t" \ 1623 VALGRIND_CALL_NOREDIR_RAX \ 1624 VALGRIND_RESTORE_STACK \ 1625 VALGRIND_CFI_EPILOGUE \ 1627 : "a" (&_argvec[0]) __FRAME_POINTER \ 1628 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1630 lval = (__typeof__(lval)) _res; \ 1633 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 1635 volatile OrigFn _orig = (orig); \ 1636 volatile unsigned long _argvec[3]; \ 1637 volatile unsigned long _res; \ 1638 _argvec[0] = (unsigned long)_orig.nraddr; \ 1639 _argvec[1] = (unsigned long)(arg1); \ 1640 _argvec[2] = (unsigned long)(arg2); \ 1642 VALGRIND_CFI_PROLOGUE \ 1643 VALGRIND_ALIGN_STACK \ 1644 "subq $128,%%rsp\n\t" \ 1645 "movq 16(%%rax), %%rsi\n\t" \ 1646 "movq 8(%%rax), %%rdi\n\t" \ 1647 "movq (%%rax), %%rax\n\t" \ 1648 VALGRIND_CALL_NOREDIR_RAX \ 1649 VALGRIND_RESTORE_STACK \ 1650 VALGRIND_CFI_EPILOGUE \ 1652 : "a" (&_argvec[0]) __FRAME_POINTER \ 1653 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1655 lval = (__typeof__(lval)) _res; \ 1658 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 1660 volatile OrigFn _orig = (orig); \ 1661 volatile unsigned long _argvec[4]; \ 1662 volatile unsigned long _res; \ 1663 _argvec[0] = (unsigned long)_orig.nraddr; \ 1664 _argvec[1] = (unsigned long)(arg1); \ 1665 _argvec[2] = (unsigned long)(arg2); \ 1666 _argvec[3] = (unsigned long)(arg3); \ 1668 VALGRIND_CFI_PROLOGUE \ 1669 VALGRIND_ALIGN_STACK \ 1670 "subq $128,%%rsp\n\t" \ 1671 "movq 24(%%rax), %%rdx\n\t" \ 1672 "movq 16(%%rax), %%rsi\n\t" \ 1673 "movq 8(%%rax), %%rdi\n\t" \ 1674 "movq (%%rax), %%rax\n\t" \ 1675 VALGRIND_CALL_NOREDIR_RAX \ 1676 VALGRIND_RESTORE_STACK \ 1677 VALGRIND_CFI_EPILOGUE \ 1679 : "a" (&_argvec[0]) __FRAME_POINTER \ 1680 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1682 lval = (__typeof__(lval)) _res; \ 1685 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 1687 volatile OrigFn _orig = (orig); \ 1688 volatile unsigned long _argvec[5]; \ 1689 volatile unsigned long _res; \ 1690 _argvec[0] = (unsigned long)_orig.nraddr; \ 1691 _argvec[1] = (unsigned long)(arg1); \ 1692 _argvec[2] = (unsigned long)(arg2); \ 1693 _argvec[3] = (unsigned long)(arg3); \ 1694 _argvec[4] = (unsigned long)(arg4); \ 1696 VALGRIND_CFI_PROLOGUE \ 1697 VALGRIND_ALIGN_STACK \ 1698 "subq $128,%%rsp\n\t" \ 1699 "movq 32(%%rax), %%rcx\n\t" \ 1700 "movq 24(%%rax), %%rdx\n\t" \ 1701 "movq 16(%%rax), %%rsi\n\t" \ 1702 "movq 8(%%rax), %%rdi\n\t" \ 1703 "movq (%%rax), %%rax\n\t" \ 1704 VALGRIND_CALL_NOREDIR_RAX \ 1705 VALGRIND_RESTORE_STACK \ 1706 VALGRIND_CFI_EPILOGUE \ 1708 : "a" (&_argvec[0]) __FRAME_POINTER \ 1709 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1711 lval = (__typeof__(lval)) _res; \ 1714 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 1716 volatile OrigFn _orig = (orig); \ 1717 volatile unsigned long _argvec[6]; \ 1718 volatile unsigned long _res; \ 1719 _argvec[0] = (unsigned long)_orig.nraddr; \ 1720 _argvec[1] = (unsigned long)(arg1); \ 1721 _argvec[2] = (unsigned long)(arg2); \ 1722 _argvec[3] = (unsigned long)(arg3); \ 1723 _argvec[4] = (unsigned long)(arg4); \ 1724 _argvec[5] = (unsigned long)(arg5); \ 1726 VALGRIND_CFI_PROLOGUE \ 1727 VALGRIND_ALIGN_STACK \ 1728 "subq $128,%%rsp\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_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 1747 volatile OrigFn _orig = (orig); \ 1748 volatile unsigned long _argvec[7]; \ 1749 volatile unsigned long _res; \ 1750 _argvec[0] = (unsigned long)_orig.nraddr; \ 1751 _argvec[1] = (unsigned long)(arg1); \ 1752 _argvec[2] = (unsigned long)(arg2); \ 1753 _argvec[3] = (unsigned long)(arg3); \ 1754 _argvec[4] = (unsigned long)(arg4); \ 1755 _argvec[5] = (unsigned long)(arg5); \ 1756 _argvec[6] = (unsigned long)(arg6); \ 1758 VALGRIND_CFI_PROLOGUE \ 1759 VALGRIND_ALIGN_STACK \ 1760 "subq $128,%%rsp\n\t" \ 1761 "movq 48(%%rax), %%r9\n\t" \ 1762 "movq 40(%%rax), %%r8\n\t" \ 1763 "movq 32(%%rax), %%rcx\n\t" \ 1764 "movq 24(%%rax), %%rdx\n\t" \ 1765 "movq 16(%%rax), %%rsi\n\t" \ 1766 "movq 8(%%rax), %%rdi\n\t" \ 1767 "movq (%%rax), %%rax\n\t" \ 1768 VALGRIND_CALL_NOREDIR_RAX \ 1769 VALGRIND_RESTORE_STACK \ 1770 VALGRIND_CFI_EPILOGUE \ 1772 : "a" (&_argvec[0]) __FRAME_POINTER \ 1773 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1775 lval = (__typeof__(lval)) _res; \ 1778 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1781 volatile OrigFn _orig = (orig); \ 1782 volatile unsigned long _argvec[8]; \ 1783 volatile unsigned long _res; \ 1784 _argvec[0] = (unsigned long)_orig.nraddr; \ 1785 _argvec[1] = (unsigned long)(arg1); \ 1786 _argvec[2] = (unsigned long)(arg2); \ 1787 _argvec[3] = (unsigned long)(arg3); \ 1788 _argvec[4] = (unsigned long)(arg4); \ 1789 _argvec[5] = (unsigned long)(arg5); \ 1790 _argvec[6] = (unsigned long)(arg6); \ 1791 _argvec[7] = (unsigned long)(arg7); \ 1793 VALGRIND_CFI_PROLOGUE \ 1794 VALGRIND_ALIGN_STACK \ 1795 "subq $136,%%rsp\n\t" \ 1796 "pushq 56(%%rax)\n\t" \ 1797 "movq 48(%%rax), %%r9\n\t" \ 1798 "movq 40(%%rax), %%r8\n\t" \ 1799 "movq 32(%%rax), %%rcx\n\t" \ 1800 "movq 24(%%rax), %%rdx\n\t" \ 1801 "movq 16(%%rax), %%rsi\n\t" \ 1802 "movq 8(%%rax), %%rdi\n\t" \ 1803 "movq (%%rax), %%rax\n\t" \ 1804 VALGRIND_CALL_NOREDIR_RAX \ 1805 VALGRIND_RESTORE_STACK \ 1806 VALGRIND_CFI_EPILOGUE \ 1808 : "a" (&_argvec[0]) __FRAME_POINTER \ 1809 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1811 lval = (__typeof__(lval)) _res; \ 1814 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1817 volatile OrigFn _orig = (orig); \ 1818 volatile unsigned long _argvec[9]; \ 1819 volatile unsigned long _res; \ 1820 _argvec[0] = (unsigned long)_orig.nraddr; \ 1821 _argvec[1] = (unsigned long)(arg1); \ 1822 _argvec[2] = (unsigned long)(arg2); \ 1823 _argvec[3] = (unsigned long)(arg3); \ 1824 _argvec[4] = (unsigned long)(arg4); \ 1825 _argvec[5] = (unsigned long)(arg5); \ 1826 _argvec[6] = (unsigned long)(arg6); \ 1827 _argvec[7] = (unsigned long)(arg7); \ 1828 _argvec[8] = (unsigned long)(arg8); \ 1830 VALGRIND_CFI_PROLOGUE \ 1831 VALGRIND_ALIGN_STACK \ 1832 "subq $128,%%rsp\n\t" \ 1833 "pushq 64(%%rax)\n\t" \ 1834 "pushq 56(%%rax)\n\t" \ 1835 "movq 48(%%rax), %%r9\n\t" \ 1836 "movq 40(%%rax), %%r8\n\t" \ 1837 "movq 32(%%rax), %%rcx\n\t" \ 1838 "movq 24(%%rax), %%rdx\n\t" \ 1839 "movq 16(%%rax), %%rsi\n\t" \ 1840 "movq 8(%%rax), %%rdi\n\t" \ 1841 "movq (%%rax), %%rax\n\t" \ 1842 VALGRIND_CALL_NOREDIR_RAX \ 1843 VALGRIND_RESTORE_STACK \ 1844 VALGRIND_CFI_EPILOGUE \ 1846 : "a" (&_argvec[0]) __FRAME_POINTER \ 1847 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1849 lval = (__typeof__(lval)) _res; \ 1852 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1855 volatile OrigFn _orig = (orig); \ 1856 volatile unsigned long _argvec[10]; \ 1857 volatile unsigned long _res; \ 1858 _argvec[0] = (unsigned long)_orig.nraddr; \ 1859 _argvec[1] = (unsigned long)(arg1); \ 1860 _argvec[2] = (unsigned long)(arg2); \ 1861 _argvec[3] = (unsigned long)(arg3); \ 1862 _argvec[4] = (unsigned long)(arg4); \ 1863 _argvec[5] = (unsigned long)(arg5); \ 1864 _argvec[6] = (unsigned long)(arg6); \ 1865 _argvec[7] = (unsigned long)(arg7); \ 1866 _argvec[8] = (unsigned long)(arg8); \ 1867 _argvec[9] = (unsigned long)(arg9); \ 1869 VALGRIND_CFI_PROLOGUE \ 1870 VALGRIND_ALIGN_STACK \ 1871 "subq $136,%%rsp\n\t" \ 1872 "pushq 72(%%rax)\n\t" \ 1873 "pushq 64(%%rax)\n\t" \ 1874 "pushq 56(%%rax)\n\t" \ 1875 "movq 48(%%rax), %%r9\n\t" \ 1876 "movq 40(%%rax), %%r8\n\t" \ 1877 "movq 32(%%rax), %%rcx\n\t" \ 1878 "movq 24(%%rax), %%rdx\n\t" \ 1879 "movq 16(%%rax), %%rsi\n\t" \ 1880 "movq 8(%%rax), %%rdi\n\t" \ 1881 "movq (%%rax), %%rax\n\t" \ 1882 VALGRIND_CALL_NOREDIR_RAX \ 1883 VALGRIND_RESTORE_STACK \ 1884 VALGRIND_CFI_EPILOGUE \ 1886 : "a" (&_argvec[0]) __FRAME_POINTER \ 1887 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1889 lval = (__typeof__(lval)) _res; \ 1892 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1893 arg7,arg8,arg9,arg10) \ 1895 volatile OrigFn _orig = (orig); \ 1896 volatile unsigned long _argvec[11]; \ 1897 volatile unsigned long _res; \ 1898 _argvec[0] = (unsigned long)_orig.nraddr; \ 1899 _argvec[1] = (unsigned long)(arg1); \ 1900 _argvec[2] = (unsigned long)(arg2); \ 1901 _argvec[3] = (unsigned long)(arg3); \ 1902 _argvec[4] = (unsigned long)(arg4); \ 1903 _argvec[5] = (unsigned long)(arg5); \ 1904 _argvec[6] = (unsigned long)(arg6); \ 1905 _argvec[7] = (unsigned long)(arg7); \ 1906 _argvec[8] = (unsigned long)(arg8); \ 1907 _argvec[9] = (unsigned long)(arg9); \ 1908 _argvec[10] = (unsigned long)(arg10); \ 1910 VALGRIND_CFI_PROLOGUE \ 1911 VALGRIND_ALIGN_STACK \ 1912 "subq $128,%%rsp\n\t" \ 1913 "pushq 80(%%rax)\n\t" \ 1914 "pushq 72(%%rax)\n\t" \ 1915 "pushq 64(%%rax)\n\t" \ 1916 "pushq 56(%%rax)\n\t" \ 1917 "movq 48(%%rax), %%r9\n\t" \ 1918 "movq 40(%%rax), %%r8\n\t" \ 1919 "movq 32(%%rax), %%rcx\n\t" \ 1920 "movq 24(%%rax), %%rdx\n\t" \ 1921 "movq 16(%%rax), %%rsi\n\t" \ 1922 "movq 8(%%rax), %%rdi\n\t" \ 1923 "movq (%%rax), %%rax\n\t" \ 1924 VALGRIND_CALL_NOREDIR_RAX \ 1925 VALGRIND_RESTORE_STACK \ 1926 VALGRIND_CFI_EPILOGUE \ 1928 : "a" (&_argvec[0]) __FRAME_POINTER \ 1929 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1931 lval = (__typeof__(lval)) _res; \ 1934 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1935 arg7,arg8,arg9,arg10,arg11) \ 1937 volatile OrigFn _orig = (orig); \ 1938 volatile unsigned long _argvec[12]; \ 1939 volatile unsigned long _res; \ 1940 _argvec[0] = (unsigned long)_orig.nraddr; \ 1941 _argvec[1] = (unsigned long)(arg1); \ 1942 _argvec[2] = (unsigned long)(arg2); \ 1943 _argvec[3] = (unsigned long)(arg3); \ 1944 _argvec[4] = (unsigned long)(arg4); \ 1945 _argvec[5] = (unsigned long)(arg5); \ 1946 _argvec[6] = (unsigned long)(arg6); \ 1947 _argvec[7] = (unsigned long)(arg7); \ 1948 _argvec[8] = (unsigned long)(arg8); \ 1949 _argvec[9] = (unsigned long)(arg9); \ 1950 _argvec[10] = (unsigned long)(arg10); \ 1951 _argvec[11] = (unsigned long)(arg11); \ 1953 VALGRIND_CFI_PROLOGUE \ 1954 VALGRIND_ALIGN_STACK \ 1955 "subq $136,%%rsp\n\t" \ 1956 "pushq 88(%%rax)\n\t" \ 1957 "pushq 80(%%rax)\n\t" \ 1958 "pushq 72(%%rax)\n\t" \ 1959 "pushq 64(%%rax)\n\t" \ 1960 "pushq 56(%%rax)\n\t" \ 1961 "movq 48(%%rax), %%r9\n\t" \ 1962 "movq 40(%%rax), %%r8\n\t" \ 1963 "movq 32(%%rax), %%rcx\n\t" \ 1964 "movq 24(%%rax), %%rdx\n\t" \ 1965 "movq 16(%%rax), %%rsi\n\t" \ 1966 "movq 8(%%rax), %%rdi\n\t" \ 1967 "movq (%%rax), %%rax\n\t" \ 1968 VALGRIND_CALL_NOREDIR_RAX \ 1969 VALGRIND_RESTORE_STACK \ 1970 VALGRIND_CFI_EPILOGUE \ 1972 : "a" (&_argvec[0]) __FRAME_POINTER \ 1973 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 1975 lval = (__typeof__(lval)) _res; \ 1978 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 1979 arg7,arg8,arg9,arg10,arg11,arg12) \ 1981 volatile OrigFn _orig = (orig); \ 1982 volatile unsigned long _argvec[13]; \ 1983 volatile unsigned long _res; \ 1984 _argvec[0] = (unsigned long)_orig.nraddr; \ 1985 _argvec[1] = (unsigned long)(arg1); \ 1986 _argvec[2] = (unsigned long)(arg2); \ 1987 _argvec[3] = (unsigned long)(arg3); \ 1988 _argvec[4] = (unsigned long)(arg4); \ 1989 _argvec[5] = (unsigned long)(arg5); \ 1990 _argvec[6] = (unsigned long)(arg6); \ 1991 _argvec[7] = (unsigned long)(arg7); \ 1992 _argvec[8] = (unsigned long)(arg8); \ 1993 _argvec[9] = (unsigned long)(arg9); \ 1994 _argvec[10] = (unsigned long)(arg10); \ 1995 _argvec[11] = (unsigned long)(arg11); \ 1996 _argvec[12] = (unsigned long)(arg12); \ 1998 VALGRIND_CFI_PROLOGUE \ 1999 VALGRIND_ALIGN_STACK \ 2000 "subq $128,%%rsp\n\t" \ 2001 "pushq 96(%%rax)\n\t" \ 2002 "pushq 88(%%rax)\n\t" \ 2003 "pushq 80(%%rax)\n\t" \ 2004 "pushq 72(%%rax)\n\t" \ 2005 "pushq 64(%%rax)\n\t" \ 2006 "pushq 56(%%rax)\n\t" \ 2007 "movq 48(%%rax), %%r9\n\t" \ 2008 "movq 40(%%rax), %%r8\n\t" \ 2009 "movq 32(%%rax), %%rcx\n\t" \ 2010 "movq 24(%%rax), %%rdx\n\t" \ 2011 "movq 16(%%rax), %%rsi\n\t" \ 2012 "movq 8(%%rax), %%rdi\n\t" \ 2013 "movq (%%rax), %%rax\n\t" \ 2014 VALGRIND_CALL_NOREDIR_RAX \ 2015 VALGRIND_RESTORE_STACK \ 2016 VALGRIND_CFI_EPILOGUE \ 2018 : "a" (&_argvec[0]) __FRAME_POINTER \ 2019 : "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ 2021 lval = (__typeof__(lval)) _res; \ 2028 #if defined(PLAT_ppc32_linux) 2054 #define __CALLER_SAVED_REGS \ 2055 "lr", "ctr", "xer", \ 2056 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ 2057 "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ 2065 #define VALGRIND_ALIGN_STACK \ 2067 "rlwinm 1,1,0,0,27\n\t" 2068 #define VALGRIND_RESTORE_STACK \ 2074 #define CALL_FN_W_v(lval, orig) \ 2076 volatile OrigFn _orig = (orig); \ 2077 volatile unsigned long _argvec[1]; \ 2078 volatile unsigned long _res; \ 2079 _argvec[0] = (unsigned long)_orig.nraddr; \ 2081 VALGRIND_ALIGN_STACK \ 2083 "lwz 11,0(11)\n\t" \ 2084 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2085 VALGRIND_RESTORE_STACK \ 2088 : "r" (&_argvec[0]) \ 2089 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2091 lval = (__typeof__(lval)) _res; \ 2094 #define CALL_FN_W_W(lval, orig, arg1) \ 2096 volatile OrigFn _orig = (orig); \ 2097 volatile unsigned long _argvec[2]; \ 2098 volatile unsigned long _res; \ 2099 _argvec[0] = (unsigned long)_orig.nraddr; \ 2100 _argvec[1] = (unsigned long)arg1; \ 2102 VALGRIND_ALIGN_STACK \ 2105 "lwz 11,0(11)\n\t" \ 2106 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2107 VALGRIND_RESTORE_STACK \ 2110 : "r" (&_argvec[0]) \ 2111 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2113 lval = (__typeof__(lval)) _res; \ 2116 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 2118 volatile OrigFn _orig = (orig); \ 2119 volatile unsigned long _argvec[3]; \ 2120 volatile unsigned long _res; \ 2121 _argvec[0] = (unsigned long)_orig.nraddr; \ 2122 _argvec[1] = (unsigned long)arg1; \ 2123 _argvec[2] = (unsigned long)arg2; \ 2125 VALGRIND_ALIGN_STACK \ 2129 "lwz 11,0(11)\n\t" \ 2130 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2131 VALGRIND_RESTORE_STACK \ 2134 : "r" (&_argvec[0]) \ 2135 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2137 lval = (__typeof__(lval)) _res; \ 2140 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 2142 volatile OrigFn _orig = (orig); \ 2143 volatile unsigned long _argvec[4]; \ 2144 volatile unsigned long _res; \ 2145 _argvec[0] = (unsigned long)_orig.nraddr; \ 2146 _argvec[1] = (unsigned long)arg1; \ 2147 _argvec[2] = (unsigned long)arg2; \ 2148 _argvec[3] = (unsigned long)arg3; \ 2150 VALGRIND_ALIGN_STACK \ 2154 "lwz 5,12(11)\n\t" \ 2155 "lwz 11,0(11)\n\t" \ 2156 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2157 VALGRIND_RESTORE_STACK \ 2160 : "r" (&_argvec[0]) \ 2161 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2163 lval = (__typeof__(lval)) _res; \ 2166 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 2168 volatile OrigFn _orig = (orig); \ 2169 volatile unsigned long _argvec[5]; \ 2170 volatile unsigned long _res; \ 2171 _argvec[0] = (unsigned long)_orig.nraddr; \ 2172 _argvec[1] = (unsigned long)arg1; \ 2173 _argvec[2] = (unsigned long)arg2; \ 2174 _argvec[3] = (unsigned long)arg3; \ 2175 _argvec[4] = (unsigned long)arg4; \ 2177 VALGRIND_ALIGN_STACK \ 2181 "lwz 5,12(11)\n\t" \ 2182 "lwz 6,16(11)\n\t" \ 2183 "lwz 11,0(11)\n\t" \ 2184 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2185 VALGRIND_RESTORE_STACK \ 2188 : "r" (&_argvec[0]) \ 2189 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2191 lval = (__typeof__(lval)) _res; \ 2194 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 2196 volatile OrigFn _orig = (orig); \ 2197 volatile unsigned long _argvec[6]; \ 2198 volatile unsigned long _res; \ 2199 _argvec[0] = (unsigned long)_orig.nraddr; \ 2200 _argvec[1] = (unsigned long)arg1; \ 2201 _argvec[2] = (unsigned long)arg2; \ 2202 _argvec[3] = (unsigned long)arg3; \ 2203 _argvec[4] = (unsigned long)arg4; \ 2204 _argvec[5] = (unsigned long)arg5; \ 2206 VALGRIND_ALIGN_STACK \ 2210 "lwz 5,12(11)\n\t" \ 2211 "lwz 6,16(11)\n\t" \ 2212 "lwz 7,20(11)\n\t" \ 2213 "lwz 11,0(11)\n\t" \ 2214 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2215 VALGRIND_RESTORE_STACK \ 2218 : "r" (&_argvec[0]) \ 2219 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2221 lval = (__typeof__(lval)) _res; \ 2224 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 2226 volatile OrigFn _orig = (orig); \ 2227 volatile unsigned long _argvec[7]; \ 2228 volatile unsigned long _res; \ 2229 _argvec[0] = (unsigned long)_orig.nraddr; \ 2230 _argvec[1] = (unsigned long)arg1; \ 2231 _argvec[2] = (unsigned long)arg2; \ 2232 _argvec[3] = (unsigned long)arg3; \ 2233 _argvec[4] = (unsigned long)arg4; \ 2234 _argvec[5] = (unsigned long)arg5; \ 2235 _argvec[6] = (unsigned long)arg6; \ 2237 VALGRIND_ALIGN_STACK \ 2241 "lwz 5,12(11)\n\t" \ 2242 "lwz 6,16(11)\n\t" \ 2243 "lwz 7,20(11)\n\t" \ 2244 "lwz 8,24(11)\n\t" \ 2245 "lwz 11,0(11)\n\t" \ 2246 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2247 VALGRIND_RESTORE_STACK \ 2250 : "r" (&_argvec[0]) \ 2251 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2253 lval = (__typeof__(lval)) _res; \ 2256 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2259 volatile OrigFn _orig = (orig); \ 2260 volatile unsigned long _argvec[8]; \ 2261 volatile unsigned long _res; \ 2262 _argvec[0] = (unsigned long)_orig.nraddr; \ 2263 _argvec[1] = (unsigned long)arg1; \ 2264 _argvec[2] = (unsigned long)arg2; \ 2265 _argvec[3] = (unsigned long)arg3; \ 2266 _argvec[4] = (unsigned long)arg4; \ 2267 _argvec[5] = (unsigned long)arg5; \ 2268 _argvec[6] = (unsigned long)arg6; \ 2269 _argvec[7] = (unsigned long)arg7; \ 2271 VALGRIND_ALIGN_STACK \ 2275 "lwz 5,12(11)\n\t" \ 2276 "lwz 6,16(11)\n\t" \ 2277 "lwz 7,20(11)\n\t" \ 2278 "lwz 8,24(11)\n\t" \ 2279 "lwz 9,28(11)\n\t" \ 2280 "lwz 11,0(11)\n\t" \ 2281 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2282 VALGRIND_RESTORE_STACK \ 2285 : "r" (&_argvec[0]) \ 2286 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2288 lval = (__typeof__(lval)) _res; \ 2291 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2294 volatile OrigFn _orig = (orig); \ 2295 volatile unsigned long _argvec[9]; \ 2296 volatile unsigned long _res; \ 2297 _argvec[0] = (unsigned long)_orig.nraddr; \ 2298 _argvec[1] = (unsigned long)arg1; \ 2299 _argvec[2] = (unsigned long)arg2; \ 2300 _argvec[3] = (unsigned long)arg3; \ 2301 _argvec[4] = (unsigned long)arg4; \ 2302 _argvec[5] = (unsigned long)arg5; \ 2303 _argvec[6] = (unsigned long)arg6; \ 2304 _argvec[7] = (unsigned long)arg7; \ 2305 _argvec[8] = (unsigned long)arg8; \ 2307 VALGRIND_ALIGN_STACK \ 2311 "lwz 5,12(11)\n\t" \ 2312 "lwz 6,16(11)\n\t" \ 2313 "lwz 7,20(11)\n\t" \ 2314 "lwz 8,24(11)\n\t" \ 2315 "lwz 9,28(11)\n\t" \ 2316 "lwz 10,32(11)\n\t" \ 2317 "lwz 11,0(11)\n\t" \ 2318 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2319 VALGRIND_RESTORE_STACK \ 2322 : "r" (&_argvec[0]) \ 2323 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2325 lval = (__typeof__(lval)) _res; \ 2328 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2331 volatile OrigFn _orig = (orig); \ 2332 volatile unsigned long _argvec[10]; \ 2333 volatile unsigned long _res; \ 2334 _argvec[0] = (unsigned long)_orig.nraddr; \ 2335 _argvec[1] = (unsigned long)arg1; \ 2336 _argvec[2] = (unsigned long)arg2; \ 2337 _argvec[3] = (unsigned long)arg3; \ 2338 _argvec[4] = (unsigned long)arg4; \ 2339 _argvec[5] = (unsigned long)arg5; \ 2340 _argvec[6] = (unsigned long)arg6; \ 2341 _argvec[7] = (unsigned long)arg7; \ 2342 _argvec[8] = (unsigned long)arg8; \ 2343 _argvec[9] = (unsigned long)arg9; \ 2345 VALGRIND_ALIGN_STACK \ 2347 "addi 1,1,-16\n\t" \ 2349 "lwz 3,36(11)\n\t" \ 2354 "lwz 5,12(11)\n\t" \ 2355 "lwz 6,16(11)\n\t" \ 2356 "lwz 7,20(11)\n\t" \ 2357 "lwz 8,24(11)\n\t" \ 2358 "lwz 9,28(11)\n\t" \ 2359 "lwz 10,32(11)\n\t" \ 2360 "lwz 11,0(11)\n\t" \ 2361 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2362 VALGRIND_RESTORE_STACK \ 2365 : "r" (&_argvec[0]) \ 2366 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2368 lval = (__typeof__(lval)) _res; \ 2371 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2372 arg7,arg8,arg9,arg10) \ 2374 volatile OrigFn _orig = (orig); \ 2375 volatile unsigned long _argvec[11]; \ 2376 volatile unsigned long _res; \ 2377 _argvec[0] = (unsigned long)_orig.nraddr; \ 2378 _argvec[1] = (unsigned long)arg1; \ 2379 _argvec[2] = (unsigned long)arg2; \ 2380 _argvec[3] = (unsigned long)arg3; \ 2381 _argvec[4] = (unsigned long)arg4; \ 2382 _argvec[5] = (unsigned long)arg5; \ 2383 _argvec[6] = (unsigned long)arg6; \ 2384 _argvec[7] = (unsigned long)arg7; \ 2385 _argvec[8] = (unsigned long)arg8; \ 2386 _argvec[9] = (unsigned long)arg9; \ 2387 _argvec[10] = (unsigned long)arg10; \ 2389 VALGRIND_ALIGN_STACK \ 2391 "addi 1,1,-16\n\t" \ 2393 "lwz 3,40(11)\n\t" \ 2396 "lwz 3,36(11)\n\t" \ 2401 "lwz 5,12(11)\n\t" \ 2402 "lwz 6,16(11)\n\t" \ 2403 "lwz 7,20(11)\n\t" \ 2404 "lwz 8,24(11)\n\t" \ 2405 "lwz 9,28(11)\n\t" \ 2406 "lwz 10,32(11)\n\t" \ 2407 "lwz 11,0(11)\n\t" \ 2408 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2409 VALGRIND_RESTORE_STACK \ 2412 : "r" (&_argvec[0]) \ 2413 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2415 lval = (__typeof__(lval)) _res; \ 2418 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2419 arg7,arg8,arg9,arg10,arg11) \ 2421 volatile OrigFn _orig = (orig); \ 2422 volatile unsigned long _argvec[12]; \ 2423 volatile unsigned long _res; \ 2424 _argvec[0] = (unsigned long)_orig.nraddr; \ 2425 _argvec[1] = (unsigned long)arg1; \ 2426 _argvec[2] = (unsigned long)arg2; \ 2427 _argvec[3] = (unsigned long)arg3; \ 2428 _argvec[4] = (unsigned long)arg4; \ 2429 _argvec[5] = (unsigned long)arg5; \ 2430 _argvec[6] = (unsigned long)arg6; \ 2431 _argvec[7] = (unsigned long)arg7; \ 2432 _argvec[8] = (unsigned long)arg8; \ 2433 _argvec[9] = (unsigned long)arg9; \ 2434 _argvec[10] = (unsigned long)arg10; \ 2435 _argvec[11] = (unsigned long)arg11; \ 2437 VALGRIND_ALIGN_STACK \ 2439 "addi 1,1,-32\n\t" \ 2441 "lwz 3,44(11)\n\t" \ 2444 "lwz 3,40(11)\n\t" \ 2447 "lwz 3,36(11)\n\t" \ 2452 "lwz 5,12(11)\n\t" \ 2453 "lwz 6,16(11)\n\t" \ 2454 "lwz 7,20(11)\n\t" \ 2455 "lwz 8,24(11)\n\t" \ 2456 "lwz 9,28(11)\n\t" \ 2457 "lwz 10,32(11)\n\t" \ 2458 "lwz 11,0(11)\n\t" \ 2459 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2460 VALGRIND_RESTORE_STACK \ 2463 : "r" (&_argvec[0]) \ 2464 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2466 lval = (__typeof__(lval)) _res; \ 2469 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2470 arg7,arg8,arg9,arg10,arg11,arg12) \ 2472 volatile OrigFn _orig = (orig); \ 2473 volatile unsigned long _argvec[13]; \ 2474 volatile unsigned long _res; \ 2475 _argvec[0] = (unsigned long)_orig.nraddr; \ 2476 _argvec[1] = (unsigned long)arg1; \ 2477 _argvec[2] = (unsigned long)arg2; \ 2478 _argvec[3] = (unsigned long)arg3; \ 2479 _argvec[4] = (unsigned long)arg4; \ 2480 _argvec[5] = (unsigned long)arg5; \ 2481 _argvec[6] = (unsigned long)arg6; \ 2482 _argvec[7] = (unsigned long)arg7; \ 2483 _argvec[8] = (unsigned long)arg8; \ 2484 _argvec[9] = (unsigned long)arg9; \ 2485 _argvec[10] = (unsigned long)arg10; \ 2486 _argvec[11] = (unsigned long)arg11; \ 2487 _argvec[12] = (unsigned long)arg12; \ 2489 VALGRIND_ALIGN_STACK \ 2491 "addi 1,1,-32\n\t" \ 2493 "lwz 3,48(11)\n\t" \ 2496 "lwz 3,44(11)\n\t" \ 2499 "lwz 3,40(11)\n\t" \ 2502 "lwz 3,36(11)\n\t" \ 2507 "lwz 5,12(11)\n\t" \ 2508 "lwz 6,16(11)\n\t" \ 2509 "lwz 7,20(11)\n\t" \ 2510 "lwz 8,24(11)\n\t" \ 2511 "lwz 9,28(11)\n\t" \ 2512 "lwz 10,32(11)\n\t" \ 2513 "lwz 11,0(11)\n\t" \ 2514 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2515 VALGRIND_RESTORE_STACK \ 2518 : "r" (&_argvec[0]) \ 2519 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2521 lval = (__typeof__(lval)) _res; \ 2528 #if defined(PLAT_ppc64_linux) 2533 #define __CALLER_SAVED_REGS \ 2534 "lr", "ctr", "xer", \ 2535 "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ 2536 "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ 2544 #define VALGRIND_ALIGN_STACK \ 2546 "rldicr 1,1,0,59\n\t" 2547 #define VALGRIND_RESTORE_STACK \ 2553 #define CALL_FN_W_v(lval, orig) \ 2555 volatile OrigFn _orig = (orig); \ 2556 volatile unsigned long _argvec[3+0]; \ 2557 volatile unsigned long _res; \ 2559 _argvec[1] = (unsigned long)_orig.r2; \ 2560 _argvec[2] = (unsigned long)_orig.nraddr; \ 2562 VALGRIND_ALIGN_STACK \ 2564 "std 2,-16(11)\n\t" \ 2566 "ld 11, 0(11)\n\t" \ 2567 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2570 "ld 2,-16(11)\n\t" \ 2571 VALGRIND_RESTORE_STACK \ 2573 : "r" (&_argvec[2]) \ 2574 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2576 lval = (__typeof__(lval)) _res; \ 2579 #define CALL_FN_W_W(lval, orig, arg1) \ 2581 volatile OrigFn _orig = (orig); \ 2582 volatile unsigned long _argvec[3+1]; \ 2583 volatile unsigned long _res; \ 2585 _argvec[1] = (unsigned long)_orig.r2; \ 2586 _argvec[2] = (unsigned long)_orig.nraddr; \ 2587 _argvec[2+1] = (unsigned long)arg1; \ 2589 VALGRIND_ALIGN_STACK \ 2591 "std 2,-16(11)\n\t" \ 2594 "ld 11, 0(11)\n\t" \ 2595 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2598 "ld 2,-16(11)\n\t" \ 2599 VALGRIND_RESTORE_STACK \ 2601 : "r" (&_argvec[2]) \ 2602 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2604 lval = (__typeof__(lval)) _res; \ 2607 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 2609 volatile OrigFn _orig = (orig); \ 2610 volatile unsigned long _argvec[3+2]; \ 2611 volatile unsigned long _res; \ 2613 _argvec[1] = (unsigned long)_orig.r2; \ 2614 _argvec[2] = (unsigned long)_orig.nraddr; \ 2615 _argvec[2+1] = (unsigned long)arg1; \ 2616 _argvec[2+2] = (unsigned long)arg2; \ 2618 VALGRIND_ALIGN_STACK \ 2620 "std 2,-16(11)\n\t" \ 2623 "ld 4, 16(11)\n\t" \ 2624 "ld 11, 0(11)\n\t" \ 2625 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2628 "ld 2,-16(11)\n\t" \ 2629 VALGRIND_RESTORE_STACK \ 2631 : "r" (&_argvec[2]) \ 2632 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2634 lval = (__typeof__(lval)) _res; \ 2637 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 2639 volatile OrigFn _orig = (orig); \ 2640 volatile unsigned long _argvec[3+3]; \ 2641 volatile unsigned long _res; \ 2643 _argvec[1] = (unsigned long)_orig.r2; \ 2644 _argvec[2] = (unsigned long)_orig.nraddr; \ 2645 _argvec[2+1] = (unsigned long)arg1; \ 2646 _argvec[2+2] = (unsigned long)arg2; \ 2647 _argvec[2+3] = (unsigned long)arg3; \ 2649 VALGRIND_ALIGN_STACK \ 2651 "std 2,-16(11)\n\t" \ 2654 "ld 4, 16(11)\n\t" \ 2655 "ld 5, 24(11)\n\t" \ 2656 "ld 11, 0(11)\n\t" \ 2657 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2660 "ld 2,-16(11)\n\t" \ 2661 VALGRIND_RESTORE_STACK \ 2663 : "r" (&_argvec[2]) \ 2664 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2666 lval = (__typeof__(lval)) _res; \ 2669 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 2671 volatile OrigFn _orig = (orig); \ 2672 volatile unsigned long _argvec[3+4]; \ 2673 volatile unsigned long _res; \ 2675 _argvec[1] = (unsigned long)_orig.r2; \ 2676 _argvec[2] = (unsigned long)_orig.nraddr; \ 2677 _argvec[2+1] = (unsigned long)arg1; \ 2678 _argvec[2+2] = (unsigned long)arg2; \ 2679 _argvec[2+3] = (unsigned long)arg3; \ 2680 _argvec[2+4] = (unsigned long)arg4; \ 2682 VALGRIND_ALIGN_STACK \ 2684 "std 2,-16(11)\n\t" \ 2687 "ld 4, 16(11)\n\t" \ 2688 "ld 5, 24(11)\n\t" \ 2689 "ld 6, 32(11)\n\t" \ 2690 "ld 11, 0(11)\n\t" \ 2691 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2694 "ld 2,-16(11)\n\t" \ 2695 VALGRIND_RESTORE_STACK \ 2697 : "r" (&_argvec[2]) \ 2698 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2700 lval = (__typeof__(lval)) _res; \ 2703 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 2705 volatile OrigFn _orig = (orig); \ 2706 volatile unsigned long _argvec[3+5]; \ 2707 volatile unsigned long _res; \ 2709 _argvec[1] = (unsigned long)_orig.r2; \ 2710 _argvec[2] = (unsigned long)_orig.nraddr; \ 2711 _argvec[2+1] = (unsigned long)arg1; \ 2712 _argvec[2+2] = (unsigned long)arg2; \ 2713 _argvec[2+3] = (unsigned long)arg3; \ 2714 _argvec[2+4] = (unsigned long)arg4; \ 2715 _argvec[2+5] = (unsigned long)arg5; \ 2717 VALGRIND_ALIGN_STACK \ 2719 "std 2,-16(11)\n\t" \ 2722 "ld 4, 16(11)\n\t" \ 2723 "ld 5, 24(11)\n\t" \ 2724 "ld 6, 32(11)\n\t" \ 2725 "ld 7, 40(11)\n\t" \ 2726 "ld 11, 0(11)\n\t" \ 2727 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2730 "ld 2,-16(11)\n\t" \ 2731 VALGRIND_RESTORE_STACK \ 2733 : "r" (&_argvec[2]) \ 2734 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2736 lval = (__typeof__(lval)) _res; \ 2739 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 2741 volatile OrigFn _orig = (orig); \ 2742 volatile unsigned long _argvec[3+6]; \ 2743 volatile unsigned long _res; \ 2745 _argvec[1] = (unsigned long)_orig.r2; \ 2746 _argvec[2] = (unsigned long)_orig.nraddr; \ 2747 _argvec[2+1] = (unsigned long)arg1; \ 2748 _argvec[2+2] = (unsigned long)arg2; \ 2749 _argvec[2+3] = (unsigned long)arg3; \ 2750 _argvec[2+4] = (unsigned long)arg4; \ 2751 _argvec[2+5] = (unsigned long)arg5; \ 2752 _argvec[2+6] = (unsigned long)arg6; \ 2754 VALGRIND_ALIGN_STACK \ 2756 "std 2,-16(11)\n\t" \ 2759 "ld 4, 16(11)\n\t" \ 2760 "ld 5, 24(11)\n\t" \ 2761 "ld 6, 32(11)\n\t" \ 2762 "ld 7, 40(11)\n\t" \ 2763 "ld 8, 48(11)\n\t" \ 2764 "ld 11, 0(11)\n\t" \ 2765 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2768 "ld 2,-16(11)\n\t" \ 2769 VALGRIND_RESTORE_STACK \ 2771 : "r" (&_argvec[2]) \ 2772 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2774 lval = (__typeof__(lval)) _res; \ 2777 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2780 volatile OrigFn _orig = (orig); \ 2781 volatile unsigned long _argvec[3+7]; \ 2782 volatile unsigned long _res; \ 2784 _argvec[1] = (unsigned long)_orig.r2; \ 2785 _argvec[2] = (unsigned long)_orig.nraddr; \ 2786 _argvec[2+1] = (unsigned long)arg1; \ 2787 _argvec[2+2] = (unsigned long)arg2; \ 2788 _argvec[2+3] = (unsigned long)arg3; \ 2789 _argvec[2+4] = (unsigned long)arg4; \ 2790 _argvec[2+5] = (unsigned long)arg5; \ 2791 _argvec[2+6] = (unsigned long)arg6; \ 2792 _argvec[2+7] = (unsigned long)arg7; \ 2794 VALGRIND_ALIGN_STACK \ 2796 "std 2,-16(11)\n\t" \ 2799 "ld 4, 16(11)\n\t" \ 2800 "ld 5, 24(11)\n\t" \ 2801 "ld 6, 32(11)\n\t" \ 2802 "ld 7, 40(11)\n\t" \ 2803 "ld 8, 48(11)\n\t" \ 2804 "ld 9, 56(11)\n\t" \ 2805 "ld 11, 0(11)\n\t" \ 2806 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2809 "ld 2,-16(11)\n\t" \ 2810 VALGRIND_RESTORE_STACK \ 2812 : "r" (&_argvec[2]) \ 2813 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2815 lval = (__typeof__(lval)) _res; \ 2818 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2821 volatile OrigFn _orig = (orig); \ 2822 volatile unsigned long _argvec[3+8]; \ 2823 volatile unsigned long _res; \ 2825 _argvec[1] = (unsigned long)_orig.r2; \ 2826 _argvec[2] = (unsigned long)_orig.nraddr; \ 2827 _argvec[2+1] = (unsigned long)arg1; \ 2828 _argvec[2+2] = (unsigned long)arg2; \ 2829 _argvec[2+3] = (unsigned long)arg3; \ 2830 _argvec[2+4] = (unsigned long)arg4; \ 2831 _argvec[2+5] = (unsigned long)arg5; \ 2832 _argvec[2+6] = (unsigned long)arg6; \ 2833 _argvec[2+7] = (unsigned long)arg7; \ 2834 _argvec[2+8] = (unsigned long)arg8; \ 2836 VALGRIND_ALIGN_STACK \ 2838 "std 2,-16(11)\n\t" \ 2841 "ld 4, 16(11)\n\t" \ 2842 "ld 5, 24(11)\n\t" \ 2843 "ld 6, 32(11)\n\t" \ 2844 "ld 7, 40(11)\n\t" \ 2845 "ld 8, 48(11)\n\t" \ 2846 "ld 9, 56(11)\n\t" \ 2847 "ld 10, 64(11)\n\t" \ 2848 "ld 11, 0(11)\n\t" \ 2849 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2852 "ld 2,-16(11)\n\t" \ 2853 VALGRIND_RESTORE_STACK \ 2855 : "r" (&_argvec[2]) \ 2856 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2858 lval = (__typeof__(lval)) _res; \ 2861 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2864 volatile OrigFn _orig = (orig); \ 2865 volatile unsigned long _argvec[3+9]; \ 2866 volatile unsigned long _res; \ 2868 _argvec[1] = (unsigned long)_orig.r2; \ 2869 _argvec[2] = (unsigned long)_orig.nraddr; \ 2870 _argvec[2+1] = (unsigned long)arg1; \ 2871 _argvec[2+2] = (unsigned long)arg2; \ 2872 _argvec[2+3] = (unsigned long)arg3; \ 2873 _argvec[2+4] = (unsigned long)arg4; \ 2874 _argvec[2+5] = (unsigned long)arg5; \ 2875 _argvec[2+6] = (unsigned long)arg6; \ 2876 _argvec[2+7] = (unsigned long)arg7; \ 2877 _argvec[2+8] = (unsigned long)arg8; \ 2878 _argvec[2+9] = (unsigned long)arg9; \ 2880 VALGRIND_ALIGN_STACK \ 2882 "std 2,-16(11)\n\t" \ 2884 "addi 1,1,-128\n\t" \ 2887 "std 3,112(1)\n\t" \ 2890 "ld 4, 16(11)\n\t" \ 2891 "ld 5, 24(11)\n\t" \ 2892 "ld 6, 32(11)\n\t" \ 2893 "ld 7, 40(11)\n\t" \ 2894 "ld 8, 48(11)\n\t" \ 2895 "ld 9, 56(11)\n\t" \ 2896 "ld 10, 64(11)\n\t" \ 2897 "ld 11, 0(11)\n\t" \ 2898 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2901 "ld 2,-16(11)\n\t" \ 2902 VALGRIND_RESTORE_STACK \ 2904 : "r" (&_argvec[2]) \ 2905 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2907 lval = (__typeof__(lval)) _res; \ 2910 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2911 arg7,arg8,arg9,arg10) \ 2913 volatile OrigFn _orig = (orig); \ 2914 volatile unsigned long _argvec[3+10]; \ 2915 volatile unsigned long _res; \ 2917 _argvec[1] = (unsigned long)_orig.r2; \ 2918 _argvec[2] = (unsigned long)_orig.nraddr; \ 2919 _argvec[2+1] = (unsigned long)arg1; \ 2920 _argvec[2+2] = (unsigned long)arg2; \ 2921 _argvec[2+3] = (unsigned long)arg3; \ 2922 _argvec[2+4] = (unsigned long)arg4; \ 2923 _argvec[2+5] = (unsigned long)arg5; \ 2924 _argvec[2+6] = (unsigned long)arg6; \ 2925 _argvec[2+7] = (unsigned long)arg7; \ 2926 _argvec[2+8] = (unsigned long)arg8; \ 2927 _argvec[2+9] = (unsigned long)arg9; \ 2928 _argvec[2+10] = (unsigned long)arg10; \ 2930 VALGRIND_ALIGN_STACK \ 2932 "std 2,-16(11)\n\t" \ 2934 "addi 1,1,-128\n\t" \ 2937 "std 3,120(1)\n\t" \ 2940 "std 3,112(1)\n\t" \ 2943 "ld 4, 16(11)\n\t" \ 2944 "ld 5, 24(11)\n\t" \ 2945 "ld 6, 32(11)\n\t" \ 2946 "ld 7, 40(11)\n\t" \ 2947 "ld 8, 48(11)\n\t" \ 2948 "ld 9, 56(11)\n\t" \ 2949 "ld 10, 64(11)\n\t" \ 2950 "ld 11, 0(11)\n\t" \ 2951 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 2954 "ld 2,-16(11)\n\t" \ 2955 VALGRIND_RESTORE_STACK \ 2957 : "r" (&_argvec[2]) \ 2958 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 2960 lval = (__typeof__(lval)) _res; \ 2963 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 2964 arg7,arg8,arg9,arg10,arg11) \ 2966 volatile OrigFn _orig = (orig); \ 2967 volatile unsigned long _argvec[3+11]; \ 2968 volatile unsigned long _res; \ 2970 _argvec[1] = (unsigned long)_orig.r2; \ 2971 _argvec[2] = (unsigned long)_orig.nraddr; \ 2972 _argvec[2+1] = (unsigned long)arg1; \ 2973 _argvec[2+2] = (unsigned long)arg2; \ 2974 _argvec[2+3] = (unsigned long)arg3; \ 2975 _argvec[2+4] = (unsigned long)arg4; \ 2976 _argvec[2+5] = (unsigned long)arg5; \ 2977 _argvec[2+6] = (unsigned long)arg6; \ 2978 _argvec[2+7] = (unsigned long)arg7; \ 2979 _argvec[2+8] = (unsigned long)arg8; \ 2980 _argvec[2+9] = (unsigned long)arg9; \ 2981 _argvec[2+10] = (unsigned long)arg10; \ 2982 _argvec[2+11] = (unsigned long)arg11; \ 2984 VALGRIND_ALIGN_STACK \ 2986 "std 2,-16(11)\n\t" \ 2988 "addi 1,1,-144\n\t" \ 2991 "std 3,128(1)\n\t" \ 2994 "std 3,120(1)\n\t" \ 2997 "std 3,112(1)\n\t" \ 3000 "ld 4, 16(11)\n\t" \ 3001 "ld 5, 24(11)\n\t" \ 3002 "ld 6, 32(11)\n\t" \ 3003 "ld 7, 40(11)\n\t" \ 3004 "ld 8, 48(11)\n\t" \ 3005 "ld 9, 56(11)\n\t" \ 3006 "ld 10, 64(11)\n\t" \ 3007 "ld 11, 0(11)\n\t" \ 3008 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 3011 "ld 2,-16(11)\n\t" \ 3012 VALGRIND_RESTORE_STACK \ 3014 : "r" (&_argvec[2]) \ 3015 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3017 lval = (__typeof__(lval)) _res; \ 3020 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3021 arg7,arg8,arg9,arg10,arg11,arg12) \ 3023 volatile OrigFn _orig = (orig); \ 3024 volatile unsigned long _argvec[3+12]; \ 3025 volatile unsigned long _res; \ 3027 _argvec[1] = (unsigned long)_orig.r2; \ 3028 _argvec[2] = (unsigned long)_orig.nraddr; \ 3029 _argvec[2+1] = (unsigned long)arg1; \ 3030 _argvec[2+2] = (unsigned long)arg2; \ 3031 _argvec[2+3] = (unsigned long)arg3; \ 3032 _argvec[2+4] = (unsigned long)arg4; \ 3033 _argvec[2+5] = (unsigned long)arg5; \ 3034 _argvec[2+6] = (unsigned long)arg6; \ 3035 _argvec[2+7] = (unsigned long)arg7; \ 3036 _argvec[2+8] = (unsigned long)arg8; \ 3037 _argvec[2+9] = (unsigned long)arg9; \ 3038 _argvec[2+10] = (unsigned long)arg10; \ 3039 _argvec[2+11] = (unsigned long)arg11; \ 3040 _argvec[2+12] = (unsigned long)arg12; \ 3042 VALGRIND_ALIGN_STACK \ 3044 "std 2,-16(11)\n\t" \ 3046 "addi 1,1,-144\n\t" \ 3049 "std 3,136(1)\n\t" \ 3052 "std 3,128(1)\n\t" \ 3055 "std 3,120(1)\n\t" \ 3058 "std 3,112(1)\n\t" \ 3061 "ld 4, 16(11)\n\t" \ 3062 "ld 5, 24(11)\n\t" \ 3063 "ld 6, 32(11)\n\t" \ 3064 "ld 7, 40(11)\n\t" \ 3065 "ld 8, 48(11)\n\t" \ 3066 "ld 9, 56(11)\n\t" \ 3067 "ld 10, 64(11)\n\t" \ 3068 "ld 11, 0(11)\n\t" \ 3069 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ 3072 "ld 2,-16(11)\n\t" \ 3073 VALGRIND_RESTORE_STACK \ 3075 : "r" (&_argvec[2]) \ 3076 : "cc", "memory", __CALLER_SAVED_REGS, "r28" \ 3078 lval = (__typeof__(lval)) _res; \ 3085 #if defined(PLAT_arm_linux) 3088 #define __CALLER_SAVED_REGS "r0", "r1", "r2", "r3","r4","r14" 3103 #define VALGRIND_ALIGN_STACK \ 3106 "bic r4, r4, #7\n\t" \ 3108 #define VALGRIND_RESTORE_STACK \ 3114 #define CALL_FN_W_v(lval, orig) \ 3116 volatile OrigFn _orig = (orig); \ 3117 volatile unsigned long _argvec[1]; \ 3118 volatile unsigned long _res; \ 3119 _argvec[0] = (unsigned long)_orig.nraddr; \ 3121 VALGRIND_ALIGN_STACK \ 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_W(lval, orig, arg1) \ 3135 volatile OrigFn _orig = (orig); \ 3136 volatile unsigned long _argvec[2]; \ 3137 volatile unsigned long _res; \ 3138 _argvec[0] = (unsigned long)_orig.nraddr; \ 3139 _argvec[1] = (unsigned long)(arg1); \ 3141 VALGRIND_ALIGN_STACK \ 3142 "ldr r0, [%1, #4] \n\t" \ 3143 "ldr r4, [%1] \n\t" \ 3144 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3145 VALGRIND_RESTORE_STACK \ 3148 : "0" (&_argvec[0]) \ 3149 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3151 lval = (__typeof__(lval)) _res; \ 3154 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 3156 volatile OrigFn _orig = (orig); \ 3157 volatile unsigned long _argvec[3]; \ 3158 volatile unsigned long _res; \ 3159 _argvec[0] = (unsigned long)_orig.nraddr; \ 3160 _argvec[1] = (unsigned long)(arg1); \ 3161 _argvec[2] = (unsigned long)(arg2); \ 3163 VALGRIND_ALIGN_STACK \ 3164 "ldr r0, [%1, #4] \n\t" \ 3165 "ldr r1, [%1, #8] \n\t" \ 3166 "ldr r4, [%1] \n\t" \ 3167 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3168 VALGRIND_RESTORE_STACK \ 3171 : "0" (&_argvec[0]) \ 3172 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3174 lval = (__typeof__(lval)) _res; \ 3177 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 3179 volatile OrigFn _orig = (orig); \ 3180 volatile unsigned long _argvec[4]; \ 3181 volatile unsigned long _res; \ 3182 _argvec[0] = (unsigned long)_orig.nraddr; \ 3183 _argvec[1] = (unsigned long)(arg1); \ 3184 _argvec[2] = (unsigned long)(arg2); \ 3185 _argvec[3] = (unsigned long)(arg3); \ 3187 VALGRIND_ALIGN_STACK \ 3188 "ldr r0, [%1, #4] \n\t" \ 3189 "ldr r1, [%1, #8] \n\t" \ 3190 "ldr r2, [%1, #12] \n\t" \ 3191 "ldr r4, [%1] \n\t" \ 3192 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3193 VALGRIND_RESTORE_STACK \ 3196 : "0" (&_argvec[0]) \ 3197 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3199 lval = (__typeof__(lval)) _res; \ 3202 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 3204 volatile OrigFn _orig = (orig); \ 3205 volatile unsigned long _argvec[5]; \ 3206 volatile unsigned long _res; \ 3207 _argvec[0] = (unsigned long)_orig.nraddr; \ 3208 _argvec[1] = (unsigned long)(arg1); \ 3209 _argvec[2] = (unsigned long)(arg2); \ 3210 _argvec[3] = (unsigned long)(arg3); \ 3211 _argvec[4] = (unsigned long)(arg4); \ 3213 VALGRIND_ALIGN_STACK \ 3214 "ldr r0, [%1, #4] \n\t" \ 3215 "ldr r1, [%1, #8] \n\t" \ 3216 "ldr r2, [%1, #12] \n\t" \ 3217 "ldr r3, [%1, #16] \n\t" \ 3218 "ldr r4, [%1] \n\t" \ 3219 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3220 VALGRIND_RESTORE_STACK \ 3223 : "0" (&_argvec[0]) \ 3224 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3226 lval = (__typeof__(lval)) _res; \ 3229 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 3231 volatile OrigFn _orig = (orig); \ 3232 volatile unsigned long _argvec[6]; \ 3233 volatile unsigned long _res; \ 3234 _argvec[0] = (unsigned long)_orig.nraddr; \ 3235 _argvec[1] = (unsigned long)(arg1); \ 3236 _argvec[2] = (unsigned long)(arg2); \ 3237 _argvec[3] = (unsigned long)(arg3); \ 3238 _argvec[4] = (unsigned long)(arg4); \ 3239 _argvec[5] = (unsigned long)(arg5); \ 3241 VALGRIND_ALIGN_STACK \ 3242 "sub sp, sp, #4 \n\t" \ 3243 "ldr r0, [%1, #20] \n\t" \ 3245 "ldr r0, [%1, #4] \n\t" \ 3246 "ldr r1, [%1, #8] \n\t" \ 3247 "ldr r2, [%1, #12] \n\t" \ 3248 "ldr r3, [%1, #16] \n\t" \ 3249 "ldr r4, [%1] \n\t" \ 3250 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3251 VALGRIND_RESTORE_STACK \ 3254 : "0" (&_argvec[0]) \ 3255 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3257 lval = (__typeof__(lval)) _res; \ 3260 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 3262 volatile OrigFn _orig = (orig); \ 3263 volatile unsigned long _argvec[7]; \ 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); \ 3273 VALGRIND_ALIGN_STACK \ 3274 "ldr r0, [%1, #20] \n\t" \ 3275 "ldr r1, [%1, #24] \n\t" \ 3276 "push {r0, r1} \n\t" \ 3277 "ldr r0, [%1, #4] \n\t" \ 3278 "ldr r1, [%1, #8] \n\t" \ 3279 "ldr r2, [%1, #12] \n\t" \ 3280 "ldr r3, [%1, #16] \n\t" \ 3281 "ldr r4, [%1] \n\t" \ 3282 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3283 VALGRIND_RESTORE_STACK \ 3286 : "0" (&_argvec[0]) \ 3287 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3289 lval = (__typeof__(lval)) _res; \ 3292 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3295 volatile OrigFn _orig = (orig); \ 3296 volatile unsigned long _argvec[8]; \ 3297 volatile unsigned long _res; \ 3298 _argvec[0] = (unsigned long)_orig.nraddr; \ 3299 _argvec[1] = (unsigned long)(arg1); \ 3300 _argvec[2] = (unsigned long)(arg2); \ 3301 _argvec[3] = (unsigned long)(arg3); \ 3302 _argvec[4] = (unsigned long)(arg4); \ 3303 _argvec[5] = (unsigned long)(arg5); \ 3304 _argvec[6] = (unsigned long)(arg6); \ 3305 _argvec[7] = (unsigned long)(arg7); \ 3307 VALGRIND_ALIGN_STACK \ 3308 "sub sp, sp, #4 \n\t" \ 3309 "ldr r0, [%1, #20] \n\t" \ 3310 "ldr r1, [%1, #24] \n\t" \ 3311 "ldr r2, [%1, #28] \n\t" \ 3312 "push {r0, r1, r2} \n\t" \ 3313 "ldr r0, [%1, #4] \n\t" \ 3314 "ldr r1, [%1, #8] \n\t" \ 3315 "ldr r2, [%1, #12] \n\t" \ 3316 "ldr r3, [%1, #16] \n\t" \ 3317 "ldr r4, [%1] \n\t" \ 3318 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3319 VALGRIND_RESTORE_STACK \ 3322 : "0" (&_argvec[0]) \ 3323 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3325 lval = (__typeof__(lval)) _res; \ 3328 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3331 volatile OrigFn _orig = (orig); \ 3332 volatile unsigned long _argvec[9]; \ 3333 volatile unsigned long _res; \ 3334 _argvec[0] = (unsigned long)_orig.nraddr; \ 3335 _argvec[1] = (unsigned long)(arg1); \ 3336 _argvec[2] = (unsigned long)(arg2); \ 3337 _argvec[3] = (unsigned long)(arg3); \ 3338 _argvec[4] = (unsigned long)(arg4); \ 3339 _argvec[5] = (unsigned long)(arg5); \ 3340 _argvec[6] = (unsigned long)(arg6); \ 3341 _argvec[7] = (unsigned long)(arg7); \ 3342 _argvec[8] = (unsigned long)(arg8); \ 3344 VALGRIND_ALIGN_STACK \ 3345 "ldr r0, [%1, #20] \n\t" \ 3346 "ldr r1, [%1, #24] \n\t" \ 3347 "ldr r2, [%1, #28] \n\t" \ 3348 "ldr r3, [%1, #32] \n\t" \ 3349 "push {r0, r1, r2, r3} \n\t" \ 3350 "ldr r0, [%1, #4] \n\t" \ 3351 "ldr r1, [%1, #8] \n\t" \ 3352 "ldr r2, [%1, #12] \n\t" \ 3353 "ldr r3, [%1, #16] \n\t" \ 3354 "ldr r4, [%1] \n\t" \ 3355 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3356 VALGRIND_RESTORE_STACK \ 3359 : "0" (&_argvec[0]) \ 3360 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3362 lval = (__typeof__(lval)) _res; \ 3365 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3368 volatile OrigFn _orig = (orig); \ 3369 volatile unsigned long _argvec[10]; \ 3370 volatile unsigned long _res; \ 3371 _argvec[0] = (unsigned long)_orig.nraddr; \ 3372 _argvec[1] = (unsigned long)(arg1); \ 3373 _argvec[2] = (unsigned long)(arg2); \ 3374 _argvec[3] = (unsigned long)(arg3); \ 3375 _argvec[4] = (unsigned long)(arg4); \ 3376 _argvec[5] = (unsigned long)(arg5); \ 3377 _argvec[6] = (unsigned long)(arg6); \ 3378 _argvec[7] = (unsigned long)(arg7); \ 3379 _argvec[8] = (unsigned long)(arg8); \ 3380 _argvec[9] = (unsigned long)(arg9); \ 3382 VALGRIND_ALIGN_STACK \ 3383 "sub sp, sp, #4 \n\t" \ 3384 "ldr r0, [%1, #20] \n\t" \ 3385 "ldr r1, [%1, #24] \n\t" \ 3386 "ldr r2, [%1, #28] \n\t" \ 3387 "ldr r3, [%1, #32] \n\t" \ 3388 "ldr r4, [%1, #36] \n\t" \ 3389 "push {r0, r1, r2, r3, r4} \n\t" \ 3390 "ldr r0, [%1, #4] \n\t" \ 3391 "ldr r1, [%1, #8] \n\t" \ 3392 "ldr r2, [%1, #12] \n\t" \ 3393 "ldr r3, [%1, #16] \n\t" \ 3394 "ldr r4, [%1] \n\t" \ 3395 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3396 VALGRIND_RESTORE_STACK \ 3399 : "0" (&_argvec[0]) \ 3400 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3402 lval = (__typeof__(lval)) _res; \ 3405 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 3406 arg7,arg8,arg9,arg10) \ 3408 volatile OrigFn _orig = (orig); \ 3409 volatile unsigned long _argvec[11]; \ 3410 volatile unsigned long _res; \ 3411 _argvec[0] = (unsigned long)_orig.nraddr; \ 3412 _argvec[1] = (unsigned long)(arg1); \ 3413 _argvec[2] = (unsigned long)(arg2); \ 3414 _argvec[3] = (unsigned long)(arg3); \ 3415 _argvec[4] = (unsigned long)(arg4); \ 3416 _argvec[5] = (unsigned long)(arg5); \ 3417 _argvec[6] = (unsigned long)(arg6); \ 3418 _argvec[7] = (unsigned long)(arg7); \ 3419 _argvec[8] = (unsigned long)(arg8); \ 3420 _argvec[9] = (unsigned long)(arg9); \ 3421 _argvec[10] = (unsigned long)(arg10); \ 3423 VALGRIND_ALIGN_STACK \ 3424 "ldr r0, [%1, #40] \n\t" \ 3426 "ldr r0, [%1, #20] \n\t" \ 3427 "ldr r1, [%1, #24] \n\t" \ 3428 "ldr r2, [%1, #28] \n\t" \ 3429 "ldr r3, [%1, #32] \n\t" \ 3430 "ldr r4, [%1, #36] \n\t" \ 3431 "push {r0, r1, r2, r3, r4} \n\t" \ 3432 "ldr r0, [%1, #4] \n\t" \ 3433 "ldr r1, [%1, #8] \n\t" \ 3434 "ldr r2, [%1, #12] \n\t" \ 3435 "ldr r3, [%1, #16] \n\t" \ 3436 "ldr r4, [%1] \n\t" \ 3437 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3438 VALGRIND_RESTORE_STACK \ 3441 : "0" (&_argvec[0]) \ 3442 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3444 lval = (__typeof__(lval)) _res; \ 3447 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 3448 arg6,arg7,arg8,arg9,arg10, \ 3451 volatile OrigFn _orig = (orig); \ 3452 volatile unsigned long _argvec[12]; \ 3453 volatile unsigned long _res; \ 3454 _argvec[0] = (unsigned long)_orig.nraddr; \ 3455 _argvec[1] = (unsigned long)(arg1); \ 3456 _argvec[2] = (unsigned long)(arg2); \ 3457 _argvec[3] = (unsigned long)(arg3); \ 3458 _argvec[4] = (unsigned long)(arg4); \ 3459 _argvec[5] = (unsigned long)(arg5); \ 3460 _argvec[6] = (unsigned long)(arg6); \ 3461 _argvec[7] = (unsigned long)(arg7); \ 3462 _argvec[8] = (unsigned long)(arg8); \ 3463 _argvec[9] = (unsigned long)(arg9); \ 3464 _argvec[10] = (unsigned long)(arg10); \ 3465 _argvec[11] = (unsigned long)(arg11); \ 3467 VALGRIND_ALIGN_STACK \ 3468 "sub sp, sp, #4 \n\t" \ 3469 "ldr r0, [%1, #40] \n\t" \ 3470 "ldr r1, [%1, #44] \n\t" \ 3471 "push {r0, r1} \n\t" \ 3472 "ldr r0, [%1, #20] \n\t" \ 3473 "ldr r1, [%1, #24] \n\t" \ 3474 "ldr r2, [%1, #28] \n\t" \ 3475 "ldr r3, [%1, #32] \n\t" \ 3476 "ldr r4, [%1, #36] \n\t" \ 3477 "push {r0, r1, r2, r3, r4} \n\t" \ 3478 "ldr r0, [%1, #4] \n\t" \ 3479 "ldr r1, [%1, #8] \n\t" \ 3480 "ldr r2, [%1, #12] \n\t" \ 3481 "ldr r3, [%1, #16] \n\t" \ 3482 "ldr r4, [%1] \n\t" \ 3483 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3484 VALGRIND_RESTORE_STACK \ 3487 : "0" (&_argvec[0]) \ 3488 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3490 lval = (__typeof__(lval)) _res; \ 3493 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 3494 arg6,arg7,arg8,arg9,arg10, \ 3497 volatile OrigFn _orig = (orig); \ 3498 volatile unsigned long _argvec[13]; \ 3499 volatile unsigned long _res; \ 3500 _argvec[0] = (unsigned long)_orig.nraddr; \ 3501 _argvec[1] = (unsigned long)(arg1); \ 3502 _argvec[2] = (unsigned long)(arg2); \ 3503 _argvec[3] = (unsigned long)(arg3); \ 3504 _argvec[4] = (unsigned long)(arg4); \ 3505 _argvec[5] = (unsigned long)(arg5); \ 3506 _argvec[6] = (unsigned long)(arg6); \ 3507 _argvec[7] = (unsigned long)(arg7); \ 3508 _argvec[8] = (unsigned long)(arg8); \ 3509 _argvec[9] = (unsigned long)(arg9); \ 3510 _argvec[10] = (unsigned long)(arg10); \ 3511 _argvec[11] = (unsigned long)(arg11); \ 3512 _argvec[12] = (unsigned long)(arg12); \ 3514 VALGRIND_ALIGN_STACK \ 3515 "ldr r0, [%1, #40] \n\t" \ 3516 "ldr r1, [%1, #44] \n\t" \ 3517 "ldr r2, [%1, #48] \n\t" \ 3518 "push {r0, r1, r2} \n\t" \ 3519 "ldr r0, [%1, #20] \n\t" \ 3520 "ldr r1, [%1, #24] \n\t" \ 3521 "ldr r2, [%1, #28] \n\t" \ 3522 "ldr r3, [%1, #32] \n\t" \ 3523 "ldr r4, [%1, #36] \n\t" \ 3524 "push {r0, r1, r2, r3, r4} \n\t" \ 3525 "ldr r0, [%1, #4] \n\t" \ 3526 "ldr r1, [%1, #8] \n\t" \ 3527 "ldr r2, [%1, #12] \n\t" \ 3528 "ldr r3, [%1, #16] \n\t" \ 3529 "ldr r4, [%1] \n\t" \ 3530 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ 3531 VALGRIND_RESTORE_STACK \ 3534 : "0" (&_argvec[0]) \ 3535 : "cc", "memory", __CALLER_SAVED_REGS, "r10" \ 3537 lval = (__typeof__(lval)) _res; \ 3544 #if defined(PLAT_arm64_linux) 3547 #define __CALLER_SAVED_REGS \ 3548 "x0", "x1", "x2", "x3","x4", "x5", "x6", "x7", "x8", "x9", \ 3549 "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", \ 3550 "x18", "x19", "x20", "x30", \ 3551 "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", \ 3552 "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", \ 3553 "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", \ 3554 "v26", "v27", "v28", "v29", "v30", "v31" 3558 #define VALGRIND_ALIGN_STACK \ 3560 "bic sp, x21, #15\n\t" 3561 #define VALGRIND_RESTORE_STACK \ 3567 #define CALL_FN_W_v(lval, orig) \ 3569 volatile OrigFn _orig = (orig); \ 3570 volatile unsigned long _argvec[1]; \ 3571 volatile unsigned long _res; \ 3572 _argvec[0] = (unsigned long)_orig.nraddr; \ 3574 VALGRIND_ALIGN_STACK \ 3575 "ldr x8, [%1] \n\t" \ 3576 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 3577 VALGRIND_RESTORE_STACK \ 3580 : "0" (&_argvec[0]) \ 3581 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 3583 lval = (__typeof__(lval)) _res; \ 3586 #define CALL_FN_W_W(lval, orig, arg1) \ 3588 volatile OrigFn _orig = (orig); \ 3589 volatile unsigned long _argvec[2]; \ 3590 volatile unsigned long _res; \ 3591 _argvec[0] = (unsigned long)_orig.nraddr; \ 3592 _argvec[1] = (unsigned long)(arg1); \ 3594 VALGRIND_ALIGN_STACK \ 3595 "ldr x0, [%1, #8] \n\t" \ 3596 "ldr x8, [%1] \n\t" \ 3597 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 3598 VALGRIND_RESTORE_STACK \ 3601 : "0" (&_argvec[0]) \ 3602 : "cc", "memory", __CALLER_SAVED_REGS, "x21" \ 3604 lval = (__typeof__(lval)) _res; \ 3607 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 3609 volatile OrigFn _orig = (orig); \ 3610 volatile unsigned long _argvec[3]; \ 3611 volatile unsigned long _res; \ 3612 _argvec[0] = (unsigned long)_orig.nraddr; \ 3613 _argvec[1] = (unsigned long)(arg1); \ 3614 _argvec[2] = (unsigned long)(arg2); \ 3616 VALGRIND_ALIGN_STACK \ 3617 "ldr x0, [%1, #8] \n\t" \ 3618 "ldr x1, [%1, #16] \n\t" \ 3619 "ldr x8, [%1] \n\t" \ 3620 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 3621 VALGRIND_RESTORE_STACK \ 3624 : "0" (&_argvec[0]) \ 3625 : "cc", "memory", __CALLER_SAVED_REGS \ 3627 lval = (__typeof__(lval)) _res; \ 3630 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 3632 volatile OrigFn _orig = (orig); \ 3633 volatile unsigned long _argvec[4]; \ 3634 volatile unsigned long _res; \ 3635 _argvec[0] = (unsigned long)_orig.nraddr; \ 3636 _argvec[1] = (unsigned long)(arg1); \ 3637 _argvec[2] = (unsigned long)(arg2); \ 3638 _argvec[3] = (unsigned long)(arg3); \ 3640 VALGRIND_ALIGN_STACK \ 3641 "ldr x0, [%1, #8] \n\t" \ 3642 "ldr x1, [%1, #16] \n\t" \ 3643 "ldr x2, [%1, #24] \n\t" \ 3644 "ldr x8, [%1] \n\t" \ 3645 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 3646 VALGRIND_RESTORE_STACK \ 3649 : "0" (&_argvec[0]) \ 3650 : "cc", "memory", __CALLER_SAVED_REGS \ 3652 lval = (__typeof__(lval)) _res; \ 3655 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 3657 volatile OrigFn _orig = (orig); \ 3658 volatile unsigned long _argvec[5]; \ 3659 volatile unsigned long _res; \ 3660 _argvec[0] = (unsigned long)_orig.nraddr; \ 3661 _argvec[1] = (unsigned long)(arg1); \ 3662 _argvec[2] = (unsigned long)(arg2); \ 3663 _argvec[3] = (unsigned long)(arg3); \ 3664 _argvec[4] = (unsigned long)(arg4); \ 3666 VALGRIND_ALIGN_STACK \ 3667 "ldr x0, [%1, #8] \n\t" \ 3668 "ldr x1, [%1, #16] \n\t" \ 3669 "ldr x2, [%1, #24] \n\t" \ 3670 "ldr x3, [%1, #32] \n\t" \ 3671 "ldr x8, [%1] \n\t" \ 3672 VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ 3673 VALGRIND_RESTORE_STACK \ 3676 : "0" (&_argvec[0]) \ 3677 : "cc", "memory", __CALLER_SAVED_REGS \ 3679 lval = (__typeof__(lval)) _res; \ 3686 #if defined(PLAT_s390x_linux) 3692 #if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM) 3693 # define __FRAME_POINTER \ 3694 ,"d"(__builtin_dwarf_cfa()) 3695 # define VALGRIND_CFI_PROLOGUE \ 3696 ".cfi_remember_state\n\t" \ 3700 ".cfi_def_cfa r11, 0\n\t" 3701 # define VALGRIND_CFI_EPILOGUE \ 3703 ".cfi_restore_state\n\t" 3705 # define __FRAME_POINTER 3706 # define VALGRIND_CFI_PROLOGUE \ 3708 # define VALGRIND_CFI_EPILOGUE 3720 #define __CALLER_SAVED_REGS "0","1","2","3","4","5","14", \ 3721 "f0","f1","f2","f3","f4","f5","f6","f7" 3732 #define CALL_FN_W_v(lval, orig) \ 3734 volatile OrigFn _orig = (orig); \ 3735 volatile unsigned long _argvec[1]; \ 3736 volatile unsigned long _res; \ 3737 _argvec[0] = (unsigned long)_orig.nraddr; \ 3739 VALGRIND_CFI_PROLOGUE \ 3740 "aghi 15,-160\n\t" \ 3742 VALGRIND_CALL_NOREDIR_R1 \ 3745 VALGRIND_CFI_EPILOGUE \ 3747 : "d" (&_argvec[0]) __FRAME_POINTER \ 3748 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3750 lval = (__typeof__(lval)) _res; \ 3754 #define CALL_FN_W_W(lval, orig, arg1) \ 3756 volatile OrigFn _orig = (orig); \ 3757 volatile unsigned long _argvec[2]; \ 3758 volatile unsigned long _res; \ 3759 _argvec[0] = (unsigned long)_orig.nraddr; \ 3760 _argvec[1] = (unsigned long)arg1; \ 3762 VALGRIND_CFI_PROLOGUE \ 3763 "aghi 15,-160\n\t" \ 3766 VALGRIND_CALL_NOREDIR_R1 \ 3769 VALGRIND_CFI_EPILOGUE \ 3771 : "a" (&_argvec[0]) __FRAME_POINTER \ 3772 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3774 lval = (__typeof__(lval)) _res; \ 3777 #define CALL_FN_W_WW(lval, orig, arg1, arg2) \ 3779 volatile OrigFn _orig = (orig); \ 3780 volatile unsigned long _argvec[3]; \ 3781 volatile unsigned long _res; \ 3782 _argvec[0] = (unsigned long)_orig.nraddr; \ 3783 _argvec[1] = (unsigned long)arg1; \ 3784 _argvec[2] = (unsigned long)arg2; \ 3786 VALGRIND_CFI_PROLOGUE \ 3787 "aghi 15,-160\n\t" \ 3791 VALGRIND_CALL_NOREDIR_R1 \ 3794 VALGRIND_CFI_EPILOGUE \ 3796 : "a" (&_argvec[0]) __FRAME_POINTER \ 3797 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3799 lval = (__typeof__(lval)) _res; \ 3802 #define CALL_FN_W_WWW(lval, orig, arg1, arg2, arg3) \ 3804 volatile OrigFn _orig = (orig); \ 3805 volatile unsigned long _argvec[4]; \ 3806 volatile unsigned long _res; \ 3807 _argvec[0] = (unsigned long)_orig.nraddr; \ 3808 _argvec[1] = (unsigned long)arg1; \ 3809 _argvec[2] = (unsigned long)arg2; \ 3810 _argvec[3] = (unsigned long)arg3; \ 3812 VALGRIND_CFI_PROLOGUE \ 3813 "aghi 15,-160\n\t" \ 3818 VALGRIND_CALL_NOREDIR_R1 \ 3821 VALGRIND_CFI_EPILOGUE \ 3823 : "a" (&_argvec[0]) __FRAME_POINTER \ 3824 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3826 lval = (__typeof__(lval)) _res; \ 3829 #define CALL_FN_W_WWWW(lval, orig, arg1, arg2, arg3, arg4) \ 3831 volatile OrigFn _orig = (orig); \ 3832 volatile unsigned long _argvec[5]; \ 3833 volatile unsigned long _res; \ 3834 _argvec[0] = (unsigned long)_orig.nraddr; \ 3835 _argvec[1] = (unsigned long)arg1; \ 3836 _argvec[2] = (unsigned long)arg2; \ 3837 _argvec[3] = (unsigned long)arg3; \ 3838 _argvec[4] = (unsigned long)arg4; \ 3840 VALGRIND_CFI_PROLOGUE \ 3841 "aghi 15,-160\n\t" \ 3847 VALGRIND_CALL_NOREDIR_R1 \ 3850 VALGRIND_CFI_EPILOGUE \ 3852 : "a" (&_argvec[0]) __FRAME_POINTER \ 3853 : "cc", "memory", __CALLER_SAVED_REGS,"7" \ 3855 lval = (__typeof__(lval)) _res; \ 3858 #define CALL_FN_W_5W(lval, orig, arg1, arg2, arg3, arg4, arg5) \ 3860 volatile OrigFn _orig = (orig); \ 3861 volatile unsigned long _argvec[6]; \ 3862 volatile unsigned long _res; \ 3863 _argvec[0] = (unsigned long)_orig.nraddr; \ 3864 _argvec[1] = (unsigned long)arg1; \ 3865 _argvec[2] = (unsigned long)arg2; \ 3866 _argvec[3] = (unsigned long)arg3; \ 3867 _argvec[4] = (unsigned long)arg4; \ 3868 _argvec[5] = (unsigned long)arg5; \ 3870 VALGRIND_CFI_PROLOGUE \ 3871 "aghi 15,-160\n\t" \ 3878 VALGRIND_CALL_NOREDIR_R1 \ 3881 VALGRIND_CFI_EPILOGUE \ 3883 : "a" (&_argvec[0]) __FRAME_POINTER \ 3884 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3886 lval = (__typeof__(lval)) _res; \ 3889 #define CALL_FN_W_6W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3892 volatile OrigFn _orig = (orig); \ 3893 volatile unsigned long _argvec[7]; \ 3894 volatile unsigned long _res; \ 3895 _argvec[0] = (unsigned long)_orig.nraddr; \ 3896 _argvec[1] = (unsigned long)arg1; \ 3897 _argvec[2] = (unsigned long)arg2; \ 3898 _argvec[3] = (unsigned long)arg3; \ 3899 _argvec[4] = (unsigned long)arg4; \ 3900 _argvec[5] = (unsigned long)arg5; \ 3901 _argvec[6] = (unsigned long)arg6; \ 3903 VALGRIND_CFI_PROLOGUE \ 3904 "aghi 15,-168\n\t" \ 3910 "mvc 160(8,15), 48(1)\n\t" \ 3912 VALGRIND_CALL_NOREDIR_R1 \ 3915 VALGRIND_CFI_EPILOGUE \ 3917 : "a" (&_argvec[0]) __FRAME_POINTER \ 3918 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3920 lval = (__typeof__(lval)) _res; \ 3923 #define CALL_FN_W_7W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3926 volatile OrigFn _orig = (orig); \ 3927 volatile unsigned long _argvec[8]; \ 3928 volatile unsigned long _res; \ 3929 _argvec[0] = (unsigned long)_orig.nraddr; \ 3930 _argvec[1] = (unsigned long)arg1; \ 3931 _argvec[2] = (unsigned long)arg2; \ 3932 _argvec[3] = (unsigned long)arg3; \ 3933 _argvec[4] = (unsigned long)arg4; \ 3934 _argvec[5] = (unsigned long)arg5; \ 3935 _argvec[6] = (unsigned long)arg6; \ 3936 _argvec[7] = (unsigned long)arg7; \ 3938 VALGRIND_CFI_PROLOGUE \ 3939 "aghi 15,-176\n\t" \ 3945 "mvc 160(8,15), 48(1)\n\t" \ 3946 "mvc 168(8,15), 56(1)\n\t" \ 3948 VALGRIND_CALL_NOREDIR_R1 \ 3951 VALGRIND_CFI_EPILOGUE \ 3953 : "a" (&_argvec[0]) __FRAME_POINTER \ 3954 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3956 lval = (__typeof__(lval)) _res; \ 3959 #define CALL_FN_W_8W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3962 volatile OrigFn _orig = (orig); \ 3963 volatile unsigned long _argvec[9]; \ 3964 volatile unsigned long _res; \ 3965 _argvec[0] = (unsigned long)_orig.nraddr; \ 3966 _argvec[1] = (unsigned long)arg1; \ 3967 _argvec[2] = (unsigned long)arg2; \ 3968 _argvec[3] = (unsigned long)arg3; \ 3969 _argvec[4] = (unsigned long)arg4; \ 3970 _argvec[5] = (unsigned long)arg5; \ 3971 _argvec[6] = (unsigned long)arg6; \ 3972 _argvec[7] = (unsigned long)arg7; \ 3973 _argvec[8] = (unsigned long)arg8; \ 3975 VALGRIND_CFI_PROLOGUE \ 3976 "aghi 15,-184\n\t" \ 3982 "mvc 160(8,15), 48(1)\n\t" \ 3983 "mvc 168(8,15), 56(1)\n\t" \ 3984 "mvc 176(8,15), 64(1)\n\t" \ 3986 VALGRIND_CALL_NOREDIR_R1 \ 3989 VALGRIND_CFI_EPILOGUE \ 3991 : "a" (&_argvec[0]) __FRAME_POINTER \ 3992 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 3994 lval = (__typeof__(lval)) _res; \ 3997 #define CALL_FN_W_9W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 3998 arg6, arg7 ,arg8, arg9) \ 4000 volatile OrigFn _orig = (orig); \ 4001 volatile unsigned long _argvec[10]; \ 4002 volatile unsigned long _res; \ 4003 _argvec[0] = (unsigned long)_orig.nraddr; \ 4004 _argvec[1] = (unsigned long)arg1; \ 4005 _argvec[2] = (unsigned long)arg2; \ 4006 _argvec[3] = (unsigned long)arg3; \ 4007 _argvec[4] = (unsigned long)arg4; \ 4008 _argvec[5] = (unsigned long)arg5; \ 4009 _argvec[6] = (unsigned long)arg6; \ 4010 _argvec[7] = (unsigned long)arg7; \ 4011 _argvec[8] = (unsigned long)arg8; \ 4012 _argvec[9] = (unsigned long)arg9; \ 4014 VALGRIND_CFI_PROLOGUE \ 4015 "aghi 15,-192\n\t" \ 4021 "mvc 160(8,15), 48(1)\n\t" \ 4022 "mvc 168(8,15), 56(1)\n\t" \ 4023 "mvc 176(8,15), 64(1)\n\t" \ 4024 "mvc 184(8,15), 72(1)\n\t" \ 4026 VALGRIND_CALL_NOREDIR_R1 \ 4029 VALGRIND_CFI_EPILOGUE \ 4031 : "a" (&_argvec[0]) __FRAME_POINTER \ 4032 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 4034 lval = (__typeof__(lval)) _res; \ 4037 #define CALL_FN_W_10W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 4038 arg6, arg7 ,arg8, arg9, arg10) \ 4040 volatile OrigFn _orig = (orig); \ 4041 volatile unsigned long _argvec[11]; \ 4042 volatile unsigned long _res; \ 4043 _argvec[0] = (unsigned long)_orig.nraddr; \ 4044 _argvec[1] = (unsigned long)arg1; \ 4045 _argvec[2] = (unsigned long)arg2; \ 4046 _argvec[3] = (unsigned long)arg3; \ 4047 _argvec[4] = (unsigned long)arg4; \ 4048 _argvec[5] = (unsigned long)arg5; \ 4049 _argvec[6] = (unsigned long)arg6; \ 4050 _argvec[7] = (unsigned long)arg7; \ 4051 _argvec[8] = (unsigned long)arg8; \ 4052 _argvec[9] = (unsigned long)arg9; \ 4053 _argvec[10] = (unsigned long)arg10; \ 4055 VALGRIND_CFI_PROLOGUE \ 4056 "aghi 15,-200\n\t" \ 4062 "mvc 160(8,15), 48(1)\n\t" \ 4063 "mvc 168(8,15), 56(1)\n\t" \ 4064 "mvc 176(8,15), 64(1)\n\t" \ 4065 "mvc 184(8,15), 72(1)\n\t" \ 4066 "mvc 192(8,15), 80(1)\n\t" \ 4068 VALGRIND_CALL_NOREDIR_R1 \ 4071 VALGRIND_CFI_EPILOGUE \ 4073 : "a" (&_argvec[0]) __FRAME_POINTER \ 4074 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 4076 lval = (__typeof__(lval)) _res; \ 4079 #define CALL_FN_W_11W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 4080 arg6, arg7 ,arg8, arg9, arg10, arg11) \ 4082 volatile OrigFn _orig = (orig); \ 4083 volatile unsigned long _argvec[12]; \ 4084 volatile unsigned long _res; \ 4085 _argvec[0] = (unsigned long)_orig.nraddr; \ 4086 _argvec[1] = (unsigned long)arg1; \ 4087 _argvec[2] = (unsigned long)arg2; \ 4088 _argvec[3] = (unsigned long)arg3; \ 4089 _argvec[4] = (unsigned long)arg4; \ 4090 _argvec[5] = (unsigned long)arg5; \ 4091 _argvec[6] = (unsigned long)arg6; \ 4092 _argvec[7] = (unsigned long)arg7; \ 4093 _argvec[8] = (unsigned long)arg8; \ 4094 _argvec[9] = (unsigned long)arg9; \ 4095 _argvec[10] = (unsigned long)arg10; \ 4096 _argvec[11] = (unsigned long)arg11; \ 4098 VALGRIND_CFI_PROLOGUE \ 4099 "aghi 15,-208\n\t" \ 4105 "mvc 160(8,15), 48(1)\n\t" \ 4106 "mvc 168(8,15), 56(1)\n\t" \ 4107 "mvc 176(8,15), 64(1)\n\t" \ 4108 "mvc 184(8,15), 72(1)\n\t" \ 4109 "mvc 192(8,15), 80(1)\n\t" \ 4110 "mvc 200(8,15), 88(1)\n\t" \ 4112 VALGRIND_CALL_NOREDIR_R1 \ 4115 VALGRIND_CFI_EPILOGUE \ 4117 : "a" (&_argvec[0]) __FRAME_POINTER \ 4118 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 4120 lval = (__typeof__(lval)) _res; \ 4123 #define CALL_FN_W_12W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ 4124 arg6, arg7 ,arg8, arg9, arg10, arg11, arg12)\ 4126 volatile OrigFn _orig = (orig); \ 4127 volatile unsigned long _argvec[13]; \ 4128 volatile unsigned long _res; \ 4129 _argvec[0] = (unsigned long)_orig.nraddr; \ 4130 _argvec[1] = (unsigned long)arg1; \ 4131 _argvec[2] = (unsigned long)arg2; \ 4132 _argvec[3] = (unsigned long)arg3; \ 4133 _argvec[4] = (unsigned long)arg4; \ 4134 _argvec[5] = (unsigned long)arg5; \ 4135 _argvec[6] = (unsigned long)arg6; \ 4136 _argvec[7] = (unsigned long)arg7; \ 4137 _argvec[8] = (unsigned long)arg8; \ 4138 _argvec[9] = (unsigned long)arg9; \ 4139 _argvec[10] = (unsigned long)arg10; \ 4140 _argvec[11] = (unsigned long)arg11; \ 4141 _argvec[12] = (unsigned long)arg12; \ 4143 VALGRIND_CFI_PROLOGUE \ 4144 "aghi 15,-216\n\t" \ 4150 "mvc 160(8,15), 48(1)\n\t" \ 4151 "mvc 168(8,15), 56(1)\n\t" \ 4152 "mvc 176(8,15), 64(1)\n\t" \ 4153 "mvc 184(8,15), 72(1)\n\t" \ 4154 "mvc 192(8,15), 80(1)\n\t" \ 4155 "mvc 200(8,15), 88(1)\n\t" \ 4156 "mvc 208(8,15), 96(1)\n\t" \ 4158 VALGRIND_CALL_NOREDIR_R1 \ 4161 VALGRIND_CFI_EPILOGUE \ 4163 : "a" (&_argvec[0]) __FRAME_POINTER \ 4164 : "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ 4166 lval = (__typeof__(lval)) _res; \ 4174 #if defined(PLAT_mips32_linux) 4177 #define __CALLER_SAVED_REGS "$2", "$3", "$4", "$5", "$6", \ 4178 "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 4184 #define CALL_FN_W_v(lval, orig) \ 4186 volatile OrigFn _orig = (orig); \ 4187 volatile unsigned long _argvec[1]; \ 4188 volatile unsigned long _res; \ 4189 _argvec[0] = (unsigned long)_orig.nraddr; \ 4191 "subu $29, $29, 8 \n\t" \ 4192 "sw $28, 0($29) \n\t" \ 4193 "sw $31, 4($29) \n\t" \ 4194 "subu $29, $29, 16 \n\t" \ 4195 "lw $25, 0(%1) \n\t" \ 4196 VALGRIND_CALL_NOREDIR_T9 \ 4197 "addu $29, $29, 16\n\t" \ 4198 "lw $28, 0($29) \n\t" \ 4199 "lw $31, 4($29) \n\t" \ 4200 "addu $29, $29, 8 \n\t" \ 4203 : "0" (&_argvec[0]) \ 4204 : "memory", __CALLER_SAVED_REGS \ 4206 lval = (__typeof__(lval)) _res; \ 4209 #define CALL_FN_W_W(lval, orig, arg1) \ 4211 volatile OrigFn _orig = (orig); \ 4212 volatile unsigned long _argvec[2]; \ 4213 volatile unsigned long _res; \ 4214 _argvec[0] = (unsigned long)_orig.nraddr; \ 4215 _argvec[1] = (unsigned long)(arg1); \ 4217 "subu $29, $29, 8 \n\t" \ 4218 "sw $28, 0($29) \n\t" \ 4219 "sw $31, 4($29) \n\t" \ 4220 "subu $29, $29, 16 \n\t" \ 4221 "lw $4, 4(%1) \n\t" \ 4222 "lw $25, 0(%1) \n\t" \ 4223 VALGRIND_CALL_NOREDIR_T9 \ 4224 "addu $29, $29, 16 \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_WW(lval, orig, arg1,arg2) \ 4238 volatile OrigFn _orig = (orig); \ 4239 volatile unsigned long _argvec[3]; \ 4240 volatile unsigned long _res; \ 4241 _argvec[0] = (unsigned long)_orig.nraddr; \ 4242 _argvec[1] = (unsigned long)(arg1); \ 4243 _argvec[2] = (unsigned long)(arg2); \ 4245 "subu $29, $29, 8 \n\t" \ 4246 "sw $28, 0($29) \n\t" \ 4247 "sw $31, 4($29) \n\t" \ 4248 "subu $29, $29, 16 \n\t" \ 4249 "lw $4, 4(%1) \n\t" \ 4250 "lw $5, 8(%1) \n\t" \ 4251 "lw $25, 0(%1) \n\t" \ 4252 VALGRIND_CALL_NOREDIR_T9 \ 4253 "addu $29, $29, 16 \n\t" \ 4254 "lw $28, 0($29) \n\t" \ 4255 "lw $31, 4($29) \n\t" \ 4256 "addu $29, $29, 8 \n\t" \ 4259 : "0" (&_argvec[0]) \ 4260 : "memory", __CALLER_SAVED_REGS \ 4262 lval = (__typeof__(lval)) _res; \ 4265 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 4267 volatile OrigFn _orig = (orig); \ 4268 volatile unsigned long _argvec[4]; \ 4269 volatile unsigned long _res; \ 4270 _argvec[0] = (unsigned long)_orig.nraddr; \ 4271 _argvec[1] = (unsigned long)(arg1); \ 4272 _argvec[2] = (unsigned long)(arg2); \ 4273 _argvec[3] = (unsigned long)(arg3); \ 4275 "subu $29, $29, 8 \n\t" \ 4276 "sw $28, 0($29) \n\t" \ 4277 "sw $31, 4($29) \n\t" \ 4278 "subu $29, $29, 16 \n\t" \ 4279 "lw $4, 4(%1) \n\t" \ 4280 "lw $5, 8(%1) \n\t" \ 4281 "lw $6, 12(%1) \n\t" \ 4282 "lw $25, 0(%1) \n\t" \ 4283 VALGRIND_CALL_NOREDIR_T9 \ 4284 "addu $29, $29, 16 \n\t" \ 4285 "lw $28, 0($29) \n\t" \ 4286 "lw $31, 4($29) \n\t" \ 4287 "addu $29, $29, 8 \n\t" \ 4290 : "0" (&_argvec[0]) \ 4291 : "memory", __CALLER_SAVED_REGS \ 4293 lval = (__typeof__(lval)) _res; \ 4296 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 4298 volatile OrigFn _orig = (orig); \ 4299 volatile unsigned long _argvec[5]; \ 4300 volatile unsigned long _res; \ 4301 _argvec[0] = (unsigned long)_orig.nraddr; \ 4302 _argvec[1] = (unsigned long)(arg1); \ 4303 _argvec[2] = (unsigned long)(arg2); \ 4304 _argvec[3] = (unsigned long)(arg3); \ 4305 _argvec[4] = (unsigned long)(arg4); \ 4307 "subu $29, $29, 8 \n\t" \ 4308 "sw $28, 0($29) \n\t" \ 4309 "sw $31, 4($29) \n\t" \ 4310 "subu $29, $29, 16 \n\t" \ 4311 "lw $4, 4(%1) \n\t" \ 4312 "lw $5, 8(%1) \n\t" \ 4313 "lw $6, 12(%1) \n\t" \ 4314 "lw $7, 16(%1) \n\t" \ 4315 "lw $25, 0(%1) \n\t" \ 4316 VALGRIND_CALL_NOREDIR_T9 \ 4317 "addu $29, $29, 16 \n\t" \ 4318 "lw $28, 0($29) \n\t" \ 4319 "lw $31, 4($29) \n\t" \ 4320 "addu $29, $29, 8 \n\t" \ 4323 : "0" (&_argvec[0]) \ 4324 : "memory", __CALLER_SAVED_REGS \ 4326 lval = (__typeof__(lval)) _res; \ 4329 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 4331 volatile OrigFn _orig = (orig); \ 4332 volatile unsigned long _argvec[6]; \ 4333 volatile unsigned long _res; \ 4334 _argvec[0] = (unsigned long)_orig.nraddr; \ 4335 _argvec[1] = (unsigned long)(arg1); \ 4336 _argvec[2] = (unsigned long)(arg2); \ 4337 _argvec[3] = (unsigned long)(arg3); \ 4338 _argvec[4] = (unsigned long)(arg4); \ 4339 _argvec[5] = (unsigned long)(arg5); \ 4341 "subu $29, $29, 8 \n\t" \ 4342 "sw $28, 0($29) \n\t" \ 4343 "sw $31, 4($29) \n\t" \ 4344 "lw $4, 20(%1) \n\t" \ 4345 "subu $29, $29, 24\n\t" \ 4346 "sw $4, 16($29) \n\t" \ 4347 "lw $4, 4(%1) \n\t" \ 4348 "lw $5, 8(%1) \n\t" \ 4349 "lw $6, 12(%1) \n\t" \ 4350 "lw $7, 16(%1) \n\t" \ 4351 "lw $25, 0(%1) \n\t" \ 4352 VALGRIND_CALL_NOREDIR_T9 \ 4353 "addu $29, $29, 24 \n\t" \ 4354 "lw $28, 0($29) \n\t" \ 4355 "lw $31, 4($29) \n\t" \ 4356 "addu $29, $29, 8 \n\t" \ 4359 : "0" (&_argvec[0]) \ 4360 : "memory", __CALLER_SAVED_REGS \ 4362 lval = (__typeof__(lval)) _res; \ 4364 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 4366 volatile OrigFn _orig = (orig); \ 4367 volatile unsigned long _argvec[7]; \ 4368 volatile unsigned long _res; \ 4369 _argvec[0] = (unsigned long)_orig.nraddr; \ 4370 _argvec[1] = (unsigned long)(arg1); \ 4371 _argvec[2] = (unsigned long)(arg2); \ 4372 _argvec[3] = (unsigned long)(arg3); \ 4373 _argvec[4] = (unsigned long)(arg4); \ 4374 _argvec[5] = (unsigned long)(arg5); \ 4375 _argvec[6] = (unsigned long)(arg6); \ 4377 "subu $29, $29, 8 \n\t" \ 4378 "sw $28, 0($29) \n\t" \ 4379 "sw $31, 4($29) \n\t" \ 4380 "lw $4, 20(%1) \n\t" \ 4381 "subu $29, $29, 32\n\t" \ 4382 "sw $4, 16($29) \n\t" \ 4383 "lw $4, 24(%1) \n\t" \ 4385 "sw $4, 20($29) \n\t" \ 4386 "lw $4, 4(%1) \n\t" \ 4387 "lw $5, 8(%1) \n\t" \ 4388 "lw $6, 12(%1) \n\t" \ 4389 "lw $7, 16(%1) \n\t" \ 4390 "lw $25, 0(%1) \n\t" \ 4391 VALGRIND_CALL_NOREDIR_T9 \ 4392 "addu $29, $29, 32 \n\t" \ 4393 "lw $28, 0($29) \n\t" \ 4394 "lw $31, 4($29) \n\t" \ 4395 "addu $29, $29, 8 \n\t" \ 4398 : "0" (&_argvec[0]) \ 4399 : "memory", __CALLER_SAVED_REGS \ 4401 lval = (__typeof__(lval)) _res; \ 4404 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4407 volatile OrigFn _orig = (orig); \ 4408 volatile unsigned long _argvec[8]; \ 4409 volatile unsigned long _res; \ 4410 _argvec[0] = (unsigned long)_orig.nraddr; \ 4411 _argvec[1] = (unsigned long)(arg1); \ 4412 _argvec[2] = (unsigned long)(arg2); \ 4413 _argvec[3] = (unsigned long)(arg3); \ 4414 _argvec[4] = (unsigned long)(arg4); \ 4415 _argvec[5] = (unsigned long)(arg5); \ 4416 _argvec[6] = (unsigned long)(arg6); \ 4417 _argvec[7] = (unsigned long)(arg7); \ 4419 "subu $29, $29, 8 \n\t" \ 4420 "sw $28, 0($29) \n\t" \ 4421 "sw $31, 4($29) \n\t" \ 4422 "lw $4, 20(%1) \n\t" \ 4423 "subu $29, $29, 32\n\t" \ 4424 "sw $4, 16($29) \n\t" \ 4425 "lw $4, 24(%1) \n\t" \ 4426 "sw $4, 20($29) \n\t" \ 4427 "lw $4, 28(%1) \n\t" \ 4428 "sw $4, 24($29) \n\t" \ 4429 "lw $4, 4(%1) \n\t" \ 4430 "lw $5, 8(%1) \n\t" \ 4431 "lw $6, 12(%1) \n\t" \ 4432 "lw $7, 16(%1) \n\t" \ 4433 "lw $25, 0(%1) \n\t" \ 4434 VALGRIND_CALL_NOREDIR_T9 \ 4435 "addu $29, $29, 32 \n\t" \ 4436 "lw $28, 0($29) \n\t" \ 4437 "lw $31, 4($29) \n\t" \ 4438 "addu $29, $29, 8 \n\t" \ 4441 : "0" (&_argvec[0]) \ 4442 : "memory", __CALLER_SAVED_REGS \ 4444 lval = (__typeof__(lval)) _res; \ 4447 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4450 volatile OrigFn _orig = (orig); \ 4451 volatile unsigned long _argvec[9]; \ 4452 volatile unsigned long _res; \ 4453 _argvec[0] = (unsigned long)_orig.nraddr; \ 4454 _argvec[1] = (unsigned long)(arg1); \ 4455 _argvec[2] = (unsigned long)(arg2); \ 4456 _argvec[3] = (unsigned long)(arg3); \ 4457 _argvec[4] = (unsigned long)(arg4); \ 4458 _argvec[5] = (unsigned long)(arg5); \ 4459 _argvec[6] = (unsigned long)(arg6); \ 4460 _argvec[7] = (unsigned long)(arg7); \ 4461 _argvec[8] = (unsigned long)(arg8); \ 4463 "subu $29, $29, 8 \n\t" \ 4464 "sw $28, 0($29) \n\t" \ 4465 "sw $31, 4($29) \n\t" \ 4466 "lw $4, 20(%1) \n\t" \ 4467 "subu $29, $29, 40\n\t" \ 4468 "sw $4, 16($29) \n\t" \ 4469 "lw $4, 24(%1) \n\t" \ 4470 "sw $4, 20($29) \n\t" \ 4471 "lw $4, 28(%1) \n\t" \ 4472 "sw $4, 24($29) \n\t" \ 4473 "lw $4, 32(%1) \n\t" \ 4474 "sw $4, 28($29) \n\t" \ 4475 "lw $4, 4(%1) \n\t" \ 4476 "lw $5, 8(%1) \n\t" \ 4477 "lw $6, 12(%1) \n\t" \ 4478 "lw $7, 16(%1) \n\t" \ 4479 "lw $25, 0(%1) \n\t" \ 4480 VALGRIND_CALL_NOREDIR_T9 \ 4481 "addu $29, $29, 40 \n\t" \ 4482 "lw $28, 0($29) \n\t" \ 4483 "lw $31, 4($29) \n\t" \ 4484 "addu $29, $29, 8 \n\t" \ 4487 : "0" (&_argvec[0]) \ 4488 : "memory", __CALLER_SAVED_REGS \ 4490 lval = (__typeof__(lval)) _res; \ 4493 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4496 volatile OrigFn _orig = (orig); \ 4497 volatile unsigned long _argvec[10]; \ 4498 volatile unsigned long _res; \ 4499 _argvec[0] = (unsigned long)_orig.nraddr; \ 4500 _argvec[1] = (unsigned long)(arg1); \ 4501 _argvec[2] = (unsigned long)(arg2); \ 4502 _argvec[3] = (unsigned long)(arg3); \ 4503 _argvec[4] = (unsigned long)(arg4); \ 4504 _argvec[5] = (unsigned long)(arg5); \ 4505 _argvec[6] = (unsigned long)(arg6); \ 4506 _argvec[7] = (unsigned long)(arg7); \ 4507 _argvec[8] = (unsigned long)(arg8); \ 4508 _argvec[9] = (unsigned long)(arg9); \ 4510 "subu $29, $29, 8 \n\t" \ 4511 "sw $28, 0($29) \n\t" \ 4512 "sw $31, 4($29) \n\t" \ 4513 "lw $4, 20(%1) \n\t" \ 4514 "subu $29, $29, 40\n\t" \ 4515 "sw $4, 16($29) \n\t" \ 4516 "lw $4, 24(%1) \n\t" \ 4517 "sw $4, 20($29) \n\t" \ 4518 "lw $4, 28(%1) \n\t" \ 4519 "sw $4, 24($29) \n\t" \ 4520 "lw $4, 32(%1) \n\t" \ 4521 "sw $4, 28($29) \n\t" \ 4522 "lw $4, 36(%1) \n\t" \ 4523 "sw $4, 32($29) \n\t" \ 4524 "lw $4, 4(%1) \n\t" \ 4525 "lw $5, 8(%1) \n\t" \ 4526 "lw $6, 12(%1) \n\t" \ 4527 "lw $7, 16(%1) \n\t" \ 4528 "lw $25, 0(%1) \n\t" \ 4529 VALGRIND_CALL_NOREDIR_T9 \ 4530 "addu $29, $29, 40 \n\t" \ 4531 "lw $28, 0($29) \n\t" \ 4532 "lw $31, 4($29) \n\t" \ 4533 "addu $29, $29, 8 \n\t" \ 4536 : "0" (&_argvec[0]) \ 4537 : "memory", __CALLER_SAVED_REGS \ 4539 lval = (__typeof__(lval)) _res; \ 4542 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4543 arg7,arg8,arg9,arg10) \ 4545 volatile OrigFn _orig = (orig); \ 4546 volatile unsigned long _argvec[11]; \ 4547 volatile unsigned long _res; \ 4548 _argvec[0] = (unsigned long)_orig.nraddr; \ 4549 _argvec[1] = (unsigned long)(arg1); \ 4550 _argvec[2] = (unsigned long)(arg2); \ 4551 _argvec[3] = (unsigned long)(arg3); \ 4552 _argvec[4] = (unsigned long)(arg4); \ 4553 _argvec[5] = (unsigned long)(arg5); \ 4554 _argvec[6] = (unsigned long)(arg6); \ 4555 _argvec[7] = (unsigned long)(arg7); \ 4556 _argvec[8] = (unsigned long)(arg8); \ 4557 _argvec[9] = (unsigned long)(arg9); \ 4558 _argvec[10] = (unsigned long)(arg10); \ 4560 "subu $29, $29, 8 \n\t" \ 4561 "sw $28, 0($29) \n\t" \ 4562 "sw $31, 4($29) \n\t" \ 4563 "lw $4, 20(%1) \n\t" \ 4564 "subu $29, $29, 48\n\t" \ 4565 "sw $4, 16($29) \n\t" \ 4566 "lw $4, 24(%1) \n\t" \ 4567 "sw $4, 20($29) \n\t" \ 4568 "lw $4, 28(%1) \n\t" \ 4569 "sw $4, 24($29) \n\t" \ 4570 "lw $4, 32(%1) \n\t" \ 4571 "sw $4, 28($29) \n\t" \ 4572 "lw $4, 36(%1) \n\t" \ 4573 "sw $4, 32($29) \n\t" \ 4574 "lw $4, 40(%1) \n\t" \ 4575 "sw $4, 36($29) \n\t" \ 4576 "lw $4, 4(%1) \n\t" \ 4577 "lw $5, 8(%1) \n\t" \ 4578 "lw $6, 12(%1) \n\t" \ 4579 "lw $7, 16(%1) \n\t" \ 4580 "lw $25, 0(%1) \n\t" \ 4581 VALGRIND_CALL_NOREDIR_T9 \ 4582 "addu $29, $29, 48 \n\t" \ 4583 "lw $28, 0($29) \n\t" \ 4584 "lw $31, 4($29) \n\t" \ 4585 "addu $29, $29, 8 \n\t" \ 4588 : "0" (&_argvec[0]) \ 4589 : "memory", __CALLER_SAVED_REGS \ 4591 lval = (__typeof__(lval)) _res; \ 4594 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 4595 arg6,arg7,arg8,arg9,arg10, \ 4598 volatile OrigFn _orig = (orig); \ 4599 volatile unsigned long _argvec[12]; \ 4600 volatile unsigned long _res; \ 4601 _argvec[0] = (unsigned long)_orig.nraddr; \ 4602 _argvec[1] = (unsigned long)(arg1); \ 4603 _argvec[2] = (unsigned long)(arg2); \ 4604 _argvec[3] = (unsigned long)(arg3); \ 4605 _argvec[4] = (unsigned long)(arg4); \ 4606 _argvec[5] = (unsigned long)(arg5); \ 4607 _argvec[6] = (unsigned long)(arg6); \ 4608 _argvec[7] = (unsigned long)(arg7); \ 4609 _argvec[8] = (unsigned long)(arg8); \ 4610 _argvec[9] = (unsigned long)(arg9); \ 4611 _argvec[10] = (unsigned long)(arg10); \ 4612 _argvec[11] = (unsigned long)(arg11); \ 4614 "subu $29, $29, 8 \n\t" \ 4615 "sw $28, 0($29) \n\t" \ 4616 "sw $31, 4($29) \n\t" \ 4617 "lw $4, 20(%1) \n\t" \ 4618 "subu $29, $29, 48\n\t" \ 4619 "sw $4, 16($29) \n\t" \ 4620 "lw $4, 24(%1) \n\t" \ 4621 "sw $4, 20($29) \n\t" \ 4622 "lw $4, 28(%1) \n\t" \ 4623 "sw $4, 24($29) \n\t" \ 4624 "lw $4, 32(%1) \n\t" \ 4625 "sw $4, 28($29) \n\t" \ 4626 "lw $4, 36(%1) \n\t" \ 4627 "sw $4, 32($29) \n\t" \ 4628 "lw $4, 40(%1) \n\t" \ 4629 "sw $4, 36($29) \n\t" \ 4630 "lw $4, 44(%1) \n\t" \ 4631 "sw $4, 40($29) \n\t" \ 4632 "lw $4, 4(%1) \n\t" \ 4633 "lw $5, 8(%1) \n\t" \ 4634 "lw $6, 12(%1) \n\t" \ 4635 "lw $7, 16(%1) \n\t" \ 4636 "lw $25, 0(%1) \n\t" \ 4637 VALGRIND_CALL_NOREDIR_T9 \ 4638 "addu $29, $29, 48 \n\t" \ 4639 "lw $28, 0($29) \n\t" \ 4640 "lw $31, 4($29) \n\t" \ 4641 "addu $29, $29, 8 \n\t" \ 4644 : "0" (&_argvec[0]) \ 4645 : "memory", __CALLER_SAVED_REGS \ 4647 lval = (__typeof__(lval)) _res; \ 4650 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 4651 arg6,arg7,arg8,arg9,arg10, \ 4654 volatile OrigFn _orig = (orig); \ 4655 volatile unsigned long _argvec[13]; \ 4656 volatile unsigned long _res; \ 4657 _argvec[0] = (unsigned long)_orig.nraddr; \ 4658 _argvec[1] = (unsigned long)(arg1); \ 4659 _argvec[2] = (unsigned long)(arg2); \ 4660 _argvec[3] = (unsigned long)(arg3); \ 4661 _argvec[4] = (unsigned long)(arg4); \ 4662 _argvec[5] = (unsigned long)(arg5); \ 4663 _argvec[6] = (unsigned long)(arg6); \ 4664 _argvec[7] = (unsigned long)(arg7); \ 4665 _argvec[8] = (unsigned long)(arg8); \ 4666 _argvec[9] = (unsigned long)(arg9); \ 4667 _argvec[10] = (unsigned long)(arg10); \ 4668 _argvec[11] = (unsigned long)(arg11); \ 4669 _argvec[12] = (unsigned long)(arg12); \ 4671 "subu $29, $29, 8 \n\t" \ 4672 "sw $28, 0($29) \n\t" \ 4673 "sw $31, 4($29) \n\t" \ 4674 "lw $4, 20(%1) \n\t" \ 4675 "subu $29, $29, 56\n\t" \ 4676 "sw $4, 16($29) \n\t" \ 4677 "lw $4, 24(%1) \n\t" \ 4678 "sw $4, 20($29) \n\t" \ 4679 "lw $4, 28(%1) \n\t" \ 4680 "sw $4, 24($29) \n\t" \ 4681 "lw $4, 32(%1) \n\t" \ 4682 "sw $4, 28($29) \n\t" \ 4683 "lw $4, 36(%1) \n\t" \ 4684 "sw $4, 32($29) \n\t" \ 4685 "lw $4, 40(%1) \n\t" \ 4686 "sw $4, 36($29) \n\t" \ 4687 "lw $4, 44(%1) \n\t" \ 4688 "sw $4, 40($29) \n\t" \ 4689 "lw $4, 48(%1) \n\t" \ 4690 "sw $4, 44($29) \n\t" \ 4691 "lw $4, 4(%1) \n\t" \ 4692 "lw $5, 8(%1) \n\t" \ 4693 "lw $6, 12(%1) \n\t" \ 4694 "lw $7, 16(%1) \n\t" \ 4695 "lw $25, 0(%1) \n\t" \ 4696 VALGRIND_CALL_NOREDIR_T9 \ 4697 "addu $29, $29, 56 \n\t" \ 4698 "lw $28, 0($29) \n\t" \ 4699 "lw $31, 4($29) \n\t" \ 4700 "addu $29, $29, 8 \n\t" \ 4703 : "r" (&_argvec[0]) \ 4704 : "memory", __CALLER_SAVED_REGS \ 4706 lval = (__typeof__(lval)) _res; \ 4713 #if defined(PLAT_mips64_linux) 4716 #define __CALLER_SAVED_REGS "$2", "$3", "$4", "$5", "$6", \ 4717 "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ 4723 #define CALL_FN_W_v(lval, orig) \ 4725 volatile OrigFn _orig = (orig); \ 4726 volatile unsigned long _argvec[1]; \ 4727 volatile unsigned long _res; \ 4728 _argvec[0] = (unsigned long)_orig.nraddr; \ 4730 "ld $25, 0(%1)\n\t" \ 4731 VALGRIND_CALL_NOREDIR_T9 \ 4734 : "0" (&_argvec[0]) \ 4735 : "memory", __CALLER_SAVED_REGS \ 4737 lval = (__typeof__(lval)) _res; \ 4740 #define CALL_FN_W_W(lval, orig, arg1) \ 4742 volatile OrigFn _orig = (orig); \ 4743 volatile unsigned long _argvec[2]; \ 4744 volatile unsigned long _res; \ 4745 _argvec[0] = (unsigned long)_orig.nraddr; \ 4746 _argvec[1] = (unsigned long)(arg1); \ 4748 "ld $4, 8(%1)\n\t" \ 4749 "ld $25, 0(%1)\n\t" \ 4750 VALGRIND_CALL_NOREDIR_T9 \ 4753 : "r" (&_argvec[0]) \ 4754 : "memory", __CALLER_SAVED_REGS \ 4756 lval = (__typeof__(lval)) _res; \ 4759 #define CALL_FN_W_WW(lval, orig, arg1,arg2) \ 4761 volatile OrigFn _orig = (orig); \ 4762 volatile unsigned long _argvec[3]; \ 4763 volatile unsigned long _res; \ 4764 _argvec[0] = (unsigned long)_orig.nraddr; \ 4765 _argvec[1] = (unsigned long)(arg1); \ 4766 _argvec[2] = (unsigned long)(arg2); \ 4768 "ld $4, 8(%1)\n\t" \ 4769 "ld $5, 16(%1)\n\t" \ 4770 "ld $25, 0(%1)\n\t" \ 4771 VALGRIND_CALL_NOREDIR_T9 \ 4774 : "r" (&_argvec[0]) \ 4775 : "memory", __CALLER_SAVED_REGS \ 4777 lval = (__typeof__(lval)) _res; \ 4780 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ 4782 volatile OrigFn _orig = (orig); \ 4783 volatile unsigned long _argvec[4]; \ 4784 volatile unsigned long _res; \ 4785 _argvec[0] = (unsigned long)_orig.nraddr; \ 4786 _argvec[1] = (unsigned long)(arg1); \ 4787 _argvec[2] = (unsigned long)(arg2); \ 4788 _argvec[3] = (unsigned long)(arg3); \ 4790 "ld $4, 8(%1)\n\t" \ 4791 "ld $5, 16(%1)\n\t" \ 4792 "ld $6, 24(%1)\n\t" \ 4793 "ld $25, 0(%1)\n\t" \ 4794 VALGRIND_CALL_NOREDIR_T9 \ 4797 : "r" (&_argvec[0]) \ 4798 : "memory", __CALLER_SAVED_REGS \ 4800 lval = (__typeof__(lval)) _res; \ 4803 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ 4805 volatile OrigFn _orig = (orig); \ 4806 volatile unsigned long _argvec[5]; \ 4807 volatile unsigned long _res; \ 4808 _argvec[0] = (unsigned long)_orig.nraddr; \ 4809 _argvec[1] = (unsigned long)(arg1); \ 4810 _argvec[2] = (unsigned long)(arg2); \ 4811 _argvec[3] = (unsigned long)(arg3); \ 4812 _argvec[4] = (unsigned long)(arg4); \ 4814 "ld $4, 8(%1)\n\t" \ 4815 "ld $5, 16(%1)\n\t" \ 4816 "ld $6, 24(%1)\n\t" \ 4817 "ld $7, 32(%1)\n\t" \ 4818 "ld $25, 0(%1)\n\t" \ 4819 VALGRIND_CALL_NOREDIR_T9 \ 4822 : "r" (&_argvec[0]) \ 4823 : "memory", __CALLER_SAVED_REGS \ 4825 lval = (__typeof__(lval)) _res; \ 4828 #define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ 4830 volatile OrigFn _orig = (orig); \ 4831 volatile unsigned long _argvec[6]; \ 4832 volatile unsigned long _res; \ 4833 _argvec[0] = (unsigned long)_orig.nraddr; \ 4834 _argvec[1] = (unsigned long)(arg1); \ 4835 _argvec[2] = (unsigned long)(arg2); \ 4836 _argvec[3] = (unsigned long)(arg3); \ 4837 _argvec[4] = (unsigned long)(arg4); \ 4838 _argvec[5] = (unsigned long)(arg5); \ 4840 "ld $4, 8(%1)\n\t" \ 4841 "ld $5, 16(%1)\n\t" \ 4842 "ld $6, 24(%1)\n\t" \ 4843 "ld $7, 32(%1)\n\t" \ 4844 "ld $8, 40(%1)\n\t" \ 4845 "ld $25, 0(%1)\n\t" \ 4846 VALGRIND_CALL_NOREDIR_T9 \ 4849 : "r" (&_argvec[0]) \ 4850 : "memory", __CALLER_SAVED_REGS \ 4852 lval = (__typeof__(lval)) _res; \ 4855 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ 4857 volatile OrigFn _orig = (orig); \ 4858 volatile unsigned long _argvec[7]; \ 4859 volatile unsigned long _res; \ 4860 _argvec[0] = (unsigned long)_orig.nraddr; \ 4861 _argvec[1] = (unsigned long)(arg1); \ 4862 _argvec[2] = (unsigned long)(arg2); \ 4863 _argvec[3] = (unsigned long)(arg3); \ 4864 _argvec[4] = (unsigned long)(arg4); \ 4865 _argvec[5] = (unsigned long)(arg5); \ 4866 _argvec[6] = (unsigned long)(arg6); \ 4868 "ld $4, 8(%1)\n\t" \ 4869 "ld $5, 16(%1)\n\t" \ 4870 "ld $6, 24(%1)\n\t" \ 4871 "ld $7, 32(%1)\n\t" \ 4872 "ld $8, 40(%1)\n\t" \ 4873 "ld $9, 48(%1)\n\t" \ 4874 "ld $25, 0(%1)\n\t" \ 4875 VALGRIND_CALL_NOREDIR_T9 \ 4878 : "r" (&_argvec[0]) \ 4879 : "memory", __CALLER_SAVED_REGS \ 4881 lval = (__typeof__(lval)) _res; \ 4884 #define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4887 volatile OrigFn _orig = (orig); \ 4888 volatile unsigned long _argvec[8]; \ 4889 volatile unsigned long _res; \ 4890 _argvec[0] = (unsigned long)_orig.nraddr; \ 4891 _argvec[1] = (unsigned long)(arg1); \ 4892 _argvec[2] = (unsigned long)(arg2); \ 4893 _argvec[3] = (unsigned long)(arg3); \ 4894 _argvec[4] = (unsigned long)(arg4); \ 4895 _argvec[5] = (unsigned long)(arg5); \ 4896 _argvec[6] = (unsigned long)(arg6); \ 4897 _argvec[7] = (unsigned long)(arg7); \ 4899 "ld $4, 8(%1)\n\t" \ 4900 "ld $5, 16(%1)\n\t" \ 4901 "ld $6, 24(%1)\n\t" \ 4902 "ld $7, 32(%1)\n\t" \ 4903 "ld $8, 40(%1)\n\t" \ 4904 "ld $9, 48(%1)\n\t" \ 4905 "ld $10, 56(%1)\n\t" \ 4906 "ld $25, 0(%1) \n\t" \ 4907 VALGRIND_CALL_NOREDIR_T9 \ 4910 : "r" (&_argvec[0]) \ 4911 : "memory", __CALLER_SAVED_REGS \ 4913 lval = (__typeof__(lval)) _res; \ 4916 #define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4919 volatile OrigFn _orig = (orig); \ 4920 volatile unsigned long _argvec[9]; \ 4921 volatile unsigned long _res; \ 4922 _argvec[0] = (unsigned long)_orig.nraddr; \ 4923 _argvec[1] = (unsigned long)(arg1); \ 4924 _argvec[2] = (unsigned long)(arg2); \ 4925 _argvec[3] = (unsigned long)(arg3); \ 4926 _argvec[4] = (unsigned long)(arg4); \ 4927 _argvec[5] = (unsigned long)(arg5); \ 4928 _argvec[6] = (unsigned long)(arg6); \ 4929 _argvec[7] = (unsigned long)(arg7); \ 4930 _argvec[8] = (unsigned long)(arg8); \ 4932 "ld $4, 8(%1)\n\t" \ 4933 "ld $5, 16(%1)\n\t" \ 4934 "ld $6, 24(%1)\n\t" \ 4935 "ld $7, 32(%1)\n\t" \ 4936 "ld $8, 40(%1)\n\t" \ 4937 "ld $9, 48(%1)\n\t" \ 4938 "ld $10, 56(%1)\n\t" \ 4939 "ld $11, 64(%1)\n\t" \ 4940 "ld $25, 0(%1) \n\t" \ 4941 VALGRIND_CALL_NOREDIR_T9 \ 4944 : "r" (&_argvec[0]) \ 4945 : "memory", __CALLER_SAVED_REGS \ 4947 lval = (__typeof__(lval)) _res; \ 4950 #define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4953 volatile OrigFn _orig = (orig); \ 4954 volatile unsigned long _argvec[10]; \ 4955 volatile unsigned long _res; \ 4956 _argvec[0] = (unsigned long)_orig.nraddr; \ 4957 _argvec[1] = (unsigned long)(arg1); \ 4958 _argvec[2] = (unsigned long)(arg2); \ 4959 _argvec[3] = (unsigned long)(arg3); \ 4960 _argvec[4] = (unsigned long)(arg4); \ 4961 _argvec[5] = (unsigned long)(arg5); \ 4962 _argvec[6] = (unsigned long)(arg6); \ 4963 _argvec[7] = (unsigned long)(arg7); \ 4964 _argvec[8] = (unsigned long)(arg8); \ 4965 _argvec[9] = (unsigned long)(arg9); \ 4967 "dsubu $29, $29, 8\n\t" \ 4968 "ld $4, 72(%1)\n\t" \ 4969 "sd $4, 0($29)\n\t" \ 4970 "ld $4, 8(%1)\n\t" \ 4971 "ld $5, 16(%1)\n\t" \ 4972 "ld $6, 24(%1)\n\t" \ 4973 "ld $7, 32(%1)\n\t" \ 4974 "ld $8, 40(%1)\n\t" \ 4975 "ld $9, 48(%1)\n\t" \ 4976 "ld $10, 56(%1)\n\t" \ 4977 "ld $11, 64(%1)\n\t" \ 4978 "ld $25, 0(%1)\n\t" \ 4979 VALGRIND_CALL_NOREDIR_T9 \ 4980 "daddu $29, $29, 8\n\t" \ 4983 : "r" (&_argvec[0]) \ 4984 : "memory", __CALLER_SAVED_REGS \ 4986 lval = (__typeof__(lval)) _res; \ 4989 #define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ 4990 arg7,arg8,arg9,arg10) \ 4992 volatile OrigFn _orig = (orig); \ 4993 volatile unsigned long _argvec[11]; \ 4994 volatile unsigned long _res; \ 4995 _argvec[0] = (unsigned long)_orig.nraddr; \ 4996 _argvec[1] = (unsigned long)(arg1); \ 4997 _argvec[2] = (unsigned long)(arg2); \ 4998 _argvec[3] = (unsigned long)(arg3); \ 4999 _argvec[4] = (unsigned long)(arg4); \ 5000 _argvec[5] = (unsigned long)(arg5); \ 5001 _argvec[6] = (unsigned long)(arg6); \ 5002 _argvec[7] = (unsigned long)(arg7); \ 5003 _argvec[8] = (unsigned long)(arg8); \ 5004 _argvec[9] = (unsigned long)(arg9); \ 5005 _argvec[10] = (unsigned long)(arg10); \ 5007 "dsubu $29, $29, 16\n\t" \ 5008 "ld $4, 72(%1)\n\t" \ 5009 "sd $4, 0($29)\n\t" \ 5010 "ld $4, 80(%1)\n\t" \ 5011 "sd $4, 8($29)\n\t" \ 5012 "ld $4, 8(%1)\n\t" \ 5013 "ld $5, 16(%1)\n\t" \ 5014 "ld $6, 24(%1)\n\t" \ 5015 "ld $7, 32(%1)\n\t" \ 5016 "ld $8, 40(%1)\n\t" \ 5017 "ld $9, 48(%1)\n\t" \ 5018 "ld $10, 56(%1)\n\t" \ 5019 "ld $11, 64(%1)\n\t" \ 5020 "ld $25, 0(%1)\n\t" \ 5021 VALGRIND_CALL_NOREDIR_T9 \ 5022 "daddu $29, $29, 16\n\t" \ 5025 : "r" (&_argvec[0]) \ 5026 : "memory", __CALLER_SAVED_REGS \ 5028 lval = (__typeof__(lval)) _res; \ 5031 #define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 5032 arg6,arg7,arg8,arg9,arg10, \ 5035 volatile OrigFn _orig = (orig); \ 5036 volatile unsigned long _argvec[12]; \ 5037 volatile unsigned long _res; \ 5038 _argvec[0] = (unsigned long)_orig.nraddr; \ 5039 _argvec[1] = (unsigned long)(arg1); \ 5040 _argvec[2] = (unsigned long)(arg2); \ 5041 _argvec[3] = (unsigned long)(arg3); \ 5042 _argvec[4] = (unsigned long)(arg4); \ 5043 _argvec[5] = (unsigned long)(arg5); \ 5044 _argvec[6] = (unsigned long)(arg6); \ 5045 _argvec[7] = (unsigned long)(arg7); \ 5046 _argvec[8] = (unsigned long)(arg8); \ 5047 _argvec[9] = (unsigned long)(arg9); \ 5048 _argvec[10] = (unsigned long)(arg10); \ 5049 _argvec[11] = (unsigned long)(arg11); \ 5051 "dsubu $29, $29, 24\n\t" \ 5052 "ld $4, 72(%1)\n\t" \ 5053 "sd $4, 0($29)\n\t" \ 5054 "ld $4, 80(%1)\n\t" \ 5055 "sd $4, 8($29)\n\t" \ 5056 "ld $4, 88(%1)\n\t" \ 5057 "sd $4, 16($29)\n\t" \ 5058 "ld $4, 8(%1)\n\t" \ 5059 "ld $5, 16(%1)\n\t" \ 5060 "ld $6, 24(%1)\n\t" \ 5061 "ld $7, 32(%1)\n\t" \ 5062 "ld $8, 40(%1)\n\t" \ 5063 "ld $9, 48(%1)\n\t" \ 5064 "ld $10, 56(%1)\n\t" \ 5065 "ld $11, 64(%1)\n\t" \ 5066 "ld $25, 0(%1)\n\t" \ 5067 VALGRIND_CALL_NOREDIR_T9 \ 5068 "daddu $29, $29, 24\n\t" \ 5071 : "r" (&_argvec[0]) \ 5072 : "memory", __CALLER_SAVED_REGS \ 5074 lval = (__typeof__(lval)) _res; \ 5077 #define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ 5078 arg6,arg7,arg8,arg9,arg10, \ 5081 volatile OrigFn _orig = (orig); \ 5082 volatile unsigned long _argvec[13]; \ 5083 volatile unsigned long _res; \ 5084 _argvec[0] = (unsigned long)_orig.nraddr; \ 5085 _argvec[1] = (unsigned long)(arg1); \ 5086 _argvec[2] = (unsigned long)(arg2); \ 5087 _argvec[3] = (unsigned long)(arg3); \ 5088 _argvec[4] = (unsigned long)(arg4); \ 5089 _argvec[5] = (unsigned long)(arg5); \ 5090 _argvec[6] = (unsigned long)(arg6); \ 5091 _argvec[7] = (unsigned long)(arg7); \ 5092 _argvec[8] = (unsigned long)(arg8); \ 5093 _argvec[9] = (unsigned long)(arg9); \ 5094 _argvec[10] = (unsigned long)(arg10); \ 5095 _argvec[11] = (unsigned long)(arg11); \ 5096 _argvec[12] = (unsigned long)(arg12); \ 5098 "dsubu $29, $29, 32\n\t" \ 5099 "ld $4, 72(%1)\n\t" \ 5100 "sd $4, 0($29)\n\t" \ 5101 "ld $4, 80(%1)\n\t" \ 5102 "sd $4, 8($29)\n\t" \ 5103 "ld $4, 88(%1)\n\t" \ 5104 "sd $4, 16($29)\n\t" \ 5105 "ld $4, 96(%1)\n\t" \ 5106 "sd $4, 24($29)\n\t" \ 5107 "ld $4, 8(%1)\n\t" \ 5108 "ld $5, 16(%1)\n\t" \ 5109 "ld $6, 24(%1)\n\t" \ 5110 "ld $7, 32(%1)\n\t" \ 5111 "ld $8, 40(%1)\n\t" \ 5112 "ld $9, 48(%1)\n\t" \ 5113 "ld $10, 56(%1)\n\t" \ 5114 "ld $11, 64(%1)\n\t" \ 5115 "ld $25, 0(%1)\n\t" \ 5116 VALGRIND_CALL_NOREDIR_T9 \ 5117 "daddu $29, $29, 32\n\t" \ 5120 : "r" (&_argvec[0]) \ 5121 : "memory", __CALLER_SAVED_REGS \ 5123 lval = (__typeof__(lval)) _res; \ 5144 #define VG_USERREQ_TOOL_BASE(a,b) \ 5145 ((unsigned int)(((a)&0xff) << 24 | ((b)&0xff) << 16)) 5146 #define VG_IS_TOOL_USERREQ(a, b, v) \ 5147 (VG_USERREQ_TOOL_BASE(a,b) == ((v) & 0xffff0000)) 5226 #if !defined(__GNUC__) 5227 # define __extension__ 5235 #define RUNNING_ON_VALGRIND \ 5236 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 5237 VG_USERREQ__RUNNING_ON_VALGRIND, \ 5245 #define VALGRIND_DISCARD_TRANSLATIONS(_qzz_addr,_qzz_len) \ 5246 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DISCARD_TRANSLATIONS, \ 5247 _qzz_addr, _qzz_len, 0, 0, 0) 5255 #if defined(__GNUC__) || defined(__INTEL_COMPILER) && !defined(_MSC_VER) 5259 __attribute__((format(__printf__, 1, 2), __unused__));
5262 #if defined(_MSC_VER) 5267 #if defined(NVALGRIND) 5270 #if defined(_MSC_VER) || defined(__MINGW64__) 5273 unsigned long _qzz_res;
5276 va_start(vargs, format);
5277 #if defined(_MSC_VER) || defined(__MINGW64__) 5286 (
unsigned long)format,
5287 (
unsigned long)&vargs,
5291 return (
int)_qzz_res;
5295 #if defined(__GNUC__) || defined(__INTEL_COMPILER) && !defined(_MSC_VER) 5297 __attribute__((format(__printf__, 1, 2), __unused__));
5300 #if defined(_MSC_VER) 5305 #if defined(NVALGRIND) 5308 #if defined(_MSC_VER) || defined(__MINGW64__) 5311 unsigned long _qzz_res;
5314 va_start(vargs, format);
5315 #if defined(_MSC_VER) || defined(__MINGW64__) 5324 (
unsigned long)format,
5325 (
unsigned long)&vargs,
5329 return (
int)_qzz_res;
5357 #define VALGRIND_NON_SIMD_CALL0(_qyy_fn) \ 5358 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 5359 VG_USERREQ__CLIENT_CALL0, \ 5363 #define VALGRIND_NON_SIMD_CALL1(_qyy_fn, _qyy_arg1) \ 5364 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 5365 VG_USERREQ__CLIENT_CALL1, \ 5369 #define VALGRIND_NON_SIMD_CALL2(_qyy_fn, _qyy_arg1, _qyy_arg2) \ 5370 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 5371 VG_USERREQ__CLIENT_CALL2, \ 5373 _qyy_arg1, _qyy_arg2, 0, 0) 5375 #define VALGRIND_NON_SIMD_CALL3(_qyy_fn, _qyy_arg1, _qyy_arg2, _qyy_arg3) \ 5376 VALGRIND_DO_CLIENT_REQUEST_EXPR(0 , \ 5377 VG_USERREQ__CLIENT_CALL3, \ 5379 _qyy_arg1, _qyy_arg2, \ 5386 #define VALGRIND_COUNT_ERRORS \ 5387 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR( \ 5389 VG_USERREQ__COUNT_ERRORS, \ 5493 #define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed) \ 5494 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MALLOCLIKE_BLOCK, \ 5495 addr, sizeB, rzB, is_zeroed, 0) 5500 #define VALGRIND_RESIZEINPLACE_BLOCK(addr, oldSizeB, newSizeB, rzB) \ 5501 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__RESIZEINPLACE_BLOCK, \ 5502 addr, oldSizeB, newSizeB, rzB, 0) 5507 #define VALGRIND_FREELIKE_BLOCK(addr, rzB) \ 5508 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__FREELIKE_BLOCK, \ 5512 #define VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed) \ 5513 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CREATE_MEMPOOL, \ 5514 pool, rzB, is_zeroed, 0, 0) 5517 #define VALGRIND_DESTROY_MEMPOOL(pool) \ 5518 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DESTROY_MEMPOOL, \ 5522 #define VALGRIND_MEMPOOL_ALLOC(pool, addr, size) \ 5523 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_ALLOC, \ 5524 pool, addr, size, 0, 0) 5527 #define VALGRIND_MEMPOOL_FREE(pool, addr) \ 5528 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_FREE, \ 5529 pool, addr, 0, 0, 0) 5532 #define VALGRIND_MEMPOOL_TRIM(pool, addr, size) \ 5533 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_TRIM, \ 5534 pool, addr, size, 0, 0) 5537 #define VALGRIND_MOVE_MEMPOOL(poolA, poolB) \ 5538 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MOVE_MEMPOOL, \ 5539 poolA, poolB, 0, 0, 0) 5542 #define VALGRIND_MEMPOOL_CHANGE(pool, addrA, addrB, size) \ 5543 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_CHANGE, \ 5544 pool, addrA, addrB, size, 0) 5547 #define VALGRIND_MEMPOOL_EXISTS(pool) \ 5548 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 5549 VG_USERREQ__MEMPOOL_EXISTS, \ 5553 #define VALGRIND_STACK_REGISTER(start, end) \ 5554 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 5555 VG_USERREQ__STACK_REGISTER, \ 5556 start, end, 0, 0, 0) 5560 #define VALGRIND_STACK_DEREGISTER(id) \ 5561 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_DEREGISTER, \ 5565 #define VALGRIND_STACK_CHANGE(id, start, end) \ 5566 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_CHANGE, \ 5567 id, start, end, 0, 0) 5570 #define VALGRIND_LOAD_PDB_DEBUGINFO(fd, ptr, total_size, delta) \ 5571 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__LOAD_PDB_DEBUGINFO, \ 5572 fd, ptr, total_size, delta, 0) 5578 #define VALGRIND_MAP_IP_TO_SRCLOC(addr, buf64) \ 5579 (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ 5580 VG_USERREQ__MAP_IP_TO_SRCLOC, \ 5581 addr, buf64, 0, 0, 0) 5591 #define VALGRIND_DISABLE_ERROR_REPORTING \ 5592 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, \ 5597 #define VALGRIND_ENABLE_ERROR_REPORTING \ 5598 VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, \ 5606 #define VALGRIND_MONITOR_COMMAND(command) \ 5607 VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__GDB_MONITOR_COMMAND, \ 5608 command, 0, 0, 0, 0) 5611 #undef PLAT_x86_darwin 5612 #undef PLAT_amd64_darwin 5613 #undef PLAT_x86_win32 5614 #undef PLAT_amd64_win64 5615 #undef PLAT_x86_linux 5616 #undef PLAT_amd64_linux 5617 #undef PLAT_ppc32_linux 5618 #undef PLAT_ppc64_linux 5619 #undef PLAT_arm_linux 5620 #undef PLAT_s390x_linux 5621 #undef PLAT_mips32_linux 5622 #undef PLAT_mips64_linux
#define VALGRIND_DO_CLIENT_REQUEST_EXPR( _zzq_default, _zzq_request, _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)
static int VALGRIND_PRINTF_BACKTRACE(const char *format,...)
static int VALGRIND_PRINTF(const char *format,...)