1## .symtab's sh_info contains zero value. First entry in a .symtab is a
2## zero entry that must exist in a valid object, so sh_info can't be null.
3## Check we report a proper error for that case.
4# RUN: yaml2obj --docnum=1 %s -o %t.o
5# RUN: not ld.lld %t.o -o /dev/null 2>&1 | FileCheck %s --check-prefix=ERR1
6# ERR1: invalid sh_info in symbol table
7
8--- !ELF
9FileHeader:
10  Class:           ELFCLASS64
11  Data:            ELFDATA2LSB
12  Type:            ET_REL
13  Machine:         EM_X86_64
14Sections:
15  - Name:            .symtab
16    Info:            0
17    Type:            SHT_SYMTAB
18Symbols:
19  - Name:          foo
20    Binding:       STB_GLOBAL
21
22## sh_info has value 2 what says that non-local symbol `foo` is local.
23## Check we report this case.
24# RUN: yaml2obj --docnum=2 %s -o %t.o
25# RUN: not ld.lld --noinhibit-exec %t.o -o /dev/null 2>&1 | FileCheck --check-prefix=ERR2 %s
26# ERR2: error: {{.*}}.o: non-local symbol (1) found at index < .symtab's sh_info (2)
27
28--- !ELF
29FileHeader:
30  Class:           ELFCLASS64
31  Data:            ELFDATA2LSB
32  Type:            ET_REL
33  Machine:         EM_X86_64
34Sections:
35  - Name:            .symtab
36    Info:            2
37    Type:            SHT_SYMTAB
38Symbols:
39  - Name:          foo
40    Binding:       STB_GLOBAL
41
42## sh_info has value 0xff what is larger than number of symbols in a .symtab.
43## Check we report this case.
44# RUN: yaml2obj --docnum=3 %s -o %t.o
45# RUN: not ld.lld %t.o -o /dev/null 2>&1 | FileCheck --check-prefix=ERR1 %s
46
47--- !ELF
48FileHeader:
49  Class:           ELFCLASS64
50  Data:            ELFDATA2LSB
51  Type:            ET_REL
52  Machine:         EM_X86_64
53Sections:
54  - Name:            .symtab
55    Info:            0xff
56    Type:            SHT_SYMTAB
57Symbols:
58  - Name:          foo
59    Binding:       STB_GLOBAL
60