Bug#973326: double-conversion: Misbuild with -O3: DoubleToStringConverter::DoubleToStringConverter() constructor dropped from exported symbols

Steve Langasek steve.langasek at canonical.com
Wed Oct 28 20:46:16 GMT 2020


Package: double-conversion
Version: 3.1.5-6
Severity: minor
Tags: patch
User: ubuntu-devel at lists.ubuntu.com
Usertags: origin-ubuntu hirsute ubuntu-patch

Hi Mo,

Thanks for your forebearance with this string of Ubuntu bug reports.  I'm
hopeful that once we manage to resolve this one, the double-conversion
package will be in sync again between Debian and Ubuntu :)

The latest upload of double-conversion is failing to build from source on
ppc64el in Ubuntu, because Ubuntu builds ppc64el with -O3 by default instead
of -O2, and this additional optimization level somehow causes a public
constructor to be lost from the exported symbols:

[...]
dpkg-gensymbols: warning: debian/libdouble-conversion3/DEBIAN/symbols doesn't ma
tch completely debian/libdouble-conversion3.symbols
--- debian/libdouble-conversion3.symbols (libdouble-conversion3_3.1.5-6_ppc64el)
+++ dpkg-gensymbolshNCmYB       2020-10-28 15:27:33.543945019 +0000
@@ -36,7 +36,7 @@
  (c++)"double_conversion::DoubleToStringConverter::CreateDecimalRepresentation(
char const*, int, int, int, double_conversion::StringBuilder*) const at Base" 2.0.0
  (c++)"double_conversion::DoubleToStringConverter::CreateExponentialRepresentat
ion(char const*, int, int, double_conversion::StringBuilder*) const at Base" 2.0.0
  (c++)"double_conversion::DoubleToStringConverter::DoubleToAscii(double, double
_conversion::DoubleToStringConverter::DtoaMode, int, char*, int, bool*, int*, in
t*)@Base" 2.0.0
- (c++)"double_conversion::DoubleToStringConverter::DoubleToStringConverter(int,
 char const*, char const*, char, int, int, int, int)@Base" 3.1.5
+#MISSING: 3.1.5-6# (c++)"double_conversion::DoubleToStringConverter::DoubleToSt
ringConverter(int, char const*, char const*, char, int, int, int, int)@Base" 3.1
.5
  (c++)"double_conversion::DoubleToStringConverter::EcmaScriptConverter()@Base" 
2.0.0
  (c++)"double_conversion::DoubleToStringConverter::HandleSpecialValues(double, 
double_conversion::StringBuilder*) const at Base" 2.0.0
  (c++)"double_conversion::DoubleToStringConverter::ToExponential(double, int, d
ouble_conversion::StringBuilder*) const at Base" 2.0.0
dh_makeshlibs: error: failing due to earlier errors
[...]

  (https://launchpad.net/ubuntu/+source/double-conversion/3.1.5-6/+build/20200598)

This problem is also reproducible on amd64 if I raise the optimization level.

This may well be a problem with the toolchain, but for the moment I've
worked around this by forcing the optimization level down to -O2 as in the
attached patch.

Thanks for considering,
-- 
Steve Langasek                   Give me a lever long enough and a Free OS
Debian Developer                   to set it on, and I can move the world.
Ubuntu Developer                                   https://www.debian.org/
slangasek at ubuntu.com                                     vorlon at debian.org
-------------- next part --------------
diff -Nru double-conversion-3.1.5/debian/rules double-conversion-3.1.5/debian/rules
--- double-conversion-3.1.5/debian/rules	2020-01-10 22:27:54.000000000 -0800
+++ double-conversion-3.1.5/debian/rules	2020-10-28 13:38:12.000000000 -0700
@@ -2,6 +2,8 @@
 
 export DEB_BUILD_MAINT_OPTIONS = hardening=+all
 export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
+export DEB_CXXFLAGS_MAINT_APPEND += -O2
+export DEB_CXXFLAGS_MAINT_STRIP += -O3
 
 # Get compilation flags from dpkg-buildflags
 DPKG_EXPORT_BUILDFLAGS = 1


More information about the debian-science-maintainers mailing list