X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=ArmPkg%2FLibrary%2FArmDisassemblerLib%2FThumbDisassembler.c;fp=ArmPkg%2FLibrary%2FArmDisassemblerLib%2FThumbDisassembler.c;h=3129ec6b92701feff14a3067330c0e3a5ffc1199;hp=b665132d69bf26e4bd922e9c71104a6b9bc71b43;hb=2f2c0a8b9ff51ba5462c9f04ef759320aa3d95d1;hpb=60e49aac4e44cb262b0f2a1a858c63fcb1412a70 diff --git a/ArmPkg/Library/ArmDisassemblerLib/ThumbDisassembler.c b/ArmPkg/Library/ArmDisassemblerLib/ThumbDisassembler.c index b665132d69..3129ec6b92 100644 --- a/ArmPkg/Library/ArmDisassemblerLib/ThumbDisassembler.c +++ b/ArmPkg/Library/ArmDisassemblerLib/ThumbDisassembler.c @@ -9,6 +9,7 @@ try to reuse existing case entries if possible. Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.
+ Copyright (c) 2021, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -451,7 +452,7 @@ SignExtend32 ( // in the instruction address and you get back the aligned answer // UINT32 -PCAlign4 ( +PcAlign4 ( IN UINT32 Data ) { @@ -486,12 +487,19 @@ DisassembleThumbInstruction ( UINT32 Index; UINT32 Offset; UINT16 Rd, Rn, Rm, Rt, Rt2; - BOOLEAN H1, H2, imod; + BOOLEAN H1Bit; // H1 + BOOLEAN H2Bit; // H2 + BOOLEAN IMod; // imod //BOOLEAN ItFlag; - UINT32 PC, Target, msbit, lsbit; + UINT32 Pc, Target, MsBit, LsBit; CHAR8 *Cond; - BOOLEAN S, J1, J2, P, U, W; - UINT32 coproc, opc1, opc2, CRd, CRn, CRm; + BOOLEAN Sign; // S + BOOLEAN J1Bit; // J1 + BOOLEAN J2Bit; // J2 + BOOLEAN Pre; // P + BOOLEAN UAdd; // U + BOOLEAN WriteBack; // W + UINT32 Coproc, Opc1, Opc2, CRd, CRn, CRm; UINT32 Mask; OpCodePtr = *OpCodePtrPtr; @@ -504,10 +512,10 @@ DisassembleThumbInstruction ( Rd = OpCode & 0x7; Rn = (OpCode >> 3) & 0x7; Rm = (OpCode >> 6) & 0x7; - H1 = (OpCode & BIT7) != 0; - H2 = (OpCode & BIT6) != 0; - imod = (OpCode & BIT4) != 0; - PC = (UINT32)(UINTN)OpCodePtr; + H1Bit = (OpCode & BIT7) != 0; + H2Bit = (OpCode & BIT6) != 0; + IMod = (OpCode & BIT4) != 0; + Pc = (UINT32)(UINTN)OpCodePtr; // Increment by the minimum instruction size, Thumb2 could be bigger *OpCodePtrPtr += 1; @@ -548,7 +556,7 @@ DisassembleThumbInstruction ( case LOAD_STORE_FORMAT3: // A6.5.1 , [PC, #<8_bit_offset>] Target = (OpCode & 0xff) << 2; - AsciiSPrint (&Buf[Offset], Size - Offset, " r%d, [pc, #0x%x] ;0x%08x", (OpCode >> 8) & 7, Target, PCAlign4 (PC) + Target); + AsciiSPrint (&Buf[Offset], Size - Offset, " r%d, [pc, #0x%x] ;0x%08x", (OpCode >> 8) & 7, Target, PcAlign4 (Pc) + Target); return; case LOAD_STORE_FORMAT4: // Rt, [SP, #imm8] @@ -583,16 +591,16 @@ DisassembleThumbInstruction ( Cond = gCondition[(OpCode >> 8) & 0xf]; Buf[Offset-5] = *Cond++; Buf[Offset-4] = *Cond; - AsciiSPrint (&Buf[Offset], Size - Offset, " 0x%04x", PC + 4 + SignExtend32 ((OpCode & 0xff) << 1, BIT8)); + AsciiSPrint (&Buf[Offset], Size - Offset, " 0x%04x", Pc + 4 + SignExtend32 ((OpCode & 0xff) << 1, BIT8)); return; case UNCONDITIONAL_BRANCH_SHORT: // A6.3.2 B - AsciiSPrint (&Buf[Offset], Size - Offset, " 0x%04x", PC + 4 + SignExtend32 ((OpCode & 0x3ff) << 1, BIT11)); + AsciiSPrint (&Buf[Offset], Size - Offset, " 0x%04x", Pc + 4 + SignExtend32 ((OpCode & 0x3ff) << 1, BIT11)); return; case BRANCH_EXCHANGE: // A6.3.3 BX|BLX - AsciiSPrint (&Buf[Offset], Size - Offset, " %a", gReg[Rn | (H2 ? 8:0)]); + AsciiSPrint (&Buf[Offset], Size - Offset, " %a", gReg[Rn | (H2Bit ? 8:0)]); return; case DATA_FORMAT1: @@ -629,12 +637,12 @@ DisassembleThumbInstruction ( return; case DATA_FORMAT8: // A6.4.3 |, - AsciiSPrint (&Buf[Offset], Size - Offset, " %a, %a", gReg[Rd | (H1 ? 8:0)], gReg[Rn | (H2 ? 8:0)]); + AsciiSPrint (&Buf[Offset], Size - Offset, " %a, %a", gReg[Rd | (H1Bit ? 8:0)], gReg[Rn | (H2Bit ? 8:0)]); return; case CPS_FORMAT: // A7.1.24 - AsciiSPrint (&Buf[Offset], Size - Offset, "%a %a%a%a", imod ? "ID":"IE", ((OpCode & BIT2) == 0) ? "":"a", ((OpCode & BIT1) == 0) ? "":"i", ((OpCode & BIT0) == 0) ? "":"f"); + AsciiSPrint (&Buf[Offset], Size - Offset, "%a %a%a%a", IMod ? "ID":"IE", ((OpCode & BIT2) == 0) ? "":"a", ((OpCode & BIT1) == 0) ? "":"i", ((OpCode & BIT0) == 0) ? "":"f"); return; case ENDIAN_FORMAT: @@ -645,13 +653,13 @@ DisassembleThumbInstruction ( case DATA_CBZ: // CB{N}Z , Target = ((OpCode >> 2) & 0x3e) | (((OpCode & BIT9) == BIT9) ? BIT6 : 0); - AsciiSPrint (&Buf[Offset], Size - Offset, " %a, %08x", gReg[Rd], PC + 4 + Target); + AsciiSPrint (&Buf[Offset], Size - Offset, " %a, %08x", gReg[Rd], Pc + 4 + Target); return; case ADR_FORMAT: // ADR ,