@@ -55,21 +55,6 @@ static const char *validate_register(const struct arc_reg_desc * const reg, bool
55
55
return NULL ;
56
56
}
57
57
58
- /* Helper function to read the name of register type or register from
59
- * configure files */
60
- static int jim_arc_read_reg_name_field (struct jim_getopt_info * goi ,
61
- const char * * name , int * name_len )
62
- {
63
- int e = JIM_OK ;
64
-
65
- if (!goi -> argc ) {
66
- Jim_WrongNumArgs (goi -> interp , goi -> argc , goi -> argv , "-name <name> ..." );
67
- return JIM_ERR ;
68
- }
69
- e = jim_getopt_string (goi , name , name_len );
70
- return e ;
71
- }
72
-
73
58
static COMMAND_HELPER (arc_handle_add_reg_type_flags_ops , struct arc_reg_data_type * type )
74
59
{
75
60
struct reg_data_type_flags_field * fields = type -> reg_type_flags_field ;
@@ -528,7 +513,7 @@ enum opts_add_reg {
528
513
CFG_ADD_REG_GENERAL ,
529
514
};
530
515
531
- static struct jim_nvp opts_nvp_add_reg [] = {
516
+ static const struct nvp opts_nvp_add_reg [] = {
532
517
{ .name = "-name" , .value = CFG_ADD_REG_NAME },
533
518
{ .name = "-num" , .value = CFG_ADD_REG_ARCH_NUM },
534
519
{ .name = "-core" , .value = CFG_ADD_REG_IS_CORE },
@@ -546,155 +531,133 @@ void free_reg_desc(struct arc_reg_desc *r)
546
531
free (r );
547
532
}
548
533
549
- static int jim_arc_add_reg ( Jim_Interp * interp , int argc , Jim_Obj * const * argv )
534
+ static COMMAND_HELPER ( arc_handle_add_reg_do , struct arc_reg_desc * reg )
550
535
{
551
- struct jim_getopt_info goi ;
552
- JIM_CHECK_RETVAL (jim_getopt_setup (& goi , interp , argc - 1 , argv + 1 ));
553
-
554
- struct arc_reg_desc * reg = calloc (1 , sizeof (* reg ));
555
- if (!reg ) {
556
- Jim_SetResultFormatted (goi .interp , "Failed to allocate memory." );
557
- return JIM_ERR ;
558
- }
559
-
560
536
/* There is no architecture number that we could treat as invalid, so
561
537
* separate variable required to ensure that arch num has been set. */
562
538
bool arch_num_set = false;
563
539
const char * type_name = "int" ; /* Default type */
564
- int type_name_len = strlen (type_name );
565
- int e = ERROR_OK ;
566
540
567
541
/* At least we need to specify 4 parameters: name, number and gdb_feature,
568
542
* which means there should be 6 arguments. Also there can be additional parameters
569
543
* "-type <type>", "-g" and "-core" or "-bcr" which makes maximum 10 parameters. */
570
- if (goi .argc < 6 || goi .argc > 10 ) {
571
- free_reg_desc (reg );
572
- Jim_SetResultFormatted (goi .interp ,
573
- "Should be at least 6 arguments and not greater than 10: "
574
- " -name <name> -num <num> -feature <gdb_feature> "
575
- " [-type <type_name>] [-core|-bcr] [-g]." );
576
- return JIM_ERR ;
577
- }
544
+ if (CMD_ARGC < 6 || CMD_ARGC > 10 )
545
+ return ERROR_COMMAND_SYNTAX_ERROR ;
578
546
579
547
/* Parse options. */
580
- while (goi .argc > 0 ) {
581
- struct jim_nvp * n ;
582
- e = jim_getopt_nvp (& goi , opts_nvp_add_reg , & n );
583
- if (e != JIM_OK ) {
584
- jim_getopt_nvp_unknown (& goi , opts_nvp_add_reg , 0 );
585
- free_reg_desc (reg );
586
- return e ;
587
- }
588
-
548
+ while (CMD_ARGC ) {
549
+ const struct nvp * n = nvp_name2value (opts_nvp_add_reg , CMD_ARGV [0 ]);
550
+ CMD_ARGC -- ;
551
+ CMD_ARGV ++ ;
589
552
switch (n -> value ) {
590
- case CFG_ADD_REG_NAME :
591
- {
592
- const char * reg_name = NULL ;
593
- int reg_name_len = 0 ;
594
-
595
- e = jim_arc_read_reg_name_field (& goi , & reg_name , & reg_name_len );
596
- if (e != JIM_OK ) {
597
- Jim_SetResultFormatted (goi .interp , "Unable to read register name." );
598
- free_reg_desc (reg );
599
- return e ;
600
- }
601
-
602
- reg -> name = strndup (reg_name , reg_name_len );
603
- break ;
604
- }
605
- case CFG_ADD_REG_IS_CORE :
606
- reg -> is_core = true;
607
- break ;
608
- case CFG_ADD_REG_IS_BCR :
609
- reg -> is_bcr = true;
610
- break ;
611
- case CFG_ADD_REG_ARCH_NUM :
612
- {
613
- jim_wide archnum ;
614
-
615
- if (!goi .argc ) {
616
- free_reg_desc (reg );
617
- Jim_WrongNumArgs (interp , goi .argc , goi .argv , "-num <int> ..." );
618
- return JIM_ERR ;
619
- }
620
-
621
- e = jim_getopt_wide (& goi , & archnum );
622
- if (e != JIM_OK ) {
623
- free_reg_desc (reg );
624
- return e ;
625
- }
626
-
627
- reg -> arch_num = archnum ;
628
- arch_num_set = true;
629
- break ;
553
+ case CFG_ADD_REG_NAME :
554
+ if (!CMD_ARGC )
555
+ return ERROR_COMMAND_ARGUMENT_INVALID ;
556
+
557
+ reg -> name = strdup (CMD_ARGV [0 ]);
558
+ if (!reg -> name ) {
559
+ LOG_ERROR ("Out of memory" );
560
+ return ERROR_FAIL ;
630
561
}
631
- case CFG_ADD_REG_GDB_FEATURE :
632
- {
633
- const char * feature = NULL ;
634
- int feature_len = 0 ;
635
-
636
- e = jim_arc_read_reg_name_field (& goi , & feature , & feature_len );
637
- if (e != JIM_OK ) {
638
- Jim_SetResultFormatted (goi .interp , "Unable to read gdb_feature." );
639
- free_reg_desc (reg );
640
- return e ;
641
- }
642
-
643
- reg -> gdb_xml_feature = strndup (feature , feature_len );
644
- break ;
562
+
563
+ CMD_ARGC -- ;
564
+ CMD_ARGV ++ ;
565
+ break ;
566
+
567
+ case CFG_ADD_REG_IS_CORE :
568
+ reg -> is_core = true;
569
+ break ;
570
+
571
+ case CFG_ADD_REG_IS_BCR :
572
+ reg -> is_bcr = true;
573
+ break ;
574
+
575
+ case CFG_ADD_REG_ARCH_NUM :
576
+ if (!CMD_ARGC )
577
+ return ERROR_COMMAND_ARGUMENT_INVALID ;
578
+
579
+ COMMAND_PARSE_NUMBER (u32 , CMD_ARGV [0 ], reg -> arch_num );
580
+ CMD_ARGC -- ;
581
+ CMD_ARGV ++ ;
582
+
583
+ arch_num_set = true;
584
+ break ;
585
+
586
+ case CFG_ADD_REG_GDB_FEATURE :
587
+ if (!CMD_ARGC )
588
+ return ERROR_COMMAND_ARGUMENT_INVALID ;
589
+
590
+ reg -> gdb_xml_feature = strdup (CMD_ARGV [0 ]);
591
+ if (!reg -> gdb_xml_feature ) {
592
+ LOG_ERROR ("Out of memory" );
593
+ return ERROR_FAIL ;
645
594
}
646
- case CFG_ADD_REG_TYPE :
647
- e = jim_arc_read_reg_name_field (& goi , & type_name , & type_name_len );
648
- if (e != JIM_OK ) {
649
- Jim_SetResultFormatted (goi .interp , "Unable to read register type." );
650
- free_reg_desc (reg );
651
- return e ;
652
- }
653
-
654
- break ;
655
- case CFG_ADD_REG_GENERAL :
656
- reg -> is_general = true;
657
- break ;
658
- default :
659
- LOG_DEBUG ("Error: Unknown parameter" );
660
- free_reg_desc (reg );
661
- return JIM_ERR ;
595
+
596
+ CMD_ARGC -- ;
597
+ CMD_ARGV ++ ;
598
+ break ;
599
+
600
+ case CFG_ADD_REG_TYPE :
601
+ if (!CMD_ARGC )
602
+ return ERROR_COMMAND_ARGUMENT_INVALID ;
603
+
604
+ type_name = CMD_ARGV [0 ];
605
+ CMD_ARGC -- ;
606
+ CMD_ARGV ++ ;
607
+ break ;
608
+
609
+ case CFG_ADD_REG_GENERAL :
610
+ reg -> is_general = true;
611
+ break ;
612
+
613
+ default :
614
+ nvp_unknown_command_print (CMD , opts_nvp_add_reg , NULL , CMD_ARGV [-1 ]);
615
+ return ERROR_COMMAND_ARGUMENT_INVALID ;
662
616
}
663
617
}
664
618
665
619
/* Check that required fields are set */
666
620
const char * const errmsg = validate_register (reg , arch_num_set );
667
621
if (errmsg ) {
668
- Jim_SetResultFormatted (goi .interp , errmsg );
669
- free_reg_desc (reg );
670
- return JIM_ERR ;
622
+ command_print (CMD , "%s" , errmsg );
623
+ return ERROR_COMMAND_ARGUMENT_INVALID ;
671
624
}
672
625
673
626
/* Add new register */
674
- struct command_context * ctx ;
675
- struct target * target ;
676
-
677
- ctx = current_command_context (interp );
678
- assert (ctx );
679
- target = get_current_target (ctx );
627
+ struct target * target = get_current_target (CMD_CTX );
680
628
if (!target ) {
681
- Jim_SetResultFormatted (goi .interp , "No current target" );
682
- free_reg_desc (reg );
683
- return JIM_ERR ;
629
+ command_print (CMD , "No current target" );
630
+ return ERROR_FAIL ;
684
631
}
685
632
686
633
reg -> target = target ;
687
634
688
- e = arc_reg_add (target , reg , type_name , type_name_len );
689
- if (e == ERROR_ARC_REGTYPE_NOT_FOUND ) {
690
- Jim_SetResultFormatted ( goi . interp ,
635
+ int retval = arc_reg_add (target , reg , type_name , strlen ( type_name ) );
636
+ if (retval == ERROR_ARC_REGTYPE_NOT_FOUND ) {
637
+ command_print ( CMD ,
691
638
"Cannot find type `%s' for register `%s'." ,
692
639
type_name , reg -> name );
640
+ return retval ;
641
+ }
642
+
643
+ return ERROR_OK ;
644
+ }
645
+
646
+ COMMAND_HANDLER (arc_handle_add_reg )
647
+ {
648
+ struct arc_reg_desc * reg = calloc (1 , sizeof (* reg ));
649
+ if (!reg ) {
650
+ LOG_ERROR ("Out of memory" );
651
+ return ERROR_FAIL ;
652
+ }
653
+
654
+ int retval = CALL_COMMAND_HANDLER (arc_handle_add_reg_do , reg );
655
+ if (retval != ERROR_OK ) {
693
656
free_reg_desc (reg );
694
- return JIM_ERR ;
657
+ return retval ;
695
658
}
696
659
697
- return e ;
660
+ return ERROR_OK ;
698
661
}
699
662
700
663
/* arc set-reg-exists ($reg_name)+
@@ -887,7 +850,7 @@ static const struct command_registration arc_core_command_handlers[] = {
887
850
},
888
851
{
889
852
.name = "add-reg" ,
890
- .jim_handler = jim_arc_add_reg ,
853
+ .handler = arc_handle_add_reg ,
891
854
.mode = COMMAND_CONFIG ,
892
855
.usage = "-name <string> -num <int> -feature <string> [-gdbnum <int>] "
893
856
"[-core|-bcr] [-type <type_name>] [-g]" ,
0 commit comments