[PATCH] D38436: [llvm-objcopy] Fix major layout bugs in llvm-objcopy

Jake Ehrlich via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 29 17:07:54 PDT 2017


jakehehrlich created this revision.

Somehow a few massive errors slipped though the cracks of testing.

1. The code in Segment::finalize was left over from the old layout algorithm. In certain situations this would cause very strange issues with segment layout. For instance in the shift-segments.test case it would cause the second segment to have the same offset as the first.
2. In debugging this I discovered another issue. Namely section alignment was not being computed based on Section->Align but instead Section->Offset which is bizarre and makes no sense. I have no clue how it worked in the first place. This issue is also fixed
3. Fixing #2 exposed a bug where things were not being written past the end of the file that technically should have been. This was because in certain cases (like overlapping-segments)  the end of the file wouldn't always be bumped if the offset could be chosen relative to an existing segment that already had it's offset chosen. For fully nested segments this is fine but for overlapping segments this leaves the end of the file short. So I changed how the offset is bumped when looping though segments.


Repository:
  rL LLVM

https://reviews.llvm.org/D38436

Files:
  test/tools/llvm-objcopy/segment-shift.test
  tools/llvm-objcopy/Object.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D38436.117242.patch
Type: text/x-patch
Size: 3730 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170930/1d180697/attachment.bin>


More information about the llvm-commits mailing list