meta-xilinx: subtree update:569f52f275..b3e37df5d9

Mark Hatle (11):
      meta-microblaze: Move gcc patch that was missed in the prior work
      Uprev standalone toolchain bbappends
      pmu-firmware: Latest toolchain always treats 'assert' as a macro
      binutils: update to early gatesgarth version
      gdb: update to early gatesgarth version
      gcc: update to early gatesgarth version
      newlib: update to early gatesgarth version
      machine/aarch64-tc.conf: Fix incorrect ilp32 pkgarch
      libgcc.bbappend: Clear empty lib directory
      newlib: Upstream now disabled builtin symbols
      gdb: Fix on-target GDB compilation

Sai Hari Chandana Kalluri (5):
      linux-xlnx_2020.2: Fix previous git cherry-pick
      xrt: Remove stale patch to fix endian issues with latest version of boost
      opencl-clhpp, ocl-icd: Remove recipes from meta-xilinx
      esw.bbclass: Remove trailing / after S
      Remove recipe bbappends pointing to older versions

Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
Change-Id: I18b028388a5b55a49ef135b98290228fa797e38d
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb-microblaze.inc b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb-microblaze.inc
index 906ef4d..4ba5d98 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb-microblaze.inc
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb-microblaze.inc
@@ -5,35 +5,54 @@
 FILESEXTRAPATHS_append := ":${THISDIR}/gdb"
 
 SRC_URI_append_microblaze = " \
-    file://0001-sim-Allow-microblaze-architecture.patch \
-    file://0002-Add-wdc.ext.clear-and-wdc.ext.flush-insns.patch \
-    file://0004-Disable-the-warning-message-for-eh_frame_hdr.patch \
-    file://0005-Fix-relaxation-of-assembler-resolved-references.patch \
-    file://0006-microblaze-Fixup-debug_loc-sections-after-linker-rel.patch \
-    file://0007-upstream-change-to-garbage-collection-sweep-causes-m.patch \
-    file://0008-Fix-bug-in-TLSTPREL-Relocation.patch \
-    file://0009-Added-Address-extension-instructions.patch \
-    file://0010-Add-new-bit-field-instructions.patch \
-    file://0011-fixing-the-imm-bug.patch \
-    file://0015-intial-commit-of-MB-64-bit.patch \
-    file://0016-MB-X-initial-commit.patch \
-    file://0017-Patch-Microblaze-negl-instruction-is-overriding-rsub.patch \
-    file://0018-Added-relocations-for-MB-X.patch \
-    file://0019-Update-MB-x.patch \
-    file://0020-Various-fixes.patch \
-    file://0021-Adding-new-relocation-to-support-64bit-rodata.patch \
-    file://0022-fixing-the-.bss-relocation-issue.patch \
-    file://0023-Fixed-the-bug-in-the-R_MICROBLAZE_64_NONE-relocation.patch \
-    file://0025-Patch-Microblaze-Binutils-security-check-is-causing-.patch \
-    file://0026-fixing-the-long-long-long-mingw-toolchain-issue.patch \
-    file://0027-Added-support-to-new-arithmetic-single-register-inst.patch \
-    file://0028-Patch-MicroBlaze-double-imml-generation-for-64-bit-v.patch \
-    file://0033-Fix-various-compile-warnings.patch \
-    file://0034-Add-initial-port-of-linux-gdbserver.patch \
-    file://0035-Initial-port-of-core-reading-support.patch \
-    file://0036-Fix-debug-message-when-register-is-unavailable.patch \
-    file://0037-microblaze-Add-build_gdbserver-yes-to-top-level-conf.patch \
-    file://0038-Initial-support-for-native-gdb.patch \
-    file://0039-Fixing-the-issues-related-to-GDB-7.12.patch \
-    file://0040-Patch-microblaze-Adding-64-bit-MB-support.patch \
-        "
+     file://0001-Add-wdc.ext.clear-and-wdc.ext.flush-insns.patch \
+     file://0003-Disable-the-warning-message-for-eh_frame_hdr.patch \
+     file://0004-LOCAL-Fix-relaxation-of-assembler-resolved-reference.patch \
+     file://0005-upstream-change-to-garbage-collection-sweep-causes-m.patch \
+     file://0006-Fix-bug-in-TLSTPREL-Relocation.patch \
+     file://0007-Added-Address-extension-instructions.patch \
+     file://0008-fixing-the-MAX_OPCODES-to-correct-value.patch \
+     file://0009-Add-new-bit-field-instructions.patch \
+     file://0010-fixing-the-imm-bug.patch \
+     file://0014-intial-commit-of-MB-64-bit.patch \
+     file://0015-MB-X-initial-commit.patch \
+     file://0016-Patch-Microblaze-negl-instruction-is-overriding-rsub.patch \
+     file://0017-Added-relocations-for-MB-X.patch \
+     file://0018-Fixed-MB-x-relocation-issues.patch \
+     file://0019-Fixing-the-branch-related-issues.patch \
+     file://0020-Fixed-address-computation-issues-with-64bit-address.patch \
+     file://0021-Adding-new-relocation-to-support-64bit-rodata.patch \
+     file://0022-fixing-the-.bss-relocation-issue.patch \
+     file://0023-Fixed-the-bug-in-the-R_MICROBLAZE_64_NONE-relocation.patch \
+     file://0025-fixing-the-long-long-long-mingw-toolchain-issue.patch \
+     file://0026-Added-support-to-new-arithmetic-single-register-inst.patch \
+     file://0027-Patch-MicroBlaze-double-imml-generation-for-64-bit-v.patch \
+     file://0032-ld-emulparams-elf64microblaze-Fix-emulation-generati.patch \
+     file://0033-Add-initial-port-of-linux-gdbserver-add-gdb_proc_ser.patch \
+     file://0034-Initial-port-of-core-reading-support-Added-support-f.patch \
+     file://0035-Fix-debug-message-when-register-is-unavailable.patch \
+     file://0036-revert-master-rebase-changes-to-gdbserver.patch \
+     file://0037-revert-master-rebase-changes-to-gdbserver-previous-c.patch \
+     file://0038-microblaze-Add-build_gdbserver-yes-to-top-level-conf.patch \
+     file://0039-Initial-support-for-native-gdb.patch \
+     file://0040-Fixing-the-issues-related-to-GDB-7.12-added-all-the-.patch \
+     file://0041-Adding-64-bit-MB-support-Added-new-architecture-to-M.patch \
+     file://0042-porting-GDB-for-linux.patch \
+     file://0043-Binutils-security-check-is-causing-build-error-for-w.patch \
+     file://0044-Correcting-the-register-names-from-slr-shr-to-rslr-r.patch \
+     file://0045-Removing-the-header-gdb_assert.h-from-MB-target-file.patch \
+     file://0046-bfd-cpu-microblaze.c-Enhance-disassembler.patch \
+     file://0047-bfd-elf64-microblaze.c-Fix-build-failures.patch \
+     file://0048-bfd-elf-microblaze.c-Remove-obsolete-entries.patch \
+     file://0049-bfd-elf64-microblaze.c-Resolve-various-compiler-warn.patch \
+     file://0050-opcodes-microblaze-dis.c-Fix-compile-warnings.patch \
+     file://0051-gdb-microblaze-tdep.c-Remove-unused-functions.patch \
+     file://0052-sim-Allow-microblaze-architecture.patch \
+     file://0053-gdb-Fix-microblaze-target-compilation.patch \
+     "
+
+#
+##     file://0048-bfd-gas-Use-standard-method-to-set-the-machine-arch.patch \
+##     file://0052-opcodes-microblaze-opc.h-Expand-the-size-to-int-to-d.patch \
+##     file://0053-opcodes-microblaze-opc.h-MIN_IMML-is-too-large.patch \
+#
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0002-Add-wdc.ext.clear-and-wdc.ext.flush-insns.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0001-Add-wdc.ext.clear-and-wdc.ext.flush-insns.patch
similarity index 94%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0002-Add-wdc.ext.clear-and-wdc.ext.flush-insns.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0001-Add-wdc.ext.clear-and-wdc.ext.flush-insns.patch
index 6967a3d..bf8757a 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0002-Add-wdc.ext.clear-and-wdc.ext.flush-insns.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0001-Add-wdc.ext.clear-and-wdc.ext.flush-insns.patch
@@ -1,7 +1,7 @@
-From d7a3a238edac153f391a65ae45215a117d25bc48 Mon Sep 17 00:00:00 2001
+From fd3110f46b2de34bddfe855aa8830c957e89d815 Mon Sep 17 00:00:00 2001
 From: David Holsgrove <david.holsgrove@xilinx.com>
 Date: Wed, 8 May 2013 11:03:36 +1000
-Subject: [PATCH 02/40] Add wdc.ext.clear and wdc.ext.flush insns
+Subject: [PATCH 01/52] Add wdc.ext.clear and wdc.ext.flush insns
 
 Added two new instructions, wdc.ext.clear and wdc.ext.flush,
 to enable MicroBlaze to flush an external cache, which is
@@ -15,7 +15,7 @@
  2 files changed, 6 insertions(+), 3 deletions(-)
 
 diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h
-index 62ee3c9a4d1..865151f95b0 100644
+index 62ee3c9a4d..865151f95b 100644
 --- a/opcodes/microblaze-opc.h
 +++ b/opcodes/microblaze-opc.h
 @@ -91,6 +91,7 @@
@@ -46,7 +46,7 @@
    {"mfs",   INST_TYPE_RD_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_MFS, 0x94008000, OPCODE_MASK_H23S, mfs, special_inst },
    {"br",    INST_TYPE_R2, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x98000000, OPCODE_MASK_H124, br, branch_inst },
 diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h
-index 5a2d3b0c8bb..42f3dd3be53 100644
+index 5a2d3b0c8b..42f3dd3be5 100644
 --- a/opcodes/microblaze-opcm.h
 +++ b/opcodes/microblaze-opcm.h
 @@ -33,8 +33,8 @@ enum microblaze_instr
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0001-sim-Allow-microblaze-architecture.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0001-sim-Allow-microblaze-architecture.patch
deleted file mode 100644
index 6f05472..0000000
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0001-sim-Allow-microblaze-architecture.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From d23be47051b4410e2e74c6db6bf9a1a9f7195f6d Mon Sep 17 00:00:00 2001
-From: Mark Hatle <mark.hatle@kernel.crashing.org>
-Date: Thu, 6 Aug 2020 15:37:52 -0500
-Subject: [PATCH 01/40] sim: Allow microblaze* architecture
-
-Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org>
----
- sim/configure     | 2 +-
- sim/configure.tgt | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/sim/configure b/sim/configure
-index 72f95cd5c7a..9e28cc78687 100755
---- a/sim/configure
-+++ b/sim/configure
-@@ -3795,7 +3795,7 @@ subdirs="$subdirs aarch64"
- 
- 
-        ;;
--   microblaze-*-*)
-+   microblaze*-*-*)
- 
-   sim_arch=microblaze
-   subdirs="$subdirs microblaze"
-diff --git a/sim/configure.tgt b/sim/configure.tgt
-index 8a8e03d96f4..f6743fe8d41 100644
---- a/sim/configure.tgt
-+++ b/sim/configure.tgt
-@@ -59,7 +59,7 @@ case "${target}" in
-    mcore-*-*)
-        SIM_ARCH(mcore)
-        ;;
--   microblaze-*-*)
-+   microblaze*-*-*)
-        SIM_ARCH(microblaze)
-        ;;
-    mips*-*-*)
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0004-Disable-the-warning-message-for-eh_frame_hdr.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0003-Disable-the-warning-message-for-eh_frame_hdr.patch
similarity index 69%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0004-Disable-the-warning-message-for-eh_frame_hdr.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0003-Disable-the-warning-message-for-eh_frame_hdr.patch
index 78e1026..28d6057 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0004-Disable-the-warning-message-for-eh_frame_hdr.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0003-Disable-the-warning-message-for-eh_frame_hdr.patch
@@ -1,18 +1,18 @@
-From 2e87167d8c5d40d8dfbd8d879d78ab0bd6f3bdfd Mon Sep 17 00:00:00 2001
+From 1e223d69ba8c3587c18e57e22dc3b6d2c6ce5cc9 Mon Sep 17 00:00:00 2001
 From: "Edgar E. Iglesias" <edgar.iglesias@gmail.com>
 Date: Fri, 22 Jun 2012 01:20:20 +0200
-Subject: [PATCH 04/40] Disable the warning message for eh_frame_hdr
+Subject: [PATCH 03/52] Disable the warning message for eh_frame_hdr
 
 Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
 ---
  bfd/elf-eh-frame.c | 3 +++
  1 file changed, 3 insertions(+)
 
-diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c
-index b622ffcee2a..26b180f1490 100644
---- a/bfd/elf-eh-frame.c
-+++ b/bfd/elf-eh-frame.c
-@@ -1044,10 +1044,13 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info,
+Index: gdb-9.2/bfd/elf-eh-frame.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf-eh-frame.c
++++ gdb-9.2/bfd/elf-eh-frame.c
+@@ -1044,10 +1044,13 @@ _bfd_elf_parse_eh_frame (bfd *abfd, stru
    goto success;
  
   free_no_table:
@@ -26,6 +26,3 @@
    hdr_info->u.dwarf.table = FALSE;
    if (sec_info)
      free (sec_info);
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0004-LOCAL-Fix-relaxation-of-assembler-resolved-reference.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0004-LOCAL-Fix-relaxation-of-assembler-resolved-reference.patch
new file mode 100644
index 0000000..d5862d8
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0004-LOCAL-Fix-relaxation-of-assembler-resolved-reference.patch
@@ -0,0 +1,261 @@
+From e98a2f325e1a90dfd6911d124889f0760d663b5c Mon Sep 17 00:00:00 2001
+From: Mahesh Bodapati <mbodapat@xilinx.com>
+Date: Tue, 8 Nov 2016 11:54:08 +0530
+Subject: [PATCH 04/52] [LOCAL]: Fix relaxation of assembler resolved
+ references,Fixup debug_loc sections after linker relaxation Adds a new
+ reloctype R_MICROBLAZE_32_NONE, used for passing reloc info from the
+ assembler to the linker when the linker manages to fully resolve a local
+ symbol reference.
+
+This is a workaround for design flaws in the assembler to
+linker interface with regards to linker relaxation.
+
+Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
+Signed-off-by: David Holsgrove <david.holsgrove@xilinx.com>
+
+Conflicts:
+	bfd/elf32-microblaze.c
+	binutils/readelf.c
+	include/elf/microblaze.h
+---
+ bfd/bfd-in2.h              |   5 ++
+ bfd/elf32-microblaze.c     | 126 ++++++++++++++++++++++++++++---------
+ bfd/libbfd.h               |   1 +
+ bfd/reloc.c                |   6 ++
+ binutils/readelf.c         |   4 ++
+ gas/config/tc-microblaze.c |   4 ++
+ include/elf/microblaze.h   |   2 +
+ 7 files changed, 119 insertions(+), 29 deletions(-)
+
+Index: gdb-9.2/bfd/bfd-in2.h
+===================================================================
+--- gdb-9.2.orig/bfd/bfd-in2.h
++++ gdb-9.2/bfd/bfd-in2.h
+@@ -5363,6 +5363,11 @@ value relative to the read-write small d
+ expressions of the form "Symbol Op Symbol"  */
+   BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM,
+ 
++/* This is a 32 bit reloc that stores the 32 bit pc relative
++value in two words (with an imm instruction).No relocation is 
++done here - only used for relaxing  */
++  BFD_RELOC_MICROBLAZE_32_NONE,
++
+ /* This is a 64 bit reloc that stores the 32 bit pc relative
+ value in two words (with an imm instruction).  No relocation is
+ done here - only used for relaxing  */
+Index: gdb-9.2/bfd/elf32-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf32-microblaze.c
++++ gdb-9.2/bfd/elf32-microblaze.c
+@@ -177,6 +177,20 @@ static reloc_howto_type microblaze_elf_h
+ 	  FALSE),		/* PC relative offset?  */
+ 
+    /* This reloc does nothing.	Used for relaxation.  */
++   HOWTO (R_MICROBLAZE_32_NONE,	/* Type.  */
++          0,			/* Rightshift.  */
++          2,			/* Size (0 = byte, 1 = short, 2 = long).  */
++          32,			/* Bitsize.  */
++          TRUE,			/* PC_relative.  */
++          0,			/* Bitpos.  */
++          complain_overflow_bitfield,  /* Complain on overflow.  */
++          NULL,                  /* Special Function.  */
++          "R_MICROBLAZE_32_NONE",/* Name.  */
++          FALSE,		/* Partial Inplace.  */
++          0,			/* Source Mask.  */
++          0,			/* Dest Mask.  */
++          FALSE),		/* PC relative offset?  */
++
+    HOWTO (R_MICROBLAZE_64_NONE,	/* Type.  */
+ 	  0,			/* Rightshift.  */
+ 	  3,			/* Size (0 = byte, 1 = short, 2 = long).  */
+@@ -562,7 +576,10 @@ microblaze_elf_reloc_type_lookup (bfd *
+     case BFD_RELOC_NONE:
+       microblaze_reloc = R_MICROBLAZE_NONE;
+       break;
+-    case BFD_RELOC_MICROBLAZE_64_NONE:
++    case BFD_RELOC_MICROBLAZE_32_NONE:
++      microblaze_reloc = R_MICROBLAZE_32_NONE;
++      break;
++     case BFD_RELOC_MICROBLAZE_64_NONE:
+       microblaze_reloc = R_MICROBLAZE_64_NONE;
+       break;
+     case BFD_RELOC_32:
+@@ -1918,18 +1935,26 @@ microblaze_elf_relax_section (bfd *abfd,
+ 		}
+ 	      break;
+ 	    case R_MICROBLAZE_NONE:
++	    case R_MICROBLAZE_32_NONE:
+ 	      {
+ 		/* This was a PC-relative instruction that was
+ 		   completely resolved.  */
+ 		int sfix, efix;
++                unsigned int val;
+ 		bfd_vma target_address;
+ 		target_address = irel->r_addend + irel->r_offset;
+ 		sfix = calc_fixup (irel->r_offset, 0, sec);
+ 		efix = calc_fixup (target_address, 0, sec);
+-		irel->r_addend -= (efix - sfix);
+-		/* Should use HOWTO.  */
+-		microblaze_bfd_write_imm_value_32 (abfd, contents + irel->r_offset,
+-						   irel->r_addend);
++
++                /* Validate the in-band val.  */
++                val = bfd_get_32 (abfd, contents + irel->r_offset);
++                if (val != irel->r_addend && ELF32_R_TYPE (irel->r_info) == R_MICROBLAZE_32_NONE) {
++                    fprintf(stderr, "%d: CORRUPT relax reloc %x %lx\n", __LINE__, val, irel->r_addend);
++                }
++	        irel->r_addend -= (efix - sfix);
++	        /* Should use HOWTO.  */
++	        microblaze_bfd_write_imm_value_32 (abfd, contents + irel->r_offset,
++	                                           irel->r_addend);
+ 	      }
+ 	      break;
+ 	    case R_MICROBLAZE_64_NONE:
+@@ -1973,30 +1998,73 @@ microblaze_elf_relax_section (bfd *abfd,
+ 	  irelscanend = irelocs + o->reloc_count;
+ 	  for (irelscan = irelocs; irelscan < irelscanend; irelscan++)
+ 	    {
+-	      if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32)
+-		{
+-		  isym = isymbuf + ELF32_R_SYM (irelscan->r_info);
++              if (1 && ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32_NONE)
++                {
++                  unsigned int val;
++
++                  isym = isymbuf + ELF32_R_SYM (irelscan->r_info);
++
++                  /* hax: We only do the following fixup for debug location lists.  */
++                  if (strcmp(".debug_loc", o->name))
++                    continue;
++
++                  /* This was a PC-relative instruction that was completely resolved.  */
++                  if (ocontents == NULL)
++                    {
++		      if (elf_section_data (o)->this_hdr.contents != NULL)
++		          ocontents = elf_section_data (o)->this_hdr.contents;
++		      else
++		        {
++		          /* We always cache the section contents.
++			     Perhaps, if info->keep_memory is FALSE, we
++			     should free them, if we are permitted to.  */
++
++		          if (o->rawsize == 0)
++			      o->rawsize = o->size;
++		          ocontents = (bfd_byte *) bfd_malloc (o->rawsize);
++		          if (ocontents == NULL)
++			      goto error_return;
++		          if (!bfd_get_section_contents (abfd, o, ocontents,
++                                                         (file_ptr) 0,
++                                                         o->rawsize))
++                              goto error_return;
++		          elf_section_data (o)->this_hdr.contents = ocontents;
++		        }
++		    }
+ 
+-		  /* Look at the reloc only if the value has been resolved.  */
+-		  if (isym->st_shndx == shndx
+-		      && (ELF32_ST_TYPE (isym->st_info) == STT_SECTION))
+-		    {
+-		      if (ocontents == NULL)
+-			{
+-			  if (elf_section_data (o)->this_hdr.contents != NULL)
+-			    ocontents = elf_section_data (o)->this_hdr.contents;
+-			  else
+-			    {
+-			      /* We always cache the section contents.
+-				 Perhaps, if info->keep_memory is FALSE, we
+-				 should free them, if we are permitted to.  */
+-			      if (o->rawsize == 0)
+-				o->rawsize = o->size;
+-			      ocontents = (bfd_byte *) bfd_malloc (o->rawsize);
+-			      if (ocontents == NULL)
+-				goto error_return;
+-			      if (!bfd_get_section_contents (abfd, o, ocontents,
+-							     (file_ptr) 0,
++                  val = bfd_get_32 (abfd, ocontents + irelscan->r_offset);
++                  if (val != irelscan->r_addend) {
++			fprintf(stderr, "%d: CORRUPT relax reloc! %x %lx\n", __LINE__, val, irelscan->r_addend);
++                  }
++
++                  irelscan->r_addend -= calc_fixup (irelscan->r_addend, 0, sec);
++                  microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset,
++                                                     irelscan->r_addend);
++              }
++              if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32)
++                {
++	          isym = isymbuf + ELF32_R_SYM (irelscan->r_info);
++
++                  /* Look at the reloc only if the value has been resolved.  */
++                  if (isym->st_shndx == shndx
++                      && (ELF32_ST_TYPE (isym->st_info) == STT_SECTION))
++                    {
++                      if (ocontents == NULL)
++                        {
++                          if (elf_section_data (o)->this_hdr.contents != NULL)
++                            ocontents = elf_section_data (o)->this_hdr.contents;
++                          else
++                            {
++                              /* We always cache the section contents.
++                                 Perhaps, if info->keep_memory is FALSE, we
++                                 should free them, if we are permitted to.  */
++		              if (o->rawsize == 0)
++			        o->rawsize = o->size;
++                              ocontents = (bfd_byte *) bfd_malloc (o->rawsize);
++                              if (ocontents == NULL)
++                                goto error_return;
++                              if (!bfd_get_section_contents (abfd, o, ocontents,
++                                                             (file_ptr) 0,
+ 							     o->rawsize))
+ 				goto error_return;
+ 			      elf_section_data (o)->this_hdr.contents = ocontents;
+@@ -2032,7 +2100,7 @@ microblaze_elf_relax_section (bfd *abfd,
+ 			      elf_section_data (o)->this_hdr.contents = ocontents;
+ 			    }
+ 			}
+-		      irelscan->r_addend -= calc_fixup (irel->r_addend
++		      irelscan->r_addend -= calc_fixup (irelscan->r_addend
+ 							+ isym->st_value,
+ 							0,
+ 							sec);
+Index: gdb-9.2/bfd/libbfd.h
+===================================================================
+--- gdb-9.2.orig/bfd/libbfd.h
++++ gdb-9.2/bfd/libbfd.h
+@@ -2903,6 +2903,7 @@ static const char *const bfd_reloc_code_
+   "BFD_RELOC_MICROBLAZE_32_ROSDA",
+   "BFD_RELOC_MICROBLAZE_32_RWSDA",
+   "BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM",
++  "BFD_RELOC_MICROBLAZE_32_NONE",
+   "BFD_RELOC_MICROBLAZE_64_NONE",
+   "BFD_RELOC_MICROBLAZE_64_GOTPC",
+   "BFD_RELOC_MICROBLAZE_64_GOT",
+Index: gdb-9.2/bfd/reloc.c
+===================================================================
+--- gdb-9.2.orig/bfd/reloc.c
++++ gdb-9.2/bfd/reloc.c
+@@ -6807,6 +6807,12 @@ ENUMDOC
+   This is a 32 bit reloc for the microblaze to handle
+   expressions of the form "Symbol Op Symbol"
+ ENUM
++  BFD_RELOC_MICROBLAZE_32_NONE
++ENUMDOC
++  This is a 32 bit reloc that stores the 32 bit pc relative
++  value in two words (with an imm instruction).  No relocation is
++  done here - only used for relaxing
++ENUM
+   BFD_RELOC_MICROBLAZE_64_NONE
+ ENUMDOC
+   This is a 64 bit reloc that stores the 32 bit pc relative
+Index: gdb-9.2/include/elf/microblaze.h
+===================================================================
+--- gdb-9.2.orig/include/elf/microblaze.h
++++ gdb-9.2/include/elf/microblaze.h
+@@ -61,6 +61,8 @@ START_RELOC_NUMBERS (elf_microblaze_relo
+   RELOC_NUMBER (R_MICROBLAZE_TEXTPCREL_64, 30)  /* PC-relative TEXT offset.  */
+   RELOC_NUMBER (R_MICROBLAZE_TEXTREL_64, 31)    /* TEXT Entry offset 64-bit.  */
+   RELOC_NUMBER (R_MICROBLAZE_TEXTREL_32_LO, 32) /* TEXT Entry offset 32-bit.  */
++  RELOC_NUMBER (R_MICROBLAZE_32_NONE, 33)
++   
+ END_RELOC_NUMBERS (R_MICROBLAZE_max)
+ 
+ /* Global base address names.  */
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0005-Fix-relaxation-of-assembler-resolved-references.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0005-Fix-relaxation-of-assembler-resolved-references.patch
deleted file mode 100644
index d851c58..0000000
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0005-Fix-relaxation-of-assembler-resolved-references.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 210bb23010e2c3e65f5f54c220d27da0590bab06 Mon Sep 17 00:00:00 2001
-From: "Edgar E. Iglesias" <edgar.iglesias@gmail.com>
-Date: Tue, 14 Feb 2012 01:00:22 +0100
-Subject: [PATCH 05/40] Fix relaxation of assembler resolved references
-
----
- bfd/elf32-microblaze.c     | 41 ++++++++++++++++++++++++++++++++++++++
- 2 files changed, 42 insertions(+)
-
-diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c
-index c187d83ee04..dfd82438e35 100644
---- a/bfd/elf32-microblaze.c
-+++ b/bfd/elf32-microblaze.c
-@@ -1973,6 +1973,47 @@ microblaze_elf_relax_section (bfd *abfd,
- 	  irelscanend = irelocs + o->reloc_count;
- 	  for (irelscan = irelocs; irelscan < irelscanend; irelscan++)
- 	    {
-+              if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_NONE)
-+                {
-+                  unsigned int val;
-+
-+                  isym = isymbuf + ELF32_R_SYM (irelscan->r_info);
-+
-+                  /* This was a PC-relative instruction that was completely resolved.  */
-+                  if (ocontents == NULL)
-+                    {
-+                      if (elf_section_data (o)->this_hdr.contents != NULL)
-+                          ocontents = elf_section_data (o)->this_hdr.contents;
-+                      else
-+                        {
-+                          /* We always cache the section contents.
-+                             Perhaps, if info->keep_memory is FALSE, we
-+                             should free them, if we are permitted to.  */
-+
-+                          if (o->rawsize == 0)
-+                              o->rawsize = o->size;
-+                          ocontents = (bfd_byte *) bfd_malloc (o->rawsize);
-+                          if (ocontents == NULL)
-+                              goto error_return;
-+                          if (!bfd_get_section_contents (abfd, o, ocontents,
-+                                                         (file_ptr) 0,
-+                                                         o->rawsize))
-+                              goto error_return;
-+                          elf_section_data (o)->this_hdr.contents = ocontents;
-+                        }
-+                    }
-+                  val = bfd_get_32 (abfd, ocontents + irelscan->r_offset);
-+                  if (val != irelscan->r_addend) {
-+                    fprintf(stderr, "%d: CORRUPT relax reloc! %x %lx\n", __LINE__, val, irelscan->r_addend);
-+                  }
-+                  irelscan->r_addend -= calc_fixup (irelscan->r_addend
-+                                                    + isym->st_value, 0, sec);
-+                  microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset,
-+                                                     irelscan->r_addend);
-+              }
-+              if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_64_NONE) {
-+                  fprintf(stderr, "Unhandled NONE 64\n");
-+              }
- 	      if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32)
- 		{
- 		  isym = isymbuf + ELF32_R_SYM (irelscan->r_info);
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0007-upstream-change-to-garbage-collection-sweep-causes-m.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0005-upstream-change-to-garbage-collection-sweep-causes-m.patch
similarity index 75%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0007-upstream-change-to-garbage-collection-sweep-causes-m.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0005-upstream-change-to-garbage-collection-sweep-causes-m.patch
index 09a17ed..d519530 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0007-upstream-change-to-garbage-collection-sweep-causes-m.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0005-upstream-change-to-garbage-collection-sweep-causes-m.patch
@@ -1,7 +1,7 @@
-From df187bca3d19a3e5c36182929e7e14bc6a49aad5 Mon Sep 17 00:00:00 2001
+From c78337f4e6459e18e1d2af95d8e313b9dcb3f097 Mon Sep 17 00:00:00 2001
 From: David Holsgrove <david.holsgrove@xilinx.com>
 Date: Wed, 27 Feb 2013 13:56:11 +1000
-Subject: [PATCH 07/40] upstream change to garbage collection sweep causes mb
+Subject: [PATCH 05/52] upstream change to garbage collection sweep causes mb
  regression
 
 Upstream change for PR13177 now clears the def_regular during gc_sweep of a
@@ -22,11 +22,11 @@
  bfd/elflink.c | 1 -
  1 file changed, 1 deletion(-)
 
-diff --git a/bfd/elflink.c b/bfd/elflink.c
-index 7078a2fb6f4..7926fdf63be 100644
---- a/bfd/elflink.c
-+++ b/bfd/elflink.c
-@@ -6274,7 +6274,6 @@ elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data)
+Index: gdb-9.2/bfd/elflink.c
+===================================================================
+--- gdb-9.2.orig/bfd/elflink.c
++++ gdb-9.2/bfd/elflink.c
+@@ -6274,7 +6274,6 @@ elf_gc_sweep_symbol (struct elf_link_has
  
        inf = (struct elf_gc_sweep_symbol_info *) data;
        (*inf->hide_symbol) (inf->info, h, TRUE);
@@ -34,6 +34,3 @@
        h->ref_regular = 0;
        h->ref_regular_nonweak = 0;
      }
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0008-Fix-bug-in-TLSTPREL-Relocation.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0006-Fix-bug-in-TLSTPREL-Relocation.patch
similarity index 72%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0008-Fix-bug-in-TLSTPREL-Relocation.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0006-Fix-bug-in-TLSTPREL-Relocation.patch
index c37a5ae..2843bc2 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0008-Fix-bug-in-TLSTPREL-Relocation.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0006-Fix-bug-in-TLSTPREL-Relocation.patch
@@ -1,7 +1,7 @@
-From 0f1d7bd04916af6172780335dc6abc11d45564f2 Mon Sep 17 00:00:00 2001
+From 17ac5acd91e0ef6b103d18018f93fd0fc29a2048 Mon Sep 17 00:00:00 2001
 From: Nagaraju Mekala <nmekala@xilix.com>
 Date: Mon, 15 Jun 2015 16:50:30 +0530
-Subject: [PATCH 08/40] Fix bug in TLSTPREL Relocation
+Subject: [PATCH 06/52] Fix bug in TLSTPREL Relocation
 
 Fixed the problem related to the fixup/relocations TLSTPREL.
 When the fixup is applied the addend is not added at the correct offset
@@ -12,11 +12,11 @@
  bfd/elf32-microblaze.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
 
-diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c
-index cbba704e691..cc4c0568c68 100644
---- a/bfd/elf32-microblaze.c
-+++ b/bfd/elf32-microblaze.c
-@@ -1451,9 +1451,9 @@ microblaze_elf_relocate_section (bfd *output_bfd,
+Index: gdb-9.2/bfd/elf32-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf32-microblaze.c
++++ gdb-9.2/bfd/elf32-microblaze.c
+@@ -1451,9 +1451,9 @@ microblaze_elf_relocate_section (bfd *ou
  	      relocation += addend;
  	      relocation -= dtprel_base(info);
  	      bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff,
@@ -28,6 +28,3 @@
  	      break;
  	    case (int) R_MICROBLAZE_TEXTREL_64:
  	    case (int) R_MICROBLAZE_TEXTREL_32_LO:
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0006-microblaze-Fixup-debug_loc-sections-after-linker-rel.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0006-microblaze-Fixup-debug_loc-sections-after-linker-rel.patch
deleted file mode 100644
index eea2905..0000000
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0006-microblaze-Fixup-debug_loc-sections-after-linker-rel.patch
+++ /dev/null
@@ -1,184 +0,0 @@
-From d2aee40b9753b783853bf38d36d9b6e50d16cc20 Mon Sep 17 00:00:00 2001
-From: Nagaraju Mekala <nmekala@xilix.com>
-Date: Mon, 6 Feb 2017 15:53:08 +0530
-Subject: [PATCH 06/40] microblaze: Fixup debug_loc sections after linker
- relaxation
-
-Adds a new reloctype R_MICROBLAZE_32_NONE, used for passing
-reloc info from the assembler to the linker when the linker
-manages to fully resolve a local symbol reference.
-
-This is a workaround for design flaws in the assembler to
-linker interface with regards to linker relaxation.
-
-Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
-Signed-off-by: Nagaraju Mekala <nmekala@xilinx.com>
----
- bfd/bfd-in2.h              |  5 +++++
- bfd/elf32-microblaze.c     | 39 +++++++++++++++++++++++++++++++-------
- bfd/libbfd.h               |  1 +
- bfd/reloc.c                |  6 ++++++
- include/elf/microblaze.h   |  1 +
- 7 files changed, 52 insertions(+), 7 deletions(-)
-
-diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
-index 6f3e41da376..52c81b10b6d 100644
---- a/bfd/bfd-in2.h
-+++ b/bfd/bfd-in2.h
-@@ -5363,6 +5363,11 @@ value relative to the read-write small data area anchor  */
- expressions of the form "Symbol Op Symbol"  */
-   BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM,
- 
-+/* This is a 32 bit reloc that stores the 32 bit pc relative
-+value in two words (with an imm instruction).  No relocation is
-+done here - only used for relaxing  */
-+  BFD_RELOC_MICROBLAZE_32_NONE,
-+
- /* This is a 64 bit reloc that stores the 32 bit pc relative
- value in two words (with an imm instruction).  No relocation is
- done here - only used for relaxing  */
-diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c
-index dfd82438e35..cbba704e691 100644
---- a/bfd/elf32-microblaze.c
-+++ b/bfd/elf32-microblaze.c
-@@ -176,6 +176,20 @@ static reloc_howto_type microblaze_elf_howto_raw[] =
- 	  0x0000ffff,		/* Dest Mask.  */
- 	  FALSE),		/* PC relative offset?  */
- 
-+   HOWTO (R_MICROBLAZE_32_NONE,   /* Type.  */
-+          0,         /* Rightshift.  */
-+          2,            /* Size (0 = byte, 1 = short, 2 = long).  */
-+          32,           /* Bitsize.  */
-+          TRUE,         /* PC_relative.  */
-+          0,           /* Bitpos.  */
-+          complain_overflow_bitfield,  /* Complain on overflow.  */
-+          NULL,                  /* Special Function.  */
-+          "R_MICROBLAZE_32_NONE",/* Name.  */
-+          FALSE,       /* Partial Inplace.  */
-+          0,          /* Source Mask.  */
-+          0,         /* Dest Mask.  */
-+          FALSE),       /* PC relative offset?  */
-+
-    /* This reloc does nothing.	Used for relaxation.  */
-    HOWTO (R_MICROBLAZE_64_NONE,	/* Type.  */
- 	  0,			/* Rightshift.  */
-@@ -562,6 +576,9 @@ microblaze_elf_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
-     case BFD_RELOC_NONE:
-       microblaze_reloc = R_MICROBLAZE_NONE;
-       break;
-+    case BFD_RELOC_MICROBLAZE_32_NONE:
-+      microblaze_reloc = R_MICROBLAZE_32_NONE;
-+      break;
-     case BFD_RELOC_MICROBLAZE_64_NONE:
-       microblaze_reloc = R_MICROBLAZE_64_NONE;
-       break;
-@@ -1918,14 +1935,22 @@ microblaze_elf_relax_section (bfd *abfd,
- 		}
- 	      break;
- 	    case R_MICROBLAZE_NONE:
-+	    case R_MICROBLAZE_32_NONE:
- 	      {
- 		/* This was a PC-relative instruction that was
- 		   completely resolved.  */
- 		int sfix, efix;
-+		unsigned int val;
- 		bfd_vma target_address;
- 		target_address = irel->r_addend + irel->r_offset;
- 		sfix = calc_fixup (irel->r_offset, 0, sec);
- 		efix = calc_fixup (target_address, 0, sec);
-+
-+		/* Validate the in-band val.  */
-+		val = bfd_get_32 (abfd, contents + irel->r_offset);
-+		if (val != irel->r_addend && ELF32_R_TYPE (irel->r_info) == R_MICROBLAZE_32_NONE) {
-+		       fprintf(stderr, "%d: CORRUPT relax reloc %x %lx\n", __LINE__, val, irel->r_addend);
-+		}
- 		irel->r_addend -= (efix - sfix);
- 		/* Should use HOWTO.  */
- 		microblaze_bfd_write_imm_value_32 (abfd, contents + irel->r_offset,
-@@ -1973,12 +1998,16 @@ microblaze_elf_relax_section (bfd *abfd,
- 	  irelscanend = irelocs + o->reloc_count;
- 	  for (irelscan = irelocs; irelscan < irelscanend; irelscan++)
- 	    {
--              if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_NONE)
-+              if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32_NONE)
-                 {
-                   unsigned int val;
- 
-                   isym = isymbuf + ELF32_R_SYM (irelscan->r_info);
- 
-+                  /* hax: We only do the following fixup for debug location lists.  */
-+                  if (strcmp(".debug_loc", o->name))
-+                    continue;
-+
-                   /* This was a PC-relative instruction that was completely resolved.  */
-                   if (ocontents == NULL)
-                     {
-@@ -2006,14 +2035,10 @@ microblaze_elf_relax_section (bfd *abfd,
-                   if (val != irelscan->r_addend) {
-                     fprintf(stderr, "%d: CORRUPT relax reloc! %x %lx\n", __LINE__, val, irelscan->r_addend);
-                   }
--                  irelscan->r_addend -= calc_fixup (irelscan->r_addend
--                                                    + isym->st_value, 0, sec);
-+                  irelscan->r_addend -= calc_fixup (irelscan->r_addend, 0, sec);
-                   microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset,
-                                                      irelscan->r_addend);
-               }
--              if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_64_NONE) {
--                  fprintf(stderr, "Unhandled NONE 64\n");
--              }
- 	      if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32)
- 		{
- 		  isym = isymbuf + ELF32_R_SYM (irelscan->r_info);
-@@ -2073,7 +2098,7 @@ microblaze_elf_relax_section (bfd *abfd,
- 			      elf_section_data (o)->this_hdr.contents = ocontents;
- 			    }
- 			}
--		      irelscan->r_addend -= calc_fixup (irel->r_addend
-+                     irelscan->r_addend -= calc_fixup (irelscan->r_addend
- 							+ isym->st_value,
- 							0,
- 							sec);
-diff --git a/bfd/libbfd.h b/bfd/libbfd.h
-index 44cefbd66d4..a01891f3423 100644
---- a/bfd/libbfd.h
-+++ b/bfd/libbfd.h
-@@ -2903,6 +2903,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
-   "BFD_RELOC_MICROBLAZE_32_ROSDA",
-   "BFD_RELOC_MICROBLAZE_32_RWSDA",
-   "BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM",
-+  "BFD_RELOC_MICROBLAZE_32_NONE",
-   "BFD_RELOC_MICROBLAZE_64_NONE",
-   "BFD_RELOC_MICROBLAZE_64_GOTPC",
-   "BFD_RELOC_MICROBLAZE_64_GOT",
-diff --git a/bfd/reloc.c b/bfd/reloc.c
-index b00b79f3190..78f13180c71 100644
---- a/bfd/reloc.c
-+++ b/bfd/reloc.c
-@@ -6806,6 +6806,12 @@ ENUM
- ENUMDOC
-   This is a 32 bit reloc for the microblaze to handle
-   expressions of the form "Symbol Op Symbol"
-+ENUM
-+  BFD_RELOC_MICROBLAZE_32_NONE
-+ENUMDOC
-+  This is a 32 bit reloc that stores the 32 bit pc relative
-+  value in two words (with an imm instruction).  No relocation is
-+  done here - only used for relaxing
- ENUM
-   BFD_RELOC_MICROBLAZE_64_NONE
- ENUMDOC
-diff --git a/include/elf/microblaze.h b/include/elf/microblaze.h
-index 830b5ad4461..0dba2c0f44f 100644
---- a/include/elf/microblaze.h
-+++ b/include/elf/microblaze.h
-@@ -61,6 +61,7 @@ START_RELOC_NUMBERS (elf_microblaze_reloc_type)
-   RELOC_NUMBER (R_MICROBLAZE_TEXTPCREL_64, 30)  /* PC-relative TEXT offset.  */
-   RELOC_NUMBER (R_MICROBLAZE_TEXTREL_64, 31)    /* TEXT Entry offset 64-bit.  */
-   RELOC_NUMBER (R_MICROBLAZE_TEXTREL_32_LO, 32) /* TEXT Entry offset 32-bit.  */
-+  RELOC_NUMBER (R_MICROBLAZE_32_NONE, 33)
- END_RELOC_NUMBERS (R_MICROBLAZE_max)
- 
- /* Global base address names.  */
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0009-Added-Address-extension-instructions.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0007-Added-Address-extension-instructions.patch
similarity index 75%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0009-Added-Address-extension-instructions.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0007-Added-Address-extension-instructions.patch
index c9903a4..a2584ed 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0009-Added-Address-extension-instructions.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0007-Added-Address-extension-instructions.patch
@@ -1,7 +1,7 @@
-From c0bb923f0978d5767048274cd778c8cbcef184ec Mon Sep 17 00:00:00 2001
+From 40107e7f6430aebfeba7e8f4eb6d67863520ebd4 Mon Sep 17 00:00:00 2001
 From: Nagaraju Mekala <nmekala@xilix.com>
 Date: Mon, 18 Jan 2016 12:28:21 +0530
-Subject: [PATCH 09/40] Added Address extension instructions
+Subject: [PATCH 07/52] Added Address extension instructions
 
 This patch adds the support of new instructions which are required
 for supporting Address extension feature.
@@ -13,27 +13,17 @@
 
   *microblaze-opc.h (op_code_struct): Update
      Added new instructions
-     Set MAX_OPCODES to matching value
   *microblaze-opcm.h (microblaze_instr): Update
      Added new instructions
 ---
- opcodes/microblaze-opc.h  | 19 +++++++++++++++----
+ opcodes/microblaze-opc.h  | 11 +++++++++++
  opcodes/microblaze-opcm.h | 12 ++++++------
- 2 files changed, 21 insertions(+), 10 deletions(-)
+ 2 files changed, 17 insertions(+), 6 deletions(-)
 
-diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h
-index 865151f95b0..d9a84e575e8 100644
---- a/opcodes/microblaze-opc.h
-+++ b/opcodes/microblaze-opc.h
-@@ -102,7 +102,7 @@
- #define DELAY_SLOT 1
- #define NO_DELAY_SLOT 0
- 
--#define MAX_OPCODES 291
-+#define MAX_OPCODES 299
- 
- struct op_code_struct
- {
+Index: gdb-9.2/opcodes/microblaze-opc.h
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-opc.h
++++ gdb-9.2/opcodes/microblaze-opc.h
 @@ -178,8 +178,11 @@ struct op_code_struct
    {"wdc.ext.clear", INST_TYPE_R1_R2_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000466, OPCODE_MASK_H35B, wdcextclear, special_inst },
    {"wdc.flush", INST_TYPE_R1_R2_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000074, OPCODE_MASK_H34B, wdcflush, special_inst },
@@ -71,20 +61,6 @@
    {"lbui",  INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xE0000000, OPCODE_MASK_H, lbui, memory_load_inst },
    {"lhui",  INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xE4000000, OPCODE_MASK_H, lhui, memory_load_inst },
    {"lwi",   INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xE8000000, OPCODE_MASK_H, lwi, memory_load_inst },
-@@ -258,10 +267,10 @@ struct op_code_struct
-   {"smi",   INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xF8000000, OPCODE_MASK_H, invalid_inst, memory_store_inst },
-   {"msrset",INST_TYPE_RD_IMM15, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x94100000, OPCODE_MASK_H23N, msrset, special_inst },
-   {"msrclr",INST_TYPE_RD_IMM15, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x94110000, OPCODE_MASK_H23N, msrclr, special_inst },
--  {"fadd",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000000, OPCODE_MASK_H4, fadd, arithmetic_inst },
-+  {"fadd",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000000, OPCODE_MASK_H4, mbi_fadd, arithmetic_inst },
-   {"frsub",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000080, OPCODE_MASK_H4, frsub, arithmetic_inst },
--  {"fmul",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000100, OPCODE_MASK_H4, fmul, arithmetic_inst },
--  {"fdiv",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000180, OPCODE_MASK_H4, fdiv, arithmetic_inst },
-+  {"fmul",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000100, OPCODE_MASK_H4, mbi_fmul, arithmetic_inst },
-+  {"fdiv",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000180, OPCODE_MASK_H4, mbi_fdiv, arithmetic_inst },
-   {"fcmp.lt", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000210, OPCODE_MASK_H4, fcmp_lt, arithmetic_inst },
-   {"fcmp.eq", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000220, OPCODE_MASK_H4, fcmp_eq, arithmetic_inst },
-   {"fcmp.le", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000230, OPCODE_MASK_H4, fcmp_le, arithmetic_inst },
 @@ -405,6 +414,8 @@ struct op_code_struct
    {"clz",       INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x900000E0, OPCODE_MASK_H34,  clz,       special_inst },
    {"mbar",      INST_TYPE_IMM5,  INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8020004, OPCODE_MASK_HN,   mbar,      special_inst },
@@ -94,10 +70,10 @@
    {"swapb",     INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x900001E0, OPCODE_MASK_H4,   swapb,     arithmetic_inst },
    {"swaph",     INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x900001E2, OPCODE_MASK_H4,   swaph,     arithmetic_inst },
    {"", 0, 0, 0, 0, 0, 0, 0, 0},
-diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h
-index 42f3dd3be53..8be6e97a1d5 100644
---- a/opcodes/microblaze-opcm.h
-+++ b/opcodes/microblaze-opcm.h
+Index: gdb-9.2/opcodes/microblaze-opcm.h
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-opcm.h
++++ gdb-9.2/opcodes/microblaze-opcm.h
 @@ -33,14 +33,14 @@ enum microblaze_instr
    /* 'or/and/xor' are C++ keywords.  */
    microblaze_or, microblaze_and, microblaze_xor,
@@ -119,6 +95,3 @@
    fcmp_lt, fcmp_eq, fcmp_le, fcmp_gt, fcmp_ne, fcmp_ge, fcmp_un, flt,
    fint, fsqrt,
    tget, tcget, tnget, tncget, tput, tcput, tnput, tncput,
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0008-fixing-the-MAX_OPCODES-to-correct-value.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0008-fixing-the-MAX_OPCODES-to-correct-value.patch
new file mode 100644
index 0000000..ce2447a
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0008-fixing-the-MAX_OPCODES-to-correct-value.patch
@@ -0,0 +1,22 @@
+From e8cd7c56c206c7a4582008d9059fe7a9ad35a44c Mon Sep 17 00:00:00 2001
+From: Nagaraju Mekala <nmekala@xilix.com>
+Date: Thu, 28 Jan 2016 14:07:34 +0530
+Subject: [PATCH 08/52] fixing the MAX_OPCODES to correct value
+
+---
+ opcodes/microblaze-opc.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: gdb-9.2/opcodes/microblaze-opc.h
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-opc.h
++++ gdb-9.2/opcodes/microblaze-opc.h
+@@ -102,7 +102,7 @@
+ #define DELAY_SLOT 1
+ #define NO_DELAY_SLOT 0
+ 
+-#define MAX_OPCODES 291
++#define MAX_OPCODES 299
+ 
+ struct op_code_struct
+ {
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0010-Add-new-bit-field-instructions.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0009-Add-new-bit-field-instructions.patch
similarity index 77%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0010-Add-new-bit-field-instructions.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0009-Add-new-bit-field-instructions.patch
index f94410d..155ef3b 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0010-Add-new-bit-field-instructions.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0009-Add-new-bit-field-instructions.patch
@@ -1,7 +1,7 @@
-From 32058fa03c18d710b3029108e967be687d00516c Mon Sep 17 00:00:00 2001
+From 01453aca6478379bef05095f64ed79509da3a5ca Mon Sep 17 00:00:00 2001
 From: Nagaraju Mekala <nmekala@xilix.com>
 Date: Mon, 18 Jul 2016 12:24:28 +0530
-Subject: [PATCH 10/40] Add new bit-field instructions
+Subject: [PATCH 09/52] Add new bit-field instructions
 
 This patches adds new bsefi and bsifi instructions.
 BSEFI- The instruction shall extract a bit field from a
@@ -12,21 +12,25 @@
 The rest of the bits in the destination register shall be unchanged
 
 Signed-off-by :Nagaraju Mekala <nmekala@xilix.com>
+
+Conflicts:
+	opcodes/microblaze-dis.c
 ---
- opcodes/microblaze-dis.c   | 17 +++++++++
+ gas/config/tc-microblaze.c | 71 +++++++++++++++++++++++++++++++++++++-
+ opcodes/microblaze-dis.c   | 20 +++++++++--
  opcodes/microblaze-opc.h   | 12 ++++++-
  opcodes/microblaze-opcm.h  |  6 +++-
- 4 files changed, 103 insertions(+), 3 deletions(-)
+ 4 files changed, 104 insertions(+), 5 deletions(-)
 
-diff --git a/opcodes/microblaze-dis.c b/opcodes/microblaze-dis.c
-index 2b3aa8e0786..356f1da22ed 100644
---- a/opcodes/microblaze-dis.c
-+++ b/opcodes/microblaze-dis.c
-@@ -90,6 +90,18 @@ get_field_imm5_mbar (struct string_buf *buf, long instr)
-   return p;
+Index: gdb-9.2/opcodes/microblaze-dis.c
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-dis.c
++++ gdb-9.2/opcodes/microblaze-dis.c
+@@ -91,7 +91,19 @@ get_field_imm5_mbar (struct string_buf *
  }
  
-+static char *
+ static char *
+-get_field_rfsl (struct string_buf *buf, long instr)
 +get_field_imm5width (struct string_buf *buf, long instr)
 +{
 +  char *p = strbuf (buf);
@@ -38,25 +42,28 @@
 +  return p;
 +}
 +
- static char *
- get_field_rfsl (struct string_buf *buf, long instr)
++static char *
++get_field_rfsl (struct string_buf *buf,long instr)
  {
-@@ -426,6 +438,11 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
+   char *p = strbuf (buf);
+ 
+@@ -425,7 +437,11 @@ print_insn_microblaze (bfd_vma memaddr,
+ 	  /* For mbar 16 or sleep insn.  */
  	case INST_TYPE_NONE:
  	  break;
- 	  /* For tuqula instruction */
+-	  /* For tuqula instruction */
 +        /* For bit field insns.  */
 +	case INST_TYPE_RD_R1_IMM5_IMM5:
-+	  print_func (stream, "\t%s, %s, %s, %s", get_field_rd (&buf, inst), get_field_r1(&buf, inst), get_field_imm5width (&buf, inst), get_field_imm5 (&buf, inst));
-+	  break;
++          print_func (stream, "\t%s, %s, %s, %s", get_field_rd (&buf, inst),get_field_r1(&buf, inst),get_field_imm5width (&buf, inst), get_field_imm5 (&buf, inst));
++	     break;
 +	/* For tuqula instruction */
  	case INST_TYPE_RD:
  	  print_func (stream, "\t%s", get_field_rd (&buf, inst));
  	  break;
-diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h
-index d9a84e575e8..d3b234e1fcd 100644
---- a/opcodes/microblaze-opc.h
-+++ b/opcodes/microblaze-opc.h
+Index: gdb-9.2/opcodes/microblaze-opc.h
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-opc.h
++++ gdb-9.2/opcodes/microblaze-opc.h
 @@ -59,6 +59,9 @@
  /* For mbar.  */
  #define INST_TYPE_IMM5 20
@@ -104,10 +111,10 @@
 +
  #endif /* MICROBLAZE_OPC */
  
-diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h
-index 8be6e97a1d5..c3b2b8f0f6e 100644
---- a/opcodes/microblaze-opcm.h
-+++ b/opcodes/microblaze-opcm.h
+Index: gdb-9.2/opcodes/microblaze-opcm.h
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-opcm.h
++++ gdb-9.2/opcodes/microblaze-opcm.h
 @@ -29,7 +29,7 @@ enum microblaze_instr
    addi, rsubi, addic, rsubic, addik, rsubik, addikc, rsubikc, mul,
    mulh, mulhu, mulhsu,swapb,swaph,
@@ -135,6 +142,3 @@
  /* FSL imm mask for get, put instructions.  */
  #define  RFSL_MASK 0x000000F
  
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0010-fixing-the-imm-bug.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0010-fixing-the-imm-bug.patch
new file mode 100644
index 0000000..201dfeb
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0010-fixing-the-imm-bug.patch
@@ -0,0 +1,24 @@
+From b2dc3bfabd4d80be7d90502e3d2dc26b508679cb Mon Sep 17 00:00:00 2001
+From: Nagaraju Mekala <nmekala@xilix.com>
+Date: Mon, 10 Jul 2017 16:07:28 +0530
+Subject: [PATCH 10/52] fixing the imm bug. with relax option imm -1 is also
+ getting removed this is corrected now.
+
+---
+ bfd/elf32-microblaze.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+Index: gdb-9.2/bfd/elf32-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf32-microblaze.c
++++ gdb-9.2/bfd/elf32-microblaze.c
+@@ -1869,8 +1869,7 @@ microblaze_elf_relax_section (bfd *abfd,
+       else
+ 	symval += irel->r_addend;
+ 
+-      if ((symval & 0xffff8000) == 0
+-	  || (symval & 0xffff8000) == 0xffff8000)
++      if ((symval & 0xffff8000) == 0)
+ 	{
+ 	  /* We can delete this instruction.  */
+ 	  sec->relax[sec->relax_count].addr = irel->r_offset;
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0011-fixing-the-imm-bug.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0011-fixing-the-imm-bug.patch
deleted file mode 100644
index 3f3c814..0000000
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0011-fixing-the-imm-bug.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 121b64d9dafd3119925a7e95a09fa9f388e53922 Mon Sep 17 00:00:00 2001
-From: Nagaraju Mekala <nmekala@xilix.com>
-Date: Mon, 10 Jul 2017 16:07:28 +0530
-Subject: [PATCH 11/40] fixing the imm bug.
-
-with relax option imm -1 is also getting removed this is corrected now.
----
- bfd/elf32-microblaze.c | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c
-index cc4c0568c68..cb7271f5017 100644
---- a/bfd/elf32-microblaze.c
-+++ b/bfd/elf32-microblaze.c
-@@ -1869,8 +1869,7 @@ microblaze_elf_relax_section (bfd *abfd,
-       else
- 	symval += irel->r_addend;
- 
--      if ((symval & 0xffff8000) == 0
--	  || (symval & 0xffff8000) == 0xffff8000)
-+      if ((symval & 0xffff8000) == 0)
- 	{
- 	  /* We can delete this instruction.  */
- 	  sec->relax[sec->relax_count].addr = irel->r_offset;
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0015-intial-commit-of-MB-64-bit.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0014-intial-commit-of-MB-64-bit.patch
similarity index 91%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0015-intial-commit-of-MB-64-bit.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0014-intial-commit-of-MB-64-bit.patch
index bda74ad..a2a80d5 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0015-intial-commit-of-MB-64-bit.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0014-intial-commit-of-MB-64-bit.patch
@@ -1,84 +1,92 @@
-From 48e5b2505d97ca936e9946c3945c72bdcfc1743e Mon Sep 17 00:00:00 2001
+From b6f02b2535c4051db5fdadbf03dbb88438b5d116 Mon Sep 17 00:00:00 2001
 From: Nagaraju Mekala <nmekala@xilix.com>
 Date: Sun, 30 Sep 2018 16:28:28 +0530
-Subject: [PATCH 15/40] intial commit of MB 64-bit
+Subject: [PATCH 14/52] intial commit of MB 64-bit
 
+Conflicts:
+	bfd/configure
+	bfd/configure.ac
+	bfd/cpu-microblaze.c
+	ld/Makefile.am
+	ld/Makefile.in
+	opcodes/microblaze-dis.c
 ---
  bfd/Makefile.am                    |    2 +
  bfd/Makefile.in                    |    3 +
  bfd/config.bfd                     |    4 +
  bfd/configure                      |    2 +
  bfd/configure.ac                   |    2 +
- bfd/cpu-microblaze.c               |   55 +-
- bfd/doc/Makefile.in                |    1 +
- bfd/elf64-microblaze.c             | 3560 ++++++++++++++++++++++++++++
+ bfd/cpu-microblaze.c               |   53 +-
+ bfd/elf64-microblaze.c             | 3610 ++++++++++++++++++++++++++++
  bfd/targets.c                      |    6 +
+ gas/config/tc-microblaze.c         |  274 ++-
+ gas/config/tc-microblaze.h         |    4 +-
  include/elf/common.h               |    1 +
  ld/Makefile.am                     |    4 +
- ld/Makefile.in                     |    7 +
+ ld/Makefile.in                     |    6 +
  ld/configure.tgt                   |    3 +
  ld/emulparams/elf64microblaze.sh   |   23 +
  ld/emulparams/elf64microblazeel.sh |   23 +
- opcodes/microblaze-dis.c           |   43 +-
+ opcodes/microblaze-dis.c           |   35 +-
  opcodes/microblaze-opc.h           |  162 +-
  opcodes/microblaze-opcm.h          |   20 +-
- 20 files changed, 4156 insertions(+), 43 deletions(-)
+ 19 files changed, 4197 insertions(+), 40 deletions(-)
  create mode 100644 bfd/elf64-microblaze.c
  create mode 100644 ld/emulparams/elf64microblaze.sh
  create mode 100644 ld/emulparams/elf64microblazeel.sh
 
-diff --git a/bfd/Makefile.am b/bfd/Makefile.am
-index e5bd28f03f5..35ecb83a1a1 100644
---- a/bfd/Makefile.am
-+++ b/bfd/Makefile.am
-@@ -558,6 +558,7 @@ BFD64_BACKENDS = \
- 	elf64-ia64.lo \
- 	elf64-ia64-vms.lo \
- 	elfxx-ia64.lo \
+Index: gdb-9.2/bfd/Makefile.am
+===================================================================
+--- gdb-9.2.orig/bfd/Makefile.am
++++ gdb-9.2/bfd/Makefile.am
+@@ -568,6 +568,7 @@ BFD64_BACKENDS = \
+ 	elf64-riscv.lo \
+ 	elfxx-riscv.lo \
+ 	elf64-s390.lo \
 +	elf64-microblaze.lo \
- 	elfn32-mips.lo \
- 	elf64-mips.lo \
- 	elfxx-mips.lo \
-@@ -597,6 +598,7 @@ BFD64_BACKENDS_CFILES = \
- 	elf64-gen.c \
- 	elf64-hppa.c \
- 	elf64-ia64-vms.c \
-+	elf64-microblaze.c \
- 	elf64-mips.c \
- 	elf64-mmix.c \
+ 	elf64-sparc.lo \
+ 	elf64-tilegx.lo \
+ 	elf64-x86-64.lo \
+@@ -602,6 +603,7 @@ BFD64_BACKENDS_CFILES = \
  	elf64-nfp.c \
-diff --git a/bfd/Makefile.in b/bfd/Makefile.in
-index 15334f10c55..89a2470ec8f 100644
---- a/bfd/Makefile.in
-+++ b/bfd/Makefile.in
-@@ -984,6 +984,7 @@ BFD64_BACKENDS = \
- 	elf64-ia64.lo \
- 	elf64-ia64-vms.lo \
- 	elfxx-ia64.lo \
+ 	elf64-ppc.c \
+ 	elf64-s390.c \
++	elf64-microblaze.c \
+ 	elf64-sparc.c \
+ 	elf64-tilegx.c \
+ 	elf64-x86-64.c \
+Index: gdb-9.2/bfd/Makefile.in
+===================================================================
+--- gdb-9.2.orig/bfd/Makefile.in
++++ gdb-9.2/bfd/Makefile.in
+@@ -994,6 +994,7 @@ BFD64_BACKENDS = \
+ 	elf64-riscv.lo \
+ 	elfxx-riscv.lo \
+ 	elf64-s390.lo \
 +	elf64-microblaze.lo \
- 	elfn32-mips.lo \
- 	elf64-mips.lo \
- 	elfxx-mips.lo \
-@@ -1023,6 +1024,7 @@ BFD64_BACKENDS_CFILES = \
- 	elf64-gen.c \
- 	elf64-hppa.c \
- 	elf64-ia64-vms.c \
-+	elf64-microblaze.c \
- 	elf64-mips.c \
- 	elf64-mmix.c \
+ 	elf64-sparc.lo \
+ 	elf64-tilegx.lo \
+ 	elf64-x86-64.lo \
+@@ -1028,6 +1029,7 @@ BFD64_BACKENDS_CFILES = \
  	elf64-nfp.c \
-@@ -1504,6 +1506,7 @@ distclean-compile:
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-hppa.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-ia64-vms.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-ia64.Plo@am__quote@
+ 	elf64-ppc.c \
+ 	elf64-s390.c \
++	elf64-microblaze.c \
+ 	elf64-sparc.c \
+ 	elf64-tilegx.c \
+ 	elf64-x86-64.c \
+@@ -1510,6 +1512,7 @@ distclean-compile:
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-ppc.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-riscv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-s390.Plo@am__quote@
 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-microblaze.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-mips.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-mmix.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-nfp.Plo@am__quote@
-diff --git a/bfd/config.bfd b/bfd/config.bfd
-index 0a96927e0ed..1fcae568c36 100644
---- a/bfd/config.bfd
-+++ b/bfd/config.bfd
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-sparc.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-tilegx.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-x86-64.Plo@am__quote@
+Index: gdb-9.2/bfd/config.bfd
+===================================================================
+--- gdb-9.2.orig/bfd/config.bfd
++++ gdb-9.2/bfd/config.bfd
 @@ -842,11 +842,15 @@ case "${targ}" in
    microblazeel*-*)
      targ_defvec=microblaze_elf32_le_vec
@@ -95,37 +103,37 @@
      ;;
  
  #ifdef BFD64
-diff --git a/bfd/configure b/bfd/configure
-index abd7b2a83e5..731c059eba0 100755
---- a/bfd/configure
-+++ b/bfd/configure
-@@ -14804,6 +14804,8 @@ do
-     metag_elf32_vec)		 tb="$tb elf32-metag.lo elf32.lo $elf" ;;
-     microblaze_elf32_vec)	 tb="$tb elf32-microblaze.lo elf32.lo $elf" ;;
-     microblaze_elf32_le_vec)	 tb="$tb elf32-microblaze.lo elf32.lo $elf" ;;
+Index: gdb-9.2/bfd/configure
+===================================================================
+--- gdb-9.2.orig/bfd/configure
++++ gdb-9.2/bfd/configure
+@@ -14879,6 +14879,8 @@ do
+     s390_elf64_vec)		 tb="$tb elf64-s390.lo elf64.lo $elf"; target_size=64 ;;
+     score_elf32_be_vec)		 tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;;
+     score_elf32_le_vec)		 tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;;
 +    microblaze_elf64_vec)	 tb="$tb elf64-microblaze.lo elf64.lo $elf"; target_size=64 ;;
 +    microblaze_elf64_le_vec)	 tb="$tb elf64-microblaze.lo elf64.lo $elf"; target_size=64 ;;
-     mips_ecoff_be_vec)		 tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
-     mips_ecoff_le_vec)		 tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
-     mips_ecoff_bele_vec)	 tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
-diff --git a/bfd/configure.ac b/bfd/configure.ac
-index 7eee83ae4d4..b87f6183b98 100644
---- a/bfd/configure.ac
-+++ b/bfd/configure.ac
-@@ -540,6 +540,8 @@ do
-     metag_elf32_vec)		 tb="$tb elf32-metag.lo elf32.lo $elf" ;;
-     microblaze_elf32_vec)	 tb="$tb elf32-microblaze.lo elf32.lo $elf" ;;
-     microblaze_elf32_le_vec)	 tb="$tb elf32-microblaze.lo elf32.lo $elf" ;;
+     sh_coff_vec)		 tb="$tb coff-sh.lo $coff" ;;
+     sh_coff_le_vec)		 tb="$tb coff-sh.lo $coff" ;;
+     sh_coff_small_vec)		 tb="$tb coff-sh.lo $coff" ;;
+Index: gdb-9.2/bfd/configure.ac
+===================================================================
+--- gdb-9.2.orig/bfd/configure.ac
++++ gdb-9.2/bfd/configure.ac
+@@ -615,6 +615,8 @@ do
+     s390_elf64_vec)		 tb="$tb elf64-s390.lo elf64.lo $elf"; target_size=64 ;;
+     score_elf32_be_vec)		 tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;;
+     score_elf32_le_vec)		 tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;;
 +    microblaze_elf64_vec)	 tb="$tb elf64-microblaze.lo elf64.lo $elf"; target_size=64 ;;
 +    microblaze_elf64_le_vec)	 tb="$tb elf64-microblaze.lo elf64.lo $elf"; target_size=64 ;;
-     mips_ecoff_be_vec)		 tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
-     mips_ecoff_le_vec)		 tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
-     mips_ecoff_bele_vec)	 tb="$tb coff-mips.lo ecoff.lo $ecoff" ;;
-diff --git a/bfd/cpu-microblaze.c b/bfd/cpu-microblaze.c
-index 4e05d73f01b..4b48b310c6a 100644
---- a/bfd/cpu-microblaze.c
-+++ b/bfd/cpu-microblaze.c
-@@ -23,7 +23,25 @@
+     sh_coff_vec)		 tb="$tb coff-sh.lo $coff" ;;
+     sh_coff_le_vec)		 tb="$tb coff-sh.lo $coff" ;;
+     sh_coff_small_vec)		 tb="$tb coff-sh.lo $coff" ;;
+Index: gdb-9.2/bfd/cpu-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/cpu-microblaze.c
++++ gdb-9.2/bfd/cpu-microblaze.c
+@@ -23,7 +23,24 @@
  #include "bfd.h"
  #include "libbfd.h"
  
@@ -146,13 +154,12 @@
 +  bfd_default_compatible,	/* Architecture comparison function.  */
 +  bfd_default_scan,	   	/* String to architecture conversion.  */
 +  bfd_arch_default_fill,	/* Default fill.  */
-+  &bfd_microblaze_arch[1],  	/* Next in list.  */
-+  0 /* Maximum offset of a reloc from the start of an insn.  */
++  &bfd_microblaze_arch[1]  	/* Next in list.  */
 +},
  {
    32,				/* Bits in a word.  */
    32,				/* Bits in an address.  */
-@@ -39,4 +57,39 @@ const bfd_arch_info_type bfd_microblaze_arch =
+@@ -39,4 +56,38 @@ const bfd_arch_info_type bfd_microblaze_
    bfd_arch_default_fill,	/* Default fill.  */
    NULL,				/* Next in list.  */
    0 /* Maximum offset of a reloc from the start of an insn.  */
@@ -171,8 +178,7 @@
 +  bfd_default_compatible,	/* Architecture comparison function.  */
 +  bfd_default_scan,	   	/* String to architecture conversion.  */
 +  bfd_arch_default_fill,	/* Default fill.  */
-+  &bfd_microblaze_arch[1],   	/* Next in list.  */
-+  0 /* Maximum offset of a reloc from the start of an insn.  */
++  &bfd_microblaze_arch[1]   	/* Next in list.  */
 +},
 +{
 +  64,		  		/* 32 bits in a word.  */
@@ -187,29 +193,16 @@
 +  bfd_default_compatible,	/* Architecture comparison function.  */
 +  bfd_default_scan,	   	/* String to architecture conversion.  */
 +  bfd_arch_default_fill,	/* Default fill.  */
-+  NULL,				/* Next in list.  */
-+  0 /* Maximum offset of a reloc from the start of an insn.  */
++  NULL,			  	/* Next in list.  */
++  0  /* Maximum offset of a reloc from the start of an insn.  */
 +}
 +#endif
  };
-diff --git a/bfd/doc/Makefile.in b/bfd/doc/Makefile.in
-index 0115dfc406c..d75411d2af7 100644
---- a/bfd/doc/Makefile.in
-+++ b/bfd/doc/Makefile.in
-@@ -375,6 +375,7 @@ pdfdir = @pdfdir@
- prefix = @prefix@
- program_transform_name = @program_transform_name@
- psdir = @psdir@
-+runstatedir = @runstatedir@
- sbindir = @sbindir@
- sharedstatedir = @sharedstatedir@
- srcdir = @srcdir@
-diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c
-new file mode 100644
-index 00000000000..fa4b95e47e0
+Index: gdb-9.2/bfd/elf64-microblaze.c
+===================================================================
 --- /dev/null
-+++ b/bfd/elf64-microblaze.c
-@@ -0,0 +1,3560 @@
++++ gdb-9.2/bfd/elf64-microblaze.c
+@@ -0,0 +1,3610 @@
 +/* Xilinx MicroBlaze-specific support for 32-bit ELF
 +
 +   Copyright (C) 2009-2016 Free Software Foundation, Inc.
@@ -868,7 +861,7 @@
 +/* Set the howto pointer for a RCE ELF reloc.  */
 +
 +static bfd_boolean
-+microblaze_elf_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED,
++microblaze_elf_info_to_howto (bfd * abfd,
 +			      arelent * cache_ptr,
 +			      Elf_Internal_Rela * dst)
 +{
@@ -881,14 +874,15 @@
 +  r_type = ELF64_R_TYPE (dst->r_info);
 +  if (r_type >= R_MICROBLAZE_max)
 +    {
-+      (*_bfd_error_handler) (_("%pB: unrecognised MicroBlaze reloc number: %d"),
-+			     abfd, r_type);
++      /* xgettext:c-format */
++      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
++			  abfd, r_type);
 +      bfd_set_error (bfd_error_bad_value);
 +      return FALSE;
 +    }
 +
 +  cache_ptr->howto = microblaze_elf_howto_table [r_type];
-+ return TRUE;
++  return TRUE;
 +}
 +
 +/* Microblaze ELF local labels start with 'L.' or '$L', not '.L'.  */
@@ -1011,7 +1005,6 @@
 +      struct elf64_mb_link_hash_entry *eh;
 +
 +      eh = (struct elf64_mb_link_hash_entry *) entry;
-+      eh->dyn_relocs = NULL;
 +      eh->tls_mask = 0;
 +    }
 +
@@ -1024,7 +1017,7 @@
 +microblaze_elf_link_hash_table_create (bfd *abfd)
 +{
 +  struct elf64_mb_link_hash_table *ret;
-+  bfd_size_type amt = sizeof (struct elf64_mb_link_hash_table);
++  size_t amt = sizeof (struct elf64_mb_link_hash_table);
 +
 +  ret = (struct elf64_mb_link_hash_table *) bfd_zmalloc (amt);
 +  if (ret == NULL)
@@ -1239,6 +1232,7 @@
 +      else
 +	{
 +	  bfd_vma relocation;
++	  bfd_boolean resolved_to_zero;
 +
 +	  /* This is a final link.  */
 +	  sym = NULL;
@@ -1278,6 +1272,9 @@
 +	      goto check_reloc;
 +	    }
 +
++	  resolved_to_zero = (h != NULL
++			      && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
++
 +	  switch ((int) r_type)
 +	    {
 +	    case (int) R_MICROBLAZE_SRO32 :
@@ -1312,11 +1309,14 @@
 +		      }
 +		    else
 +		      {
-+			(*_bfd_error_handler) (_("%s: The target (%s) of an %s relocation is in the wrong section (%s)"),
-+					       bfd_get_filename (input_bfd),
-+					       sym_name,
-+					       microblaze_elf_howto_table[(int) r_type]->name,
-+					       bfd_section_name (sec));
++			_bfd_error_handler
++			  /* xgettext:c-format */
++			  (_("%pB: the target (%s) of an %s relocation"
++			     " is in the wrong section (%pA)"),
++			   input_bfd,
++			   sym_name,
++			   microblaze_elf_howto_table[(int) r_type]->name,
++			   sec);
 +			/*bfd_set_error (bfd_error_bad_value); ??? why? */
 +			ret = FALSE;
 +			continue;
@@ -1357,11 +1357,14 @@
 +		      }
 +		    else
 +		      {
-+			(*_bfd_error_handler) (_("%s: The target (%s) of an %s relocation is in the wrong section (%s)"),
-+					       bfd_get_filename (input_bfd),
-+					       sym_name,
-+					       microblaze_elf_howto_table[(int) r_type]->name,
-+					       bfd_section_name (sec));
++			_bfd_error_handler
++			  /* xgettext:c-format */
++			  (_("%pB: the target (%s) of an %s relocation"
++			     " is in the wrong section (%pA)"),
++			   input_bfd,
++			   sym_name,
++			   microblaze_elf_howto_table[(int) r_type]->name,
++			   sec);
 +			/*bfd_set_error (bfd_error_bad_value); ??? why? */
 +			ret = FALSE;
 +			continue;
@@ -1423,7 +1426,6 @@
 +	      goto dogot;
 +	    case (int) R_MICROBLAZE_TLSLD:
 +	      tls_type = (TLS_TLS | TLS_LD);
-+              /* Fall through. */
 +	    dogot:
 +	    case (int) R_MICROBLAZE_GOT_64:
 +	      {
@@ -1487,7 +1489,8 @@
 +		/* Need to generate relocs ? */
 +		if ((bfd_link_pic (info) || indx != 0)
 +		    && (h == NULL
-+		    || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
++		    || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
++			&& !resolved_to_zero)
 +		    || h->root.type != bfd_link_hash_undefweak))
 +		  need_relocs = TRUE;
 +
@@ -1549,47 +1552,47 @@
 +		      }
 +		    else if (IS_TLS_GD(tls_type))
 +		      {
-+		        *offp |= 1;
-+		        static_value -= dtprel_base(info);
-+		        if (need_relocs)
-+		          {
-+			    microblaze_elf_output_dynamic_relocation (output_bfd,
-+			      htab->srelgot, htab->srelgot->reloc_count++,
-+			      /* symindex= */ indx, R_MICROBLAZE_TLSDTPREL32,
-+			      got_offset, indx ? 0 : static_value);
-+		          }
-+		        else
-+			  {
-+			    bfd_put_32 (output_bfd, static_value,
-+					htab->sgot->contents + off2);
-+		          }
++			*offp |= 1;
++			static_value -= dtprel_base(info);
++			if (need_relocs)
++			  microblaze_elf_output_dynamic_relocation
++			    (output_bfd,
++			     htab->elf.srelgot,
++			     htab->elf.srelgot->reloc_count++,
++			     /* symindex= */ indx, R_MICROBLAZE_TLSDTPREL32,
++			     got_offset, indx ? 0 : static_value);
++			else
++			  bfd_put_32 (output_bfd, static_value,
++				      htab->elf.sgot->contents + off2);
 +		      }
 +		    else
 +		      {
-+			  bfd_put_32 (output_bfd, static_value,
-+				      htab->sgot->contents + off2);
++			bfd_put_32 (output_bfd, static_value,
++				    htab->elf.sgot->contents + off2);
 +
-+			  /* Relocs for dyn symbols generated by
-+			     finish_dynamic_symbols */
-+			  if (bfd_link_pic (info) && h == NULL)
-+			    {
-+			      *offp |= 1;
-+			      microblaze_elf_output_dynamic_relocation (output_bfd,
-+				htab->srelgot, htab->srelgot->reloc_count++,
-+				/* symindex= */ indx, R_MICROBLAZE_REL,
-+				got_offset, static_value);
-+			    }
++			/* Relocs for dyn symbols generated by
++			   finish_dynamic_symbols */
++			if (bfd_link_pic (info) && h == NULL)
++			  {
++			    *offp |= 1;
++			    microblaze_elf_output_dynamic_relocation
++			      (output_bfd,
++			       htab->elf.srelgot,
++			       htab->elf.srelgot->reloc_count++,
++			       /* symindex= */ indx, R_MICROBLAZE_REL,
++			       got_offset, static_value);
++			  }
 +		      }
 +		  }
 +
 +		/* 4. Fixup Relocation with GOT offset value
 +		      Compute relative address of GOT entry for applying
 +		      the current relocation */
-+		relocation = htab->sgot->output_section->vma
-+			     + htab->sgot->output_offset
++		relocation = htab->elf.sgot->output_section->vma
++			     + htab->elf.sgot->output_offset
 +			     + off
-+			     - htab->sgotplt->output_section->vma
-+			     - htab->sgotplt->output_offset;
++			     - htab->elf.sgotplt->output_section->vma
++			     - htab->elf.sgotplt->output_offset;
 +
 +		/* Apply Current Relocation */
 +		bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff,
@@ -1606,8 +1609,8 @@
 +		bfd_vma immediate;
 +		unsigned short lo, high;
 +		relocation += addend;
-+		relocation -= htab->sgotplt->output_section->vma
-+		  + htab->sgotplt->output_offset;
++		relocation -= (htab->elf.sgotplt->output_section->vma
++			       + htab->elf.sgotplt->output_offset);
 +		/* Write this value into correct location.  */
 +		immediate = relocation;
 +		lo = immediate & 0x0000ffff;
@@ -1620,8 +1623,8 @@
 +	    case (int) R_MICROBLAZE_GOTOFF_32:
 +	      {
 +		relocation += addend;
-+		relocation -= htab->sgotplt->output_section->vma
-+		  + htab->sgotplt->output_offset;
++		relocation -= (htab->elf.sgotplt->output_section->vma
++			       + htab->elf.sgotplt->output_offset);
 +		/* Write this value into correct location.  */
 +		bfd_put_32 (input_bfd, relocation, contents + offset);
 +		break;
@@ -1663,7 +1666,8 @@
 +
 +		if ((bfd_link_pic (info)
 +		     && (h == NULL
-+			 || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
++			 || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
++			     && !resolved_to_zero)
 +			 || h->root.type != bfd_link_hash_undefweak)
 +		     && (!howto->pc_relative
 +			 || (h != NULL
@@ -1724,7 +1728,7 @@
 +			  {
 +			    BFD_FAIL ();
 +			    (*_bfd_error_handler)
-+			      (_("%pB: probably compiled without -fPIC?"),
++			      (_("%B: probably compiled without -fPIC?"),
 +			       input_bfd);
 +			    bfd_set_error (bfd_error_bad_value);
 +			    return FALSE;
@@ -1823,6 +1827,21 @@
 +  return ret;
 +}
 +
++/* Merge backend specific data from an object file to the output
++   object file when linking.
++
++   Note: We only use this hook to catch endian mismatches.  */
++static bfd_boolean
++microblaze_elf_merge_private_bfd_data (bfd * ibfd, bfd * obfd)
++{
++  /* Check if we have the same endianess.  */
++  if (! _bfd_generic_verify_endian_match (ibfd, obfd))
++    return FALSE;
++
++  return TRUE;
++}
++
++
 +/* Calculate fixup value for reference.  */
 +
 +static int
@@ -2139,7 +2158,7 @@
 +          irelscanend = irelocs + o->reloc_count;
 +          for (irelscan = irelocs; irelscan < irelscanend; irelscan++)
 +            {
-+              if (ELF64_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32_NONE)
++              if (1 && ELF64_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32_NONE)
 +                {
 +                  unsigned int val;
 +
@@ -2498,6 +2517,17 @@
 +  return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
 +}
 +
++/* Update the got entry reference counts for the section being removed.  */
++
++static bfd_boolean
++microblaze_elf_gc_sweep_hook (bfd * abfd ATTRIBUTE_UNUSED,
++     			      struct bfd_link_info * info ATTRIBUTE_UNUSED,
++     			      asection * sec ATTRIBUTE_UNUSED,
++     			      const Elf_Internal_Rela * relocs ATTRIBUTE_UNUSED)
++{
++  return TRUE;
++}
++
 +/* PIC support.  */
 +
 +#define PLT_ENTRY_SIZE 16
@@ -2614,10 +2644,9 @@
 +      else
 +	{
 +	  h = sym_hashes [r_symndx - symtab_hdr->sh_info];
-+
-+	  /* PR15323, ref flags aren't set for references in the same
-+	     object.  */
-+	  h->root.non_ir_ref_regular = 1;
++	  while (h->root.type == bfd_link_hash_indirect
++		 || h->root.type == bfd_link_hash_warning)
++	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
 +	}
 +
 +      switch (r_type)
@@ -2653,7 +2682,6 @@
 +          tls_type |= (TLS_TLS | TLS_LD);
 +        dogottls:
 +          sec->has_tls_reloc = 1;
-+          /* Fall through. */
 +        case R_MICROBLAZE_GOT_64:
 +          if (htab->sgot == NULL)
 +            {
@@ -2749,7 +2777,7 @@
 +		/* If this is a global symbol, we count the number of
 +		   relocations we need for this symbol.  */
 +		if (h != NULL)
-+		  head = &((struct elf64_mb_link_hash_entry *) h)->dyn_relocs;
++		  head = &h->dyn_relocs;
 +		else
 +		  {
 +		    /* Track dynamic relocs needed for local syms too.
@@ -2776,7 +2804,7 @@
 +		p = *head;
 +		if (p == NULL || p->sec != sec)
 +		  {
-+		    bfd_size_type amt = sizeof *p;
++		    size_t amt = sizeof *p;
 +		    p = ((struct elf64_mb_dyn_relocs *)
 +			 bfd_alloc (htab->elf.dynobj, amt));
 +		    if (p == NULL)
@@ -2886,7 +2914,8 @@
 +  struct elf64_mb_link_hash_table *htab;
 +  struct elf64_mb_link_hash_entry * eh;
 +  struct elf64_mb_dyn_relocs *p;
-+  asection *sdynbss, *s;
++  asection *sdynbss;
++  asection *s, *srel;
 +  unsigned int power_of_two;
 +  bfd *dynobj;
 +
@@ -2968,7 +2997,7 @@
 +
 +  /* If we didn't find any dynamic relocs in read-only sections, then
 +     we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-+  if (p == NULL)
++  if (!_bfd_elf_readonly_dynrelocs (h))
 +    {
 +      h->non_got_ref = 0;
 +      return TRUE;
@@ -2987,11 +3016,19 @@
 +  /* We must generate a R_MICROBLAZE_COPY reloc to tell the dynamic linker
 +     to copy the initial value out of the dynamic object and into the
 +     runtime process image.  */
-+  dynobj = elf_hash_table (info)->dynobj;
-+  BFD_ASSERT (dynobj != NULL);
++  if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
++    {
++      s = htab->elf.sdynrelro;
++      srel = htab->elf.sreldynrelro;
++    }
++  else
++    {
++      s = htab->elf.sdynbss;
++      srel = htab->elf.srelbss;
++    }
 +  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
 +    {
-+      htab->srelbss->size += sizeof (Elf64_External_Rela);
++      srel->size += sizeof (Elf64_External_Rela);
 +      h->needs_copy = 1;
 +    }
 +
@@ -3001,21 +3038,20 @@
 +  if (power_of_two > 3)
 +    power_of_two = 3;
 +
-+  sdynbss = htab->sdynbss;
 +  /* Apply the required alignment.  */
-+  sdynbss->size = BFD_ALIGN (sdynbss->size, (bfd_size_type) (1 << power_of_two));
-+  if (power_of_two > bfd_section_alignment (sdynbss))
++  s->size = BFD_ALIGN (s->size, (bfd_size_type) (1 << power_of_two));
++  if (power_of_two > s->alignment_power)
 +    {
-+      if (! bfd_set_section_alignment (sdynbss, power_of_two))
++      if (!bfd_set_section_alignment (s, power_of_two))
 +	return FALSE;
 +    }
 +
 +  /* Define the symbol as being at this point in the section.  */
-+  h->root.u.def.section = sdynbss;
-+  h->root.u.def.value = sdynbss->size;
++  h->root.u.def.section = s;
++  h->root.u.def.value = s->size;
 +
 +  /* Increment the section size to make room for the symbol.  */
-+  sdynbss->size += h->size;
++  s->size += h->size;
 +  return TRUE;
 +}
 +
@@ -3075,13 +3111,13 @@
 +          /* Make room for this entry.  */
 +          s->size += PLT_ENTRY_SIZE;
 +
-+          /* We also need to make an entry in the .got.plt section, which
-+             will be placed in the .got section by the linker script.  */
-+	  htab->sgotplt->size += 4;
++	  /* We also need to make an entry in the .got.plt section, which
++	     will be placed in the .got section by the linker script.  */
++	  htab->elf.sgotplt->size += 4;
 +
-+          /* We also need to make an entry in the .rel.plt section.  */
-+          htab->srelplt->size += sizeof (Elf64_External_Rela);
-+        }
++	  /* We also need to make an entry in the .rel.plt section.  */
++	  htab->elf.srelplt->size += sizeof (Elf32_External_Rela);
++	}
 +      else
 +        {
 +          h->plt.offset = (bfd_vma) -1;
@@ -3136,17 +3172,17 @@
 +          h->got.offset = (bfd_vma) -1;
 +        }
 +      else
-+        {
-+          s = htab->sgot;
-+          h->got.offset = s->size;
-+          s->size += need;
-+          htab->srelgot->size += need * (sizeof (Elf64_External_Rela) / 4);
-+        }
++	{
++	  s = htab->elf.sgot;
++	  h->got.offset = s->size;
++	  s->size += need;
++	  htab->elf.srelgot->size += need * (sizeof (Elf64_External_Rela) / 4);
++	}
 +    }
 +  else
 +    h->got.offset = (bfd_vma) -1;
 +
-+  if (eh->dyn_relocs == NULL)
++  if (h->dyn_relocs == NULL)
 +    return TRUE;
 +
 +  /* In the shared -Bsymbolic case, discard space allocated for
@@ -3163,7 +3199,7 @@
 +	{
 +	  struct elf64_mb_dyn_relocs **pp;
 +
-+	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
++	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
 +	    {
 +	      p->count -= p->pc_count;
 +	      p->pc_count = 0;
@@ -3173,6 +3209,8 @@
 +		pp = &p->next;
 +	    }
 +	}
++      else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
++	h->dyn_relocs = NULL;
 +    }
 +  else
 +    {
@@ -3202,13 +3240,13 @@
 +	    goto keep;
 +	}
 +
-+      eh->dyn_relocs = NULL;
++      h->dyn_relocs = NULL;
 +
 +    keep: ;
 +    }
 +
 +  /* Finally, allocate space.  */
-+  for (p = eh->dyn_relocs; p != NULL; p = p->next)
++  for (p = h->dyn_relocs; p != NULL; p = p->next)
 +    {
 +      asection *sreloc = elf_section_data (p->sec)->sreloc;
 +      sreloc->size += p->count * sizeof (Elf64_External_Rela);
@@ -3284,8 +3322,8 @@
 +      locsymcount = symtab_hdr->sh_info;
 +      end_local_got = local_got + locsymcount;
 +      lgot_masks = (unsigned char *) end_local_got;
-+      s = htab->sgot;
-+      srel = htab->srelgot;
++      s = htab->elf.sgot;
++      srel = htab->elf.srelgot;
 +
 +      for (; local_got < end_local_got; ++local_got, ++lgot_masks)
 +	{
@@ -3325,10 +3363,10 @@
 +
 +  if (htab->tlsld_got.refcount > 0)
 +    {
-+      htab->tlsld_got.offset = htab->sgot->size;
-+      htab->sgot->size += 8;
++      htab->tlsld_got.offset = htab->elf.sgot->size;
++      htab->elf.sgot->size += 8;
 +      if (bfd_link_pic (info))
-+        htab->srelgot->size += sizeof (Elf64_External_Rela);
++	htab->elf.srelgot->size += sizeof (Elf64_External_Rela);
 +    }
 +  else
 +    htab->tlsld_got.offset = (bfd_vma) -1;
@@ -3336,8 +3374,8 @@
 +  if (elf_hash_table (info)->dynamic_sections_created)
 +    {
 +      /* Make space for the trailing nop in .plt.  */
-+      if (htab->splt->size > 0)
-+        htab->splt->size += 4;
++      if (htab->elf.splt->size > 0)
++	htab->elf.splt->size += 4;
 +    }
 +
 +  /* The check_relocs and adjust_dynamic_symbol entry points have
@@ -3352,36 +3390,40 @@
 +        continue;
 +
 +      /* It's OK to base decisions on the section name, because none
-+         of the dynobj section names depend upon the input files.  */
++	 of the dynobj section names depend upon the input files.  */
 +      name = bfd_section_name (s);
 +
 +      if (strncmp (name, ".rela", 5) == 0)
-+        {
-+          if (s->size == 0)
-+            {
-+              /* If we don't need this section, strip it from the
-+        	 output file.  This is to handle .rela.bss and
-+        	 .rela.plt.  We must create it in
-+        	 create_dynamic_sections, because it must be created
-+        	 before the linker maps input sections to output
-+        	 sections.  The linker does that before
-+        	 adjust_dynamic_symbol is called, and it is that
-+        	 function which decides whether anything needs to go
-+        	 into these sections.  */
-+              strip = TRUE;
-+            }
-+          else
-+            {
-+              /* We use the reloc_count field as a counter if we need
-+        	 to copy relocs into the output file.  */
-+              s->reloc_count = 0;
-+            }
-+        }
-+      else if (s != htab->splt && s != htab->sgot && s != htab->sgotplt)
-+        {
-+          /* It's not one of our sections, so don't allocate space.  */
-+          continue;
-+        }
++	{
++	  if (s->size == 0)
++	    {
++	      /* If we don't need this section, strip it from the
++		 output file.  This is to handle .rela.bss and
++		 .rela.plt.  We must create it in
++		 create_dynamic_sections, because it must be created
++		 before the linker maps input sections to output
++		 sections.  The linker does that before
++		 adjust_dynamic_symbol is called, and it is that
++		 function which decides whether anything needs to go
++		 into these sections.  */
++	      strip = TRUE;
++	    }
++	  else
++	    {
++	      /* We use the reloc_count field as a counter if we need
++		 to copy relocs into the output file.  */
++	      s->reloc_count = 0;
++	    }
++	}
++      else if (s != htab->elf.splt
++	       && s != htab->elf.sgot
++	       && s != htab->elf.sgotplt
++	       && s != htab->elf.sdynbss
++	       && s != htab->elf.sdynrelro)
++	{
++	  /* It's not one of our sections, so don't allocate space.  */
++	  continue;
++	}
 +
 +      if (strip)
 +        {
@@ -3483,7 +3525,7 @@
 +
 +      /* For non-PIC objects we need absolute address of the GOT entry.  */
 +      if (!bfd_link_pic (info))
-+        got_addr += htab->sgotplt->output_section->vma + sgotplt->output_offset;
++	got_addr += sgotplt->output_section->vma + sgotplt->output_offset;
 +
 +      /* Fill in the entry in the procedure linkage table.  */
 +      bfd_put_32 (output_bfd, PLT_ENTRY_WORD_0 + ((got_addr >> 16) & 0xffff),
@@ -3535,8 +3577,8 @@
 +      /* This symbol has an entry in the global offset table.  Set it
 +         up.  */
 +
-+      sgot = htab->sgot;
-+      srela = htab->srelgot;
++      sgot = htab->elf.sgot;
++      srela = htab->elf.srelgot;
 +      BFD_ASSERT (sgot != NULL && srela != NULL);
 +
 +      offset = (sgot->output_section->vma + sgot->output_offset
@@ -3683,7 +3725,7 @@
 +
 +  /* Set the first entry in the global offset table to the address of
 +     the dynamic section.  */
-+  sgot = bfd_get_linker_section (dynobj, ".got.plt");
++  sgot = htab->elf.sgotplt;
 +  if (sgot && sgot->size > 0)
 +    {
 +      if (sdyn == NULL)
@@ -3695,8 +3737,8 @@
 +      elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
 +    }
 +
-+  if (htab->sgot && htab->sgot->size > 0)
-+    elf_section_data (htab->sgot->output_section)->this_hdr.sh_entsize = 4;
++  if (htab->elf.sgot && htab->elf.sgot->size > 0)
++    elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize = 4;
 +
 +  return TRUE;
 +}
@@ -3721,8 +3763,8 @@
 +	 put into .sbss.  */
 +      *secp = bfd_make_section_old_way (abfd, ".sbss");
 +      if (*secp == NULL
-+          || ! bfd_set_section_flags (*secp, SEC_IS_COMMON))
-+        return FALSE;
++	  || !bfd_set_section_flags (*secp, SEC_IS_COMMON))
++	return FALSE;
 +
 +      *valp = sym->st_size;
 +    }
@@ -3748,10 +3790,11 @@
 +#define bfd_elf64_bfd_is_local_label_name       microblaze_elf_is_local_label_name
 +#define elf_backend_relocate_section		microblaze_elf_relocate_section
 +#define bfd_elf64_bfd_relax_section             microblaze_elf_relax_section
-+#define bfd_elf64_bfd_merge_private_bfd_data    _bfd_generic_verify_endian_match
++#define bfd_elf64_bfd_merge_private_bfd_data    microblaze_elf_merge_private_bfd_data
 +#define bfd_elf64_bfd_reloc_name_lookup		microblaze_elf_reloc_name_lookup
 +
 +#define elf_backend_gc_mark_hook		microblaze_elf_gc_mark_hook
++#define elf_backend_gc_sweep_hook		microblaze_elf_gc_sweep_hook
 +#define elf_backend_check_relocs                microblaze_elf_check_relocs
 +#define elf_backend_copy_indirect_symbol        microblaze_elf_copy_indirect_symbol
 +#define bfd_elf64_bfd_link_hash_table_create    microblaze_elf_link_hash_table_create
@@ -3770,11 +3813,11 @@
 +#define elf_backend_add_symbol_hook		microblaze_elf_add_symbol_hook
 +
 +#include "elf64-target.h"
-diff --git a/bfd/targets.c b/bfd/targets.c
-index fb0c669e7f7..97b0e473e16 100644
---- a/bfd/targets.c
-+++ b/bfd/targets.c
-@@ -779,6 +779,8 @@ extern const bfd_target mep_elf32_le_vec;
+Index: gdb-9.2/bfd/targets.c
+===================================================================
+--- gdb-9.2.orig/bfd/targets.c
++++ gdb-9.2/bfd/targets.c
+@@ -779,6 +779,8 @@ extern const bfd_target mep_elf32_le_vec
  extern const bfd_target metag_elf32_vec;
  extern const bfd_target microblaze_elf32_vec;
  extern const bfd_target microblaze_elf32_le_vec;
@@ -3783,7 +3826,7 @@
  extern const bfd_target mips_ecoff_be_vec;
  extern const bfd_target mips_ecoff_le_vec;
  extern const bfd_target mips_ecoff_bele_vec;
-@@ -1150,6 +1152,10 @@ static const bfd_target * const _bfd_target_vector[] =
+@@ -1150,6 +1152,10 @@ static const bfd_target * const _bfd_tar
  
  	&metag_elf32_vec,
  
@@ -3794,10 +3837,10 @@
  	&microblaze_elf32_vec,
  
  	&mips_ecoff_be_vec,
-diff --git a/include/elf/common.h b/include/elf/common.h
-index 75c4fb7e9d7..1584e1c87d0 100644
---- a/include/elf/common.h
-+++ b/include/elf/common.h
+Index: gdb-9.2/include/elf/common.h
+===================================================================
+--- gdb-9.2.orig/include/elf/common.h
++++ gdb-9.2/include/elf/common.h
 @@ -339,6 +339,7 @@
  #define EM_RISCV 	243 	/* RISC-V */
  #define EM_LANAI	244	/* Lanai 32-bit processor.  */
@@ -3806,10 +3849,66 @@
  #define EM_NFP		250	/* Netronome Flow Processor.  */
  #define EM_CSKY		252	/* C-SKY processor family.  */
  
-diff --git a/opcodes/microblaze-dis.c b/opcodes/microblaze-dis.c
-index 356f1da22ed..437f536e96a 100644
---- a/opcodes/microblaze-dis.c
-+++ b/opcodes/microblaze-dis.c
+Index: gdb-9.2/ld/emulparams/elf64microblaze.sh
+===================================================================
+--- /dev/null
++++ gdb-9.2/ld/emulparams/elf64microblaze.sh
+@@ -0,0 +1,23 @@
++SCRIPT_NAME=elfmicroblaze
++OUTPUT_FORMAT="elf64-microblazeel"
++#BIG_OUTPUT_FORMAT="elf64-microblaze"
++LITTLE_OUTPUT_FORMAT="elf64-microblazeel"
++#TEXT_START_ADDR=0
++NONPAGED_TEXT_START_ADDR=0x28
++ALIGNMENT=4
++MAXPAGESIZE=4
++ARCH=microblaze
++EMBEDDED=yes
++
++NOP=0x80000000
++
++# Hmmm, there's got to be a better way.  This sets the stack to the
++# top of the simulator memory (2^19 bytes).
++#PAGE_SIZE=0x1000
++#DATA_ADDR=0x10000
++#OTHER_RELOCATING_SECTIONS='.stack 0x7000 : { _stack = .; *(.stack) }'
++#$@{RELOCATING+ PROVIDE (__stack = 0x7000);@}
++#OTHER_RELOCATING_SECTIONS='PROVIDE (_stack = _end + 0x1000);'
++
++TEMPLATE_NAME=elf32
++#GENERATE_SHLIB_SCRIPT=yes
+Index: gdb-9.2/ld/emulparams/elf64microblazeel.sh
+===================================================================
+--- /dev/null
++++ gdb-9.2/ld/emulparams/elf64microblazeel.sh
+@@ -0,0 +1,23 @@
++SCRIPT_NAME=elfmicroblaze
++OUTPUT_FORMAT="elf64-microblazeel"
++#BIG_OUTPUT_FORMAT="elf64-microblaze"
++LITTLE_OUTPUT_FORMAT="elf64-microblazeel"
++#TEXT_START_ADDR=0
++NONPAGED_TEXT_START_ADDR=0x28
++ALIGNMENT=4
++MAXPAGESIZE=4
++ARCH=microblaze
++EMBEDDED=yes
++
++NOP=0x80000000
++
++# Hmmm, there's got to be a better way.  This sets the stack to the
++# top of the simulator memory (2^19 bytes).
++#PAGE_SIZE=0x1000
++#DATA_ADDR=0x10000
++#OTHER_RELOCATING_SECTIONS='.stack 0x7000 : { _stack = .; *(.stack) }'
++#$@{RELOCATING+ PROVIDE (__stack = 0x7000);@}
++#OTHER_RELOCATING_SECTIONS='PROVIDE (_stack = _end + 0x1000);'
++
++TEMPLATE_NAME=elf32
++#GENERATE_SHLIB_SCRIPT=yes
+Index: gdb-9.2/opcodes/microblaze-dis.c
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-dis.c
++++ gdb-9.2/opcodes/microblaze-dis.c
 @@ -33,6 +33,7 @@
  #define get_field_r1(buf, instr)   get_field (buf, instr, RA_MASK, RA_LOW)
  #define get_field_r2(buf, instr)   get_field (buf, instr, RB_MASK, RB_LOW)
@@ -3818,30 +3917,29 @@
  #define get_int_field_r1(instr)    ((instr & RA_MASK) >> RA_LOW)
  
  #define NUM_STRBUFS 3
-@@ -73,11 +74,20 @@ get_field_imm (struct string_buf *buf, long instr)
+@@ -73,11 +74,19 @@ get_field_imm (struct string_buf *buf, l
  }
  
  static char *
 -get_field_imm5 (struct string_buf *buf, long instr)
 +get_field_imml (struct string_buf *buf, long instr)
- {
-   char *p = strbuf (buf);
- 
--  sprintf (p, "%d", (short)((instr & IMM5_MASK) >> IMM_LOW));
++{
++  char *p = strbuf (buf);
 +  sprintf (p, "%d", (short)((instr & IMML_MASK) >> IMM_LOW));
 +  return p;
 +}
 +
 +static char *
 +get_field_imms (struct string_buf *buf, long instr)
-+{
-+  char *p = strbuf (buf);
-+
+ {
+   char *p = strbuf (buf);
+ 
+-  sprintf (p, "%d", (short)((instr & IMM5_MASK) >> IMM_LOW));
 +  sprintf (p, "%d", (short)((instr & IMM6_MASK) >> IMM_LOW));
    return p;
  }
  
-@@ -91,14 +101,14 @@ get_field_imm5_mbar (struct string_buf *buf, long instr)
+@@ -91,14 +100,14 @@ get_field_imm5_mbar (struct string_buf *
  }
  
  static char *
@@ -3859,55 +3957,48 @@
    return p;
  }
  
-@@ -306,9 +316,14 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
+@@ -306,9 +315,13 @@ print_insn_microblaze (bfd_vma memaddr,
  		}
  	    }
  	  break;
 -	case INST_TYPE_RD_R1_IMM5:
 +	case INST_TYPE_RD_R1_IMML:
++	  print_func (stream, "\t%s, %s, %s", get_field_rd (&buf, inst),
++		      get_field_r1 (&buf, inst), get_field_imm (&buf, inst));
++          /* TODO: Also print symbol */
++	case INST_TYPE_RD_R1_IMMS:
  	  print_func (stream, "\t%s, %s, %s", get_field_rd (&buf, inst),
 -		      get_field_r1 (&buf, inst), get_field_imm5 (&buf, inst));
-+		   get_field_r1(&buf, inst), get_field_imm (&buf, inst));
-+          /* TODO: Also print symbol */
-+          break;
-+	case INST_TYPE_RD_R1_IMMS:
-+	  print_func (stream, "\t%s, %s, %s", get_field_rd (&buf, inst),
 +	           get_field_r1(&buf, inst), get_field_imms (&buf, inst));
  	  break;
  	case INST_TYPE_RD_RFSL:
  	  print_func (stream, "\t%s, %s", get_field_rd (&buf, inst),
-@@ -412,9 +427,12 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
- 		}
- 	    }
- 	  break;
--	case INST_TYPE_RD_R2:
--	  print_func (stream, "\t%s, %s", get_field_rd (&buf, inst),
--		      get_field_r2 (&buf, inst));
+@@ -415,6 +428,10 @@ print_insn_microblaze (bfd_vma memaddr,
+ 	case INST_TYPE_RD_R2:
+ 	  print_func (stream, "\t%s, %s", get_field_rd (&buf, inst),
+ 		      get_field_r2 (&buf, inst));
++          break;
 +        case INST_TYPE_IMML:
 +	  print_func (stream, "\t%s", get_field_imml (&buf, inst));
 +          /* TODO: Also print symbol */
-+	  break;
-+        case INST_TYPE_RD_R2:
-+	  print_func (stream, "\t%s, %s", get_field_rd (&buf, inst), get_field_r2 (&buf, inst));
  	  break;
  	case INST_TYPE_R2:
  	  print_func (stream, "\t%s", get_field_r2 (&buf, inst));
-@@ -439,8 +457,9 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
+@@ -438,8 +455,8 @@ print_insn_microblaze (bfd_vma memaddr,
+ 	case INST_TYPE_NONE:
  	  break;
- 	  /* For tuqula instruction */
          /* For bit field insns.  */
 -	case INST_TYPE_RD_R1_IMM5_IMM5:
--	  print_func (stream, "\t%s, %s, %s, %s", get_field_rd (&buf, inst), get_field_r1(&buf, inst), get_field_imm5width (&buf, inst), get_field_imm5 (&buf, inst));
+-          print_func (stream, "\t%s, %s, %s, %s", get_field_rd (&buf, inst),get_field_r1(&buf, inst),get_field_imm5width (&buf, inst), get_field_imm5 (&buf, inst));
 +	case INST_TYPE_RD_R1_IMMW_IMMS:
-+	  print_func (stream, "\t%s, %s, %s, %s", get_field_rd (&buf, inst), get_field_r1(&buf, inst),
-+		   get_field_immw (&buf, inst), get_field_imms (&buf, inst));
- 	  break;
++          print_func (stream, "\t%s, %s, %s, %s", get_field_rd (&buf, inst),get_field_r1(&buf, inst),get_field_immw (&buf, inst), get_field_imms (&buf, inst));
+ 	     break;
  	/* For tuqula instruction */
  	case INST_TYPE_RD:
-diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h
-index d3b234e1fcd..28dc991c430 100644
---- a/opcodes/microblaze-opc.h
-+++ b/opcodes/microblaze-opc.h
+Index: gdb-9.2/opcodes/microblaze-opc.h
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-opc.h
++++ gdb-9.2/opcodes/microblaze-opc.h
 @@ -40,7 +40,7 @@
  #define INST_TYPE_RD_SPECIAL 11
  #define INST_TYPE_R1 12
@@ -4132,10 +4223,10 @@
 +
  #endif /* MICROBLAZE_OPC */
  
-diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h
-index c3b2b8f0f6e..ad475a4af15 100644
---- a/opcodes/microblaze-opcm.h
-+++ b/opcodes/microblaze-opcm.h
+Index: gdb-9.2/opcodes/microblaze-opcm.h
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-opcm.h
++++ gdb-9.2/opcodes/microblaze-opcm.h
 @@ -25,6 +25,7 @@
  
  enum microblaze_instr
@@ -4184,6 +4275,3 @@
  
  /* FSL imm mask for get, put instructions.  */
  #define  RFSL_MASK 0x000000F
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0016-MB-X-initial-commit.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0015-MB-X-initial-commit.patch
similarity index 67%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0016-MB-X-initial-commit.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0015-MB-X-initial-commit.patch
index 8bf0739..6f5e0b6 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0016-MB-X-initial-commit.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0015-MB-X-initial-commit.patch
@@ -1,50 +1,55 @@
-From f82b24b2685d0cde8f8fdd0a1dcffe7b76b2027c Mon Sep 17 00:00:00 2001
+From 070b7b1f35dedc41b1ba9a228d701485b2239ac0 Mon Sep 17 00:00:00 2001
 From: Nagaraju Mekala <nmekala@xilix.com>
 Date: Sun, 30 Sep 2018 16:31:26 +0530
-Subject: [PATCH 16/40] MB-X initial commit code cleanup is needed.
+Subject: [PATCH 15/52] MB-X initial commit code cleanup is needed.
 
+Conflicts:
+	bfd/elf32-microblaze.c
+	gas/config/tc-microblaze.c
+	opcodes/microblaze-opcm.h
 ---
  bfd/bfd-in2.h              |  10 +++
- bfd/elf32-microblaze.c     |  63 +++++++++++++++++-
- bfd/elf64-microblaze.c     |  59 +++++++++++++++++
+ bfd/elf32-microblaze.c     |  59 +++++++++++++-
+ bfd/elf64-microblaze.c     |  61 ++++++++++++++-
  bfd/libbfd.h               |   2 +
- bfd/reloc.c                |  12 ++++
+ bfd/reloc.c                |  12 +++
+ gas/config/tc-microblaze.c | 154 ++++++++++++++++++++++++++++++-------
  include/elf/microblaze.h   |   2 +
- opcodes/microblaze-opc.h   |   4 +-
+ opcodes/microblaze-opc.h   |  10 +--
  opcodes/microblaze-opcm.h  |   4 +-
- 9 files changed, 243 insertions(+), 40 deletions(-)
+ 9 files changed, 278 insertions(+), 36 deletions(-)
 
-diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
-index 52c81b10b6d..c6738960bb2 100644
---- a/bfd/bfd-in2.h
-+++ b/bfd/bfd-in2.h
-@@ -5373,11 +5373,21 @@ value in two words (with an imm instruction).  No relocation is
- done here - only used for relaxing  */
+Index: gdb-9.2/bfd/bfd-in2.h
+===================================================================
+--- gdb-9.2.orig/bfd/bfd-in2.h
++++ gdb-9.2/bfd/bfd-in2.h
+@@ -5374,11 +5374,21 @@ done here - only used for relaxing  */
    BFD_RELOC_MICROBLAZE_64_NONE,
  
-+/* This is a 64 bit reloc that stores the 32 bit pc relative
-+value in two words (with an imml instruction).  No relocation is
-+done here - only used for relaxing  */
-+  BFD_RELOC_MICROBLAZE_64,
-+
  /* This is a 64 bit reloc that stores the 32 bit pc relative
++ *  +value in two words (with an imml instruction).  No relocation is
++ *   +done here - only used for relaxing  */
++    BFD_RELOC_MICROBLAZE_64,
++
++/* This is a 64 bit reloc that stores the 32 bit pc relative
  value in two words (with an imm instruction).  The relocation is
  PC-relative GOT offset  */
    BFD_RELOC_MICROBLAZE_64_GOTPC,
  
-+/* This is a 64 bit reloc that stores the 32 bit pc relative
+ /* This is a 64 bit reloc that stores the 32 bit pc relative
 +value in two words (with an imml instruction).  The relocation is
 +PC-relative GOT offset  */
 +  BFD_RELOC_MICROBLAZE_64_GPC,
 +
- /* This is a 64 bit reloc that stores the 32 bit pc relative
++/* This is a 64 bit reloc that stores the 32 bit pc relative
  value in two words (with an imm instruction).  The relocation is
  GOT offset  */
-diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c
-index cb7271f5017..a31b407cfbf 100644
---- a/bfd/elf32-microblaze.c
-+++ b/bfd/elf32-microblaze.c
-@@ -116,6 +116,20 @@ static reloc_howto_type microblaze_elf_howto_raw[] =
+   BFD_RELOC_MICROBLAZE_64_GOT,
+Index: gdb-9.2/bfd/elf32-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf32-microblaze.c
++++ gdb-9.2/bfd/elf32-microblaze.c
+@@ -116,6 +116,20 @@ static reloc_howto_type microblaze_elf_h
  	  0x0000ffff,		/* Dest Mask.  */
  	  TRUE),		/* PC relative offset?  */
  
@@ -65,7 +70,7 @@
     /* A 64 bit relocation.  Table entry not really used.  */
     HOWTO (R_MICROBLAZE_64,	/* Type.  */
  	  0,			/* Rightshift.  */
-@@ -280,6 +294,21 @@ static reloc_howto_type microblaze_elf_howto_raw[] =
+@@ -280,6 +294,21 @@ static reloc_howto_type microblaze_elf_h
  	  0x0000ffff,		/* Dest Mask.  */
  	  TRUE),		/* PC relative offset?  */
  
@@ -87,7 +92,7 @@
     /* A 64 bit GOT relocation.  Table-entry not really used.  */
     HOWTO (R_MICROBLAZE_GOT_64,  /* Type.  */
  	  0,			/* Rightshift.  */
-@@ -619,9 +648,15 @@ microblaze_elf_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
+@@ -619,9 +648,15 @@ microblaze_elf_reloc_type_lookup (bfd *
      case BFD_RELOC_VTABLE_ENTRY:
        microblaze_reloc = R_MICROBLAZE_GNU_VTENTRY;
        break;
@@ -103,6 +108,15 @@
      case BFD_RELOC_MICROBLAZE_64_GOT:
        microblaze_reloc = R_MICROBLAZE_GOT_64;
        break;
+@@ -1467,7 +1502,7 @@ microblaze_elf_relocate_section (bfd *ou
+ 		if (r_symndx == STN_UNDEF || (input_section->flags & SEC_ALLOC) == 0)
+ 		  {
+ 		    relocation += addend;
+-		    if (r_type == R_MICROBLAZE_32)
++		    if (r_type == R_MICROBLAZE_32)// || r_type == R_MICROBLAZE_IMML_64)
+ 		      bfd_put_32 (input_bfd, relocation, contents + offset);
+ 		    else
+ 		      {
 @@ -1933,6 +1968,28 @@ microblaze_elf_relax_section (bfd *abfd,
  		    irel->r_addend -= calc_fixup (irel->r_addend, 0, sec);
  		}
@@ -110,7 +124,7 @@
 +	    case R_MICROBLAZE_IMML_64:
 +	      {
 +	        /* This was a PC-relative instruction that was
-+		   completely resolved.  */
++ 		   completely resolved.  */
 +	        int sfix, efix;
 +            unsigned int val;
 +	        bfd_vma target_address;
@@ -132,28 +146,14 @@
  	    case R_MICROBLAZE_NONE:
  	    case R_MICROBLAZE_32_NONE:
  	      {
-@@ -2038,9 +2095,9 @@ microblaze_elf_relax_section (bfd *abfd,
-                   microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset,
-                                                      irelscan->r_addend);
-               }
--	      if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32)
--		{
--		  isym = isymbuf + ELF32_R_SYM (irelscan->r_info);
-+             if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32)
-+               {
-+	          isym = isymbuf + ELF32_R_SYM (irelscan->r_info);
- 
- 		  /* Look at the reloc only if the value has been resolved.  */
- 		  if (isym->st_shndx == shndx
-diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c
-index fa4b95e47e0..d55700fc513 100644
---- a/bfd/elf64-microblaze.c
-+++ b/bfd/elf64-microblaze.c
-@@ -116,6 +116,21 @@ static reloc_howto_type microblaze_elf_howto_raw[] =
-           0x0000ffff,		/* Dest Mask.  */
+Index: gdb-9.2/bfd/elf64-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf64-microblaze.c
++++ gdb-9.2/bfd/elf64-microblaze.c
+@@ -117,6 +117,21 @@ static reloc_howto_type microblaze_elf_h
            TRUE), 		/* PC relative offset?  */
  
-+   /* A 64 bit relocation.  Table entry not really used.  */
+    /* A 64 bit relocation.  Table entry not really used.  */
 +   HOWTO (R_MICROBLAZE_IMML_64,     	/* Type.  */
 +          0,			/* Rightshift.  */
 +          4,			/* Size (0 = byte, 1 = short, 2 = long).  */
@@ -168,10 +168,11 @@
 +          0x0000ffff,		/* Dest Mask.  */
 +          TRUE), 		/* PC relative offset?  */
 +
-    /* A 64 bit relocation.  Table entry not really used.  */
++   /* A 64 bit relocation.  Table entry not really used.  */
     HOWTO (R_MICROBLAZE_64,     	/* Type.  */
            0,			/* Rightshift.  */
-@@ -265,6 +280,21 @@ static reloc_howto_type microblaze_elf_howto_raw[] =
+           2,			/* Size (0 = byte, 1 = short, 2 = long).  */
+@@ -265,6 +280,21 @@ static reloc_howto_type microblaze_elf_h
            0x0000ffff,		/* Dest Mask.  */
            TRUE), 		/* PC relative offset?  */
  
@@ -193,7 +194,7 @@
     /* A 64 bit GOT relocation.  Table-entry not really used.  */
     HOWTO (R_MICROBLAZE_GOT_64,  /* Type.  */
            0,			/* Rightshift.  */
-@@ -589,9 +619,15 @@ microblaze_elf_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
+@@ -589,9 +619,15 @@ microblaze_elf_reloc_type_lookup (bfd *
      case BFD_RELOC_VTABLE_ENTRY:
        microblaze_reloc = R_MICROBLAZE_GNU_VTENTRY;
        break;
@@ -209,7 +210,7 @@
      case BFD_RELOC_MICROBLAZE_64_GOT:
        microblaze_reloc = R_MICROBLAZE_GOT_64;
        break;
-@@ -1162,6 +1198,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
+@@ -1172,6 +1208,7 @@ microblaze_elf_relocate_section (bfd *ou
  	      break; /* Do nothing.  */
  
  	    case (int) R_MICROBLAZE_GOTPC_64:
@@ -217,14 +218,23 @@
  	      relocation = htab->sgotplt->output_section->vma
  		+ htab->sgotplt->output_offset;
  	      relocation -= (input_section->output_section->vma
-@@ -1863,6 +1900,28 @@ microblaze_elf_relax_section (bfd *abfd,
+@@ -1443,7 +1480,7 @@ microblaze_elf_relocate_section (bfd *ou
+ 		if (r_symndx == STN_UNDEF || (input_section->flags & SEC_ALLOC) == 0)
+ 		  {
+ 		    relocation += addend;
+-		    if (r_type == R_MICROBLAZE_32)
++		    if (r_type == R_MICROBLAZE_32)// || r_type == R_MICROBLAZE_IMML_64)
+ 		      bfd_put_32 (input_bfd, relocation, contents + offset);
+ 		    else
+ 		      {
+@@ -1889,6 +1926,28 @@ microblaze_elf_relax_section (bfd *abfd,
  		    irel->r_addend -= calc_fixup (irel->r_addend, 0, sec);
  	        }
  	      break;
 +	    case R_MICROBLAZE_IMML_64:
 +	      {
 +	        /* This was a PC-relative instruction that was
-+		   completely resolved.  */
++ 		   completely resolved.  */
 +	        int sfix, efix;
 +            unsigned int val;
 +	        bfd_vma target_address;
@@ -246,11 +256,11 @@
  	    case R_MICROBLAZE_NONE:
  	    case R_MICROBLAZE_32_NONE:
  	      {
-diff --git a/bfd/libbfd.h b/bfd/libbfd.h
-index a01891f3423..4e71991273e 100644
---- a/bfd/libbfd.h
-+++ b/bfd/libbfd.h
-@@ -2905,7 +2905,9 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
+Index: gdb-9.2/bfd/libbfd.h
+===================================================================
+--- gdb-9.2.orig/bfd/libbfd.h
++++ gdb-9.2/bfd/libbfd.h
+@@ -2905,7 +2905,9 @@ static const char *const bfd_reloc_code_
    "BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM",
    "BFD_RELOC_MICROBLAZE_32_NONE",
    "BFD_RELOC_MICROBLAZE_64_NONE",
@@ -260,52 +270,67 @@
    "BFD_RELOC_MICROBLAZE_64_GOT",
    "BFD_RELOC_MICROBLAZE_64_PLT",
    "BFD_RELOC_MICROBLAZE_64_GOTOFF",
-diff --git a/bfd/reloc.c b/bfd/reloc.c
-index 78f13180c71..8b3cc604738 100644
---- a/bfd/reloc.c
-+++ b/bfd/reloc.c
-@@ -6814,12 +6814,24 @@ ENUMDOC
-   done here - only used for relaxing
+Index: gdb-9.2/bfd/reloc.c
+===================================================================
+--- gdb-9.2.orig/bfd/reloc.c
++++ gdb-9.2/bfd/reloc.c
+@@ -6815,6 +6815,12 @@ ENUMDOC
  ENUM
    BFD_RELOC_MICROBLAZE_64_NONE
-+ENUMDOC
+ ENUMDOC
 +  This is a 32 bit reloc that stores the 32 bit pc relative
 +  value in two words (with an imml instruction).  No relocation is
 +  done here - only used for relaxing
 +ENUM
 +  BFD_RELOC_MICROBLAZE_64
- ENUMDOC
++ENUMDOC
    This is a 64 bit reloc that stores the 32 bit pc relative
    value in two words (with an imm instruction).  No relocation is
    done here - only used for relaxing
- ENUM
+@@ -6822,6 +6828,12 @@ ENUM
    BFD_RELOC_MICROBLAZE_64_GOTPC
-+ENUMDOC
-+  This is a 64 bit reloc that stores the 32 bit pc relative
+ ENUMDOC
+   This is a 64 bit reloc that stores the 32 bit pc relative
 +  value in two words (with an imml instruction).  No relocation is
 +  done here - only used for relaxing
 +ENUM
 +  BFD_RELOC_MICROBLAZE_64_GPC
- ENUMDOC
-   This is a 64 bit reloc that stores the 32 bit pc relative
++ENUMDOC
++  This is a 64 bit reloc that stores the 32 bit pc relative
    value in two words (with an imm instruction).  The relocation is
-diff --git a/include/elf/microblaze.h b/include/elf/microblaze.h
-index 0dba2c0f44f..030eb99a1a0 100644
---- a/include/elf/microblaze.h
-+++ b/include/elf/microblaze.h
-@@ -62,6 +62,8 @@ START_RELOC_NUMBERS (elf_microblaze_reloc_type)
+   PC-relative GOT offset
+ ENUM
+Index: gdb-9.2/include/elf/microblaze.h
+===================================================================
+--- gdb-9.2.orig/include/elf/microblaze.h
++++ gdb-9.2/include/elf/microblaze.h
+@@ -62,6 +62,8 @@ START_RELOC_NUMBERS (elf_microblaze_relo
    RELOC_NUMBER (R_MICROBLAZE_TEXTREL_64, 31)    /* TEXT Entry offset 64-bit.  */
    RELOC_NUMBER (R_MICROBLAZE_TEXTREL_32_LO, 32) /* TEXT Entry offset 32-bit.  */
    RELOC_NUMBER (R_MICROBLAZE_32_NONE, 33)
 +  RELOC_NUMBER (R_MICROBLAZE_IMML_64, 34)
 +  RELOC_NUMBER (R_MICROBLAZE_GPC_64, 35)    /* GOT entry offset.  */
+    
  END_RELOC_NUMBERS (R_MICROBLAZE_max)
  
- /* Global base address names.  */
-diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h
-index 28dc991c430..46263bc7e16 100644
---- a/opcodes/microblaze-opc.h
-+++ b/opcodes/microblaze-opc.h
+Index: gdb-9.2/opcodes/microblaze-opc.h
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-opc.h
++++ gdb-9.2/opcodes/microblaze-opc.h
+@@ -282,10 +282,10 @@ struct op_code_struct
+   {"smi",   INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xF8000000, OPCODE_MASK_H, invalid_inst, memory_store_inst },
+   {"msrset",INST_TYPE_RD_IMM15, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x94100000, OPCODE_MASK_H23N, msrset, special_inst },
+   {"msrclr",INST_TYPE_RD_IMM15, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x94110000, OPCODE_MASK_H23N, msrclr, special_inst },
+-  {"fadd",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000000, OPCODE_MASK_H4, fadd, arithmetic_inst },
++  {"fadd",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000000, OPCODE_MASK_H4, mbi_fadd, arithmetic_inst },
+   {"frsub",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000080, OPCODE_MASK_H4, frsub, arithmetic_inst },
+-  {"fmul",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000100, OPCODE_MASK_H4, fmul, arithmetic_inst },
+-  {"fdiv",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000180, OPCODE_MASK_H4, fdiv, arithmetic_inst },
++  {"fmul",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000100, OPCODE_MASK_H4, mbi_fmul, arithmetic_inst },
++  {"fdiv",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000180, OPCODE_MASK_H4, mbi_fdiv, arithmetic_inst },
+   {"fcmp.lt", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000210, OPCODE_MASK_H4, fcmp_lt, arithmetic_inst },
+   {"fcmp.eq", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000220, OPCODE_MASK_H4, fcmp_eq, arithmetic_inst },
+   {"fcmp.le", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000230, OPCODE_MASK_H4, fcmp_le, arithmetic_inst },
 @@ -538,8 +538,8 @@ struct op_code_struct
    {"llr",     INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xC8000300, OPCODE_MASK_H4, llr, memory_load_inst },
    {"sl",      INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xD8000100, OPCODE_MASK_H4, sl, memory_store_inst },
@@ -317,10 +342,10 @@
    {"lla",     INST_TYPE_RD_R1_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x30000000, OPCODE_MASK_H, invalid_inst, arithmetic_inst },   /* lla translates to addlik */
    {"dadd",    INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000400, OPCODE_MASK_H4, dadd, arithmetic_inst },
    {"drsub",   INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000480, OPCODE_MASK_H4, drsub, arithmetic_inst },
-diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h
-index ad475a4af15..ee01cdb7d9b 100644
---- a/opcodes/microblaze-opcm.h
-+++ b/opcodes/microblaze-opcm.h
+Index: gdb-9.2/opcodes/microblaze-opcm.h
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-opcm.h
++++ gdb-9.2/opcodes/microblaze-opcm.h
 @@ -40,8 +40,8 @@ enum microblaze_instr
    imm, rtsd, rtid, rtbd, rted, bri, brid, brlid, brai, braid, bralid,
    brki, beqi, beqid, bnei, bneid, blti, bltid, blei, bleid, bgti,
@@ -328,10 +353,7 @@
 -  sb, sbea, sbr, sh, shea, shr, sw, swea, swr, swx, lbui, lhui, lwi,
 -  sbi, shi, swi, msrset, msrclr, tuqula, mbi_fadd, frsub, mbi_fmul, mbi_fdiv,
 +  sb, sbea, sbr, sh, shea, shr, sw, swea, swr, swx, lbui, lhui, lwi, lli,
-+  sbi, shi, sli, swi, msrset, msrclr, tuqula, mbi_fadd, frsub, mbi_fmul, mbi_fdiv,
++  sbi, shi, swi, sli, msrset, msrclr, tuqula, mbi_fadd, frsub, mbi_fmul, mbi_fdiv,
    fcmp_lt, fcmp_eq, fcmp_le, fcmp_gt, fcmp_ne, fcmp_ge, fcmp_un, flt,
    fint, fsqrt,
    tget, tcget, tnget, tncget, tput, tcput, tnput, tncput,
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0017-Patch-Microblaze-negl-instruction-is-overriding-rsub.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0016-Patch-Microblaze-negl-instruction-is-overriding-rsub.patch
similarity index 87%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0017-Patch-Microblaze-negl-instruction-is-overriding-rsub.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0016-Patch-Microblaze-negl-instruction-is-overriding-rsub.patch
index eaf2450..a717595 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0017-Patch-Microblaze-negl-instruction-is-overriding-rsub.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0016-Patch-Microblaze-negl-instruction-is-overriding-rsub.patch
@@ -1,18 +1,17 @@
-From b6ec3e2295ba33d2c8f48500d75a147ffd84a656 Mon Sep 17 00:00:00 2001
+From 8ad2e417691ac2b89ffec9db9026d53600d9a137 Mon Sep 17 00:00:00 2001
 From: Mahesh Bodapati <mbodapat@xilinx.com>
 Date: Tue, 11 Sep 2018 13:48:33 +0530
-Subject: [PATCH 17/40] [Patch,Microblaze] : negl instruction is overriding
- rsubl
+Subject: [PATCH 16/52] [Patch,Microblaze] : negl instruction is overriding
+ rsubl,fixed it by changing the instruction order...
 
-fixed it by changing the instruction order...
 ---
  opcodes/microblaze-opc.h | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
 
-diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h
-index 46263bc7e16..f4ee8f43372 100644
---- a/opcodes/microblaze-opc.h
-+++ b/opcodes/microblaze-opc.h
+Index: gdb-9.2/opcodes/microblaze-opc.h
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-opc.h
++++ gdb-9.2/opcodes/microblaze-opc.h
 @@ -275,9 +275,7 @@ struct op_code_struct
    {"la",    INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x30000000, OPCODE_MASK_H, invalid_inst, arithmetic_inst }, /* la translates to addik.  */
    {"tuqula",INST_TYPE_RD, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x3000002A, OPCODE_MASK_H, invalid_inst, arithmetic_inst }, /* tuqula rd translates to addik rd, r0, 42.  */
@@ -32,6 +31,3 @@
  
    {"", 0, 0, 0, 0, 0, 0, 0, 0},
  };
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0018-Added-relocations-for-MB-X.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0017-Added-relocations-for-MB-X.patch
similarity index 66%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0018-Added-relocations-for-MB-X.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0017-Added-relocations-for-MB-X.patch
index 742f9e3..ac9da7a 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0018-Added-relocations-for-MB-X.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0017-Added-relocations-for-MB-X.patch
@@ -1,47 +1,49 @@
-From 982f37caabea84cee52426844e73365f0cb93f3d Mon Sep 17 00:00:00 2001
+From eccbce1a31ed29dc38fb9ab15b6badcf9412bdb8 Mon Sep 17 00:00:00 2001
 From: Nagaraju Mekala <nmekala@xilix.com>
 Date: Tue, 11 Sep 2018 17:30:17 +0530
-Subject: [PATCH 18/40] Added relocations for MB-X
+Subject: [PATCH 17/52] Added relocations for MB-X
 
+Conflicts:
+	bfd/bfd-in2.h
+	gas/config/tc-microblaze.c
 ---
- bfd/bfd-in2.h              | 11 +++++---
- bfd/libbfd.h               |  4 +--
- bfd/reloc.c                | 26 +++++++++---------
- 4 files changed, 63 insertions(+), 32 deletions(-)
+ bfd/bfd-in2.h              |  9 +++-
+ bfd/libbfd.h               |  4 +-
+ bfd/reloc.c                | 26 ++++++-----
+ gas/config/tc-microblaze.c | 90 ++++++++++++++++----------------------
+ 4 files changed, 61 insertions(+), 68 deletions(-)
 
-diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
-index c6738960bb2..3899352b1d5 100644
---- a/bfd/bfd-in2.h
-+++ b/bfd/bfd-in2.h
-@@ -5369,15 +5369,20 @@ done here - only used for relaxing  */
-   BFD_RELOC_MICROBLAZE_32_NONE,
- 
+Index: gdb-9.2/bfd/bfd-in2.h
+===================================================================
+--- gdb-9.2.orig/bfd/bfd-in2.h
++++ gdb-9.2/bfd/bfd-in2.h
+@@ -5371,14 +5371,19 @@ done here - only used for relaxing  */
  /* This is a 64 bit reloc that stores the 32 bit pc relative
--value in two words (with an imm instruction).  No relocation is
-+value in two words (with an imml instruction).  No relocation is
+ value in two words (with an imm instruction).  No relocation is
  done here - only used for relaxing  */
 -  BFD_RELOC_MICROBLAZE_64_NONE,
 +  BFD_RELOC_MICROBLAZE_64_PCREL,
  
 -/* This is a 64 bit reloc that stores the 32 bit pc relative
 +/* This is a 64 bit reloc that stores the 32 bit relative
- value in two words (with an imml instruction).  No relocation is
- done here - only used for relaxing  */
-   BFD_RELOC_MICROBLAZE_64,
+  *  +value in two words (with an imml instruction).  No relocation is
+  *   +done here - only used for relaxing  */
+     BFD_RELOC_MICROBLAZE_64,
  
-+/* This is a 64 bit reloc that stores the 32 bit pc relative
-+value in two words (with an imm instruction).  No relocation is
-+done here - only used for relaxing  */
-+  BFD_RELOC_MICROBLAZE_64_NONE,
-+
  /* This is a 64 bit reloc that stores the 32 bit pc relative
++ *  +value in two words (with an imm instruction).  No relocation is
++ *   +done here - only used for relaxing  */
++    BFD_RELOC_MICROBLAZE_64_NONE,
++
++/* This is a 64 bit reloc that stores the 32 bit pc relative
  value in two words (with an imm instruction).  The relocation is
  PC-relative GOT offset  */
-diff --git a/bfd/libbfd.h b/bfd/libbfd.h
-index 4e71991273e..46be3891390 100644
---- a/bfd/libbfd.h
-+++ b/bfd/libbfd.h
-@@ -2905,14 +2905,14 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
+   BFD_RELOC_MICROBLAZE_64_GOTPC,
+Index: gdb-9.2/bfd/libbfd.h
+===================================================================
+--- gdb-9.2.orig/bfd/libbfd.h
++++ gdb-9.2/bfd/libbfd.h
+@@ -2905,14 +2905,14 @@ static const char *const bfd_reloc_code_
    "BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM",
    "BFD_RELOC_MICROBLAZE_32_NONE",
    "BFD_RELOC_MICROBLAZE_64_NONE",
@@ -58,35 +60,36 @@
    "BFD_RELOC_MICROBLAZE_64_TLS",
    "BFD_RELOC_MICROBLAZE_64_TLSGD",
    "BFD_RELOC_MICROBLAZE_64_TLSLD",
-diff --git a/bfd/reloc.c b/bfd/reloc.c
-index 8b3cc604738..98a156f061f 100644
---- a/bfd/reloc.c
-+++ b/bfd/reloc.c
-@@ -6814,24 +6814,12 @@ ENUMDOC
-   done here - only used for relaxing
+Index: gdb-9.2/bfd/reloc.c
+===================================================================
+--- gdb-9.2.orig/bfd/reloc.c
++++ gdb-9.2/bfd/reloc.c
+@@ -6815,12 +6815,6 @@ ENUMDOC
  ENUM
    BFD_RELOC_MICROBLAZE_64_NONE
--ENUMDOC
+ ENUMDOC
 -  This is a 32 bit reloc that stores the 32 bit pc relative
 -  value in two words (with an imml instruction).  No relocation is
 -  done here - only used for relaxing
 -ENUM
 -  BFD_RELOC_MICROBLAZE_64
- ENUMDOC
+-ENUMDOC
    This is a 64 bit reloc that stores the 32 bit pc relative
    value in two words (with an imm instruction).  No relocation is
    done here - only used for relaxing
- ENUM
+@@ -6828,12 +6822,6 @@ ENUM
    BFD_RELOC_MICROBLAZE_64_GOTPC
--ENUMDOC
--  This is a 64 bit reloc that stores the 32 bit pc relative
+ ENUMDOC
+   This is a 64 bit reloc that stores the 32 bit pc relative
 -  value in two words (with an imml instruction).  No relocation is
 -  done here - only used for relaxing
 -ENUM
 -  BFD_RELOC_MICROBLAZE_64_GPC
- ENUMDOC
-   This is a 64 bit reloc that stores the 32 bit pc relative
+-ENUMDOC
+-  This is a 64 bit reloc that stores the 32 bit pc relative
    value in two words (with an imm instruction).  The relocation is
+   PC-relative GOT offset
+ ENUM
 @@ -6917,6 +6905,20 @@ ENUMDOC
    value in two words (with an imm instruction).  The relocation is
    relative offset from start of TEXT.
@@ -108,6 +111,3 @@
  ENUM
    BFD_RELOC_AARCH64_RELOC_START
  ENUMDOC
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0019-Update-MB-x.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0018-Fixed-MB-x-relocation-issues.patch
similarity index 75%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0019-Update-MB-x.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0018-Fixed-MB-x-relocation-issues.patch
index fc5c946..84a4d31 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0019-Update-MB-x.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0018-Fixed-MB-x-relocation-issues.patch
@@ -1,27 +1,28 @@
-From 0bb779328b8564b008a6134826f043b4326f4904 Mon Sep 17 00:00:00 2001
+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 19/40] Update MB-x
+Subject: [PATCH 18/52] -Fixed MB-x relocation issues -Added imml for required
+ MB-x instructions
 
--Fixed MB-x relocation issues
--Added imml for required MB-x instructions
 ---
- bfd/elf64-microblaze.c     |  68 ++++++++++--
- 3 files changed, 209 insertions(+), 82 deletions(-)
+ bfd/elf64-microblaze.c     |  68 ++++++++++++++---
+ gas/config/tc-microblaze.c | 152 +++++++++++++++++++++++++++----------
+ gas/tc.h                   |   2 +-
+ 3 files changed, 167 insertions(+), 55 deletions(-)
 
-diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c
-index d55700fc513..f8f52870639 100644
---- a/bfd/elf64-microblaze.c
-+++ b/bfd/elf64-microblaze.c
-@@ -1478,8 +1478,17 @@ microblaze_elf_relocate_section (bfd *output_bfd,
+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)
++    			if (insn == 0xb2000000 || insn == 0xb2ffffff)
 +			  {
-+			    insn &= ~0x00ffffff;
++        		    insn &= ~0x00ffffff;
 +			    insn |= (relocation >> 16) & 0xffffff;
 +			    bfd_put_32 (input_bfd, insn,
  			            contents + offset + endian);
@@ -32,7 +33,7 @@
  			bfd_put_16 (input_bfd, relocation & 0xffff,
  			            contents + offset + endian + INST_WORD_SIZE);
  		      }
-@@ -1569,11 +1578,28 @@ microblaze_elf_relocate_section (bfd *output_bfd,
+@@ -1580,11 +1589,28 @@ microblaze_elf_relocate_section (bfd *ou
  		    else
  		      {
  			if (r_type == R_MICROBLAZE_64_PCREL)
@@ -42,7 +43,7 @@
 -			bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff,
 +			  {
 +			    if (!input_section->output_section->vma &&
-+				 !input_section->output_offset && !offset)
++				 !input_section->output_offset && !offset)	
 +			      relocation -= (input_section->output_section->vma
 +			                     + input_section->output_offset
 +					     + offset);
@@ -52,9 +53,9 @@
 +					     + offset + INST_WORD_SIZE);
 +			  }
 +			unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian);
-+			if (insn == 0xb2000000 || insn == 0xb2ffffff)
++    			if (insn == 0xb2000000 || insn == 0xb2ffffff)
 +			  {
-+			    insn &= ~0x00ffffff;
++        		    insn &= ~0x00ffffff;
 +			    insn |= (relocation >> 16) & 0xffffff;
 +			    bfd_put_32 (input_bfd, insn,
  			            contents + offset + endian);
@@ -65,7 +66,7 @@
  			bfd_put_16 (input_bfd, relocation & 0xffff,
  			            contents + offset + endian + INST_WORD_SIZE);
  		      }
-@@ -1677,9 +1703,19 @@ static void
+@@ -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);
@@ -88,7 +89,7 @@
  }
  
  /* Read-modify-write into the bfd, an immediate value into appropriate fields of
-@@ -1691,10 +1727,18 @@ microblaze_bfd_write_imm_value_64 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val)
+@@ -1717,10 +1753,18 @@ microblaze_bfd_write_imm_value_64 (bfd *
      unsigned long instr_lo;
  
      instr_hi = bfd_get_32 (abfd, bfd_addr);
@@ -111,6 +112,3 @@
      instr_lo = bfd_get_32 (abfd, bfd_addr + INST_WORD_SIZE);
      instr_lo &= ~0x0000ffff;
      instr_lo |= (val & 0x0000ffff);
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0019-Fixing-the-branch-related-issues.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0019-Fixing-the-branch-related-issues.patch
new file mode 100644
index 0000000..b3f93845
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0019-Fixing-the-branch-related-issues.patch
@@ -0,0 +1,25 @@
+From 5780b5e5f9b5fe64d5172cd99399366e42c67b64 Mon Sep 17 00:00:00 2001
+From: Nagaraju Mekala <nmekala@xilix.com>
+Date: Sun, 30 Sep 2018 17:06:58 +0530
+Subject: [PATCH 19/52] Fixing the branch related issues
+
+Conflicts:
+	bfd/elf64-microblaze.c
+---
+ bfd/elf64-microblaze.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+Index: gdb-9.2/bfd/elf64-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf64-microblaze.c
++++ gdb-9.2/bfd/elf64-microblaze.c
+@@ -2545,6 +2545,9 @@ microblaze_elf_check_relocs (bfd * abfd,
+ 	  while (h->root.type == bfd_link_hash_indirect
+ 		 || h->root.type == bfd_link_hash_warning)
+ 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
++	  /* PR15323, ref flags aren't set for references in the same
++	     object.  */
++	  h->root.non_ir_ref_regular = 1;
+ 	}
+ 
+       switch (r_type)
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0020-Various-fixes.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0020-Fixed-address-computation-issues-with-64bit-address.patch
similarity index 61%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0020-Various-fixes.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0020-Fixed-address-computation-issues-with-64bit-address.patch
index eb0bc98..a2f34b0 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0020-Various-fixes.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0020-Fixed-address-computation-issues-with-64bit-address.patch
@@ -1,37 +1,40 @@
-From 188a60b441711f663f07dc3c3902c8c5d590eb6c Mon Sep 17 00:00:00 2001
+From fd3df3812f8297133a598802b552252f45c80d0c Mon Sep 17 00:00:00 2001
 From: Nagaraju Mekala <nmekala@xilix.com>
 Date: Tue, 9 Oct 2018 10:14:22 +0530
-Subject: [PATCH 20/40] Various fixes
+Subject: [PATCH 20/52] - Fixed address computation issues with 64bit address -
+ Fixed imml dissassamble issue
 
-- Fixed address computation issues with 64bit address
-- Fixed imml dissassamble issue
+Conflicts:
+	gas/config/tc-microblaze.c
+	opcodes/microblaze-dis.c
 ---
  bfd/bfd-in2.h              |  5 +++
  bfd/elf64-microblaze.c     | 14 ++++----
+ gas/config/tc-microblaze.c | 74 +++++++++++++++++++++++++++++++++-----
  opcodes/microblaze-dis.c   |  2 +-
  4 files changed, 79 insertions(+), 16 deletions(-)
 
-diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
-index 3899352b1d5..91761bf6964 100644
---- a/bfd/bfd-in2.h
-+++ b/bfd/bfd-in2.h
-@@ -5378,6 +5378,11 @@ value in two words (with an imml instruction).  No relocation is
- done here - only used for relaxing  */
-   BFD_RELOC_MICROBLAZE_64,
+Index: gdb-9.2/bfd/bfd-in2.h
+===================================================================
+--- gdb-9.2.orig/bfd/bfd-in2.h
++++ gdb-9.2/bfd/bfd-in2.h
+@@ -5378,6 +5378,11 @@ done here - only used for relaxing  */
+  *   +done here - only used for relaxing  */
+     BFD_RELOC_MICROBLAZE_64,
  
 +/* This is a 64 bit reloc that stores the 32 bit relative
-+value in two words (with an imml instruction).  No relocation is
-+done here - only used for relaxing  */
++ *  +value in two words (with an imml instruction).  No relocation is
++ *   +done here - only used for relaxing  */
 +    BFD_RELOC_MICROBLAZE_EA64,
 +
  /* This is a 64 bit reloc that stores the 32 bit pc relative
- value in two words (with an imm instruction).  No relocation is
- done here - only used for relaxing  */
-diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c
-index f8f52870639..17e58748a0b 100644
---- a/bfd/elf64-microblaze.c
-+++ b/bfd/elf64-microblaze.c
-@@ -121,15 +121,15 @@ static reloc_howto_type microblaze_elf_howto_raw[] =
+  *  +value in two words (with an imm instruction).  No relocation is
+  *   +done here - only used for relaxing  */
+Index: gdb-9.2/bfd/elf64-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf64-microblaze.c
++++ gdb-9.2/bfd/elf64-microblaze.c
+@@ -121,15 +121,15 @@ static reloc_howto_type microblaze_elf_h
            0,			/* Rightshift.  */
            4,			/* Size (0 = byte, 1 = short, 2 = long).  */
            64,			/* Bitsize.  */
@@ -50,7 +53,7 @@
  
     /* A 64 bit relocation.  Table entry not really used.  */
     HOWTO (R_MICROBLAZE_64,     	/* Type.  */
-@@ -585,9 +585,9 @@ microblaze_elf_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
+@@ -585,9 +585,9 @@ microblaze_elf_reloc_type_lookup (bfd *
      case BFD_RELOC_32:
        microblaze_reloc = R_MICROBLAZE_32;
        break;
@@ -62,7 +65,7 @@
        break;
      case BFD_RELOC_32_PCREL:
        microblaze_reloc = R_MICROBLAZE_32_PCREL;
-@@ -619,7 +619,7 @@ microblaze_elf_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
+@@ -619,7 +619,7 @@ microblaze_elf_reloc_type_lookup (bfd *
      case BFD_RELOC_VTABLE_ENTRY:
        microblaze_reloc = R_MICROBLAZE_GNU_VTENTRY;
        break;
@@ -71,7 +74,7 @@
        microblaze_reloc = R_MICROBLAZE_IMML_64;
        break;
      case BFD_RELOC_MICROBLAZE_64_GOTPC:
-@@ -1956,7 +1956,7 @@ microblaze_elf_relax_section (bfd *abfd,
+@@ -1982,7 +1982,7 @@ microblaze_elf_relax_section (bfd *abfd,
  	        efix = calc_fixup (target_address, 0, sec);
  
              /* Validate the in-band val.  */
@@ -80,19 +83,16 @@
              if (val != irel->r_addend && ELF64_R_TYPE (irel->r_info) == R_MICROBLAZE_32_NONE) {
                 fprintf(stderr, "%d: CORRUPT relax reloc %x %lx\n", __LINE__, val, irel->r_addend);
              }
-diff --git a/opcodes/microblaze-dis.c b/opcodes/microblaze-dis.c
-index 437f536e96a..24ede714858 100644
---- a/opcodes/microblaze-dis.c
-+++ b/opcodes/microblaze-dis.c
-@@ -78,7 +78,7 @@ get_field_imml (struct string_buf *buf, long instr)
+Index: gdb-9.2/opcodes/microblaze-dis.c
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-dis.c
++++ gdb-9.2/opcodes/microblaze-dis.c
+@@ -77,7 +77,7 @@ static char *
+ get_field_imml (struct string_buf *buf, long instr)
  {
    char *p = strbuf (buf);
- 
 -  sprintf (p, "%d", (short)((instr & IMML_MASK) >> IMM_LOW));
 +  sprintf (p, "%d", (int)((instr & IMML_MASK) >> IMM_LOW));
    return p;
  }
  
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0021-Adding-new-relocation-to-support-64bit-rodata.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0021-Adding-new-relocation-to-support-64bit-rodata.patch
index 0d212cc..abfdd8d 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0021-Adding-new-relocation-to-support-64bit-rodata.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0021-Adding-new-relocation-to-support-64bit-rodata.patch
@@ -1,17 +1,18 @@
-From a485fdf959afb6cd079f482eeea9d3186e6393f8 Mon Sep 17 00:00:00 2001
+From 14a54cced8062343b83d7ff0e68f00bca562a509 Mon Sep 17 00:00:00 2001
 From: Nagaraju Mekala <nmekala@xilix.com>
 Date: Sat, 13 Oct 2018 21:17:01 +0530
-Subject: [PATCH 21/40] Adding new relocation to support 64bit rodata
+Subject: [PATCH 21/52] Adding new relocation to support 64bit rodata
 
 ---
  bfd/elf64-microblaze.c     | 11 +++++++--
+ gas/config/tc-microblaze.c | 49 ++++++++++++++++++++++++++++++++++----
  2 files changed, 54 insertions(+), 6 deletions(-)
 
-diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c
-index 17e58748a0b..b62c47e8514 100644
---- a/bfd/elf64-microblaze.c
-+++ b/bfd/elf64-microblaze.c
-@@ -1463,6 +1463,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
+Index: gdb-9.2/bfd/elf64-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf64-microblaze.c
++++ gdb-9.2/bfd/elf64-microblaze.c
+@@ -1473,6 +1473,7 @@ microblaze_elf_relocate_section (bfd *ou
  	    case (int) R_MICROBLAZE_64_PCREL :
  	    case (int) R_MICROBLAZE_64:
  	    case (int) R_MICROBLAZE_32:
@@ -19,16 +20,16 @@
  	      {
  		/* r_symndx will be STN_UNDEF (zero) only for relocs against symbols
  		   from removed linkonce sections, or sections discarded by
-@@ -1472,6 +1473,8 @@ microblaze_elf_relocate_section (bfd *output_bfd,
+@@ -1482,6 +1483,8 @@ microblaze_elf_relocate_section (bfd *ou
  		    relocation += addend;
- 		    if (r_type == R_MICROBLAZE_32)
+ 		    if (r_type == R_MICROBLAZE_32)// || r_type == R_MICROBLAZE_IMML_64)
  		      bfd_put_32 (input_bfd, relocation, contents + offset);
 +		    else if (r_type == R_MICROBLAZE_IMML_64)
 +		      bfd_put_64 (input_bfd, relocation, contents + offset);
  		    else
  		      {
  			if (r_type == R_MICROBLAZE_64_PCREL)
-@@ -1549,7 +1552,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
+@@ -1560,7 +1563,7 @@ microblaze_elf_relocate_section (bfd *ou
  		      }
  		    else
  		      {
@@ -37,7 +38,7 @@
  			  {
  			    outrel.r_info = ELF64_R_INFO (0, R_MICROBLAZE_REL);
  			    outrel.r_addend = relocation + addend;
-@@ -1575,6 +1578,8 @@ microblaze_elf_relocate_section (bfd *output_bfd,
+@@ -1586,6 +1589,8 @@ microblaze_elf_relocate_section (bfd *ou
  		    relocation += addend;
  		    if (r_type == R_MICROBLAZE_32)
  		      bfd_put_32 (input_bfd, relocation, contents + offset);
@@ -46,7 +47,7 @@
  		    else
  		      {
  			if (r_type == R_MICROBLAZE_64_PCREL)
-@@ -2072,7 +2077,8 @@ microblaze_elf_relax_section (bfd *abfd,
+@@ -2098,7 +2103,8 @@ microblaze_elf_relax_section (bfd *abfd,
                    microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset,
                                                       irelscan->r_addend);
                }
@@ -56,7 +57,7 @@
                  {
  	          isym = isymbuf + ELF64_R_SYM (irelscan->r_info);
  
-@@ -2568,6 +2574,7 @@ microblaze_elf_check_relocs (bfd * abfd,
+@@ -2606,6 +2612,7 @@ microblaze_elf_check_relocs (bfd * abfd,
          case R_MICROBLAZE_64:
          case R_MICROBLAZE_64_PCREL:
          case R_MICROBLAZE_32:
@@ -64,6 +65,3 @@
            {
              if (h != NULL && !bfd_link_pic (info))
  	      {
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0022-fixing-the-.bss-relocation-issue.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0022-fixing-the-.bss-relocation-issue.patch
index aa512b8..3bbe265 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0022-fixing-the-.bss-relocation-issue.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0022-fixing-the-.bss-relocation-issue.patch
@@ -1,35 +1,35 @@
-From 24f96f4e86895b41aae21f775599a857939d002f Mon Sep 17 00:00:00 2001
+From e9e4d4837cfea27e67fa656ede535f250205eb2c Mon Sep 17 00:00:00 2001
 From: Nagaraju Mekala <nmekala@xilix.com>
 Date: Wed, 24 Oct 2018 12:34:37 +0530
-Subject: [PATCH 22/40] fixing the .bss relocation issue
+Subject: [PATCH 22/52] fixing the .bss relocation issue
 
 ---
  bfd/elf64-microblaze.c | 18 ++++++++++++------
  1 file changed, 12 insertions(+), 6 deletions(-)
 
-diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c
-index b62c47e8514..cb3b40b574c 100644
---- a/bfd/elf64-microblaze.c
-+++ b/bfd/elf64-microblaze.c
-@@ -1482,7 +1482,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
+Index: gdb-9.2/bfd/elf64-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf64-microblaze.c
++++ gdb-9.2/bfd/elf64-microblaze.c
+@@ -1492,7 +1492,7 @@ microblaze_elf_relocate_section (bfd *ou
  					 + input_section->output_offset
  					 + offset + INST_WORD_SIZE);
  			unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian);
--			if (insn == 0xb2000000 || insn == 0xb2ffffff)
+-    			if (insn == 0xb2000000 || insn == 0xb2ffffff)
 +			if ((insn & 0xff000000) == 0xb2000000)
  			  {
- 			    insn &= ~0x00ffffff;
+         		    insn &= ~0x00ffffff;
  			    insn |= (relocation >> 16) & 0xffffff;
-@@ -1595,7 +1595,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
+@@ -1606,7 +1606,7 @@ microblaze_elf_relocate_section (bfd *ou
  					     + offset + INST_WORD_SIZE);
  			  }
  			unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian);
--			if (insn == 0xb2000000 || insn == 0xb2ffffff)
+-    			if (insn == 0xb2000000 || insn == 0xb2ffffff)
 +			if ((insn & 0xff000000) == 0xb2000000)
  			  {
- 			    insn &= ~0x00ffffff;
+         		    insn &= ~0x00ffffff;
  			    insn |= (relocation >> 16) & 0xffffff;
-@@ -1709,7 +1709,7 @@ microblaze_bfd_write_imm_value_32 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val)
+@@ -1735,7 +1735,7 @@ microblaze_bfd_write_imm_value_32 (bfd *
  {
      unsigned long instr = bfd_get_32 (abfd, bfd_addr);
  
@@ -38,7 +38,7 @@
        {
          instr &= ~0x00ffffff;
          instr |= (val & 0xffffff);
-@@ -1732,7 +1732,7 @@ microblaze_bfd_write_imm_value_64 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val)
+@@ -1758,7 +1758,7 @@ microblaze_bfd_write_imm_value_64 (bfd *
      unsigned long instr_lo;
  
      instr_hi = bfd_get_32 (abfd, bfd_addr);
@@ -47,7 +47,7 @@
        {
          instr_hi &= ~0x00ffffff;
          instr_hi |= (val >> 16) & 0xffffff;
-@@ -2225,7 +2225,10 @@ microblaze_elf_relax_section (bfd *abfd,
+@@ -2251,7 +2251,10 @@ microblaze_elf_relax_section (bfd *abfd,
            unsigned long instr_lo =  bfd_get_32 (abfd, ocontents
                                                  + irelscan->r_offset
                                                  + INST_WORD_SIZE);
@@ -59,7 +59,7 @@
            immediate |= (instr_lo & 0x0000ffff);
  		      offset = calc_fixup (irelscan->r_addend, 0, sec);
  		      immediate -= offset;
-@@ -2269,7 +2272,10 @@ microblaze_elf_relax_section (bfd *abfd,
+@@ -2295,7 +2298,10 @@ microblaze_elf_relax_section (bfd *abfd,
            unsigned long instr_lo =  bfd_get_32 (abfd, ocontents
                                                  + irelscan->r_offset
                                                  + INST_WORD_SIZE);
@@ -71,6 +71,3 @@
            immediate |= (instr_lo & 0x0000ffff);
  		      target_address = immediate;
  		      offset = calc_fixup (target_address, 0, sec);
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0023-Fixed-the-bug-in-the-R_MICROBLAZE_64_NONE-relocation.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0023-Fixed-the-bug-in-the-R_MICROBLAZE_64_NONE-relocation.patch
index c645781..b359ce7 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0023-Fixed-the-bug-in-the-R_MICROBLAZE_64_NONE-relocation.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0023-Fixed-the-bug-in-the-R_MICROBLAZE_64_NONE-relocation.patch
@@ -1,7 +1,7 @@
-From cd5868dca5b4a728e6418459d871f5c9ca68253e Mon Sep 17 00:00:00 2001
+From 1466dd2c74e38ae6d1dca5cf6d4cad87c94fbc8f Mon Sep 17 00:00:00 2001
 From: Nagaraju Mekala <nmekala@xilix.com>
 Date: Wed, 28 Nov 2018 14:00:29 +0530
-Subject: [PATCH 23/40] Fixed the bug in the R_MICROBLAZE_64_NONE relocation.
+Subject: [PATCH 23/52] Fixed the bug in the R_MICROBLAZE_64_NONE relocation.
  It was adjusting only lower 16bits.
 
 ---
@@ -9,10 +9,10 @@
  bfd/elf64-microblaze.c | 4 ++--
  2 files changed, 4 insertions(+), 4 deletions(-)
 
-diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c
-index a31b407cfbf..04816a4a187 100644
---- a/bfd/elf32-microblaze.c
-+++ b/bfd/elf32-microblaze.c
+Index: gdb-9.2/bfd/elf32-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf32-microblaze.c
++++ gdb-9.2/bfd/elf32-microblaze.c
 @@ -2023,8 +2023,8 @@ microblaze_elf_relax_section (bfd *abfd,
  		sfix = calc_fixup (irel->r_offset + INST_WORD_SIZE, 0, sec);
  		efix = calc_fixup (target_address, 0, sec);
@@ -24,11 +24,11 @@
  	      }
  	      break;
  	    }
-diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c
-index cb3b40b574c..b002b414d64 100644
---- a/bfd/elf64-microblaze.c
-+++ b/bfd/elf64-microblaze.c
-@@ -2004,8 +2004,8 @@ microblaze_elf_relax_section (bfd *abfd,
+Index: gdb-9.2/bfd/elf64-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf64-microblaze.c
++++ gdb-9.2/bfd/elf64-microblaze.c
+@@ -2030,8 +2030,8 @@ microblaze_elf_relax_section (bfd *abfd,
  		sfix = calc_fixup (irel->r_offset + INST_WORD_SIZE, 0, sec);
  		efix = calc_fixup (target_address, 0, sec);
  		irel->r_addend -= (efix - sfix);
@@ -39,6 +39,3 @@
  	      }
  	      break;
  	    }
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0025-Patch-Microblaze-Binutils-security-check-is-causing-.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0025-Patch-Microblaze-Binutils-security-check-is-causing-.patch
deleted file mode 100644
index f5bf917..0000000
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0025-Patch-Microblaze-Binutils-security-check-is-causing-.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 25a67af22ad040f87b3c14185c338828d4e26908 Mon Sep 17 00:00:00 2001
-From: Mahesh Bodapati <mbodapat@xilinx.com>
-Date: Mon, 11 Mar 2019 14:23:58 +0530
-Subject: [PATCH 25/40] [Patch,Microblaze] : Binutils security check is causing
- build error for windows builds.commenting for now.
-
----
- bfd/elf-attrs.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/bfd/elf-attrs.c b/bfd/elf-attrs.c
-index bfe135e7fbb..abf267ad42e 100644
---- a/bfd/elf-attrs.c
-+++ b/bfd/elf-attrs.c
-@@ -440,6 +440,8 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
-   /* PR 17512: file: 2844a11d.  */
-   if (hdr->sh_size == 0)
-     return;
-+
-+  #if 0
-   if (hdr->sh_size > bfd_get_file_size (abfd))
-     {
-       /* xgettext:c-format */
-@@ -448,6 +450,7 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
-       bfd_set_error (bfd_error_invalid_operation);
-       return;
-     }
-+  #endif
- 
-   contents = (bfd_byte *) bfd_malloc (hdr->sh_size + 1);
-   if (!contents)
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0026-fixing-the-long-long-long-mingw-toolchain-issue.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0025-fixing-the-long-long-long-mingw-toolchain-issue.patch
similarity index 61%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0026-fixing-the-long-long-long-mingw-toolchain-issue.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0025-fixing-the-long-long-long-mingw-toolchain-issue.patch
index f5ddce4..c2ae39e 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0026-fixing-the-long-long-long-mingw-toolchain-issue.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0025-fixing-the-long-long-long-mingw-toolchain-issue.patch
@@ -1,16 +1,17 @@
-From b9e89f0698fd0e3b0e965986681f9fd90d3dc313 Mon Sep 17 00:00:00 2001
+From f64c95b119637880e8898b459e7665f0d92cef20 Mon Sep 17 00:00:00 2001
 From: Nagaraju Mekala <nmekala@xilix.com>
 Date: Thu, 29 Nov 2018 17:59:25 +0530
-Subject: [PATCH 26/40] fixing the long & long long mingw toolchain issue
+Subject: [PATCH 25/52] fixing the long & long long mingw toolchain issue
 
 ---
+ gas/config/tc-microblaze.c | 10 +++++-----
  opcodes/microblaze-opc.h   |  4 ++--
  2 files changed, 7 insertions(+), 7 deletions(-)
 
-diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h
-index f4ee8f43372..c8c2addc351 100644
---- a/opcodes/microblaze-opc.h
-+++ b/opcodes/microblaze-opc.h
+Index: gdb-9.2/opcodes/microblaze-opc.h
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-opc.h
++++ gdb-9.2/opcodes/microblaze-opc.h
 @@ -585,8 +585,8 @@ char pvr_register_prefix[] = "rpvr";
  #define MIN_IMM6_WIDTH  ((int) 0x00000001)
  #define MAX_IMM6_WIDTH  ((int) 0x00000040)
@@ -22,6 +23,3 @@
  
  #endif /* MICROBLAZE_OPC */
  
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0027-Added-support-to-new-arithmetic-single-register-inst.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0026-Added-support-to-new-arithmetic-single-register-inst.patch
similarity index 82%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0027-Added-support-to-new-arithmetic-single-register-inst.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0026-Added-support-to-new-arithmetic-single-register-inst.patch
index bf05816..90094ab 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0027-Added-support-to-new-arithmetic-single-register-inst.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0026-Added-support-to-new-arithmetic-single-register-inst.patch
@@ -1,24 +1,26 @@
-From efc3fd518cdb7e8bf82ac27b98b946001f83a2bf Mon Sep 17 00:00:00 2001
+From b8128385902d88414c354b772828eefe3b59fb06 Mon Sep 17 00:00:00 2001
 From: Nagaraju <nmekala@xilinx.com>
 Date: Fri, 23 Aug 2019 16:18:43 +0530
-Subject: [PATCH 27/40] Added support to new arithmetic single register
+Subject: [PATCH 26/52] Added support to new arithmetic single register
  instructions
 
+Conflicts:
+	opcodes/microblaze-dis.c
 ---
+ gas/config/tc-microblaze.c | 147 ++++++++++++++++++++++++++++++++++++-
  opcodes/microblaze-dis.c   |  13 +++-
- opcodes/microblaze-opc.h   |  45 +++++++++++-
+ opcodes/microblaze-opc.h   |  43 ++++++++++-
  opcodes/microblaze-opcm.h  |   5 +-
  4 files changed, 201 insertions(+), 7 deletions(-)
 
-diff --git a/opcodes/microblaze-dis.c b/opcodes/microblaze-dis.c
-index 24ede714858..e93d9b890ba 100644
---- a/opcodes/microblaze-dis.c
-+++ b/opcodes/microblaze-dis.c
-@@ -131,6 +131,15 @@ get_field_imm15 (struct string_buf *buf, long instr)
+Index: gdb-9.2/opcodes/microblaze-dis.c
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-dis.c
++++ gdb-9.2/opcodes/microblaze-dis.c
+@@ -130,9 +130,17 @@ get_field_imm15 (struct string_buf *buf,
    return p;
  }
  
-+static char *
 +get_field_imm16 (struct string_buf *buf, long instr)
 +{
 +  char *p = strbuf (buf);
@@ -29,29 +31,25 @@
 +
  static char *
  get_field_special (struct string_buf *buf, long instr,
- 		   struct op_code_struct *op)
-@@ -448,6 +457,9 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
- 	  print_func (stream, "\t%s, %s", get_field_rd (&buf, inst),
- 		      get_field_imm15 (&buf, inst));
- 	  break;
-+	case INST_TYPE_RD_IMML:
-+	  print_func (stream, "\t%s, %s", get_field_rd (&buf, inst), get_field_imm16 (&buf, inst));
-+	  break;
- 	  /* For mbar insn.  */
- 	case INST_TYPE_IMM5:
- 	  print_func (stream, "\t%s", get_field_imm5_mbar (&buf, inst));
-@@ -455,7 +467,6 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
+-		   struct op_code_struct *op)
++                   struct op_code_struct *op)
+ {
+   char *p = strbuf (buf);
+   char *spr;
+@@ -454,6 +462,9 @@ print_insn_microblaze (bfd_vma memaddr,
  	  /* For mbar 16 or sleep insn.  */
  	case INST_TYPE_NONE:
  	  break;
--	  /* For tuqula instruction */
++	case INST_TYPE_RD_IMML:
++	  print_func (stream, "\t%s, %s", get_field_rd (&buf, inst), get_field_imm16 (&buf, inst));
++          break;
          /* For bit field insns.  */
  	case INST_TYPE_RD_R1_IMMW_IMMS:
- 	  print_func (stream, "\t%s, %s, %s, %s", get_field_rd (&buf, inst), get_field_r1(&buf, inst),
-diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h
-index c8c2addc351..eaf4a1bd9f9 100644
---- a/opcodes/microblaze-opc.h
-+++ b/opcodes/microblaze-opc.h
+           print_func (stream, "\t%s, %s, %s, %s", get_field_rd (&buf, inst),get_field_r1(&buf, inst),get_field_immw (&buf, inst), get_field_imms (&buf, inst));
+Index: gdb-9.2/opcodes/microblaze-opc.h
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-opc.h
++++ gdb-9.2/opcodes/microblaze-opc.h
 @@ -69,6 +69,7 @@
  #define INST_TYPE_RD_R1_IMMW_IMMS  21
  
@@ -102,7 +100,7 @@
  /* New Mask for msrset, msrclr insns.  */
  #define OPCODE_MASK_H23N  0xFC1F8000 /* High 6 and bits 11 - 16.  */
  /* Mask for mbar insn.  */
-@@ -114,13 +143,13 @@
+@@ -114,7 +143,7 @@
  #define DELAY_SLOT 1
  #define NO_DELAY_SLOT 0
  
@@ -111,13 +109,6 @@
  
  struct op_code_struct
  {
-   const char * name;
-   short inst_type;            /* Registers and immediate values involved.  */
--  short inst_offset_type;     /* Immediate vals offset from PC? (= 1 for branches).  */
-+  int inst_offset_type;     /* Immediate vals offset from PC? (= 1 for branches).  */
-   short delay_slots;          /* Info about delay slots needed after this instr. */
-   short immval_mask;
-   unsigned long bit_sequence; /* All the fixed bits for the op are set and
 @@ -444,13 +473,21 @@ struct op_code_struct
    {"cmpl",    INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x14000101, OPCODE_MASK_H4, cmpl, arithmetic_inst },
    {"cmplu",   INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x14000103, OPCODE_MASK_H4, cmplu, arithmetic_inst },
@@ -154,10 +145,10 @@
    {"imml",    INST_TYPE_IMML, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB2000000, OPCODE_MASK_H8, imml, immediate_inst },
    {"breai",   INST_TYPE_IMM, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8010000, OPCODE_MASK_H12, breai, branch_inst },
    {"breaid",  INST_TYPE_IMM, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8110000, OPCODE_MASK_H12, breaid, branch_inst },
-diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h
-index ee01cdb7d9b..31726c9b01a 100644
---- a/opcodes/microblaze-opcm.h
-+++ b/opcodes/microblaze-opcm.h
+Index: gdb-9.2/opcodes/microblaze-opcm.h
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-opcm.h
++++ gdb-9.2/opcodes/microblaze-opcm.h
 @@ -61,7 +61,9 @@ enum microblaze_instr
    eaputd, teaputd, ecaputd, tecaputd, neaputd, tneaputd, necaputd, tnecaputd,
  
@@ -176,6 +167,3 @@
 +#define IMM16_MASK 0x0000FFFF
  
  #endif /* MICROBLAZE-OPCM */
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0027-Patch-MicroBlaze-double-imml-generation-for-64-bit-v.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0027-Patch-MicroBlaze-double-imml-generation-for-64-bit-v.patch
new file mode 100644
index 0000000..bbcac10
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0027-Patch-MicroBlaze-double-imml-generation-for-64-bit-v.patch
@@ -0,0 +1,26 @@
+From 41b562250cdac5fd821267c6dac68b799d80dbe3 Mon Sep 17 00:00:00 2001
+From: Mahesh Bodapati <mbodapat@xilinx.com>
+Date: Mon, 26 Aug 2019 15:29:42 +0530
+Subject: [PATCH 27/52] [Patch,MicroBlaze] : double imml generation for 64 bit
+ values.
+
+---
+ gas/config/tc-microblaze.c | 322 ++++++++++++++++++++++++++++++-------
+ opcodes/microblaze-opc.h   |   4 +-
+ 2 files changed, 263 insertions(+), 63 deletions(-)
+
+Index: gdb-9.2/opcodes/microblaze-opc.h
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-opc.h
++++ gdb-9.2/opcodes/microblaze-opc.h
+@@ -626,8 +626,8 @@ char pvr_register_prefix[] = "rpvr";
+ #define MIN_IMM6_WIDTH  ((int) 0x00000001)
+ #define MAX_IMM6_WIDTH  ((int) 0x00000040)
+ 
+-#define MIN_IMML  ((long long) 0xffffff8000000000L)
+-#define MAX_IMML  ((long long) 0x0000007fffffffffL)
++#define MIN_IMML  ((long long) -9223372036854775808)
++#define MAX_IMML  ((long long) 9223372036854775807)
+ 
+ #endif /* MICROBLAZE_OPC */
+ 
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0028-Patch-MicroBlaze-double-imml-generation-for-64-bit-v.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0028-Patch-MicroBlaze-double-imml-generation-for-64-bit-v.patch
deleted file mode 100644
index 01d615d..0000000
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0028-Patch-MicroBlaze-double-imml-generation-for-64-bit-v.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 953a4eb8152c0aca3e36ccc22a8950c9e68965b5 Mon Sep 17 00:00:00 2001
-From: Mahesh Bodapati <mbodapat@xilinx.com>
-Date: Mon, 26 Aug 2019 15:29:42 +0530
-Subject: [PATCH 28/40] [Patch,MicroBlaze] : double imml generation for 64 bit
- values.
-
----
- opcodes/microblaze-opc.h   |   4 +-
- 2 files changed, 264 insertions(+), 64 deletions(-)
-
-diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h
-index eaf4a1bd9f9..79c3cf0d1a1 100644
---- a/opcodes/microblaze-opc.h
-+++ b/opcodes/microblaze-opc.h
-@@ -626,8 +626,8 @@ char pvr_register_prefix[] = "rpvr";
- #define MIN_IMM6_WIDTH  ((int) 0x00000001)
- #define MAX_IMM6_WIDTH  ((int) 0x00000040)
- 
--#define MIN_IMML  ((long long) 0xffffff8000000000L)
--#define MAX_IMML  ((long long) 0x0000007fffffffffL)
-+#define MIN_IMML  ((long long) -9223372036854775807)
-+#define MAX_IMML  ((long long) 9223372036854775807)
- 
- #endif /* MICROBLAZE_OPC */
- 
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0032-ld-emulparams-elf64microblaze-Fix-emulation-generati.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0032-ld-emulparams-elf64microblaze-Fix-emulation-generati.patch
new file mode 100644
index 0000000..f5280eb
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0032-ld-emulparams-elf64microblaze-Fix-emulation-generati.patch
@@ -0,0 +1,40 @@
+From ef6fd1a60979ca1d9fc419ec840641019bc86ac2 Mon Sep 17 00:00:00 2001
+From: Mark Hatle <mark.hatle@xilinx.com>
+Date: Mon, 30 Nov 2020 16:17:36 -0800
+Subject: [PATCH 32/52] ld/emulparams/elf64microblaze: Fix emulation generation
+
+Compilation fails when building ld-new with:
+
+ldemul.o:(.data.rel+0x820): undefined reference to `ld_elf64microblazeel_emulation'
+ldemul.o:(.data.rel+0x828): undefined reference to `ld_elf64microblaze_emulation'
+
+The error appears to be that the elf64 files were referencing the elf32 emulation.
+
+Signed-off-by: Mark Hatle <mark.hatle@xilinx.com>
+---
+ ld/emulparams/elf64microblaze.sh   | 2 +-
+ ld/emulparams/elf64microblazeel.sh | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+Index: gdb-9.2/ld/emulparams/elf64microblaze.sh
+===================================================================
+--- gdb-9.2.orig/ld/emulparams/elf64microblaze.sh
++++ gdb-9.2/ld/emulparams/elf64microblaze.sh
+@@ -19,5 +19,5 @@ NOP=0x80000000
+ #$@{RELOCATING+ PROVIDE (__stack = 0x7000);@}
+ #OTHER_RELOCATING_SECTIONS='PROVIDE (_stack = _end + 0x1000);'
+ 
+-TEMPLATE_NAME=elf32
++TEMPLATE_NAME=elf
+ #GENERATE_SHLIB_SCRIPT=yes
+Index: gdb-9.2/ld/emulparams/elf64microblazeel.sh
+===================================================================
+--- gdb-9.2.orig/ld/emulparams/elf64microblazeel.sh
++++ gdb-9.2/ld/emulparams/elf64microblazeel.sh
+@@ -19,5 +19,5 @@ NOP=0x80000000
+ #$@{RELOCATING+ PROVIDE (__stack = 0x7000);@}
+ #OTHER_RELOCATING_SECTIONS='PROVIDE (_stack = _end + 0x1000);'
+ 
+-TEMPLATE_NAME=elf32
++TEMPLATE_NAME=elf
+ #GENERATE_SHLIB_SCRIPT=yes
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0034-Add-initial-port-of-linux-gdbserver.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0033-Add-initial-port-of-linux-gdbserver-add-gdb_proc_ser.patch
similarity index 71%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0034-Add-initial-port-of-linux-gdbserver.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0033-Add-initial-port-of-linux-gdbserver-add-gdb_proc_ser.patch
index ff1c606..c82a988 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0034-Add-initial-port-of-linux-gdbserver.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0033-Add-initial-port-of-linux-gdbserver-add-gdb_proc_ser.patch
@@ -1,7 +1,7 @@
-From c5eee33cd39dbb9c44bdad2025a5c848139c55f2 Mon Sep 17 00:00:00 2001
+From d495e03657b25b793f7c9bdd689fdc2d1633a47b Mon Sep 17 00:00:00 2001
 From: Mahesh Bodapati <mbodapat@xilinx.com>
 Date: Mon, 23 Jan 2017 19:07:44 +0530
-Subject: [PATCH 34/40] Add initial port of linux gdbserver add
+Subject: [PATCH 33/52] Add initial port of linux gdbserver add
  gdb_proc_service_h to gdbserver microblaze-linux
 
 gdbserver needs to initialise the microblaze registers
@@ -21,23 +21,19 @@
 Signed-off-by: Nathan Rossi <nathan.rossi@petalogix.com>
 ---
  gdb/configure.host                   |   3 +
- gdb/features/microblaze-linux.xml    |  12 ++
- gdb/gdbserver/Makefile.in            |   4 +
- gdb/gdbserver/configure.srv          |   8 ++
  gdb/gdbserver/linux-microblaze-low.c | 189 +++++++++++++++++++++++++++
  gdb/microblaze-linux-tdep.c          |  29 +++-
  gdb/microblaze-tdep.c                |  35 ++++-
  gdb/microblaze-tdep.h                |   4 +-
  gdb/regformats/reg-microblaze.dat    |  41 ++++++
- 9 files changed, 322 insertions(+), 3 deletions(-)
- create mode 100644 gdb/features/microblaze-linux.xml
+ 6 files changed, 298 insertions(+), 3 deletions(-)
  create mode 100644 gdb/gdbserver/linux-microblaze-low.c
  create mode 100644 gdb/regformats/reg-microblaze.dat
 
-diff --git a/gdb/configure.host b/gdb/configure.host
-index ce528237291..cf1a08e8b28 100644
---- a/gdb/configure.host
-+++ b/gdb/configure.host
+Index: gdb-9.2/gdb/configure.host
+===================================================================
+--- gdb-9.2.orig/gdb/configure.host
++++ gdb-9.2/gdb/configure.host
 @@ -65,6 +65,7 @@ hppa*)			gdb_host_cpu=pa ;;
  i[34567]86*)		gdb_host_cpu=i386 ;;
  m68*)			gdb_host_cpu=m68k ;;
@@ -55,77 +51,10 @@
  powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*)
  			gdb_host=aix ;;
  powerpc*-*-freebsd*)	gdb_host=fbsd ;;
-diff --git a/gdb/features/microblaze-linux.xml b/gdb/features/microblaze-linux.xml
-new file mode 100644
-index 00000000000..8983e66eb3d
+Index: gdb-9.2/gdb/gdbserver/linux-microblaze-low.c
+===================================================================
 --- /dev/null
-+++ b/gdb/features/microblaze-linux.xml
-@@ -0,0 +1,12 @@
-+<?xml version="1.0"?>
-+<!-- Copyright (C) 2014-2018 Free Software Foundation, Inc.
-+
-+     Copying and distribution of this file, with or without modification,
-+     are permitted in any medium without royalty provided the copyright
-+     notice and this notice are preserved.  -->
-+
-+<!DOCTYPE target SYSTEM "gdb-target.dtd">
-+<target>
-+  <osabi>GNU/Linux</osabi>
-+  <xi:include href="microblaze-core.xml"/>
-+</target>
-diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
-index 16a9f2fd380..fb4762a22d5 100644
---- a/gdb/gdbserver/Makefile.in
-+++ b/gdb/gdbserver/Makefile.in
-@@ -172,6 +172,7 @@ SFILES = \
- 	$(srcdir)/linux-low.c \
- 	$(srcdir)/linux-m32r-low.c \
- 	$(srcdir)/linux-m68k-low.c \
-+	$(srcdir)/linux-microblaze-low.c \
- 	$(srcdir)/linux-mips-low.c \
- 	$(srcdir)/linux-nios2-low.c \
- 	$(srcdir)/linux-ppc-low.c \
-@@ -231,6 +232,7 @@ SFILES = \
- 	$(srcdir)/nat/linux-namespaces.c \
- 	$(srcdir)/nat/linux-osdata.c \
- 	$(srcdir)/nat/linux-personality.c \
-+	$(srcdir)/nat/microblaze-linux.c \
- 	$(srcdir)/nat/mips-linux-watch.c \
- 	$(srcdir)/nat/ppc-linux.c \
- 	$(srcdir)/nat/fork-inferior.c \
-@@ -657,6 +659,8 @@ gdbsupport/%.o: ../gdbsupport/%.c
- 
- %-generated.c: ../regformats/rs6000/%.dat | $(regdat_sh)
- 	$(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@
-+microblaze-linux.c : $(srcdir)/../regformats/reg-microblaze.dat $(regdat_sh)
-+	$(ECHO_REGDAT) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-microblaze.dat microblaze-linux.c
- 
- #
- # Dependency tracking.
-diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
-index 1a4ab8e3361..e0d2b2fe04a 100644
---- a/gdb/gdbserver/configure.srv
-+++ b/gdb/gdbserver/configure.srv
-@@ -184,6 +184,14 @@ case "${target}" in
- 			srv_linux_usrregs=yes
- 			srv_linux_thread_db=yes
- 			;;
-+  microblaze*-*-linux*)	srv_regobj="microblaze-linux.o"
-+			srv_tgtobj="linux-low.o linux-osdata.o linux-microblaze-low.o "
-+			srv_tgtobj="${srv_tgtobj} linux-procfs.o linux-ptrace.o"
-+			srv_xmlfiles="microblaze-linux.xml"
-+			srv_linux_regsets=yes
-+			srv_linux_usrregs=yes
-+			srv_linux_thread_db=yes
-+			;;
-   powerpc*-*-linux*)	srv_regobj="powerpc-32l.o"
- 			srv_regobj="${srv_regobj} powerpc-altivec32l.o"
- 			srv_regobj="${srv_regobj} powerpc-vsx32l.o"
-diff --git a/gdb/gdbserver/linux-microblaze-low.c b/gdb/gdbserver/linux-microblaze-low.c
-new file mode 100644
-index 00000000000..cba5d6fc585
---- /dev/null
-+++ b/gdb/gdbserver/linux-microblaze-low.c
++++ gdb-9.2/gdb/gdbserver/linux-microblaze-low.c
 @@ -0,0 +1,189 @@
 +/* GNU/Linux/Microblaze specific low level interface, for the remote server for
 +   GDB.
@@ -316,10 +245,10 @@
 +  microblaze_collect_ptrace_register,
 +  microblaze_supply_ptrace_register,
 +};
-diff --git a/gdb/microblaze-linux-tdep.c b/gdb/microblaze-linux-tdep.c
-index 3bb9b5682ac..42c219d32f3 100644
---- a/gdb/microblaze-linux-tdep.c
-+++ b/gdb/microblaze-linux-tdep.c
+Index: gdb-9.2/gdb/microblaze-linux-tdep.c
+===================================================================
+--- gdb-9.2.orig/gdb/microblaze-linux-tdep.c
++++ gdb-9.2/gdb/microblaze-linux-tdep.c
 @@ -37,6 +37,22 @@
  #include "tramp-frame.h"
  #include "linux-tdep.h"
@@ -343,14 +272,17 @@
  static int
  microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, 
  					   struct bp_target_info *bp_tgt)
-@@ -50,13 +66,20 @@ microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch,
+@@ -46,18 +62,25 @@ microblaze_linux_memory_remove_breakpoin
+   int val;
+   int bplen;
+   gdb_byte old_contents[BREAKPOINT_MAX];
++  struct cleanup *cleanup;
+ 
    /* Determine appropriate breakpoint contents and size for this address.  */
    bp = gdbarch_breakpoint_from_pc (gdbarch, &addr, &bplen);
  
 +  /* Make sure we see the memory breakpoints.  */
-+  scoped_restore restore_memory
-+    = make_scoped_restore_show_memory_breakpoints (1);
-+
++  cleanup = make_show_memory_breakpoints_cleanup (1);
    val = target_read_memory (addr, old_contents, bplen);
  
    /* If our breakpoint is no longer at the address, this means that the
@@ -363,9 +295,11 @@
 +      microblaze_debug ("microblaze_linux_memory_remove_breakpoint writing back to memory at addr 0x%lx\n", addr);
 +  }
  
++  do_cleanups (cleanup);
    return val;
  }
-@@ -129,6 +152,10 @@ microblaze_linux_init_abi (struct gdbarch_info info,
+ 
+@@ -129,6 +152,10 @@ microblaze_linux_init_abi (struct gdbarc
    /* Trampolines.  */
    tramp_frame_prepend_unwinder (gdbarch,
  				&microblaze_linux_sighandler_tramp_frame);
@@ -376,15 +310,14 @@
  }
  
  void
-diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
-index 17871229c80..0168e4881ed 100644
---- a/gdb/microblaze-tdep.c
-+++ b/gdb/microblaze-tdep.c
-@@ -137,7 +137,38 @@ microblaze_fetch_instruction (CORE_ADDR pc)
+Index: gdb-9.2/gdb/microblaze-tdep.c
+===================================================================
+--- gdb-9.2.orig/gdb/microblaze-tdep.c
++++ gdb-9.2/gdb/microblaze-tdep.c
+@@ -137,7 +137,38 @@ microblaze_fetch_instruction (CORE_ADDR
  constexpr gdb_byte microblaze_break_insn[] = MICROBLAZE_BREAKPOINT;
  
  typedef BP_MANIPULATION (microblaze_break_insn) microblaze_breakpoint;
--
 +static int
 +microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch,
 +				    struct bp_target_info *bp_tgt)
@@ -394,6 +327,7 @@
 +  int val;
 +  int bplen;
 +  gdb_byte old_contents[BREAKPOINT_MAX];
++  struct cleanup *cleanup;
 +
 +  /* Determine appropriate breakpoint contents and size for this address.  */
 +  bp = gdbarch_breakpoint_from_pc (gdbarch, &addr, &bplen);
@@ -401,9 +335,7 @@
 +    error (_("Software breakpoints not implemented for this target."));
 +
 +  /* Make sure we see the memory breakpoints.  */
-+  scoped_restore restore_memory
-+    = make_scoped_restore_show_memory_breakpoints (1);
-+
++  cleanup = make_show_memory_breakpoints_cleanup (1);
 +  val = target_read_memory (addr, old_contents, bplen);
 +
 +  /* If our breakpoint is no longer at the address, this means that the
@@ -414,13 +346,14 @@
 +    val = target_write_raw_memory (addr, bp_tgt->shadow_contents, bplen);
 +    microblaze_debug ("microblaze_linux_memory_remove_breakpoint writing back to memory at addr 0x%lx\n", addr);
 +  }
-+
+ 
++  do_cleanups (cleanup);
 +  return val;
 +}
  
  /* Allocate and initialize a frame cache.  */
  
-@@ -731,6 +762,7 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+@@ -731,6 +762,7 @@ microblaze_gdbarch_init (struct gdbarch_
  				       microblaze_breakpoint::kind_from_pc);
    set_gdbarch_sw_breakpoint_from_kind (gdbarch,
  				       microblaze_breakpoint::bp_from_kind);
@@ -428,16 +361,16 @@
  
    set_gdbarch_frame_args_skip (gdbarch, 8);
  
-@@ -770,4 +802,5 @@ When non-zero, microblaze specific debugging is enabled."),
+@@ -770,4 +802,5 @@ When non-zero, microblaze specific debug
  			     NULL,
  			     &setdebuglist, &showdebuglist);
  
 +
  }
-diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h
-index 4fbdf9933f0..db0772643dc 100644
---- a/gdb/microblaze-tdep.h
-+++ b/gdb/microblaze-tdep.h
+Index: gdb-9.2/gdb/microblaze-tdep.h
+===================================================================
+--- gdb-9.2.orig/gdb/microblaze-tdep.h
++++ gdb-9.2/gdb/microblaze-tdep.h
 @@ -117,6 +117,8 @@ struct microblaze_frame_cache
  
  /* MICROBLAZE_BREAKPOINT defines the breakpoint that should be used.
@@ -448,11 +381,10 @@
 +
  
  #endif /* microblaze-tdep.h */
-diff --git a/gdb/regformats/reg-microblaze.dat b/gdb/regformats/reg-microblaze.dat
-new file mode 100644
-index 00000000000..bd8a4384424
+Index: gdb-9.2/gdb/regformats/reg-microblaze.dat
+===================================================================
 --- /dev/null
-+++ b/gdb/regformats/reg-microblaze.dat
++++ gdb-9.2/gdb/regformats/reg-microblaze.dat
 @@ -0,0 +1,41 @@
 +name:microblaze
 +expedite:r1,pc
@@ -495,6 +427,3 @@
 +32:fsr
 +32:slr
 +32:shr
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0033-Fix-various-compile-warnings.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0033-Fix-various-compile-warnings.patch
deleted file mode 100644
index 4172595..0000000
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0033-Fix-various-compile-warnings.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From c59684852ecd37d6f82363f2cf0e1de1f770aab7 Mon Sep 17 00:00:00 2001
-From: Mark Hatle <mark.hatle@kernel.crashing.org>
-Date: Fri, 17 Jul 2020 09:20:54 -0500
-Subject: [PATCH 33/40] Fix various compile warnings
-
-Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org>
----
- bfd/elf64-microblaze.c     |  9 +++++----
- 2 files changed, 10 insertions(+), 10 deletions(-)
-
-diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c
-index b002b414d64..8308f1ebd09 100644
---- a/bfd/elf64-microblaze.c
-+++ b/bfd/elf64-microblaze.c
-@@ -692,7 +692,7 @@ microblaze_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
- /* Set the howto pointer for a RCE ELF reloc.  */
- 
- static bfd_boolean
--microblaze_elf_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED,
-+microblaze_elf_info_to_howto (bfd * abfd,
- 			      arelent * cache_ptr,
- 			      Elf_Internal_Rela * dst)
- {
-@@ -705,14 +705,14 @@ microblaze_elf_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED,
-   r_type = ELF64_R_TYPE (dst->r_info);
-   if (r_type >= R_MICROBLAZE_max)
-     {
--      (*_bfd_error_handler) (_("%pB: unrecognised MicroBlaze reloc number: %d"),
-+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
- 			     abfd, r_type);
-       bfd_set_error (bfd_error_bad_value);
-       return FALSE;
-     }
- 
-   cache_ptr->howto = microblaze_elf_howto_table [r_type];
-- return TRUE;
-+  return TRUE;
- }
- 
- /* Microblaze ELF local labels start with 'L.' or '$L', not '.L'.  */
-@@ -1560,7 +1560,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
- 			else
- 			  {
- 			    BFD_FAIL ();
--			    (*_bfd_error_handler)
-+			    _bfd_error_handler
- 			      (_("%pB: probably compiled without -fPIC?"),
- 			       input_bfd);
- 			    bfd_set_error (bfd_error_bad_value);
-@@ -2554,6 +2554,7 @@ microblaze_elf_check_relocs (bfd * abfd,
-           goto dogottls;
-         case R_MICROBLAZE_TLSLD:
-           tls_type |= (TLS_TLS | TLS_LD);
-+          /* Fall through. */
-         dogottls:
-           sec->has_tls_reloc = 1;
-           /* Fall through. */
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0034-Initial-port-of-core-reading-support-Added-support-f.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0034-Initial-port-of-core-reading-support-Added-support-f.patch
new file mode 100644
index 0000000..d32b501
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0034-Initial-port-of-core-reading-support-Added-support-f.patch
@@ -0,0 +1,385 @@
+From e6929fae6b3850eb925ef147bf0d0b09ca80cdf8 Mon Sep 17 00:00:00 2001
+From: Mahesh Bodapati <mbodapat@xilinx.com>
+Date: Tue, 24 Jan 2017 14:55:56 +0530
+Subject: [PATCH 34/52] Initial port of core reading support Added support for
+ reading notes in linux core dumps Support for reading of PRSTATUS and PSINFO
+ information for rebuilding ".reg" sections of core dumps at run time.
+
+Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com>
+Signed-off-by: Nathan Rossi <nathan.rossi@petalogix.com>
+---
+ bfd/elf32-microblaze.c      | 84 ++++++++++++++++++++++++++++++++++
+ gdb/configure.tgt           |  2 +-
+ gdb/microblaze-linux-tdep.c | 57 +++++++++++++++++++++++
+ gdb/microblaze-tdep.c       | 90 +++++++++++++++++++++++++++++++++++++
+ gdb/microblaze-tdep.h       | 27 +++++++++++
+ 5 files changed, 259 insertions(+), 1 deletion(-)
+
+Index: gdb-9.2/bfd/elf32-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf32-microblaze.c
++++ gdb-9.2/bfd/elf32-microblaze.c
+@@ -767,6 +767,87 @@ microblaze_elf_is_local_label_name (bfd
+   return _bfd_elf_is_local_label_name (abfd, name);
+ }
+ 
++/* Support for core dump NOTE sections.  */
++static bfd_boolean
++microblaze_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
++{
++  int offset;
++  unsigned int size;
++
++  switch (note->descsz)
++    {
++      default:
++        return FALSE;
++
++      case 228:         /* Linux/MicroBlaze */
++        /* pr_cursig */
++        elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
++
++        /* pr_pid */
++        elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 24);
++
++        /* pr_reg */
++        offset = 72;
++        size = 50 * 4;
++
++        break;
++    }
++
++  /* Make a ".reg/999" section.  */
++  return _bfd_elfcore_make_pseudosection (abfd, ".reg",
++                                          size, note->descpos + offset);
++}
++
++static bfd_boolean
++microblaze_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
++{
++  switch (note->descsz)
++    {
++      default:
++        return FALSE;
++
++      case 128:         /* Linux/MicroBlaze elf_prpsinfo */
++        elf_tdata (abfd)->core->program
++         = _bfd_elfcore_strndup (abfd, note->descdata + 32, 16);
++        elf_tdata (abfd)->core->command
++         = _bfd_elfcore_strndup (abfd, note->descdata + 48, 80);
++    }
++
++  /* Note that for some reason, a spurious space is tacked
++     onto the end of the args in some (at least one anyway)
++     implementations, so strip it off if it exists.  */
++
++  {
++    char *command = elf_tdata (abfd)->core->command;
++    int n = strlen (command);
++
++    if (0 < n && command[n - 1] == ' ')
++      command[n - 1] = '\0';
++  }
++
++  return TRUE;
++}
++
++/* The microblaze linker (like many others) needs to keep track of
++   the number of relocs that it decides to copy as dynamic relocs in
++   check_relocs for each symbol. This is so that it can later discard
++   them if they are found to be unnecessary.  We store the information
++   in a field extending the regular ELF linker hash table.  */
++
++struct elf32_mb_dyn_relocs
++{
++  struct elf32_mb_dyn_relocs *next;
++
++  /* The input section of the reloc.  */
++  asection *sec;
++
++  /* Total number of relocs copied for the input section.  */
++  bfd_size_type count;
++
++  /* Number of pc-relative relocs copied for the input section.  */
++  bfd_size_type pc_count;
++};
++
+ /* ELF linker hash entry.  */
+ 
+ struct elf32_mb_link_hash_entry
+@@ -3675,4 +3756,7 @@ microblaze_elf_add_symbol_hook (bfd *abf
+ #define elf_backend_size_dynamic_sections	microblaze_elf_size_dynamic_sections
+ #define elf_backend_add_symbol_hook		microblaze_elf_add_symbol_hook
+ 
++#define elf_backend_grok_prstatus               microblaze_elf_grok_prstatus
++#define elf_backend_grok_psinfo                 microblaze_elf_grok_psinfo
++
+ #include "elf32-target.h"
+Index: gdb-9.2/gdb/configure.tgt
+===================================================================
+--- gdb-9.2.orig/gdb/configure.tgt
++++ gdb-9.2/gdb/configure.tgt
+@@ -400,7 +400,7 @@ mep-*-*)
+ 
+ microblaze*-linux-*|microblaze*-*-linux*)
+ 	# Target: Xilinx MicroBlaze running Linux
+-	gdb_target_obs="microblaze-tdep.o microblaze-linux-tdep.o solib-svr4.o \
++	gdb_target_obs="microblaze-tdep.o microblaze-linux-tdep.o solib-svr4.o glibc-tdep.o \
+ 			symfile-mem.o linux-tdep.o"
+ 	gdb_sim=../sim/microblaze/libsim.a
+ 	;;
+Index: gdb-9.2/gdb/microblaze-linux-tdep.c
+===================================================================
+--- gdb-9.2.orig/gdb/microblaze-linux-tdep.c
++++ gdb-9.2/gdb/microblaze-linux-tdep.c
+@@ -135,11 +135,54 @@ static struct tramp_frame microblaze_lin
+   microblaze_linux_sighandler_cache_init
+ };
+ 
++const struct microblaze_gregset microblaze_linux_core_gregset;
++
++static void
++microblaze_linux_supply_core_gregset (const struct regset *regset,
++                                   struct regcache *regcache,
++                                   int regnum, const void *gregs, size_t len)
++{
++  microblaze_supply_gregset (&microblaze_linux_core_gregset, regcache,
++                             regnum, gregs);
++}
++
++static void
++microblaze_linux_collect_core_gregset (const struct regset *regset,
++                                    const struct regcache *regcache,
++                                    int regnum, void *gregs, size_t len)
++{
++  microblaze_collect_gregset (&microblaze_linux_core_gregset, regcache,
++                              regnum, gregs);
++}
++
++static void
++microblaze_linux_supply_core_fpregset (const struct regset *regset,
++                                    struct regcache *regcache,
++                                    int regnum, const void *fpregs, size_t len)
++{
++  /* FIXME.  */
++  microblaze_supply_fpregset (regcache, regnum, fpregs);
++}
++
++static void
++microblaze_linux_collect_core_fpregset (const struct regset *regset,
++                                     const struct regcache *regcache,
++                                     int regnum, void *fpregs, size_t len)
++{
++  /* FIXME.  */
++  microblaze_collect_fpregset (regcache, regnum, fpregs);
++}
+ 
+ static void
+ microblaze_linux_init_abi (struct gdbarch_info info,
+ 			   struct gdbarch *gdbarch)
+ {
++  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
++
++  tdep->gregset = regset_alloc (gdbarch, microblaze_linux_supply_core_gregset,
++                                microblaze_linux_collect_core_gregset);
++  tdep->sizeof_gregset = 200;
++
+   linux_init_abi (info, gdbarch);
+ 
+   set_gdbarch_memory_remove_breakpoint (gdbarch,
+@@ -153,6 +196,20 @@ microblaze_linux_init_abi (struct gdbarc
+   tramp_frame_prepend_unwinder (gdbarch,
+ 				&microblaze_linux_sighandler_tramp_frame);
+ 
++  /* BFD target for core files.  */
++  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
++    set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblaze");
++  else
++    set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblazeel");
++
++
++  /* Shared library handling.  */
++  set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
++  set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
++
++  set_gdbarch_regset_from_core_section (gdbarch,
++					microblaze_regset_from_core_section);
++
+   /* Enable TLS support.  */
+   set_gdbarch_fetch_tls_load_module_address (gdbarch,
+                                              svr4_fetch_objfile_link_map);
+Index: gdb-9.2/gdb/microblaze-tdep.c
+===================================================================
+--- gdb-9.2.orig/gdb/microblaze-tdep.c
++++ gdb-9.2/gdb/microblaze-tdep.c
+@@ -137,6 +137,14 @@ microblaze_fetch_instruction (CORE_ADDR
+ constexpr gdb_byte microblaze_break_insn[] = MICROBLAZE_BREAKPOINT;
+ 
+ typedef BP_MANIPULATION (microblaze_break_insn) microblaze_breakpoint;
++static CORE_ADDR
++microblaze_store_arguments (struct regcache *regcache, int nargs,
++			    struct value **args, CORE_ADDR sp,
++			    int struct_return, CORE_ADDR struct_addr)
++{
++  error (_("store_arguments not implemented"));
++  return sp;
++}
+ static int
+ microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch,
+ 				    struct bp_target_info *bp_tgt)
+@@ -541,6 +549,12 @@ microblaze_frame_base_address (struct fr
+   return cache->base;
+ }
+ 
++static const struct frame_unwind *
++microblaze_frame_sniffer (struct frame_info *next_frame)
++{
++  return &microblaze_frame_unwind;
++}
++
+ static const struct frame_base microblaze_frame_base =
+ {
+   &microblaze_frame_unwind,
+@@ -677,6 +691,71 @@ microblaze_register_g_packet_guesses (st
+                                   tdesc_microblaze_with_stack_protect);
+ }
+ 
++void
++microblaze_supply_gregset (const struct microblaze_gregset *gregset,
++                        struct regcache *regcache,
++                        int regnum, const void *gregs)
++{
++  unsigned int *regs = gregs;
++  if (regnum >= 0)
++    regcache_raw_supply (regcache, regnum, regs + regnum);
++
++  if (regnum == -1) {
++    int i;
++
++    for (i = 0; i < 50; i++) {
++      regcache_raw_supply (regcache, i, regs + i);
++    }
++  }
++}
++
++
++void
++microblaze_collect_gregset (const struct microblaze_gregset *gregset,
++                         const struct regcache *regcache,
++                         int regnum, void *gregs)
++{
++   /* FIXME.  */
++}
++
++void
++microblaze_supply_fpregset (struct regcache *regcache,
++                         int regnum, const void *fpregs)
++{
++   /* FIXME.  */
++}
++
++void
++microblaze_collect_fpregset (const struct regcache *regcache,
++                          int regnum, void *fpregs)
++{
++   /* FIXME.  */
++}
++
++
++/* Return the appropriate register set for the core section identified
++   by SECT_NAME and SECT_SIZE.  */
++
++const struct regset *
++microblaze_regset_from_core_section (struct gdbarch *gdbarch,
++                                     const char *sect_name, size_t sect_size)
++{
++  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
++
++  microblaze_debug ("microblaze_regset_from_core_section, sect_name = %s\n", sect_name);
++
++  if (strcmp (sect_name, ".reg") == 0 && sect_size >= tdep->sizeof_gregset)
++    return tdep->gregset;
++
++  if (strcmp (sect_name, ".reg2") == 0 && sect_size >= tdep->sizeof_fpregset)
++    return tdep->fpregset;
++
++  microblaze_debug ("microblaze_regset_from_core_section returning null :-( \n");
++  return NULL;
++}
++
++
++
+ static struct gdbarch *
+ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+ {
+@@ -733,6 +812,10 @@ microblaze_gdbarch_init (struct gdbarch_
+   tdep = XCNEW (struct gdbarch_tdep);
+   gdbarch = gdbarch_alloc (&info, tdep);
+ 
++  tdep->gregset = NULL;
++  tdep->sizeof_gregset = 0;
++  tdep->fpregset = NULL;
++  tdep->sizeof_fpregset = 0;
+   set_gdbarch_long_double_bit (gdbarch, 128);
+ 
+   set_gdbarch_num_regs (gdbarch, MICROBLAZE_NUM_REGS);
+@@ -781,6 +864,13 @@ microblaze_gdbarch_init (struct gdbarch_
+   frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
+   if (tdesc_data != NULL)
+     tdesc_use_registers (gdbarch, tdesc, tdesc_data);
++  //frame_base_append_sniffer (gdbarch, microblaze_frame_sniffer);
++
++  /* If we have register sets, enable the generic core file support.  */
++  if (tdep->gregset) {
++      set_gdbarch_regset_from_core_section (gdbarch,
++                                          microblaze_regset_from_core_section);
++  }
+ 
+   return gdbarch;
+ }
+Index: gdb-9.2/gdb/microblaze-tdep.h
+===================================================================
+--- gdb-9.2.orig/gdb/microblaze-tdep.h
++++ gdb-9.2/gdb/microblaze-tdep.h
+@@ -22,8 +22,22 @@
+ 
+ 
+ /* Microblaze architecture-specific information.  */
++struct microblaze_gregset
++{
++   unsigned int gregs[32];
++   unsigned int fpregs[32];
++   unsigned int pregs[16];
++};
++
+ struct gdbarch_tdep
+ {
++  int dummy;		// declare something.
++
++  /* Register sets.  */
++  struct regset *gregset;
++  size_t sizeof_gregset;
++  struct regset *fpregset;
++  size_t sizeof_fpregset;
+ };
+ 
+ /* Register numbers.  */
+@@ -120,5 +134,18 @@ struct microblaze_frame_cache
+ #define MICROBLAZE_BREAKPOINT {0xba, 0x0c, 0x00, 0x18}
+ #define MICROBLAZE_BREAKPOINT_LE {0x18, 0x00, 0x0c, 0xba}
+ 
++extern void microblaze_supply_gregset (const struct microblaze_gregset *gregset,
++                                    struct regcache *regcache,
++                                    int regnum, const void *gregs);
++extern void microblaze_collect_gregset (const struct microblaze_gregset *gregset,
++                                     const struct regcache *regcache,
++                                     int regnum, void *gregs);
++extern void microblaze_supply_fpregset (struct regcache *regcache,
++                                     int regnum, const void *fpregs);
++extern void microblaze_collect_fpregset (const struct regcache *regcache,
++                                      int regnum, void *fpregs);
++
++extern const struct regset * microblaze_regset_from_core_section (struct gdbarch *gdbarch,
++                                     const char *sect_name, size_t sect_size);
+ 
+ #endif /* microblaze-tdep.h */
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0036-Fix-debug-message-when-register-is-unavailable.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0035-Fix-debug-message-when-register-is-unavailable.patch
similarity index 74%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0036-Fix-debug-message-when-register-is-unavailable.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0035-Fix-debug-message-when-register-is-unavailable.patch
index f0c182d..9983f17 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0036-Fix-debug-message-when-register-is-unavailable.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0035-Fix-debug-message-when-register-is-unavailable.patch
@@ -1,18 +1,18 @@
-From 41fd9d3645d610ff65171e9a44427711232cb4b8 Mon Sep 17 00:00:00 2001
+From c6da374fbce33b35b060a07ee446aaf1803b1e1d Mon Sep 17 00:00:00 2001
 From: Nathan Rossi <nathan.rossi@petalogix.com>
 Date: Tue, 8 May 2012 18:11:17 +1000
-Subject: [PATCH 36/40] Fix debug message when register is unavailable
+Subject: [PATCH 35/52] Fix debug message when register is unavailable
 
 Signed-off-by: Nathan Rossi <nathan.rossi@petalogix.com>
 ---
  gdb/frame.c | 13 ++++++++++---
  1 file changed, 10 insertions(+), 3 deletions(-)
 
-diff --git a/gdb/frame.c b/gdb/frame.c
-index c746a6a231e..571722c7351 100644
---- a/gdb/frame.c
-+++ b/gdb/frame.c
-@@ -1255,12 +1255,19 @@ frame_unwind_register_value (frame_info *next_frame, int regnum)
+Index: gdb-9.2/gdb/frame.c
+===================================================================
+--- gdb-9.2.orig/gdb/frame.c
++++ gdb-9.2/gdb/frame.c
+@@ -1255,12 +1255,19 @@ frame_unwind_register_value (frame_info
  	  else
  	    {
  	      int i;
@@ -35,6 +35,3 @@
  	      fprintf_unfiltered (gdb_stdlog, "]");
  	    }
  	}
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0035-Initial-port-of-core-reading-support.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0035-Initial-port-of-core-reading-support.patch
deleted file mode 100644
index 171a0bf..0000000
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0035-Initial-port-of-core-reading-support.patch
+++ /dev/null
@@ -1,298 +0,0 @@
-From f8cbcd1ef78f6ce9ae8d3382bf2bb0d1e770d201 Mon Sep 17 00:00:00 2001
-From: Mahesh Bodapati <mbodapat@xilinx.com>
-Date: Tue, 24 Jan 2017 14:55:56 +0530
-Subject: [PATCH 35/40] Initial port of core reading support Added support for
- reading notes in linux core dumps Support for reading of PRSTATUS and PSINFO
- information for rebuilding ".reg" sections of core dumps at run time.
-
-Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com>
-Signed-off-by: Nathan Rossi <nathan.rossi@petalogix.com>
----
- bfd/elf32-microblaze.c      | 84 +++++++++++++++++++++++++++++++++++++
- gdb/configure.tgt           |  2 +-
- gdb/microblaze-linux-tdep.c | 17 +++++++-
- gdb/microblaze-tdep.c       | 48 +++++++++++++++++++++
- gdb/microblaze-tdep.h       | 27 ++++++++++++
- 5 files changed, 176 insertions(+), 2 deletions(-)
-
-diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c
-index 04816a4a187..cb7a98d307e 100644
---- a/bfd/elf32-microblaze.c
-+++ b/bfd/elf32-microblaze.c
-@@ -767,6 +767,87 @@ microblaze_elf_is_local_label_name (bfd *abfd, const char *name)
-   return _bfd_elf_is_local_label_name (abfd, name);
- }
- 
-+/* Support for core dump NOTE sections.  */
-+static bfd_boolean
-+microblaze_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
-+{
-+  int offset;
-+  unsigned int size;
-+
-+  switch (note->descsz)
-+    {
-+      default:
-+        return FALSE;
-+
-+      case 228:         /* Linux/MicroBlaze */
-+        /* pr_cursig */
-+        elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
-+
-+        /* pr_pid */
-+        elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 24);
-+
-+        /* pr_reg */
-+        offset = 72;
-+        size = 50 * 4;
-+
-+        break;
-+    }
-+
-+  /* Make a ".reg/999" section.  */
-+  return _bfd_elfcore_make_pseudosection (abfd, ".reg",
-+                                          size, note->descpos + offset);
-+}
-+
-+static bfd_boolean
-+microblaze_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
-+{
-+  switch (note->descsz)
-+    {
-+      default:
-+        return FALSE;
-+
-+      case 128:         /* Linux/MicroBlaze elf_prpsinfo */
-+        elf_tdata (abfd)->core->program
-+         = _bfd_elfcore_strndup (abfd, note->descdata + 32, 16);
-+        elf_tdata (abfd)->core->command
-+         = _bfd_elfcore_strndup (abfd, note->descdata + 48, 80);
-+    }
-+
-+  /* Note that for some reason, a spurious space is tacked
-+     onto the end of the args in some (at least one anyway)
-+     implementations, so strip it off if it exists.  */
-+
-+  {
-+    char *command = elf_tdata (abfd)->core->command;
-+    int n = strlen (command);
-+
-+    if (0 < n && command[n - 1] == ' ')
-+      command[n - 1] = '\0';
-+  }
-+
-+  return TRUE;
-+}
-+
-+/* The microblaze linker (like many others) needs to keep track of
-+   the number of relocs that it decides to copy as dynamic relocs in
-+   check_relocs for each symbol. This is so that it can later discard
-+   them if they are found to be unnecessary.  We store the information
-+   in a field extending the regular ELF linker hash table.  */
-+
-+struct elf32_mb_dyn_relocs
-+{
-+  struct elf32_mb_dyn_relocs *next;
-+
-+  /* The input section of the reloc.  */
-+  asection *sec;
-+
-+  /* Total number of relocs copied for the input section.  */
-+  bfd_size_type count;
-+
-+  /* Number of pc-relative relocs copied for the input section.  */
-+  bfd_size_type pc_count;
-+};
-+
- /* ELF linker hash entry.  */
- 
- struct elf32_mb_link_hash_entry
-@@ -3673,4 +3754,7 @@ microblaze_elf_add_symbol_hook (bfd *abfd,
- #define elf_backend_size_dynamic_sections	microblaze_elf_size_dynamic_sections
- #define elf_backend_add_symbol_hook		microblaze_elf_add_symbol_hook
- 
-+#define elf_backend_grok_prstatus               microblaze_elf_grok_prstatus
-+#define elf_backend_grok_psinfo                 microblaze_elf_grok_psinfo
-+
- #include "elf32-target.h"
-diff --git a/gdb/configure.tgt b/gdb/configure.tgt
-index caa42be1c01..f0386568460 100644
---- a/gdb/configure.tgt
-+++ b/gdb/configure.tgt
-@@ -400,7 +400,7 @@ mep-*-*)
- 
- microblaze*-linux-*|microblaze*-*-linux*)
- 	# Target: Xilinx MicroBlaze running Linux
--	gdb_target_obs="microblaze-tdep.o microblaze-linux-tdep.o solib-svr4.o \
-+	gdb_target_obs="microblaze-tdep.o microblaze-linux-tdep.o solib-svr4.o glibc-tdep.o \
- 			symfile-mem.o linux-tdep.o"
- 	gdb_sim=../sim/microblaze/libsim.a
- 	;;
-diff --git a/gdb/microblaze-linux-tdep.c b/gdb/microblaze-linux-tdep.c
-index 42c219d32f3..0afb6efeba3 100644
---- a/gdb/microblaze-linux-tdep.c
-+++ b/gdb/microblaze-linux-tdep.c
-@@ -36,6 +36,7 @@
- #include "frame-unwind.h"
- #include "tramp-frame.h"
- #include "linux-tdep.h"
-+#include "glibc-tdep.h"
- 
- static int microblaze_debug_flag = 0;
- 
-@@ -135,11 +136,14 @@ static struct tramp_frame microblaze_linux_sighandler_tramp_frame =
-   microblaze_linux_sighandler_cache_init
- };
- 
--
- static void
- microblaze_linux_init_abi (struct gdbarch_info info,
- 			   struct gdbarch *gdbarch)
- {
-+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-+
-+  tdep->sizeof_gregset = 200;
-+
-   linux_init_abi (info, gdbarch);
- 
-   set_gdbarch_memory_remove_breakpoint (gdbarch,
-@@ -153,6 +157,17 @@ microblaze_linux_init_abi (struct gdbarch_info info,
-   tramp_frame_prepend_unwinder (gdbarch,
- 				&microblaze_linux_sighandler_tramp_frame);
- 
-+  /* BFD target for core files.  */
-+  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
-+    set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblaze");
-+  else
-+    set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblazeel");
-+
-+
-+  /* Shared library handling.  */
-+  set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
-+  set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
-+
-   /* Enable TLS support.  */
-   set_gdbarch_fetch_tls_load_module_address (gdbarch,
-                                              svr4_fetch_objfile_link_map);
-diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
-index 0168e4881ed..98944f38d2a 100644
---- a/gdb/microblaze-tdep.c
-+++ b/gdb/microblaze-tdep.c
-@@ -677,6 +677,43 @@ microblaze_register_g_packet_guesses (struct gdbarch *gdbarch)
-                                   tdesc_microblaze_with_stack_protect);
- }
- 
-+void
-+microblaze_supply_gregset (const struct regset *regset,
-+                        struct regcache *regcache,
-+                        int regnum, const void *gregs)
-+{
-+  const unsigned int *regs = (const unsigned int *)gregs;
-+  if (regnum >= 0)
-+    regcache->raw_supply (regnum, regs + regnum);
-+
-+  if (regnum == -1) {
-+    int i;
-+
-+    for (i = 0; i < 50; i++) {
-+      regcache->raw_supply (i, regs + i);
-+    }
-+  }
-+}
-+
-+
-+/* Return the appropriate register set for the core section identified
-+   by SECT_NAME and SECT_SIZE.  */
-+
-+static void
-+microblaze_iterate_over_regset_sections (struct gdbarch *gdbarch,
-+                                     iterate_over_regset_sections_cb *cb,
-+                                     void *cb_data,
-+                                     const struct regcache *regcache)
-+{
-+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-+
-+  cb(".reg", tdep->sizeof_gregset, tdep->sizeof_gregset, tdep->gregset, NULL, cb_data);
-+
-+  cb(".reg2", tdep->sizeof_fpregset, tdep->sizeof_fpregset, tdep->fpregset, NULL, cb_data);
-+}
-+
-+
-+
- static struct gdbarch *
- microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
- {
-@@ -733,6 +770,10 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
-   tdep = XCNEW (struct gdbarch_tdep);
-   gdbarch = gdbarch_alloc (&info, tdep);
- 
-+  tdep->gregset = NULL;
-+  tdep->sizeof_gregset = 0;
-+  tdep->fpregset = NULL;
-+  tdep->sizeof_fpregset = 0;
-   set_gdbarch_long_double_bit (gdbarch, 128);
- 
-   set_gdbarch_num_regs (gdbarch, MICROBLAZE_NUM_REGS);
-@@ -781,6 +822,13 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
-   frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
-   if (tdesc_data != NULL)
-     tdesc_use_registers (gdbarch, tdesc, tdesc_data);
-+  //frame_base_append_sniffer (gdbarch, microblaze_frame_sniffer);
-+
-+  /* If we have register sets, enable the generic core file support.  */
-+  if (tdep->gregset) {
-+    set_gdbarch_iterate_over_regset_sections (gdbarch,
-+                                          microblaze_iterate_over_regset_sections);
-+  }
- 
-   return gdbarch;
- }
-diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h
-index db0772643dc..8f41ba19351 100644
---- a/gdb/microblaze-tdep.h
-+++ b/gdb/microblaze-tdep.h
-@@ -22,8 +22,22 @@
- 
- 
- /* Microblaze architecture-specific information.  */
-+struct microblaze_gregset
-+{
-+   unsigned int gregs[32];
-+   unsigned int fpregs[32];
-+   unsigned int pregs[16];
-+};
-+
- struct gdbarch_tdep
- {
-+  int dummy;		// declare something.
-+
-+  /* Register sets.  */
-+  struct regset *gregset;
-+  size_t sizeof_gregset;
-+  struct regset *fpregset;
-+  size_t sizeof_fpregset;
- };
- 
- /* Register numbers.  */
-@@ -120,5 +134,18 @@ struct microblaze_frame_cache
- #define MICROBLAZE_BREAKPOINT {0xba, 0x0c, 0x00, 0x18}
- #define MICROBLAZE_BREAKPOINT_LE {0x18, 0x00, 0x0c, 0xba}
- 
-+extern void microblaze_supply_gregset (const struct regset *regset,
-+                                    struct regcache *regcache,
-+                                    int regnum, const void *gregs);
-+extern void microblaze_collect_gregset (const struct regset *regset,
-+                                     const struct regcache *regcache,
-+                                     int regnum, void *gregs);
-+extern void microblaze_supply_fpregset (struct regcache *regcache,
-+                                     int regnum, const void *fpregs);
-+extern void microblaze_collect_fpregset (const struct regcache *regcache,
-+                                      int regnum, void *fpregs);
-+
-+extern const struct regset * microblaze_regset_from_core_section (struct gdbarch *gdbarch,
-+                                     const char *sect_name, size_t sect_size);
- 
- #endif /* microblaze-tdep.h */
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0036-revert-master-rebase-changes-to-gdbserver.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0036-revert-master-rebase-changes-to-gdbserver.patch
new file mode 100644
index 0000000..cca0c7a
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0036-revert-master-rebase-changes-to-gdbserver.patch
@@ -0,0 +1,28 @@
+From 097961b044891887fec49824edfc15754e5faf10 Mon Sep 17 00:00:00 2001
+From: David Holsgrove <david.holsgrove@xilinx.com>
+Date: Mon, 22 Jul 2013 11:16:05 +1000
+Subject: [PATCH 36/52] revert master-rebase changes to gdbserver
+
+Signed-off-by: David Holsgrove <david.holsgrove@xilinx.com>
+---
+ gdb/gdbserver/configure.srv | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+Index: gdb-9.2/gdb/gdbserver/configure.srv
+===================================================================
+--- gdb-9.2.orig/gdb/gdbserver/configure.srv
++++ gdb-9.2/gdb/gdbserver/configure.srv
+@@ -184,6 +184,13 @@ case "${target}" in
+ 			srv_linux_usrregs=yes
+ 			srv_linux_thread_db=yes
+ 			;;
++  microblaze*-*-linux*)	srv_regobj=microblaze-linux.o
++			srv_tgtobj="linux-low.o linux-osdata.o linux-microblaze-low.o "
++			srv_tgtobj="${srv_tgtobj} linux-procfs.o linux-ptrace.o"
++			srv_linux_regsets=yes
++			srv_linux_usrregs=yes
++			srv_linux_thread_db=yes
++			;;
+   powerpc*-*-linux*)	srv_regobj="powerpc-32l.o"
+ 			srv_regobj="${srv_regobj} powerpc-altivec32l.o"
+ 			srv_regobj="${srv_regobj} powerpc-vsx32l.o"
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0037-revert-master-rebase-changes-to-gdbserver-previous-c.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0037-revert-master-rebase-changes-to-gdbserver-previous-c.patch
new file mode 100644
index 0000000..f6c3a06
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0037-revert-master-rebase-changes-to-gdbserver-previous-c.patch
@@ -0,0 +1,30 @@
+From a8b948a7967cbea9b5b2c00ed85d2beb37db53e9 Mon Sep 17 00:00:00 2001
+From: Mahesh Bodapati <mbodapat@xilinx.com>
+Date: Mon, 30 Apr 2018 17:09:55 +0530
+Subject: [PATCH 37/52] revert master-rebase changes to gdbserver , previous
+ commit typo's
+
+---
+ gdb/gdbserver/Makefile.in | 2 ++
+ 1 file changed, 2 insertions(+)
+
+Index: gdb-9.2/gdb/gdbserver/Makefile.in
+===================================================================
+--- gdb-9.2.orig/gdb/gdbserver/Makefile.in
++++ gdb-9.2/gdb/gdbserver/Makefile.in
+@@ -172,6 +172,7 @@ SFILES = \
+ 	$(srcdir)/linux-low.c \
+ 	$(srcdir)/linux-m32r-low.c \
+ 	$(srcdir)/linux-m68k-low.c \
++        $(srcdir)/linux-microblaze-low.c \
+ 	$(srcdir)/linux-mips-low.c \
+ 	$(srcdir)/linux-nios2-low.c \
+ 	$(srcdir)/linux-ppc-low.c \
+@@ -232,6 +233,7 @@ SFILES = \
+ 	$(srcdir)/nat/linux-osdata.c \
+ 	$(srcdir)/nat/linux-personality.c \
+ 	$(srcdir)/nat/mips-linux-watch.c \
++        $(srcdir)/nat/microblaze-linux.c \
+ 	$(srcdir)/nat/ppc-linux.c \
+ 	$(srcdir)/nat/fork-inferior.c \
+ 	$(srcdir)/target/waitstatus.c
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0037-microblaze-Add-build_gdbserver-yes-to-top-level-conf.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0038-microblaze-Add-build_gdbserver-yes-to-top-level-conf.patch
similarity index 69%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0037-microblaze-Add-build_gdbserver-yes-to-top-level-conf.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0038-microblaze-Add-build_gdbserver-yes-to-top-level-conf.patch
index 1e0bffb..37a9646 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0037-microblaze-Add-build_gdbserver-yes-to-top-level-conf.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0038-microblaze-Add-build_gdbserver-yes-to-top-level-conf.patch
@@ -1,7 +1,7 @@
-From 7b22823ae82445f52384e6c0bd85431294868eb7 Mon Sep 17 00:00:00 2001
+From 6474cf4147887529ccb506b80f945aa67178f5bd Mon Sep 17 00:00:00 2001
 From: David Holsgrove <david.holsgrove@xilinx.com>
 Date: Mon, 16 Dec 2013 16:37:32 +1000
-Subject: [PATCH 37/40] microblaze: Add build_gdbserver=yes to top level
+Subject: [PATCH 38/52] microblaze: Add build_gdbserver=yes to top level
  configure.tgt
 
 For Microblaze linux toolchains, set the build_gdbserver=yes
@@ -15,10 +15,10 @@
  gdb/configure.tgt | 1 +
  1 file changed, 1 insertion(+)
 
-diff --git a/gdb/configure.tgt b/gdb/configure.tgt
-index f0386568460..ae238c17cd5 100644
---- a/gdb/configure.tgt
-+++ b/gdb/configure.tgt
+Index: gdb-9.2/gdb/configure.tgt
+===================================================================
+--- gdb-9.2.orig/gdb/configure.tgt
++++ gdb-9.2/gdb/configure.tgt
 @@ -408,6 +408,7 @@ microblaze*-*-*)
  	# Target: Xilinx MicroBlaze running standalone
  	gdb_target_obs="microblaze-tdep.o"
@@ -27,6 +27,3 @@
  	;;
  
  mips*-*-linux*)
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0039-Fixing-the-issues-related-to-GDB-7.12.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0039-Fixing-the-issues-related-to-GDB-7.12.patch
deleted file mode 100644
index fb4b35e..0000000
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0039-Fixing-the-issues-related-to-GDB-7.12.patch
+++ /dev/null
@@ -1,216 +0,0 @@
-From f13ffe15c10e5d4b5c87761ae9735144d4c8da17 Mon Sep 17 00:00:00 2001
-From: Nagaraju Mekala <nmekala@xilix.com>
-Date: Fri, 17 Feb 2017 14:09:40 +0530
-Subject: [PATCH 39/40] Fixing the issues related to GDB-7.12
-
-added all the required function which are new in 7.12 and removed
-few deprecated functions from 7.6
----
- gdb/config/microblaze/linux.mh       |  4 +-
- gdb/gdbserver/configure.srv          |  3 +-
- gdb/gdbserver/linux-microblaze-low.c | 97 ++++++++++++++++++++++++----
- gdb/microblaze-tdep.h                |  1 +
- 4 files changed, 89 insertions(+), 16 deletions(-)
-
-diff --git a/gdb/config/microblaze/linux.mh b/gdb/config/microblaze/linux.mh
-index a4eaf540e1d..74a53b854a4 100644
---- a/gdb/config/microblaze/linux.mh
-+++ b/gdb/config/microblaze/linux.mh
-@@ -1,9 +1,11 @@
- # Host: Microblaze, running Linux
- 
-+#linux-nat.o linux-waitpid.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o
- NAT_FILE= config/nm-linux.h
- NATDEPFILES= inf-ptrace.o fork-child.o \
- 	microblaze-linux-nat.o proc-service.o linux-thread-db.o \
--	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o
-+	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o \
-+	linux-waitpid.o linux-personality.o linux-namespaces.o
- NAT_CDEPS = $(srcdir)/proc-service.list
- 
- LOADLIBES = -ldl $(RDYNAMIC)
-diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
-index e0d2b2fe04a..26db2dd2461 100644
---- a/gdb/gdbserver/configure.srv
-+++ b/gdb/gdbserver/configure.srv
-@@ -185,8 +185,7 @@ case "${target}" in
- 			srv_linux_thread_db=yes
- 			;;
-   microblaze*-*-linux*)	srv_regobj="microblaze-linux.o"
--			srv_tgtobj="linux-low.o linux-osdata.o linux-microblaze-low.o "
--			srv_tgtobj="${srv_tgtobj} linux-procfs.o linux-ptrace.o"
-+			srv_tgtobj="$srv_linux_obj linux-microblaze-low.o "
- 			srv_xmlfiles="microblaze-linux.xml"
- 			srv_linux_regsets=yes
- 			srv_linux_usrregs=yes
-diff --git a/gdb/gdbserver/linux-microblaze-low.c b/gdb/gdbserver/linux-microblaze-low.c
-index cba5d6fc585..a2733f3c21c 100644
---- a/gdb/gdbserver/linux-microblaze-low.c
-+++ b/gdb/gdbserver/linux-microblaze-low.c
-@@ -39,10 +39,11 @@ static int microblaze_regmap[] =
-   PT_FSR
-   };
- 
--#define microblaze_num_regs (sizeof microblaze_regmap / sizeof microblaze_regmap[0])
-+#define microblaze_num_regs (sizeof (microblaze_regmap) / sizeof (microblaze_regmap[0]))
- 
- /* Defined in auto-generated file microblaze-linux.c.  */
- void init_registers_microblaze (void);
-+extern const struct target_desc *tdesc_microblaze;
- 
- static int
- microblaze_cannot_store_register (int regno)
-@@ -81,6 +82,15 @@ microblaze_set_pc (struct regcache *regcache, CORE_ADDR pc)
- static const unsigned long microblaze_breakpoint = 0xba0c0018;
- #define microblaze_breakpoint_len 4
- 
-+/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
-+
-+static const gdb_byte *
-+microblaze_sw_breakpoint_from_kind (int kind, int *size)
-+{
-+  *size = microblaze_breakpoint_len;
-+  return (const gdb_byte *) &microblaze_breakpoint;
-+}
-+
- static int
- microblaze_breakpoint_at (CORE_ADDR where)
- {
-@@ -107,7 +117,7 @@ microblaze_reinsert_addr (struct regcache *regcache)
- static void
- microblaze_collect_ptrace_register (struct regcache *regcache, int regno, char *buf)
- {
--  int size = register_size (regno);
-+  int size = register_size (regcache->tdesc, regno);
- 
-   memset (buf, 0, sizeof (long));
- 
-@@ -121,7 +131,7 @@ static void
- microblaze_supply_ptrace_register (struct regcache *regcache,
- 			    int regno, const char *buf)
- {
--  int size = register_size (regno);
-+  int size = register_size (regcache->tdesc, regno);
- 
-   if (regno == 0) {
-     unsigned long regbuf_0 = 0;
-@@ -157,33 +167,94 @@ microblaze_store_gregset (struct regcache *regcache, const void *buf)
- 
- #endif /* HAVE_PTRACE_GETREGS */
- 
--struct regset_info target_regsets[] = {
-+static struct regset_info microblaze_regsets[] = {
- #ifdef HAVE_PTRACE_GETREGS
-   { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t), GENERAL_REGS, microblaze_fill_gregset, microblaze_store_gregset },
--  { 0, 0, 0, -1, -1, NULL, NULL },
-+  { 0, 0, 0, -1, GENERAL_REGS, NULL, NULL },
- #endif /* HAVE_PTRACE_GETREGS */
--  { 0, 0, 0, -1, -1, NULL, NULL }
-+  { 0, 0, 0, -1, GENERAL_REGS, NULL, NULL },
-+  NULL_REGSET
- };
- 
-+static struct usrregs_info microblaze_usrregs_info =
-+  {
-+    microblaze_num_regs,
-+    microblaze_regmap,
-+  };
-+
-+static struct regsets_info microblaze_regsets_info =
-+  {
-+    microblaze_regsets, /* regsets */
-+    0, /* num_regsets */
-+    NULL, /* disabled_regsets */
-+  };
-+
-+static struct regs_info regs_info =
-+  {
-+    NULL, /* regset_bitmap */
-+    &microblaze_usrregs_info,
-+    &microblaze_regsets_info
-+  };
-+
-+static const struct regs_info *
-+microblaze_regs_info (void)
-+{
-+  return &regs_info;
-+}
-+
-+/* Support for hardware single step.  */
-+
-+static int
-+microblaze_supports_hardware_single_step (void)
-+{
-+  return 1;
-+}
-+
-+
-+static void
-+microblaze_arch_setup (void)
-+{
-+  current_process ()->tdesc = tdesc_microblaze;
-+}
-+
- struct linux_target_ops the_low_target = {
--  init_registers_microblaze,
--  microblaze_num_regs,
--  microblaze_regmap,
--  NULL,
-+  microblaze_arch_setup,
-+  microblaze_regs_info,
-   microblaze_cannot_fetch_register,
-   microblaze_cannot_store_register,
-   NULL, /* fetch_register */
-   microblaze_get_pc,
-   microblaze_set_pc,
--  (const unsigned char *) &microblaze_breakpoint,
--  microblaze_breakpoint_len,
--  microblaze_reinsert_addr,
-+  NULL,
-+  microblaze_sw_breakpoint_from_kind,
-+  NULL,
-   0,
-   microblaze_breakpoint_at,
-   NULL,
-   NULL,
-   NULL,
-   NULL,
-+  NULL,
-   microblaze_collect_ptrace_register,
-   microblaze_supply_ptrace_register,
-+  NULL, /* siginfo_fixup */
-+  NULL, /* new_process */
-+  NULL, /* new_thread */
-+  NULL, /* new_fork */
-+  NULL, /* prepare_to_resume */
-+  NULL, /* process_qsupported */
-+  NULL, /* supports_tracepoints */
-+  NULL, /* get_thread_area */
-+  NULL, /* install_fast_tracepoint_jump_pad */
-+  NULL, /* emit_ops */
-+  NULL, /* get_min_fast_tracepoint_insn_len */
-+  NULL, /* supports_range_stepping */
-+  NULL, /* breakpoint_kind_from_current_state */
-+  microblaze_supports_hardware_single_step,
- };
-+
-+void
-+initialize_low_arch (void)
-+{
-+  init_registers_microblaze ();
-+}
-diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h
-index 8f41ba19351..d2112dc07e1 100644
---- a/gdb/microblaze-tdep.h
-+++ b/gdb/microblaze-tdep.h
-@@ -24,6 +24,7 @@
- /* Microblaze architecture-specific information.  */
- struct microblaze_gregset
- {
-+   microblaze_gregset() {}
-    unsigned int gregs[32];
-    unsigned int fpregs[32];
-    unsigned int pregs[16];
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0038-Initial-support-for-native-gdb.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0039-Initial-support-for-native-gdb.patch
similarity index 95%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0038-Initial-support-for-native-gdb.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0039-Initial-support-for-native-gdb.patch
index afde3ce..669b592 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0038-Initial-support-for-native-gdb.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0039-Initial-support-for-native-gdb.patch
@@ -1,12 +1,15 @@
-From a06b9c4860af1f8f18ccb7c0653c76c623636034 Mon Sep 17 00:00:00 2001
+From db3c0a8a59b292eea6ed1f532f4097c40cafd7df Mon Sep 17 00:00:00 2001
 From: David Holsgrove <david.holsgrove@petalogix.com>
 Date: Fri, 20 Jul 2012 15:18:35 +1000
-Subject: [PATCH 38/40] Initial support for native gdb
+Subject: [PATCH 39/52] Initial support for native gdb
 
 microblaze: Follow PPC method of getting setting registers
 using PTRACE PEEK/POKE
 
 Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com>
+
+Conflicts:
+	gdb/Makefile.in
 ---
  gdb/Makefile.in                |   2 +
  gdb/config/microblaze/linux.mh |   9 +
@@ -15,10 +18,10 @@
  create mode 100644 gdb/config/microblaze/linux.mh
  create mode 100644 gdb/microblaze-linux-nat.c
 
-diff --git a/gdb/Makefile.in b/gdb/Makefile.in
-index c3e074b21fe..cbcd8f43326 100644
---- a/gdb/Makefile.in
-+++ b/gdb/Makefile.in
+Index: gdb-9.2/gdb/Makefile.in
+===================================================================
+--- gdb-9.2.orig/gdb/Makefile.in
++++ gdb-9.2/gdb/Makefile.in
 @@ -1337,6 +1337,7 @@ HFILES_NO_SRCDIR = \
  	memory-map.h \
  	memrange.h \
@@ -35,11 +38,10 @@
  	mingw-hdep.c \
  	mips-fbsd-nat.c \
  	mips-fbsd-tdep.c \
-diff --git a/gdb/config/microblaze/linux.mh b/gdb/config/microblaze/linux.mh
-new file mode 100644
-index 00000000000..a4eaf540e1d
+Index: gdb-9.2/gdb/config/microblaze/linux.mh
+===================================================================
 --- /dev/null
-+++ b/gdb/config/microblaze/linux.mh
++++ gdb-9.2/gdb/config/microblaze/linux.mh
 @@ -0,0 +1,9 @@
 +# Host: Microblaze, running Linux
 +
@@ -50,11 +52,10 @@
 +NAT_CDEPS = $(srcdir)/proc-service.list
 +
 +LOADLIBES = -ldl $(RDYNAMIC)
-diff --git a/gdb/microblaze-linux-nat.c b/gdb/microblaze-linux-nat.c
-new file mode 100644
-index 00000000000..e9b8c9c5221
+Index: gdb-9.2/gdb/microblaze-linux-nat.c
+===================================================================
 --- /dev/null
-+++ b/gdb/microblaze-linux-nat.c
++++ gdb-9.2/gdb/microblaze-linux-nat.c
 @@ -0,0 +1,431 @@
 +/* Microblaze GNU/Linux native support.
 +
@@ -487,6 +488,3 @@
 +  /* Register the target.  */
 +  linux_nat_add_target (t);
 +}
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0040-Fixing-the-issues-related-to-GDB-7.12-added-all-the-.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0040-Fixing-the-issues-related-to-GDB-7.12-added-all-the-.patch
new file mode 100644
index 0000000..85f8174
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0040-Fixing-the-issues-related-to-GDB-7.12-added-all-the-.patch
@@ -0,0 +1,306 @@
+From bf3c50c95c4dcca6c5c07a3c082bdd9d687f1496 Mon Sep 17 00:00:00 2001
+From: Nagaraju Mekala <nmekala@xilix.com>
+Date: Fri, 17 Feb 2017 14:09:40 +0530
+Subject: [PATCH 40/52] Fixing the issues related to GDB-7.12 added all the
+ required function which are new in 7.12 and removed few deprecated functions
+ from 7.6
+
+---
+ gdb/config/microblaze/linux.mh       |  4 +-
+ gdb/gdbserver/configure.srv          |  3 +-
+ gdb/gdbserver/linux-microblaze-low.c | 97 ++++++++++++++++++++++++----
+ gdb/microblaze-linux-tdep.c          | 68 +++++++++++++++++--
+ gdb/microblaze-tdep.h                |  1 +
+ 5 files changed, 153 insertions(+), 20 deletions(-)
+
+Index: gdb-9.2/gdb/config/microblaze/linux.mh
+===================================================================
+--- gdb-9.2.orig/gdb/config/microblaze/linux.mh
++++ gdb-9.2/gdb/config/microblaze/linux.mh
+@@ -1,9 +1,11 @@
+ # Host: Microblaze, running Linux
+ 
++#linux-nat.o linux-waitpid.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o
+ NAT_FILE= config/nm-linux.h
+ NATDEPFILES= inf-ptrace.o fork-child.o \
+ 	microblaze-linux-nat.o proc-service.o linux-thread-db.o \
+-	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o
++	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o \
++	linux-waitpid.o linux-personality.o linux-namespaces.o
+ NAT_CDEPS = $(srcdir)/proc-service.list
+ 
+ LOADLIBES = -ldl $(RDYNAMIC)
+Index: gdb-9.2/gdb/gdbserver/configure.srv
+===================================================================
+--- gdb-9.2.orig/gdb/gdbserver/configure.srv
++++ gdb-9.2/gdb/gdbserver/configure.srv
+@@ -185,8 +185,7 @@ case "${target}" in
+ 			srv_linux_thread_db=yes
+ 			;;
+   microblaze*-*-linux*)	srv_regobj=microblaze-linux.o
+-			srv_tgtobj="linux-low.o linux-osdata.o linux-microblaze-low.o "
+-			srv_tgtobj="${srv_tgtobj} linux-procfs.o linux-ptrace.o"
++			srv_tgtobj="$srv_linux_obj linux-microblaze-low.o "
+ 			srv_linux_regsets=yes
+ 			srv_linux_usrregs=yes
+ 			srv_linux_thread_db=yes
+Index: gdb-9.2/gdb/gdbserver/linux-microblaze-low.c
+===================================================================
+--- gdb-9.2.orig/gdb/gdbserver/linux-microblaze-low.c
++++ gdb-9.2/gdb/gdbserver/linux-microblaze-low.c
+@@ -39,10 +39,11 @@ static int microblaze_regmap[] =
+   PT_FSR
+   };
+ 
+-#define microblaze_num_regs (sizeof microblaze_regmap / sizeof microblaze_regmap[0])
++#define microblaze_num_regs (sizeof (microblaze_regmap) / sizeof (microblaze_regmap[0]))
+ 
+ /* Defined in auto-generated file microblaze-linux.c.  */
+ void init_registers_microblaze (void);
++extern const struct target_desc *tdesc_microblaze;
+ 
+ static int
+ microblaze_cannot_store_register (int regno)
+@@ -81,6 +82,15 @@ microblaze_set_pc (struct regcache *regc
+ static const unsigned long microblaze_breakpoint = 0xba0c0018;
+ #define microblaze_breakpoint_len 4
+ 
++/* Implementation of linux_target_ops method "sw_breakpoint_from_kind".  */
++
++static const gdb_byte *
++microblaze_sw_breakpoint_from_kind (int kind, int *size)
++{
++  *size = microblaze_breakpoint_len;
++  return (const gdb_byte *) &microblaze_breakpoint;
++}
++
+ static int
+ microblaze_breakpoint_at (CORE_ADDR where)
+ {
+@@ -107,7 +117,7 @@ microblaze_reinsert_addr (struct regcach
+ static void
+ microblaze_collect_ptrace_register (struct regcache *regcache, int regno, char *buf)
+ {
+-  int size = register_size (regno);
++  int size = register_size (regcache->tdesc, regno);
+ 
+   memset (buf, 0, sizeof (long));
+ 
+@@ -121,7 +131,7 @@ static void
+ microblaze_supply_ptrace_register (struct regcache *regcache,
+ 			    int regno, const char *buf)
+ {
+-  int size = register_size (regno);
++  int size = register_size (regcache->tdesc, regno);
+ 
+   if (regno == 0) {
+     unsigned long regbuf_0 = 0;
+@@ -157,33 +167,94 @@ microblaze_store_gregset (struct regcach
+ 
+ #endif /* HAVE_PTRACE_GETREGS */
+ 
+-struct regset_info target_regsets[] = {
++static struct regset_info microblaze_regsets[] = {
+ #ifdef HAVE_PTRACE_GETREGS
+   { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t), GENERAL_REGS, microblaze_fill_gregset, microblaze_store_gregset },
+-  { 0, 0, 0, -1, -1, NULL, NULL },
++  { 0, 0, 0, -1, GENERAL_REGS, NULL, NULL },
+ #endif /* HAVE_PTRACE_GETREGS */
+-  { 0, 0, 0, -1, -1, NULL, NULL }
++  { 0, 0, 0, -1, GENERAL_REGS, NULL, NULL },
++  NULL_REGSET
+ };
+ 
++static struct usrregs_info microblaze_usrregs_info =
++  {
++    microblaze_num_regs,
++    microblaze_regmap,
++  };
++
++static struct regsets_info microblaze_regsets_info =
++  {
++    microblaze_regsets, /* regsets */
++    0, /* num_regsets */
++    NULL, /* disabled_regsets */
++  };
++
++static struct regs_info regs_info =
++  {
++    NULL, /* regset_bitmap */
++    &microblaze_usrregs_info,
++    &microblaze_regsets_info
++  };
++
++static const struct regs_info *
++microblaze_regs_info (void)
++{
++  return &regs_info;
++}
++
++/* Support for hardware single step.  */
++
++static int
++microblaze_supports_hardware_single_step (void)
++{
++  return 1;
++}
++
++
++static void
++microblaze_arch_setup (void)
++{
++  current_process ()->tdesc = tdesc_microblaze;
++}
++
+ struct linux_target_ops the_low_target = {
+-  init_registers_microblaze,
+-  microblaze_num_regs,
+-  microblaze_regmap,
+-  NULL,
++  microblaze_arch_setup,
++  microblaze_regs_info,
+   microblaze_cannot_fetch_register,
+   microblaze_cannot_store_register,
+   NULL, /* fetch_register */
+   microblaze_get_pc,
+   microblaze_set_pc,
+-  (const unsigned char *) &microblaze_breakpoint,
+-  microblaze_breakpoint_len,
+-  microblaze_reinsert_addr,
++  NULL,
++  microblaze_sw_breakpoint_from_kind,
++  NULL,
+   0,
+   microblaze_breakpoint_at,
+   NULL,
+   NULL,
+   NULL,
+   NULL,
++  NULL,
+   microblaze_collect_ptrace_register,
+   microblaze_supply_ptrace_register,
++  NULL, /* siginfo_fixup */
++  NULL, /* new_process */
++  NULL, /* new_thread */
++  NULL, /* new_fork */
++  NULL, /* prepare_to_resume */
++  NULL, /* process_qsupported */
++  NULL, /* supports_tracepoints */
++  NULL, /* get_thread_area */
++  NULL, /* install_fast_tracepoint_jump_pad */
++  NULL, /* emit_ops */
++  NULL, /* get_min_fast_tracepoint_insn_len */
++  NULL, /* supports_range_stepping */
++  NULL, /* breakpoint_kind_from_current_state */
++  microblaze_supports_hardware_single_step,
+ };
++
++void
++initialize_low_arch (void)
++{
++  init_registers_microblaze ();
++}
+Index: gdb-9.2/gdb/microblaze-linux-tdep.c
+===================================================================
+--- gdb-9.2.orig/gdb/microblaze-linux-tdep.c
++++ gdb-9.2/gdb/microblaze-linux-tdep.c
+@@ -29,13 +29,76 @@
+ #include "regcache.h"
+ #include "value.h"
+ #include "osabi.h"
+-#include "regset.h"
+ #include "solib-svr4.h"
+ #include "microblaze-tdep.h"
+ #include "trad-frame.h"
+ #include "frame-unwind.h"
+ #include "tramp-frame.h"
+ #include "linux-tdep.h"
++#include "glibc-tdep.h"
++
++#include "gdb_assert.h"
++
++#ifndef REGSET_H
++#define REGSET_H 1
++
++struct gdbarch;
++struct regcache;
++
++/* Data structure for the supported register notes in a core file.  */
++struct core_regset_section
++{
++  const char *sect_name;
++  int size;
++  const char *human_name;
++};
++
++/* Data structure describing a register set.  */
++
++typedef void (supply_regset_ftype) (const struct regset *, struct regcache *,
++                                    int, const void *, size_t);
++typedef void (collect_regset_ftype) (const struct regset *,
++                                     const struct regcache *,
++                                     int, void *, size_t);
++
++struct regset
++{
++  /* Data pointer for private use by the methods below, presumably
++     providing some sort of description of the register set.  */
++  const void *descr;
++
++  /* Function supplying values in a register set to a register cache.  */
++  supply_regset_ftype *supply_regset;
++
++  /* Function collecting values in a register set from a register cache.  */
++  collect_regset_ftype *collect_regset;
++
++  /* Architecture associated with the register set.  */
++  struct gdbarch *arch;
++};
++
++#endif
++
++/* Allocate a fresh 'struct regset' whose supply_regset function is
++   SUPPLY_REGSET, and whose collect_regset function is COLLECT_REGSET.
++   If the regset has no collect_regset function, pass NULL for
++   COLLECT_REGSET.
++
++   The object returned is allocated on ARCH's obstack.  */
++
++struct regset *
++regset_alloc (struct gdbarch *arch,
++              supply_regset_ftype *supply_regset,
++              collect_regset_ftype *collect_regset)
++{
++  struct regset *regset = GDBARCH_OBSTACK_ZALLOC (arch, struct regset);
++
++  regset->arch = arch;
++  regset->supply_regset = supply_regset;
++  regset->collect_regset = collect_regset;
++
++  return regset;
++}
+ 
+ static int microblaze_debug_flag = 0;
+ 
+@@ -207,9 +270,6 @@ microblaze_linux_init_abi (struct gdbarc
+   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
+   set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
+ 
+-  set_gdbarch_regset_from_core_section (gdbarch,
+-					microblaze_regset_from_core_section);
+-
+   /* Enable TLS support.  */
+   set_gdbarch_fetch_tls_load_module_address (gdbarch,
+                                              svr4_fetch_objfile_link_map);
+Index: gdb-9.2/gdb/microblaze-tdep.h
+===================================================================
+--- gdb-9.2.orig/gdb/microblaze-tdep.h
++++ gdb-9.2/gdb/microblaze-tdep.h
+@@ -24,6 +24,7 @@
+ /* Microblaze architecture-specific information.  */
+ struct microblaze_gregset
+ {
++   microblaze_gregset() {}
+    unsigned int gregs[32];
+    unsigned int fpregs[32];
+    unsigned int pregs[16];
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0040-Patch-microblaze-Adding-64-bit-MB-support.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0041-Adding-64-bit-MB-support-Added-new-architecture-to-M.patch
similarity index 74%
rename from meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0040-Patch-microblaze-Adding-64-bit-MB-support.patch
rename to meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0041-Adding-64-bit-MB-support-Added-new-architecture-to-M.patch
index 7ac8f07..0c72e79 100644
--- a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0040-Patch-microblaze-Adding-64-bit-MB-support.patch
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0041-Adding-64-bit-MB-support-Added-new-architecture-to-M.patch
@@ -1,31 +1,33 @@
-From 4e5a4e94cb1dd61646230100f883bd27a39cd896 Mon Sep 17 00:00:00 2001
+From 992c41987cb6c89bb3f9cbc0f6a2b0aa3458e4d2 Mon Sep 17 00:00:00 2001
 From: Nagaraju Mekala <nmekala@xilix.com>
 Date: Thu, 31 Jan 2019 14:36:00 +0530
-Subject: [PATCH 40/40] [Patch, microblaze]: Adding 64 bit MB support
+Subject: [PATCH 41/52] Adding 64 bit MB support Added new architecture to
+ Microblaze 64-bit support to GDB Signed-off-by :Nagaraju Mekala
+ <nmekala@xilix.com>
 
-Added new architecture to Microblaze 64-bit support to GDB
-
-Signed-off-by :Nagaraju Mekala <nmekala@xilix.com>
+Conflicts:
+	gdb/Makefile.in
 ---
  bfd/archures.c                                |   2 +
  bfd/bfd-in2.h                                 |   2 +
- bfd/cpu-microblaze.c                          |  16 +-
- bfd/elf32-microblaze.c                        |   9 +
+ bfd/cpu-microblaze.c                          |   8 +-
+ gas/config/tc-microblaze.c                    |  13 ++
+ gas/config/tc-microblaze.h                    |   4 +
  gdb/features/Makefile                         |   3 +
  gdb/features/microblaze-core.xml              |   6 +-
- gdb/features/microblaze-with-stack-protect.c  |   4 +-
+ gdb/features/microblaze-stack-protect.xml     |   4 +-
+ gdb/features/microblaze-with-stack-protect.c  |   8 +-
  gdb/features/microblaze.c                     |   6 +-
- gdb/features/microblaze64-core.xml            |  69 +++++++
- gdb/features/microblaze64-stack-protect.xml   |  12 ++
- .../microblaze64-with-stack-protect.c         |  79 ++++++++
- .../microblaze64-with-stack-protect.xml       |  12 ++
- gdb/features/microblaze64.c                   |  77 ++++++++
- gdb/features/microblaze64.xml                 |  11 ++
- gdb/microblaze-linux-tdep.c                   |  29 ++-
- gdb/microblaze-tdep.c                         | 176 ++++++++++++++++--
- gdb/microblaze-tdep.h                         |   9 +-
+ gdb/features/microblaze64-core.xml            |  69 ++++++
+ gdb/features/microblaze64-stack-protect.xml   |  12 +
+ .../microblaze64-with-stack-protect.c         |  79 +++++++
+ .../microblaze64-with-stack-protect.xml       |  12 +
+ gdb/features/microblaze64.c                   |  77 +++++++
+ gdb/features/microblaze64.xml                 |  11 +
+ gdb/microblaze-tdep.c                         | 207 ++++++++++++++++--
+ gdb/microblaze-tdep.h                         |   8 +-
  .../microblaze-with-stack-protect.dat         |   4 +-
- 20 files changed, 504 insertions(+), 40 deletions(-)
+ 19 files changed, 491 insertions(+), 44 deletions(-)
  create mode 100644 gdb/features/microblaze64-core.xml
  create mode 100644 gdb/features/microblaze64-stack-protect.xml
  create mode 100644 gdb/features/microblaze64-with-stack-protect.c
@@ -33,10 +35,10 @@
  create mode 100644 gdb/features/microblaze64.c
  create mode 100644 gdb/features/microblaze64.xml
 
-diff --git a/bfd/archures.c b/bfd/archures.c
-index 7866c6095b5..abc1541afe6 100644
---- a/bfd/archures.c
-+++ b/bfd/archures.c
+Index: gdb-9.2/bfd/archures.c
+===================================================================
+--- gdb-9.2.orig/bfd/archures.c
++++ gdb-9.2/bfd/archures.c
 @@ -513,6 +513,8 @@ DESCRIPTION
  .  bfd_arch_lm32,      {* Lattice Mico32.  *}
  .#define bfd_mach_lm32		1
@@ -46,10 +48,10 @@
  .  bfd_arch_tilepro,   {* Tilera TILEPro.  *}
  .  bfd_arch_tilegx,    {* Tilera TILE-Gx.  *}
  .#define bfd_mach_tilepro	1
-diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
-index 91761bf6964..cc34ce0d8c3 100644
---- a/bfd/bfd-in2.h
-+++ b/bfd/bfd-in2.h
+Index: gdb-9.2/bfd/bfd-in2.h
+===================================================================
+--- gdb-9.2.orig/bfd/bfd-in2.h
++++ gdb-9.2/bfd/bfd-in2.h
 @@ -1896,6 +1896,8 @@ enum bfd_architecture
    bfd_arch_lm32,      /* Lattice Mico32.  */
  #define bfd_mach_lm32          1
@@ -59,38 +61,29 @@
    bfd_arch_tilepro,   /* Tilera TILEPro.  */
    bfd_arch_tilegx,    /* Tilera TILE-Gx.  */
  #define bfd_mach_tilepro       1
-diff --git a/bfd/cpu-microblaze.c b/bfd/cpu-microblaze.c
-index 4b48b310c6a..a32c4a33d75 100644
---- a/bfd/cpu-microblaze.c
-+++ b/bfd/cpu-microblaze.c
-@@ -30,8 +30,8 @@ const bfd_arch_info_type bfd_microblaze_arch[] =
-   64,		  		/* 32 bits in a word.  */
+Index: gdb-9.2/bfd/cpu-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/cpu-microblaze.c
++++ gdb-9.2/bfd/cpu-microblaze.c
+@@ -31,7 +31,7 @@ const bfd_arch_info_type bfd_microblaze_
    64,		  		/* 32 bits in an address.  */
    8,		  		/* 8 bits in a byte.  */
--  bfd_arch_microblaze, 		/* Architecture.  */
+   bfd_arch_microblaze, 		/* Architecture.  */
 -  0,		  		/* Machine number - 0 for now.  */
-+  bfd_arch_microblaze,		/* Architecture.  */
-+  bfd_mach_microblaze64,	/* 64 bit Machine */
++  bfd_mach_microblaze64, 	/* 64 bit Machine  */
    "microblaze",	  		/* Architecture name.  */
    "MicroBlaze",	  		/* Printable name.  */
    3,		  		/* Section align power.  */
-@@ -43,11 +43,11 @@ const bfd_arch_info_type bfd_microblaze_arch[] =
-   0 /* Maximum offset of a reloc from the start of an insn.  */
- },
- {
--  32,				/* Bits in a word.  */
--  32,				/* Bits in an address.  */
--  8,				/* Bits in a byte.  */
-+  32,				/* 32 bits in a word.  */
-+  32,				/* 32 bits in an address.  */
-+  8,				/* 8 bits in a byte.  */
+@@ -46,7 +46,7 @@ const bfd_arch_info_type bfd_microblaze_
+   32,				/* Bits in an address.  */
+   8,				/* Bits in a byte.  */
    bfd_arch_microblaze,		/* Architecture number.  */
 -  0,				/* Machine number - 0 for now.  */
-+  bfd_mach_microblaze,		/* 32 bit Machine */
++  bfd_mach_microblaze,		/* 32 bit Machine  */
    "microblaze",			/* Architecture name.  */
    "MicroBlaze",			/* Printable name.  */
    3,				/* Section align power.  */
-@@ -64,7 +64,7 @@ const bfd_arch_info_type bfd_microblaze_arch[] =
+@@ -63,7 +63,7 @@ const bfd_arch_info_type bfd_microblaze_
    32,		  		/* 32 bits in an address.  */
    8,		  		/* 8 bits in a byte.  */
    bfd_arch_microblaze, 		/* Architecture.  */
@@ -99,7 +92,7 @@
    "microblaze",	  		/* Architecture name.  */
    "MicroBlaze",	  		/* Printable name.  */
    3,		  		/* Section align power.  */
-@@ -80,7 +80,7 @@ const bfd_arch_info_type bfd_microblaze_arch[] =
+@@ -78,7 +78,7 @@ const bfd_arch_info_type bfd_microblaze_
    64,		  		/* 32 bits in an address.  */
    8,		  		/* 8 bits in a byte.  */
    bfd_arch_microblaze, 		/* Architecture.  */
@@ -108,37 +101,11 @@
    "microblaze",	  		/* Architecture name.  */
    "MicroBlaze",	  		/* Printable name.  */
    3,		  		/* Section align power.  */
-diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c
-index cb7a98d307e..e4a70150190 100644
---- a/bfd/elf32-microblaze.c
-+++ b/bfd/elf32-microblaze.c
-@@ -3684,6 +3684,14 @@ microblaze_elf_finish_dynamic_sections (bfd *output_bfd,
-   return TRUE;
- }
- 
-+
-+static bfd_boolean
-+elf_microblaze_object_p (bfd *abfd)
-+{
-+  /* Set the right machine number for an s390 elf32 file.  */
-+  return bfd_default_set_arch_mach (abfd, bfd_arch_microblaze, bfd_mach_microblaze);
-+}
-+
- /* Hook called by the linker routine which adds symbols from an object
-    file.  We use it to put .comm items in .sbss, and not .bss.  */
- 
-@@ -3756,5 +3764,6 @@ microblaze_elf_add_symbol_hook (bfd *abfd,
- 
- #define elf_backend_grok_prstatus               microblaze_elf_grok_prstatus
- #define elf_backend_grok_psinfo                 microblaze_elf_grok_psinfo
-+#define elf_backend_object_p			elf_microblaze_object_p
- 
- #include "elf32-target.h"
-diff --git a/gdb/features/Makefile b/gdb/features/Makefile
-index 9a98b0542c4..438e0c5a3fe 100644
---- a/gdb/features/Makefile
-+++ b/gdb/features/Makefile
-@@ -48,6 +48,7 @@ WHICH = arm/arm-with-iwmmxt arm/arm-with-vfpv2 arm/arm-with-vfpv3 \
+Index: gdb-9.2/gdb/features/Makefile
+===================================================================
+--- gdb-9.2.orig/gdb/features/Makefile
++++ gdb-9.2/gdb/features/Makefile
+@@ -48,6 +48,7 @@ WHICH = arm/arm-with-iwmmxt arm/arm-with
  	arm/arm-with-neon \
  	mips-linux mips-dsp-linux \
  	microblaze-with-stack-protect \
@@ -156,10 +123,10 @@
  	mips-dsp-linux.xml \
  	mips-linux.xml \
  	mips64-dsp-linux.xml \
-diff --git a/gdb/features/microblaze-core.xml b/gdb/features/microblaze-core.xml
-index f272650a41b..d1f2282fd1e 100644
---- a/gdb/features/microblaze-core.xml
-+++ b/gdb/features/microblaze-core.xml
+Index: gdb-9.2/gdb/features/microblaze-core.xml
+===================================================================
+--- gdb-9.2.orig/gdb/features/microblaze-core.xml
++++ gdb-9.2/gdb/features/microblaze-core.xml
 @@ -8,7 +8,7 @@
  <!DOCTYPE feature SYSTEM "gdb-target.dtd">
  <feature name="org.gnu.gdb.microblaze.core">
@@ -182,14 +149,27 @@
    <reg name="rtlbsx" bitsize="32"/>
    <reg name="rtlblo" bitsize="32"/>
    <reg name="rtlbhi" bitsize="32"/>
-+  <reg name="rslr" bitsize="32"/>
-+  <reg name="rshr" bitsize="32"/>
++  <reg name="slr" bitsize="32"/>
++  <reg name="shr" bitsize="32"/>
  </feature>
-diff --git a/gdb/features/microblaze-with-stack-protect.c b/gdb/features/microblaze-with-stack-protect.c
-index b39aa198874..ab162fd2588 100644
---- a/gdb/features/microblaze-with-stack-protect.c
-+++ b/gdb/features/microblaze-with-stack-protect.c
-@@ -14,7 +14,7 @@ initialize_tdesc_microblaze_with_stack_protect (void)
+Index: gdb-9.2/gdb/features/microblaze-stack-protect.xml
+===================================================================
+--- gdb-9.2.orig/gdb/features/microblaze-stack-protect.xml
++++ gdb-9.2/gdb/features/microblaze-stack-protect.xml
+@@ -7,6 +7,6 @@
+ 
+ <!DOCTYPE feature SYSTEM "gdb-target.dtd">
+ <feature name="org.gnu.gdb.microblaze.stack-protect">
+-  <reg name="rslr" bitsize="32"/>
+-  <reg name="rshr" bitsize="32"/>
++  <reg name="slr" bitsize="32"/>
++  <reg name="shr" bitsize="32"/>
+ </feature>
+Index: gdb-9.2/gdb/features/microblaze-with-stack-protect.c
+===================================================================
+--- gdb-9.2.orig/gdb/features/microblaze-with-stack-protect.c
++++ gdb-9.2/gdb/features/microblaze-with-stack-protect.c
+@@ -14,7 +14,7 @@ initialize_tdesc_microblaze_with_stack_p
  
    feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.core");
    tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
@@ -198,7 +178,7 @@
    tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int");
    tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int");
    tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int");
-@@ -45,7 +45,7 @@ initialize_tdesc_microblaze_with_stack_protect (void)
+@@ -45,7 +45,7 @@ initialize_tdesc_microblaze_with_stack_p
    tdesc_create_reg (feature, "r29", 29, 1, NULL, 32, "int");
    tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "int");
    tdesc_create_reg (feature, "r31", 31, 1, NULL, 32, "int");
@@ -207,10 +187,21 @@
    tdesc_create_reg (feature, "rmsr", 33, 1, NULL, 32, "int");
    tdesc_create_reg (feature, "rear", 34, 1, NULL, 32, "int");
    tdesc_create_reg (feature, "resr", 35, 1, NULL, 32, "int");
-diff --git a/gdb/features/microblaze.c b/gdb/features/microblaze.c
-index 6c86fc07700..7919ac96e62 100644
---- a/gdb/features/microblaze.c
-+++ b/gdb/features/microblaze.c
+@@ -72,8 +72,8 @@ initialize_tdesc_microblaze_with_stack_p
+   tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int");
+ 
+   feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.stack-protect");
+-  tdesc_create_reg (feature, "rslr", 57, 1, NULL, 32, "int");
+-  tdesc_create_reg (feature, "rshr", 58, 1, NULL, 32, "int");
++  tdesc_create_reg (feature, "slr", 57, 1, NULL, 32, "int");
++  tdesc_create_reg (feature, "shr", 58, 1, NULL, 32, "int");
+ 
+   tdesc_microblaze_with_stack_protect = result;
+ }
+Index: gdb-9.2/gdb/features/microblaze.c
+===================================================================
+--- gdb-9.2.orig/gdb/features/microblaze.c
++++ gdb-9.2/gdb/features/microblaze.c
 @@ -14,7 +14,7 @@ initialize_tdesc_microblaze (void)
  
    feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.core");
@@ -233,16 +224,15 @@
    tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int");
    tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int");
    tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int");
-+  tdesc_create_reg (feature, "rslr", 57, 1, NULL, 64, "uint64");
-+  tdesc_create_reg (feature, "rshr", 58, 1, NULL, 64, "uint64");
++  tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64");
++  tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64");
  
    tdesc_microblaze = result;
  }
-diff --git a/gdb/features/microblaze64-core.xml b/gdb/features/microblaze64-core.xml
-new file mode 100644
-index 00000000000..b9adadfade6
+Index: gdb-9.2/gdb/features/microblaze64-core.xml
+===================================================================
 --- /dev/null
-+++ b/gdb/features/microblaze64-core.xml
++++ gdb-9.2/gdb/features/microblaze64-core.xml
 @@ -0,0 +1,69 @@
 +<?xml version="1.0"?>
 +<!-- Copyright (C) 2014-2018 Free Software Foundation, Inc.
@@ -310,14 +300,13 @@
 +  <reg name="rtlbsx" bitsize="32"/>
 +  <reg name="rtlblo" bitsize="32"/>
 +  <reg name="rtlbhi" bitsize="32"/>
-+  <reg name="rslr" bitsize="64"/>
-+  <reg name="rshr" bitsize="64"/>
++  <reg name="slr" bitsize="64"/>
++  <reg name="shr" bitsize="64"/>
 +</feature>
-diff --git a/gdb/features/microblaze64-stack-protect.xml b/gdb/features/microblaze64-stack-protect.xml
-new file mode 100644
-index 00000000000..9d7ea8b9fd7
+Index: gdb-9.2/gdb/features/microblaze64-stack-protect.xml
+===================================================================
 --- /dev/null
-+++ b/gdb/features/microblaze64-stack-protect.xml
++++ gdb-9.2/gdb/features/microblaze64-stack-protect.xml
 @@ -0,0 +1,12 @@
 +<?xml version="1.0"?>
 +<!-- Copyright (C) 2014-2018 Free Software Foundation, Inc.
@@ -328,14 +317,13 @@
 +
 +<!DOCTYPE feature SYSTEM "gdb-target.dtd">
 +<feature name="org.gnu.gdb.microblaze64.stack-protect">
-+  <reg name="rslr" bitsize="64"/>
-+  <reg name="rshr" bitsize="64"/>
++  <reg name="slr" bitsize="64"/>
++  <reg name="shr" bitsize="64"/>
 +</feature>
-diff --git a/gdb/features/microblaze64-with-stack-protect.c b/gdb/features/microblaze64-with-stack-protect.c
-new file mode 100644
-index 00000000000..249cb534daa
+Index: gdb-9.2/gdb/features/microblaze64-with-stack-protect.c
+===================================================================
 --- /dev/null
-+++ b/gdb/features/microblaze64-with-stack-protect.c
++++ gdb-9.2/gdb/features/microblaze64-with-stack-protect.c
 @@ -0,0 +1,79 @@
 +/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
 +  Original: microblaze-with-stack-protect.xml */
@@ -411,16 +399,15 @@
 +  tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int");
 +
 +  feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze64.stack-protect");
-+  tdesc_create_reg (feature, "rslr", 57, 1, NULL, 64, "uint64");
-+  tdesc_create_reg (feature, "rshr", 58, 1, NULL, 64, "uint64");
++  tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64");
++  tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64");
 +
 +  tdesc_microblaze64_with_stack_protect = result;
 +}
-diff --git a/gdb/features/microblaze64-with-stack-protect.xml b/gdb/features/microblaze64-with-stack-protect.xml
-new file mode 100644
-index 00000000000..0e9f01611f3
+Index: gdb-9.2/gdb/features/microblaze64-with-stack-protect.xml
+===================================================================
 --- /dev/null
-+++ b/gdb/features/microblaze64-with-stack-protect.xml
++++ gdb-9.2/gdb/features/microblaze64-with-stack-protect.xml
 @@ -0,0 +1,12 @@
 +<?xml version="1.0"?>
 +<!-- Copyright (C) 2014-2018 Free Software Foundation, Inc.
@@ -434,11 +421,10 @@
 +  <xi:include href="microblaze64-core.xml"/>
 +  <xi:include href="microblaze64-stack-protect.xml"/>
 +</target>
-diff --git a/gdb/features/microblaze64.c b/gdb/features/microblaze64.c
-new file mode 100644
-index 00000000000..5d3e2c8cd91
+Index: gdb-9.2/gdb/features/microblaze64.c
+===================================================================
 --- /dev/null
-+++ b/gdb/features/microblaze64.c
++++ gdb-9.2/gdb/features/microblaze64.c
 @@ -0,0 +1,77 @@
 +/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
 +  Original: microblaze.xml */
@@ -512,16 +498,15 @@
 +  tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int");
 +  tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int");
 +  tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int");
-+  tdesc_create_reg (feature, "rslr", 57, 1, NULL, 64, "uint64");
-+  tdesc_create_reg (feature, "rshr", 58, 1, NULL, 64, "uint64");
++  tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64");
++  tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64");
 +
 +  tdesc_microblaze64 = result;
 +}
-diff --git a/gdb/features/microblaze64.xml b/gdb/features/microblaze64.xml
-new file mode 100644
-index 00000000000..515d18e65cf
+Index: gdb-9.2/gdb/features/microblaze64.xml
+===================================================================
 --- /dev/null
-+++ b/gdb/features/microblaze64.xml
++++ gdb-9.2/gdb/features/microblaze64.xml
 @@ -0,0 +1,11 @@
 +<?xml version="1.0"?>
 +<!-- Copyright (C) 2014-2018 Free Software Foundation, Inc.
@@ -534,57 +519,10 @@
 +<target>
 +  <xi:include href="microblaze64-core.xml"/>
 +</target>
-diff --git a/gdb/microblaze-linux-tdep.c b/gdb/microblaze-linux-tdep.c
-index 0afb6efeba3..48459a76991 100644
---- a/gdb/microblaze-linux-tdep.c
-+++ b/gdb/microblaze-linux-tdep.c
-@@ -159,9 +159,30 @@ microblaze_linux_init_abi (struct gdbarch_info info,
- 
-   /* BFD target for core files.  */
-   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
--    set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblaze");
-+    {
-+      if (info.bfd_arch_info->mach == bfd_mach_microblaze64) {
-+          set_gdbarch_gcore_bfd_target (gdbarch, "elf64-microblaze");
-+          MICROBLAZE_REGISTER_SIZE=8;
-+        }
-+      else
-+        set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblaze");
-+    }
-   else
--    set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblazeel");
-+    {
-+      if (info.bfd_arch_info->mach == bfd_mach_microblaze64) {
-+          set_gdbarch_gcore_bfd_target (gdbarch, "elf64-microblazeel");
-+          MICROBLAZE_REGISTER_SIZE=8;
-+        }
-+      else
-+        set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblazeel");
-+    }
-+
-+  switch (info.bfd_arch_info->mach)
-+    {
-+    case bfd_mach_microblaze64:
-+      set_gdbarch_ptr_bit (gdbarch, 64);
-+    break;
-+    }
- 
- 
-   /* Shared library handling.  */
-@@ -176,6 +197,8 @@ microblaze_linux_init_abi (struct gdbarch_info info,
- void
- _initialize_microblaze_linux_tdep (void)
- {
--  gdbarch_register_osabi (bfd_arch_microblaze, 0, GDB_OSABI_LINUX, 
-+  gdbarch_register_osabi (bfd_arch_microblaze, bfd_mach_microblaze, GDB_OSABI_LINUX, 
-+			  microblaze_linux_init_abi);
-+  gdbarch_register_osabi (bfd_arch_microblaze, bfd_mach_microblaze64, GDB_OSABI_LINUX, 
- 			  microblaze_linux_init_abi);
- }
-diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
-index 98944f38d2a..5c0d6dd48ae 100644
---- a/gdb/microblaze-tdep.c
-+++ b/gdb/microblaze-tdep.c
+Index: gdb-9.2/gdb/microblaze-tdep.c
+===================================================================
+--- gdb-9.2.orig/gdb/microblaze-tdep.c
++++ gdb-9.2/gdb/microblaze-tdep.c
 @@ -40,7 +40,9 @@
  #include "remote.h"
  
@@ -595,34 +533,57 @@
  
  /* Instruction macros used for analyzing the prologue.  */
  /* This set of instruction macros need to be changed whenever the
-@@ -79,8 +81,9 @@ static const char *microblaze_register_names[] =
+@@ -75,12 +77,13 @@ static const char *microblaze_register_n
+   "rpvr0", "rpvr1", "rpvr2", "rpvr3", "rpvr4", "rpvr5", "rpvr6",
+   "rpvr7", "rpvr8", "rpvr9", "rpvr10", "rpvr11",
+   "redr", "rpid", "rzpr", "rtlbx", "rtlbsx", "rtlblo", "rtlbhi",
+-  "rslr", "rshr"
++  "slr", "shr"
  };
  
  #define MICROBLAZE_NUM_REGS ARRAY_SIZE (microblaze_register_names)
--
-+
+ 
  static unsigned int microblaze_debug_flag = 0;
-+int MICROBLAZE_REGISTER_SIZE = 4;
++int reg_size = 4;
  
  static void ATTRIBUTE_PRINTF (1, 2)
  microblaze_debug (const char *fmt, ...)
-@@ -137,6 +140,7 @@ microblaze_fetch_instruction (CORE_ADDR pc)
- constexpr gdb_byte microblaze_break_insn[] = MICROBLAZE_BREAKPOINT;
- 
- typedef BP_MANIPULATION (microblaze_break_insn) microblaze_breakpoint;
+@@ -145,6 +148,7 @@ microblaze_store_arguments (struct regca
+   error (_("store_arguments not implemented"));
+   return sp;
+ }
 +#if 0
  static int
  microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch,
  				    struct bp_target_info *bp_tgt)
-@@ -169,6 +173,7 @@ microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch,
+@@ -154,7 +158,7 @@ microblaze_linux_memory_remove_breakpoin
+   int val;
+   int bplen;
+   gdb_byte old_contents[BREAKPOINT_MAX];
+-  struct cleanup *cleanup;
++  //struct cleanup *cleanup;
  
+   /* Determine appropriate breakpoint contents and size for this address.  */
+   bp = gdbarch_breakpoint_from_pc (gdbarch, &addr, &bplen);
+@@ -162,7 +166,8 @@ microblaze_linux_memory_remove_breakpoin
+     error (_("Software breakpoints not implemented for this target."));
+ 
+   /* Make sure we see the memory breakpoints.  */
+-  cleanup = make_show_memory_breakpoints_cleanup (1);
++  scoped_restore 
++    cleanup = make_scoped_restore_show_memory_breakpoints (1);
+   val = target_read_memory (addr, old_contents, bplen);
+ 
+   /* If our breakpoint is no longer at the address, this means that the
+@@ -178,6 +183,7 @@ microblaze_linux_memory_remove_breakpoin
    return val;
  }
-+#endif
  
++#endif
  /* Allocate and initialize a frame cache.  */
  
-@@ -556,7 +561,6 @@ microblaze_extract_return_value (struct type *type, struct regcache *regcache,
+ static struct microblaze_frame_cache *
+@@ -570,17 +576,16 @@ microblaze_extract_return_value (struct
  				 gdb_byte *valbuf)
  {
    gdb_byte buf[8];
@@ -630,7 +591,19 @@
    /* Copy the return value (starting) in RETVAL_REGNUM to VALBUF.  */
    switch (TYPE_LENGTH (type))
      {
-@@ -633,7 +637,113 @@ microblaze_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
+       case 1:	/* return last byte in the register.  */
+ 	regcache->cooked_read (MICROBLAZE_RETVAL_REGNUM, buf);
+-	memcpy(valbuf, buf + MICROBLAZE_REGISTER_SIZE - 1, 1);
++	memcpy(valbuf, buf + reg_size - 1, 1);
+ 	return;
+       case 2:	/* return last 2 bytes in register.  */
+ 	regcache->cooked_read (MICROBLAZE_RETVAL_REGNUM, buf);
+-	memcpy(valbuf, buf + MICROBLAZE_REGISTER_SIZE - 2, 2);
++	memcpy(valbuf, buf + reg_size - 2, 2);
+ 	return;
+       case 4:	/* for sizes 4 or 8, copy the required length.  */
+       case 8:
+@@ -647,7 +652,119 @@ microblaze_stabs_argument_has_addr (stru
    return (TYPE_LENGTH (type) == 16);
  }
  
@@ -742,14 +715,16 @@
 +}
 +#endif
 +
++static void
++microblaze_write_pc (struct regcache *regcache, CORE_ADDR pc)
++{
++  regcache_cooked_write_unsigned (regcache, MICROBLAZE_PC_REGNUM, pc);
++}
++
  static int dwarf2_to_reg_map[78] =
  { 0  /* r0  */,   1  /* r1  */,   2  /* r2  */,   3  /* r3  */,  /*  0- 3 */
    4  /* r4  */,   5  /* r5  */,   6  /* r6  */,   7  /* r7  */,  /*  4- 7 */
-@@ -665,24 +775,27 @@ microblaze_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg)
-   return -1;
- }
- 
-+#if 0
+@@ -682,13 +799,14 @@ microblaze_dwarf2_reg_to_regnum (struct
  static void
  microblaze_register_g_packet_guesses (struct gdbarch *gdbarch)
  {
@@ -765,27 +740,46 @@
 -                                  tdesc_microblaze_with_stack_protect);
 +                                  tdesc_microblaze64_with_stack_protect);
  }
-+#endif
  
  void
- microblaze_supply_gregset (const struct regset *regset,
+@@ -696,15 +814,15 @@ microblaze_supply_gregset (const struct
                          struct regcache *regcache,
                          int regnum, const void *gregs)
  {
--  const unsigned int *regs = (const unsigned int *)gregs;
+-  unsigned int *regs = gregs;
 +  const gdb_byte *regs = (const gdb_byte *) gregs;
    if (regnum >= 0)
-     regcache->raw_supply (regnum, regs + regnum);
+-    regcache_raw_supply (regcache, regnum, regs + regnum);
++    regcache->raw_supply (regnum, regs + regnum);
  
-@@ -713,7 +826,6 @@ microblaze_iterate_over_regset_sections (struct gdbarch *gdbarch,
+   if (regnum == -1) {
+     int i;
+ 
+     for (i = 0; i < 50; i++) {
+-      regcache_raw_supply (regcache, i, regs + i);
++      regcache->raw_supply (regnum, regs + i);
+     }
+   }
+ }
+@@ -755,6 +873,17 @@ microblaze_regset_from_core_section (str
  }
  
  
--
++static void
++make_regs (struct gdbarch *arch)
++{
++  struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
++  int mach = gdbarch_bfd_arch_info (arch)->mach;
++  
++  if (mach == bfd_mach_microblaze64)
++    {
++      set_gdbarch_ptr_bit (arch, 64);
++    }
++}
+ 
  static struct gdbarch *
  microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
- {
-@@ -727,8 +839,15 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+@@ -769,8 +898,15 @@ microblaze_gdbarch_init (struct gdbarch_
    if (arches != NULL)
      return arches->gdbarch;
    if (tdesc == NULL)
@@ -795,7 +789,7 @@
 +      if (info.bfd_arch_info->mach == bfd_mach_microblaze64) 
 +        {
 +    	  tdesc = tdesc_microblaze64;
-+          MICROBLAZE_REGISTER_SIZE = 8;
++          reg_size = 8;
 +   	}
 +      else
 +    	tdesc = tdesc_microblaze;
@@ -803,7 +797,7 @@
    /* Check any target description for validity.  */
    if (tdesc_has_registers (tdesc))
      {
-@@ -736,27 +855,35 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+@@ -778,27 +914,35 @@ microblaze_gdbarch_init (struct gdbarch_
        int valid_p;
        int i;
  
@@ -844,7 +838,7 @@
          }
  
        if (!valid_p)
-@@ -764,6 +891,7 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+@@ -806,6 +950,7 @@ microblaze_gdbarch_init (struct gdbarch_
            tdesc_data_cleanup (tdesc_data);
            return NULL;
          }
@@ -852,7 +846,7 @@
      }
  
    /* Allocate space for the new architecture.  */
-@@ -783,7 +911,17 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+@@ -825,7 +970,17 @@ microblaze_gdbarch_init (struct gdbarch_
    /* Register numbers of various important registers.  */
    set_gdbarch_sp_regnum (gdbarch, MICROBLAZE_SP_REGNUM); 
    set_gdbarch_pc_regnum (gdbarch, MICROBLAZE_PC_REGNUM); 
@@ -870,7 +864,7 @@
    /* Map Dwarf2 registers to GDB registers.  */
    set_gdbarch_dwarf2_reg_to_regnum (gdbarch, microblaze_dwarf2_reg_to_regnum);
  
-@@ -803,13 +941,15 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+@@ -845,13 +1000,15 @@ microblaze_gdbarch_init (struct gdbarch_
  				       microblaze_breakpoint::kind_from_pc);
    set_gdbarch_sw_breakpoint_from_kind (gdbarch,
  				       microblaze_breakpoint::bp_from_kind);
@@ -888,7 +882,21 @@
  
    frame_base_set_default (gdbarch, &microblaze_frame_base);
  
-@@ -840,6 +980,8 @@ _initialize_microblaze_tdep (void)
+@@ -866,11 +1023,11 @@ microblaze_gdbarch_init (struct gdbarch_
+     tdesc_use_registers (gdbarch, tdesc, tdesc_data);
+   //frame_base_append_sniffer (gdbarch, microblaze_frame_sniffer);
+ 
+-  /* If we have register sets, enable the generic core file support.  */
++  /* If we have register sets, enable the generic core file support.  
+   if (tdep->gregset) {
+       set_gdbarch_regset_from_core_section (gdbarch,
+                                           microblaze_regset_from_core_section);
+-  }
++  }*/
+ 
+   return gdbarch;
+ }
+@@ -882,6 +1039,8 @@ _initialize_microblaze_tdep (void)
  
    initialize_tdesc_microblaze_with_stack_protect ();
    initialize_tdesc_microblaze ();
@@ -897,10 +905,10 @@
    /* Debug this files internals.  */
    add_setshow_zuinteger_cmd ("microblaze", class_maintenance,
  			     &microblaze_debug_flag, _("\
-diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h
-index d2112dc07e1..bd03e969b9b 100644
---- a/gdb/microblaze-tdep.h
-+++ b/gdb/microblaze-tdep.h
+Index: gdb-9.2/gdb/microblaze-tdep.h
+===================================================================
+--- gdb-9.2.orig/gdb/microblaze-tdep.h
++++ gdb-9.2/gdb/microblaze-tdep.h
 @@ -27,7 +27,7 @@ struct microblaze_gregset
     microblaze_gregset() {}
     unsigned int gregs[32];
@@ -922,20 +930,19 @@
  };
  
  struct microblaze_frame_cache
-@@ -128,7 +128,8 @@ struct microblaze_frame_cache
+@@ -128,7 +128,7 @@ struct microblaze_frame_cache
    struct trad_frame_saved_reg *saved_regs;
  };
  /* All registers are 32 bits.  */
 -#define MICROBLAZE_REGISTER_SIZE 4
-+extern int microblaze_reg_size;
-+#define MICROBLAZE_REGISTER_SIZE microblaze_reg_size
++//#define MICROBLAZE_REGISTER_SIZE 8
  
  /* MICROBLAZE_BREAKPOINT defines the breakpoint that should be used.
     Only used for native debugging.  */
-diff --git a/gdb/regformats/microblaze-with-stack-protect.dat b/gdb/regformats/microblaze-with-stack-protect.dat
-index 8040a7b3fd0..450e321d49e 100644
---- a/gdb/regformats/microblaze-with-stack-protect.dat
-+++ b/gdb/regformats/microblaze-with-stack-protect.dat
+Index: gdb-9.2/gdb/regformats/microblaze-with-stack-protect.dat
+===================================================================
+--- gdb-9.2.orig/gdb/regformats/microblaze-with-stack-protect.dat
++++ gdb-9.2/gdb/regformats/microblaze-with-stack-protect.dat
 @@ -60,5 +60,5 @@ expedite:r1,rpc
  32:rtlbsx
  32:rtlblo
@@ -944,6 +951,3 @@
 -32:rshr
 +32:slr
 +32:shr
--- 
-2.17.1
-
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0042-porting-GDB-for-linux.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0042-porting-GDB-for-linux.patch
new file mode 100644
index 0000000..947ac9a
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0042-porting-GDB-for-linux.patch
@@ -0,0 +1,151 @@
+From ecccc76dd8ea2e75cc31435b5885173690b3e07a Mon Sep 17 00:00:00 2001
+From: Mahesh Bodapati <mbodapat@xilinx.com>
+Date: Thu, 12 Dec 2019 14:56:17 +0530
+Subject: [PATCH 42/52] porting GDB for linux
+
+---
+ gdb/features/microblaze-linux.xml | 12 ++++++++++
+ gdb/gdbserver/Makefile.in         |  2 ++
+ gdb/gdbserver/configure.srv       |  3 ++-
+ gdb/microblaze-linux-tdep.c       | 39 ++++++++++++++++++++++++-------
+ 4 files changed, 47 insertions(+), 9 deletions(-)
+ create mode 100644 gdb/features/microblaze-linux.xml
+
+Index: gdb-9.2/gdb/features/microblaze-linux.xml
+===================================================================
+--- /dev/null
++++ gdb-9.2/gdb/features/microblaze-linux.xml
+@@ -0,0 +1,12 @@
++<?xml version="1.0"?>
++<!-- Copyright (C) 2014-2018 Free Software Foundation, Inc.
++
++     Copying and distribution of this file, with or without modification,
++     are permitted in any medium without royalty provided the copyright
++     notice and this notice are preserved.  -->
++
++<!DOCTYPE target SYSTEM "gdb-target.dtd">
++<target>
++  <osabi>GNU/Linux</osabi>
++  <xi:include href="microblaze-core.xml"/>
++</target>
+Index: gdb-9.2/gdb/gdbserver/Makefile.in
+===================================================================
+--- gdb-9.2.orig/gdb/gdbserver/Makefile.in
++++ gdb-9.2/gdb/gdbserver/Makefile.in
+@@ -659,6 +659,8 @@ gdbsupport/%.o: ../gdbsupport/%.c
+ 
+ %-generated.c: ../regformats/rs6000/%.dat | $(regdat_sh)
+ 	$(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@
++microblaze-linux.c : $(srcdir)/../regformats/reg-microblaze.dat $(regdat_sh)
++	$(ECHO_REGDAT) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-microblaze.dat microblaze-linux.c
+ 
+ #
+ # Dependency tracking.
+Index: gdb-9.2/gdb/gdbserver/configure.srv
+===================================================================
+--- gdb-9.2.orig/gdb/gdbserver/configure.srv
++++ gdb-9.2/gdb/gdbserver/configure.srv
+@@ -184,8 +184,9 @@ case "${target}" in
+ 			srv_linux_usrregs=yes
+ 			srv_linux_thread_db=yes
+ 			;;
+-  microblaze*-*-linux*)	srv_regobj=microblaze-linux.o
++  microblaze*-*-linux*)	srv_regobj="microblaze-linux.o"
+ 			srv_tgtobj="$srv_linux_obj linux-microblaze-low.o "
++			srv_xmlfiles="microblaze-linux.xml"
+ 			srv_linux_regsets=yes
+ 			srv_linux_usrregs=yes
+ 			srv_linux_thread_db=yes
+Index: gdb-9.2/gdb/microblaze-linux-tdep.c
+===================================================================
+--- gdb-9.2.orig/gdb/microblaze-linux-tdep.c
++++ gdb-9.2/gdb/microblaze-linux-tdep.c
+@@ -41,7 +41,7 @@
+ 
+ #ifndef REGSET_H
+ #define REGSET_H 1
+-
++int MICROBLAZE_REGISTER_SIZE=4;
+ struct gdbarch;
+ struct regcache;
+ 
+@@ -115,7 +115,7 @@ microblaze_debug (const char *fmt, ...)
+        va_end (args);
+     }
+ }
+-
++#if 0
+ static int
+ microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, 
+ 					   struct bp_target_info *bp_tgt)
+@@ -131,7 +131,7 @@ microblaze_linux_memory_remove_breakpoin
+   bp = gdbarch_breakpoint_from_pc (gdbarch, &addr, &bplen);
+ 
+   /* Make sure we see the memory breakpoints.  */
+-  cleanup = make_show_memory_breakpoints_cleanup (1);
++  cleanup = make_scoped_restore_show_memory_breakpoints (1);
+   val = target_read_memory (addr, old_contents, bplen);
+ 
+   /* If our breakpoint is no longer at the address, this means that the
+@@ -146,6 +146,7 @@ microblaze_linux_memory_remove_breakpoin
+   do_cleanups (cleanup);
+   return val;
+ }
++#endif
+ 
+ static void
+ microblaze_linux_sigtramp_cache (struct frame_info *next_frame,
+@@ -248,8 +249,8 @@ microblaze_linux_init_abi (struct gdbarc
+ 
+   linux_init_abi (info, gdbarch);
+ 
+-  set_gdbarch_memory_remove_breakpoint (gdbarch,
+-					microblaze_linux_memory_remove_breakpoint);
++//  set_gdbarch_memory_remove_breakpoint (gdbarch,
++//					microblaze_linux_memory_remove_breakpoint);
+ 
+   /* Shared library handling.  */
+   set_solib_svr4_fetch_link_map_offsets (gdbarch,
+@@ -261,10 +262,30 @@ microblaze_linux_init_abi (struct gdbarc
+ 
+   /* BFD target for core files.  */
+   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
+-    set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblaze");
++    {
++      if (info.bfd_arch_info->mach == bfd_mach_microblaze64) {
++          set_gdbarch_gcore_bfd_target (gdbarch, "elf64-microblaze");
++          MICROBLAZE_REGISTER_SIZE=8;
++        }
++      else
++        set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblaze");
++    }
+   else
+-    set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblazeel");
++    {
++      if (info.bfd_arch_info->mach == bfd_mach_microblaze64) {
++          set_gdbarch_gcore_bfd_target (gdbarch, "elf64-microblazeel");
++          MICROBLAZE_REGISTER_SIZE=8;
++        }
++      else
++        set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblazeel");
++    }
+ 
++  switch (info.bfd_arch_info->mach)
++    {
++    case bfd_mach_microblaze64:
++      set_gdbarch_ptr_bit (gdbarch, 64);
++    break;
++    }
+ 
+   /* Shared library handling.  */
+   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
+@@ -278,6 +299,8 @@ microblaze_linux_init_abi (struct gdbarc
+ void
+ _initialize_microblaze_linux_tdep (void)
+ {
+-  gdbarch_register_osabi (bfd_arch_microblaze, 0, GDB_OSABI_LINUX, 
++  gdbarch_register_osabi (bfd_arch_microblaze, bfd_mach_microblaze, GDB_OSABI_LINUX, 
++			  microblaze_linux_init_abi);
++  gdbarch_register_osabi (bfd_arch_microblaze, bfd_mach_microblaze64, GDB_OSABI_LINUX, 
+ 			  microblaze_linux_init_abi);
+ }
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0043-Binutils-security-check-is-causing-build-error-for-w.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0043-Binutils-security-check-is-causing-build-error-for-w.patch
new file mode 100644
index 0000000..bfe57a8
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0043-Binutils-security-check-is-causing-build-error-for-w.patch
@@ -0,0 +1,32 @@
+From 187f46b3a0d31c5b1eac0ce9ddc7c136b2d53d70 Mon Sep 17 00:00:00 2001
+From: Mahesh Bodapati <mbodapat@xilinx.com>
+Date: Mon, 11 Mar 2019 13:57:42 +0530
+Subject: [PATCH 43/52] Binutils security check is causing build error for
+ windows builds.commenting for now.
+
+---
+ bfd/elf-attrs.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+Index: gdb-9.2/bfd/elf-attrs.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf-attrs.c
++++ gdb-9.2/bfd/elf-attrs.c
+@@ -440,7 +440,8 @@ _bfd_elf_parse_attributes (bfd *abfd, El
+   /* PR 17512: file: 2844a11d.  */
+   if (hdr->sh_size == 0)
+     return;
+-  if (hdr->sh_size > bfd_get_file_size (abfd))
++#if 0
++if (hdr->sh_size > bfd_get_file_size (abfd))
+     {
+       /* xgettext:c-format */
+       _bfd_error_handler (_("%pB: error: attribute section '%pA' too big: %#llx"),
+@@ -448,6 +449,7 @@ _bfd_elf_parse_attributes (bfd *abfd, El
+       bfd_set_error (bfd_error_invalid_operation);
+       return;
+     }
++#endif
+ 
+   contents = (bfd_byte *) bfd_malloc (hdr->sh_size + 1);
+   if (!contents)
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0044-Correcting-the-register-names-from-slr-shr-to-rslr-r.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0044-Correcting-the-register-names-from-slr-shr-to-rslr-r.patch
new file mode 100644
index 0000000..a60ed5e
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0044-Correcting-the-register-names-from-slr-shr-to-rslr-r.patch
@@ -0,0 +1,143 @@
+From 2c3cd36f5198c5b023f3dd157ef3fa90ab5893d7 Mon Sep 17 00:00:00 2001
+From: Nagaraju <nmekala@xilinx.com>
+Date: Thu, 19 Dec 2019 12:22:04 +0530
+Subject: [PATCH 44/52] Correcting the register names from slr & shr to rslr &
+ rshr
+
+---
+ gdb/features/microblaze-core.xml               | 4 ++--
+ gdb/features/microblaze-stack-protect.xml      | 4 ++--
+ gdb/features/microblaze-with-stack-protect.c   | 4 ++--
+ gdb/features/microblaze.c                      | 4 ++--
+ gdb/features/microblaze64-core.xml             | 4 ++--
+ gdb/features/microblaze64-stack-protect.xml    | 4 ++--
+ gdb/features/microblaze64-with-stack-protect.c | 4 ++--
+ gdb/features/microblaze64.c                    | 4 ++--
+ gdb/microblaze-tdep.c                          | 2 +-
+ 9 files changed, 17 insertions(+), 17 deletions(-)
+
+Index: gdb-9.2/gdb/features/microblaze-core.xml
+===================================================================
+--- gdb-9.2.orig/gdb/features/microblaze-core.xml
++++ gdb-9.2/gdb/features/microblaze-core.xml
+@@ -64,6 +64,6 @@
+   <reg name="rtlbsx" bitsize="32"/>
+   <reg name="rtlblo" bitsize="32"/>
+   <reg name="rtlbhi" bitsize="32"/>
+-  <reg name="slr" bitsize="32"/>
+-  <reg name="shr" bitsize="32"/>
++  <reg name="rslr" bitsize="32"/>
++  <reg name="rshr" bitsize="32"/>
+ </feature>
+Index: gdb-9.2/gdb/features/microblaze-stack-protect.xml
+===================================================================
+--- gdb-9.2.orig/gdb/features/microblaze-stack-protect.xml
++++ gdb-9.2/gdb/features/microblaze-stack-protect.xml
+@@ -7,6 +7,6 @@
+ 
+ <!DOCTYPE feature SYSTEM "gdb-target.dtd">
+ <feature name="org.gnu.gdb.microblaze.stack-protect">
+-  <reg name="slr" bitsize="32"/>
+-  <reg name="shr" bitsize="32"/>
++  <reg name="rslr" bitsize="32"/>
++  <reg name="rshr" bitsize="32"/>
+ </feature>
+Index: gdb-9.2/gdb/features/microblaze-with-stack-protect.c
+===================================================================
+--- gdb-9.2.orig/gdb/features/microblaze-with-stack-protect.c
++++ gdb-9.2/gdb/features/microblaze-with-stack-protect.c
+@@ -72,8 +72,8 @@ initialize_tdesc_microblaze_with_stack_p
+   tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int");
+ 
+   feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.stack-protect");
+-  tdesc_create_reg (feature, "slr", 57, 1, NULL, 32, "int");
+-  tdesc_create_reg (feature, "shr", 58, 1, NULL, 32, "int");
++  tdesc_create_reg (feature, "rslr", 57, 1, NULL, 32, "int");
++  tdesc_create_reg (feature, "rshr", 58, 1, NULL, 32, "int");
+ 
+   tdesc_microblaze_with_stack_protect = result;
+ }
+Index: gdb-9.2/gdb/features/microblaze.c
+===================================================================
+--- gdb-9.2.orig/gdb/features/microblaze.c
++++ gdb-9.2/gdb/features/microblaze.c
+@@ -70,8 +70,8 @@ initialize_tdesc_microblaze (void)
+   tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int");
+   tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int");
+   tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int");
+-  tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64");
+-  tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64");
++  tdesc_create_reg (feature, "rslr", 57, 1, NULL, 64, "uint64");
++  tdesc_create_reg (feature, "rshr", 58, 1, NULL, 64, "uint64");
+ 
+   tdesc_microblaze = result;
+ }
+Index: gdb-9.2/gdb/features/microblaze64-core.xml
+===================================================================
+--- gdb-9.2.orig/gdb/features/microblaze64-core.xml
++++ gdb-9.2/gdb/features/microblaze64-core.xml
+@@ -64,6 +64,6 @@
+   <reg name="rtlbsx" bitsize="32"/>
+   <reg name="rtlblo" bitsize="32"/>
+   <reg name="rtlbhi" bitsize="32"/>
+-  <reg name="slr" bitsize="64"/>
+-  <reg name="shr" bitsize="64"/>
++  <reg name="rslr" bitsize="64"/>
++  <reg name="rshr" bitsize="64"/>
+ </feature>
+Index: gdb-9.2/gdb/features/microblaze64-stack-protect.xml
+===================================================================
+--- gdb-9.2.orig/gdb/features/microblaze64-stack-protect.xml
++++ gdb-9.2/gdb/features/microblaze64-stack-protect.xml
+@@ -7,6 +7,6 @@
+ 
+ <!DOCTYPE feature SYSTEM "gdb-target.dtd">
+ <feature name="org.gnu.gdb.microblaze64.stack-protect">
+-  <reg name="slr" bitsize="64"/>
+-  <reg name="shr" bitsize="64"/>
++  <reg name="rslr" bitsize="64"/>
++  <reg name="rshr" bitsize="64"/>
+ </feature>
+Index: gdb-9.2/gdb/features/microblaze64-with-stack-protect.c
+===================================================================
+--- gdb-9.2.orig/gdb/features/microblaze64-with-stack-protect.c
++++ gdb-9.2/gdb/features/microblaze64-with-stack-protect.c
+@@ -72,8 +72,8 @@ initialize_tdesc_microblaze64_with_stack
+   tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int");
+ 
+   feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze64.stack-protect");
+-  tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64");
+-  tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64");
++  tdesc_create_reg (feature, "rslr", 57, 1, NULL, 64, "uint64");
++  tdesc_create_reg (feature, "rshr", 58, 1, NULL, 64, "uint64");
+ 
+   tdesc_microblaze64_with_stack_protect = result;
+ }
+Index: gdb-9.2/gdb/features/microblaze64.c
+===================================================================
+--- gdb-9.2.orig/gdb/features/microblaze64.c
++++ gdb-9.2/gdb/features/microblaze64.c
+@@ -70,8 +70,8 @@ initialize_tdesc_microblaze64 (void)
+   tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int");
+   tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int");
+   tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int");
+-  tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64");
+-  tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64");
++  tdesc_create_reg (feature, "rslr", 57, 1, NULL, 64, "uint64");
++  tdesc_create_reg (feature, "rshr", 58, 1, NULL, 64, "uint64");
+ 
+   tdesc_microblaze64 = result;
+ }
+Index: gdb-9.2/gdb/microblaze-tdep.c
+===================================================================
+--- gdb-9.2.orig/gdb/microblaze-tdep.c
++++ gdb-9.2/gdb/microblaze-tdep.c
+@@ -77,7 +77,7 @@ static const char *microblaze_register_n
+   "rpvr0", "rpvr1", "rpvr2", "rpvr3", "rpvr4", "rpvr5", "rpvr6",
+   "rpvr7", "rpvr8", "rpvr9", "rpvr10", "rpvr11",
+   "redr", "rpid", "rzpr", "rtlbx", "rtlbsx", "rtlblo", "rtlbhi",
+-  "slr", "shr"
++  "rslr", "rshr"
+ };
+ 
+ #define MICROBLAZE_NUM_REGS ARRAY_SIZE (microblaze_register_names)
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0045-Removing-the-header-gdb_assert.h-from-MB-target-file.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0045-Removing-the-header-gdb_assert.h-from-MB-target-file.patch
new file mode 100644
index 0000000..eac20e3
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0045-Removing-the-header-gdb_assert.h-from-MB-target-file.patch
@@ -0,0 +1,21 @@
+From 38e5305c8e008ded46a9f351cd7f79c8f81df8fd Mon Sep 17 00:00:00 2001
+From: Nagaraju <nmekala@xilinx.com>
+Date: Fri, 17 Jan 2020 15:45:48 +0530
+Subject: [PATCH 45/52] Removing the header "gdb_assert.h" from MB target file
+
+---
+ gdb/microblaze-linux-tdep.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+Index: gdb-9.2/gdb/microblaze-linux-tdep.c
+===================================================================
+--- gdb-9.2.orig/gdb/microblaze-linux-tdep.c
++++ gdb-9.2/gdb/microblaze-linux-tdep.c
+@@ -37,7 +37,6 @@
+ #include "linux-tdep.h"
+ #include "glibc-tdep.h"
+ 
+-#include "gdb_assert.h"
+ 
+ #ifndef REGSET_H
+ #define REGSET_H 1
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0046-bfd-cpu-microblaze.c-Enhance-disassembler.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0046-bfd-cpu-microblaze.c-Enhance-disassembler.patch
new file mode 100644
index 0000000..de93c81
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0046-bfd-cpu-microblaze.c-Enhance-disassembler.patch
@@ -0,0 +1,36 @@
+From eba7561a36a20c814ca69dc42fa8b0b7f4a33510 Mon Sep 17 00:00:00 2001
+From: Mark Hatle <mark.hatle@xilinx.com>
+Date: Thu, 3 Dec 2020 10:08:53 -0800
+Subject: [PATCH 46/52] bfd/cpu-microblaze.c: Enhance disassembler
+
+See commit aebcfb76fc165795e67917cb67cf985c4dfdc577 for why this is needed.
+
+Signed-off-by: Mark Hatle <mark.hatle@xilinx.com>
+---
+ bfd/cpu-microblaze.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+Index: gdb-9.2/bfd/cpu-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/cpu-microblaze.c
++++ gdb-9.2/bfd/cpu-microblaze.c
+@@ -39,7 +39,8 @@ const bfd_arch_info_type bfd_microblaze_
+   bfd_default_compatible,	/* Architecture comparison function.  */
+   bfd_default_scan,	   	/* String to architecture conversion.  */
+   bfd_arch_default_fill,	/* Default fill.  */
+-  &bfd_microblaze_arch[1]  	/* Next in list.  */
++  &bfd_microblaze_arch[1],  	/* Next in list.  */
++  0 /* Maximum offset of a reloc from the start of an insn.  */
+ },
+ {
+   32,				/* Bits in a word.  */
+@@ -71,7 +72,8 @@ const bfd_arch_info_type bfd_microblaze_
+   bfd_default_compatible,	/* Architecture comparison function.  */
+   bfd_default_scan,	   	/* String to architecture conversion.  */
+   bfd_arch_default_fill,	/* Default fill.  */
+-  &bfd_microblaze_arch[1]   	/* Next in list.  */
++  &bfd_microblaze_arch[1],   	/* Next in list.  */
++  0 /* Maximum offset of a reloc from the start of an insn.  */
+ },
+ {
+   64,		  		/* 32 bits in a word.  */
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0047-bfd-elf64-microblaze.c-Fix-build-failures.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0047-bfd-elf64-microblaze.c-Fix-build-failures.patch
new file mode 100644
index 0000000..ad63a72
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0047-bfd-elf64-microblaze.c-Fix-build-failures.patch
@@ -0,0 +1,84 @@
+From c848ddceb98359db1efb3ed0d1e7b5a90053dddf Mon Sep 17 00:00:00 2001
+From: Mark Hatle <mark.hatle@xilinx.com>
+Date: Thu, 3 Dec 2020 11:02:11 -0800
+Subject: [PATCH 47/52] bfd/elf64-microblaze.c: Fix build failures
+
+Signed-off-by: Mark Hatle <mark.hatle@xilinx.com>
+---
+ bfd/elf64-microblaze.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+Index: gdb-9.2/bfd/elf64-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf64-microblaze.c
++++ gdb-9.2/bfd/elf64-microblaze.c
+@@ -1572,7 +1572,7 @@ microblaze_elf_relocate_section (bfd *ou
+ 			  {
+ 			    BFD_FAIL ();
+ 			    (*_bfd_error_handler)
+-			      (_("%B: probably compiled without -fPIC?"),
++			      (_("%pB: probably compiled without -fPIC?"),
+ 			       input_bfd);
+ 			    bfd_set_error (bfd_error_bad_value);
+ 			    return FALSE;
+@@ -2691,7 +2691,7 @@ microblaze_elf_check_relocs (bfd * abfd,
+ 		/* If this is a global symbol, we count the number of
+ 		   relocations we need for this symbol.  */
+ 		if (h != NULL)
+-		  head = &h->dyn_relocs;
++		  head = &((struct elf64_mb_link_hash_entry *) h)->dyn_relocs;
+ 		else
+ 		  {
+ 		    /* Track dynamic relocs needed for local syms too.
+@@ -2911,7 +2911,7 @@ microblaze_elf_adjust_dynamic_symbol (st
+ 
+   /* If we didn't find any dynamic relocs in read-only sections, then
+      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
+-  if (!_bfd_elf_readonly_dynrelocs (h))
++  if (p == NULL)
+     {
+       h->non_got_ref = 0;
+       return TRUE;
+@@ -3096,7 +3096,7 @@ allocate_dynrelocs (struct elf_link_hash
+   else
+     h->got.offset = (bfd_vma) -1;
+ 
+-  if (h->dyn_relocs == NULL)
++  if (eh->dyn_relocs == NULL)
+     return TRUE;
+ 
+   /* In the shared -Bsymbolic case, discard space allocated for
+@@ -3113,7 +3113,7 @@ allocate_dynrelocs (struct elf_link_hash
+ 	{
+ 	  struct elf64_mb_dyn_relocs **pp;
+ 
+-	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
++	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+ 	    {
+ 	      p->count -= p->pc_count;
+ 	      p->pc_count = 0;
+@@ -3124,7 +3124,7 @@ allocate_dynrelocs (struct elf_link_hash
+ 	    }
+ 	}
+       else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
+-	h->dyn_relocs = NULL;
++	eh->dyn_relocs = NULL;
+     }
+   else
+     {
+@@ -3154,13 +3154,13 @@ allocate_dynrelocs (struct elf_link_hash
+ 	    goto keep;
+ 	}
+ 
+-      h->dyn_relocs = NULL;
++      eh->dyn_relocs = NULL;
+ 
+     keep: ;
+     }
+ 
+   /* Finally, allocate space.  */
+-  for (p = h->dyn_relocs; p != NULL; p = p->next)
++  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+     {
+       asection *sreloc = elf_section_data (p->sec)->sreloc;
+       sreloc->size += p->count * sizeof (Elf64_External_Rela);
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0048-bfd-elf-microblaze.c-Remove-obsolete-entries.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0048-bfd-elf-microblaze.c-Remove-obsolete-entries.patch
new file mode 100644
index 0000000..bee50ed
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0048-bfd-elf-microblaze.c-Remove-obsolete-entries.patch
@@ -0,0 +1,72 @@
+From 359ee1650d98372a2f2cd360a7ea9877077f6ece Mon Sep 17 00:00:00 2001
+From: Mark Hatle <mark.hatle@xilinx.com>
+Date: Thu, 3 Dec 2020 11:23:26 -0800
+Subject: [PATCH 48/52] bfd/elf*-microblaze.c: Remove obsolete entries
+
+Replace microblaze_elf_merge_private_bfd_data with a direct call to
+_bfd_generic_verify_endian_match, this simplifies the implementation.
+
+Remove microblaze_elf_gc_sweep_hook, removed in 2017.
+
+Signed-off-by: Mark Hatle <mark.hatle@xilinx.com>
+---
+ bfd/elf64-microblaze.c | 29 +----------------------------
+ 1 file changed, 1 insertion(+), 28 deletions(-)
+
+Index: gdb-9.2/bfd/elf64-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf64-microblaze.c
++++ gdb-9.2/bfd/elf64-microblaze.c
+@@ -1690,21 +1690,6 @@ microblaze_elf_relocate_section (bfd *ou
+   return ret;
+ }
+ 
+-/* Merge backend specific data from an object file to the output
+-   object file when linking.
+-
+-   Note: We only use this hook to catch endian mismatches.  */
+-static bfd_boolean
+-microblaze_elf_merge_private_bfd_data (bfd * ibfd, bfd * obfd)
+-{
+-  /* Check if we have the same endianess.  */
+-  if (! _bfd_generic_verify_endian_match (ibfd, obfd))
+-    return FALSE;
+-
+-  return TRUE;
+-}
+-
+-
+ /* Calculate fixup value for reference.  */
+ 
+ static int
+@@ -2427,17 +2412,6 @@ microblaze_elf_gc_mark_hook (asection *s
+   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
+ }
+ 
+-/* Update the got entry reference counts for the section being removed.  */
+-
+-static bfd_boolean
+-microblaze_elf_gc_sweep_hook (bfd * abfd ATTRIBUTE_UNUSED,
+-     			      struct bfd_link_info * info ATTRIBUTE_UNUSED,
+-     			      asection * sec ATTRIBUTE_UNUSED,
+-     			      const Elf_Internal_Rela * relocs ATTRIBUTE_UNUSED)
+-{
+-  return TRUE;
+-}
+-
+ /* PIC support.  */
+ 
+ #define PLT_ENTRY_SIZE 16
+@@ -3704,11 +3678,10 @@ microblaze_elf_add_symbol_hook (bfd *abf
+ #define bfd_elf64_bfd_is_local_label_name       microblaze_elf_is_local_label_name
+ #define elf_backend_relocate_section		microblaze_elf_relocate_section
+ #define bfd_elf64_bfd_relax_section             microblaze_elf_relax_section
+-#define bfd_elf64_bfd_merge_private_bfd_data    microblaze_elf_merge_private_bfd_data
++#define bfd_elf64_bfd_merge_private_bfd_data    _bfd_generic_verify_endian_match
+ #define bfd_elf64_bfd_reloc_name_lookup		microblaze_elf_reloc_name_lookup
+ 
+ #define elf_backend_gc_mark_hook		microblaze_elf_gc_mark_hook
+-#define elf_backend_gc_sweep_hook		microblaze_elf_gc_sweep_hook
+ #define elf_backend_check_relocs                microblaze_elf_check_relocs
+ #define elf_backend_copy_indirect_symbol        microblaze_elf_copy_indirect_symbol
+ #define bfd_elf64_bfd_link_hash_table_create    microblaze_elf_link_hash_table_create
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0049-bfd-elf64-microblaze.c-Resolve-various-compiler-warn.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0049-bfd-elf64-microblaze.c-Resolve-various-compiler-warn.patch
new file mode 100644
index 0000000..9b95e10
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0049-bfd-elf64-microblaze.c-Resolve-various-compiler-warn.patch
@@ -0,0 +1,42 @@
+From bee1ab76011aca029f89f98b9388aeb0390ee90f Mon Sep 17 00:00:00 2001
+From: Mark Hatle <mark.hatle@xilinx.com>
+Date: Thu, 3 Dec 2020 12:02:25 -0800
+Subject: [PATCH 49/52] bfd/elf64-microblaze.c: Resolve various compiler
+ warnings
+
+Signed-off-by: Mark Hatle <mark.hatle@xilinx.com>
+---
+ bfd/elf64-microblaze.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: gdb-9.2/bfd/elf64-microblaze.c
+===================================================================
+--- gdb-9.2.orig/bfd/elf64-microblaze.c
++++ gdb-9.2/bfd/elf64-microblaze.c
+@@ -1258,6 +1258,7 @@ microblaze_elf_relocate_section (bfd *ou
+ 	      goto dogot;
+ 	    case (int) R_MICROBLAZE_TLSLD:
+ 	      tls_type = (TLS_TLS | TLS_LD);
++              /* Fall through. */
+ 	    dogot:
+ 	    case (int) R_MICROBLAZE_GOT_64:
+ 	      {
+@@ -2569,6 +2570,7 @@ microblaze_elf_check_relocs (bfd * abfd,
+           tls_type |= (TLS_TLS | TLS_LD);
+         dogottls:
+           sec->has_tls_reloc = 1;
++          /* Fall through. */
+         case R_MICROBLAZE_GOT_64:
+           if (htab->sgot == NULL)
+             {
+@@ -2802,10 +2804,8 @@ microblaze_elf_adjust_dynamic_symbol (st
+   struct elf64_mb_link_hash_table *htab;
+   struct elf64_mb_link_hash_entry * eh;
+   struct elf64_mb_dyn_relocs *p;
+-  asection *sdynbss;
+   asection *s, *srel;
+   unsigned int power_of_two;
+-  bfd *dynobj;
+ 
+   htab = elf64_mb_hash_table (info);
+   if (htab == NULL)
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0050-opcodes-microblaze-dis.c-Fix-compile-warnings.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0050-opcodes-microblaze-dis.c-Fix-compile-warnings.patch
new file mode 100644
index 0000000..ba8394c
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0050-opcodes-microblaze-dis.c-Fix-compile-warnings.patch
@@ -0,0 +1,34 @@
+From a0d3bb3d528dfb75e54a0b0c6ff0d6095ba1c2c7 Mon Sep 17 00:00:00 2001
+From: Mark Hatle <mark.hatle@xilinx.com>
+Date: Thu, 3 Dec 2020 12:30:09 -0800
+Subject: [PATCH 50/52] opcodes/microblaze-dis.c: Fix compile warnings
+
+Two compiler warnings were evident, it appears both are likely real bugs.
+
+Missing type declaration for a function, and a case statement without a break.
+
+Signed-off-by: Mark Hatle <mark.hatle@xilinx.com>
+---
+ opcodes/microblaze-dis.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+Index: gdb-9.2/opcodes/microblaze-dis.c
+===================================================================
+--- gdb-9.2.orig/opcodes/microblaze-dis.c
++++ gdb-9.2/opcodes/microblaze-dis.c
+@@ -130,6 +130,7 @@ get_field_imm15 (struct string_buf *buf,
+   return p;
+ }
+ 
++static char *
+ get_field_imm16 (struct string_buf *buf, long instr)
+ {
+   char *p = strbuf (buf);
+@@ -327,6 +328,7 @@ print_insn_microblaze (bfd_vma memaddr,
+ 	  print_func (stream, "\t%s, %s, %s", get_field_rd (&buf, inst),
+ 		      get_field_r1 (&buf, inst), get_field_imm (&buf, inst));
+           /* TODO: Also print symbol */
++          break;
+ 	case INST_TYPE_RD_R1_IMMS:
+ 	  print_func (stream, "\t%s, %s, %s", get_field_rd (&buf, inst),
+ 	           get_field_r1(&buf, inst), get_field_imms (&buf, inst));
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0051-gdb-microblaze-tdep.c-Remove-unused-functions.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0051-gdb-microblaze-tdep.c-Remove-unused-functions.patch
new file mode 100644
index 0000000..f329015
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0051-gdb-microblaze-tdep.c-Remove-unused-functions.patch
@@ -0,0 +1,96 @@
+From 202c9a6e8c4e3bfe8f84d1066c8993a77e4ad4a8 Mon Sep 17 00:00:00 2001
+From: Mark Hatle <mark.hatle@xilinx.com>
+Date: Thu, 3 Dec 2020 14:51:37 -0800
+Subject: [PATCH 51/52] gdb/microblaze-tdep.c: Remove unused functions
+
+Compiler warns the removed functions are not referenced anywhere.
+
+Signed-off-by: Mark Hatle <mark.hatle@xilinx.com>
+---
+ gdb/microblaze-tdep.c | 45 -------------------------------------------
+ 1 file changed, 45 deletions(-)
+
+Index: gdb-9.2/gdb/microblaze-tdep.c
+===================================================================
+--- gdb-9.2.orig/gdb/microblaze-tdep.c
++++ gdb-9.2/gdb/microblaze-tdep.c
+@@ -140,14 +140,6 @@ microblaze_fetch_instruction (CORE_ADDR
+ constexpr gdb_byte microblaze_break_insn[] = MICROBLAZE_BREAKPOINT;
+ 
+ typedef BP_MANIPULATION (microblaze_break_insn) microblaze_breakpoint;
+-static CORE_ADDR
+-microblaze_store_arguments (struct regcache *regcache, int nargs,
+-			    struct value **args, CORE_ADDR sp,
+-			    int struct_return, CORE_ADDR struct_addr)
+-{
+-  error (_("store_arguments not implemented"));
+-  return sp;
+-}
+ #if 0
+ static int
+ microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch,
+@@ -555,12 +547,6 @@ microblaze_frame_base_address (struct fr
+   return cache->base;
+ }
+ 
+-static const struct frame_unwind *
+-microblaze_frame_sniffer (struct frame_info *next_frame)
+-{
+-  return &microblaze_frame_unwind;
+-}
+-
+ static const struct frame_base microblaze_frame_base =
+ {
+   &microblaze_frame_unwind,
+@@ -759,12 +745,6 @@ microblaze_software_single_step (struct
+ }
+ #endif
+ 
+-static void
+-microblaze_write_pc (struct regcache *regcache, CORE_ADDR pc)
+-{
+-  regcache_cooked_write_unsigned (regcache, MICROBLAZE_PC_REGNUM, pc);
+-}
+-
+ static int dwarf2_to_reg_map[78] =
+ { 0  /* r0  */,   1  /* r1  */,   2  /* r2  */,   3  /* r3  */,  /*  0- 3 */
+   4  /* r4  */,   5  /* r5  */,   6  /* r6  */,   7  /* r7  */,  /*  4- 7 */
+@@ -796,19 +776,6 @@ microblaze_dwarf2_reg_to_regnum (struct
+   return -1;
+ }
+ 
+-static void
+-microblaze_register_g_packet_guesses (struct gdbarch *gdbarch)
+-{
+-
+-  register_remote_g_packet_guess (gdbarch,
+-                                  4 * MICROBLAZE_NUM_REGS,
+-                                  tdesc_microblaze64);
+-
+-  register_remote_g_packet_guess (gdbarch,
+-                                  4 * MICROBLAZE_NUM_REGS,
+-                                  tdesc_microblaze64_with_stack_protect);
+-}
+-
+ void
+ microblaze_supply_gregset (const struct microblaze_gregset *gregset,
+                         struct regcache *regcache,
+@@ -873,18 +840,6 @@ microblaze_regset_from_core_section (str
+ }
+ 
+ 
+-static void
+-make_regs (struct gdbarch *arch)
+-{
+-  struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
+-  int mach = gdbarch_bfd_arch_info (arch)->mach;
+-  
+-  if (mach == bfd_mach_microblaze64)
+-    {
+-      set_gdbarch_ptr_bit (arch, 64);
+-    }
+-}
+-
+ static struct gdbarch *
+ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+ {
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0052-sim-Allow-microblaze-architecture.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0052-sim-Allow-microblaze-architecture.patch
new file mode 100644
index 0000000..88095de
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0052-sim-Allow-microblaze-architecture.patch
@@ -0,0 +1,37 @@
+From acee53a9c9b6cbe826dacb9f02102ae4d58e36ba Mon Sep 17 00:00:00 2001
+From: Mark Hatle <mark.hatle@kernel.crashing.org>
+Date: Thu, 6 Aug 2020 15:37:52 -0500
+Subject: [PATCH 52/52] sim: Allow microblaze* architecture
+
+Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org>
+---
+ sim/configure     | 2 +-
+ sim/configure.tgt | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+Index: gdb-9.2/sim/configure
+===================================================================
+--- gdb-9.2.orig/sim/configure
++++ gdb-9.2/sim/configure
+@@ -3795,7 +3795,7 @@ subdirs="$subdirs aarch64"
+ 
+ 
+        ;;
+-   microblaze-*-*)
++   microblaze*-*-*)
+ 
+   sim_arch=microblaze
+   subdirs="$subdirs microblaze"
+Index: gdb-9.2/sim/configure.tgt
+===================================================================
+--- gdb-9.2.orig/sim/configure.tgt
++++ gdb-9.2/sim/configure.tgt
+@@ -59,7 +59,7 @@ case "${target}" in
+    mcore-*-*)
+        SIM_ARCH(mcore)
+        ;;
+-   microblaze-*-*)
++   microblaze*-*-*)
+        SIM_ARCH(microblaze)
+        ;;
+    mips*-*-*)
diff --git a/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0053-gdb-Fix-microblaze-target-compilation.patch b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0053-gdb-Fix-microblaze-target-compilation.patch
new file mode 100644
index 0000000..01e48a0
--- /dev/null
+++ b/meta-xilinx/meta-microblaze/recipes-devtools/gdb/gdb/0053-gdb-Fix-microblaze-target-compilation.patch
@@ -0,0 +1,288 @@
+From e770e163e918c6065fc437687839bfbbd0137cff Mon Sep 17 00:00:00 2001
+From: Mark Hatle <mark.hatle@kernel.crashing.org>
+Date: Mon, 7 Dec 2020 12:03:25 -0600
+Subject: [PATCH] gdb: Fix microblaze target compilation
+
+Add microblaze-linux-nat.c to configure.nat
+
+Transition microblaze-linux-nat.c to use the new gdb C++ style functions.
+
+Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org>
+---
+ gdb/configure.nat          |  5 ++
+ gdb/microblaze-linux-nat.c | 96 ++++++++++++++------------------------
+ gdb/microblaze-tdep.h      |  3 ++
+ 3 files changed, 43 insertions(+), 61 deletions(-)
+
+diff --git a/gdb/configure.nat b/gdb/configure.nat
+index fb4522f579..2b6873f9d6 100644
+--- a/gdb/configure.nat
++++ b/gdb/configure.nat
+@@ -261,6 +261,11 @@ case ${gdb_host} in
+ 		# Host: Motorola m68k running GNU/Linux.
+ 		NATDEPFILES="${NATDEPFILES} m68k-linux-nat.o"
+ 		;;
++	    microblaze)
++		# Host: Microblaze running GNU/Linux.
++		NATDEPFILES="${NATDEPFILES} microblaze-linux-nat.o"
++		NAT_CDEPS=
++		;;
+ 	    mips)
+ 		# Host: Linux/MIPS
+ 		NATDEPFILES="${NATDEPFILES} linux-nat-trad.o \
+diff --git a/gdb/microblaze-linux-nat.c b/gdb/microblaze-linux-nat.c
+index e9b8c9c522..bac4697e1e 100644
+--- a/gdb/microblaze-linux-nat.c
++++ b/gdb/microblaze-linux-nat.c
+@@ -36,13 +36,14 @@
+ #include "dwarf2-frame.h"
+ #include "osabi.h"
+ 
+-#include "gdb_assert.h"
+-#include "gdb_string.h"
++#include "gdbsupport/gdb_assert.h"
++#include <string.h>
+ #include "target-descriptions.h"
+ #include "opcodes/microblaze-opcm.h"
+ #include "opcodes/microblaze-dis.h"
+ 
+ #include "linux-nat.h"
++#include "linux-tdep.h"
+ #include "target-descriptions.h"
+ 
+ #include <sys/user.h>
+@@ -61,22 +62,17 @@
+ /* Defines ps_err_e, struct ps_prochandle.  */
+ #include "gdb_proc_service.h"
+ 
+-/* On GNU/Linux, threads are implemented as pseudo-processes, in which
+-   case we may be tracing more than one process at a time.  In that
+-   case, inferior_ptid will contain the main process ID and the
+-   individual thread (process) ID.  get_thread_id () is used to get
+-   the thread id if it's available, and the process id otherwise.  */
+-
+-int
+-get_thread_id (ptid_t ptid)
++class microblaze_linux_nat_target final : public linux_nat_target
+ {
+-  int tid = TIDGET (ptid);
+-  if (0 == tid)
+-    tid = PIDGET (ptid);
+-  return tid;
+-}
++public:
++  /* Add our register access methods.  */
++  void fetch_registers (struct regcache *, int) override;
++  void store_registers (struct regcache *, int) override;
++
++  const struct target_desc *read_description () override;
++};
+ 
+-#define GET_THREAD_ID(PTID)	get_thread_id (PTID)
++static microblaze_linux_nat_target the_microblaze_linux_nat_target;
+ 
+ /* Non-zero if our kernel may support the PTRACE_GETREGS and
+    PTRACE_SETREGS requests, for reading and writing the
+@@ -88,7 +84,6 @@ static int
+ microblaze_register_u_addr (struct gdbarch *gdbarch, int regno)
+ {
+   int u_addr = -1;
+-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+   /* NOTE: cagney/2003-11-25: This is the word size used by the ptrace
+      interface, and not the wordsize of the program's ABI.  */
+   int wordsize = sizeof (long);
+@@ -105,18 +100,16 @@ microblaze_register_u_addr (struct gdbarch *gdbarch, int regno)
+ static void
+ fetch_register (struct regcache *regcache, int tid, int regno)
+ {
+-  struct gdbarch *gdbarch = get_regcache_arch (regcache);
+-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
++  struct gdbarch *gdbarch = regcache->arch ();
+   /* This isn't really an address.  But ptrace thinks of it as one.  */
+   CORE_ADDR regaddr = microblaze_register_u_addr (gdbarch, regno);
+   int bytes_transferred;
+-  unsigned int offset;         /* Offset of registers within the u area.  */
+-  char buf[MAX_REGISTER_SIZE];
++  char buf[MICROBLAZE_MAX_REGISTER_SIZE];
+ 
+   if (regaddr == -1)
+   {
+     memset (buf, '\0', register_size (gdbarch, regno));   /* Supply zeroes */
+-    regcache_raw_supply (regcache, regno, buf);
++    regcache->raw_supply (regno, buf);
+     return;
+   }
+ 
+@@ -149,14 +142,14 @@ fetch_register (struct regcache *regcache, int tid, int regno)
+   {
+     /* Little-endian values are always found at the left end of the
+        bytes transferred.  */
+-    regcache_raw_supply (regcache, regno, buf);
++    regcache->raw_supply (regno, buf);
+   }
+   else if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
+   {
+     /* Big-endian values are found at the right end of the bytes
+        transferred.  */
+     size_t padding = (bytes_transferred - register_size (gdbarch, regno));
+-    regcache_raw_supply (regcache, regno, buf + padding);
++    regcache->raw_supply (regno, buf + padding);
+   }
+   else
+     internal_error (__FILE__, __LINE__,
+@@ -175,8 +168,6 @@ fetch_register (struct regcache *regcache, int tid, int regno)
+ static int
+ fetch_all_gp_regs (struct regcache *regcache, int tid)
+ {
+-  struct gdbarch *gdbarch = get_regcache_arch (regcache);
+-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+   gdb_gregset_t gregset;
+ 
+   if (ptrace (PTRACE_GETREGS, tid, 0, (void *) &gregset) < 0)
+@@ -204,8 +195,6 @@ fetch_all_gp_regs (struct regcache *regcache, int tid)
+ static void
+ fetch_gp_regs (struct regcache *regcache, int tid)
+ {
+-  struct gdbarch *gdbarch = get_regcache_arch (regcache);
+-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+   int i;
+ 
+   if (have_ptrace_getsetregs)
+@@ -223,13 +212,12 @@ fetch_gp_regs (struct regcache *regcache, int tid)
+ static void
+ store_register (const struct regcache *regcache, int tid, int regno)
+ {
+-  struct gdbarch *gdbarch = get_regcache_arch (regcache);
+-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
++  struct gdbarch *gdbarch = regcache->arch ();
+   /* This isn't really an address.  But ptrace thinks of it as one.  */
+   CORE_ADDR regaddr = microblaze_register_u_addr (gdbarch, regno);
+   int i;
+   size_t bytes_to_transfer;
+-  char buf[MAX_REGISTER_SIZE];
++  char buf[MICROBLAZE_MAX_REGISTER_SIZE];
+ 
+   if (regaddr == -1)
+     return;
+@@ -242,13 +230,13 @@ store_register (const struct regcache *regcache, int tid, int regno)
+   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
+   {
+     /* Little-endian values always sit at the left end of the buffer.  */
+-    regcache_raw_collect (regcache, regno, buf);
++    regcache->raw_collect (regno, buf);
+   }
+   else if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
+   {
+     /* Big-endian values sit at the right end of the buffer.  */
+     size_t padding = (bytes_to_transfer - register_size (gdbarch, regno));
+-    regcache_raw_collect (regcache, regno, buf + padding);
++    regcache->raw_collect (regno, buf + padding);
+   }
+ 
+   for (i = 0; i < bytes_to_transfer; i += sizeof (long))
+@@ -281,8 +269,6 @@ store_register (const struct regcache *regcache, int tid, int regno)
+ static int
+ store_all_gp_regs (const struct regcache *regcache, int tid, int regno)
+ {
+-  struct gdbarch *gdbarch = get_regcache_arch (regcache);
+-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+   gdb_gregset_t gregset;
+ 
+   if (ptrace (PTRACE_GETREGS, tid, 0, (void *) &gregset) < 0)
+@@ -319,8 +305,6 @@ store_all_gp_regs (const struct regcache *regcache, int tid, int regno)
+ static void
+ store_gp_regs (const struct regcache *regcache, int tid, int regno)
+ {
+-  struct gdbarch *gdbarch = get_regcache_arch (regcache);
+-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+   int i;
+ 
+   if (have_ptrace_getsetregs)
+@@ -339,12 +323,12 @@ store_gp_regs (const struct regcache *regcache, int tid, int regno)
+    regno == -1, otherwise fetch all general registers or all floating
+    point registers depending upon the value of regno.  */
+ 
+-static void
+-microblaze_linux_fetch_inferior_registers (struct target_ops *ops,
+-				    struct regcache *regcache, int regno)
++void
++microblaze_linux_nat_target::fetch_registers (struct regcache * regcache,
++                                              int regno)
+ {
+   /* Get the thread id for the ptrace call.  */
+-  int tid = GET_THREAD_ID (inferior_ptid);
++  int tid = regcache->ptid ().lwp ();
+ 
+   if (regno == -1)
+     fetch_gp_regs (regcache, tid);
+@@ -356,12 +340,12 @@ microblaze_linux_fetch_inferior_registers (struct target_ops *ops,
+    regno == -1, otherwise store all general registers or all floating
+    point registers depending upon the value of regno.  */
+ 
+-static void
+-microblaze_linux_store_inferior_registers (struct target_ops *ops,
+-				    struct regcache *regcache, int regno)
++void
++microblaze_linux_nat_target::store_registers (struct regcache *regcache,
++                                              int regno)
+ {
+   /* Get the thread id for the ptrace call.  */
+-  int tid = GET_THREAD_ID (inferior_ptid);
++  int tid = regcache->ptid ().lwp ();
+ 
+   if (regno >= 0)
+     store_register (regcache, tid, regno);
+@@ -398,12 +382,12 @@ supply_fpregset (struct regcache *regcache, const gdb_fpregset_t *fpregsetp)
+   /* FIXME. */
+ }
+ 
+-static const struct target_desc *
+-microblaze_linux_read_description (struct target_ops *ops)
++const struct target_desc *
++microblaze_linux_nat_target::read_description ()
+ {
+-  CORE_ADDR microblaze_hwcap = 0;
++  CORE_ADDR microblaze_hwcap = linux_get_hwcap (this);
+ 
+-  if (target_auxv_search (ops, AT_HWCAP, &microblaze_hwcap) != 1)
++  if (microblaze_hwcap != 1)
+     return NULL;
+ 
+   return NULL;
+@@ -415,17 +399,7 @@ void _initialize_microblaze_linux_nat (void);
+ void
+ _initialize_microblaze_linux_nat (void)
+ {
+-  struct target_ops *t;
+-
+-  /* Fill in the generic GNU/Linux methods.  */
+-  t = linux_target ();
+-
+-  /* Add our register access methods.  */
+-  t->to_fetch_registers = microblaze_linux_fetch_inferior_registers;
+-  t->to_store_registers = microblaze_linux_store_inferior_registers;
+-
+-  t->to_read_description = microblaze_linux_read_description;
+-
+   /* Register the target.  */
+-  linux_nat_add_target (t);
++  linux_target = &the_microblaze_linux_nat_target;
++  add_inf_child_target (&the_microblaze_linux_nat_target);
+ }
+diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h
+index c0fc900733..c777d93a95 100644
+--- a/gdb/microblaze-tdep.h
++++ b/gdb/microblaze-tdep.h
+@@ -106,6 +106,9 @@ enum microblaze_regnum
+   MICROBLAZE_NUM_REGS, MICROBLAZE_NUM_CORE_REGS = MICROBLAZE_NUM_REGS
+ };
+ 
++/* Big enough to hold the size of the largest register in bytes.  */
++#define MICROBLAZE_MAX_REGISTER_SIZE   64
++
+ struct microblaze_frame_cache
+ {
+   /* Base address.  */
+-- 
+2.17.1
+