public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* libgo patch committed: Change build procedure to use build tags
@ 2016-08-06  0:36 Ian Lance Taylor
  2016-08-07 12:14 ` Andreas Schwab
                   ` (3 more replies)
  0 siblings, 4 replies; 19+ messages in thread
From: Ian Lance Taylor @ 2016-08-06  0:36 UTC (permalink / raw)
  To: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 1672 bytes --]

Go packages use build tags (see the section on Build Constraints at
https://golang.org/pkg/go/build/) to select which files to build on
specific systems.

Previously the libgo Makefile explicitly listed the set of files to
compile for each package.  For packages that use build tags, this
required a lot of awkward automake conditionals in the Makefile.

This patch changes the build to look at the build tags in the files.
The new shell script libgo/match.sh does the matching.  This required
adjusting a lot of build tags, and removing some files that are never
used.  I verified that the exact same sets of files are compiled on
x86_64-pc-linux-gnu.  I also tested the build on i386-sun-solaris
(building for both 32-bit and 64-bit).

Writing match.sh revealed some bugs in the build tag handling that
already exists, in a slightly different form, in the gotest shell
script.  This patch fixes those problems as well.

The old code used automake conditionals to handle systems that were
missing strerror_r and wait4.  Rather than deal with those in Go,
those functions are now implemented in runtime/go-nosys.c when
necessary, so the Go code can simply assume that they exist.

The os testsuite looked for dir_unix.go, which was never built for
gccgo and has now been removed.  I changed the testsuite to look for
dir.go instead.

Note that if you have an existing build directory, you will have to
remove all the .dep files in TARGET/libgo after updating to this
patch.  There isn't anything that will force them to update
automatically.

Bootstrapped on x86_64-pc-linux-gnu and i386-sun-solaris.  Ran Go
testsuite on x86_64-pc-linux-gnu.  Committed to mainline.

Ian

[-- Attachment #2: patch.txt.bz2 --]
[-- Type: application/x-bzip2, Size: 38255 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-06  0:36 libgo patch committed: Change build procedure to use build tags Ian Lance Taylor
@ 2016-08-07 12:14 ` Andreas Schwab
  2016-08-07 15:18   ` Matthias Klose
  2016-08-08 18:15 ` Lynn A. Boger
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 19+ messages in thread
From: Andreas Schwab @ 2016-08-07 12:14 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

That breaks ia64:

../../../libgo/go/internal/syscall/unix/getrandom_linux.go:29:5: error: reference to undefined name 'randomTrap'
  if randomTrap == 0 {
     ^
../../../libgo/go/internal/syscall/unix/getrandom_linux.go:38:34: error: reference to undefined name 'randomTrap'
  r1, _, errno := syscall.Syscall(randomTrap,
                                  ^
make[4]: *** [internal/syscall/unix.lo] Error 1

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-07 12:14 ` Andreas Schwab
@ 2016-08-07 15:18   ` Matthias Klose
  2016-08-07 22:33     ` Ian Lance Taylor
  2016-09-04 16:24     ` Matthias Klose
  0 siblings, 2 replies; 19+ messages in thread
From: Matthias Klose @ 2016-08-07 15:18 UTC (permalink / raw)
  To: Andreas Schwab, Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

On 07.08.2016 14:14, Andreas Schwab wrote:
> That breaks ia64:
> 
> ../../../libgo/go/internal/syscall/unix/getrandom_linux.go:29:5: error: reference to undefined name 'randomTrap'
>   if randomTrap == 0 {
>      ^
> ../../../libgo/go/internal/syscall/unix/getrandom_linux.go:38:34: error: reference to undefined name 'randomTrap'
>   r1, _, errno := syscall.Syscall(randomTrap,
>                                   ^
> make[4]: *** [internal/syscall/unix.lo] Error 1

same on s390x.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-07 15:18   ` Matthias Klose
@ 2016-08-07 22:33     ` Ian Lance Taylor
  2016-09-04 16:24     ` Matthias Klose
  1 sibling, 0 replies; 19+ messages in thread
From: Ian Lance Taylor @ 2016-08-07 22:33 UTC (permalink / raw)
  To: Matthias Klose; +Cc: Andreas Schwab, gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 815 bytes --]

On Sun, Aug 7, 2016 at 8:18 AM, Matthias Klose <doko@ubuntu.com> wrote:
> On 07.08.2016 14:14, Andreas Schwab wrote:
>> That breaks ia64:
>>
>> ../../../libgo/go/internal/syscall/unix/getrandom_linux.go:29:5: error: reference to undefined name 'randomTrap'
>>   if randomTrap == 0 {
>>      ^
>> ../../../libgo/go/internal/syscall/unix/getrandom_linux.go:38:34: error: reference to undefined name 'randomTrap'
>>   r1, _, errno := syscall.Syscall(randomTrap,
>>                                   ^
>> make[4]: *** [internal/syscall/unix.lo] Error 1
>
> same on s390x.

Thanks for the reports.  This patch should fix these problems, and
also fix the build for Alpha GNU/Linux.  Bootstrapped on
x86_64-pc-linux-gnu and verified that the ia64, s390, and alpha should
pick the right files.  Committed to mainline.

Ian

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 6172 bytes --]

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 239210)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@
-b50a0c3fa975186f934b76e25dae42eb65148d67
+eeeeff3e3dd6c09aaefdf13cce99a5beff47a095
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/configure.ac
===================================================================
--- libgo/configure.ac	(revision 238743)
+++ libgo/configure.ac	(working copy)
@@ -191,6 +191,7 @@ is_386=no
 is_alpha=no
 is_arm=no
 is_arm64=no
+is_ia64=no
 is_m68k=no
 mips_abi=unknown
 is_ppc=no
@@ -229,6 +230,10 @@ changequote([,])dnl
       GOARCH=amd64
     fi
     ;;
+  ia64-*-*)
+    is_ia64=yes
+    GOARCH=ia64
+    ;;
   m68k*-*-*)
     is_m68k=yes
     GOARCH=m68k
@@ -311,6 +316,7 @@ AM_CONDITIONAL(LIBGO_IS_386, test $is_38
 AM_CONDITIONAL(LIBGO_IS_ALPHA, test $is_alpha = yes)
 AM_CONDITIONAL(LIBGO_IS_ARM, test $is_arm = yes)
 AM_CONDITIONAL(LIBGO_IS_ARM64, test $is_arm64 = yes)
+AM_CONDITIONAL(LIBGO_IS_IA64, test $is_ia64 = yes)
 AM_CONDITIONAL(LIBGO_IS_M68K, test $is_m68k = yes)
 AM_CONDITIONAL(LIBGO_IS_MIPS, test $mips_abi != unknown)
 AM_CONDITIONAL(LIBGO_IS_MIPSO32, test $mips_abi = o32)
Index: libgo/go/internal/syscall/unix/getrandom_linux_alpha.go
===================================================================
--- libgo/go/internal/syscall/unix/getrandom_linux_alpha.go	(revision 0)
+++ libgo/go/internal/syscall/unix/getrandom_linux_alpha.go	(working copy)
@@ -0,0 +1,9 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package unix
+
+// Linux getrandom system call number.
+// See GetRandom in getrandom_linux.go.
+const randomTrap uintptr = 511
Index: libgo/go/internal/syscall/unix/getrandom_linux_ia64.go
===================================================================
--- libgo/go/internal/syscall/unix/getrandom_linux_ia64.go	(revision 0)
+++ libgo/go/internal/syscall/unix/getrandom_linux_ia64.go	(working copy)
@@ -0,0 +1,9 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package unix
+
+// Linux getrandom system call number.
+// See GetRandom in getrandom_linux.go.
+const randomTrap uintptr = 1339
Index: libgo/go/internal/syscall/unix/getrandom_linux_s390.go
===================================================================
--- libgo/go/internal/syscall/unix/getrandom_linux_s390.go	(revision 0)
+++ libgo/go/internal/syscall/unix/getrandom_linux_s390.go	(working copy)
@@ -0,0 +1,9 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package unix
+
+// Linux getrandom system call number.
+// See GetRandom in getrandom_linux.go.
+const randomTrap uintptr = 349
Index: libgo/match.sh
===================================================================
--- libgo/match.sh	(revision 239189)
+++ libgo/match.sh	(working copy)
@@ -116,7 +116,7 @@ for f in $gofiles; do
 	android | darwin | dragonfly | freebsd | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
 	    tag1=nonmatchingtag
 	    ;;
-	386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | m68k | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | mipso32 | mipsn32 | mipsn64 | mipso64 | ppc | s390 | s390x | sparc | sparc64)
+	386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | mipso32 | mipsn32 | mipsn64 | mipso64 | ppc | s390 | s390x | sparc | sparc64)
 	    tag1=nonmatchingtag
 	    ;;
     esac
@@ -128,7 +128,7 @@ for f in $gofiles; do
 	android | darwin | dragonfly | freebsd | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
 	    tag2=nonmatchingtag
 	    ;;
-	386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | m68k | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | mipso32 | mipsn32 | mipsn64 | mipso64 | ppc | s390 | s390x | sparc | sparc64)
+	386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | mipso32 | mipsn32 | mipsn64 | mipso64 | ppc | s390 | s390x | sparc | sparc64)
 	    tag2=nonmatchingtag
 	    ;;
     esac
Index: libgo/testsuite/gotest
===================================================================
--- libgo/testsuite/gotest	(revision 239189)
+++ libgo/testsuite/gotest	(working copy)
@@ -295,7 +295,7 @@ x)
 	    android | darwin | dragonfly | freebsd | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
 		tag1=nonmatchingtag
 		;;
-	    386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | m68k | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | mipso32 | mipsn32 | mipsn64 | mipso64 | ppc | s390 | s390x | sparc | sparc64)
+	    386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | mipso32 | mipsn32 | mipsn64 | mipso64 | ppc | s390 | s390x | sparc | sparc64)
 		tag1=nonmatchingtag
 		;;
 	    esac
@@ -307,7 +307,7 @@ x)
 	    android | darwin | dragonfly | freebsd | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
 		tag2=nonmatchingtag
 		;;
-	    386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | m68k | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | mipso32 | mipsn32 | mipsn64 | mipso64 | ppc | s390 | s390x | sparc | sparc64)
+	    386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | mipso32 | mipsn32 | mipsn64 | mipso64 | ppc | s390 | s390x | sparc | sparc64)
 		tag2=nonmatchingtag
 		;;
 	    esac

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-06  0:36 libgo patch committed: Change build procedure to use build tags Ian Lance Taylor
  2016-08-07 12:14 ` Andreas Schwab
@ 2016-08-08 18:15 ` Lynn A. Boger
  2016-08-08 18:26   ` Ian Lance Taylor
  2016-08-08 20:34   ` Ian Lance Taylor
  2016-08-11 15:16 ` Rainer Orth
  2016-08-12 11:20 ` Andreas Krebbel
  3 siblings, 2 replies; 19+ messages in thread
From: Lynn A. Boger @ 2016-08-08 18:15 UTC (permalink / raw)
  To: gcc-patches, Ian Taylor

The libgo tests on ppc64le and ppc64 have all been failing in 
gcc-testresults since this change went in and continues to fail after 
the recent fixes for failures on other platforms.

Built myself and got the same failures.  I set keep=true in gotest to 
save the test dirs.  Just running a single package:

make bufio/check
file /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go not 
found
Keeping gotest9734
FAIL: bufio
Makefile:3645: recipe for target 'bufio/check' failed
make: *** [bufio/check] Error 1
boger@willow3:~/gccgo.work/trunk/bld/powerpc64le-linux/libgo$ ls 
/home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
/home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
boger@willow3:~/gccgo.work/trunk/bld/powerpc64le-linux/libgo$ file 
/home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
/home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go: ASCII text

The gotest saved test directory contains the go file they are looking for.

ls ./powerpc64le-linux/libgo/gotest9734/test/bufio.go
./powerpc64le-linux/libgo/gotest9734/test/bufio.go

Likewise for all when doing make check-target-libgo

                 === libgo tests ===

file /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go not 
found
Keeping gotest10016
FAIL: bufio
file /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bytes/buffer.go 
not found
Keeping gotest10106
FAIL: bytes
file /home/boger/gccgo.work/trunk/bld/../src/libgo/go/context/context.go 
not found
Keeping gotest10166
FAIL: context
file /home/boger/gccgo.work/trunk/bld/../src/libgo/go/errors/errors.go 
not found
Keeping gotest10226
FAIL: errors
file /home/boger/gccgo.work/trunk/bld/../src/libgo/go/expvar/expvar.go 
not found
Keeping gotest10286
FAIL: expvar
file /home/boger/gccgo.work/trunk/bld/../src/libgo/go/flag/flag.go not found
Keeping gotest10346
FAIL: flag
file /home/boger/gccgo.work/trunk/bld/../src/libgo/go/fmt/doc.go not found
Keeping gotest10436
FAIL: fmt
file /home/boger/gccgo.work/trunk/bld/../src/libgo/go/html/entity.go not 
found
Keeping gotest10506
FAIL: html
.....

On 08/05/2016 07:36 PM, Ian Lance Taylor wrote:
> Go packages use build tags (see the section on Build Constraints at
> https://golang.org/pkg/go/build/) to select which files to build on
> specific systems.
>
> Previously the libgo Makefile explicitly listed the set of files to
> compile for each package.  For packages that use build tags, this
> required a lot of awkward automake conditionals in the Makefile.
>
> This patch changes the build to look at the build tags in the files.
> The new shell script libgo/match.sh does the matching.  This required
> adjusting a lot of build tags, and removing some files that are never
> used.  I verified that the exact same sets of files are compiled on
> x86_64-pc-linux-gnu.  I also tested the build on i386-sun-solaris
> (building for both 32-bit and 64-bit).
>
> Writing match.sh revealed some bugs in the build tag handling that
> already exists, in a slightly different form, in the gotest shell
> script.  This patch fixes those problems as well.
>
> The old code used automake conditionals to handle systems that were
> missing strerror_r and wait4.  Rather than deal with those in Go,
> those functions are now implemented in runtime/go-nosys.c when
> necessary, so the Go code can simply assume that they exist.
>
> The os testsuite looked for dir_unix.go, which was never built for
> gccgo and has now been removed.  I changed the testsuite to look for
> dir.go instead.
>
> Note that if you have an existing build directory, you will have to
> remove all the .dep files in TARGET/libgo after updating to this
> patch.  There isn't anything that will force them to update
> automatically.
>
> Bootstrapped on x86_64-pc-linux-gnu and i386-sun-solaris.  Ran Go
> testsuite on x86_64-pc-linux-gnu.  Committed to mainline.
>
> Ian

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-08 18:15 ` Lynn A. Boger
@ 2016-08-08 18:26   ` Ian Lance Taylor
  2016-08-08 19:07     ` Lynn A. Boger
  2016-08-08 20:34   ` Ian Lance Taylor
  1 sibling, 1 reply; 19+ messages in thread
From: Ian Lance Taylor @ 2016-08-08 18:26 UTC (permalink / raw)
  To: Lynn A. Boger; +Cc: gcc-patches, gofrontend-dev

On Mon, Aug 8, 2016 at 11:14 AM, Lynn A. Boger
<laboger@linux.vnet.ibm.com> wrote:
>
> The libgo tests on ppc64le and ppc64 have all been failing in
> gcc-testresults since this change went in and continues to fail after the
> recent fixes for failures on other platforms.
>
> Built myself and got the same failures.  I set keep=true in gotest to save
> the test dirs.  Just running a single package:
>
> make bufio/check
> file /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go not
> found
> Keeping gotest9734
> FAIL: bufio
> Makefile:3645: recipe for target 'bufio/check' failed
> make: *** [bufio/check] Error 1
> boger@willow3:~/gccgo.work/trunk/bld/powerpc64le-linux/libgo$ ls
> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
> boger@willow3:~/gccgo.work/trunk/bld/powerpc64le-linux/libgo$ file
> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go: ASCII text

I do not know what would cause that and I'm not seeing it.  I don't
see how it could be related to the most recent patch (SVN revision
239225); was your build working before that patch and failing
afterward?

There is another report of the same problem on IRC so it's not just you.

Ian

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-08 18:26   ` Ian Lance Taylor
@ 2016-08-08 19:07     ` Lynn A. Boger
  0 siblings, 0 replies; 19+ messages in thread
From: Lynn A. Boger @ 2016-08-08 19:07 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

Sorry if I was unclear.  Failures started happening with r239189, and it 
continues to fail in the most recent commit, so none of the later 
changes fixed the problem.

Only happens on trunk, ppc64le & ppc64 (m32 also).  I did my build on a 
different machine from the gcc-testresults build just to be sure there 
wasn't something flaky with the system.

On 08/08/2016 01:26 PM, Ian Lance Taylor wrote:
> On Mon, Aug 8, 2016 at 11:14 AM, Lynn A. Boger
> <laboger@linux.vnet.ibm.com> wrote:
>> The libgo tests on ppc64le and ppc64 have all been failing in
>> gcc-testresults since this change went in and continues to fail after the
>> recent fixes for failures on other platforms.
>>
>> Built myself and got the same failures.  I set keep=true in gotest to save
>> the test dirs.  Just running a single package:
>>
>> make bufio/check
>> file /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go not
>> found
>> Keeping gotest9734
>> FAIL: bufio
>> Makefile:3645: recipe for target 'bufio/check' failed
>> make: *** [bufio/check] Error 1
>> boger@willow3:~/gccgo.work/trunk/bld/powerpc64le-linux/libgo$ ls
>> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
>> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
>> boger@willow3:~/gccgo.work/trunk/bld/powerpc64le-linux/libgo$ file
>> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
>> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go: ASCII text
> I do not know what would cause that and I'm not seeing it.  I don't
> see how it could be related to the most recent patch (SVN revision
> 239225); was your build working before that patch and failing
> afterward?
>
> There is another report of the same problem on IRC so it's not just you.
>
> Ian
>
>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-08 18:15 ` Lynn A. Boger
  2016-08-08 18:26   ` Ian Lance Taylor
@ 2016-08-08 20:34   ` Ian Lance Taylor
  2016-08-09 15:46     ` Lynn A. Boger
  1 sibling, 1 reply; 19+ messages in thread
From: Ian Lance Taylor @ 2016-08-08 20:34 UTC (permalink / raw)
  To: Lynn A. Boger; +Cc: gcc-patches, gofrontend-dev, Segher Boessenkool

[-- Attachment #1: Type: text/plain, Size: 1521 bytes --]

On Mon, Aug 8, 2016 at 11:14 AM, Lynn A. Boger
<laboger@linux.vnet.ibm.com> wrote:
> The libgo tests on ppc64le and ppc64 have all been failing in
> gcc-testresults since this change went in and continues to fail after the
> recent fixes for failures on other platforms.
>
> Built myself and got the same failures.  I set keep=true in gotest to save
> the test dirs.  Just running a single package:
>
> make bufio/check
> file /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go not
> found
> Keeping gotest9734
> FAIL: bufio
> Makefile:3645: recipe for target 'bufio/check' failed
> make: *** [bufio/check] Error 1
> boger@willow3:~/gccgo.work/trunk/bld/powerpc64le-linux/libgo$ ls
> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
> boger@willow3:~/gccgo.work/trunk/bld/powerpc64le-linux/libgo$ file
> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go: ASCII text

I found the problem.  I always configure with a relative srcdir.  You
are using an absolute srcdir.  The recent changes to use build tags
changed the libgo Makefile so that when invoked with with an absolute
srcdir it would pass absolute path names to the gotest script.  That
never worked.  This patch makes it work, and should fix your problem.
Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu with a
relative srcdir and an absolute srcdir.  Committed to mainline.

Ian

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 2390 bytes --]

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 239252)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@
-5e4c16d4fea39835e16f17c3d2b2e85f5c81d815
+2c88d4871558f0451a0ad152a7052dcfaecb254f
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/testsuite/gotest
===================================================================
--- libgo/testsuite/gotest	(revision 239225)
+++ libgo/testsuite/gotest	(working copy)
@@ -217,18 +217,27 @@ x)
 		;;
 	*)
 		for f in $pkgfiles; do
-		    if test -f $basedir/$f; then
-			b=`basename $f`
-			rm -f $b
-			cp $basedir/$f $b
-		    elif test -f ../../$f; then
-			b=`basename $f`
-			rm -f $b
-			cp ../../$f $b
-		    else
-			echo "file $f not found" 1>&2
-			exit 1
-		    fi
+                    case $f in
+                    /*)
+                        b=`basename $f`
+                        rm -f $b
+                        cp $f $b
+                        ;;
+                    *)
+		        if test -f $basedir/$f; then
+			  b=`basename $f`
+			  rm -f $b
+			  cp $basedir/$f $b
+		        elif test -f ../../$f; then
+			  b=`basename $f`
+			  rm -f $b
+			  cp ../../$f $b
+		        else
+			  echo "file $f not found" 1>&2
+			  exit 1
+		        fi
+                        ;;
+                    esac
 		done
 		for f in `cd $srcdir; ls *_test.go`; do
 		    rm -f $f
@@ -252,18 +261,27 @@ x)
 		;;
 	*)
 		for f in $pkgfiles; do
-		    if test -f $basedir/$f; then
-			b=`basename $f`
-			rm -f $b
-			cp $basedir/$f $b
-		    elif test -f ../../$f; then
-			b=`basename $f`
-			rm -f $b
-			cp ../../$f $b
-		    else
-			echo "file $f not found" 1>&2
-			exit 1
-		    fi
+                    case $f in
+                    /*)
+                        b=`basename $f`
+                        rm -f $b
+                        cp $f $b
+                        ;;
+                    *)
+		        if test -f $basedir/$f; then
+			  b=`basename $f`
+			  rm -f $b
+			  cp $basedir/$f $b
+		        elif test -f ../../$f; then
+			  b=`basename $f`
+			  rm -f $b
+			  cp ../../$f $b
+		        else
+			  echo "file $f not found" 1>&2
+			  exit 1
+		        fi
+                        ;;
+                    esac
 		done
 		;;
 	esac

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-08 20:34   ` Ian Lance Taylor
@ 2016-08-09 15:46     ` Lynn A. Boger
  0 siblings, 0 replies; 19+ messages in thread
From: Lynn A. Boger @ 2016-08-09 15:46 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev, Segher Boessenkool

libgo test results in gcc-testresults for ppc64le & ppc64 are back to 
what they were before the change.

Thanks.

On 08/08/2016 03:34 PM, Ian Lance Taylor wrote:
> On Mon, Aug 8, 2016 at 11:14 AM, Lynn A. Boger
> <laboger@linux.vnet.ibm.com> wrote:
>> The libgo tests on ppc64le and ppc64 have all been failing in
>> gcc-testresults since this change went in and continues to fail after the
>> recent fixes for failures on other platforms.
>>
>> Built myself and got the same failures.  I set keep=true in gotest to save
>> the test dirs.  Just running a single package:
>>
>> make bufio/check
>> file /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go not
>> found
>> Keeping gotest9734
>> FAIL: bufio
>> Makefile:3645: recipe for target 'bufio/check' failed
>> make: *** [bufio/check] Error 1
>> boger@willow3:~/gccgo.work/trunk/bld/powerpc64le-linux/libgo$ ls
>> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
>> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
>> boger@willow3:~/gccgo.work/trunk/bld/powerpc64le-linux/libgo$ file
>> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go
>> /home/boger/gccgo.work/trunk/bld/../src/libgo/go/bufio/bufio.go: ASCII text
> I found the problem.  I always configure with a relative srcdir.  You
> are using an absolute srcdir.  The recent changes to use build tags
> changed the libgo Makefile so that when invoked with with an absolute
> srcdir it would pass absolute path names to the gotest script.  That
> never worked.  This patch makes it work, and should fix your problem.
> Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu with a
> relative srcdir and an absolute srcdir.  Committed to mainline.
>
> Ian

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-06  0:36 libgo patch committed: Change build procedure to use build tags Ian Lance Taylor
  2016-08-07 12:14 ` Andreas Schwab
  2016-08-08 18:15 ` Lynn A. Boger
@ 2016-08-11 15:16 ` Rainer Orth
  2016-08-11 21:36   ` Ian Lance Taylor
  2016-08-12 11:20 ` Andreas Krebbel
  3 siblings, 1 reply; 19+ messages in thread
From: Rainer Orth @ 2016-08-11 15:16 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

Hi Ian,

> Go packages use build tags (see the section on Build Constraints at
> https://golang.org/pkg/go/build/) to select which files to build on
> specific systems.
>
> Previously the libgo Makefile explicitly listed the set of files to
> compile for each package.  For packages that use build tags, this
> required a lot of awkward automake conditionals in the Makefile.
>
> This patch changes the build to look at the build tags in the files.
> The new shell script libgo/match.sh does the matching.  This required
> adjusting a lot of build tags, and removing some files that are never
> used.  I verified that the exact same sets of files are compiled on
> x86_64-pc-linux-gnu.  I also tested the build on i386-sun-solaris
> (building for both 32-bit and 64-bit).
>
> Writing match.sh revealed some bugs in the build tag handling that
> already exists, in a slightly different form, in the gotest shell
> script.  This patch fixes those problems as well.
>
> The old code used automake conditionals to handle systems that were
> missing strerror_r and wait4.  Rather than deal with those in Go,
> those functions are now implemented in runtime/go-nosys.c when
> necessary, so the Go code can simply assume that they exist.
>
> The os testsuite looked for dir_unix.go, which was never built for
> gccgo and has now been removed.  I changed the testsuite to look for
> dir.go instead.
>
> Note that if you have an existing build directory, you will have to
> remove all the .dep files in TARGET/libgo after updating to this
> patch.  There isn't anything that will force them to update
> automatically.
>
> Bootstrapped on x86_64-pc-linux-gnu and i386-sun-solaris.  Ran Go
> testsuite on x86_64-pc-linux-gnu.  Committed to mainline.

this patch broke i386-pc-solaris2.12 and sparc-sun-solaris2.12
bootstrap, however: in both cases, the 64-bit build of os.lo fails like this:

/vol/gcc/src/hg/trunk/local/libgo/go/os/dir.go:82:8: error: reference to undefined name 'libc_readdir_r'
   i := libc_readdir_r(file.dirinfo.dir, entryDirent, pr)
        ^

Neither dir_largefile.go (which is correctly omitted, being 32-bit only)
nor dir_regfile.go (which is needed here) is included in the
compilation.

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-11 15:16 ` Rainer Orth
@ 2016-08-11 21:36   ` Ian Lance Taylor
  2016-08-12  9:15     ` Rainer Orth
  0 siblings, 1 reply; 19+ messages in thread
From: Ian Lance Taylor @ 2016-08-11 21:36 UTC (permalink / raw)
  To: Rainer Orth; +Cc: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 2453 bytes --]

On Thu, Aug 11, 2016 at 8:15 AM, Rainer Orth
<ro@cebitec.uni-bielefeld.de> wrote:
>
>> Go packages use build tags (see the section on Build Constraints at
>> https://golang.org/pkg/go/build/) to select which files to build on
>> specific systems.
>>
>> Previously the libgo Makefile explicitly listed the set of files to
>> compile for each package.  For packages that use build tags, this
>> required a lot of awkward automake conditionals in the Makefile.
>>
>> This patch changes the build to look at the build tags in the files.
>> The new shell script libgo/match.sh does the matching.  This required
>> adjusting a lot of build tags, and removing some files that are never
>> used.  I verified that the exact same sets of files are compiled on
>> x86_64-pc-linux-gnu.  I also tested the build on i386-sun-solaris
>> (building for both 32-bit and 64-bit).
>>
>> Writing match.sh revealed some bugs in the build tag handling that
>> already exists, in a slightly different form, in the gotest shell
>> script.  This patch fixes those problems as well.
>>
>> The old code used automake conditionals to handle systems that were
>> missing strerror_r and wait4.  Rather than deal with those in Go,
>> those functions are now implemented in runtime/go-nosys.c when
>> necessary, so the Go code can simply assume that they exist.
>>
>> The os testsuite looked for dir_unix.go, which was never built for
>> gccgo and has now been removed.  I changed the testsuite to look for
>> dir.go instead.
>>
>> Note that if you have an existing build directory, you will have to
>> remove all the .dep files in TARGET/libgo after updating to this
>> patch.  There isn't anything that will force them to update
>> automatically.
>>
>> Bootstrapped on x86_64-pc-linux-gnu and i386-sun-solaris.  Ran Go
>> testsuite on x86_64-pc-linux-gnu.  Committed to mainline.
>
> this patch broke i386-pc-solaris2.12 and sparc-sun-solaris2.12
> bootstrap, however: in both cases, the 64-bit build of os.lo fails like this:
>
> /vol/gcc/src/hg/trunk/local/libgo/go/os/dir.go:82:8: error: reference to undefined name 'libc_readdir_r'
>    i := libc_readdir_r(file.dirinfo.dir, entryDirent, pr)
>         ^
>
> Neither dir_largefile.go (which is correctly omitted, being 32-bit only)
> nor dir_regfile.go (which is needed here) is included in the
> compilation.

Sorry, I don't know what I messed up in my testing.  I committed the
appended patch, which should fix the problem.

Ian

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 807 bytes --]

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 239332)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@
-5e05b7bc947231b4d5a8327bf63e2fa648e51dc7
+fe1e77f843220503f1f8d5ea7dd5e307580e1d38
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/go/os/dir_regfile.go
===================================================================
--- libgo/go/os/dir_regfile.go	(revision 239189)
+++ libgo/go/os/dir_regfile.go	(working copy)
@@ -6,8 +6,8 @@
 // license that can be found in the LICENSE file.
 
 // +build !linux
-// +build !solaris,386
-// +build !solaris,sparc
+// +build !solaris !386
+// +build !solaris !sparc
 
 package os
 

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-11 21:36   ` Ian Lance Taylor
@ 2016-08-12  9:15     ` Rainer Orth
  2016-08-12 13:56       ` Rainer Orth
  2016-08-13  0:14       ` Ian Lance Taylor
  0 siblings, 2 replies; 19+ messages in thread
From: Rainer Orth @ 2016-08-12  9:15 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

Hi Ian,

>> this patch broke i386-pc-solaris2.12 and sparc-sun-solaris2.12
>> bootstrap, however: in both cases, the 64-bit build of os.lo fails like this:
>>
>> /vol/gcc/src/hg/trunk/local/libgo/go/os/dir.go:82:8: error: reference to undefined name 'libc_readdir_r'
>>    i := libc_readdir_r(file.dirinfo.dir, entryDirent, pr)
>>         ^
>>
>> Neither dir_largefile.go (which is correctly omitted, being 32-bit only)
>> nor dir_regfile.go (which is needed here) is included in the
>> compilation.
>
> Sorry, I don't know what I messed up in my testing.  I committed the
> appended patch, which should fix the problem.

I had found a different one to the same effect, but running match.sh
with yours looked right, too.

There's now one new failure, 32 and 64-bit, sparc and x86:

+FAIL: syscall

libgo.log shows

libcalls.go:825:1: error: redefinition of 'Getpgid'
 func Getpgid(pid int) (pgid int, err error) {
 ^
exec_solaris_test.go:22:1: note: previous definition of 'Getpgid' was here
 func Getpgid(pid int) (pgid int, err error) {
 ^
libcalls.go:843:1: error: redefinition of 'Getpgrp'
 func Getpgrp() (pid int) {
 ^
exec_solaris_test.go:31:1: note: previous definition of 'Getpgrp' was here
 func Getpgrp() (pgrp int) {
 ^
exec_solaris_test.go:14:3: error: libc_Getpgid is not a function; //go:linkname is only supported for functions
 //go:linkname libc_Getpgid libc_Getpgid
   ^
exec_solaris_test.go:15:3: error: libc_Getpgrp is not a function; //go:linkname is only supported for functions
 //go:linkname libc_Getpgrp libc_Getpgrp
   ^
exec_solaris_test.go:23:15: error: reference to undefined name 'sysvicall6'
  r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&libc_Getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
               ^
exec_solaris_test.go:32:14: error: reference to undefined name 'sysvicall6'
  r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&libc_Getpgrp)), 0, 0, 0, 0, 0, 0, 0)
              ^
exec_solaris_test.go:37:13: error: reference to undefined name 'ioctl'
 var Ioctl = ioctl
             ^
exec_solaris_test.go:19:15: error: use of undefined type 'libcFunc'
  libc_Getpgrp libcFunc
               ^

I've no idea what exec_solaris_test.go is about: e.g.I couldn't find any
other reference to sysvicall6 elsewhere in the gcc tree.

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-06  0:36 libgo patch committed: Change build procedure to use build tags Ian Lance Taylor
                   ` (2 preceding siblings ...)
  2016-08-11 15:16 ` Rainer Orth
@ 2016-08-12 11:20 ` Andreas Krebbel
  2016-08-13  0:23   ` Ian Lance Taylor
  3 siblings, 1 reply; 19+ messages in thread
From: Andreas Krebbel @ 2016-08-12 11:20 UTC (permalink / raw)
  To: Ian Lance Taylor, gcc-patches

On 08/06/2016 02:36 AM, Ian Lance Taylor wrote:
> Go packages use build tags (see the section on Build Constraints at
> https://golang.org/pkg/go/build/) to select which files to build on
> specific systems.
> 
> Previously the libgo Makefile explicitly listed the set of files to
> compile for each package.  For packages that use build tags, this
> required a lot of awkward automake conditionals in the Makefile.
> 
> This patch changes the build to look at the build tags in the files.
> The new shell script libgo/match.sh does the matching.  This required
> adjusting a lot of build tags, and removing some files that are never
> used.  I verified that the exact same sets of files are compiled on
> x86_64-pc-linux-gnu.  I also tested the build on i386-sun-solaris
> (building for both 32-bit and 64-bit).
> 
> Writing match.sh revealed some bugs in the build tag handling that
> already exists, in a slightly different form, in the gotest shell
> script.  This patch fixes those problems as well.
> 
> The old code used automake conditionals to handle systems that were
> missing strerror_r and wait4.  Rather than deal with those in Go,
> those functions are now implemented in runtime/go-nosys.c when
> necessary, so the Go code can simply assume that they exist.
> 
> The os testsuite looked for dir_unix.go, which was never built for
> gccgo and has now been removed.  I changed the testsuite to look for
> dir.go instead.
> 
> Note that if you have an existing build directory, you will have to
> remove all the .dep files in TARGET/libgo after updating to this
> patch.  There isn't anything that will force them to update
> automatically.
> 
> Bootstrapped on x86_64-pc-linux-gnu and i386-sun-solaris.  Ran Go
> testsuite on x86_64-pc-linux-gnu.  Committed to mainline.
> 
> Ian

This appears to break libgo build on s390x:

libtool: compile:  /home3/andreas/clean/gcc-7.0.0-64-clean-build/./gcc/gccgo
-B/home3/andreas/clean/gcc-7.0.0-64-clean-build/./gcc/
-B/home3/andreas/clean/gcc-7.0.0-64-clean-install/s390x-ibm-linux-gnu/bin/ -B/h
ome3/andreas/clean/gcc-7.0.0-64-clean-install/s390x-ibm-linux-gnu/lib/ -isystem
/home3/andreas/clean/gcc-7.0.0-64-clean-install/s390x-ibm-linux-gnu/include -isystem
/home3/andreas/clean/gcc-7.0.0-64-clean-instal
l/s390x-ibm-linux-gnu/sys-include -O2 -g -I . -c -fgo-pkgpath=hash/crc32
/home3/andreas/clean/../gcc/libgo/go/hash/crc32/crc32.go
/home3/andreas/clean/../gcc/libgo/go/hash/crc32/crc32_generic.go /home3/andreas/c
lean/../gcc/libgo/go/hash/crc32/crc32_s390x.go  -fPIC -o hash/.libs/crc32.o
/home3/andreas/clean/../gcc/libgo/go/hash/crc32/crc32_s390x.go:56:1: error: redefinition of
‘updateCastagnoli’
 func updateCastagnoli(crc uint32, p []byte) uint32 {
 ^
/home3/andreas/clean/../gcc/libgo/go/hash/crc32/crc32_generic.go:12:1: note: previous definition of
‘updateCastagnoli’ was here
 func updateCastagnoli(crc uint32, p []byte) uint32 {
 ^
/home3/andreas/clean/../gcc/libgo/go/hash/crc32/crc32_s390x.go:81:1: error: redefinition of ‘updateIEEE’
 func updateIEEE(crc uint32, p []byte) uint32 {
 ^
/home3/andreas/clean/../gcc/libgo/go/hash/crc32/crc32_generic.go:20:1: note: previous definition of
‘updateIEEE’ was here
 func updateIEEE(crc uint32, p []byte) uint32 {
 ^
make[4]: *** [hash/crc32.lo] Error 1
make[4]: *** Waiting for unfinished jobs....


Adding more "build ignore"s does fix the build for me.

However, I'm wondering why we have to disable the asm tuned files for gccgo? For s390 I really would
like to enable them since they make a huge difference.

The same is probably also required in ./hash/crc32/crc32_amd64p32.go
I could add this as well.

Ok to apply?

diff --git a/libgo/go/crypto/aes/cbc_s390x.go b/libgo/go/crypto/aes/cbc_s390x.go
index 427b30b..8346b5e 100644
--- a/libgo/go/crypto/aes/cbc_s390x.go
+++ b/libgo/go/crypto/aes/cbc_s390x.go
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.

+// +build ignore
+
 package aes

 import (
diff --git a/libgo/go/crypto/aes/ctr_s390x.go b/libgo/go/crypto/aes/ctr_s390x.go
index 94dea5c..ae09dba 100644
--- a/libgo/go/crypto/aes/ctr_s390x.go
+++ b/libgo/go/crypto/aes/ctr_s390x.go
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.

+// +build ignore
+
 package aes

 import (
diff --git a/libgo/go/hash/crc32/crc32_s390x.go b/libgo/go/hash/crc32/crc32_s390x.go
index 2f20690..b8a5808 100644
--- a/libgo/go/hash/crc32/crc32_s390x.go
+++ b/libgo/go/hash/crc32/crc32_s390x.go
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.

+// +build ignore
+
 package crc32

 import (

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-12  9:15     ` Rainer Orth
@ 2016-08-12 13:56       ` Rainer Orth
  2016-08-13  2:53         ` Ian Lance Taylor
  2016-08-13  0:14       ` Ian Lance Taylor
  1 sibling, 1 reply; 19+ messages in thread
From: Rainer Orth @ 2016-08-12 13:56 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

Hi Ian,

>>> this patch broke i386-pc-solaris2.12 and sparc-sun-solaris2.12
>>> bootstrap, however: in both cases, the 64-bit build of os.lo fails like this:
>>>
>>> /vol/gcc/src/hg/trunk/local/libgo/go/os/dir.go:82:8: error: reference to undefined name 'libc_readdir_r'
>>>    i := libc_readdir_r(file.dirinfo.dir, entryDirent, pr)
>>>         ^
>>>
>>> Neither dir_largefile.go (which is correctly omitted, being 32-bit only)
>>> nor dir_regfile.go (which is needed here) is included in the
>>> compilation.
>>
>> Sorry, I don't know what I messed up in my testing.  I committed the
>> appended patch, which should fix the problem.
>
> I had found a different one to the same effect, but running match.sh
> with yours looked right, too.

here's another issue found during wider testing: on Solaris 10 with
/bin/ksh as CONFIG_SHELL, the build aborts like this:

objcopy: 'bufio.o': No such file
Makefile:5072: recipe for target 'bufio.gox' failed
make[4]: *** [bufio.gox] Error 1

It turns out that no bufio.o is created indeed:

/vol/gcc/src/hg/trunk/local/libgo/../install-sh -c -d .; files=`echo  | sed -e 's/[^ ]*\.gox//g' -e 's/[^ ]*\.dep//'`; /bin/ksh ./libtool --tag GO --mode=compile /var/gcc/regression/trunk/10-gcc/build/./gcc/gccgo -B/var/gcc/regression/trunk/10-gcc/build/./gcc/ -B/vol/gcc/i386-pc-solaris2.10/bin/ -B/vol/gcc/i386-pc-solaris2.10/lib/ -isystem /vol/gcc/i386-pc-solaris2.10/include -isystem /vol/gcc/i386-pc-solaris2.10/sys-include     -minline-all-stringops  -g -O2 -I . -c -fgo-pkgpath=`echo bufio.lo | sed -e 's/.lo$//' -e 's/-go$//'` -o bufio.lo $files

The list of input files, output from the likes of

/bin/ksh /vol/gcc/src/hg/trunk/local/libgo/match.sh --goarch=386 --goos=solaris --srcdir=/vol/gcc/src/hg/trunk/local/libgo/go/bufio --extrafiles=""

is empty.  Running match.sh with /bin/ksh -x reveals

+ set -e
+ unset LANG

where the script aborts.  It turns out that /bin/ksh errors out on an
unset of a variable that isn't set.

Maybe one could explicitly set LANG=C here, or use the `portable unset'
used in configure?

Thanks.
        Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-12  9:15     ` Rainer Orth
  2016-08-12 13:56       ` Rainer Orth
@ 2016-08-13  0:14       ` Ian Lance Taylor
  1 sibling, 0 replies; 19+ messages in thread
From: Ian Lance Taylor @ 2016-08-13  0:14 UTC (permalink / raw)
  To: Rainer Orth; +Cc: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 2759 bytes --]

On Fri, Aug 12, 2016 at 2:15 AM, Rainer Orth
<ro@cebitec.uni-bielefeld.de> wrote:
>
>>> this patch broke i386-pc-solaris2.12 and sparc-sun-solaris2.12
>>> bootstrap, however: in both cases, the 64-bit build of os.lo fails like this:
>>>
>>> /vol/gcc/src/hg/trunk/local/libgo/go/os/dir.go:82:8: error: reference to undefined name 'libc_readdir_r'
>>>    i := libc_readdir_r(file.dirinfo.dir, entryDirent, pr)
>>>         ^
>>>
>>> Neither dir_largefile.go (which is correctly omitted, being 32-bit only)
>>> nor dir_regfile.go (which is needed here) is included in the
>>> compilation.
>>
>> Sorry, I don't know what I messed up in my testing.  I committed the
>> appended patch, which should fix the problem.
>
> I had found a different one to the same effect, but running match.sh
> with yours looked right, too.
>
> There's now one new failure, 32 and 64-bit, sparc and x86:
>
> +FAIL: syscall
>
> libgo.log shows
>
> libcalls.go:825:1: error: redefinition of 'Getpgid'
>  func Getpgid(pid int) (pgid int, err error) {
>  ^
> exec_solaris_test.go:22:1: note: previous definition of 'Getpgid' was here
>  func Getpgid(pid int) (pgid int, err error) {
>  ^
> libcalls.go:843:1: error: redefinition of 'Getpgrp'
>  func Getpgrp() (pid int) {
>  ^
> exec_solaris_test.go:31:1: note: previous definition of 'Getpgrp' was here
>  func Getpgrp() (pgrp int) {
>  ^
> exec_solaris_test.go:14:3: error: libc_Getpgid is not a function; //go:linkname is only supported for functions
>  //go:linkname libc_Getpgid libc_Getpgid
>    ^
> exec_solaris_test.go:15:3: error: libc_Getpgrp is not a function; //go:linkname is only supported for functions
>  //go:linkname libc_Getpgrp libc_Getpgrp
>    ^
> exec_solaris_test.go:23:15: error: reference to undefined name 'sysvicall6'
>   r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&libc_Getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
>                ^
> exec_solaris_test.go:32:14: error: reference to undefined name 'sysvicall6'
>   r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&libc_Getpgrp)), 0, 0, 0, 0, 0, 0, 0)
>               ^
> exec_solaris_test.go:37:13: error: reference to undefined name 'ioctl'
>  var Ioctl = ioctl
>              ^
> exec_solaris_test.go:19:15: error: use of undefined type 'libcFunc'
>   libc_Getpgrp libcFunc
>                ^
>
> I've no idea what exec_solaris_test.go is about: e.g.I couldn't find any
> other reference to sysvicall6 elsewhere in the gcc tree.

The file syscall/exec_solaris_test.go is verifying that the somewhat
unusual way that Solaris support is implemented in the gc toolchain
works correctly.  It is meaningless and unnecessary for gccgo.  I
removed it.  Patch bootstrapped and tested on x86_64-pc-linux-gnu,
which I admit means nothing.  Committed to mainline.

Ian

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 1497 bytes --]

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 239393)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@
-fe1e77f843220503f1f8d5ea7dd5e307580e1d38
+cf91720c650f2cdbd8153a5a5f048793cfab3966
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/go/syscall/exec_solaris_test.go
===================================================================
--- libgo/go/syscall/exec_solaris_test.go	(revision 238653)
+++ libgo/go/syscall/exec_solaris_test.go	(working copy)
@@ -1,37 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build solaris
-
-package syscall
-
-import "unsafe"
-
-//go:cgo_import_dynamic libc_Getpgid getpgid "libc.so"
-//go:cgo_import_dynamic libc_Getpgrp getpgrp "libc.so"
-
-//go:linkname libc_Getpgid libc_Getpgid
-//go:linkname libc_Getpgrp libc_Getpgrp
-
-var (
-	libc_Getpgid,
-	libc_Getpgrp libcFunc
-)
-
-func Getpgid(pid int) (pgid int, err error) {
-	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&libc_Getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
-	pgid = int(r0)
-	if e1 != 0 {
-		err = e1
-	}
-	return
-}
-
-func Getpgrp() (pgrp int) {
-	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&libc_Getpgrp)), 0, 0, 0, 0, 0, 0, 0)
-	pgrp = int(r0)
-	return
-}
-
-var Ioctl = ioctl

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-12 11:20 ` Andreas Krebbel
@ 2016-08-13  0:23   ` Ian Lance Taylor
  0 siblings, 0 replies; 19+ messages in thread
From: Ian Lance Taylor @ 2016-08-13  0:23 UTC (permalink / raw)
  To: Andreas Krebbel; +Cc: gcc-patches

On Fri, Aug 12, 2016 at 4:19 AM, Andreas Krebbel
<krebbel@linux.vnet.ibm.com> wrote:
> On 08/06/2016 02:36 AM, Ian Lance Taylor wrote:
>> Go packages use build tags (see the section on Build Constraints at
>> https://golang.org/pkg/go/build/) to select which files to build on
>> specific systems.
>>
>> Previously the libgo Makefile explicitly listed the set of files to
>> compile for each package.  For packages that use build tags, this
>> required a lot of awkward automake conditionals in the Makefile.
>>
>> This patch changes the build to look at the build tags in the files.
>> The new shell script libgo/match.sh does the matching.  This required
>> adjusting a lot of build tags, and removing some files that are never
>> used.  I verified that the exact same sets of files are compiled on
>> x86_64-pc-linux-gnu.  I also tested the build on i386-sun-solaris
>> (building for both 32-bit and 64-bit).
>>
>> Writing match.sh revealed some bugs in the build tag handling that
>> already exists, in a slightly different form, in the gotest shell
>> script.  This patch fixes those problems as well.
>>
>> The old code used automake conditionals to handle systems that were
>> missing strerror_r and wait4.  Rather than deal with those in Go,
>> those functions are now implemented in runtime/go-nosys.c when
>> necessary, so the Go code can simply assume that they exist.
>>
>> The os testsuite looked for dir_unix.go, which was never built for
>> gccgo and has now been removed.  I changed the testsuite to look for
>> dir.go instead.
>>
>> Note that if you have an existing build directory, you will have to
>> remove all the .dep files in TARGET/libgo after updating to this
>> patch.  There isn't anything that will force them to update
>> automatically.
>>
>> Bootstrapped on x86_64-pc-linux-gnu and i386-sun-solaris.  Ran Go
>> testsuite on x86_64-pc-linux-gnu.  Committed to mainline.
>>
>> Ian
>
> This appears to break libgo build on s390x:
>
> libtool: compile:  /home3/andreas/clean/gcc-7.0.0-64-clean-build/./gcc/gccgo
> -B/home3/andreas/clean/gcc-7.0.0-64-clean-build/./gcc/
> -B/home3/andreas/clean/gcc-7.0.0-64-clean-install/s390x-ibm-linux-gnu/bin/ -B/h
> ome3/andreas/clean/gcc-7.0.0-64-clean-install/s390x-ibm-linux-gnu/lib/ -isystem
> /home3/andreas/clean/gcc-7.0.0-64-clean-install/s390x-ibm-linux-gnu/include -isystem
> /home3/andreas/clean/gcc-7.0.0-64-clean-instal
> l/s390x-ibm-linux-gnu/sys-include -O2 -g -I . -c -fgo-pkgpath=hash/crc32
> /home3/andreas/clean/../gcc/libgo/go/hash/crc32/crc32.go
> /home3/andreas/clean/../gcc/libgo/go/hash/crc32/crc32_generic.go /home3/andreas/c
> lean/../gcc/libgo/go/hash/crc32/crc32_s390x.go  -fPIC -o hash/.libs/crc32.o
> /home3/andreas/clean/../gcc/libgo/go/hash/crc32/crc32_s390x.go:56:1: error: redefinition of
> ‘updateCastagnoli’
>  func updateCastagnoli(crc uint32, p []byte) uint32 {
>  ^
> /home3/andreas/clean/../gcc/libgo/go/hash/crc32/crc32_generic.go:12:1: note: previous definition of
> ‘updateCastagnoli’ was here
>  func updateCastagnoli(crc uint32, p []byte) uint32 {
>  ^
> /home3/andreas/clean/../gcc/libgo/go/hash/crc32/crc32_s390x.go:81:1: error: redefinition of ‘updateIEEE’
>  func updateIEEE(crc uint32, p []byte) uint32 {
>  ^
> /home3/andreas/clean/../gcc/libgo/go/hash/crc32/crc32_generic.go:20:1: note: previous definition of
> ‘updateIEEE’ was here
>  func updateIEEE(crc uint32, p []byte) uint32 {
>  ^
> make[4]: *** [hash/crc32.lo] Error 1
> make[4]: *** Waiting for unfinished jobs....
>
>
> Adding more "build ignore"s does fix the build for me.

Thanks for the patch.  Committed.   (FYI, you shouldn't make changes
directly to libgo in the GCC repository--the files there are copied
from a separate repository.  See libgo/README.)


> However, I'm wondering why we have to disable the asm tuned files for gccgo? For s390 I really would
> like to enable them since they make a huge difference.

I would like to enable them also.  They are not enabled today because
the assembler code is written in the syntax accepted by
https://golang.org/cmd/asm.  The files in question are

https://tip.golang.org/src/crypto/aes/asm_s390x.s
https://tip.golang.org/src/hash/crc32/crc32_s390x.s

If someone could rewrite those into gas syntax, we could use them in gccgo.


> The same is probably also required in ./hash/crc32/crc32_amd64p32.go
> I could add this as well.

It is not needed there, because GOARCH will never match amd64p32.
That is only used for NaCL, which gccgo does not support.

Ian

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-12 13:56       ` Rainer Orth
@ 2016-08-13  2:53         ` Ian Lance Taylor
  0 siblings, 0 replies; 19+ messages in thread
From: Ian Lance Taylor @ 2016-08-13  2:53 UTC (permalink / raw)
  To: Rainer Orth; +Cc: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 2433 bytes --]

On Fri, Aug 12, 2016 at 6:56 AM, Rainer Orth
<ro@cebitec.uni-bielefeld.de> wrote:
> Hi Ian,
>
>>>> this patch broke i386-pc-solaris2.12 and sparc-sun-solaris2.12
>>>> bootstrap, however: in both cases, the 64-bit build of os.lo fails like this:
>>>>
>>>> /vol/gcc/src/hg/trunk/local/libgo/go/os/dir.go:82:8: error: reference to undefined name 'libc_readdir_r'
>>>>    i := libc_readdir_r(file.dirinfo.dir, entryDirent, pr)
>>>>         ^
>>>>
>>>> Neither dir_largefile.go (which is correctly omitted, being 32-bit only)
>>>> nor dir_regfile.go (which is needed here) is included in the
>>>> compilation.
>>>
>>> Sorry, I don't know what I messed up in my testing.  I committed the
>>> appended patch, which should fix the problem.
>>
>> I had found a different one to the same effect, but running match.sh
>> with yours looked right, too.
>
> here's another issue found during wider testing: on Solaris 10 with
> /bin/ksh as CONFIG_SHELL, the build aborts like this:
>
> objcopy: 'bufio.o': No such file
> Makefile:5072: recipe for target 'bufio.gox' failed
> make[4]: *** [bufio.gox] Error 1
>
> It turns out that no bufio.o is created indeed:
>
> /vol/gcc/src/hg/trunk/local/libgo/../install-sh -c -d .; files=`echo  | sed -e 's/[^ ]*\.gox//g' -e 's/[^ ]*\.dep//'`; /bin/ksh ./libtool --tag GO --mode=compile /var/gcc/regression/trunk/10-gcc/build/./gcc/gccgo -B/var/gcc/regression/trunk/10-gcc/build/./gcc/ -B/vol/gcc/i386-pc-solaris2.10/bin/ -B/vol/gcc/i386-pc-solaris2.10/lib/ -isystem /vol/gcc/i386-pc-solaris2.10/include -isystem /vol/gcc/i386-pc-solaris2.10/sys-include     -minline-all-stringops  -g -O2 -I . -c -fgo-pkgpath=`echo bufio.lo | sed -e 's/.lo$//' -e 's/-go$//'` -o bufio.lo $files
>
> The list of input files, output from the likes of
>
> /bin/ksh /vol/gcc/src/hg/trunk/local/libgo/match.sh --goarch=386 --goos=solaris --srcdir=/vol/gcc/src/hg/trunk/local/libgo/go/bufio --extrafiles=""
>
> is empty.  Running match.sh with /bin/ksh -x reveals
>
> + set -e
> + unset LANG
>
> where the script aborts.  It turns out that /bin/ksh errors out on an
> unset of a variable that isn't set.
>
> Maybe one could explicitly set LANG=C here, or use the `portable unset'
> used in configure?

That is a shell portability problem I was not aware of.  I took your
LANG=C suggestion.  Bootstrapped and ran Go testsuite on
x86_64-pc-linux-gnu.  Committed to mainline.

Ian

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 1193 bytes --]

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 239442)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@
-d51890dc96a2a33484623728bdc8ac258645e9cc
+24e0c4c98e0614b1892316aca787f1c564f2d269
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/match.sh
===================================================================
--- libgo/match.sh	(revision 239225)
+++ libgo/match.sh	(working copy)
@@ -10,10 +10,10 @@
 
 set -e
 
-unset LANG
+LANG=C
 LC_ALL=C
 LC_CTYPE=C
-export LC_ALL LC_CTYPE
+export LANG LC_ALL LC_CTYPE
 
 srcdir=""
 goarch=""
Index: libgo/testsuite/gotest
===================================================================
--- libgo/testsuite/gotest	(revision 239256)
+++ libgo/testsuite/gotest	(working copy)
@@ -10,9 +10,10 @@
 
 # Makes egrep,grep work better in general if we put them
 # in ordinary C mode instead of what the current language is.
-unset LANG
-export LC_ALL=C
-export LC_CTYPE=C
+LANG=C
+LC_ALL=C
+LC_CTYPE=C
+export LANG LC_ALL LC_CTYPE
 
 GC=${GC:-gccgo}
 GL=${GL:-${GC-gccgo}}

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-08-07 15:18   ` Matthias Klose
  2016-08-07 22:33     ` Ian Lance Taylor
@ 2016-09-04 16:24     ` Matthias Klose
  2016-09-23 21:53       ` Ian Lance Taylor
  1 sibling, 1 reply; 19+ messages in thread
From: Matthias Klose @ 2016-09-04 16:24 UTC (permalink / raw)
  To: Andreas Schwab, Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

On 07.08.2016 17:18, Matthias Klose wrote:
> On 07.08.2016 14:14, Andreas Schwab wrote:
>> That breaks ia64:
>>
>> ../../../libgo/go/internal/syscall/unix/getrandom_linux.go:29:5: error: reference to undefined name 'randomTrap'
>>   if randomTrap == 0 {
>>      ^
>> ../../../libgo/go/internal/syscall/unix/getrandom_linux.go:38:34: error: reference to undefined name 'randomTrap'
>>   r1, _, errno := syscall.Syscall(randomTrap,
>>                                   ^
>> make[4]: *** [internal/syscall/unix.lo] Error 1
> 
> same on s390x.

same on mips, mipsel, mips64el and sparc64.

Matthias

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: libgo patch committed: Change build procedure to use build tags
  2016-09-04 16:24     ` Matthias Klose
@ 2016-09-23 21:53       ` Ian Lance Taylor
  0 siblings, 0 replies; 19+ messages in thread
From: Ian Lance Taylor @ 2016-09-23 21:53 UTC (permalink / raw)
  To: Matthias Klose; +Cc: Andreas Schwab, gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 833 bytes --]

On Sun, Sep 4, 2016 at 7:51 AM, Matthias Klose <doko@ubuntu.com> wrote:
> On 07.08.2016 17:18, Matthias Klose wrote:
>> On 07.08.2016 14:14, Andreas Schwab wrote:
>>> That breaks ia64:
>>>
>>> ../../../libgo/go/internal/syscall/unix/getrandom_linux.go:29:5: error: reference to undefined name 'randomTrap'
>>>   if randomTrap == 0 {
>>>      ^
>>> ../../../libgo/go/internal/syscall/unix/getrandom_linux.go:38:34: error: reference to undefined name 'randomTrap'
>>>   r1, _, errno := syscall.Syscall(randomTrap,
>>>                                   ^
>>> make[4]: *** [internal/syscall/unix.lo] Error 1
>>
>> same on s390x.
>
> same on mips, mipsel, mips64el and sparc64.

Sorry, I somehow misunderstood this message.  This patch should fix
it.  Bootstrapped on x86_64-pc-linux-gnu, which proves little.
Committed to mainline.

Ian

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 2757 bytes --]

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 240453)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@
-57bf3f21005c4508003f65207282c057e3526ec0
+28b79f1d5a3a8924329128999a21d0693e08a603
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/go/internal/syscall/unix/getrandom_linux_mips64x.go
===================================================================
--- libgo/go/internal/syscall/unix/getrandom_linux_mips64x.go	(revision 240053)
+++ libgo/go/internal/syscall/unix/getrandom_linux_mips64x.go	(working copy)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build mips64 mips64le
+// +build mips64 mips64le mipsn64 mipso64
 
 package unix
 
Index: libgo/go/internal/syscall/unix/getrandom_linux_mipsn32.go
===================================================================
--- libgo/go/internal/syscall/unix/getrandom_linux_mipsn32.go	(revision 0)
+++ libgo/go/internal/syscall/unix/getrandom_linux_mipsn32.go	(working copy)
@@ -0,0 +1,11 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build mipsn32
+
+package unix
+
+// Linux getrandom system call number.
+// See GetRandom in getrandom_linux.go.
+const randomTrap uintptr = 6317
Index: libgo/go/internal/syscall/unix/getrandom_linux_mipso32.go
===================================================================
--- libgo/go/internal/syscall/unix/getrandom_linux_mipso32.go	(revision 0)
+++ libgo/go/internal/syscall/unix/getrandom_linux_mipso32.go	(working copy)
@@ -0,0 +1,11 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build mipso32
+
+package unix
+
+// Linux getrandom system call number.
+// See GetRandom in getrandom_linux.go.
+const randomTrap uintptr = 4353
Index: libgo/go/internal/syscall/unix/getrandom_linux_sparc.go
===================================================================
--- libgo/go/internal/syscall/unix/getrandom_linux_sparc.go	(revision 0)
+++ libgo/go/internal/syscall/unix/getrandom_linux_sparc.go	(working copy)
@@ -0,0 +1,11 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build sparc sparc64
+
+package unix
+
+// Linux getrandom system call number.
+// See GetRandom in getrandom_linux.go.
+const randomTrap uintptr = 347

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2016-09-23 21:01 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-06  0:36 libgo patch committed: Change build procedure to use build tags Ian Lance Taylor
2016-08-07 12:14 ` Andreas Schwab
2016-08-07 15:18   ` Matthias Klose
2016-08-07 22:33     ` Ian Lance Taylor
2016-09-04 16:24     ` Matthias Klose
2016-09-23 21:53       ` Ian Lance Taylor
2016-08-08 18:15 ` Lynn A. Boger
2016-08-08 18:26   ` Ian Lance Taylor
2016-08-08 19:07     ` Lynn A. Boger
2016-08-08 20:34   ` Ian Lance Taylor
2016-08-09 15:46     ` Lynn A. Boger
2016-08-11 15:16 ` Rainer Orth
2016-08-11 21:36   ` Ian Lance Taylor
2016-08-12  9:15     ` Rainer Orth
2016-08-12 13:56       ` Rainer Orth
2016-08-13  2:53         ` Ian Lance Taylor
2016-08-13  0:14       ` Ian Lance Taylor
2016-08-12 11:20 ` Andreas Krebbel
2016-08-13  0:23   ` Ian Lance Taylor

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).