Re: Gtk::Builder::get_widget_derived() Issue on Fedora 33



You're on the right track. I built gtkmm with the -flto compile and link option (and gcc 9.3.0). Then Ahmet's test case does not work.

I then removed the redefiniton of G_GNUC_CONST and wrapped the call to Gtk::TextView::get_type() in a call to g_type_ensure() in wrap_init.cc. The test case then works even with LTO enabled.

I guess that with LTO the linker notices that the get_type() methods are declared with __attribute__((__const__)) (from the expansion of G_GNUC_CONST) in one compilation unit and then assumes that it's okay to optimize as if it were declared that way everywhere.

g_type_ensure() is safer than the redefinition of G_GNUC_CONST. I'll fix this in glibmm/tools/generate_wrap_init.pl.in. (wrap_init.cc is generated by generate_wrap_init.pl.) It will probably take quite some time before this fix is available in released versions of all affected mm packages. Meanwhile it would be fine if Fedora and other distros could build the mm packages without LTO.

On 2020-11-17 22:44, Andrew Potter wrote:
I believe this is caused by https://fedoraproject.org/wiki/LTOByDefault

I built the srpm and noticed that the get_type() calls were present in wrap_init.o but was missing from the .so

I added
%define _lto_cflags %{nil}
to the gtkmm .spec file and rebuilt--this disables LTO; the get_type() were then present in the .so

I've left a comment at Fedora's bug tracker for them to disable lto in mm packagesI've left a comment at Fedora's bug tracker for them to disable lto in mm packages. But if we used g_type_ensure() then LTO would be possible I think




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]