On Wed, 2011-03-16 at 17:03 +0100, Alexander Graf wrote:
> 
> > +int spapr_tce_dma_zero(VIOsPAPRDevice *dev, uint64_t taddr,
> uint32_t size)
> > +{
> > +    uint8_t *zeroes;
> > +
> > +#ifdef DEBUG_TCE
> > +    fprintf(stderr, "spapr_tce_dma_zero taddr=0x%llx size=0x%x\n",
> > +            (unsigned long long)taddr, size);
> > +#endif
> > +
> > +    /* FIXME: do this better... */
> > +    zeroes = alloca(size);
> > +    memset(zeroes, 0, size);
> 
> You sure that zeroes is still alive during the call? If I were a 
> compiler, I'd probably optimize the return away so that it'd end up 
> being a simple branch to spapr_tce_dma_write - coincidentally 
> invalidating the stack that zeroes is on.

Ugh ? How would this ever be legal for a compiler to do that ?

Ben.



Reply via email to