Valgrind complains about ptls_fusion_is_supported_by_cpu
huitema opened this issue · comments
Christian Huitema commented
The code of the function is:
int ptls_fusion_is_supported_by_cpu(void)
{
unsigned leaf1_ecx, leaf7_ebx;
{ /* GCC-specific code to obtain CPU features */
unsigned leaf_cnt;
__asm__("cpuid" : "=a"(leaf_cnt) : "a"(0) : "ebx", "ecx", "edx");
if (leaf_cnt < 7)
return 0;
__asm__("cpuid" : "=c"(leaf1_ecx) : "a"(1) : "ebx", "edx");
__asm__("cpuid" : "=b"(leaf7_ebx) : "a"(7), "c"(0) : "edx");
}
/* AVX2 */
if ((leaf7_ebx & (1 << 5)) == 0)
return 0;
/* AES */
if ((leaf1_ecx & (1 << 25)) == 0)
return 0;
/* PCLMUL */
if ((leaf1_ecx & (1 << 1)) == 0)
return 0;
return 1;
}
Valgrind complains that the "Conditional jump or move depends on uninitialized value". This is very annoying, because the message will fill the valgrind logs when testing code that uses picotls.
I think this could be fixed by changing the declaration to unsigned leaf_cnt = 0;
.