On Fri, Sep 29, 2017 at 6:28 AM, Alex Potapenko <opotape...@gmail.com> wrote: > (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 <i...@golang.org> wrote: >> >> On Fri, Sep 29, 2017 at 1:38 AM, Alex Potapenko <opotape...@gmail.com> >> 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 <bits/uClibc_locale.h> 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 <bits/uClibc_locale.h> 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. 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. Ian
diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh index f7e88a6d..cbe5b979 100755 --- a/libgo/mksysinfo.sh +++ b/libgo/mksysinfo.sh @@ -34,6 +34,7 @@ grep -v '^// ' gen-sysinfo.go | \ grep -v '^type _timespec ' | \ grep -v '^type _timestruc_t ' | \ 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' \