## 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: 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 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: - Symbol: 'foo (1)' # CASE2-NEXT: Type: R_X86_64_PC32 # CASE2-NEXT: - Offset: 0x4 # 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 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: 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 Symbols: - Name: foo Binding: STB_GLOBAL DynamicSymbols: - Name: foo Binding: STB_GLOBAL