[binutils-gdb] gold: powerpc: Test whether sym is not a plugin in do_gc_mark_symbol

Alan Modra amodra@sourceware.org
Thu May 14 23:51:32 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=6a31512fd4fdd38ee2b1ea78543d352f961ca172

commit 6a31512fd4fdd38ee2b1ea78543d352f961ca172
Author: Nikita Ermakov <coffe92@gmail.com>
Date:   Fri May 15 08:27:57 2020 +0930

    gold: powerpc: Test whether sym is not a plugin in do_gc_mark_symbol
    
    sym->object() could be either a Plugin or Powerpc_relobj. There could
    be a situation when Pluginobj would be proccessed in
    ppc_object->get_opd_ent(dst_off) as Powerpc_relobj and it leads to the
    segmentation fault.
    
            * powerpc.cc (do_gc_mark_symbol): Don't segfault on plugin symbols.

Diff:
---
 gold/ChangeLog  | 4 ++++
 gold/powerpc.cc | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/gold/ChangeLog b/gold/ChangeLog
index 212c9fac9da..e85669a9f4b 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,7 @@
+2020-05-15  Nikita Ermakov  <coffe92@gmail.com>
+
+	* powerpc.cc (do_gc_mark_symbol): Don't segfault on plugin symbols.
+
 2020-05-14  Nick Clifton  <nickc@redhat.com>
 
 	* po/sr.po: New Serbian translation.
diff --git a/gold/powerpc.cc b/gold/powerpc.cc
index eae483212b8..2010c1e3d2b 100644
--- a/gold/powerpc.cc
+++ b/gold/powerpc.cc
@@ -9056,7 +9056,7 @@ Target_powerpc<size, big_endian>::do_gc_mark_symbol(
     Symbol_table* symtab,
     Symbol* sym) const
 {
-  if (size == 64)
+  if (size == 64 && sym->object()->pluginobj() == NULL)
     {
       Powerpc_relobj<size, big_endian>* ppc_object
 	= static_cast<Powerpc_relobj<size, big_endian>*>(sym->object());


More information about the Binutils-cvs mailing list