Skip to content

Commit 945df8b

Browse files
author
Esme-Yi
committed
[obj2yaml][XCOFF] Dump sections
Summary: This patch implements parsing sections for obj2yaml on AIX. Reviewed By: jhenderson Differential Revision: https://reviews.llvm.org/D98003
1 parent 0057c71 commit 945df8b

File tree

4 files changed

+281
-96
lines changed

4 files changed

+281
-96
lines changed
Lines changed: 146 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,147 @@
1-
# RUN: obj2yaml %S/Inputs/aix_xcoff.o | FileCheck %s
2-
# Test that we can parse the XCOFF object file correctly.
3-
# CHECK: --- !XCOFF
4-
# CHECK-NEXT: FileHeader:
5-
# CHECK-NEXT: MagicNumber: 0x1DF
6-
# CHECK-NEXT: NumberOfSections: 2
7-
# CHECK-NEXT: CreationTime: 1552337792
8-
# CHECK-NEXT: OffsetToSymbolTable: 0x13A
9-
# CHECK-NEXT: EntriesInSymbolTable: 22
10-
# CHECK-NEXT: AuxiliaryHeaderSize: 0
11-
# CHECK-NEXT: Flags: 0x0
1+
## This is a basic test to check if we can parse the XCOFF object file correctly.
2+
# RUN: yaml2obj %s -DMAGIC=0x01DF -o %t-32
3+
# RUN: obj2yaml %t-32 | FileCheck %s --check-prefix=CHECK32
4+
# RUN: yaml2obj %s -DMAGIC=0x01F7 -o %t-64
5+
# RUN: obj2yaml %t-64 | FileCheck %s --check-prefix=CHECK64
126

13-
# CHECK: Symbols:
14-
# CHECK-NEXT: - Name: .file
15-
# CHECK-NEXT: Value: 0x0
16-
# CHECK-NEXT: Section: N_DEBUG
17-
# CHECK-NEXT: Type: 0x3
18-
# CHECK-NEXT: StorageClass: C_FILE
19-
# CHECK-NEXT: NumberOfAuxEntries: 1
20-
# CHECK-NEXT: - Name: i
21-
# CHECK-NEXT: Value: 0x0
22-
# CHECK-NEXT: Section: N_UNDEF
23-
# CHECK-NEXT: Type: 0x0
24-
# CHECK-NEXT: StorageClass: C_EXT
25-
# CHECK-NEXT: NumberOfAuxEntries: 1
26-
# CHECK-NEXT: - Name: TestforXcoff
27-
# CHECK-NEXT: Value: 0x0
28-
# CHECK-NEXT: Section: N_UNDEF
29-
# CHECK-NEXT: Type: 0x0
30-
# CHECK-NEXT: StorageClass: C_EXT
31-
# CHECK-NEXT: NumberOfAuxEntries: 1
32-
# CHECK-NEXT: - Name: .text
33-
# CHECK-NEXT: Value: 0x0
34-
# CHECK-NEXT: Section: .text
35-
# CHECK-NEXT: Type: 0x0
36-
# CHECK-NEXT: StorageClass: C_HIDEXT
37-
# CHECK-NEXT: NumberOfAuxEntries: 1
38-
# CHECK-NEXT: - Name: .main
39-
# CHECK-NEXT: Value: 0x0
40-
# CHECK-NEXT: Section: .text
41-
# CHECK-NEXT: Type: 0x0
42-
# CHECK-NEXT: StorageClass: C_EXT
43-
# CHECK-NEXT: NumberOfAuxEntries: 1
44-
# CHECK-NEXT: - Name: main
45-
# CHECK-NEXT: Value: 0x60
46-
# CHECK-NEXT: Section: .data
47-
# CHECK-NEXT: Type: 0x0
48-
# CHECK-NEXT: StorageClass: C_HIDEXT
49-
# CHECK-NEXT: NumberOfAuxEntries: 1
50-
# CHECK-NEXT: - Name: main
51-
# CHECK-NEXT: Value: 0x60
52-
# CHECK-NEXT: Section: .data
53-
# CHECK-NEXT: Type: 0x0
54-
# CHECK-NEXT: StorageClass: C_EXT
55-
# CHECK-NEXT: NumberOfAuxEntries: 1
56-
# CHECK-NEXT: - Name: .data
57-
# CHECK-NEXT: Value: 0x70
58-
# CHECK-NEXT: Section: .data
59-
# CHECK-NEXT: Type: 0x0
60-
# CHECK-NEXT: StorageClass: C_HIDEXT
61-
# CHECK-NEXT: NumberOfAuxEntries: 1
62-
# CHECK-NEXT: - Name: TOC
63-
# CHECK-NEXT: Value: 0x74
64-
# CHECK-NEXT: Section: .data
65-
# CHECK-NEXT: Type: 0x0
66-
# CHECK-NEXT: StorageClass: C_HIDEXT
67-
# CHECK-NEXT: NumberOfAuxEntries: 1
68-
# CHECK-NEXT: - Name: i
69-
# CHECK-NEXT: Value: 0x74
70-
# CHECK-NEXT: Section: .data
71-
# CHECK-NEXT: Type: 0x0
72-
# CHECK-NEXT: StorageClass: C_HIDEXT
73-
# CHECK-NEXT: NumberOfAuxEntries: 1
74-
# CHECK-NEXT: - Name: TestforXcoff
75-
# CHECK-NEXT: Value: 0x78
76-
# CHECK-NEXT: Section: .data
77-
# CHECK-NEXT: Type: 0x0
78-
# CHECK-NEXT: StorageClass: C_HIDEXT
79-
# CHECK-NEXT: NumberOfAuxEntries: 1
80-
## TODO: Dump the string table.
7+
# CHECK32: --- !XCOFF
8+
# CHECK32-NEXT: FileHeader:
9+
# CHECK32-NEXT: MagicNumber: 0x1DF
10+
# CHECK32-NEXT: NumberOfSections: 2
11+
# CHECK32-NEXT: CreationTime: 0
12+
# CHECK32-NEXT: OffsetToSymbolTable: 0x80
13+
# CHECK32-NEXT: EntriesInSymbolTable: 4
14+
# CHECK32-NEXT: AuxiliaryHeaderSize: 0
15+
# CHECK32-NEXT: Flags: 0x0
16+
# CHECK32-NEXT: Sections:
17+
# CHECK32-NEXT: - Name: .text
18+
# CHECK32-NEXT: Address: 0x0
19+
# CHECK32-NEXT: Size: 0x4
20+
# CHECK32-NEXT: FileOffsetToData: 0x64
21+
# CHECK32-NEXT: FileOffsetToRelocations: 0x6C
22+
# CHECK32-NEXT: FileOffsetToLineNumbers: 0x0
23+
# CHECK32-NEXT: NumberOfRelocations: 0x1
24+
# CHECK32-NEXT: NumberOfLineNumbers: 0x0
25+
# CHECK32-NEXT: Flags: [ STYP_TEXT ]
26+
# CHECK32-NEXT: SectionData: '00007400'
27+
# CHECK32-NEXT: Relocations:
28+
# CHECK32-NEXT: - Address: 0xE
29+
# CHECK32-NEXT: Symbol: 0x12
30+
# CHECK32-NEXT: Info: 0xF
31+
# CHECK32-NEXT: Type: 0x3
32+
# CHECK32-NEXT: - Name: .data
33+
# CHECK32-NEXT: Address: 0x4
34+
# CHECK32-NEXT: Size: 0x4
35+
# CHECK32-NEXT: FileOffsetToData: 0x68
36+
# CHECK32-NEXT: FileOffsetToRelocations: 0x76
37+
# CHECK32-NEXT: FileOffsetToLineNumbers: 0x0
38+
# CHECK32-NEXT: NumberOfRelocations: 0x1
39+
# CHECK32-NEXT: NumberOfLineNumbers: 0x0
40+
# CHECK32-NEXT: Flags: [ STYP_DATA ]
41+
# CHECK32-NEXT: SectionData: '00007700'
42+
# CHECK32-NEXT: Relocations:
43+
# CHECK32-NEXT: - Address: 0x60
44+
# CHECK32-NEXT: Symbol: 0x8
45+
# CHECK32-NEXT: Info: 0x1F
46+
# CHECK32-NEXT: Type: 0x0
47+
# CHECK32-NEXT: Symbols:
48+
# CHECK32-NEXT: - Name: TestforXcoff
49+
# CHECK32-NEXT: Value: 0x0
50+
# CHECK32-NEXT: Section: N_UNDEF
51+
# CHECK32-NEXT: Type: 0x0
52+
# CHECK32-NEXT: StorageClass: C_EXT
53+
# CHECK32-NEXT: NumberOfAuxEntries: 1
54+
# CHECK32-NEXT: - Name: .data
55+
# CHECK32-NEXT: Value: 0x70
56+
# CHECK32-NEXT: Section: .data
57+
# CHECK32-NEXT: Type: 0x0
58+
# CHECK32-NEXT: StorageClass: C_HIDEXT
59+
# CHECK32-NEXT: NumberOfAuxEntries: 1
60+
61+
# CHECK64: --- !XCOFF
62+
# CHECK64-NEXT: FileHeader:
63+
# CHECK64-NEXT: MagicNumber: 0x1F7
64+
# CHECK64-NEXT: NumberOfSections: 2
65+
# CHECK64-NEXT: CreationTime: 0
66+
# CHECK64-NEXT: OffsetToSymbolTable: 0xCC
67+
# CHECK64-NEXT: EntriesInSymbolTable: 4
68+
# CHECK64-NEXT: AuxiliaryHeaderSize: 0
69+
# CHECK64-NEXT: Flags: 0x0
70+
# CHECK64-NEXT: Sections:
71+
# CHECK64-NEXT: - Name: .text
72+
# CHECK64-NEXT: Address: 0x0
73+
# CHECK64-NEXT: Size: 0x4
74+
# CHECK64-NEXT: FileOffsetToData: 0xA8
75+
# CHECK64-NEXT: FileOffsetToRelocations: 0xB0
76+
# CHECK64-NEXT: FileOffsetToLineNumbers: 0x0
77+
# CHECK64-NEXT: NumberOfRelocations: 0x1
78+
# CHECK64-NEXT: NumberOfLineNumbers: 0x0
79+
# CHECK64-NEXT: Flags: [ STYP_TEXT ]
80+
# CHECK64-NEXT: SectionData: '00007400'
81+
# CHECK64-NEXT: Relocations:
82+
# CHECK64-NEXT: - Address: 0xE
83+
# CHECK64-NEXT: Symbol: 0x12
84+
# CHECK64-NEXT: Info: 0xF
85+
# CHECK64-NEXT: Type: 0x3
86+
# CHECK64-NEXT: - Name: .data
87+
# CHECK64-NEXT: Address: 0x4
88+
# CHECK64-NEXT: Size: 0x4
89+
# CHECK64-NEXT: FileOffsetToData: 0xAC
90+
# CHECK64-NEXT: FileOffsetToRelocations: 0xBE
91+
# CHECK64-NEXT: FileOffsetToLineNumbers: 0x0
92+
# CHECK64-NEXT: NumberOfRelocations: 0x1
93+
# CHECK64-NEXT: NumberOfLineNumbers: 0x0
94+
# CHECK64-NEXT: Flags: [ STYP_DATA ]
95+
# CHECK64-NEXT: SectionData: '00007700'
96+
# CHECK64-NEXT: Relocations:
97+
# CHECK64-NEXT: - Address: 0x60
98+
# CHECK64-NEXT: Symbol: 0x8
99+
# CHECK64-NEXT: Info: 0x1F
100+
# CHECK64-NEXT: Type: 0x0
101+
# CHECK64-NEXT: Symbols:
102+
# CHECK64-NEXT: - Name: TestforXcoff
103+
# CHECK64-NEXT: Value: 0x0
104+
# CHECK64-NEXT: Section: N_UNDEF
105+
# CHECK64-NEXT: Type: 0x0
106+
# CHECK64-NEXT: StorageClass: C_EXT
107+
# CHECK64-NEXT: NumberOfAuxEntries: 1
108+
# CHECK64-NEXT: - Name: .data
109+
# CHECK64-NEXT: Value: 0x70
110+
# CHECK64-NEXT: Section: .data
111+
# CHECK64-NEXT: Type: 0x0
112+
# CHECK64-NEXT: StorageClass: C_HIDEXT
113+
# CHECK64-NEXT: NumberOfAuxEntries: 1
114+
115+
--- !XCOFF
116+
FileHeader:
117+
MagicNumber: [[MAGIC]]
118+
Sections:
119+
- Name: .text
120+
Flags: [ STYP_TEXT ]
121+
SectionData: '00007400'
122+
Relocations:
123+
- Address: 0xE
124+
Symbol: 0x12
125+
Info: 0xF
126+
Type: 0x3
127+
- Name: .data
128+
Flags: [ STYP_DATA ]
129+
SectionData: '00007700'
130+
Relocations:
131+
- Address: 0x60
132+
Symbol: 0x8
133+
Info: 0x1F
134+
Type: 0x0
135+
Symbols:
136+
- Name: TestforXcoff
137+
Value: 0x0
138+
Section: N_UNDEF
139+
Type: 0x0
140+
StorageClass: C_EXT
141+
NumberOfAuxEntries: 1
142+
- Name: .data
143+
Value: 0x70
144+
Section: .data
145+
Type: 0x0
146+
StorageClass: C_HIDEXT
147+
NumberOfAuxEntries: 1
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
## Check that obj2yaml reports a suitable error when it encounters
2+
## invalid content in Section.
3+
4+
## Error1: failed to get section data.
5+
# RUN: yaml2obj %s --docnum=1 -o %t1
6+
# RUN: not obj2yaml %t1 2>&1 | FileCheck %s -DFILE=%t1 --check-prefix=ERROR1
7+
8+
# ERROR1: The end of the file was unexpectedly encountered
9+
10+
--- !XCOFF
11+
FileHeader:
12+
MagicNumber: 0x01DF
13+
Sections:
14+
- SectionData: '00007400'
15+
FileOffsetToData: 0x70
16+
17+
## Error2: failed to get relocations.
18+
# RUN: yaml2obj %s --docnum=2 -o %t2
19+
# RUN: not obj2yaml %t2 2>&1 | FileCheck %s -DFILE=%t2 --check-prefix=ERROR2
20+
21+
# ERROR2: The end of the file was unexpectedly encountered
22+
23+
--- !XCOFF
24+
FileHeader:
25+
MagicNumber: 0x01DF
26+
Sections:
27+
- NumberOfRelocations: 0x3
28+
Relocations:
29+
- Address: 0xE
30+
Symbol: 0x12
31+
Info: 0xF
32+
Type: 0x3
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
## Check that obj2yaml reports a suitable error when it encounters
2+
## invalid content in Symbol.
3+
4+
## Error1: failed to get the section name for a symbol.
5+
# RUN: yaml2obj %s --docnum=1 -o %t1
6+
# RUN: not obj2yaml %t1 2>&1 | FileCheck %s --check-prefix=ERROR1
7+
8+
# ERROR1: Invalid section index
9+
10+
--- !XCOFF
11+
FileHeader:
12+
MagicNumber: 0x01DF
13+
Sections:
14+
- Name: .text
15+
Symbols:
16+
- SectionIndex: 2
17+
18+
## Error2: failed to get the symbol name.
19+
# RUN: yaml2obj %s --docnum=2 -o %t2
20+
# RUN: not obj2yaml %t2 2>&1 | FileCheck %s --check-prefix=ERROR2
21+
22+
# ERROR2: Invalid data was encountered while parsing the file
23+
24+
--- !XCOFF
25+
FileHeader:
26+
MagicNumber: 0x01DF
27+
Symbols:
28+
- Name: nameInStrTbl
29+
StringTable:
30+
Length: 0

0 commit comments

Comments
 (0)