# Show that llvm-readobj prints symbol shndxes correctly, for valid indexes,
# invalid indexes (i.e. section indexes that don't correspond to a real
# section), reserved values and processor/os-specific index values, for both GNU
# and LLVM styles.

# Use --dyn-symbols because yaml2obj does not currently support large section indexes
# and also does not allow hand-crafting of static symbol tables.
# RUN: yaml2obj --docnum=1 %s > %t1
# RUN: llvm-readobj --symbols --dyn-symbols %t1 | FileCheck %s --check-prefix=LLVM
# RUN: llvm-readelf --symbols --dyn-symbols %t1 | FileCheck %s --check-prefix=GNU1

# llvm-readobj doesn't accept shndx values that are not valid section indexes
# for LLVM style, so only test GNU output in this case.
# RUN: yaml2obj --docnum=2 %s > %t2
# RUN: llvm-readelf --symbols %t2 | FileCheck %s --check-prefix=GNU2

# LLVM: Name:    undef
# LLVM: Section: Undefined (0x0)
# LLVM: Name:    normal
# LLVM: Section: .text (0x1)
# LLVM: Name:    common
# LLVM: Section: Common (0xFFF2)
# LLVM: Name:    absolute
# LLVM: Section: Absolute (0xFFF1)
# LLVM: Name:    proc
# LLVM: Section: Processor Specific (0xFF01)
# LLVM: Name:    os
# LLVM: Section: Operating System Specific (0xFF21)
# LLVM: Name:    reserved
# LLVM: Section: Reserved (0xFFFE)

# GNU1:      Symbol table '.dynsym' contains 2 entries:
# GNU1-NEXT:   Num: {{.*}} Ndx Name
# GNU1-NEXT:     0: {{.*}} UND
# GNU1-NEXT:     1: {{.*}}   1 xindex
# GNU1:      Symbol table '.symtab' contains 8 entries:
# GNU1-NEXT:   Num: {{.*}} Ndx Name
# GNU1-NEXT:     0: {{.*}} UND
# GNU1-NEXT:     1: {{.*}} UND undef
# GNU1-NEXT:     2: {{.*}}   1 normal
# GNU1-NEXT:     3: {{.*}} COM common
# GNU1-NEXT:     4: {{.*}} ABS absolute
# GNU1-NEXT:     5: {{.*}} PRC[0xff01] proc
# GNU1-NEXT:     6: {{.*}} OS[0xff21] os
# GNU1-NEXT:     7: {{.*}} RSV[0xfffe] reserved

# GNU2:      Symbol table '.symtab' contains 2 entries:
# GNU2-NEXT:   Num: {{.*}} Ndx Name
# GNU2-NEXT:     0: {{.*}} UND
# GNU2-NEXT:     1: {{.*}}  66 bad

--- !ELF
FileHeader:
  Class:   ELFCLASS32
  Data:    ELFDATA2LSB
  Type:    ET_REL
  Machine: EM_386
Sections:
  - Name: .text
    Type: SHT_PROGBITS
  - Name: .dynstr
    Type: SHT_STRTAB
    #\0xindex\0
    Content: "0078696e64657800"
  - Name: .dynsym
    Type: SHT_DYNSYM
    Link: .dynstr
    EntSize: 16
    # Null symbol
    # Symbol with st_name = 1, st_shndx = SHN_XINDEX
    Content: "000000000000000000000000000000000100000000000000000000000000ffff"
  - Name: .symtab_shndx
    Type: SHT_SYMTAB_SHNDX
    Link: .dynsym
    EntSize: 4
    Content: "0000000001000000"
Symbols:
  - Name:    undef
    Binding: STB_GLOBAL
  - Name:    normal
    Section: .text
    Binding: STB_GLOBAL
  - Name:    common
    Index:   SHN_COMMON
    Binding: STB_GLOBAL
  - Name:    absolute
    Index:   SHN_ABS
    Binding: STB_GLOBAL
  - Name:    proc
    Index:   0xff01
    Binding: STB_GLOBAL
  - Name:    os
    Index:   0xff21
    Binding: STB_GLOBAL
  - Name:    reserved
    Index:   0xfffe
    Binding: STB_GLOBAL

--- !ELF
FileHeader:
  Class:   ELFCLASS32
  Data:    ELFDATA2LSB
  Type:    ET_REL
  Machine: EM_386
Symbols:
  - Name:    bad
    Index:   0x42
    Binding: STB_GLOBAL
