pcc added a comment.

Thanks. Once we apply this fix to other platforms this would seem to fix 
PR17633.

We may also want to change the ubsan function signature in order to avoid bad 
pointer reads in case of version mismatches.



================
Comment at: lib/CodeGen/CodeGenFunction.cpp:434
+                                            llvm::Constant *Addr) {
+  if (!CGM.getTriple().isOSDarwin())
+    return Addr;
----------------
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`.


================
Comment at: lib/CodeGen/CodeGenFunction.cpp:445
+  auto *GV = new llvm::GlobalVariable(CGM.getModule(), Addr->getType(),
+                                      /*isConstant=*/false,
+                                      llvm::GlobalValue::PrivateLinkage, Addr);
----------------
This can be constant I think.


================
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");
----------------
Maybe use `Int32Ty` (here and below). That should be sufficient under the small 
code model.


https://reviews.llvm.org/D37597



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to