blob: aa512b87ffcc844b78e9a4f89dc3e086d38cf566 [file] [log] [blame]
Andrew Geisslera9ff2b32020-10-16 10:11:54 -05001From 24f96f4e86895b41aae21f775599a857939d002f Mon Sep 17 00:00:00 2001
Brad Bishop26bdd442019-08-16 17:08:17 -04002From: Nagaraju Mekala <nmekala@xilix.com>
3Date: Wed, 24 Oct 2018 12:34:37 +0530
Andrew Geisslera9ff2b32020-10-16 10:11:54 -05004Subject: [PATCH 22/40] fixing the .bss relocation issue
Brad Bishop26bdd442019-08-16 17:08:17 -04005
6---
7 bfd/elf64-microblaze.c | 18 ++++++++++++------
8 1 file changed, 12 insertions(+), 6 deletions(-)
9
10diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050011index b62c47e8514..cb3b40b574c 100644
Brad Bishop26bdd442019-08-16 17:08:17 -040012--- a/bfd/elf64-microblaze.c
13+++ b/bfd/elf64-microblaze.c
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050014@@ -1482,7 +1482,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
Brad Bishop26bdd442019-08-16 17:08:17 -040015 + input_section->output_offset
16 + offset + INST_WORD_SIZE);
17 unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian);
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050018- if (insn == 0xb2000000 || insn == 0xb2ffffff)
Brad Bishop26bdd442019-08-16 17:08:17 -040019+ if ((insn & 0xff000000) == 0xb2000000)
20 {
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050021 insn &= ~0x00ffffff;
Brad Bishop26bdd442019-08-16 17:08:17 -040022 insn |= (relocation >> 16) & 0xffffff;
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050023@@ -1595,7 +1595,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
Brad Bishop26bdd442019-08-16 17:08:17 -040024 + offset + INST_WORD_SIZE);
25 }
26 unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian);
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050027- if (insn == 0xb2000000 || insn == 0xb2ffffff)
Brad Bishop26bdd442019-08-16 17:08:17 -040028+ if ((insn & 0xff000000) == 0xb2000000)
29 {
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050030 insn &= ~0x00ffffff;
Brad Bishop26bdd442019-08-16 17:08:17 -040031 insn |= (relocation >> 16) & 0xffffff;
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050032@@ -1709,7 +1709,7 @@ microblaze_bfd_write_imm_value_32 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val)
Brad Bishop26bdd442019-08-16 17:08:17 -040033 {
34 unsigned long instr = bfd_get_32 (abfd, bfd_addr);
35
36- if (instr == 0xb2000000 || instr == 0xb2ffffff)
37+ if ((instr & 0xff000000) == 0xb2000000)
38 {
39 instr &= ~0x00ffffff;
40 instr |= (val & 0xffffff);
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050041@@ -1732,7 +1732,7 @@ microblaze_bfd_write_imm_value_64 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val)
Brad Bishop26bdd442019-08-16 17:08:17 -040042 unsigned long instr_lo;
43
44 instr_hi = bfd_get_32 (abfd, bfd_addr);
45- if (instr_hi == 0xb2000000 || instr_hi == 0xb2ffffff)
46+ if ((instr_hi & 0xff000000) == 0xb2000000)
47 {
48 instr_hi &= ~0x00ffffff;
49 instr_hi |= (val >> 16) & 0xffffff;
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050050@@ -2225,7 +2225,10 @@ microblaze_elf_relax_section (bfd *abfd,
Brad Bishop26bdd442019-08-16 17:08:17 -040051 unsigned long instr_lo = bfd_get_32 (abfd, ocontents
52 + irelscan->r_offset
53 + INST_WORD_SIZE);
54- immediate = (instr_hi & 0x0000ffff) << 16;
55+ if ((instr_hi & 0xff000000) == 0xb2000000)
56+ immediate = (instr_hi & 0x00ffffff) << 24;
57+ else
58+ immediate = (instr_hi & 0x0000ffff) << 16;
59 immediate |= (instr_lo & 0x0000ffff);
60 offset = calc_fixup (irelscan->r_addend, 0, sec);
61 immediate -= offset;
Andrew Geisslera9ff2b32020-10-16 10:11:54 -050062@@ -2269,7 +2272,10 @@ microblaze_elf_relax_section (bfd *abfd,
Brad Bishop26bdd442019-08-16 17:08:17 -040063 unsigned long instr_lo = bfd_get_32 (abfd, ocontents
64 + irelscan->r_offset
65 + INST_WORD_SIZE);
66- immediate = (instr_hi & 0x0000ffff) << 16;
67+ if ((instr_hi & 0xff000000) == 0xb2000000)
68+ immediate = (instr_hi & 0x00ffffff) << 24;
69+ else
70+ immediate = (instr_hi & 0x0000ffff) << 16;
71 immediate |= (instr_lo & 0x0000ffff);
72 target_address = immediate;
73 offset = calc_fixup (target_address, 0, sec);
Andrew Geissler84ad7c52020-06-27 00:00:16 -050074--
752.17.1
76