Messages in this thread | | | From | Alexey Brodkin <> | Subject | Re: [PATCH] ARC: Change ld.as instruction to regular ld. | Date | Tue, 16 Aug 2016 13:15:33 +0000 |
| |
Hi Liav,
On Tue, 2016-08-16 at 10:55 +0300, Liav Rehana wrote: > From: Liav Rehana <liavr@mellanox.com> > > The instruction ld.as takes as operands a base address and an offset, > and doesn't access the sum of these two, but the sum of the base > address and a shifted version of the offset. > This isn't what we want in that case, since it causes a bug during > the push and pop of r25, since his actual offset is given during > resume_user_mode_begin. > Thus, the use of ld solves this problem. > > Signed-off-by: Liav Rehana <liavr@mellanox.com> > ---
Very nice catch!
But IMHO description could be improved a little bit. Probably something like that: --------------------->8--------------------- "PT_user_r25" is offset in bytes within pt_regs structure.
In its turn what "ld.as r1, [r2, x]" really does is r1 <- load_from(r2 + (x << data_size)) = load_from(r2 + x*4).
But the code in question is supposed to load_from(r2 + x).
This leads to obvious stack corruption. --------------------->8---------------------
Reviewed-by: Alexey Brodkin <abrodkin@synopsys.com> | |