aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2019-07-18 10:31:44 +0930
committerAlan Modra <amodra@gmail.com>2019-07-18 22:17:29 +0930
commit0b1474281c659919d9c63ccfd6891b9e9ed0fc9c (patch)
treef1c1869b254ebdeb28533461ef1b9bc5d988257b
parentd0044bac9eb6c5476d29c41872bcf8f74a990d4f (diff)
[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.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf64-ppc.c5
2 files changed, 7 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 7d841e29e59..bbef105a2c3 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2019-07-18 Alan Modra <amodra@gmail.com>
+
+ * elf64-ppc.c (ppc64_elf_tls_optimize): Correct test for allowed
+ range of tp-relative offsets.
+
2019-07-15 Alan Modra <amodra@gmail.com>
* 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 d77cfdf9d25..9d3ba36c02e 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;
}
}