## This test checks updating a dependent shared library install name in a MachO binary. # RUN: yaml2obj %s -o %t ## Specifying -change once: # RUN: cp %t %t.copy # RUN: llvm-install-name-tool -change /usr/dylib/LOAD /usr/long/long/dylib/LOAD %t.copy # RUN: llvm-objdump -p %t.copy | FileCheck %s --check-prefix=CHANGE --implicit-check-not='name /usr' # CHANGE: name /usr/long/long/dylib/LOAD # CHANGE: name /usr/dylib/WEAK ## Specifying -change multiple times: # RUN: cp %t %t.copy # RUN: llvm-install-name-tool -change /usr/dylib/WEAK /usr/sh/WEAK \ # RUN: -change /usr/dylib/LOAD /usr/sh/LOAD %t.copy # RUN: llvm-objdump -p %t.copy | FileCheck %s --check-prefix=CHANGE-MULTIPLE --implicit-check-not='name /usr' # CHANGE-MULTIPLE: name /usr/sh/LOAD # CHANGE-MULTIPLE: name /usr/sh/WEAK ## Changing same dependent library name multiple times: # RUN: cp %t %t.copy # RUN: llvm-install-name-tool -change /usr/dylib/LOAD /usr/LOAD \ # RUN: -change /usr/dylib/LOAD /usr/XXXX %t.copy # RUN: llvm-objdump -p %t.copy | FileCheck %s --check-prefix=CHANGE-REPEAT --implicit-check-not='name /usr' # CHANGE-REPEAT: name /usr/LOAD # CHANGE-REPEAT: name /usr/dylib/WEAK ## Specifying dependent library names in a chain: # RUN: cp %t %t.copy # RUN: llvm-install-name-tool -change /usr/dylib/LOAD /usr/XX/LOAD \ # RUN: -change /usr/XX/LOAD /usr/YY/LOAD %t.copy # RUN: llvm-objdump -p %t.copy | FileCheck %s --check-prefix=CHANGE-CHAIN --implicit-check-not='name /usr' # CHANGE-CHAIN: name /usr/XX/LOAD # CHANGE-CHAIN: name /usr/dylib/WEAK ## Changing multiple dependent library names where one exists and the other doesn't: # RUN: cp %t %t.copy # RUN: llvm-install-name-tool -change /usr/dylib/LOAD /usr/JOJO/LOAD \ # RUN: -change /usr/BIZARRE /usr/KOKO/LOAD %t.copy # RUN: llvm-objdump -p %t.copy | FileCheck %s --check-prefix=CHANGE-SWITCH --implicit-check-not='name /usr' # CHANGE-SWITCH: name /usr/JOJO/LOAD # CHANGE-SWITCH: name /usr/dylib/WEAK ## Changing to a common dependent library name: # RUN: cp %t %t.copy # RUN: llvm-install-name-tool -change /usr/dylib/LOAD /usr/COMMON \ # RUN: -change /usr/dylib/WEAK /usr/COMMON %t.copy # RUN: llvm-objdump -p %t.copy | FileCheck %s --check-prefix=CHANGE-COMMON --implicit-check-not='name /usr' # CHANGE-COMMON: name /usr/COMMON # CHANGE-COMMON: name /usr/COMMON ## Change all common dependent library names at once: # RUN: llvm-install-name-tool -change /usr/COMMON /usr/ONCE %t.copy # RUN: llvm-objdump -p %t.copy | FileCheck %s --check-prefix=CHANGE-ONCE --implicit-check-not='name /usr' # CHANGE-ONCE: name /usr/ONCE # CHANGE-ONCE: name /usr/ONCE ## Check that -change option has no effect if the binary doesn't contain old install name: # RUN: cp %t %t1 # RUN: llvm-install-name-tool -change /usr/JOJO/LOAD /usr/XX/LOAD \ # RUN: -change /usr/KOKO/WEAK /usr/YY/WEAK %t # RUN: cmp %t %t1 ## Missing a -change argument: # RUN: not llvm-install-name-tool %t -change /usr/ONCE 2>&1 | \ # RUN: FileCheck %s --check-prefix=MISSING ## Missing both -change arguments: # RUN: not llvm-install-name-tool %t -change 2>&1 | \ # RUN: FileCheck %s --check-prefix=MISSING # MISSING: missing argument to -change option --- !mach-o FileHeader: magic: 0xFEEDFACF cputype: 0x01000007 cpusubtype: 0x00000003 filetype: 0x00000001 ncmds: 2 sizeofcmds: 80 flags: 0x00002000 reserved: 0x00000000 LoadCommands: - cmd: LC_LOAD_DYLIB cmdsize: 40 dylib: name: 24 timestamp: 2 current_version: 82115073 compatibility_version: 65536 PayloadString: '/usr/dylib/LOAD' - cmd: LC_LOAD_WEAK_DYLIB cmdsize: 40 dylib: name: 24 timestamp: 2 current_version: 82115073 compatibility_version: 65536 PayloadString: '/usr/dylib/WEAK'