From ef05be83b7e1e10e7cba51aeafc879ca3a66826d Mon Sep 17 00:00:00 2001 From: Andreas Krebbel Date: Mon, 12 Oct 2015 10:21:51 +0200 Subject: [PATCH] PR19083 S/390: Fix garbage collection of some GOT relocs. bfd/ChangeLog: 2015-10-12 Andreas Krebbel PR ld/19083 * elf32-s390.c (elf_s390_gc_sweep_hook): Do not reduce got refcount for relocs not really requiring a got slot. * elf64-s390.c (elf_s390_gc_sweep_hook): Likewise. --- bfd/ChangeLog | 7 +++++++ bfd/elf32-s390.c | 10 ++++++---- bfd/elf64-s390.c | 11 ++++++----- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3e234b4..ce1089b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2015-10-12 Andreas Krebbel + + PR ld/19083 + * elf32-s390.c (elf_s390_gc_sweep_hook): Do not reduce got + refcount for relocs not really requiring a got slot. + * elf64-s390.c (elf_s390_gc_sweep_hook): Likewise. + 2015-10-11 John David Anglin * elf-hppa.h (elf_hppa_action_discarded): Ignore relocations in diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c index 2143ee1..dc2d80f 100644 --- a/bfd/elf32-s390.c +++ b/bfd/elf32-s390.c @@ -1527,6 +1527,12 @@ elf_s390_gc_sweep_hook (bfd *abfd, elf_s390_hash_table (info)->tls_ldm_got.refcount -= 1; break; + case R_390_GOTOFF16: + case R_390_GOTOFF32: + case R_390_GOTPC: + case R_390_GOTPCDBL: + break; + case R_390_TLS_GD32: case R_390_TLS_IE32: case R_390_TLS_GOTIE12: @@ -1537,10 +1543,6 @@ elf_s390_gc_sweep_hook (bfd *abfd, case R_390_GOT16: case R_390_GOT20: case R_390_GOT32: - case R_390_GOTOFF16: - case R_390_GOTOFF32: - case R_390_GOTPC: - case R_390_GOTPCDBL: case R_390_GOTENT: if (h != NULL) { diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index 1c37699..7cc0489 100644 --- a/bfd/elf64-s390.c +++ b/bfd/elf64-s390.c @@ -1462,6 +1462,12 @@ elf_s390_gc_sweep_hook (bfd *abfd, if (htab->tls_ldm_got.refcount > 0) htab->tls_ldm_got.refcount -= 1; break; + case R_390_GOTOFF16: + case R_390_GOTOFF32: + case R_390_GOTOFF64: + case R_390_GOTPC: + case R_390_GOTPCDBL: + break; case R_390_TLS_GD64: case R_390_TLS_IE64: @@ -1474,11 +1480,6 @@ elf_s390_gc_sweep_hook (bfd *abfd, case R_390_GOT20: case R_390_GOT32: case R_390_GOT64: - case R_390_GOTOFF16: - case R_390_GOTOFF32: - case R_390_GOTOFF64: - case R_390_GOTPC: - case R_390_GOTPCDBL: case R_390_GOTENT: if (h != NULL) { -- 2.7.4