summaryrefslogtreecommitdiff
path: root/debian/patches/libgo-fix-getrandom-clone-sparc64.diff
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/libgo-fix-getrandom-clone-sparc64.diff')
-rw-r--r--debian/patches/libgo-fix-getrandom-clone-sparc64.diff343
1 files changed, 0 insertions, 343 deletions
diff --git a/debian/patches/libgo-fix-getrandom-clone-sparc64.diff b/debian/patches/libgo-fix-getrandom-clone-sparc64.diff
deleted file mode 100644
index 7df5d9b..0000000
--- a/debian/patches/libgo-fix-getrandom-clone-sparc64.diff
+++ /dev/null
@@ -1,343 +0,0 @@
-# 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 $@ $<