[llvm-dev] asan for allocas on powerpc64
Maxim Ostapenko via llvm-dev
llvm-dev at lists.llvm.org
Tue Nov 17 10:03:42 PST 2015
Hi!
Sorry for delay, just returned from vacation.
On 12/11/15 23:44, Kostya Serebryany via llvm-dev wrote:
> +Maxim and Yuri, as I think this is their code.
>
> On Thu, Nov 12, 2015 at 3:02 AM, Jay Foad <jay.foad at gmail.com
> <mailto:jay.foad at gmail.com>> wrote:
>
> (Resending with the correct mailing list address.)
>
> Hi,
>
> Currently test/asan/TestCases/alloca_vla_interact.cc is XFAILed for
> powerpc64. I've had a look at why it doesn't work. I think the only
> problem is in the call to __asan_allocas_unpoison that is inserted at
> the end of the "for" loop (just before a stackrestore instruction).
>
> The call function is created something like this (paraphrasing from
> lib/Transfoms/Instrumentation/AddressSanitizer.cpp):
>
> // call __asan_allocas_unpoison(uptr top, uptr bottom);
> // NB "top" here means lowest address and "bottom" means highest!
>
> IRB.CreateCall(
> AsanAllocasUnpoisonFunc,
> {
> IRB.CreateLoad(DynamicAllocaLayout),
> IRB.CreatePointerToInt(SaveRestoreInst->getOperand(0), IntptrTy)
> }
> );
>
> I think the problem is that the operand to stackrestore is the new
> native sp register value to restore, and this code is assuming that
> that will be a higher address than all the allocas that are being
> unallocated. But on PowerPC64, the native sp is always lower than the
> address of the most recent alloca by MaxCallFrameSize bytes, to leave
> space for outgoing call arguments. So I think the second argument to
> __asan_allocas_unpoison needs to be SaveRestoreInst->getOperand(0) +
> MaxCallFrameSize, but I don't know how to implement that.
>
> Thoughts?
>
Yeah, you are right, we rely on stackrestore to get "bottom" parameter
for __asan_allocas_unpoison and indeed PowerPC64 seems to be special here.
However, right now I don't see a suitable way how to get
MaxCallFrameSize from LLVM backend in ASan pass, investigation is in
progress.
Thank you again for spending your time on this!
-Maxim
> Thanks,
> Jay.
>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
More information about the llvm-dev
mailing list