aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Kolesov <Anton.Kolesov@synopsys.com>2017-05-15 16:17:29 +0300
committerClaudiu Zissulescu <claziss@gmail.com>2020-04-23 11:09:09 +0300
commit2745674244d6aecddcf636475034bdb9c0a6b4a0 (patch)
tree9dccc5b7f4444f1971361691119062f69c24c57c
parent96038148d0e9f7dc89284310d065e27a3fa375f2 (diff)
downloadbinutils-2745674244d6aecddcf636475034bdb9c0a6b4a0.zip
binutils-2745674244d6aecddcf636475034bdb9c0a6b4a0.tar.gz
binutils-2745674244d6aecddcf636475034bdb9c0a6b4a0.tar.bz2
arc: Add support for ARC HS extra registers in core files
When a coredump is generated, there are a few registers in ARC HS that are put under a special section, namely ".reg-v2". It is for backward compatibility reasons with older tools that we have decided not to extend the generic ".reg" section. This patch makes it possible to display the information better regarding that section. Compare the output of "readelf" without and with these changes: $ readelf -n core # without the patch ... LINUX 0x0000000c Unknown note type: (0x00000600) description data: 78 08 00 00 2f 6c 64 2d 75 43 6c 69 $ readelf -n core # with the patch ... LINUX 0x0000000c NT_ARC_V2 (ARC HS accumulator/extra registers) description data: 78 08 00 00 2f 6c 64 2d 75 43 6c 69 In another commit (soon to be submitted), GDB will makes use of these changes to parse the extra section and its registers. bfd/ChangeLog 2020-03-26 Anton Kolesov <anton.kolesov@synopsys.com> * elf-bfd.h (elfcore_write_arc_v2): Add prototype. * elf.c (elfcore_grok_arc_v2): New function. (elfcore_grok_note): Call the new function to handle the corresponding note. (elfcore_write_arc_v2): New function. (elfcore_write_register_note): Call the new function to handle the corresponding pseudo-sections. binutils/ChangeLog 2020-03-26 Anton Kolesov <anton.kolesov@synopsys.com> * readelf.c (get_note_type): Handle NT_ARC_V2. include/elf/ChangeLog 2020-03-26 Anton Kolesov <anton.kolesov@synopsys.com> * common.h (NT_ARC_V2): New macro definitions.
-rw-r--r--bfd/ChangeLog10
-rw-r--r--bfd/elf-bfd.h2
-rw-r--r--bfd/elf.c27
-rw-r--r--binutils/ChangeLog10
-rw-r--r--binutils/readelf.c2
-rw-r--r--include/ChangeLog4
-rw-r--r--include/elf/common.h2
7 files changed, 57 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index adba80c..c81b97b 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,13 @@
+2020-04-23 Anton Kolesov <anton.kolesov@synopsys.com>
+
+ * elf-bfd.h (elfcore_write_arc_v2): Add prototype.
+ * elf.c (elfcore_grok_arc_v2): New function.
+ (elfcore_grok_note): Call the new function to handle the corresponding
+ note.
+ (elfcore_write_arc_v2): New function.
+ (elfcore_write_register_note): Call the new function to handle the
+ corresponding pseudo-sections.
+
2020-04-22 Max Filippov <jcmvbkbc@gmail.com>
PR ld/25861
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 3ae9842..e69234d 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -2738,6 +2738,8 @@ extern char *elfcore_write_aarch_sve
(bfd *, char *, int *, const void *, int);
extern char *elfcore_write_aarch_pauth
(bfd *, char *, int *, const void *, int);
+extern char *elfcore_write_arc_v2
+ (bfd *, char *, int *, const void *, int);
extern char *elfcore_write_lwpstatus
(bfd *, char *, int *, long, int, const void *);
extern char *elfcore_write_register_note
diff --git a/bfd/elf.c b/bfd/elf.c
index f3364ee..e9c5259 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -9865,6 +9865,12 @@ elfcore_grok_aarch_pauth (bfd *abfd, Elf_Internal_Note *note)
return elfcore_make_note_pseudosection (abfd, ".reg-aarch-pauth", note);
}
+static bfd_boolean
+elfcore_grok_arc_v2 (bfd *abfd, Elf_Internal_Note *note)
+{
+ return elfcore_make_note_pseudosection (abfd, ".reg-arc-v2", note);
+}
+
#if defined (HAVE_PRPSINFO_T)
typedef prpsinfo_t elfcore_psinfo_t;
#if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */
@@ -10424,6 +10430,13 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
else
return TRUE;
+ case NT_ARC_V2:
+ if (note->namesz == 6
+ && strcmp (note->namedata, "LINUX") == 0)
+ return elfcore_grok_arc_v2 (abfd, note);
+ else
+ return TRUE;
+
case NT_ARM_VFP:
if (note->namesz == 6
&& strcmp (note->namedata, "LINUX") == 0)
@@ -11836,6 +11849,18 @@ elfcore_write_aarch_pauth (bfd *abfd,
}
char *
+elfcore_write_arc_v2 (bfd *abfd,
+ char *buf,
+ int *bufsiz,
+ const void *arc_v2,
+ int size)
+{
+ char *note_name = "LINUX";
+ return elfcore_write_note (abfd, buf, bufsiz,
+ note_name, NT_ARC_V2, arc_v2, size);
+}
+
+char *
elfcore_write_register_note (bfd *abfd,
char *buf,
int *bufsiz,
@@ -11917,6 +11942,8 @@ elfcore_write_register_note (bfd *abfd,
return elfcore_write_aarch_sve (abfd, buf, bufsiz, data, size);
if (strcmp (section, ".reg-aarch-pauth") == 0)
return elfcore_write_aarch_pauth (abfd, buf, bufsiz, data, size);
+ if (strcmp (section, ".reg-arc-v2") == 0)
+ return elfcore_write_arc_v2 (abfd, buf, bufsiz, data, size);
return NULL;
}
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 0762611..7f7e340 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,13 @@
+2020-04-23 Anton Kolesov <anton.kolesov@synopsys.com>
+
+ * elf-bfd.h (elfcore_write_arc_v2): Add prototype.
+ * elf.c (elfcore_grok_arc_v2): New function.
+ (elfcore_grok_note): Call the new function to handle the corresponding
+ note.
+ (elfcore_write_arc_v2): New function.
+ (elfcore_write_register_note): Call the new function to handle the
+ corresponding pseudo-sections.
+
2020-04-22 Max Filippov <jcmvbkbc@gmail.com>
PR ld/25861
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 4f80bd9..f3e374d 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -17642,6 +17642,8 @@ get_note_type (Filedata * filedata, unsigned e_type)
return _("NT_ARM_HW_BREAK (AArch hardware breakpoint registers)");
case NT_ARM_HW_WATCH:
return _("NT_ARM_HW_WATCH (AArch hardware watchpoint registers)");
+ case NT_ARC_V2:
+ return _("NT_ARC_V2 (ARC HS accumulator/extra registers)");
case NT_PSTATUS:
return _("NT_PSTATUS (pstatus structure)");
case NT_FPREGS:
diff --git a/include/ChangeLog b/include/ChangeLog
index bf379cc..eea127a 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,7 @@
+2020-04-23 Anton Kolesov <anton.kolesov@synopsys.com>
+
+ * elf/common.h (NT_ARC_V2): New macro definitions.
+
2020-04-22 Max Filippov <jcmvbkbc@gmail.com>
PR ld/25861
diff --git a/include/elf/common.h b/include/elf/common.h
index 6741c34..26e6fbc 100644
--- a/include/elf/common.h
+++ b/include/elf/common.h
@@ -652,6 +652,8 @@
/* note name must be "LINUX". */
#define NT_ARM_PAC_MASK 0x406 /* AArch pointer authentication code masks */
/* note name must be "LINUX". */
+#define NT_ARC_V2 0x600 /* ARC HS accumulator/extra registers. */
+ /* note name must be "LINUX". */
#define NT_SIGINFO 0x53494749 /* Fields of siginfo_t. */
#define NT_FILE 0x46494c45 /* Description of mapped files. */