This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Sparc ASAN
From: Konstantin Serebryany <konstantin.s.serebryany@gmail.com>
Date: Mon, 3 Dec 2012 22:18:56 +0400
> On Mon, Dec 3, 2012 at 10:02 PM, David Miller <davem@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.