================
@@ -205,6 +231,26 @@ class TypeHashMode : public ModeBase {
   }
 };
 
+/// Implementation for TokenMode::TypeHashPointerSplit.
+class TypeHashPointerSplitMode : public TypeHashMode {
+public:
+  using TypeHashMode::TypeHashMode;
+
+  uint64_t operator()(const CallBase &CB, OptimizationRemarkEmitter &ORE) {
+    if (MaxTokens == 1)
+      return 0;
+    const uint64_t HalfTokens =
+        (MaxTokens ? MaxTokens : std::numeric_limits<uint64_t>::max()) / 2;
+    const auto [N, H] = getHash(CB, ORE);
+    if (!N)
+      return H;                     // fallback token
----------------
melver wrote:

It goes into the pointer-less bucket by default:
```
--- a/llvm/lib/Transforms/Instrumentation/AllocToken.cpp
+++ b/llvm/lib/Transforms/Instrumentation/AllocToken.cpp
@@ -242,8 +242,12 @@ public:
     const uint64_t HalfTokens =
         (MaxTokens ? MaxTokens : std::numeric_limits<uint64_t>::max()) / 2;
     const auto [N, H] = getHash(CB, ORE);
-    if (!N)
-      return H;                     // fallback token
+    if (!N) {
+      // Pick the fallback token (ClFallbackToken), which by default is 0,
+      // meaning it'll fall into the pointer-less bucket. Override by setting
+      // -alloc-token-fallback if that is the wrong choice.
+      return H;
+    }
```

Advanced users could e.g. set -alloc-token-fallback to some bucket outside the 
range of normal buckets, but I have no intuition if that's a good or bad choice 
if this is used for heap hardening strategies. So I wouldn't want to expose 
this as a standard "frontend option" either.

E.g. we're having discussions if we should pick the pointer-containing bucket 
as the default for fallbacks. The intuition behind that is to "protect 
pointer-containing allocations" from (more likely) buggy plain data/buffer 
allocations, but at the same time we could stick a plain buffer allocation 
(where inference failed) into the fallback which makes the whole point moot. 
Ideally we end up with few/no fallback cases.

https://github.com/llvm/llvm-project/pull/156840
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to