[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug gold/25636] New: gold generates unnecessary PLT entries for C++ vir
From: |
jchl at arista dot com |
Subject: |
[Bug gold/25636] New: gold generates unnecessary PLT entries for C++ virtual functions in shared libraries |
Date: |
Thu, 05 Mar 2020 15:00:38 +0000 |
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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Bug gold/25636] New: gold generates unnecessary PLT entries for C++ virtual functions in shared libraries,
jchl at arista dot com <=