| # RUN: yaml2obj %s -o %t | 
 | # RUN: llvm-objcopy --redefine-sym foo=oof --redefine-sym =wasempty --redefine-sym empty= %t %t2 | 
 | # RUN: llvm-readobj --symbols %t2 | FileCheck %s | 
 | # RUN: echo "  bar   rab #rename bar  " > %t.rename1.txt | 
 | # RUN: echo "foo oof #rename foo  " > %t.rename2.txt | 
 | # RUN: echo "  empty   ytpme #rename empty  " >> %t.rename2.txt | 
 | # RUN: llvm-objcopy --redefine-syms %t.rename1.txt --redefine-syms %t.rename2.txt %t %t4 | 
 | # RUN: llvm-readobj --symbols %t4 | FileCheck %s --check-prefix=MULTIPLE-FILES | 
 |  | 
 | !ELF | 
 | FileHeader: | 
 |   Class:           ELFCLASS64 | 
 |   Data:            ELFDATA2LSB | 
 |   Type:            ET_EXEC | 
 |   Machine:         EM_X86_64 | 
 | Sections: | 
 |   - Name:            .text | 
 |     Type:            SHT_PROGBITS | 
 |     Flags:           [ SHF_ALLOC, SHF_EXECINSTR ] | 
 |     Address:         0x1000 | 
 |     AddressAlign:    0x0000000000000010 | 
 |     Content:         "0000000000000000" | 
 |   - Name:            .data | 
 |     Type:            SHT_PROGBITS | 
 |     Flags:           [ SHF_ALLOC ] | 
 |     Address:         0x2000 | 
 |     AddressAlign:    0x0000000000000010 | 
 |     Content:         "0000000000000000" | 
 | Symbols: | 
 |   - Name:     foo | 
 |     Type:     STT_FUNC | 
 |     Section:  .text | 
 |     Value:    0x1004 | 
 |     Binding:  STB_GLOBAL | 
 |   - Name:     bar | 
 |     Type:     STT_OBJECT | 
 |     Section:  .data | 
 |     Value:    0x2000 | 
 |     Size:     4 | 
 |     Binding:  STB_GLOBAL | 
 |   - Name:     empty | 
 |     Type:     STT_FUNC | 
 |     Section:  .text | 
 |     Value:    0x1008 | 
 |     Binding:  STB_GLOBAL | 
 |   - Type:     STT_OBJECT | 
 |     Section:  .data | 
 |     Value:    0x2008 | 
 |     Binding:  STB_GLOBAL | 
 |  | 
 | #CHECK: Symbols [ | 
 | #CHECK-NEXT:  Symbol { | 
 | #CHECK-NEXT:    Name: | 
 | #CHECK-NEXT:    Value: 0x0 | 
 | #CHECK-NEXT:    Size: 0 | 
 | #CHECK-NEXT:    Binding: Local | 
 | #CHECK-NEXT:    Type: None | 
 | #CHECK-NEXT:    Other: 0 | 
 | #CHECK-NEXT:    Section: Undefined | 
 | #CHECK-NEXT:  } | 
 | #CHECK-NEXT:  Symbol { | 
 | #CHECK-NEXT:    Name: oof | 
 | #CHECK-NEXT:    Value: 0x1004 | 
 | #CHECK-NEXT:    Size: 0 | 
 | #CHECK-NEXT:    Binding: Global | 
 | #CHECK-NEXT:    Type: Function | 
 | #CHECK-NEXT:    Other: 0 | 
 | #CHECK-NEXT:    Section: .text | 
 | #CHECK-NEXT:  } | 
 | #CHECK-NEXT:  Symbol { | 
 | #CHECK-NEXT:    Name: bar | 
 | #CHECK-NEXT:    Value: 0x2000 | 
 | #CHECK-NEXT:    Size: 4 | 
 | #CHECK-NEXT:    Binding: Global | 
 | #CHECK-NEXT:    Type: Object | 
 | #CHECK-NEXT:    Other: 0 | 
 | #CHECK-NEXT:    Section: .data | 
 | #CHECK-NEXT:  } | 
 | #CHECK-NEXT:  Symbol { | 
 | #CHECK-NEXT:    Name: (0) | 
 | #CHECK-NEXT:    Value: 0x1008 | 
 | #CHECK-NEXT:    Size: 0 | 
 | #CHECK-NEXT:    Binding: Global | 
 | #CHECK-NEXT:    Type: Function | 
 | #CHECK-NEXT:    Other: 0 | 
 | #CHECK-NEXT:    Section: .text | 
 | #CHECK-NEXT:  } | 
 | #CHECK-NEXT:  Symbol { | 
 | #CHECK-NEXT:    Name: wasempty | 
 | #CHECK-NEXT:    Value: 0x2008 | 
 | #CHECK-NEXT:    Size: 0 | 
 | #CHECK-NEXT:    Binding: Global | 
 | #CHECK-NEXT:    Type: Object | 
 | #CHECK-NEXT:    Other: 0 | 
 | #CHECK-NEXT:    Section: .data | 
 | #CHECK-NEXT:  } | 
 |  | 
 | #MULTIPLE-FILES:        Name: oof | 
 | #MULTIPLE-FILES-NEXT:   Value: 0x1004 | 
 | #MULTIPLE-FILES:        Name: rab | 
 | #MULTIPLE-FILES-NEXT:   Value: 0x2000 | 
 | #MULTIPLE-FILES:        Name: ytpme | 
 | #MULTIPLE-FILES-NEXT:   Value: 0x1008 | 
 |  | 
 | ## Show that it is not an error if a specified symbol is not present. | 
 | # RUN: llvm-objcopy %t2 %t5 --redefine-sym missing=blah | 
 | # RUN: cmp %t2 %t5 | 
 |  | 
 | ## Show that --redefine-sym doesn't chain together. | 
 | # RUN: llvm-objcopy %t2 %t6 --redefine-sym oof=bob --redefine-sym bob=baz | 
 | # RUN: llvm-readobj %t6 --syms | FileCheck %s --check-prefix=CHAIN --implicit-check-not="Name: baz" | 
 |  | 
 | # CHAIN: Name: bob |