Subversion Repositories HelenOS-historic

Rev

Rev 1582 | Rev 1695 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1582 Rev 1666
Line 475... Line 475...
475
int cmd_call0(cmd_arg_t *argv)
475
int cmd_call0(cmd_arg_t *argv)
476
{
476
{
477
    __address symaddr;
477
    __address symaddr;
478
    char *symbol;
478
    char *symbol;
479
    __native (*f)(void);
479
    __native (*f)(void);
-
 
480
#ifdef ia64
-
 
481
    struct {
-
 
482
        __native f;
-
 
483
        __native gp;
-
 
484
    }fptr;
-
 
485
#endif
480
 
486
 
481
    symaddr = get_symbol_addr(argv->buffer);
487
    symaddr = get_symbol_addr(argv->buffer);
482
    if (!symaddr)
488
    if (!symaddr)
483
        printf("Symbol %s not found.\n", argv->buffer);
489
        printf("Symbol %s not found.\n", argv->buffer);
484
    else if (symaddr == (__address) -1) {
490
    else if (symaddr == (__address) -1) {
485
        symtab_print_search(argv->buffer);
491
        symtab_print_search(argv->buffer);
486
        printf("Duplicate symbol, be more specific.\n");
492
        printf("Duplicate symbol, be more specific.\n");
487
    } else {
493
    } else {
488
        symbol = get_symtab_entry(symaddr);
494
        symbol = get_symtab_entry(symaddr);
489
        printf("Calling f(): %.*p: %s\n", sizeof(__address) * 2, symaddr, symbol);
495
        printf("Calling f(): %.*p: %s\n", sizeof(__address) * 2, symaddr, symbol);
-
 
496
#ifdef ia64
-
 
497
        fptr.f = symaddr;
-
 
498
        fptr.gp = ((__native *)cmd_call2)[1];
-
 
499
        f =  (__native (*)(void)) &fptr;
-
 
500
#else
490
        f =  (__native (*)(void)) symaddr;
501
        f =  (__native (*)(void)) symaddr;
-
 
502
#endif
491
        printf("Result: %#zx\n", f());
503
        printf("Result: %#zx\n", f());
492
    }
504
    }
493
   
505
   
494
    return 1;
506
    return 1;
495
}
507
}
Line 499... Line 511...
499
{
511
{
500
    __address symaddr;
512
    __address symaddr;
501
    char *symbol;
513
    char *symbol;
502
    __native (*f)(__native,...);
514
    __native (*f)(__native,...);
503
    __native arg1 = argv[1].intval;
515
    __native arg1 = argv[1].intval;
-
 
516
#ifdef ia64
-
 
517
    struct {
-
 
518
        __native f;
-
 
519
        __native gp;
-
 
520
    }fptr;
-
 
521
#endif
504
 
522
 
505
    symaddr = get_symbol_addr(argv->buffer);
523
    symaddr = get_symbol_addr(argv->buffer);
506
    if (!symaddr)
524
    if (!symaddr)
507
        printf("Symbol %s not found.\n", argv->buffer);
525
        printf("Symbol %s not found.\n", argv->buffer);
508
    else if (symaddr == (__address) -1) {
526
    else if (symaddr == (__address) -1) {
509
        symtab_print_search(argv->buffer);
527
        symtab_print_search(argv->buffer);
510
        printf("Duplicate symbol, be more specific.\n");
528
        printf("Duplicate symbol, be more specific.\n");
511
    } else {
529
    } else {
512
        symbol = get_symtab_entry(symaddr);
530
        symbol = get_symtab_entry(symaddr);
-
 
531
 
513
        printf("Calling f(0x%zX): %.*p: %s\n", arg1, sizeof(__address) * 2, symaddr, symbol);
532
        printf("Calling f(0x%zX): %.*p: %s\n", arg1, sizeof(__address) * 2, symaddr, symbol);
-
 
533
#ifdef ia64
-
 
534
        fptr.f = symaddr;
-
 
535
        fptr.gp = ((__native *)cmd_call2)[1];
-
 
536
        f =  (__native (*)(__native,...)) &fptr;
-
 
537
#else
514
        f =  (__native (*)(__native,...)) symaddr;
538
        f =  (__native (*)(__native,...)) symaddr;
-
 
539
#endif
515
        printf("Result: %#zx\n", f(arg1));
540
        printf("Result: %#zx\n", f(arg1));
516
    }
541
    }
517
   
542
   
518
    return 1;
543
    return 1;
519
}
544
}
Line 524... Line 549...
524
    __address symaddr;
549
    __address symaddr;
525
    char *symbol;
550
    char *symbol;
526
    __native (*f)(__native,__native,...);
551
    __native (*f)(__native,__native,...);
527
    __native arg1 = argv[1].intval;
552
    __native arg1 = argv[1].intval;
528
    __native arg2 = argv[2].intval;
553
    __native arg2 = argv[2].intval;
-
 
554
#ifdef ia64
-
 
555
    struct {
-
 
556
        __native f;
-
 
557
        __native gp;
-
 
558
    }fptr;
-
 
559
#endif
529
 
560
 
530
    symaddr = get_symbol_addr(argv->buffer);
561
    symaddr = get_symbol_addr(argv->buffer);
531
    if (!symaddr)
562
    if (!symaddr)
532
        printf("Symbol %s not found.\n", argv->buffer);
563
        printf("Symbol %s not found.\n", argv->buffer);
533
    else if (symaddr == (__address) -1) {
564
    else if (symaddr == (__address) -1) {
Line 535... Line 566...
535
        printf("Duplicate symbol, be more specific.\n");
566
        printf("Duplicate symbol, be more specific.\n");
536
    } else {
567
    } else {
537
        symbol = get_symtab_entry(symaddr);
568
        symbol = get_symtab_entry(symaddr);
538
        printf("Calling f(0x%zx,0x%zx): %.*p: %s\n",
569
        printf("Calling f(0x%zx,0x%zx): %.*p: %s\n",
539
               arg1, arg2, sizeof(__address) * 2, symaddr, symbol);
570
               arg1, arg2, sizeof(__address) * 2, symaddr, symbol);
-
 
571
#ifdef ia64
-
 
572
        fptr.f = symaddr;
-
 
573
        fptr.gp = ((__native *)cmd_call2)[1];
-
 
574
        f =  (__native (*)(__native,__native,...)) &fptr;
-
 
575
#else
540
        f =  (__native (*)(__native,__native,...)) symaddr;
576
        f =  (__native (*)(__native,__native,...)) symaddr;
-
 
577
#endif
541
        printf("Result: %#zx\n", f(arg1, arg2));
578
        printf("Result: %#zx\n", f(arg1, arg2));
542
    }
579
    }
543
   
580
   
544
    return 1;
581
    return 1;
545
}
582
}
Line 551... Line 588...
551
    char *symbol;
588
    char *symbol;
552
    __native (*f)(__native,__native,__native,...);
589
    __native (*f)(__native,__native,__native,...);
553
    __native arg1 = argv[1].intval;
590
    __native arg1 = argv[1].intval;
554
    __native arg2 = argv[2].intval;
591
    __native arg2 = argv[2].intval;
555
    __native arg3 = argv[3].intval;
592
    __native arg3 = argv[3].intval;
-
 
593
#ifdef ia64
-
 
594
    struct {
-
 
595
        __native f;
-
 
596
        __native gp;
-
 
597
    }fptr;
-
 
598
#endif
556
 
599
 
557
    symaddr = get_symbol_addr(argv->buffer);
600
    symaddr = get_symbol_addr(argv->buffer);
558
    if (!symaddr)
601
    if (!symaddr)
559
        printf("Symbol %s not found.\n", argv->buffer);
602
        printf("Symbol %s not found.\n", argv->buffer);
560
    else if (symaddr == (__address) -1) {
603
    else if (symaddr == (__address) -1) {
Line 562... Line 605...
562
        printf("Duplicate symbol, be more specific.\n");
605
        printf("Duplicate symbol, be more specific.\n");
563
    } else {
606
    } else {
564
        symbol = get_symtab_entry(symaddr);
607
        symbol = get_symtab_entry(symaddr);
565
        printf("Calling f(0x%zx,0x%zx, 0x%zx): %.*p: %s\n",
608
        printf("Calling f(0x%zx,0x%zx, 0x%zx): %.*p: %s\n",
566
               arg1, arg2, arg3, sizeof(__address) * 2, symaddr, symbol);
609
               arg1, arg2, arg3, sizeof(__address) * 2, symaddr, symbol);
-
 
610
#ifdef ia64
-
 
611
        fptr.f = symaddr;
-
 
612
        fptr.gp = ((__native *)cmd_call2)[1];
-
 
613
        f =  (__native (*)(__native,__native,__native,...)) &fptr;
-
 
614
#else
567
        f =  (__native (*)(__native,__native,__native,...)) symaddr;
615
        f =  (__native (*)(__native,__native,__native,...)) symaddr;
-
 
616
#endif
568
        printf("Result: %#zx\n", f(arg1, arg2, arg3));
617
        printf("Result: %#zx\n", f(arg1, arg2, arg3));
569
    }
618
    }
570
   
619
   
571
    return 1;
620
    return 1;
572
}
621
}