This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] S390: Add support for TDB notes section
- From: Andreas Arnez <arnez at linux dot vnet dot ibm dot com>
- To: Andreas Krebbel <krebbel at linux dot vnet dot ibm dot com>
- Cc: binutils at sourceware dot org, Ulrich Weigand <uweigand at de dot ibm dot com>, martin dot schwidefsky at de dot ibm dot com
- Date: Fri, 08 Mar 2013 14:38:32 +0100
- Subject: Re: [PATCH] S390: Add support for TDB notes section
- References: <87mwuegin0.fsf@br87z6lw.de.ibm.com> <5139E216.1050001@linux.vnet.ibm.com>
Andreas Krebbel <krebbel@linux.vnet.ibm.com> writes:
> Could you please add an output string for readelf as well?
Sure. Here's the updated patch.
bfd/ChangeLog:
2013-03-08 Andreas Arnez <arnez@linux.vnet.ibm.com>
* elf-bfd.h (elfcore_write_s390_tdb): Add prototype.
* elf.c (elfcore_write_s390_tdb): New function.
(elfcore_write_register_note): Call it.
(elfcore_grok_s390_tdb): New function.
(elfcore_grok_note): Call it.
binutils/ChangeLog:
2013-03-08 Andreas Arnez <arnez@linux.vnet.ibm.com>
* readelf.c (get_note_type): Add NT_S390_TDB.
---
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 72be700..9319cb7 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -2291,6 +2291,8 @@ extern char *elfcore_write_s390_last_break
(bfd *, char *, int *, const void *, int);
extern char *elfcore_write_s390_system_call
(bfd *, char *, int *, const void *, int);
+extern char *elfcore_write_s390_tdb
+ (bfd *, char *, int *, const void *, int);
extern char *elfcore_write_arm_vfp
(bfd *, char *, int *, const void *, int);
extern char *elfcore_write_aarch_tls
diff --git a/bfd/elf.c b/bfd/elf.c
index e0487c2..b4892ba 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -8175,6 +8175,12 @@ elfcore_grok_s390_system_call (bfd *abfd, Elf_Internal_Note *note)
}
static bfd_boolean
+elfcore_grok_s390_tdb (bfd *abfd, Elf_Internal_Note *note)
+{
+ return elfcore_make_note_pseudosection (abfd, ".reg-s390-tdb", note);
+}
+
+static bfd_boolean
elfcore_grok_arm_vfp (bfd *abfd, Elf_Internal_Note *note)
{
return elfcore_make_note_pseudosection (abfd, ".reg-arm-vfp", note);
@@ -8631,6 +8637,13 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
else
return TRUE;
+ case NT_S390_TDB:
+ if (note->namesz == 6
+ && strcmp (note->namedata, "LINUX") == 0)
+ return elfcore_grok_s390_tdb (abfd, note);
+ else
+ return TRUE;
+
case NT_ARM_VFP:
if (note->namesz == 6
&& strcmp (note->namedata, "LINUX") == 0)
@@ -9485,6 +9498,18 @@ elfcore_write_s390_system_call (bfd *abfd,
}
char *
+elfcore_write_s390_tdb (bfd *abfd,
+ char *buf,
+ int *bufsiz,
+ const void *s390_tdb,
+ int size)
+{
+ char *note_name = "LINUX";
+ return elfcore_write_note (abfd, buf, bufsiz,
+ note_name, NT_S390_TDB, s390_tdb, size);
+}
+
+char *
elfcore_write_arm_vfp (bfd *abfd,
char *buf,
int *bufsiz,
@@ -9566,6 +9591,8 @@ elfcore_write_register_note (bfd *abfd,
return elfcore_write_s390_last_break (abfd, buf, bufsiz, data, size);
if (strcmp (section, ".reg-s390-system-call") == 0)
return elfcore_write_s390_system_call (abfd, buf, bufsiz, data, size);
+ if (strcmp (section, ".reg-s390-tdb") == 0)
+ return elfcore_write_s390_tdb (abfd, buf, bufsiz, data, size);
if (strcmp (section, ".reg-arm-vfp") == 0)
return elfcore_write_arm_vfp (abfd, buf, bufsiz, data, size);
if (strcmp (section, ".reg-aarch-tls") == 0)
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 28172f2..266e37e 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -12843,6 +12843,8 @@ get_note_type (unsigned e_type)
return _("NT_S390_LAST_BREAK (s390 last breaking event address)");
case NT_S390_SYSTEM_CALL:
return _("NT_S390_SYSTEM_CALL (s390 system call restart data)");
+ case NT_S390_TDB:
+ return _("NT_S390_TDB (s390 transaction diagnostic block)");
case NT_ARM_VFP:
return _("NT_ARM_VFP (arm VFP registers)");
case NT_ARM_TLS:
diff --git a/include/elf/common.h b/include/elf/common.h
index 2bae603..b854a7c 100644
--- a/include/elf/common.h
+++ b/include/elf/common.h
@@ -552,6 +552,8 @@
/* note name must be "LINUX". */
#define NT_S390_SYSTEM_CALL 0x307 /* S390 system call restart data */
/* note name must be "LINUX". */
+#define NT_S390_TDB 0x308 /* S390 transaction diagnostic block */
+ /* note name must be "LINUX". */
#define NT_ARM_VFP 0x400 /* ARM VFP registers */
/* The following definitions should really use NT_AARCH_..., but defined
this way for compatibility with Linux. */