]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Re: PR26656, power10 libstdc++.so segfault in __cxxabiv1::__cxa_throw
authorAlan Modra <amodra@gmail.com>
Mon, 28 Sep 2020 00:00:19 +0000 (09:30 +0930)
committerAlan Modra <amodra@gmail.com>
Mon, 28 Sep 2020 00:16:53 +0000 (09:46 +0930)
Some missing NULL checks meant a stub for a local symbol used a stub
looking like the __tls_get_addr_opt stub.

PR 26656
* elf64-ppc.c (ppc_build_one_stub, ppc_size_one_stub): Check for
NULL stub_entry->h before calling is_tls_get_addr.

(cherry picked from commit 12cf8b93da0ae155643d262235486fde5af72a80)

bfd/ChangeLog
bfd/elf64-ppc.c

index 01ccac443e22e8027d0664bf460a2bf979041a5f..dd6d8fdd034ed8597100ae7fc10e03891931c2d8 100644 (file)
@@ -1,3 +1,9 @@
+2020-09-28  Alan Modra  <amodra@gmail.com>
+
+       PR 26656
+       * elf64-ppc.c (ppc_build_one_stub, ppc_size_one_stub): Check for
+       NULL stub_entry->h before calling is_tls_get_addr.
+
 2020-09-26  Alan Modra  <amodra@gmail.com>
 
        * elf64-ppc.c (GLINK_PLTRESOLVE_SIZE): Depend on has_plt_localentry0.
index f4d0c88c7aaa5c4e8d2c29341c547f5cd1700f19..0aeda47e5722dae3b718a67030be09e008ff8283 100644 (file)
@@ -11674,6 +11674,7 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
       obfd = htab->params->stub_bfd;
       is_tga = ((stub_entry->stub_type == ppc_stub_plt_call_notoc
                 || stub_entry->stub_type == ppc_stub_plt_call_both)
+               && stub_entry->h != NULL
                && is_tls_get_addr (&stub_entry->h->elf, htab)
                && htab->params->tls_get_addr_opt);
       if (is_tga)
@@ -12184,7 +12185,8 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
     case ppc_stub_plt_call_notoc:
     case ppc_stub_plt_call_both:
       lr_used = 0;
-      if (is_tls_get_addr (&stub_entry->h->elf, htab)
+      if (stub_entry->h != NULL
+         && is_tls_get_addr (&stub_entry->h->elf, htab)
          && htab->params->tls_get_addr_opt)
        {
          lr_used += 7 * 4;
@@ -12254,6 +12256,7 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
        }
       if ((stub_entry->stub_type == ppc_stub_plt_call_notoc
           || stub_entry->stub_type == ppc_stub_plt_call_both)
+         && stub_entry->h != NULL
          && is_tls_get_addr (&stub_entry->h->elf, htab)
          && htab->params->tls_get_addr_opt)
        {