bfd: microblaze: Fix bug in TLSTPREL Relocation
authorNeal Frager <neal.frager@amd.com>
Wed, 27 Sep 2023 12:49:18 +0000 (13:49 +0100)
committerMichael J. Eager <eager@eagercon.com>
Fri, 29 Sep 2023 15:44:11 +0000 (08:44 -0700)
Fixed the problem related to the fixup/relocations TLSTPREL.
When the fixup is applied the addend is not added at the correct offset
of the instruction. The offset is hard coded considering its big endian
and it fails for Little endian. This patch allows support for both
big & little-endian compilers.

This patch has been tested for years of AMD Xilinx Yocto
releases as part of the following patch set:

https://github.com/Xilinx/meta-xilinx/tree/master/meta-microblaze/recipes-devtools/binutils/binutils

Signed-off-by: nagaraju <nagaraju.mekala@amd.com>
Signed-off-by: Neal Frager <neal.frager@amd.com>
bfd/elf32-microblaze.c

index bbc70fdf4e36cfb37d675e9ac919833cde634894..a7e81c70fc8e6b3bc91ed5d100987167ecd1ee8a 100644 (file)
@@ -1467,9 +1467,9 @@ microblaze_elf_relocate_section (bfd *output_bfd,
              relocation += addend;
              relocation -= dtprel_base(info);
              bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff,
-                         contents + offset + 2);
+                         contents + offset + endian);
              bfd_put_16 (input_bfd, relocation & 0xffff,
-                         contents + offset + 2 + INST_WORD_SIZE);
+                         contents + offset + endian + INST_WORD_SIZE);
              break;
            case (int) R_MICROBLAZE_TEXTREL_64:
            case (int) R_MICROBLAZE_TEXTREL_32_LO: