Rev 2787 | Rev 3471 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2787 | Rev 3424 | ||
---|---|---|---|
Line 561... | Line 561... | ||
561 | ASSERT(uptime); |
561 | ASSERT(uptime); |
562 | 562 | ||
563 | /* This doesn't have to be very accurate */ |
563 | /* This doesn't have to be very accurate */ |
564 | unative_t sec = uptime->seconds1; |
564 | unative_t sec = uptime->seconds1; |
565 | 565 | ||
566 | printf("Up %u days, %u hours, %u minutes, %u seconds\n", |
566 | printf("Up %" PRIun " days, %" PRIun " hours, %" PRIun " minutes, %" PRIun " seconds\n", |
567 | sec / 86400, (sec % 86400) / 3600, (sec % 3600) / 60, sec % 60); |
567 | sec / 86400, (sec % 86400) / 3600, (sec % 3600) / 60, sec % 60); |
568 | 568 | ||
569 | return 1; |
569 | return 1; |
570 | } |
570 | } |
571 | 571 | ||
Line 630... | Line 630... | ||
630 | else if (symaddr == (uintptr_t) -1) { |
630 | else if (symaddr == (uintptr_t) -1) { |
631 | symtab_print_search((char *) argv->buffer); |
631 | symtab_print_search((char *) argv->buffer); |
632 | printf("Duplicate symbol, be more specific.\n"); |
632 | printf("Duplicate symbol, be more specific.\n"); |
633 | } else { |
633 | } else { |
634 | symbol = get_symtab_entry(symaddr); |
634 | symbol = get_symtab_entry(symaddr); |
635 | printf("Calling %s() (%.*p)\n", symbol, sizeof(uintptr_t) * 2, symaddr); |
635 | printf("Calling %s() (%p)\n", symbol, symaddr); |
636 | #ifdef ia64 |
636 | #ifdef ia64 |
637 | fptr.f = symaddr; |
637 | fptr.f = symaddr; |
638 | fptr.gp = ((unative_t *)cmd_call2)[1]; |
638 | fptr.gp = ((unative_t *)cmd_call2)[1]; |
639 | f = (unative_t (*)(void)) &fptr; |
639 | f = (unative_t (*)(void)) &fptr; |
640 | #else |
640 | #else |
641 | f = (unative_t (*)(void)) symaddr; |
641 | f = (unative_t (*)(void)) symaddr; |
642 | #endif |
642 | #endif |
643 | printf("Result: %#zx\n", f()); |
643 | printf("Result: %#" PRIxn "\n", f()); |
644 | } |
644 | } |
645 | 645 | ||
646 | return 1; |
646 | return 1; |
647 | } |
647 | } |
648 | 648 | ||
Line 684... | Line 684... | ||
684 | unative_t arg1 = argv[1].intval; |
684 | unative_t arg1 = argv[1].intval; |
685 | #ifdef ia64 |
685 | #ifdef ia64 |
686 | struct { |
686 | struct { |
687 | unative_t f; |
687 | unative_t f; |
688 | unative_t gp; |
688 | unative_t gp; |
689 | }fptr; |
689 | } fptr; |
690 | #endif |
690 | #endif |
691 | 691 | ||
692 | symaddr = get_symbol_addr((char *) argv->buffer); |
692 | symaddr = get_symbol_addr((char *) argv->buffer); |
693 | if (!symaddr) |
693 | if (!symaddr) |
694 | printf("Symbol %s not found.\n", argv->buffer); |
694 | printf("Symbol %s not found.\n", argv->buffer); |
Line 696... | Line 696... | ||
696 | symtab_print_search((char *) argv->buffer); |
696 | symtab_print_search((char *) argv->buffer); |
697 | printf("Duplicate symbol, be more specific.\n"); |
697 | printf("Duplicate symbol, be more specific.\n"); |
698 | } else { |
698 | } else { |
699 | symbol = get_symtab_entry(symaddr); |
699 | symbol = get_symtab_entry(symaddr); |
700 | 700 | ||
701 | printf("Calling f(%#zx): %.*p: %s\n", arg1, sizeof(uintptr_t) * 2, symaddr, symbol); |
701 | printf("Calling f(%#" PRIxn "): %p: %s\n", arg1, symaddr, symbol); |
702 | #ifdef ia64 |
702 | #ifdef ia64 |
703 | fptr.f = symaddr; |
703 | fptr.f = symaddr; |
704 | fptr.gp = ((unative_t *)cmd_call2)[1]; |
704 | fptr.gp = ((unative_t *)cmd_call2)[1]; |
705 | f = (unative_t (*)(unative_t,...)) &fptr; |
705 | f = (unative_t (*)(unative_t,...)) &fptr; |
706 | #else |
706 | #else |
707 | f = (unative_t (*)(unative_t,...)) symaddr; |
707 | f = (unative_t (*)(unative_t,...)) symaddr; |
708 | #endif |
708 | #endif |
709 | printf("Result: %#zx\n", f(arg1)); |
709 | printf("Result: %#" PRIxn "\n", f(arg1)); |
710 | } |
710 | } |
711 | 711 | ||
712 | return 1; |
712 | return 1; |
713 | } |
713 | } |
714 | 714 | ||
Line 733... | Line 733... | ||
733 | else if (symaddr == (uintptr_t) -1) { |
733 | else if (symaddr == (uintptr_t) -1) { |
734 | symtab_print_search((char *) argv->buffer); |
734 | symtab_print_search((char *) argv->buffer); |
735 | printf("Duplicate symbol, be more specific.\n"); |
735 | printf("Duplicate symbol, be more specific.\n"); |
736 | } else { |
736 | } else { |
737 | symbol = get_symtab_entry(symaddr); |
737 | symbol = get_symtab_entry(symaddr); |
738 | printf("Calling f(0x%zx,0x%zx): %.*p: %s\n", |
738 | printf("Calling f(%#" PRIxn ", %#" PRIxn "): %p: %s\n", |
739 | arg1, arg2, sizeof(uintptr_t) * 2, symaddr, symbol); |
739 | arg1, arg2, symaddr, symbol); |
740 | #ifdef ia64 |
740 | #ifdef ia64 |
741 | fptr.f = symaddr; |
741 | fptr.f = symaddr; |
742 | fptr.gp = ((unative_t *)cmd_call2)[1]; |
742 | fptr.gp = ((unative_t *)cmd_call2)[1]; |
743 | f = (unative_t (*)(unative_t,unative_t,...)) &fptr; |
743 | f = (unative_t (*)(unative_t,unative_t,...)) &fptr; |
744 | #else |
744 | #else |
745 | f = (unative_t (*)(unative_t,unative_t,...)) symaddr; |
745 | f = (unative_t (*)(unative_t,unative_t,...)) symaddr; |
746 | #endif |
746 | #endif |
747 | printf("Result: %#zx\n", f(arg1, arg2)); |
747 | printf("Result: %#" PRIxn "\n", f(arg1, arg2)); |
748 | } |
748 | } |
749 | 749 | ||
750 | return 1; |
750 | return 1; |
751 | } |
751 | } |
752 | 752 | ||
Line 772... | Line 772... | ||
772 | else if (symaddr == (uintptr_t) -1) { |
772 | else if (symaddr == (uintptr_t) -1) { |
773 | symtab_print_search((char *) argv->buffer); |
773 | symtab_print_search((char *) argv->buffer); |
774 | printf("Duplicate symbol, be more specific.\n"); |
774 | printf("Duplicate symbol, be more specific.\n"); |
775 | } else { |
775 | } else { |
776 | symbol = get_symtab_entry(symaddr); |
776 | symbol = get_symtab_entry(symaddr); |
777 | printf("Calling f(0x%zx,0x%zx, 0x%zx): %.*p: %s\n", |
777 | printf("Calling f(%#" PRIxn ",%#" PRIxn ", %#" PRIxn "): %p: %s\n", |
778 | arg1, arg2, arg3, sizeof(uintptr_t) * 2, symaddr, symbol); |
778 | arg1, arg2, arg3, symaddr, symbol); |
779 | #ifdef ia64 |
779 | #ifdef ia64 |
780 | fptr.f = symaddr; |
780 | fptr.f = symaddr; |
781 | fptr.gp = ((unative_t *)cmd_call2)[1]; |
781 | fptr.gp = ((unative_t *)cmd_call2)[1]; |
782 | f = (unative_t (*)(unative_t,unative_t,unative_t,...)) &fptr; |
782 | f = (unative_t (*)(unative_t,unative_t,unative_t,...)) &fptr; |
783 | #else |
783 | #else |
784 | f = (unative_t (*)(unative_t,unative_t,unative_t,...)) symaddr; |
784 | f = (unative_t (*)(unative_t,unative_t,unative_t,...)) symaddr; |
785 | #endif |
785 | #endif |
786 | printf("Result: %#zx\n", f(arg1, arg2, arg3)); |
786 | printf("Result: %#" PRIxn "\n", f(arg1, arg2, arg3)); |
787 | } |
787 | } |
788 | 788 | ||
789 | return 1; |
789 | return 1; |
790 | } |
790 | } |
791 | 791 | ||
Line 854... | Line 854... | ||
854 | symtab_print_search((char *) argv->buffer); |
854 | symtab_print_search((char *) argv->buffer); |
855 | printf("Duplicate symbol, be more specific.\n"); |
855 | printf("Duplicate symbol, be more specific.\n"); |
856 | } else { |
856 | } else { |
857 | if (pointer) |
857 | if (pointer) |
858 | addr = (uint32_t *)(*(unative_t *)addr); |
858 | addr = (uint32_t *)(*(unative_t *)addr); |
859 | printf("Writing 0x%x -> %.*p\n", arg1, sizeof(uintptr_t) * 2, addr); |
859 | printf("Writing %#" PRIx64 " -> %p\n", arg1, addr); |
860 | *addr = arg1; |
860 | *addr = arg1; |
861 | 861 | ||
862 | } |
862 | } |
863 | 863 | ||
864 | return 1; |
864 | return 1; |
Line 1023... | Line 1023... | ||
1023 | 1023 | ||
1024 | uint64_t cycles; |
1024 | uint64_t cycles; |
1025 | char suffix; |
1025 | char suffix; |
1026 | order(dt, &cycles, &suffix); |
1026 | order(dt, &cycles, &suffix); |
1027 | 1027 | ||
1028 | printf("Time: %llu%c cycles\n", cycles, suffix); |
1028 | printf("Time: %" PRIu64 "%c cycles\n", cycles, suffix); |
1029 | 1029 | ||
1030 | if (ret == NULL) { |
1030 | if (ret == NULL) { |
1031 | printf("Test passed\n"); |
1031 | printf("Test passed\n"); |
1032 | return true; |
1032 | return true; |
1033 | } |
1033 | } |
Line 1051... | Line 1051... | ||
1051 | printf("Error allocating memory for statistics\n"); |
1051 | printf("Error allocating memory for statistics\n"); |
1052 | return false; |
1052 | return false; |
1053 | } |
1053 | } |
1054 | 1054 | ||
1055 | for (i = 0; i < cnt; i++) { |
1055 | for (i = 0; i < cnt; i++) { |
1056 | printf("%s (%d/%d) ... ", test->name, i + 1, cnt); |
1056 | printf("%s (%u/%u) ... ", test->name, i + 1, cnt); |
1057 | 1057 | ||
1058 | /* Update and read thread accounting |
1058 | /* Update and read thread accounting |
1059 | for benchmarking */ |
1059 | for benchmarking */ |
1060 | ipl_t ipl = interrupts_disable(); |
1060 | ipl_t ipl = interrupts_disable(); |
1061 | spinlock_lock(&TASK->lock); |
1061 | spinlock_lock(&TASK->lock); |
Line 1079... | Line 1079... | ||
1079 | break; |
1079 | break; |
1080 | } |
1080 | } |
1081 | 1081 | ||
1082 | data[i] = dt; |
1082 | data[i] = dt; |
1083 | order(dt, &cycles, &suffix); |
1083 | order(dt, &cycles, &suffix); |
1084 | printf("OK (%llu%c cycles)\n", cycles, suffix); |
1084 | printf("OK (%" PRIu64 "%c cycles)\n", cycles, suffix); |
1085 | } |
1085 | } |
1086 | 1086 | ||
1087 | if (ret) { |
1087 | if (ret) { |
1088 | printf("\n"); |
1088 | printf("\n"); |
1089 | 1089 | ||
Line 1092... | Line 1092... | ||
1092 | for (i = 0; i < cnt; i++) { |
1092 | for (i = 0; i < cnt; i++) { |
1093 | sum += data[i]; |
1093 | sum += data[i]; |
1094 | } |
1094 | } |
1095 | 1095 | ||
1096 | order(sum / (uint64_t) cnt, &cycles, &suffix); |
1096 | order(sum / (uint64_t) cnt, &cycles, &suffix); |
1097 | printf("Average\t\t%llu%c\n", cycles, suffix); |
1097 | printf("Average\t\t%" PRIu64 "%c\n", cycles, suffix); |
1098 | } |
1098 | } |
1099 | 1099 | ||
1100 | free(data); |
1100 | free(data); |
1101 | 1101 | ||
1102 | return ret; |
1102 | return ret; |