[binutils-gdb] bfd/readelf: Add core file support for FEAT_S1POE
SRINATH PARVATHANENI via Binutils-cvs <[email protected]> Thu, 2 Jul 2026 13:57:40 +0000 (GMT)
| Newsgroups | gmane.comp.gnu.binutils.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d15490528409305f97004a2860fdb04543862774 commit d15490528409305f97004a2860fdb04543862774 Author: Srinath Parvathaneni <[email protected]> Date: Thu Jul 2 13:57:25 2026 +0000 bfd/readelf: Add core file support for FEAT_S1POE Add support for `NT_ARM_POE` dumps/reads for core files. Diff: --- bfd/elf.c | 25 +++++++++++++++++++++++++ binutils/readelf.c | 2 ++ include/elf/common.h | 2 ++ 3 files changed, 29 insertions(+) diff --git a/bfd/elf.c b/bfd/elf.c index c9a68404e9d..c7f557b8be6 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -64,6 +64,7 @@ SECTION /* Names of a pseudo-section which represent core notes. */ #define NOTE_PSEUDO_SECTION_AARCH_FPMR ".reg-aarch-fpmr" #define NOTE_PSEUDO_SECTION_AARCH_GCS ".reg-aarch-gcs" +#define NOTE_PSEUDO_SECTION_AARCH_POE ".reg-aarch-poe" #define NOTE_PSEUDO_SECTION_AARCH_HW_BREAK ".reg-aarch-hw-break" #define NOTE_PSEUDO_SECTION_AARCH_HW_WATCH ".reg-aarch-hw-watch" #define NOTE_PSEUDO_SECTION_AARCH_MTE ".reg-aarch-mte" @@ -10735,6 +10736,15 @@ elfcore_grok_aarch_gcs (bfd *abfd, Elf_Internal_Note *note) return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_AARCH_GCS, note); } +/* Convert NOTE into a bfd_section called ".reg-aarch-poe". Return TRUE if + successful, otherwise return FALSE. */ + +static bool +elfcore_grok_aarch_poe (bfd *abfd, Elf_Internal_Note *note) +{ + return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_AARCH_POE, note); +} + /* Convert NOTE into the appropriate note pseudo-section for the AArch64 FPMR. * Return TRUE if successful, otherwise return FALSE. */ @@ -11179,6 +11189,7 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note) case NT_ARC_V2: return elfcore_grok_arc_v2 (abfd, note); case NT_ARM_FPMR: return elfcore_grok_aarch_fpmr (abfd, note); case NT_ARM_GCS: return elfcore_grok_aarch_gcs (abfd, note); + case NT_ARM_POE: return elfcore_grok_aarch_poe (abfd, note); case NT_ARM_HW_BREAK: return elfcore_grok_aarch_hw_break (abfd, note); case NT_ARM_HW_WATCH: return elfcore_grok_aarch_hw_watch (abfd, note); case NT_ARM_PAC_MASK: return elfcore_grok_aarch_pauth (abfd, note); @@ -12900,6 +12911,19 @@ elfcore_write_aarch_gcs (bfd *abfd, char *buf, int *bufsiz, aarch_gcs, size); } +/* Write the buffer of POE register values in AARCH_POE (length SIZE) into + the note buffer BUF and update *BUFSIZ. ABFD is the bfd the note is being + written into. Return a pointer to the new start of the note buffer, to + replace BUF which may no longer be valid. */ + +static char * +elfcore_write_aarch_poe (bfd *abfd, char *buf, int *bufsiz, + const void *aarch_poe, int size) +{ + return elfcore_write_note (abfd, buf, bufsiz, NOTE_NAME_LINUX, NT_ARM_POE, + aarch_poe, size); +} + /* Write the buffer of FPMR value in AARCH_FPMR (length SIZE) into the note buffer BUF and update *BUFSIZ. ABFD is the bfd the note is being written into. Return a pointer to the new start of the note buffer, to @@ -13024,6 +13048,7 @@ elfcore_write_register_note (bfd *abfd, { { NOTE_PSEUDO_SECTION_AARCH_FPMR, elfcore_write_aarch_fpmr}, { NOTE_PSEUDO_SECTION_AARCH_GCS, elfcore_write_aarch_gcs}, + { NOTE_PSEUDO_SECTION_AARCH_POE, elfcore_write_aarch_poe}, { NOTE_PSEUDO_SECTION_AARCH_HW_BREAK, elfcore_write_aarch_hw_break}, { NOTE_PSEUDO_SECTION_AARCH_HW_WATCH, elfcore_write_aarch_hw_watch}, { NOTE_PSEUDO_SECTION_AARCH_MTE, elfcore_write_aarch_mte}, diff --git a/binutils/readelf.c b/binutils/readelf.c index 59b9d906f08..fe5a217801b 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -21919,6 +21919,8 @@ get_note_type (Filedata * filedata, unsigned e_type) return _("NT_ARM_PAC_ENABLED_KEYS (AArch64 pointer authentication enabled keys)"); case NT_ARM_FPMR: return _("NT_ARM_FPMR (AArch64 Floating Point Mode Register)"); + case NT_ARM_POE: + return _("NT_ARM_POE (AArch64 Permission Overlay Extension Register)"); case NT_ARC_V2: return _("NT_ARC_V2 (ARC HS accumulator/extra registers)"); case NT_RISCV_CSR: diff --git a/include/elf/common.h b/include/elf/common.h index 1ae68221a89..f811b8daeb5 100644 --- a/include/elf/common.h +++ b/include/elf/common.h @@ -760,6 +760,8 @@ /* Note: name must be "LINUX". */ #define NT_ARM_FPMR 0x40e /* AArch64 FPMR. */ /* Note: name must be "LINUX". */ +#define NT_ARM_POE 0x40f /* AArch64 POE register. */ + /* Note: name must be "LINUX". */ #define NT_ARM_GCS 0x410 /* AArch64 Guarded Control Stack registers. */ /* Note name must be "LINUX". */