xref: /llvm-project/llvm/test/tools/llvm-objcopy/MachO/install-name-tool-prepend-rpath.test (revision 51f8d46491c7efd4e2054b036c13ef6266fceab3)
177cbf259SKeith Smiley## This test checks prepending a new LC_RPATH load command to a MachO binary.
277cbf259SKeith Smiley
377cbf259SKeith Smiley# RUN: yaml2obj %p/Inputs/i386.yaml -o %t.i386
477cbf259SKeith Smiley# RUN: llvm-install-name-tool -add_rpath @executable_path/. %t.i386
577cbf259SKeith Smiley# RUN: llvm-install-name-tool -prepend_rpath first_rpath %t.i386
677cbf259SKeith Smiley# RUN: llvm-objdump -p %t.i386 | FileCheck --check-prefix=NEW-RPATH %s
777cbf259SKeith Smiley
877cbf259SKeith Smiley# RUN: yaml2obj %p/Inputs/x86_64.yaml -o %t.x86_64
977cbf259SKeith Smiley# RUN: llvm-install-name-tool -add_rpath @executable_path/. %t.x86_64
1077cbf259SKeith Smiley# RUN: llvm-install-name-tool -prepend_rpath first_rpath %t.x86_64
1177cbf259SKeith Smiley# RUN: llvm-objdump -p %t.x86_64 | FileCheck --check-prefix=NEW-RPATH %s
1277cbf259SKeith Smiley
1377cbf259SKeith Smiley# NEW-RPATH:      cmd LC_RPATH
1477cbf259SKeith Smiley# NEW-RPATH-NEXT: cmdsize
1577cbf259SKeith Smiley# NEW-RPATH-NEXT: first_rpath
1677cbf259SKeith Smiley
1777cbf259SKeith Smiley# NEW-RPATH:      cmd LC_RPATH
1877cbf259SKeith Smiley# NEW-RPATH-NEXT: cmdsize
1977cbf259SKeith Smiley# NEW-RPATH-NEXT: @executable_path/.
2077cbf259SKeith Smiley
2177cbf259SKeith Smiley## Prepend with dylib loads:
2277cbf259SKeith Smiley# RUN: yaml2obj %p/Inputs/strip-all.yaml -o %t.dylib
2377cbf259SKeith Smiley# RUN: llvm-install-name-tool -prepend_rpath first_rpath %t.dylib
2477cbf259SKeith Smiley# RUN: llvm-objdump -p %t.dylib | FileCheck --check-prefix=DYLIB %s
2577cbf259SKeith Smiley
2677cbf259SKeith Smiley# DYLIB:      cmd LC_RPATH
2777cbf259SKeith Smiley# DYLIB-NEXT: cmdsize
2877cbf259SKeith Smiley# DYLIB-NEXT: first_rpath
2977cbf259SKeith Smiley
3077cbf259SKeith Smiley# RUN: not llvm-install-name-tool -prepend_rpath first_rpath %t.i386 2>&1 | \
3177cbf259SKeith Smiley# RUN:   FileCheck --check-prefix=DUPLICATE-RPATH %s
3277cbf259SKeith Smiley
33*51f8d464SKeith Smiley# DUPLICATE-RPATH: rpath 'first_rpath' would create a duplicate load command
3477cbf259SKeith Smiley
3577cbf259SKeith Smiley## Prepend same RPATH twice:
3677cbf259SKeith Smiley# RUN: not llvm-install-name-tool -prepend_rpath @executable_X \
3777cbf259SKeith Smiley# RUN:                            -prepend_rpath @executable_X %t.i386 2>&1 | \
3877cbf259SKeith Smiley# RUN:   FileCheck --check-prefix=DOUBLE %s
3977cbf259SKeith Smiley
40*51f8d464SKeith Smiley# DOUBLE: rpath '@executable_X' would create a duplicate load command
4177cbf259SKeith Smiley
4277cbf259SKeith Smiley## Prepend and delete RPATH:
4377cbf259SKeith Smiley# RUN: not llvm-install-name-tool -prepend_rpath foo \
4477cbf259SKeith Smiley# RUN:                            -delete_rpath foo %t.i386 2>&1 | \
4577cbf259SKeith Smiley# RUN:   FileCheck --check-prefix=DELETE %s
4677cbf259SKeith Smiley
47*51f8d464SKeith Smiley# DELETE: cannot specify both -prepend_rpath 'foo' and -delete_rpath 'foo'
4877cbf259SKeith Smiley
4977cbf259SKeith Smiley## Prepend and replace RPATH:
5077cbf259SKeith Smiley# RUN: not llvm-install-name-tool -prepend_rpath foo \
5177cbf259SKeith Smiley# RUN:                            -rpath foo bar %t.i386 2>&1 | \
5277cbf259SKeith Smiley# RUN:   FileCheck --check-prefix=REPLACE %s
5377cbf259SKeith Smiley
54*51f8d464SKeith Smiley# REPLACE: cannot specify both -prepend_rpath 'foo' and -rpath 'foo' 'bar'
5577cbf259SKeith Smiley
5677cbf259SKeith Smiley## Check that cmdsize accounts for NULL terminator:
5777cbf259SKeith Smiley# RUN: yaml2obj %p/Inputs/x86_64.yaml -o %t.x86_64
5877cbf259SKeith Smiley# RUN: llvm-install-name-tool -prepend_rpath abcd %t.x86_64
5977cbf259SKeith Smiley# RUN: llvm-objdump -p %t.x86_64 | FileCheck %s --check-prefix=RPATH-SIZE
6077cbf259SKeith Smiley
6177cbf259SKeith Smiley# RPATH-SIZE:      cmd LC_RPATH
6277cbf259SKeith Smiley# RPATH-SIZE-NEXT: cmdsize 24
6377cbf259SKeith Smiley# RPATH-SIZE-NEXT: path abcd
64