Bug#812803: libc++1: Illegal instruction on i586 machine

Andrea Canciani ranma42 at gmail.com
Tue Jan 26 17:29:57 UTC 2016


Package: libc++1
Version: 3.5-2
Severity: normal

Dear Maintainer,

when using libc++1 on a Pentium (i586) machine, it is
possible for a program to terminate on "Illegal instruction".

The following program can be used to reproduce the issue:

#include <sstream>
#include <string>

int main()
{
        float f;
        std::istringstream num_stream(std::string("42"));
        num_stream >> f;
        return 0;
}

libc++-dev and at least one of clang or g++ need to be installed
to build the test.

Compiling the source code from above with

clang++-libc++ -march=i586 test.cpp

or

g++-libc++ -march=i586 test.cpp

results in a binary which works correctly on "modern" machines,
but terminates with "Illegal instruction" on i586.

Running the program in a debugger makes it possible to see that
the illegal instruction is in fact a SIMD operation in libc++1,
which will also fail on any pre-SIMD i686 processors as well.

The same code works fine when compiled with libstdc++.

-- System Information:
Debian Release: 8.3
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: i386 (i586)

Kernel: Linux 3.16.0-4-586
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages libc++1 depends on:
ii  libc6              2.19-18+deb8u2
ii  multiarch-support  2.19-18+deb8u2

libc++1 recommends no packages.

Versions of packages libc++1 suggests:
ii  clang  1:3.5-25

-- no debconf information



More information about the Pkg-llvm-team mailing list