[compiler-rt] 1e6d135 - [scudo] Untag pointer in iterateOverChunks
Vitaly Buka via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 4 12:45:13 PDT 2021
Author: Vitaly Buka
Date: 2021-06-04T12:45:07-07:00
New Revision: 1e6d135325357d8c32fd0b0d7f668cad91d478bc
URL: https://github.com/llvm/llvm-project/commit/1e6d135325357d8c32fd0b0d7f668cad91d478bc
DIFF: https://github.com/llvm/llvm-project/commit/1e6d135325357d8c32fd0b0d7f668cad91d478bc.diff
LOG: [scudo] Untag pointer in iterateOverChunks
Pointer comparison in Lambda will not work on tagged pointers.
Reviewed By: pcc
Differential Revision: https://reviews.llvm.org/D103496
Added:
Modified:
compiler-rt/lib/scudo/standalone/combined.h
compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp
Removed:
################################################################################
diff --git a/compiler-rt/lib/scudo/standalone/combined.h b/compiler-rt/lib/scudo/standalone/combined.h
index f58eaa945af3..079edab1875b 100644
--- a/compiler-rt/lib/scudo/standalone/combined.h
+++ b/compiler-rt/lib/scudo/standalone/combined.h
@@ -727,6 +727,8 @@ class Allocator {
void iterateOverChunks(uptr Base, uptr Size, iterate_callback Callback,
void *Arg) {
initThreadMaybe();
+ if (archSupportsMemoryTagging())
+ Base = untagPointer(Base);
const uptr From = Base;
const uptr To = Base + Size;
bool MayHaveTaggedPrimary = allocatorSupportsMemoryTagging<Params>() &&
diff --git a/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp b/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp
index eed8f0319337..62410fc393ae 100644
--- a/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp
+++ b/compiler-rt/lib/scudo/standalone/tests/wrappers_c_test.cpp
@@ -6,6 +6,7 @@
//
//===----------------------------------------------------------------------===//
+#include "memtag.h"
#include "scudo/interface.h"
#include "tests/scudo_unit_test.h"
@@ -277,6 +278,10 @@ static uintptr_t BoundaryP;
static size_t Count;
static void callback(uintptr_t Base, size_t Size, void *Arg) {
+ if (scudo::archSupportsMemoryTagging()) {
+ Base = scudo::untagPointer(Base);
+ BoundaryP = scudo::untagPointer(BoundaryP);
+ }
if (Base == BoundaryP)
Count++;
}
More information about the llvm-commits
mailing list