Mailinglist Archive: opensuse-factory (745 mails)

< Previous Next >
Re: [opensuse-packaging] Re: [opensuse-factory] Why has -fstack-clash-protection been added to optflags?
On Wed, 24 Jan 2018, Dave Plater wrote:



On 24/01/2018 10:26, Richard Biener wrote:
I can't see how anything sane would prevent using a newer compiler for
any of the above packages. The compilers generate ABI compatible
code after all, so unless audacity and friends do sth very stupid there
shouldn't be an issue with building one of them with a newer compiler.

Richard.
wxWidgets is very sensitive see:
http://bugzilla.suse.com/show_bug.cgi?id=1074040
https://bugzilla.opensuse.org/show_bug.cgi?id=1051717
https://bugzilla.suse.com/show_bug.cgi?id=1030196
It's a pity I didn't choose gcc7 then but audacity appears to be very popular
in our distribution.

Error message from console reads thus:

audacity
Fatal Error: Mismatch between the program and library build versions
detected.
The library used 3.0 (wchar_t,compiler with C++ ABI 1002,wx
containers,compatible with 2.8),
and your program used 3.0 (wchar_t,compiler with C++ ABI 1009,wx
containers,compatible with 2.8).

this seems to be a premature check done by wxWidgets / audacity? They
appear to key on __GXX_ABI_VERSION but almost _nothing_ changes when
this version changes. It's really only for corner cases like fixing
mangling with vectors and attributes. For packages you could also
simply downgrade the ABI version via -fabi-version=N (but then you'd
have to have a way to communicate the ABI version chosen to compile
wxWidgets to wxWidget users). There is also the corresponding
-Wabi=N so you can instead do -Wabi=N (ABI version used to compile
wxWidget).

Can you somehow disable this checking for wxWidgets? It seems _really_
odd they invented this.

Googling reveals the current upstream version has

// GCC and Intel C++ share same C++ ABI (and possibly others in the
future),
// check if compiler versions are compatible:
#if defined(__GXX_ABI_VERSION)
// The changes between ABI versions 1002 through 1010 (documented at
// https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html
// under -fabi-version) don't affect wxWidgets, so we allow a library
// and an application to differ within that range.
#if ((__GXX_ABI_VERSION >= 1002) && (__GXX_ABI_VERSION <= 1010))
#define wxGXX_EFFECTIVE_ABI_VERSION 1002
#else
#define wxGXX_EFFECTIVE_ABI_VERSION __GXX_ABI_VERSION
#endif

so wouldn't have complained like in bnc#1074040. GCC 7 introduces version
11 which I bet also doesn't affect wxWidgets... quoting the docs:

Version 11, which first appeared in G++ 7, corrects the mangling of
sizeof... expressions and operator names. For multiple entities with
the same name within a function, that are declared in different scopes,
the mangling now changes starting with the twelfth occurrence. It also
implies @option{-fnew-inheriting-ctors}.

Just patch this insanity out ...

Richard.

Another question, logic dictates that a package has to actually build with
-fstack-clash-protection to benefit from it? Doesn't this mean that all 42.3
packages need to rebuild?
BTW packman does connect to 42.3:Update, audacity fails to build there.
Dave



--
Richard Biener <rguenther@xxxxxxx>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB
21284 (AG Nuernberg)
--
To unsubscribe, e-mail: opensuse-factory+unsubscribe@xxxxxxxxxxxx
To contact the owner, e-mail: opensuse-factory+owner@xxxxxxxxxxxx

< Previous Next >