PING. If there is anything else that needs to be addressed please let me know.
Sören Tempel <soe...@soeren-tempel.net> wrote: > I modified your patch to also define libgo_off_t_type (along to > libgo_loff_t_type) and used that to define Offset_t in mksysinfo.sh. > Furthermore, I fixed the include for the loff_t feature check. > > With those two modifications your patch works for me (see attachment). > > Greetings, > Sören > > Ian Lance Taylor <i...@golang.org> wrote: > > On Thu, May 12, 2022 at 11:23 AM Sören Tempel via Gcc-patches > > <gcc-patches@gcc.gnu.org> wrote: > > > > > > The off64_t type is used for defining Offset_t: > > > > > > > > > https://github.com/golang/gofrontend/blob/4bdff733a0c2a9ddc3eff104b1be03df058a79c4/libgo/mksysinfo.sh#L406-L410 > > > > > > On musl, _HAVE_OFF64_T is defined since autoconf doesn't mind it > > > being defined as a macro but -fdump-go-spec does, hence you end up > > > with the following compilation error (even with your patch applied): > > > > Ah, thanks. > > > > > > > Apart from off64_t stuff, there is only one minor issue (see below). > > > > > > > index 7e2b98ba6..487099a33 100644 > > > > --- a/libgo/configure.ac > > > > +++ b/libgo/configure.ac > > > > @@ -579,7 +579,7 @@ AC_C_BIGENDIAN > > > > + > > > > +CFLAGS_hold="$CFLAGS" > > > > +CFLAGS="$OSCFLAGS $CFLAGS" > > > > AC_CHECK_TYPES([loff_t]) > > > > +CFLAGS="$CFLAGS_hold" > > > > > > The AC_CHECK_TYPES invocation is missing an include of fcntl.h (which > > > defines loff_t in musl) and as such fails and causes libgo compilation > > > to fail with "reference to undefined name '_libgo_loff_t_type'" as > > > HAVE_LOFF_T is not defined. The invocation needs to be changed to: > > > > > > AC_CHECK_TYPES([loff_t], [], [], [[#include <fcntl.h>]]) > > > > > > and this needs to be adjusted accordingly in configure as well. > > > > Hmmm, I added fcntl.h to AC_CHECK_HEADERS. I thought that would be > > enough to cause it to be included in future tests. Perhaps not. > > > > Ian > > diff --git a/libgo/config.h.in b/libgo/config.h.in > index 25b8ab8f9ee..2c3c7469675 100644 > --- a/libgo/config.h.in > +++ b/libgo/config.h.in > @@ -70,6 +70,9 @@ > /* Define to 1 if you have the `fchownat' function. */ > #undef HAVE_FCHOWNAT > > +/* Define to 1 if you have the <fcntl.h> header file. */ > +#undef HAVE_FCNTL_H > + > /* Define to 1 if you have the `futimesat' function. */ > #undef HAVE_FUTIMESAT > > diff --git a/libgo/configure b/libgo/configure > index ffe17c9be55..13e21d60c62 100755 > --- a/libgo/configure > +++ b/libgo/configure > @@ -15249,7 +15249,7 @@ $as_echo "#define HAVE_GETIPINFO 1" >>confdefs.h > fi > > > -for ac_header in port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h > sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/sysctl.h > sys/user.h sys/utsname.h sys/select.h sys/socket.h net/bpf.h net/if.h > net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h > sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h > linux/ptrace.h linux/reboot.h netinet/in_syst.h netinet/ip.h > netinet/ip_mroute.h netinet/if_ether.h lwp.h > +for ac_header in fcntl.h port.h sched.h semaphore.h sys/file.h sys/mman.h > syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h > sys/sysctl.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/bpf.h > net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h > sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h > linux/fs.h linux/ptrace.h linux/reboot.h netinet/in_syst.h netinet/ip.h > netinet/ip_mroute.h netinet/if_ether.h lwp.h > do : > as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` > ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" > "$ac_includes_default" > @@ -15546,7 +15546,10 @@ _ACEOF > > fi > > -ac_fn_c_check_type "$LINENO" "loff_t" "ac_cv_type_loff_t" > "$ac_includes_default" > + > +CFLAGS_hold="$CFLAGS" > +CFLAGS="$OSCFLAGS $CFLAGS" > +ac_fn_c_check_type "$LINENO" "loff_t" "ac_cv_type_loff_t" "#include > <fcntl.h>" > if test "x$ac_cv_type_loff_t" = xyes; then : > > cat >>confdefs.h <<_ACEOF > @@ -15556,6 +15559,7 @@ _ACEOF > > fi > > +CFLAGS="$CFLAGS_hold" > > LIBS_hold="$LIBS" > LIBS="$LIBS -lm" > diff --git a/libgo/configure.ac b/libgo/configure.ac > index 7e2b98ba67c..bac58b07b41 100644 > --- a/libgo/configure.ac > +++ b/libgo/configure.ac > @@ -579,7 +579,7 @@ AC_C_BIGENDIAN > > GCC_CHECK_UNWIND_GETIPINFO > > -AC_CHECK_HEADERS(port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h > sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/sysctl.h > sys/user.h sys/utsname.h sys/select.h sys/socket.h net/bpf.h net/if.h > net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h > sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h > linux/ptrace.h linux/reboot.h netinet/in_syst.h netinet/ip.h > netinet/ip_mroute.h netinet/if_ether.h lwp.h) > +AC_CHECK_HEADERS(fcntl.h port.h sched.h semaphore.h sys/file.h sys/mman.h > syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h > sys/sysctl.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/bpf.h > net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h > sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h > linux/fs.h linux/ptrace.h linux/reboot.h netinet/in_syst.h netinet/ip.h > netinet/ip_mroute.h netinet/if_ether.h lwp.h) > > AC_CHECK_HEADERS([netinet/icmp6.h], [], [], > [#include <netinet/in.h> > @@ -601,7 +601,11 @@ AC_STRUCT_DIRENT_D_TYPE > > AC_CHECK_FUNCS(accept4 dup3 epoll_create1 faccessat fallocate fchmodat > fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 > inotify_rm_watch listxattr mkdirat mknodat open64 openat pipe2 removexattr > renameat setxattr sync_file_range splice syscall tee unlinkat unshare > utimensat) > AC_TYPE_OFF_T > -AC_CHECK_TYPES([loff_t]) > + > +CFLAGS_hold="$CFLAGS" > +CFLAGS="$OSCFLAGS $CFLAGS" > +AC_CHECK_TYPES([loff_t], [], [], [[#include <fcntl.h>]]) > +CFLAGS="$CFLAGS_hold" > > LIBS_hold="$LIBS" > LIBS="$LIBS -lm" > diff --git a/libgo/go/syscall/libcall_linux.go > b/libgo/go/syscall/libcall_linux.go > index 96974bd3269..d41af5e28b3 100644 > --- a/libgo/go/syscall/libcall_linux.go > +++ b/libgo/go/syscall/libcall_linux.go > @@ -209,19 +209,19 @@ func Gettid() (tid int) { > //sys Setxattr(path string, attr string, data []byte, flags int) (err > error) > //setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) > _C_int > > -//sys splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, > flags int) (n int64, err error) > -//splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, > flags _C_uint) Ssize_t > +//sys splice(rfd int, roff *_libgo_loff_t_type, wfd int, woff > *_libgo_loff_t_type, len int, flags int) (n int64, err error) > +//splice(rfd _C_int, roff *_libgo_loff_t_type, wfd _C_int, woff > *_libgo_loff_t_type, len Size_t, flags _C_uint) Ssize_t > func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) > (n int64, err error) { > - var lroff _loff_t > - var plroff *_loff_t > + var lroff _libgo_loff_t_type > + var plroff *_libgo_loff_t_type > if roff != nil { > - lroff = _loff_t(*roff) > + lroff = _libgo_loff_t_type(*roff) > plroff = &lroff > } > - var lwoff _loff_t > - var plwoff *_loff_t > + var lwoff _libgo_loff_t_type > + var plwoff *_libgo_loff_t_type > if woff != nil { > - lwoff = _loff_t(*woff) > + lwoff = _libgo_loff_t_type(*woff) > plwoff = &lwoff > } > n, err = splice(rfd, plroff, wfd, plwoff, len, flags) > diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh > index 0c52ea5d71a..5aa309155c3 100755 > --- a/libgo/mksysinfo.sh > +++ b/libgo/mksysinfo.sh > @@ -403,11 +403,7 @@ fi > # Some basic types. > echo 'type Size_t _size_t' >> ${OUT} > echo "type Ssize_t _ssize_t" >> ${OUT} > -if grep '^const _HAVE_OFF64_T = ' gen-sysinfo.go > /dev/null 2>&1; then > - echo "type Offset_t _off64_t" >> ${OUT} > -else > - echo "type Offset_t _off_t" >> ${OUT} > -fi > +echo "type Offset_t _libgo_off_t_type" >> ${OUT} > echo "type Mode_t _mode_t" >> ${OUT} > echo "type Pid_t _pid_t" >> ${OUT} > echo "type Uid_t _uid_t" >> ${OUT} > diff --git a/libgo/sysinfo.c b/libgo/sysinfo.c > index 8ce061e2f5f..a4259c02ded 100644 > --- a/libgo/sysinfo.c > +++ b/libgo/sysinfo.c > @@ -357,6 +357,18 @@ enum { > }; > #endif > > +#if defined(HAVE_LOFF_T) > +// loff_t can be defined as a macro; for -fgo-dump-spec make sure we > +// see a typedef. > +typedef loff_t libgo_loff_t_type; > +#endif > + > +#if defined(HAVE_OFF64_T) > +typedef off64_t libgo_off_t_type; > +#else > +typedef off_t libgo_off_t_type; > +#endif > + > // The following section introduces explicit references to types and > // constants of interest to support bootstrapping libgo using a > // compiler that doesn't support -fdump-go-spec (e.g., clang), via > @@ -537,7 +549,8 @@ SREF(timex); > // From sys/types.h > TREF(pid_t); > TREF(off_t); > -TREF(loff_t); > +TREF(libgo_loff_t_type); > +TREF(libgo_off_t_type); > TREF(size_t); > TREF(ssize_t); > TREF(mode_t);