Issue #2463 has been updated by Antonio Huete Jimenez.
According to vsrinivas the problem is that our sys/errno.h is a C-only header. He pointed out the solution would be wrapping errno and __errno() between BEGIN_DECLS and END_DECLS macros. 2012/11/27 David Shao via Redmine <[email protected]>: > > Issue #2463 has been reported by David Shao. > > ---------------------------------------- > Bug #2463: __thread storage class for errno may break Firefox 17.0esr C++ > compilation > http://bugs.dragonflybsd.org/issues/2463 > > Author: David Shao > Status: New > Priority: Normal > Assignee: > Category: > Target version: > > > Executing the commands on the file cpperrno.cpp > $ c++ cpperrno.cpp > $ ./a.out > produces the output: > errno = 22 > on NetBSD amd64, FreeBSD amd64, and Linux amd64 (Ubuntu 12.04 LTS). > However on DragonFly the output is an error message: > $ c++ cpperrno.cpp > /tmp//ccTk4OGn.o: In function `(anonymous namespace)::__error()': > cpperrno.cpp:(.text+0x10): undefined reference to `(anonymous > namespace)::errno' > > This matters because the file cpperrno.cpp is a minimal example demonstrating > build breakage of current pkgsrc devel/xulrunner for Firefox 17.0esr, as > reported in a followup to PR pkg/47233. > > The difference appears to be that on DragonFly in file sys/sys/errno.h, there > is the declaration: > > #if !defined(_KERNEL) || defined(_KERNEL_VIRTUAL) > extern __thread int errno; > > Obviously there are reasons to use storage class keyword __thread for errno; > nonetheless, the breakage of compilation for Firefox 17.0esr on no platform > but DragonFly indicates some alternative solution must be devised for porting > C++ userland programs. > > /* begin cpperrno.cpp */ > namespace { > > #pragma GCC visibility push(default) > #include <errno.h> > #pragma GCC visibility pop > > void innamespace() { > errno = EINVAL; > } > > } /* end namespace */ > > extern "C" { > > void seterrno() { > innamespace(); > } > > } /* end extern */ > > #include <stdio.h> > #include <errno.h> > > int main() { > seterrno(); > printf("errno = %d\n", errno); > return errno; > } > /* end cpperrno.cpp */ > > > -- > You have received this notification because you have either subscribed to it, > or are involved in it. > To change your notification preferences, please click here: > http://bugs.dragonflybsd.org/my/account ---------------------------------------- Bug #2463: __thread storage class for errno may break Firefox 17.0esr C++ compilation http://bugs.dragonflybsd.org/issues/2463 Author: David Shao Status: New Priority: Normal Assignee: Category: Target version: Executing the commands on the file cpperrno.cpp $ c++ cpperrno.cpp $ ./a.out produces the output: errno = 22 on NetBSD amd64, FreeBSD amd64, and Linux amd64 (Ubuntu 12.04 LTS). However on DragonFly the output is an error message: $ c++ cpperrno.cpp /tmp//ccTk4OGn.o: In function `(anonymous namespace)::__error()': cpperrno.cpp:(.text+0x10): undefined reference to `(anonymous namespace)::errno' This matters because the file cpperrno.cpp is a minimal example demonstrating build breakage of current pkgsrc devel/xulrunner for Firefox 17.0esr, as reported in a followup to PR pkg/47233. The difference appears to be that on DragonFly in file sys/sys/errno.h, there is the declaration: #if !defined(_KERNEL) || defined(_KERNEL_VIRTUAL) extern __thread int errno; Obviously there are reasons to use storage class keyword __thread for errno; nonetheless, the breakage of compilation for Firefox 17.0esr on no platform but DragonFly indicates some alternative solution must be devised for porting C++ userland programs. /* begin cpperrno.cpp */ namespace { #pragma GCC visibility push(default) #include <errno.h> #pragma GCC visibility pop void innamespace() { errno = EINVAL; } } /* end namespace */ extern "C" { void seterrno() { innamespace(); } } /* end extern */ #include <stdio.h> #include <errno.h> int main() { seterrno(); printf("errno = %d\n", errno); return errno; } /* end cpperrno.cpp */ -- You have received this notification because you have either subscribed to it, or are involved in it. To change your notification preferences, please click here: http://bugs.dragonflybsd.org/my/account
