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



On Tue, Nov 17, 2020 at 6:51 AM Kjell Ahlstedt <kjellahlstedt gmail com> wrote:

wrap_init.cc contains the following lines:
#undef  G_GNUC_CONST
#define G_GNUC_CONST /* empty */

Oh, right. I see this in Fedora's rpm debug source. I also see the calls to Gtk::TextView::get_type in the debug source. However, when I objdump -C -S /usr/lib64/libgtkmm-3.0.so.1.1.0 I see the calls are definitely not made from Gtk::wrap_init (I've included a snippet of the end of the objdump below.

I split the TVDerived class into a separate source and header file and made an init() function that calls TVDerived::get_type(), undef'd G_GNU_CONST and compiled it to a shared library... but actually the undef is working; when undef'd the get_type() call is made and the gtkmm type gets printed out. If I don't undef then the get_type call is not made and only GtkTextView gets printed.

So... I guess this isn't a simple problem to verify the root cause. I think I'll need to build gtkmm from source, capture the exact compiler and linker parameters etc... I'll try this weekend.


objdump output, the tail end of Gtk::wrap_init has the last wrap_register, but no e.g.  jmpq   60e0 <Gtk::TextView::get_type()@plt>:

   Glib::wrap_register(gtk_window_group_get_type(), &WindowGroup_Class::wrap_new);
  32d1d1:       e8 9a cd ed ff          callq  209f70 <gtk_window_group_get_type@plt>
  32d1d6:       48 8b 35 1b 7e 11 00    mov    0x117e1b(%rip),%rsi        # 444ff8 <Gtk::WindowGroup_Class::wrap_new(_GObject*)@@Base+0x13b0c8>
  VolumeButton::get_type();
  Widget::get_type();
  Window::get_type();
  WindowGroup::get_type();

} // wrap_init()
  32d1dd:       48 83 c4 08             add    $0x8,%rsp
  Glib::wrap_register(gtk_window_group_get_type(), &WindowGroup_Class::wrap_new);
  32d1e1:       48 89 c7                mov    %rax,%rdi
  32d1e4:       e9 a7 75 ee ff          jmpq   214790 <Glib::wrap_register(unsigned long, Glib::ObjectBase* (*)(_GObject*))@plt>
  32d1e9:       90                      nop
  32d1ea:       66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)

000000000032d1f0 <Gtk::AccelKey::AccelKey(Glib::ustring const&, Glib::ustring const&)@@Base>:
AccelKey::AccelKey(const Glib::ustring& accelerator, const Glib::ustring& accel_path)
  32d1f0:       41 55                   push   %r13
: path_(accel_path)
  32d1f2:       4c 8d 6f 08             lea    0x8(%rdi),%r13
AccelKey::AccelKey(const Glib::ustring& accelerator, const Glib::ustring& accel_path)


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