[lld] [lld-macho,BalancedPartition] Simplify relocation hash and avoid xxHash (PR #121729)
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 6 20:57:48 PST 2025
================
@@ -90,23 +93,24 @@ class BPSectionMacho : public BPSectionBase {
§ionToIdx) const override {
constexpr unsigned windowSize = 4;
- // Calculate content hashes
- size_t dataSize = isec->data.size();
- for (size_t i = 0; i < dataSize; i++) {
- auto window = isec->data.drop_front(i).take_front(windowSize);
- hashes.push_back(xxHash64(window));
- }
+ // Calculate content hashes: k-mers and the last k-1 bytes.
+ ArrayRef<uint8_t> data = isec->data;
+ if (data.size() >= windowSize)
+ for (size_t i = 0; i <= data.size() - windowSize; ++i)
+ hashes.push_back(llvm::support::endian::read32le(data.data() + i));
----------------
MaskRay wrote:
I agree that this is weird. `xxh3_64bits(window)` for relocation hashing is just because it's easy: no need to handle the shorter-than-4-bytes case.
Hmmm. `Reloc::length` is actually a logarithm field. For Mach-O arm64, the relocation offsets are aligned to start of the instruction. Shall we compute one single hash for a relocation? I guess the sliding window doesn't help.
https://github.com/llvm/llvm-project/pull/121729
More information about the llvm-commits
mailing list