From 894982bfccec66a1496785bbef4d46423345b8c8 Mon Sep 17 00:00:00 2001 From: Luis Machado Date: Fri, 21 May 2021 10:40:32 +0100 Subject: [PATCH] [AArch64] MTE corefile support bfd * elf.c (elfcore_make_memtag_note_section): New function. (elfcore_grok_note): Handle NT_MEMTAG note types. binutils* readelf.c (get_note_type): Handle NT_MEMTAG note types. include * elf/common.h (NT_MEMTAG): New constant. (NT_MEMTAG_TYPE_AARCH_MTE): New constant. --- bfd/ChangeLog | 5 +++++ bfd/elf.c | 19 +++++++++++++++++++ binutils/ChangeLog | 4 ++++ binutils/readelf.c | 2 ++ include/ChangeLog | 5 +++++ include/elf/common.h | 6 ++++++ 6 files changed, 41 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 2ad78033015..b614bd46e31 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2021-05-21 Luis Machado + + * elf.c (elfcore_make_memtag_note_section): New function. + (elfcore_grok_note): Handle NT_MEMTAG note types. + 2021-05-20 Andrew Burgess * section.c (bfd_get_section_by_name): Return NULL if name is diff --git a/bfd/elf.c b/bfd/elf.c index 8ed1623dfc1..a4cfaf1512f 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -9597,6 +9597,23 @@ elfcore_make_auxv_note_section (bfd *abfd, Elf_Internal_Note *note, return true; } +static bool +elfcore_make_memtag_note_section (bfd *abfd, Elf_Internal_Note *note, + size_t offs) +{ + asection *sect = bfd_make_section_anyway_with_flags (abfd, ".memtag", + SEC_HAS_CONTENTS); + + if (sect == NULL) + return false; + + sect->size = note->descsz - offs; + sect->filepos = note->descpos + offs; + sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32; + + return true; +} + /* prstatus_t exists on: solaris 2.5+ linux 2.[01] + glibc @@ -10657,6 +10674,8 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note) return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.siginfo", note); + case NT_MEMTAG: + return elfcore_make_memtag_note_section (abfd, note, 0); } } diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 1795f4138ca..b765188ae2d 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,7 @@ +2021-05-21 Luis Machado + + * readelf.c (get_note_type): Handle NT_MEMTAG note types. + 2021-05-19 Eli Schwartz * dwarf.c (ENABLE_CHECKING): Define to 0 if not previously set. diff --git a/binutils/readelf.c b/binutils/readelf.c index cf2011753c8..656df642dee 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -18696,6 +18696,8 @@ get_note_type (Filedata * filedata, unsigned e_type) return _("NT_SIGINFO (siginfo_t data)"); case NT_FILE: return _("NT_FILE (mapped files)"); + case NT_MEMTAG: + return _("NT_MEMTAG (memory tags)"); default: break; } diff --git a/include/ChangeLog b/include/ChangeLog index e22f3e85452..fdb2a7bc594 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,8 @@ +2021-05-21 Luis Machado + + * elf/common.h (NT_MEMTAG): New constant. + (NT_MEMTAG_TYPE_AARCH_MTE): New constant. + 2021-05-07 Clément Chigot * coff/internal.h (C_DWARF): New define. diff --git a/include/elf/common.h b/include/elf/common.h index f36bb0b80a2..234aef084b2 100644 --- a/include/elf/common.h +++ b/include/elf/common.h @@ -685,6 +685,12 @@ /* The range 0xff000000 to 0xffffffff is set aside for notes that don't originate from any particular operating system. */ #define NT_GDB_TDESC 0xff000000 /* Contains copy of GDB's target description XML. */ +#define NT_MEMTAG 0xff000001 /* Contains a copy of the memory tags. */ + +/* NT_MEMTAG record types. */ + +/* ARM-specific NT_MEMTAG types. */ +#define NT_MEMTAG_TYPE_AARCH_MTE 0x400 /* MTE memory tags for AArch64. */ /* Note segments for core files on dir-style procfs systems. */ -- 2.30.2