Skip to content

Commit 28e3c72

Browse files
committed
[AArch64][ELF][PAC] Support ELF AUTH constants
This patch adds llvm-readobj support for: - Dynamic R_AARCH64_AUTH_* relocations (including RELR compressed AUTH relocations) as described here: https://github.com/ARM-software/abi-aa/blob/main/pauthabielf64/pauthabielf64.rst#auth-variant-dynamic-relocations - .note.AARCH64-PAUTH-ABI-tag section as defined here https://github.com/ARM-software/abi-aa/blob/main/pauthabielf64/pauthabielf64.rst#elf-marking
1 parent cddbbd2 commit 28e3c72

File tree

12 files changed

+320
-36
lines changed

12 files changed

+320
-36
lines changed

llvm/include/llvm/BinaryFormat/DynamicTags.def

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,12 @@ AARCH64_DYNAMIC_TAG(AARCH64_MEMTAG_STACK, 0x7000000c)
132132
AARCH64_DYNAMIC_TAG(AARCH64_MEMTAG_GLOBALS, 0x7000000d)
133133
AARCH64_DYNAMIC_TAG(AARCH64_MEMTAG_GLOBALSSZ, 0x7000000f)
134134

135+
// AArch64 specific dynamic table entries for RELR auth relocations as described here:
136+
// https://github.com/ARM-software/abi-aa/blob/main/pauthabielf64/pauthabielf64.rst#dynamic-section
137+
AARCH64_DYNAMIC_TAG(AARCH64_AUTH_RELRSZ, 0x70000011)
138+
AARCH64_DYNAMIC_TAG(AARCH64_AUTH_RELR, 0x70000012)
139+
AARCH64_DYNAMIC_TAG(AARCH64_AUTH_RELRENT, 0x70000013)
140+
135141
// Hexagon specific dynamic table entries
136142
HEXAGON_DYNAMIC_TAG(HEXAGON_SYMSZ, 0x70000000)
137143
HEXAGON_DYNAMIC_TAG(HEXAGON_VER, 0x70000001)

llvm/include/llvm/BinaryFormat/ELF.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1056,6 +1056,9 @@ enum : unsigned {
10561056
SHT_ARM_ATTRIBUTES = 0x70000003U,
10571057
SHT_ARM_DEBUGOVERLAY = 0x70000004U,
10581058
SHT_ARM_OVERLAYSECTION = 0x70000005U,
1059+
// Special aarch64-specific section for MTE support, as described in:
1060+
// https://github.com/ARM-software/abi-aa/blob/main/pauthabielf64/pauthabielf64.rst#section-types
1061+
SHT_AARCH64_AUTH_RELR = 0x70000004U,
10591062
// Special aarch64-specific sections for MTE support, as described in:
10601063
// https://github.com/ARM-software/abi-aa/blob/main/memtagabielf64/memtagabielf64.rst#7section-types
10611064
SHT_AARCH64_MEMTAG_GLOBALS_STATIC = 0x70000007U,
@@ -1642,6 +1645,11 @@ enum {
16421645
NT_ANDROID_TYPE_MEMTAG = 4,
16431646
};
16441647

1648+
// ARM note types
1649+
enum {
1650+
NT_ARM_TYPE_PAUTH_ABI_TAG = 1,
1651+
};
1652+
16451653
// Memory tagging values used in NT_ANDROID_TYPE_MEMTAG notes.
16461654
enum {
16471655
// Enumeration to determine the tagging mode. In Android-land, 'SYNC' means

llvm/include/llvm/BinaryFormat/ELFRelocs/AArch64.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ ELF_RELOC(R_AARCH64_TLS_TPREL64, 0x406)
135135
ELF_RELOC(R_AARCH64_TLSDESC, 0x407)
136136
ELF_RELOC(R_AARCH64_IRELATIVE, 0x408)
137137
ELF_RELOC(R_AARCH64_AUTH_ABS64, 0xe100)
138+
ELF_RELOC(R_AARCH64_AUTH_RELATIVE, 0xe200)
138139

139140
// ELF_RELOC(R_AARCH64_P32_NONE, 0)
140141
ELF_RELOC(R_AARCH64_P32_ABS32, 0x001)

llvm/lib/Object/ELF.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@ StringRef llvm::object::getELFSectionTypeName(uint32_t Machine, unsigned Type) {
299299
STRINGIFY_ENUM_CASE(ELF, SHT_GROUP);
300300
STRINGIFY_ENUM_CASE(ELF, SHT_SYMTAB_SHNDX);
301301
STRINGIFY_ENUM_CASE(ELF, SHT_RELR);
302+
STRINGIFY_ENUM_CASE(ELF, SHT_AARCH64_AUTH_RELR);
302303
STRINGIFY_ENUM_CASE(ELF, SHT_ANDROID_REL);
303304
STRINGIFY_ENUM_CASE(ELF, SHT_ANDROID_RELA);
304305
STRINGIFY_ENUM_CASE(ELF, SHT_ANDROID_RELR);

llvm/lib/ObjectYAML/ELFYAML.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,7 @@ void ScalarEnumerationTraits<ELFYAML::ELF_SHT>::enumeration(
669669
ECase(SHT_GROUP);
670670
ECase(SHT_SYMTAB_SHNDX);
671671
ECase(SHT_RELR);
672+
ECase(SHT_AARCH64_AUTH_RELR);
672673
ECase(SHT_ANDROID_REL);
673674
ECase(SHT_ANDROID_RELA);
674675
ECase(SHT_ANDROID_RELR);

llvm/test/tools/llvm-objdump/ELF/dynamic-section-machine-specific.test

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,9 @@ ProgramHeaders:
268268
# AARCH64: Dynamic Section:
269269
# AARCH64-NEXT: AARCH64_BTI_PLT 0x0000000000000001
270270
# AARCH64-NEXT: AARCH64_PAC_PLT 0x0000000000000002
271+
# AARCH64-NEXT: AARCH64_AUTH_RELR 0x0000000000000003
272+
# AARCH64-NEXT: AARCH64_AUTH_RELRSZ 0x0000000000000004
273+
# AARCH64-NEXT: AARCH64_AUTH_RELRENT 0x0000000000000005
271274

272275
--- !ELF
273276
FileHeader:
@@ -283,6 +286,12 @@ Sections:
283286
Value: 1
284287
- Tag: DT_AARCH64_PAC_PLT
285288
Value: 2
289+
- Tag: DT_AARCH64_AUTH_RELR
290+
Value: 3
291+
- Tag: DT_AARCH64_AUTH_RELRSZ
292+
Value: 4
293+
- Tag: DT_AARCH64_AUTH_RELRENT
294+
Value: 5
286295
- Tag: DT_NULL
287296
Value: 0
288297
ProgramHeaders:
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# RUN: rm -rf %t && split-file %s %t && cd %t
2+
3+
# RUN: llvm-mc -filetype=obj -triple=aarch64-linux-gnu abi-tag.s -o tag.o
4+
# RUN: llvm-mc -filetype=obj -triple=aarch64-linux-gnu abi-tag-short.s -o tag-short.o
5+
# RUN: llvm-mc -filetype=obj -triple=aarch64-linux-gnu abi-tag-long.s -o tag-long.o
6+
7+
# RUN: llvm-readelf --notes tag.o | FileCheck --check-prefix NORMAL %s
8+
# RUN: llvm-readelf --notes tag-short.o | FileCheck --check-prefix SHORT %s
9+
# RUN: llvm-readelf --notes tag-long.o | FileCheck --check-prefix LONG %s
10+
11+
# NORMAL: AArch64 PAuth ABI tag: platform 0x2a, version 0x1
12+
# SHORT: AArch64 PAuth ABI tag: <corrupted size: expected at least 16, got 12>
13+
# LONG: AArch64 PAuth ABI tag: platform 0x2a, version 0x1, additional info 0xEFCDAB8967452301
14+
15+
# RUN: llvm-readobj --notes tag.o | FileCheck --check-prefix LLVM-NORMAL %s
16+
# RUN: llvm-readobj --notes tag-short.o | FileCheck --check-prefix LLVM-SHORT %s
17+
# RUN: llvm-readobj --notes tag-long.o | FileCheck --check-prefix LLVM-LONG %s
18+
19+
// LLVM-SHORT: Notes [
20+
// LLVM-SHORT-NEXT: NoteSection {
21+
// LLVM-SHORT-NEXT: Name: .note.AARCH64-PAUTH-ABI-tag
22+
// LLVM-SHORT-NEXT: Offset: 0x40
23+
// LLVM-SHORT-NEXT: Size: 0x1C
24+
// LLVM-SHORT-NEXT: Note {
25+
// LLVM-SHORT-NEXT: Owner: ARM
26+
// LLVM-SHORT-NEXT: Data size: 0xC
27+
// LLVM-SHORT-NEXT: Type: NT_ARM_TYPE_PAUTH_ABI_TAG
28+
// LLVM-SHORT-NEXT: Description data (
29+
// LLVM-SHORT-NEXT: 0000: 2A000000 00000000 01000000
30+
// LLVM-SHORT-NEXT: )
31+
// LLVM-SHORT-NEXT: }
32+
// LLVM-SHORT-NEXT: }
33+
// LLVM-SHORT-NEXT: ]
34+
35+
// LLVM-NORMAL: Notes [
36+
// LLVM-NORMAL-NEXT: NoteSection {
37+
// LLVM-NORMAL-NEXT: Name: .note.AARCH64-PAUTH-ABI-tag
38+
// LLVM-NORMAL-NEXT: Offset: 0x40
39+
// LLVM-NORMAL-NEXT: Size: 0x20
40+
// LLVM-NORMAL-NEXT: Note {
41+
// LLVM-NORMAL-NEXT: Owner: ARM
42+
// LLVM-NORMAL-NEXT: Data size: 0x10
43+
// LLVM-NORMAL-NEXT: Type: NT_ARM_TYPE_PAUTH_ABI_TAG
44+
// LLVM-NORMAL-NEXT: Platform: 42
45+
// LLVM-NORMAL-NEXT: Version: 1
46+
// LLVM-NORMAL-NEXT: }
47+
// LLVM-NORMAL-NEXT: }
48+
// LLVM-NORMAL-NEXT: ]
49+
50+
// LLVM-LONG: Notes [
51+
// LLVM-LONG-NEXT: NoteSection {
52+
// LLVM-LONG-NEXT: Name: .note.AARCH64-PAUTH-ABI-tag
53+
// LLVM-LONG-NEXT: Offset: 0x40
54+
// LLVM-LONG-NEXT: Size: 0x28
55+
// LLVM-LONG-NEXT: Note {
56+
// LLVM-LONG-NEXT: Owner: ARM
57+
// LLVM-LONG-NEXT: Data size: 0x18
58+
// LLVM-LONG-NEXT: Type: NT_ARM_TYPE_PAUTH_ABI_TAG
59+
// LLVM-LONG-NEXT: Platform: 42
60+
// LLVM-LONG-NEXT: Version: 1
61+
// LLVM-LONG-NEXT: Additional info: EFCDAB8967452301
62+
// LLVM-LONG-NEXT: }
63+
// LLVM-LONG-NEXT: }
64+
// LLVM-LONG-NEXT: ]
65+
66+
#--- abi-tag.s
67+
68+
.section ".note.AARCH64-PAUTH-ABI-tag", "a"
69+
.long 4
70+
.long 16
71+
.long 1
72+
.asciz "ARM"
73+
74+
.quad 42 // platform
75+
.quad 1 // version
76+
77+
#--- abi-tag-short.s
78+
79+
.section ".note.AARCH64-PAUTH-ABI-tag", "a"
80+
.long 4
81+
.long 12
82+
.long 1
83+
.asciz "ARM"
84+
85+
.quad 42
86+
.word 1
87+
88+
#--- abi-tag-long.s
89+
90+
.section ".note.AARCH64-PAUTH-ABI-tag", "a"
91+
.long 4
92+
.long 24
93+
.long 1
94+
.asciz "ARM"
95+
96+
.quad 42 // platform
97+
.quad 1 // version
98+
.quad 0x0123456789ABCDEF // extra data

llvm/test/tools/llvm-readobj/ELF/broken-dynamic-reloc.test

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -138,19 +138,19 @@ ProgramHeaders:
138138
# RUN: llvm-readobj --dyn-relocations %t7 2>&1 | FileCheck %s -DFILE=%t7 --check-prefix=INVALID-DT-ANDROID-RELRSZ
139139
# RUN: llvm-readelf --dyn-relocations %t7 2>&1 | FileCheck %s -DFILE=%t7 --check-prefix=INVALID-DT-ANDROID-RELRSZ
140140

141-
## INVALID-DT-RELRSZ: warning: '[[FILE]]': invalid DT_RELRSZ value (0xff) or DT_RELRENT value (0x18)
142-
## INVALID-DT-ANDROID-RELRSZ: warning: '[[FILE]]': invalid DT_ANDROID_RELRSZ value (0xff) or DT_ANDROID_RELRENT value (0x18)
141+
## INVALID-DT-RELRSZ: warning: '[[FILE]]': invalid DT_RELRSZ value (0xff) or DT_RELRENT value (0x18)
142+
## INVALID-DT-ANDROID-RELRSZ: warning: '[[FILE]]': invalid DT_ANDROID_RELRSZ value (0xff) or DT_ANDROID_RELRENT value (0x18)
143143

144144
## Show we print a warning for an invalid relocation table entry size stored in a DT_RELRENT/DT_ANDROID_RELRENT entry.
145-
# RUN: yaml2obj --docnum=2 -DRELTYPE=RELR -DTAG1=DT_RELRSZ -DTAG2=DT_RELRENT -DTAG2VAL=0xFF %s -o %t8
146-
# RUN: llvm-readobj --dyn-relocations %t8 2>&1 | FileCheck %s -DFILE=%t8 --check-prefix=INVALID-DT-RELRENT
147-
# RUN: llvm-readelf --dyn-relocations %t8 2>&1 | FileCheck %s -DFILE=%t8 --check-prefix=INVALID-DT-RELRENT
148-
# RUN: yaml2obj --docnum=2 -DRELTYPE=RELR -DTAG1=DT_ANDROID_RELRSZ -DTAG2=DT_ANDROID_RELRENT -DTAG2VAL=0xFF %s -o %t9
149-
# RUN: llvm-readobj --dyn-relocations %t9 2>&1 | FileCheck %s -DFILE=%t9 --check-prefix=INVALID-DT-ANDROID-RELRENT
150-
# RUN: llvm-readelf --dyn-relocations %t9 2>&1 | FileCheck %s -DFILE=%t9 --check-prefix=INVALID-DT-ANDROID-RELRENT
145+
# RUN: yaml2obj --docnum=2 -DRELTYPE=RELR -DTAG1=DT_RELRSZ -DTAG2=DT_RELRENT -DTAG2VAL=0xFF %s -o %t9
146+
# RUN: llvm-readobj --dyn-relocations %t9 2>&1 | FileCheck %s -DFILE=%t9 --check-prefix=INVALID-DT-RELRENT
147+
# RUN: llvm-readelf --dyn-relocations %t9 2>&1 | FileCheck %s -DFILE=%t9 --check-prefix=INVALID-DT-RELRENT
148+
# RUN: yaml2obj --docnum=2 -DRELTYPE=RELR -DTAG1=DT_ANDROID_RELRSZ -DTAG2=DT_ANDROID_RELRENT -DTAG2VAL=0xFF %s -o %t10
149+
# RUN: llvm-readobj --dyn-relocations %t10 2>&1 | FileCheck %s -DFILE=%t10 --check-prefix=INVALID-DT-ANDROID-RELRENT
150+
# RUN: llvm-readelf --dyn-relocations %t10 2>&1 | FileCheck %s -DFILE=%t10 --check-prefix=INVALID-DT-ANDROID-RELRENT
151151

152-
## INVALID-DT-RELRENT: invalid DT_RELRSZ value (0x18) or DT_RELRENT value (0xff)
153-
## INVALID-DT-ANDROID-RELRENT: invalid DT_ANDROID_RELRSZ value (0x18) or DT_ANDROID_RELRENT value (0xff)
152+
## INVALID-DT-RELRENT: invalid DT_RELRSZ value (0x18) or DT_RELRENT value (0xff)
153+
## INVALID-DT-ANDROID-RELRENT: invalid DT_ANDROID_RELRSZ value (0x18) or DT_ANDROID_RELRENT value (0xff)
154154

155155
## Show we print a warning for an invalid value of DT_PLTRELSZ, which describes the total size
156156
## of the relocation entries associated with the procedure linkage table.
@@ -459,3 +459,43 @@ ProgramHeaders:
459459
- Type: PT_DYNAMIC
460460
FirstSec: .dynamic
461461
LastSec: .dynamic
462+
463+
## Show we print a warning for an invalid relocation table size stored in a DT_AARCH64_AUTH_RELRSZ entry.
464+
# RUN: yaml2obj --docnum=8 -DRELTYPE=RELR -DTAG1=DT_AARCH64_AUTH_RELRSZ -DTAG1VAL=0xFF -DTAG2=DT_AARCH64_AUTH_RELRENT %s -o %t8
465+
# RUN: llvm-readobj --dyn-relocations %t8 2>&1 | FileCheck %s -DFILE=%t8 --check-prefix=INVALID-DT-AARCH64-AUTH-RELRSZ
466+
# RUN: llvm-readelf --dyn-relocations %t8 2>&1 | FileCheck %s -DFILE=%t8 --check-prefix=INVALID-DT-AARCH64-AUTH-RELRSZ
467+
468+
## INVALID-DT-AARCH64-AUTH-RELRSZ: warning: '[[FILE]]': invalid DT_AARCH64_AUTH_RELRSZ value (0xff) or DT_AARCH64_AUTH_RELRENT value (0x18)
469+
470+
## Show we print a warning for an invalid relocation table entry size stored in a DT_AARCH64_AUTH_RELRENT entry.
471+
# RUN: yaml2obj --docnum=8 -DRELTYPE=RELR -DTAG1=DT_AARCH64_AUTH_RELRSZ -DTAG2=DT_AARCH64_AUTH_RELRENT -DTAG2VAL=0xFF %s -o %t11
472+
# RUN: llvm-readobj --dyn-relocations %t11 2>&1 | FileCheck %s -DFILE=%t11 --check-prefix=INVALID-DT-AARCH64-AUTH-RELRENT
473+
# RUN: llvm-readelf --dyn-relocations %t11 2>&1 | FileCheck %s -DFILE=%t11 --check-prefix=INVALID-DT-AARCH64-AUTH-RELRENT
474+
475+
## INVALID-DT-AARCH64-AUTH-RELRENT: invalid DT_AARCH64_AUTH_RELRSZ value (0x18) or DT_AARCH64_AUTH_RELRENT value (0xff)
476+
477+
--- !ELF
478+
FileHeader:
479+
Class: ELFCLASS64
480+
Data: ELFDATA2LSB
481+
Type: ET_DYN
482+
Machine: EM_AARCH64
483+
Sections:
484+
- Name: .relx.dyn
485+
Type: SHT_[[RELTYPE]]
486+
- Name: .dynamic
487+
Type: SHT_DYNAMIC
488+
Entries:
489+
- Tag: DT_[[RELTYPE]]
490+
Value: 0x0
491+
- Tag: [[TAG1]]
492+
Value: [[TAG1VAL=0x18]]
493+
- Tag: [[TAG2]]
494+
Value: [[TAG2VAL=0x18]]
495+
- Tag: DT_NULL
496+
Value: 0x0
497+
DynamicSymbols: []
498+
ProgramHeaders:
499+
- Type: PT_LOAD
500+
FirstSec: .relx.dyn
501+
LastSec: .dynamic

llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -355,20 +355,26 @@ ProgramHeaders:
355355
# RUN: llvm-readobj --dynamic-table %t.aarch64 | FileCheck %s --check-prefix=LLVM-AARCH64
356356
# RUN: llvm-readelf --dynamic-table %t.aarch64 | FileCheck %s --check-prefix=GNU-AARCH64
357357

358-
# LLVM-AARCH64: DynamicSection [ (4 entries)
358+
# LLVM-AARCH64: DynamicSection [ (7 entries)
359359
# LLVM-AARCH64-NEXT: Tag Type Name/Value
360-
# LLVM-AARCH64-NEXT: 0x0000000070000001 AARCH64_BTI_PLT 1
361-
# LLVM-AARCH64-NEXT: 0x0000000070000003 AARCH64_PAC_PLT 2
362-
# LLVM-AARCH64-NEXT: 0x0000000070000005 AARCH64_VARIANT_PCS 3
363-
# LLVM-AARCH64-NEXT: 0x0000000000000000 NULL 0x0
360+
# LLVM-AARCH64-NEXT: 0x0000000070000001 AARCH64_BTI_PLT 1
361+
# LLVM-AARCH64-NEXT: 0x0000000070000003 AARCH64_PAC_PLT 2
362+
# LLVM-AARCH64-NEXT: 0x0000000070000005 AARCH64_VARIANT_PCS 3
363+
# LLVM-AARCH64-NEXT: 0x0000000070000012 AARCH64_AUTH_RELR 0x4
364+
# LLVM-AARCH64-NEXT: 0x0000000070000011 AARCH64_AUTH_RELRSZ 5
365+
# LLVM-AARCH64-NEXT: 0x0000000070000013 AARCH64_AUTH_RELRENT 6
366+
# LLVM-AARCH64-NEXT: 0x0000000000000000 NULL 0x0
364367
# LLVM-AARCH64-NEXT:]
365368

366-
# GNU-AARCH64: Dynamic section at offset {{.*}} contains 4 entries:
369+
# GNU-AARCH64: Dynamic section at offset {{.*}} contains 7 entries:
367370
# GNU-AARCH64-NEXT: Tag Type Name/Value
368-
# GNU-AARCH64-NEXT: 0x0000000070000001 (AARCH64_BTI_PLT) 1
369-
# GNU-AARCH64-NEXT: 0x0000000070000003 (AARCH64_PAC_PLT) 2
370-
# GNU-AARCH64-NEXT: 0x0000000070000005 (AARCH64_VARIANT_PCS) 3
371-
# GNU-AARCH64-NEXT: 0x0000000000000000 (NULL) 0x0
371+
# GNU-AARCH64-NEXT: 0x0000000070000001 (AARCH64_BTI_PLT) 1
372+
# GNU-AARCH64-NEXT: 0x0000000070000003 (AARCH64_PAC_PLT) 2
373+
# GNU-AARCH64-NEXT: 0x0000000070000005 (AARCH64_VARIANT_PCS) 3
374+
# GNU-AARCH64-NEXT: 0x0000000070000012 (AARCH64_AUTH_RELR) 0x4
375+
# GNU-AARCH64-NEXT: 0x0000000070000011 (AARCH64_AUTH_RELRSZ) 5
376+
# GNU-AARCH64-NEXT: 0x0000000070000013 (AARCH64_AUTH_RELRENT) 6
377+
# GNU-AARCH64-NEXT: 0x0000000000000000 (NULL) 0x0
372378

373379
--- !ELF
374380
FileHeader:
@@ -386,6 +392,12 @@ Sections:
386392
Value: 2
387393
- Tag: DT_AARCH64_VARIANT_PCS
388394
Value: 3
395+
- Tag: DT_AARCH64_AUTH_RELR
396+
Value: 4
397+
- Tag: DT_AARCH64_AUTH_RELRSZ
398+
Value: 5
399+
- Tag: DT_AARCH64_AUTH_RELRENT
400+
Value: 6
389401
- Tag: DT_NULL
390402
Value: 0
391403
ProgramHeaders:

llvm/test/tools/llvm-readobj/ELF/relr-relocs.test

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ Sections:
158158
Link: [[LINK=<none>]]
159159

160160
## Check we report a warning when we are unable to dump relocations
161-
## for a SHT_RELR/SHT_ANDROID_RELR section.
161+
## for a SHT_RELR/SHT_ANDROID_RELR/SHT_AARCH64_AUTH_RELR section.
162162

163163
## Case A: check the case when relocations can't be read from an SHT_RELR section.
164164
# RUN: yaml2obj --docnum=2 -DENTSIZE=1 %s -o %t2.broken
@@ -186,7 +186,25 @@ Sections:
186186
# RUN: llvm-readelf --relocations %t2.broken.android 2>&1 | \
187187
# RUN: FileCheck -DFILE=%t2.broken.android --check-prefix=BROKEN-GNU %s -DSECNAME=SHT_ANDROID_RELR
188188

189-
## Check the behavior when the sh_link field of the SHT_RELR/SHT_ANDROID_RELR section
189+
## Case C: check the case when relocations can't be read from an SHT_AARCH64_AUTH_RELR section.
190+
## SHT_AARCH64_AUTH_RELR = 0x70000004.
191+
# RUN: yaml2obj --docnum=2 -DENTSIZE=1 -DSHTYPE=0x70000004 %s -o %t2.broken.aarch64auth
192+
# RUN: llvm-readobj --relocations %t2.broken.aarch64auth 2>&1 | \
193+
# RUN: FileCheck -DFILE=%t2.broken.aarch64auth --check-prefix=BROKEN-LLVM-AARCH64-AUTH %s -DSECNAME=SHT_AARCH64_AUTH_RELR
194+
# RUN: llvm-readelf --relocations %t2.broken.aarch64auth 2>&1 | \
195+
# RUN: FileCheck -DFILE=%t2.broken.aarch64auth --check-prefix=BROKEN-GNU-AARCH64-AUTH %s -DSECNAME=SHT_AARCH64_AUTH_RELR
196+
197+
# BROKEN-LLVM-AARCH64-AUTH: Relocations [
198+
# BROKEN-LLVM-AARCH64-AUTH-NEXT: Section (1) .relr.dyn {
199+
# BROKEN-LLVM-AARCH64-AUTH-NEXT: warning: '[[FILE]]': SHT_AARCH64_AUTH_RELR section in non-AArch64 ELF found, skipping
200+
# BROKEN-LLVM-AARCH64-AUTH-NEXT: }
201+
# BROKEN-LLVM-AARCH64-AUTH-NEXT: ]
202+
203+
# BROKEN-GNU-AARCH64-AUTH: Relocation section '.relr.dyn' at offset 0x34 contains <?> entries:
204+
# BROKEN-GNU-AARCH64-AUTH-NEXT: Offset Info Type Sym. Value Symbol's Name
205+
# BROKEN-GNU-AARCH64-AUTH-NEXT: warning: '[[FILE]]': SHT_AARCH64_AUTH_RELR section in non-AArch64 ELF found, skipping
206+
207+
## Check the behavior when the sh_link field of the SHT_RELR/SHT_ANDROID_RELR/SHT_AARCH64_AUTH_RELR section
190208
## is set to an arbitrary value. Normally, it is set to 0, because such sections contains
191209
## only relative relocations and do not have an associated symbol table, like other
192210
## relocation sections.

0 commit comments

Comments
 (0)