| | 1255 | | | | pvm_upkint(np, cnt, std) | | | 1256 | | | | int *np; | | | 1257 | | | | int cnt; | | | 1258 | | | | int std; | | | 1259 | | | | { | | | 1260 | | | | int cc; | | | 1261 | | | | long ad; | | | 1262 | | | | TEV_DECLS
| | | 1263 | | | | | | | 1264 | | | | if (TEV_EXCLUSIVE) {
| | | 1265 | | | | if (TEV_DO_TRACE(TEV_UPKINT,TEV_EVENT_ENTRY)) {
| | | 1266 | | | | ad = (long)np; | | | 1267 | | | | TEV_PACK_LONG( TEV_DID_PDA, TEV_DATA_SCALAR, &ad, 1, 1 );
| | | 1268 | | | | TEV_PACK_INT( TEV_DID_PC, TEV_DATA_SCALAR, &cnt, 1, 1 );
| | | 1269 | | | | TEV_PACK_INT( TEV_DID_PSD, TEV_DATA_SCALAR, &std, 1, 1 );
| | | 1270 | | | | TEV_FIN;
| | | 1271 | | | | } | | | 1272 | | | | } | | | 1273 | | | | | | | 1274 | | | | if (cnt < 0) | | | 1275 | | | | cc = PvmBadParam;
| | | 1276 | | | | else if (!pvmrbuf) | | | 1277 | | | | cc = PvmNoBuf;
| | | 1278 | | | | else | | | 1279 | | | | cc = (pvmrbuf->m_codef->dec_int) (pvmrbuf, (void*)np, cnt, std, sizeof(int)); | | | 1280 | | | | | | | 1281 | | | | if (TEV_AMEXCL) {
| | | 1282 | | | | if (TEV_DO_TRACE(TEV_UPKINT,TEV_EVENT_EXIT)) {
| | | 1283 | | | | TEV_PACK_INT( TEV_DID_CC, TEV_DATA_SCALAR, &cc, 1, 1 );
| | | 1284 | | | | TEV_FIN;
| | | 1285 | | | | } | | | 1286 | | | | TEV_ENDEXCL;
| | | 1287 | | | | } | | | 1288 | | | | return (cc < 0 ? lpvmerr("pvm_upkint", cc) : PvmOk);
| | true | 1289 | | | | } |
| | 418 | | | | | 419 | | | | | 420 | | | | | 421 | | if ( marker > 0 ) | | | 422 | | { | | | 423 | | tsec = marker; | | | 424 | | | | | 425 | | TRC_PVMCKERR( pvm_upkint( &tusec, 1, 1 ),
| | | 426 | | "Event Parse Error", return( ecnt ) ); | | | 427 | | | | | 428 | | TRC_PVMCKERR( pvm_upkint( &tid, 1, 1 ),
| | | 429 | | "Event Parse Error", return( ecnt ) ); | | | 430 | | | | | 431 | | TRC_PVMCKERR( pvm_upkint( &eid, 1, 1 ),
| | | | | ... | | | 433 | | | | | 434 | | ecnt += trc_store_old_trace_event( ID, tsec, tusec, tid, eid ); | | | 435 | | | | | 436 | | return( ecnt ); | | | 437 | | } | | | 438 | | | | | 439 | | | | | 440 | | | | | 441 | | | | | 442 | | | | | 443 | | TT = trc_get_tevtask_tid( ID, src ); | | | 444 | | | | | 445 | | pvmd_tid = pvm_tidtohost( src ); | | | 446 | | | | | 447 | | if ( !pvmd_tid ) | | | 448 | | pvmd_tid = pvm_tidtohost( TRC_TID ); | | | 449 | | |
| | 451 | | | | | 452 | | | | | 453 | | | | | 454 | | omit = ( ID->trace_out == NULL
| | | 455 | | || ( TT != NULL && TRC_TASK_OMIT( TT ) ) )
| | | 456 | | ? TRC_TRUE : TRC_FALSE;
| | | 457 | | | | | 458 | | | | | 459 | | | | | 460 | | nest = 0; | | | 461 | | | | | 462 | | done = 0; | | | 463 | | | | | 464 | | do | | | 465 | | { | | | 466 | | switch ( marker ) | | | 467 | | { | | | 468 | | case TEV_MARK_EVENT_BUFFER:
| | | 469 | | { | | | 470 | | nest++; | | | 471 | | | | | 472 | | break; | | | 473 | | } | | | 474 | | | | | 475 | | case TEV_MARK_EVENT_BUFFER_END:
| | | 476 | | { | | | 477 | | if ( !(--nest) ) | | | 478 | | done++; | | | 479 | | | | | 480 | | break; | | | 481 | | } | | | 482 | | | | | 483 | | case TEV_MARK_DATA_ID:
| | | 484 | | { | | | 485 | | did_done = 0; | | | 486 | | | | | 487 | | do | | | 488 | | { | | | 489 | | TRC_PVMCKERR( pvm_upkint( &did_int, 1, 1 ),
| | | 490 | | "Data ID Message", return( ecnt ) ); | | | 491 | | | | | 492 | | if ( did_int != TEV_MARK_DATA_ID_END )
| | | 493 | | { | | | 494 | | TRC_PVMCKERR( pvm_upkstr( did ),
| | | 495 | | "Data ID Name", return( ecnt ) ); | | | 496 | | | | | 497 | | TRC_PVMCKERR( pvm_upkstr( diddesc ),
| | | 498 | | "Data ID Description", return( ecnt ) ); | | | 499 | | | | | 500 | | dptr = (TRC_DID) trc_lookup_trie( TRC_DID_TRIE, | | | 501 | | did ); | | | 502 | | | | | 503 | | if ( dptr == NULL
| | | 504 | | || dptr->id != did_int | | | 505 | | || strcmp( dptr->desc, diddesc ) ) | | | 506 | | { | | | 507 | | dptr = trc_create_did(); | | | 508 | | | | | 509 | | dptr->id = did_int; | | | 510 | | | | | 511 | | dptr->name = trc_copy_str( did ); | | | 512 | | | | | 513 | | dptr->desc = trc_copy_str( diddesc ); | | | 514 | | | | | 515 | | dptr->next = TRC_DID_LIST; | | | 516 | | | | | 517 | | TRC_DID_LIST = dptr; | | | 518 | | | | | 519 | | trc_add_to_trie( TRC_DID_TRIE, | | | 520 | | dptr->name, (void *) dptr ); | | | 521 | | } | | | 522 | | | | | 523 | | trc_set_didlist( H, dptr ); | | | 524 | | } | | | 525 | | | | | 526 | | else | | | 527 | | did_done++; | | | 528 | | } | | | 529 | | while ( !did_done ); | | | 530 | | | | | 531 | | if ( !nest ) | | | 532 | | done++; | | | 533 | | | | | 534 | | break; | | | 535 | | } | | | 536 | | | | | 537 | | case TEV_MARK_EVENT_DESC:
| | | 538 | | { |
| | 540 | | | | | 541 | | TD->refcount = 1; | | | 542 | | | | | 543 | | TRC_PVMCKERR( pvm_upkint( &eid, 1, 1 ),
| | | 544 | | "Event Descriptor ID", return( ecnt ) ); | | | 545 | | | | | 546 | | TD->eid = eid & ~( TEV_EVENT_ENTRY | TEV_EVENT_EXIT );
| | | 547 | | | | | 548 | | if ( eid & TEV_EVENT_ENTRY )
| | | 549 | | TD->entry_exit = TRC_ENTRY_TEV;
| | | 550 | | | | | 551 | | else if ( eid & TEV_EVENT_EXIT )
| | true | 552 | | TD->entry_exit = TRC_EXIT_TEV;
| | | 553 | | | | | 554 | | else | | | 555 | | TD->entry_exit = TRC_IGNORE_TEV;
| | | 556 | | | | | 557 | | TRC_PVMCKERR( pvm_upkstr( tmp ),
| | | 558 | | "Event Descriptor Name", return( ecnt ) ); | | | 559 | | | | | 560 | | TD->name = trc_copy_str( tmp ); | | | 561 | | | | | 562 | | desc_done = 0; | | | 563 | | | | | 564 | | do | | | 565 | | { | | | 566 | | TRC_PVMCKERR( pvm_upkint( &did_int, 1, 1 ),
| | | 567 | | "Semantic Data ID", return( ecnt ) ); | | | 568 | | | | | 569 | | if ( did_int != TEV_MARK_EVENT_DESC_END )
| | | 570 | | { | | | 571 | | if ( TD->ddesc == NULL )
| | | 572 | | DD = TD->ddesc = trc_create_datadesc(); | | | 573 | | | | | 574 | | else | | | 575 | | DD = DD->next = trc_create_datadesc(); | | | 576 | | | | | 577 | | if ( H->didlist == NULL )
| | | 578 | | { | | | 579 | | printf( | | | 580 | | "Warning: Missing DID List For Host %s\n", | | | 581 | | H->name ); | | | 582 | | } | | | 583 | | | | | 584 | | DD->did = trc_get_did( H, did_int ); | | | 585 | | | | | 586 | | if ( DD->did == NULL )
| | | 587 | | { | | | 588 | | printf( "Error: DID=%d Not Found\n", | | | 589 | | did_int ); | | | 590 | | | | | 591 | | trc_free_tevdesc( &TD ); | | | 592 | | | | | 593 | | return( ecnt ); | | | 594 | | } | | | 595 | | | | | 596 | | TRC_PVMCKERR( pvm_upkint( &dt, 1, 1 ),
| | | 597 | | "Data Type", return( ecnt ) ); | | | 598 | | | | | 599 | | DD->dt = dt & | | | 600 | | ~( TEV_DATA_SCALAR | TEV_DATA_ARRAY );
| | | 601 | | | | | 602 | | DD->array = dt & | | | 603 | | ( TEV_DATA_SCALAR | TEV_DATA_ARRAY );
| | | 604 | | | | | 605 | | if ( !trc_unpack_data_value( DD ) ) | | | 606 | | { | | | 607 | | trc_free_tevdesc( &TD ); | | | 608 | | | | | 609 | | return( ecnt ); | | | 610 | | } | | | 611 | | } | | | 612 | | | | | 613 | | else | | | 614 | | desc_done++; | | | 615 | | } | | | 616 | | while ( !desc_done ); | | | 617 | | | | | 618 | | dump_event = trc_add_tevdesc( ID, &TD, src, omit ); | | | 619 | | |
| | 621 | | | | | 622 | | if ( TD->dump ) | | | 623 | | trc_dump_tevdesc( ID, TD, src ); | | | 624 | | | | | 625 | | if ( dump_event ) | | | 626 | | trc_store_data_values( ID, TD, src, omit ); | | | 627 | | | | | 628 | | if ( !omit ) | | | 629 | | ecnt++; | | | 630 | | | | | 631 | | if ( !nest ) | | | 632 | | done++; | | | 633 | | | | | 634 | | break; | | | 635 | | } | | | 636 | | | | | 637 | | case TEV_MARK_USER_EVENT_RECORD:
| | | 638 | | { | | | 639 | | TD = trc_create_tevdesc(); | | | 640 | | | | | 641 | | TD->refcount = 1; | | | 642 | | | | | 643 | | TRC_PVMCKERR( pvm_upkint( &eid, 1, 1 ),
| | | 644 | | "Event Descriptor ID", return( ecnt ) ); | | | 645 | | | | | 646 | | TD->eid = eid & ~( TEV_EVENT_ENTRY | TEV_EVENT_EXIT );
| | | 647 | | | | | 648 | | if ( eid & TEV_EVENT_ENTRY )
| | | 649 | | TD->entry_exit = TRC_ENTRY_TEV;
| | | 650 | | | | | 651 | | else if ( eid & TEV_EVENT_EXIT )
| | | 652 | | TD->entry_exit = TRC_EXIT_TEV;
| | | 653 | | | | | 654 | | else | | | 655 | | TD->entry_exit = TRC_IGNORE_TEV;
| | | 656 | | | | | 657 | | TRC_PVMCKERR( pvm_upkstr( tmp ),
| | | 658 | | "Event Descriptor Name", return( ecnt ) ); | | | 659 | | | | | 660 | | TD->name = trc_copy_str( tmp ); | | | 661 | | | | | 662 | | | | | 663 | | | | | 664 | | DD = TD->ddesc = trc_create_datadesc(); | | | 665 | | | | | 666 | | DD->did = trc_get_did( (TRC_HOST) NULL, TEV_DID_TS );
| | | 667 | | | | | 668 | | DD->dt = TEV_DATA_INT;
| | | 669 | | DD->array = TEV_DATA_SCALAR;
| | | 670 | | | | | 671 | | if ( !trc_unpack_data_value( DD ) ) | | | 672 | | { | | | 673 | | trc_free_tevdesc( &TD ); | | | 674 | | | | | 675 | | return( ecnt ); | | | 676 | | } | | | 677 | | | | | 678 | | DD = DD->next = trc_create_datadesc(); | | | 679 | | | | | 680 | | DD->did = trc_get_did( (TRC_HOST) NULL, TEV_DID_TU );
| | | 681 | | | | | 682 | | DD->dt = TEV_DATA_INT;
| | | 683 | | DD->array = TEV_DATA_SCALAR;
| | | 684 | | | | | 685 | | if ( !trc_unpack_data_value( DD ) ) | | | 686 | | { | | | 687 | | trc_free_tevdesc( &TD ); | | | 688 | | | | | 689 | | return( ecnt ); | | | 690 | | } | | | 691 | | | | | 692 | | desc_done = 0; | | | 693 | | | | | 694 | | do | | | 695 | | { | | | 696 | | TRC_PVMCKERR( pvm_upkint( &dt, 1, 1 ),
| | | 697 | | "Data Type", return( ecnt ) ); | | | 698 | | | | | 699 | | if ( dt != TEV_MARK_USER_EVENT_RECORD_END )
| | | 700 | | { | | | 701 | | DD = DD->next = trc_create_datadesc(); | | | 702 | | | | | 703 | | DD->dt = dt & | | | 704 | | ~( TEV_DATA_SCALAR | TEV_DATA_ARRAY );
| | | 705 | | | | | 706 | | DD->array = dt & | | | 707 | | ( TEV_DATA_SCALAR | TEV_DATA_ARRAY );
| | | 708 | | | | | 709 | | if ( !trc_unpack_data_value( DD ) ) | | | 710 | | { | | | 711 | | trc_free_tevdesc( &TD ); | | | 712 | | | | | 713 | | return( ecnt ); | | | 714 | | } | | | 715 | | } | | | 716 | | | | | 717 | | else | | | 718 | | desc_done++; | | | 719 | | } | | | 720 | | while ( !desc_done ); | | | 721 | | | | | 722 | | dump_event = trc_add_tevdesc( ID, &TD, src, omit ); | | | 723 | | | | | 724 | | if ( TD->dump ) | | | 725 | | trc_dump_tevdesc( ID, TD, src ); | | | 726 | | | | | 727 | | if ( dump_event ) | | | 728 | | trc_store_data_values( ID, TD, src, omit ); | | | 729 | | | | | 730 | | if ( !omit ) | | | 731 | | ecnt++; | | | 732 | | | | | 733 | | if ( !nest ) | | | 734 | | done++; | | | 735 | | | | | 736 | | break; | | | 737 | | } | | | 738 | | | | | 739 | | case TEV_MARK_EVENT_RECORD:
| | | 740 | | { | | | 741 | | TRC_PVMCKERR( pvm_upkint( &eid, 1, 1 ),
| | | 742 | | "Event ID", return( ecnt ) ); | | | 743 | | | | | 744 | | if ( eid & TEV_EVENT_ENTRY )
| | | 745 | | entry_exit = TRC_ENTRY_TEV;
| | | 746 | | | | | 747 | | else if ( eid & TEV_EVENT_EXIT )
| | | 748 | | entry_exit = TRC_EXIT_TEV;
| | | 749 | | | | | 750 | | else | | | 751 | | entry_exit = TRC_IGNORE_TEV;
| | | 752 | | | | | 753 | | eid &= ~( TEV_EVENT_ENTRY | TEV_EVENT_EXIT );
| | | 754 | | | | | 755 | | TD = trc_get_tevdesc( TT, H, eid, entry_exit ); | | | 756 | | | | | 757 | | if ( TD != NULL )
| | | 758 | | { | | | 759 | | if ( trc_store_trace_event( ID, TD, src, omit ) ) | | | 760 | | ecnt++; | | | 761 | | } | | | 762 | | | | | 763 | | else | | | 764 | | { | | | 765 | | printf( | | | 766 | | "Error: Event ID %d(%d) %s T(%d/%x) H(%d/%x)\n", | | | 767 | | eid, entry_exit, "Descriptor Not Found", | | | 768 | | TT->tid, TT->tid, H->pvmd_tid, H->pvmd_tid ); | | | 769 | | } | | | 770 | | | | | 771 | | if ( !nest ) | | | 772 | | done++; | | | 773 | | | | | 774 | | break; | | | 775 | | } | | | 776 | | } | | | 777 | | | | | 778 | | if ( !done ) | | | 779 | | { | | | 780 | | TRC_PVMCKERR( pvm_upkint( &marker, 1, 1 ),
| | | 781 | | "Unpacking Trace Message", return( ecnt ) ); | | | 782 | | } | | | 783 | | } | | | 784 | | while ( !done ); |
|