Handle sign bit when generating veneer for ARM Thumb branch relocation
authorColin Watson <cjwatson@canonical.com>
Mon, 8 Apr 2013 23:02:27 +0000 (00:02 +0100)
committerJoachim Breitner <nomeata@debian.org>
Wed, 1 Apr 2015 11:35:10 +0000 (11:35 +0000)
Gbp-Pq: Name Handle-sign-bit-when-generating-veneer-for-ARM-Thumb.patch

rts/Linker.c

index 56003fb7469e3b4bc4626c600ba77b319b4dadec..0354b1e149c94fc512db2f872bca1b92f3238ed8 100644 (file)
@@ -4850,6 +4850,7 @@ do_Elf_Rel_relocations ( ObjectCode* oc, char* ehdrC,
                // Generate veneer
                SymbolExtra *extra = makeArmSymbolExtra(oc, ELF_R_SYM(info), S+imm+4, 1, is_target_thm);
                offset = (StgWord32) &extra->jumpIsland - P - 4;
+               sign = offset >> 31;
                to_thm = 1;
             } else if (!is_target_thm && ELF_R_TYPE(info) == R_ARM_THM_CALL) {
                offset &= ~0x3;