## Check how we produce SHT_DYNSYM sections. ## Check we do not crash/assert when .dynsym is specified ## explicitly, but .dynstr is not present. ## Check we set the sh_link field to 0 for the .dynsym section in this case. # RUN: yaml2obj %s -o %t1 # RUN: llvm-readelf --section-headers %t1 | FileCheck %s # CHECK: Section Headers: # CHECK-NEXT: [Nr] Name Type Address Off Size ES Flg Lk # CHECK-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 # CHECK-NEXT: [ 1] .dynsym DYNSYM 0000000000000000 000040 000018 18 A 0 --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Sections: - Name: .dynsym Type: SHT_DYNSYM Offset: [[OFFSET=]] ## Check we can use the "Offset" key to to set an arbitrary offset for the SHT_DYNSYM section. # RUN: yaml2obj %s -DOFFSET=0x100 -o %t2 # RUN: llvm-readelf --section-headers %t2 | FileCheck %s --check-prefix=OFFSET # OFFSET: Section Headers: # OFFSET-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al # OFFSET-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 # OFFSET-NEXT: [ 1] .dynsym DYNSYM 0000000000000000 000100 000018 18 A 0 1 0 ## Check we are able to set Link = 0 for the .dynsym section explicitly. # RUN: yaml2obj %s --docnum=2 -DLINK=0 -o %t2 # RUN: llvm-readelf --section-headers %t2 | FileCheck %s --check-prefix=LINK-NULL # LINK-NULL: [Nr] Name {{.*}} Flg Lk Inf # LINK-NULL: [ 1] .dynsym {{.*}} A 0 1 --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Sections: - Name: .dynsym Type: SHT_DYNSYM Link: [[LINK=]] - Name: .dynstr Type: SHT_STRTAB - Name: .foo Type: SHT_PROGBITS ## Check that by default the .dynsym section will be linked to the .dynstr section, ## when the latter one exists. # RUN: yaml2obj %s --docnum=2 -o %t3 # RUN: llvm-readelf --section-headers %t3 | FileCheck %s --check-prefix=LINK-DEFAULT # LINK-DEFAULT: [Nr] Name {{.*}} Flg Lk Inf # LINK-DEFAULT: [ 1] .dynsym {{.*}} A 2 1 # LINK-DEFAULT: [ 2] .dynstr {{.*}} A 0 0 ## Even when the .dynstr section exists, we can explicitly link the .dynsym section ## to another section. # RUN: yaml2obj %s --docnum=2 -DLINK=3 -o %t4 # RUN: llvm-readelf --section-headers %t4 | FileCheck %s --check-prefix=LINK-FOO # LINK-FOO: [Nr] Name {{.*}} Flg Lk Inf # LINK-FOO: [ 1] .dynsym {{.*}} A 3 1 # LINK-FOO: [ 3] .foo ## Check we can use a section name as a Link value for .dynsym. # RUN: yaml2obj %s --docnum=2 -DLINK=.foo -o %t5 # RUN: llvm-readelf --section-headers %t5 | FileCheck %s --check-prefix=LINK-FOO