[PATCH] D37597: [ubsan] Function Sanitizer: Don't require writable text segments

Vedant Kumar via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 7 17:03:55 PDT 2017


vsk added a comment.

Thanks for your comments!



================
Comment at: lib/CodeGen/CodeGenFunction.cpp:434
+                                            llvm::Constant *Addr) {
+  if (!CGM.getTriple().isOSDarwin())
+    return Addr;
----------------
pcc wrote:
> I think you can just do this unconditionally. As far as I know, all three object formats should support 32-bit relative relocations on x86 and x86_64, which are the only two architectures which currently support `-fsanitize=function`.
Ok! I'll make this change in the next version of this patch (probably tomorrow).


================
Comment at: lib/CodeGen/CodeGenFunction.cpp:445
+  auto *GV = new llvm::GlobalVariable(CGM.getModule(), Addr->getType(),
+                                      /*isConstant=*/false,
+                                      llvm::GlobalValue::PrivateLinkage, Addr);
----------------
pcc wrote:
> This can be constant I think.
Can the value of the global change if a dynamic library is unloaded? I'm unsure about this case: A.dylib and B.dylib both have linkonce_odr definitions of X, dyld picks the definition from A, and A is unloaded.


================
Comment at: lib/CodeGen/CodeGenFunction.cpp:463
+  auto *PCRelAsInt =
+      Builder.CreatePtrToInt(EncodedAddr, IntPtrTy, "encoded_addr.int");
+  auto *FuncAsInt = Builder.CreatePtrToInt(F, IntPtrTy, "func_addr.int");
----------------
pcc wrote:
> pcc wrote:
> > Maybe use `Int32Ty` (here and below). That should be sufficient under the small code model.
> Sorry, I meant that the difference could be truncated to `Int32Ty`, and stored as an integer, not a pointer.
I tried this out but it resulted in a mysterious dyld crash after the indirect callee returns, which I've yet to understand. I'll have to try using a Debug build of dyld to see what's happening.


https://reviews.llvm.org/D37597





More information about the cfe-commits mailing list