summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/src/arm/disassembler/arm_disasm.cpp52
-rw-r--r--src/core/src/arm/disassembler/arm_disasm.h2
2 files changed, 27 insertions, 27 deletions
diff --git a/src/core/src/arm/disassembler/arm_disasm.cpp b/src/core/src/arm/disassembler/arm_disasm.cpp
index 82571a681..82ca5ee8d 100644
--- a/src/core/src/arm/disassembler/arm_disasm.cpp
+++ b/src/core/src/arm/disassembler/arm_disasm.cpp
@@ -134,7 +134,7 @@ static const char* cond_to_str(int cond) {
134 return cond_names[cond]; 134 return cond_names[cond];
135} 135}
136 136
137char *Arm::disasm(uint32_t addr, uint32_t insn, char *result) 137char *ARM_Disasm::disasm(uint32_t addr, uint32_t insn, char *result)
138{ 138{
139 static char buf[80]; 139 static char buf[80];
140 char *ptr; 140 char *ptr;
@@ -233,7 +233,7 @@ char *Arm::disasm(uint32_t addr, uint32_t insn, char *result)
233 return NULL; 233 return NULL;
234} 234}
235 235
236char *Arm::disasm_alu(Opcode opcode, uint32_t insn, char *ptr) 236char *ARM_Disasm::disasm_alu(Opcode opcode, uint32_t insn, char *ptr)
237{ 237{
238 static const uint8_t kNoOperand1 = 1; 238 static const uint8_t kNoOperand1 = 1;
239 static const uint8_t kNoDest = 2; 239 static const uint8_t kNoDest = 2;
@@ -325,7 +325,7 @@ char *Arm::disasm_alu(Opcode opcode, uint32_t insn, char *ptr)
325 return ptr; 325 return ptr;
326} 326}
327 327
328char *Arm::disasm_branch(uint32_t addr, Opcode opcode, uint32_t insn, char *ptr) 328char *ARM_Disasm::disasm_branch(uint32_t addr, Opcode opcode, uint32_t insn, char *ptr)
329{ 329{
330 uint8_t cond = (insn >> 28) & 0xf; 330 uint8_t cond = (insn >> 28) & 0xf;
331 uint32_t offset = insn & 0xffffff; 331 uint32_t offset = insn & 0xffffff;
@@ -342,7 +342,7 @@ char *Arm::disasm_branch(uint32_t addr, Opcode opcode, uint32_t insn, char *ptr)
342 return ptr; 342 return ptr;
343} 343}
344 344
345char *Arm::disasm_bx(uint32_t insn, char *ptr) 345char *ARM_Disasm::disasm_bx(uint32_t insn, char *ptr)
346{ 346{
347 uint8_t cond = (insn >> 28) & 0xf; 347 uint8_t cond = (insn >> 28) & 0xf;
348 uint8_t rn = insn & 0xf; 348 uint8_t rn = insn & 0xf;
@@ -350,14 +350,14 @@ char *Arm::disasm_bx(uint32_t insn, char *ptr)
350 return ptr; 350 return ptr;
351} 351}
352 352
353char *Arm::disasm_bkpt(uint32_t insn, char *ptr) 353char *ARM_Disasm::disasm_bkpt(uint32_t insn, char *ptr)
354{ 354{
355 uint32_t immed = (((insn >> 8) & 0xfff) << 4) | (insn & 0xf); 355 uint32_t immed = (((insn >> 8) & 0xfff) << 4) | (insn & 0xf);
356 sprintf(ptr, "bkpt\t#%d", immed); 356 sprintf(ptr, "bkpt\t#%d", immed);
357 return ptr; 357 return ptr;
358} 358}
359 359
360char *Arm::disasm_clz(uint32_t insn, char *ptr) 360char *ARM_Disasm::disasm_clz(uint32_t insn, char *ptr)
361{ 361{
362 uint8_t cond = (insn >> 28) & 0xf; 362 uint8_t cond = (insn >> 28) & 0xf;
363 uint8_t rd = (insn >> 12) & 0xf; 363 uint8_t rd = (insn >> 12) & 0xf;
@@ -366,7 +366,7 @@ char *Arm::disasm_clz(uint32_t insn, char *ptr)
366 return ptr; 366 return ptr;
367} 367}
368 368
369char *Arm::disasm_memblock(Opcode opcode, uint32_t insn, char *ptr) 369char *ARM_Disasm::disasm_memblock(Opcode opcode, uint32_t insn, char *ptr)
370{ 370{
371 char tmp_reg[10], tmp_list[80]; 371 char tmp_reg[10], tmp_list[80];
372 372
@@ -418,7 +418,7 @@ char *Arm::disasm_memblock(Opcode opcode, uint32_t insn, char *ptr)
418 return ptr; 418 return ptr;
419} 419}
420 420
421char *Arm::disasm_mem(uint32_t insn, char *ptr) 421char *ARM_Disasm::disasm_mem(uint32_t insn, char *ptr)
422{ 422{
423 uint8_t cond = (insn >> 28) & 0xf; 423 uint8_t cond = (insn >> 28) & 0xf;
424 uint8_t is_reg = (insn >> 25) & 0x1; 424 uint8_t is_reg = (insn >> 25) & 0x1;
@@ -516,7 +516,7 @@ char *Arm::disasm_mem(uint32_t insn, char *ptr)
516 return ptr; 516 return ptr;
517} 517}
518 518
519char *Arm::disasm_memhalf(uint32_t insn, char *ptr) 519char *ARM_Disasm::disasm_memhalf(uint32_t insn, char *ptr)
520{ 520{
521 uint8_t cond = (insn >> 28) & 0xf; 521 uint8_t cond = (insn >> 28) & 0xf;
522 uint8_t is_load = (insn >> 20) & 0x1; 522 uint8_t is_load = (insn >> 20) & 0x1;
@@ -574,7 +574,7 @@ char *Arm::disasm_memhalf(uint32_t insn, char *ptr)
574 return ptr; 574 return ptr;
575} 575}
576 576
577char *Arm::disasm_mcr(Opcode opcode, uint32_t insn, char *ptr) 577char *ARM_Disasm::disasm_mcr(Opcode opcode, uint32_t insn, char *ptr)
578{ 578{
579 uint8_t cond = (insn >> 28) & 0xf; 579 uint8_t cond = (insn >> 28) & 0xf;
580 uint8_t crn = (insn >> 16) & 0xf; 580 uint8_t crn = (insn >> 16) & 0xf;
@@ -589,7 +589,7 @@ char *Arm::disasm_mcr(Opcode opcode, uint32_t insn, char *ptr)
589 return ptr; 589 return ptr;
590} 590}
591 591
592char *Arm::disasm_mla(Opcode opcode, uint32_t insn, char *ptr) 592char *ARM_Disasm::disasm_mla(Opcode opcode, uint32_t insn, char *ptr)
593{ 593{
594 uint8_t cond = (insn >> 28) & 0xf; 594 uint8_t cond = (insn >> 28) & 0xf;
595 uint8_t rd = (insn >> 16) & 0xf; 595 uint8_t rd = (insn >> 16) & 0xf;
@@ -604,7 +604,7 @@ char *Arm::disasm_mla(Opcode opcode, uint32_t insn, char *ptr)
604 return ptr; 604 return ptr;
605} 605}
606 606
607char *Arm::disasm_umlal(Opcode opcode, uint32_t insn, char *ptr) 607char *ARM_Disasm::disasm_umlal(Opcode opcode, uint32_t insn, char *ptr)
608{ 608{
609 uint8_t cond = (insn >> 28) & 0xf; 609 uint8_t cond = (insn >> 28) & 0xf;
610 uint8_t rdhi = (insn >> 16) & 0xf; 610 uint8_t rdhi = (insn >> 16) & 0xf;
@@ -619,7 +619,7 @@ char *Arm::disasm_umlal(Opcode opcode, uint32_t insn, char *ptr)
619 return ptr; 619 return ptr;
620} 620}
621 621
622char *Arm::disasm_mul(Opcode opcode, uint32_t insn, char *ptr) 622char *ARM_Disasm::disasm_mul(Opcode opcode, uint32_t insn, char *ptr)
623{ 623{
624 uint8_t cond = (insn >> 28) & 0xf; 624 uint8_t cond = (insn >> 28) & 0xf;
625 uint8_t rd = (insn >> 16) & 0xf; 625 uint8_t rd = (insn >> 16) & 0xf;
@@ -633,7 +633,7 @@ char *Arm::disasm_mul(Opcode opcode, uint32_t insn, char *ptr)
633 return ptr; 633 return ptr;
634} 634}
635 635
636char *Arm::disasm_mrs(uint32_t insn, char *ptr) 636char *ARM_Disasm::disasm_mrs(uint32_t insn, char *ptr)
637{ 637{
638 uint8_t cond = (insn >> 28) & 0xf; 638 uint8_t cond = (insn >> 28) & 0xf;
639 uint8_t rd = (insn >> 12) & 0xf; 639 uint8_t rd = (insn >> 12) & 0xf;
@@ -643,7 +643,7 @@ char *Arm::disasm_mrs(uint32_t insn, char *ptr)
643 return ptr; 643 return ptr;
644} 644}
645 645
646char *Arm::disasm_msr(uint32_t insn, char *ptr) 646char *ARM_Disasm::disasm_msr(uint32_t insn, char *ptr)
647{ 647{
648 char flags[8]; 648 char flags[8];
649 int flag_index = 0; 649 int flag_index = 0;
@@ -679,7 +679,7 @@ char *Arm::disasm_msr(uint32_t insn, char *ptr)
679 return ptr; 679 return ptr;
680} 680}
681 681
682char *Arm::disasm_pld(uint32_t insn, char *ptr) 682char *ARM_Disasm::disasm_pld(uint32_t insn, char *ptr)
683{ 683{
684 uint8_t is_reg = (insn >> 25) & 0x1; 684 uint8_t is_reg = (insn >> 25) & 0x1;
685 uint8_t is_up = (insn >> 23) & 0x1; 685 uint8_t is_up = (insn >> 23) & 0x1;
@@ -704,7 +704,7 @@ char *Arm::disasm_pld(uint32_t insn, char *ptr)
704 return ptr; 704 return ptr;
705} 705}
706 706
707char *Arm::disasm_swi(uint32_t insn, char *ptr) 707char *ARM_Disasm::disasm_swi(uint32_t insn, char *ptr)
708{ 708{
709 uint8_t cond = (insn >> 28) & 0xf; 709 uint8_t cond = (insn >> 28) & 0xf;
710 uint32_t sysnum = insn & 0x00ffffff; 710 uint32_t sysnum = insn & 0x00ffffff;
@@ -713,7 +713,7 @@ char *Arm::disasm_swi(uint32_t insn, char *ptr)
713 return ptr; 713 return ptr;
714} 714}
715 715
716char *Arm::disasm_swp(Opcode opcode, uint32_t insn, char *ptr) 716char *ARM_Disasm::disasm_swp(Opcode opcode, uint32_t insn, char *ptr)
717{ 717{
718 uint8_t cond = (insn >> 28) & 0xf; 718 uint8_t cond = (insn >> 28) & 0xf;
719 uint8_t rn = (insn >> 16) & 0xf; 719 uint8_t rn = (insn >> 16) & 0xf;
@@ -725,7 +725,7 @@ char *Arm::disasm_swp(Opcode opcode, uint32_t insn, char *ptr)
725 return ptr; 725 return ptr;
726} 726}
727 727
728Opcode Arm::decode(uint32_t insn) { 728Opcode ARM_Disasm::decode(uint32_t insn) {
729 uint32_t bits27_26 = (insn >> 26) & 0x3; 729 uint32_t bits27_26 = (insn >> 26) & 0x3;
730 switch (bits27_26) { 730 switch (bits27_26) {
731 case 0x0: 731 case 0x0:
@@ -740,7 +740,7 @@ Opcode Arm::decode(uint32_t insn) {
740 return OP_INVALID; 740 return OP_INVALID;
741} 741}
742 742
743Opcode Arm::decode00(uint32_t insn) { 743Opcode ARM_Disasm::decode00(uint32_t insn) {
744 uint8_t bit25 = (insn >> 25) & 0x1; 744 uint8_t bit25 = (insn >> 25) & 0x1;
745 uint8_t bit4 = (insn >> 4) & 0x1; 745 uint8_t bit4 = (insn >> 4) & 0x1;
746 if (bit25 == 0 && bit4 == 1) { 746 if (bit25 == 0 && bit4 == 1) {
@@ -780,7 +780,7 @@ Opcode Arm::decode00(uint32_t insn) {
780 return decode_alu(insn); 780 return decode_alu(insn);
781} 781}
782 782
783Opcode Arm::decode01(uint32_t insn) { 783Opcode ARM_Disasm::decode01(uint32_t insn) {
784 uint8_t is_reg = (insn >> 25) & 0x1; 784 uint8_t is_reg = (insn >> 25) & 0x1;
785 uint8_t bit4 = (insn >> 4) & 0x1; 785 uint8_t bit4 = (insn >> 4) & 0x1;
786 if (is_reg == 1 && bit4 == 1) 786 if (is_reg == 1 && bit4 == 1)
@@ -807,7 +807,7 @@ Opcode Arm::decode01(uint32_t insn) {
807 return OP_STR; 807 return OP_STR;
808} 808}
809 809
810Opcode Arm::decode10(uint32_t insn) { 810Opcode ARM_Disasm::decode10(uint32_t insn) {
811 uint8_t bit25 = (insn >> 25) & 0x1; 811 uint8_t bit25 = (insn >> 25) & 0x1;
812 if (bit25 == 0) { 812 if (bit25 == 0) {
813 // LDM/STM 813 // LDM/STM
@@ -832,7 +832,7 @@ Opcode Arm::decode10(uint32_t insn) {
832 return OP_BL; 832 return OP_BL;
833} 833}
834 834
835Opcode Arm::decode11(uint32_t insn) { 835Opcode ARM_Disasm::decode11(uint32_t insn) {
836 uint8_t bit25 = (insn >> 25) & 0x1; 836 uint8_t bit25 = (insn >> 25) & 0x1;
837 if (bit25 == 0) { 837 if (bit25 == 0) {
838 // LDC, SDC 838 // LDC, SDC
@@ -881,7 +881,7 @@ Opcode Arm::decode11(uint32_t insn) {
881 return OP_MCR; 881 return OP_MCR;
882} 882}
883 883
884Opcode Arm::decode_mul(uint32_t insn) { 884Opcode ARM_Disasm::decode_mul(uint32_t insn) {
885 uint8_t bit24 = (insn >> 24) & 0x1; 885 uint8_t bit24 = (insn >> 24) & 0x1;
886 if (bit24 != 0) { 886 if (bit24 != 0) {
887 // This is an unexpected bit pattern. Create an undefined 887 // This is an unexpected bit pattern. Create an undefined
@@ -915,7 +915,7 @@ Opcode Arm::decode_mul(uint32_t insn) {
915 return OP_SMLAL; 915 return OP_SMLAL;
916} 916}
917 917
918Opcode Arm::decode_ldrh(uint32_t insn) { 918Opcode ARM_Disasm::decode_ldrh(uint32_t insn) {
919 uint8_t is_load = (insn >> 20) & 0x1; 919 uint8_t is_load = (insn >> 20) & 0x1;
920 uint8_t bits_65 = (insn >> 5) & 0x3; 920 uint8_t bits_65 = (insn >> 5) & 0x3;
921 if (is_load) { 921 if (is_load) {
@@ -945,7 +945,7 @@ Opcode Arm::decode_ldrh(uint32_t insn) {
945 return OP_STRH; 945 return OP_STRH;
946} 946}
947 947
948Opcode Arm::decode_alu(uint32_t insn) { 948Opcode ARM_Disasm::decode_alu(uint32_t insn) {
949 uint8_t is_immed = (insn >> 25) & 0x1; 949 uint8_t is_immed = (insn >> 25) & 0x1;
950 uint8_t opcode = (insn >> 21) & 0xf; 950 uint8_t opcode = (insn >> 21) & 0xf;
951 uint8_t bit_s = (insn >> 20) & 1; 951 uint8_t bit_s = (insn >> 20) & 1;
diff --git a/src/core/src/arm/disassembler/arm_disasm.h b/src/core/src/arm/disassembler/arm_disasm.h
index 15c7bb557..9600e2ade 100644
--- a/src/core/src/arm/disassembler/arm_disasm.h
+++ b/src/core/src/arm/disassembler/arm_disasm.h
@@ -107,7 +107,7 @@ enum Opcode {
107 OP_END // must be last 107 OP_END // must be last
108}; 108};
109 109
110class Arm { 110class ARM_Disasm {
111 public: 111 public:
112 static char *disasm(uint32_t addr, uint32_t insn, char *buffer); 112 static char *disasm(uint32_t addr, uint32_t insn, char *buffer);
113 static Opcode decode(uint32_t insn); 113 static Opcode decode(uint32_t insn);