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

Bug#710220: libstdc++6: 4.8.0-8 upgrade breaks system_clock



Am 29.05.2013 09:39, schrieb Tim Besard:
> Package: libstdc++6
> Version: 4.8.0-8
> Severity: important
> 
> Dear Maintainer,
> 
> Attached test case gets the current system time using std::chrono and using
> gettimeofday, both with millisecond precision. Using libstdc++6 version 4.8.0-7,
> this code works properly, both timestamps being identical. However, since
> upgrading to 4.8.0-8, the std::chrono version reports a timestamp in seconds
> despite the explicit duration_case to milliseconds, when compiling with GCC 4.6
> or 4.7. Using libstdc++6 4.8.0-8 with GCC 4.8 results in correct output.

apparently this is because we configure with --enable-libstdcxx-time=yes.  Have
to find out why we did enable that in the past (likely a feature request), but
it looks like this dates back to 4.5.x.

see the thread starting at http://gcc.gnu.org/ml/libstdc++/2013-05/msg00080.html

The entry points when configured with --enable-libstdcxx-time=yes were ABI
incompatible with the standard configuration, without different mangling, and
now are corrected.

Anything referencing

 _ZNSt6chrono12system_clock3nowEv
 _ZNSt6chrono12steady_clock3nowEv

compiled with our gcc's before 4.8.0-8 needs to be rebuilt :-/

The former symbol has different ABI in standard compilation, the latter one was
missing in standard configuration and only present in
--enable-libstdcxx-time={yes,rt}; the latter symbol is gone, and there are 4 new
symbols instead. The new symbols have all always nanosecond precision,
independently on whether they are steady or not actually, but on Linux
steady_clock should be now really steady unless you use prehistoric kernels.

So first lets see which packages are affected, then decide how to address this
(currently searching the Ubuntu archive for these symbols, lacking the resources
to do that for the Debian archive).  You only see this in c++0x/c++11 mode, so
this should be a somehow limited list of packages (and the c++11 support in all
released GCC versions is still marked as experimental).

I'd like to avoid renaming the libstdc++6 package if possible.

As long as 4.6 and 4.7 are still in the archive, I'll rebuild these without the
--enable-libstdcxx-time option, and then rebuild all packages found in my
package search. I think this is best way to limit the damage.

  Matthias


Reply to: