108 lines · plain
1## This test checks updating a dependent shared library install name in a MachO binary.2 3# RUN: yaml2obj %s -o %t4 5## Specifying -change once:6# RUN: cp %t %t.copy7# RUN: llvm-install-name-tool -change /usr/dylib/LOAD /usr/long/long/dylib/LOAD %t.copy8# RUN: llvm-objdump -p %t.copy | FileCheck %s --check-prefix=CHANGE --implicit-check-not='name /usr'9 10# CHANGE: name /usr/long/long/dylib/LOAD11# CHANGE: name /usr/dylib/WEAK12 13## Specifying -change multiple times:14# RUN: cp %t %t.copy15# RUN: llvm-install-name-tool -change /usr/dylib/WEAK /usr/sh/WEAK \16# RUN: -change /usr/dylib/LOAD /usr/sh/LOAD %t.copy17# RUN: llvm-objdump -p %t.copy | FileCheck %s --check-prefix=CHANGE-MULTIPLE --implicit-check-not='name /usr'18 19# CHANGE-MULTIPLE: name /usr/sh/LOAD20# CHANGE-MULTIPLE: name /usr/sh/WEAK21 22## Changing same dependent library name multiple times:23# RUN: cp %t %t.copy24# RUN: llvm-install-name-tool -change /usr/dylib/LOAD /usr/LOAD \25# RUN: -change /usr/dylib/LOAD /usr/XXXX %t.copy26# RUN: llvm-objdump -p %t.copy | FileCheck %s --check-prefix=CHANGE-REPEAT --implicit-check-not='name /usr'27 28# CHANGE-REPEAT: name /usr/LOAD29# CHANGE-REPEAT: name /usr/dylib/WEAK30 31## Specifying dependent library names in a chain:32# RUN: cp %t %t.copy33# RUN: llvm-install-name-tool -change /usr/dylib/LOAD /usr/XX/LOAD \34# RUN: -change /usr/XX/LOAD /usr/YY/LOAD %t.copy35# RUN: llvm-objdump -p %t.copy | FileCheck %s --check-prefix=CHANGE-CHAIN --implicit-check-not='name /usr'36 37# CHANGE-CHAIN: name /usr/XX/LOAD38# CHANGE-CHAIN: name /usr/dylib/WEAK39 40## Changing multiple dependent library names where one exists and the other doesn't:41# RUN: cp %t %t.copy42# RUN: llvm-install-name-tool -change /usr/dylib/LOAD /usr/JOJO/LOAD \43# RUN: -change /usr/BIZARRE /usr/KOKO/LOAD %t.copy44# RUN: llvm-objdump -p %t.copy | FileCheck %s --check-prefix=CHANGE-SWITCH --implicit-check-not='name /usr'45 46# CHANGE-SWITCH: name /usr/JOJO/LOAD47# CHANGE-SWITCH: name /usr/dylib/WEAK48 49## Changing to a common dependent library name:50# RUN: cp %t %t.copy51# RUN: llvm-install-name-tool -change /usr/dylib/LOAD /usr/COMMON \52# RUN: -change /usr/dylib/WEAK /usr/COMMON %t.copy53# RUN: llvm-objdump -p %t.copy | FileCheck %s --check-prefix=CHANGE-COMMON --implicit-check-not='name /usr'54 55# CHANGE-COMMON: name /usr/COMMON56# CHANGE-COMMON: name /usr/COMMON57 58## Change all common dependent library names at once:59# RUN: llvm-install-name-tool -change /usr/COMMON /usr/ONCE %t.copy60# RUN: llvm-objdump -p %t.copy | FileCheck %s --check-prefix=CHANGE-ONCE --implicit-check-not='name /usr'61 62# CHANGE-ONCE: name /usr/ONCE63# CHANGE-ONCE: name /usr/ONCE64 65## Check that -change option has no effect if the binary doesn't contain old install name:66# RUN: cp %t %t167# RUN: llvm-install-name-tool -change /usr/JOJO/LOAD /usr/XX/LOAD \68# RUN: -change /usr/KOKO/WEAK /usr/YY/WEAK %t69# RUN: cmp %t %t170 71## Missing a -change argument:72# RUN: not llvm-install-name-tool %t -change /usr/ONCE 2>&1 | \73# RUN: FileCheck %s --check-prefix=MISSING74 75## Missing both -change arguments:76# RUN: not llvm-install-name-tool %t -change 2>&1 | \77# RUN: FileCheck %s --check-prefix=MISSING78 79# MISSING: missing argument to -change option80 81--- !mach-o82FileHeader:83 magic: 0xFEEDFACF84 cputype: 0x0100000785 cpusubtype: 0x0000000386 filetype: 0x0000000187 ncmds: 288 sizeofcmds: 8089 flags: 0x0000200090 reserved: 0x0000000091LoadCommands:92 - cmd: LC_LOAD_DYLIB93 cmdsize: 4094 dylib:95 name: 2496 timestamp: 297 current_version: 8211507398 compatibility_version: 6553699 Content: '/usr/dylib/LOAD'100 - cmd: LC_LOAD_WEAK_DYLIB101 cmdsize: 40102 dylib:103 name: 24104 timestamp: 2105 current_version: 82115073106 compatibility_version: 65536107 Content: '/usr/dylib/WEAK'108