import gdb-8.2-6.el8_0
This commit is contained in:
parent
20447f71b1
commit
a3d4520207
@ -575,75 +575,7 @@ Patch140: gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-4of5.patch
|
||||
# Keith Seitz, RHBZ#1560010.
|
||||
Patch141: gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-5of5.patch
|
||||
|
||||
# Fix 'gdb suggests using "dnf debuginfo-install'
|
||||
# Keith Seitz, RHBZ 1666249
|
||||
Patch142: gdb-rhbz1666249-suggest-yum-instead-of-dnf.patch
|
||||
|
||||
# Fix 'libiberty: Memory leak in demangle_template function resulting in a denial of service"
|
||||
# Simon Marchi, RH BZ 1668635
|
||||
Patch143: gdb-rhbz1668635-libiberty-demangle_template-memleak.patch
|
||||
|
||||
# Fix 'gdb fails to read zN registers from corefile with aarch64 SVE'
|
||||
# Alan Hayward, RH BZ 1669953
|
||||
Patch144: gdb-rhbz1669953-aarch64-sve-binutils.patch
|
||||
|
||||
# Fix remote.c build failure
|
||||
# Szabolcs Nagy, RH BZ 1187581
|
||||
Patch145: gdb-rhbz1187581-power8-regs-not-in-8.2-01of15.patch
|
||||
|
||||
# Add grok/write functions for new ppc core note sections
|
||||
# Edjunior Barbosa Machado, RH BZ 1187581
|
||||
Patch146: gdb-rhbz1187581-power8-regs-not-in-8.2-02of15.patch
|
||||
|
||||
# Zero-initialize linux note sections
|
||||
# Pedro Franco de Carvalho, RH BZ 1187581
|
||||
Patch147: gdb-rhbz1187581-power8-regs-not-in-8.2-03of15.patch
|
||||
|
||||
# [PowerPC] Don't zero-initialize vector register buffers
|
||||
# Pedro Franco de Carvalho, RH BZ 1187581
|
||||
Patch148: gdb-rhbz1187581-power8-regs-not-in-8.2-04of15.patch
|
||||
|
||||
# Add decfloat registers to float reggroup
|
||||
# Pedro Franco de Carvalho, RH BZ 1187581
|
||||
Patch149: gdb-rhbz1187581-power8-regs-not-in-8.2-05of15.patch
|
||||
|
||||
# [PowerPC] Remove rs6000_pseudo_register_reggroup_p
|
||||
# Pedro Franco de Carvalho, RH BZ 1187581
|
||||
Patch150: gdb-rhbz1187581-power8-regs-not-in-8.2-06of15.patch
|
||||
|
||||
# [PowerPC] Fix two if statements in gdb/ppc-linux-nat.c
|
||||
# Pedro Franco de Carvalho, RH BZ 1187581
|
||||
Patch151: gdb-rhbz1187581-power8-regs-not-in-8.2-07of15.patch
|
||||
|
||||
# [PowerPC] Fix indentation in arch/ppc-linux-common.c
|
||||
# Pedro Franco de Carvalho, RH BZ 1187581
|
||||
Patch152: gdb-rhbz1187581-power8-regs-not-in-8.2-08of15.patch
|
||||
|
||||
# [PowerPC] Refactor have_ initializers in rs6000-tdep.c
|
||||
# Pedro Franco de Carvalho, RH BZ 1187581
|
||||
Patch153: gdb-rhbz1187581-power8-regs-not-in-8.2-09of15.patch
|
||||
|
||||
# [PowerPC] Add support for PPR and DSCR
|
||||
# Edjunior Barbosa Machado and Pedro Franco de Carvalho, RH BZ 1187581
|
||||
Patch154: gdb-rhbz1187581-power8-regs-not-in-8.2-10of15.patch
|
||||
|
||||
# [PowerPC] Add support for TAR
|
||||
# Edjunior Barbosa Machado and Pedro Franco de Carvalho, RH BZ 1187581
|
||||
Patch155: gdb-rhbz1187581-power8-regs-not-in-8.2-11of15.patch
|
||||
|
||||
# [PowerPC] Add support for EBB and PMU registers
|
||||
# Edjunior Barbosa Machado and Pedro Franco de Carvalho, RH BZ 1187581m
|
||||
Patch156: gdb-rhbz1187581-power8-regs-not-in-8.2-12of15.patch
|
||||
|
||||
# [PowerPC] Reject tdescs with VSX and no FPU or Altivec
|
||||
# Pedro Franco de Carvalho, RH BZ 1187581
|
||||
Patch157: gdb-rhbz1187581-power8-regs-not-in-8.2-13of15.patch
|
||||
|
||||
# [PowerPC] Add support for HTM registers
|
||||
# Edjunior Barbosa Machado and Pedro Franco de Carvalho, RH BZ 1187581
|
||||
Patch158: gdb-rhbz1187581-power8-regs-not-in-8.2-14of15.patch
|
||||
|
||||
# [PowerPC] Document requirements for VSX feature
|
||||
# Pedro Franco de Carvalho, RH BZ 1187581
|
||||
Patch159: gdb-rhbz1187581-power8-regs-not-in-8.2-15of15.patch
|
||||
Patch142: gdb-rhbz1669953-aarch64-sve-binutils.patch
|
||||
|
||||
|
@ -139,21 +139,4 @@
|
||||
%patch139 -p1
|
||||
%patch140 -p1
|
||||
%patch141 -p1
|
||||
%patch142 -p1
|
||||
%patch143 -p1
|
||||
%patch144 -p1
|
||||
%patch145 -p1
|
||||
%patch146 -p1
|
||||
%patch147 -p1
|
||||
%patch148 -p1
|
||||
%patch149 -p1
|
||||
%patch150 -p1
|
||||
%patch151 -p1
|
||||
%patch152 -p1
|
||||
%patch153 -p1
|
||||
%patch154 -p1
|
||||
%patch155 -p1
|
||||
%patch156 -p1
|
||||
%patch157 -p1
|
||||
%patch158 -p1
|
||||
%patch159 -p1
|
||||
%patch142 -p1
|
@ -1,35 +0,0 @@
|
||||
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||
From: Keith Seitz <keiths@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 17:02:12 -0500
|
||||
Subject: gdb-rhbz1187581-power8-regs-not-in-8.2-01of15.patch
|
||||
|
||||
;; Fix remote.c build failure
|
||||
;; Szabolcs Nagy, RH BZ 1187581
|
||||
|
||||
Fix gdb/remote.c build failure
|
||||
|
||||
Add const qualifier to fix
|
||||
|
||||
/S/gdb/common/gdb_locale.h:35:27: error: deprecated conversion from string c
|
||||
# define _(String) (String)
|
||||
^
|
||||
/S/gdb/remote.c:12844:19: note: in expansion of macro '_'
|
||||
char *err_msg = _("Tracepoint packet too large for target.");
|
||||
^
|
||||
gdb/ChangeLog:
|
||||
|
||||
* remote.c (remote_target::download_tracepoint): Change char* to
|
||||
const char*.
|
||||
|
||||
diff --git a/gdb/remote.c b/gdb/remote.c
|
||||
--- a/gdb/remote.c
|
||||
+++ b/gdb/remote.c
|
||||
@@ -12808,7 +12808,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
|
||||
struct tracepoint *t = (struct tracepoint *) b;
|
||||
struct remote_state *rs = get_remote_state ();
|
||||
int ret;
|
||||
- char *err_msg = _("Tracepoint packet too large for target.");
|
||||
+ const char *err_msg = _("Tracepoint packet too large for target.");
|
||||
size_t size_left;
|
||||
|
||||
/* We use a buffer other than rs->buf because we'll build strings
|
@ -1,479 +0,0 @@
|
||||
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||
From: Keith Seitz <keiths@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 17:02:12 -0500
|
||||
Subject: gdb-rhbz1187581-power8-regs-not-in-8.2-02of15.patch
|
||||
|
||||
;; Add grok/write functions for new ppc core note sections
|
||||
;; Edjunior Barbosa Machado, RH BZ 1187581
|
||||
|
||||
Add grok/write functions for new ppc core note sections
|
||||
|
||||
This patch adds functions for grokking and writing more register core
|
||||
note sections (NT_PPC_TAR, NT_PPC_PPR, NT_PPC_DSCR, NT_PPC_EBB,
|
||||
NT_PPC_PMU, NT_PPC_TM_CGPR, NT_PPC_TM_CFPR, NT_PPC_TM_CVMX,
|
||||
NT_PPC_TM_CVSX, NT_PPC_TM_SPR, NT_PPC_TM_CTAR, NT_PPC_TM_CPPR,
|
||||
NT_PPC_TM_CDSCR).
|
||||
|
||||
2018-07-16 Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com>
|
||||
|
||||
bfd/
|
||||
* elf-bfd.h (elfcore_write_ppc_tar): Add prototype.
|
||||
(elfcore_write_ppc_ppr): Likewise.
|
||||
(elfcore_write_ppc_dscr): Likewise.
|
||||
(elfcore_write_ppc_ebb): Likewise.
|
||||
(elfcore_write_ppc_pmu): Likewise.
|
||||
(elfcore_write_ppc_tm_cgpr): Likewise.
|
||||
(elfcore_write_ppc_tm_cfpr): Likewise.
|
||||
(elfcore_write_ppc_tm_cvmx): Likewise.
|
||||
(elfcore_write_ppc_tm_cvsx): Likewise.
|
||||
(elfcore_write_ppc_tm_spr): Likewise.
|
||||
(elfcore_write_ppc_tm_ctar): Likewise.
|
||||
(elfcore_write_ppc_tm_cppr): Likewise.
|
||||
(elfcore_write_ppc_tm_cdscr): Likewise.
|
||||
* elf.c (elfcore_write_ppc_tar): New function.
|
||||
(elfcore_write_ppc_ppr): Likewise.
|
||||
(elfcore_write_ppc_dscr): Likewise.
|
||||
(elfcore_write_ppc_ebb): Likewise.
|
||||
(elfcore_write_ppc_pmu): Likewise.
|
||||
(elfcore_write_ppc_tm_cgpr): Likewise.
|
||||
(elfcore_write_ppc_tm_cfpr): Likewise.
|
||||
(elfcore_write_ppc_tm_cvmx): Likewise.
|
||||
(elfcore_write_ppc_tm_cvsx): Likewise.
|
||||
(elfcore_write_ppc_tm_spr): Likewise.
|
||||
(elfcore_write_ppc_tm_ctar): Likewise.
|
||||
(elfcore_write_ppc_tm_cppr): Likewise.
|
||||
(elfcore_write_ppc_tm_cdscr): Likewise.
|
||||
(elfcore_write_register_note): Call them.
|
||||
(elfcore_grok_ppc_tar): New function.
|
||||
(elfcore_grok_ppc_ppr): Likewise.
|
||||
(elfcore_grok_ppc_dscr): Likewise.
|
||||
(elfcore_grok_ppc_ebb): Likewise.
|
||||
(elfcore_grok_ppc_pmu): Likewise.
|
||||
(elfcore_grok_ppc_tm_cgpr): Likewise.
|
||||
(elfcore_grok_ppc_tm_cfpr): Likewise.
|
||||
(elfcore_grok_ppc_tm_cvmx): Likewise.
|
||||
(elfcore_grok_ppc_tm_cvsx): Likewise.
|
||||
(elfcore_grok_ppc_tm_spr): Likewise.
|
||||
(elfcore_grok_ppc_tm_ctar): Likewise.
|
||||
(elfcore_grok_ppc_tm_cppr): Likewise.
|
||||
(elfcore_grok_ppc_tm_cdscr): Likewise.
|
||||
(elfcore_grok_note): Call them.
|
||||
|
||||
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
|
||||
--- a/bfd/elf-bfd.h
|
||||
+++ b/bfd/elf-bfd.h
|
||||
@@ -2569,6 +2569,32 @@ extern char *elfcore_write_ppc_vmx
|
||||
(bfd *, char *, int *, const void *, int);
|
||||
extern char *elfcore_write_ppc_vsx
|
||||
(bfd *, char *, int *, const void *, int);
|
||||
+extern char *elfcore_write_ppc_tar
|
||||
+ (bfd *, char *, int *, const void *, int);
|
||||
+extern char *elfcore_write_ppc_ppr
|
||||
+ (bfd *, char *, int *, const void *, int);
|
||||
+extern char *elfcore_write_ppc_dscr
|
||||
+ (bfd *, char *, int *, const void *, int);
|
||||
+extern char *elfcore_write_ppc_ebb
|
||||
+ (bfd *, char *, int *, const void *, int);
|
||||
+extern char *elfcore_write_ppc_pmu
|
||||
+ (bfd *, char *, int *, const void *, int);
|
||||
+extern char *elfcore_write_ppc_tm_cgpr
|
||||
+ (bfd *, char *, int *, const void *, int);
|
||||
+extern char *elfcore_write_ppc_tm_cfpr
|
||||
+ (bfd *, char *, int *, const void *, int);
|
||||
+extern char *elfcore_write_ppc_tm_cvmx
|
||||
+ (bfd *, char *, int *, const void *, int);
|
||||
+extern char *elfcore_write_ppc_tm_cvsx
|
||||
+ (bfd *, char *, int *, const void *, int);
|
||||
+extern char *elfcore_write_ppc_tm_spr
|
||||
+ (bfd *, char *, int *, const void *, int);
|
||||
+extern char *elfcore_write_ppc_tm_ctar
|
||||
+ (bfd *, char *, int *, const void *, int);
|
||||
+extern char *elfcore_write_ppc_tm_cppr
|
||||
+ (bfd *, char *, int *, const void *, int);
|
||||
+extern char *elfcore_write_ppc_tm_cdscr
|
||||
+ (bfd *, char *, int *, const void *, int);
|
||||
extern char *elfcore_write_s390_timer
|
||||
(bfd *, char *, int *, const void *, int);
|
||||
extern char *elfcore_write_s390_todcmp
|
||||
diff --git a/bfd/elf.c b/bfd/elf.c
|
||||
--- a/bfd/elf.c
|
||||
+++ b/bfd/elf.c
|
||||
@@ -9238,6 +9238,84 @@ elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note)
|
||||
return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vsx", note);
|
||||
}
|
||||
|
||||
+static bfd_boolean
|
||||
+elfcore_grok_ppc_tar (bfd *abfd, Elf_Internal_Note *note)
|
||||
+{
|
||||
+ return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tar", note);
|
||||
+}
|
||||
+
|
||||
+static bfd_boolean
|
||||
+elfcore_grok_ppc_ppr (bfd *abfd, Elf_Internal_Note *note)
|
||||
+{
|
||||
+ return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ppr", note);
|
||||
+}
|
||||
+
|
||||
+static bfd_boolean
|
||||
+elfcore_grok_ppc_dscr (bfd *abfd, Elf_Internal_Note *note)
|
||||
+{
|
||||
+ return elfcore_make_note_pseudosection (abfd, ".reg-ppc-dscr", note);
|
||||
+}
|
||||
+
|
||||
+static bfd_boolean
|
||||
+elfcore_grok_ppc_ebb (bfd *abfd, Elf_Internal_Note *note)
|
||||
+{
|
||||
+ return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ebb", note);
|
||||
+}
|
||||
+
|
||||
+static bfd_boolean
|
||||
+elfcore_grok_ppc_pmu (bfd *abfd, Elf_Internal_Note *note)
|
||||
+{
|
||||
+ return elfcore_make_note_pseudosection (abfd, ".reg-ppc-pmu", note);
|
||||
+}
|
||||
+
|
||||
+static bfd_boolean
|
||||
+elfcore_grok_ppc_tm_cgpr (bfd *abfd, Elf_Internal_Note *note)
|
||||
+{
|
||||
+ return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cgpr", note);
|
||||
+}
|
||||
+
|
||||
+static bfd_boolean
|
||||
+elfcore_grok_ppc_tm_cfpr (bfd *abfd, Elf_Internal_Note *note)
|
||||
+{
|
||||
+ return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cfpr", note);
|
||||
+}
|
||||
+
|
||||
+static bfd_boolean
|
||||
+elfcore_grok_ppc_tm_cvmx (bfd *abfd, Elf_Internal_Note *note)
|
||||
+{
|
||||
+ return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvmx", note);
|
||||
+}
|
||||
+
|
||||
+static bfd_boolean
|
||||
+elfcore_grok_ppc_tm_cvsx (bfd *abfd, Elf_Internal_Note *note)
|
||||
+{
|
||||
+ return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvsx", note);
|
||||
+}
|
||||
+
|
||||
+static bfd_boolean
|
||||
+elfcore_grok_ppc_tm_spr (bfd *abfd, Elf_Internal_Note *note)
|
||||
+{
|
||||
+ return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-spr", note);
|
||||
+}
|
||||
+
|
||||
+static bfd_boolean
|
||||
+elfcore_grok_ppc_tm_ctar (bfd *abfd, Elf_Internal_Note *note)
|
||||
+{
|
||||
+ return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-ctar", note);
|
||||
+}
|
||||
+
|
||||
+static bfd_boolean
|
||||
+elfcore_grok_ppc_tm_cppr (bfd *abfd, Elf_Internal_Note *note)
|
||||
+{
|
||||
+ return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cppr", note);
|
||||
+}
|
||||
+
|
||||
+static bfd_boolean
|
||||
+elfcore_grok_ppc_tm_cdscr (bfd *abfd, Elf_Internal_Note *note)
|
||||
+{
|
||||
+ return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cdscr", note);
|
||||
+}
|
||||
+
|
||||
static bfd_boolean
|
||||
elfcore_grok_s390_high_gprs (bfd *abfd, Elf_Internal_Note *note)
|
||||
{
|
||||
@@ -9723,6 +9801,97 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
|
||||
else
|
||||
return TRUE;
|
||||
|
||||
+ case NT_PPC_TAR:
|
||||
+ if (note->namesz == 6
|
||||
+ && strcmp (note->namedata, "LINUX") == 0)
|
||||
+ return elfcore_grok_ppc_tar (abfd, note);
|
||||
+ else
|
||||
+ return TRUE;
|
||||
+
|
||||
+ case NT_PPC_PPR:
|
||||
+ if (note->namesz == 6
|
||||
+ && strcmp (note->namedata, "LINUX") == 0)
|
||||
+ return elfcore_grok_ppc_ppr (abfd, note);
|
||||
+ else
|
||||
+ return TRUE;
|
||||
+
|
||||
+ case NT_PPC_DSCR:
|
||||
+ if (note->namesz == 6
|
||||
+ && strcmp (note->namedata, "LINUX") == 0)
|
||||
+ return elfcore_grok_ppc_dscr (abfd, note);
|
||||
+ else
|
||||
+ return TRUE;
|
||||
+
|
||||
+ case NT_PPC_EBB:
|
||||
+ if (note->namesz == 6
|
||||
+ && strcmp (note->namedata, "LINUX") == 0)
|
||||
+ return elfcore_grok_ppc_ebb (abfd, note);
|
||||
+ else
|
||||
+ return TRUE;
|
||||
+
|
||||
+ case NT_PPC_PMU:
|
||||
+ if (note->namesz == 6
|
||||
+ && strcmp (note->namedata, "LINUX") == 0)
|
||||
+ return elfcore_grok_ppc_pmu (abfd, note);
|
||||
+ else
|
||||
+ return TRUE;
|
||||
+
|
||||
+ case NT_PPC_TM_CGPR:
|
||||
+ if (note->namesz == 6
|
||||
+ && strcmp (note->namedata, "LINUX") == 0)
|
||||
+ return elfcore_grok_ppc_tm_cgpr (abfd, note);
|
||||
+ else
|
||||
+ return TRUE;
|
||||
+
|
||||
+ case NT_PPC_TM_CFPR:
|
||||
+ if (note->namesz == 6
|
||||
+ && strcmp (note->namedata, "LINUX") == 0)
|
||||
+ return elfcore_grok_ppc_tm_cfpr (abfd, note);
|
||||
+ else
|
||||
+ return TRUE;
|
||||
+
|
||||
+ case NT_PPC_TM_CVMX:
|
||||
+ if (note->namesz == 6
|
||||
+ && strcmp (note->namedata, "LINUX") == 0)
|
||||
+ return elfcore_grok_ppc_tm_cvmx (abfd, note);
|
||||
+ else
|
||||
+ return TRUE;
|
||||
+
|
||||
+ case NT_PPC_TM_CVSX:
|
||||
+ if (note->namesz == 6
|
||||
+ && strcmp (note->namedata, "LINUX") == 0)
|
||||
+ return elfcore_grok_ppc_tm_cvsx (abfd, note);
|
||||
+ else
|
||||
+ return TRUE;
|
||||
+
|
||||
+ case NT_PPC_TM_SPR:
|
||||
+ if (note->namesz == 6
|
||||
+ && strcmp (note->namedata, "LINUX") == 0)
|
||||
+ return elfcore_grok_ppc_tm_spr (abfd, note);
|
||||
+ else
|
||||
+ return TRUE;
|
||||
+
|
||||
+ case NT_PPC_TM_CTAR:
|
||||
+ if (note->namesz == 6
|
||||
+ && strcmp (note->namedata, "LINUX") == 0)
|
||||
+ return elfcore_grok_ppc_tm_ctar (abfd, note);
|
||||
+ else
|
||||
+ return TRUE;
|
||||
+
|
||||
+ case NT_PPC_TM_CPPR:
|
||||
+ if (note->namesz == 6
|
||||
+ && strcmp (note->namedata, "LINUX") == 0)
|
||||
+ return elfcore_grok_ppc_tm_cppr (abfd, note);
|
||||
+ else
|
||||
+ return TRUE;
|
||||
+
|
||||
+ case NT_PPC_TM_CDSCR:
|
||||
+ if (note->namesz == 6
|
||||
+ && strcmp (note->namedata, "LINUX") == 0)
|
||||
+ return elfcore_grok_ppc_tm_cdscr (abfd, note);
|
||||
+ else
|
||||
+ return TRUE;
|
||||
+
|
||||
case NT_S390_HIGH_GPRS:
|
||||
if (note->namesz == 6
|
||||
&& strcmp (note->namedata, "LINUX") == 0)
|
||||
@@ -10830,6 +10999,162 @@ elfcore_write_ppc_vsx (bfd *abfd,
|
||||
note_name, NT_PPC_VSX, ppc_vsx, size);
|
||||
}
|
||||
|
||||
+char *
|
||||
+elfcore_write_ppc_tar (bfd *abfd,
|
||||
+ char *buf,
|
||||
+ int *bufsiz,
|
||||
+ const void *ppc_tar,
|
||||
+ int size)
|
||||
+{
|
||||
+ char *note_name = "LINUX";
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
||||
+ note_name, NT_PPC_TAR, ppc_tar, size);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
+elfcore_write_ppc_ppr (bfd *abfd,
|
||||
+ char *buf,
|
||||
+ int *bufsiz,
|
||||
+ const void *ppc_ppr,
|
||||
+ int size)
|
||||
+{
|
||||
+ char *note_name = "LINUX";
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
||||
+ note_name, NT_PPC_PPR, ppc_ppr, size);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
+elfcore_write_ppc_dscr (bfd *abfd,
|
||||
+ char *buf,
|
||||
+ int *bufsiz,
|
||||
+ const void *ppc_dscr,
|
||||
+ int size)
|
||||
+{
|
||||
+ char *note_name = "LINUX";
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
||||
+ note_name, NT_PPC_DSCR, ppc_dscr, size);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
+elfcore_write_ppc_ebb (bfd *abfd,
|
||||
+ char *buf,
|
||||
+ int *bufsiz,
|
||||
+ const void *ppc_ebb,
|
||||
+ int size)
|
||||
+{
|
||||
+ char *note_name = "LINUX";
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
||||
+ note_name, NT_PPC_EBB, ppc_ebb, size);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
+elfcore_write_ppc_pmu (bfd *abfd,
|
||||
+ char *buf,
|
||||
+ int *bufsiz,
|
||||
+ const void *ppc_pmu,
|
||||
+ int size)
|
||||
+{
|
||||
+ char *note_name = "LINUX";
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
||||
+ note_name, NT_PPC_PMU, ppc_pmu, size);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
+elfcore_write_ppc_tm_cgpr (bfd *abfd,
|
||||
+ char *buf,
|
||||
+ int *bufsiz,
|
||||
+ const void *ppc_tm_cgpr,
|
||||
+ int size)
|
||||
+{
|
||||
+ char *note_name = "LINUX";
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
||||
+ note_name, NT_PPC_TM_CGPR, ppc_tm_cgpr, size);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
+elfcore_write_ppc_tm_cfpr (bfd *abfd,
|
||||
+ char *buf,
|
||||
+ int *bufsiz,
|
||||
+ const void *ppc_tm_cfpr,
|
||||
+ int size)
|
||||
+{
|
||||
+ char *note_name = "LINUX";
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
||||
+ note_name, NT_PPC_TM_CFPR, ppc_tm_cfpr, size);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
+elfcore_write_ppc_tm_cvmx (bfd *abfd,
|
||||
+ char *buf,
|
||||
+ int *bufsiz,
|
||||
+ const void *ppc_tm_cvmx,
|
||||
+ int size)
|
||||
+{
|
||||
+ char *note_name = "LINUX";
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
||||
+ note_name, NT_PPC_TM_CVMX, ppc_tm_cvmx, size);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
+elfcore_write_ppc_tm_cvsx (bfd *abfd,
|
||||
+ char *buf,
|
||||
+ int *bufsiz,
|
||||
+ const void *ppc_tm_cvsx,
|
||||
+ int size)
|
||||
+{
|
||||
+ char *note_name = "LINUX";
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
||||
+ note_name, NT_PPC_TM_CVSX, ppc_tm_cvsx, size);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
+elfcore_write_ppc_tm_spr (bfd *abfd,
|
||||
+ char *buf,
|
||||
+ int *bufsiz,
|
||||
+ const void *ppc_tm_spr,
|
||||
+ int size)
|
||||
+{
|
||||
+ char *note_name = "LINUX";
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
||||
+ note_name, NT_PPC_TM_SPR, ppc_tm_spr, size);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
+elfcore_write_ppc_tm_ctar (bfd *abfd,
|
||||
+ char *buf,
|
||||
+ int *bufsiz,
|
||||
+ const void *ppc_tm_ctar,
|
||||
+ int size)
|
||||
+{
|
||||
+ char *note_name = "LINUX";
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
||||
+ note_name, NT_PPC_TM_CTAR, ppc_tm_ctar, size);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
+elfcore_write_ppc_tm_cppr (bfd *abfd,
|
||||
+ char *buf,
|
||||
+ int *bufsiz,
|
||||
+ const void *ppc_tm_cppr,
|
||||
+ int size)
|
||||
+{
|
||||
+ char *note_name = "LINUX";
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
||||
+ note_name, NT_PPC_TM_CPPR, ppc_tm_cppr, size);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
+elfcore_write_ppc_tm_cdscr (bfd *abfd,
|
||||
+ char *buf,
|
||||
+ int *bufsiz,
|
||||
+ const void *ppc_tm_cdscr,
|
||||
+ int size)
|
||||
+{
|
||||
+ char *note_name = "LINUX";
|
||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
||||
+ note_name, NT_PPC_TM_CDSCR, ppc_tm_cdscr, size);
|
||||
+}
|
||||
+
|
||||
static char *
|
||||
elfcore_write_s390_high_gprs (bfd *abfd,
|
||||
char *buf,
|
||||
@@ -11070,6 +11395,32 @@ elfcore_write_register_note (bfd *abfd,
|
||||
return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
|
||||
if (strcmp (section, ".reg-ppc-vsx") == 0)
|
||||
return elfcore_write_ppc_vsx (abfd, buf, bufsiz, data, size);
|
||||
+ if (strcmp (section, ".reg-ppc-tar") == 0)
|
||||
+ return elfcore_write_ppc_tar (abfd, buf, bufsiz, data, size);
|
||||
+ if (strcmp (section, ".reg-ppc-ppr") == 0)
|
||||
+ return elfcore_write_ppc_ppr (abfd, buf, bufsiz, data, size);
|
||||
+ if (strcmp (section, ".reg-ppc-dscr") == 0)
|
||||
+ return elfcore_write_ppc_dscr (abfd, buf, bufsiz, data, size);
|
||||
+ if (strcmp (section, ".reg-ppc-ebb") == 0)
|
||||
+ return elfcore_write_ppc_ebb (abfd, buf, bufsiz, data, size);
|
||||
+ if (strcmp (section, ".reg-ppc-pmu") == 0)
|
||||
+ return elfcore_write_ppc_pmu (abfd, buf, bufsiz, data, size);
|
||||
+ if (strcmp (section, ".reg-ppc-tm-cgpr") == 0)
|
||||
+ return elfcore_write_ppc_tm_cgpr (abfd, buf, bufsiz, data, size);
|
||||
+ if (strcmp (section, ".reg-ppc-tm-cfpr") == 0)
|
||||
+ return elfcore_write_ppc_tm_cfpr (abfd, buf, bufsiz, data, size);
|
||||
+ if (strcmp (section, ".reg-ppc-tm-cvmx") == 0)
|
||||
+ return elfcore_write_ppc_tm_cvmx (abfd, buf, bufsiz, data, size);
|
||||
+ if (strcmp (section, ".reg-ppc-tm-cvsx") == 0)
|
||||
+ return elfcore_write_ppc_tm_cvsx (abfd, buf, bufsiz, data, size);
|
||||
+ if (strcmp (section, ".reg-ppc-tm-spr") == 0)
|
||||
+ return elfcore_write_ppc_tm_spr (abfd, buf, bufsiz, data, size);
|
||||
+ if (strcmp (section, ".reg-ppc-tm-ctar") == 0)
|
||||
+ return elfcore_write_ppc_tm_ctar (abfd, buf, bufsiz, data, size);
|
||||
+ if (strcmp (section, ".reg-ppc-tm-cppr") == 0)
|
||||
+ return elfcore_write_ppc_tm_cppr (abfd, buf, bufsiz, data, size);
|
||||
+ if (strcmp (section, ".reg-ppc-tm-cdscr") == 0)
|
||||
+ return elfcore_write_ppc_tm_cdscr (abfd, buf, bufsiz, data, size);
|
||||
if (strcmp (section, ".reg-s390-high-gprs") == 0)
|
||||
return elfcore_write_s390_high_gprs (abfd, buf, bufsiz, data, size);
|
||||
if (strcmp (section, ".reg-s390-timer") == 0)
|
@ -1,61 +0,0 @@
|
||||
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||
From: Keith Seitz <keiths@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 17:02:13 -0500
|
||||
Subject: gdb-rhbz1187581-power8-regs-not-in-8.2-03of15.patch
|
||||
|
||||
;; Zero-initialize linux note sections
|
||||
;; Pedro Franco de Carvalho, RH BZ 1187581
|
||||
|
||||
Zero-initialize linux note sections
|
||||
|
||||
This patches changes linux-tdep.c so that the buffer used to write
|
||||
note sections when generating a core file is zero-initialized. This
|
||||
way, bytes that are not collected won't contain random
|
||||
data (e.g. padding bytes).
|
||||
|
||||
gdb/ChangeLog:
|
||||
2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
|
||||
|
||||
* linux-tdep.c (linux_collect_regset_section_cb): Use
|
||||
std::vector<gdb_byte> instead of char * and malloc for buf.
|
||||
Remove xfree.
|
||||
|
||||
diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c
|
||||
--- a/gdb/linux-tdep.c
|
||||
+++ b/gdb/linux-tdep.c
|
||||
@@ -1584,7 +1584,6 @@ linux_collect_regset_section_cb (const char *sect_name, int supply_size,
|
||||
int collect_size, const struct regset *regset,
|
||||
const char *human_name, void *cb_data)
|
||||
{
|
||||
- char *buf;
|
||||
struct linux_collect_regset_section_cb_data *data
|
||||
= (struct linux_collect_regset_section_cb_data *) cb_data;
|
||||
bool variable_size_section = (regset != NULL
|
||||
@@ -1598,19 +1597,22 @@ linux_collect_regset_section_cb (const char *sect_name, int supply_size,
|
||||
|
||||
gdb_assert (regset && regset->collect_regset);
|
||||
|
||||
- buf = (char *) xmalloc (collect_size);
|
||||
- regset->collect_regset (regset, data->regcache, -1, buf, collect_size);
|
||||
+ /* This is intentionally zero-initialized by using std::vector, so
|
||||
+ that any padding bytes in the core file will show as 0. */
|
||||
+ std::vector<gdb_byte> buf (collect_size);
|
||||
+
|
||||
+ regset->collect_regset (regset, data->regcache, -1, buf.data (),
|
||||
+ collect_size);
|
||||
|
||||
/* PRSTATUS still needs to be treated specially. */
|
||||
if (strcmp (sect_name, ".reg") == 0)
|
||||
data->note_data = (char *) elfcore_write_prstatus
|
||||
(data->obfd, data->note_data, data->note_size, data->lwp,
|
||||
- gdb_signal_to_host (data->stop_signal), buf);
|
||||
+ gdb_signal_to_host (data->stop_signal), buf.data ());
|
||||
else
|
||||
data->note_data = (char *) elfcore_write_register_note
|
||||
(data->obfd, data->note_data, data->note_size,
|
||||
- sect_name, buf, collect_size);
|
||||
- xfree (buf);
|
||||
+ sect_name, buf.data (), collect_size);
|
||||
|
||||
if (data->note_data == NULL)
|
||||
data->abort_iteration = 1;
|
@ -1,88 +0,0 @@
|
||||
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||
From: Keith Seitz <keiths@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 17:02:13 -0500
|
||||
Subject: gdb-rhbz1187581-power8-regs-not-in-8.2-04of15.patch
|
||||
|
||||
;; [PowerPC] Don't zero-initialize vector register buffers
|
||||
;; Pedro Franco de Carvalho, RH BZ 1187581
|
||||
|
||||
[PowerPC] Don't zero-initialize vector register buffers
|
||||
|
||||
Now that linux-tdep.c already zero-initializes the buffer used for
|
||||
generating core file notes, there is no need to do this in the linux
|
||||
collect functions for the vector regset. The memsets in gdbserver were
|
||||
not useful to begin with.
|
||||
|
||||
gdb/ChangeLog:
|
||||
2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
|
||||
|
||||
* ppc-linux-tdep.c (ppc_linux_collect_vrregset): Remove.
|
||||
(ppc32_le_linux_vrregset, ppc32_be_linux_vrregset): Replace
|
||||
ppc_linux_collect_vrregset by regcache_collect_regset.
|
||||
|
||||
gdb/gdbserver/ChangeLog:
|
||||
2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
|
||||
|
||||
* linux-ppc-low.c (ppc_fill_vrregset): Remove memset calls.
|
||||
|
||||
diff --git a/gdb/gdbserver/linux-ppc-low.c b/gdb/gdbserver/linux-ppc-low.c
|
||||
--- a/gdb/gdbserver/linux-ppc-low.c
|
||||
+++ b/gdb/gdbserver/linux-ppc-low.c
|
||||
@@ -495,13 +495,9 @@ ppc_fill_vrregset (struct regcache *regcache, void *buf)
|
||||
if (__BYTE_ORDER == __BIG_ENDIAN)
|
||||
vscr_offset = 12;
|
||||
|
||||
- /* Zero-pad the unused bytes in the fields for vscr and vrsave in
|
||||
- case they get displayed somewhere. */
|
||||
- memset (®set[32 * 16], 0, 16);
|
||||
collect_register_by_name (regcache, "vscr",
|
||||
®set[32 * 16 + vscr_offset]);
|
||||
|
||||
- memset (®set[33 * 16], 0, 16);
|
||||
collect_register_by_name (regcache, "vrsave", ®set[33 * 16]);
|
||||
}
|
||||
|
||||
diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c
|
||||
--- a/gdb/ppc-linux-tdep.c
|
||||
+++ b/gdb/ppc-linux-tdep.c
|
||||
@@ -444,24 +444,6 @@ ppc_linux_collect_gregset (const struct regset *regset,
|
||||
}
|
||||
}
|
||||
|
||||
-static void
|
||||
-ppc_linux_collect_vrregset (const struct regset *regset,
|
||||
- const struct regcache *regcache,
|
||||
- int regnum, void *buf, size_t len)
|
||||
-{
|
||||
- gdb_byte *vrregs = (gdb_byte *) buf;
|
||||
-
|
||||
- /* Zero-pad the unused bytes in the fields for vscr and vrsave
|
||||
- in case they get displayed somewhere (e.g. in core files). */
|
||||
- if (regnum == PPC_VSCR_REGNUM || regnum == -1)
|
||||
- memset (&vrregs[32 * 16], 0, 16);
|
||||
-
|
||||
- if (regnum == PPC_VRSAVE_REGNUM || regnum == -1)
|
||||
- memset (&vrregs[33 * 16], 0, 16);
|
||||
-
|
||||
- regcache_collect_regset (regset, regcache, regnum, buf, len);
|
||||
-}
|
||||
-
|
||||
/* Regset descriptions. */
|
||||
static const struct ppc_reg_offsets ppc32_linux_reg_offsets =
|
||||
{
|
||||
@@ -544,13 +526,13 @@ static const struct regcache_map_entry ppc32_be_linux_vrregmap[] =
|
||||
static const struct regset ppc32_le_linux_vrregset = {
|
||||
ppc32_le_linux_vrregmap,
|
||||
regcache_supply_regset,
|
||||
- ppc_linux_collect_vrregset
|
||||
+ regcache_collect_regset
|
||||
};
|
||||
|
||||
static const struct regset ppc32_be_linux_vrregset = {
|
||||
ppc32_be_linux_vrregmap,
|
||||
regcache_supply_regset,
|
||||
- ppc_linux_collect_vrregset
|
||||
+ regcache_collect_regset
|
||||
};
|
||||
|
||||
static const struct regcache_map_entry ppc32_linux_vsxregmap[] =
|
@ -1,34 +0,0 @@
|
||||
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||
From: Keith Seitz <keiths@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 17:02:14 -0500
|
||||
Subject: gdb-rhbz1187581-power8-regs-not-in-8.2-05of15.patch
|
||||
|
||||
;; Add decfloat registers to float reggroup
|
||||
;; Pedro Franco de Carvalho, RH BZ 1187581
|
||||
|
||||
Add decfloat registers to float reggroup
|
||||
|
||||
This patch changes default_register_reggroup_p to return true when the
|
||||
register type is decimal floating point and the reggroup is
|
||||
float_reggroup.
|
||||
|
||||
gdb/ChangeLog:
|
||||
2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
|
||||
|
||||
* reggroups.c (default_register_reggroup_p): Return true for
|
||||
decfloat registers and float_reggroup.
|
||||
|
||||
diff --git a/gdb/reggroups.c b/gdb/reggroups.c
|
||||
--- a/gdb/reggroups.c
|
||||
+++ b/gdb/reggroups.c
|
||||
@@ -202,7 +202,9 @@ default_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
|
||||
if (group == all_reggroup)
|
||||
return 1;
|
||||
vector_p = TYPE_VECTOR (register_type (gdbarch, regnum));
|
||||
- float_p = TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT;
|
||||
+ float_p = (TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT
|
||||
+ || (TYPE_CODE (register_type (gdbarch, regnum))
|
||||
+ == TYPE_CODE_DECFLOAT));
|
||||
raw_p = regnum < gdbarch_num_regs (gdbarch);
|
||||
if (group == float_reggroup)
|
||||
return float_p;
|
@ -1,72 +0,0 @@
|
||||
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||
From: Keith Seitz <keiths@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 17:02:14 -0500
|
||||
Subject: gdb-rhbz1187581-power8-regs-not-in-8.2-06of15.patch
|
||||
|
||||
;; [PowerPC] Remove rs6000_pseudo_register_reggroup_p
|
||||
;; Pedro Franco de Carvalho, RH BZ 1187581
|
||||
|
||||
[PowerPC] Remove rs6000_pseudo_register_reggroup_p
|
||||
|
||||
This patch removes rs6000_pseudo_register_reggroup_p.
|
||||
|
||||
Group membership for the pseudoregisters can be detected through their
|
||||
types in default_register_reggroup_p through
|
||||
tdesc_register_reggroup_p.
|
||||
|
||||
gdb/ChangeLog:
|
||||
2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
|
||||
|
||||
* rs6000-tdep.c: Remove reggroups.h include.
|
||||
(rs6000_pseudo_register_reggroup_p): Remove.
|
||||
(rs6000_gdbarch_init): Remove call to
|
||||
set_tdesc_pseudo_register_reggroup_p.
|
||||
|
||||
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
|
||||
--- a/gdb/rs6000-tdep.c
|
||||
+++ b/gdb/rs6000-tdep.c
|
||||
@@ -36,7 +36,6 @@
|
||||
#include "infcall.h"
|
||||
#include "sim-regno.h"
|
||||
#include "gdb/sim-ppc.h"
|
||||
-#include "reggroups.h"
|
||||
#include "dwarf2-frame.h"
|
||||
#include "target-descriptions.h"
|
||||
#include "user-regs.h"
|
||||
@@ -2461,27 +2460,6 @@ rs6000_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
|
||||
return builtin_type (gdbarch)->builtin_double;
|
||||
}
|
||||
|
||||
-/* Is REGNUM a member of REGGROUP? */
|
||||
-static int
|
||||
-rs6000_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
|
||||
- struct reggroup *group)
|
||||
-{
|
||||
- struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||
-
|
||||
- /* These are the only pseudo-registers we support. */
|
||||
- gdb_assert (IS_SPE_PSEUDOREG (tdep, regnum)
|
||||
- || IS_DFP_PSEUDOREG (tdep, regnum)
|
||||
- || IS_VSX_PSEUDOREG (tdep, regnum)
|
||||
- || IS_EFP_PSEUDOREG (tdep, regnum));
|
||||
-
|
||||
- /* These are the e500 pseudo-registers or the POWER7 VSX registers. */
|
||||
- if (IS_SPE_PSEUDOREG (tdep, regnum) || IS_VSX_PSEUDOREG (tdep, regnum))
|
||||
- return group == all_reggroup || group == vector_reggroup;
|
||||
- else
|
||||
- /* PPC decimal128 or Extended FP pseudo-registers. */
|
||||
- return group == all_reggroup || group == float_reggroup;
|
||||
-}
|
||||
-
|
||||
/* The register format for RS/6000 floating point registers is always
|
||||
double, we need a conversion if the memory format is float. */
|
||||
|
||||
@@ -6493,8 +6471,6 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
}
|
||||
|
||||
set_tdesc_pseudo_register_type (gdbarch, rs6000_pseudo_register_type);
|
||||
- set_tdesc_pseudo_register_reggroup_p (gdbarch,
|
||||
- rs6000_pseudo_register_reggroup_p);
|
||||
tdesc_use_registers (gdbarch, tdesc, tdesc_data);
|
||||
|
||||
/* Override the normal target description method to make the SPE upper
|
@ -1,41 +0,0 @@
|
||||
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||
From: Keith Seitz <keiths@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 17:02:15 -0500
|
||||
Subject: gdb-rhbz1187581-power8-regs-not-in-8.2-07of15.patch
|
||||
|
||||
;; [PowerPC] Fix two if statements in gdb/ppc-linux-nat.c
|
||||
;; Pedro Franco de Carvalho, RH BZ 1187581
|
||||
|
||||
[PowerPC] Fix two if statements in gdb/ppc-linux-nat.c
|
||||
|
||||
This patch changes two if statements to else if statements in
|
||||
ppc-linux-nat.c:fetch_register for clarity.
|
||||
|
||||
gdb/ChangeLog:
|
||||
2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
|
||||
|
||||
* ppc-linux-nat.c (fetch_register): Change if statement to else
|
||||
if.
|
||||
(store_register): Likewise.
|
||||
|
||||
diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c
|
||||
--- a/gdb/ppc-linux-nat.c
|
||||
+++ b/gdb/ppc-linux-nat.c
|
||||
@@ -554,7 +554,7 @@ fetch_register (struct regcache *regcache, int tid, int regno)
|
||||
AltiVec registers, fall through and return zeroes, because
|
||||
regaddr will be -1 in this case. */
|
||||
}
|
||||
- if (vsx_register_p (gdbarch, regno))
|
||||
+ else if (vsx_register_p (gdbarch, regno))
|
||||
{
|
||||
if (have_ptrace_getsetvsxregs)
|
||||
{
|
||||
@@ -933,7 +933,7 @@ store_register (const struct regcache *regcache, int tid, int regno)
|
||||
store_altivec_registers (regcache, tid, regno);
|
||||
return;
|
||||
}
|
||||
- if (vsx_register_p (gdbarch, regno))
|
||||
+ else if (vsx_register_p (gdbarch, regno))
|
||||
{
|
||||
store_vsx_registers (regcache, tid, regno);
|
||||
return;
|
@ -1,64 +0,0 @@
|
||||
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||
From: Keith Seitz <keiths@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 17:02:15 -0500
|
||||
Subject: gdb-rhbz1187581-power8-regs-not-in-8.2-08of15.patch
|
||||
|
||||
;; [PowerPC] Fix indentation in arch/ppc-linux-common.c
|
||||
;; Pedro Franco de Carvalho, RH BZ 1187581
|
||||
|
||||
[PowerPC] Fix indentation in arch/ppc-linux-common.c
|
||||
|
||||
This patch parenthesizes the tdesc selection expressions in
|
||||
arch/ppc-linux-common.c so that they can be tab-indented.
|
||||
|
||||
gdb/ChangeLog:
|
||||
2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
|
||||
|
||||
* arch/ppc-linux-common.c (ppc_linux_match_description):
|
||||
Parenthesize tdesc assignements and indent them properly.
|
||||
|
||||
diff --git a/gdb/arch/ppc-linux-common.c b/gdb/arch/ppc-linux-common.c
|
||||
--- a/gdb/arch/ppc-linux-common.c
|
||||
+++ b/gdb/arch/ppc-linux-common.c
|
||||
@@ -53,14 +53,14 @@ ppc_linux_match_description (struct ppc_linux_features features)
|
||||
if (features.cell)
|
||||
tdesc = tdesc_powerpc_cell64l;
|
||||
else if (features.vsx)
|
||||
- tdesc = features.isa205
|
||||
- ? tdesc_powerpc_isa205_vsx64l : tdesc_powerpc_vsx64l;
|
||||
+ tdesc = (features.isa205? tdesc_powerpc_isa205_vsx64l
|
||||
+ : tdesc_powerpc_vsx64l);
|
||||
else if (features.altivec)
|
||||
- tdesc = features.isa205
|
||||
- ? tdesc_powerpc_isa205_altivec64l : tdesc_powerpc_altivec64l;
|
||||
+ tdesc = (features.isa205? tdesc_powerpc_isa205_altivec64l
|
||||
+ : tdesc_powerpc_altivec64l);
|
||||
else
|
||||
- tdesc = features.isa205?
|
||||
- tdesc_powerpc_isa205_64l : tdesc_powerpc_64l;
|
||||
+ tdesc = (features.isa205? tdesc_powerpc_isa205_64l
|
||||
+ : tdesc_powerpc_64l);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -69,14 +69,14 @@ ppc_linux_match_description (struct ppc_linux_features features)
|
||||
if (features.cell)
|
||||
tdesc = tdesc_powerpc_cell32l;
|
||||
else if (features.vsx)
|
||||
- tdesc = features.isa205
|
||||
- ? tdesc_powerpc_isa205_vsx32l : tdesc_powerpc_vsx32l;
|
||||
+ tdesc = (features.isa205? tdesc_powerpc_isa205_vsx32l
|
||||
+ : tdesc_powerpc_vsx32l);
|
||||
else if (features.altivec)
|
||||
- tdesc = features.isa205
|
||||
- ? tdesc_powerpc_isa205_altivec32l : tdesc_powerpc_altivec32l;
|
||||
+ tdesc = (features.isa205? tdesc_powerpc_isa205_altivec32l
|
||||
+ : tdesc_powerpc_altivec32l);
|
||||
else
|
||||
- tdesc = features.isa205
|
||||
- ? tdesc_powerpc_isa205_32l : tdesc_powerpc_32l;
|
||||
+ tdesc = (features.isa205? tdesc_powerpc_isa205_32l
|
||||
+ : tdesc_powerpc_32l);
|
||||
}
|
||||
|
||||
gdb_assert (tdesc != NULL);
|
@ -1,36 +0,0 @@
|
||||
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||
From: Keith Seitz <keiths@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 17:02:16 -0500
|
||||
Subject: gdb-rhbz1187581-power8-regs-not-in-8.2-09of15.patch
|
||||
|
||||
;; [PowerPC] Refactor have_ initializers in rs6000-tdep.c
|
||||
;; Pedro Franco de Carvalho, RH BZ 1187581
|
||||
|
||||
[PowerPC] Refactor have_ initializers in rs6000-tdep.c
|
||||
|
||||
This patch refactors a series of initializers in rs6000_gdbarch_init
|
||||
for clarity. The have_fpu initializer is also changed to set the
|
||||
variable to 0, like the other similar variables. This doesn't affect
|
||||
program behavior.
|
||||
|
||||
gdb/ChangeLog:
|
||||
2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
|
||||
|
||||
* rs6000-tdep.c (rs6000_gdbarch_init): Replace line wrapping by a
|
||||
second initializer line for the have_* variables. Initialize
|
||||
have_fpu to 0 instead of 1.
|
||||
|
||||
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
|
||||
--- a/gdb/rs6000-tdep.c
|
||||
+++ b/gdb/rs6000-tdep.c
|
||||
@@ -5845,8 +5845,8 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
enum powerpc_long_double_abi long_double_abi = POWERPC_LONG_DOUBLE_AUTO;
|
||||
enum powerpc_vector_abi vector_abi = powerpc_vector_abi_global;
|
||||
enum powerpc_elf_abi elf_abi = POWERPC_ELF_AUTO;
|
||||
- int have_fpu = 1, have_spe = 0, have_mq = 0, have_altivec = 0, have_dfp = 0,
|
||||
- have_vsx = 0;
|
||||
+ int have_fpu = 0, have_spe = 0, have_mq = 0, have_altivec = 0;
|
||||
+ int have_dfp = 0, have_vsx = 0;
|
||||
int tdesc_wordsize = -1;
|
||||
const struct target_desc *tdesc = info.target_desc;
|
||||
struct tdesc_arch_data *tdesc_data = NULL;
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,779 +0,0 @@
|
||||
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||
From: Keith Seitz <keiths@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 17:02:17 -0500
|
||||
Subject: gdb-rhbz1187581-power8-regs-not-in-8.2-12of15.patch
|
||||
|
||||
;; [PowerPC] Add support for EBB and PMU registers
|
||||
;; Edjunior Barbosa Machado and Pedro Franco de Carvalho, RH BZ 1187581m
|
||||
|
||||
[PowerPC] Add support for EBB and PMU registers
|
||||
|
||||
This patch adds support for registers of the Event Based Branching and
|
||||
Performance Monitoring Units for the powerpc linux native and core
|
||||
file targets, and for the powerpc linux server stub.
|
||||
|
||||
All three EBB registers are accessible. Only a subset of the PMU
|
||||
registers can be accessed through ptrace. Because of this, the PMU
|
||||
registers are enumerated individually in gdbarch_tdep, as opposed to
|
||||
having a single "have_pmu" flag. This is intended to make it easier
|
||||
to add additional PMU registers in the future, since checking a
|
||||
"have_pmu" flag elsewhere in the code would no longer be correct. The
|
||||
tdesc feature is named org.gnu.gdb.power.linux.pmu because of this.
|
||||
|
||||
It's unclear if it makes sense to save and restore these registers
|
||||
across function calls, since some of them can be modified
|
||||
asynchronously. They are also not tracked in record-replay mode.
|
||||
|
||||
The kernel can return ENODATA when ptrace is used to get the EBB
|
||||
registers, unless a linux performance event that uses EBB is open in
|
||||
the inferior. For this reason, the "fill" functions in the server
|
||||
stub for the ebb register sets is not implemented.
|
||||
|
||||
Since gdbserver writes all registers in one go before resuming the
|
||||
inferior, this error would not be detected at the time the user tries
|
||||
to write to one of the registers on the client side, and gdbserver
|
||||
would print out warnings every time it resumes the inferior when no
|
||||
ebb performance event is opened, so there is currently no
|
||||
straightforward way to handle this case. This means the ebb registers
|
||||
in the client-side regcache can become dirty when the user tries to
|
||||
write to them, until the inferior is resumed and stopped again.
|
||||
|
||||
A related issue is that 'G' packets used to write to unrelated
|
||||
registers will include bad data for the EBB registers if they are
|
||||
unavailable, since no register status information is included in the
|
||||
'G' packet. This data won't be written to the inferior by the
|
||||
gdbserver stub because the "fill" functions are not implemented, and
|
||||
currently the gdbserver stub doesn't change the status of the
|
||||
registers in its own regcache in response to 'G' packets.
|
||||
|
||||
Another limitation for the ebb registers is that traceframes don't
|
||||
record if registers are available or not, so if these registers are
|
||||
collected when a tracepoint is hit and the inferior has no ebb event
|
||||
opened, the user will see zero values for all of them, instead of the
|
||||
usual <unavailable>.
|
||||
|
||||
Because these registers are often unavailable, trying to store them
|
||||
with target_store_registers with -1 for the regno argument (all
|
||||
registers) would almost always fail, so they are ignored in this case.
|
||||
|
||||
gdb/ChangeLog:
|
||||
2018-10-26 Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com>
|
||||
Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
|
||||
|
||||
* arch/ppc-linux-common.h (PPC_LINUX_SIZEOF_EBBREGSET)
|
||||
(PPC_LINUX_SIZEOF_PMUREGSET): Declare.
|
||||
* nat/ppc-linux.h (PPC_FEATURE2_EBB, NT_PPC_EBB, NT_PPC_PMU):
|
||||
Define if not already defined.
|
||||
* features/rs6000/power-ebb.xml: New file.
|
||||
* features/rs6000/power-linux-pmu.xml: New file.
|
||||
* features/rs6000/powerpc-isa207-vsx32l.xml: Include ebb and pmu
|
||||
features.
|
||||
* features/rs6000/powerpc-isa207-vsx64l.xml: Likewise.
|
||||
* features/rs6000/powerpc-isa207-vsx32l.c: Re-generate.
|
||||
* features/rs6000/powerpc-isa207-vsx64l.c: Re-generate.
|
||||
* regformats/rs6000/powerpc-isa207-vsx32l.dat: Re-generate.
|
||||
* regformats/rs6000/powerpc-isa207-vsx64l.dat: Re-generate.
|
||||
* ppc-linux-nat.c (fetch_register, fetch_ppc_registers): Call
|
||||
fetch_regset with ebb and pmu regsets.
|
||||
(store_register, store_ppc_registers): Call store_regset with ebb
|
||||
and pmu regsets.
|
||||
(ppc_linux_nat_target::read_description): Set isa207 field in the
|
||||
features struct if ebb and pmu are avaiable.
|
||||
* ppc-linux-tdep.c (ppc32_regmap_ebb, ppc32_regmap_pmu)
|
||||
(ppc32_linux_ebbregset, ppc32_linux_pmuregset): New globals.
|
||||
(ppc_linux_iterate_over_regset_sections): Call back with the ebb
|
||||
and pmu regsets.
|
||||
(ppc_linux_core_read_description): Check if the pmu section is
|
||||
present and set isa207 in the features struct.
|
||||
* ppc-linux-tdep.h (ppc32_linux_ebbregset)
|
||||
(ppc32_linux_pmuregset): Declare.
|
||||
* ppc-tdep.h (struct gdbarch_tdep) <ppc_mmcr0_regnum>: New field.
|
||||
<ppc_mmcr2_regnum, ppc_siar_regnum, ppc_sdar_regnum>: New fields.
|
||||
<ppc_sier_regnum>: New field.
|
||||
(enum): <PPC_BESCR_REGNUM, PPC_EBBHR_REGNUM, PPC_EBBRR_REGNUM>:
|
||||
New enum values.
|
||||
<PPC_MMCR0_REGNUM, PPC_MMCR2_REGNUM, PPC_SIAR_REGNUM>: New enum
|
||||
values.
|
||||
<PPC_SDAR_REGNUM, PPC_SIER_REGNUM>: New enum values.
|
||||
(PPC_IS_EBB_REGNUM, PPC_IS_PMU_REGNUM): Define.
|
||||
* rs6000-tdep.c (rs6000_gdbarch_init): Look for and validate the
|
||||
ebb and pmu features.
|
||||
|
||||
gdb/gdbserver/ChangeLog:
|
||||
2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
|
||||
|
||||
* configure.srv (powerpc*-*-linux*): Add rs6000/power-ebb.xml and
|
||||
rs6000/power-linux-pmu.xml to srv_xmlfiles.
|
||||
* linux-ppc-low.c (ppc_store_ebbregset, ppc_fill_pmuregset)
|
||||
(ppc_store_pmuregset): New functions.
|
||||
(ppc_regsets): Add entries for ebb and pmu regsets.
|
||||
(ppc_arch_setup): Set isa207 in features struct if the ebb and
|
||||
pmu regsets are available. Set sizes for these regsets.
|
||||
|
||||
gdb/doc/ChangeLog:
|
||||
2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
|
||||
|
||||
* gdb.texinfo (PowerPC Features): Describe new features
|
||||
"org.gnu.gdb.power.ebb" and "org.gnu.gdb.power.linux.pmu".
|
||||
|
||||
diff --git a/gdb/arch/ppc-linux-common.h b/gdb/arch/ppc-linux-common.h
|
||||
--- a/gdb/arch/ppc-linux-common.h
|
||||
+++ b/gdb/arch/ppc-linux-common.h
|
||||
@@ -33,6 +33,8 @@ struct target_desc;
|
||||
#define PPC_LINUX_SIZEOF_PPRREGSET 8
|
||||
#define PPC_LINUX_SIZEOF_DSCRREGSET 8
|
||||
#define PPC_LINUX_SIZEOF_TARREGSET 8
|
||||
+#define PPC_LINUX_SIZEOF_EBBREGSET (3*8)
|
||||
+#define PPC_LINUX_SIZEOF_PMUREGSET (5*8)
|
||||
|
||||
/* Check if the hwcap auxv entry indicates that isa205 is supported. */
|
||||
bool ppc_linux_has_isa205 (CORE_ADDR hwcap);
|
||||
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
|
||||
--- a/gdb/doc/gdb.texinfo
|
||||
+++ b/gdb/doc/gdb.texinfo
|
||||
@@ -42564,6 +42564,15 @@ contain the 64-bit register @samp{dscr}.
|
||||
The @samp{org.gnu.gdb.power.tar} feature is optional. It should
|
||||
contain the 64-bit register @samp{tar}.
|
||||
|
||||
+The @samp{org.gnu.gdb.power.ebb} feature is optional. It should
|
||||
+contain registers @samp{bescr}, @samp{ebbhr} and @samp{ebbrr}, all
|
||||
+64-bit wide.
|
||||
+
|
||||
+The @samp{org.gnu.gdb.power.linux.pmu} feature is optional. It should
|
||||
+contain registers @samp{mmcr0}, @samp{mmcr2}, @samp{siar}, @samp{sdar}
|
||||
+and @samp{sier}, all 64-bit wide. This is the subset of the isa 2.07
|
||||
+server PMU registers provided by @sc{gnu}/Linux.
|
||||
+
|
||||
@node S/390 and System z Features
|
||||
@subsection S/390 and System z Features
|
||||
@cindex target descriptions, S/390 features
|
||||
diff --git a/gdb/features/rs6000/power-ebb.xml b/gdb/features/rs6000/power-ebb.xml
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/gdb/features/rs6000/power-ebb.xml
|
||||
@@ -0,0 +1,14 @@
|
||||
+<?xml version="1.0"?>
|
||||
+<!-- Copyright (C) 2018 Free Software Foundation, Inc.
|
||||
+
|
||||
+ Copying and distribution of this file, with or without modification,
|
||||
+ are permitted in any medium without royalty provided the copyright
|
||||
+ notice and this notice are preserved. -->
|
||||
+
|
||||
+<!-- POWER8 Event-based Branching Registers. -->
|
||||
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
|
||||
+<feature name="org.gnu.gdb.power.ebb">
|
||||
+ <reg name="bescr" bitsize="64" type="uint64" save-restore="no"/>
|
||||
+ <reg name="ebbhr" bitsize="64" type="uint64" save-restore="no"/>
|
||||
+ <reg name="ebbrr" bitsize="64" type="uint64" save-restore="no"/>
|
||||
+</feature>
|
||||
diff --git a/gdb/features/rs6000/power-linux-pmu.xml b/gdb/features/rs6000/power-linux-pmu.xml
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/gdb/features/rs6000/power-linux-pmu.xml
|
||||
@@ -0,0 +1,17 @@
|
||||
+<?xml version="1.0"?>
|
||||
+<!-- Copyright (C) 2018 Free Software Foundation, Inc.
|
||||
+
|
||||
+ Copying and distribution of this file, with or without modification,
|
||||
+ are permitted in any medium without royalty provided the copyright
|
||||
+ notice and this notice are preserved. -->
|
||||
+
|
||||
+<!-- Subset of the POWER8 ISA 2.07 Performance Monitor Registers
|
||||
+ provided by Linux. -->
|
||||
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
|
||||
+<feature name="org.gnu.gdb.power.linux.pmu">
|
||||
+ <reg name="mmcr0" bitsize="64" type="uint64" save-restore="no"/>
|
||||
+ <reg name="mmcr2" bitsize="64" type="uint64" save-restore="no"/>
|
||||
+ <reg name="siar" bitsize="64" type="uint64" save-restore="no"/>
|
||||
+ <reg name="sdar" bitsize="64" type="uint64" save-restore="no"/>
|
||||
+ <reg name="sier" bitsize="64" type="uint64" save-restore="no"/>
|
||||
+</feature>
|
||||
diff --git a/gdb/features/rs6000/powerpc-isa207-vsx32l.c b/gdb/features/rs6000/powerpc-isa207-vsx32l.c
|
||||
--- a/gdb/features/rs6000/powerpc-isa207-vsx32l.c
|
||||
+++ b/gdb/features/rs6000/powerpc-isa207-vsx32l.c
|
||||
@@ -199,5 +199,17 @@ initialize_tdesc_powerpc_isa207_vsx32l (void)
|
||||
feature = tdesc_create_feature (result, "org.gnu.gdb.power.tar");
|
||||
tdesc_create_reg (feature, "tar", 141, 1, NULL, 64, "uint64");
|
||||
|
||||
+ feature = tdesc_create_feature (result, "org.gnu.gdb.power.ebb");
|
||||
+ tdesc_create_reg (feature, "bescr", 142, 0, NULL, 64, "uint64");
|
||||
+ tdesc_create_reg (feature, "ebbhr", 143, 0, NULL, 64, "uint64");
|
||||
+ tdesc_create_reg (feature, "ebbrr", 144, 0, NULL, 64, "uint64");
|
||||
+
|
||||
+ feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux.pmu");
|
||||
+ tdesc_create_reg (feature, "mmcr0", 145, 0, NULL, 64, "uint64");
|
||||
+ tdesc_create_reg (feature, "mmcr2", 146, 0, NULL, 64, "uint64");
|
||||
+ tdesc_create_reg (feature, "siar", 147, 0, NULL, 64, "uint64");
|
||||
+ tdesc_create_reg (feature, "sdar", 148, 0, NULL, 64, "uint64");
|
||||
+ tdesc_create_reg (feature, "sier", 149, 0, NULL, 64, "uint64");
|
||||
+
|
||||
tdesc_powerpc_isa207_vsx32l = result;
|
||||
}
|
||||
diff --git a/gdb/features/rs6000/powerpc-isa207-vsx32l.xml b/gdb/features/rs6000/powerpc-isa207-vsx32l.xml
|
||||
--- a/gdb/features/rs6000/powerpc-isa207-vsx32l.xml
|
||||
+++ b/gdb/features/rs6000/powerpc-isa207-vsx32l.xml
|
||||
@@ -16,4 +16,6 @@
|
||||
<xi:include href="power-ppr.xml"/>
|
||||
<xi:include href="power-dscr.xml"/>
|
||||
<xi:include href="power-tar.xml"/>
|
||||
+ <xi:include href="power-ebb.xml"/>
|
||||
+ <xi:include href="power-linux-pmu.xml"/>
|
||||
</target>
|
||||
diff --git a/gdb/features/rs6000/powerpc-isa207-vsx64l.c b/gdb/features/rs6000/powerpc-isa207-vsx64l.c
|
||||
--- a/gdb/features/rs6000/powerpc-isa207-vsx64l.c
|
||||
+++ b/gdb/features/rs6000/powerpc-isa207-vsx64l.c
|
||||
@@ -199,5 +199,17 @@ initialize_tdesc_powerpc_isa207_vsx64l (void)
|
||||
feature = tdesc_create_feature (result, "org.gnu.gdb.power.tar");
|
||||
tdesc_create_reg (feature, "tar", 141, 1, NULL, 64, "uint64");
|
||||
|
||||
+ feature = tdesc_create_feature (result, "org.gnu.gdb.power.ebb");
|
||||
+ tdesc_create_reg (feature, "bescr", 142, 0, NULL, 64, "uint64");
|
||||
+ tdesc_create_reg (feature, "ebbhr", 143, 0, NULL, 64, "uint64");
|
||||
+ tdesc_create_reg (feature, "ebbrr", 144, 0, NULL, 64, "uint64");
|
||||
+
|
||||
+ feature = tdesc_create_feature (result, "org.gnu.gdb.power.linux.pmu");
|
||||
+ tdesc_create_reg (feature, "mmcr0", 145, 0, NULL, 64, "uint64");
|
||||
+ tdesc_create_reg (feature, "mmcr2", 146, 0, NULL, 64, "uint64");
|
||||
+ tdesc_create_reg (feature, "siar", 147, 0, NULL, 64, "uint64");
|
||||
+ tdesc_create_reg (feature, "sdar", 148, 0, NULL, 64, "uint64");
|
||||
+ tdesc_create_reg (feature, "sier", 149, 0, NULL, 64, "uint64");
|
||||
+
|
||||
tdesc_powerpc_isa207_vsx64l = result;
|
||||
}
|
||||
diff --git a/gdb/features/rs6000/powerpc-isa207-vsx64l.xml b/gdb/features/rs6000/powerpc-isa207-vsx64l.xml
|
||||
--- a/gdb/features/rs6000/powerpc-isa207-vsx64l.xml
|
||||
+++ b/gdb/features/rs6000/powerpc-isa207-vsx64l.xml
|
||||
@@ -16,4 +16,6 @@
|
||||
<xi:include href="power-ppr.xml"/>
|
||||
<xi:include href="power-dscr.xml"/>
|
||||
<xi:include href="power-tar.xml"/>
|
||||
+ <xi:include href="power-ebb.xml"/>
|
||||
+ <xi:include href="power-linux-pmu.xml"/>
|
||||
</target>
|
||||
diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
|
||||
--- a/gdb/gdbserver/configure.srv
|
||||
+++ b/gdb/gdbserver/configure.srv
|
||||
@@ -249,6 +249,8 @@ case "${target}" in
|
||||
srv_xmlfiles="${srv_xmlfiles} rs6000/power-dscr.xml"
|
||||
srv_xmlfiles="${srv_xmlfiles} rs6000/power-ppr.xml"
|
||||
srv_xmlfiles="${srv_xmlfiles} rs6000/power-tar.xml"
|
||||
+ srv_xmlfiles="${srv_xmlfiles} rs6000/power-ebb.xml"
|
||||
+ srv_xmlfiles="${srv_xmlfiles} rs6000/power-linux-pmu.xml"
|
||||
srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-e500l.xml"
|
||||
srv_xmlfiles="${srv_xmlfiles} rs6000/power-spe.xml"
|
||||
srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-64l.xml"
|
||||
diff --git a/gdb/gdbserver/linux-ppc-low.c b/gdb/gdbserver/linux-ppc-low.c
|
||||
--- a/gdb/gdbserver/linux-ppc-low.c
|
||||
+++ b/gdb/gdbserver/linux-ppc-low.c
|
||||
@@ -545,6 +545,61 @@ ppc_store_tarregset (struct regcache *regcache, const void *buf)
|
||||
supply_register_by_name (regcache, "tar", tar);
|
||||
}
|
||||
|
||||
+/* Event-Based Branching regset store function. Unless the inferior
|
||||
+ has a perf event open, ptrace can return in error when reading and
|
||||
+ writing to the regset, with ENODATA. For reading, the registers
|
||||
+ will correctly show as unavailable. For writing, gdbserver
|
||||
+ currently only caches any register writes from P and G packets and
|
||||
+ the stub always tries to write all the regsets when resuming the
|
||||
+ inferior, which would result in frequent warnings. For this
|
||||
+ reason, we don't define a fill function. This also means that the
|
||||
+ client-side regcache will be dirty if the user tries to write to
|
||||
+ the EBB registers. G packets that the client sends to write to
|
||||
+ unrelated registers will also include data for EBB registers, even
|
||||
+ if they are unavailable. */
|
||||
+
|
||||
+static void
|
||||
+ppc_store_ebbregset (struct regcache *regcache, const void *buf)
|
||||
+{
|
||||
+ const char *regset = (const char *) buf;
|
||||
+
|
||||
+ /* The order in the kernel regset is: EBBRR, EBBHR, BESCR. In the
|
||||
+ .dat file is BESCR, EBBHR, EBBRR. */
|
||||
+ supply_register_by_name (regcache, "ebbrr", ®set[0]);
|
||||
+ supply_register_by_name (regcache, "ebbhr", ®set[8]);
|
||||
+ supply_register_by_name (regcache, "bescr", ®set[16]);
|
||||
+}
|
||||
+
|
||||
+/* Performance Monitoring Unit regset fill function. */
|
||||
+
|
||||
+static void
|
||||
+ppc_fill_pmuregset (struct regcache *regcache, void *buf)
|
||||
+{
|
||||
+ char *regset = (char *) buf;
|
||||
+
|
||||
+ /* The order in the kernel regset is SIAR, SDAR, SIER, MMCR2, MMCR0.
|
||||
+ In the .dat file is MMCR0, MMCR2, SIAR, SDAR, SIER. */
|
||||
+ collect_register_by_name (regcache, "siar", ®set[0]);
|
||||
+ collect_register_by_name (regcache, "sdar", ®set[8]);
|
||||
+ collect_register_by_name (regcache, "sier", ®set[16]);
|
||||
+ collect_register_by_name (regcache, "mmcr2", ®set[24]);
|
||||
+ collect_register_by_name (regcache, "mmcr0", ®set[32]);
|
||||
+}
|
||||
+
|
||||
+/* Performance Monitoring Unit regset store function. */
|
||||
+
|
||||
+static void
|
||||
+ppc_store_pmuregset (struct regcache *regcache, const void *buf)
|
||||
+{
|
||||
+ const char *regset = (const char *) buf;
|
||||
+
|
||||
+ supply_register_by_name (regcache, "siar", ®set[0]);
|
||||
+ supply_register_by_name (regcache, "sdar", ®set[8]);
|
||||
+ supply_register_by_name (regcache, "sier", ®set[16]);
|
||||
+ supply_register_by_name (regcache, "mmcr2", ®set[24]);
|
||||
+ supply_register_by_name (regcache, "mmcr0", ®set[32]);
|
||||
+}
|
||||
+
|
||||
static void
|
||||
ppc_fill_vsxregset (struct regcache *regcache, void *buf)
|
||||
{
|
||||
@@ -654,6 +709,10 @@ static struct regset_info ppc_regsets[] = {
|
||||
fetch them every time, but still fall back to PTRACE_PEEKUSER for the
|
||||
general registers. Some kernels support these, but not the newer
|
||||
PPC_PTRACE_GETREGS. */
|
||||
+ { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_EBB, 0, EXTENDED_REGS,
|
||||
+ NULL, ppc_store_ebbregset },
|
||||
+ { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_PMU, 0, EXTENDED_REGS,
|
||||
+ ppc_fill_pmuregset, ppc_store_pmuregset },
|
||||
{ PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TAR, 0, EXTENDED_REGS,
|
||||
ppc_fill_tarregset, ppc_store_tarregset },
|
||||
{ PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_PPR, 0, EXTENDED_REGS,
|
||||
@@ -734,8 +793,13 @@ ppc_arch_setup (void)
|
||||
features.ppr_dscr = true;
|
||||
if ((ppc_hwcap2 & PPC_FEATURE2_ARCH_2_07)
|
||||
&& (ppc_hwcap2 & PPC_FEATURE2_TAR)
|
||||
+ && (ppc_hwcap2 & PPC_FEATURE2_EBB)
|
||||
&& ppc_check_regset (tid, NT_PPC_TAR,
|
||||
- PPC_LINUX_SIZEOF_TARREGSET))
|
||||
+ PPC_LINUX_SIZEOF_TARREGSET)
|
||||
+ && ppc_check_regset (tid, NT_PPC_EBB,
|
||||
+ PPC_LINUX_SIZEOF_EBBREGSET)
|
||||
+ && ppc_check_regset (tid, NT_PPC_PMU,
|
||||
+ PPC_LINUX_SIZEOF_PMUREGSET))
|
||||
features.isa207 = true;
|
||||
}
|
||||
|
||||
@@ -798,6 +862,14 @@ ppc_arch_setup (void)
|
||||
regset->size = (features.isa207 ?
|
||||
PPC_LINUX_SIZEOF_TARREGSET : 0);
|
||||
break;
|
||||
+ case NT_PPC_EBB:
|
||||
+ regset->size = (features.isa207 ?
|
||||
+ PPC_LINUX_SIZEOF_EBBREGSET : 0);
|
||||
+ break;
|
||||
+ case NT_PPC_PMU:
|
||||
+ regset->size = (features.isa207 ?
|
||||
+ PPC_LINUX_SIZEOF_PMUREGSET : 0);
|
||||
+ break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
diff --git a/gdb/nat/ppc-linux.h b/gdb/nat/ppc-linux.h
|
||||
--- a/gdb/nat/ppc-linux.h
|
||||
+++ b/gdb/nat/ppc-linux.h
|
||||
@@ -60,6 +60,9 @@
|
||||
#ifndef PPC_FEATURE2_TAR
|
||||
#define PPC_FEATURE2_TAR 0x04000000
|
||||
#endif
|
||||
+#ifndef PPC_FEATURE2_EBB
|
||||
+#define PPC_FEATURE2_EBB 0x10000000
|
||||
+#endif
|
||||
|
||||
/* Glibc's headers don't define PTRACE_GETVRREGS so we cannot use a
|
||||
configure time check. Some older glibc's (for instance 2.2.1)
|
||||
@@ -106,6 +109,16 @@
|
||||
#define NT_PPC_DSCR 0x105
|
||||
#endif
|
||||
|
||||
+/* Event Based Branch Registers. */
|
||||
+#ifndef NT_PPC_EBB
|
||||
+#define NT_PPC_EBB 0x106
|
||||
+#endif
|
||||
+
|
||||
+/* Performance Monitor Registers. */
|
||||
+#ifndef NT_PPC_PMU
|
||||
+#define NT_PPC_PMU 0x107
|
||||
+#endif
|
||||
+
|
||||
/* Return the wordsize of the target, either 4 or 8 bytes. */
|
||||
int ppc_linux_target_wordsize (int tid);
|
||||
|
||||
diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c
|
||||
--- a/gdb/ppc-linux-nat.c
|
||||
+++ b/gdb/ppc-linux-nat.c
|
||||
@@ -667,6 +667,24 @@ fetch_register (struct regcache *regcache, int tid, int regno)
|
||||
&ppc32_linux_tarregset);
|
||||
return;
|
||||
}
|
||||
+ else if (PPC_IS_EBB_REGNUM (regno))
|
||||
+ {
|
||||
+ gdb_assert (tdep->have_ebb);
|
||||
+
|
||||
+ fetch_regset (regcache, tid, NT_PPC_EBB,
|
||||
+ PPC_LINUX_SIZEOF_EBBREGSET,
|
||||
+ &ppc32_linux_ebbregset);
|
||||
+ return;
|
||||
+ }
|
||||
+ else if (PPC_IS_PMU_REGNUM (regno))
|
||||
+ {
|
||||
+ gdb_assert (tdep->ppc_mmcr0_regnum != -1);
|
||||
+
|
||||
+ fetch_regset (regcache, tid, NT_PPC_PMU,
|
||||
+ PPC_LINUX_SIZEOF_PMUREGSET,
|
||||
+ &ppc32_linux_pmuregset);
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
if (regaddr == -1)
|
||||
{
|
||||
@@ -875,6 +893,14 @@ fetch_ppc_registers (struct regcache *regcache, int tid)
|
||||
fetch_regset (regcache, tid, NT_PPC_TAR,
|
||||
PPC_LINUX_SIZEOF_TARREGSET,
|
||||
&ppc32_linux_tarregset);
|
||||
+ if (tdep->have_ebb)
|
||||
+ fetch_regset (regcache, tid, NT_PPC_EBB,
|
||||
+ PPC_LINUX_SIZEOF_EBBREGSET,
|
||||
+ &ppc32_linux_ebbregset);
|
||||
+ if (tdep->ppc_mmcr0_regnum != -1)
|
||||
+ fetch_regset (regcache, tid, NT_PPC_PMU,
|
||||
+ PPC_LINUX_SIZEOF_PMUREGSET,
|
||||
+ &ppc32_linux_pmuregset);
|
||||
}
|
||||
|
||||
/* Fetch registers from the child process. Fetch all registers if
|
||||
@@ -1082,6 +1108,24 @@ store_register (const struct regcache *regcache, int tid, int regno)
|
||||
&ppc32_linux_tarregset);
|
||||
return;
|
||||
}
|
||||
+ else if (PPC_IS_EBB_REGNUM (regno))
|
||||
+ {
|
||||
+ gdb_assert (tdep->have_ebb);
|
||||
+
|
||||
+ store_regset (regcache, tid, regno, NT_PPC_EBB,
|
||||
+ PPC_LINUX_SIZEOF_EBBREGSET,
|
||||
+ &ppc32_linux_ebbregset);
|
||||
+ return;
|
||||
+ }
|
||||
+ else if (PPC_IS_PMU_REGNUM (regno))
|
||||
+ {
|
||||
+ gdb_assert (tdep->ppc_mmcr0_regnum != -1);
|
||||
+
|
||||
+ store_regset (regcache, tid, regno, NT_PPC_PMU,
|
||||
+ PPC_LINUX_SIZEOF_PMUREGSET,
|
||||
+ &ppc32_linux_pmuregset);
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
if (regaddr == -1)
|
||||
return;
|
||||
@@ -1308,6 +1352,15 @@ store_ppc_registers (const struct regcache *regcache, int tid)
|
||||
store_regset (regcache, tid, -1, NT_PPC_TAR,
|
||||
PPC_LINUX_SIZEOF_TARREGSET,
|
||||
&ppc32_linux_tarregset);
|
||||
+
|
||||
+ if (tdep->ppc_mmcr0_regnum != -1)
|
||||
+ store_regset (regcache, tid, -1, NT_PPC_PMU,
|
||||
+ PPC_LINUX_SIZEOF_PMUREGSET,
|
||||
+ &ppc32_linux_pmuregset);
|
||||
+
|
||||
+ /* Because the EBB registers can be unavailable, attempts to store
|
||||
+ them here would cause this function to fail most of the time, so
|
||||
+ we ignore them. */
|
||||
}
|
||||
|
||||
/* Fetch the AT_HWCAP entry from the aux vector. */
|
||||
@@ -2439,7 +2492,10 @@ ppc_linux_nat_target::read_description ()
|
||||
features.ppr_dscr = true;
|
||||
if ((hwcap2 & PPC_FEATURE2_ARCH_2_07)
|
||||
&& (hwcap2 & PPC_FEATURE2_TAR)
|
||||
- && check_regset (tid, NT_PPC_TAR, PPC_LINUX_SIZEOF_TARREGSET))
|
||||
+ && (hwcap2 & PPC_FEATURE2_EBB)
|
||||
+ && check_regset (tid, NT_PPC_TAR, PPC_LINUX_SIZEOF_TARREGSET)
|
||||
+ && check_regset (tid, NT_PPC_EBB, PPC_LINUX_SIZEOF_EBBREGSET)
|
||||
+ && check_regset (tid, NT_PPC_PMU, PPC_LINUX_SIZEOF_PMUREGSET))
|
||||
features.isa207 = true;
|
||||
}
|
||||
|
||||
diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c
|
||||
--- a/gdb/ppc-linux-tdep.c
|
||||
+++ b/gdb/ppc-linux-tdep.c
|
||||
@@ -599,6 +599,44 @@ const struct regset ppc32_linux_tarregset = {
|
||||
regcache_collect_regset
|
||||
};
|
||||
|
||||
+/* Event-Based Branching regmap. */
|
||||
+
|
||||
+static const struct regcache_map_entry ppc32_regmap_ebb[] =
|
||||
+ {
|
||||
+ { 1, PPC_EBBRR_REGNUM, 8 },
|
||||
+ { 1, PPC_EBBHR_REGNUM, 8 },
|
||||
+ { 1, PPC_BESCR_REGNUM, 8 },
|
||||
+ { 0 }
|
||||
+ };
|
||||
+
|
||||
+/* Event-Based Branching regset. */
|
||||
+
|
||||
+const struct regset ppc32_linux_ebbregset = {
|
||||
+ ppc32_regmap_ebb,
|
||||
+ regcache_supply_regset,
|
||||
+ regcache_collect_regset
|
||||
+};
|
||||
+
|
||||
+/* Performance Monitoring Unit regmap. */
|
||||
+
|
||||
+static const struct regcache_map_entry ppc32_regmap_pmu[] =
|
||||
+ {
|
||||
+ { 1, PPC_SIAR_REGNUM, 8 },
|
||||
+ { 1, PPC_SDAR_REGNUM, 8 },
|
||||
+ { 1, PPC_SIER_REGNUM, 8 },
|
||||
+ { 1, PPC_MMCR2_REGNUM, 8 },
|
||||
+ { 1, PPC_MMCR0_REGNUM, 8 },
|
||||
+ { 0 }
|
||||
+ };
|
||||
+
|
||||
+/* Performance Monitoring Unit regset. */
|
||||
+
|
||||
+const struct regset ppc32_linux_pmuregset = {
|
||||
+ ppc32_regmap_pmu,
|
||||
+ regcache_supply_regset,
|
||||
+ regcache_collect_regset
|
||||
+};
|
||||
+
|
||||
const struct regset *
|
||||
ppc_linux_gregset (int wordsize)
|
||||
{
|
||||
@@ -674,6 +712,22 @@ ppc_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
|
||||
cb (".reg-ppc-tar", PPC_LINUX_SIZEOF_TARREGSET,
|
||||
PPC_LINUX_SIZEOF_TARREGSET,
|
||||
&ppc32_linux_tarregset, "Target Address Register", cb_data);
|
||||
+
|
||||
+ /* EBB registers are unavailable when ptrace returns ENODATA. Check
|
||||
+ availability when generating a core file (regcache != NULL). */
|
||||
+ if (tdep->have_ebb)
|
||||
+ if (regcache == NULL
|
||||
+ || REG_VALID == regcache->get_register_status (PPC_BESCR_REGNUM))
|
||||
+ cb (".reg-ppc-ebb", PPC_LINUX_SIZEOF_EBBREGSET,
|
||||
+ PPC_LINUX_SIZEOF_EBBREGSET,
|
||||
+ &ppc32_linux_ebbregset, "Event-based Branching Registers",
|
||||
+ cb_data);
|
||||
+
|
||||
+ if (tdep->ppc_mmcr0_regnum != -1)
|
||||
+ cb (".reg-ppc-pmu", PPC_LINUX_SIZEOF_PMUREGSET,
|
||||
+ PPC_LINUX_SIZEOF_PMUREGSET,
|
||||
+ &ppc32_linux_pmuregset, "Performance Monitor Registers",
|
||||
+ cb_data);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1089,6 +1143,7 @@ ppc_linux_core_read_description (struct gdbarch *gdbarch,
|
||||
asection *ppr = bfd_get_section_by_name (abfd, ".reg-ppc-ppr");
|
||||
asection *dscr = bfd_get_section_by_name (abfd, ".reg-ppc-dscr");
|
||||
asection *tar = bfd_get_section_by_name (abfd, ".reg-ppc-tar");
|
||||
+ asection *pmu = bfd_get_section_by_name (abfd, ".reg-ppc-pmu");
|
||||
|
||||
if (! section)
|
||||
return NULL;
|
||||
@@ -1124,7 +1179,12 @@ ppc_linux_core_read_description (struct gdbarch *gdbarch,
|
||||
if (ppr && dscr)
|
||||
{
|
||||
features.ppr_dscr = true;
|
||||
- if (tar)
|
||||
+
|
||||
+ /* We don't require the EBB note section to be present in the
|
||||
+ core file to select isa207 because these registers could have
|
||||
+ been unavailable when the core file was created. They will
|
||||
+ be in the tdep but will show as unavailable. */
|
||||
+ if (tar && pmu)
|
||||
features.isa207 = true;
|
||||
}
|
||||
|
||||
diff --git a/gdb/ppc-linux-tdep.h b/gdb/ppc-linux-tdep.h
|
||||
--- a/gdb/ppc-linux-tdep.h
|
||||
+++ b/gdb/ppc-linux-tdep.h
|
||||
@@ -48,5 +48,7 @@ int ppc_linux_trap_reg_p (struct gdbarch *gdbarch);
|
||||
extern const struct regset ppc32_linux_pprregset;
|
||||
extern const struct regset ppc32_linux_dscrregset;
|
||||
extern const struct regset ppc32_linux_tarregset;
|
||||
+extern const struct regset ppc32_linux_ebbregset;
|
||||
+extern const struct regset ppc32_linux_pmuregset;
|
||||
|
||||
#endif /* PPC_LINUX_TDEP_H */
|
||||
diff --git a/gdb/ppc-tdep.h b/gdb/ppc-tdep.h
|
||||
--- a/gdb/ppc-tdep.h
|
||||
+++ b/gdb/ppc-tdep.h
|
||||
@@ -265,6 +265,15 @@ struct gdbarch_tdep
|
||||
/* Decimal 128 registers. */
|
||||
int ppc_dl0_regnum; /* First Decimal128 argument register pair. */
|
||||
|
||||
+ int have_ebb;
|
||||
+
|
||||
+ /* PMU registers. */
|
||||
+ int ppc_mmcr0_regnum;
|
||||
+ int ppc_mmcr2_regnum;
|
||||
+ int ppc_siar_regnum;
|
||||
+ int ppc_sdar_regnum;
|
||||
+ int ppc_sier_regnum;
|
||||
+
|
||||
/* Offset to ABI specific location where link register is saved. */
|
||||
int lr_frame_offset;
|
||||
|
||||
@@ -321,12 +330,31 @@ enum {
|
||||
PPC_PPR_REGNUM = 172,
|
||||
PPC_DSCR_REGNUM = 173,
|
||||
PPC_TAR_REGNUM = 174,
|
||||
+
|
||||
+ /* EBB registers. */
|
||||
+ PPC_BESCR_REGNUM = 175,
|
||||
+ PPC_EBBHR_REGNUM = 176,
|
||||
+ PPC_EBBRR_REGNUM = 177,
|
||||
+
|
||||
+ /* PMU registers. */
|
||||
+ PPC_MMCR0_REGNUM = 178,
|
||||
+ PPC_MMCR2_REGNUM = 179,
|
||||
+ PPC_SIAR_REGNUM = 180,
|
||||
+ PPC_SDAR_REGNUM = 181,
|
||||
+ PPC_SIER_REGNUM = 182,
|
||||
+
|
||||
PPC_NUM_REGS
|
||||
};
|
||||
|
||||
/* Big enough to hold the size of the largest register in bytes. */
|
||||
#define PPC_MAX_REGISTER_SIZE 64
|
||||
|
||||
+#define PPC_IS_EBB_REGNUM(i) \
|
||||
+ ((i) >= PPC_BESCR_REGNUM && (i) <= PPC_EBBRR_REGNUM)
|
||||
+
|
||||
+#define PPC_IS_PMU_REGNUM(i) \
|
||||
+ ((i) >= PPC_MMCR0_REGNUM && (i) <= PPC_SIER_REGNUM)
|
||||
+
|
||||
/* An instruction to match. */
|
||||
|
||||
struct ppc_insn_pattern
|
||||
diff --git a/gdb/regformats/rs6000/powerpc-isa207-vsx32l.dat b/gdb/regformats/rs6000/powerpc-isa207-vsx32l.dat
|
||||
--- a/gdb/regformats/rs6000/powerpc-isa207-vsx32l.dat
|
||||
+++ b/gdb/regformats/rs6000/powerpc-isa207-vsx32l.dat
|
||||
@@ -145,3 +145,11 @@ expedite:r1,pc
|
||||
64:ppr
|
||||
64:dscr
|
||||
64:tar
|
||||
+64:bescr
|
||||
+64:ebbhr
|
||||
+64:ebbrr
|
||||
+64:mmcr0
|
||||
+64:mmcr2
|
||||
+64:siar
|
||||
+64:sdar
|
||||
+64:sier
|
||||
diff --git a/gdb/regformats/rs6000/powerpc-isa207-vsx64l.dat b/gdb/regformats/rs6000/powerpc-isa207-vsx64l.dat
|
||||
--- a/gdb/regformats/rs6000/powerpc-isa207-vsx64l.dat
|
||||
+++ b/gdb/regformats/rs6000/powerpc-isa207-vsx64l.dat
|
||||
@@ -145,3 +145,11 @@ expedite:r1,pc
|
||||
64:ppr
|
||||
64:dscr
|
||||
64:tar
|
||||
+64:bescr
|
||||
+64:ebbhr
|
||||
+64:ebbrr
|
||||
+64:mmcr0
|
||||
+64:mmcr2
|
||||
+64:siar
|
||||
+64:sdar
|
||||
+64:sier
|
||||
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
|
||||
--- a/gdb/rs6000-tdep.c
|
||||
+++ b/gdb/rs6000-tdep.c
|
||||
@@ -5871,7 +5871,7 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
enum powerpc_elf_abi elf_abi = POWERPC_ELF_AUTO;
|
||||
int have_fpu = 0, have_spe = 0, have_mq = 0, have_altivec = 0;
|
||||
int have_dfp = 0, have_vsx = 0, have_ppr = 0, have_dscr = 0;
|
||||
- int have_tar = 0;
|
||||
+ int have_tar = 0, have_ebb = 0, have_pmu = 0;
|
||||
int tdesc_wordsize = -1;
|
||||
const struct target_desc *tdesc = info.target_desc;
|
||||
struct tdesc_arch_data *tdesc_data = NULL;
|
||||
@@ -6211,6 +6211,64 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
}
|
||||
else
|
||||
have_tar = 0;
|
||||
+
|
||||
+ /* Event-based Branching Registers. */
|
||||
+ feature = tdesc_find_feature (tdesc,
|
||||
+ "org.gnu.gdb.power.ebb");
|
||||
+ if (feature != NULL)
|
||||
+ {
|
||||
+ static const char *const ebb_regs[] = {
|
||||
+ "bescr", "ebbhr", "ebbrr"
|
||||
+ };
|
||||
+
|
||||
+ valid_p = 1;
|
||||
+ for (i = 0; i < ARRAY_SIZE (ebb_regs); i++)
|
||||
+ valid_p &= tdesc_numbered_register (feature, tdesc_data,
|
||||
+ PPC_BESCR_REGNUM + i,
|
||||
+ ebb_regs[i]);
|
||||
+ if (!valid_p)
|
||||
+ {
|
||||
+ tdesc_data_cleanup (tdesc_data);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ have_ebb = 1;
|
||||
+ }
|
||||
+ else
|
||||
+ have_ebb = 0;
|
||||
+
|
||||
+ /* Subset of the ISA 2.07 Performance Monitor Registers provided
|
||||
+ by Linux. */
|
||||
+ feature = tdesc_find_feature (tdesc,
|
||||
+ "org.gnu.gdb.power.linux.pmu");
|
||||
+ if (feature != NULL)
|
||||
+ {
|
||||
+ valid_p = 1;
|
||||
+
|
||||
+ valid_p &= tdesc_numbered_register (feature, tdesc_data,
|
||||
+ PPC_MMCR0_REGNUM,
|
||||
+ "mmcr0");
|
||||
+ valid_p &= tdesc_numbered_register (feature, tdesc_data,
|
||||
+ PPC_MMCR2_REGNUM,
|
||||
+ "mmcr2");
|
||||
+ valid_p &= tdesc_numbered_register (feature, tdesc_data,
|
||||
+ PPC_SIAR_REGNUM,
|
||||
+ "siar");
|
||||
+ valid_p &= tdesc_numbered_register (feature, tdesc_data,
|
||||
+ PPC_SDAR_REGNUM,
|
||||
+ "sdar");
|
||||
+ valid_p &= tdesc_numbered_register (feature, tdesc_data,
|
||||
+ PPC_SIER_REGNUM,
|
||||
+ "sier");
|
||||
+
|
||||
+ if (!valid_p)
|
||||
+ {
|
||||
+ tdesc_data_cleanup (tdesc_data);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ have_pmu = 1;
|
||||
+ }
|
||||
+ else
|
||||
+ have_pmu = 0;
|
||||
}
|
||||
|
||||
/* If we have a 64-bit binary on a 32-bit target, complain. Also
|
||||
@@ -6408,6 +6466,20 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
tdep->ppc_ppr_regnum = have_ppr ? PPC_PPR_REGNUM : -1;
|
||||
tdep->ppc_dscr_regnum = have_dscr ? PPC_DSCR_REGNUM : -1;
|
||||
tdep->ppc_tar_regnum = have_tar ? PPC_TAR_REGNUM : -1;
|
||||
+ tdep->have_ebb = have_ebb;
|
||||
+
|
||||
+ /* If additional pmu registers are added, care must be taken when
|
||||
+ setting new fields in the tdep below, to maintain compatibility
|
||||
+ with features that only provide some of the registers. Currently
|
||||
+ gdb access to the pmu registers is only supported in linux, and
|
||||
+ linux only provides a subset of the pmu registers defined in the
|
||||
+ architecture. */
|
||||
+
|
||||
+ tdep->ppc_mmcr0_regnum = have_pmu ? PPC_MMCR0_REGNUM : -1;
|
||||
+ tdep->ppc_mmcr2_regnum = have_pmu ? PPC_MMCR2_REGNUM : -1;
|
||||
+ tdep->ppc_siar_regnum = have_pmu ? PPC_SIAR_REGNUM : -1;
|
||||
+ tdep->ppc_sdar_regnum = have_pmu ? PPC_SDAR_REGNUM : -1;
|
||||
+ tdep->ppc_sier_regnum = have_pmu ? PPC_SIER_REGNUM : -1;
|
||||
|
||||
set_gdbarch_pc_regnum (gdbarch, PPC_PC_REGNUM);
|
||||
set_gdbarch_sp_regnum (gdbarch, PPC_R0_REGNUM + 1);
|
@ -1,38 +0,0 @@
|
||||
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||
From: Keith Seitz <keiths@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 17:02:18 -0500
|
||||
Subject: gdb-rhbz1187581-power8-regs-not-in-8.2-13of15.patch
|
||||
|
||||
;; [PowerPC] Reject tdescs with VSX and no FPU or Altivec
|
||||
;; Pedro Franco de Carvalho, RH BZ 1187581
|
||||
|
||||
[PowerPC] Reject tdescs with VSX and no FPU or Altivec
|
||||
|
||||
Currently rs6000_gdbarch_init will accept a tdesc with the
|
||||
"org.gnu.gdb.power.vsx" feature but without the
|
||||
"org.gnu.gdb.power.altivec" or "org.gnu.gdb.power.fpu".
|
||||
|
||||
It isn't clear from the standard features documentation that these are
|
||||
requirements. However, these tdescs would cause trouble in the VSX
|
||||
pseudo-register functions, so this patch will cause them to be
|
||||
rejected.
|
||||
|
||||
gdb/ChangeLog:
|
||||
2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
|
||||
|
||||
* rs6000-tdep.c (rs6000_gdbarch_init): Reject tdescs with vsx but
|
||||
without altivec or fpu.
|
||||
|
||||
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
|
||||
--- a/gdb/rs6000-tdep.c
|
||||
+++ b/gdb/rs6000-tdep.c
|
||||
@@ -6096,7 +6096,8 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
valid_p &= tdesc_numbered_register (feature, tdesc_data,
|
||||
PPC_VSR0_UPPER_REGNUM + i,
|
||||
vsx_regs[i]);
|
||||
- if (!valid_p)
|
||||
+
|
||||
+ if (!valid_p || !have_fpu || !have_altivec)
|
||||
{
|
||||
tdesc_data_cleanup (tdesc_data);
|
||||
return NULL;
|
File diff suppressed because it is too large
Load Diff
@ -1,43 +0,0 @@
|
||||
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||
From: Keith Seitz <keiths@redhat.com>
|
||||
Date: Fri, 11 Jan 2019 17:02:19 -0500
|
||||
Subject: gdb-rhbz1187581-power8-regs-not-in-8.2-15of15.patch
|
||||
|
||||
;; [PowerPC] Document requirements for VSX feature
|
||||
;; Pedro Franco de Carvalho, RH BZ 1187581
|
||||
|
||||
[PowerPC] Document requirements for VSX feature
|
||||
|
||||
As suggested in
|
||||
https://sourceware.org/ml/gdb-patches/2018-10/msg00510.html, this
|
||||
patch changes the documentation for the VSX tdesc feature to make it
|
||||
clear that the altivec and FPU features are requirements.
|
||||
|
||||
gdb/doc/ChangeLog:
|
||||
2018-11-09 Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
|
||||
|
||||
* gdb.texinfo (PowerPC Features): Document the altivec and fpu
|
||||
requirements for the org.gnu.gdb.power.vsx feature.
|
||||
|
||||
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
|
||||
--- a/gdb/doc/gdb.texinfo
|
||||
+++ b/gdb/doc/gdb.texinfo
|
||||
@@ -42541,11 +42541,13 @@ contain registers @samp{vr0} through @samp{vr31}, @samp{vscr},
|
||||
and @samp{vrsave}.
|
||||
|
||||
The @samp{org.gnu.gdb.power.vsx} feature is optional. It should
|
||||
-contain registers @samp{vs0h} through @samp{vs31h}. @value{GDBN}
|
||||
-will combine these registers with the floating point registers
|
||||
-(@samp{f0} through @samp{f31}) and the altivec registers (@samp{vr0}
|
||||
-through @samp{vr31}) to present the 128-bit wide registers @samp{vs0}
|
||||
-through @samp{vs63}, the set of vector registers for POWER7.
|
||||
+contain registers @samp{vs0h} through @samp{vs31h}. @value{GDBN} will
|
||||
+combine these registers with the floating point registers (@samp{f0}
|
||||
+through @samp{f31}) and the altivec registers (@samp{vr0} through
|
||||
+@samp{vr31}) to present the 128-bit wide registers @samp{vs0} through
|
||||
+@samp{vs63}, the set of vector-scalar registers for POWER7.
|
||||
+Therefore, this feature requires both @samp{org.gnu.gdb.power.fpu} and
|
||||
+@samp{org.gnu.gdb.power.altivec}.
|
||||
|
||||
The @samp{org.gnu.gdb.power.spe} feature is optional. It should
|
||||
contain registers @samp{ev0h} through @samp{ev31h}, @samp{acc}, and
|
@ -1,20 +0,0 @@
|
||||
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||
From: Keith Seitz <keiths@redhat.com>
|
||||
Date: Fri, 8 Mar 2019 11:39:10 -0800
|
||||
Subject: gdb-rhbz1666249-suggest-yum-instead-of-dnf.patch
|
||||
|
||||
;; Fix 'gdb suggests using "dnf debuginfo-install'
|
||||
;; Keith Seitz, RHBZ 1666249
|
||||
|
||||
diff --git a/gdb/build-id.c b/gdb/build-id.c
|
||||
--- a/gdb/build-id.c
|
||||
+++ b/gdb/build-id.c
|
||||
@@ -1013,6 +1013,8 @@ missing_rpm_list_print (void)
|
||||
printf_unfiltered (_("Missing separate debuginfos, use: %s"),
|
||||
#ifdef DNF_DEBUGINFO_INSTALL
|
||||
"dnf "
|
||||
+#else
|
||||
+ "yum "
|
||||
#endif
|
||||
"debuginfo-install");
|
||||
for (array_iter = array; array_iter < array + missing_rpm_list_entries;
|
File diff suppressed because it is too large
Load Diff
@ -506,9 +506,7 @@ cd %{gdb_build}$fprofile
|
||||
export CFLAGS="$RPM_OPT_FLAGS %{?_with_asan:-fsanitize=address}"
|
||||
export LDFLAGS="%{?__global_ldflags} %{?_with_asan:-fsanitize=address}"
|
||||
|
||||
# Messaging on RHEL8 is still to use yum (even though that only
|
||||
# redirects to dnf). rhbz1666249
|
||||
%if 0%{!?rhel:1}
|
||||
%if 0%{!?rhel:1} || 0%{?rhel} > 7
|
||||
CFLAGS="$CFLAGS -DDNF_DEBUGINFO_INSTALL"
|
||||
%endif
|
||||
|
||||
@ -1034,15 +1032,9 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Wed Apr 3 2019 Keith Seitz <keiths@redhat.com> 8.2-6.el8
|
||||
- Fix yum vs dnf messaging for RHEL8 (RH BZ 1666249):
|
||||
Add gdb-rhbz1666249-suggest-yum-instead-of-dnf.pattch
|
||||
Do not define DNF_DEBUGINFO_INSTALL for RHEL.
|
||||
- Backport "Remove support for old mangling schemes"
|
||||
(Simon Marchi, RH BZ 1668635)
|
||||
- Backport "Add checks for the NT_ARM_SVE section in a core file."
|
||||
(Alan Hayward, RH BZ 1669953)
|
||||
- Backport more Power8 support (IBM, RH BZ 1187581)
|
||||
* Thu Apr 25 2019 Keith Seitz <keiths@redhat.com> - 8.2-6.el8
|
||||
- Backport "Fix 'gdb fails to read zN registers from corefile with aarc64 SVE'"
|
||||
(Alan Hayward, RH BZ 1699376)
|
||||
|
||||
* Fri Jan 11 2019 Keith Seitz <keiths@redhat.com> - 8.2-5.el8
|
||||
- Merge from Fedora 29:
|
||||
|
Loading…
Reference in New Issue
Block a user