bug-binutils
[Top][All Lists]
Advanced

[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.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]