Search code examples
cdebuggingx86-64valgrinditanium

Valgrind: The Impossible Happened IA-64 cached detected


I ran valgrind on a c program and got the following error:

valgrind: the 'impossible' happened:
   IA-64 cache detected?!

valgrind: m_threadstate.c:100 (vgPlain_get_ThreadState): Assertion 'tid >= 0 && tid < VG_N_THREADS' failed.

After fixing some memory leaks and restructure my program, the error mysteriously went away. But I searched online and find nothing about the IA-64 cache detected error. What does IA-64 means? Also, I ran the program on a virtual machine if that matters.


Solution

  • As already mentioned in the comments, IA-64 is the Intel Architecture Itanium (actually a joint venture with HP). It dates back to the early 2000s. Support for the IA-64 architecture was never added to Valgrind since it was never a great success.

    Earlier Itanium chips did have a kind of dual-mode which allowed them to run 32bit x86 code.

    The error message in Valgrind comes from the Intel_cache_info function. This queries the cpuid instruction to find out about the cache. 10 of the codes handled by this function are for IA-64. As I said, this was never supported, so Valgrind terminates with a now rather dated message.

    You are also getting an assert that the TID is not valid. So something is going seriously wrong.

    If you can reproduce the problem with a small example then please report it on https://bugs.kde.org