Re: [PATCH] Fix build issue due to Introduce nat/linux-namespaces.[ch] patch

Gary Benson
2015-07-14T14:46:46Z

Hi Peter,

Peter Bergner wrote:
> I have a toolchain that dies building gdb with the following error:
>
> /home/bergner/binutils/binutils-gdb/gdb/nat/linux-namespaces.c:39:1: error: static declaration of ‘setns’ follows non-static declaration
> setns (int fd, int nstype)
> ^
> In file included from /opt/at7.0/include/sched.h:41:0,
> from /home/bergner/binutils/binutils-gdb/gdb/nat/linux-namespaces.c:30:
> /opt/at7.0/include/bits/sched.h:91:12: note: previous declaration of ‘setns’ was here
> extern int setns (int __fd, int __nstype) __THROW;
> ^
> make[2]: *** [linux-namespaces.o] Error 1
>
> My configure doesn't define HAVE_SETNS because my glibc defines
> __stub_setns, so nat/linux-namespaces.c defines its own setns
> routine. However, my glibc also has its sched.h with a extern
> prototype for setns, which conflicts with this static version
> linux-namespaces.c is creating, so we get the error above. How
> about the following patch to work around the error? I can confirm
> that it fixes the problem on my multiple systems that do and do not
> have setns.
>
> Ok for trunk?

I'd prefer it without the nested conditionals:

#ifdef HAVE_SETNS
return setns (fd, nstype);
#elif defined __NR_setns
return syscall (__NR_setns, fd, nstype);
#else
errno = ENOSYS;
return -1;
#endif

Otherwise ok. Thanks for doing this work!

Cheers,
Gary

--