• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1## Check that obj2yaml dumps SHT_STRTAB/SHT_SYMTAB/SHT_DYNSYM sections
2## when they are allocatable.
3
4## In the following test we check the normal case: when .dynsym (SHT_DYNSYM)
5## and .dynstr (SHT_STRTAB) are allocatable sections and .symtab (SHT_SYMTAB),
6## .strtab (SHT_STRTAB) and .shstrtab (SHT_STRTAB) are not.
7## Check we explicitly declare allocatable sections.
8
9# RUN: yaml2obj %s -o %t1.so -D FLAG1=SHF_ALLOC -D FLAG2=""
10# RUN: llvm-readelf -S %t1.so | FileCheck %s --check-prefixes=RE,RE-1
11# RUN: obj2yaml %t1.so | FileCheck %s --check-prefix=OUTPUT
12
13## Check the information about sections using an independent tool.
14
15# RE:        Section Headers:
16# RE-NEXT:   [Nr] Name      Type     Address          Off    Size   ES Flg Lk Inf Al
17# RE-NEXT:   [ 0]           NULL     0000000000000000 000000 000000 00     0   0  0
18# RE-NEXT:   [ 1] .foo.1    PROGBITS 0000000000000000 000040 000000 00     0   0  0
19# RE-1-NEXT: [ 2] .dynsym   DYNSYM   0000000000001000 000040 000030 18   A 4   2  0
20# RE-2-NEXT: [ 2] .dynsym   DYNSYM   0000000000001000 000040 000030 18     4   2  0
21# RE-NEXT:   [ 3] .foo.2    PROGBITS 0000000000000000 000070 000000 00     0   0  0
22# RE-1-NEXT: [ 4] .dynstr   STRTAB   0000000000002000 000070 000005 00   A 0   0  0
23# RE-2-NEXT: [ 4] .dynstr   STRTAB   0000000000002000 000070 000005 00     0   0  0
24# RE-NEXT:   [ 5] .foo.3    PROGBITS 0000000000000000 000075 000000 00     0   0  0
25# RE-1-NEXT: [ 6] .symtab   SYMTAB   0000000000003000 000075 000030 18     8   2  0
26# RE-2-NEXT: [ 6] .symtab   SYMTAB   0000000000003000 000075 000030 18   A 8   2  0
27# RE-NEXT:   [ 7] .foo.4    PROGBITS 0000000000000000 0000a5 000000 00     0   0  0
28# RE-1-NEXT: [ 8] .strtab   STRTAB   0000000000004000 0000a5 000005 00     0   0  0
29# RE-2-NEXT: [ 8] .strtab   STRTAB   0000000000004000 0000a5 000005 00   A 0   0  0
30# RE-NEXT:   [ 9] .foo.5    PROGBITS 0000000000000000 0000aa 000000 00     0   0  0
31# RE-1-NEXT: [10] .shstrtab STRTAB   0000000000005000 0000aa 000055 00     0   0  0
32# RE-2-NEXT: [10] .shstrtab STRTAB   0000000000005000 0000aa 000055 00   A 0   0  0
33# RE-NEXT:   [11] .foo.6    PROGBITS 0000000000000000 0000ff 000000 00     0   0  0
34
35# OUTPUT:      --- !ELF
36# OUTPUT-NEXT: FileHeader:
37# OUTPUT-NEXT:   Class: ELFCLASS64
38# OUTPUT-NEXT:   Data:  ELFDATA2LSB
39# OUTPUT-NEXT:   Type:  ET_DYN
40# OUTPUT-NEXT: Sections:
41# OUTPUT-NEXT:   - Name: .foo.1
42# OUTPUT-NEXT:     Type: SHT_PROGBITS
43# OUTPUT-NEXT:   - Name:    .dynsym
44# OUTPUT-NEXT:     Type:    SHT_DYNSYM
45# OUTPUT-NEXT:     Flags:   [ SHF_ALLOC ]
46# OUTPUT-NEXT:     Address: 0x1000
47# OUTPUT-NEXT:     Link:    .dynstr
48# OUTPUT-NEXT:     EntSize: 0x18
49# OUTPUT-NEXT:   - Name: .foo.2
50# OUTPUT-NEXT:     Type: SHT_PROGBITS
51# OUTPUT-NEXT:   - Name:    .dynstr
52# OUTPUT-NEXT:     Type:    SHT_STRTAB
53# OUTPUT-NEXT:     Flags:   [ SHF_ALLOC ]
54# OUTPUT-NEXT:     Address: 0x2000
55# OUTPUT-NEXT:   - Name: .foo.3
56# OUTPUT-NEXT:     Type: SHT_PROGBITS
57# OUTPUT-NEXT:   - Name: .foo.4
58# OUTPUT-NEXT:     Type: SHT_PROGBITS
59# OUTPUT-NEXT:   - Name: .foo.5
60# OUTPUT-NEXT:     Type: SHT_PROGBITS
61# OUTPUT-NEXT:   - Name: .foo.6
62# OUTPUT-NEXT:     Type: SHT_PROGBITS
63# OUTPUT-NEXT: Symbols:
64# OUTPUT-NEXT:   - Name: foo
65# OUTPUT-NEXT: DynamicSymbols:
66# OUTPUT-NEXT:   - Name: bar
67# OUTPUT-NEXT: ...
68
69--- !ELF
70FileHeader:
71  Class: ELFCLASS64
72  Data:  ELFDATA2LSB
73  Type:  ET_DYN
74Sections:
75  - Name: .foo.1
76    Type: SHT_PROGBITS
77  - Name:    .dynsym
78    Type:    SHT_DYNSYM
79    Address: 0x1000
80    Flags: [ [[FLAG1]] ]
81  - Name: .foo.2
82    Type: SHT_PROGBITS
83  - Name:    .dynstr
84    Type:    SHT_STRTAB
85    Address: 0x2000
86    Flags: [ [[FLAG1]] ]
87  - Name: .foo.3
88    Type: SHT_PROGBITS
89  - Name:    .symtab
90    Type:    SHT_SYMTAB
91    Address: 0x3000
92    Flags: [ [[FLAG2]] ]
93  - Name: .foo.4
94    Type: SHT_PROGBITS
95  - Name:    .strtab
96    Type:    SHT_STRTAB
97    Address: 0x4000
98    Flags: [ [[FLAG2]] ]
99  - Name: .foo.5
100    Type: SHT_PROGBITS
101  - Name:    .shstrtab
102    Type:    SHT_STRTAB
103    Address: 0x5000
104    Flags: [ [[FLAG2]] ]
105  - Name: .foo.6
106    Type: SHT_PROGBITS
107Symbols:
108  - Name: foo
109DynamicSymbols:
110  - Name: bar
111
112## Now test the abnormal case: when .symtab (SHT_SYMTAB),
113## .strtab (SHT_STRTAB) and .shstrtab (SHT_STRTAB) are
114## allocatable sections, but .dynsym (SHT_DYNSYM) and
115## .dynstr (SHT_STRTAB) are not.
116## Check that only allocatable versions are explicitly declared.
117
118# RUN: yaml2obj %s -o %t2.so -D FLAG1="" -D FLAG2=SHF_ALLOC
119# RUN: llvm-readelf -S %t2.so | FileCheck %s --check-prefixes=RE,RE-2
120# RUN: obj2yaml %t2.so | FileCheck %s --check-prefix=OUTPUT2
121
122## Check we explicitly declare only allocatable
123## SHT_STRTAB/SHT_SYMTAB/SHT_DYNSYM sections.
124# OUTPUT2:      --- !ELF
125# OUTPUT2-NEXT: FileHeader:
126# OUTPUT2-NEXT:   Class: ELFCLASS64
127# OUTPUT2-NEXT:   Data:  ELFDATA2LSB
128# OUTPUT2-NEXT:   Type:  ET_DYN
129# OUTPUT2-NEXT: Sections:
130# OUTPUT2-NEXT:   - Name: .foo.1
131# OUTPUT2-NEXT:     Type: SHT_PROGBITS
132# OUTPUT2-NEXT:   - Name: .foo.2
133# OUTPUT2-NEXT:     Type: SHT_PROGBITS
134# OUTPUT2-NEXT:   - Name: .foo.3
135# OUTPUT2-NEXT:     Type: SHT_PROGBITS
136# OUTPUT2-NEXT:   - Name:    .symtab
137# OUTPUT2-NEXT:     Type:    SHT_SYMTAB
138# OUTPUT2-NEXT:     Flags:   [ SHF_ALLOC ]
139# OUTPUT2-NEXT:     Address: 0x3000
140# OUTPUT2-NEXT:     Link:    .strtab
141# OUTPUT2-NEXT:     EntSize: 0x18
142# OUTPUT2-NEXT:   - Name: .foo.4
143# OUTPUT2-NEXT:     Type: SHT_PROGBITS
144# OUTPUT2-NEXT:   - Name:    .strtab
145# OUTPUT2-NEXT:     Type:    SHT_STRTAB
146# OUTPUT2-NEXT:     Flags:   [ SHF_ALLOC ]
147# OUTPUT2-NEXT:     Address: 0x4000
148# OUTPUT2-NEXT:   - Name: .foo.5
149# OUTPUT2-NEXT:     Type: SHT_PROGBITS
150# OUTPUT2-NEXT:   - Name:    .shstrtab
151# OUTPUT2-NEXT:     Type:    SHT_STRTAB
152# OUTPUT2-NEXT:     Flags:   [ SHF_ALLOC ]
153# OUTPUT2-NEXT:     Address: 0x5000
154# OUTPUT2-NEXT:   - Name:    .foo.6
155# OUTPUT2-NEXT:     Type:    SHT_PROGBITS
156# OUTPUT2-NEXT: Symbols:
157# OUTPUT2-NEXT:   - Name: foo
158# OUTPUT2-NEXT: DynamicSymbols:
159# OUTPUT2-NEXT:   - Name: bar
160# OUTPUT2-NEXT: ...
161