public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: "Sören Tempel" <soeren@soeren-tempel.net>
To: Ian Lance Taylor <iant@golang.org>
Cc: gcc-patches@gcc.gnu.org, gofrontend-dev@googlegroups.com
Subject: Re: [PATCH] libgo: Recognize off64_t / loff_t type definition of musl libc
Date: Tue, 31 May 2022 21:41:06 +0200	[thread overview]
Message-ID: <3HRVN49LNKXZW.3CVHWGFVKNW8T@8pit.net> (raw)
In-Reply-To: <3SZIDJQ80RZHS.3OCYFQG0AQRYP@8pit.net>

PING.

If there is anything else that needs to be addressed please let me know.

Sören Tempel <soeren@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 <iant@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);

  reply	other threads:[~2022-05-31 19:41 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-24 10:17 soeren
2022-05-07 11:18 ` Sören Tempel
2022-05-09 23:33 ` [PATCH] " Ian Lance Taylor
2022-05-12 18:22   ` Sören Tempel
2022-05-12 21:04     ` Ian Lance Taylor
2022-05-18  7:22       ` Sören Tempel
2022-05-31 19:41         ` Sören Tempel [this message]
2022-06-17 21:27           ` Ian Lance Taylor
2022-06-18  7:18             ` Andreas Schwab
2022-06-18 15:28               ` Ian Lance Taylor
2022-06-18 15:59                 ` Andreas Schwab
2022-06-20  7:39                   ` Eric Botcazou
2022-06-21  7:34                     ` Sören Tempel
2022-06-21 12:26                       ` Franz Sirl
2022-06-21 15:03                   ` Ian Lance Taylor
2022-06-21 15:16                     ` Andreas Schwab
2022-06-21 16:53                       ` Ian Lance Taylor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3HRVN49LNKXZW.3CVHWGFVKNW8T@8pit.net \
    --to=soeren@soeren-tempel.net \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=gofrontend-dev@googlegroups.com \
    --cc=iant@golang.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).