[Bug 1913268] Re: ImageMagick: please pull in patch to stabilize API on s390x during upgrade to glibc 2.33 (Ubuntu 21.04)
Steve Langasek
1913268 at bugs.launchpad.net
Wed Jan 27 23:01:40 UTC 2021
On Wed, Jan 27, 2021 at 06:58:36PM -0000, Matthias Klose wrote:
> if the ABI changes without changing the soname, we should rename the
> library packages.
Yes, but AIUI the intent here is to change the imagemagick source so that
the ABI does not change as a result of a rebuild with a newer glibc, no?
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to imagemagick in Ubuntu.
https://bugs.launchpad.net/bugs/1913268
Title:
ImageMagick: please pull in patch to stabilize API on s390x during
upgrade to glibc 2.33 (Ubuntu 21.04)
Status in Ubuntu on IBM z Systems:
Triaged
Status in imagemagick package in Ubuntu:
Incomplete
Bug description:
On s390x, the type float_t has historically been defined as double for
no good reason, yet with unexpected and unnecessary impact on
performance in some scenarios. glibc 2.33 will be a first step towards
cleaning that up, which will change float_t to become float on s390x
when compiling with compiler flags as used in the ImageMagick binary.
That would break the ABI of ImageMagick for HDRI=1 on s390x for
existing binaries.
To avoid that breakage, ImageMagick upstream has fixed the relevant
internal type to always be double on s390x since version 7.0.10-39, so
that the API/ABI for HDRI=1 remains as it is today, independent of a
change in float_t. The merged patch can trivially be backported to
ImageMagick version 6.9.x in Ubuntu today (will apply a patch;
original PR https://github.com/ImageMagick/ImageMagick/pull/2832).
Background: Today's combination of gcc's default behavior and float_t
being double on s390x contradicts the C standard. ImageMagick captures
the sizeof(float_t) at compile-time of the library in magick-
baseconfig.h. Headers then define MagickFloatType to match. For 8-bit
and 16-bit depths and HDRI=1, that MagickFloatType is used as the type
for pixels's color channels (i.e., Quantum).
Changes to float_t thus would result in a different ABI. Once
ImageMagick is rebuilt with HDRI=1 and an updated gcc/glibc, Quantum
would then become 32-bit float. Existing binaries and libraries would
expect 64-bit double and thus cease to work with newly built version
of the library.
Upstream commit with fixed path (MagickCore/magick-type.h -> magick
/magick-type.h)
This minor patch avoids interoperability issues with the adoption of
glibc 2.33. that glibc release contains one component for cleaning up
float_t on s390x, which will eventually reduce performance overhead.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu-z-systems/+bug/1913268/+subscriptions
More information about the foundations-bugs
mailing list