## Check that obj2yaml is able to produce YAML from ## an object containing symbols and sections with duplicate ## names and produces same-named sections and symbols ## with distinguishing suffixes. # RUN: yaml2obj --docnum=1 %s -o %t1 # RUN: llvm-readobj -s -t %t1 | FileCheck %s # CHECK: Name: .foo ( # CHECK: Name: .foo ( # CHECK: Name: .foo ( # CHECK: Name: .bar ( # CHECK: Name: .bar ( # CHECK: Name: .bar ( # CHECK: Name: localfoo ( # CHECK: Name: localfoo ( # CHECK: Name: localfoo ( # CHECK: Name: localbar ( # CHECK: Name: localbar ( # CHECK: Name: localbar ( # RUN: obj2yaml %t1 | FileCheck %s --check-prefix=CASE1 # CASE1: --- !ELF # CASE1-NEXT: FileHeader: # CASE1-NEXT: Class: ELFCLASS64 # CASE1-NEXT: Data: ELFDATA2LSB # CASE1-NEXT: Type: ET_REL # CASE1-NEXT: Machine: EM_X86_64 # CASE1-NEXT: Sections: # CASE1-NEXT: - Name: .foo # CASE1-NEXT: Type: SHT_PROGBITS # CASE1-NEXT: - Name: '.foo [1]' # CASE1-NEXT: Type: SHT_PROGBITS # CASE1-NEXT: - Name: '.foo [2]' # CASE1-NEXT: Type: SHT_PROGBITS # CASE1-NEXT: - Name: .bar # CASE1-NEXT: Type: SHT_PROGBITS # CASE1-NEXT: - Name: '.bar [1]' # CASE1-NEXT: Type: SHT_PROGBITS # CASE1-NEXT: - Name: '.bar [2]' # CASE1-NEXT: Type: SHT_PROGBITS # CASE1-NEXT: Symbols: # CASE1-NEXT: - Name: localfoo # CASE1-NEXT: - Name: 'localfoo [1]' # CASE1-NEXT: - Name: 'localfoo [2]' # CASE1-NEXT: - Name: localbar # CASE1-NEXT: - Name: 'localbar [1]' # CASE1-NEXT: - Name: 'localbar [2]' # CASE1-NEXT: ... --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Machine: EM_X86_64 Sections: - Name: .foo Type: SHT_PROGBITS - Name: '.foo [555]' Type: SHT_PROGBITS - Name: '.foo [random_tag]' Type: SHT_PROGBITS - Name: .bar Type: SHT_PROGBITS - Name: '.bar [666]' Type: SHT_PROGBITS - Name: '.bar [random_tag]' Type: SHT_PROGBITS Symbols: - Name: 'localfoo [111]' - Name: 'localfoo [222]' - Name: 'localfoo [random_tag]' - Name: 'localbar [333]' - Name: 'localbar [444]' - Name: 'localbar [random_tag]' ## Check we can refer to symbols with the same ## name from relocations. # RUN: yaml2obj --docnum=2 %s -o %t2 # RUN: obj2yaml %t2 | FileCheck %s --check-prefix=CASE2 # CASE2: Relocations: # CASE2-NEXT: - Offset: 0x0000000000000000 # CASE2-NEXT: Symbol: 'foo [1]' # CASE2-NEXT: Type: R_X86_64_PC32 # CASE2-NEXT: - Offset: 0x0000000000000004 # CASE2-NEXT: Symbol: foo # CASE2-NEXT: Type: R_X86_64_PC32 # CASE2-NEXT: Symbols: # CASE2-NEXT: - Name: foo # CASE2-NEXT: - Name: 'foo [1]' --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Machine: EM_X86_64 Sections: - Name: .text Type: SHT_PROGBITS Size: 8 - Name: .rela.text Type: SHT_RELA Info: .text Link: .symtab Relocations: - Type: R_X86_64_PC32 Offset: 0 Symbol: 'foo [1]' - Type: R_X86_64_PC32 Offset: 4 Symbol: foo Symbols: - Name: foo - Name: 'foo [1]' ## Check obj2yaml does not add a suffix to a name if the ## symbol is in .symtab and .dynsym at the same time. # RUN: yaml2obj --docnum=3 %s -o %t3 # RUN: obj2yaml %t3 | FileCheck %s --check-prefix=CASE3 # CASE3: --- !ELF # CASE3-NEXT: FileHeader: # CASE3-NEXT: Class: ELFCLASS64 # CASE3-NEXT: Data: ELFDATA2LSB # CASE3-NEXT: Type: ET_DYN # CASE3-NEXT: Machine: EM_X86_64 # CASE3-NEXT: Symbols: # CASE3-NEXT: - Name: foo # CASE3-NEXT: Binding: STB_GLOBAL # CASE3-NEXT: DynamicSymbols: # CASE3-NEXT: - Name: foo # CASE3-NEXT: Binding: STB_GLOBAL --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Symbols: - Name: foo Binding: STB_GLOBAL DynamicSymbols: - Name: foo Binding: STB_GLOBAL