Index: llvm/trunk/test/tools/yaml2obj/dynsym-dynstr-addr.yaml =================================================================== --- llvm/trunk/test/tools/yaml2obj/dynsym-dynstr-addr.yaml +++ llvm/trunk/test/tools/yaml2obj/dynsym-dynstr-addr.yaml @@ -1,40 +0,0 @@ -# RUN: yaml2obj %s -o %t -# RUN: llvm-readobj --sections %t | FileCheck %s - -## Check yaml2obj does not ignore the address of the -## explicitly listed .dynstr and .dynsym sections. - -# CHECK: Name: .dynstr -# CHECK-NEXT: Type: SHT_STRTAB -# CHECK-NEXT: Flags [ -# CHECK-NEXT: SHF_ALLOC -# CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x1000 - -# CHECK: Name: .dynsym -# CHECK-NEXT: Type: SHT_DYNSYM -# CHECK-NEXT: Flags [ -# CHECK-NEXT: SHF_ALLOC -# CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x2000 - -!ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_DYN - Machine: EM_X86_64 -Sections: - - Name: .dynstr - Type: SHT_STRTAB - Flags: [ SHF_ALLOC ] - Address: 0x1000 - EntSize: 0x1 - - Name: .dynsym - Type: SHT_DYNSYM - Flags: [ SHF_ALLOC ] - Address: 0x2000 - EntSize: 0x18 -DynamicSymbols: - - Name: foo - Binding: STB_GLOBAL Index: llvm/trunk/test/tools/yaml2obj/implicit-sections-addr.yaml =================================================================== --- llvm/trunk/test/tools/yaml2obj/implicit-sections-addr.yaml +++ llvm/trunk/test/tools/yaml2obj/implicit-sections-addr.yaml @@ -0,0 +1,57 @@ +# RUN: yaml2obj %s -o %t +# RUN: llvm-readobj --sections %t | FileCheck %s + +## Check yaml2obj does not ignore the address of the +## explicitly listed .dynstr, .dynsym, .strtab +## and .symtab sections. + +# CHECK: Name: .dynstr +# CHECK-NEXT: Type: SHT_STRTAB +# CHECK-NEXT: Flags [ +# CHECK-NEXT: SHF_ALLOC +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x1000 + +# CHECK: Name: .dynsym +# CHECK-NEXT: Type: SHT_DYNSYM +# CHECK-NEXT: Flags [ +# CHECK-NEXT: SHF_ALLOC +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x2000 + +# CHECK: Name: .strtab +# CHECK-NEXT: Type: SHT_STRTAB +# CHECK-NEXT: Flags [ +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x3000 + +# CHECK: Name: .symtab +# CHECK-NEXT: Type: SHT_SYMTAB +# CHECK-NEXT: Flags [ +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x4000 + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_X86_64 +Sections: + - Name: .dynstr + Type: SHT_STRTAB + Flags: [ SHF_ALLOC ] + Address: 0x1000 + - Name: .dynsym + Type: SHT_DYNSYM + Flags: [ SHF_ALLOC ] + Address: 0x2000 + - Name: .strtab + Type: SHT_STRTAB + Address: 0x3000 + - Name: .symtab + Type: SHT_SYMTAB + Address: 0x4000 +DynamicSymbols: + - Name: foo + Binding: STB_GLOBAL Index: llvm/trunk/tools/yaml2obj/yaml2elf.cpp =================================================================== --- llvm/trunk/tools/yaml2obj/yaml2elf.cpp +++ llvm/trunk/tools/yaml2obj/yaml2elf.cpp @@ -489,10 +489,9 @@ else if (Name == ".dynstr") SHeader.sh_flags = ELF::SHF_ALLOC; - // If .dynstr section is explicitly described in the YAML + // If the section is explicitly described in the YAML // then we want to use its section address. - // TODO: Allow this for any explicitly described section. - if (YAMLSec && Name == ".dynstr") + if (YAMLSec) SHeader.sh_addr = YAMLSec->Address; }