It is interesting that no_cpuid is not a symbol, it is a part of the inlined asm: __asm__ ("pushf\n\t" "popl %%eax\n\t" "movl %%eax, %%ecx\n\t" "xorl $0x200000, %%eax\n\t" "pushl %%eax\n\t" "popf\n\t" "pushf\n\t" "popl %%eax\n\t" "movl $0x0, %0\n\t" "xorl %%ecx, %%eax\n\t" "jz no_cpuid\n\t" "movl $0x1, %0\n\t" "no_cpuid:\n\t" : "=r"(have_cpuid) : : "%eax", "%ecx", "cc");