Don't break your users: keep your API/ABI stable!
summary
Symbol versioning attaches version nodes to exported symbols so old binaries keep finding the same symbol names at runtime; map files define those version nodes and are passed to the linker with --version-script. Creating aliases with assembler directives and marking implementations with a single @ mark or double @@ mark lets two versions coexist. The tool abimap updates map files (commands: new, update, check, version, final), checks for accidental removals, requires the full exported-symbol list, and cannot auto-extract symbols or move an existing symbol into a new version.
AI-written summary · about
chapters (7)
- 0:00Intro
- 0:26Agenda
- 2:59Versioning
- 4:48Map files
- 10:35Making incompatible changes
- 13:08Updating the map files
- 18:04Summary
related talks
01h 29mC++ API & ABI versioning
18mMix Testing: Specifying and Testing ABI Compatibility of C/C++ Atomics Implementations
04mLink compatibility
24m(Ab)using Compiler Tools
16mMind the Gap (Between Your Code and Your Toolchain)
01h 35mImpact on maintainability and refactoring for higher-level design features
24mRefactoring Legacy Codebases with LibTooling
05matomic_try_update - A more, better compare-and-swap
