Feature #5709
closedAdd binary compatibility with Solaris 10 update 10
100%
Description
Solaris 10 update 10 added a new symbol version to libc, SUNW_1.22.7. This means that any binaries built on Solaris 10 update 10 will not be able to run until we introduce the same version in our libc in order to satisfy the load time dependency.
Luckily the new version only includes 4 functions, all of which we have already. The attached patches creates the missing version and relocates the symbols there. This is a non-breaking change and backwards compatible with older illumos binaries.
Related issues
Updated by Andrew Stormont over 8 years ago
Updated by Rich Lowe over 8 years ago
If you do this, it's important that the version have exactly the same symbols in it.
If that's the case here, it's a fine thing to do.
Updated by Andrew Stormont over 8 years ago
That is the case. The new version only includes 4 symbols.
Updated by Andrew Stormont almost 8 years ago
Updated webrev: http://cr.illumos.org/~webrev/andy_js/5709-1
Updated by Andrew Stormont over 7 years ago
- Has duplicate Bug #7165: add intermediate SUNW_1.22.7 symbol version to libc for backward binary support including latest s10 release added
Updated by Joshua M. Clulow over 5 years ago
In the end, we're electing to introduce a dummy symbol into an otherwise empty version.
As per analysis from Andy Fiddaman:
Options:
- Option 1: move symbols to new SUNW_1.22.7 version
- Any old binaries that use the symbols work fine everywhere - they don't even have a dependency on version 1.22.7.
- Any binaries compiled with the new C library have a dependency on the 1.22.7 version so will not run on an older illumos system which does not have it.
- binaries from Solaris 10u10 with a dependency on version 1.22.7 work.
- Option 2: add empty SUNW_1.22.7 version
- new binaries do not use the dummy symbol so will not end up with a dependency on the new version
- new and old binaries run on any illumos system.
- binaries from Solaris 10u10 with a dependency on version 1.22.7 work.
While our release model does allow us to introduce this is as an ABI break from r151026 onwards, option 2 avoids this and also preserves interoperability with other illumos releases regardless of whether they have added this version to their libc.
Note that the dummy symbol in the version we're introducing is necessary to avoid the linker creating a weak version, which behaves differently to the version in the analogous Solaris 10 libc that we are trying to emulate.
The Linkers and Libraries Guide suggests that a weak version definition is to signal "changes to an object that do not require the introduction of a new interface definition"; e.g., bug fixes or performance improvements. It says that weak versions are created by specifying a version that contains no additional symbols, basically.
In addition, it mentions that "[a version's] weak nature precludes its normalisation with [other symbol versions], and results in a separate dependency recording".
Updated by Joshua M. Clulow over 5 years ago
- Subject changed from Add binary compatibility with Solaris 10 update 10. to Add binary compatibility with Solaris 10 update 10
Updated by Electric Monk over 5 years ago
- Status changed from In Progress to Closed
- % Done changed from 0 to 100
git commit c6fe8850c7ff4c85074c93430743b146d8133436
commit c6fe8850c7ff4c85074c93430743b146d8133436 Author: Alexander Pyhalov <apyhalov@gmail.com> Date: 2018-08-26T00:48:14.000Z 5709 Add binary compatibility with Solaris 10 update 10 Reviewed by: Andy Fiddaman <omnios@citrus-it.co.uk> Reviewed by: Toomas Some <tsoome@me.com> Reviewed by: Gordon Ross <gordon.w.ross@gmail.com> Approved by: Joshua M. Clulow <josh@sysmgr.org>