[PATCH] D146620: [BOLT] Don't use section relocations when computing hash for data from other section

Denis Revunov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 22 03:28:33 PDT 2023


treapster created this revision.
treapster added a project: bolt.
Herald added a reviewer: rafauler.
Herald added a subscriber: ayermolo.
Herald added a reviewer: Amir.
Herald added a reviewer: maksfb.
Herald added a project: All.
treapster requested review of this revision.
Herald added subscribers: llvm-commits, yota9.
Herald added a project: LLVM.

When computing symbol hashes in BinarySection::hash, we try to find relocations in the section which reference the passed BinaryData. We do so by doing lower_bound on data begin offset and upper_bound on data end offset. Since offsets are relative to the current section, if it is a data from the previous section, we get underflow when computing offset and lower_bound returns Relocations.end(). If this data also ends where current section begins, upper_bound on zero offset will return some valid iterator if we have any relocations after the first byte. Then we'll try to iterate from lower_bound to upper_bound, since they're not equal, which in that case means we'll dereference Relocations.end(), increment it, and try to do so until we reach the second valid iterator. Of course we reach segfault earlier. In this patch we stop BOLT from searching relocations for symbols outside of the current section.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D146620

Files:
  bolt/lib/Core/BinarySection.cpp
  bolt/test/AArch64/Inputs/symbol-hashes.yaml
  bolt/test/AArch64/symbol-hashes.test

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D146620.507298.patch
Type: text/x-patch
Size: 4087 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230322/a2ba1b45/attachment.bin>


More information about the llvm-commits mailing list