Summary: | GCC Upgrade Guide: ABI Change 3.4->4.1? | ||
---|---|---|---|
Product: | [OLD] Docs on www.gentoo.org | Reporter: | Jason Bucata <tech31842> |
Component: | Other documents | Assignee: | Docs Team <docs-team> |
Status: | VERIFIED WONTFIX | ||
Severity: | major | CC: | amne, philantrop, vapier |
Priority: | High | ||
Version: | unspecified | ||
Hardware: | All | ||
OS: | Linux | ||
Whiteboard: | |||
Package list: | Runtime testing required: | --- |
Description
Jason Bucata
2007-08-20 08:30:36 UTC
Adding amne@gentoo.org to CC list per vapier's suggestion Mike, what's the word on this? (In reply to comment #0) > This all came about when I decided I didn't want to have to recompile the world > yet again unless it was really necessary, and from my own research > (corroborated by vapier) it doesn't appear to be necessary. Except for all the tons of duplicates with KDE and any other C++ stuff in the tree which you can find in bugzilla. So yeah, the thing is not compatible and emerge -e world is needed. Welcome the reoccuring debate about recompiling everything after gcc upgrades. ;-) In short: Some people prefer rebuilding only what's necessary, some would rather like to see users rebuild everything to make sure everything works absolutely 100%. As for the ABI changes in 3.4->4.1, for all i know (which is mostly based on what Mike told me), there shouldn't be any major change. Also see https://bugs.gentoo.org/show_bug.cgi?id=145014#c5 (last 2 paragraphs) and the following comment for some related debate about it. Personally i think the best solution would be changing "To be completely safe that your system is in a sane state, you must rebuild the toolchain and then world to make use of the new compiler." to "...you should rebuild the toolchain and then world..." (s/must/should) and let users figure out themselves if they rather want to be completely safe or a bit less safe and avoide -e world. GCC 3.4.x has C++ ABI 1.3 and 4.x 1.3.1. I'm not aware to what degree the documentation is correct or merely reflects which GCC versions went stable on Gentoo, but no GCC 3.4.x and 4.x don't have the same C++ ABI and it's necessary to rebuild all C++ applications, when switching. irrelevant in the discussion of upgrading ... ABI is backwards compatible so anything that works with 1.3 will work with 1.3.1 (In reply to comment #6) > irrelevant in the discussion of upgrading ... ABI is backwards compatible so > anything that works with 1.3 will work with 1.3.1 Except that if you mix those, things will bomb out horribly, as proved by hundreds of duplicates of Bug 64615 and Bug 123065. You really intend to drop the only piece of documentation that was added specifically because of this C++ borkage, so that we get flooded by even more duplicates, or what exactly are you suggesting here? Packages depending on boost, sigc++.. like bmpx, and deluge also breaks if you mix libraries built with 3.4.x and 4.x, so they are definately not compatible. Upstream is to blame for not bumping libstdc++ .so version number. (In reply to comment #6) > irrelevant in the discussion of upgrading ... ABI is backwards compatible so > anything that works with 1.3 will work with 1.3.1 Spanky, in the real world (in contrast to the rather academic view of backwards-compatibility) this causes major issues till now, so please follow Wernfried's advice from comment #4 if "must" really hurts anyone. (I greatly prefer the "must" considering the bugs jakub referenced.) Better spend your time adding ChangeLog entries during your next stabilisation orgy. :-) (In reply to comment #5) > GCC 3.4.x has C++ ABI 1.3 and 4.x 1.3.1 Is there any documentation on those? I evidently missed it. Look. People. Chill. Out. No, the text on what to do during the upgrade will not be altered in any way -- users really must (not should) fix their toolchains first and then recompile world with the fixed toolchain. That isn't the issue here. The issue here is that little bit of text that says "as GCC-3.4 and GCC-4.1 use slightly different ABIs" -- this is actually quite correct, as Carlo has already mentioned. Here's the thing. If I just delete that one sentence fragment, without leaving an explanation on why users have to recompile for those versions, guess what will happen? Users will file spurious bug reports or send in emails wanting to know why. And then they'll start the whole argument process that I've seen innumerable times on e.g. the forums and old bugs on whether or not they think they can get away without fixing their system between gcc's major version number changes. And then what happens? The same bit of text goes back in. So, here's how it's going to go down: nothing will be changed in the text, because nothing should be. Those hundreds of dups are proof that the guide's upgrading instructions *are* mandatory and that they *must* be followed to avoid those kinds of breakages. The ABI *did* change. 4.1 *cannot* replace 3.4 without some kind of recompiling. Nothing to alter in the doc. |