Compiler projects using llvm
## Check we can use obj2yaml to yamalize the object containing .dynamic
## section. Check that resulting section has the proper attributes and
## dynamic tags and that we do not dump the default sh_entsize.

# RUN: yaml2obj -DENTSIZE=0x10 %s -o %t1
# RUN: obj2yaml %t1 | FileCheck %s

# CHECK:       Sections:
# CHECK-NEXT:  - Name:            .dynamic
# CHECK-NEXT:    Type:            SHT_DYNAMIC
# CHECK-NEXT:    Address:         0x1000
# CHECK-NEXT:    AddressAlign:    0x2000
# CHECK-NEXT:    Entries:
# CHECK-NEXT:      - Tag:             DT_NULL
# CHECK-NEXT:        Value:           0x0
# CHECK-NEXT:      - Tag:             DT_NEEDED
# CHECK-NEXT:        Value:           0x1
# CHECK-NEXT:      - Tag:             DT_PLTRELSZ
# CHECK-NEXT:        Value:           0x2
# CHECK-NEXT:      - Tag:             DT_PLTGOT
# CHECK-NEXT:        Value:           0x3
# CHECK-NEXT:      - Tag:             DT_HASH
# CHECK-NEXT:        Value:           0x4
# CHECK-NEXT:      - Tag:             DT_STRTAB
# CHECK-NEXT:        Value:           0x5
# CHECK-NEXT:      - Tag:             DT_SYMTAB
# CHECK-NEXT:        Value:           0x6
# CHECK-NEXT:      - Tag:             DT_RELA
# CHECK-NEXT:        Value:           0x7
# CHECK-NEXT:      - Tag:             DT_RELASZ
# CHECK-NEXT:        Value:           0x8
# CHECK-NEXT:      - Tag:             DT_RELAENT
# CHECK-NEXT:        Value:           0x9
# CHECK-NEXT:      - Tag:             DT_STRSZ
# CHECK-NEXT:        Value:           0xA
# CHECK-NEXT:      - Tag:             DT_SYMENT
# CHECK-NEXT:        Value:           0xB
# CHECK-NEXT:      - Tag:             DT_INIT
# CHECK-NEXT:        Value:           0xC
# CHECK-NEXT:      - Tag:             DT_FINI
# CHECK-NEXT:        Value:           0xD
# CHECK-NEXT:      - Tag:             DT_SONAME
# CHECK-NEXT:        Value:           0xE
# CHECK-NEXT:      - Tag:             DT_RPATH
# CHECK-NEXT:        Value:           0xF
# CHECK-NEXT:      - Tag:             DT_SYMBOLIC
# CHECK-NEXT:        Value:           0x10
# CHECK-NEXT:      - Tag:             DT_REL
# CHECK-NEXT:        Value:           0x11
# CHECK-NEXT:      - Tag:             DT_RELSZ
# CHECK-NEXT:        Value:           0x12
# CHECK-NEXT:      - Tag:             DT_RELENT
# CHECK-NEXT:        Value:           0x13
# CHECK-NEXT:      - Tag:             DT_PLTREL
# CHECK-NEXT:        Value:           0x14
# CHECK-NEXT:      - Tag:             DT_DEBUG
# CHECK-NEXT:        Value:           0x15
# CHECK-NEXT:      - Tag:             DT_TEXTREL
# CHECK-NEXT:        Value:           0x16
# CHECK-NEXT:      - Tag:             DT_JMPREL
# CHECK-NEXT:        Value:           0x17
# CHECK-NEXT:      - Tag:             DT_BIND_NOW
# CHECK-NEXT:        Value:           0x18
# CHECK-NEXT:      - Tag:             DT_INIT_ARRAY
# CHECK-NEXT:        Value:           0x19
# CHECK-NEXT:      - Tag:             DT_FINI_ARRAY
# CHECK-NEXT:        Value:           0x1A
# CHECK-NEXT:      - Tag:             DT_INIT_ARRAYSZ
# CHECK-NEXT:        Value:           0x1B
# CHECK-NEXT:      - Tag:             DT_FINI_ARRAYSZ
# CHECK-NEXT:        Value:           0x1C
# CHECK-NEXT:      - Tag:             DT_RUNPATH
# CHECK-NEXT:        Value:           0x1D
# CHECK-NEXT:      - Tag:             DT_FLAGS
# CHECK-NEXT:        Value:           0x1E
# CHECK-NEXT:      - Tag:             DT_PREINIT_ARRAY
# CHECK-NEXT:        Value:           0x1F
# CHECK-NEXT:      - Tag:             DT_PREINIT_ARRAYSZ
# CHECK-NEXT:        Value:           0x20
# CHECK-NEXT:      - Tag:             DT_SYMTAB_SHNDX
# CHECK-NEXT:        Value:           0x21
# CHECK-NEXT:      - Tag:             DT_RELRSZ
# CHECK-NEXT:        Value:           0x22
# CHECK-NEXT:      - Tag:             DT_RELR
# CHECK-NEXT:        Value:           0x23
# CHECK-NEXT:      - Tag:             DT_RELRENT
# CHECK-NEXT:        Value:           0x24
# CHECK-NEXT:      - Tag:             DT_ANDROID_REL
# CHECK-NEXT:        Value:           0x25
# CHECK-NEXT:      - Tag:             DT_ANDROID_RELSZ
# CHECK-NEXT:        Value:           0x26
# CHECK-NEXT:      - Tag:             DT_ANDROID_RELA
# CHECK-NEXT:        Value:           0x27
# CHECK-NEXT:      - Tag:             DT_ANDROID_RELASZ
# CHECK-NEXT:        Value:           0x28
# CHECK-NEXT:      - Tag:             DT_ANDROID_RELR
# CHECK-NEXT:        Value:           0x29
# CHECK-NEXT:      - Tag:             DT_ANDROID_RELRSZ
# CHECK-NEXT:        Value:           0x2A
# CHECK-NEXT:      - Tag:             DT_ANDROID_RELRENT
# CHECK-NEXT:        Value:           0x2B
# CHECK-NEXT:      - Tag:             DT_GNU_HASH
# CHECK-NEXT:        Value:           0x2C
# CHECK-NEXT:      - Tag:             DT_TLSDESC_PLT
# CHECK-NEXT:        Value:           0x2D
# CHECK-NEXT:      - Tag:             DT_TLSDESC_GOT
# CHECK-NEXT:        Value:           0x2E
# CHECK-NEXT:      - Tag:             DT_RELACOUNT
# CHECK-NEXT:        Value:           0x2F
# CHECK-NEXT:      - Tag:             DT_RELCOUNT
# CHECK-NEXT:        Value:           0x30
# CHECK-NEXT:      - Tag:             DT_FLAGS_1
# CHECK-NEXT:        Value:           0x31
# CHECK-NEXT:      - Tag:             DT_VERSYM
# CHECK-NEXT:        Value:           0x32
# CHECK-NEXT:      - Tag:             DT_VERDEF
# CHECK-NEXT:        Value:           0x33
# CHECK-NEXT:      - Tag:             DT_VERDEFNUM
# CHECK-NEXT:        Value:           0x34
# CHECK-NEXT:      - Tag:             DT_VERNEED
# CHECK-NEXT:        Value:           0x35
# CHECK-NEXT:      - Tag:             DT_VERNEEDNUM
# CHECK-NEXT:        Value:           0x36
# CHECK-NEXT:      - Tag:             DT_USED
# CHECK-NEXT:        Value:           0x1

!ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_DYN
Sections:
  - Name:            .dynamic
    Type:            SHT_DYNAMIC
    Address:         0x0000000000001000
    AddressAlign:    0x0000000000002000
    EntSize:         [[ENTSIZE]]
    Entries:
      - Tag:             DT_NULL
        Value:           0x0000000000000000
      - Tag:             DT_NEEDED
        Value:           0x0000000000000001
      - Tag:             DT_PLTRELSZ
        Value:           0x0000000000000002
      - Tag:             DT_PLTGOT
        Value:           0x0000000000000003
      - Tag:             DT_HASH
        Value:           0x0000000000000004
      - Tag:             DT_STRTAB
        Value:           0x0000000000000005
      - Tag:             DT_SYMTAB
        Value:           0x0000000000000006
      - Tag:             DT_RELA
        Value:           0x0000000000000007
      - Tag:             DT_RELASZ
        Value:           0x0000000000000008
      - Tag:             DT_RELAENT
        Value:           0x0000000000000009
      - Tag:             DT_STRSZ
        Value:           0x000000000000000A
      - Tag:             DT_SYMENT
        Value:           0x000000000000000B
      - Tag:             DT_INIT
        Value:           0x000000000000000C
      - Tag:             DT_FINI
        Value:           0x000000000000000D
      - Tag:             DT_SONAME
        Value:           0x000000000000000E
      - Tag:             DT_RPATH
        Value:           0x000000000000000F
      - Tag:             DT_SYMBOLIC
        Value:           0x0000000000000010
      - Tag:             DT_REL
        Value:           0x0000000000000011
      - Tag:             DT_RELSZ
        Value:           0x0000000000000012
      - Tag:             DT_RELENT
        Value:           0x0000000000000013
      - Tag:             DT_PLTREL
        Value:           0x0000000000000014
      - Tag:             DT_DEBUG
        Value:           0x0000000000000015
      - Tag:             DT_TEXTREL
        Value:           0x0000000000000016
      - Tag:             DT_JMPREL
        Value:           0x0000000000000017
      - Tag:             DT_BIND_NOW
        Value:           0x0000000000000018
      - Tag:             DT_INIT_ARRAY
        Value:           0x0000000000000019
      - Tag:             DT_FINI_ARRAY
        Value:           0x000000000000001A
      - Tag:             DT_INIT_ARRAYSZ
        Value:           0x000000000000001B
      - Tag:             DT_FINI_ARRAYSZ
        Value:           0x000000000000001C
      - Tag:             DT_RUNPATH
        Value:           0x000000000000001D
      - Tag:             DT_FLAGS
        Value:           0x000000000000001E
      - Tag:             DT_PREINIT_ARRAY
        Value:           0x000000000000001F
      - Tag:             DT_PREINIT_ARRAYSZ
        Value:           0x0000000000000020
      - Tag:             DT_SYMTAB_SHNDX
        Value:           0x0000000000000021
      - Tag:             DT_RELRSZ
        Value:           0x0000000000000022
      - Tag:             DT_RELR
        Value:           0x0000000000000023
      - Tag:             DT_RELRENT
        Value:           0x0000000000000024
      - Tag:             DT_ANDROID_REL
        Value:           0x0000000000000025
      - Tag:             DT_ANDROID_RELSZ
        Value:           0x0000000000000026
      - Tag:             DT_ANDROID_RELA
        Value:           0x0000000000000027
      - Tag:             DT_ANDROID_RELASZ
        Value:           0x0000000000000028
      - Tag:             DT_ANDROID_RELR
        Value:           0x0000000000000029
      - Tag:             DT_ANDROID_RELRSZ
        Value:           0x000000000000002A
      - Tag:             DT_ANDROID_RELRENT
        Value:           0x000000000000002B
      - Tag:             DT_GNU_HASH
        Value:           0x000000000000002C
      - Tag:             DT_TLSDESC_PLT
        Value:           0x000000000000002D
      - Tag:             DT_TLSDESC_GOT
        Value:           0x000000000000002E
      - Tag:             DT_RELACOUNT
        Value:           0x000000000000002F
      - Tag:             DT_RELCOUNT
        Value:           0x0000000000000030
      - Tag:             DT_FLAGS_1
        Value:           0x0000000000000031
      - Tag:             DT_VERSYM
        Value:           0x0000000000000032
      - Tag:             DT_VERDEF
        Value:           0x0000000000000033
      - Tag:             DT_VERDEFNUM
        Value:           0x0000000000000034
      - Tag:             DT_VERNEED
        Value:           0x0000000000000035
      - Tag:             DT_VERNEEDNUM
        Value:           0x0000000000000036
      - Tag:             DT_USED
        Value:           0x0000000000000001

## Test the behavior when sh_entsize is invalid.
## Here we use 0xFE as an arbitrary broken value instead of expected 0x16.

# RUN: yaml2obj -DENTSIZE=0xff %s -o %t2
# RUN: not obj2yaml %t2 2>&1 | FileCheck %s --check-prefix=ENTSIZE

# ENTSIZE: section [index 1] has invalid sh_entsize: expected 16, but got 255