From: Konstantin Serebryany <konstantin.s.serebry...@gmail.com> Date: Mon, 3 Dec 2012 22:18:56 +0400
> On Mon, Dec 3, 2012 at 10:02 PM, David Miller <da...@davemloft.net> wrote: >> The only changes to libsantizier is to put __sparc__ checks where >> __powerpc__ checks exist in the unwind code. > > Like this? > > =================================================================== > --- asan/asan_linux.cc (revision 169136) > +++ asan/asan_linux.cc (working copy) > @@ -158,7 +158,9 @@ > stack->trace[0] = pc; > if ((max_s) > 1) { > stack->max_size = max_s; > -#if defined(__arm__) || defined(__powerpc__) || defined(__powerpc64__) > +#if defined(__arm__) || \ > + defined(__powerpc__) || defined(__powerpc64__) || \ > + defined(__sparc__) > _Unwind_Backtrace(Unwind_Trace, stack); > // Pop off the two ASAN functions from the backtrace. > stack->PopStackFrames(2); Yes, that's perfect. We could also add a __sparc__ block to sanitizer_stacktrace.cc:patch_pc(). The Sparc PC is actually 8 bytes after the caller's jump. Sparc has a delay slot, the place to return to is 2 instructions after the call/jump, and instructions are all 4 bytes long. > We either need to align the redzones by 32 always, or for some platforms. > Either is fine for me. I'm ambivalent as well.