[llvm-dev] asan for allocas on powerpc64

Hal Finkel via llvm-dev llvm-dev at lists.llvm.org
Thu Nov 12 13:14:51 PST 2015


----- Original Message -----
> From: "Jay Foad" <jay.foad at gmail.com>
> To: "Hal Finkel" <hfinkel at anl.gov>, "Kostya Serebryany" <kcc at google.com>, llvm-dev at lists.llvm.org
> Sent: Thursday, November 12, 2015 5:02:42 AM
> Subject: Fwd: asan for allocas on powerpc64
> 
> (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?

FWIW, there is a diagram here:

  http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html#DYNAM-STACK

 -Hal

> 
> Thanks,
> Jay.
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory


More information about the llvm-dev mailing list