diff options
Diffstat (limited to 'meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0018-Fixed-MB-x-relocation-issues.patch')
-rw-r--r-- | meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0018-Fixed-MB-x-relocation-issues.patch | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0018-Fixed-MB-x-relocation-issues.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0018-Fixed-MB-x-relocation-issues.patch deleted file mode 100644 index 84a4d3160..000000000 --- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0018-Fixed-MB-x-relocation-issues.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 0868dedda1b7b8112870dcc69f887d32a51b94b6 Mon Sep 17 00:00:00 2001 -From: Nagaraju Mekala <nmekala@xilix.com> -Date: Fri, 28 Sep 2018 12:04:55 +0530 -Subject: [PATCH 18/52] -Fixed MB-x relocation issues -Added imml for required - MB-x instructions - ---- - bfd/elf64-microblaze.c | 68 ++++++++++++++--- - gas/config/tc-microblaze.c | 152 +++++++++++++++++++++++++++---------- - gas/tc.h | 2 +- - 3 files changed, 167 insertions(+), 55 deletions(-) - -Index: gdb-9.2/bfd/elf64-microblaze.c -=================================================================== ---- gdb-9.2.orig/bfd/elf64-microblaze.c -+++ gdb-9.2/bfd/elf64-microblaze.c -@@ -1488,8 +1488,17 @@ microblaze_elf_relocate_section (bfd *ou - relocation -= (input_section->output_section->vma - + input_section->output_offset - + offset + INST_WORD_SIZE); -- bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff, -+ unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian); -+ if (insn == 0xb2000000 || insn == 0xb2ffffff) -+ { -+ insn &= ~0x00ffffff; -+ insn |= (relocation >> 16) & 0xffffff; -+ bfd_put_32 (input_bfd, insn, - contents + offset + endian); -+ } -+ else -+ bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff, -+ contents + offset + endian); - bfd_put_16 (input_bfd, relocation & 0xffff, - contents + offset + endian + INST_WORD_SIZE); - } -@@ -1580,11 +1589,28 @@ microblaze_elf_relocate_section (bfd *ou - else - { - if (r_type == R_MICROBLAZE_64_PCREL) -- relocation -= (input_section->output_section->vma -- + input_section->output_offset -- + offset + INST_WORD_SIZE); -- bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff, -+ { -+ if (!input_section->output_section->vma && -+ !input_section->output_offset && !offset) -+ relocation -= (input_section->output_section->vma -+ + input_section->output_offset -+ + offset); -+ else -+ relocation -= (input_section->output_section->vma -+ + input_section->output_offset -+ + offset + INST_WORD_SIZE); -+ } -+ unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian); -+ if (insn == 0xb2000000 || insn == 0xb2ffffff) -+ { -+ insn &= ~0x00ffffff; -+ insn |= (relocation >> 16) & 0xffffff; -+ bfd_put_32 (input_bfd, insn, - contents + offset + endian); -+ } -+ else -+ bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff, -+ contents + offset + endian); - bfd_put_16 (input_bfd, relocation & 0xffff, - contents + offset + endian + INST_WORD_SIZE); - } -@@ -1703,9 +1729,19 @@ static void - microblaze_bfd_write_imm_value_32 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val) - { - unsigned long instr = bfd_get_32 (abfd, bfd_addr); -- instr &= ~0x0000ffff; -- instr |= (val & 0x0000ffff); -- bfd_put_32 (abfd, instr, bfd_addr); -+ -+ if (instr == 0xb2000000 || instr == 0xb2ffffff) -+ { -+ instr &= ~0x00ffffff; -+ instr |= (val & 0xffffff); -+ bfd_put_32 (abfd, instr, bfd_addr); -+ } -+ else -+ { -+ instr &= ~0x0000ffff; -+ instr |= (val & 0x0000ffff); -+ bfd_put_32 (abfd, instr, bfd_addr); -+ } - } - - /* Read-modify-write into the bfd, an immediate value into appropriate fields of -@@ -1717,10 +1753,18 @@ microblaze_bfd_write_imm_value_64 (bfd * - unsigned long instr_lo; - - instr_hi = bfd_get_32 (abfd, bfd_addr); -- instr_hi &= ~0x0000ffff; -- instr_hi |= ((val >> 16) & 0x0000ffff); -- bfd_put_32 (abfd, instr_hi, bfd_addr); -- -+ if (instr_hi == 0xb2000000 || instr_hi == 0xb2ffffff) -+ { -+ instr_hi &= ~0x00ffffff; -+ instr_hi |= (val >> 16) & 0xffffff; -+ bfd_put_32 (abfd, instr_hi,bfd_addr); -+ } -+ else -+ { -+ instr_hi &= ~0x0000ffff; -+ instr_hi |= ((val >> 16) & 0x0000ffff); -+ bfd_put_32 (abfd, instr_hi, bfd_addr); -+ } - instr_lo = bfd_get_32 (abfd, bfd_addr + INST_WORD_SIZE); - instr_lo &= ~0x0000ffff; - instr_lo |= (val & 0x0000ffff); |