Summary: | Multiple unhandled instruction for Aarch64 (0x0EE0E020, 0x1AC15800, 0x4E284801, 0x5E040023, 0x5E056060) | ||
---|---|---|---|
Product: | [Developer tools] valgrind | Reporter: | Jeffrey Walton <noloader> |
Component: | vex | Assignee: | Julian Seward <jseward> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | noloader |
Priority: | NOR | ||
Version First Reported In: | 3.11.0 | ||
Target Milestone: | --- | ||
Platform: | Other | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
Jeffrey Walton
2016-08-02 11:36:43 UTC
It looks like 3.12-SVN is missing the some of the instructions for the CRC32 checks: $ valgrind ./cryptest.exe v ==9653== Memcheck, a memory error detector ==9653== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==9653== Using Valgrind-3.12.0.SVN and LibVEX; rerun with -h for copyright info ==9653== Command: ./cryptest.exe v ==9653== Using seed: 1470139841 Testing Settings... passed: Your machine is little endian. passed: CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS is not defined. Will restrict to aligned data access. passed: sizeof(byte) == 1 passed: sizeof(word16) == 2 passed: sizeof(word32) == 4 passed: sizeof(word64) == 8 passed: sizeof(hword) == 2, sizeof(word) == 4, sizeof(dword) == 8 ARM64 front end: data_processing_register disInstr(arm64): unhandled instruction 0x1AC15800 disInstr(arm64): 0001'1010 1100'0001 0101'1000 0000'0000 ==9653== valgrind: Unrecognised instruction at address 0x506f98. ==9653== at 0x506F98: __crc32cw (arm_acle.h:57) ==9653== by 0x506F98: CryptoPP::TryCRC32() (cpu.cpp:543) ==9653== by 0x5072FB: CryptoPP::DetectArmFeatures() (cpu.cpp:741) ==9653== by 0x4A09EF: HasNEON (cpu.h:331) ==9653== by 0x4A09EF: TestSettings() (validat1.cpp:317) ==9653== by 0x4A7D0B: ValidateAll(bool) (validat1.cpp:75) ==9653== by 0x490083: Validate(int, bool, char const*) (test.cpp:889) ==9653== by 0x458B8F: main (test.cpp:358) ==9653== Your program just tried to execute an instruction that Valgrind ==9653== did not recognise. There are two possible reasons for this. ==9653== 1. Your program has a bug and erroneously jumped to a non-code ==9653== location. If you are running Memcheck and you just saw a ==9653== warning about a bad jump, it's probably your program's fault. ==9653== 2. The instruction is legitimate but Valgrind doesn't handle it, ==9653== i.e. it's Valgrind's fault. If you think this is the case or ==9653== you are not sure, please let us know and we'll try to fix it. ==9653== Either way, Valgrind will now raise a SIGILL signal which will ==9653== probably kill your program. ... Try using the trunk. That supports all the crypto instructions in 64-bit mode. (In reply to Jeffrey Walton from comment #1) > It looks like 3.12-SVN is missing the some of the instructions for the CRC32 > checks: > ARM64 front end: data_processing_register > disInstr(arm64): unhandled instruction 0x1AC15800 > disInstr(arm64): 0001'1010 1100'0001 0101'1000 0000'0000 Fixed, vex r3237. All 8 of the CRC instructions should work now. Test cases in r15924, 15925. (In reply to Julian Seward from comment #4) > (In reply to Jeffrey Walton from comment #1) > > It looks like 3.12-SVN is missing the some of the instructions for the CRC32 > > checks: > > > ARM64 front end: data_processing_register > > disInstr(arm64): unhandled instruction 0x1AC15800 > > disInstr(arm64): 0001'1010 1100'0001 0101'1000 0000'0000 > > Fixed, vex r3237. All 8 of the CRC instructions should work now. Thank you very much. Confirmed the fix; close it. |