[LIBGO PATCH] Fix compilation error against uClibc-ng: runtime_sysinfo.go: error: use of undefined type ‘___uclibc_locale_struct’

2017-09-29 Thread Alex Potapenko
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’

2017-09-29 Thread Alex Potapenko
(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’

2017-09-29 Thread Alex Potapenko
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’

2017-09-29 Thread Alex Potapenko
On Fri, Sep 29, 2017 at 5:15 PM, Ian Lance Taylor  wrote:
>
> Thanks.  Committed to mainline.
>

Great, thanks!

-- 
Best regards,
Alex Potapenko