From Fedora Project Wiki
(Set category to incomplete.)
(Update before final release.)
Line 39: Line 39:
== Current status ==
== Current status ==
* Targeted release: [[Releases/29 | Fedora 29]]  
* Targeted release: [[Releases/29 | Fedora 29]]  
* Last updated: 2018-05-01
* Last updated: 2018-06-19
<!-- After the change proposal is accepted by FESCo, tracking bug is created in Bugzilla and linked to this page  
<!-- After the change proposal is accepted by FESCo, tracking bug is created in Bugzilla and linked to this page  
Bugzilla states meaning as usual:
Bugzilla states meaning as usual:
Line 52: Line 52:
== Detailed Description ==
== Detailed Description ==
<!-- Expand on the summary, if appropriate.  A couple sentences suffices to explain the goal, but the more details you can provide the better. -->
<!-- Expand on the summary, if appropriate.  A couple sentences suffices to explain the goal, but the more details you can provide the better. -->
IBM has designed a new long double ABI that adheres to the 128-bit IEEE format. This format is more standard than the existing AIX double-double (2 grouped 64-bit doubles) which has discontinuous mantissas and is difficult for developers to use. In Fedora 29 the plan is to switch to the new ABI for long double, while still supporting old applications via compatibility symbols. Newly compiled applications use either the old or new ABI but not a mix of both. Changes are required in the core C libraries, and the compiler and the compiler runtimes.
IBM has designed a new long double ABI that adheres to the 128-bit IEEE format. This format is more standard than the existing AIX double-double or IBM long double (2 grouped 64-bit doubles) which has discontinuous mantissas and is difficult for developers to use. In Fedora 29 the plan is to switch to the new ABI for long double, while still supporting old applications via compatibility symbols. Newly compiled applications use either the old or new ABI but not a mix of both. Changes are required in the core C libraries, and the compiler and the compiler runtimes including the C++ standard libraries. Therefore there is coordination required across the core toolchain componenents e.g. gcc, binutils, glibc, gdb (to debug the new types).


== Benefit to Fedora ==
== Benefit to Fedora ==
Line 60: Line 60:
== Scope ==
== Scope ==
<!-- What work do the developers have to accomplish to complete the change in time for release?  Is it a large change affecting many parts of the distribution or is it a very isolated change? What are those changes?-->
<!-- What work do the developers have to accomplish to complete the change in time for release?  Is it a large change affecting many parts of the distribution or is it a very isolated change? What are those changes?-->
The change is relatively limited in that not many packages use the long double floating point ABI. The double floating point ABI is much more used, but not long double. It is estimated that few packages use long double directly, and those packages will need to be rebuilt in order to use the new ABI. This rebuilding can be targetted by analyzing which packages have long double usage in their debug information and rebuilding just those packages. However, we can also just use the existing mass rebuild for glibc 2.28 to handle this issue.
The change is relatively limited in that not many packages use the long double floating point ABI. The double floating point ABI is much more used, but not long double. It is estimated that few packages use long double directly, and those packages will need to be rebuilt in order to use the new ABI. This rebuilding can be targetted by analyzing which packages have long double usage in their debug information and rebuilding just those packages. However, we plan to just use the existing mass rebuild for glibc 2.28 to handle this issue.


* Proposal owners: Transition glibc to float128 format for long double for IBM ppc64le. Transition gcc to the default for long duble.
* Proposal owners: Transition glibc to float128 format for long double for IBM ppc64le. Transition gcc to the default for long double. Ensure gdb can handle the new types.
<!-- What work do the feature owners have to accomplish to complete the feature in time for release?  Is it a large change affecting many parts of the distribution or is it a very isolated change? What are those changes?-->
<!-- What work do the feature owners have to accomplish to complete the feature in time for release?  Is it a large change affecting many parts of the distribution or is it a very isolated change? What are those changes?-->


* Other developers: Developers need to ensure that rawhide is stable and ready for the Fedora 29 branch. Given that glibc is backwards compatible and we have been testing the new glibc in rawhide it should make very little impact when updated.<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
* Other developers: Developers need to ensure that rawhide is stable and ready for the Fedora 29 branch.<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
<!-- What work do other developers have to accomplish to complete the feature in time for release?  Is it a large change affecting many parts of the distribution or is it a very isolated change? What are those changes?-->
<!-- What work do other developers have to accomplish to complete the feature in time for release?  Is it a large change affecting many parts of the distribution or is it a very isolated change? What are those changes?-->


Line 79: Line 79:
== Upgrade/compatibility impact ==
== Upgrade/compatibility impact ==
<!-- What happens to systems that have had a previous versions of Fedora installed and are updated to the version containing this change? Will anything require manual configuration or data migration? Will any existing functionality be no longer supported? -->
<!-- What happens to systems that have had a previous versions of Fedora installed and are updated to the version containing this change? Will anything require manual configuration or data migration? Will any existing functionality be no longer supported? -->
The library is backwards compatible with the version of glibc that was shipped in Fedora 27.
The library and language runtimes are backwards compatible with the version shipped in Fedora 28.


We fully expect to fix all packaging changes in Fedora Rawhide given that glibc in Rawhide is tracking what will become glibc 2.28.
We fully expect to fix all packaging changes in Fedora Rawhide first when everything is ready.


== How To Test ==
== How To Test ==
Line 100: Line 100:


Specific testing for 128-bit IEEE long double ABI will be carried out by the glibc testsuite. Integration smoke testing will be carried out by the glibc developers to make sure new applications are built with the correct defaults and work as expected.
Specific testing for 128-bit IEEE long double ABI will be carried out by the glibc testsuite. Integration smoke testing will be carried out by the glibc developers to make sure new applications are built with the correct defaults and work as expected.
Specific testing for 128-bit IEEE long double ABI will be carried out by the gcc testsuite.
Specific smoke testing will be carried out using gdb to read and write the new types.


== User Experience ==
== User Experience ==
<!-- If this change proposal is noticeable by its target audience, how will their experiences change as a result?  Describe what they will see or notice. -->
<!-- If this change proposal is noticeable by its target audience, how will their experiences change as a result?  Describe what they will see or notice. -->
<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
Users will see a new 128-bit floating point ABI, but this will largely be transparent to them. On POWER hardware that supports 128-bit long double in hardware the compiler will use the hardware transparently to accelerate floating point operations.
Users will see a new 128-bit floating point ABI, but this will largely be transparent to them. On POWER hardware that supports 128-bit long double in hardware the compiler will use the hardware transparently to accelerate floating point operations, otherwise software floating point emulation will be used.


== Dependencies ==
== Dependencies ==
<!-- What other packages (RPMs) depend on this package?  Are there changes outside the developers' control on which completion of this change depends?  In other words, completion of another change owned by someone else and might cause you to not be able to finish on time or that you would need to coordinate?  Other upstream projects like the kernel (if this is not a kernel change)? -->
<!-- What other packages (RPMs) depend on this package?  Are there changes outside the developers' control on which completion of this change depends?  In other words, completion of another change owned by someone else and might cause you to not be able to finish on time or that you would need to coordinate?  Other upstream projects like the kernel (if this is not a kernel change)? -->
<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
This change requires coordination of glibc and gcc to change the compiler defaults and build the compiler language runtimes correctly.
This change requires coordination of glibc and gcc to change the compiler defaults and build the compiler language runtimes correctly. Also gdb must be able to support the new type to make the process of transition seamless.


== Contingency Plan ==
== Contingency Plan ==
Line 123: Line 127:
== Documentation ==
== Documentation ==
<!-- Is there upstream documentation on this change, or notes you have written yourself?  Link to that material here so other interested developers can get involved. -->
<!-- Is there upstream documentation on this change, or notes you have written yourself?  Link to that material here so other interested developers can get involved. -->
The glibc manual contains the documentation for the release and doesn't need any more additional work.
The glibc/gcc manual contain the documentation for the release and don't need any more additional work.
<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->



Revision as of 19:35, 19 June 2018


New 128-bit IEEE long double ABI for IBM 64-bit POWER LE

Summary

Transition IBM 64-bit POWER LE systems to the new 128-bit IEEE long double ABI.

Owner

  • Name: Carlos O'Donell
  • Email: carlos@redhat.com
  • Release notes owner: carlos@redhat.com
  • Release notes ticket:

Current status

  • Targeted release: Fedora 29
  • Last updated: 2018-06-19
  • Tracker bug:

Detailed Description

IBM has designed a new long double ABI that adheres to the 128-bit IEEE format. This format is more standard than the existing AIX double-double or IBM long double (2 grouped 64-bit doubles) which has discontinuous mantissas and is difficult for developers to use. In Fedora 29 the plan is to switch to the new ABI for long double, while still supporting old applications via compatibility symbols. Newly compiled applications use either the old or new ABI but not a mix of both. Changes are required in the core C libraries, and the compiler and the compiler runtimes including the C++ standard libraries. Therefore there is coordination required across the core toolchain componenents e.g. gcc, binutils, glibc, gdb (to debug the new types).

Benefit to Fedora

Fedora developers will be using a standard 128-bit IEEE format for long double instead of the non-standard double-double AIX format which has a discontinuous mantissa and multiple representations for the same value.

Scope

The change is relatively limited in that not many packages use the long double floating point ABI. The double floating point ABI is much more used, but not long double. It is estimated that few packages use long double directly, and those packages will need to be rebuilt in order to use the new ABI. This rebuilding can be targetted by analyzing which packages have long double usage in their debug information and rebuilding just those packages. However, we plan to just use the existing mass rebuild for glibc 2.28 to handle this issue.

  • Proposal owners: Transition glibc to float128 format for long double for IBM ppc64le. Transition gcc to the default for long double. Ensure gdb can handle the new types.
  • Other developers: Developers need to ensure that rawhide is stable and ready for the Fedora 29 branch.
  • Release engineering: A mass rebuild request has been filed for the parent system-wide change to upgrade glibc to 2.28
  • Policies and guidelines: The policies and guidelines do not need to be updated.
  • Trademark approval: Not needed for this change

Upgrade/compatibility impact

The library and language runtimes are backwards compatible with the version shipped in Fedora 28.

We fully expect to fix all packaging changes in Fedora Rawhide first when everything is ready.

How To Test

The GNU C Library has its own testsuite, which is run during the package build and examined by the glibc developers before being uploaded. This test suite has 2500+ tests that run to verify the correct operation of the library. In the future we'll also be running the microbenchmark to look for performance regressions as well as behavioural ones.

Specific testing for 128-bit IEEE long double ABI will be carried out by the glibc testsuite. Integration smoke testing will be carried out by the glibc developers to make sure new applications are built with the correct defaults and work as expected.

Specific testing for 128-bit IEEE long double ABI will be carried out by the gcc testsuite.

Specific smoke testing will be carried out using gdb to read and write the new types.

User Experience

Users will see a new 128-bit floating point ABI, but this will largely be transparent to them. On POWER hardware that supports 128-bit long double in hardware the compiler will use the hardware transparently to accelerate floating point operations, otherwise software floating point emulation will be used.

Dependencies

This change requires coordination of glibc and gcc to change the compiler defaults and build the compiler language runtimes correctly. Also gdb must be able to support the new type to make the process of transition seamless.

Contingency Plan

  • Contingency mechanism: Given that Rawhide has started tracking glibc 2.28, no show-stopper problems are expected. At this point, we can still revert to upstream version 2.27 if insurmountable problems appear, but to do so may require a mass rebuild to remove new symbols from the ABI/API.
  • Contingency deadline: Upstream ABI freeze deadline of 2018-08-01.
  • Blocks release? Upgrading glibc does block the release. We should not ship without the float128 ABI change.

Documentation

The glibc/gcc manual contain the documentation for the release and don't need any more additional work.

Release Notes

The GNU C Library version 2.28 will be released at the beginning of August 2018. The current NEWS notes can be seen here as they are added: https://sourceware.org/git/?p=glibc.git;a=blob;f=NEWS;hb=HEAD