1d332ec92SAlexander Shaposhnikov## This test checks deleting a LC_RPATH load command from a MachO binary. 2d332ec92SAlexander Shaposhnikov 3d332ec92SAlexander Shaposhnikov# RUN: yaml2obj %s -o %t 4d332ec92SAlexander Shaposhnikov 5d332ec92SAlexander Shaposhnikov## Deleting a single RPath entry: 6d332ec92SAlexander Shaposhnikov# RUN: llvm-install-name-tool -delete_rpath @executable_a/. %t 7d332ec92SAlexander Shaposhnikov# RUN: llvm-objdump -p %t | \ 8d332ec92SAlexander Shaposhnikov# RUN: FileCheck %s --check-prefix=RPATHS --implicit-check-not=@executable 9d332ec92SAlexander Shaposhnikov 10d332ec92SAlexander Shaposhnikov# RPATHS: @executable_b/. 11d332ec92SAlexander Shaposhnikov# RPATHS: @executable_c/. 12d332ec92SAlexander Shaposhnikov# RPATHS: @executable_d/. 13d332ec92SAlexander Shaposhnikov# RPATHS: @executable_e/. 14d332ec92SAlexander Shaposhnikov 15d332ec92SAlexander Shaposhnikov## Deleting multiple RPath entries: 16d332ec92SAlexander Shaposhnikov# RUN: llvm-install-name-tool -delete_rpath @executable_b/. \ 17d332ec92SAlexander Shaposhnikov# RUN: -delete_rpath @executable_c/. %t 18d332ec92SAlexander Shaposhnikov# RUN: llvm-objdump -p %t | \ 19d332ec92SAlexander Shaposhnikov# RUN: FileCheck %s --check-prefix=RPATHS-MULTIPLE --implicit-check-not=@executable 20d332ec92SAlexander Shaposhnikov 21d332ec92SAlexander Shaposhnikov# RPATHS-MULTIPLE: @executable_d/. 22d332ec92SAlexander Shaposhnikov# RPATHS-MULTIPLE: @executable_e/. 23d332ec92SAlexander Shaposhnikov 24d332ec92SAlexander Shaposhnikov## Duplicate delete_rpath commands: 25d332ec92SAlexander Shaposhnikov# RUN: llvm-install-name-tool -delete_rpath @executable_d/. \ 26d332ec92SAlexander Shaposhnikov# RUN: -delete_rpath @executable_d/. %t 27d332ec92SAlexander Shaposhnikov# RUN: llvm-objdump -p %t | \ 28d332ec92SAlexander Shaposhnikov# RUN: FileCheck %s --check-prefix=DUPLICATE --implicit-check-not=@executable 29d332ec92SAlexander Shaposhnikov 30d332ec92SAlexander Shaposhnikov# DUPLICATE: @executable_e/. 31d332ec92SAlexander Shaposhnikov 32d332ec92SAlexander Shaposhnikov## Deleting a nonexistent RPath: 33d332ec92SAlexander Shaposhnikov# RUN: not llvm-install-name-tool -delete_rpath @executable_a/. %t 2>&1 | \ 34d332ec92SAlexander Shaposhnikov# RUN: FileCheck %s --check-prefix=ABSENT-RPATH 35d332ec92SAlexander Shaposhnikov 36d332ec92SAlexander Shaposhnikov# ABSENT-RPATH: no LC_RPATH load command with path: @executable_a/. 37d332ec92SAlexander Shaposhnikov 38d332ec92SAlexander Shaposhnikov## Adding and deleting RPATH at the same time: 39d332ec92SAlexander Shaposhnikov# RUN: not llvm-install-name-tool -add_rpath @executable_b/. \ 40d332ec92SAlexander Shaposhnikov# RUN: -delete_rpath @executable_b/. %t 2>&1 | \ 41d332ec92SAlexander Shaposhnikov# RUN: FileCheck %s --check-prefix=COMBINED 42d332ec92SAlexander Shaposhnikov 4351f8d464SKeith Smiley# COMBINED: cannot specify both -add_rpath '@executable_b/.' and -delete_rpath '@executable_b/.' 44d332ec92SAlexander Shaposhnikov 4561133e0bSTobias Hieta## Remove all RPATHS 4661133e0bSTobias Hieta# RUN: yaml2obj %s -o %t2 4761133e0bSTobias Hieta# RUN: llvm-install-name-tool -delete_all_rpaths %t2 4861133e0bSTobias Hieta# RUN: llvm-objdump -p %t2 | FileCheck %s 4961133e0bSTobias Hieta 5061133e0bSTobias Hieta# CHECK-NOT: LC_RPATH 5161133e0bSTobias Hieta 5261133e0bSTobias Hieta## Remove all RPATHS and add a new one. 5361133e0bSTobias Hieta# RUN: yaml2obj %s -o %t3 5461133e0bSTobias Hieta# RUN: llvm-install-name-tool --delete_all_rpaths -add_rpath @executable_b/. %t3 5561133e0bSTobias Hieta# RUN: llvm-objdump -p %t3 | \ 5661133e0bSTobias Hieta# RUN: FileCheck %s --check-prefix=DELETE_AND_ADD --implicit-check-not=@executable 5761133e0bSTobias Hieta 5861133e0bSTobias Hieta# DELETE_AND_ADD: @executable_b/. 5961133e0bSTobias Hieta 60d332ec92SAlexander Shaposhnikov--- !mach-o 61d332ec92SAlexander ShaposhnikovFileHeader: 62d332ec92SAlexander Shaposhnikov magic: 0xFEEDFACF 63d332ec92SAlexander Shaposhnikov cputype: 0x01000007 64d332ec92SAlexander Shaposhnikov cpusubtype: 0x00000003 65d332ec92SAlexander Shaposhnikov filetype: 0x00000001 66d332ec92SAlexander Shaposhnikov ncmds: 5 67d332ec92SAlexander Shaposhnikov sizeofcmds: 160 68d332ec92SAlexander Shaposhnikov flags: 0x00002000 69d332ec92SAlexander Shaposhnikov reserved: 0x00000000 70d332ec92SAlexander ShaposhnikovLoadCommands: 71d332ec92SAlexander Shaposhnikov - cmd: LC_RPATH 72d332ec92SAlexander Shaposhnikov cmdsize: 32 73d332ec92SAlexander Shaposhnikov path: 12 74*c0da287cSFangrui Song Content: '@executable_a/.' 75d332ec92SAlexander Shaposhnikov - cmd: LC_RPATH 76d332ec92SAlexander Shaposhnikov cmdsize: 32 77d332ec92SAlexander Shaposhnikov path: 12 78*c0da287cSFangrui Song Content: '@executable_b/.' 79d332ec92SAlexander Shaposhnikov - cmd: LC_RPATH 80d332ec92SAlexander Shaposhnikov cmdsize: 32 81d332ec92SAlexander Shaposhnikov path: 12 82*c0da287cSFangrui Song Content: '@executable_c/.' 83d332ec92SAlexander Shaposhnikov - cmd: LC_RPATH 84d332ec92SAlexander Shaposhnikov cmdsize: 32 85d332ec92SAlexander Shaposhnikov path: 12 86*c0da287cSFangrui Song Content: '@executable_d/.' 87d332ec92SAlexander Shaposhnikov - cmd: LC_RPATH 88d332ec92SAlexander Shaposhnikov cmdsize: 32 89d332ec92SAlexander Shaposhnikov path: 12 90*c0da287cSFangrui Song Content: '@executable_e/.' 91