Re: rdrand generated with march=winchip-c6 in systemd-241

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Di, 07.05.19 08:50, tedheadster (tedheadster@xxxxxxxxx) wrote:

> GCC and systemd teams:
>   I compiled systemd-241 and expressly set march=winchip-c6 (an i486
> class cpu). It generated illegal instructions (rdrand) in the code.
> Oddly, it does NOT do this when I set march=i486:
>
> Dump of assembler code for function rdrand:
>    0xb7e21440 <+0>:     push   %esi
>    0xb7e21441 <+1>:     push   %ebx
>    0xb7e21442 <+2>:     call   0xb7e0af5d <__x86.get_pc_thunk.si>
>    0xb7e21447 <+7>:     add    $0x1acb39,%esi
>    0xb7e2144d <+13>:    mov    0x2870(%esi),%ecx
>    0xb7e21453 <+19>:    test   %ecx,%ecx
>    0xb7e21455 <+21>:    js     0xb7e21480 <rdrand+64>
>    0xb7e21457 <+23>:    test   %ecx,%ecx
>    0xb7e21459 <+25>:    je     0xb7e214e0 <rdrand+160>
>    0xb7e2145f <+31>:    rdrand %ecx <------ bad opcode
>    0xb7e21462 <+34>:    setb   %al
>    0xb7e21465 <+37>:    mov    0xc(%esp),%edx
>    0xb7e21469 <+41>:    mov    %ecx,(%edx)
>    0xb7e2146b <+43>:    cmp    $0x1,%al
>    0xb7e2146d <+45>:    sbb    %eax,%eax
>    0xb7e2146f <+47>:    and    $0xfffffff5,%eax
>    0xb7e21472 <+50>:    pop    %ebx
>    0xb7e21473 <+51>:    pop    %esi
>    0xb7e21474 <+52>:    ret
> ...
>
> It sure looks like systemd-v241 is trying to detect support for this
> instruction before using it:
>
> https://github.com/systemd/systemd/blob/v241/src/basic/random-util.c#L36

WE are using gcc's __get_cpuid() call to query the cpuid feature
set. We then look for rdrand support in it and only then use the
opcode.

It appears that there's some wrong with this gcc feature if this
detection doesn't work correctly.

Note that generation of the opcode should not be a problem generally,
but the execution should. Normally we shouldn't get that far though,
if the __get_cpuid() detection works correctly.

To me this appears like something you need to contact the gcc folks
about.

Lennart

--
Lennart Poettering, Berlin
_______________________________________________
systemd-devel mailing list
systemd-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/systemd-devel




[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux