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 @@
µblaze_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,
µblaze_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 (µblaze_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 (µblaze_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,
+ µblaze_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 µblaze_frame_unwind;
++}
++
+ static const struct frame_base microblaze_frame_base =
+ {
+ µblaze_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,
- µblaze_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 *) µblaze_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 */
-+ µblaze_usrregs_info,
-+ µblaze_regsets_info
-+ };
-+
-+static const struct regs_info *
-+microblaze_regs_info (void)
-+{
-+ return ®s_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 *) µblaze_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 *) µblaze_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 */
++ µblaze_usrregs_info,
++ µblaze_regsets_info
++ };
++
++static const struct regs_info *
++microblaze_regs_info (void)
++{
++ return ®s_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 *) µblaze_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, µblaze_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,
µblaze_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 µblaze_frame_unwind;
+-}
+-
+ static const struct frame_base microblaze_frame_base =
+ {
+ µblaze_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, µblaze_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
+