Skip to content

Commit c5d8bf7

Browse files
[llvm][llvm-readobj] Add AArch64 Tagged Address note type (llvm#68568)
On Linux this contains a single register that determines memory tagging and tagged address ABI settings.
1 parent 5557d98 commit c5d8bf7

File tree

4 files changed

+30
-21
lines changed

4 files changed

+30
-21
lines changed

llvm/include/llvm/BinaryFormat/ELF.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1611,6 +1611,7 @@ enum : unsigned {
16111611
NT_ARM_HW_WATCH = 0x403,
16121612
NT_ARM_SVE = 0x405,
16131613
NT_ARM_PAC_MASK = 0x406,
1614+
NT_ARM_TAGGED_ADDR_CTRL = 0x409,
16141615
NT_ARM_SSVE = 0x40b,
16151616
NT_ARM_ZA = 0x40c,
16161617
NT_ARM_ZT = 0x40d,

llvm/lib/ObjectYAML/ELFYAML.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ void ScalarEnumerationTraits<ELFYAML::ELF_NT>::enumeration(
131131
ECase(NT_ARM_HW_WATCH);
132132
ECase(NT_ARM_SVE);
133133
ECase(NT_ARM_PAC_MASK);
134+
ECase(NT_ARM_TAGGED_ADDR_CTRL);
134135
ECase(NT_ARM_SSVE);
135136
ECase(NT_ARM_ZA);
136137
ECase(NT_ARM_ZT);

llvm/test/tools/llvm-readobj/ELF/note-core.test

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -240,40 +240,45 @@
240240
# RUN: llvm-readelf --notes %t48.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="NT_ARM_PAC_MASK (AArch64 Pointer Authentication code masks)"
241241
# RUN: llvm-readobj --notes %t48.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="NT_ARM_PAC_MASK (AArch64 Pointer Authentication code masks)"
242242

243+
## Check ELF::NT_ARM_TAGGED_ADDR_CTRL
244+
# RUN: yaml2obj %s -DTYPE=0x409 -o %t49.o
245+
# RUN: llvm-readelf --notes %t49.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="NT_ARM_TAGGED_ADDR_CTRL (AArch64 Tagged Address Control)"
246+
# RUN: llvm-readobj --notes %t49.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="NT_ARM_TAGGED_ADDR_CTRL (AArch64 Tagged Address Control)"
247+
243248
## Check ELF::NT_ARM_SSVE
244-
# RUN: yaml2obj %s -DTYPE=0x40b -o %t49.o
245-
# RUN: llvm-readelf --notes %t49.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="NT_ARM_SSVE (AArch64 Streaming SVE registers)"
246-
# RUN: llvm-readobj --notes %t49.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="NT_ARM_SSVE (AArch64 Streaming SVE registers)"
249+
# RUN: yaml2obj %s -DTYPE=0x40b -o %t50.o
250+
# RUN: llvm-readelf --notes %t50.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="NT_ARM_SSVE (AArch64 Streaming SVE registers)"
251+
# RUN: llvm-readobj --notes %t50.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="NT_ARM_SSVE (AArch64 Streaming SVE registers)"
247252

248253
## Check ELF::NT_ARM_ZA
249-
# RUN: yaml2obj %s -DTYPE=0x40c -o %t50.o
250-
# RUN: llvm-readelf --notes %t50.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="NT_ARM_ZA (AArch64 SME ZA registers)"
251-
# RUN: llvm-readobj --notes %t50.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="NT_ARM_ZA (AArch64 SME ZA registers)"
254+
# RUN: yaml2obj %s -DTYPE=0x40c -o %t51.o
255+
# RUN: llvm-readelf --notes %t51.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="NT_ARM_ZA (AArch64 SME ZA registers)"
256+
# RUN: llvm-readobj --notes %t51.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="NT_ARM_ZA (AArch64 SME ZA registers)"
252257

253258
## Check ELF::NT_ARM_ZT
254-
# RUN: yaml2obj %s -DTYPE=0x40d -o %t51.o
255-
# RUN: llvm-readelf --notes %t51.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="NT_ARM_ZT (AArch64 SME ZT registers)"
256-
# RUN: llvm-readobj --notes %t51.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="NT_ARM_ZT (AArch64 SME ZT registers)"
259+
# RUN: yaml2obj %s -DTYPE=0x40d -o %t52.o
260+
# RUN: llvm-readelf --notes %t52.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="NT_ARM_ZT (AArch64 SME ZT registers)"
261+
# RUN: llvm-readobj --notes %t52.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="NT_ARM_ZT (AArch64 SME ZT registers)"
257262

258263
## Check ELF::NT_FILE.
259-
# RUN: yaml2obj %s -DTYPE=0x46494c45 -o %t52.o
260-
# RUN: llvm-readelf --notes %t52.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="NT_FILE (mapped files)"
261-
# RUN: llvm-readobj --notes %t52.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="NT_FILE (mapped files)"
264+
# RUN: yaml2obj %s -DTYPE=0x46494c45 -o %t53.o
265+
# RUN: llvm-readelf --notes %t53.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="NT_FILE (mapped files)"
266+
# RUN: llvm-readobj --notes %t53.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="NT_FILE (mapped files)"
262267

263268
## Check ELF::NT_PRXFPREG.
264-
# RUN: yaml2obj %s -DTYPE=0x46e62b7f -o %t53.o
265-
# RUN: llvm-readelf --notes %t53.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="NT_PRXFPREG (user_xfpregs structure)"
266-
# RUN: llvm-readobj --notes %t53.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="NT_PRXFPREG (user_xfpregs structure)"
269+
# RUN: yaml2obj %s -DTYPE=0x46e62b7f -o %t54.o
270+
# RUN: llvm-readelf --notes %t54.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="NT_PRXFPREG (user_xfpregs structure)"
271+
# RUN: llvm-readobj --notes %t54.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="NT_PRXFPREG (user_xfpregs structure)"
267272

268273
## Check ELF::NT_SIGINFO.
269-
# RUN: yaml2obj %s -DTYPE=0x53494749 -o %t54.o
270-
# RUN: llvm-readelf --notes %t54.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="NT_SIGINFO (siginfo_t data)"
271-
# RUN: llvm-readobj --notes %t54.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="NT_SIGINFO (siginfo_t data)"
274+
# RUN: yaml2obj %s -DTYPE=0x53494749 -o %t55.o
275+
# RUN: llvm-readelf --notes %t55.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="NT_SIGINFO (siginfo_t data)"
276+
# RUN: llvm-readobj --notes %t55.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="NT_SIGINFO (siginfo_t data)"
272277

273278
## Check an arbitrary unknown type.
274-
# RUN: yaml2obj %s -DTYPE=0x12345678 -o %t55.o
275-
# RUN: llvm-readelf --notes %t55.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="Unknown note type: (0x12345678)"
276-
# RUN: llvm-readobj --notes %t55.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="Unknown (0x12345678)"
279+
# RUN: yaml2obj %s -DTYPE=0x12345678 -o %t56.o
280+
# RUN: llvm-readelf --notes %t56.o | FileCheck %s --check-prefix=CHECK-GNU -DDESC="Unknown note type: (0x12345678)"
281+
# RUN: llvm-readobj --notes %t56.o | FileCheck %s --check-prefix=CHECK-LLVM -DDESC="Unknown (0x12345678)"
277282

278283
# CHECK-GNU: Owner Data size Description
279284
# CHECK-GNU-NEXT: CORE 0x00000000 [[DESC]]

llvm/tools/llvm-readobj/ELFDumper.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5806,6 +5806,8 @@ const NoteType CoreNoteTypes[] = {
58065806
{ELF::NT_ARM_SVE, "NT_ARM_SVE (AArch64 SVE registers)"},
58075807
{ELF::NT_ARM_PAC_MASK,
58085808
"NT_ARM_PAC_MASK (AArch64 Pointer Authentication code masks)"},
5809+
{ELF::NT_ARM_TAGGED_ADDR_CTRL,
5810+
"NT_ARM_TAGGED_ADDR_CTRL (AArch64 Tagged Address Control)"},
58095811
{ELF::NT_ARM_SSVE, "NT_ARM_SSVE (AArch64 Streaming SVE registers)"},
58105812
{ELF::NT_ARM_ZA, "NT_ARM_ZA (AArch64 SME ZA registers)"},
58115813
{ELF::NT_ARM_ZT, "NT_ARM_ZT (AArch64 SME ZT registers)"},

0 commit comments

Comments
 (0)