This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Build problem with ToT GCC
- From: Steve Ellcey <sellcey at imgtec dot com>
- To: Roland McGrath <roland at hack dot frob dot com>
- Cc: <libc-alpha at sourceware dot org>
- Date: Fri, 17 Apr 2015 13:46:14 -0700
- Subject: Re: Build problem with ToT GCC
- Authentication-results: sourceware.org; auth=none
- References: <88baa580-c27b-4fc8-b7da-7de3c0a7f64d at BAMAIL02 dot ba dot imgtec dot org> <20150417192032 dot 70DE42C3B91 at topped-with-meat dot com> <1429300312 dot 30498 dot 241 dot camel at ubuntu-sellcey> <20150417195820 dot 664E52C3B86 at topped-with-meat dot com> <1429300926 dot 30498 dot 243 dot camel at ubuntu-sellcey>
- Reply-to: <sellcey at imgtec dot com>
On Fri, 2015-04-17 at 13:02 -0700, Steve Ellcey wrote:
> On Fri, 2015-04-17 at 12:58 -0700, Roland McGrath wrote:
> > > This patch did fix the problem in dl-open.c but dl-close.c has the same
> > > issue and would need the same fix.
> >
> > Please show that error.
>
> dl-close.c: In function '_dl_close_worker':
> dl-close.c:136:42: error: array subscript is outside array bounds
> [-Werror=array-bounds]
> struct link_namespaces *ns = &GL(dl_ns)[nsid];
> ^
> cc1: all warnings being treated as errors
Weird, I assumed that the dl-close.c issue was the same as the dl-open.c
problem. But it looks different. After cutting it down with delta I
get the following small test case and error. I do not see how GCC can
know that nsid is not 0.
Steve Ellcey
sellcey@imgtec.com
extern void bad (const char *__assertion) __attribute__ ((__nothrow__ ))
__attribute__ ((__noreturn__));
struct link_map { long int l_ns; };
extern struct link_namespaces
{
unsigned int _ns_nloaded;
} _dl_ns[1];
void _dl_close_worker (struct link_map *map)
{
long int nsid = map->l_ns;
struct link_namespaces *ns = &_dl_ns[nsid];
(nsid != 0) ? (void) (0) : bad ("nsid != 0");
--ns->_ns_nloaded;
% inst*/bin/*-gcc -O2 -Wall -Werror x.c
x.c: In function '_dl_close_worker':
x.c:10:39: error: array subscript is outside array bounds [-Werror=array-bounds]
struct link_namespaces *ns = &_dl_ns[nsid];
^
x.c:10:39: error: array subscript is outside array bounds [-Werror=array-bounds]
cc1: all warnings being treated as errors