Skip to content

Commit

Permalink
[llvm-objcopy][MachO] Fix cmdsize of LC_RPATH
Browse files Browse the repository at this point in the history
Fix the calculation of the field cmdsize (in the function buildRPathLoadCommand)
to account for the null byte terminator.

Patch by Sameer Arora!

Test plan: make check-all

Differential revision: https://reviews.llvm.org/D81575
  • Loading branch information
Alexander Shaposhnikov committed Jun 12, 2020
1 parent 526e0c8 commit c966ed8
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 1 deletion.
Expand Up @@ -21,3 +21,12 @@
# RUN: | FileCheck --check-prefix=NO-INPUT %s

# NO-INPUT: no input file specified

## Check that cmdsize accounts for NULL terminator.
# RUN: yaml2obj %p/Inputs/x86_64.yaml -o %t.x86_64
# RUN: llvm-install-name-tool -add_rpath abcd %t.x86_64
# RUN: llvm-objdump -p %t.x86_64 | FileCheck %s --check-prefix=RPATH-SIZE

# RPATH-SIZE: cmd LC_RPATH
# RPATH-SIZE-NEXT: cmdsize 24
# RPATH-SIZE-NEXT: path abcd
2 changes: 1 addition & 1 deletion llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
Expand Up @@ -87,7 +87,7 @@ static LoadCommand buildRPathLoadCommand(StringRef Path) {
MachO::rpath_command RPathLC;
RPathLC.cmd = MachO::LC_RPATH;
RPathLC.path = sizeof(MachO::rpath_command);
RPathLC.cmdsize = alignTo(sizeof(MachO::rpath_command) + Path.size(), 8);
RPathLC.cmdsize = alignTo(sizeof(MachO::rpath_command) + Path.size() + 1, 8);
LC.MachOLoadCommand.rpath_command_data = RPathLC;
LC.Payload.assign(RPathLC.cmdsize - sizeof(MachO::rpath_command), 0);
std::copy(Path.begin(), Path.end(), LC.Payload.begin());
Expand Down

0 comments on commit c966ed8

Please sign in to comment.