1## Check how obj2yaml produces YAML .stack_sizes descriptions.
2
3## Check that obj2yaml uses the "Entries" tag to describe a .stack_sizes section
4## when it can extract <address, size> pairs.
5
6# RUN: yaml2obj --docnum=1 %s -o %t1
7# RUN: obj2yaml %t1 | FileCheck %s --check-prefix=VALID
8
9# VALID:      --- !ELF
10# VALID-NEXT: FileHeader:
11# VALID-NEXT:   Class: ELFCLASS64
12# VALID-NEXT:   Data:  ELFDATA2LSB
13# VALID-NEXT:   Type:  ET_EXEC
14# VALID-NEXT: Sections:
15# VALID-NEXT:   - Name: .stack_sizes
16# VALID-NEXT:     Type: SHT_PROGBITS
17# VALID-NEXT:     Entries:
18# VALID-NEXT:       - Address: 0x10
19# VALID-NEXT:         Size:    0x20
20# VALID-NEXT:       - Address: 0x30
21# VALID-NEXT:         Size:    0x40
22
23--- !ELF
24FileHeader:
25  Class: ELFCLASS64
26  Data:  ELFDATA2LSB
27  Type:  ET_EXEC
28Sections:
29  - Name:    .stack_sizes
30    Type:    SHT_PROGBITS
31    Content: "100000000000000020300000000000000040"
32
33## Check that obj2yaml uses the "Content" tag to describe a .stack_sizes section
34## when it can't extract the entries, for example, when section data is truncated.
35
36# RUN: yaml2obj --docnum=2 %s -o %t2
37# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=INVALID
38
39# INVALID:      --- !ELF
40# INVALID-NEXT: FileHeader:
41# INVALID-NEXT:   Class: ELFCLASS64
42# INVALID-NEXT:   Data:  ELFDATA2LSB
43# INVALID-NEXT:   Type:  ET_EXEC
44# INVALID-NEXT: Sections:
45# INVALID-NEXT:   - Name:    .stack_sizes
46# INVALID-NEXT:     Type:    SHT_PROGBITS
47# INVALID-NEXT:     Content: '1000000000000000203000000000000000'
48
49--- !ELF
50FileHeader:
51  Class: ELFCLASS64
52  Data:  ELFDATA2LSB
53  Type:  ET_EXEC
54Sections:
55  - Name:    .stack_sizes
56    Type:    SHT_PROGBITS
57    Content: "1000000000000000203000000000000000"
58
59## Check obj2yaml can dump empty .stack_sizes.
60
61# RUN: yaml2obj --docnum=3 %s -o %t3
62# RUN: obj2yaml %t3 | FileCheck %s --check-prefix=EMPTY
63
64# EMPTY:      --- !ELF
65# EMPTY-NEXT: FileHeader:
66# EMPTY-NEXT:   Class: ELFCLASS64
67# EMPTY-NEXT:   Data:  ELFDATA2LSB
68# EMPTY-NEXT:   Type:  ET_EXEC
69# EMPTY-NEXT: Sections:
70# EMPTY-NEXT:   - Name:    .stack_sizes
71# EMPTY-NEXT:     Type:    SHT_PROGBITS
72# EMPTY-NEXT:     Content: ''
73
74--- !ELF
75FileHeader:
76  Class: ELFCLASS64
77  Data:  ELFDATA2LSB
78  Type:  ET_EXEC
79Sections:
80  - Name:    .stack_sizes
81    Type:    SHT_PROGBITS
82    Content: ""
83
84## Check obj2yaml can dump multiple .stack_sizes.
85
86# RUN: yaml2obj --docnum=4 %s -o %t4
87# RUN: obj2yaml %t4 | FileCheck %s --check-prefix=MULTI
88
89# MULTI:      --- !ELF
90# MULTI-NEXT: FileHeader:
91# MULTI-NEXT:   Class: ELFCLASS64
92# MULTI-NEXT:   Data:  ELFDATA2LSB
93# MULTI-NEXT:   Type:  ET_EXEC
94# MULTI-NEXT: Sections:
95# MULTI-NEXT:   - Name:    .stack_sizes
96# MULTI-NEXT:     Type:    SHT_PROGBITS
97# MULTI-NEXT:     Entries:
98# MULTI-NEXT:       - Address: 0x10
99# MULTI-NEXT:         Size:    0x20
100# MULTI-NEXT:       - Address: 0x30
101# MULTI-NEXT:         Size:    0x40
102# MULTI-NEXT:   - Name:    '.stack_sizes (1)'
103# MULTI-NEXT:     Type:    SHT_PROGBITS
104# MULTI-NEXT:     Entries:
105# MULTI-NEXT:       - Address: 0x50
106# MULTI-NEXT:         Size:    0x1
107# MULTI-NEXT:       - Address: 0x60
108# MULTI-NEXT:         Size:    0x2
109
110--- !ELF
111FileHeader:
112  Class: ELFCLASS64
113  Data:  ELFDATA2LSB
114  Type:  ET_EXEC
115Sections:
116  - Name:    .stack_sizes
117    Type:    SHT_PROGBITS
118    Entries:
119      - Address: 0x10
120        Size:    0x20
121      - Address: 0x30
122        Size:    0x40
123  - Name:    '.stack_sizes (1)'
124    Type:    SHT_PROGBITS
125    Entries:
126      - Address: 0x50
127        Size:    0x1
128      - Address: 0x60
129        Size:    0x2
130