Reference Number : DPD200419088
Version : Intel® C++ and Fortran Compilers up to and including 17.0 and 18.0.0, for Intel 64 only
Operating System : Linux*
Problem Description : An unexpected NaN or other incorrect output may be seen when an application built with these Intel compilers is run on a system containing glibc version 2.24-9 and newer.
Cause : This appears to be due to the new dynamic loader in glibc doesn't preserve the values of additional registers used by a function call through __regcall calling convention or some Intel compiler library like SVML function call through a non-standard calling convention, as described at https://sourceware.org/bugzilla/show_bug.cgi?id=21236 and https://sourceware.org/bugzilla/show_bug.cgi?id=21265. It will not impact a statically linked library function call or a function call through __regcall calling convention within a single executable.
Resolution Status : This incompatibility has been fixed in Intel® compiler version 18.0 update 1 (18.0.1). For Intel compiler version 17.0 update 4 or 5 or version 18.0 initial release (18.0.0), it can be worked around by the option "-fPIC".
Workaround : It can be worked around by setting environment variable LD_BIND_NOW=1 to disable the lazy binding of dynamical linked libraries before running an application, e.g.: "export LD_BIND_NOW=1".