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