Subversion Repositories HelenOS-historic

Rev

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

Rev 759 Rev 775
Line 49... Line 49...
49
#include <mm/tlb.h>
49
#include <mm/tlb.h>
50
#include <arch/mm/tlb.h>
50
#include <arch/mm/tlb.h>
51
#include <mm/frame.h>
51
#include <mm/frame.h>
52
#include <main/version.h>
52
#include <main/version.h>
53
#include <mm/slab.h>
53
#include <mm/slab.h>
-
 
54
#include <proc/scheduler.h>
54
 
55
 
55
/** Data and methods for 'help' command. */
56
/** Data and methods for 'help' command. */
56
static int cmd_help(cmd_arg_t *argv);
57
static int cmd_help(cmd_arg_t *argv);
57
static cmd_info_t help_info = {
58
static cmd_info_t help_info = {
58
    .name = "help",
59
    .name = "help",
Line 242... Line 243...
242
    .argc = 0,
243
    .argc = 0,
243
    .argv = NULL
244
    .argv = NULL
244
};
245
};
245
 
246
 
246
 
247
 
-
 
248
static int cmd_sched(cmd_arg_t *argv);
-
 
249
static cmd_info_t sched_info = {
-
 
250
    .name = "scheduler",
-
 
251
    .description = "List all scheduler information",
-
 
252
    .func = cmd_sched,
-
 
253
    .argc = 0
-
 
254
};
-
 
255
 
247
static int cmd_slabs(cmd_arg_t *argv);
256
static int cmd_slabs(cmd_arg_t *argv);
248
static cmd_info_t slabs_info = {
257
static cmd_info_t slabs_info = {
249
    .name = "slabs",
258
    .name = "slabs",
250
    .description = "List SLAB caches.",
259
    .description = "List SLAB caches.",
251
    .func = cmd_slabs,
260
    .func = cmd_slabs,
Line 295... Line 304...
295
    .func = cmd_version,
304
    .func = cmd_version,
296
    .argc = 0,
305
    .argc = 0,
297
    .argv = NULL
306
    .argv = NULL
298
};
307
};
299
 
308
 
-
 
309
static cmd_info_t *basic_commands[] = {
-
 
310
    &call0_info,
-
 
311
    &call1_info,
-
 
312
    &call2_info,
-
 
313
    &call3_info,
-
 
314
    &cpus_info,
-
 
315
    &desc_info,
-
 
316
    &exit_info,
-
 
317
    &halt_info,
-
 
318
    &help_info,
-
 
319
    &set4_info,
-
 
320
    &slabs_info,
-
 
321
    &symaddr_info,
-
 
322
    &sched_info,
-
 
323
    &tlb_info,
-
 
324
    &version_info,
-
 
325
    &zones_info,
-
 
326
    &zone_info,
-
 
327
    NULL
300
 
328
};
301
 
329
 
302
 
330
 
303
/** Initialize command info structure.
331
/** Initialize command info structure.
304
 *
332
 *
305
 * @param cmd Command info structure.
333
 * @param cmd Command info structure.
Line 312... Line 340...
312
}
340
}
313
 
341
 
314
/** Initialize and register commands. */
342
/** Initialize and register commands. */
315
void cmd_init(void)
343
void cmd_init(void)
316
{
344
{
317
    cmd_initialize(&help_info);
-
 
318
    if (!cmd_register(&help_info))
-
 
319
        panic("could not register command %s\n", help_info.name);
-
 
320
 
-
 
321
    cmd_initialize(&desc_info);
-
 
322
    if (!cmd_register(&desc_info))
-
 
323
        panic("could not register command %s\n", desc_info.name);
-
 
324
 
-
 
325
    cmd_initialize(&exit_info);
-
 
326
    if (!cmd_register(&exit_info))
-
 
327
        panic("could not register command %s\n", exit_info.name);
-
 
328
   
-
 
329
    cmd_initialize(&symaddr_info);
-
 
330
    if (!cmd_register(&symaddr_info))
-
 
331
        panic("could not register command %s\n", symaddr_info.name);
-
 
332
 
-
 
333
    cmd_initialize(&call0_info);
-
 
334
    if (!cmd_register(&call0_info))
-
 
335
        panic("could not register command %s\n", call0_info.name);
-
 
336
 
-
 
337
    cmd_initialize(&call1_info);
-
 
338
    if (!cmd_register(&call1_info))
-
 
339
        panic("could not register command %s\n", call1_info.name);
-
 
340
 
-
 
341
    cmd_initialize(&call2_info);
-
 
342
    if (!cmd_register(&call2_info))
-
 
343
        panic("could not register command %s\n", call2_info.name);
-
 
344
 
-
 
345
    cmd_initialize(&call3_info);
-
 
346
    if (!cmd_register(&call3_info))
-
 
347
        panic("could not register command %s\n", call3_info.name);
-
 
348
 
-
 
349
    cmd_initialize(&set4_info);
-
 
350
    if (!cmd_register(&set4_info))
-
 
351
        panic("could not register command %s\n", set4_info.name);
-
 
352
   
-
 
353
    cmd_initialize(&halt_info);
-
 
354
    if (!cmd_register(&halt_info))
-
 
355
        panic("could not register command %s\n", halt_info.name);
-
 
356
 
-
 
357
    cmd_initialize(&tlb_info);
-
 
358
    if (!cmd_register(&tlb_info))
-
 
359
        panic("could not register command %s\n", tlb_info.name);
-
 
360
 
-
 
361
    cmd_initialize(&zones_info);
-
 
362
    if (!cmd_register(&zones_info))
-
 
363
        panic("could not register command %s\n", zones_info.name);
-
 
364
 
-
 
365
    cmd_initialize(&slabs_info);
-
 
366
    if (!cmd_register(&slabs_info))
-
 
367
        panic("could not register command %s\n", slabs_info.name);
-
 
368
 
-
 
369
    cmd_initialize(&zone_info);
-
 
370
    if (!cmd_register(&zone_info))
-
 
371
        panic("could not register command %s\n", zone_info.name);
-
 
372
 
-
 
373
    cmd_initialize(&cpus_info);
-
 
374
    if (!cmd_register(&cpus_info))
-
 
375
        panic("could not register command %s\n", cpus_info.name);
-
 
376
       
-
 
377
    cmd_initialize(&version_info);
-
 
378
    if (!cmd_register(&version_info))
-
 
379
        panic("could not register command %s\n", version_info.name);
-
 
380
       
-
 
381
       
345
    int i;
382
 
346
 
-
 
347
    for (i=0;basic_commands[i]; i++) {
-
 
348
        cmd_initialize(basic_commands[i]);
-
 
349
        if (!cmd_register(basic_commands[i]))
-
 
350
            panic("could not register command %s\n",
-
 
351
                  basic_commands[i]->name);
-
 
352
    }
383
}
353
}
384
 
354
 
385
 
355
 
386
/** List supported commands.
356
/** List supported commands.
387
 *
357
 *
Line 479... Line 449...
479
/** Call function with one parameter */
449
/** Call function with one parameter */
480
int cmd_call1(cmd_arg_t *argv)
450
int cmd_call1(cmd_arg_t *argv)
481
{
451
{
482
    __address symaddr;
452
    __address symaddr;
483
    char *symbol;
453
    char *symbol;
484
    __native (*f)(__native);
454
    __native (*f)(__native,...);
485
    __native arg1 = argv[1].intval;
455
    __native arg1 = argv[1].intval;
486
 
456
 
487
    symaddr = get_symbol_addr(argv->buffer);
457
    symaddr = get_symbol_addr(argv->buffer);
488
    if (!symaddr)
458
    if (!symaddr)
489
        printf("Symbol %s not found.\n", argv->buffer);
459
        printf("Symbol %s not found.\n", argv->buffer);
Line 491... Line 461...
491
        symtab_print_search(argv->buffer);
461
        symtab_print_search(argv->buffer);
492
        printf("Duplicate symbol, be more specific.\n");
462
        printf("Duplicate symbol, be more specific.\n");
493
    } else {
463
    } else {
494
        symbol = get_symtab_entry(symaddr);
464
        symbol = get_symtab_entry(symaddr);
495
        printf("Calling f(0x%x): 0x%p: %s\n", arg1, symaddr, symbol);
465
        printf("Calling f(0x%x): 0x%p: %s\n", arg1, symaddr, symbol);
496
        f =  (__native (*)(__native)) symaddr;
466
        f =  (__native (*)(__native,...)) symaddr;
497
        printf("Result: 0x%p\n", f(arg1));
467
        printf("Result: 0x%p\n", f(arg1));
498
    }
468
    }
499
   
469
   
500
    return 1;
470
    return 1;
501
}
471
}
Line 503... Line 473...
503
/** Call function with two parameters */
473
/** Call function with two parameters */
504
int cmd_call2(cmd_arg_t *argv)
474
int cmd_call2(cmd_arg_t *argv)
505
{
475
{
506
    __address symaddr;
476
    __address symaddr;
507
    char *symbol;
477
    char *symbol;
508
    __native (*f)(__native,__native);
478
    __native (*f)(__native,__native,...);
509
    __native arg1 = argv[1].intval;
479
    __native arg1 = argv[1].intval;
510
    __native arg2 = argv[2].intval;
480
    __native arg2 = argv[2].intval;
511
 
481
 
512
    symaddr = get_symbol_addr(argv->buffer);
482
    symaddr = get_symbol_addr(argv->buffer);
513
    if (!symaddr)
483
    if (!symaddr)
Line 517... Line 487...
517
        printf("Duplicate symbol, be more specific.\n");
487
        printf("Duplicate symbol, be more specific.\n");
518
    } else {
488
    } else {
519
        symbol = get_symtab_entry(symaddr);
489
        symbol = get_symtab_entry(symaddr);
520
        printf("Calling f(0x%x,0x%x): 0x%p: %s\n",
490
        printf("Calling f(0x%x,0x%x): 0x%p: %s\n",
521
               arg1, arg2, symaddr, symbol);
491
               arg1, arg2, symaddr, symbol);
522
        f =  (__native (*)(__native,__native)) symaddr;
492
        f =  (__native (*)(__native,__native,...)) symaddr;
523
        printf("Result: 0x%p\n", f(arg1, arg2));
493
        printf("Result: 0x%p\n", f(arg1, arg2));
524
    }
494
    }
525
   
495
   
526
    return 1;
496
    return 1;
527
}
497
}
Line 529... Line 499...
529
/** Call function with three parameters */
499
/** Call function with three parameters */
530
int cmd_call3(cmd_arg_t *argv)
500
int cmd_call3(cmd_arg_t *argv)
531
{
501
{
532
    __address symaddr;
502
    __address symaddr;
533
    char *symbol;
503
    char *symbol;
534
    __native (*f)(__native,__native,__native);
504
    __native (*f)(__native,__native,__native,...);
535
    __native arg1 = argv[1].intval;
505
    __native arg1 = argv[1].intval;
536
    __native arg2 = argv[2].intval;
506
    __native arg2 = argv[2].intval;
537
    __native arg3 = argv[3].intval;
507
    __native arg3 = argv[3].intval;
538
 
508
 
539
    symaddr = get_symbol_addr(argv->buffer);
509
    symaddr = get_symbol_addr(argv->buffer);
Line 544... Line 514...
544
        printf("Duplicate symbol, be more specific.\n");
514
        printf("Duplicate symbol, be more specific.\n");
545
    } else {
515
    } else {
546
        symbol = get_symtab_entry(symaddr);
516
        symbol = get_symtab_entry(symaddr);
547
        printf("Calling f(0x%x,0x%x, 0x%x): 0x%p: %s\n",
517
        printf("Calling f(0x%x,0x%x, 0x%x): 0x%p: %s\n",
548
               arg1, arg2, arg3, symaddr, symbol);
518
               arg1, arg2, arg3, symaddr, symbol);
549
        f =  (__native (*)(__native,__native,__native)) symaddr;
519
        f =  (__native (*)(__native,__native,__native,...)) symaddr;
550
        printf("Result: 0x%p\n", f(arg1, arg2, arg3));
520
        printf("Result: 0x%p\n", f(arg1, arg2, arg3));
551
    }
521
    }
552
   
522
   
553
    return 1;
523
    return 1;
554
}
524
}
Line 625... Line 595...
625
int cmd_slabs(cmd_arg_t * argv) {
595
int cmd_slabs(cmd_arg_t * argv) {
626
    slab_print_list();
596
    slab_print_list();
627
    return 1;
597
    return 1;
628
}
598
}
629
 
599
 
-
 
600
/** Command for listings Thread information
-
 
601
 *
-
 
602
 * @param argv Ignores
-
 
603
 *
-
 
604
 * @return Always 1
-
 
605
 */
-
 
606
int cmd_sched(cmd_arg_t * argv) {
-
 
607
    sched_print_list();
-
 
608
    return 1;
-
 
609
}
-
 
610
 
630
/** Command for listing memory zones
611
/** Command for listing memory zones
631
 *
612
 *
632
 * @param argv Ignored
613
 * @param argv Ignored
633
 *
614
 *
634
 * return Always 1
615
 * return Always 1