diff options
| author | Mark Hatle <mark.hatle@kernel.crashing.org> | 2020-08-13 15:25:54 -0500 |
|---|---|---|
| committer | Mark Hatle <mark.hatle@kernel.crashing.org> | 2020-08-14 11:56:34 -0500 |
| commit | 276f2a014483170cfbcbf391c6350426e0a19fdc (patch) | |
| tree | b68a8b36c7d5df81fa6adff396e1f255715dc0b2 /meta-microblaze/recipes-devtools/gdb | |
| parent | 559d46390c65d34c14b56a7f8690b1ac705430ac (diff) | |
| download | meta-xilinx-276f2a014483170cfbcbf391c6350426e0a19fdc.tar.gz | |
meta-microblaze: toolchains
Resync the microblaze toolchain items to match the latest YP master version.
binutils and gdb are based on the same patch set, but the release version
are based on slightly different sources, thus the patches are a bit
different.
Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org>
Diffstat (limited to 'meta-microblaze/recipes-devtools/gdb')
42 files changed, 936 insertions, 2015 deletions
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb-microblaze.inc b/meta-microblaze/recipes-devtools/gdb/gdb-microblaze.inc index 4db9957c..906ef4db 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb-microblaze.inc +++ b/meta-microblaze/recipes-devtools/gdb/gdb-microblaze.inc | |||
| @@ -5,43 +5,35 @@ LTTNGUST_microblaze = "" | |||
| 5 | FILESEXTRAPATHS_append := ":${THISDIR}/gdb" | 5 | FILESEXTRAPATHS_append := ":${THISDIR}/gdb" |
| 6 | 6 | ||
| 7 | SRC_URI_append_microblaze = " \ | 7 | SRC_URI_append_microblaze = " \ |
| 8 | file://0001-Add-wdc.ext.clear-and-wdc.ext.flush-insns.patch \ | 8 | file://0001-sim-Allow-microblaze-architecture.patch \ |
| 9 | file://0003-Disable-the-warning-message-for-eh_frame_hdr.patch \ | 9 | file://0002-Add-wdc.ext.clear-and-wdc.ext.flush-insns.patch \ |
| 10 | file://0004-Fix-relaxation-of-assembler-resolved-references.patch \ | 10 | file://0004-Disable-the-warning-message-for-eh_frame_hdr.patch \ |
| 11 | file://0005-LOCAL-Fixup-debug_loc-sections-after-linker-relaxati.patch \ | 11 | file://0005-Fix-relaxation-of-assembler-resolved-references.patch \ |
| 12 | file://0006-upstream-change-to-garbage-collection-sweep-causes-m.patch \ | 12 | file://0006-microblaze-Fixup-debug_loc-sections-after-linker-rel.patch \ |
| 13 | file://0007-Fix-bug-in-TLSTPREL-Relocation.patch \ | 13 | file://0007-upstream-change-to-garbage-collection-sweep-causes-m.patch \ |
| 14 | file://0008-Added-Address-extension-instructions.patch \ | 14 | file://0008-Fix-bug-in-TLSTPREL-Relocation.patch \ |
| 15 | file://0009-fixing-the-MAX_OPCODES-to-correct-value.patch \ | 15 | file://0009-Added-Address-extension-instructions.patch \ |
| 16 | file://0010-Add-new-bit-field-instructions.patch \ | 16 | file://0010-Add-new-bit-field-instructions.patch \ |
| 17 | file://0011-fixing-the-imm-bug.patch \ | 17 | file://0011-fixing-the-imm-bug.patch \ |
| 18 | file://0015-intial-commit-of-MB-64-bit.patch \ | 18 | file://0015-intial-commit-of-MB-64-bit.patch \ |
| 19 | file://0016-MB-X-initial-commit.patch \ | 19 | file://0016-MB-X-initial-commit.patch \ |
| 20 | file://0017-Patch-Microblaze-negl-instruction-is-overriding-rsub.patch \ | 20 | file://0017-Patch-Microblaze-negl-instruction-is-overriding-rsub.patch \ |
| 21 | file://0018-Added-relocations-for-MB-X.patch \ | 21 | file://0018-Added-relocations-for-MB-X.patch \ |
| 22 | file://0019-Fixed-MB-x-relocation-issues.patch \ | 22 | file://0019-Update-MB-x.patch \ |
| 23 | file://0020-Fixing-the-branch-related-issues.patch \ | 23 | file://0020-Various-fixes.patch \ |
| 24 | file://0021-Fixed-address-computation-issues-with-64bit-address.patch \ | 24 | file://0021-Adding-new-relocation-to-support-64bit-rodata.patch \ |
| 25 | file://0022-Adding-new-relocation-to-support-64bit-rodata.patch \ | 25 | file://0022-fixing-the-.bss-relocation-issue.patch \ |
| 26 | file://0023-fixing-the-.bss-relocation-issue.patch \ | 26 | file://0023-Fixed-the-bug-in-the-R_MICROBLAZE_64_NONE-relocation.patch \ |
| 27 | file://0024-Fixed-the-bug-in-the-R_MICROBLAZE_64_NONE-relocation.patch \ | 27 | file://0025-Patch-Microblaze-Binutils-security-check-is-causing-.patch \ |
| 28 | file://0025-Patch-MicroBlaze-fixed-Build-issue-which-are-due-to-.patch \ | 28 | file://0026-fixing-the-long-long-long-mingw-toolchain-issue.patch \ |
| 29 | file://0026-Patch-Microblaze-changes-of-PR22458-failure-to-choos.patch \ | 29 | file://0027-Added-support-to-new-arithmetic-single-register-inst.patch \ |
| 30 | file://0028-Patch-Microblaze-Binutils-security-check-is-causing-.patch \ | 30 | file://0028-Patch-MicroBlaze-double-imml-generation-for-64-bit-v.patch \ |
| 31 | file://0029-fixing-the-long-long-long-mingw-toolchain-issue.patch \ | 31 | file://0033-Fix-various-compile-warnings.patch \ |
| 32 | file://0030-Added-support-to-new-arithmetic-single-register-inst.patch \ | 32 | file://0034-Add-initial-port-of-linux-gdbserver.patch \ |
| 33 | file://0031-Patch-MicroBlaze-double-imml-generation-for-64-bit-v.patch \ | 33 | file://0035-Initial-port-of-core-reading-support.patch \ |
| 34 | file://0032-Add-initial-port-of-linux-gdbserver.patch \ | 34 | file://0036-Fix-debug-message-when-register-is-unavailable.patch \ |
| 35 | file://0033-Initial-port-of-core-reading-support.patch \ | 35 | file://0037-microblaze-Add-build_gdbserver-yes-to-top-level-conf.patch \ |
| 36 | file://0034-Fix-debug-message-when-register-is-unavailable.patch \ | 36 | file://0038-Initial-support-for-native-gdb.patch \ |
| 37 | file://0035-revert-master-rebase-changes-to-gdbserver.patch \ | 37 | file://0039-Fixing-the-issues-related-to-GDB-7.12.patch \ |
| 38 | file://0036-revert-master-rebase-changes-to-gdbserver-previous-c.patch \ | 38 | file://0040-Patch-microblaze-Adding-64-bit-MB-support.patch \ |
| 39 | file://0037-microblaze-Add-build_gdbserver-yes-to-top-level-conf.patch \ | ||
| 40 | file://0038-Initial-support-for-native-gdb.patch \ | ||
| 41 | file://0039-Fixing-the-issues-related-to-GDB-7.12.patch \ | ||
| 42 | file://0040-Patch-microblaze-Adding-64-bit-MB-support.patch \ | ||
| 43 | file://0041-patch-MicroBlaze-porting-GDB-for-linux.patch \ | ||
| 44 | file://0042-Correcting-the-register-names-from-slr-shr-to-rslr-r.patch \ | ||
| 45 | file://0043-Removing-the-header-gdb_assert.h-from-MB-target-file.patch \ | ||
| 46 | file://0044-gdb-microblaze-linux-nat.c-Fix-target-compilation-of.patch \ | ||
| 47 | " | 39 | " |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0001-sim-Allow-microblaze-architecture.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0001-sim-Allow-microblaze-architecture.patch new file mode 100644 index 00000000..6f054720 --- /dev/null +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0001-sim-Allow-microblaze-architecture.patch | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | From d23be47051b4410e2e74c6db6bf9a1a9f7195f6d Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mark Hatle <mark.hatle@kernel.crashing.org> | ||
| 3 | Date: Thu, 6 Aug 2020 15:37:52 -0500 | ||
| 4 | Subject: [PATCH 01/40] sim: Allow microblaze* architecture | ||
| 5 | |||
| 6 | Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org> | ||
| 7 | --- | ||
| 8 | sim/configure | 2 +- | ||
| 9 | sim/configure.tgt | 2 +- | ||
| 10 | 2 files changed, 2 insertions(+), 2 deletions(-) | ||
| 11 | |||
| 12 | diff --git a/sim/configure b/sim/configure | ||
| 13 | index 72f95cd5c7a..9e28cc78687 100755 | ||
| 14 | --- a/sim/configure | ||
| 15 | +++ b/sim/configure | ||
| 16 | @@ -3795,7 +3795,7 @@ subdirs="$subdirs aarch64" | ||
| 17 | |||
| 18 | |||
| 19 | ;; | ||
| 20 | - microblaze-*-*) | ||
| 21 | + microblaze*-*-*) | ||
| 22 | |||
| 23 | sim_arch=microblaze | ||
| 24 | subdirs="$subdirs microblaze" | ||
| 25 | diff --git a/sim/configure.tgt b/sim/configure.tgt | ||
| 26 | index 8a8e03d96f4..f6743fe8d41 100644 | ||
| 27 | --- a/sim/configure.tgt | ||
| 28 | +++ b/sim/configure.tgt | ||
| 29 | @@ -59,7 +59,7 @@ case "${target}" in | ||
| 30 | mcore-*-*) | ||
| 31 | SIM_ARCH(mcore) | ||
| 32 | ;; | ||
| 33 | - microblaze-*-*) | ||
| 34 | + microblaze*-*-*) | ||
| 35 | SIM_ARCH(microblaze) | ||
| 36 | ;; | ||
| 37 | mips*-*-*) | ||
| 38 | -- | ||
| 39 | 2.17.1 | ||
| 40 | |||
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0001-Add-wdc.ext.clear-and-wdc.ext.flush-insns.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0002-Add-wdc.ext.clear-and-wdc.ext.flush-insns.patch index 4b85d7c9..6967a3d7 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0001-Add-wdc.ext.clear-and-wdc.ext.flush-insns.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0002-Add-wdc.ext.clear-and-wdc.ext.flush-insns.patch | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | From f1cb2126c751d6c2526ea969918d5b51dd5b851f Mon Sep 17 00:00:00 2001 | 1 | From d7a3a238edac153f391a65ae45215a117d25bc48 Mon Sep 17 00:00:00 2001 |
| 2 | From: David Holsgrove <david.holsgrove@xilinx.com> | 2 | From: David Holsgrove <david.holsgrove@xilinx.com> |
| 3 | Date: Wed, 8 May 2013 11:03:36 +1000 | 3 | Date: Wed, 8 May 2013 11:03:36 +1000 |
| 4 | Subject: [PATCH 01/43] Add wdc.ext.clear and wdc.ext.flush insns | 4 | Subject: [PATCH 02/40] Add wdc.ext.clear and wdc.ext.flush insns |
| 5 | 5 | ||
| 6 | Added two new instructions, wdc.ext.clear and wdc.ext.flush, | 6 | Added two new instructions, wdc.ext.clear and wdc.ext.flush, |
| 7 | to enable MicroBlaze to flush an external cache, which is | 7 | to enable MicroBlaze to flush an external cache, which is |
| @@ -15,7 +15,7 @@ Signed-off-by: David Holsgrove <david.holsgrove@xilinx.com> | |||
| 15 | 2 files changed, 6 insertions(+), 3 deletions(-) | 15 | 2 files changed, 6 insertions(+), 3 deletions(-) |
| 16 | 16 | ||
| 17 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h | 17 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h |
| 18 | index 62ee3c9a4d..865151f95b 100644 | 18 | index 62ee3c9a4d1..865151f95b0 100644 |
| 19 | --- a/opcodes/microblaze-opc.h | 19 | --- a/opcodes/microblaze-opc.h |
| 20 | +++ b/opcodes/microblaze-opc.h | 20 | +++ b/opcodes/microblaze-opc.h |
| 21 | @@ -91,6 +91,7 @@ | 21 | @@ -91,6 +91,7 @@ |
| @@ -46,7 +46,7 @@ index 62ee3c9a4d..865151f95b 100644 | |||
| 46 | {"mfs", INST_TYPE_RD_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_MFS, 0x94008000, OPCODE_MASK_H23S, mfs, special_inst }, | 46 | {"mfs", INST_TYPE_RD_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_MFS, 0x94008000, OPCODE_MASK_H23S, mfs, special_inst }, |
| 47 | {"br", INST_TYPE_R2, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x98000000, OPCODE_MASK_H124, br, branch_inst }, | 47 | {"br", INST_TYPE_R2, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x98000000, OPCODE_MASK_H124, br, branch_inst }, |
| 48 | diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h | 48 | diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h |
| 49 | index 5a2d3b0c8b..42f3dd3be5 100644 | 49 | index 5a2d3b0c8bb..42f3dd3be53 100644 |
| 50 | --- a/opcodes/microblaze-opcm.h | 50 | --- a/opcodes/microblaze-opcm.h |
| 51 | +++ b/opcodes/microblaze-opcm.h | 51 | +++ b/opcodes/microblaze-opcm.h |
| 52 | @@ -33,8 +33,8 @@ enum microblaze_instr | 52 | @@ -33,8 +33,8 @@ enum microblaze_instr |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0003-Disable-the-warning-message-for-eh_frame_hdr.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0004-Disable-the-warning-message-for-eh_frame_hdr.patch index 53415370..78e10261 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0003-Disable-the-warning-message-for-eh_frame_hdr.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0004-Disable-the-warning-message-for-eh_frame_hdr.patch | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | From 68fe2e975f229cce08029b3a5afb06132f1cb31c Mon Sep 17 00:00:00 2001 | 1 | From 2e87167d8c5d40d8dfbd8d879d78ab0bd6f3bdfd Mon Sep 17 00:00:00 2001 |
| 2 | From: "Edgar E. Iglesias" <edgar.iglesias@gmail.com> | 2 | From: "Edgar E. Iglesias" <edgar.iglesias@gmail.com> |
| 3 | Date: Fri, 22 Jun 2012 01:20:20 +0200 | 3 | Date: Fri, 22 Jun 2012 01:20:20 +0200 |
| 4 | Subject: [PATCH 03/43] Disable the warning message for eh_frame_hdr | 4 | Subject: [PATCH 04/40] Disable the warning message for eh_frame_hdr |
| 5 | 5 | ||
| 6 | Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com> | 6 | Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com> |
| 7 | --- | 7 | --- |
| @@ -9,7 +9,7 @@ Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com> | |||
| 9 | 1 file changed, 3 insertions(+) | 9 | 1 file changed, 3 insertions(+) |
| 10 | 10 | ||
| 11 | diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c | 11 | diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c |
| 12 | index a13e81ebb8..1824ba6e5b 100644 | 12 | index b622ffcee2a..26b180f1490 100644 |
| 13 | --- a/bfd/elf-eh-frame.c | 13 | --- a/bfd/elf-eh-frame.c |
| 14 | +++ b/bfd/elf-eh-frame.c | 14 | +++ b/bfd/elf-eh-frame.c |
| 15 | @@ -1044,10 +1044,13 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info, | 15 | @@ -1044,10 +1044,13 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info, |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0004-Fix-relaxation-of-assembler-resolved-references.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0005-Fix-relaxation-of-assembler-resolved-references.patch index 7ba07a0c..d851c589 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0004-Fix-relaxation-of-assembler-resolved-references.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0005-Fix-relaxation-of-assembler-resolved-references.patch | |||
| @@ -1,17 +1,17 @@ | |||
| 1 | From 1ea25f31c38e606603bf406efebfb6cfc26aec38 Mon Sep 17 00:00:00 2001 | 1 | From 210bb23010e2c3e65f5f54c220d27da0590bab06 Mon Sep 17 00:00:00 2001 |
| 2 | From: "Edgar E. Iglesias" <edgar.iglesias@gmail.com> | 2 | From: "Edgar E. Iglesias" <edgar.iglesias@gmail.com> |
| 3 | Date: Tue, 14 Feb 2012 01:00:22 +0100 | 3 | Date: Tue, 14 Feb 2012 01:00:22 +0100 |
| 4 | Subject: [PATCH 04/43] Fix relaxation of assembler resolved references | 4 | Subject: [PATCH 05/40] Fix relaxation of assembler resolved references |
| 5 | 5 | ||
| 6 | --- | 6 | --- |
| 7 | bfd/elf32-microblaze.c | 38 ++++++++++++++++++++++++++++++++++++++ | 7 | bfd/elf32-microblaze.c | 41 ++++++++++++++++++++++++++++++++++++++ |
| 8 | 2 files changed, 39 insertions(+) | 8 | 2 files changed, 42 insertions(+) |
| 9 | 9 | ||
| 10 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c | 10 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c |
| 11 | index e3c8027248..359484dd5e 100644 | 11 | index c187d83ee04..dfd82438e35 100644 |
| 12 | --- a/bfd/elf32-microblaze.c | 12 | --- a/bfd/elf32-microblaze.c |
| 13 | +++ b/bfd/elf32-microblaze.c | 13 | +++ b/bfd/elf32-microblaze.c |
| 14 | @@ -1973,6 +1973,44 @@ microblaze_elf_relax_section (bfd *abfd, | 14 | @@ -1973,6 +1973,47 @@ microblaze_elf_relax_section (bfd *abfd, |
| 15 | irelscanend = irelocs + o->reloc_count; | 15 | irelscanend = irelocs + o->reloc_count; |
| 16 | for (irelscan = irelocs; irelscan < irelscanend; irelscan++) | 16 | for (irelscan = irelocs; irelscan < irelscanend; irelscan++) |
| 17 | { | 17 | { |
| @@ -44,9 +44,12 @@ index e3c8027248..359484dd5e 100644 | |||
| 44 | + elf_section_data (o)->this_hdr.contents = ocontents; | 44 | + elf_section_data (o)->this_hdr.contents = ocontents; |
| 45 | + } | 45 | + } |
| 46 | + } | 46 | + } |
| 47 | + irelscan->r_addend -= calc_fixup (irelscan->r_addend | ||
| 48 | + + isym->st_value, sec); | ||
| 49 | + val = bfd_get_32 (abfd, ocontents + irelscan->r_offset); | 47 | + val = bfd_get_32 (abfd, ocontents + irelscan->r_offset); |
| 48 | + if (val != irelscan->r_addend) { | ||
| 49 | + fprintf(stderr, "%d: CORRUPT relax reloc! %x %lx\n", __LINE__, val, irelscan->r_addend); | ||
| 50 | + } | ||
| 51 | + irelscan->r_addend -= calc_fixup (irelscan->r_addend | ||
| 52 | + + isym->st_value, 0, sec); | ||
| 50 | + microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset, | 53 | + microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset, |
| 51 | + irelscan->r_addend); | 54 | + irelscan->r_addend); |
| 52 | + } | 55 | + } |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0005-LOCAL-Fixup-debug_loc-sections-after-linker-relaxati.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0006-microblaze-Fixup-debug_loc-sections-after-linker-rel.patch index 18646195..eea29059 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0005-LOCAL-Fixup-debug_loc-sections-after-linker-relaxati.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0006-microblaze-Fixup-debug_loc-sections-after-linker-rel.patch | |||
| @@ -1,10 +1,12 @@ | |||
| 1 | From 62859c17077c559ad5e5db1cfbb496d5e8c3da68 Mon Sep 17 00:00:00 2001 | 1 | From d2aee40b9753b783853bf38d36d9b6e50d16cc20 Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Mon, 6 Feb 2017 15:53:08 +0530 | 3 | Date: Mon, 6 Feb 2017 15:53:08 +0530 |
| 4 | Subject: [PATCH 05/43] [LOCAL]: Fixup debug_loc sections after linker | 4 | Subject: [PATCH 06/40] microblaze: Fixup debug_loc sections after linker |
| 5 | relaxation Adds a new reloctype R_MICROBLAZE_32_NONE, used for passing reloc | 5 | relaxation |
| 6 | info from the assembler to the linker when the linker manages to fully | 6 | |
| 7 | resolve a local symbol reference. | 7 | Adds a new reloctype R_MICROBLAZE_32_NONE, used for passing |
| 8 | reloc info from the assembler to the linker when the linker | ||
| 9 | manages to fully resolve a local symbol reference. | ||
| 8 | 10 | ||
| 9 | This is a workaround for design flaws in the assembler to | 11 | This is a workaround for design flaws in the assembler to |
| 10 | linker interface with regards to linker relaxation. | 12 | linker interface with regards to linker relaxation. |
| @@ -12,44 +14,37 @@ linker interface with regards to linker relaxation. | |||
| 12 | Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com> | 14 | Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com> |
| 13 | Signed-off-by: Nagaraju Mekala <nmekala@xilinx.com> | 15 | Signed-off-by: Nagaraju Mekala <nmekala@xilinx.com> |
| 14 | --- | 16 | --- |
| 15 | bfd/bfd-in2.h | 9 +++++-- | 17 | bfd/bfd-in2.h | 5 +++++ |
| 16 | bfd/elf32-microblaze.c | 53 ++++++++++++++++++++++++++++---------- | 18 | bfd/elf32-microblaze.c | 39 +++++++++++++++++++++++++++++++------- |
| 17 | bfd/libbfd.h | 1 + | 19 | bfd/libbfd.h | 1 + |
| 18 | bfd/reloc.c | 6 +++++ | 20 | bfd/reloc.c | 6 ++++++ |
| 19 | include/elf/microblaze.h | 2 ++ | 21 | include/elf/microblaze.h | 1 + |
| 20 | 7 files changed, 64 insertions(+), 16 deletions(-) | 22 | 7 files changed, 52 insertions(+), 7 deletions(-) |
| 21 | 23 | ||
| 22 | diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h | 24 | diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h |
| 23 | index e25da50aaf..721531886a 100644 | 25 | index 6f3e41da376..52c81b10b6d 100644 |
| 24 | --- a/bfd/bfd-in2.h | 26 | --- a/bfd/bfd-in2.h |
| 25 | +++ b/bfd/bfd-in2.h | 27 | +++ b/bfd/bfd-in2.h |
| 26 | @@ -5866,10 +5866,15 @@ value relative to the read-write small data area anchor */ | 28 | @@ -5363,6 +5363,11 @@ value relative to the read-write small data area anchor */ |
| 27 | expressions of the form "Symbol Op Symbol" */ | 29 | expressions of the form "Symbol Op Symbol" */ |
| 28 | BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM, | 30 | BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM, |
| 29 | 31 | ||
| 30 | -/* This is a 64 bit reloc that stores the 32 bit pc relative | ||
| 31 | +/* This is a 32 bit reloc that stores the 32 bit pc relative | 32 | +/* This is a 32 bit reloc that stores the 32 bit pc relative |
| 32 | value in two words (with an imm instruction). No relocation is | 33 | +value in two words (with an imm instruction). No relocation is |
| 33 | done here - only used for relaxing */ | 34 | +done here - only used for relaxing */ |
| 34 | - BFD_RELOC_MICROBLAZE_64_NONE, | ||
| 35 | + BFD_RELOC_MICROBLAZE_32_NONE, | 35 | + BFD_RELOC_MICROBLAZE_32_NONE, |
| 36 | + | 36 | + |
| 37 | +/* This is a 64 bit reloc that stores the 32 bit pc relative | ||
| 38 | + * +value in two words (with an imm instruction). No relocation is | ||
| 39 | + * +done here - only used for relaxing */ | ||
| 40 | + BFD_RELOC_MICROBLAZE_64_NONE, | ||
| 41 | |||
| 42 | /* This is a 64 bit reloc that stores the 32 bit pc relative | 37 | /* This is a 64 bit reloc that stores the 32 bit pc relative |
| 43 | value in two words (with an imm instruction). The relocation is | 38 | value in two words (with an imm instruction). No relocation is |
| 39 | done here - only used for relaxing */ | ||
| 44 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c | 40 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c |
| 45 | index 359484dd5e..1c69c269c7 100644 | 41 | index dfd82438e35..cbba704e691 100644 |
| 46 | --- a/bfd/elf32-microblaze.c | 42 | --- a/bfd/elf32-microblaze.c |
| 47 | +++ b/bfd/elf32-microblaze.c | 43 | +++ b/bfd/elf32-microblaze.c |
| 48 | @@ -176,7 +176,21 @@ static reloc_howto_type microblaze_elf_howto_raw[] = | 44 | @@ -176,6 +176,20 @@ static reloc_howto_type microblaze_elf_howto_raw[] = |
| 49 | 0x0000ffff, /* Dest Mask. */ | 45 | 0x0000ffff, /* Dest Mask. */ |
| 50 | FALSE), /* PC relative offset? */ | 46 | FALSE), /* PC relative offset? */ |
| 51 | 47 | ||
| 52 | - /* This reloc does nothing. Used for relaxation. */ | ||
| 53 | + HOWTO (R_MICROBLAZE_32_NONE, /* Type. */ | 48 | + HOWTO (R_MICROBLAZE_32_NONE, /* Type. */ |
| 54 | + 0, /* Rightshift. */ | 49 | + 0, /* Rightshift. */ |
| 55 | + 2, /* Size (0 = byte, 1 = short, 2 = long). */ | 50 | + 2, /* Size (0 = byte, 1 = short, 2 = long). */ |
| @@ -64,10 +59,9 @@ index 359484dd5e..1c69c269c7 100644 | |||
| 64 | + 0, /* Dest Mask. */ | 59 | + 0, /* Dest Mask. */ |
| 65 | + FALSE), /* PC relative offset? */ | 60 | + FALSE), /* PC relative offset? */ |
| 66 | + | 61 | + |
| 67 | + /* This reloc does nothing. Used for relaxation. */ | 62 | /* This reloc does nothing. Used for relaxation. */ |
| 68 | HOWTO (R_MICROBLAZE_64_NONE, /* Type. */ | 63 | HOWTO (R_MICROBLAZE_64_NONE, /* Type. */ |
| 69 | 0, /* Rightshift. */ | 64 | 0, /* Rightshift. */ |
| 70 | 3, /* Size (0 = byte, 1 = short, 2 = long). */ | ||
| 71 | @@ -562,6 +576,9 @@ microblaze_elf_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, | 65 | @@ -562,6 +576,9 @@ microblaze_elf_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, |
| 72 | case BFD_RELOC_NONE: | 66 | case BFD_RELOC_NONE: |
| 73 | microblaze_reloc = R_MICROBLAZE_NONE; | 67 | microblaze_reloc = R_MICROBLAZE_NONE; |
| @@ -78,7 +72,7 @@ index 359484dd5e..1c69c269c7 100644 | |||
| 78 | case BFD_RELOC_MICROBLAZE_64_NONE: | 72 | case BFD_RELOC_MICROBLAZE_64_NONE: |
| 79 | microblaze_reloc = R_MICROBLAZE_64_NONE; | 73 | microblaze_reloc = R_MICROBLAZE_64_NONE; |
| 80 | break; | 74 | break; |
| 81 | @@ -1918,6 +1935,7 @@ microblaze_elf_relax_section (bfd *abfd, | 75 | @@ -1918,14 +1935,22 @@ microblaze_elf_relax_section (bfd *abfd, |
| 82 | } | 76 | } |
| 83 | break; | 77 | break; |
| 84 | case R_MICROBLAZE_NONE: | 78 | case R_MICROBLAZE_NONE: |
| @@ -86,7 +80,9 @@ index 359484dd5e..1c69c269c7 100644 | |||
| 86 | { | 80 | { |
| 87 | /* This was a PC-relative instruction that was | 81 | /* This was a PC-relative instruction that was |
| 88 | completely resolved. */ | 82 | completely resolved. */ |
| 89 | @@ -1926,12 +1944,18 @@ microblaze_elf_relax_section (bfd *abfd, | 83 | int sfix, efix; |
| 84 | + unsigned int val; | ||
| 85 | bfd_vma target_address; | ||
| 90 | target_address = irel->r_addend + irel->r_offset; | 86 | target_address = irel->r_addend + irel->r_offset; |
| 91 | sfix = calc_fixup (irel->r_offset, 0, sec); | 87 | sfix = calc_fixup (irel->r_offset, 0, sec); |
| 92 | efix = calc_fixup (target_address, 0, sec); | 88 | efix = calc_fixup (target_address, 0, sec); |
| @@ -99,20 +95,12 @@ index 359484dd5e..1c69c269c7 100644 | |||
| 99 | irel->r_addend -= (efix - sfix); | 95 | irel->r_addend -= (efix - sfix); |
| 100 | /* Should use HOWTO. */ | 96 | /* Should use HOWTO. */ |
| 101 | microblaze_bfd_write_imm_value_32 (abfd, contents + irel->r_offset, | 97 | microblaze_bfd_write_imm_value_32 (abfd, contents + irel->r_offset, |
| 102 | irel->r_addend); | 98 | @@ -1973,12 +1998,16 @@ microblaze_elf_relax_section (bfd *abfd, |
| 103 | - } | ||
| 104 | - break; | ||
| 105 | + } | ||
| 106 | + break; | ||
| 107 | case R_MICROBLAZE_64_NONE: | ||
| 108 | { | ||
| 109 | /* This was a PC-relative 64-bit instruction that was | ||
| 110 | @@ -1973,12 +1997,16 @@ microblaze_elf_relax_section (bfd *abfd, | ||
| 111 | irelscanend = irelocs + o->reloc_count; | 99 | irelscanend = irelocs + o->reloc_count; |
| 112 | for (irelscan = irelocs; irelscan < irelscanend; irelscan++) | 100 | for (irelscan = irelocs; irelscan < irelscanend; irelscan++) |
| 113 | { | 101 | { |
| 114 | - if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_NONE) | 102 | - if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_NONE) |
| 115 | + if (1 && ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32_NONE) | 103 | + if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32_NONE) |
| 116 | { | 104 | { |
| 117 | unsigned int val; | 105 | unsigned int val; |
| 118 | 106 | ||
| @@ -125,22 +113,12 @@ index 359484dd5e..1c69c269c7 100644 | |||
| 125 | /* This was a PC-relative instruction that was completely resolved. */ | 113 | /* This was a PC-relative instruction that was completely resolved. */ |
| 126 | if (ocontents == NULL) | 114 | if (ocontents == NULL) |
| 127 | { | 115 | { |
| 128 | @@ -1999,18 +2027,17 @@ microblaze_elf_relax_section (bfd *abfd, | 116 | @@ -2006,14 +2035,10 @@ microblaze_elf_relax_section (bfd *abfd, |
| 129 | (file_ptr) 0, | 117 | if (val != irelscan->r_addend) { |
| 130 | o->rawsize)) | 118 | fprintf(stderr, "%d: CORRUPT relax reloc! %x %lx\n", __LINE__, val, irelscan->r_addend); |
| 131 | goto error_return; | 119 | } |
| 132 | - elf_section_data (o)->this_hdr.contents = ocontents; | 120 | - irelscan->r_addend -= calc_fixup (irelscan->r_addend |
| 133 | - } | 121 | - + isym->st_value, 0, sec); |
| 134 | - } | ||
| 135 | - irelscan->r_addend -= calc_fixup (irelscan->r_addend | ||
| 136 | - + isym->st_value, sec); | ||
| 137 | + elf_section_data (o)->this_hdr.contents = ocontents; | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | val = bfd_get_32 (abfd, ocontents + irelscan->r_offset); | ||
| 141 | + if (val != irelscan->r_addend) { | ||
| 142 | + fprintf(stderr, "%d: CORRUPT relax reloc! %x %lx\n", __LINE__, val, irelscan->r_addend); | ||
| 143 | + } | ||
| 144 | + irelscan->r_addend -= calc_fixup (irelscan->r_addend, 0, sec); | 122 | + irelscan->r_addend -= calc_fixup (irelscan->r_addend, 0, sec); |
| 145 | microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset, | 123 | microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset, |
| 146 | irelscan->r_addend); | 124 | irelscan->r_addend); |
| @@ -151,20 +129,20 @@ index 359484dd5e..1c69c269c7 100644 | |||
| 151 | if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32) | 129 | if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32) |
| 152 | { | 130 | { |
| 153 | isym = isymbuf + ELF32_R_SYM (irelscan->r_info); | 131 | isym = isymbuf + ELF32_R_SYM (irelscan->r_info); |
| 154 | @@ -2070,7 +2097,7 @@ microblaze_elf_relax_section (bfd *abfd, | 132 | @@ -2073,7 +2098,7 @@ microblaze_elf_relax_section (bfd *abfd, |
| 155 | elf_section_data (o)->this_hdr.contents = ocontents; | 133 | elf_section_data (o)->this_hdr.contents = ocontents; |
| 156 | } | 134 | } |
| 157 | } | 135 | } |
| 158 | - irelscan->r_addend -= calc_fixup (irel->r_addend | 136 | - irelscan->r_addend -= calc_fixup (irel->r_addend |
| 159 | + irelscan->r_addend -= calc_fixup (irelscan->r_addend | 137 | + irelscan->r_addend -= calc_fixup (irelscan->r_addend |
| 160 | + isym->st_value, | 138 | + isym->st_value, |
| 161 | 0, | 139 | 0, |
| 162 | sec); | 140 | sec); |
| 163 | diff --git a/bfd/libbfd.h b/bfd/libbfd.h | 141 | diff --git a/bfd/libbfd.h b/bfd/libbfd.h |
| 164 | index 36284d71a9..feb9fada1e 100644 | 142 | index 44cefbd66d4..a01891f3423 100644 |
| 165 | --- a/bfd/libbfd.h | 143 | --- a/bfd/libbfd.h |
| 166 | +++ b/bfd/libbfd.h | 144 | +++ b/bfd/libbfd.h |
| 167 | @@ -2901,6 +2901,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", | 145 | @@ -2903,6 +2903,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", |
| 168 | "BFD_RELOC_MICROBLAZE_32_ROSDA", | 146 | "BFD_RELOC_MICROBLAZE_32_ROSDA", |
| 169 | "BFD_RELOC_MICROBLAZE_32_RWSDA", | 147 | "BFD_RELOC_MICROBLAZE_32_RWSDA", |
| 170 | "BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM", | 148 | "BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM", |
| @@ -173,10 +151,10 @@ index 36284d71a9..feb9fada1e 100644 | |||
| 173 | "BFD_RELOC_MICROBLAZE_64_GOTPC", | 151 | "BFD_RELOC_MICROBLAZE_64_GOTPC", |
| 174 | "BFD_RELOC_MICROBLAZE_64_GOT", | 152 | "BFD_RELOC_MICROBLAZE_64_GOT", |
| 175 | diff --git a/bfd/reloc.c b/bfd/reloc.c | 153 | diff --git a/bfd/reloc.c b/bfd/reloc.c |
| 176 | index e6446a7809..87753ae4f0 100644 | 154 | index b00b79f3190..78f13180c71 100644 |
| 177 | --- a/bfd/reloc.c | 155 | --- a/bfd/reloc.c |
| 178 | +++ b/bfd/reloc.c | 156 | +++ b/bfd/reloc.c |
| 179 | @@ -6795,6 +6795,12 @@ ENUM | 157 | @@ -6806,6 +6806,12 @@ ENUM |
| 180 | ENUMDOC | 158 | ENUMDOC |
| 181 | This is a 32 bit reloc for the microblaze to handle | 159 | This is a 32 bit reloc for the microblaze to handle |
| 182 | expressions of the form "Symbol Op Symbol" | 160 | expressions of the form "Symbol Op Symbol" |
| @@ -190,15 +168,14 @@ index e6446a7809..87753ae4f0 100644 | |||
| 190 | BFD_RELOC_MICROBLAZE_64_NONE | 168 | BFD_RELOC_MICROBLAZE_64_NONE |
| 191 | ENUMDOC | 169 | ENUMDOC |
| 192 | diff --git a/include/elf/microblaze.h b/include/elf/microblaze.h | 170 | diff --git a/include/elf/microblaze.h b/include/elf/microblaze.h |
| 193 | index 830b5ad446..6ee0966444 100644 | 171 | index 830b5ad4461..0dba2c0f44f 100644 |
| 194 | --- a/include/elf/microblaze.h | 172 | --- a/include/elf/microblaze.h |
| 195 | +++ b/include/elf/microblaze.h | 173 | +++ b/include/elf/microblaze.h |
| 196 | @@ -61,6 +61,8 @@ START_RELOC_NUMBERS (elf_microblaze_reloc_type) | 174 | @@ -61,6 +61,7 @@ START_RELOC_NUMBERS (elf_microblaze_reloc_type) |
| 197 | RELOC_NUMBER (R_MICROBLAZE_TEXTPCREL_64, 30) /* PC-relative TEXT offset. */ | 175 | RELOC_NUMBER (R_MICROBLAZE_TEXTPCREL_64, 30) /* PC-relative TEXT offset. */ |
| 198 | RELOC_NUMBER (R_MICROBLAZE_TEXTREL_64, 31) /* TEXT Entry offset 64-bit. */ | 176 | RELOC_NUMBER (R_MICROBLAZE_TEXTREL_64, 31) /* TEXT Entry offset 64-bit. */ |
| 199 | RELOC_NUMBER (R_MICROBLAZE_TEXTREL_32_LO, 32) /* TEXT Entry offset 32-bit. */ | 177 | RELOC_NUMBER (R_MICROBLAZE_TEXTREL_32_LO, 32) /* TEXT Entry offset 32-bit. */ |
| 200 | + RELOC_NUMBER (R_MICROBLAZE_32_NONE, 33) | 178 | + RELOC_NUMBER (R_MICROBLAZE_32_NONE, 33) |
| 201 | + | ||
| 202 | END_RELOC_NUMBERS (R_MICROBLAZE_max) | 179 | END_RELOC_NUMBERS (R_MICROBLAZE_max) |
| 203 | 180 | ||
| 204 | /* Global base address names. */ | 181 | /* Global base address names. */ |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0006-upstream-change-to-garbage-collection-sweep-causes-m.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0007-upstream-change-to-garbage-collection-sweep-causes-m.patch index 35d44be4..09a17eda 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0006-upstream-change-to-garbage-collection-sweep-causes-m.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0007-upstream-change-to-garbage-collection-sweep-causes-m.patch | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | From 72fe91edf03a0270ecd9df795f1a1eaded3b7d15 Mon Sep 17 00:00:00 2001 | 1 | From df187bca3d19a3e5c36182929e7e14bc6a49aad5 Mon Sep 17 00:00:00 2001 |
| 2 | From: David Holsgrove <david.holsgrove@xilinx.com> | 2 | From: David Holsgrove <david.holsgrove@xilinx.com> |
| 3 | Date: Wed, 27 Feb 2013 13:56:11 +1000 | 3 | Date: Wed, 27 Feb 2013 13:56:11 +1000 |
| 4 | Subject: [PATCH 06/43] upstream change to garbage collection sweep causes mb | 4 | Subject: [PATCH 07/40] upstream change to garbage collection sweep causes mb |
| 5 | regression | 5 | regression |
| 6 | 6 | ||
| 7 | Upstream change for PR13177 now clears the def_regular during gc_sweep of a | 7 | Upstream change for PR13177 now clears the def_regular during gc_sweep of a |
| @@ -23,10 +23,10 @@ Signed-off-by: David Holsgrove <david.holsgrove@xilinx.com> | |||
| 23 | 1 file changed, 1 deletion(-) | 23 | 1 file changed, 1 deletion(-) |
| 24 | 24 | ||
| 25 | diff --git a/bfd/elflink.c b/bfd/elflink.c | 25 | diff --git a/bfd/elflink.c b/bfd/elflink.c |
| 26 | index e50c0e4b38..09d43e3ca5 100644 | 26 | index 7078a2fb6f4..7926fdf63be 100644 |
| 27 | --- a/bfd/elflink.c | 27 | --- a/bfd/elflink.c |
| 28 | +++ b/bfd/elflink.c | 28 | +++ b/bfd/elflink.c |
| 29 | @@ -6187,7 +6187,6 @@ elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data) | 29 | @@ -6274,7 +6274,6 @@ elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data) |
| 30 | 30 | ||
| 31 | inf = (struct elf_gc_sweep_symbol_info *) data; | 31 | inf = (struct elf_gc_sweep_symbol_info *) data; |
| 32 | (*inf->hide_symbol) (inf->info, h, TRUE); | 32 | (*inf->hide_symbol) (inf->info, h, TRUE); |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0007-Fix-bug-in-TLSTPREL-Relocation.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0008-Fix-bug-in-TLSTPREL-Relocation.patch index a5cc8114..c37a5aed 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0007-Fix-bug-in-TLSTPREL-Relocation.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0008-Fix-bug-in-TLSTPREL-Relocation.patch | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | From 2ea146401a9aed9e3b6cc07e1b6c0f81e5a0527c Mon Sep 17 00:00:00 2001 | 1 | From 0f1d7bd04916af6172780335dc6abc11d45564f2 Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Mon, 15 Jun 2015 16:50:30 +0530 | 3 | Date: Mon, 15 Jun 2015 16:50:30 +0530 |
| 4 | Subject: [PATCH 07/43] Fix bug in TLSTPREL Relocation | 4 | Subject: [PATCH 08/40] Fix bug in TLSTPREL Relocation |
| 5 | 5 | ||
| 6 | Fixed the problem related to the fixup/relocations TLSTPREL. | 6 | Fixed the problem related to the fixup/relocations TLSTPREL. |
| 7 | When the fixup is applied the addend is not added at the correct offset | 7 | When the fixup is applied the addend is not added at the correct offset |
| @@ -13,7 +13,7 @@ big & little-endian compilers | |||
| 13 | 1 file changed, 2 insertions(+), 2 deletions(-) | 13 | 1 file changed, 2 insertions(+), 2 deletions(-) |
| 14 | 14 | ||
| 15 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c | 15 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c |
| 16 | index 1c69c269c7..d19a6dca84 100644 | 16 | index cbba704e691..cc4c0568c68 100644 |
| 17 | --- a/bfd/elf32-microblaze.c | 17 | --- a/bfd/elf32-microblaze.c |
| 18 | +++ b/bfd/elf32-microblaze.c | 18 | +++ b/bfd/elf32-microblaze.c |
| 19 | @@ -1451,9 +1451,9 @@ microblaze_elf_relocate_section (bfd *output_bfd, | 19 | @@ -1451,9 +1451,9 @@ microblaze_elf_relocate_section (bfd *output_bfd, |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0008-Added-Address-extension-instructions.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0009-Added-Address-extension-instructions.patch index 933e51e1..c9903a40 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0008-Added-Address-extension-instructions.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0009-Added-Address-extension-instructions.patch | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | From a4b50cb6f4b8d2f4e7d3b28bbc2f8110277e441d Mon Sep 17 00:00:00 2001 | 1 | From c0bb923f0978d5767048274cd778c8cbcef184ec Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Mon, 18 Jan 2016 12:28:21 +0530 | 3 | Date: Mon, 18 Jan 2016 12:28:21 +0530 |
| 4 | Subject: [PATCH 08/43] Added Address extension instructions | 4 | Subject: [PATCH 09/40] Added Address extension instructions |
| 5 | 5 | ||
| 6 | This patch adds the support of new instructions which are required | 6 | This patch adds the support of new instructions which are required |
| 7 | for supporting Address extension feature. | 7 | for supporting Address extension feature. |
| @@ -13,17 +13,27 @@ ChangeLog: | |||
| 13 | 13 | ||
| 14 | *microblaze-opc.h (op_code_struct): Update | 14 | *microblaze-opc.h (op_code_struct): Update |
| 15 | Added new instructions | 15 | Added new instructions |
| 16 | Set MAX_OPCODES to matching value | ||
| 16 | *microblaze-opcm.h (microblaze_instr): Update | 17 | *microblaze-opcm.h (microblaze_instr): Update |
| 17 | Added new instructions | 18 | Added new instructions |
| 18 | --- | 19 | --- |
| 19 | opcodes/microblaze-opc.h | 11 +++++++++++ | 20 | opcodes/microblaze-opc.h | 19 +++++++++++++++---- |
| 20 | opcodes/microblaze-opcm.h | 10 +++++----- | 21 | opcodes/microblaze-opcm.h | 12 ++++++------ |
| 21 | 2 files changed, 16 insertions(+), 5 deletions(-) | 22 | 2 files changed, 21 insertions(+), 10 deletions(-) |
| 22 | 23 | ||
| 23 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h | 24 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h |
| 24 | index 865151f95b..330f1040e7 100644 | 25 | index 865151f95b0..d9a84e575e8 100644 |
| 25 | --- a/opcodes/microblaze-opc.h | 26 | --- a/opcodes/microblaze-opc.h |
| 26 | +++ b/opcodes/microblaze-opc.h | 27 | +++ b/opcodes/microblaze-opc.h |
| 28 | @@ -102,7 +102,7 @@ | ||
| 29 | #define DELAY_SLOT 1 | ||
| 30 | #define NO_DELAY_SLOT 0 | ||
| 31 | |||
| 32 | -#define MAX_OPCODES 291 | ||
| 33 | +#define MAX_OPCODES 299 | ||
| 34 | |||
| 35 | struct op_code_struct | ||
| 36 | { | ||
| 27 | @@ -178,8 +178,11 @@ struct op_code_struct | 37 | @@ -178,8 +178,11 @@ struct op_code_struct |
| 28 | {"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 }, | 38 | {"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 }, |
| 29 | {"wdc.flush", INST_TYPE_R1_R2_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000074, OPCODE_MASK_H34B, wdcflush, special_inst }, | 39 | {"wdc.flush", INST_TYPE_R1_R2_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000074, OPCODE_MASK_H34B, wdcflush, special_inst }, |
| @@ -61,6 +71,20 @@ index 865151f95b..330f1040e7 100644 | |||
| 61 | {"lbui", INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xE0000000, OPCODE_MASK_H, lbui, memory_load_inst }, | 71 | {"lbui", INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xE0000000, OPCODE_MASK_H, lbui, memory_load_inst }, |
| 62 | {"lhui", INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xE4000000, OPCODE_MASK_H, lhui, memory_load_inst }, | 72 | {"lhui", INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xE4000000, OPCODE_MASK_H, lhui, memory_load_inst }, |
| 63 | {"lwi", INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xE8000000, OPCODE_MASK_H, lwi, memory_load_inst }, | 73 | {"lwi", INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xE8000000, OPCODE_MASK_H, lwi, memory_load_inst }, |
| 74 | @@ -258,10 +267,10 @@ struct op_code_struct | ||
| 75 | {"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 }, | ||
| 76 | {"msrset",INST_TYPE_RD_IMM15, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x94100000, OPCODE_MASK_H23N, msrset, special_inst }, | ||
| 77 | {"msrclr",INST_TYPE_RD_IMM15, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x94110000, OPCODE_MASK_H23N, msrclr, special_inst }, | ||
| 78 | - {"fadd", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000000, OPCODE_MASK_H4, fadd, arithmetic_inst }, | ||
| 79 | + {"fadd", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000000, OPCODE_MASK_H4, mbi_fadd, arithmetic_inst }, | ||
| 80 | {"frsub", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000080, OPCODE_MASK_H4, frsub, arithmetic_inst }, | ||
| 81 | - {"fmul", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000100, OPCODE_MASK_H4, fmul, arithmetic_inst }, | ||
| 82 | - {"fdiv", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000180, OPCODE_MASK_H4, fdiv, arithmetic_inst }, | ||
| 83 | + {"fmul", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000100, OPCODE_MASK_H4, mbi_fmul, arithmetic_inst }, | ||
| 84 | + {"fdiv", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000180, OPCODE_MASK_H4, mbi_fdiv, arithmetic_inst }, | ||
| 85 | {"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 }, | ||
| 86 | {"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 }, | ||
| 87 | {"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 }, | ||
| 64 | @@ -405,6 +414,8 @@ struct op_code_struct | 88 | @@ -405,6 +414,8 @@ struct op_code_struct |
| 65 | {"clz", INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x900000E0, OPCODE_MASK_H34, clz, special_inst }, | 89 | {"clz", INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x900000E0, OPCODE_MASK_H34, clz, special_inst }, |
| 66 | {"mbar", INST_TYPE_IMM5, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8020004, OPCODE_MASK_HN, mbar, special_inst }, | 90 | {"mbar", INST_TYPE_IMM5, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8020004, OPCODE_MASK_HN, mbar, special_inst }, |
| @@ -71,10 +95,10 @@ index 865151f95b..330f1040e7 100644 | |||
| 71 | {"swaph", INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x900001E2, OPCODE_MASK_H4, swaph, arithmetic_inst }, | 95 | {"swaph", INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x900001E2, OPCODE_MASK_H4, swaph, arithmetic_inst }, |
| 72 | {"", 0, 0, 0, 0, 0, 0, 0, 0}, | 96 | {"", 0, 0, 0, 0, 0, 0, 0, 0}, |
| 73 | diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h | 97 | diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h |
| 74 | index 42f3dd3be5..1c39dbf50b 100644 | 98 | index 42f3dd3be53..8be6e97a1d5 100644 |
| 75 | --- a/opcodes/microblaze-opcm.h | 99 | --- a/opcodes/microblaze-opcm.h |
| 76 | +++ b/opcodes/microblaze-opcm.h | 100 | +++ b/opcodes/microblaze-opcm.h |
| 77 | @@ -33,13 +33,13 @@ enum microblaze_instr | 101 | @@ -33,14 +33,14 @@ enum microblaze_instr |
| 78 | /* 'or/and/xor' are C++ keywords. */ | 102 | /* 'or/and/xor' are C++ keywords. */ |
| 79 | microblaze_or, microblaze_and, microblaze_xor, | 103 | microblaze_or, microblaze_and, microblaze_xor, |
| 80 | andn, pcmpbf, pcmpbc, pcmpeq, pcmpne, sra, src, srl, sext8, sext16, | 104 | andn, pcmpbf, pcmpbc, pcmpeq, pcmpne, sra, src, srl, sext8, sext16, |
| @@ -88,11 +112,13 @@ index 42f3dd3be5..1c39dbf50b 100644 | |||
| 88 | brki, beqi, beqid, bnei, bneid, blti, bltid, blei, bleid, bgti, | 112 | brki, beqi, beqid, bnei, bneid, blti, bltid, blei, bleid, bgti, |
| 89 | - bgtid, bgei, bgeid, lbu, lbur, lhu, lhur, lw, lwr, lwx, sb, sbr, sh, | 113 | - bgtid, bgei, bgeid, lbu, lbur, lhu, lhur, lw, lwr, lwx, sb, sbr, sh, |
| 90 | - shr, sw, swr, swx, lbui, lhui, lwi, | 114 | - shr, sw, swr, swx, lbui, lhui, lwi, |
| 115 | - sbi, shi, swi, msrset, msrclr, tuqula, fadd, frsub, fmul, fdiv, | ||
| 91 | + bgtid, bgei, bgeid, lbu, lbuea, lbur, lhu, lhuea, lhur, lw, lwea, lwr, lwx, | 116 | + bgtid, bgei, bgeid, lbu, lbuea, lbur, lhu, lhuea, lhur, lw, lwea, lwr, lwx, |
| 92 | + sb, sbea, sbr, sh, shea, shr, sw, swea, swr, swx, lbui, lhui, lwi, | 117 | + sb, sbea, sbr, sh, shea, shr, sw, swea, swr, swx, lbui, lhui, lwi, |
| 93 | sbi, shi, swi, msrset, msrclr, tuqula, fadd, frsub, fmul, fdiv, | 118 | + sbi, shi, swi, msrset, msrclr, tuqula, mbi_fadd, frsub, mbi_fmul, mbi_fdiv, |
| 94 | fcmp_lt, fcmp_eq, fcmp_le, fcmp_gt, fcmp_ne, fcmp_ge, fcmp_un, flt, | 119 | fcmp_lt, fcmp_eq, fcmp_le, fcmp_gt, fcmp_ne, fcmp_ge, fcmp_un, flt, |
| 95 | fint, fsqrt, | 120 | fint, fsqrt, |
| 121 | tget, tcget, tnget, tncget, tput, tcput, tnput, tncput, | ||
| 96 | -- | 122 | -- |
| 97 | 2.17.1 | 123 | 2.17.1 |
| 98 | 124 | ||
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0009-fixing-the-MAX_OPCODES-to-correct-value.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0009-fixing-the-MAX_OPCODES-to-correct-value.patch deleted file mode 100644 index 8b51a7a7..00000000 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0009-fixing-the-MAX_OPCODES-to-correct-value.patch +++ /dev/null | |||
| @@ -1,25 +0,0 @@ | |||
| 1 | From 9c7c893866ab6b63942b86be6134c34b96272306 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | ||
| 3 | Date: Thu, 28 Jan 2016 14:07:34 +0530 | ||
| 4 | Subject: [PATCH 09/43] fixing the MAX_OPCODES to correct value | ||
| 5 | |||
| 6 | --- | ||
| 7 | opcodes/microblaze-opc.h | 2 +- | ||
| 8 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 9 | |||
| 10 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h | ||
| 11 | index 330f1040e7..2a6b841232 100644 | ||
| 12 | --- a/opcodes/microblaze-opc.h | ||
| 13 | +++ b/opcodes/microblaze-opc.h | ||
| 14 | @@ -102,7 +102,7 @@ | ||
| 15 | #define DELAY_SLOT 1 | ||
| 16 | #define NO_DELAY_SLOT 0 | ||
| 17 | |||
| 18 | -#define MAX_OPCODES 291 | ||
| 19 | +#define MAX_OPCODES 299 | ||
| 20 | |||
| 21 | struct op_code_struct | ||
| 22 | { | ||
| 23 | -- | ||
| 24 | 2.17.1 | ||
| 25 | |||
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0010-Add-new-bit-field-instructions.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0010-Add-new-bit-field-instructions.patch index 11d45a23..f94410d5 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0010-Add-new-bit-field-instructions.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0010-Add-new-bit-field-instructions.patch | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | From 55acba095458b872b500e978af946733a9f33021 Mon Sep 17 00:00:00 2001 | 1 | From 32058fa03c18d710b3029108e967be687d00516c Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Mon, 18 Jul 2016 12:24:28 +0530 | 3 | Date: Mon, 18 Jul 2016 12:24:28 +0530 |
| 4 | Subject: [PATCH 10/43] Add new bit-field instructions | 4 | Subject: [PATCH 10/40] Add new bit-field instructions |
| 5 | 5 | ||
| 6 | This patches adds new bsefi and bsifi instructions. | 6 | This patches adds new bsefi and bsifi instructions. |
| 7 | BSEFI- The instruction shall extract a bit field from a | 7 | BSEFI- The instruction shall extract a bit field from a |
| @@ -13,47 +13,48 @@ The rest of the bits in the destination register shall be unchanged | |||
| 13 | 13 | ||
| 14 | Signed-off-by :Nagaraju Mekala <nmekala@xilix.com> | 14 | Signed-off-by :Nagaraju Mekala <nmekala@xilix.com> |
| 15 | --- | 15 | --- |
| 16 | opcodes/microblaze-dis.c | 16 +++++++++ | 16 | opcodes/microblaze-dis.c | 17 +++++++++ |
| 17 | opcodes/microblaze-opc.h | 12 ++++++- | 17 | opcodes/microblaze-opc.h | 12 ++++++- |
| 18 | opcodes/microblaze-opcm.h | 6 +++- | 18 | opcodes/microblaze-opcm.h | 6 +++- |
| 19 | 4 files changed, 102 insertions(+), 3 deletions(-) | 19 | 4 files changed, 103 insertions(+), 3 deletions(-) |
| 20 | 20 | ||
| 21 | diff --git a/opcodes/microblaze-dis.c b/opcodes/microblaze-dis.c | 21 | diff --git a/opcodes/microblaze-dis.c b/opcodes/microblaze-dis.c |
| 22 | index f691740dfd..f8aaf27873 100644 | 22 | index 2b3aa8e0786..356f1da22ed 100644 |
| 23 | --- a/opcodes/microblaze-dis.c | 23 | --- a/opcodes/microblaze-dis.c |
| 24 | +++ b/opcodes/microblaze-dis.c | 24 | +++ b/opcodes/microblaze-dis.c |
| 25 | @@ -73,6 +73,18 @@ get_field_imm5_mbar (long instr) | 25 | @@ -90,6 +90,18 @@ get_field_imm5_mbar (struct string_buf *buf, long instr) |
| 26 | return(strdup(tmpstr)); | 26 | return p; |
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | +static char * | 29 | +static char * |
| 30 | +get_field_imm5width (long instr) | 30 | +get_field_imm5width (struct string_buf *buf, long instr) |
| 31 | +{ | 31 | +{ |
| 32 | + char tmpstr[25]; | 32 | + char *p = strbuf (buf); |
| 33 | + | 33 | + |
| 34 | + if (instr & 0x00004000) | 34 | + if (instr & 0x00004000) |
| 35 | + sprintf (tmpstr, "%d", (short)(((instr & IMM5_WIDTH_MASK) >> IMM_WIDTH_LOW))); /* bsefi */ | 35 | + sprintf (p, "%d", (short)(((instr & IMM5_WIDTH_MASK) >> IMM_WIDTH_LOW))); /* bsefi */ |
| 36 | + else | 36 | + else |
| 37 | + sprintf (tmpstr, "%d", (short)(((instr & IMM5_WIDTH_MASK) >> IMM_WIDTH_LOW) - ((instr & IMM5_MASK) >> IMM_LOW) + 1)); /* bsifi */ | 37 | + sprintf (p, "%d", (short)(((instr & IMM5_WIDTH_MASK) >> IMM_WIDTH_LOW) - ((instr & IMM5_MASK) >> IMM_LOW) + 1)); /* bsifi */ |
| 38 | + return (strdup (tmpstr)); | 38 | + return p; |
| 39 | +} | 39 | +} |
| 40 | + | 40 | + |
| 41 | static char * | 41 | static char * |
| 42 | get_field_rfsl (long instr) | 42 | get_field_rfsl (struct string_buf *buf, long instr) |
| 43 | { | 43 | { |
| 44 | @@ -396,6 +408,10 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info) | 44 | @@ -426,6 +438,11 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info) |
| 45 | /* For mbar 16 or sleep insn. */ | 45 | case INST_TYPE_NONE: |
| 46 | case INST_TYPE_NONE: | 46 | break; |
| 47 | break; | 47 | /* For tuqula instruction */ |
| 48 | + /* For bit field insns. */ | 48 | + /* For bit field insns. */ |
| 49 | + case INST_TYPE_RD_R1_IMM5_IMM5: | 49 | + case INST_TYPE_RD_R1_IMM5_IMM5: |
| 50 | + print_func (stream, "\t%s, %s, %s, %s", get_field_rd (inst),get_field_r1(inst),get_field_imm5width (inst), get_field_imm5 (inst)); | 50 | + 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)); |
| 51 | + break; | 51 | + break; |
| 52 | /* For tuqula instruction */ | 52 | + /* For tuqula instruction */ |
| 53 | case INST_TYPE_RD: | 53 | case INST_TYPE_RD: |
| 54 | print_func (stream, "\t%s", get_field_rd (inst)); | 54 | print_func (stream, "\t%s", get_field_rd (&buf, inst)); |
| 55 | break; | ||
| 55 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h | 56 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h |
| 56 | index 2a6b841232..ce8ac351b5 100644 | 57 | index d9a84e575e8..d3b234e1fcd 100644 |
| 57 | --- a/opcodes/microblaze-opc.h | 58 | --- a/opcodes/microblaze-opc.h |
| 58 | +++ b/opcodes/microblaze-opc.h | 59 | +++ b/opcodes/microblaze-opc.h |
| 59 | @@ -59,6 +59,9 @@ | 60 | @@ -59,6 +59,9 @@ |
| @@ -104,7 +105,7 @@ index 2a6b841232..ce8ac351b5 100644 | |||
| 104 | #endif /* MICROBLAZE_OPC */ | 105 | #endif /* MICROBLAZE_OPC */ |
| 105 | 106 | ||
| 106 | diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h | 107 | diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h |
| 107 | index 1c39dbf50b..28662694cd 100644 | 108 | index 8be6e97a1d5..c3b2b8f0f6e 100644 |
| 108 | --- a/opcodes/microblaze-opcm.h | 109 | --- a/opcodes/microblaze-opcm.h |
| 109 | +++ b/opcodes/microblaze-opcm.h | 110 | +++ b/opcodes/microblaze-opcm.h |
| 110 | @@ -29,7 +29,7 @@ enum microblaze_instr | 111 | @@ -29,7 +29,7 @@ enum microblaze_instr |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0011-fixing-the-imm-bug.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0011-fixing-the-imm-bug.patch index b6f2920a..3f3c8141 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0011-fixing-the-imm-bug.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0011-fixing-the-imm-bug.patch | |||
| @@ -1,15 +1,15 @@ | |||
| 1 | From f42a99be023e3f933c0a228ac8e08d59c59ec8d7 Mon Sep 17 00:00:00 2001 | 1 | From 121b64d9dafd3119925a7e95a09fa9f388e53922 Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Mon, 10 Jul 2017 16:07:28 +0530 | 3 | Date: Mon, 10 Jul 2017 16:07:28 +0530 |
| 4 | Subject: [PATCH 11/43] fixing the imm bug. with relax option imm -1 is also | 4 | Subject: [PATCH 11/40] fixing the imm bug. |
| 5 | getting removed this is corrected now. | ||
| 6 | 5 | ||
| 6 | with relax option imm -1 is also getting removed this is corrected now. | ||
| 7 | --- | 7 | --- |
| 8 | bfd/elf32-microblaze.c | 3 +-- | 8 | bfd/elf32-microblaze.c | 3 +-- |
| 9 | 1 file changed, 1 insertion(+), 2 deletions(-) | 9 | 1 file changed, 1 insertion(+), 2 deletions(-) |
| 10 | 10 | ||
| 11 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c | 11 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c |
| 12 | index d19a6dca84..d001437b3f 100644 | 12 | index cc4c0568c68..cb7271f5017 100644 |
| 13 | --- a/bfd/elf32-microblaze.c | 13 | --- a/bfd/elf32-microblaze.c |
| 14 | +++ b/bfd/elf32-microblaze.c | 14 | +++ b/bfd/elf32-microblaze.c |
| 15 | @@ -1869,8 +1869,7 @@ microblaze_elf_relax_section (bfd *abfd, | 15 | @@ -1869,8 +1869,7 @@ microblaze_elf_relax_section (bfd *abfd, |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0015-intial-commit-of-MB-64-bit.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0015-intial-commit-of-MB-64-bit.patch index 96cab28a..bda74adc 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0015-intial-commit-of-MB-64-bit.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0015-intial-commit-of-MB-64-bit.patch | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | From b42fae987795bb210476dcaa5e086f42602208f8 Mon Sep 17 00:00:00 2001 | 1 | From 48e5b2505d97ca936e9946c3945c72bdcfc1743e Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Sun, 30 Sep 2018 16:28:28 +0530 | 3 | Date: Sun, 30 Sep 2018 16:28:28 +0530 |
| 4 | Subject: [PATCH 15/43] intial commit of MB 64-bit | 4 | Subject: [PATCH 15/40] intial commit of MB 64-bit |
| 5 | 5 | ||
| 6 | --- | 6 | --- |
| 7 | bfd/Makefile.am | 2 + | 7 | bfd/Makefile.am | 2 + |
| @@ -9,69 +9,77 @@ Subject: [PATCH 15/43] intial commit of MB 64-bit | |||
| 9 | bfd/config.bfd | 4 + | 9 | bfd/config.bfd | 4 + |
| 10 | bfd/configure | 2 + | 10 | bfd/configure | 2 + |
| 11 | bfd/configure.ac | 2 + | 11 | bfd/configure.ac | 2 + |
| 12 | bfd/cpu-microblaze.c | 52 +- | 12 | bfd/cpu-microblaze.c | 55 +- |
| 13 | bfd/elf64-microblaze.c | 3584 ++++++++++++++++++++++++++++ | 13 | bfd/doc/Makefile.in | 1 + |
| 14 | bfd/elf64-microblaze.c | 3560 ++++++++++++++++++++++++++++ | ||
| 14 | bfd/targets.c | 6 + | 15 | bfd/targets.c | 6 + |
| 15 | include/elf/common.h | 1 + | 16 | include/elf/common.h | 1 + |
| 16 | opcodes/microblaze-dis.c | 39 +- | 17 | ld/Makefile.am | 4 + |
| 18 | ld/Makefile.in | 7 + | ||
| 19 | ld/configure.tgt | 3 + | ||
| 20 | ld/emulparams/elf64microblaze.sh | 23 + | ||
| 21 | ld/emulparams/elf64microblazeel.sh | 23 + | ||
| 22 | opcodes/microblaze-dis.c | 43 +- | ||
| 17 | opcodes/microblaze-opc.h | 162 +- | 23 | opcodes/microblaze-opc.h | 162 +- |
| 18 | opcodes/microblaze-opcm.h | 20 +- | 24 | opcodes/microblaze-opcm.h | 20 +- |
| 19 | 19 files changed, 4181 insertions(+), 41 deletions(-) | 25 | 20 files changed, 4156 insertions(+), 43 deletions(-) |
| 20 | create mode 100644 bfd/elf64-microblaze.c | 26 | create mode 100644 bfd/elf64-microblaze.c |
| 27 | create mode 100644 ld/emulparams/elf64microblaze.sh | ||
| 28 | create mode 100644 ld/emulparams/elf64microblazeel.sh | ||
| 21 | 29 | ||
| 22 | diff --git a/bfd/Makefile.am b/bfd/Makefile.am | 30 | diff --git a/bfd/Makefile.am b/bfd/Makefile.am |
| 23 | index a9191555ad..c5fd250812 100644 | 31 | index e5bd28f03f5..35ecb83a1a1 100644 |
| 24 | --- a/bfd/Makefile.am | 32 | --- a/bfd/Makefile.am |
| 25 | +++ b/bfd/Makefile.am | 33 | +++ b/bfd/Makefile.am |
| 26 | @@ -570,6 +570,7 @@ BFD64_BACKENDS = \ | 34 | @@ -558,6 +558,7 @@ BFD64_BACKENDS = \ |
| 27 | elf64-riscv.lo \ | 35 | elf64-ia64.lo \ |
| 28 | elfxx-riscv.lo \ | 36 | elf64-ia64-vms.lo \ |
| 29 | elf64-s390.lo \ | 37 | elfxx-ia64.lo \ |
| 30 | + elf64-microblaze.lo \ | 38 | + elf64-microblaze.lo \ |
| 31 | elf64-sparc.lo \ | 39 | elfn32-mips.lo \ |
| 32 | elf64-tilegx.lo \ | 40 | elf64-mips.lo \ |
| 33 | elf64-x86-64.lo \ | 41 | elfxx-mips.lo \ |
| 34 | @@ -603,6 +604,7 @@ BFD64_BACKENDS_CFILES = \ | 42 | @@ -597,6 +598,7 @@ BFD64_BACKENDS_CFILES = \ |
| 35 | elf64-nfp.c \ | 43 | elf64-gen.c \ |
| 36 | elf64-ppc.c \ | 44 | elf64-hppa.c \ |
| 37 | elf64-s390.c \ | 45 | elf64-ia64-vms.c \ |
| 38 | + elf64-microblaze.c \ | 46 | + elf64-microblaze.c \ |
| 39 | elf64-sparc.c \ | 47 | elf64-mips.c \ |
| 40 | elf64-tilegx.c \ | 48 | elf64-mmix.c \ |
| 41 | elf64-x86-64.c \ | 49 | elf64-nfp.c \ |
| 42 | diff --git a/bfd/Makefile.in b/bfd/Makefile.in | 50 | diff --git a/bfd/Makefile.in b/bfd/Makefile.in |
| 43 | index 896df52042..fd457cba1e 100644 | 51 | index 15334f10c55..89a2470ec8f 100644 |
| 44 | --- a/bfd/Makefile.in | 52 | --- a/bfd/Makefile.in |
| 45 | +++ b/bfd/Makefile.in | 53 | +++ b/bfd/Makefile.in |
| 46 | @@ -995,6 +995,7 @@ BFD64_BACKENDS = \ | 54 | @@ -984,6 +984,7 @@ BFD64_BACKENDS = \ |
| 47 | elf64-riscv.lo \ | 55 | elf64-ia64.lo \ |
| 48 | elfxx-riscv.lo \ | 56 | elf64-ia64-vms.lo \ |
| 49 | elf64-s390.lo \ | 57 | elfxx-ia64.lo \ |
| 50 | + elf64-microblaze.lo \ | 58 | + elf64-microblaze.lo \ |
| 51 | elf64-sparc.lo \ | 59 | elfn32-mips.lo \ |
| 52 | elf64-tilegx.lo \ | 60 | elf64-mips.lo \ |
| 53 | elf64-x86-64.lo \ | 61 | elfxx-mips.lo \ |
| 54 | @@ -1028,6 +1029,7 @@ BFD64_BACKENDS_CFILES = \ | 62 | @@ -1023,6 +1024,7 @@ BFD64_BACKENDS_CFILES = \ |
| 55 | elf64-nfp.c \ | 63 | elf64-gen.c \ |
| 56 | elf64-ppc.c \ | 64 | elf64-hppa.c \ |
| 57 | elf64-s390.c \ | 65 | elf64-ia64-vms.c \ |
| 58 | + elf64-microblaze.c \ | 66 | + elf64-microblaze.c \ |
| 59 | elf64-sparc.c \ | 67 | elf64-mips.c \ |
| 60 | elf64-tilegx.c \ | 68 | elf64-mmix.c \ |
| 61 | elf64-x86-64.c \ | 69 | elf64-nfp.c \ |
| 62 | @@ -1494,6 +1496,7 @@ distclean-compile: | 70 | @@ -1504,6 +1506,7 @@ distclean-compile: |
| 63 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-ppc.Plo@am__quote@ | 71 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-hppa.Plo@am__quote@ |
| 64 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-riscv.Plo@am__quote@ | 72 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-ia64-vms.Plo@am__quote@ |
| 65 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-s390.Plo@am__quote@ | 73 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-ia64.Plo@am__quote@ |
| 66 | +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-microblaze.Plo@am__quote@ | 74 | +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-microblaze.Plo@am__quote@ |
| 67 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-sparc.Plo@am__quote@ | 75 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-mips.Plo@am__quote@ |
| 68 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-tilegx.Plo@am__quote@ | 76 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-mmix.Plo@am__quote@ |
| 69 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-x86-64.Plo@am__quote@ | 77 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-nfp.Plo@am__quote@ |
| 70 | diff --git a/bfd/config.bfd b/bfd/config.bfd | 78 | diff --git a/bfd/config.bfd b/bfd/config.bfd |
| 71 | index f13812b7c7..a98c220db5 100644 | 79 | index 0a96927e0ed..1fcae568c36 100644 |
| 72 | --- a/bfd/config.bfd | 80 | --- a/bfd/config.bfd |
| 73 | +++ b/bfd/config.bfd | 81 | +++ b/bfd/config.bfd |
| 74 | @@ -850,11 +850,15 @@ case "${targ}" in | 82 | @@ -842,11 +842,15 @@ case "${targ}" in |
| 75 | microblazeel*-*) | 83 | microblazeel*-*) |
| 76 | targ_defvec=microblaze_elf32_le_vec | 84 | targ_defvec=microblaze_elf32_le_vec |
| 77 | targ_selvecs=microblaze_elf32_vec | 85 | targ_selvecs=microblaze_elf32_vec |
| @@ -88,36 +96,36 @@ index f13812b7c7..a98c220db5 100644 | |||
| 88 | 96 | ||
| 89 | #ifdef BFD64 | 97 | #ifdef BFD64 |
| 90 | diff --git a/bfd/configure b/bfd/configure | 98 | diff --git a/bfd/configure b/bfd/configure |
| 91 | index 8d6c94aef2..3defb1f784 100755 | 99 | index abd7b2a83e5..731c059eba0 100755 |
| 92 | --- a/bfd/configure | 100 | --- a/bfd/configure |
| 93 | +++ b/bfd/configure | 101 | +++ b/bfd/configure |
| 94 | @@ -14847,6 +14847,8 @@ do | 102 | @@ -14804,6 +14804,8 @@ do |
| 95 | rx_elf32_linux_le_vec) tb="$tb elf32-rx.lo elf32.lo $elf" ;; | 103 | metag_elf32_vec) tb="$tb elf32-metag.lo elf32.lo $elf" ;; |
| 96 | s390_elf32_vec) tb="$tb elf32-s390.lo elf32.lo $elf" ;; | 104 | microblaze_elf32_vec) tb="$tb elf32-microblaze.lo elf32.lo $elf" ;; |
| 97 | s390_elf64_vec) tb="$tb elf64-s390.lo elf64.lo $elf"; target_size=64 ;; | 105 | microblaze_elf32_le_vec) tb="$tb elf32-microblaze.lo elf32.lo $elf" ;; |
| 98 | + microblaze_elf64_vec) tb="$tb elf64-microblaze.lo elf64.lo $elf"; target_size=64 ;; | 106 | + microblaze_elf64_vec) tb="$tb elf64-microblaze.lo elf64.lo $elf"; target_size=64 ;; |
| 99 | + microblaze_elf64_le_vec) tb="$tb elf64-microblaze.lo elf64.lo $elf"; target_size=64 ;; | 107 | + microblaze_elf64_le_vec) tb="$tb elf64-microblaze.lo elf64.lo $elf"; target_size=64 ;; |
| 100 | score_elf32_be_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;; | 108 | mips_ecoff_be_vec) tb="$tb coff-mips.lo ecoff.lo $ecoff" ;; |
| 101 | score_elf32_le_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;; | 109 | mips_ecoff_le_vec) tb="$tb coff-mips.lo ecoff.lo $ecoff" ;; |
| 102 | sh_coff_vec) tb="$tb coff-sh.lo $coff" ;; | 110 | mips_ecoff_bele_vec) tb="$tb coff-mips.lo ecoff.lo $ecoff" ;; |
| 103 | diff --git a/bfd/configure.ac b/bfd/configure.ac | 111 | diff --git a/bfd/configure.ac b/bfd/configure.ac |
| 104 | index 5f02c41520..d3010b47dc 100644 | 112 | index 7eee83ae4d4..b87f6183b98 100644 |
| 105 | --- a/bfd/configure.ac | 113 | --- a/bfd/configure.ac |
| 106 | +++ b/bfd/configure.ac | 114 | +++ b/bfd/configure.ac |
| 107 | @@ -615,6 +615,8 @@ do | 115 | @@ -540,6 +540,8 @@ do |
| 108 | rx_elf32_linux_le_vec) tb="$tb elf32-rx.lo elf32.lo $elf" ;; | 116 | metag_elf32_vec) tb="$tb elf32-metag.lo elf32.lo $elf" ;; |
| 109 | s390_elf32_vec) tb="$tb elf32-s390.lo elf32.lo $elf" ;; | 117 | microblaze_elf32_vec) tb="$tb elf32-microblaze.lo elf32.lo $elf" ;; |
| 110 | s390_elf64_vec) tb="$tb elf64-s390.lo elf64.lo $elf"; target_size=64 ;; | 118 | microblaze_elf32_le_vec) tb="$tb elf32-microblaze.lo elf32.lo $elf" ;; |
| 111 | + microblaze_elf64_vec) tb="$tb elf64-microblaze.lo elf64.lo $elf"; target_size=64 ;; | 119 | + microblaze_elf64_vec) tb="$tb elf64-microblaze.lo elf64.lo $elf"; target_size=64 ;; |
| 112 | + microblaze_elf64_le_vec) tb="$tb elf64-microblaze.lo elf64.lo $elf"; target_size=64 ;; | 120 | + microblaze_elf64_le_vec) tb="$tb elf64-microblaze.lo elf64.lo $elf"; target_size=64 ;; |
| 113 | score_elf32_be_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;; | 121 | mips_ecoff_be_vec) tb="$tb coff-mips.lo ecoff.lo $ecoff" ;; |
| 114 | score_elf32_le_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;; | 122 | mips_ecoff_le_vec) tb="$tb coff-mips.lo ecoff.lo $ecoff" ;; |
| 115 | sh_coff_vec) tb="$tb coff-sh.lo $coff" ;; | 123 | mips_ecoff_bele_vec) tb="$tb coff-mips.lo ecoff.lo $ecoff" ;; |
| 116 | diff --git a/bfd/cpu-microblaze.c b/bfd/cpu-microblaze.c | 124 | diff --git a/bfd/cpu-microblaze.c b/bfd/cpu-microblaze.c |
| 117 | index 9bc2eb3de9..c91ba46f75 100644 | 125 | index 4e05d73f01b..4b48b310c6a 100644 |
| 118 | --- a/bfd/cpu-microblaze.c | 126 | --- a/bfd/cpu-microblaze.c |
| 119 | +++ b/bfd/cpu-microblaze.c | 127 | +++ b/bfd/cpu-microblaze.c |
| 120 | @@ -23,7 +23,24 @@ | 128 | @@ -23,7 +23,25 @@ |
| 121 | #include "bfd.h" | 129 | #include "bfd.h" |
| 122 | #include "libbfd.h" | 130 | #include "libbfd.h" |
| 123 | 131 | ||
| @@ -138,15 +146,16 @@ index 9bc2eb3de9..c91ba46f75 100644 | |||
| 138 | + bfd_default_compatible, /* Architecture comparison function. */ | 146 | + bfd_default_compatible, /* Architecture comparison function. */ |
| 139 | + bfd_default_scan, /* String to architecture conversion. */ | 147 | + bfd_default_scan, /* String to architecture conversion. */ |
| 140 | + bfd_arch_default_fill, /* Default fill. */ | 148 | + bfd_arch_default_fill, /* Default fill. */ |
| 141 | + &bfd_microblaze_arch[1] /* Next in list. */ | 149 | + &bfd_microblaze_arch[1], /* Next in list. */ |
| 150 | + 0 /* Maximum offset of a reloc from the start of an insn. */ | ||
| 142 | +}, | 151 | +}, |
| 143 | { | 152 | { |
| 144 | 32, /* 32 bits in a word. */ | 153 | 32, /* Bits in a word. */ |
| 145 | 32, /* 32 bits in an address. */ | 154 | 32, /* Bits in an address. */ |
| 146 | @@ -38,4 +55,37 @@ const bfd_arch_info_type bfd_microblaze_arch = | 155 | @@ -39,4 +57,39 @@ const bfd_arch_info_type bfd_microblaze_arch = |
| 147 | bfd_default_scan, /* String to architecture conversion. */ | ||
| 148 | bfd_arch_default_fill, /* Default fill. */ | 156 | bfd_arch_default_fill, /* Default fill. */ |
| 149 | NULL /* Next in list. */ | 157 | NULL, /* Next in list. */ |
| 158 | 0 /* Maximum offset of a reloc from the start of an insn. */ | ||
| 150 | +} | 159 | +} |
| 151 | +#else | 160 | +#else |
| 152 | +{ | 161 | +{ |
| @@ -162,7 +171,8 @@ index 9bc2eb3de9..c91ba46f75 100644 | |||
| 162 | + bfd_default_compatible, /* Architecture comparison function. */ | 171 | + bfd_default_compatible, /* Architecture comparison function. */ |
| 163 | + bfd_default_scan, /* String to architecture conversion. */ | 172 | + bfd_default_scan, /* String to architecture conversion. */ |
| 164 | + bfd_arch_default_fill, /* Default fill. */ | 173 | + bfd_arch_default_fill, /* Default fill. */ |
| 165 | + &bfd_microblaze_arch[1] /* Next in list. */ | 174 | + &bfd_microblaze_arch[1], /* Next in list. */ |
| 175 | + 0 /* Maximum offset of a reloc from the start of an insn. */ | ||
| 166 | +}, | 176 | +}, |
| 167 | +{ | 177 | +{ |
| 168 | + 64, /* 32 bits in a word. */ | 178 | + 64, /* 32 bits in a word. */ |
| @@ -177,16 +187,29 @@ index 9bc2eb3de9..c91ba46f75 100644 | |||
| 177 | + bfd_default_compatible, /* Architecture comparison function. */ | 187 | + bfd_default_compatible, /* Architecture comparison function. */ |
| 178 | + bfd_default_scan, /* String to architecture conversion. */ | 188 | + bfd_default_scan, /* String to architecture conversion. */ |
| 179 | + bfd_arch_default_fill, /* Default fill. */ | 189 | + bfd_arch_default_fill, /* Default fill. */ |
| 180 | + NULL /* Next in list. */ | 190 | + NULL, /* Next in list. */ |
| 191 | + 0 /* Maximum offset of a reloc from the start of an insn. */ | ||
| 181 | +} | 192 | +} |
| 182 | +#endif | 193 | +#endif |
| 183 | }; | 194 | }; |
| 195 | diff --git a/bfd/doc/Makefile.in b/bfd/doc/Makefile.in | ||
| 196 | index 0115dfc406c..d75411d2af7 100644 | ||
| 197 | --- a/bfd/doc/Makefile.in | ||
| 198 | +++ b/bfd/doc/Makefile.in | ||
| 199 | @@ -375,6 +375,7 @@ pdfdir = @pdfdir@ | ||
| 200 | prefix = @prefix@ | ||
| 201 | program_transform_name = @program_transform_name@ | ||
| 202 | psdir = @psdir@ | ||
| 203 | +runstatedir = @runstatedir@ | ||
| 204 | sbindir = @sbindir@ | ||
| 205 | sharedstatedir = @sharedstatedir@ | ||
| 206 | srcdir = @srcdir@ | ||
| 184 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c | 207 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c |
| 185 | new file mode 100644 | 208 | new file mode 100644 |
| 186 | index 0000000000..0f43ae6ea8 | 209 | index 00000000000..fa4b95e47e0 |
| 187 | --- /dev/null | 210 | --- /dev/null |
| 188 | +++ b/bfd/elf64-microblaze.c | 211 | +++ b/bfd/elf64-microblaze.c |
| 189 | @@ -0,0 +1,3584 @@ | 212 | @@ -0,0 +1,3560 @@ |
| 190 | +/* Xilinx MicroBlaze-specific support for 32-bit ELF | 213 | +/* Xilinx MicroBlaze-specific support for 32-bit ELF |
| 191 | + | 214 | + |
| 192 | + Copyright (C) 2009-2016 Free Software Foundation, Inc. | 215 | + Copyright (C) 2009-2016 Free Software Foundation, Inc. |
| @@ -844,7 +867,7 @@ index 0000000000..0f43ae6ea8 | |||
| 844 | + | 867 | + |
| 845 | +/* Set the howto pointer for a RCE ELF reloc. */ | 868 | +/* Set the howto pointer for a RCE ELF reloc. */ |
| 846 | + | 869 | + |
| 847 | +static void | 870 | +static bfd_boolean |
| 848 | +microblaze_elf_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED, | 871 | +microblaze_elf_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED, |
| 849 | + arelent * cache_ptr, | 872 | + arelent * cache_ptr, |
| 850 | + Elf_Internal_Rela * dst) | 873 | + Elf_Internal_Rela * dst) |
| @@ -858,13 +881,14 @@ index 0000000000..0f43ae6ea8 | |||
| 858 | + r_type = ELF64_R_TYPE (dst->r_info); | 881 | + r_type = ELF64_R_TYPE (dst->r_info); |
| 859 | + if (r_type >= R_MICROBLAZE_max) | 882 | + if (r_type >= R_MICROBLAZE_max) |
| 860 | + { | 883 | + { |
| 861 | + (*_bfd_error_handler) (_("%B: unrecognised MicroBlaze reloc number: %d"), | 884 | + (*_bfd_error_handler) (_("%pB: unrecognised MicroBlaze reloc number: %d"), |
| 862 | + abfd, r_type); | 885 | + abfd, r_type); |
| 863 | + bfd_set_error (bfd_error_bad_value); | 886 | + bfd_set_error (bfd_error_bad_value); |
| 864 | + r_type = R_MICROBLAZE_NONE; | 887 | + return FALSE; |
| 865 | + } | 888 | + } |
| 866 | + | 889 | + |
| 867 | + cache_ptr->howto = microblaze_elf_howto_table [r_type]; | 890 | + cache_ptr->howto = microblaze_elf_howto_table [r_type]; |
| 891 | + return TRUE; | ||
| 868 | +} | 892 | +} |
| 869 | + | 893 | + |
| 870 | +/* Microblaze ELF local labels start with 'L.' or '$L', not '.L'. */ | 894 | +/* Microblaze ELF local labels start with 'L.' or '$L', not '.L'. */ |
| @@ -1263,7 +1287,7 @@ index 0000000000..0f43ae6ea8 | |||
| 1263 | + /* Only relocate if the symbol is defined. */ | 1287 | + /* Only relocate if the symbol is defined. */ |
| 1264 | + if (sec) | 1288 | + if (sec) |
| 1265 | + { | 1289 | + { |
| 1266 | + name = bfd_get_section_name (sec->owner, sec); | 1290 | + name = bfd_section_name (sec); |
| 1267 | + | 1291 | + |
| 1268 | + if (strcmp (name, ".sdata2") == 0 | 1292 | + if (strcmp (name, ".sdata2") == 0 |
| 1269 | + || strcmp (name, ".sbss2") == 0) | 1293 | + || strcmp (name, ".sbss2") == 0) |
| @@ -1292,7 +1316,7 @@ index 0000000000..0f43ae6ea8 | |||
| 1292 | + bfd_get_filename (input_bfd), | 1316 | + bfd_get_filename (input_bfd), |
| 1293 | + sym_name, | 1317 | + sym_name, |
| 1294 | + microblaze_elf_howto_table[(int) r_type]->name, | 1318 | + microblaze_elf_howto_table[(int) r_type]->name, |
| 1295 | + bfd_get_section_name (sec->owner, sec)); | 1319 | + bfd_section_name (sec)); |
| 1296 | + /*bfd_set_error (bfd_error_bad_value); ??? why? */ | 1320 | + /*bfd_set_error (bfd_error_bad_value); ??? why? */ |
| 1297 | + ret = FALSE; | 1321 | + ret = FALSE; |
| 1298 | + continue; | 1322 | + continue; |
| @@ -1308,7 +1332,7 @@ index 0000000000..0f43ae6ea8 | |||
| 1308 | + /* Only relocate if the symbol is defined. */ | 1332 | + /* Only relocate if the symbol is defined. */ |
| 1309 | + if (sec) | 1333 | + if (sec) |
| 1310 | + { | 1334 | + { |
| 1311 | + name = bfd_get_section_name (sec->owner, sec); | 1335 | + name = bfd_section_name (sec); |
| 1312 | + | 1336 | + |
| 1313 | + if (strcmp (name, ".sdata") == 0 | 1337 | + if (strcmp (name, ".sdata") == 0 |
| 1314 | + || strcmp (name, ".sbss") == 0) | 1338 | + || strcmp (name, ".sbss") == 0) |
| @@ -1337,7 +1361,7 @@ index 0000000000..0f43ae6ea8 | |||
| 1337 | + bfd_get_filename (input_bfd), | 1361 | + bfd_get_filename (input_bfd), |
| 1338 | + sym_name, | 1362 | + sym_name, |
| 1339 | + microblaze_elf_howto_table[(int) r_type]->name, | 1363 | + microblaze_elf_howto_table[(int) r_type]->name, |
| 1340 | + bfd_get_section_name (sec->owner, sec)); | 1364 | + bfd_section_name (sec)); |
| 1341 | + /*bfd_set_error (bfd_error_bad_value); ??? why? */ | 1365 | + /*bfd_set_error (bfd_error_bad_value); ??? why? */ |
| 1342 | + ret = FALSE; | 1366 | + ret = FALSE; |
| 1343 | + continue; | 1367 | + continue; |
| @@ -1399,6 +1423,7 @@ index 0000000000..0f43ae6ea8 | |||
| 1399 | + goto dogot; | 1423 | + goto dogot; |
| 1400 | + case (int) R_MICROBLAZE_TLSLD: | 1424 | + case (int) R_MICROBLAZE_TLSLD: |
| 1401 | + tls_type = (TLS_TLS | TLS_LD); | 1425 | + tls_type = (TLS_TLS | TLS_LD); |
| 1426 | + /* Fall through. */ | ||
| 1402 | + dogot: | 1427 | + dogot: |
| 1403 | + case (int) R_MICROBLAZE_GOT_64: | 1428 | + case (int) R_MICROBLAZE_GOT_64: |
| 1404 | + { | 1429 | + { |
| @@ -1699,7 +1724,7 @@ index 0000000000..0f43ae6ea8 | |||
| 1699 | + { | 1724 | + { |
| 1700 | + BFD_FAIL (); | 1725 | + BFD_FAIL (); |
| 1701 | + (*_bfd_error_handler) | 1726 | + (*_bfd_error_handler) |
| 1702 | + (_("%B: probably compiled without -fPIC?"), | 1727 | + (_("%pB: probably compiled without -fPIC?"), |
| 1703 | + input_bfd); | 1728 | + input_bfd); |
| 1704 | + bfd_set_error (bfd_error_bad_value); | 1729 | + bfd_set_error (bfd_error_bad_value); |
| 1705 | + return FALSE; | 1730 | + return FALSE; |
| @@ -1753,7 +1778,7 @@ index 0000000000..0f43ae6ea8 | |||
| 1753 | + name = (bfd_elf_string_from_elf_section | 1778 | + name = (bfd_elf_string_from_elf_section |
| 1754 | + (input_bfd, symtab_hdr->sh_link, sym->st_name)); | 1779 | + (input_bfd, symtab_hdr->sh_link, sym->st_name)); |
| 1755 | + if (name == NULL || *name == '\0') | 1780 | + if (name == NULL || *name == '\0') |
| 1756 | + name = bfd_section_name (input_bfd, sec); | 1781 | + name = bfd_section_name (sec); |
| 1757 | + } | 1782 | + } |
| 1758 | + | 1783 | + |
| 1759 | + if (errmsg != NULL) | 1784 | + if (errmsg != NULL) |
| @@ -1798,21 +1823,6 @@ index 0000000000..0f43ae6ea8 | |||
| 1798 | + return ret; | 1823 | + return ret; |
| 1799 | +} | 1824 | +} |
| 1800 | + | 1825 | + |
| 1801 | +/* Merge backend specific data from an object file to the output | ||
| 1802 | + object file when linking. | ||
| 1803 | + | ||
| 1804 | + Note: We only use this hook to catch endian mismatches. */ | ||
| 1805 | +static bfd_boolean | ||
| 1806 | +microblaze_elf_merge_private_bfd_data (bfd * ibfd, bfd * obfd) | ||
| 1807 | +{ | ||
| 1808 | + /* Check if we have the same endianess. */ | ||
| 1809 | + if (! _bfd_generic_verify_endian_match (ibfd, obfd)) | ||
| 1810 | + return FALSE; | ||
| 1811 | + | ||
| 1812 | + return TRUE; | ||
| 1813 | +} | ||
| 1814 | + | ||
| 1815 | + | ||
| 1816 | +/* Calculate fixup value for reference. */ | 1826 | +/* Calculate fixup value for reference. */ |
| 1817 | + | 1827 | + |
| 1818 | +static int | 1828 | +static int |
| @@ -2129,7 +2139,7 @@ index 0000000000..0f43ae6ea8 | |||
| 2129 | + irelscanend = irelocs + o->reloc_count; | 2139 | + irelscanend = irelocs + o->reloc_count; |
| 2130 | + for (irelscan = irelocs; irelscan < irelscanend; irelscan++) | 2140 | + for (irelscan = irelocs; irelscan < irelscanend; irelscan++) |
| 2131 | + { | 2141 | + { |
| 2132 | + if (1 && ELF64_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32_NONE) | 2142 | + if (ELF64_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32_NONE) |
| 2133 | + { | 2143 | + { |
| 2134 | + unsigned int val; | 2144 | + unsigned int val; |
| 2135 | + | 2145 | + |
| @@ -2488,17 +2498,6 @@ index 0000000000..0f43ae6ea8 | |||
| 2488 | + return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); | 2498 | + return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); |
| 2489 | +} | 2499 | +} |
| 2490 | + | 2500 | + |
| 2491 | +/* Update the got entry reference counts for the section being removed. */ | ||
| 2492 | + | ||
| 2493 | +static bfd_boolean | ||
| 2494 | +microblaze_elf_gc_sweep_hook (bfd * abfd ATTRIBUTE_UNUSED, | ||
| 2495 | + struct bfd_link_info * info ATTRIBUTE_UNUSED, | ||
| 2496 | + asection * sec ATTRIBUTE_UNUSED, | ||
| 2497 | + const Elf_Internal_Rela * relocs ATTRIBUTE_UNUSED) | ||
| 2498 | +{ | ||
| 2499 | + return TRUE; | ||
| 2500 | +} | ||
| 2501 | + | ||
| 2502 | +/* PIC support. */ | 2501 | +/* PIC support. */ |
| 2503 | + | 2502 | + |
| 2504 | +#define PLT_ENTRY_SIZE 16 | 2503 | +#define PLT_ENTRY_SIZE 16 |
| @@ -2531,13 +2530,13 @@ index 0000000000..0f43ae6ea8 | |||
| 2531 | + if ((htab->srelgot = bfd_get_linker_section (dynobj, ".rela.got")) == NULL) | 2530 | + if ((htab->srelgot = bfd_get_linker_section (dynobj, ".rela.got")) == NULL) |
| 2532 | + htab->srelgot = bfd_make_section_anyway (dynobj, ".rela.got"); | 2531 | + htab->srelgot = bfd_make_section_anyway (dynobj, ".rela.got"); |
| 2533 | + if (htab->srelgot == NULL | 2532 | + if (htab->srelgot == NULL |
| 2534 | + || ! bfd_set_section_flags (dynobj, htab->srelgot, SEC_ALLOC | 2533 | + || ! bfd_set_section_flags (htab->srelgot, SEC_ALLOC |
| 2535 | + | SEC_LOAD | 2534 | + | SEC_LOAD |
| 2536 | + | SEC_HAS_CONTENTS | 2535 | + | SEC_HAS_CONTENTS |
| 2537 | + | SEC_IN_MEMORY | 2536 | + | SEC_IN_MEMORY |
| 2538 | + | SEC_LINKER_CREATED | 2537 | + | SEC_LINKER_CREATED |
| 2539 | + | SEC_READONLY) | 2538 | + | SEC_READONLY) |
| 2540 | + || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2)) | 2539 | + || ! bfd_set_section_alignment (htab->srelgot, 2)) |
| 2541 | + return FALSE; | 2540 | + return FALSE; |
| 2542 | + return TRUE; | 2541 | + return TRUE; |
| 2543 | +} | 2542 | +} |
| @@ -2618,7 +2617,7 @@ index 0000000000..0f43ae6ea8 | |||
| 2618 | + | 2617 | + |
| 2619 | + /* PR15323, ref flags aren't set for references in the same | 2618 | + /* PR15323, ref flags aren't set for references in the same |
| 2620 | + object. */ | 2619 | + object. */ |
| 2621 | + h->root.non_ir_ref = 1; | 2620 | + h->root.non_ir_ref_regular = 1; |
| 2622 | + } | 2621 | + } |
| 2623 | + | 2622 | + |
| 2624 | + switch (r_type) | 2623 | + switch (r_type) |
| @@ -2654,6 +2653,7 @@ index 0000000000..0f43ae6ea8 | |||
| 2654 | + tls_type |= (TLS_TLS | TLS_LD); | 2653 | + tls_type |= (TLS_TLS | TLS_LD); |
| 2655 | + dogottls: | 2654 | + dogottls: |
| 2656 | + sec->has_tls_reloc = 1; | 2655 | + sec->has_tls_reloc = 1; |
| 2656 | + /* Fall through. */ | ||
| 2657 | + case R_MICROBLAZE_GOT_64: | 2657 | + case R_MICROBLAZE_GOT_64: |
| 2658 | + if (htab->sgot == NULL) | 2658 | + if (htab->sgot == NULL) |
| 2659 | + { | 2659 | + { |
| @@ -2927,12 +2927,12 @@ index 0000000000..0f43ae6ea8 | |||
| 2927 | + /* If this is a weak symbol, and there is a real definition, the | 2927 | + /* If this is a weak symbol, and there is a real definition, the |
| 2928 | + processor independent code will have arranged for us to see the | 2928 | + processor independent code will have arranged for us to see the |
| 2929 | + real definition first, and we can just use the same value. */ | 2929 | + real definition first, and we can just use the same value. */ |
| 2930 | + if (h->u.weakdef != NULL) | 2930 | + if (h->is_weakalias) |
| 2931 | + { | 2931 | + { |
| 2932 | + BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined | 2932 | + struct elf_link_hash_entry *def = weakdef (h); |
| 2933 | + || h->u.weakdef->root.type == bfd_link_hash_defweak); | 2933 | + BFD_ASSERT (def->root.type == bfd_link_hash_defined); |
| 2934 | + h->root.u.def.section = h->u.weakdef->root.u.def.section; | 2934 | + h->root.u.def.section = def->root.u.def.section; |
| 2935 | + h->root.u.def.value = h->u.weakdef->root.u.def.value; | 2935 | + h->root.u.def.value = def->root.u.def.value; |
| 2936 | + return TRUE; | 2936 | + return TRUE; |
| 2937 | + } | 2937 | + } |
| 2938 | + | 2938 | + |
| @@ -3004,9 +3004,9 @@ index 0000000000..0f43ae6ea8 | |||
| 3004 | + sdynbss = htab->sdynbss; | 3004 | + sdynbss = htab->sdynbss; |
| 3005 | + /* Apply the required alignment. */ | 3005 | + /* Apply the required alignment. */ |
| 3006 | + sdynbss->size = BFD_ALIGN (sdynbss->size, (bfd_size_type) (1 << power_of_two)); | 3006 | + sdynbss->size = BFD_ALIGN (sdynbss->size, (bfd_size_type) (1 << power_of_two)); |
| 3007 | + if (power_of_two > bfd_get_section_alignment (dynobj, sdynbss)) | 3007 | + if (power_of_two > bfd_section_alignment (sdynbss)) |
| 3008 | + { | 3008 | + { |
| 3009 | + if (! bfd_set_section_alignment (dynobj, sdynbss, power_of_two)) | 3009 | + if (! bfd_set_section_alignment (sdynbss, power_of_two)) |
| 3010 | + return FALSE; | 3010 | + return FALSE; |
| 3011 | + } | 3011 | + } |
| 3012 | + | 3012 | + |
| @@ -3353,7 +3353,7 @@ index 0000000000..0f43ae6ea8 | |||
| 3353 | + | 3353 | + |
| 3354 | + /* It's OK to base decisions on the section name, because none | 3354 | + /* It's OK to base decisions on the section name, because none |
| 3355 | + of the dynobj section names depend upon the input files. */ | 3355 | + of the dynobj section names depend upon the input files. */ |
| 3356 | + name = bfd_get_section_name (dynobj, s); | 3356 | + name = bfd_section_name (s); |
| 3357 | + | 3357 | + |
| 3358 | + if (strncmp (name, ".rela", 5) == 0) | 3358 | + if (strncmp (name, ".rela", 5) == 0) |
| 3359 | + { | 3359 | + { |
| @@ -3721,7 +3721,7 @@ index 0000000000..0f43ae6ea8 | |||
| 3721 | + put into .sbss. */ | 3721 | + put into .sbss. */ |
| 3722 | + *secp = bfd_make_section_old_way (abfd, ".sbss"); | 3722 | + *secp = bfd_make_section_old_way (abfd, ".sbss"); |
| 3723 | + if (*secp == NULL | 3723 | + if (*secp == NULL |
| 3724 | + || ! bfd_set_section_flags (abfd, *secp, SEC_IS_COMMON)) | 3724 | + || ! bfd_set_section_flags (*secp, SEC_IS_COMMON)) |
| 3725 | + return FALSE; | 3725 | + return FALSE; |
| 3726 | + | 3726 | + |
| 3727 | + *valp = sym->st_size; | 3727 | + *valp = sym->st_size; |
| @@ -3748,11 +3748,10 @@ index 0000000000..0f43ae6ea8 | |||
| 3748 | +#define bfd_elf64_bfd_is_local_label_name microblaze_elf_is_local_label_name | 3748 | +#define bfd_elf64_bfd_is_local_label_name microblaze_elf_is_local_label_name |
| 3749 | +#define elf_backend_relocate_section microblaze_elf_relocate_section | 3749 | +#define elf_backend_relocate_section microblaze_elf_relocate_section |
| 3750 | +#define bfd_elf64_bfd_relax_section microblaze_elf_relax_section | 3750 | +#define bfd_elf64_bfd_relax_section microblaze_elf_relax_section |
| 3751 | +#define bfd_elf64_bfd_merge_private_bfd_data microblaze_elf_merge_private_bfd_data | 3751 | +#define bfd_elf64_bfd_merge_private_bfd_data _bfd_generic_verify_endian_match |
| 3752 | +#define bfd_elf64_bfd_reloc_name_lookup microblaze_elf_reloc_name_lookup | 3752 | +#define bfd_elf64_bfd_reloc_name_lookup microblaze_elf_reloc_name_lookup |
| 3753 | + | 3753 | + |
| 3754 | +#define elf_backend_gc_mark_hook microblaze_elf_gc_mark_hook | 3754 | +#define elf_backend_gc_mark_hook microblaze_elf_gc_mark_hook |
| 3755 | +#define elf_backend_gc_sweep_hook microblaze_elf_gc_sweep_hook | ||
| 3756 | +#define elf_backend_check_relocs microblaze_elf_check_relocs | 3755 | +#define elf_backend_check_relocs microblaze_elf_check_relocs |
| 3757 | +#define elf_backend_copy_indirect_symbol microblaze_elf_copy_indirect_symbol | 3756 | +#define elf_backend_copy_indirect_symbol microblaze_elf_copy_indirect_symbol |
| 3758 | +#define bfd_elf64_bfd_link_hash_table_create microblaze_elf_link_hash_table_create | 3757 | +#define bfd_elf64_bfd_link_hash_table_create microblaze_elf_link_hash_table_create |
| @@ -3772,10 +3771,10 @@ index 0000000000..0f43ae6ea8 | |||
| 3772 | + | 3771 | + |
| 3773 | +#include "elf64-target.h" | 3772 | +#include "elf64-target.h" |
| 3774 | diff --git a/bfd/targets.c b/bfd/targets.c | 3773 | diff --git a/bfd/targets.c b/bfd/targets.c |
| 3775 | index 158168cb3b..ef567a30c8 100644 | 3774 | index fb0c669e7f7..97b0e473e16 100644 |
| 3776 | --- a/bfd/targets.c | 3775 | --- a/bfd/targets.c |
| 3777 | +++ b/bfd/targets.c | 3776 | +++ b/bfd/targets.c |
| 3778 | @@ -706,6 +706,8 @@ extern const bfd_target mep_elf32_le_vec; | 3777 | @@ -779,6 +779,8 @@ extern const bfd_target mep_elf32_le_vec; |
| 3779 | extern const bfd_target metag_elf32_vec; | 3778 | extern const bfd_target metag_elf32_vec; |
| 3780 | extern const bfd_target microblaze_elf32_vec; | 3779 | extern const bfd_target microblaze_elf32_vec; |
| 3781 | extern const bfd_target microblaze_elf32_le_vec; | 3780 | extern const bfd_target microblaze_elf32_le_vec; |
| @@ -3784,7 +3783,7 @@ index 158168cb3b..ef567a30c8 100644 | |||
| 3784 | extern const bfd_target mips_ecoff_be_vec; | 3783 | extern const bfd_target mips_ecoff_be_vec; |
| 3785 | extern const bfd_target mips_ecoff_le_vec; | 3784 | extern const bfd_target mips_ecoff_le_vec; |
| 3786 | extern const bfd_target mips_ecoff_bele_vec; | 3785 | extern const bfd_target mips_ecoff_bele_vec; |
| 3787 | @@ -1073,6 +1075,10 @@ static const bfd_target * const _bfd_target_vector[] = | 3786 | @@ -1150,6 +1152,10 @@ static const bfd_target * const _bfd_target_vector[] = |
| 3788 | 3787 | ||
| 3789 | &metag_elf32_vec, | 3788 | &metag_elf32_vec, |
| 3790 | 3789 | ||
| @@ -3796,7 +3795,7 @@ index 158168cb3b..ef567a30c8 100644 | |||
| 3796 | 3795 | ||
| 3797 | &mips_ecoff_be_vec, | 3796 | &mips_ecoff_be_vec, |
| 3798 | diff --git a/include/elf/common.h b/include/elf/common.h | 3797 | diff --git a/include/elf/common.h b/include/elf/common.h |
| 3799 | index e8faf67be3..ca89da1631 100644 | 3798 | index 75c4fb7e9d7..1584e1c87d0 100644 |
| 3800 | --- a/include/elf/common.h | 3799 | --- a/include/elf/common.h |
| 3801 | +++ b/include/elf/common.h | 3800 | +++ b/include/elf/common.h |
| 3802 | @@ -339,6 +339,7 @@ | 3801 | @@ -339,6 +339,7 @@ |
| @@ -3808,101 +3807,105 @@ index e8faf67be3..ca89da1631 100644 | |||
| 3808 | #define EM_CSKY 252 /* C-SKY processor family. */ | 3807 | #define EM_CSKY 252 /* C-SKY processor family. */ |
| 3809 | 3808 | ||
| 3810 | diff --git a/opcodes/microblaze-dis.c b/opcodes/microblaze-dis.c | 3809 | diff --git a/opcodes/microblaze-dis.c b/opcodes/microblaze-dis.c |
| 3811 | index f8aaf27873..20ea6a885a 100644 | 3810 | index 356f1da22ed..437f536e96a 100644 |
| 3812 | --- a/opcodes/microblaze-dis.c | 3811 | --- a/opcodes/microblaze-dis.c |
| 3813 | +++ b/opcodes/microblaze-dis.c | 3812 | +++ b/opcodes/microblaze-dis.c |
| 3814 | @@ -33,6 +33,7 @@ | 3813 | @@ -33,6 +33,7 @@ |
| 3815 | #define get_field_r1(instr) get_field (instr, RA_MASK, RA_LOW) | 3814 | #define get_field_r1(buf, instr) get_field (buf, instr, RA_MASK, RA_LOW) |
| 3816 | #define get_field_r2(instr) get_field (instr, RB_MASK, RB_LOW) | 3815 | #define get_field_r2(buf, instr) get_field (buf, instr, RB_MASK, RB_LOW) |
| 3817 | #define get_int_field_imm(instr) ((instr & IMM_MASK) >> IMM_LOW) | 3816 | #define get_int_field_imm(instr) ((instr & IMM_MASK) >> IMM_LOW) |
| 3818 | +#define get_int_field_imml(instr) ((instr & IMML_MASK) >> IMM_LOW) | 3817 | +#define get_int_field_imml(instr) ((instr & IMML_MASK) >> IMM_LOW) |
| 3819 | #define get_int_field_r1(instr) ((instr & RA_MASK) >> RA_LOW) | 3818 | #define get_int_field_r1(instr) ((instr & RA_MASK) >> RA_LOW) |
| 3820 | 3819 | ||
| 3821 | 3820 | #define NUM_STRBUFS 3 | |
| 3822 | @@ -56,11 +57,20 @@ get_field_imm (long instr) | 3821 | @@ -73,11 +74,20 @@ get_field_imm (struct string_buf *buf, long instr) |
| 3823 | } | 3822 | } |
| 3824 | 3823 | ||
| 3825 | static char * | 3824 | static char * |
| 3826 | -get_field_imm5 (long instr) | 3825 | -get_field_imm5 (struct string_buf *buf, long instr) |
| 3827 | +get_field_imml (long instr) | 3826 | +get_field_imml (struct string_buf *buf, long instr) |
| 3828 | { | 3827 | { |
| 3829 | char tmpstr[25]; | 3828 | char *p = strbuf (buf); |
| 3830 | 3829 | ||
| 3831 | - sprintf (tmpstr, "%d", (short)((instr & IMM5_MASK) >> IMM_LOW)); | 3830 | - sprintf (p, "%d", (short)((instr & IMM5_MASK) >> IMM_LOW)); |
| 3832 | + sprintf (tmpstr, "%d", (short)((instr & IMML_MASK) >> IMM_LOW)); | 3831 | + sprintf (p, "%d", (short)((instr & IMML_MASK) >> IMM_LOW)); |
| 3833 | + return (strdup (tmpstr)); | 3832 | + return p; |
| 3834 | +} | 3833 | +} |
| 3835 | + | 3834 | + |
| 3836 | +static char * | 3835 | +static char * |
| 3837 | +get_field_imms (long instr) | 3836 | +get_field_imms (struct string_buf *buf, long instr) |
| 3838 | +{ | 3837 | +{ |
| 3839 | + char tmpstr[25]; | 3838 | + char *p = strbuf (buf); |
| 3840 | + | 3839 | + |
| 3841 | + sprintf (tmpstr, "%d", (short)((instr & IMM6_MASK) >> IMM_LOW)); | 3840 | + sprintf (p, "%d", (short)((instr & IMM6_MASK) >> IMM_LOW)); |
| 3842 | return (strdup (tmpstr)); | 3841 | return p; |
| 3843 | } | 3842 | } |
| 3844 | 3843 | ||
| 3845 | @@ -74,14 +84,14 @@ get_field_imm5_mbar (long instr) | 3844 | @@ -91,14 +101,14 @@ get_field_imm5_mbar (struct string_buf *buf, long instr) |
| 3846 | } | 3845 | } |
| 3847 | 3846 | ||
| 3848 | static char * | 3847 | static char * |
| 3849 | -get_field_imm5width (long instr) | 3848 | -get_field_imm5width (struct string_buf *buf, long instr) |
| 3850 | +get_field_immw (long instr) | 3849 | +get_field_immw (struct string_buf *buf, long instr) |
| 3851 | { | 3850 | { |
| 3852 | char tmpstr[25]; | 3851 | char *p = strbuf (buf); |
| 3853 | 3852 | ||
| 3854 | if (instr & 0x00004000) | 3853 | if (instr & 0x00004000) |
| 3855 | - sprintf (tmpstr, "%d", (short)(((instr & IMM5_WIDTH_MASK) >> IMM_WIDTH_LOW))); /* bsefi */ | 3854 | - sprintf (p, "%d", (short)(((instr & IMM5_WIDTH_MASK) >> IMM_WIDTH_LOW))); /* bsefi */ |
| 3856 | + sprintf (tmpstr, "%d", (short)(((instr & IMM6_WIDTH_MASK) >> IMM_WIDTH_LOW))); /* bsefi */ | 3855 | + sprintf (p, "%d", (short)(((instr & IMM6_WIDTH_MASK) >> IMM_WIDTH_LOW))); /* bsefi */ |
| 3857 | else | 3856 | else |
| 3858 | - sprintf (tmpstr, "%d", (short)(((instr & IMM5_WIDTH_MASK) >> IMM_WIDTH_LOW) - ((instr & IMM5_MASK) >> IMM_LOW) + 1)); /* bsifi */ | 3857 | - sprintf (p, "%d", (short)(((instr & IMM5_WIDTH_MASK) >> IMM_WIDTH_LOW) - ((instr & IMM5_MASK) >> IMM_LOW) + 1)); /* bsifi */ |
| 3859 | + sprintf (tmpstr, "%d", (short)(((instr & IMM6_WIDTH_MASK) >> IMM_WIDTH_LOW) - ((instr & IMM6_MASK) >> IMM_LOW) + 1)); /* bsifi */ | 3858 | + sprintf (p, "%d", (short)(((instr & IMM6_WIDTH_MASK) >> IMM_WIDTH_LOW) - ((instr & IMM6_MASK) >> IMM_LOW) + 1)); /* bsifi */ |
| 3860 | return (strdup (tmpstr)); | 3859 | return p; |
| 3861 | } | 3860 | } |
| 3862 | 3861 | ||
| 3863 | @@ -286,9 +296,13 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info) | 3862 | @@ -306,9 +316,14 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info) |
| 3864 | } | 3863 | } |
| 3865 | } | 3864 | } |
| 3866 | break; | 3865 | break; |
| 3867 | - case INST_TYPE_RD_R1_IMM5: | 3866 | - case INST_TYPE_RD_R1_IMM5: |
| 3868 | + case INST_TYPE_RD_R1_IMML: | 3867 | + case INST_TYPE_RD_R1_IMML: |
| 3869 | + print_func (stream, "\t%s, %s, %s", get_field_rd (inst), | 3868 | print_func (stream, "\t%s, %s, %s", get_field_rd (&buf, inst), |
| 3870 | + get_field_r1(inst), get_field_imm (inst)); | 3869 | - get_field_r1 (&buf, inst), get_field_imm5 (&buf, inst)); |
| 3870 | + get_field_r1(&buf, inst), get_field_imm (&buf, inst)); | ||
| 3871 | + /* TODO: Also print symbol */ | 3871 | + /* TODO: Also print symbol */ |
| 3872 | + break; | ||
| 3872 | + case INST_TYPE_RD_R1_IMMS: | 3873 | + case INST_TYPE_RD_R1_IMMS: |
| 3873 | print_func (stream, "\t%s, %s, %s", get_field_rd (inst), | 3874 | + print_func (stream, "\t%s, %s, %s", get_field_rd (&buf, inst), |
| 3874 | - get_field_r1(inst), get_field_imm5 (inst)); | 3875 | + get_field_r1(&buf, inst), get_field_imms (&buf, inst)); |
| 3875 | + get_field_r1(inst), get_field_imms (inst)); | ||
| 3876 | break; | 3876 | break; |
| 3877 | case INST_TYPE_RD_RFSL: | 3877 | case INST_TYPE_RD_RFSL: |
| 3878 | print_func (stream, "\t%s, %s", get_field_rd (inst), get_field_rfsl (inst)); | 3878 | print_func (stream, "\t%s, %s", get_field_rd (&buf, inst), |
| 3879 | @@ -386,6 +400,10 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info) | 3879 | @@ -412,9 +427,12 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info) |
| 3880 | } | 3880 | } |
| 3881 | } | 3881 | } |
| 3882 | break; | 3882 | break; |
| 3883 | - case INST_TYPE_RD_R2: | ||
| 3884 | - print_func (stream, "\t%s, %s", get_field_rd (&buf, inst), | ||
| 3885 | - get_field_r2 (&buf, inst)); | ||
| 3883 | + case INST_TYPE_IMML: | 3886 | + case INST_TYPE_IMML: |
| 3884 | + print_func (stream, "\t%s", get_field_imml (inst)); | 3887 | + print_func (stream, "\t%s", get_field_imml (&buf, inst)); |
| 3885 | + /* TODO: Also print symbol */ | 3888 | + /* TODO: Also print symbol */ |
| 3886 | + break; | 3889 | + break; |
| 3887 | case INST_TYPE_RD_R2: | 3890 | + case INST_TYPE_RD_R2: |
| 3888 | print_func (stream, "\t%s, %s", get_field_rd (inst), get_field_r2 (inst)); | 3891 | + print_func (stream, "\t%s, %s", get_field_rd (&buf, inst), get_field_r2 (&buf, inst)); |
| 3889 | break; | 3892 | break; |
| 3890 | @@ -409,9 +427,10 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info) | 3893 | case INST_TYPE_R2: |
| 3891 | case INST_TYPE_NONE: | 3894 | print_func (stream, "\t%s", get_field_r2 (&buf, inst)); |
| 3892 | break; | 3895 | @@ -439,8 +457,9 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info) |
| 3896 | break; | ||
| 3897 | /* For tuqula instruction */ | ||
| 3893 | /* For bit field insns. */ | 3898 | /* For bit field insns. */ |
| 3894 | - case INST_TYPE_RD_R1_IMM5_IMM5: | 3899 | - case INST_TYPE_RD_R1_IMM5_IMM5: |
| 3895 | - print_func (stream, "\t%s, %s, %s, %s", get_field_rd (inst),get_field_r1(inst),get_field_imm5width (inst), get_field_imm5 (inst)); | 3900 | - 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)); |
| 3896 | - break; | ||
| 3897 | + case INST_TYPE_RD_R1_IMMW_IMMS: | 3901 | + case INST_TYPE_RD_R1_IMMW_IMMS: |
| 3898 | + print_func (stream, "\t%s, %s, %s, %s", get_field_rd (inst), get_field_r1(inst), | 3902 | + print_func (stream, "\t%s, %s, %s, %s", get_field_rd (&buf, inst), get_field_r1(&buf, inst), |
| 3899 | + get_field_immw (inst), get_field_imms (inst)); | 3903 | + get_field_immw (&buf, inst), get_field_imms (&buf, inst)); |
| 3900 | + break; | 3904 | break; |
| 3901 | /* For tuqula instruction */ | 3905 | /* For tuqula instruction */ |
| 3902 | case INST_TYPE_RD: | 3906 | case INST_TYPE_RD: |
| 3903 | print_func (stream, "\t%s", get_field_rd (inst)); | ||
| 3904 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h | 3907 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h |
| 3905 | index ce8ac351b5..985834b8df 100644 | 3908 | index d3b234e1fcd..28dc991c430 100644 |
| 3906 | --- a/opcodes/microblaze-opc.h | 3909 | --- a/opcodes/microblaze-opc.h |
| 3907 | +++ b/opcodes/microblaze-opc.h | 3910 | +++ b/opcodes/microblaze-opc.h |
| 3908 | @@ -40,7 +40,7 @@ | 3911 | @@ -40,7 +40,7 @@ |
| @@ -4130,7 +4133,7 @@ index ce8ac351b5..985834b8df 100644 | |||
| 4130 | #endif /* MICROBLAZE_OPC */ | 4133 | #endif /* MICROBLAZE_OPC */ |
| 4131 | 4134 | ||
| 4132 | diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h | 4135 | diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h |
| 4133 | index 28662694cd..076dbcd0b3 100644 | 4136 | index c3b2b8f0f6e..ad475a4af15 100644 |
| 4134 | --- a/opcodes/microblaze-opcm.h | 4137 | --- a/opcodes/microblaze-opcm.h |
| 4135 | +++ b/opcodes/microblaze-opcm.h | 4138 | +++ b/opcodes/microblaze-opcm.h |
| 4136 | @@ -25,6 +25,7 @@ | 4139 | @@ -25,6 +25,7 @@ |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0016-MB-X-initial-commit.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0016-MB-X-initial-commit.patch index d4441443..8bf07398 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0016-MB-X-initial-commit.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0016-MB-X-initial-commit.patch | |||
| @@ -1,31 +1,31 @@ | |||
| 1 | From 92419bfa472c29b96ff85a9769b9301539867364 Mon Sep 17 00:00:00 2001 | 1 | From f82b24b2685d0cde8f8fdd0a1dcffe7b76b2027c Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Sun, 30 Sep 2018 16:31:26 +0530 | 3 | Date: Sun, 30 Sep 2018 16:31:26 +0530 |
| 4 | Subject: [PATCH 16/43] MB-X initial commit code cleanup is needed. | 4 | Subject: [PATCH 16/40] MB-X initial commit code cleanup is needed. |
| 5 | 5 | ||
| 6 | --- | 6 | --- |
| 7 | bfd/bfd-in2.h | 10 +++ | 7 | bfd/bfd-in2.h | 10 +++ |
| 8 | bfd/elf32-microblaze.c | 65 +++++++++++++++- | 8 | bfd/elf32-microblaze.c | 63 +++++++++++++++++- |
| 9 | bfd/elf64-microblaze.c | 61 ++++++++++++++- | 9 | bfd/elf64-microblaze.c | 59 +++++++++++++++++ |
| 10 | bfd/libbfd.h | 2 + | 10 | bfd/libbfd.h | 2 + |
| 11 | bfd/reloc.c | 12 +++ | 11 | bfd/reloc.c | 12 ++++ |
| 12 | include/elf/microblaze.h | 2 + | 12 | include/elf/microblaze.h | 2 + |
| 13 | opcodes/microblaze-opc.h | 4 +- | 13 | opcodes/microblaze-opc.h | 4 +- |
| 14 | opcodes/microblaze-opcm.h | 4 +- | 14 | opcodes/microblaze-opcm.h | 4 +- |
| 15 | 9 files changed, 277 insertions(+), 35 deletions(-) | 15 | 9 files changed, 243 insertions(+), 40 deletions(-) |
| 16 | 16 | ||
| 17 | diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h | 17 | diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h |
| 18 | index 721531886a..4f777059d8 100644 | 18 | index 52c81b10b6d..c6738960bb2 100644 |
| 19 | --- a/bfd/bfd-in2.h | 19 | --- a/bfd/bfd-in2.h |
| 20 | +++ b/bfd/bfd-in2.h | 20 | +++ b/bfd/bfd-in2.h |
| 21 | @@ -5876,11 +5876,21 @@ done here - only used for relaxing */ | 21 | @@ -5373,11 +5373,21 @@ value in two words (with an imm instruction). No relocation is |
| 22 | * +done here - only used for relaxing */ | 22 | done here - only used for relaxing */ |
| 23 | BFD_RELOC_MICROBLAZE_64_NONE, | 23 | BFD_RELOC_MICROBLAZE_64_NONE, |
| 24 | 24 | ||
| 25 | +/* This is a 64 bit reloc that stores the 32 bit pc relative | 25 | +/* This is a 64 bit reloc that stores the 32 bit pc relative |
| 26 | + * +value in two words (with an imml instruction). No relocation is | 26 | +value in two words (with an imml instruction). No relocation is |
| 27 | + * +done here - only used for relaxing */ | 27 | +done here - only used for relaxing */ |
| 28 | + BFD_RELOC_MICROBLAZE_64, | 28 | + BFD_RELOC_MICROBLAZE_64, |
| 29 | + | 29 | + |
| 30 | /* This is a 64 bit reloc that stores the 32 bit pc relative | 30 | /* This is a 64 bit reloc that stores the 32 bit pc relative |
| 31 | value in two words (with an imm instruction). The relocation is | 31 | value in two words (with an imm instruction). The relocation is |
| @@ -41,7 +41,7 @@ index 721531886a..4f777059d8 100644 | |||
| 41 | value in two words (with an imm instruction). The relocation is | 41 | value in two words (with an imm instruction). The relocation is |
| 42 | GOT offset */ | 42 | GOT offset */ |
| 43 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c | 43 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c |
| 44 | index d001437b3f..035e71f311 100644 | 44 | index cb7271f5017..a31b407cfbf 100644 |
| 45 | --- a/bfd/elf32-microblaze.c | 45 | --- a/bfd/elf32-microblaze.c |
| 46 | +++ b/bfd/elf32-microblaze.c | 46 | +++ b/bfd/elf32-microblaze.c |
| 47 | @@ -116,6 +116,20 @@ static reloc_howto_type microblaze_elf_howto_raw[] = | 47 | @@ -116,6 +116,20 @@ static reloc_howto_type microblaze_elf_howto_raw[] = |
| @@ -67,7 +67,7 @@ index d001437b3f..035e71f311 100644 | |||
| 67 | 0, /* Rightshift. */ | 67 | 0, /* Rightshift. */ |
| 68 | @@ -280,6 +294,21 @@ static reloc_howto_type microblaze_elf_howto_raw[] = | 68 | @@ -280,6 +294,21 @@ static reloc_howto_type microblaze_elf_howto_raw[] = |
| 69 | 0x0000ffff, /* Dest Mask. */ | 69 | 0x0000ffff, /* Dest Mask. */ |
| 70 | TRUE), /* PC relative offset? */ | 70 | TRUE), /* PC relative offset? */ |
| 71 | 71 | ||
| 72 | + /* A 64 bit GOTPC relocation. Table-entry not really used. */ | 72 | + /* A 64 bit GOTPC relocation. Table-entry not really used. */ |
| 73 | + HOWTO (R_MICROBLAZE_GPC_64, /* Type. */ | 73 | + HOWTO (R_MICROBLAZE_GPC_64, /* Type. */ |
| @@ -103,15 +103,6 @@ index d001437b3f..035e71f311 100644 | |||
| 103 | case BFD_RELOC_MICROBLAZE_64_GOT: | 103 | case BFD_RELOC_MICROBLAZE_64_GOT: |
| 104 | microblaze_reloc = R_MICROBLAZE_GOT_64; | 104 | microblaze_reloc = R_MICROBLAZE_GOT_64; |
| 105 | break; | 105 | break; |
| 106 | @@ -1467,7 +1502,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, | ||
| 107 | if (r_symndx == STN_UNDEF || (input_section->flags & SEC_ALLOC) == 0) | ||
| 108 | { | ||
| 109 | relocation += addend; | ||
| 110 | - if (r_type == R_MICROBLAZE_32) | ||
| 111 | + if (r_type == R_MICROBLAZE_32)// || r_type == R_MICROBLAZE_IMML_64) | ||
| 112 | bfd_put_32 (input_bfd, relocation, contents + offset); | ||
| 113 | else | ||
| 114 | { | ||
| 115 | @@ -1933,6 +1968,28 @@ microblaze_elf_relax_section (bfd *abfd, | 106 | @@ -1933,6 +1968,28 @@ microblaze_elf_relax_section (bfd *abfd, |
| 116 | irel->r_addend -= calc_fixup (irel->r_addend, 0, sec); | 107 | irel->r_addend -= calc_fixup (irel->r_addend, 0, sec); |
| 117 | } | 108 | } |
| @@ -119,7 +110,7 @@ index d001437b3f..035e71f311 100644 | |||
| 119 | + case R_MICROBLAZE_IMML_64: | 110 | + case R_MICROBLAZE_IMML_64: |
| 120 | + { | 111 | + { |
| 121 | + /* This was a PC-relative instruction that was | 112 | + /* This was a PC-relative instruction that was |
| 122 | + completely resolved. */ | 113 | + completely resolved. */ |
| 123 | + int sfix, efix; | 114 | + int sfix, efix; |
| 124 | + unsigned int val; | 115 | + unsigned int val; |
| 125 | + bfd_vma target_address; | 116 | + bfd_vma target_address; |
| @@ -141,21 +132,21 @@ index d001437b3f..035e71f311 100644 | |||
| 141 | case R_MICROBLAZE_NONE: | 132 | case R_MICROBLAZE_NONE: |
| 142 | case R_MICROBLAZE_32_NONE: | 133 | case R_MICROBLAZE_32_NONE: |
| 143 | { | 134 | { |
| 144 | @@ -2037,9 +2094,9 @@ microblaze_elf_relax_section (bfd *abfd, | 135 | @@ -2038,9 +2095,9 @@ microblaze_elf_relax_section (bfd *abfd, |
| 145 | microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset, | 136 | microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset, |
| 146 | irelscan->r_addend); | 137 | irelscan->r_addend); |
| 147 | } | 138 | } |
| 148 | - if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32) | 139 | - if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32) |
| 149 | - { | 140 | - { |
| 150 | - isym = isymbuf + ELF32_R_SYM (irelscan->r_info); | 141 | - isym = isymbuf + ELF32_R_SYM (irelscan->r_info); |
| 151 | + if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32)// || ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_IMML_64) | 142 | + if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32) |
| 152 | + { | 143 | + { |
| 153 | + isym = isymbuf + ELF32_R_SYM (irelscan->r_info); | 144 | + isym = isymbuf + ELF32_R_SYM (irelscan->r_info); |
| 154 | 145 | ||
| 155 | /* Look at the reloc only if the value has been resolved. */ | 146 | /* Look at the reloc only if the value has been resolved. */ |
| 156 | if (isym->st_shndx == shndx | 147 | if (isym->st_shndx == shndx |
| 157 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c | 148 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c |
| 158 | index 0f43ae6ea8..56a45f2a05 100644 | 149 | index fa4b95e47e0..d55700fc513 100644 |
| 159 | --- a/bfd/elf64-microblaze.c | 150 | --- a/bfd/elf64-microblaze.c |
| 160 | +++ b/bfd/elf64-microblaze.c | 151 | +++ b/bfd/elf64-microblaze.c |
| 161 | @@ -116,6 +116,21 @@ static reloc_howto_type microblaze_elf_howto_raw[] = | 152 | @@ -116,6 +116,21 @@ static reloc_howto_type microblaze_elf_howto_raw[] = |
| @@ -218,7 +209,7 @@ index 0f43ae6ea8..56a45f2a05 100644 | |||
| 218 | case BFD_RELOC_MICROBLAZE_64_GOT: | 209 | case BFD_RELOC_MICROBLAZE_64_GOT: |
| 219 | microblaze_reloc = R_MICROBLAZE_GOT_64; | 210 | microblaze_reloc = R_MICROBLAZE_GOT_64; |
| 220 | break; | 211 | break; |
| 221 | @@ -1161,6 +1197,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, | 212 | @@ -1162,6 +1198,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, |
| 222 | break; /* Do nothing. */ | 213 | break; /* Do nothing. */ |
| 223 | 214 | ||
| 224 | case (int) R_MICROBLAZE_GOTPC_64: | 215 | case (int) R_MICROBLAZE_GOTPC_64: |
| @@ -226,23 +217,14 @@ index 0f43ae6ea8..56a45f2a05 100644 | |||
| 226 | relocation = htab->sgotplt->output_section->vma | 217 | relocation = htab->sgotplt->output_section->vma |
| 227 | + htab->sgotplt->output_offset; | 218 | + htab->sgotplt->output_offset; |
| 228 | relocation -= (input_section->output_section->vma | 219 | relocation -= (input_section->output_section->vma |
| 229 | @@ -1431,7 +1468,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, | 220 | @@ -1863,6 +1900,28 @@ microblaze_elf_relax_section (bfd *abfd, |
| 230 | if (r_symndx == STN_UNDEF || (input_section->flags & SEC_ALLOC) == 0) | ||
| 231 | { | ||
| 232 | relocation += addend; | ||
| 233 | - if (r_type == R_MICROBLAZE_32) | ||
| 234 | + if (r_type == R_MICROBLAZE_32)// || r_type == R_MICROBLAZE_IMML_64) | ||
| 235 | bfd_put_32 (input_bfd, relocation, contents + offset); | ||
| 236 | else | ||
| 237 | { | ||
| 238 | @@ -1876,6 +1913,28 @@ microblaze_elf_relax_section (bfd *abfd, | ||
| 239 | irel->r_addend -= calc_fixup (irel->r_addend, 0, sec); | 221 | irel->r_addend -= calc_fixup (irel->r_addend, 0, sec); |
| 240 | } | 222 | } |
| 241 | break; | 223 | break; |
| 242 | + case R_MICROBLAZE_IMML_64: | 224 | + case R_MICROBLAZE_IMML_64: |
| 243 | + { | 225 | + { |
| 244 | + /* This was a PC-relative instruction that was | 226 | + /* This was a PC-relative instruction that was |
| 245 | + completely resolved. */ | 227 | + completely resolved. */ |
| 246 | + int sfix, efix; | 228 | + int sfix, efix; |
| 247 | + unsigned int val; | 229 | + unsigned int val; |
| 248 | + bfd_vma target_address; | 230 | + bfd_vma target_address; |
| @@ -265,10 +247,10 @@ index 0f43ae6ea8..56a45f2a05 100644 | |||
| 265 | case R_MICROBLAZE_32_NONE: | 247 | case R_MICROBLAZE_32_NONE: |
| 266 | { | 248 | { |
| 267 | diff --git a/bfd/libbfd.h b/bfd/libbfd.h | 249 | diff --git a/bfd/libbfd.h b/bfd/libbfd.h |
| 268 | index feb9fada1e..450653f2d8 100644 | 250 | index a01891f3423..4e71991273e 100644 |
| 269 | --- a/bfd/libbfd.h | 251 | --- a/bfd/libbfd.h |
| 270 | +++ b/bfd/libbfd.h | 252 | +++ b/bfd/libbfd.h |
| 271 | @@ -2903,7 +2903,9 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", | 253 | @@ -2905,7 +2905,9 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", |
| 272 | "BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM", | 254 | "BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM", |
| 273 | "BFD_RELOC_MICROBLAZE_32_NONE", | 255 | "BFD_RELOC_MICROBLAZE_32_NONE", |
| 274 | "BFD_RELOC_MICROBLAZE_64_NONE", | 256 | "BFD_RELOC_MICROBLAZE_64_NONE", |
| @@ -279,10 +261,10 @@ index feb9fada1e..450653f2d8 100644 | |||
| 279 | "BFD_RELOC_MICROBLAZE_64_PLT", | 261 | "BFD_RELOC_MICROBLAZE_64_PLT", |
| 280 | "BFD_RELOC_MICROBLAZE_64_GOTOFF", | 262 | "BFD_RELOC_MICROBLAZE_64_GOTOFF", |
| 281 | diff --git a/bfd/reloc.c b/bfd/reloc.c | 263 | diff --git a/bfd/reloc.c b/bfd/reloc.c |
| 282 | index 87753ae4f0..ccf29f54cf 100644 | 264 | index 78f13180c71..8b3cc604738 100644 |
| 283 | --- a/bfd/reloc.c | 265 | --- a/bfd/reloc.c |
| 284 | +++ b/bfd/reloc.c | 266 | +++ b/bfd/reloc.c |
| 285 | @@ -6803,12 +6803,24 @@ ENUMDOC | 267 | @@ -6814,12 +6814,24 @@ ENUMDOC |
| 286 | done here - only used for relaxing | 268 | done here - only used for relaxing |
| 287 | ENUM | 269 | ENUM |
| 288 | BFD_RELOC_MICROBLAZE_64_NONE | 270 | BFD_RELOC_MICROBLAZE_64_NONE |
| @@ -308,7 +290,7 @@ index 87753ae4f0..ccf29f54cf 100644 | |||
| 308 | This is a 64 bit reloc that stores the 32 bit pc relative | 290 | This is a 64 bit reloc that stores the 32 bit pc relative |
| 309 | value in two words (with an imm instruction). The relocation is | 291 | value in two words (with an imm instruction). The relocation is |
| 310 | diff --git a/include/elf/microblaze.h b/include/elf/microblaze.h | 292 | diff --git a/include/elf/microblaze.h b/include/elf/microblaze.h |
| 311 | index 6ee0966444..16b2736577 100644 | 293 | index 0dba2c0f44f..030eb99a1a0 100644 |
| 312 | --- a/include/elf/microblaze.h | 294 | --- a/include/elf/microblaze.h |
| 313 | +++ b/include/elf/microblaze.h | 295 | +++ b/include/elf/microblaze.h |
| 314 | @@ -62,6 +62,8 @@ START_RELOC_NUMBERS (elf_microblaze_reloc_type) | 296 | @@ -62,6 +62,8 @@ START_RELOC_NUMBERS (elf_microblaze_reloc_type) |
| @@ -317,11 +299,11 @@ index 6ee0966444..16b2736577 100644 | |||
| 317 | RELOC_NUMBER (R_MICROBLAZE_32_NONE, 33) | 299 | RELOC_NUMBER (R_MICROBLAZE_32_NONE, 33) |
| 318 | + RELOC_NUMBER (R_MICROBLAZE_IMML_64, 34) | 300 | + RELOC_NUMBER (R_MICROBLAZE_IMML_64, 34) |
| 319 | + RELOC_NUMBER (R_MICROBLAZE_GPC_64, 35) /* GOT entry offset. */ | 301 | + RELOC_NUMBER (R_MICROBLAZE_GPC_64, 35) /* GOT entry offset. */ |
| 320 | |||
| 321 | END_RELOC_NUMBERS (R_MICROBLAZE_max) | 302 | END_RELOC_NUMBERS (R_MICROBLAZE_max) |
| 322 | 303 | ||
| 304 | /* Global base address names. */ | ||
| 323 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h | 305 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h |
| 324 | index 985834b8df..9b6264b61c 100644 | 306 | index 28dc991c430..46263bc7e16 100644 |
| 325 | --- a/opcodes/microblaze-opc.h | 307 | --- a/opcodes/microblaze-opc.h |
| 326 | +++ b/opcodes/microblaze-opc.h | 308 | +++ b/opcodes/microblaze-opc.h |
| 327 | @@ -538,8 +538,8 @@ struct op_code_struct | 309 | @@ -538,8 +538,8 @@ struct op_code_struct |
| @@ -336,7 +318,7 @@ index 985834b8df..9b6264b61c 100644 | |||
| 336 | {"dadd", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000400, OPCODE_MASK_H4, dadd, arithmetic_inst }, | 318 | {"dadd", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000400, OPCODE_MASK_H4, dadd, arithmetic_inst }, |
| 337 | {"drsub", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000480, OPCODE_MASK_H4, drsub, arithmetic_inst }, | 319 | {"drsub", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000480, OPCODE_MASK_H4, drsub, arithmetic_inst }, |
| 338 | diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h | 320 | diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h |
| 339 | index 076dbcd0b3..5f2e190d23 100644 | 321 | index ad475a4af15..ee01cdb7d9b 100644 |
| 340 | --- a/opcodes/microblaze-opcm.h | 322 | --- a/opcodes/microblaze-opcm.h |
| 341 | +++ b/opcodes/microblaze-opcm.h | 323 | +++ b/opcodes/microblaze-opcm.h |
| 342 | @@ -40,8 +40,8 @@ enum microblaze_instr | 324 | @@ -40,8 +40,8 @@ enum microblaze_instr |
| @@ -344,9 +326,9 @@ index 076dbcd0b3..5f2e190d23 100644 | |||
| 344 | brki, beqi, beqid, bnei, bneid, blti, bltid, blei, bleid, bgti, | 326 | brki, beqi, beqid, bnei, bneid, blti, bltid, blei, bleid, bgti, |
| 345 | bgtid, bgei, bgeid, lbu, lbuea, lbur, lhu, lhuea, lhur, lw, lwea, lwr, lwx, | 327 | bgtid, bgei, bgeid, lbu, lbuea, lbur, lhu, lhuea, lhur, lw, lwea, lwr, lwx, |
| 346 | - sb, sbea, sbr, sh, shea, shr, sw, swea, swr, swx, lbui, lhui, lwi, | 328 | - sb, sbea, sbr, sh, shea, shr, sw, swea, swr, swx, lbui, lhui, lwi, |
| 347 | - sbi, shi, swi, msrset, msrclr, tuqula, fadd, frsub, fmul, fdiv, | 329 | - sbi, shi, swi, msrset, msrclr, tuqula, mbi_fadd, frsub, mbi_fmul, mbi_fdiv, |
| 348 | + sb, sbea, sbr, sh, shea, shr, sw, swea, swr, swx, lbui, lhui, lwi, lli, | 330 | + sb, sbea, sbr, sh, shea, shr, sw, swea, swr, swx, lbui, lhui, lwi, lli, |
| 349 | + sbi, shi, sli, swi, msrset, msrclr, tuqula, fadd, frsub, fmul, fdiv, | 331 | + sbi, shi, sli, swi, msrset, msrclr, tuqula, mbi_fadd, frsub, mbi_fmul, mbi_fdiv, |
| 350 | fcmp_lt, fcmp_eq, fcmp_le, fcmp_gt, fcmp_ne, fcmp_ge, fcmp_un, flt, | 332 | fcmp_lt, fcmp_eq, fcmp_le, fcmp_gt, fcmp_ne, fcmp_ge, fcmp_un, flt, |
| 351 | fint, fsqrt, | 333 | fint, fsqrt, |
| 352 | tget, tcget, tnget, tncget, tput, tcput, tnput, tncput, | 334 | tget, tcget, tnget, tncget, tput, tcput, tnput, tncput, |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0017-Patch-Microblaze-negl-instruction-is-overriding-rsub.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0017-Patch-Microblaze-negl-instruction-is-overriding-rsub.patch index 26938396..eaf24505 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0017-Patch-Microblaze-negl-instruction-is-overriding-rsub.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0017-Patch-Microblaze-negl-instruction-is-overriding-rsub.patch | |||
| @@ -1,15 +1,16 @@ | |||
| 1 | From 4010e83aa48f0415e4478d70871aa87cb204d350 Mon Sep 17 00:00:00 2001 | 1 | From b6ec3e2295ba33d2c8f48500d75a147ffd84a656 Mon Sep 17 00:00:00 2001 |
| 2 | From: Mahesh Bodapati <mbodapat@xilinx.com> | 2 | From: Mahesh Bodapati <mbodapat@xilinx.com> |
| 3 | Date: Tue, 11 Sep 2018 13:48:33 +0530 | 3 | Date: Tue, 11 Sep 2018 13:48:33 +0530 |
| 4 | Subject: [PATCH 17/43] [Patch,Microblaze] : negl instruction is overriding | 4 | Subject: [PATCH 17/40] [Patch,Microblaze] : negl instruction is overriding |
| 5 | rsubl,fixed it by changing the instruction order... | 5 | rsubl |
| 6 | 6 | ||
| 7 | fixed it by changing the instruction order... | ||
| 7 | --- | 8 | --- |
| 8 | opcodes/microblaze-opc.h | 4 ++-- | 9 | opcodes/microblaze-opc.h | 4 ++-- |
| 9 | 1 file changed, 2 insertions(+), 2 deletions(-) | 10 | 1 file changed, 2 insertions(+), 2 deletions(-) |
| 10 | 11 | ||
| 11 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h | 12 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h |
| 12 | index 9b6264b61c..824afc0ab0 100644 | 13 | index 46263bc7e16..f4ee8f43372 100644 |
| 13 | --- a/opcodes/microblaze-opc.h | 14 | --- a/opcodes/microblaze-opc.h |
| 14 | +++ b/opcodes/microblaze-opc.h | 15 | +++ b/opcodes/microblaze-opc.h |
| 15 | @@ -275,9 +275,7 @@ struct op_code_struct | 16 | @@ -275,9 +275,7 @@ struct op_code_struct |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0018-Added-relocations-for-MB-X.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0018-Added-relocations-for-MB-X.patch index 93ec10fd..742f9e34 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0018-Added-relocations-for-MB-X.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0018-Added-relocations-for-MB-X.patch | |||
| @@ -1,47 +1,47 @@ | |||
| 1 | From b625d19f8b86dd81c32f21793cc3e038ca275e57 Mon Sep 17 00:00:00 2001 | 1 | From 982f37caabea84cee52426844e73365f0cb93f3d Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Tue, 11 Sep 2018 17:30:17 +0530 | 3 | Date: Tue, 11 Sep 2018 17:30:17 +0530 |
| 4 | Subject: [PATCH 18/43] Added relocations for MB-X | 4 | Subject: [PATCH 18/40] Added relocations for MB-X |
| 5 | 5 | ||
| 6 | --- | 6 | --- |
| 7 | bfd/bfd-in2.h | 11 +++-- | 7 | bfd/bfd-in2.h | 11 +++++--- |
| 8 | bfd/libbfd.h | 4 +- | 8 | bfd/libbfd.h | 4 +-- |
| 9 | bfd/reloc.c | 26 ++++++----- | 9 | bfd/reloc.c | 26 +++++++++--------- |
| 10 | 4 files changed, 62 insertions(+), 69 deletions(-) | 10 | 4 files changed, 63 insertions(+), 32 deletions(-) |
| 11 | 11 | ||
| 12 | diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h | 12 | diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h |
| 13 | index 4f777059d8..de46e78902 100644 | 13 | index c6738960bb2..3899352b1d5 100644 |
| 14 | --- a/bfd/bfd-in2.h | 14 | --- a/bfd/bfd-in2.h |
| 15 | +++ b/bfd/bfd-in2.h | 15 | +++ b/bfd/bfd-in2.h |
| 16 | @@ -5872,15 +5872,20 @@ done here - only used for relaxing */ | 16 | @@ -5369,15 +5369,20 @@ done here - only used for relaxing */ |
| 17 | BFD_RELOC_MICROBLAZE_32_NONE, | 17 | BFD_RELOC_MICROBLAZE_32_NONE, |
| 18 | 18 | ||
| 19 | /* This is a 64 bit reloc that stores the 32 bit pc relative | 19 | /* This is a 64 bit reloc that stores the 32 bit pc relative |
| 20 | - * +value in two words (with an imm instruction). No relocation is | 20 | -value in two words (with an imm instruction). No relocation is |
| 21 | + * +value in two words (with an imml instruction). No relocation is | 21 | +value in two words (with an imml instruction). No relocation is |
| 22 | * +done here - only used for relaxing */ | 22 | done here - only used for relaxing */ |
| 23 | - BFD_RELOC_MICROBLAZE_64_NONE, | 23 | - BFD_RELOC_MICROBLAZE_64_NONE, |
| 24 | + BFD_RELOC_MICROBLAZE_64_PCREL, | 24 | + BFD_RELOC_MICROBLAZE_64_PCREL, |
| 25 | 25 | ||
| 26 | -/* This is a 64 bit reloc that stores the 32 bit pc relative | 26 | -/* This is a 64 bit reloc that stores the 32 bit pc relative |
| 27 | +/* This is a 64 bit reloc that stores the 32 bit relative | 27 | +/* This is a 64 bit reloc that stores the 32 bit relative |
| 28 | * +value in two words (with an imml instruction). No relocation is | 28 | value in two words (with an imml instruction). No relocation is |
| 29 | * +done here - only used for relaxing */ | 29 | done here - only used for relaxing */ |
| 30 | BFD_RELOC_MICROBLAZE_64, | 30 | BFD_RELOC_MICROBLAZE_64, |
| 31 | 31 | ||
| 32 | +/* This is a 64 bit reloc that stores the 32 bit pc relative | 32 | +/* This is a 64 bit reloc that stores the 32 bit pc relative |
| 33 | + * +value in two words (with an imm instruction). No relocation is | 33 | +value in two words (with an imm instruction). No relocation is |
| 34 | + * +done here - only used for relaxing */ | 34 | +done here - only used for relaxing */ |
| 35 | + BFD_RELOC_MICROBLAZE_64_NONE, | 35 | + BFD_RELOC_MICROBLAZE_64_NONE, |
| 36 | + | 36 | + |
| 37 | /* This is a 64 bit reloc that stores the 32 bit pc relative | 37 | /* This is a 64 bit reloc that stores the 32 bit pc relative |
| 38 | value in two words (with an imm instruction). The relocation is | 38 | value in two words (with an imm instruction). The relocation is |
| 39 | PC-relative GOT offset */ | 39 | PC-relative GOT offset */ |
| 40 | diff --git a/bfd/libbfd.h b/bfd/libbfd.h | 40 | diff --git a/bfd/libbfd.h b/bfd/libbfd.h |
| 41 | index 450653f2d8..d87a183d5e 100644 | 41 | index 4e71991273e..46be3891390 100644 |
| 42 | --- a/bfd/libbfd.h | 42 | --- a/bfd/libbfd.h |
| 43 | +++ b/bfd/libbfd.h | 43 | +++ b/bfd/libbfd.h |
| 44 | @@ -2903,14 +2903,14 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", | 44 | @@ -2905,14 +2905,14 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", |
| 45 | "BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM", | 45 | "BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM", |
| 46 | "BFD_RELOC_MICROBLAZE_32_NONE", | 46 | "BFD_RELOC_MICROBLAZE_32_NONE", |
| 47 | "BFD_RELOC_MICROBLAZE_64_NONE", | 47 | "BFD_RELOC_MICROBLAZE_64_NONE", |
| @@ -59,10 +59,10 @@ index 450653f2d8..d87a183d5e 100644 | |||
| 59 | "BFD_RELOC_MICROBLAZE_64_TLSGD", | 59 | "BFD_RELOC_MICROBLAZE_64_TLSGD", |
| 60 | "BFD_RELOC_MICROBLAZE_64_TLSLD", | 60 | "BFD_RELOC_MICROBLAZE_64_TLSLD", |
| 61 | diff --git a/bfd/reloc.c b/bfd/reloc.c | 61 | diff --git a/bfd/reloc.c b/bfd/reloc.c |
| 62 | index ccf29f54cf..861f2d48c0 100644 | 62 | index 8b3cc604738..98a156f061f 100644 |
| 63 | --- a/bfd/reloc.c | 63 | --- a/bfd/reloc.c |
| 64 | +++ b/bfd/reloc.c | 64 | +++ b/bfd/reloc.c |
| 65 | @@ -6803,24 +6803,12 @@ ENUMDOC | 65 | @@ -6814,24 +6814,12 @@ ENUMDOC |
| 66 | done here - only used for relaxing | 66 | done here - only used for relaxing |
| 67 | ENUM | 67 | ENUM |
| 68 | BFD_RELOC_MICROBLAZE_64_NONE | 68 | BFD_RELOC_MICROBLAZE_64_NONE |
| @@ -87,7 +87,7 @@ index ccf29f54cf..861f2d48c0 100644 | |||
| 87 | ENUMDOC | 87 | ENUMDOC |
| 88 | This is a 64 bit reloc that stores the 32 bit pc relative | 88 | This is a 64 bit reloc that stores the 32 bit pc relative |
| 89 | value in two words (with an imm instruction). The relocation is | 89 | value in two words (with an imm instruction). The relocation is |
| 90 | @@ -6906,6 +6894,20 @@ ENUMDOC | 90 | @@ -6917,6 +6905,20 @@ ENUMDOC |
| 91 | value in two words (with an imm instruction). The relocation is | 91 | value in two words (with an imm instruction). The relocation is |
| 92 | relative offset from start of TEXT. | 92 | relative offset from start of TEXT. |
| 93 | 93 | ||
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0019-Fixed-MB-x-relocation-issues.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0019-Update-MB-x.patch index 4a35a597..fc5c9464 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0019-Fixed-MB-x-relocation-issues.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0019-Update-MB-x.patch | |||
| @@ -1,26 +1,27 @@ | |||
| 1 | From f190b9380c325b48697755328f4193791a758e55 Mon Sep 17 00:00:00 2001 | 1 | From 0bb779328b8564b008a6134826f043b4326f4904 Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Fri, 28 Sep 2018 12:04:55 +0530 | 3 | Date: Fri, 28 Sep 2018 12:04:55 +0530 |
| 4 | Subject: [PATCH 19/43] -Fixed MB-x relocation issues -Added imml for required | 4 | Subject: [PATCH 19/40] Update MB-x |
| 5 | MB-x instructions | ||
| 6 | 5 | ||
| 6 | -Fixed MB-x relocation issues | ||
| 7 | -Added imml for required MB-x instructions | ||
| 7 | --- | 8 | --- |
| 8 | bfd/elf64-microblaze.c | 68 ++++++++++++++--- | 9 | bfd/elf64-microblaze.c | 68 ++++++++++-- |
| 9 | 3 files changed, 167 insertions(+), 55 deletions(-) | 10 | 3 files changed, 209 insertions(+), 82 deletions(-) |
| 10 | 11 | ||
| 11 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c | 12 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c |
| 12 | index 56a45f2a05..54a2461037 100644 | 13 | index d55700fc513..f8f52870639 100644 |
| 13 | --- a/bfd/elf64-microblaze.c | 14 | --- a/bfd/elf64-microblaze.c |
| 14 | +++ b/bfd/elf64-microblaze.c | 15 | +++ b/bfd/elf64-microblaze.c |
| 15 | @@ -1476,8 +1476,17 @@ microblaze_elf_relocate_section (bfd *output_bfd, | 16 | @@ -1478,8 +1478,17 @@ microblaze_elf_relocate_section (bfd *output_bfd, |
| 16 | relocation -= (input_section->output_section->vma | 17 | relocation -= (input_section->output_section->vma |
| 17 | + input_section->output_offset | 18 | + input_section->output_offset |
| 18 | + offset + INST_WORD_SIZE); | 19 | + offset + INST_WORD_SIZE); |
| 19 | - bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff, | 20 | - bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff, |
| 20 | + unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian); | 21 | + unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian); |
| 21 | + if (insn == 0xb2000000 || insn == 0xb2ffffff) | 22 | + if (insn == 0xb2000000 || insn == 0xb2ffffff) |
| 22 | + { | 23 | + { |
| 23 | + insn &= ~0x00ffffff; | 24 | + insn &= ~0x00ffffff; |
| 24 | + insn |= (relocation >> 16) & 0xffffff; | 25 | + insn |= (relocation >> 16) & 0xffffff; |
| 25 | + bfd_put_32 (input_bfd, insn, | 26 | + bfd_put_32 (input_bfd, insn, |
| 26 | contents + offset + endian); | 27 | contents + offset + endian); |
| @@ -31,7 +32,7 @@ index 56a45f2a05..54a2461037 100644 | |||
| 31 | bfd_put_16 (input_bfd, relocation & 0xffff, | 32 | bfd_put_16 (input_bfd, relocation & 0xffff, |
| 32 | contents + offset + endian + INST_WORD_SIZE); | 33 | contents + offset + endian + INST_WORD_SIZE); |
| 33 | } | 34 | } |
| 34 | @@ -1567,11 +1576,28 @@ microblaze_elf_relocate_section (bfd *output_bfd, | 35 | @@ -1569,11 +1578,28 @@ microblaze_elf_relocate_section (bfd *output_bfd, |
| 35 | else | 36 | else |
| 36 | { | 37 | { |
| 37 | if (r_type == R_MICROBLAZE_64_PCREL) | 38 | if (r_type == R_MICROBLAZE_64_PCREL) |
| @@ -41,7 +42,7 @@ index 56a45f2a05..54a2461037 100644 | |||
| 41 | - bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff, | 42 | - bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff, |
| 42 | + { | 43 | + { |
| 43 | + if (!input_section->output_section->vma && | 44 | + if (!input_section->output_section->vma && |
| 44 | + !input_section->output_offset && !offset) | 45 | + !input_section->output_offset && !offset) |
| 45 | + relocation -= (input_section->output_section->vma | 46 | + relocation -= (input_section->output_section->vma |
| 46 | + + input_section->output_offset | 47 | + + input_section->output_offset |
| 47 | + + offset); | 48 | + + offset); |
| @@ -51,9 +52,9 @@ index 56a45f2a05..54a2461037 100644 | |||
| 51 | + + offset + INST_WORD_SIZE); | 52 | + + offset + INST_WORD_SIZE); |
| 52 | + } | 53 | + } |
| 53 | + unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian); | 54 | + unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian); |
| 54 | + if (insn == 0xb2000000 || insn == 0xb2ffffff) | 55 | + if (insn == 0xb2000000 || insn == 0xb2ffffff) |
| 55 | + { | 56 | + { |
| 56 | + insn &= ~0x00ffffff; | 57 | + insn &= ~0x00ffffff; |
| 57 | + insn |= (relocation >> 16) & 0xffffff; | 58 | + insn |= (relocation >> 16) & 0xffffff; |
| 58 | + bfd_put_32 (input_bfd, insn, | 59 | + bfd_put_32 (input_bfd, insn, |
| 59 | contents + offset + endian); | 60 | contents + offset + endian); |
| @@ -64,7 +65,7 @@ index 56a45f2a05..54a2461037 100644 | |||
| 64 | bfd_put_16 (input_bfd, relocation & 0xffff, | 65 | bfd_put_16 (input_bfd, relocation & 0xffff, |
| 65 | contents + offset + endian + INST_WORD_SIZE); | 66 | contents + offset + endian + INST_WORD_SIZE); |
| 66 | } | 67 | } |
| 67 | @@ -1690,9 +1716,19 @@ static void | 68 | @@ -1677,9 +1703,19 @@ static void |
| 68 | microblaze_bfd_write_imm_value_32 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val) | 69 | microblaze_bfd_write_imm_value_32 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val) |
| 69 | { | 70 | { |
| 70 | unsigned long instr = bfd_get_32 (abfd, bfd_addr); | 71 | unsigned long instr = bfd_get_32 (abfd, bfd_addr); |
| @@ -87,7 +88,7 @@ index 56a45f2a05..54a2461037 100644 | |||
| 87 | } | 88 | } |
| 88 | 89 | ||
| 89 | /* Read-modify-write into the bfd, an immediate value into appropriate fields of | 90 | /* Read-modify-write into the bfd, an immediate value into appropriate fields of |
| 90 | @@ -1704,10 +1740,18 @@ microblaze_bfd_write_imm_value_64 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val) | 91 | @@ -1691,10 +1727,18 @@ microblaze_bfd_write_imm_value_64 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val) |
| 91 | unsigned long instr_lo; | 92 | unsigned long instr_lo; |
| 92 | 93 | ||
| 93 | instr_hi = bfd_get_32 (abfd, bfd_addr); | 94 | instr_hi = bfd_get_32 (abfd, bfd_addr); |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0020-Fixing-the-branch-related-issues.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0020-Fixing-the-branch-related-issues.patch deleted file mode 100644 index 2e790dc1..00000000 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0020-Fixing-the-branch-related-issues.patch +++ /dev/null | |||
| @@ -1,25 +0,0 @@ | |||
| 1 | From 534688ca48be148ade9bb1daf77c41c4b221ac0e Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | ||
| 3 | Date: Sun, 30 Sep 2018 17:06:58 +0530 | ||
| 4 | Subject: [PATCH 20/43] Fixing the branch related issues | ||
| 5 | |||
| 6 | --- | ||
| 7 | bfd/elf64-microblaze.c | 2 +- | ||
| 8 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 9 | |||
| 10 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c | ||
| 11 | index 54a2461037..e9b3cf3a86 100644 | ||
| 12 | --- a/bfd/elf64-microblaze.c | ||
| 13 | +++ b/bfd/elf64-microblaze.c | ||
| 14 | @@ -2532,7 +2532,7 @@ microblaze_elf_check_relocs (bfd * abfd, | ||
| 15 | |||
| 16 | /* PR15323, ref flags aren't set for references in the same | ||
| 17 | object. */ | ||
| 18 | - h->root.non_ir_ref = 1; | ||
| 19 | + h->root.non_ir_ref_regular = 1; | ||
| 20 | } | ||
| 21 | |||
| 22 | switch (r_type) | ||
| 23 | -- | ||
| 24 | 2.17.1 | ||
| 25 | |||
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0021-Fixed-address-computation-issues-with-64bit-address.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0020-Various-fixes.patch index dffdbd3a..eb0bc982 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0021-Fixed-address-computation-issues-with-64bit-address.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0020-Various-fixes.patch | |||
| @@ -1,9 +1,10 @@ | |||
| 1 | From a19471b62a23803a062693a61c783efc05e2cd33 Mon Sep 17 00:00:00 2001 | 1 | From 188a60b441711f663f07dc3c3902c8c5d590eb6c Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Tue, 9 Oct 2018 10:14:22 +0530 | 3 | Date: Tue, 9 Oct 2018 10:14:22 +0530 |
| 4 | Subject: [PATCH 21/43] - Fixed address computation issues with 64bit address - | 4 | Subject: [PATCH 20/40] Various fixes |
| 5 | Fixed imml dissassamble issue | ||
| 6 | 5 | ||
| 6 | - Fixed address computation issues with 64bit address | ||
| 7 | - Fixed imml dissassamble issue | ||
| 7 | --- | 8 | --- |
| 8 | bfd/bfd-in2.h | 5 +++ | 9 | bfd/bfd-in2.h | 5 +++ |
| 9 | bfd/elf64-microblaze.c | 14 ++++---- | 10 | bfd/elf64-microblaze.c | 14 ++++---- |
| @@ -11,23 +12,23 @@ Subject: [PATCH 21/43] - Fixed address computation issues with 64bit address - | |||
| 11 | 4 files changed, 79 insertions(+), 16 deletions(-) | 12 | 4 files changed, 79 insertions(+), 16 deletions(-) |
| 12 | 13 | ||
| 13 | diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h | 14 | diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h |
| 14 | index de46e78902..33c9cb62d9 100644 | 15 | index 3899352b1d5..91761bf6964 100644 |
| 15 | --- a/bfd/bfd-in2.h | 16 | --- a/bfd/bfd-in2.h |
| 16 | +++ b/bfd/bfd-in2.h | 17 | +++ b/bfd/bfd-in2.h |
| 17 | @@ -5881,6 +5881,11 @@ done here - only used for relaxing */ | 18 | @@ -5378,6 +5378,11 @@ value in two words (with an imml instruction). No relocation is |
| 18 | * +done here - only used for relaxing */ | 19 | done here - only used for relaxing */ |
| 19 | BFD_RELOC_MICROBLAZE_64, | 20 | BFD_RELOC_MICROBLAZE_64, |
| 20 | 21 | ||
| 21 | +/* This is a 64 bit reloc that stores the 32 bit relative | 22 | +/* This is a 64 bit reloc that stores the 32 bit relative |
| 22 | + * +value in two words (with an imml instruction). No relocation is | 23 | +value in two words (with an imml instruction). No relocation is |
| 23 | + * +done here - only used for relaxing */ | 24 | +done here - only used for relaxing */ |
| 24 | + BFD_RELOC_MICROBLAZE_EA64, | 25 | + BFD_RELOC_MICROBLAZE_EA64, |
| 25 | + | 26 | + |
| 26 | /* This is a 64 bit reloc that stores the 32 bit pc relative | 27 | /* This is a 64 bit reloc that stores the 32 bit pc relative |
| 27 | * +value in two words (with an imm instruction). No relocation is | 28 | value in two words (with an imm instruction). No relocation is |
| 28 | * +done here - only used for relaxing */ | 29 | done here - only used for relaxing */ |
| 29 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c | 30 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c |
| 30 | index e9b3cf3a86..40f10aac6d 100644 | 31 | index f8f52870639..17e58748a0b 100644 |
| 31 | --- a/bfd/elf64-microblaze.c | 32 | --- a/bfd/elf64-microblaze.c |
| 32 | +++ b/bfd/elf64-microblaze.c | 33 | +++ b/bfd/elf64-microblaze.c |
| 33 | @@ -121,15 +121,15 @@ static reloc_howto_type microblaze_elf_howto_raw[] = | 34 | @@ -121,15 +121,15 @@ static reloc_howto_type microblaze_elf_howto_raw[] = |
| @@ -70,7 +71,7 @@ index e9b3cf3a86..40f10aac6d 100644 | |||
| 70 | microblaze_reloc = R_MICROBLAZE_IMML_64; | 71 | microblaze_reloc = R_MICROBLAZE_IMML_64; |
| 71 | break; | 72 | break; |
| 72 | case BFD_RELOC_MICROBLAZE_64_GOTPC: | 73 | case BFD_RELOC_MICROBLAZE_64_GOTPC: |
| 73 | @@ -1969,7 +1969,7 @@ microblaze_elf_relax_section (bfd *abfd, | 74 | @@ -1956,7 +1956,7 @@ microblaze_elf_relax_section (bfd *abfd, |
| 74 | efix = calc_fixup (target_address, 0, sec); | 75 | efix = calc_fixup (target_address, 0, sec); |
| 75 | 76 | ||
| 76 | /* Validate the in-band val. */ | 77 | /* Validate the in-band val. */ |
| @@ -80,16 +81,16 @@ index e9b3cf3a86..40f10aac6d 100644 | |||
| 80 | fprintf(stderr, "%d: CORRUPT relax reloc %x %lx\n", __LINE__, val, irel->r_addend); | 81 | fprintf(stderr, "%d: CORRUPT relax reloc %x %lx\n", __LINE__, val, irel->r_addend); |
| 81 | } | 82 | } |
| 82 | diff --git a/opcodes/microblaze-dis.c b/opcodes/microblaze-dis.c | 83 | diff --git a/opcodes/microblaze-dis.c b/opcodes/microblaze-dis.c |
| 83 | index 20ea6a885a..f679a43606 100644 | 84 | index 437f536e96a..24ede714858 100644 |
| 84 | --- a/opcodes/microblaze-dis.c | 85 | --- a/opcodes/microblaze-dis.c |
| 85 | +++ b/opcodes/microblaze-dis.c | 86 | +++ b/opcodes/microblaze-dis.c |
| 86 | @@ -61,7 +61,7 @@ get_field_imml (long instr) | 87 | @@ -78,7 +78,7 @@ get_field_imml (struct string_buf *buf, long instr) |
| 87 | { | 88 | { |
| 88 | char tmpstr[25]; | 89 | char *p = strbuf (buf); |
| 89 | 90 | ||
| 90 | - sprintf (tmpstr, "%d", (short)((instr & IMML_MASK) >> IMM_LOW)); | 91 | - sprintf (p, "%d", (short)((instr & IMML_MASK) >> IMM_LOW)); |
| 91 | + sprintf (tmpstr, "%d", (int)((instr & IMML_MASK) >> IMM_LOW)); | 92 | + sprintf (p, "%d", (int)((instr & IMML_MASK) >> IMM_LOW)); |
| 92 | return (strdup (tmpstr)); | 93 | return p; |
| 93 | } | 94 | } |
| 94 | 95 | ||
| 95 | -- | 96 | -- |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0022-Adding-new-relocation-to-support-64bit-rodata.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0021-Adding-new-relocation-to-support-64bit-rodata.patch index e79b6626..0d212ccc 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0022-Adding-new-relocation-to-support-64bit-rodata.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0021-Adding-new-relocation-to-support-64bit-rodata.patch | |||
| @@ -1,17 +1,17 @@ | |||
| 1 | From 2aa455f838644cd804ec93aeea0d30bb265e91df Mon Sep 17 00:00:00 2001 | 1 | From a485fdf959afb6cd079f482eeea9d3186e6393f8 Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Sat, 13 Oct 2018 21:17:01 +0530 | 3 | Date: Sat, 13 Oct 2018 21:17:01 +0530 |
| 4 | Subject: [PATCH 22/43] Adding new relocation to support 64bit rodata | 4 | Subject: [PATCH 21/40] Adding new relocation to support 64bit rodata |
| 5 | 5 | ||
| 6 | --- | 6 | --- |
| 7 | bfd/elf64-microblaze.c | 11 +++++++-- | 7 | bfd/elf64-microblaze.c | 11 +++++++-- |
| 8 | 2 files changed, 54 insertions(+), 6 deletions(-) | 8 | 2 files changed, 54 insertions(+), 6 deletions(-) |
| 9 | 9 | ||
| 10 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c | 10 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c |
| 11 | index 40f10aac6d..4d9b90647f 100644 | 11 | index 17e58748a0b..b62c47e8514 100644 |
| 12 | --- a/bfd/elf64-microblaze.c | 12 | --- a/bfd/elf64-microblaze.c |
| 13 | +++ b/bfd/elf64-microblaze.c | 13 | +++ b/bfd/elf64-microblaze.c |
| 14 | @@ -1461,6 +1461,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, | 14 | @@ -1463,6 +1463,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, |
| 15 | case (int) R_MICROBLAZE_64_PCREL : | 15 | case (int) R_MICROBLAZE_64_PCREL : |
| 16 | case (int) R_MICROBLAZE_64: | 16 | case (int) R_MICROBLAZE_64: |
| 17 | case (int) R_MICROBLAZE_32: | 17 | case (int) R_MICROBLAZE_32: |
| @@ -19,16 +19,16 @@ index 40f10aac6d..4d9b90647f 100644 | |||
| 19 | { | 19 | { |
| 20 | /* r_symndx will be STN_UNDEF (zero) only for relocs against symbols | 20 | /* r_symndx will be STN_UNDEF (zero) only for relocs against symbols |
| 21 | from removed linkonce sections, or sections discarded by | 21 | from removed linkonce sections, or sections discarded by |
| 22 | @@ -1470,6 +1471,8 @@ microblaze_elf_relocate_section (bfd *output_bfd, | 22 | @@ -1472,6 +1473,8 @@ microblaze_elf_relocate_section (bfd *output_bfd, |
| 23 | relocation += addend; | 23 | relocation += addend; |
| 24 | if (r_type == R_MICROBLAZE_32)// || r_type == R_MICROBLAZE_IMML_64) | 24 | if (r_type == R_MICROBLAZE_32) |
| 25 | bfd_put_32 (input_bfd, relocation, contents + offset); | 25 | bfd_put_32 (input_bfd, relocation, contents + offset); |
| 26 | + else if (r_type == R_MICROBLAZE_IMML_64) | 26 | + else if (r_type == R_MICROBLAZE_IMML_64) |
| 27 | + bfd_put_64 (input_bfd, relocation, contents + offset); | 27 | + bfd_put_64 (input_bfd, relocation, contents + offset); |
| 28 | else | 28 | else |
| 29 | { | 29 | { |
| 30 | if (r_type == R_MICROBLAZE_64_PCREL) | 30 | if (r_type == R_MICROBLAZE_64_PCREL) |
| 31 | @@ -1547,7 +1550,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, | 31 | @@ -1549,7 +1552,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, |
| 32 | } | 32 | } |
| 33 | else | 33 | else |
| 34 | { | 34 | { |
| @@ -37,7 +37,7 @@ index 40f10aac6d..4d9b90647f 100644 | |||
| 37 | { | 37 | { |
| 38 | outrel.r_info = ELF64_R_INFO (0, R_MICROBLAZE_REL); | 38 | outrel.r_info = ELF64_R_INFO (0, R_MICROBLAZE_REL); |
| 39 | outrel.r_addend = relocation + addend; | 39 | outrel.r_addend = relocation + addend; |
| 40 | @@ -1573,6 +1576,8 @@ microblaze_elf_relocate_section (bfd *output_bfd, | 40 | @@ -1575,6 +1578,8 @@ microblaze_elf_relocate_section (bfd *output_bfd, |
| 41 | relocation += addend; | 41 | relocation += addend; |
| 42 | if (r_type == R_MICROBLAZE_32) | 42 | if (r_type == R_MICROBLAZE_32) |
| 43 | bfd_put_32 (input_bfd, relocation, contents + offset); | 43 | bfd_put_32 (input_bfd, relocation, contents + offset); |
| @@ -46,7 +46,7 @@ index 40f10aac6d..4d9b90647f 100644 | |||
| 46 | else | 46 | else |
| 47 | { | 47 | { |
| 48 | if (r_type == R_MICROBLAZE_64_PCREL) | 48 | if (r_type == R_MICROBLAZE_64_PCREL) |
| 49 | @@ -2085,7 +2090,8 @@ microblaze_elf_relax_section (bfd *abfd, | 49 | @@ -2072,7 +2077,8 @@ microblaze_elf_relax_section (bfd *abfd, |
| 50 | microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset, | 50 | microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset, |
| 51 | irelscan->r_addend); | 51 | irelscan->r_addend); |
| 52 | } | 52 | } |
| @@ -56,7 +56,7 @@ index 40f10aac6d..4d9b90647f 100644 | |||
| 56 | { | 56 | { |
| 57 | isym = isymbuf + ELF64_R_SYM (irelscan->r_info); | 57 | isym = isymbuf + ELF64_R_SYM (irelscan->r_info); |
| 58 | 58 | ||
| 59 | @@ -2591,6 +2597,7 @@ microblaze_elf_check_relocs (bfd * abfd, | 59 | @@ -2568,6 +2574,7 @@ microblaze_elf_check_relocs (bfd * abfd, |
| 60 | case R_MICROBLAZE_64: | 60 | case R_MICROBLAZE_64: |
| 61 | case R_MICROBLAZE_64_PCREL: | 61 | case R_MICROBLAZE_64_PCREL: |
| 62 | case R_MICROBLAZE_32: | 62 | case R_MICROBLAZE_32: |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0023-fixing-the-.bss-relocation-issue.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0022-fixing-the-.bss-relocation-issue.patch index 2458df6c..aa512b87 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0023-fixing-the-.bss-relocation-issue.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0022-fixing-the-.bss-relocation-issue.patch | |||
| @@ -1,35 +1,35 @@ | |||
| 1 | From 3240839197b1c42b3cd6e77c5b3b47aa7a1378a4 Mon Sep 17 00:00:00 2001 | 1 | From 24f96f4e86895b41aae21f775599a857939d002f Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Wed, 24 Oct 2018 12:34:37 +0530 | 3 | Date: Wed, 24 Oct 2018 12:34:37 +0530 |
| 4 | Subject: [PATCH 23/43] fixing the .bss relocation issue | 4 | Subject: [PATCH 22/40] fixing the .bss relocation issue |
| 5 | 5 | ||
| 6 | --- | 6 | --- |
| 7 | bfd/elf64-microblaze.c | 18 ++++++++++++------ | 7 | bfd/elf64-microblaze.c | 18 ++++++++++++------ |
| 8 | 1 file changed, 12 insertions(+), 6 deletions(-) | 8 | 1 file changed, 12 insertions(+), 6 deletions(-) |
| 9 | 9 | ||
| 10 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c | 10 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c |
| 11 | index 4d9b90647f..184b7d560d 100644 | 11 | index b62c47e8514..cb3b40b574c 100644 |
| 12 | --- a/bfd/elf64-microblaze.c | 12 | --- a/bfd/elf64-microblaze.c |
| 13 | +++ b/bfd/elf64-microblaze.c | 13 | +++ b/bfd/elf64-microblaze.c |
| 14 | @@ -1480,7 +1480,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, | 14 | @@ -1482,7 +1482,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, |
| 15 | + input_section->output_offset | 15 | + input_section->output_offset |
| 16 | + offset + INST_WORD_SIZE); | 16 | + offset + INST_WORD_SIZE); |
| 17 | unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian); | 17 | unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian); |
| 18 | - if (insn == 0xb2000000 || insn == 0xb2ffffff) | 18 | - if (insn == 0xb2000000 || insn == 0xb2ffffff) |
| 19 | + if ((insn & 0xff000000) == 0xb2000000) | 19 | + if ((insn & 0xff000000) == 0xb2000000) |
| 20 | { | 20 | { |
| 21 | insn &= ~0x00ffffff; | 21 | insn &= ~0x00ffffff; |
| 22 | insn |= (relocation >> 16) & 0xffffff; | 22 | insn |= (relocation >> 16) & 0xffffff; |
| 23 | @@ -1593,7 +1593,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, | 23 | @@ -1595,7 +1595,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, |
| 24 | + offset + INST_WORD_SIZE); | 24 | + offset + INST_WORD_SIZE); |
| 25 | } | 25 | } |
| 26 | unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian); | 26 | unsigned long insn = bfd_get_32 (input_bfd, contents + offset +endian); |
| 27 | - if (insn == 0xb2000000 || insn == 0xb2ffffff) | 27 | - if (insn == 0xb2000000 || insn == 0xb2ffffff) |
| 28 | + if ((insn & 0xff000000) == 0xb2000000) | 28 | + if ((insn & 0xff000000) == 0xb2000000) |
| 29 | { | 29 | { |
| 30 | insn &= ~0x00ffffff; | 30 | insn &= ~0x00ffffff; |
| 31 | insn |= (relocation >> 16) & 0xffffff; | 31 | insn |= (relocation >> 16) & 0xffffff; |
| 32 | @@ -1722,7 +1722,7 @@ microblaze_bfd_write_imm_value_32 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val) | 32 | @@ -1709,7 +1709,7 @@ microblaze_bfd_write_imm_value_32 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val) |
| 33 | { | 33 | { |
| 34 | unsigned long instr = bfd_get_32 (abfd, bfd_addr); | 34 | unsigned long instr = bfd_get_32 (abfd, bfd_addr); |
| 35 | 35 | ||
| @@ -38,7 +38,7 @@ index 4d9b90647f..184b7d560d 100644 | |||
| 38 | { | 38 | { |
| 39 | instr &= ~0x00ffffff; | 39 | instr &= ~0x00ffffff; |
| 40 | instr |= (val & 0xffffff); | 40 | instr |= (val & 0xffffff); |
| 41 | @@ -1745,7 +1745,7 @@ microblaze_bfd_write_imm_value_64 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val) | 41 | @@ -1732,7 +1732,7 @@ microblaze_bfd_write_imm_value_64 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val) |
| 42 | unsigned long instr_lo; | 42 | unsigned long instr_lo; |
| 43 | 43 | ||
| 44 | instr_hi = bfd_get_32 (abfd, bfd_addr); | 44 | instr_hi = bfd_get_32 (abfd, bfd_addr); |
| @@ -47,7 +47,7 @@ index 4d9b90647f..184b7d560d 100644 | |||
| 47 | { | 47 | { |
| 48 | instr_hi &= ~0x00ffffff; | 48 | instr_hi &= ~0x00ffffff; |
| 49 | instr_hi |= (val >> 16) & 0xffffff; | 49 | instr_hi |= (val >> 16) & 0xffffff; |
| 50 | @@ -2238,7 +2238,10 @@ microblaze_elf_relax_section (bfd *abfd, | 50 | @@ -2225,7 +2225,10 @@ microblaze_elf_relax_section (bfd *abfd, |
| 51 | unsigned long instr_lo = bfd_get_32 (abfd, ocontents | 51 | unsigned long instr_lo = bfd_get_32 (abfd, ocontents |
| 52 | + irelscan->r_offset | 52 | + irelscan->r_offset |
| 53 | + INST_WORD_SIZE); | 53 | + INST_WORD_SIZE); |
| @@ -59,7 +59,7 @@ index 4d9b90647f..184b7d560d 100644 | |||
| 59 | immediate |= (instr_lo & 0x0000ffff); | 59 | immediate |= (instr_lo & 0x0000ffff); |
| 60 | offset = calc_fixup (irelscan->r_addend, 0, sec); | 60 | offset = calc_fixup (irelscan->r_addend, 0, sec); |
| 61 | immediate -= offset; | 61 | immediate -= offset; |
| 62 | @@ -2282,7 +2285,10 @@ microblaze_elf_relax_section (bfd *abfd, | 62 | @@ -2269,7 +2272,10 @@ microblaze_elf_relax_section (bfd *abfd, |
| 63 | unsigned long instr_lo = bfd_get_32 (abfd, ocontents | 63 | unsigned long instr_lo = bfd_get_32 (abfd, ocontents |
| 64 | + irelscan->r_offset | 64 | + irelscan->r_offset |
| 65 | + INST_WORD_SIZE); | 65 | + INST_WORD_SIZE); |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0024-Fixed-the-bug-in-the-R_MICROBLAZE_64_NONE-relocation.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0023-Fixed-the-bug-in-the-R_MICROBLAZE_64_NONE-relocation.patch index d0ca677c..c645781e 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0024-Fixed-the-bug-in-the-R_MICROBLAZE_64_NONE-relocation.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0023-Fixed-the-bug-in-the-R_MICROBLAZE_64_NONE-relocation.patch | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | From 50bd636604305329b302b9fbbb692795d26f5fa5 Mon Sep 17 00:00:00 2001 | 1 | From cd5868dca5b4a728e6418459d871f5c9ca68253e Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Wed, 28 Nov 2018 14:00:29 +0530 | 3 | Date: Wed, 28 Nov 2018 14:00:29 +0530 |
| 4 | Subject: [PATCH 24/43] Fixed the bug in the R_MICROBLAZE_64_NONE relocation. | 4 | Subject: [PATCH 23/40] Fixed the bug in the R_MICROBLAZE_64_NONE relocation. |
| 5 | It was adjusting only lower 16bits. | 5 | It was adjusting only lower 16bits. |
| 6 | 6 | ||
| 7 | --- | 7 | --- |
| @@ -10,10 +10,10 @@ Subject: [PATCH 24/43] Fixed the bug in the R_MICROBLAZE_64_NONE relocation. | |||
| 10 | 2 files changed, 4 insertions(+), 4 deletions(-) | 10 | 2 files changed, 4 insertions(+), 4 deletions(-) |
| 11 | 11 | ||
| 12 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c | 12 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c |
| 13 | index 035e71f311..2d8c062a42 100644 | 13 | index a31b407cfbf..04816a4a187 100644 |
| 14 | --- a/bfd/elf32-microblaze.c | 14 | --- a/bfd/elf32-microblaze.c |
| 15 | +++ b/bfd/elf32-microblaze.c | 15 | +++ b/bfd/elf32-microblaze.c |
| 16 | @@ -2022,8 +2022,8 @@ microblaze_elf_relax_section (bfd *abfd, | 16 | @@ -2023,8 +2023,8 @@ microblaze_elf_relax_section (bfd *abfd, |
| 17 | sfix = calc_fixup (irel->r_offset + INST_WORD_SIZE, 0, sec); | 17 | sfix = calc_fixup (irel->r_offset + INST_WORD_SIZE, 0, sec); |
| 18 | efix = calc_fixup (target_address, 0, sec); | 18 | efix = calc_fixup (target_address, 0, sec); |
| 19 | irel->r_addend -= (efix - sfix); | 19 | irel->r_addend -= (efix - sfix); |
| @@ -25,10 +25,10 @@ index 035e71f311..2d8c062a42 100644 | |||
| 25 | break; | 25 | break; |
| 26 | } | 26 | } |
| 27 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c | 27 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c |
| 28 | index 184b7d560d..ef6a87062b 100644 | 28 | index cb3b40b574c..b002b414d64 100644 |
| 29 | --- a/bfd/elf64-microblaze.c | 29 | --- a/bfd/elf64-microblaze.c |
| 30 | +++ b/bfd/elf64-microblaze.c | 30 | +++ b/bfd/elf64-microblaze.c |
| 31 | @@ -2017,8 +2017,8 @@ microblaze_elf_relax_section (bfd *abfd, | 31 | @@ -2004,8 +2004,8 @@ microblaze_elf_relax_section (bfd *abfd, |
| 32 | sfix = calc_fixup (irel->r_offset + INST_WORD_SIZE, 0, sec); | 32 | sfix = calc_fixup (irel->r_offset + INST_WORD_SIZE, 0, sec); |
| 33 | efix = calc_fixup (target_address, 0, sec); | 33 | efix = calc_fixup (target_address, 0, sec); |
| 34 | irel->r_addend -= (efix - sfix); | 34 | irel->r_addend -= (efix - sfix); |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0025-Patch-MicroBlaze-fixed-Build-issue-which-are-due-to-.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0025-Patch-MicroBlaze-fixed-Build-issue-which-are-due-to-.patch deleted file mode 100644 index fba32c08..00000000 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0025-Patch-MicroBlaze-fixed-Build-issue-which-are-due-to-.patch +++ /dev/null | |||
| @@ -1,51 +0,0 @@ | |||
| 1 | From b8c4b1fa22137d18d4ada7e350948035705f402f Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mahesh Bodapati <mbodapat@xilinx.com> | ||
| 3 | Date: Sun, 2 Dec 2018 14:49:14 +0530 | ||
| 4 | Subject: [PATCH 25/43] [Patch,MicroBlaze]: fixed Build issue which are due to | ||
| 5 | conflicts in patches. | ||
| 6 | |||
| 7 | --- | ||
| 8 | bfd/elf32-microblaze.c | 1 + | ||
| 9 | bfd/elf64-microblaze.c | 12 ++++++------ | ||
| 10 | 3 files changed, 9 insertions(+), 8 deletions(-) | ||
| 11 | |||
| 12 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c | ||
| 13 | index 2d8c062a42..6a795c5069 100644 | ||
| 14 | --- a/bfd/elf32-microblaze.c | ||
| 15 | +++ b/bfd/elf32-microblaze.c | ||
| 16 | @@ -1996,6 +1996,7 @@ microblaze_elf_relax_section (bfd *abfd, | ||
| 17 | /* This was a PC-relative instruction that was | ||
| 18 | completely resolved. */ | ||
| 19 | int sfix, efix; | ||
| 20 | + unsigned int val; | ||
| 21 | bfd_vma target_address; | ||
| 22 | target_address = irel->r_addend + irel->r_offset; | ||
| 23 | sfix = calc_fixup (irel->r_offset, 0, sec); | ||
| 24 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c | ||
| 25 | index ef6a87062b..bed534e7dd 100644 | ||
| 26 | --- a/bfd/elf64-microblaze.c | ||
| 27 | +++ b/bfd/elf64-microblaze.c | ||
| 28 | @@ -2854,14 +2854,14 @@ microblaze_elf_adjust_dynamic_symbol (struct bfd_link_info *info, | ||
| 29 | /* If this is a weak symbol, and there is a real definition, the | ||
| 30 | processor independent code will have arranged for us to see the | ||
| 31 | real definition first, and we can just use the same value. */ | ||
| 32 | - if (h->u.weakdef != NULL) | ||
| 33 | + if (h->is_weakalias) | ||
| 34 | { | ||
| 35 | - BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined | ||
| 36 | - || h->u.weakdef->root.type == bfd_link_hash_defweak); | ||
| 37 | - h->root.u.def.section = h->u.weakdef->root.u.def.section; | ||
| 38 | - h->root.u.def.value = h->u.weakdef->root.u.def.value; | ||
| 39 | + struct elf_link_hash_entry *def = weakdef (h); | ||
| 40 | + BFD_ASSERT (def->root.type == bfd_link_hash_defined); | ||
| 41 | + h->root.u.def.section = def->root.u.def.section; | ||
| 42 | + h->root.u.def.value = def->root.u.def.value; | ||
| 43 | return TRUE; | ||
| 44 | - } | ||
| 45 | + } | ||
| 46 | |||
| 47 | /* This is a reference to a symbol defined by a dynamic object which | ||
| 48 | is not a function. */ | ||
| 49 | -- | ||
| 50 | 2.17.1 | ||
| 51 | |||
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0028-Patch-Microblaze-Binutils-security-check-is-causing-.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0025-Patch-Microblaze-Binutils-security-check-is-causing-.patch index 664675b9..f5bf917a 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0028-Patch-Microblaze-Binutils-security-check-is-causing-.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0025-Patch-Microblaze-Binutils-security-check-is-causing-.patch | |||
| @@ -1,26 +1,27 @@ | |||
| 1 | From 7fdfff333f4982d7eb32a564aacfd2d8822c0004 Mon Sep 17 00:00:00 2001 | 1 | From 25a67af22ad040f87b3c14185c338828d4e26908 Mon Sep 17 00:00:00 2001 |
| 2 | From: Mahesh Bodapati <mbodapat@xilinx.com> | 2 | From: Mahesh Bodapati <mbodapat@xilinx.com> |
| 3 | Date: Mon, 11 Mar 2019 14:23:58 +0530 | 3 | Date: Mon, 11 Mar 2019 14:23:58 +0530 |
| 4 | Subject: [PATCH 28/43] [Patch,Microblaze] : Binutils security check is causing | 4 | Subject: [PATCH 25/40] [Patch,Microblaze] : Binutils security check is causing |
| 5 | build error for windows builds.commenting for now. | 5 | build error for windows builds.commenting for now. |
| 6 | 6 | ||
| 7 | --- | 7 | --- |
| 8 | bfd/elf-attrs.c | 2 ++ | 8 | bfd/elf-attrs.c | 3 +++ |
| 9 | 1 file changed, 2 insertions(+) | 9 | 1 file changed, 3 insertions(+) |
| 10 | 10 | ||
| 11 | diff --git a/bfd/elf-attrs.c b/bfd/elf-attrs.c | 11 | diff --git a/bfd/elf-attrs.c b/bfd/elf-attrs.c |
| 12 | index bfe135e7fb..feb5cb37f5 100644 | 12 | index bfe135e7fbb..abf267ad42e 100644 |
| 13 | --- a/bfd/elf-attrs.c | 13 | --- a/bfd/elf-attrs.c |
| 14 | +++ b/bfd/elf-attrs.c | 14 | +++ b/bfd/elf-attrs.c |
| 15 | @@ -440,6 +440,7 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr) | 15 | @@ -440,6 +440,8 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr) |
| 16 | /* PR 17512: file: 2844a11d. */ | 16 | /* PR 17512: file: 2844a11d. */ |
| 17 | if (hdr->sh_size == 0) | 17 | if (hdr->sh_size == 0) |
| 18 | return; | 18 | return; |
| 19 | + | ||
| 19 | + #if 0 | 20 | + #if 0 |
| 20 | if (hdr->sh_size > bfd_get_file_size (abfd)) | 21 | if (hdr->sh_size > bfd_get_file_size (abfd)) |
| 21 | { | 22 | { |
| 22 | /* xgettext:c-format */ | 23 | /* xgettext:c-format */ |
| 23 | @@ -448,6 +449,7 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr) | 24 | @@ -448,6 +450,7 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr) |
| 24 | bfd_set_error (bfd_error_invalid_operation); | 25 | bfd_set_error (bfd_error_invalid_operation); |
| 25 | return; | 26 | return; |
| 26 | } | 27 | } |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0026-Patch-Microblaze-changes-of-PR22458-failure-to-choos.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0026-Patch-Microblaze-changes-of-PR22458-failure-to-choos.patch deleted file mode 100644 index 38245cbd..00000000 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0026-Patch-Microblaze-changes-of-PR22458-failure-to-choos.patch +++ /dev/null | |||
| @@ -1,31 +0,0 @@ | |||
| 1 | From 212c40ed034096069f3ab0dac74ccfb79063b84c Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mahesh Bodapati <mbodapat@xilinx.com> | ||
| 3 | Date: Tue, 26 Feb 2019 17:31:41 +0530 | ||
| 4 | Subject: [PATCH 26/43] [Patch,Microblaze] : changes of "PR22458, failure to | ||
| 5 | choose a matching ELF target" is causing "Multiple Prevailing definition | ||
| 6 | errors",added check for best_match elf. | ||
| 7 | |||
| 8 | --- | ||
| 9 | bfd/format.c | 5 +++++ | ||
| 10 | 1 file changed, 5 insertions(+) | ||
| 11 | |||
| 12 | diff --git a/bfd/format.c b/bfd/format.c | ||
| 13 | index 97a92291a8..3a74cc49d2 100644 | ||
| 14 | --- a/bfd/format.c | ||
| 15 | +++ b/bfd/format.c | ||
| 16 | @@ -292,7 +292,12 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching) | ||
| 17 | |||
| 18 | /* Don't check the default target twice. */ | ||
| 19 | if (*target == &binary_vec | ||
| 20 | +#if !BFD_SUPPORTS_PLUGINS | ||
| 21 | || (!abfd->target_defaulted && *target == save_targ)) | ||
| 22 | +#else | ||
| 23 | + || (!abfd->target_defaulted && *target == save_targ) | ||
| 24 | + || (*target)->match_priority > best_match) | ||
| 25 | +#endif | ||
| 26 | continue; | ||
| 27 | |||
| 28 | /* If we already tried a match, the bfd is modified and may | ||
| 29 | -- | ||
| 30 | 2.17.1 | ||
| 31 | |||
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0029-fixing-the-long-long-long-mingw-toolchain-issue.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0026-fixing-the-long-long-long-mingw-toolchain-issue.patch index 0da9e7b4..f5ddce41 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0029-fixing-the-long-long-long-mingw-toolchain-issue.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0026-fixing-the-long-long-long-mingw-toolchain-issue.patch | |||
| @@ -1,14 +1,14 @@ | |||
| 1 | From fcb9c923a78a6a6141626f4c2a82579cfc4e43d6 Mon Sep 17 00:00:00 2001 | 1 | From b9e89f0698fd0e3b0e965986681f9fd90d3dc313 Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Thu, 29 Nov 2018 17:59:25 +0530 | 3 | Date: Thu, 29 Nov 2018 17:59:25 +0530 |
| 4 | Subject: [PATCH 29/43] fixing the long & long long mingw toolchain issue | 4 | Subject: [PATCH 26/40] fixing the long & long long mingw toolchain issue |
| 5 | 5 | ||
| 6 | --- | 6 | --- |
| 7 | opcodes/microblaze-opc.h | 4 ++-- | 7 | opcodes/microblaze-opc.h | 4 ++-- |
| 8 | 2 files changed, 7 insertions(+), 7 deletions(-) | 8 | 2 files changed, 7 insertions(+), 7 deletions(-) |
| 9 | 9 | ||
| 10 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h | 10 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h |
| 11 | index 824afc0ab0..d59ee0a95f 100644 | 11 | index f4ee8f43372..c8c2addc351 100644 |
| 12 | --- a/opcodes/microblaze-opc.h | 12 | --- a/opcodes/microblaze-opc.h |
| 13 | +++ b/opcodes/microblaze-opc.h | 13 | +++ b/opcodes/microblaze-opc.h |
| 14 | @@ -585,8 +585,8 @@ char pvr_register_prefix[] = "rpvr"; | 14 | @@ -585,8 +585,8 @@ char pvr_register_prefix[] = "rpvr"; |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0030-Added-support-to-new-arithmetic-single-register-inst.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0027-Added-support-to-new-arithmetic-single-register-inst.patch index 79d7f4fe..bf05816d 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0030-Added-support-to-new-arithmetic-single-register-inst.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0027-Added-support-to-new-arithmetic-single-register-inst.patch | |||
| @@ -1,47 +1,55 @@ | |||
| 1 | From f36d3bdd09f5c9987199f08ea3dd98bf45a9e18e Mon Sep 17 00:00:00 2001 | 1 | From efc3fd518cdb7e8bf82ac27b98b946001f83a2bf Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju <nmekala@xilinx.com> | 2 | From: Nagaraju <nmekala@xilinx.com> |
| 3 | Date: Fri, 23 Aug 2019 16:18:43 +0530 | 3 | Date: Fri, 23 Aug 2019 16:18:43 +0530 |
| 4 | Subject: [PATCH 30/43] Added support to new arithmetic single register | 4 | Subject: [PATCH 27/40] Added support to new arithmetic single register |
| 5 | instructions | 5 | instructions |
| 6 | 6 | ||
| 7 | --- | 7 | --- |
| 8 | opcodes/microblaze-dis.c | 12 +++ | 8 | opcodes/microblaze-dis.c | 13 +++- |
| 9 | opcodes/microblaze-opc.h | 43 ++++++++++- | 9 | opcodes/microblaze-opc.h | 45 +++++++++++- |
| 10 | opcodes/microblaze-opcm.h | 5 +- | 10 | opcodes/microblaze-opcm.h | 5 +- |
| 11 | 4 files changed, 201 insertions(+), 6 deletions(-) | 11 | 4 files changed, 201 insertions(+), 7 deletions(-) |
| 12 | 12 | ||
| 13 | diff --git a/opcodes/microblaze-dis.c b/opcodes/microblaze-dis.c | 13 | diff --git a/opcodes/microblaze-dis.c b/opcodes/microblaze-dis.c |
| 14 | index f679a43606..e5e880cb1c 100644 | 14 | index 24ede714858..e93d9b890ba 100644 |
| 15 | --- a/opcodes/microblaze-dis.c | 15 | --- a/opcodes/microblaze-dis.c |
| 16 | +++ b/opcodes/microblaze-dis.c | 16 | +++ b/opcodes/microblaze-dis.c |
| 17 | @@ -114,6 +114,15 @@ get_field_imm15 (long instr) | 17 | @@ -131,6 +131,15 @@ get_field_imm15 (struct string_buf *buf, long instr) |
| 18 | return (strdup (tmpstr)); | 18 | return p; |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | +static char * | 21 | +static char * |
| 22 | +get_field_imm16 (long instr) | 22 | +get_field_imm16 (struct string_buf *buf, long instr) |
| 23 | +{ | 23 | +{ |
| 24 | + char tmpstr[25]; | 24 | + char *p = strbuf (buf); |
| 25 | + | 25 | + |
| 26 | + sprintf (tmpstr, "%d", (short)((instr & IMM16_MASK) >> IMM_LOW)); | 26 | + sprintf (p, "%d", (short)((instr & IMM16_MASK) >> IMM_LOW)); |
| 27 | + return (strdup (tmpstr)); | 27 | + return p; |
| 28 | +} | 28 | +} |
| 29 | + | 29 | + |
| 30 | static char * | 30 | static char * |
| 31 | get_field_special (long instr, struct op_code_struct * op) | 31 | get_field_special (struct string_buf *buf, long instr, |
| 32 | { | 32 | struct op_code_struct *op) |
| 33 | @@ -419,6 +428,9 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info) | 33 | @@ -448,6 +457,9 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info) |
| 34 | case INST_TYPE_RD_IMM15: | 34 | print_func (stream, "\t%s, %s", get_field_rd (&buf, inst), |
| 35 | print_func (stream, "\t%s, %s", get_field_rd (inst), get_field_imm15 (inst)); | 35 | get_field_imm15 (&buf, inst)); |
| 36 | break; | 36 | break; |
| 37 | + case INST_TYPE_RD_IMML: | 37 | + case INST_TYPE_RD_IMML: |
| 38 | + print_func (stream, "\t%s, %s", get_field_rd (inst), get_field_imm16 (inst)); | 38 | + print_func (stream, "\t%s, %s", get_field_rd (&buf, inst), get_field_imm16 (&buf, inst)); |
| 39 | + break; | 39 | + break; |
| 40 | /* For mbar insn. */ | 40 | /* For mbar insn. */ |
| 41 | case INST_TYPE_IMM5: | 41 | case INST_TYPE_IMM5: |
| 42 | print_func (stream, "\t%s", get_field_imm5_mbar (inst)); | 42 | print_func (stream, "\t%s", get_field_imm5_mbar (&buf, inst)); |
| 43 | @@ -455,7 +467,6 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info) | ||
| 44 | /* For mbar 16 or sleep insn. */ | ||
| 45 | case INST_TYPE_NONE: | ||
| 46 | break; | ||
| 47 | - /* For tuqula instruction */ | ||
| 48 | /* For bit field insns. */ | ||
| 49 | case INST_TYPE_RD_R1_IMMW_IMMS: | ||
| 50 | print_func (stream, "\t%s, %s, %s, %s", get_field_rd (&buf, inst), get_field_r1(&buf, inst), | ||
| 43 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h | 51 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h |
| 44 | index d59ee0a95f..0774f70e08 100644 | 52 | index c8c2addc351..eaf4a1bd9f9 100644 |
| 45 | --- a/opcodes/microblaze-opc.h | 53 | --- a/opcodes/microblaze-opc.h |
| 46 | +++ b/opcodes/microblaze-opc.h | 54 | +++ b/opcodes/microblaze-opc.h |
| 47 | @@ -69,6 +69,7 @@ | 55 | @@ -69,6 +69,7 @@ |
| @@ -94,7 +102,7 @@ index d59ee0a95f..0774f70e08 100644 | |||
| 94 | /* New Mask for msrset, msrclr insns. */ | 102 | /* New Mask for msrset, msrclr insns. */ |
| 95 | #define OPCODE_MASK_H23N 0xFC1F8000 /* High 6 and bits 11 - 16. */ | 103 | #define OPCODE_MASK_H23N 0xFC1F8000 /* High 6 and bits 11 - 16. */ |
| 96 | /* Mask for mbar insn. */ | 104 | /* Mask for mbar insn. */ |
| 97 | @@ -114,7 +143,7 @@ | 105 | @@ -114,13 +143,13 @@ |
| 98 | #define DELAY_SLOT 1 | 106 | #define DELAY_SLOT 1 |
| 99 | #define NO_DELAY_SLOT 0 | 107 | #define NO_DELAY_SLOT 0 |
| 100 | 108 | ||
| @@ -103,6 +111,13 @@ index d59ee0a95f..0774f70e08 100644 | |||
| 103 | 111 | ||
| 104 | struct op_code_struct | 112 | struct op_code_struct |
| 105 | { | 113 | { |
| 114 | const char * name; | ||
| 115 | short inst_type; /* Registers and immediate values involved. */ | ||
| 116 | - short inst_offset_type; /* Immediate vals offset from PC? (= 1 for branches). */ | ||
| 117 | + int inst_offset_type; /* Immediate vals offset from PC? (= 1 for branches). */ | ||
| 118 | short delay_slots; /* Info about delay slots needed after this instr. */ | ||
| 119 | short immval_mask; | ||
| 120 | unsigned long bit_sequence; /* All the fixed bits for the op are set and | ||
| 106 | @@ -444,13 +473,21 @@ struct op_code_struct | 121 | @@ -444,13 +473,21 @@ struct op_code_struct |
| 107 | {"cmpl", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x14000101, OPCODE_MASK_H4, cmpl, arithmetic_inst }, | 122 | {"cmpl", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x14000101, OPCODE_MASK_H4, cmpl, arithmetic_inst }, |
| 108 | {"cmplu", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x14000103, OPCODE_MASK_H4, cmplu, arithmetic_inst }, | 123 | {"cmplu", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x14000103, OPCODE_MASK_H4, cmplu, arithmetic_inst }, |
| @@ -140,7 +155,7 @@ index d59ee0a95f..0774f70e08 100644 | |||
| 140 | {"breai", INST_TYPE_IMM, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8010000, OPCODE_MASK_H12, breai, branch_inst }, | 155 | {"breai", INST_TYPE_IMM, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8010000, OPCODE_MASK_H12, breai, branch_inst }, |
| 141 | {"breaid", INST_TYPE_IMM, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8110000, OPCODE_MASK_H12, breaid, branch_inst }, | 156 | {"breaid", INST_TYPE_IMM, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8110000, OPCODE_MASK_H12, breaid, branch_inst }, |
| 142 | diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h | 157 | diff --git a/opcodes/microblaze-opcm.h b/opcodes/microblaze-opcm.h |
| 143 | index 5f2e190d23..4d2ee2dd0d 100644 | 158 | index ee01cdb7d9b..31726c9b01a 100644 |
| 144 | --- a/opcodes/microblaze-opcm.h | 159 | --- a/opcodes/microblaze-opcm.h |
| 145 | +++ b/opcodes/microblaze-opcm.h | 160 | +++ b/opcodes/microblaze-opcm.h |
| 146 | @@ -61,7 +61,9 @@ enum microblaze_instr | 161 | @@ -61,7 +61,9 @@ enum microblaze_instr |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0031-Patch-MicroBlaze-double-imml-generation-for-64-bit-v.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0028-Patch-MicroBlaze-double-imml-generation-for-64-bit-v.patch index 0be07120..01d615da 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0031-Patch-MicroBlaze-double-imml-generation-for-64-bit-v.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0028-Patch-MicroBlaze-double-imml-generation-for-64-bit-v.patch | |||
| @@ -1,15 +1,15 @@ | |||
| 1 | From a15e73a33b3f395f2096e252b655775ed8424c14 Mon Sep 17 00:00:00 2001 | 1 | From 953a4eb8152c0aca3e36ccc22a8950c9e68965b5 Mon Sep 17 00:00:00 2001 |
| 2 | From: Mahesh Bodapati <mbodapat@xilinx.com> | 2 | From: Mahesh Bodapati <mbodapat@xilinx.com> |
| 3 | Date: Mon, 26 Aug 2019 15:29:42 +0530 | 3 | Date: Mon, 26 Aug 2019 15:29:42 +0530 |
| 4 | Subject: [PATCH 31/43] [Patch,MicroBlaze] : double imml generation for 64 bit | 4 | Subject: [PATCH 28/40] [Patch,MicroBlaze] : double imml generation for 64 bit |
| 5 | values. | 5 | values. |
| 6 | 6 | ||
| 7 | --- | 7 | --- |
| 8 | opcodes/microblaze-opc.h | 4 +- | 8 | opcodes/microblaze-opc.h | 4 +- |
| 9 | 2 files changed, 263 insertions(+), 63 deletions(-) | 9 | 2 files changed, 264 insertions(+), 64 deletions(-) |
| 10 | 10 | ||
| 11 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h | 11 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h |
| 12 | index 0774f70e08..bd9d91cd57 100644 | 12 | index eaf4a1bd9f9..79c3cf0d1a1 100644 |
| 13 | --- a/opcodes/microblaze-opc.h | 13 | --- a/opcodes/microblaze-opc.h |
| 14 | +++ b/opcodes/microblaze-opc.h | 14 | +++ b/opcodes/microblaze-opc.h |
| 15 | @@ -626,8 +626,8 @@ char pvr_register_prefix[] = "rpvr"; | 15 | @@ -626,8 +626,8 @@ char pvr_register_prefix[] = "rpvr"; |
| @@ -18,7 +18,7 @@ index 0774f70e08..bd9d91cd57 100644 | |||
| 18 | 18 | ||
| 19 | -#define MIN_IMML ((long long) 0xffffff8000000000L) | 19 | -#define MIN_IMML ((long long) 0xffffff8000000000L) |
| 20 | -#define MAX_IMML ((long long) 0x0000007fffffffffL) | 20 | -#define MAX_IMML ((long long) 0x0000007fffffffffL) |
| 21 | +#define MIN_IMML ((long long) -9223372036854775808) | 21 | +#define MIN_IMML ((long long) -9223372036854775807) |
| 22 | +#define MAX_IMML ((long long) 9223372036854775807) | 22 | +#define MAX_IMML ((long long) 9223372036854775807) |
| 23 | 23 | ||
| 24 | #endif /* MICROBLAZE_OPC */ | 24 | #endif /* MICROBLAZE_OPC */ |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0033-Fix-various-compile-warnings.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0033-Fix-various-compile-warnings.patch new file mode 100644 index 00000000..4172595b --- /dev/null +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0033-Fix-various-compile-warnings.patch | |||
| @@ -0,0 +1,60 @@ | |||
| 1 | From c59684852ecd37d6f82363f2cf0e1de1f770aab7 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mark Hatle <mark.hatle@kernel.crashing.org> | ||
| 3 | Date: Fri, 17 Jul 2020 09:20:54 -0500 | ||
| 4 | Subject: [PATCH 33/40] Fix various compile warnings | ||
| 5 | |||
| 6 | Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org> | ||
| 7 | --- | ||
| 8 | bfd/elf64-microblaze.c | 9 +++++---- | ||
| 9 | 2 files changed, 10 insertions(+), 10 deletions(-) | ||
| 10 | |||
| 11 | diff --git a/bfd/elf64-microblaze.c b/bfd/elf64-microblaze.c | ||
| 12 | index b002b414d64..8308f1ebd09 100644 | ||
| 13 | --- a/bfd/elf64-microblaze.c | ||
| 14 | +++ b/bfd/elf64-microblaze.c | ||
| 15 | @@ -692,7 +692,7 @@ microblaze_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, | ||
| 16 | /* Set the howto pointer for a RCE ELF reloc. */ | ||
| 17 | |||
| 18 | static bfd_boolean | ||
| 19 | -microblaze_elf_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED, | ||
| 20 | +microblaze_elf_info_to_howto (bfd * abfd, | ||
| 21 | arelent * cache_ptr, | ||
| 22 | Elf_Internal_Rela * dst) | ||
| 23 | { | ||
| 24 | @@ -705,14 +705,14 @@ microblaze_elf_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED, | ||
| 25 | r_type = ELF64_R_TYPE (dst->r_info); | ||
| 26 | if (r_type >= R_MICROBLAZE_max) | ||
| 27 | { | ||
| 28 | - (*_bfd_error_handler) (_("%pB: unrecognised MicroBlaze reloc number: %d"), | ||
| 29 | + _bfd_error_handler (_("%pB: unsupported relocation type %#x"), | ||
| 30 | abfd, r_type); | ||
| 31 | bfd_set_error (bfd_error_bad_value); | ||
| 32 | return FALSE; | ||
| 33 | } | ||
| 34 | |||
| 35 | cache_ptr->howto = microblaze_elf_howto_table [r_type]; | ||
| 36 | - return TRUE; | ||
| 37 | + return TRUE; | ||
| 38 | } | ||
| 39 | |||
| 40 | /* Microblaze ELF local labels start with 'L.' or '$L', not '.L'. */ | ||
| 41 | @@ -1560,7 +1560,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, | ||
| 42 | else | ||
| 43 | { | ||
| 44 | BFD_FAIL (); | ||
| 45 | - (*_bfd_error_handler) | ||
| 46 | + _bfd_error_handler | ||
| 47 | (_("%pB: probably compiled without -fPIC?"), | ||
| 48 | input_bfd); | ||
| 49 | bfd_set_error (bfd_error_bad_value); | ||
| 50 | @@ -2554,6 +2554,7 @@ microblaze_elf_check_relocs (bfd * abfd, | ||
| 51 | goto dogottls; | ||
| 52 | case R_MICROBLAZE_TLSLD: | ||
| 53 | tls_type |= (TLS_TLS | TLS_LD); | ||
| 54 | + /* Fall through. */ | ||
| 55 | dogottls: | ||
| 56 | sec->has_tls_reloc = 1; | ||
| 57 | /* Fall through. */ | ||
| 58 | -- | ||
| 59 | 2.17.1 | ||
| 60 | |||
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0032-Add-initial-port-of-linux-gdbserver.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0034-Add-initial-port-of-linux-gdbserver.patch index 88c137f5..ff1c606c 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0032-Add-initial-port-of-linux-gdbserver.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0034-Add-initial-port-of-linux-gdbserver.patch | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | From 5c7fa77256c704cc493a6bd42425fcec814710e8 Mon Sep 17 00:00:00 2001 | 1 | From c5eee33cd39dbb9c44bdad2025a5c848139c55f2 Mon Sep 17 00:00:00 2001 |
| 2 | From: Mahesh Bodapati <mbodapat@xilinx.com> | 2 | From: Mahesh Bodapati <mbodapat@xilinx.com> |
| 3 | Date: Mon, 23 Jan 2017 19:07:44 +0530 | 3 | Date: Mon, 23 Jan 2017 19:07:44 +0530 |
| 4 | Subject: [PATCH 32/43] Add initial port of linux gdbserver add | 4 | Subject: [PATCH 34/40] Add initial port of linux gdbserver add |
| 5 | gdb_proc_service_h to gdbserver microblaze-linux | 5 | gdb_proc_service_h to gdbserver microblaze-linux |
| 6 | 6 | ||
| 7 | gdbserver needs to initialise the microblaze registers | 7 | gdbserver needs to initialise the microblaze registers |
| @@ -21,17 +21,21 @@ Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com> | |||
| 21 | Signed-off-by: Nathan Rossi <nathan.rossi@petalogix.com> | 21 | Signed-off-by: Nathan Rossi <nathan.rossi@petalogix.com> |
| 22 | --- | 22 | --- |
| 23 | gdb/configure.host | 3 + | 23 | gdb/configure.host | 3 + |
| 24 | gdb/features/microblaze-linux.xml | 12 ++ | ||
| 25 | gdb/gdbserver/Makefile.in | 4 + | ||
| 26 | gdb/gdbserver/configure.srv | 8 ++ | ||
| 24 | gdb/gdbserver/linux-microblaze-low.c | 189 +++++++++++++++++++++++++++ | 27 | gdb/gdbserver/linux-microblaze-low.c | 189 +++++++++++++++++++++++++++ |
| 25 | gdb/microblaze-linux-tdep.c | 29 +++- | 28 | gdb/microblaze-linux-tdep.c | 29 +++- |
| 26 | gdb/microblaze-tdep.c | 35 ++++- | 29 | gdb/microblaze-tdep.c | 35 ++++- |
| 27 | gdb/microblaze-tdep.h | 4 +- | 30 | gdb/microblaze-tdep.h | 4 +- |
| 28 | gdb/regformats/reg-microblaze.dat | 41 ++++++ | 31 | gdb/regformats/reg-microblaze.dat | 41 ++++++ |
| 29 | 6 files changed, 298 insertions(+), 3 deletions(-) | 32 | 9 files changed, 322 insertions(+), 3 deletions(-) |
| 33 | create mode 100644 gdb/features/microblaze-linux.xml | ||
| 30 | create mode 100644 gdb/gdbserver/linux-microblaze-low.c | 34 | create mode 100644 gdb/gdbserver/linux-microblaze-low.c |
| 31 | create mode 100644 gdb/regformats/reg-microblaze.dat | 35 | create mode 100644 gdb/regformats/reg-microblaze.dat |
| 32 | 36 | ||
| 33 | diff --git a/gdb/configure.host b/gdb/configure.host | 37 | diff --git a/gdb/configure.host b/gdb/configure.host |
| 34 | index c87f997abc..de8d6b00f3 100644 | 38 | index ce528237291..cf1a08e8b28 100644 |
| 35 | --- a/gdb/configure.host | 39 | --- a/gdb/configure.host |
| 36 | +++ b/gdb/configure.host | 40 | +++ b/gdb/configure.host |
| 37 | @@ -65,6 +65,7 @@ hppa*) gdb_host_cpu=pa ;; | 41 | @@ -65,6 +65,7 @@ hppa*) gdb_host_cpu=pa ;; |
| @@ -51,9 +55,75 @@ index c87f997abc..de8d6b00f3 100644 | |||
| 51 | powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*) | 55 | powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*) |
| 52 | gdb_host=aix ;; | 56 | gdb_host=aix ;; |
| 53 | powerpc*-*-freebsd*) gdb_host=fbsd ;; | 57 | powerpc*-*-freebsd*) gdb_host=fbsd ;; |
| 58 | diff --git a/gdb/features/microblaze-linux.xml b/gdb/features/microblaze-linux.xml | ||
| 59 | new file mode 100644 | ||
| 60 | index 00000000000..8983e66eb3d | ||
| 61 | --- /dev/null | ||
| 62 | +++ b/gdb/features/microblaze-linux.xml | ||
| 63 | @@ -0,0 +1,12 @@ | ||
| 64 | +<?xml version="1.0"?> | ||
| 65 | +<!-- Copyright (C) 2014-2018 Free Software Foundation, Inc. | ||
| 66 | + | ||
| 67 | + Copying and distribution of this file, with or without modification, | ||
| 68 | + are permitted in any medium without royalty provided the copyright | ||
| 69 | + notice and this notice are preserved. --> | ||
| 70 | + | ||
| 71 | +<!DOCTYPE target SYSTEM "gdb-target.dtd"> | ||
| 72 | +<target> | ||
| 73 | + <osabi>GNU/Linux</osabi> | ||
| 74 | + <xi:include href="microblaze-core.xml"/> | ||
| 75 | +</target> | ||
| 76 | diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in | ||
| 77 | index 16a9f2fd380..fb4762a22d5 100644 | ||
| 78 | --- a/gdb/gdbserver/Makefile.in | ||
| 79 | +++ b/gdb/gdbserver/Makefile.in | ||
| 80 | @@ -172,6 +172,7 @@ SFILES = \ | ||
| 81 | $(srcdir)/linux-low.c \ | ||
| 82 | $(srcdir)/linux-m32r-low.c \ | ||
| 83 | $(srcdir)/linux-m68k-low.c \ | ||
| 84 | + $(srcdir)/linux-microblaze-low.c \ | ||
| 85 | $(srcdir)/linux-mips-low.c \ | ||
| 86 | $(srcdir)/linux-nios2-low.c \ | ||
| 87 | $(srcdir)/linux-ppc-low.c \ | ||
| 88 | @@ -231,6 +232,7 @@ SFILES = \ | ||
| 89 | $(srcdir)/nat/linux-namespaces.c \ | ||
| 90 | $(srcdir)/nat/linux-osdata.c \ | ||
| 91 | $(srcdir)/nat/linux-personality.c \ | ||
| 92 | + $(srcdir)/nat/microblaze-linux.c \ | ||
| 93 | $(srcdir)/nat/mips-linux-watch.c \ | ||
| 94 | $(srcdir)/nat/ppc-linux.c \ | ||
| 95 | $(srcdir)/nat/fork-inferior.c \ | ||
| 96 | @@ -657,6 +659,8 @@ gdbsupport/%.o: ../gdbsupport/%.c | ||
| 97 | |||
| 98 | %-generated.c: ../regformats/rs6000/%.dat | $(regdat_sh) | ||
| 99 | $(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@ | ||
| 100 | +microblaze-linux.c : $(srcdir)/../regformats/reg-microblaze.dat $(regdat_sh) | ||
| 101 | + $(ECHO_REGDAT) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-microblaze.dat microblaze-linux.c | ||
| 102 | |||
| 103 | # | ||
| 104 | # Dependency tracking. | ||
| 105 | diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv | ||
| 106 | index 1a4ab8e3361..e0d2b2fe04a 100644 | ||
| 107 | --- a/gdb/gdbserver/configure.srv | ||
| 108 | +++ b/gdb/gdbserver/configure.srv | ||
| 109 | @@ -184,6 +184,14 @@ case "${target}" in | ||
| 110 | srv_linux_usrregs=yes | ||
| 111 | srv_linux_thread_db=yes | ||
| 112 | ;; | ||
| 113 | + microblaze*-*-linux*) srv_regobj="microblaze-linux.o" | ||
| 114 | + srv_tgtobj="linux-low.o linux-osdata.o linux-microblaze-low.o " | ||
| 115 | + srv_tgtobj="${srv_tgtobj} linux-procfs.o linux-ptrace.o" | ||
| 116 | + srv_xmlfiles="microblaze-linux.xml" | ||
| 117 | + srv_linux_regsets=yes | ||
| 118 | + srv_linux_usrregs=yes | ||
| 119 | + srv_linux_thread_db=yes | ||
| 120 | + ;; | ||
| 121 | powerpc*-*-linux*) srv_regobj="powerpc-32l.o" | ||
| 122 | srv_regobj="${srv_regobj} powerpc-altivec32l.o" | ||
| 123 | srv_regobj="${srv_regobj} powerpc-vsx32l.o" | ||
| 54 | diff --git a/gdb/gdbserver/linux-microblaze-low.c b/gdb/gdbserver/linux-microblaze-low.c | 124 | diff --git a/gdb/gdbserver/linux-microblaze-low.c b/gdb/gdbserver/linux-microblaze-low.c |
| 55 | new file mode 100644 | 125 | new file mode 100644 |
| 56 | index 0000000000..cba5d6fc58 | 126 | index 00000000000..cba5d6fc585 |
| 57 | --- /dev/null | 127 | --- /dev/null |
| 58 | +++ b/gdb/gdbserver/linux-microblaze-low.c | 128 | +++ b/gdb/gdbserver/linux-microblaze-low.c |
| 59 | @@ -0,0 +1,189 @@ | 129 | @@ -0,0 +1,189 @@ |
| @@ -247,7 +317,7 @@ index 0000000000..cba5d6fc58 | |||
| 247 | + microblaze_supply_ptrace_register, | 317 | + microblaze_supply_ptrace_register, |
| 248 | +}; | 318 | +}; |
| 249 | diff --git a/gdb/microblaze-linux-tdep.c b/gdb/microblaze-linux-tdep.c | 319 | diff --git a/gdb/microblaze-linux-tdep.c b/gdb/microblaze-linux-tdep.c |
| 250 | index 4e5f60cd4e..7ab650a1cc 100644 | 320 | index 3bb9b5682ac..42c219d32f3 100644 |
| 251 | --- a/gdb/microblaze-linux-tdep.c | 321 | --- a/gdb/microblaze-linux-tdep.c |
| 252 | +++ b/gdb/microblaze-linux-tdep.c | 322 | +++ b/gdb/microblaze-linux-tdep.c |
| 253 | @@ -37,6 +37,22 @@ | 323 | @@ -37,6 +37,22 @@ |
| @@ -273,17 +343,14 @@ index 4e5f60cd4e..7ab650a1cc 100644 | |||
| 273 | static int | 343 | static int |
| 274 | microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, | 344 | microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, |
| 275 | struct bp_target_info *bp_tgt) | 345 | struct bp_target_info *bp_tgt) |
| 276 | @@ -46,18 +62,25 @@ microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, | 346 | @@ -50,13 +66,20 @@ microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, |
| 277 | int val; | ||
| 278 | int bplen; | ||
| 279 | gdb_byte old_contents[BREAKPOINT_MAX]; | ||
| 280 | + struct cleanup *cleanup; | ||
| 281 | |||
| 282 | /* Determine appropriate breakpoint contents and size for this address. */ | 347 | /* Determine appropriate breakpoint contents and size for this address. */ |
| 283 | bp = gdbarch_breakpoint_from_pc (gdbarch, &addr, &bplen); | 348 | bp = gdbarch_breakpoint_from_pc (gdbarch, &addr, &bplen); |
| 284 | 349 | ||
| 285 | + /* Make sure we see the memory breakpoints. */ | 350 | + /* Make sure we see the memory breakpoints. */ |
| 286 | + cleanup = make_show_memory_breakpoints_cleanup (1); | 351 | + scoped_restore restore_memory |
| 352 | + = make_scoped_restore_show_memory_breakpoints (1); | ||
| 353 | + | ||
| 287 | val = target_read_memory (addr, old_contents, bplen); | 354 | val = target_read_memory (addr, old_contents, bplen); |
| 288 | 355 | ||
| 289 | /* If our breakpoint is no longer at the address, this means that the | 356 | /* If our breakpoint is no longer at the address, this means that the |
| @@ -296,10 +363,8 @@ index 4e5f60cd4e..7ab650a1cc 100644 | |||
| 296 | + microblaze_debug ("microblaze_linux_memory_remove_breakpoint writing back to memory at addr 0x%lx\n", addr); | 363 | + microblaze_debug ("microblaze_linux_memory_remove_breakpoint writing back to memory at addr 0x%lx\n", addr); |
| 297 | + } | 364 | + } |
| 298 | 365 | ||
| 299 | + do_cleanups (cleanup); | ||
| 300 | return val; | 366 | return val; |
| 301 | } | 367 | } |
| 302 | |||
| 303 | @@ -129,6 +152,10 @@ microblaze_linux_init_abi (struct gdbarch_info info, | 368 | @@ -129,6 +152,10 @@ microblaze_linux_init_abi (struct gdbarch_info info, |
| 304 | /* Trampolines. */ | 369 | /* Trampolines. */ |
| 305 | tramp_frame_prepend_unwinder (gdbarch, | 370 | tramp_frame_prepend_unwinder (gdbarch, |
| @@ -312,7 +377,7 @@ index 4e5f60cd4e..7ab650a1cc 100644 | |||
| 312 | 377 | ||
| 313 | void | 378 | void |
| 314 | diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c | 379 | diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c |
| 315 | index 1248acbdc9..730a2b281f 100644 | 380 | index 17871229c80..0168e4881ed 100644 |
| 316 | --- a/gdb/microblaze-tdep.c | 381 | --- a/gdb/microblaze-tdep.c |
| 317 | +++ b/gdb/microblaze-tdep.c | 382 | +++ b/gdb/microblaze-tdep.c |
| 318 | @@ -137,7 +137,38 @@ microblaze_fetch_instruction (CORE_ADDR pc) | 383 | @@ -137,7 +137,38 @@ microblaze_fetch_instruction (CORE_ADDR pc) |
| @@ -329,7 +394,6 @@ index 1248acbdc9..730a2b281f 100644 | |||
| 329 | + int val; | 394 | + int val; |
| 330 | + int bplen; | 395 | + int bplen; |
| 331 | + gdb_byte old_contents[BREAKPOINT_MAX]; | 396 | + gdb_byte old_contents[BREAKPOINT_MAX]; |
| 332 | + struct cleanup *cleanup; | ||
| 333 | + | 397 | + |
| 334 | + /* Determine appropriate breakpoint contents and size for this address. */ | 398 | + /* Determine appropriate breakpoint contents and size for this address. */ |
| 335 | + bp = gdbarch_breakpoint_from_pc (gdbarch, &addr, &bplen); | 399 | + bp = gdbarch_breakpoint_from_pc (gdbarch, &addr, &bplen); |
| @@ -337,7 +401,9 @@ index 1248acbdc9..730a2b281f 100644 | |||
| 337 | + error (_("Software breakpoints not implemented for this target.")); | 401 | + error (_("Software breakpoints not implemented for this target.")); |
| 338 | + | 402 | + |
| 339 | + /* Make sure we see the memory breakpoints. */ | 403 | + /* Make sure we see the memory breakpoints. */ |
| 340 | + cleanup = make_show_memory_breakpoints_cleanup (1); | 404 | + scoped_restore restore_memory |
| 405 | + = make_scoped_restore_show_memory_breakpoints (1); | ||
| 406 | + | ||
| 341 | + val = target_read_memory (addr, old_contents, bplen); | 407 | + val = target_read_memory (addr, old_contents, bplen); |
| 342 | + | 408 | + |
| 343 | + /* If our breakpoint is no longer at the address, this means that the | 409 | + /* If our breakpoint is no longer at the address, this means that the |
| @@ -349,7 +415,6 @@ index 1248acbdc9..730a2b281f 100644 | |||
| 349 | + microblaze_debug ("microblaze_linux_memory_remove_breakpoint writing back to memory at addr 0x%lx\n", addr); | 415 | + microblaze_debug ("microblaze_linux_memory_remove_breakpoint writing back to memory at addr 0x%lx\n", addr); |
| 350 | + } | 416 | + } |
| 351 | + | 417 | + |
| 352 | + do_cleanups (cleanup); | ||
| 353 | + return val; | 418 | + return val; |
| 354 | +} | 419 | +} |
| 355 | 420 | ||
| @@ -370,7 +435,7 @@ index 1248acbdc9..730a2b281f 100644 | |||
| 370 | + | 435 | + |
| 371 | } | 436 | } |
| 372 | diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h | 437 | diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h |
| 373 | index a0048148e4..63aab84ef6 100644 | 438 | index 4fbdf9933f0..db0772643dc 100644 |
| 374 | --- a/gdb/microblaze-tdep.h | 439 | --- a/gdb/microblaze-tdep.h |
| 375 | +++ b/gdb/microblaze-tdep.h | 440 | +++ b/gdb/microblaze-tdep.h |
| 376 | @@ -117,6 +117,8 @@ struct microblaze_frame_cache | 441 | @@ -117,6 +117,8 @@ struct microblaze_frame_cache |
| @@ -385,7 +450,7 @@ index a0048148e4..63aab84ef6 100644 | |||
| 385 | #endif /* microblaze-tdep.h */ | 450 | #endif /* microblaze-tdep.h */ |
| 386 | diff --git a/gdb/regformats/reg-microblaze.dat b/gdb/regformats/reg-microblaze.dat | 451 | diff --git a/gdb/regformats/reg-microblaze.dat b/gdb/regformats/reg-microblaze.dat |
| 387 | new file mode 100644 | 452 | new file mode 100644 |
| 388 | index 0000000000..bd8a438442 | 453 | index 00000000000..bd8a4384424 |
| 389 | --- /dev/null | 454 | --- /dev/null |
| 390 | +++ b/gdb/regformats/reg-microblaze.dat | 455 | +++ b/gdb/regformats/reg-microblaze.dat |
| 391 | @@ -0,0 +1,41 @@ | 456 | @@ -0,0 +1,41 @@ |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0033-Initial-port-of-core-reading-support.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0035-Initial-port-of-core-reading-support.patch index e60893ef..171a0bf4 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0033-Initial-port-of-core-reading-support.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0035-Initial-port-of-core-reading-support.patch | |||
| @@ -1,22 +1,22 @@ | |||
| 1 | From a9d58bc9edc348ed15d62598f2a0d0862aaf4e61 Mon Sep 17 00:00:00 2001 | 1 | From f8cbcd1ef78f6ce9ae8d3382bf2bb0d1e770d201 Mon Sep 17 00:00:00 2001 |
| 2 | From: Mahesh Bodapati <mbodapat@xilinx.com> | 2 | From: Mahesh Bodapati <mbodapat@xilinx.com> |
| 3 | Date: Tue, 24 Jan 2017 14:55:56 +0530 | 3 | Date: Tue, 24 Jan 2017 14:55:56 +0530 |
| 4 | Subject: [PATCH 33/43] Initial port of core reading support Added support for | 4 | Subject: [PATCH 35/40] Initial port of core reading support Added support for |
| 5 | reading notes in linux core dumps Support for reading of PRSTATUS and PSINFO | 5 | reading notes in linux core dumps Support for reading of PRSTATUS and PSINFO |
| 6 | information for rebuilding ".reg" sections of core dumps at run time. | 6 | information for rebuilding ".reg" sections of core dumps at run time. |
| 7 | 7 | ||
| 8 | Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com> | 8 | Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com> |
| 9 | Signed-off-by: Nathan Rossi <nathan.rossi@petalogix.com> | 9 | Signed-off-by: Nathan Rossi <nathan.rossi@petalogix.com> |
| 10 | --- | 10 | --- |
| 11 | bfd/elf32-microblaze.c | 84 ++++++++++++++++++++++++++++++++++ | 11 | bfd/elf32-microblaze.c | 84 +++++++++++++++++++++++++++++++++++++ |
| 12 | gdb/configure.tgt | 2 +- | 12 | gdb/configure.tgt | 2 +- |
| 13 | gdb/microblaze-linux-tdep.c | 57 +++++++++++++++++++++++ | 13 | gdb/microblaze-linux-tdep.c | 17 +++++++- |
| 14 | gdb/microblaze-tdep.c | 90 +++++++++++++++++++++++++++++++++++++ | 14 | gdb/microblaze-tdep.c | 48 +++++++++++++++++++++ |
| 15 | gdb/microblaze-tdep.h | 27 +++++++++++ | 15 | gdb/microblaze-tdep.h | 27 ++++++++++++ |
| 16 | 5 files changed, 259 insertions(+), 1 deletion(-) | 16 | 5 files changed, 176 insertions(+), 2 deletions(-) |
| 17 | 17 | ||
| 18 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c | 18 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c |
| 19 | index 6a795c5069..c280431df6 100644 | 19 | index 04816a4a187..cb7a98d307e 100644 |
| 20 | --- a/bfd/elf32-microblaze.c | 20 | --- a/bfd/elf32-microblaze.c |
| 21 | +++ b/bfd/elf32-microblaze.c | 21 | +++ b/bfd/elf32-microblaze.c |
| 22 | @@ -767,6 +767,87 @@ microblaze_elf_is_local_label_name (bfd *abfd, const char *name) | 22 | @@ -767,6 +767,87 @@ microblaze_elf_is_local_label_name (bfd *abfd, const char *name) |
| @@ -107,7 +107,7 @@ index 6a795c5069..c280431df6 100644 | |||
| 107 | /* ELF linker hash entry. */ | 107 | /* ELF linker hash entry. */ |
| 108 | 108 | ||
| 109 | struct elf32_mb_link_hash_entry | 109 | struct elf32_mb_link_hash_entry |
| 110 | @@ -3672,4 +3753,7 @@ microblaze_elf_add_symbol_hook (bfd *abfd, | 110 | @@ -3673,4 +3754,7 @@ microblaze_elf_add_symbol_hook (bfd *abfd, |
| 111 | #define elf_backend_size_dynamic_sections microblaze_elf_size_dynamic_sections | 111 | #define elf_backend_size_dynamic_sections microblaze_elf_size_dynamic_sections |
| 112 | #define elf_backend_add_symbol_hook microblaze_elf_add_symbol_hook | 112 | #define elf_backend_add_symbol_hook microblaze_elf_add_symbol_hook |
| 113 | 113 | ||
| @@ -116,10 +116,10 @@ index 6a795c5069..c280431df6 100644 | |||
| 116 | + | 116 | + |
| 117 | #include "elf32-target.h" | 117 | #include "elf32-target.h" |
| 118 | diff --git a/gdb/configure.tgt b/gdb/configure.tgt | 118 | diff --git a/gdb/configure.tgt b/gdb/configure.tgt |
| 119 | index 27f122ad04..622bd486b3 100644 | 119 | index caa42be1c01..f0386568460 100644 |
| 120 | --- a/gdb/configure.tgt | 120 | --- a/gdb/configure.tgt |
| 121 | +++ b/gdb/configure.tgt | 121 | +++ b/gdb/configure.tgt |
| 122 | @@ -397,7 +397,7 @@ mep-*-*) | 122 | @@ -400,7 +400,7 @@ mep-*-*) |
| 123 | 123 | ||
| 124 | microblaze*-linux-*|microblaze*-*-linux*) | 124 | microblaze*-linux-*|microblaze*-*-linux*) |
| 125 | # Target: Xilinx MicroBlaze running Linux | 125 | # Target: Xilinx MicroBlaze running Linux |
| @@ -129,65 +129,34 @@ index 27f122ad04..622bd486b3 100644 | |||
| 129 | gdb_sim=../sim/microblaze/libsim.a | 129 | gdb_sim=../sim/microblaze/libsim.a |
| 130 | ;; | 130 | ;; |
| 131 | diff --git a/gdb/microblaze-linux-tdep.c b/gdb/microblaze-linux-tdep.c | 131 | diff --git a/gdb/microblaze-linux-tdep.c b/gdb/microblaze-linux-tdep.c |
| 132 | index 7ab650a1cc..e2225d778a 100644 | 132 | index 42c219d32f3..0afb6efeba3 100644 |
| 133 | --- a/gdb/microblaze-linux-tdep.c | 133 | --- a/gdb/microblaze-linux-tdep.c |
| 134 | +++ b/gdb/microblaze-linux-tdep.c | 134 | +++ b/gdb/microblaze-linux-tdep.c |
| 135 | @@ -135,11 +135,54 @@ static struct tramp_frame microblaze_linux_sighandler_tramp_frame = | 135 | @@ -36,6 +36,7 @@ |
| 136 | #include "frame-unwind.h" | ||
| 137 | #include "tramp-frame.h" | ||
| 138 | #include "linux-tdep.h" | ||
| 139 | +#include "glibc-tdep.h" | ||
| 140 | |||
| 141 | static int microblaze_debug_flag = 0; | ||
| 142 | |||
| 143 | @@ -135,11 +136,14 @@ static struct tramp_frame microblaze_linux_sighandler_tramp_frame = | ||
| 136 | microblaze_linux_sighandler_cache_init | 144 | microblaze_linux_sighandler_cache_init |
| 137 | }; | 145 | }; |
| 138 | 146 | ||
| 139 | +const struct microblaze_gregset microblaze_linux_core_gregset; | 147 | - |
| 140 | + | ||
| 141 | +static void | ||
| 142 | +microblaze_linux_supply_core_gregset (const struct regset *regset, | ||
| 143 | + struct regcache *regcache, | ||
| 144 | + int regnum, const void *gregs, size_t len) | ||
| 145 | +{ | ||
| 146 | + microblaze_supply_gregset (µblaze_linux_core_gregset, regcache, | ||
| 147 | + regnum, gregs); | ||
| 148 | +} | ||
| 149 | + | ||
| 150 | +static void | ||
| 151 | +microblaze_linux_collect_core_gregset (const struct regset *regset, | ||
| 152 | + const struct regcache *regcache, | ||
| 153 | + int regnum, void *gregs, size_t len) | ||
| 154 | +{ | ||
| 155 | + microblaze_collect_gregset (µblaze_linux_core_gregset, regcache, | ||
| 156 | + regnum, gregs); | ||
| 157 | +} | ||
| 158 | + | ||
| 159 | +static void | ||
| 160 | +microblaze_linux_supply_core_fpregset (const struct regset *regset, | ||
| 161 | + struct regcache *regcache, | ||
| 162 | + int regnum, const void *fpregs, size_t len) | ||
| 163 | +{ | ||
| 164 | + /* FIXME. */ | ||
| 165 | + microblaze_supply_fpregset (regcache, regnum, fpregs); | ||
| 166 | +} | ||
| 167 | + | ||
| 168 | +static void | ||
| 169 | +microblaze_linux_collect_core_fpregset (const struct regset *regset, | ||
| 170 | + const struct regcache *regcache, | ||
| 171 | + int regnum, void *fpregs, size_t len) | ||
| 172 | +{ | ||
| 173 | + /* FIXME. */ | ||
| 174 | + microblaze_collect_fpregset (regcache, regnum, fpregs); | ||
| 175 | +} | ||
| 176 | |||
| 177 | static void | 148 | static void |
| 178 | microblaze_linux_init_abi (struct gdbarch_info info, | 149 | microblaze_linux_init_abi (struct gdbarch_info info, |
| 179 | struct gdbarch *gdbarch) | 150 | struct gdbarch *gdbarch) |
| 180 | { | 151 | { |
| 181 | + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); | 152 | + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); |
| 182 | + | 153 | + |
| 183 | + tdep->gregset = regset_alloc (gdbarch, microblaze_linux_supply_core_gregset, | ||
| 184 | + microblaze_linux_collect_core_gregset); | ||
| 185 | + tdep->sizeof_gregset = 200; | 154 | + tdep->sizeof_gregset = 200; |
| 186 | + | 155 | + |
| 187 | linux_init_abi (info, gdbarch); | 156 | linux_init_abi (info, gdbarch); |
| 188 | 157 | ||
| 189 | set_gdbarch_memory_remove_breakpoint (gdbarch, | 158 | set_gdbarch_memory_remove_breakpoint (gdbarch, |
| 190 | @@ -153,6 +196,20 @@ microblaze_linux_init_abi (struct gdbarch_info info, | 159 | @@ -153,6 +157,17 @@ microblaze_linux_init_abi (struct gdbarch_info info, |
| 191 | tramp_frame_prepend_unwinder (gdbarch, | 160 | tramp_frame_prepend_unwinder (gdbarch, |
| 192 | µblaze_linux_sighandler_tramp_frame); | 161 | µblaze_linux_sighandler_tramp_frame); |
| 193 | 162 | ||
| @@ -202,109 +171,50 @@ index 7ab650a1cc..e2225d778a 100644 | |||
| 202 | + set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); | 171 | + set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); |
| 203 | + set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver); | 172 | + set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver); |
| 204 | + | 173 | + |
| 205 | + set_gdbarch_regset_from_core_section (gdbarch, | ||
| 206 | + microblaze_regset_from_core_section); | ||
| 207 | + | ||
| 208 | /* Enable TLS support. */ | 174 | /* Enable TLS support. */ |
| 209 | set_gdbarch_fetch_tls_load_module_address (gdbarch, | 175 | set_gdbarch_fetch_tls_load_module_address (gdbarch, |
| 210 | svr4_fetch_objfile_link_map); | 176 | svr4_fetch_objfile_link_map); |
| 211 | diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c | 177 | diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c |
| 212 | index 730a2b281f..49713ea9b1 100644 | 178 | index 0168e4881ed..98944f38d2a 100644 |
| 213 | --- a/gdb/microblaze-tdep.c | 179 | --- a/gdb/microblaze-tdep.c |
| 214 | +++ b/gdb/microblaze-tdep.c | 180 | +++ b/gdb/microblaze-tdep.c |
| 215 | @@ -137,6 +137,14 @@ microblaze_fetch_instruction (CORE_ADDR pc) | 181 | @@ -677,6 +677,43 @@ microblaze_register_g_packet_guesses (struct gdbarch *gdbarch) |
| 216 | constexpr gdb_byte microblaze_break_insn[] = MICROBLAZE_BREAKPOINT; | ||
| 217 | |||
| 218 | typedef BP_MANIPULATION (microblaze_break_insn) microblaze_breakpoint; | ||
| 219 | +static CORE_ADDR | ||
| 220 | +microblaze_store_arguments (struct regcache *regcache, int nargs, | ||
| 221 | + struct value **args, CORE_ADDR sp, | ||
| 222 | + int struct_return, CORE_ADDR struct_addr) | ||
| 223 | +{ | ||
| 224 | + error (_("store_arguments not implemented")); | ||
| 225 | + return sp; | ||
| 226 | +} | ||
| 227 | static int | ||
| 228 | microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, | ||
| 229 | struct bp_target_info *bp_tgt) | ||
| 230 | @@ -541,6 +549,12 @@ microblaze_frame_base_address (struct frame_info *next_frame, | ||
| 231 | return cache->base; | ||
| 232 | } | ||
| 233 | |||
| 234 | +static const struct frame_unwind * | ||
| 235 | +microblaze_frame_sniffer (struct frame_info *next_frame) | ||
| 236 | +{ | ||
| 237 | + return µblaze_frame_unwind; | ||
| 238 | +} | ||
| 239 | + | ||
| 240 | static const struct frame_base microblaze_frame_base = | ||
| 241 | { | ||
| 242 | µblaze_frame_unwind, | ||
| 243 | @@ -677,6 +691,71 @@ microblaze_register_g_packet_guesses (struct gdbarch *gdbarch) | ||
| 244 | tdesc_microblaze_with_stack_protect); | 182 | tdesc_microblaze_with_stack_protect); |
| 245 | } | 183 | } |
| 246 | 184 | ||
| 247 | +void | 185 | +void |
| 248 | +microblaze_supply_gregset (const struct microblaze_gregset *gregset, | 186 | +microblaze_supply_gregset (const struct regset *regset, |
| 249 | + struct regcache *regcache, | 187 | + struct regcache *regcache, |
| 250 | + int regnum, const void *gregs) | 188 | + int regnum, const void *gregs) |
| 251 | +{ | 189 | +{ |
| 252 | + unsigned int *regs = gregs; | 190 | + const unsigned int *regs = (const unsigned int *)gregs; |
| 253 | + if (regnum >= 0) | 191 | + if (regnum >= 0) |
| 254 | + regcache_raw_supply (regcache, regnum, regs + regnum); | 192 | + regcache->raw_supply (regnum, regs + regnum); |
| 255 | + | 193 | + |
| 256 | + if (regnum == -1) { | 194 | + if (regnum == -1) { |
| 257 | + int i; | 195 | + int i; |
| 258 | + | 196 | + |
| 259 | + for (i = 0; i < 50; i++) { | 197 | + for (i = 0; i < 50; i++) { |
| 260 | + regcache_raw_supply (regcache, i, regs + i); | 198 | + regcache->raw_supply (i, regs + i); |
| 261 | + } | 199 | + } |
| 262 | + } | 200 | + } |
| 263 | +} | 201 | +} |
| 264 | + | 202 | + |
| 265 | + | 203 | + |
| 266 | +void | ||
| 267 | +microblaze_collect_gregset (const struct microblaze_gregset *gregset, | ||
| 268 | + const struct regcache *regcache, | ||
| 269 | + int regnum, void *gregs) | ||
| 270 | +{ | ||
| 271 | + /* FIXME. */ | ||
| 272 | +} | ||
| 273 | + | ||
| 274 | +void | ||
| 275 | +microblaze_supply_fpregset (struct regcache *regcache, | ||
| 276 | + int regnum, const void *fpregs) | ||
| 277 | +{ | ||
| 278 | + /* FIXME. */ | ||
| 279 | +} | ||
| 280 | + | ||
| 281 | +void | ||
| 282 | +microblaze_collect_fpregset (const struct regcache *regcache, | ||
| 283 | + int regnum, void *fpregs) | ||
| 284 | +{ | ||
| 285 | + /* FIXME. */ | ||
| 286 | +} | ||
| 287 | + | ||
| 288 | + | ||
| 289 | +/* Return the appropriate register set for the core section identified | 204 | +/* Return the appropriate register set for the core section identified |
| 290 | + by SECT_NAME and SECT_SIZE. */ | 205 | + by SECT_NAME and SECT_SIZE. */ |
| 291 | + | 206 | + |
| 292 | +const struct regset * | 207 | +static void |
| 293 | +microblaze_regset_from_core_section (struct gdbarch *gdbarch, | 208 | +microblaze_iterate_over_regset_sections (struct gdbarch *gdbarch, |
| 294 | + const char *sect_name, size_t sect_size) | 209 | + iterate_over_regset_sections_cb *cb, |
| 210 | + void *cb_data, | ||
| 211 | + const struct regcache *regcache) | ||
| 295 | +{ | 212 | +{ |
| 296 | + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); | 213 | + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); |
| 297 | + | 214 | + |
| 298 | + microblaze_debug ("microblaze_regset_from_core_section, sect_name = %s\n", sect_name); | 215 | + cb(".reg", tdep->sizeof_gregset, tdep->sizeof_gregset, tdep->gregset, NULL, cb_data); |
| 299 | + | ||
| 300 | + if (strcmp (sect_name, ".reg") == 0 && sect_size >= tdep->sizeof_gregset) | ||
| 301 | + return tdep->gregset; | ||
| 302 | + | ||
| 303 | + if (strcmp (sect_name, ".reg2") == 0 && sect_size >= tdep->sizeof_fpregset) | ||
| 304 | + return tdep->fpregset; | ||
| 305 | + | 216 | + |
| 306 | + microblaze_debug ("microblaze_regset_from_core_section returning null :-( \n"); | 217 | + cb(".reg2", tdep->sizeof_fpregset, tdep->sizeof_fpregset, tdep->fpregset, NULL, cb_data); |
| 307 | + return NULL; | ||
| 308 | +} | 218 | +} |
| 309 | + | 219 | + |
| 310 | + | 220 | + |
| @@ -312,7 +222,7 @@ index 730a2b281f..49713ea9b1 100644 | |||
| 312 | static struct gdbarch * | 222 | static struct gdbarch * |
| 313 | microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) | 223 | microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) |
| 314 | { | 224 | { |
| 315 | @@ -733,6 +812,10 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) | 225 | @@ -733,6 +770,10 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) |
| 316 | tdep = XCNEW (struct gdbarch_tdep); | 226 | tdep = XCNEW (struct gdbarch_tdep); |
| 317 | gdbarch = gdbarch_alloc (&info, tdep); | 227 | gdbarch = gdbarch_alloc (&info, tdep); |
| 318 | 228 | ||
| @@ -323,7 +233,7 @@ index 730a2b281f..49713ea9b1 100644 | |||
| 323 | set_gdbarch_long_double_bit (gdbarch, 128); | 233 | set_gdbarch_long_double_bit (gdbarch, 128); |
| 324 | 234 | ||
| 325 | set_gdbarch_num_regs (gdbarch, MICROBLAZE_NUM_REGS); | 235 | set_gdbarch_num_regs (gdbarch, MICROBLAZE_NUM_REGS); |
| 326 | @@ -781,6 +864,13 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) | 236 | @@ -781,6 +822,13 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) |
| 327 | frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer); | 237 | frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer); |
| 328 | if (tdesc_data != NULL) | 238 | if (tdesc_data != NULL) |
| 329 | tdesc_use_registers (gdbarch, tdesc, tdesc_data); | 239 | tdesc_use_registers (gdbarch, tdesc, tdesc_data); |
| @@ -331,14 +241,14 @@ index 730a2b281f..49713ea9b1 100644 | |||
| 331 | + | 241 | + |
| 332 | + /* If we have register sets, enable the generic core file support. */ | 242 | + /* If we have register sets, enable the generic core file support. */ |
| 333 | + if (tdep->gregset) { | 243 | + if (tdep->gregset) { |
| 334 | + set_gdbarch_regset_from_core_section (gdbarch, | 244 | + set_gdbarch_iterate_over_regset_sections (gdbarch, |
| 335 | + microblaze_regset_from_core_section); | 245 | + microblaze_iterate_over_regset_sections); |
| 336 | + } | 246 | + } |
| 337 | 247 | ||
| 338 | return gdbarch; | 248 | return gdbarch; |
| 339 | } | 249 | } |
| 340 | diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h | 250 | diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h |
| 341 | index 63aab84ef6..02650f61d9 100644 | 251 | index db0772643dc..8f41ba19351 100644 |
| 342 | --- a/gdb/microblaze-tdep.h | 252 | --- a/gdb/microblaze-tdep.h |
| 343 | +++ b/gdb/microblaze-tdep.h | 253 | +++ b/gdb/microblaze-tdep.h |
| 344 | @@ -22,8 +22,22 @@ | 254 | @@ -22,8 +22,22 @@ |
| @@ -368,10 +278,10 @@ index 63aab84ef6..02650f61d9 100644 | |||
| 368 | #define MICROBLAZE_BREAKPOINT {0xba, 0x0c, 0x00, 0x18} | 278 | #define MICROBLAZE_BREAKPOINT {0xba, 0x0c, 0x00, 0x18} |
| 369 | #define MICROBLAZE_BREAKPOINT_LE {0x18, 0x00, 0x0c, 0xba} | 279 | #define MICROBLAZE_BREAKPOINT_LE {0x18, 0x00, 0x0c, 0xba} |
| 370 | 280 | ||
| 371 | +extern void microblaze_supply_gregset (const struct microblaze_gregset *gregset, | 281 | +extern void microblaze_supply_gregset (const struct regset *regset, |
| 372 | + struct regcache *regcache, | 282 | + struct regcache *regcache, |
| 373 | + int regnum, const void *gregs); | 283 | + int regnum, const void *gregs); |
| 374 | +extern void microblaze_collect_gregset (const struct microblaze_gregset *gregset, | 284 | +extern void microblaze_collect_gregset (const struct regset *regset, |
| 375 | + const struct regcache *regcache, | 285 | + const struct regcache *regcache, |
| 376 | + int regnum, void *gregs); | 286 | + int regnum, void *gregs); |
| 377 | +extern void microblaze_supply_fpregset (struct regcache *regcache, | 287 | +extern void microblaze_supply_fpregset (struct regcache *regcache, |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0035-revert-master-rebase-changes-to-gdbserver.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0035-revert-master-rebase-changes-to-gdbserver.patch deleted file mode 100644 index 0fe5c082..00000000 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0035-revert-master-rebase-changes-to-gdbserver.patch +++ /dev/null | |||
| @@ -1,31 +0,0 @@ | |||
| 1 | From 6f2d2fd5a214126e2c81dfb0dada3001ba353419 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: David Holsgrove <david.holsgrove@xilinx.com> | ||
| 3 | Date: Mon, 22 Jul 2013 11:16:05 +1000 | ||
| 4 | Subject: [PATCH 35/43] revert master-rebase changes to gdbserver | ||
| 5 | |||
| 6 | Signed-off-by: David Holsgrove <david.holsgrove@xilinx.com> | ||
| 7 | --- | ||
| 8 | gdb/gdbserver/configure.srv | 7 +++++++ | ||
| 9 | 1 file changed, 7 insertions(+) | ||
| 10 | |||
| 11 | diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv | ||
| 12 | index bec72e2b19..153dcb4c71 100644 | ||
| 13 | --- a/gdb/gdbserver/configure.srv | ||
| 14 | +++ b/gdb/gdbserver/configure.srv | ||
| 15 | @@ -210,6 +210,13 @@ case "${target}" in | ||
| 16 | srv_linux_usrregs=yes | ||
| 17 | srv_linux_thread_db=yes | ||
| 18 | ;; | ||
| 19 | + microblaze*-*-linux*) srv_regobj=microblaze-linux.o | ||
| 20 | + srv_tgtobj="linux-low.o linux-osdata.o linux-microblaze-low.o " | ||
| 21 | + srv_tgtobj="${srv_tgtobj} linux-procfs.o linux-ptrace.o" | ||
| 22 | + srv_linux_regsets=yes | ||
| 23 | + srv_linux_usrregs=yes | ||
| 24 | + srv_linux_thread_db=yes | ||
| 25 | + ;; | ||
| 26 | powerpc*-*-linux*) srv_regobj="powerpc-32l.o" | ||
| 27 | srv_regobj="${srv_regobj} powerpc-altivec32l.o" | ||
| 28 | srv_regobj="${srv_regobj} powerpc-cell32l.o" | ||
| 29 | -- | ||
| 30 | 2.17.1 | ||
| 31 | |||
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0034-Fix-debug-message-when-register-is-unavailable.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0036-Fix-debug-message-when-register-is-unavailable.patch index f0ec43b1..f0c182d3 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0034-Fix-debug-message-when-register-is-unavailable.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0036-Fix-debug-message-when-register-is-unavailable.patch | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | From 9e42c672613131b25da90e58aefd2d39e497c3f6 Mon Sep 17 00:00:00 2001 | 1 | From 41fd9d3645d610ff65171e9a44427711232cb4b8 Mon Sep 17 00:00:00 2001 |
| 2 | From: Nathan Rossi <nathan.rossi@petalogix.com> | 2 | From: Nathan Rossi <nathan.rossi@petalogix.com> |
| 3 | Date: Tue, 8 May 2012 18:11:17 +1000 | 3 | Date: Tue, 8 May 2012 18:11:17 +1000 |
| 4 | Subject: [PATCH 34/43] Fix debug message when register is unavailable | 4 | Subject: [PATCH 36/40] Fix debug message when register is unavailable |
| 5 | 5 | ||
| 6 | Signed-off-by: Nathan Rossi <nathan.rossi@petalogix.com> | 6 | Signed-off-by: Nathan Rossi <nathan.rossi@petalogix.com> |
| 7 | --- | 7 | --- |
| @@ -9,10 +9,10 @@ Signed-off-by: Nathan Rossi <nathan.rossi@petalogix.com> | |||
| 9 | 1 file changed, 10 insertions(+), 3 deletions(-) | 9 | 1 file changed, 10 insertions(+), 3 deletions(-) |
| 10 | 10 | ||
| 11 | diff --git a/gdb/frame.c b/gdb/frame.c | 11 | diff --git a/gdb/frame.c b/gdb/frame.c |
| 12 | index d8b5f819f1..49706dc97c 100644 | 12 | index c746a6a231e..571722c7351 100644 |
| 13 | --- a/gdb/frame.c | 13 | --- a/gdb/frame.c |
| 14 | +++ b/gdb/frame.c | 14 | +++ b/gdb/frame.c |
| 15 | @@ -1227,12 +1227,19 @@ frame_unwind_register_value (frame_info *next_frame, int regnum) | 15 | @@ -1255,12 +1255,19 @@ frame_unwind_register_value (frame_info *next_frame, int regnum) |
| 16 | else | 16 | else |
| 17 | { | 17 | { |
| 18 | int i; | 18 | int i; |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0036-revert-master-rebase-changes-to-gdbserver-previous-c.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0036-revert-master-rebase-changes-to-gdbserver-previous-c.patch deleted file mode 100644 index 111d8059..00000000 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0036-revert-master-rebase-changes-to-gdbserver-previous-c.patch +++ /dev/null | |||
| @@ -1,33 +0,0 @@ | |||
| 1 | From a21f56098eb41e20ba2e6995e6dc72acdea045a0 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mahesh Bodapati <mbodapat@xilinx.com> | ||
| 3 | Date: Mon, 30 Apr 2018 17:09:55 +0530 | ||
| 4 | Subject: [PATCH 36/43] revert master-rebase changes to gdbserver , previous | ||
| 5 | commit typo's | ||
| 6 | |||
| 7 | --- | ||
| 8 | gdb/gdbserver/Makefile.in | 2 ++ | ||
| 9 | 1 file changed, 2 insertions(+) | ||
| 10 | |||
| 11 | diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in | ||
| 12 | index f5fc55034e..73ca5fd7c5 100644 | ||
| 13 | --- a/gdb/gdbserver/Makefile.in | ||
| 14 | +++ b/gdb/gdbserver/Makefile.in | ||
| 15 | @@ -169,6 +169,7 @@ SFILES = \ | ||
| 16 | $(srcdir)/linux-low.c \ | ||
| 17 | $(srcdir)/linux-m32r-low.c \ | ||
| 18 | $(srcdir)/linux-m68k-low.c \ | ||
| 19 | + $(srcdir)/linux-microblaze-low.c \ | ||
| 20 | $(srcdir)/linux-mips-low.c \ | ||
| 21 | $(srcdir)/linux-nios2-low.c \ | ||
| 22 | $(srcdir)/linux-ppc-low.c \ | ||
| 23 | @@ -226,6 +227,7 @@ SFILES = \ | ||
| 24 | $(srcdir)/nat/linux-osdata.c \ | ||
| 25 | $(srcdir)/nat/linux-personality.c \ | ||
| 26 | $(srcdir)/nat/mips-linux-watch.c \ | ||
| 27 | + $(srcdir)/nat/microblaze-linux.c \ | ||
| 28 | $(srcdir)/nat/ppc-linux.c \ | ||
| 29 | $(srcdir)/nat/fork-inferior.c \ | ||
| 30 | $(srcdir)/target/waitstatus.c | ||
| 31 | -- | ||
| 32 | 2.17.1 | ||
| 33 | |||
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0037-microblaze-Add-build_gdbserver-yes-to-top-level-conf.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0037-microblaze-Add-build_gdbserver-yes-to-top-level-conf.patch index 16b891bd..1e0bffbe 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0037-microblaze-Add-build_gdbserver-yes-to-top-level-conf.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0037-microblaze-Add-build_gdbserver-yes-to-top-level-conf.patch | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | From 62bda7ae7bf0880201c4872c54e5b530b2fec27b Mon Sep 17 00:00:00 2001 | 1 | From 7b22823ae82445f52384e6c0bd85431294868eb7 Mon Sep 17 00:00:00 2001 |
| 2 | From: David Holsgrove <david.holsgrove@xilinx.com> | 2 | From: David Holsgrove <david.holsgrove@xilinx.com> |
| 3 | Date: Mon, 16 Dec 2013 16:37:32 +1000 | 3 | Date: Mon, 16 Dec 2013 16:37:32 +1000 |
| 4 | Subject: [PATCH 37/43] microblaze: Add build_gdbserver=yes to top level | 4 | Subject: [PATCH 37/40] microblaze: Add build_gdbserver=yes to top level |
| 5 | configure.tgt | 5 | configure.tgt |
| 6 | 6 | ||
| 7 | For Microblaze linux toolchains, set the build_gdbserver=yes | 7 | For Microblaze linux toolchains, set the build_gdbserver=yes |
| @@ -16,10 +16,10 @@ Signed-off-by: David Holsgrove <david.holsgrove@xilinx.com> | |||
| 16 | 1 file changed, 1 insertion(+) | 16 | 1 file changed, 1 insertion(+) |
| 17 | 17 | ||
| 18 | diff --git a/gdb/configure.tgt b/gdb/configure.tgt | 18 | diff --git a/gdb/configure.tgt b/gdb/configure.tgt |
| 19 | index 622bd486b3..989523735b 100644 | 19 | index f0386568460..ae238c17cd5 100644 |
| 20 | --- a/gdb/configure.tgt | 20 | --- a/gdb/configure.tgt |
| 21 | +++ b/gdb/configure.tgt | 21 | +++ b/gdb/configure.tgt |
| 22 | @@ -405,6 +405,7 @@ microblaze*-*-*) | 22 | @@ -408,6 +408,7 @@ microblaze*-*-*) |
| 23 | # Target: Xilinx MicroBlaze running standalone | 23 | # Target: Xilinx MicroBlaze running standalone |
| 24 | gdb_target_obs="microblaze-tdep.o" | 24 | gdb_target_obs="microblaze-tdep.o" |
| 25 | gdb_sim=../sim/microblaze/libsim.a | 25 | gdb_sim=../sim/microblaze/libsim.a |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0038-Initial-support-for-native-gdb.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0038-Initial-support-for-native-gdb.patch index ca37355c..afde3ce8 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0038-Initial-support-for-native-gdb.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0038-Initial-support-for-native-gdb.patch | |||
| @@ -1,62 +1,43 @@ | |||
| 1 | From fef2dfc9c55d19be25262175a4fa4921167a30b7 Mon Sep 17 00:00:00 2001 | 1 | From a06b9c4860af1f8f18ccb7c0653c76c623636034 Mon Sep 17 00:00:00 2001 |
| 2 | From: David Holsgrove <david.holsgrove@petalogix.com> | 2 | From: David Holsgrove <david.holsgrove@petalogix.com> |
| 3 | Date: Fri, 20 Jul 2012 15:18:35 +1000 | 3 | Date: Fri, 20 Jul 2012 15:18:35 +1000 |
| 4 | Subject: [PATCH 38/43] Initial support for native gdb | 4 | Subject: [PATCH 38/40] Initial support for native gdb |
| 5 | 5 | ||
| 6 | microblaze: Follow PPC method of getting setting registers | 6 | microblaze: Follow PPC method of getting setting registers |
| 7 | using PTRACE PEEK/POKE | 7 | using PTRACE PEEK/POKE |
| 8 | 8 | ||
| 9 | Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com> | 9 | Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com> |
| 10 | |||
| 11 | Conflicts: | ||
| 12 | gdb/Makefile.in | ||
| 13 | --- | 10 | --- |
| 14 | gdb/Makefile.in | 4 +- | 11 | gdb/Makefile.in | 2 + |
| 15 | gdb/config/microblaze/linux.mh | 9 + | 12 | gdb/config/microblaze/linux.mh | 9 + |
| 16 | gdb/microblaze-linux-nat.c | 431 +++++++++++++++++++++++++++++++++ | 13 | gdb/microblaze-linux-nat.c | 431 +++++++++++++++++++++++++++++++++ |
| 17 | 3 files changed, 443 insertions(+), 1 deletion(-) | 14 | 3 files changed, 442 insertions(+) |
| 18 | create mode 100644 gdb/config/microblaze/linux.mh | 15 | create mode 100644 gdb/config/microblaze/linux.mh |
| 19 | create mode 100644 gdb/microblaze-linux-nat.c | 16 | create mode 100644 gdb/microblaze-linux-nat.c |
| 20 | 17 | ||
| 21 | diff --git a/gdb/Makefile.in b/gdb/Makefile.in | 18 | diff --git a/gdb/Makefile.in b/gdb/Makefile.in |
| 22 | index 5614cc3386..d620580498 100644 | 19 | index c3e074b21fe..cbcd8f43326 100644 |
| 23 | --- a/gdb/Makefile.in | 20 | --- a/gdb/Makefile.in |
| 24 | +++ b/gdb/Makefile.in | 21 | +++ b/gdb/Makefile.in |
| 25 | @@ -1316,6 +1316,7 @@ HFILES_NO_SRCDIR = \ | 22 | @@ -1337,6 +1337,7 @@ HFILES_NO_SRCDIR = \ |
| 26 | memory-map.h \ | 23 | memory-map.h \ |
| 27 | memrange.h \ | 24 | memrange.h \ |
| 28 | microblaze-tdep.h \ | 25 | microblaze-tdep.h \ |
| 29 | + microblaze-linux-tdep.h \ | 26 | + microblaze-linux-tdep.h \ |
| 30 | mips-linux-tdep.h \ | 27 | mips-linux-tdep.h \ |
| 31 | mips-nbsd-tdep.h \ | 28 | mips-nbsd-tdep.h \ |
| 32 | mips-tdep.h \ | 29 | mips-tdep.h \ |
| 33 | @@ -1349,6 +1350,7 @@ HFILES_NO_SRCDIR = \ | 30 | @@ -2261,6 +2262,7 @@ ALLDEPFILES = \ |
| 34 | prologue-value.h \ | ||
| 35 | psympriv.h \ | ||
| 36 | psymtab.h \ | ||
| 37 | + ia64-hpux-tdep.h \ | ||
| 38 | ravenscar-thread.h \ | ||
| 39 | record.h \ | ||
| 40 | record-full.h \ | ||
| 41 | @@ -2263,6 +2265,7 @@ ALLDEPFILES = \ | ||
| 42 | m68k-tdep.c \ | 31 | m68k-tdep.c \ |
| 43 | microblaze-linux-tdep.c \ | 32 | microblaze-linux-tdep.c \ |
| 44 | microblaze-tdep.c \ | 33 | microblaze-tdep.c \ |
| 45 | + microblaze-linux-nat.c \ | 34 | + microblaze-linux-nat.c \ |
| 46 | mingw-hdep.c \ | 35 | mingw-hdep.c \ |
| 47 | mips-fbsd-nat.c \ | 36 | mips-fbsd-nat.c \ |
| 48 | mips-fbsd-tdep.c \ | 37 | mips-fbsd-tdep.c \ |
| 49 | @@ -2365,7 +2368,6 @@ ALLDEPFILES = \ | ||
| 50 | xtensa-linux-tdep.c \ | ||
| 51 | xtensa-tdep.c \ | ||
| 52 | xtensa-xtregs.c \ | ||
| 53 | - common/mingw-strerror.c \ | ||
| 54 | common/posix-strerror.c | ||
| 55 | |||
| 56 | # Some files need explicit build rules (due to -Werror problems) or due | ||
| 57 | diff --git a/gdb/config/microblaze/linux.mh b/gdb/config/microblaze/linux.mh | 38 | diff --git a/gdb/config/microblaze/linux.mh b/gdb/config/microblaze/linux.mh |
| 58 | new file mode 100644 | 39 | new file mode 100644 |
| 59 | index 0000000000..a4eaf540e1 | 40 | index 00000000000..a4eaf540e1d |
| 60 | --- /dev/null | 41 | --- /dev/null |
| 61 | +++ b/gdb/config/microblaze/linux.mh | 42 | +++ b/gdb/config/microblaze/linux.mh |
| 62 | @@ -0,0 +1,9 @@ | 43 | @@ -0,0 +1,9 @@ |
| @@ -71,7 +52,7 @@ index 0000000000..a4eaf540e1 | |||
| 71 | +LOADLIBES = -ldl $(RDYNAMIC) | 52 | +LOADLIBES = -ldl $(RDYNAMIC) |
| 72 | diff --git a/gdb/microblaze-linux-nat.c b/gdb/microblaze-linux-nat.c | 53 | diff --git a/gdb/microblaze-linux-nat.c b/gdb/microblaze-linux-nat.c |
| 73 | new file mode 100644 | 54 | new file mode 100644 |
| 74 | index 0000000000..e9b8c9c522 | 55 | index 00000000000..e9b8c9c5221 |
| 75 | --- /dev/null | 56 | --- /dev/null |
| 76 | +++ b/gdb/microblaze-linux-nat.c | 57 | +++ b/gdb/microblaze-linux-nat.c |
| 77 | @@ -0,0 +1,431 @@ | 58 | @@ -0,0 +1,431 @@ |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0039-Fixing-the-issues-related-to-GDB-7.12.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0039-Fixing-the-issues-related-to-GDB-7.12.patch index b8fb68bc..fb4b35e5 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0039-Fixing-the-issues-related-to-GDB-7.12.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0039-Fixing-the-issues-related-to-GDB-7.12.patch | |||
| @@ -1,20 +1,19 @@ | |||
| 1 | From e3e7d58035fb75b6cf33689352c6e22309c6dbde Mon Sep 17 00:00:00 2001 | 1 | From f13ffe15c10e5d4b5c87761ae9735144d4c8da17 Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Fri, 17 Feb 2017 14:09:40 +0530 | 3 | Date: Fri, 17 Feb 2017 14:09:40 +0530 |
| 4 | Subject: [PATCH 39/43] Fixing the issues related to GDB-7.12 added all the | 4 | Subject: [PATCH 39/40] Fixing the issues related to GDB-7.12 |
| 5 | required function which are new in 7.12 and removed few deprecated functions | ||
| 6 | from 7.6 | ||
| 7 | 5 | ||
| 6 | added all the required function which are new in 7.12 and removed | ||
| 7 | few deprecated functions from 7.6 | ||
| 8 | --- | 8 | --- |
| 9 | gdb/config/microblaze/linux.mh | 4 +- | 9 | gdb/config/microblaze/linux.mh | 4 +- |
| 10 | gdb/gdbserver/configure.srv | 3 +- | 10 | gdb/gdbserver/configure.srv | 3 +- |
| 11 | gdb/gdbserver/linux-microblaze-low.c | 97 ++++++++++++++++++++++++---- | 11 | gdb/gdbserver/linux-microblaze-low.c | 97 ++++++++++++++++++++++++---- |
| 12 | gdb/microblaze-linux-tdep.c | 68 +++++++++++++++++-- | ||
| 13 | gdb/microblaze-tdep.h | 1 + | 12 | gdb/microblaze-tdep.h | 1 + |
| 14 | 5 files changed, 153 insertions(+), 20 deletions(-) | 13 | 4 files changed, 89 insertions(+), 16 deletions(-) |
| 15 | 14 | ||
| 16 | diff --git a/gdb/config/microblaze/linux.mh b/gdb/config/microblaze/linux.mh | 15 | diff --git a/gdb/config/microblaze/linux.mh b/gdb/config/microblaze/linux.mh |
| 17 | index a4eaf540e1..74a53b854a 100644 | 16 | index a4eaf540e1d..74a53b854a4 100644 |
| 18 | --- a/gdb/config/microblaze/linux.mh | 17 | --- a/gdb/config/microblaze/linux.mh |
| 19 | +++ b/gdb/config/microblaze/linux.mh | 18 | +++ b/gdb/config/microblaze/linux.mh |
| 20 | @@ -1,9 +1,11 @@ | 19 | @@ -1,9 +1,11 @@ |
| @@ -31,21 +30,21 @@ index a4eaf540e1..74a53b854a 100644 | |||
| 31 | 30 | ||
| 32 | LOADLIBES = -ldl $(RDYNAMIC) | 31 | LOADLIBES = -ldl $(RDYNAMIC) |
| 33 | diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv | 32 | diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv |
| 34 | index 153dcb4c71..201b7ae190 100644 | 33 | index e0d2b2fe04a..26db2dd2461 100644 |
| 35 | --- a/gdb/gdbserver/configure.srv | 34 | --- a/gdb/gdbserver/configure.srv |
| 36 | +++ b/gdb/gdbserver/configure.srv | 35 | +++ b/gdb/gdbserver/configure.srv |
| 37 | @@ -211,8 +211,7 @@ case "${target}" in | 36 | @@ -185,8 +185,7 @@ case "${target}" in |
| 38 | srv_linux_thread_db=yes | 37 | srv_linux_thread_db=yes |
| 39 | ;; | 38 | ;; |
| 40 | microblaze*-*-linux*) srv_regobj=microblaze-linux.o | 39 | microblaze*-*-linux*) srv_regobj="microblaze-linux.o" |
| 41 | - srv_tgtobj="linux-low.o linux-osdata.o linux-microblaze-low.o " | 40 | - srv_tgtobj="linux-low.o linux-osdata.o linux-microblaze-low.o " |
| 42 | - srv_tgtobj="${srv_tgtobj} linux-procfs.o linux-ptrace.o" | 41 | - srv_tgtobj="${srv_tgtobj} linux-procfs.o linux-ptrace.o" |
| 43 | + srv_tgtobj="$srv_linux_obj linux-microblaze-low.o " | 42 | + srv_tgtobj="$srv_linux_obj linux-microblaze-low.o " |
| 43 | srv_xmlfiles="microblaze-linux.xml" | ||
| 44 | srv_linux_regsets=yes | 44 | srv_linux_regsets=yes |
| 45 | srv_linux_usrregs=yes | 45 | srv_linux_usrregs=yes |
| 46 | srv_linux_thread_db=yes | ||
| 47 | diff --git a/gdb/gdbserver/linux-microblaze-low.c b/gdb/gdbserver/linux-microblaze-low.c | 46 | diff --git a/gdb/gdbserver/linux-microblaze-low.c b/gdb/gdbserver/linux-microblaze-low.c |
| 48 | index cba5d6fc58..a2733f3c21 100644 | 47 | index cba5d6fc585..a2733f3c21c 100644 |
| 49 | --- a/gdb/gdbserver/linux-microblaze-low.c | 48 | --- a/gdb/gdbserver/linux-microblaze-low.c |
| 50 | +++ b/gdb/gdbserver/linux-microblaze-low.c | 49 | +++ b/gdb/gdbserver/linux-microblaze-low.c |
| 51 | @@ -39,10 +39,11 @@ static int microblaze_regmap[] = | 50 | @@ -39,10 +39,11 @@ static int microblaze_regmap[] = |
| @@ -200,100 +199,8 @@ index cba5d6fc58..a2733f3c21 100644 | |||
| 200 | +{ | 199 | +{ |
| 201 | + init_registers_microblaze (); | 200 | + init_registers_microblaze (); |
| 202 | +} | 201 | +} |
| 203 | diff --git a/gdb/microblaze-linux-tdep.c b/gdb/microblaze-linux-tdep.c | ||
| 204 | index e2225d778a..011e513941 100644 | ||
| 205 | --- a/gdb/microblaze-linux-tdep.c | ||
| 206 | +++ b/gdb/microblaze-linux-tdep.c | ||
| 207 | @@ -29,13 +29,76 @@ | ||
| 208 | #include "regcache.h" | ||
| 209 | #include "value.h" | ||
| 210 | #include "osabi.h" | ||
| 211 | -#include "regset.h" | ||
| 212 | #include "solib-svr4.h" | ||
| 213 | #include "microblaze-tdep.h" | ||
| 214 | #include "trad-frame.h" | ||
| 215 | #include "frame-unwind.h" | ||
| 216 | #include "tramp-frame.h" | ||
| 217 | #include "linux-tdep.h" | ||
| 218 | +#include "glibc-tdep.h" | ||
| 219 | + | ||
| 220 | +#include "gdb_assert.h" | ||
| 221 | + | ||
| 222 | +#ifndef REGSET_H | ||
| 223 | +#define REGSET_H 1 | ||
| 224 | + | ||
| 225 | +struct gdbarch; | ||
| 226 | +struct regcache; | ||
| 227 | + | ||
| 228 | +/* Data structure for the supported register notes in a core file. */ | ||
| 229 | +struct core_regset_section | ||
| 230 | +{ | ||
| 231 | + const char *sect_name; | ||
| 232 | + int size; | ||
| 233 | + const char *human_name; | ||
| 234 | +}; | ||
| 235 | + | ||
| 236 | +/* Data structure describing a register set. */ | ||
| 237 | + | ||
| 238 | +typedef void (supply_regset_ftype) (const struct regset *, struct regcache *, | ||
| 239 | + int, const void *, size_t); | ||
| 240 | +typedef void (collect_regset_ftype) (const struct regset *, | ||
| 241 | + const struct regcache *, | ||
| 242 | + int, void *, size_t); | ||
| 243 | + | ||
| 244 | +struct regset | ||
| 245 | +{ | ||
| 246 | + /* Data pointer for private use by the methods below, presumably | ||
| 247 | + providing some sort of description of the register set. */ | ||
| 248 | + const void *descr; | ||
| 249 | + | ||
| 250 | + /* Function supplying values in a register set to a register cache. */ | ||
| 251 | + supply_regset_ftype *supply_regset; | ||
| 252 | + | ||
| 253 | + /* Function collecting values in a register set from a register cache. */ | ||
| 254 | + collect_regset_ftype *collect_regset; | ||
| 255 | + | ||
| 256 | + /* Architecture associated with the register set. */ | ||
| 257 | + struct gdbarch *arch; | ||
| 258 | +}; | ||
| 259 | + | ||
| 260 | +#endif | ||
| 261 | + | ||
| 262 | +/* Allocate a fresh 'struct regset' whose supply_regset function is | ||
| 263 | + SUPPLY_REGSET, and whose collect_regset function is COLLECT_REGSET. | ||
| 264 | + If the regset has no collect_regset function, pass NULL for | ||
| 265 | + COLLECT_REGSET. | ||
| 266 | + | ||
| 267 | + The object returned is allocated on ARCH's obstack. */ | ||
| 268 | + | ||
| 269 | +struct regset * | ||
| 270 | +regset_alloc (struct gdbarch *arch, | ||
| 271 | + supply_regset_ftype *supply_regset, | ||
| 272 | + collect_regset_ftype *collect_regset) | ||
| 273 | +{ | ||
| 274 | + struct regset *regset = GDBARCH_OBSTACK_ZALLOC (arch, struct regset); | ||
| 275 | + | ||
| 276 | + regset->arch = arch; | ||
| 277 | + regset->supply_regset = supply_regset; | ||
| 278 | + regset->collect_regset = collect_regset; | ||
| 279 | + | ||
| 280 | + return regset; | ||
| 281 | +} | ||
| 282 | |||
| 283 | static int microblaze_debug_flag = 0; | ||
| 284 | |||
| 285 | @@ -207,9 +270,6 @@ microblaze_linux_init_abi (struct gdbarch_info info, | ||
| 286 | set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); | ||
| 287 | set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver); | ||
| 288 | |||
| 289 | - set_gdbarch_regset_from_core_section (gdbarch, | ||
| 290 | - microblaze_regset_from_core_section); | ||
| 291 | - | ||
| 292 | /* Enable TLS support. */ | ||
| 293 | set_gdbarch_fetch_tls_load_module_address (gdbarch, | ||
| 294 | svr4_fetch_objfile_link_map); | ||
| 295 | diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h | 202 | diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h |
| 296 | index 02650f61d9..3777cbb6a8 100644 | 203 | index 8f41ba19351..d2112dc07e1 100644 |
| 297 | --- a/gdb/microblaze-tdep.h | 204 | --- a/gdb/microblaze-tdep.h |
| 298 | +++ b/gdb/microblaze-tdep.h | 205 | +++ b/gdb/microblaze-tdep.h |
| 299 | @@ -24,6 +24,7 @@ | 206 | @@ -24,6 +24,7 @@ |
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0040-Patch-microblaze-Adding-64-bit-MB-support.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0040-Patch-microblaze-Adding-64-bit-MB-support.patch index e89d4049..7ac8f07f 100644 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0040-Patch-microblaze-Adding-64-bit-MB-support.patch +++ b/meta-microblaze/recipes-devtools/gdb/gdb/0040-Patch-microblaze-Adding-64-bit-MB-support.patch | |||
| @@ -1,35 +1,31 @@ | |||
| 1 | From ecaa548038df1ebf653ef3c3429e49c207461b19 Mon Sep 17 00:00:00 2001 | 1 | From 4e5a4e94cb1dd61646230100f883bd27a39cd896 Mon Sep 17 00:00:00 2001 |
| 2 | From: Nagaraju Mekala <nmekala@xilix.com> | 2 | From: Nagaraju Mekala <nmekala@xilix.com> |
| 3 | Date: Thu, 31 Jan 2019 14:36:00 +0530 | 3 | Date: Thu, 31 Jan 2019 14:36:00 +0530 |
| 4 | Subject: [PATCH 40/43] [Patch, microblaze]: Adding 64 bit MB support Added new | 4 | Subject: [PATCH 40/40] [Patch, microblaze]: Adding 64 bit MB support |
| 5 | architecture to Microblaze 64-bit support to GDB Signed-off-by :Nagaraju | ||
| 6 | Mekala <nmekala@xilix.com> | ||
| 7 | 5 | ||
| 8 | Merged on top of binutils work. | 6 | Added new architecture to Microblaze 64-bit support to GDB |
| 9 | 7 | ||
| 10 | Signed-off-by: Mark Hatle <mark.hatle@xilinx.com> | 8 | Signed-off-by :Nagaraju Mekala <nmekala@xilix.com> |
| 11 | --- | 9 | --- |
| 12 | bfd/archures.c | 2 + | 10 | bfd/archures.c | 2 + |
| 13 | bfd/bfd-in2.h | 2 + | 11 | bfd/bfd-in2.h | 2 + |
| 14 | bfd/cpu-microblaze.c | 12 +- | 12 | bfd/cpu-microblaze.c | 16 +- |
| 15 | bfd/elf32-microblaze.c | 93 +------- | 13 | bfd/elf32-microblaze.c | 9 + |
| 16 | gdb/Makefile.in | 2 +- | ||
| 17 | gdb/features/Makefile | 3 + | 14 | gdb/features/Makefile | 3 + |
| 18 | gdb/features/microblaze-core.xml | 6 +- | 15 | gdb/features/microblaze-core.xml | 6 +- |
| 19 | gdb/features/microblaze-stack-protect.xml | 4 +- | 16 | gdb/features/microblaze-with-stack-protect.c | 4 +- |
| 20 | gdb/features/microblaze-with-stack-protect.c | 8 +- | ||
| 21 | gdb/features/microblaze.c | 6 +- | 17 | gdb/features/microblaze.c | 6 +- |
| 22 | gdb/features/microblaze64-core.xml | 69 ++++++ | 18 | gdb/features/microblaze64-core.xml | 69 +++++++ |
| 23 | gdb/features/microblaze64-stack-protect.xml | 12 + | 19 | gdb/features/microblaze64-stack-protect.xml | 12 ++ |
| 24 | .../microblaze64-with-stack-protect.c | 79 +++++++ | 20 | .../microblaze64-with-stack-protect.c | 79 ++++++++ |
| 25 | .../microblaze64-with-stack-protect.xml | 12 + | 21 | .../microblaze64-with-stack-protect.xml | 12 ++ |
| 26 | gdb/features/microblaze64.c | 77 +++++++ | 22 | gdb/features/microblaze64.c | 77 ++++++++ |
| 27 | gdb/features/microblaze64.xml | 11 + | 23 | gdb/features/microblaze64.xml | 11 ++ |
| 28 | gdb/microblaze-tdep.c | 207 ++++++++++++++++-- | 24 | gdb/microblaze-linux-tdep.c | 29 ++- |
| 29 | gdb/microblaze-tdep.h | 8 +- | 25 | gdb/microblaze-tdep.c | 176 ++++++++++++++++-- |
| 26 | gdb/microblaze-tdep.h | 9 +- | ||
| 30 | .../microblaze-with-stack-protect.dat | 4 +- | 27 | .../microblaze-with-stack-protect.dat | 4 +- |
| 31 | opcodes/microblaze-opc.h | 1 - | 28 | 20 files changed, 504 insertions(+), 40 deletions(-) |
| 32 | 22 files changed, 504 insertions(+), 134 deletions(-) | ||
| 33 | create mode 100644 gdb/features/microblaze64-core.xml | 29 | create mode 100644 gdb/features/microblaze64-core.xml |
| 34 | create mode 100644 gdb/features/microblaze64-stack-protect.xml | 30 | create mode 100644 gdb/features/microblaze64-stack-protect.xml |
| 35 | create mode 100644 gdb/features/microblaze64-with-stack-protect.c | 31 | create mode 100644 gdb/features/microblaze64-with-stack-protect.c |
| @@ -38,10 +34,10 @@ Signed-off-by: Mark Hatle <mark.hatle@xilinx.com> | |||
| 38 | create mode 100644 gdb/features/microblaze64.xml | 34 | create mode 100644 gdb/features/microblaze64.xml |
| 39 | 35 | ||
| 40 | diff --git a/bfd/archures.c b/bfd/archures.c | 36 | diff --git a/bfd/archures.c b/bfd/archures.c |
| 41 | index 647cf0d8d4..3fdf7c3c0e 100644 | 37 | index 7866c6095b5..abc1541afe6 100644 |
| 42 | --- a/bfd/archures.c | 38 | --- a/bfd/archures.c |
| 43 | +++ b/bfd/archures.c | 39 | +++ b/bfd/archures.c |
| 44 | @@ -512,6 +512,8 @@ DESCRIPTION | 40 | @@ -513,6 +513,8 @@ DESCRIPTION |
| 45 | . bfd_arch_lm32, {* Lattice Mico32. *} | 41 | . bfd_arch_lm32, {* Lattice Mico32. *} |
| 46 | .#define bfd_mach_lm32 1 | 42 | .#define bfd_mach_lm32 1 |
| 47 | . bfd_arch_microblaze,{* Xilinx MicroBlaze. *} | 43 | . bfd_arch_microblaze,{* Xilinx MicroBlaze. *} |
| @@ -51,10 +47,10 @@ index 647cf0d8d4..3fdf7c3c0e 100644 | |||
| 51 | . bfd_arch_tilegx, {* Tilera TILE-Gx. *} | 47 | . bfd_arch_tilegx, {* Tilera TILE-Gx. *} |
| 52 | .#define bfd_mach_tilepro 1 | 48 | .#define bfd_mach_tilepro 1 |
| 53 | diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h | 49 | diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h |
| 54 | index 33c9cb62d9..db624c62b9 100644 | 50 | index 91761bf6964..cc34ce0d8c3 100644 |
| 55 | --- a/bfd/bfd-in2.h | 51 | --- a/bfd/bfd-in2.h |
| 56 | +++ b/bfd/bfd-in2.h | 52 | +++ b/bfd/bfd-in2.h |
| 57 | @@ -2411,6 +2411,8 @@ enum bfd_architecture | 53 | @@ -1896,6 +1896,8 @@ enum bfd_architecture |
| 58 | bfd_arch_lm32, /* Lattice Mico32. */ | 54 | bfd_arch_lm32, /* Lattice Mico32. */ |
| 59 | #define bfd_mach_lm32 1 | 55 | #define bfd_mach_lm32 1 |
| 60 | bfd_arch_microblaze,/* Xilinx MicroBlaze. */ | 56 | bfd_arch_microblaze,/* Xilinx MicroBlaze. */ |
| @@ -64,7 +60,7 @@ index 33c9cb62d9..db624c62b9 100644 | |||
| 64 | bfd_arch_tilegx, /* Tilera TILE-Gx. */ | 60 | bfd_arch_tilegx, /* Tilera TILE-Gx. */ |
| 65 | #define bfd_mach_tilepro 1 | 61 | #define bfd_mach_tilepro 1 |
| 66 | diff --git a/bfd/cpu-microblaze.c b/bfd/cpu-microblaze.c | 62 | diff --git a/bfd/cpu-microblaze.c b/bfd/cpu-microblaze.c |
| 67 | index c91ba46f75..8e7bcead28 100644 | 63 | index 4b48b310c6a..a32c4a33d75 100644 |
| 68 | --- a/bfd/cpu-microblaze.c | 64 | --- a/bfd/cpu-microblaze.c |
| 69 | +++ b/bfd/cpu-microblaze.c | 65 | +++ b/bfd/cpu-microblaze.c |
| 70 | @@ -30,8 +30,8 @@ const bfd_arch_info_type bfd_microblaze_arch[] = | 66 | @@ -30,8 +30,8 @@ const bfd_arch_info_type bfd_microblaze_arch[] = |
| @@ -78,16 +74,23 @@ index c91ba46f75..8e7bcead28 100644 | |||
| 78 | "microblaze", /* Architecture name. */ | 74 | "microblaze", /* Architecture name. */ |
| 79 | "MicroBlaze", /* Printable name. */ | 75 | "MicroBlaze", /* Printable name. */ |
| 80 | 3, /* Section align power. */ | 76 | 3, /* Section align power. */ |
| 81 | @@ -46,7 +46,7 @@ const bfd_arch_info_type bfd_microblaze_arch[] = | 77 | @@ -43,11 +43,11 @@ const bfd_arch_info_type bfd_microblaze_arch[] = |
| 82 | 32, /* 32 bits in an address. */ | 78 | 0 /* Maximum offset of a reloc from the start of an insn. */ |
| 83 | 8, /* 8 bits in a byte. */ | 79 | }, |
| 84 | bfd_arch_microblaze, /* Architecture. */ | 80 | { |
| 81 | - 32, /* Bits in a word. */ | ||
| 82 | - 32, /* Bits in an address. */ | ||
| 83 | - 8, /* Bits in a byte. */ | ||
| 84 | + 32, /* 32 bits in a word. */ | ||
| 85 | + 32, /* 32 bits in an address. */ | ||
| 86 | + 8, /* 8 bits in a byte. */ | ||
| 87 | bfd_arch_microblaze, /* Architecture number. */ | ||
| 85 | - 0, /* Machine number - 0 for now. */ | 88 | - 0, /* Machine number - 0 for now. */ |
| 86 | + bfd_mach_microblaze, /* 32 bit Machine */ | 89 | + bfd_mach_microblaze, /* 32 bit Machine */ |
| 87 | "microblaze", /* Architecture name. */ | 90 | "microblaze", /* Architecture name. */ |
| 88 | "MicroBlaze", /* Printable name. */ | 91 | "MicroBlaze", /* Printable name. */ |
| 89 | 3, /* Section align power. */ | 92 | 3, /* Section align power. */ |
| 90 | @@ -62,7 +62,7 @@ const bfd_arch_info_type bfd_microblaze_arch[] = | 93 | @@ -64,7 +64,7 @@ const bfd_arch_info_type bfd_microblaze_arch[] = |
| 91 | 32, /* 32 bits in an address. */ | 94 | 32, /* 32 bits in an address. */ |
| 92 | 8, /* 8 bits in a byte. */ | 95 | 8, /* 8 bits in a byte. */ |
| 93 | bfd_arch_microblaze, /* Architecture. */ | 96 | bfd_arch_microblaze, /* Architecture. */ |
| @@ -96,110 +99,20 @@ index c91ba46f75..8e7bcead28 100644 | |||
| 96 | "microblaze", /* Architecture name. */ | 99 | "microblaze", /* Architecture name. */ |
| 97 | "MicroBlaze", /* Printable name. */ | 100 | "MicroBlaze", /* Printable name. */ |
| 98 | 3, /* Section align power. */ | 101 | 3, /* Section align power. */ |
| 99 | @@ -76,8 +76,8 @@ const bfd_arch_info_type bfd_microblaze_arch[] = | 102 | @@ -80,7 +80,7 @@ const bfd_arch_info_type bfd_microblaze_arch[] = |
| 100 | 64, /* 32 bits in a word. */ | ||
| 101 | 64, /* 32 bits in an address. */ | 103 | 64, /* 32 bits in an address. */ |
| 102 | 8, /* 8 bits in a byte. */ | 104 | 8, /* 8 bits in a byte. */ |
| 103 | - bfd_arch_microblaze, /* Architecture. */ | 105 | bfd_arch_microblaze, /* Architecture. */ |
| 104 | - 0, /* Machine number - 0 for now. */ | 106 | - 0, /* Machine number - 0 for now. */ |
| 105 | + bfd_arch_microblaze, /* Architecture. */ | ||
| 106 | + bfd_mach_microblaze64, /* 64 bit Machine */ | 107 | + bfd_mach_microblaze64, /* 64 bit Machine */ |
| 107 | "microblaze", /* Architecture name. */ | 108 | "microblaze", /* Architecture name. */ |
| 108 | "MicroBlaze", /* Printable name. */ | 109 | "MicroBlaze", /* Printable name. */ |
| 109 | 3, /* Section align power. */ | 110 | 3, /* Section align power. */ |
| 110 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c | 111 | diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c |
| 111 | index c280431df6..f9996eae12 100644 | 112 | index cb7a98d307e..e4a70150190 100644 |
| 112 | --- a/bfd/elf32-microblaze.c | 113 | --- a/bfd/elf32-microblaze.c |
| 113 | +++ b/bfd/elf32-microblaze.c | 114 | +++ b/bfd/elf32-microblaze.c |
| 114 | @@ -767,87 +767,6 @@ microblaze_elf_is_local_label_name (bfd *abfd, const char *name) | 115 | @@ -3684,6 +3684,14 @@ microblaze_elf_finish_dynamic_sections (bfd *output_bfd, |
| 115 | return _bfd_elf_is_local_label_name (abfd, name); | ||
| 116 | } | ||
| 117 | |||
| 118 | -/* Support for core dump NOTE sections. */ | ||
| 119 | -static bfd_boolean | ||
| 120 | -microblaze_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) | ||
| 121 | -{ | ||
| 122 | - int offset; | ||
| 123 | - unsigned int size; | ||
| 124 | - | ||
| 125 | - switch (note->descsz) | ||
| 126 | - { | ||
| 127 | - default: | ||
| 128 | - return FALSE; | ||
| 129 | - | ||
| 130 | - case 228: /* Linux/MicroBlaze */ | ||
| 131 | - /* pr_cursig */ | ||
| 132 | - elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12); | ||
| 133 | - | ||
| 134 | - /* pr_pid */ | ||
| 135 | - elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 24); | ||
| 136 | - | ||
| 137 | - /* pr_reg */ | ||
| 138 | - offset = 72; | ||
| 139 | - size = 50 * 4; | ||
| 140 | - | ||
| 141 | - break; | ||
| 142 | - } | ||
| 143 | - | ||
| 144 | - /* Make a ".reg/999" section. */ | ||
| 145 | - return _bfd_elfcore_make_pseudosection (abfd, ".reg", | ||
| 146 | - size, note->descpos + offset); | ||
| 147 | -} | ||
| 148 | - | ||
| 149 | -static bfd_boolean | ||
| 150 | -microblaze_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) | ||
| 151 | -{ | ||
| 152 | - switch (note->descsz) | ||
| 153 | - { | ||
| 154 | - default: | ||
| 155 | - return FALSE; | ||
| 156 | - | ||
| 157 | - case 128: /* Linux/MicroBlaze elf_prpsinfo */ | ||
| 158 | - elf_tdata (abfd)->core->program | ||
| 159 | - = _bfd_elfcore_strndup (abfd, note->descdata + 32, 16); | ||
| 160 | - elf_tdata (abfd)->core->command | ||
| 161 | - = _bfd_elfcore_strndup (abfd, note->descdata + 48, 80); | ||
| 162 | - } | ||
| 163 | - | ||
| 164 | - /* Note that for some reason, a spurious space is tacked | ||
| 165 | - onto the end of the args in some (at least one anyway) | ||
| 166 | - implementations, so strip it off if it exists. */ | ||
| 167 | - | ||
| 168 | - { | ||
| 169 | - char *command = elf_tdata (abfd)->core->command; | ||
| 170 | - int n = strlen (command); | ||
| 171 | - | ||
| 172 | - if (0 < n && command[n - 1] == ' ') | ||
| 173 | - command[n - 1] = '\0'; | ||
| 174 | - } | ||
| 175 | - | ||
| 176 | - return TRUE; | ||
| 177 | -} | ||
| 178 | - | ||
| 179 | -/* The microblaze linker (like many others) needs to keep track of | ||
| 180 | - the number of relocs that it decides to copy as dynamic relocs in | ||
| 181 | - check_relocs for each symbol. This is so that it can later discard | ||
| 182 | - them if they are found to be unnecessary. We store the information | ||
| 183 | - in a field extending the regular ELF linker hash table. */ | ||
| 184 | - | ||
| 185 | -struct elf32_mb_dyn_relocs | ||
| 186 | -{ | ||
| 187 | - struct elf32_mb_dyn_relocs *next; | ||
| 188 | - | ||
| 189 | - /* The input section of the reloc. */ | ||
| 190 | - asection *sec; | ||
| 191 | - | ||
| 192 | - /* Total number of relocs copied for the input section. */ | ||
| 193 | - bfd_size_type count; | ||
| 194 | - | ||
| 195 | - /* Number of pc-relative relocs copied for the input section. */ | ||
| 196 | - bfd_size_type pc_count; | ||
| 197 | -}; | ||
| 198 | - | ||
| 199 | /* ELF linker hash entry. */ | ||
| 200 | |||
| 201 | struct elf32_mb_link_hash_entry | ||
| 202 | @@ -3683,6 +3602,14 @@ microblaze_elf_finish_dynamic_sections (bfd *output_bfd, | ||
| 203 | return TRUE; | 116 | return TRUE; |
| 204 | } | 117 | } |
| 205 | 118 | ||
| @@ -214,44 +127,28 @@ index c280431df6..f9996eae12 100644 | |||
| 214 | /* Hook called by the linker routine which adds symbols from an object | 127 | /* Hook called by the linker routine which adds symbols from an object |
| 215 | file. We use it to put .comm items in .sbss, and not .bss. */ | 128 | file. We use it to put .comm items in .sbss, and not .bss. */ |
| 216 | 129 | ||
| 217 | @@ -3752,8 +3679,6 @@ microblaze_elf_add_symbol_hook (bfd *abfd, | 130 | @@ -3756,5 +3764,6 @@ microblaze_elf_add_symbol_hook (bfd *abfd, |
| 218 | #define elf_backend_finish_dynamic_symbol microblaze_elf_finish_dynamic_symbol | 131 | |
| 219 | #define elf_backend_size_dynamic_sections microblaze_elf_size_dynamic_sections | 132 | #define elf_backend_grok_prstatus microblaze_elf_grok_prstatus |
| 220 | #define elf_backend_add_symbol_hook microblaze_elf_add_symbol_hook | 133 | #define elf_backend_grok_psinfo microblaze_elf_grok_psinfo |
| 221 | - | ||
| 222 | -#define elf_backend_grok_prstatus microblaze_elf_grok_prstatus | ||
| 223 | -#define elf_backend_grok_psinfo microblaze_elf_grok_psinfo | ||
| 224 | +#define elf_backend_object_p elf_microblaze_object_p | 134 | +#define elf_backend_object_p elf_microblaze_object_p |
| 225 | 135 | ||
| 226 | #include "elf32-target.h" | 136 | #include "elf32-target.h" |
| 227 | diff --git a/gdb/Makefile.in b/gdb/Makefile.in | ||
| 228 | index d620580498..69b003f8cb 100644 | ||
| 229 | --- a/gdb/Makefile.in | ||
| 230 | +++ b/gdb/Makefile.in | ||
| 231 | @@ -2265,7 +2265,7 @@ ALLDEPFILES = \ | ||
| 232 | m68k-tdep.c \ | ||
| 233 | microblaze-linux-tdep.c \ | ||
| 234 | microblaze-tdep.c \ | ||
| 235 | - microblaze-linux-nat.c \ | ||
| 236 | + microblaze-linux-nat.c \ | ||
| 237 | mingw-hdep.c \ | ||
| 238 | mips-fbsd-nat.c \ | ||
| 239 | mips-fbsd-tdep.c \ | ||
| 240 | diff --git a/gdb/features/Makefile b/gdb/features/Makefile | 137 | diff --git a/gdb/features/Makefile b/gdb/features/Makefile |
| 241 | index 3d84ca09a1..fdeec19753 100644 | 138 | index 9a98b0542c4..438e0c5a3fe 100644 |
| 242 | --- a/gdb/features/Makefile | 139 | --- a/gdb/features/Makefile |
| 243 | +++ b/gdb/features/Makefile | 140 | +++ b/gdb/features/Makefile |
| 244 | @@ -64,6 +64,7 @@ WHICH = aarch64 \ | 141 | @@ -48,6 +48,7 @@ WHICH = arm/arm-with-iwmmxt arm/arm-with-vfpv2 arm/arm-with-vfpv3 \ |
| 245 | i386/x32-avx-avx512-linux \ | 142 | arm/arm-with-neon \ |
| 246 | mips-linux mips-dsp-linux \ | 143 | mips-linux mips-dsp-linux \ |
| 247 | microblaze-with-stack-protect \ | 144 | microblaze-with-stack-protect \ |
| 248 | + microblaze64-with-stack-protect \ | 145 | + microblaze64-with-stack-protect \ |
| 249 | mips64-linux mips64-dsp-linux \ | 146 | mips64-linux mips64-dsp-linux \ |
| 250 | nios2-linux \ | 147 | nios2-linux \ |
| 251 | rs6000/powerpc-32 \ | 148 | rs6000/powerpc-32 \ |
| 252 | @@ -135,7 +136,9 @@ XMLTOC = \ | 149 | @@ -111,7 +112,9 @@ XMLTOC = \ |
| 253 | arm/arm-with-vfpv2.xml \ | 150 | arc-v2.xml \ |
| 254 | arm/arm-with-vfpv3.xml \ | 151 | arc-arcompact.xml \ |
| 255 | microblaze-with-stack-protect.xml \ | 152 | microblaze-with-stack-protect.xml \ |
| 256 | + microblaze64-with-stack-protect.xml \ | 153 | + microblaze64-with-stack-protect.xml \ |
| 257 | microblaze.xml \ | 154 | microblaze.xml \ |
| @@ -260,7 +157,7 @@ index 3d84ca09a1..fdeec19753 100644 | |||
| 260 | mips-linux.xml \ | 157 | mips-linux.xml \ |
| 261 | mips64-dsp-linux.xml \ | 158 | mips64-dsp-linux.xml \ |
| 262 | diff --git a/gdb/features/microblaze-core.xml b/gdb/features/microblaze-core.xml | 159 | diff --git a/gdb/features/microblaze-core.xml b/gdb/features/microblaze-core.xml |
| 263 | index 88c93e5d66..5bc3e49f84 100644 | 160 | index f272650a41b..d1f2282fd1e 100644 |
| 264 | --- a/gdb/features/microblaze-core.xml | 161 | --- a/gdb/features/microblaze-core.xml |
| 265 | +++ b/gdb/features/microblaze-core.xml | 162 | +++ b/gdb/features/microblaze-core.xml |
| 266 | @@ -8,7 +8,7 @@ | 163 | @@ -8,7 +8,7 @@ |
| @@ -285,24 +182,11 @@ index 88c93e5d66..5bc3e49f84 100644 | |||
| 285 | <reg name="rtlbsx" bitsize="32"/> | 182 | <reg name="rtlbsx" bitsize="32"/> |
| 286 | <reg name="rtlblo" bitsize="32"/> | 183 | <reg name="rtlblo" bitsize="32"/> |
| 287 | <reg name="rtlbhi" bitsize="32"/> | 184 | <reg name="rtlbhi" bitsize="32"/> |
| 288 | + <reg name="slr" bitsize="32"/> | 185 | + <reg name="rslr" bitsize="32"/> |
| 289 | + <reg name="shr" bitsize="32"/> | 186 | + <reg name="rshr" bitsize="32"/> |
| 290 | </feature> | ||
| 291 | diff --git a/gdb/features/microblaze-stack-protect.xml b/gdb/features/microblaze-stack-protect.xml | ||
| 292 | index 870c148bb0..a7f27b903c 100644 | ||
| 293 | --- a/gdb/features/microblaze-stack-protect.xml | ||
| 294 | +++ b/gdb/features/microblaze-stack-protect.xml | ||
| 295 | @@ -7,6 +7,6 @@ | ||
| 296 | |||
| 297 | <!DOCTYPE feature SYSTEM "gdb-target.dtd"> | ||
| 298 | <feature name="org.gnu.gdb.microblaze.stack-protect"> | ||
| 299 | - <reg name="rslr" bitsize="32"/> | ||
| 300 | - <reg name="rshr" bitsize="32"/> | ||
| 301 | + <reg name="slr" bitsize="32"/> | ||
| 302 | + <reg name="shr" bitsize="32"/> | ||
| 303 | </feature> | 187 | </feature> |
| 304 | diff --git a/gdb/features/microblaze-with-stack-protect.c b/gdb/features/microblaze-with-stack-protect.c | 188 | diff --git a/gdb/features/microblaze-with-stack-protect.c b/gdb/features/microblaze-with-stack-protect.c |
| 305 | index b39aa19887..609934e2b4 100644 | 189 | index b39aa198874..ab162fd2588 100644 |
| 306 | --- a/gdb/features/microblaze-with-stack-protect.c | 190 | --- a/gdb/features/microblaze-with-stack-protect.c |
| 307 | +++ b/gdb/features/microblaze-with-stack-protect.c | 191 | +++ b/gdb/features/microblaze-with-stack-protect.c |
| 308 | @@ -14,7 +14,7 @@ initialize_tdesc_microblaze_with_stack_protect (void) | 192 | @@ -14,7 +14,7 @@ initialize_tdesc_microblaze_with_stack_protect (void) |
| @@ -323,19 +207,8 @@ index b39aa19887..609934e2b4 100644 | |||
| 323 | tdesc_create_reg (feature, "rmsr", 33, 1, NULL, 32, "int"); | 207 | tdesc_create_reg (feature, "rmsr", 33, 1, NULL, 32, "int"); |
| 324 | tdesc_create_reg (feature, "rear", 34, 1, NULL, 32, "int"); | 208 | tdesc_create_reg (feature, "rear", 34, 1, NULL, 32, "int"); |
| 325 | tdesc_create_reg (feature, "resr", 35, 1, NULL, 32, "int"); | 209 | tdesc_create_reg (feature, "resr", 35, 1, NULL, 32, "int"); |
| 326 | @@ -72,8 +72,8 @@ initialize_tdesc_microblaze_with_stack_protect (void) | ||
| 327 | tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); | ||
| 328 | |||
| 329 | feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.stack-protect"); | ||
| 330 | - tdesc_create_reg (feature, "rslr", 57, 1, NULL, 32, "int"); | ||
| 331 | - tdesc_create_reg (feature, "rshr", 58, 1, NULL, 32, "int"); | ||
| 332 | + tdesc_create_reg (feature, "slr", 57, 1, NULL, 32, "int"); | ||
| 333 | + tdesc_create_reg (feature, "shr", 58, 1, NULL, 32, "int"); | ||
| 334 | |||
| 335 | tdesc_microblaze_with_stack_protect = result; | ||
| 336 | } | ||
| 337 | diff --git a/gdb/features/microblaze.c b/gdb/features/microblaze.c | 210 | diff --git a/gdb/features/microblaze.c b/gdb/features/microblaze.c |
| 338 | index 6c86fc0770..ceb98ca8b8 100644 | 211 | index 6c86fc07700..7919ac96e62 100644 |
| 339 | --- a/gdb/features/microblaze.c | 212 | --- a/gdb/features/microblaze.c |
| 340 | +++ b/gdb/features/microblaze.c | 213 | +++ b/gdb/features/microblaze.c |
| 341 | @@ -14,7 +14,7 @@ initialize_tdesc_microblaze (void) | 214 | @@ -14,7 +14,7 @@ initialize_tdesc_microblaze (void) |
| @@ -360,14 +233,14 @@ index 6c86fc0770..ceb98ca8b8 100644 | |||
| 360 | tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int"); | 233 | tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int"); |
| 361 | tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int"); | 234 | tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int"); |
| 362 | tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); | 235 | tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); |
| 363 | + tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64"); | 236 | + tdesc_create_reg (feature, "rslr", 57, 1, NULL, 64, "uint64"); |
| 364 | + tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64"); | 237 | + tdesc_create_reg (feature, "rshr", 58, 1, NULL, 64, "uint64"); |
| 365 | 238 | ||
| 366 | tdesc_microblaze = result; | 239 | tdesc_microblaze = result; |
| 367 | } | 240 | } |
| 368 | diff --git a/gdb/features/microblaze64-core.xml b/gdb/features/microblaze64-core.xml | 241 | diff --git a/gdb/features/microblaze64-core.xml b/gdb/features/microblaze64-core.xml |
| 369 | new file mode 100644 | 242 | new file mode 100644 |
| 370 | index 0000000000..96e99e2fb2 | 243 | index 00000000000..b9adadfade6 |
| 371 | --- /dev/null | 244 | --- /dev/null |
| 372 | +++ b/gdb/features/microblaze64-core.xml | 245 | +++ b/gdb/features/microblaze64-core.xml |
| 373 | @@ -0,0 +1,69 @@ | 246 | @@ -0,0 +1,69 @@ |
| @@ -437,12 +310,12 @@ index 0000000000..96e99e2fb2 | |||
| 437 | + <reg name="rtlbsx" bitsize="32"/> | 310 | + <reg name="rtlbsx" bitsize="32"/> |
| 438 | + <reg name="rtlblo" bitsize="32"/> | 311 | + <reg name="rtlblo" bitsize="32"/> |
| 439 | + <reg name="rtlbhi" bitsize="32"/> | 312 | + <reg name="rtlbhi" bitsize="32"/> |
| 440 | + <reg name="slr" bitsize="64"/> | 313 | + <reg name="rslr" bitsize="64"/> |
| 441 | + <reg name="shr" bitsize="64"/> | 314 | + <reg name="rshr" bitsize="64"/> |
| 442 | +</feature> | 315 | +</feature> |
| 443 | diff --git a/gdb/features/microblaze64-stack-protect.xml b/gdb/features/microblaze64-stack-protect.xml | 316 | diff --git a/gdb/features/microblaze64-stack-protect.xml b/gdb/features/microblaze64-stack-protect.xml |
| 444 | new file mode 100644 | 317 | new file mode 100644 |
| 445 | index 0000000000..1bbf5fc3ce | 318 | index 00000000000..9d7ea8b9fd7 |
| 446 | --- /dev/null | 319 | --- /dev/null |
| 447 | +++ b/gdb/features/microblaze64-stack-protect.xml | 320 | +++ b/gdb/features/microblaze64-stack-protect.xml |
| 448 | @@ -0,0 +1,12 @@ | 321 | @@ -0,0 +1,12 @@ |
| @@ -455,12 +328,12 @@ index 0000000000..1bbf5fc3ce | |||
| 455 | + | 328 | + |
| 456 | +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> | 329 | +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> |
| 457 | +<feature name="org.gnu.gdb.microblaze64.stack-protect"> | 330 | +<feature name="org.gnu.gdb.microblaze64.stack-protect"> |
| 458 | + <reg name="slr" bitsize="64"/> | 331 | + <reg name="rslr" bitsize="64"/> |
| 459 | + <reg name="shr" bitsize="64"/> | 332 | + <reg name="rshr" bitsize="64"/> |
| 460 | +</feature> | 333 | +</feature> |
| 461 | diff --git a/gdb/features/microblaze64-with-stack-protect.c b/gdb/features/microblaze64-with-stack-protect.c | 334 | diff --git a/gdb/features/microblaze64-with-stack-protect.c b/gdb/features/microblaze64-with-stack-protect.c |
| 462 | new file mode 100644 | 335 | new file mode 100644 |
| 463 | index 0000000000..f448c9a749 | 336 | index 00000000000..249cb534daa |
| 464 | --- /dev/null | 337 | --- /dev/null |
| 465 | +++ b/gdb/features/microblaze64-with-stack-protect.c | 338 | +++ b/gdb/features/microblaze64-with-stack-protect.c |
| 466 | @@ -0,0 +1,79 @@ | 339 | @@ -0,0 +1,79 @@ |
| @@ -538,14 +411,14 @@ index 0000000000..f448c9a749 | |||
| 538 | + tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); | 411 | + tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); |
| 539 | + | 412 | + |
| 540 | + feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze64.stack-protect"); | 413 | + feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze64.stack-protect"); |
| 541 | + tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64"); | 414 | + tdesc_create_reg (feature, "rslr", 57, 1, NULL, 64, "uint64"); |
| 542 | + tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64"); | 415 | + tdesc_create_reg (feature, "rshr", 58, 1, NULL, 64, "uint64"); |
| 543 | + | 416 | + |
| 544 | + tdesc_microblaze64_with_stack_protect = result; | 417 | + tdesc_microblaze64_with_stack_protect = result; |
| 545 | +} | 418 | +} |
| 546 | diff --git a/gdb/features/microblaze64-with-stack-protect.xml b/gdb/features/microblaze64-with-stack-protect.xml | 419 | diff --git a/gdb/features/microblaze64-with-stack-protect.xml b/gdb/features/microblaze64-with-stack-protect.xml |
| 547 | new file mode 100644 | 420 | new file mode 100644 |
| 548 | index 0000000000..0e9f01611f | 421 | index 00000000000..0e9f01611f3 |
| 549 | --- /dev/null | 422 | --- /dev/null |
| 550 | +++ b/gdb/features/microblaze64-with-stack-protect.xml | 423 | +++ b/gdb/features/microblaze64-with-stack-protect.xml |
| 551 | @@ -0,0 +1,12 @@ | 424 | @@ -0,0 +1,12 @@ |
| @@ -563,7 +436,7 @@ index 0000000000..0e9f01611f | |||
| 563 | +</target> | 436 | +</target> |
| 564 | diff --git a/gdb/features/microblaze64.c b/gdb/features/microblaze64.c | 437 | diff --git a/gdb/features/microblaze64.c b/gdb/features/microblaze64.c |
| 565 | new file mode 100644 | 438 | new file mode 100644 |
| 566 | index 0000000000..1aa37c4512 | 439 | index 00000000000..5d3e2c8cd91 |
| 567 | --- /dev/null | 440 | --- /dev/null |
| 568 | +++ b/gdb/features/microblaze64.c | 441 | +++ b/gdb/features/microblaze64.c |
| 569 | @@ -0,0 +1,77 @@ | 442 | @@ -0,0 +1,77 @@ |
| @@ -639,14 +512,14 @@ index 0000000000..1aa37c4512 | |||
| 639 | + tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int"); | 512 | + tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int"); |
| 640 | + tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int"); | 513 | + tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int"); |
| 641 | + tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); | 514 | + tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); |
| 642 | + tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64"); | 515 | + tdesc_create_reg (feature, "rslr", 57, 1, NULL, 64, "uint64"); |
| 643 | + tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64"); | 516 | + tdesc_create_reg (feature, "rshr", 58, 1, NULL, 64, "uint64"); |
| 644 | + | 517 | + |
| 645 | + tdesc_microblaze64 = result; | 518 | + tdesc_microblaze64 = result; |
| 646 | +} | 519 | +} |
| 647 | diff --git a/gdb/features/microblaze64.xml b/gdb/features/microblaze64.xml | 520 | diff --git a/gdb/features/microblaze64.xml b/gdb/features/microblaze64.xml |
| 648 | new file mode 100644 | 521 | new file mode 100644 |
| 649 | index 0000000000..515d18e65c | 522 | index 00000000000..515d18e65cf |
| 650 | --- /dev/null | 523 | --- /dev/null |
| 651 | +++ b/gdb/features/microblaze64.xml | 524 | +++ b/gdb/features/microblaze64.xml |
| 652 | @@ -0,0 +1,11 @@ | 525 | @@ -0,0 +1,11 @@ |
| @@ -661,8 +534,55 @@ index 0000000000..515d18e65c | |||
| 661 | +<target> | 534 | +<target> |
| 662 | + <xi:include href="microblaze64-core.xml"/> | 535 | + <xi:include href="microblaze64-core.xml"/> |
| 663 | +</target> | 536 | +</target> |
| 537 | diff --git a/gdb/microblaze-linux-tdep.c b/gdb/microblaze-linux-tdep.c | ||
| 538 | index 0afb6efeba3..48459a76991 100644 | ||
| 539 | --- a/gdb/microblaze-linux-tdep.c | ||
| 540 | +++ b/gdb/microblaze-linux-tdep.c | ||
| 541 | @@ -159,9 +159,30 @@ microblaze_linux_init_abi (struct gdbarch_info info, | ||
| 542 | |||
| 543 | /* BFD target for core files. */ | ||
| 544 | if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) | ||
| 545 | - set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblaze"); | ||
| 546 | + { | ||
| 547 | + if (info.bfd_arch_info->mach == bfd_mach_microblaze64) { | ||
| 548 | + set_gdbarch_gcore_bfd_target (gdbarch, "elf64-microblaze"); | ||
| 549 | + MICROBLAZE_REGISTER_SIZE=8; | ||
| 550 | + } | ||
| 551 | + else | ||
| 552 | + set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblaze"); | ||
| 553 | + } | ||
| 554 | else | ||
| 555 | - set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblazeel"); | ||
| 556 | + { | ||
| 557 | + if (info.bfd_arch_info->mach == bfd_mach_microblaze64) { | ||
| 558 | + set_gdbarch_gcore_bfd_target (gdbarch, "elf64-microblazeel"); | ||
| 559 | + MICROBLAZE_REGISTER_SIZE=8; | ||
| 560 | + } | ||
| 561 | + else | ||
| 562 | + set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblazeel"); | ||
| 563 | + } | ||
| 564 | + | ||
| 565 | + switch (info.bfd_arch_info->mach) | ||
| 566 | + { | ||
| 567 | + case bfd_mach_microblaze64: | ||
| 568 | + set_gdbarch_ptr_bit (gdbarch, 64); | ||
| 569 | + break; | ||
| 570 | + } | ||
| 571 | |||
| 572 | |||
| 573 | /* Shared library handling. */ | ||
| 574 | @@ -176,6 +197,8 @@ microblaze_linux_init_abi (struct gdbarch_info info, | ||
| 575 | void | ||
| 576 | _initialize_microblaze_linux_tdep (void) | ||
| 577 | { | ||
| 578 | - gdbarch_register_osabi (bfd_arch_microblaze, 0, GDB_OSABI_LINUX, | ||
| 579 | + gdbarch_register_osabi (bfd_arch_microblaze, bfd_mach_microblaze, GDB_OSABI_LINUX, | ||
| 580 | + microblaze_linux_init_abi); | ||
| 581 | + gdbarch_register_osabi (bfd_arch_microblaze, bfd_mach_microblaze64, GDB_OSABI_LINUX, | ||
| 582 | microblaze_linux_init_abi); | ||
| 583 | } | ||
| 664 | diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c | 584 | diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c |
| 665 | index 49713ea9b1..0605283c9e 100644 | 585 | index 98944f38d2a..5c0d6dd48ae 100644 |
| 666 | --- a/gdb/microblaze-tdep.c | 586 | --- a/gdb/microblaze-tdep.c |
| 667 | +++ b/gdb/microblaze-tdep.c | 587 | +++ b/gdb/microblaze-tdep.c |
| 668 | @@ -40,7 +40,9 @@ | 588 | @@ -40,7 +40,9 @@ |
| @@ -675,57 +595,34 @@ index 49713ea9b1..0605283c9e 100644 | |||
| 675 | 595 | ||
| 676 | /* Instruction macros used for analyzing the prologue. */ | 596 | /* Instruction macros used for analyzing the prologue. */ |
| 677 | /* This set of instruction macros need to be changed whenever the | 597 | /* This set of instruction macros need to be changed whenever the |
| 678 | @@ -75,12 +77,13 @@ static const char *microblaze_register_names[] = | 598 | @@ -79,8 +81,9 @@ static const char *microblaze_register_names[] = |
| 679 | "rpvr0", "rpvr1", "rpvr2", "rpvr3", "rpvr4", "rpvr5", "rpvr6", | ||
| 680 | "rpvr7", "rpvr8", "rpvr9", "rpvr10", "rpvr11", | ||
| 681 | "redr", "rpid", "rzpr", "rtlbx", "rtlbsx", "rtlblo", "rtlbhi", | ||
| 682 | - "rslr", "rshr" | ||
| 683 | + "slr", "shr" | ||
| 684 | }; | 599 | }; |
| 685 | 600 | ||
| 686 | #define MICROBLAZE_NUM_REGS ARRAY_SIZE (microblaze_register_names) | 601 | #define MICROBLAZE_NUM_REGS ARRAY_SIZE (microblaze_register_names) |
| 687 | 602 | - | |
| 603 | + | ||
| 688 | static unsigned int microblaze_debug_flag = 0; | 604 | static unsigned int microblaze_debug_flag = 0; |
| 689 | +int reg_size = 4; | 605 | +int MICROBLAZE_REGISTER_SIZE = 4; |
| 690 | 606 | ||
| 691 | static void ATTRIBUTE_PRINTF (1, 2) | 607 | static void ATTRIBUTE_PRINTF (1, 2) |
| 692 | microblaze_debug (const char *fmt, ...) | 608 | microblaze_debug (const char *fmt, ...) |
| 693 | @@ -145,6 +148,7 @@ microblaze_store_arguments (struct regcache *regcache, int nargs, | 609 | @@ -137,6 +140,7 @@ microblaze_fetch_instruction (CORE_ADDR pc) |
| 694 | error (_("store_arguments not implemented")); | 610 | constexpr gdb_byte microblaze_break_insn[] = MICROBLAZE_BREAKPOINT; |
| 695 | return sp; | 611 | |
| 696 | } | 612 | typedef BP_MANIPULATION (microblaze_break_insn) microblaze_breakpoint; |
| 697 | +#if 0 | 613 | +#if 0 |
| 698 | static int | 614 | static int |
| 699 | microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, | 615 | microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, |
| 700 | struct bp_target_info *bp_tgt) | 616 | struct bp_target_info *bp_tgt) |
| 701 | @@ -154,7 +158,7 @@ microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, | 617 | @@ -169,6 +173,7 @@ microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, |
| 702 | int val; | ||
| 703 | int bplen; | ||
| 704 | gdb_byte old_contents[BREAKPOINT_MAX]; | ||
| 705 | - struct cleanup *cleanup; | ||
| 706 | + //struct cleanup *cleanup; | ||
| 707 | 618 | ||
| 708 | /* Determine appropriate breakpoint contents and size for this address. */ | ||
| 709 | bp = gdbarch_breakpoint_from_pc (gdbarch, &addr, &bplen); | ||
| 710 | @@ -162,7 +166,8 @@ microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, | ||
| 711 | error (_("Software breakpoints not implemented for this target.")); | ||
| 712 | |||
| 713 | /* Make sure we see the memory breakpoints. */ | ||
| 714 | - cleanup = make_show_memory_breakpoints_cleanup (1); | ||
| 715 | + scoped_restore | ||
| 716 | + cleanup = make_scoped_restore_show_memory_breakpoints (1); | ||
| 717 | val = target_read_memory (addr, old_contents, bplen); | ||
| 718 | |||
| 719 | /* If our breakpoint is no longer at the address, this means that the | ||
| 720 | @@ -178,6 +183,7 @@ microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, | ||
| 721 | return val; | 619 | return val; |
| 722 | } | 620 | } |
| 723 | |||
| 724 | +#endif | 621 | +#endif |
| 622 | |||
| 725 | /* Allocate and initialize a frame cache. */ | 623 | /* Allocate and initialize a frame cache. */ |
| 726 | 624 | ||
| 727 | static struct microblaze_frame_cache * | 625 | @@ -556,7 +561,6 @@ microblaze_extract_return_value (struct type *type, struct regcache *regcache, |
| 728 | @@ -570,17 +576,16 @@ microblaze_extract_return_value (struct type *type, struct regcache *regcache, | ||
| 729 | gdb_byte *valbuf) | 626 | gdb_byte *valbuf) |
| 730 | { | 627 | { |
| 731 | gdb_byte buf[8]; | 628 | gdb_byte buf[8]; |
| @@ -733,19 +630,7 @@ index 49713ea9b1..0605283c9e 100644 | |||
| 733 | /* Copy the return value (starting) in RETVAL_REGNUM to VALBUF. */ | 630 | /* Copy the return value (starting) in RETVAL_REGNUM to VALBUF. */ |
| 734 | switch (TYPE_LENGTH (type)) | 631 | switch (TYPE_LENGTH (type)) |
| 735 | { | 632 | { |
| 736 | case 1: /* return last byte in the register. */ | 633 | @@ -633,7 +637,113 @@ microblaze_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type) |
| 737 | regcache->cooked_read (MICROBLAZE_RETVAL_REGNUM, buf); | ||
| 738 | - memcpy(valbuf, buf + MICROBLAZE_REGISTER_SIZE - 1, 1); | ||
| 739 | + memcpy(valbuf, buf + reg_size - 1, 1); | ||
| 740 | return; | ||
| 741 | case 2: /* return last 2 bytes in register. */ | ||
| 742 | regcache->cooked_read (MICROBLAZE_RETVAL_REGNUM, buf); | ||
| 743 | - memcpy(valbuf, buf + MICROBLAZE_REGISTER_SIZE - 2, 2); | ||
| 744 | + memcpy(valbuf, buf + reg_size - 2, 2); | ||
| 745 | return; | ||
| 746 | case 4: /* for sizes 4 or 8, copy the required length. */ | ||
| 747 | case 8: | ||
| 748 | @@ -647,7 +652,119 @@ microblaze_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type) | ||
| 749 | return (TYPE_LENGTH (type) == 16); | 634 | return (TYPE_LENGTH (type) == 16); |
| 750 | } | 635 | } |
| 751 | 636 | ||
| @@ -857,16 +742,14 @@ index 49713ea9b1..0605283c9e 100644 | |||
| 857 | +} | 742 | +} |
| 858 | +#endif | 743 | +#endif |
| 859 | + | 744 | + |
| 860 | +static void | ||
| 861 | +microblaze_write_pc (struct regcache *regcache, CORE_ADDR pc) | ||
| 862 | +{ | ||
| 863 | + regcache_cooked_write_unsigned (regcache, MICROBLAZE_PC_REGNUM, pc); | ||
| 864 | +} | ||
| 865 | + | ||
| 866 | static int dwarf2_to_reg_map[78] = | 745 | static int dwarf2_to_reg_map[78] = |
| 867 | { 0 /* r0 */, 1 /* r1 */, 2 /* r2 */, 3 /* r3 */, /* 0- 3 */ | 746 | { 0 /* r0 */, 1 /* r1 */, 2 /* r2 */, 3 /* r3 */, /* 0- 3 */ |
| 868 | 4 /* r4 */, 5 /* r5 */, 6 /* r6 */, 7 /* r7 */, /* 4- 7 */ | 747 | 4 /* r4 */, 5 /* r5 */, 6 /* r6 */, 7 /* r7 */, /* 4- 7 */ |
| 869 | @@ -682,13 +799,14 @@ microblaze_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg) | 748 | @@ -665,24 +775,27 @@ microblaze_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg) |
| 749 | return -1; | ||
| 750 | } | ||
| 751 | |||
| 752 | +#if 0 | ||
| 870 | static void | 753 | static void |
| 871 | microblaze_register_g_packet_guesses (struct gdbarch *gdbarch) | 754 | microblaze_register_g_packet_guesses (struct gdbarch *gdbarch) |
| 872 | { | 755 | { |
| @@ -882,46 +765,27 @@ index 49713ea9b1..0605283c9e 100644 | |||
| 882 | - tdesc_microblaze_with_stack_protect); | 765 | - tdesc_microblaze_with_stack_protect); |
| 883 | + tdesc_microblaze64_with_stack_protect); | 766 | + tdesc_microblaze64_with_stack_protect); |
| 884 | } | 767 | } |
| 768 | +#endif | ||
| 885 | 769 | ||
| 886 | void | 770 | void |
| 887 | @@ -696,15 +814,15 @@ microblaze_supply_gregset (const struct microblaze_gregset *gregset, | 771 | microblaze_supply_gregset (const struct regset *regset, |
| 888 | struct regcache *regcache, | 772 | struct regcache *regcache, |
| 889 | int regnum, const void *gregs) | 773 | int regnum, const void *gregs) |
| 890 | { | 774 | { |
| 891 | - unsigned int *regs = gregs; | 775 | - const unsigned int *regs = (const unsigned int *)gregs; |
| 892 | + const gdb_byte *regs = (const gdb_byte *) gregs; | 776 | + const gdb_byte *regs = (const gdb_byte *) gregs; |
| 893 | if (regnum >= 0) | 777 | if (regnum >= 0) |
| 894 | - regcache_raw_supply (regcache, regnum, regs + regnum); | 778 | regcache->raw_supply (regnum, regs + regnum); |
| 895 | + regcache->raw_supply (regnum, regs + regnum); | ||
| 896 | |||
| 897 | if (regnum == -1) { | ||
| 898 | int i; | ||
| 899 | 779 | ||
| 900 | for (i = 0; i < 50; i++) { | 780 | @@ -713,7 +826,6 @@ microblaze_iterate_over_regset_sections (struct gdbarch *gdbarch, |
| 901 | - regcache_raw_supply (regcache, i, regs + i); | ||
| 902 | + regcache->raw_supply (regnum, regs + i); | ||
| 903 | } | ||
| 904 | } | ||
| 905 | } | 781 | } |
| 906 | @@ -755,6 +873,17 @@ microblaze_regset_from_core_section (struct gdbarch *gdbarch, | ||
| 907 | } | ||
| 908 | |||
| 909 | 782 | ||
| 910 | +static void | ||
| 911 | +make_regs (struct gdbarch *arch) | ||
| 912 | +{ | ||
| 913 | + struct gdbarch_tdep *tdep = gdbarch_tdep (arch); | ||
| 914 | + int mach = gdbarch_bfd_arch_info (arch)->mach; | ||
| 915 | + | ||
| 916 | + if (mach == bfd_mach_microblaze64) | ||
| 917 | + { | ||
| 918 | + set_gdbarch_ptr_bit (arch, 64); | ||
| 919 | + } | ||
| 920 | +} | ||
| 921 | 783 | ||
| 784 | - | ||
| 922 | static struct gdbarch * | 785 | static struct gdbarch * |
| 923 | microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) | 786 | microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) |
| 924 | @@ -769,8 +898,15 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) | 787 | { |
| 788 | @@ -727,8 +839,15 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) | ||
| 925 | if (arches != NULL) | 789 | if (arches != NULL) |
| 926 | return arches->gdbarch; | 790 | return arches->gdbarch; |
| 927 | if (tdesc == NULL) | 791 | if (tdesc == NULL) |
| @@ -931,7 +795,7 @@ index 49713ea9b1..0605283c9e 100644 | |||
| 931 | + if (info.bfd_arch_info->mach == bfd_mach_microblaze64) | 795 | + if (info.bfd_arch_info->mach == bfd_mach_microblaze64) |
| 932 | + { | 796 | + { |
| 933 | + tdesc = tdesc_microblaze64; | 797 | + tdesc = tdesc_microblaze64; |
| 934 | + reg_size = 8; | 798 | + MICROBLAZE_REGISTER_SIZE = 8; |
| 935 | + } | 799 | + } |
| 936 | + else | 800 | + else |
| 937 | + tdesc = tdesc_microblaze; | 801 | + tdesc = tdesc_microblaze; |
| @@ -939,7 +803,7 @@ index 49713ea9b1..0605283c9e 100644 | |||
| 939 | /* Check any target description for validity. */ | 803 | /* Check any target description for validity. */ |
| 940 | if (tdesc_has_registers (tdesc)) | 804 | if (tdesc_has_registers (tdesc)) |
| 941 | { | 805 | { |
| 942 | @@ -778,27 +914,35 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) | 806 | @@ -736,27 +855,35 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) |
| 943 | int valid_p; | 807 | int valid_p; |
| 944 | int i; | 808 | int i; |
| 945 | 809 | ||
| @@ -980,7 +844,7 @@ index 49713ea9b1..0605283c9e 100644 | |||
| 980 | } | 844 | } |
| 981 | 845 | ||
| 982 | if (!valid_p) | 846 | if (!valid_p) |
| 983 | @@ -806,6 +950,7 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) | 847 | @@ -764,6 +891,7 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) |
| 984 | tdesc_data_cleanup (tdesc_data); | 848 | tdesc_data_cleanup (tdesc_data); |
| 985 | return NULL; | 849 | return NULL; |
| 986 | } | 850 | } |
| @@ -988,7 +852,7 @@ index 49713ea9b1..0605283c9e 100644 | |||
| 988 | } | 852 | } |
| 989 | 853 | ||
| 990 | /* Allocate space for the new architecture. */ | 854 | /* Allocate space for the new architecture. */ |
| 991 | @@ -825,7 +970,17 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) | 855 | @@ -783,7 +911,17 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) |
| 992 | /* Register numbers of various important registers. */ | 856 | /* Register numbers of various important registers. */ |
| 993 | set_gdbarch_sp_regnum (gdbarch, MICROBLAZE_SP_REGNUM); | 857 | set_gdbarch_sp_regnum (gdbarch, MICROBLAZE_SP_REGNUM); |
| 994 | set_gdbarch_pc_regnum (gdbarch, MICROBLAZE_PC_REGNUM); | 858 | set_gdbarch_pc_regnum (gdbarch, MICROBLAZE_PC_REGNUM); |
| @@ -1006,7 +870,7 @@ index 49713ea9b1..0605283c9e 100644 | |||
| 1006 | /* Map Dwarf2 registers to GDB registers. */ | 870 | /* Map Dwarf2 registers to GDB registers. */ |
| 1007 | set_gdbarch_dwarf2_reg_to_regnum (gdbarch, microblaze_dwarf2_reg_to_regnum); | 871 | set_gdbarch_dwarf2_reg_to_regnum (gdbarch, microblaze_dwarf2_reg_to_regnum); |
| 1008 | 872 | ||
| 1009 | @@ -845,13 +1000,15 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) | 873 | @@ -803,13 +941,15 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) |
| 1010 | microblaze_breakpoint::kind_from_pc); | 874 | microblaze_breakpoint::kind_from_pc); |
| 1011 | set_gdbarch_sw_breakpoint_from_kind (gdbarch, | 875 | set_gdbarch_sw_breakpoint_from_kind (gdbarch, |
| 1012 | microblaze_breakpoint::bp_from_kind); | 876 | microblaze_breakpoint::bp_from_kind); |
| @@ -1024,21 +888,7 @@ index 49713ea9b1..0605283c9e 100644 | |||
| 1024 | 888 | ||
| 1025 | frame_base_set_default (gdbarch, µblaze_frame_base); | 889 | frame_base_set_default (gdbarch, µblaze_frame_base); |
| 1026 | 890 | ||
| 1027 | @@ -866,11 +1023,11 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) | 891 | @@ -840,6 +980,8 @@ _initialize_microblaze_tdep (void) |
| 1028 | tdesc_use_registers (gdbarch, tdesc, tdesc_data); | ||
| 1029 | //frame_base_append_sniffer (gdbarch, microblaze_frame_sniffer); | ||
| 1030 | |||
| 1031 | - /* If we have register sets, enable the generic core file support. */ | ||
| 1032 | + /* If we have register sets, enable the generic core file support. | ||
| 1033 | if (tdep->gregset) { | ||
| 1034 | set_gdbarch_regset_from_core_section (gdbarch, | ||
| 1035 | microblaze_regset_from_core_section); | ||
| 1036 | - } | ||
| 1037 | + }*/ | ||
| 1038 | |||
| 1039 | return gdbarch; | ||
| 1040 | } | ||
| 1041 | @@ -882,6 +1039,8 @@ _initialize_microblaze_tdep (void) | ||
| 1042 | 892 | ||
| 1043 | initialize_tdesc_microblaze_with_stack_protect (); | 893 | initialize_tdesc_microblaze_with_stack_protect (); |
| 1044 | initialize_tdesc_microblaze (); | 894 | initialize_tdesc_microblaze (); |
| @@ -1048,7 +898,7 @@ index 49713ea9b1..0605283c9e 100644 | |||
| 1048 | add_setshow_zuinteger_cmd ("microblaze", class_maintenance, | 898 | add_setshow_zuinteger_cmd ("microblaze", class_maintenance, |
| 1049 | µblaze_debug_flag, _("\ | 899 | µblaze_debug_flag, _("\ |
| 1050 | diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h | 900 | diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h |
| 1051 | index 3777cbb6a8..55f5dd1962 100644 | 901 | index d2112dc07e1..bd03e969b9b 100644 |
| 1052 | --- a/gdb/microblaze-tdep.h | 902 | --- a/gdb/microblaze-tdep.h |
| 1053 | +++ b/gdb/microblaze-tdep.h | 903 | +++ b/gdb/microblaze-tdep.h |
| 1054 | @@ -27,7 +27,7 @@ struct microblaze_gregset | 904 | @@ -27,7 +27,7 @@ struct microblaze_gregset |
| @@ -1072,17 +922,18 @@ index 3777cbb6a8..55f5dd1962 100644 | |||
| 1072 | }; | 922 | }; |
| 1073 | 923 | ||
| 1074 | struct microblaze_frame_cache | 924 | struct microblaze_frame_cache |
| 1075 | @@ -128,7 +128,7 @@ struct microblaze_frame_cache | 925 | @@ -128,7 +128,8 @@ struct microblaze_frame_cache |
| 1076 | struct trad_frame_saved_reg *saved_regs; | 926 | struct trad_frame_saved_reg *saved_regs; |
| 1077 | }; | 927 | }; |
| 1078 | /* All registers are 32 bits. */ | 928 | /* All registers are 32 bits. */ |
| 1079 | -#define MICROBLAZE_REGISTER_SIZE 4 | 929 | -#define MICROBLAZE_REGISTER_SIZE 4 |
| 1080 | +//#define MICROBLAZE_REGISTER_SIZE 8 | 930 | +extern int microblaze_reg_size; |
| 931 | +#define MICROBLAZE_REGISTER_SIZE microblaze_reg_size | ||
| 1081 | 932 | ||
| 1082 | /* MICROBLAZE_BREAKPOINT defines the breakpoint that should be used. | 933 | /* MICROBLAZE_BREAKPOINT defines the breakpoint that should be used. |
| 1083 | Only used for native debugging. */ | 934 | Only used for native debugging. */ |
| 1084 | diff --git a/gdb/regformats/microblaze-with-stack-protect.dat b/gdb/regformats/microblaze-with-stack-protect.dat | 935 | diff --git a/gdb/regformats/microblaze-with-stack-protect.dat b/gdb/regformats/microblaze-with-stack-protect.dat |
| 1085 | index 8040a7b3fd..450e321d49 100644 | 936 | index 8040a7b3fd0..450e321d49e 100644 |
| 1086 | --- a/gdb/regformats/microblaze-with-stack-protect.dat | 937 | --- a/gdb/regformats/microblaze-with-stack-protect.dat |
| 1087 | +++ b/gdb/regformats/microblaze-with-stack-protect.dat | 938 | +++ b/gdb/regformats/microblaze-with-stack-protect.dat |
| 1088 | @@ -60,5 +60,5 @@ expedite:r1,rpc | 939 | @@ -60,5 +60,5 @@ expedite:r1,rpc |
| @@ -1093,18 +944,6 @@ index 8040a7b3fd..450e321d49 100644 | |||
| 1093 | -32:rshr | 944 | -32:rshr |
| 1094 | +32:slr | 945 | +32:slr |
| 1095 | +32:shr | 946 | +32:shr |
| 1096 | diff --git a/opcodes/microblaze-opc.h b/opcodes/microblaze-opc.h | ||
| 1097 | index bd9d91cd57..12d4456bc2 100644 | ||
| 1098 | --- a/opcodes/microblaze-opc.h | ||
| 1099 | +++ b/opcodes/microblaze-opc.h | ||
| 1100 | @@ -134,7 +134,6 @@ | ||
| 1101 | #define ORLI_MASK 0xA0000000 | ||
| 1102 | #define XORLI_MASK 0xA8000000 | ||
| 1103 | |||
| 1104 | - | ||
| 1105 | /* New Mask for msrset, msrclr insns. */ | ||
| 1106 | #define OPCODE_MASK_H23N 0xFC1F8000 /* High 6 and bits 11 - 16. */ | ||
| 1107 | /* Mask for mbar insn. */ | ||
| 1108 | -- | 947 | -- |
| 1109 | 2.17.1 | 948 | 2.17.1 |
| 1110 | 949 | ||
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0041-patch-MicroBlaze-porting-GDB-for-linux.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0041-patch-MicroBlaze-porting-GDB-for-linux.patch deleted file mode 100644 index 7d63e63e..00000000 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0041-patch-MicroBlaze-porting-GDB-for-linux.patch +++ /dev/null | |||
| @@ -1,155 +0,0 @@ | |||
| 1 | From 3f830717572e074a21840549b48265ec00d67bd1 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mahesh Bodapati <mbodapat@xilinx.com> | ||
| 3 | Date: Thu, 12 Dec 2019 14:56:17 +0530 | ||
| 4 | Subject: [PATCH 41/43] [patch,MicroBlaze] : porting GDB for linux | ||
| 5 | |||
| 6 | --- | ||
| 7 | gdb/features/microblaze-linux.xml | 12 ++++++++++ | ||
| 8 | gdb/gdbserver/Makefile.in | 2 ++ | ||
| 9 | gdb/gdbserver/configure.srv | 3 ++- | ||
| 10 | gdb/microblaze-linux-tdep.c | 39 ++++++++++++++++++++++++------- | ||
| 11 | 4 files changed, 47 insertions(+), 9 deletions(-) | ||
| 12 | create mode 100644 gdb/features/microblaze-linux.xml | ||
| 13 | |||
| 14 | diff --git a/gdb/features/microblaze-linux.xml b/gdb/features/microblaze-linux.xml | ||
| 15 | new file mode 100644 | ||
| 16 | index 0000000000..8983e66eb3 | ||
| 17 | --- /dev/null | ||
| 18 | +++ b/gdb/features/microblaze-linux.xml | ||
| 19 | @@ -0,0 +1,12 @@ | ||
| 20 | +<?xml version="1.0"?> | ||
| 21 | +<!-- Copyright (C) 2014-2018 Free Software Foundation, Inc. | ||
| 22 | + | ||
| 23 | + Copying and distribution of this file, with or without modification, | ||
| 24 | + are permitted in any medium without royalty provided the copyright | ||
| 25 | + notice and this notice are preserved. --> | ||
| 26 | + | ||
| 27 | +<!DOCTYPE target SYSTEM "gdb-target.dtd"> | ||
| 28 | +<target> | ||
| 29 | + <osabi>GNU/Linux</osabi> | ||
| 30 | + <xi:include href="microblaze-core.xml"/> | ||
| 31 | +</target> | ||
| 32 | diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in | ||
| 33 | index 73ca5fd7c5..f5d8663ec8 100644 | ||
| 34 | --- a/gdb/gdbserver/Makefile.in | ||
| 35 | +++ b/gdb/gdbserver/Makefile.in | ||
| 36 | @@ -639,6 +639,8 @@ common/%.o: ../common/%.c | ||
| 37 | |||
| 38 | %-generated.c: ../regformats/rs6000/%.dat | $(regdat_sh) | ||
| 39 | $(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@ | ||
| 40 | +microblaze-linux.c : $(srcdir)/../regformats/reg-microblaze.dat $(regdat_sh) | ||
| 41 | + $(ECHO_REGDAT) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-microblaze.dat microblaze-linux.c | ||
| 42 | |||
| 43 | # | ||
| 44 | # Dependency tracking. | ||
| 45 | diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv | ||
| 46 | index 201b7ae190..e5ed6498a8 100644 | ||
| 47 | --- a/gdb/gdbserver/configure.srv | ||
| 48 | +++ b/gdb/gdbserver/configure.srv | ||
| 49 | @@ -210,8 +210,9 @@ case "${target}" in | ||
| 50 | srv_linux_usrregs=yes | ||
| 51 | srv_linux_thread_db=yes | ||
| 52 | ;; | ||
| 53 | - microblaze*-*-linux*) srv_regobj=microblaze-linux.o | ||
| 54 | + microblaze*-*-linux*) srv_regobj="microblaze-linux.o" | ||
| 55 | srv_tgtobj="$srv_linux_obj linux-microblaze-low.o " | ||
| 56 | + srv_xmlfiles="microblaze-linux.xml" | ||
| 57 | srv_linux_regsets=yes | ||
| 58 | srv_linux_usrregs=yes | ||
| 59 | srv_linux_thread_db=yes | ||
| 60 | diff --git a/gdb/microblaze-linux-tdep.c b/gdb/microblaze-linux-tdep.c | ||
| 61 | index 011e513941..e3d2a7508d 100644 | ||
| 62 | --- a/gdb/microblaze-linux-tdep.c | ||
| 63 | +++ b/gdb/microblaze-linux-tdep.c | ||
| 64 | @@ -41,7 +41,7 @@ | ||
| 65 | |||
| 66 | #ifndef REGSET_H | ||
| 67 | #define REGSET_H 1 | ||
| 68 | - | ||
| 69 | +int MICROBLAZE_REGISTER_SIZE=4; | ||
| 70 | struct gdbarch; | ||
| 71 | struct regcache; | ||
| 72 | |||
| 73 | @@ -115,7 +115,7 @@ microblaze_debug (const char *fmt, ...) | ||
| 74 | va_end (args); | ||
| 75 | } | ||
| 76 | } | ||
| 77 | - | ||
| 78 | +#if 0 | ||
| 79 | static int | ||
| 80 | microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, | ||
| 81 | struct bp_target_info *bp_tgt) | ||
| 82 | @@ -131,7 +131,7 @@ microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, | ||
| 83 | bp = gdbarch_breakpoint_from_pc (gdbarch, &addr, &bplen); | ||
| 84 | |||
| 85 | /* Make sure we see the memory breakpoints. */ | ||
| 86 | - cleanup = make_show_memory_breakpoints_cleanup (1); | ||
| 87 | + cleanup = make_scoped_restore_show_memory_breakpoints (1); | ||
| 88 | val = target_read_memory (addr, old_contents, bplen); | ||
| 89 | |||
| 90 | /* If our breakpoint is no longer at the address, this means that the | ||
| 91 | @@ -146,6 +146,7 @@ microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch, | ||
| 92 | do_cleanups (cleanup); | ||
| 93 | return val; | ||
| 94 | } | ||
| 95 | +#endif | ||
| 96 | |||
| 97 | static void | ||
| 98 | microblaze_linux_sigtramp_cache (struct frame_info *next_frame, | ||
| 99 | @@ -248,8 +249,8 @@ microblaze_linux_init_abi (struct gdbarch_info info, | ||
| 100 | |||
| 101 | linux_init_abi (info, gdbarch); | ||
| 102 | |||
| 103 | - set_gdbarch_memory_remove_breakpoint (gdbarch, | ||
| 104 | - microblaze_linux_memory_remove_breakpoint); | ||
| 105 | +// set_gdbarch_memory_remove_breakpoint (gdbarch, | ||
| 106 | +// microblaze_linux_memory_remove_breakpoint); | ||
| 107 | |||
| 108 | /* Shared library handling. */ | ||
| 109 | set_solib_svr4_fetch_link_map_offsets (gdbarch, | ||
| 110 | @@ -261,10 +262,30 @@ microblaze_linux_init_abi (struct gdbarch_info info, | ||
| 111 | |||
| 112 | /* BFD target for core files. */ | ||
| 113 | if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) | ||
| 114 | - set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblaze"); | ||
| 115 | + { | ||
| 116 | + if (info.bfd_arch_info->mach == bfd_mach_microblaze64) { | ||
| 117 | + set_gdbarch_gcore_bfd_target (gdbarch, "elf64-microblaze"); | ||
| 118 | + MICROBLAZE_REGISTER_SIZE=8; | ||
| 119 | + } | ||
| 120 | + else | ||
| 121 | + set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblaze"); | ||
| 122 | + } | ||
| 123 | else | ||
| 124 | - set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblazeel"); | ||
| 125 | + { | ||
| 126 | + if (info.bfd_arch_info->mach == bfd_mach_microblaze64) { | ||
| 127 | + set_gdbarch_gcore_bfd_target (gdbarch, "elf64-microblazeel"); | ||
| 128 | + MICROBLAZE_REGISTER_SIZE=8; | ||
| 129 | + } | ||
| 130 | + else | ||
| 131 | + set_gdbarch_gcore_bfd_target (gdbarch, "elf32-microblazeel"); | ||
| 132 | + } | ||
| 133 | |||
| 134 | + switch (info.bfd_arch_info->mach) | ||
| 135 | + { | ||
| 136 | + case bfd_mach_microblaze64: | ||
| 137 | + set_gdbarch_ptr_bit (gdbarch, 64); | ||
| 138 | + break; | ||
| 139 | + } | ||
| 140 | |||
| 141 | /* Shared library handling. */ | ||
| 142 | set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); | ||
| 143 | @@ -278,6 +299,8 @@ microblaze_linux_init_abi (struct gdbarch_info info, | ||
| 144 | void | ||
| 145 | _initialize_microblaze_linux_tdep (void) | ||
| 146 | { | ||
| 147 | - gdbarch_register_osabi (bfd_arch_microblaze, 0, GDB_OSABI_LINUX, | ||
| 148 | + gdbarch_register_osabi (bfd_arch_microblaze, bfd_mach_microblaze, GDB_OSABI_LINUX, | ||
| 149 | + microblaze_linux_init_abi); | ||
| 150 | + gdbarch_register_osabi (bfd_arch_microblaze, bfd_mach_microblaze64, GDB_OSABI_LINUX, | ||
| 151 | microblaze_linux_init_abi); | ||
| 152 | } | ||
| 153 | -- | ||
| 154 | 2.17.1 | ||
| 155 | |||
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0042-Correcting-the-register-names-from-slr-shr-to-rslr-r.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0042-Correcting-the-register-names-from-slr-shr-to-rslr-r.patch deleted file mode 100644 index 06e63f3c..00000000 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0042-Correcting-the-register-names-from-slr-shr-to-rslr-r.patch +++ /dev/null | |||
| @@ -1,146 +0,0 @@ | |||
| 1 | From 746453e0f35fd669cfacabfe223b8e7007a99797 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Nagaraju <nmekala@xilinx.com> | ||
| 3 | Date: Thu, 19 Dec 2019 12:22:04 +0530 | ||
| 4 | Subject: [PATCH 42/43] Correcting the register names from slr & shr to rslr & | ||
| 5 | rshr | ||
| 6 | |||
| 7 | --- | ||
| 8 | gdb/features/microblaze-core.xml | 4 ++-- | ||
| 9 | gdb/features/microblaze-stack-protect.xml | 4 ++-- | ||
| 10 | gdb/features/microblaze-with-stack-protect.c | 4 ++-- | ||
| 11 | gdb/features/microblaze.c | 4 ++-- | ||
| 12 | gdb/features/microblaze64-core.xml | 4 ++-- | ||
| 13 | gdb/features/microblaze64-stack-protect.xml | 4 ++-- | ||
| 14 | gdb/features/microblaze64-with-stack-protect.c | 4 ++-- | ||
| 15 | gdb/features/microblaze64.c | 4 ++-- | ||
| 16 | gdb/microblaze-tdep.c | 2 +- | ||
| 17 | 9 files changed, 17 insertions(+), 17 deletions(-) | ||
| 18 | |||
| 19 | diff --git a/gdb/features/microblaze-core.xml b/gdb/features/microblaze-core.xml | ||
| 20 | index 5bc3e49f84..6f73f4eb84 100644 | ||
| 21 | --- a/gdb/features/microblaze-core.xml | ||
| 22 | +++ b/gdb/features/microblaze-core.xml | ||
| 23 | @@ -64,6 +64,6 @@ | ||
| 24 | <reg name="rtlbsx" bitsize="32"/> | ||
| 25 | <reg name="rtlblo" bitsize="32"/> | ||
| 26 | <reg name="rtlbhi" bitsize="32"/> | ||
| 27 | - <reg name="slr" bitsize="32"/> | ||
| 28 | - <reg name="shr" bitsize="32"/> | ||
| 29 | + <reg name="rslr" bitsize="32"/> | ||
| 30 | + <reg name="rshr" bitsize="32"/> | ||
| 31 | </feature> | ||
| 32 | diff --git a/gdb/features/microblaze-stack-protect.xml b/gdb/features/microblaze-stack-protect.xml | ||
| 33 | index a7f27b903c..870c148bb0 100644 | ||
| 34 | --- a/gdb/features/microblaze-stack-protect.xml | ||
| 35 | +++ b/gdb/features/microblaze-stack-protect.xml | ||
| 36 | @@ -7,6 +7,6 @@ | ||
| 37 | |||
| 38 | <!DOCTYPE feature SYSTEM "gdb-target.dtd"> | ||
| 39 | <feature name="org.gnu.gdb.microblaze.stack-protect"> | ||
| 40 | - <reg name="slr" bitsize="32"/> | ||
| 41 | - <reg name="shr" bitsize="32"/> | ||
| 42 | + <reg name="rslr" bitsize="32"/> | ||
| 43 | + <reg name="rshr" bitsize="32"/> | ||
| 44 | </feature> | ||
| 45 | diff --git a/gdb/features/microblaze-with-stack-protect.c b/gdb/features/microblaze-with-stack-protect.c | ||
| 46 | index 609934e2b4..ab162fd258 100644 | ||
| 47 | --- a/gdb/features/microblaze-with-stack-protect.c | ||
| 48 | +++ b/gdb/features/microblaze-with-stack-protect.c | ||
| 49 | @@ -72,8 +72,8 @@ initialize_tdesc_microblaze_with_stack_protect (void) | ||
| 50 | tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); | ||
| 51 | |||
| 52 | feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.stack-protect"); | ||
| 53 | - tdesc_create_reg (feature, "slr", 57, 1, NULL, 32, "int"); | ||
| 54 | - tdesc_create_reg (feature, "shr", 58, 1, NULL, 32, "int"); | ||
| 55 | + tdesc_create_reg (feature, "rslr", 57, 1, NULL, 32, "int"); | ||
| 56 | + tdesc_create_reg (feature, "rshr", 58, 1, NULL, 32, "int"); | ||
| 57 | |||
| 58 | tdesc_microblaze_with_stack_protect = result; | ||
| 59 | } | ||
| 60 | diff --git a/gdb/features/microblaze.c b/gdb/features/microblaze.c | ||
| 61 | index ceb98ca8b8..7919ac96e6 100644 | ||
| 62 | --- a/gdb/features/microblaze.c | ||
| 63 | +++ b/gdb/features/microblaze.c | ||
| 64 | @@ -70,8 +70,8 @@ initialize_tdesc_microblaze (void) | ||
| 65 | tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int"); | ||
| 66 | tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int"); | ||
| 67 | tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); | ||
| 68 | - tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64"); | ||
| 69 | - tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64"); | ||
| 70 | + tdesc_create_reg (feature, "rslr", 57, 1, NULL, 64, "uint64"); | ||
| 71 | + tdesc_create_reg (feature, "rshr", 58, 1, NULL, 64, "uint64"); | ||
| 72 | |||
| 73 | tdesc_microblaze = result; | ||
| 74 | } | ||
| 75 | diff --git a/gdb/features/microblaze64-core.xml b/gdb/features/microblaze64-core.xml | ||
| 76 | index 96e99e2fb2..b9adadfade 100644 | ||
| 77 | --- a/gdb/features/microblaze64-core.xml | ||
| 78 | +++ b/gdb/features/microblaze64-core.xml | ||
| 79 | @@ -64,6 +64,6 @@ | ||
| 80 | <reg name="rtlbsx" bitsize="32"/> | ||
| 81 | <reg name="rtlblo" bitsize="32"/> | ||
| 82 | <reg name="rtlbhi" bitsize="32"/> | ||
| 83 | - <reg name="slr" bitsize="64"/> | ||
| 84 | - <reg name="shr" bitsize="64"/> | ||
| 85 | + <reg name="rslr" bitsize="64"/> | ||
| 86 | + <reg name="rshr" bitsize="64"/> | ||
| 87 | </feature> | ||
| 88 | diff --git a/gdb/features/microblaze64-stack-protect.xml b/gdb/features/microblaze64-stack-protect.xml | ||
| 89 | index 1bbf5fc3ce..9d7ea8b9fd 100644 | ||
| 90 | --- a/gdb/features/microblaze64-stack-protect.xml | ||
| 91 | +++ b/gdb/features/microblaze64-stack-protect.xml | ||
| 92 | @@ -7,6 +7,6 @@ | ||
| 93 | |||
| 94 | <!DOCTYPE feature SYSTEM "gdb-target.dtd"> | ||
| 95 | <feature name="org.gnu.gdb.microblaze64.stack-protect"> | ||
| 96 | - <reg name="slr" bitsize="64"/> | ||
| 97 | - <reg name="shr" bitsize="64"/> | ||
| 98 | + <reg name="rslr" bitsize="64"/> | ||
| 99 | + <reg name="rshr" bitsize="64"/> | ||
| 100 | </feature> | ||
| 101 | diff --git a/gdb/features/microblaze64-with-stack-protect.c b/gdb/features/microblaze64-with-stack-protect.c | ||
| 102 | index f448c9a749..249cb534da 100644 | ||
| 103 | --- a/gdb/features/microblaze64-with-stack-protect.c | ||
| 104 | +++ b/gdb/features/microblaze64-with-stack-protect.c | ||
| 105 | @@ -72,8 +72,8 @@ initialize_tdesc_microblaze64_with_stack_protect (void) | ||
| 106 | tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); | ||
| 107 | |||
| 108 | feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze64.stack-protect"); | ||
| 109 | - tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64"); | ||
| 110 | - tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64"); | ||
| 111 | + tdesc_create_reg (feature, "rslr", 57, 1, NULL, 64, "uint64"); | ||
| 112 | + tdesc_create_reg (feature, "rshr", 58, 1, NULL, 64, "uint64"); | ||
| 113 | |||
| 114 | tdesc_microblaze64_with_stack_protect = result; | ||
| 115 | } | ||
| 116 | diff --git a/gdb/features/microblaze64.c b/gdb/features/microblaze64.c | ||
| 117 | index 1aa37c4512..5d3e2c8cd9 100644 | ||
| 118 | --- a/gdb/features/microblaze64.c | ||
| 119 | +++ b/gdb/features/microblaze64.c | ||
| 120 | @@ -70,8 +70,8 @@ initialize_tdesc_microblaze64 (void) | ||
| 121 | tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int"); | ||
| 122 | tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int"); | ||
| 123 | tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); | ||
| 124 | - tdesc_create_reg (feature, "slr", 57, 1, NULL, 64, "uint64"); | ||
| 125 | - tdesc_create_reg (feature, "shr", 58, 1, NULL, 64, "uint64"); | ||
| 126 | + tdesc_create_reg (feature, "rslr", 57, 1, NULL, 64, "uint64"); | ||
| 127 | + tdesc_create_reg (feature, "rshr", 58, 1, NULL, 64, "uint64"); | ||
| 128 | |||
| 129 | tdesc_microblaze64 = result; | ||
| 130 | } | ||
| 131 | diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c | ||
| 132 | index 0605283c9e..7a0c2527f4 100644 | ||
| 133 | --- a/gdb/microblaze-tdep.c | ||
| 134 | +++ b/gdb/microblaze-tdep.c | ||
| 135 | @@ -77,7 +77,7 @@ static const char *microblaze_register_names[] = | ||
| 136 | "rpvr0", "rpvr1", "rpvr2", "rpvr3", "rpvr4", "rpvr5", "rpvr6", | ||
| 137 | "rpvr7", "rpvr8", "rpvr9", "rpvr10", "rpvr11", | ||
| 138 | "redr", "rpid", "rzpr", "rtlbx", "rtlbsx", "rtlblo", "rtlbhi", | ||
| 139 | - "slr", "shr" | ||
| 140 | + "rslr", "rshr" | ||
| 141 | }; | ||
| 142 | |||
| 143 | #define MICROBLAZE_NUM_REGS ARRAY_SIZE (microblaze_register_names) | ||
| 144 | -- | ||
| 145 | 2.17.1 | ||
| 146 | |||
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0043-Removing-the-header-gdb_assert.h-from-MB-target-file.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0043-Removing-the-header-gdb_assert.h-from-MB-target-file.patch deleted file mode 100644 index 0b6cae62..00000000 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0043-Removing-the-header-gdb_assert.h-from-MB-target-file.patch +++ /dev/null | |||
| @@ -1,24 +0,0 @@ | |||
| 1 | From 8cb6a265c2108ff7117c07e106604b46238c6ae7 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Nagaraju <nmekala@xilinx.com> | ||
| 3 | Date: Fri, 17 Jan 2020 15:45:48 +0530 | ||
| 4 | Subject: [PATCH 43/43] Removing the header "gdb_assert.h" from MB target file | ||
| 5 | |||
| 6 | --- | ||
| 7 | gdb/microblaze-linux-tdep.c | 1 - | ||
| 8 | 1 file changed, 1 deletion(-) | ||
| 9 | |||
| 10 | diff --git a/gdb/microblaze-linux-tdep.c b/gdb/microblaze-linux-tdep.c | ||
| 11 | index e3d2a7508d..5ef937219c 100644 | ||
| 12 | --- a/gdb/microblaze-linux-tdep.c | ||
| 13 | +++ b/gdb/microblaze-linux-tdep.c | ||
| 14 | @@ -37,7 +37,6 @@ | ||
| 15 | #include "linux-tdep.h" | ||
| 16 | #include "glibc-tdep.h" | ||
| 17 | |||
| 18 | -#include "gdb_assert.h" | ||
| 19 | |||
| 20 | #ifndef REGSET_H | ||
| 21 | #define REGSET_H 1 | ||
| 22 | -- | ||
| 23 | 2.17.1 | ||
| 24 | |||
diff --git a/meta-microblaze/recipes-devtools/gdb/gdb/0044-gdb-microblaze-linux-nat.c-Fix-target-compilation-of.patch b/meta-microblaze/recipes-devtools/gdb/gdb/0044-gdb-microblaze-linux-nat.c-Fix-target-compilation-of.patch deleted file mode 100644 index ace6aabd..00000000 --- a/meta-microblaze/recipes-devtools/gdb/gdb/0044-gdb-microblaze-linux-nat.c-Fix-target-compilation-of.patch +++ /dev/null | |||
| @@ -1,363 +0,0 @@ | |||
| 1 | From 8d75e232d3513a184180d797ef20bf53d3543fa7 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mark Hatle <mark.hatle@xilinx.com> | ||
| 3 | Date: Mon, 20 Jan 2020 12:48:13 -0800 | ||
| 4 | Subject: [PATCH] gdb/microblaze-linux-nat.c: Fix target compilation of gdb | ||
| 5 | |||
| 6 | Add the nat to the configure file | ||
| 7 | |||
| 8 | Remove gdb_assert.h and gdb_string.h. | ||
| 9 | |||
| 10 | Adjust include for opcodes as well. | ||
| 11 | |||
| 12 | Update to match latest style of components, similar to ppc-linux-nat.c | ||
| 13 | |||
| 14 | Update: | ||
| 15 | get_regcache_arch(regcache) to regcache->arch() | ||
| 16 | regcache_raw_supply(regcache, ...) to regcache->raw_supply(...) | ||
| 17 | regcache_raw_collect(regcache, ...) to regcache->raw_collect(...) | ||
| 18 | |||
| 19 | Signed-off-by: Mark Hatle <mark.hatle@xilinx.com> | ||
| 20 | --- | ||
| 21 | gdb/configure.nat | 4 + | ||
| 22 | gdb/microblaze-linux-nat.c | 149 +++++++++++++------------------------ | ||
| 23 | gdb/microblaze-tdep.c | 3 +- | ||
| 24 | 3 files changed, 57 insertions(+), 99 deletions(-) | ||
| 25 | |||
| 26 | diff --git a/gdb/configure.nat b/gdb/configure.nat | ||
| 27 | index 64ee101d83..f0f6c2f5bc 100644 | ||
| 28 | --- a/gdb/configure.nat | ||
| 29 | +++ b/gdb/configure.nat | ||
| 30 | @@ -261,6 +261,10 @@ case ${gdb_host} in | ||
| 31 | # Host: Motorola m68k running GNU/Linux. | ||
| 32 | NATDEPFILES="${NATDEPFILES} m68k-linux-nat.o" | ||
| 33 | ;; | ||
| 34 | + microblaze*) | ||
| 35 | + # Host: Microblaze, running Linux | ||
| 36 | + NATDEPFILES="${NATDEPFILES} microblaze-linux-nat.o" | ||
| 37 | + ;; | ||
| 38 | mips) | ||
| 39 | # Host: Linux/MIPS | ||
| 40 | NATDEPFILES="${NATDEPFILES} linux-nat-trad.o \ | ||
| 41 | diff --git a/gdb/microblaze-linux-nat.c b/gdb/microblaze-linux-nat.c | ||
| 42 | index e9b8c9c522..e09a86bb3f 100644 | ||
| 43 | --- a/gdb/microblaze-linux-nat.c | ||
| 44 | +++ b/gdb/microblaze-linux-nat.c | ||
| 45 | @@ -36,11 +36,9 @@ | ||
| 46 | #include "dwarf2-frame.h" | ||
| 47 | #include "osabi.h" | ||
| 48 | |||
| 49 | -#include "gdb_assert.h" | ||
| 50 | -#include "gdb_string.h" | ||
| 51 | #include "target-descriptions.h" | ||
| 52 | -#include "opcodes/microblaze-opcm.h" | ||
| 53 | -#include "opcodes/microblaze-dis.h" | ||
| 54 | +#include "../opcodes/microblaze-opcm.h" | ||
| 55 | +#include "../opcodes/microblaze-dis.h" | ||
| 56 | |||
| 57 | #include "linux-nat.h" | ||
| 58 | #include "target-descriptions.h" | ||
| 59 | @@ -61,34 +59,27 @@ | ||
| 60 | /* Defines ps_err_e, struct ps_prochandle. */ | ||
| 61 | #include "gdb_proc_service.h" | ||
| 62 | |||
| 63 | -/* On GNU/Linux, threads are implemented as pseudo-processes, in which | ||
| 64 | - case we may be tracing more than one process at a time. In that | ||
| 65 | - case, inferior_ptid will contain the main process ID and the | ||
| 66 | - individual thread (process) ID. get_thread_id () is used to get | ||
| 67 | - the thread id if it's available, and the process id otherwise. */ | ||
| 68 | - | ||
| 69 | -int | ||
| 70 | -get_thread_id (ptid_t ptid) | ||
| 71 | -{ | ||
| 72 | - int tid = TIDGET (ptid); | ||
| 73 | - if (0 == tid) | ||
| 74 | - tid = PIDGET (ptid); | ||
| 75 | - return tid; | ||
| 76 | -} | ||
| 77 | - | ||
| 78 | -#define GET_THREAD_ID(PTID) get_thread_id (PTID) | ||
| 79 | - | ||
| 80 | /* Non-zero if our kernel may support the PTRACE_GETREGS and | ||
| 81 | PTRACE_SETREGS requests, for reading and writing the | ||
| 82 | general-purpose registers. Zero if we've tried one of | ||
| 83 | them and gotten an error. */ | ||
| 84 | int have_ptrace_getsetregs = 1; | ||
| 85 | |||
| 86 | +struct microblaze_linux_nat_target final : public linux_nat_target | ||
| 87 | +{ | ||
| 88 | + /* Add our register access methods. */ | ||
| 89 | + void fetch_registers (struct regcache *, int) override; | ||
| 90 | + void store_registers (struct regcache *, int) override; | ||
| 91 | + | ||
| 92 | + const struct target_desc *read_description () override; | ||
| 93 | +}; | ||
| 94 | + | ||
| 95 | +static microblaze_linux_nat_target the_microblaze_linux_nat_target; | ||
| 96 | + | ||
| 97 | static int | ||
| 98 | microblaze_register_u_addr (struct gdbarch *gdbarch, int regno) | ||
| 99 | { | ||
| 100 | int u_addr = -1; | ||
| 101 | - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); | ||
| 102 | /* NOTE: cagney/2003-11-25: This is the word size used by the ptrace | ||
| 103 | interface, and not the wordsize of the program's ABI. */ | ||
| 104 | int wordsize = sizeof (long); | ||
| 105 | @@ -105,18 +96,16 @@ microblaze_register_u_addr (struct gdbarch *gdbarch, int regno) | ||
| 106 | static void | ||
| 107 | fetch_register (struct regcache *regcache, int tid, int regno) | ||
| 108 | { | ||
| 109 | - struct gdbarch *gdbarch = get_regcache_arch (regcache); | ||
| 110 | - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); | ||
| 111 | + struct gdbarch *gdbarch = regcache->arch(); | ||
| 112 | /* This isn't really an address. But ptrace thinks of it as one. */ | ||
| 113 | CORE_ADDR regaddr = microblaze_register_u_addr (gdbarch, regno); | ||
| 114 | int bytes_transferred; | ||
| 115 | - unsigned int offset; /* Offset of registers within the u area. */ | ||
| 116 | - char buf[MAX_REGISTER_SIZE]; | ||
| 117 | + char buf[sizeof(long)]; | ||
| 118 | |||
| 119 | if (regaddr == -1) | ||
| 120 | { | ||
| 121 | memset (buf, '\0', register_size (gdbarch, regno)); /* Supply zeroes */ | ||
| 122 | - regcache_raw_supply (regcache, regno, buf); | ||
| 123 | + regcache->raw_supply (regno, buf); | ||
| 124 | return; | ||
| 125 | } | ||
| 126 | |||
| 127 | @@ -149,14 +138,14 @@ fetch_register (struct regcache *regcache, int tid, int regno) | ||
| 128 | { | ||
| 129 | /* Little-endian values are always found at the left end of the | ||
| 130 | bytes transferred. */ | ||
| 131 | - regcache_raw_supply (regcache, regno, buf); | ||
| 132 | + regcache->raw_supply (regno, buf); | ||
| 133 | } | ||
| 134 | else if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) | ||
| 135 | { | ||
| 136 | /* Big-endian values are found at the right end of the bytes | ||
| 137 | transferred. */ | ||
| 138 | size_t padding = (bytes_transferred - register_size (gdbarch, regno)); | ||
| 139 | - regcache_raw_supply (regcache, regno, buf + padding); | ||
| 140 | + regcache->raw_supply (regno, buf + padding); | ||
| 141 | } | ||
| 142 | else | ||
| 143 | internal_error (__FILE__, __LINE__, | ||
| 144 | @@ -175,8 +164,6 @@ fetch_register (struct regcache *regcache, int tid, int regno) | ||
| 145 | static int | ||
| 146 | fetch_all_gp_regs (struct regcache *regcache, int tid) | ||
| 147 | { | ||
| 148 | - struct gdbarch *gdbarch = get_regcache_arch (regcache); | ||
| 149 | - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); | ||
| 150 | gdb_gregset_t gregset; | ||
| 151 | |||
| 152 | if (ptrace (PTRACE_GETREGS, tid, 0, (void *) &gregset) < 0) | ||
| 153 | @@ -204,8 +191,6 @@ fetch_all_gp_regs (struct regcache *regcache, int tid) | ||
| 154 | static void | ||
| 155 | fetch_gp_regs (struct regcache *regcache, int tid) | ||
| 156 | { | ||
| 157 | - struct gdbarch *gdbarch = get_regcache_arch (regcache); | ||
| 158 | - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); | ||
| 159 | int i; | ||
| 160 | |||
| 161 | if (have_ptrace_getsetregs) | ||
| 162 | @@ -219,17 +204,29 @@ fetch_gp_regs (struct regcache *regcache, int tid) | ||
| 163 | fetch_register (regcache, tid, i); | ||
| 164 | } | ||
| 165 | |||
| 166 | +/* Fetch registers from the child process. Fetch all registers if | ||
| 167 | + regno == -1, otherwise fetch all general registers or all floating | ||
| 168 | + point registers depending upon the value of regno. */ | ||
| 169 | +void | ||
| 170 | +microblaze_linux_nat_target::fetch_registers (struct regcache *regcache, int regno) | ||
| 171 | +{ | ||
| 172 | + pid_t tid = get_ptrace_pid (regcache->ptid ()); | ||
| 173 | + | ||
| 174 | + if (regno == -1) | ||
| 175 | + fetch_gp_regs (regcache, tid); | ||
| 176 | + else | ||
| 177 | + fetch_register (regcache, tid, regno); | ||
| 178 | +} | ||
| 179 | |||
| 180 | static void | ||
| 181 | store_register (const struct regcache *regcache, int tid, int regno) | ||
| 182 | { | ||
| 183 | - struct gdbarch *gdbarch = get_regcache_arch (regcache); | ||
| 184 | - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); | ||
| 185 | + struct gdbarch *gdbarch = regcache->arch(); | ||
| 186 | /* This isn't really an address. But ptrace thinks of it as one. */ | ||
| 187 | CORE_ADDR regaddr = microblaze_register_u_addr (gdbarch, regno); | ||
| 188 | int i; | ||
| 189 | size_t bytes_to_transfer; | ||
| 190 | - char buf[MAX_REGISTER_SIZE]; | ||
| 191 | + char buf[sizeof(long)]; | ||
| 192 | |||
| 193 | if (regaddr == -1) | ||
| 194 | return; | ||
| 195 | @@ -242,13 +239,13 @@ store_register (const struct regcache *regcache, int tid, int regno) | ||
| 196 | if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE) | ||
| 197 | { | ||
| 198 | /* Little-endian values always sit at the left end of the buffer. */ | ||
| 199 | - regcache_raw_collect (regcache, regno, buf); | ||
| 200 | + regcache->raw_collect (regno, buf); | ||
| 201 | } | ||
| 202 | else if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) | ||
| 203 | { | ||
| 204 | /* Big-endian values sit at the right end of the buffer. */ | ||
| 205 | size_t padding = (bytes_to_transfer - register_size (gdbarch, regno)); | ||
| 206 | - regcache_raw_collect (regcache, regno, buf + padding); | ||
| 207 | + regcache->raw_collect (regno, buf + padding); | ||
| 208 | } | ||
| 209 | |||
| 210 | for (i = 0; i < bytes_to_transfer; i += sizeof (long)) | ||
| 211 | @@ -281,8 +278,6 @@ store_register (const struct regcache *regcache, int tid, int regno) | ||
| 212 | static int | ||
| 213 | store_all_gp_regs (const struct regcache *regcache, int tid, int regno) | ||
| 214 | { | ||
| 215 | - struct gdbarch *gdbarch = get_regcache_arch (regcache); | ||
| 216 | - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); | ||
| 217 | gdb_gregset_t gregset; | ||
| 218 | |||
| 219 | if (ptrace (PTRACE_GETREGS, tid, 0, (void *) &gregset) < 0) | ||
| 220 | @@ -319,8 +314,6 @@ store_all_gp_regs (const struct regcache *regcache, int tid, int regno) | ||
| 221 | static void | ||
| 222 | store_gp_regs (const struct regcache *regcache, int tid, int regno) | ||
| 223 | { | ||
| 224 | - struct gdbarch *gdbarch = get_regcache_arch (regcache); | ||
| 225 | - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); | ||
| 226 | int i; | ||
| 227 | |||
| 228 | if (have_ptrace_getsetregs) | ||
| 229 | @@ -335,33 +328,10 @@ store_gp_regs (const struct regcache *regcache, int tid, int regno) | ||
| 230 | } | ||
| 231 | |||
| 232 | |||
| 233 | -/* Fetch registers from the child process. Fetch all registers if | ||
| 234 | - regno == -1, otherwise fetch all general registers or all floating | ||
| 235 | - point registers depending upon the value of regno. */ | ||
| 236 | - | ||
| 237 | -static void | ||
| 238 | -microblaze_linux_fetch_inferior_registers (struct target_ops *ops, | ||
| 239 | - struct regcache *regcache, int regno) | ||
| 240 | -{ | ||
| 241 | - /* Get the thread id for the ptrace call. */ | ||
| 242 | - int tid = GET_THREAD_ID (inferior_ptid); | ||
| 243 | - | ||
| 244 | - if (regno == -1) | ||
| 245 | - fetch_gp_regs (regcache, tid); | ||
| 246 | - else | ||
| 247 | - fetch_register (regcache, tid, regno); | ||
| 248 | -} | ||
| 249 | - | ||
| 250 | -/* Store registers back into the inferior. Store all registers if | ||
| 251 | - regno == -1, otherwise store all general registers or all floating | ||
| 252 | - point registers depending upon the value of regno. */ | ||
| 253 | - | ||
| 254 | -static void | ||
| 255 | -microblaze_linux_store_inferior_registers (struct target_ops *ops, | ||
| 256 | - struct regcache *regcache, int regno) | ||
| 257 | +void | ||
| 258 | +microblaze_linux_nat_target::store_registers (struct regcache *regcache, int regno) | ||
| 259 | { | ||
| 260 | - /* Get the thread id for the ptrace call. */ | ||
| 261 | - int tid = GET_THREAD_ID (inferior_ptid); | ||
| 262 | + pid_t tid = get_ptrace_pid (regcache->ptid ()); | ||
| 263 | |||
| 264 | if (regno >= 0) | ||
| 265 | store_register (regcache, tid, regno); | ||
| 266 | @@ -373,59 +343,44 @@ microblaze_linux_store_inferior_registers (struct target_ops *ops, | ||
| 267 | thread debugging. */ | ||
| 268 | |||
| 269 | void | ||
| 270 | -fill_gregset (const struct regcache *regcache, | ||
| 271 | - gdb_gregset_t *gregsetp, int regno) | ||
| 272 | +supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregsetp) | ||
| 273 | { | ||
| 274 | - microblaze_collect_gregset (NULL, regcache, regno, gregsetp); | ||
| 275 | + microblaze_supply_gregset (NULL, regcache, -1, gregsetp); | ||
| 276 | } | ||
| 277 | |||
| 278 | void | ||
| 279 | -supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregsetp) | ||
| 280 | +fill_gregset (const struct regcache *regcache, | ||
| 281 | + gdb_gregset_t *gregsetp, int regno) | ||
| 282 | { | ||
| 283 | - microblaze_supply_gregset (NULL, regcache, -1, gregsetp); | ||
| 284 | + microblaze_collect_gregset (NULL, regcache, regno, gregsetp); | ||
| 285 | } | ||
| 286 | |||
| 287 | void | ||
| 288 | -fill_fpregset (const struct regcache *regcache, | ||
| 289 | - gdb_fpregset_t *fpregsetp, int regno) | ||
| 290 | +supply_fpregset (struct regcache *regcache, const gdb_fpregset_t *fpregsetp) | ||
| 291 | { | ||
| 292 | /* FIXME. */ | ||
| 293 | + return; | ||
| 294 | } | ||
| 295 | |||
| 296 | void | ||
| 297 | -supply_fpregset (struct regcache *regcache, const gdb_fpregset_t *fpregsetp) | ||
| 298 | +fill_fpregset (const struct regcache *regcache, | ||
| 299 | + gdb_fpregset_t *fpregsetp, int regno) | ||
| 300 | { | ||
| 301 | /* FIXME. */ | ||
| 302 | + return; | ||
| 303 | } | ||
| 304 | |||
| 305 | -static const struct target_desc * | ||
| 306 | -microblaze_linux_read_description (struct target_ops *ops) | ||
| 307 | +const struct target_desc * | ||
| 308 | +microblaze_linux_nat_target::read_description () | ||
| 309 | { | ||
| 310 | - CORE_ADDR microblaze_hwcap = 0; | ||
| 311 | - | ||
| 312 | - if (target_auxv_search (ops, AT_HWCAP, µblaze_hwcap) != 1) | ||
| 313 | - return NULL; | ||
| 314 | - | ||
| 315 | return NULL; | ||
| 316 | } | ||
| 317 | |||
| 318 | - | ||
| 319 | -void _initialize_microblaze_linux_nat (void); | ||
| 320 | - | ||
| 321 | void | ||
| 322 | _initialize_microblaze_linux_nat (void) | ||
| 323 | { | ||
| 324 | - struct target_ops *t; | ||
| 325 | - | ||
| 326 | - /* Fill in the generic GNU/Linux methods. */ | ||
| 327 | - t = linux_target (); | ||
| 328 | - | ||
| 329 | - /* Add our register access methods. */ | ||
| 330 | - t->to_fetch_registers = microblaze_linux_fetch_inferior_registers; | ||
| 331 | - t->to_store_registers = microblaze_linux_store_inferior_registers; | ||
| 332 | - | ||
| 333 | - t->to_read_description = microblaze_linux_read_description; | ||
| 334 | + linux_target = &the_microblaze_linux_nat_target; | ||
| 335 | |||
| 336 | /* Register the target. */ | ||
| 337 | - linux_nat_add_target (t); | ||
| 338 | + add_inf_child_target (linux_target); | ||
| 339 | } | ||
| 340 | diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c | ||
| 341 | index 7a0c2527f4..23deb24d26 100644 | ||
| 342 | --- a/gdb/microblaze-tdep.c | ||
| 343 | +++ b/gdb/microblaze-tdep.c | ||
| 344 | @@ -657,7 +657,7 @@ static std::vector<CORE_ADDR> | ||
| 345 | microblaze_software_single_step (struct regcache *regcache) | ||
| 346 | { | ||
| 347 | // struct gdbarch *arch = get_frame_arch(frame); | ||
| 348 | - struct gdbarch *arch = get_regcache_arch (regcache); | ||
| 349 | + struct gdbarch *arch = regcache->arch(); | ||
| 350 | struct address_space *aspace = get_regcache_aspace (regcache); | ||
| 351 | // struct address_space *aspace = get_frame_address_space (frame); | ||
| 352 | struct gdbarch_tdep *tdep = gdbarch_tdep (arch); | ||
| 353 | @@ -876,7 +876,6 @@ microblaze_regset_from_core_section (struct gdbarch *gdbarch, | ||
| 354 | static void | ||
| 355 | make_regs (struct gdbarch *arch) | ||
| 356 | { | ||
| 357 | - struct gdbarch_tdep *tdep = gdbarch_tdep (arch); | ||
| 358 | int mach = gdbarch_bfd_arch_info (arch)->mach; | ||
| 359 | |||
| 360 | if (mach == bfd_mach_microblaze64) | ||
| 361 | -- | ||
| 362 | 2.17.1 | ||
| 363 | |||
