[Bug go/68931] gccgo fails to build using MUSL libc
gccbugzilla at daniel dot thecshore.com
gcc-bugzilla@gcc.gnu.org
Wed Dec 16 15:35:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68931
--- Comment #2 from Daniel Dickinson <gccbugzilla at daniel dot thecshore.com> ---
Sorry, the patch wasn't intended for inclusion as is; it is a patch I made for
OpenWrt (which has a configuration option CONFIG_USE_MUSL that is available to
the top-level Makefile).
The error that occurs when using musl combined with gccgo is:
sysinfo.go:6308:15: error: use of undefined type '_off64_t'
type Offset_t _off64_t
^
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/syscall/libcall_linux.go:360:11:
error: reference to undefined name '_loff_t'
lroff = _loff_t(*roff)
^
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/syscall/libcall_linux.go:366:11:
error: reference to undefined name '_loff_t'
lwoff = _loff_t(*woff)
^
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/syscall/libcall_linux.go:357:12:
error: use of undefined type '_loff_t'
var lroff _loff_t
^
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/syscall/libcall_linux.go:357:12:
error: use of undefined type '_loff_t'
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/syscall/libcall_linux.go:357:12:
error: use of undefined type '_loff_t'
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/syscall/libcall_linux.go:357:12:
error: use of undefined type '_loff_t'
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/syscall/libcall_linux.go:357:12:
error: use of undefined type '_loff_t'
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/syscall/libcall_linux.go:357:12:
error: use of undefined type '_loff_t'
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/syscall/libcall_linux.go:357:12:
error: use of undefined type '_loff_t'
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/syscall/libcall_linux.go:357:12:
error: use of undefined type '_loff_t'
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/syscall/libcall_linux.go:357:12:
error: use of undefined type '_loff_t'
libtool: compile:
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0-final/./gcc/gccgo
-B/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0-final/./gcc/
-B/home/daniel/Build/openwrt/trunk/openwrt/staging_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/mips-openwrt-linux-musl/bin/
-B/home/daniel/Build/openwrt/trunk/openwrt/staging_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/mips-openwrt-linux-musl/lib/
-isystem
/home/daniel/Build/openwrt/trunk/openwrt/staging_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/mips-openwrt-linux-musl/include
-isystem
/home/daniel/Build/openwrt/trunk/openwrt/staging_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/mips-openwrt-linux-musl/sys-include
-O2 -g -DCONFIG_USE_MUSL -I . -c -fgo-pkgpath=math/cmplx
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/math/cmplx/abs.go
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/math/cmplx/asin.go
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/math/cmplx/conj.go
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/math/cmplx/exp.go
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/math/cmplx/isinf.go
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/math/cmplx/isnan.go
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/math/cmplx/log.go
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/math/cmplx/phase.go
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/math/cmplx/polar.go
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/math/cmplx/pow.go
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/math/cmplx/rect.go
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/math/cmplx/sin.go
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/math/cmplx/sqrt.go
/home/daniel/Build/openwrt/trunk/openwrt/build_dir/toolchain-mips_34kc_gcc-5.2.0_musl-1.1.11/gcc-5.2.0/libgo/go/math/cmplx/tan.go
-o math/cmplx.o >/dev/null 2>&1
Makefile:5786: recipe for target 'syscall.lo' failed
make[7]: *** [syscall.lo] Error 1
make[7]: *** Waiting for unfinished jobs....
Basically the problem is that musl defines some of the required types as
#defines, however the gccgo magic that turns C types into Go types requires
that they be typedefs. (the CONFIG_USE_MUSL is just there so that make can set
-DCONFIG_USE_MUSL for use in mksysinfo.sh; it is in mksysinfo.sh that we must,
for musl, undefine the #define'd types and replace them with typedefs).
The patch was more for informational purposes, only I forgot to explain the
full story.
More information about the Gcc-bugs
mailing list