[LIBGO PATCH] Fix compilation error against uClibc-ng: runtime_sysinfo.go: error: use of undefined type ‘___uclibc_locale_struct’
Hi! Building GCC 7.2.0 libgo against uClibc-ng 1.0.26 results in the following error: > runtime_sysinfo.go:418:17: error: use of undefined type > ‘___uclibc_locale_struct’ This happens because -fdump-go-spec probably generates types only from typedef declarations, ignoring structs, like "struct __uclibc_locale_struct;" in uClibc-ng header. Adding "typedef struct __uclibc_locale_struct __uclibc_locale_struct;" to libgo/sysinfo.c remedies this issue: --- a/libgo/sysinfo.c +++ b/libgo/sysinfo.c @@ -277,3 +277,7 @@ epoll_data_offset = offsetof(struct epoll_event, data) }; #endif + +#ifdef __UCLIBC__ +typedef struct __uclibc_locale_struct __uclibc_locale_struct; +#endif Best regards, Alex
Re: [LIBGO PATCH] Fix compilation error against uClibc-ng: runtime_sysinfo.go: error: use of undefined type ‘___uclibc_locale_struct’
(Sorry for the rerepost: the list doesn't accept any attachments) Hi Ian, On Fri, Sep 29, 2017 at 3:56 PM, Ian Lance Taylor wrote: > On Fri, Sep 29, 2017 at 1:38 AM, Alex Potapenko > wrote: > > > > Building GCC 7.2.0 libgo against uClibc-ng 1.0.26 results in the > following > > error: > > > >> runtime_sysinfo.go:418:17: error: use of undefined type > >> ‘___uclibc_locale_struct’ > > > > > > This happens because -fdump-go-spec probably generates types only from > > typedef declarations, ignoring structs, like "struct > > __uclibc_locale_struct;" in uClibc-ng header. > Adding > > "typedef struct __uclibc_locale_struct __uclibc_locale_struct;" to > > libgo/sysinfo.c remedies this issue: > > > > --- a/libgo/sysinfo.c > > +++ b/libgo/sysinfo.c > > @@ -277,3 +277,7 @@ > >epoll_data_offset = offsetof(struct epoll_event, data) > > }; > > #endif > > + > > +#ifdef __UCLIBC__ > > +typedef struct __uclibc_locale_struct __uclibc_locale_struct; > > +#endif > > -fdump-go-spec doesn't ignore structs, so I feel like there may be > something else going on. Could you send the generated gen-sysinfo.go > file (without your patch)? Thanks. > > Ian > Maybe, -fdump-go-spec chokes on declared structs that are missing definition? In uClibc-ng struct __uclibc_locale_struct definition is private, in the header (see below for the reference) it's defined as an abstract struct: > struct __uclibc_locale_struct; The list doesn't accept attachments, so I'm using paste.bin. uClibc_locale.h first: https://pastebin.com/NPscqw1j And gen-sysinfo.go next: https://pastebin.com/ts54YD3A Thanks, Alex
Re: [LIBGO PATCH] Fix compilation error against uClibc-ng: runtime_sysinfo.go: error: use of undefined type ‘___uclibc_locale_struct’
On Fri, Sep 29, 2017 at 4:44 PM, Ian Lance Taylor wrote: > > Thanks. Yes, the problem is that -fdump-go-spec is faithfully > reporting a dangling type definition, which is fine in C but not in > Go. Since we don't care about any of the locale stuff anyhow, I'm > inclined to a patch like the appended. Can you see if this fixes the > problem on your system? Thanks. > After I apply your patch, and additionally patch libgo/mkrsysinfo.sh in the similar fashion, it does fix the problem: --- a/libgo/mkrsysinfo.sh +++ b/libgo/mkrsysinfo.sh @@ -23,6 +23,7 @@ grep -v '^type _timespec_t ' | \ grep -v '^type _timespec ' | \ grep -v '^type _epoll_' | \ + grep -v '^type _*locale[_ ]' | \ grep -v 'in6_addr' | \ grep -v 'sockaddr_in6' | \ sed -e 's/\([^a-zA-Z0-9_]\)_timeval\([^a-zA-Z0-9_]\)/\1timeval\2/g' \ Thanks, Alex
Re: [LIBGO PATCH] Fix compilation error against uClibc-ng: runtime_sysinfo.go: error: use of undefined type ‘___uclibc_locale_struct’
On Fri, Sep 29, 2017 at 5:15 PM, Ian Lance Taylor wrote: > > Thanks. Committed to mainline. > Great, thanks! -- Best regards, Alex Potapenko