Reference Number : CMPLRS-41993, CMPLRS-45873, CMPLRS-4605
Version : Intel® C++ and Fortran Compilers 17.0, 18.0, older versions affected as well
Operating System : Red Hat Enterprise Linux* 7.4, Fedora* 25
Problem Description : There is an issue with calls via Procedure Linkage Table (PLT) to functions with custom calling conventions on Red Hat Enterprise Linux* 7.4. Such functions are widely used in Intel compiler libraries, such as LIBIRC, LIBSVML, etc. Intel compiler generates usual call sequence for such functions, and they may be called via PLT in the final executable. During the resolution of the PLT relocation the runtime may overwrite registers that do not need to be preserved according to the ABI. The code enclosing such a call can not assume that the call follows the defined custom calling convention anymore. The issue may cause inconsistent program behavior, such as FP exceptions (e.g. unexpected NaNs generation) or crashes(SIGSEGVs).
Note that the problem may be observed on any system containing glibc version 2.24-9 and newer (not just RHEL 7.4).
Resolution Status : A workaround is to do all required relocations at startup of a binary by specifying LD_BIND_NOW=1 environment variable. 17.0 Update 4 and Update 5 has a workaround implemented in the compiler and will avoid PLT relocations for the problem calls only under –fPIC option.
This issue has been resolved: upcoming 18.0 Update 1