Re: i386 compatibility & libstdc++
Arnd Bergmann <email@example.com> writes:
> They have to be compiled for i386, as they have always been.
> If they were compiled for i486, they would not run on i386
> anyway, with or without the bug.
But if they are compiled for i386, they won't run on other Linux
systems, thus losing binary compatibility.
> Ok, I probably wasn't clear enough about the actual trick. If you want
> to use foreign binaries or build any debian packages libraries with
> C++ for i486+, you need to install the i486 libstdc++ files.
Not only those, but also all other libraries that the executable links
> For example, we could have these files in libstdc++5_3.3-x_i386.deb:
> /usr/lib/i386/libstdc++-i386.so.5 -> libstdc++.so.5.0.3
> /usr/lib/i486/libstdc++.so.5 -> libstdc++.so.5.0.3
> /usr/lib/i486/libstdc++-i386.so.5 -> libstdc++.so.5.0.3
You need to add Qt, kde, and many other libraries to that as well.
Essentially, for each C++ library, you should have three versions: the
2.95 version, the c102 version, and the c102-debian version.
> All default packages are built for i386 (as always) and linked
> for with the soname libstdc++-i386.so.5. On i486+ systems,
> the runtime linker will automatically use
> /usr/lib/i486/libstdc++-i386.so.5, which resolve the
> __exchange_and_add() function to the trivial assembly version.
Isn't the __exchange_and_add function inline, so that the dynamic
linker can't change its implementation, anyway?