From f0bbe8bab84e9b9dc5367a5fe1d0b8d233bf213c Mon Sep 17 00:00:00 2001 From: Luis Machado Date: Wed, 12 May 2021 11:03:17 +0100 Subject: [PATCH] Add MTE register set support for core files * elf-bfd.h (elfcore_write_aarch_mte): New prototype. * elf.c (elfcore_grok_aarch_mte, elfcore_write_aarch_mte): New functions. (elfcore_grok_note): Handle notes of type NT_ARM_TAGGED_ADDR_CTRL. (elfcore_write_register_note): Handle MTE notes. --- bfd/ChangeLog | 8 ++++++++ bfd/elf-bfd.h | 2 ++ bfd/elf.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index bd5d4f7b2cc..0e4ccd8d0a0 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2021-05-12 Luis Machado + + * elf-bfd.h (elfcore_write_aarch_mte): New prototype. + * elf.c (elfcore_grok_aarch_mte, elfcore_write_aarch_mte): New + functions. + (elfcore_grok_note): Handle notes of type NT_ARM_TAGGED_ADDR_CTRL. + (elfcore_write_register_note): Handle MTE notes. + 2021-05-11 Alan Modra PR 27844 diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index fb2683724e1..92b1722eacb 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -2828,6 +2828,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_aarch_mte + (bfd *, char *, int *, const void *, int); extern char *elfcore_write_arc_v2 (bfd *, char *, int *, const void *, int); extern char *elfcore_write_riscv_csr diff --git a/bfd/elf.c b/bfd/elf.c index 851440b7652..8ed1623dfc1 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -9925,6 +9925,13 @@ elfcore_grok_aarch_pauth (bfd *abfd, Elf_Internal_Note *note) return elfcore_make_note_pseudosection (abfd, ".reg-aarch-pauth", note); } +static bool +elfcore_grok_aarch_mte (bfd *abfd, Elf_Internal_Note *note) +{ + return elfcore_make_note_pseudosection (abfd, ".reg-aarch-mte", + note); +} + static bool elfcore_grok_arc_v2 (bfd *abfd, Elf_Internal_Note *note) { @@ -10607,6 +10614,13 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note) else return true; + case NT_ARM_TAGGED_ADDR_CTRL: + if (note->namesz == 6 + && strcmp (note->namedata, "LINUX") == 0) + return elfcore_grok_aarch_mte (abfd, note); + else + return true; + case NT_GDB_TDESC: if (note->namesz == 4 && strcmp (note->namedata, "GDB") == 0) @@ -11986,6 +12000,20 @@ elfcore_write_aarch_pauth (bfd *abfd, note_name, NT_ARM_PAC_MASK, aarch_pauth, size); } +char * +elfcore_write_aarch_mte (bfd *abfd, + char *buf, + int *bufsiz, + const void *aarch_mte, + int size) +{ + char *note_name = "LINUX"; + return elfcore_write_note (abfd, buf, bufsiz, + note_name, NT_ARM_TAGGED_ADDR_CTRL, + aarch_mte, + size); +} + char * elfcore_write_arc_v2 (bfd *abfd, char *buf, @@ -12114,6 +12142,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-aarch-mte") == 0) + return elfcore_write_aarch_mte (abfd, buf, bufsiz, data, size); if (strcmp (section, ".reg-arc-v2") == 0) return elfcore_write_arc_v2 (abfd, buf, bufsiz, data, size); if (strcmp (section, ".gdb-tdesc") == 0) -- 2.30.2