def testUpdateSpAndOrPopRegisters(self): self.assertEqual( bytes([0b0, 0b10101000]), EncodeAddressUnwind( AddressUnwind( address_offset=0, unwind_type=UnwindType.UPDATE_SP_AND_OR_POP_REGISTERS, sp_offset=0x4, registers=(4, 14)))) self.assertEqual( bytes([0b0]), EncodeAddressUnwind( AddressUnwind( address_offset=0, unwind_type=UnwindType.UPDATE_SP_AND_OR_POP_REGISTERS, sp_offset=0x4, registers=tuple()))) self.assertEqual( bytes([0b10101000]), EncodeAddressUnwind( AddressUnwind( address_offset=0, unwind_type=UnwindType.UPDATE_SP_AND_OR_POP_REGISTERS, sp_offset=0, registers=(4, 14))))
def testNoAction(self): self.assertEqual( bytes([]), EncodeAddressUnwind( AddressUnwind(address_offset=0, unwind_type=UnwindType.NO_ACTION, sp_offset=0, registers=tuple())))
def testReturnToLr(self): self.assertEqual( bytes([0b10110000]), EncodeAddressUnwind( AddressUnwind(address_offset=0, unwind_type=UnwindType.RETURN_TO_LR, sp_offset=0, registers=tuple())))
def testRestoreSpFromRegisters(self): self.assertEqual( bytes([0b10010100, 0b0]), EncodeAddressUnwind( AddressUnwind(address_offset=0, unwind_type=UnwindType.RESTORE_SP_FROM_REGISTER, sp_offset=0x4, registers=(4, )))) self.assertEqual( bytes([0b10010100]), EncodeAddressUnwind( AddressUnwind(address_offset=0, unwind_type=UnwindType.RESTORE_SP_FROM_REGISTER, sp_offset=0, registers=(4, )))) self.assertRaises( AssertionError, lambda: EncodeAddressUnwind( AddressUnwind(address_offset=0, unwind_type=UnwindType.RESTORE_SP_FROM_REGISTER, sp_offset=0x4, registers=tuple())))