Intel® Compiler Not Compatible With glibc 2.24-9 and Newer

By Xiaoping Duan, Published: 03/23/2017, Last Updated: 01/02/2018

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".  

See also https://software.intel.com/articles/inconsistent-program-behavior-on-red-hat-enterprise-linux-74-if-compiled-with-intel 

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804