summaryrefslogtreecommitdiffstats
path: root/meta-microblaze/recipes-devtools/gdb/gdb/0020-Various-fixes.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-microblaze/recipes-devtools/gdb/gdb/0020-Various-fixes.patch')
-rw-r--r--meta-microblaze/recipes-devtools/gdb/gdb/0020-Various-fixes.patch98
1 files changed, 98 insertions, 0 deletions
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0020-Various-fixes.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0020-Various-fixes.patch
new file mode 100644
index 00000000..eb0bc982
--- /dev/null
+++ b/meta-microblaze/recipes-devtools/gdb/gdb/0020-Various-fixes.patch
@@ -0,0 +1,98 @@
1From 188a60b441711f663f07dc3c3902c8c5d590eb6c Mon Sep 17 00:00:00 2001
2From: Nagaraju Mekala <nmekala@xilix.com>
3Date: Tue, 9 Oct 2018 10:14:22 +0530
4Subject: [PATCH 20/40] Various fixes
5
6- Fixed address computation issues with 64bit address
7- Fixed imml dissassamble issue
8---
9 bfd/bfd-in2.h | 5 +++
10 bfd/elf64-microblaze.c | 14 ++++----
11 opcodes/microblaze-dis.c | 2 +-
12 4 files changed, 79 insertions(+), 16 deletions(-)
13
14diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
15index 3899352b1d5..91761bf6964 100644
16--- a/bfd/bfd-in2.h
17+++ b/bfd/bfd-in2.h
18@@ -5378,6 +5378,11 @@ value in two words (with an imml instruction). No relocation is
19 done here - only used for relaxing */
20 BFD_RELOC_MICROBLAZE_64,
21
22+/* This is a 64 bit reloc that stores the 32 bit relative
23+value in two words (with an imml instruction). No relocation is
24+done here - only used for relaxing */
25+ BFD_RELOC_MICROBLAZE_EA64,
26+
27 /* This is a 64 bit reloc that stores the 32 bit pc relative
28 value in two words (with an imm instruction). No relocation is
29 done here - only used for relaxing */
30diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c
31index f8f52870639..17e58748a0b 100644
32--- a/bfd/elf64-microblaze.c
33+++ b/bfd/elf64-microblaze.c
34@@ -121,15 +121,15 @@ static reloc_howto_type microblaze_elf_howto_raw[] =
35 0, /* Rightshift. */
36 4, /* Size (0 = byte, 1 = short, 2 = long). */
37 64, /* Bitsize. */
38- TRUE, /* PC_relative. */
39+ FALSE, /* PC_relative. */
40 0, /* Bitpos. */
41 complain_overflow_dont, /* Complain on overflow. */
42 bfd_elf_generic_reloc,/* Special Function. */
43 "R_MICROBLAZE_IMML_64", /* Name. */
44 FALSE, /* Partial Inplace. */
45 0, /* Source Mask. */
46- 0x0000ffff, /* Dest Mask. */
47- TRUE), /* PC relative offset? */
48+ 0xffffffffffffff, /* Dest Mask. */
49+ FALSE), /* PC relative offset? */
50
51 /* A 64 bit relocation. Table entry not really used. */
52 HOWTO (R_MICROBLAZE_64, /* Type. */
53@@ -585,9 +585,9 @@ microblaze_elf_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
54 case BFD_RELOC_32:
55 microblaze_reloc = R_MICROBLAZE_32;
56 break;
57- /* RVA is treated the same as 32 */
58+ /* RVA is treated the same as 64 */
59 case BFD_RELOC_RVA:
60- microblaze_reloc = R_MICROBLAZE_32;
61+ microblaze_reloc = R_MICROBLAZE_IMML_64;
62 break;
63 case BFD_RELOC_32_PCREL:
64 microblaze_reloc = R_MICROBLAZE_32_PCREL;
65@@ -619,7 +619,7 @@ microblaze_elf_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
66 case BFD_RELOC_VTABLE_ENTRY:
67 microblaze_reloc = R_MICROBLAZE_GNU_VTENTRY;
68 break;
69- case BFD_RELOC_MICROBLAZE_64:
70+ case BFD_RELOC_MICROBLAZE_EA64:
71 microblaze_reloc = R_MICROBLAZE_IMML_64;
72 break;
73 case BFD_RELOC_MICROBLAZE_64_GOTPC:
74@@ -1956,7 +1956,7 @@ microblaze_elf_relax_section (bfd *abfd,
75 efix = calc_fixup (target_address, 0, sec);
76
77 /* Validate the in-band val. */
78- val = bfd_get_32 (abfd, contents + irel->r_offset);
79+ val = bfd_get_64 (abfd, contents + irel->r_offset);
80 if (val != irel->r_addend && ELF64_R_TYPE (irel->r_info) == R_MICROBLAZE_32_NONE) {
81 fprintf(stderr, "%d: CORRUPT relax reloc %x %lx\n", __LINE__, val, irel->r_addend);
82 }
83diff --git a/opcodes/microblaze-dis.c b/opcodes/microblaze-dis.c
84index 437f536e96a..24ede714858 100644
85--- a/opcodes/microblaze-dis.c
86+++ b/opcodes/microblaze-dis.c
87@@ -78,7 +78,7 @@ get_field_imml (struct string_buf *buf, long instr)
88 {
89 char *p = strbuf (buf);
90
91- sprintf (p, "%d", (short)((instr & IMML_MASK) >> IMM_LOW));
92+ sprintf (p, "%d", (int)((instr & IMML_MASK) >> IMM_LOW));
93 return p;
94 }
95
96--
972.17.1
98