On Sun, Dec 02, 2012 at 10:21:02AM +0400, Alexander Potapenko wrote: > Hi Jack, > > IIUC the wrappers for dispatch_async_f, dispatch_sync_f and other > dispatch_smth_f do not need blocks support in the compiler, since > regular functions are passed into them. So you may want to add the > dynamic interceptors for those back.
Alex, This seems to only require the readjustment of the preprocessor statements in libsanitizer/asan/dynamic/asan_interceptors_dynamic.cc. I'll post the revised patch as soon as regression testing is finished. > The remaining problem is that dispach_async and other functions using > blocks won't be intercepted. This may lead to assertion failures in > big projects (e.g. we needed those for Chrome). In theory that is a problem, however my understanding was that the asan dispatch support was added for use by objc/obj-c++ code. The objc/obj-c++ in FSF gcc is very fragile, on later darwin, since it runs against the system Objective-C runtime but the compiler is only based on a merge of the remaining bits of code from the old FSF gcc Apple branch circa 2006. IMHO, it is insane to try to do any production work with our objc/obj-c++ compiler and current Mac OS X releases. > Overall, the change looks good. Do you want me to backport > MISSING_BLOCKS_SUPPORT into the LLVM version of the runtime? Yes, as it should be transparent to llvm's builds. Jack > > Alex > > On Sun, Dec 2, 2012 at 6:43 AM, Jack Howarth <howa...@bromo.med.uc.edu> wrote: > > The attached patch eliminates PR 55521/sanitizer by switching libasan on > > darwin > > from using mach_override to mac function interposition via the importation > > of the > > asan/dynamic/asan_interceptors_dynamic.cc file from llvm.org's compiler-rt > > svn. > > The changes involve defining USING_MAC_INTERPOSE in configure.ac rather than > > rather than USING_MACH_OVERRIDE, introduction of the use of > > USING_MAC_INTERPOSE > > in Makefile.am to avoid building the interception subdirectory, the passage > > of > > -DMAC_INTERPOSE_FUNCTIONS in asan/Makefile.am when USING_MAC_INTERPOSE as > > well as > > the introduction of a -DMISSING_BLOCKS_SUPPORT flag to disable code that > > requires > > blocks support which FSF gcc lacks. The depreciated usage of > > USING_MACH_OVERRIDE > > is also removed from interception/Makefile.am. Bootstrapped on > > x86_64-apple-darwin10, > > x86_64-apple-darwin11 and x86_64-apple-darwin12. Passes... > > > > make -k check RUNTESTFLAGS="asan.exp --target_board=unix'{-m32,-m64}'" > > > > and fixes the previously failing cond1.C test case from PR55521 on all > > three targets. > > Okay for gcc trunk? > > Jack > > > > > > -- > Alexander Potapenko > Software Engineer > Google Moscow