https://sourceware.org/bugzilla/show_bug.cgi?id=25636
Bug ID: 25636 Summary: gold generates unnecessary PLT entries for C++ virtual functions in shared libraries Product: binutils Version: 2.27 Status: UNCONFIRMED Severity: normal Priority: P2 Component: gold Assignee: ccoutant at gmail dot com Reporter: jchl at arista dot com CC: ian at airs dot com Target Milestone: --- For a C++ virtual function defined in a shared library, but not called from within that shared library, gold generates a unnecessary PLT entry. This PLT entry is not generated by ld.bfd. Here's a minimal repro scenario. $ cat test.cpp class Test { virtual void f(); }; void Test::f() {} $ g++ -fuse-ld=bfd -shared -fPIC -o libTest.so.bfd test.cpp $ g++ -fuse-ld=gold -shared -fPIC -o libTest.so.gold test.cpp $ objdump -R --demangle libTest.so.bfd libTest.so.bfd: file format elf32-i386 DYNAMIC RELOCATION RECORDS OFFSET TYPE VALUE 00001eec R_386_RELATIVE *ABS* 00001ef0 R_386_RELATIVE *ABS* 0000200c R_386_RELATIVE *ABS* 00001efc R_386_32 typeinfo for Test@@Base 00001f00 R_386_32 Test::f()@@Base 00001f04 R_386_32 vtable for __cxxabiv1::__class_type_info@CXXABI_1.3 00001f08 R_386_32 typeinfo name for Test@@Base 00001fec R_386_GLOB_DAT __gmon_start__ 00001ff0 R_386_GLOB_DAT _Jv_RegisterClasses 00001ff4 R_386_GLOB_DAT _ITM_deregisterTMCloneTable 00001ff8 R_386_GLOB_DAT _ITM_registerTMCloneTable 00001ffc R_386_GLOB_DAT __cxa_finalize@GLIBC_2.1.3 $ objdump -R --demangle libTest.so.gold libTest.so.gold: file format elf32-i386 DYNAMIC RELOCATION RECORDS OFFSET TYPE VALUE 00001eb4 R_386_RELATIVE *ABS* 00001eb8 R_386_RELATIVE *ABS* 0000200c R_386_RELATIVE *ABS* 00001fe0 R_386_GLOB_DAT __gmon_start__ 00001fe4 R_386_GLOB_DAT _ITM_deregisterTMCloneTable 00001fe8 R_386_GLOB_DAT _ITM_registerTMCloneTable 00001fec R_386_GLOB_DAT __cxa_finalize@GLIBC_2.1.3 00001ff0 R_386_GLOB_DAT _Jv_RegisterClasses 00001ec8 R_386_32 vtable for __cxxabiv1::__class_type_info@CXXABI_1.3 00001ec4 R_386_32 Test::f()@@Base 00001ec0 R_386_32 typeinfo for Test@@Base 00001ecc R_386_32 typeinfo name for Test@@Base 00002000 R_386_JUMP_SLOT __gmon_start__ 00002004 R_386_JUMP_SLOT __cxa_finalize@GLIBC_2.1.3 00002008 R_386_JUMP_SLOT Test::f()@@Base Note the additional R_386_JUMP_SLOT relocation for Test::f() in the library generated by gold. Tested with gold from binutils version 2.27, on i386. $ ld.gold -v GNU gold (version 2.27-41.base.el7_7.1) 1.12 -- You are receiving this mail because: You are on the CC list for the bug.