From 0b1474281c659919d9c63ccfd6891b9e9ed0fc9c Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 18 Jul 2019 10:31:44 +0930 Subject: [PATCH] [PowerPC64] correct tprel offset limit I don't expect anyone will have hit this bug. You'd need a TLS segment of 2G before you'd notice. * elf64-ppc.c (ppc64_elf_tls_optimize): Correct test for allowed range of tp-relative offsets. --- bfd/ChangeLog | 5 +++++ bfd/elf64-ppc.c | 5 ++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7d841e29e5..bbef105a2c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2019-07-18 Alan Modra + + * elf64-ppc.c (ppc64_elf_tls_optimize): Correct test for allowed + range of tp-relative offsets. + 2019-07-15 Alan Modra * elflink.c (_bfd_elf_fix_symbol_flags): If the def for an diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index d77cfdf9d2..9d3ba36c02 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -7734,9 +7734,8 @@ ppc64_elf_tls_optimize (struct bfd_link_info *info) { value += sym_sec->output_offset; value += sym_sec->output_section->vma; - value -= htab->elf.tls_sec->vma; - ok_tprel = (value + TP_OFFSET + ((bfd_vma) 1 << 31) - < (bfd_vma) 1 << 32); + value -= htab->elf.tls_sec->vma + TP_OFFSET; + ok_tprel = value + 0x80008000ULL < 1ULL << 32; } }