On 21 December 2016 at 10:26, Maxim Uvarov <maxim.uva...@linaro.org> wrote:
> On debian jessie gcc unable to compile current code > with error: > odp_packet.c: In function 'odp_packet_trunc_head': > odp_packet.c:314:46: error: array subscript is above array bounds > [-Werror=array-bounds] > to->buf_hdr.seg[i].len = from->buf_hdr.seg[num + i].len; > > The problem is that it breaks compilation only on .len line: > for (i = 0; i < num; i++) { > to->buf_hdr.seg[i].hdr = from->buf_hdr.seg[num + i].hdr; > to->buf_hdr.seg[i].data = from->buf_hdr.seg[num + i].data; > to->buf_hdr.seg[i].len = from->buf_hdr.seg[num + i].len; > } > > If that line is commented out compilation passes. If lines are reordered > than compilation also passes. Because there is no warning on .hdr and .data > it looks like compiler error. Additional check for preconfigured value > is workaround to that situation. > > Signed-off-by: Maxim Uvarov <maxim.uva...@linaro.org> > --- > platform/linux-generic/odp_packet.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/platform/linux-generic/odp_packet.c > b/platform/linux-generic/odp_packet.c > index 0d3fd05..f3e0a12 100644 > --- a/platform/linux-generic/odp_packet.c > +++ b/platform/linux-generic/odp_packet.c > @@ -309,6 +309,8 @@ static inline void copy_num_segs(odp_packet_hdr_t *to, > odp_packet_hdr_t *from, > int i; > > for (i = 0; i < num; i++) { > + if (odp_unlikely((num + i) >= CONFIG_PACKET_MAX_SEGS)) > + ODP_ABORT("packet segmenation error\n"); > Does this impact performance, if so should it be optionally compiled in for that GCC version ? > to->buf_hdr.seg[i].hdr = from->buf_hdr.seg[num + i].hdr; > to->buf_hdr.seg[i].data = from->buf_hdr.seg[num + i].data; > to->buf_hdr.seg[i].len = from->buf_hdr.seg[num + i].len; > -- > 2.7.1.250.gff4ea60 > > -- Mike Holmes Program Manager - Linaro Networking Group Linaro.org <http://www.linaro.org/> *│ *Open source software for ARM SoCs "Work should be fun and collaborative, the rest follows"