143 lines · plain
1## This test checks updating a LC_RPATH load command in a MachO binary.2 3# RUN: yaml2obj %s -o %t4 5## Updating a single RPath entry:6# RUN: llvm-install-name-tool -rpath @executable_a/. @executable_A/. %t7# RUN: llvm-objdump -p %t | \8# RUN: FileCheck %s --check-prefix=RPATHS --implicit-check-not=@executable9 10# RPATHS: @executable_A/.11# RPATHS: @executable_short_test12# RPATHS: @executable_long_test/.13# RPATHS: @executable_d/.14 15## Updating multiple RPath entries:16# RUN: llvm-install-name-tool -rpath @executable_short_test/. @executable_test/. \17# RUN: -rpath @executable_long_test/. @executable_long_long_test/. %t18# RUN: llvm-objdump -p %t | \19# RUN: FileCheck %s --check-prefix=RPATHS-MULTIPLE --implicit-check-not=@executable20 21# RPATHS-MULTIPLE: @executable_A/.22# RPATHS-MULTIPLE: @executable_test/.23# RPATHS-MULTIPLE: @executable_long_long_test/.24# RPATHS-MULTIPLE: @executable_d/.25 26## Check that cmdsize accounts for NULL terminator:27# RUN: llvm-install-name-tool -rpath @executable_A/. ABCD %t28# RUN: llvm-objdump -p %t | FileCheck %s --check-prefix=RPATH-SIZE29 30# RPATH-SIZE: cmd LC_RPATH31# RPATH-SIZE-NEXT: cmdsize 2432# RPATH-SIZE-NEXT: path ABCD33 34## Updating and adding different RPaths:35# RUN: llvm-install-name-tool -rpath @executable_d/. @executable_D/. \36# RUN: -add_rpath @executable_e/. %t37# RUN: llvm-objdump -p %t | FileCheck %s --check-prefix=RPATHS-ADD --implicit-check-not=@executable38 39# RPATHS-ADD: ABCD40# RPATHS-ADD: @executable_test/.41# RPATHS-ADD: @executable_long_long_test/.42# RPATHS-ADD: @executable_D/.43# RPATHS-ADD: @executable_e/.44 45## Updating and deleting different RPaths:46# RUN: llvm-install-name-tool -rpath @executable_D/. @executable_d/. \47# RUN: -delete_rpath @executable_e/. %t48# RUN: llvm-objdump -p %t | FileCheck %s --check-prefix=RPATHS-DELETE --implicit-check-not=@executable49 50# RPATHS-DELETE: ABCD51# RPATHS-DELETE: @executable_test/.52# RPATHS-DELETE: @executable_long_long_test/.53# RPATHS-DELETE: @executable_d/.54 55# RUN: cp %t %t156 57## Updating multiple RPath entries where one exists and the other doesn't:58# RUN: not llvm-install-name-tool -rpath @executable_test/. @executable/. \59# RUN: -rpath @executable_long_test/. @executable_long_longest/. %t 2>&1 | \60# RUN: FileCheck %s --check-prefix=RPATHS-FAIL61# RUN: cmp %t %t162 63# RPATHS-FAIL: no LC_RPATH load command with path: @executable_long_test/.64 65## Updating a nonexistent RPath:66# RUN: not llvm-install-name-tool -rpath @executable_a/. @executable_AA/. %t 2>&1 | \67# RUN: FileCheck %s --check-prefix=ABSENT-RPATH68# RUN: cmp %t %t169 70# ABSENT-RPATH: no LC_RPATH load command with path: @executable_a/.71 72## Updating to an existing RPath:73# RUN: not llvm-install-name-tool -rpath @executable_d/. ABCD %t 2>&1 | \74# RUN: FileCheck %s --check-prefix=EXISTING75# RUN: cmp %t %t176 77# EXISTING: rpath 'ABCD' would create a duplicate load command78 79## Duplicate RPath entries:80# RUN: not llvm-install-name-tool -rpath DDD1/. @exec_d/. \81# RUN: -rpath @exec_d/. DDD2/. %t 2>&1 | \82# RUN: FileCheck %s --check-prefix=DUPLICATE83# RUN: cmp %t %t184 85# DUPLICATE: cannot specify both -rpath 'DDD1/.' '@exec_d/.' and -rpath '@exec_d/.' 'DDD2/.'86 87## Updating and deleting RPath at the same time:88# RUN: not llvm-install-name-tool -rpath @executable_d/. DD/. \89# RUN: -delete_rpath @executable_d/. %t 2>&1 | \90# RUN: FileCheck %s --check-prefix=COMBINED-DELETE91# RUN: cmp %t %t192 93# COMBINED-DELETE: cannot specify both -delete_rpath '@executable_d/.' and -rpath '@executable_d/.' 'DD/.'94 95## Updating and adding RPath at the same time:96# RUN: not llvm-install-name-tool -rpath @executable_e/. EE/. \97# RUN: -add_rpath @executable_e/. %t 2>&1 | \98# RUN: FileCheck %s --check-prefix=COMBINED-ADD99# RUN: cmp %t %t1100 101# COMBINED-ADD: cannot specify both -add_rpath '@executable_e/.' and -rpath '@executable_e/.' 'EE/.'102 103## Missing an RPath argument:104# RUN: not llvm-install-name-tool %t -rpath @executable_e/. 2>&1 | \105# RUN: FileCheck %s --check-prefix=MISSING106# RUN: cmp %t %t1107 108## Missing both RPath arguments:109# RUN: not llvm-install-name-tool %t -rpath 2>&1 | \110# RUN: FileCheck %s --check-prefix=MISSING111# RUN: cmp %t %t1112 113# MISSING: missing argument to -rpath option114 115 116--- !mach-o117FileHeader:118 magic: 0xFEEDFACF119 cputype: 0x01000007120 cpusubtype: 0x00000003121 filetype: 0x00000001122 ncmds: 4123 sizeofcmds: 144124 flags: 0x00002000125 reserved: 0x00000000126LoadCommands:127 - cmd: LC_RPATH128 cmdsize: 32129 path: 12130 Content: '@executable_a/.'131 - cmd: LC_RPATH132 cmdsize: 40133 path: 12134 Content: '@executable_short_test/.'135 - cmd: LC_RPATH136 cmdsize: 40137 path: 12138 Content: '@executable_long_test/.'139 - cmd: LC_RPATH140 cmdsize: 32141 path: 12142 Content: '@executable_d/.'143