Skip to content

Commit 5a68ac8

Browse files
authored
[llvm-readobj][COFF] Add support for version 2 of CHPE metadata (#109545)
1 parent 2e729ba commit 5a68ac8

File tree

3 files changed

+78
-2
lines changed

3 files changed

+78
-2
lines changed

llvm/include/llvm/Object/COFF.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -747,6 +747,11 @@ struct chpe_metadata {
747747
support::ulittle32_t ExtraRFETableSize;
748748
support::ulittle32_t __os_arm64x_dispatch_fptr;
749749
support::ulittle32_t AuxiliaryIATCopy;
750+
751+
// Added in CHPE metadata v2
752+
support::ulittle32_t AuxiliaryDelayloadIAT;
753+
support::ulittle32_t AuxiliaryDelayloadIATCopy;
754+
support::ulittle32_t HybridImageInfoBitfield;
750755
};
751756

752757
enum chpe_range_type { Arm64 = 0, Arm64EC = 1, Amd64 = 2 };

llvm/test/tools/llvm-readobj/COFF/arm64ec-chpe.yaml

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
# RUN: yaml2obj %s -o %t
2-
# RUN: llvm-readobj --coff-load-config %t | FileCheck %s
1+
# RUN: yaml2obj --docnum=1 %s -o %t1
2+
# RUN: llvm-readobj --coff-load-config %t1 | FileCheck %s
33

44
# CHECK: CHPEMetadataPointer: 0x180005000
55
# CHECK: CHPEMetadata [
@@ -17,6 +17,7 @@
1717
# CHECK-NEXT: 0x1000 -> 0x2000
1818
# CHECK-NEXT: 0x1020 -> 0x2030
1919
# CHECK-NEXT: ]
20+
# CHECK-NOT: AuxiliaryDelayloadIAT:
2021

2122
--- !COFF
2223
OptionalHeader:
@@ -85,3 +86,67 @@ sections:
8586
- UInt32: 0x2030
8687
symbols: []
8788
...
89+
90+
# RUN: yaml2obj --docnum=2 %s -o %t2
91+
# RUN: llvm-readobj --coff-load-config %t2 | FileCheck --check-prefix=CHPE2 %s
92+
93+
# CHPE2: CHPEMetadata [
94+
# CHPE2-NEXT: Version: 0x2
95+
# CHPE2: AuxiliaryDelayloadIAT: 0x1
96+
# CHPE2-NEXT: AuxiliaryDelayloadIATCopy: 0x2
97+
# CHPE2-NEXT: HybridImageInfoBitfield: 0x4
98+
99+
--- !COFF
100+
OptionalHeader:
101+
ImageBase: 0x180000000
102+
SectionAlignment: 4096
103+
FileAlignment: 512
104+
DLLCharacteristics: [ ]
105+
LoadConfigTable:
106+
RelativeVirtualAddress: 0x4000
107+
Size: 320
108+
header:
109+
Machine: IMAGE_FILE_MACHINE_AMD64
110+
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
111+
sections:
112+
- Name: .text
113+
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
114+
VirtualAddress: 0x1000
115+
VirtualSize: 0x2050
116+
- Name: .rdata
117+
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
118+
VirtualAddress: 0x4000
119+
VirtualSize: 328
120+
StructuredData:
121+
- LoadConfig:
122+
CHPEMetadataPointer: 0x180005000
123+
- Name: .data
124+
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
125+
VirtualAddress: 0x5000
126+
VirtualSize: 144
127+
StructuredData:
128+
- UInt32: 2 # Version
129+
- UInt32: 0
130+
- UInt32: 0
131+
- UInt32: 0
132+
- UInt32: 0
133+
- UInt32: 0
134+
- UInt32: 0
135+
- UInt32: 0
136+
- UInt32: 0
137+
- UInt32: 0
138+
- UInt32: 0
139+
- UInt32: 0
140+
- UInt32: 0
141+
- UInt32: 0
142+
- UInt32: 0
143+
- UInt32: 0
144+
- UInt32: 0
145+
- UInt32: 0
146+
- UInt32: 0
147+
- UInt32: 0
148+
- UInt32: 1 # AuxiliaryDelayloadIAT
149+
- UInt32: 2 # AuxiliaryDelayloadIATCopy
150+
- UInt32: 4 # HybridImageInfoBitfield
151+
symbols: []
152+
...

llvm/tools/llvm-readobj/COFFDumper.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,12 @@ void COFFDumper::printCOFFLoadConfig() {
930930
W.printHex("ExtraRFETableSize", CHPE->ExtraRFETableSize);
931931
W.printHex("__os_arm64x_dispatch_fptr", CHPE->__os_arm64x_dispatch_fptr);
932932
W.printHex("AuxiliaryIATCopy", CHPE->AuxiliaryIATCopy);
933+
934+
if (CHPE->Version >= 2) {
935+
W.printHex("AuxiliaryDelayloadIAT", CHPE->AuxiliaryDelayloadIAT);
936+
W.printHex("AuxiliaryDelayloadIATCopy", CHPE->AuxiliaryDelayloadIATCopy);
937+
W.printHex("HybridImageInfoBitfield", CHPE->HybridImageInfoBitfield);
938+
}
933939
}
934940

935941
if (Tables.SEHTableVA) {

0 commit comments

Comments
 (0)