Control: tags -1 patch (almost; explained below) Hi Matthias, On Tue, Oct 18, 2016 at 01:47:20PM +0200, Matthias Klose wrote: > Control: tags -1 - patch > > James, based on your feedback, I tried to apply these revisions on the branch, > had to update some of these, and got a failed build. I'm not intending to work > on this, and would like to ask you to prepare a tested debdiff for a backport or > to get the backport upstream if you want to include the libgo port into the > gcc-6 Debian packages. Please find a debdiff attached; I have successfully built it on sparc64. There is just *one* little detail which messes this up (and perhaps was the cause of your failure?): libgo-elf-relocations-sparc64.diff references a new binary file (for the test suite), but "svn diff" doesn't include the actual data, nor does quilt seem to support git-style binary diffs. Please either remove the hunks for libgo/go/debug/elf/{file_test.go,testdata/go-relocation-test-gcc620-sparc64.obj} or place a copy of the latter .obj in the source package and ensure it gets copied to the same relative directory under src when unpacking/patching. Do let me know if I can do anything else to make this happen. I will also see if I can get them backported upstream (though even with that you'll still need to faff about with the .obj or drop the test...). Thanks, James > On 16.10.2016 19:40, James Clarke wrote: > > Control: tags -1 - help + patch > > > > Hi Matthias, > > On Thu, Oct 13, 2016 at 01:50:43PM +0200, Matthias Klose wrote: > >> Control: tags -1 + help > >> Control: tags -1 - patch > >> > >> James, please could you name the revisions in the GCC subversion repository? > >> Afaics these are r241084, r241077, r241051. Even better, could you test and > >> propose this backport upstream? > > > > To confirm, they are the following revisions: > > > > * r241171 (sparc64 relocations, e1fc2925 in go master, now also in > > gofrontend/gccgo) > > * r241084 (don't use pt_regs; unnecessary, and seemingly not defined by > > the included headers on arm64) > > * r241072 (make rawClone no_split_stack) > > * r241051 (fix getrandom on sparc64 and clone on sparc*) > > * r240457 (add getrandom for MIPS/SPARC) > > > > We've been using the latest gcc-6 package with these patches (other than > > no_split_stack and pt_regs fixups) applied on top for sparc64 (uploaded > > to unreleased) for the past few days, and the only packages which fail > > to build seem to be because Debian currently has an out-of-date x/sys > > package without sparc64 definitions. I haven't been aware of any > > regressions. > > > > Ian: I imagine the getrandom and elf changes would be fine for gcc-6, > > but what about the clone changes? I can understand if that's too > > invasive, but backporting would be great. > > > > Regards, > > James > > > >> On 12.10.2016 23:35, James Clarke wrote: > >>> Source: gcc-6 > >>> Version: 6.2.0-6 > >>> User: debian-sparc@lists.debian.org > >>> Usertags: sparc64 > >>> X-Debbugs-Cc: debian-sparc@lists.debian.org > >>> Tags: patch fixed-upstream > >>> > >>> Hi, > >>> Could you please backport the patches listed below so that we can have a > >>> working gccgo? They fix the (minor) issue of using the wrong syscall > >>> number for getrandom (if code uses it), add support for sparc64's > >>> relocations, and also the following error when running go build: > >>> > >>> /usr/bin/sparc64-linux-gnu-gccgo-6: wait: no child processes > >>> /usr/bin/sparc64-linux-gnu-gccgo-6: exit status 1 > >>> > >>> The patches are: > >>> > >>> https://go.googlesource.com/go/+/e1fc292500aa70c265937aebad00ac010031cbaf > >>> (not yet pulled into gofrontend's libgo) > >>> https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=a357a86a9f2772561454ce17ef13a89a51fc4a27 > >>> https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=0509fa0eae193f8d99886e9b6a1feda4c6c16356 > >>> https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=3457370357929d70f26873e914fae6ea6f1a8ffd > >>> > >>> With all but the last patch (a minor fixup after my patches), I have > >>> been able to successfully build and run go programs on sparc64. > >>> > >>> Regards, > >>> James > >>> > >> >
diff -u gcc-6-6.2.0/debian/changelog gcc-6-6.2.0/debian/changelog --- gcc-6-6.2.0/debian/changelog +++ gcc-6-6.2.0/debian/changelog @@ -1,3 +1,16 @@ +gcc-6 (6.2.0-7+sparc64) unreleased; urgency=medium + + * Backport upstream revisions from trunk: + - r240457 (add getrandom for MIPS/SPARC) + - r241051 (fix getrandom on sparc64 and clone on sparc*) + - r241072 (make rawClone no_split_stack) + - r241084 (don't use pt_regs; unnecessary, and seemingly not defined by + the included headers on arm64) + - r241171 (sparc64 relocations, e1fc2925 in go master, now also in + gofrontend/gccgo) + + -- James Clarke <jrtc27@jrtc27.com> Tue, 18 Oct 2016 18:11:43 +0100 + gcc-6 (6.2.0-7) unstable; urgency=medium * Update to SVN 20161018 (r241301, 6.2.1) from the gcc-6-branch. diff -u gcc-6-6.2.0/debian/rules.patch gcc-6-6.2.0/debian/rules.patch --- gcc-6-6.2.0/debian/rules.patch +++ gcc-6-6.2.0/debian/rules.patch @@ -94,6 +94,11 @@ libffi-pax \ libffi-race-condition \ pr77686-workaround \ + libgo-add-getrandom-mips-sparc \ + libgo-fix-getrandom-clone-sparc64 \ + libgo-rawClone-no_split_stack \ + libgo-rawClone-no-pt_regs \ + libgo-elf-relocations-sparc64 \ # this is still needed on powerpc, e.g. firefox and insighttoolkit4 will ftbfs. ifneq (,$(filter $(DEB_TARGET_ARCH),powerpc)) only in patch2: unchanged: --- gcc-6-6.2.0.orig/debian/patches/libgo-add-getrandom-mips-sparc.diff +++ gcc-6-6.2.0/debian/patches/libgo-add-getrandom-mips-sparc.diff @@ -0,0 +1,67 @@ +# DP: Backport r240457 from trunk + +internal/syscall/unix: add getrandom syscall for MIPS and SPARC + +Reviewed-on: https://go-review.googlesource.com/29678 + +Index: b/src/libgo/go/internal/syscall/unix/getrandom_linux_mipso32.go +=================================================================== +--- a/src/libgo/go/internal/syscall/unix/getrandom_linux_mipso32.go (nonexistent) ++++ b/src/libgo/go/internal/syscall/unix/getrandom_linux_mipso32.go (revision 240457) +@@ -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: b/src/libgo/go/internal/syscall/unix/getrandom_linux_sparc.go +=================================================================== +--- a/src/libgo/go/internal/syscall/unix/getrandom_linux_sparc.go (nonexistent) ++++ b/src/libgo/go/internal/syscall/unix/getrandom_linux_sparc.go (revision 240457) +@@ -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 +Index: b/src/libgo/go/internal/syscall/unix/getrandom_linux_mips64x.go +=================================================================== +--- a/src/libgo/go/internal/syscall/unix/getrandom_linux_mips64x.go (revision 240456) ++++ b/src/libgo/go/internal/syscall/unix/getrandom_linux_mips64x.go (revision 240457) +@@ -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: b/src/libgo/go/internal/syscall/unix/getrandom_linux_mipsn32.go +=================================================================== +--- a/src/libgo/go/internal/syscall/unix/getrandom_linux_mipsn32.go (nonexistent) ++++ b/src/libgo/go/internal/syscall/unix/getrandom_linux_mipsn32.go (revision 240457) +@@ -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 only in patch2: unchanged: --- gcc-6-6.2.0.orig/debian/patches/libgo-elf-relocations-sparc64.diff +++ gcc-6-6.2.0/debian/patches/libgo-elf-relocations-sparc64.diff @@ -0,0 +1,107 @@ +# DP: Backport r241051 from trunk + +debug/elf: add sparc64 relocations + +This is a backport of https://go-review.googlesource.com/30870. + +Reviewed-on: https://go-review.googlesource.com/30916 + +Index: b/src/libgo/go/debug/elf/file_test.go +=================================================================== +--- a/src/libgo/go/debug/elf/file_test.go (revision 241170) ++++ b/src/libgo/go/debug/elf/file_test.go (revision 241171) +@@ -492,6 +492,25 @@ + }, + }, + { ++ "testdata/go-relocation-test-gcc620-sparc64.obj", ++ []relocationTestEntry{ ++ {0, &dwarf.Entry{ ++ Offset: 0xb, ++ Tag: dwarf.TagCompileUnit, ++ Children: true, ++ Field: []dwarf.Field{ ++ {Attr: dwarf.AttrProducer, Val: "GNU C11 6.2.0 20160914 -mcpu=v9 -g -fstack-protector-strong", Class: dwarf.ClassString}, ++ {Attr: dwarf.AttrLanguage, Val: int64(12), Class: dwarf.ClassConstant}, ++ {Attr: dwarf.AttrName, Val: "hello.c", Class: dwarf.ClassString}, ++ {Attr: dwarf.AttrCompDir, Val: "/tmp", Class: dwarf.ClassString}, ++ {Attr: dwarf.AttrLowpc, Val: uint64(0x0), Class: dwarf.ClassAddress}, ++ {Attr: dwarf.AttrHighpc, Val: int64(0x2c), Class: dwarf.ClassConstant}, ++ {Attr: dwarf.AttrStmtList, Val: int64(0), Class: dwarf.ClassLinePtr}, ++ }, ++ }}, ++ }, ++ }, ++ { + "testdata/go-relocation-test-gcc493-mips64le.obj", + []relocationTestEntry{ + {0, &dwarf.Entry{ +Index: b/src/libgo/go/debug/elf/file.go +=================================================================== +--- a/src/libgo/go/debug/elf/file.go (revision 241170) ++++ b/src/libgo/go/debug/elf/file.go (revision 241171) +@@ -598,6 +598,8 @@ + return f.applyRelocationsMIPS64(dst, rels) + case f.Class == ELFCLASS64 && f.Machine == EM_S390: + return f.applyRelocationsS390x(dst, rels) ++ case f.Class == ELFCLASS64 && f.Machine == EM_SPARCV9: ++ return f.applyRelocationsSPARC64(dst, rels) + default: + return errors.New("applyRelocations: not implemented") + } +@@ -962,6 +964,51 @@ + return nil + } + ++func (f *File) applyRelocationsSPARC64(dst []byte, rels []byte) error { ++ // 24 is the size of Rela64. ++ if len(rels)%24 != 0 { ++ return errors.New("length of relocation section is not a multiple of 24") ++ } ++ ++ symbols, _, err := f.getSymbols(SHT_SYMTAB) ++ if err != nil { ++ return err ++ } ++ ++ b := bytes.NewReader(rels) ++ var rela Rela64 ++ ++ for b.Len() > 0 { ++ binary.Read(b, f.ByteOrder, &rela) ++ symNo := rela.Info >> 32 ++ t := R_SPARC(rela.Info & 0xffff) ++ ++ if symNo == 0 || symNo > uint64(len(symbols)) { ++ continue ++ } ++ sym := &symbols[symNo-1] ++ if SymType(sym.Info&0xf) != STT_SECTION { ++ // We don't handle non-section relocations for now. ++ continue ++ } ++ ++ switch t { ++ case R_SPARC_64, R_SPARC_UA64: ++ if rela.Off+8 >= uint64(len(dst)) || rela.Addend < 0 { ++ continue ++ } ++ f.ByteOrder.PutUint64(dst[rela.Off:rela.Off+8], uint64(rela.Addend)) ++ case R_SPARC_32, R_SPARC_UA32: ++ if rela.Off+4 >= uint64(len(dst)) || rela.Addend < 0 { ++ continue ++ } ++ f.ByteOrder.PutUint32(dst[rela.Off:rela.Off+4], uint32(rela.Addend)) ++ } ++ } ++ ++ return nil ++} ++ + func (f *File) DWARF() (*dwarf.Data, error) { + // sectionData gets the data for s, checks its size, and + // applies any applicable relations. +Index: b/src/libgo/go/debug/elf/testdata/go-relocation-test-gcc620-sparc64.obj +=================================================================== +Cannot display: file marked as a binary type. +svn:mime-type = application/octet-stream only in patch2: unchanged: --- gcc-6-6.2.0.orig/debian/patches/libgo-fix-getrandom-clone-sparc64.diff +++ gcc-6-6.2.0/debian/patches/libgo-fix-getrandom-clone-sparc64.diff @@ -0,0 +1,343 @@ +# DP: Backport r241072 from trunk + +syscall, internal/syscall/unix: Fix getrandom, clone on sparc64 + +Since sparc is a valid architecture, the name of +getrandom_linux_sparc.go means that it will be ignored on sparc64, +even though it's whitelisted with a +build line. + +On SPARC, clone has a unique return value convention which requires +some inline assembly to convert it to the normal convention. + +Reviewed-on: https://go-review.googlesource.com/30873 + +Index: b/src/libgo/mksysinfo.sh +=================================================================== +--- a/src/libgo/mksysinfo.sh ++++ b/src/libgo/mksysinfo.sh +@@ -603,8 +603,10 @@ fi + sizeof_long=`grep '^const ___SIZEOF_LONG__ = ' gen-sysinfo.go | sed -e 's/.*= //'` + if test "$sizeof_long" = "4"; then + echo "type _C_long int32" >> ${OUT} ++ echo "type _C_ulong uint32" >> ${OUT} + elif test "$sizeof_long" = "8"; then + echo "type _C_long int64" >> ${OUT} ++ echo "type _C_ulong uint64" >> ${OUT} + else + echo 1>&2 "mksysinfo.sh: could not determine size of long (got $sizeof_long)" + exit 1 +Index: b/src/libgo/go/internal/syscall/unix/getrandom_linux_sparc.go +=================================================================== +--- a/src/libgo/go/internal/syscall/unix/getrandom_linux_sparc.go ++++ b/src/libgo/go/internal/syscall/unix/getrandom_linux_sparc.go +@@ -1,11 +0,0 @@ +-// 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 +Index: b/src/libgo/go/internal/syscall/unix/getrandom_linux_sparcx.go +=================================================================== +--- /dev/null ++++ b/src/libgo/go/internal/syscall/unix/getrandom_linux_sparcx.go +@@ -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 +Index: b/src/libgo/go/syscall/clone_linux.c +=================================================================== +--- /dev/null ++++ b/src/libgo/go/syscall/clone_linux.c +@@ -0,0 +1,100 @@ ++/* clone_linux.c -- consistent wrapper around Linux clone syscall ++ ++ 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. */ ++ ++#include <errno.h> ++#include <asm/ptrace.h> ++#include <sys/syscall.h> ++ ++#include "runtime.h" ++ ++long rawClone (unsigned long flags, void *child_stack, void *ptid, void *ctid, struct pt_regs *regs) __asm__ (GOSYM_PREFIX "syscall.rawClone"); ++ ++long ++rawClone (unsigned long flags, void *child_stack, void *ptid, void *ctid, struct pt_regs *regs) ++{ ++#if defined(__arc__) || defined(__aarch64__) || defined(__arm__) || defined(__mips__) || defined(__hppa__) || defined(__powerpc__) || defined(__score__) || defined(__i386__) || defined(__xtensa__) ++ // CLONE_BACKWARDS ++ return syscall(__NR_clone, flags, child_stack, ptid, regs, ctid); ++#elif defined(__s390__) || defined(__cris__) ++ // CLONE_BACKWARDS2 ++ return syscall(__NR_clone, child_stack, flags, ptid, ctid, regs); ++#elif defined(__microblaze__) ++ // CLONE_BACKWARDS3 ++ return syscall(__NR_clone, flags, child_stack, 0, ptid, ctid, regs); ++#elif defined(__sparc__) ++ ++ /* SPARC has a unique return value convention: ++ ++ Parent --> %o0 == child's pid, %o1 == 0 ++ Child --> %o0 == parent's pid, %o1 == 1 ++ ++ Translate this to look like a normal clone. */ ++ ++# if defined(__arch64__) ++ ++# define SYSCALL_STRING \ ++ "ta 0x6d;" \ ++ "bcc,pt %%xcc, 1f;" \ ++ " mov 0, %%g1;" \ ++ "sub %%g0, %%o0, %%o0;" \ ++ "mov 1, %%g1;" \ ++ "1:" ++ ++# define SYSCALL_CLOBBERS \ ++ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ ++ "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \ ++ "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \ ++ "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \ ++ "f32", "f34", "f36", "f38", "f40", "f42", "f44", "f46", \ ++ "f48", "f50", "f52", "f54", "f56", "f58", "f60", "f62", \ ++ "cc", "memory" ++ ++# else /* __arch64__ */ ++ ++# define SYSCALL_STRING \ ++ "ta 0x10;" \ ++ "bcc 1f;" \ ++ " mov 0, %%g1;" \ ++ "sub %%g0, %%o0, %%o0;" \ ++ "mov 1, %%g1;" \ ++ "1:" ++ ++# define SYSCALL_CLOBBERS \ ++ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ ++ "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \ ++ "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \ ++ "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \ ++ "cc", "memory" ++ ++# endif /* __arch64__ */ ++ ++ register long o0 __asm__ ("o0") = (long)flags; ++ register long o1 __asm__ ("o1") = (long)child_stack; ++ register long o2 __asm__ ("o2") = (long)ptid; ++ register long o3 __asm__ ("o3") = (long)ctid; ++ register long o4 __asm__ ("o4") = (long)regs; ++ register long g1 __asm__ ("g1") = __NR_clone; ++ ++ __asm __volatile (SYSCALL_STRING : ++ "=r" (g1), "=r" (o0), "=r" (o1) : ++ "0" (g1), "1" (o0), "2" (o1), ++ "r" (o2), "r" (o3), "r" (o4) : ++ SYSCALL_CLOBBERS); ++ ++ if (__builtin_expect(g1 != 0, 0)) ++ { ++ errno = -o0; ++ o0 = -1L; ++ } ++ else ++ o0 &= (o1 - 1); ++ ++ return o0; ++ ++#else ++ return syscall(__NR_clone, flags, child_stack, ptid, ctid, regs); ++#endif ++} +Index: b/src/libgo/go/syscall/exec_linux.go +=================================================================== +--- a/src/libgo/go/syscall/exec_linux.go ++++ b/src/libgo/go/syscall/exec_linux.go +@@ -7,7 +7,6 @@ + package syscall + + import ( +- "runtime" + "unsafe" + ) + +@@ -48,6 +47,9 @@ type SysProcAttr struct { + func runtime_BeforeFork() + func runtime_AfterFork() + ++// Implemented in clone_linux.c ++func rawClone(flags _C_ulong, child_stack *byte, ptid *Pid_t, ctid *Pid_t, regs unsafe.Pointer) _C_long ++ + // Fork, dup fd onto 0..len(fd), and exec(argv0, argvv, envv) in child. + // If a dup or exec fails, write the errno error to pipe. + // (Pipe is close-on-exec so if exec succeeds, it will be closed.) +@@ -63,6 +65,7 @@ func forkAndExecInChild(argv0 *byte, arg + // declarations require heap allocation (e.g., err1). + var ( + r1 uintptr ++ r2 _C_long + err1 Errno + err2 Errno + nextfd int +@@ -97,20 +100,16 @@ func forkAndExecInChild(argv0 *byte, arg + // About to call fork. + // No more allocation or calls of non-assembly functions. + runtime_BeforeFork() +- if runtime.GOARCH == "s390x" || runtime.GOARCH == "s390" { +- r1, _, err1 = RawSyscall6(SYS_CLONE, 0, uintptr(SIGCHLD)|sys.Cloneflags, 0, 0, 0, 0) +- } else { +- r1, _, err1 = RawSyscall6(SYS_CLONE, uintptr(SIGCHLD)|sys.Cloneflags, 0, 0, 0, 0, 0) +- } +- if err1 != 0 { ++ r2 = rawClone(_C_ulong(uintptr(SIGCHLD)|sys.Cloneflags), nil, nil, nil, unsafe.Pointer(nil)) ++ if r2 < 0 { + runtime_AfterFork() +- return 0, err1 ++ return 0, GetErrno() + } + +- if r1 != 0 { ++ if r2 != 0 { + // parent; return PID + runtime_AfterFork() +- pid = int(r1) ++ pid = int(r2) + + if sys.UidMappings != nil || sys.GidMappings != nil { + Close(p[0]) +Index: b/src/libgo/Makefile.am +=================================================================== +--- a/src/libgo/Makefile.am ++++ b/src/libgo/Makefile.am +@@ -2145,6 +2145,12 @@ else + os_lib_inotify_lo = + endif + ++if LIBGO_IS_LINUX ++syscall_lib_clone_lo = syscall/clone_linux.lo ++else ++syscall_lib_clone_lo = ++endif ++ + libgo_go_objs = \ + bufio.lo \ + bytes.lo \ +@@ -2175,6 +2181,7 @@ libgo_go_objs = \ + strings/index.lo \ + sync.lo \ + syscall.lo \ ++ $(syscall_lib_clone_lo) \ + syscall/errno.lo \ + syscall/signame.lo \ + syscall/wait.lo \ +@@ -3820,6 +3827,9 @@ syscall.lo.dep: $(go_syscall_files) + $(BUILDDEPS) + syscall.lo: $(go_syscall_files) + $(BUILDPACKAGE) ++syscall/clone_linux.lo: go/syscall/clone_linux.c ++ @$(MKDIR_P) syscall ++ $(LTCOMPILE) -c -o $@ $< + syscall/errno.lo: go/syscall/errno.c + @$(MKDIR_P) syscall + $(LTCOMPILE) -c -o $@ $< +Index: b/src/libgo/Makefile.in +=================================================================== +--- a/src/libgo/Makefile.in ++++ b/src/libgo/Makefile.in +@@ -173,15 +173,16 @@ am__objects_3 = $(am__objects_2) + am_libnetgo_a_OBJECTS = $(am__objects_3) + libnetgo_a_OBJECTS = $(am_libnetgo_a_OBJECTS) + LTLIBRARIES = $(toolexeclib_LTLIBRARIES) +-am__DEPENDENCIES_1 = +-am__DEPENDENCIES_2 = bufio.lo bytes.lo bytes/index.lo crypto.lo \ ++@LIBGO_IS_LINUX_TRUE@am__DEPENDENCIES_1 = syscall/clone_linux.lo ++am__DEPENDENCIES_2 = ++am__DEPENDENCIES_3 = bufio.lo bytes.lo bytes/index.lo crypto.lo \ + encoding.lo errors.lo expvar.lo flag.lo fmt.lo hash.lo html.lo \ + image.lo io.lo log.lo math.lo mime.lo net.lo os.lo path.lo \ + reflect-go.lo reflect/makefunc_ffi_c.lo regexp.lo \ + runtime-go.lo sort.lo strconv.lo strings.lo strings/index.lo \ +- sync.lo syscall.lo syscall/errno.lo syscall/signame.lo \ +- syscall/wait.lo testing.lo time-go.lo unicode.lo \ +- archive/tar.lo archive/zip.lo compress/bzip2.lo \ ++ sync.lo syscall.lo $(am__DEPENDENCIES_1) syscall/errno.lo \ ++ syscall/signame.lo syscall/wait.lo testing.lo time-go.lo \ ++ unicode.lo archive/tar.lo archive/zip.lo compress/bzip2.lo \ + compress/flate.lo compress/gzip.lo compress/lzw.lo \ + compress/zlib.lo container/heap.lo container/list.lo \ + container/ring.lo crypto/aes.lo crypto/cipher.lo crypto/des.lo \ +@@ -213,18 +214,18 @@ am__DEPENDENCIES_2 = bufio.lo bytes.lo b + math/rand.lo mime/multipart.lo mime/quotedprintable.lo \ + net/http.lo net/internal/socktest.lo net/mail.lo net/rpc.lo \ + net/smtp.lo net/textproto.lo net/url.lo old/regexp.lo \ +- old/template.lo os/exec.lo $(am__DEPENDENCIES_1) os/signal.lo \ ++ old/template.lo os/exec.lo $(am__DEPENDENCIES_2) os/signal.lo \ + os/user.lo path/filepath.lo regexp/syntax.lo \ + net/rpc/jsonrpc.lo runtime/debug.lo runtime/pprof.lo \ + sync/atomic.lo sync/atomic_c.lo text/scanner.lo \ + text/tabwriter.lo text/template.lo text/template/parse.lo \ + testing/iotest.lo testing/quick.lo unicode/utf16.lo \ + unicode/utf8.lo +-am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \ +- ../libbacktrace/libbacktrace.la $(am__DEPENDENCIES_1) \ +- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ +- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +-libgo_llgo_la_DEPENDENCIES = $(am__DEPENDENCIES_3) ++am__DEPENDENCIES_4 = $(am__DEPENDENCIES_3) \ ++ ../libbacktrace/libbacktrace.la $(am__DEPENDENCIES_2) \ ++ $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_2) \ ++ $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_2) ++libgo_llgo_la_DEPENDENCIES = $(am__DEPENDENCIES_4) + @LIBGO_IS_LINUX_FALSE@am__objects_4 = lock_sema.lo thread-sema.lo + @LIBGO_IS_LINUX_TRUE@am__objects_4 = lock_futex.lo thread-linux.lo + @HAVE_SYS_MMAN_H_FALSE@am__objects_5 = mem_posix_memalign.lo +@@ -276,7 +277,7 @@ libgo_llgo_la_LINK = $(LIBTOOL) --tag=CC + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libgo_llgo_la_LDFLAGS) $(LDFLAGS) -o $@ + @GOC_IS_LLGO_TRUE@am_libgo_llgo_la_rpath = -rpath $(toolexeclibdir) +-libgo_la_DEPENDENCIES = $(am__DEPENDENCIES_3) ++libgo_la_DEPENDENCIES = $(am__DEPENDENCIES_4) + am_libgo_la_OBJECTS = $(am__objects_9) + libgo_la_OBJECTS = $(am_libgo_la_OBJECTS) + libgo_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +@@ -2156,6 +2157,8 @@ go_syscall_test_files = \ + + # os_lib_inotify_lo = os/inotify.lo + @LIBGO_IS_LINUX_TRUE@os_lib_inotify_lo = ++@LIBGO_IS_LINUX_FALSE@syscall_lib_clone_lo = ++@LIBGO_IS_LINUX_TRUE@syscall_lib_clone_lo = syscall/clone_linux.lo + libgo_go_objs = \ + bufio.lo \ + bytes.lo \ +@@ -2186,6 +2189,7 @@ libgo_go_objs = \ + strings/index.lo \ + sync.lo \ + syscall.lo \ ++ $(syscall_lib_clone_lo) \ + syscall/errno.lo \ + syscall/signame.lo \ + syscall/wait.lo \ +@@ -6197,6 +6201,9 @@ syscall.lo.dep: $(go_syscall_files) + $(BUILDDEPS) + syscall.lo: $(go_syscall_files) + $(BUILDPACKAGE) ++syscall/clone_linux.lo: go/syscall/clone_linux.c ++ @$(MKDIR_P) syscall ++ $(LTCOMPILE) -c -o $@ $< + syscall/errno.lo: go/syscall/errno.c + @$(MKDIR_P) syscall + $(LTCOMPILE) -c -o $@ $< only in patch2: unchanged: --- gcc-6-6.2.0.orig/debian/patches/libgo-rawClone-no-pt_regs.diff +++ gcc-6-6.2.0/debian/patches/libgo-rawClone-no-pt_regs.diff @@ -0,0 +1,33 @@ +# DP: Backport r241084 from trunk + +syscall: don't use pt_regs in clone_linux.c + +It's unnecessary and it reportedly breaks the build on arm64 GNU/Linux. + +Reviewed-on: https://go-review.googlesource.com/30978 + +Index: b/src/libgo/go/syscall/clone_linux.c +=================================================================== +--- a/src/libgo/go/syscall/clone_linux.c (revision 241083) ++++ b/src/libgo/go/syscall/clone_linux.c (revision 241084) +@@ -5,18 +5,17 @@ + license that can be found in the LICENSE file. */ + + #include <errno.h> +-#include <asm/ptrace.h> + #include <sys/syscall.h> + + #include "runtime.h" + + long rawClone (unsigned long flags, void *child_stack, void *ptid, +- void *ctid, struct pt_regs *regs) ++ void *ctid, void *regs) + __asm__ (GOSYM_PREFIX "syscall.rawClone") + __attribute__ ((no_split_stack)); + + long +-rawClone (unsigned long flags, void *child_stack, void *ptid, void *ctid, struct pt_regs *regs) ++rawClone (unsigned long flags, void *child_stack, void *ptid, void *ctid, void *regs) + { + #if defined(__arc__) || defined(__aarch64__) || defined(__arm__) || defined(__mips__) || defined(__hppa__) || defined(__powerpc__) || defined(__score__) || defined(__i386__) || defined(__xtensa__) + // CLONE_BACKWARDS only in patch2: unchanged: --- gcc-6-6.2.0.orig/debian/patches/libgo-rawClone-no_split_stack.diff +++ gcc-6-6.2.0/debian/patches/libgo-rawClone-no_split_stack.diff @@ -0,0 +1,22 @@ +# DP: Backport r241171 from trunk + +syscall: mark rawClone as no_split_stack + +Reviewed-on: https://go-review.googlesource.com/30955 + +Index: b/src/libgo/go/syscall/clone_linux.c +=================================================================== +--- a/src/libgo/go/syscall/clone_linux.c (revision 241071) ++++ b/src/libgo/go/syscall/clone_linux.c (revision 241072) +@@ -10,7 +10,10 @@ + + #include "runtime.h" + +-long rawClone (unsigned long flags, void *child_stack, void *ptid, void *ctid, struct pt_regs *regs) __asm__ (GOSYM_PREFIX "syscall.rawClone"); ++long rawClone (unsigned long flags, void *child_stack, void *ptid, ++ void *ctid, struct pt_regs *regs) ++ __asm__ (GOSYM_PREFIX "syscall.rawClone") ++ __attribute__ ((no_split_stack)); + + long + rawClone (unsigned long flags, void *child_stack, void *ptid, void *ctid, struct pt_regs *regs)
Attachment:
signature.asc
Description: PGP signature