build failure with gcc 4.6.0 "array subscript is above array bounds"
Andreas Schwab
schwab at redhat.com
Thu Aug 18 19:31:17 EST 2011
Ian Campbell <Ian.Campbell at citrix.com> writes:
> I noticed this with a defconfig build:
> CC arch/powerpc/kernel/ptrace.o
> arch/powerpc/kernel/ptrace.c: In function 'arch_ptrace':
> arch/powerpc/kernel/ptrace.c:1502:5: error: array subscript is above array bounds [-Werror=array-bounds]
> arch/powerpc/kernel/ptrace.c:1530:5: error: array subscript is above array bounds [-Werror=array-bounds]
>
> That corresponds to:
> tmp = ((unsigned long *)child->thread.fpr)
> [TS_FPRWIDTH * (index - PT_FPR0)];
>
> child->thread.fpr is "double fpr[32][TS_FPRWIDTH]".
>
> index has already been bounds checked so we know it is <= PT_FPSCR.
>
> I tried to fix but I don't really know enough about PPC to figure out
> the correct fix is. PT_FPSCR is "PT_FPR0 + 32" on ppc64, which seems
> consistent with the fpr definition.
Perhaps there should be a union that overlays fpr with an array of
longs.
> On ppc32 PT_FPSCR is "PT_FPR0 + 2*32 + 1", I tried replacing the 32 with
> "PT_FPSCR - PT_FPR0" (+ 1) but that got me into the BUILD_BUG_ONs at
> line 346 and 374. At this point I'm afraid gave up trying to fix things,
> I hope the report is useful anyway...
On ppc32 a single ptrace call can only read/write half of an fpr, so
each fpr occupies two slots.
Andreas.
--
Andreas Schwab, schwab at redhat.com
GPG Key fingerprint = D4E8 DBE3 3813 BB5D FA84 5EC7 45C6 250E 6F00 984E
"And now for something completely different."
More information about the Linuxppc-dev
mailing list