This is the mail archive of the
mailing list for the GCC project.
Re: Sparc ASAN
From: David Miller <firstname.lastname@example.org>
Date: Wed, 21 Nov 2012 12:54:17 -0500 (EST)
> From: Peter Bergner <email@example.com>
> Date: Wed, 21 Nov 2012 11:28:51 -0600
>> On Tue, 2012-11-20 at 23:19 -0500, David Miller wrote:
>>> The address violation detection seems to work properly and the only
>>> thing that seems to be left are some backtrace/unwind issues. These
>>> are perhaps similar to the unwind bits that the powerpc folks ran
>> David, does the following patch (will have some fuzz since I removed
>> one ppc only hunk from the patch) fix your backtrace issue? I'll note
>> you'll have to add "|| defined(__sparc__)" to the #if ... or as
>> it's probably going to turn out, just replace the whole thing
>> with a "#if !defined(__i386__) && !defined(__x86_64__)".
> This patch works well but I have some unrelated sanitizer sparc
> issues to resolve before the testcase will pass properly.
> Feel free to submit this with the __sparc__ cpp test added, or
> the !x86 variant, at your discretion.
Actually I looked more closely at this, and the trigger is hit one
stack frame too late on sparc.
The BP computed in the memcmp() interceptor is the frame pointer
%fp, but on sparc that's the CFA of the caller, main() in the
case of the memcmp-1.c testcase.
So only main() appears in the backtrace.
It might be easier to implement this by comparing the PC instead.
And it also occurs to me that we probably need to be using
__builtin_extract_return_addr() when recording the PC at the
error trigger point.