You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
4.1 KiB
108 lines
4.1 KiB
## 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'
|