Skip to content

Commit

Permalink
add patches fixing ld bug linking arm tlsdesc relocs on 64-bit host
Browse files Browse the repository at this point in the history
this is binutils issue #25062. without it, cross-ld crashes linking
arm programs using tlsdesc if the host is 64-bit.
  • Loading branch information
richfelker committed Oct 7, 2019
1 parent 684cb17 commit 02be46d
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 0 deletions.
16 changes: 16 additions & 0 deletions patches/binutils-2.25.1/0010-arm-tlsdesc-64bithost.diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index bb53e039e3..d52c046979 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -12027,9 +12027,9 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
unsigned long data, insn;
unsigned thumb;

- data = bfd_get_32 (input_bfd, hit_data);
+ data = bfd_get_signed_32 (input_bfd, hit_data);
thumb = data & 1;
- data &= ~1u;
+ data &= ~1ul;

if (thumb)
{
16 changes: 16 additions & 0 deletions patches/binutils-2.27/0007-arm-tlsdesc-64bithost.diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index bb53e039e3..d52c046979 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -12027,9 +12027,9 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
unsigned long data, insn;
unsigned thumb;

- data = bfd_get_32 (input_bfd, hit_data);
+ data = bfd_get_signed_32 (input_bfd, hit_data);
thumb = data & 1;
- data &= ~1u;
+ data &= ~1ul;

if (thumb)
{
16 changes: 16 additions & 0 deletions patches/binutils-2.32/0003-arm-tlsdesc-64bithost.diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index bb53e039e3..d52c046979 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -12027,9 +12027,9 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
unsigned long data, insn;
unsigned thumb;

- data = bfd_get_32 (input_bfd, hit_data);
+ data = bfd_get_signed_32 (input_bfd, hit_data);
thumb = data & 1;
- data &= ~1u;
+ data &= ~1ul;

if (thumb)
{

0 comments on commit 02be46d

Please sign in to comment.