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' \

Reply via email to