[scudo] Overhaul hardware CRC32 feature detection
authorKostya Kortchinsky <kostyak@google.com>
Wed, 22 Nov 2017 18:30:44 +0000 (18:30 +0000)
committerKostya Kortchinsky <kostyak@google.com>
Wed, 22 Nov 2017 18:30:44 +0000 (18:30 +0000)
commit0207b6fbbfc1922e5acf51110a604ebb36fe48b6
treecf97106d7cfa13c721503a3867307bf7b90d2eec
parent048ac83973f08e19ec8fc5a8597ad3d283b6e7ad
[scudo] Overhaul hardware CRC32 feature detection

Summary:
This patch aims at condensing the hardware CRC32 feature detection and making
it slightly more effective on Android.

The following changes are included:
- remove the `CPUFeature` enum, and get rid of one level of nesting of
  functions: we only used CRC32, so we just implement and use
  `hasHardwareCRC32`;
- allow for a weak `getauxval`: the Android toolchain is compiled at API level
  14 for Android ARM, meaning no `getauxval` at compile time, yet we will run
  on API level 27+ devices. The `/proc/self/auxv` fallback can work but is
  worthless for a process like `init` where the proc filesystem doesn't exist
  yet. If a weak `getauxval` doesn't exist, then fallback.
- couple of extra corrections.

Reviewers: alekseyshl

Reviewed By: alekseyshl

Subscribers: kubamracek, aemerson, srhines, kristof.beyls, llvm-commits

Differential Revision: https://reviews.llvm.org/D40322

llvm-svn: 318859
compiler-rt/lib/sanitizer_common/sanitizer_getauxval.h
compiler-rt/lib/scudo/scudo_allocator.cpp
compiler-rt/lib/scudo/scudo_utils.cpp
compiler-rt/lib/scudo/scudo_utils.h