aboutsummaryrefslogtreecommitdiff
path: root/src/syscall/syscall_linux.go
AgeCommit message (Collapse)Author
2021-09-02syscall: drop fallback to utimes in UtimesNano on LinuxTobias Klauser
The minimum required Linux kernel version for Go 1.18 will be changed to 2.6.32, see #45964. The current minimum required version is 2.6.23 and utimensat was added in 2.6.22, so the fallback isn't even necessary for the current minimum supported version. Remove the fallback to utimes. For #45964 Change-Id: I5536f6ea7a34944dd9165f1533c10692171fb0c5 Reviewed-on: https://go-review.googlesource.com/c/go/+/346790 Trust: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2021-04-26syscall: on linux use accept4 in Accept, fall back to acceptTobias Klauser
Android seems to block the accept syscall in newer versions. Use accept4 instead on kernel versions that support it (Linux 2.6.28 and newer) and fall back to accept on ENOSYS. Fixes #45767 Change-Id: If190ace0e0213207fdaf6eeb79a5543ef18456de Reviewed-on: https://go-review.googlesource.com/c/go/+/313769 Trust: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> TryBot-Result: Go Bot <gobot@golang.org>
2021-03-14all: add internal/itoa packageJosh Bleecher Snyder
This replaces five implementations scattered across low level packages. (And I plan to use it in a sixth soon.) Three of the five were byte-for-byte identical. Change-Id: I3bbbeeac63723a487986c912b604e10ad1e042f4 Reviewed-on: https://go-review.googlesource.com/c/go/+/301549 Trust: Josh Bleecher Snyder <josharian@gmail.com> Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com>
2020-10-29syscall: handle undefined r2 value on linux-ppc64xAndrew G. Morgan
This change fixes two failng tests on linux-ppc64x: - TestAllThreadsSyscall() exposed a real bug in the ppc64x support: - It turns out that the r2 syscall return value is not defined on all architectures. Notably linux-ppc64x so address that by introducing a private architectural constant in the syscall package, archHonorsR2: true if r2 has a determanistic value. - TestSetuidEtc() was sensitive to /proc/<PID>/status content: - The amount of padding space has changed with kernel vintage. - Stress testing revealed a race with /proc files disappearing. Fixes #42178 Change-Id: Ie6fc0b8f2f94a409ac0e5756e73bfce113274709 Reviewed-on: https://go-review.googlesource.com/c/go/+/266202 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> TryBot-Result: Go Bot <gobot@golang.org>
2020-10-23syscall: support POSIX semantics for Linux syscallsAndrew G. Morgan
This change adds two new methods for invoking system calls under Linux: syscall.AllThreadsSyscall() and syscall.AllThreadsSyscall6(). These system call wrappers ensure that all OSThreads mirror a common system call. The wrappers serialize execution of the runtime to ensure no race conditions where any Go code observes a non-atomic OS state change. As such, the syscalls have higher runtime overhead than regular system calls, and only need to be used where such thread (or 'm' in the parlance of the runtime sources) consistency is required. The new support is used to enable these functions under Linux: syscall.Setegid(), syscall.Seteuid(), syscall.Setgroups(), syscall.Setgid(), syscall.Setregid(), syscall.Setreuid(), syscall.Setresgid(), syscall.Setresuid() and syscall.Setuid(). They work identically to their glibc counterparts. Extensive discussion of the background issue addressed in this patch can be found here: https://github.com/golang/go/issues/1435 In the case where cgo is used, the C runtime can launch pthreads that are not managed by the Go runtime. As such, the added syscall.AllThreadsSyscall*() return ENOTSUP when cgo is enabled. However, for the 9 syscall.Set*() functions listed above, when cgo is active, these functions redirect to invoke their C.set*() equivalents in glibc, which wraps the raw system calls with a nptl:setxid fixup mechanism. This achieves POSIX semantics for these functions in the combined Go and C runtime. As a side note, the glibc/nptl:setxid support (2019-11-30) does not extend to all security related system calls under Linux so using native Go (CGO_ENABLED=0) and these AllThreadsSyscall*()s, where needed, will yield more well defined/consistent behavior over all threads of a Go program. That is, using the syscall.AllThreadsSyscall*() wrappers for things like setting state through SYS_PRCTL and SYS_CAPSET etc. Fixes #1435 Change-Id: Ib1a3e16b9180f64223196a32fc0f9dce14d9105c Reviewed-on: https://go-review.googlesource.com/c/go/+/210639 Trust: Emmanuel Odeke <emm.odeke@gmail.com> Trust: Ian Lance Taylor <iant@golang.org> Trust: Michael Pratt <mpratt@google.com> Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com> Reviewed-by: Michael Pratt <mpratt@google.com> Reviewed-by: Austin Clements <austin@google.com>
2020-06-20syscall: check secondary group membership for Faccessat(..., AT_EACCESS) on ↵Tobias Klauser
Linux Follow glibc's implementation and check secondary group memberships using Getgroups. No test since we cannot easily change file permissions when not running as root and the test is meaningless if running as root. Same as CL 238722 did for x/sys/unix Updates #39660 Change-Id: I6af50e27b255e33405558947a0ab3dfbc33b2d50 Reviewed-on: https://go-review.googlesource.com/c/go/+/238937 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2019-10-18syscall: fix wrong unsafe.Pointer alignment in syscallCuong Manh Le
Caught with: go test -a -short -gcflags=all=-d=checkptr log/syslog and: grep -rE '\*\[([^2]|.{2,})\].*\)\(unsafe.Pointer' syscall Updates #34972 Change-Id: Iafd199b3a34beb7cc3e88484bf2fbae45183f951 Reviewed-on: https://go-review.googlesource.com/c/go/+/201877 Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2019-10-08syscall: don't use deprecated syscalls on linux/arm64Tobias Klauser
Reimplement syscall wrappers for linux/arm64 in terms of supported syscalls (or in case of Ustat make it return ENOSYS) and remove the manually added SYS_* consts for the deprecated syscalls. Adapted from golang.org/x/sys/unix where this is already done since CL 119655. Change-Id: I94ab48a4645924df3822497d0575f1a1573d509f Reviewed-on: https://go-review.googlesource.com/c/go/+/199140 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2019-08-28syscall: move Renameat to syscall_linux_$GOARCH.goTobias Klauser
On linux/riscv64, the renameat syscall no longer exists and has been superseded by renameat2. Thus we'll have to use Renameat2 to implement Renameat on linux/riscv64 for #27532. Prepare for this by moving the Renameat definition to the GOARCH specific files. Follow CL 157899 which did the same for golang.org/x/sys/unix Change-Id: I9670213cc3987df48fee962ddee36915a7785560 Reviewed-on: https://go-review.googlesource.com/c/go/+/192077 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2018-07-27syscall: support Faccessat flags argumentIan Lance Taylor
The Linux kernel faccessat system call does not take a flags parameter. The flag parameter to the C library faccessat function is implemented in C. The syscall.Faccessat function takes a flags parameter. In older releases we have passed the flags parameter to the kernel, which ignored it. In CL 120015 we started returning an error if any flags were set. That seems clearly better than ignoring them, but it turns out that some code was using the flags. The code was previously subtly broken. Now it is obviously broken. That is better, but we can do better still: we can implement the flags as the C library does. That is what this CL does. Change-Id: I259bd6f240c3951e939b81c3032dead3d9c567b4 Reviewed-on: https://go-review.googlesource.com/126415 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2018-06-21syscall: check faccessat flags parameter on LinuxTobias Klauser
Port CL 119495 from golang.org/x/sys/unix to the syscall package. Currently Linux faccessat(2) syscall implementation doesn't support the flags parameter. As per the discussion in #25845, permit the same flags as glibc [1]. [1] https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/faccessat.c;h=ea42b2303ff4b2d2d6548ea04376fb265f773436;hb=HEAD Updates #25845 Change-Id: I132b33275a9cc72b3a97acea5482806c7f47d7f7 Reviewed-on: https://go-review.googlesource.com/120015 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2018-06-13syscall: check Fchmodat flags parameter on LinuxTobias Klauser
As mentioned in #25845, port CL 46474 from golang.org/x/sys/unix to the syscall package. Currently Linux' fchmodat(2) syscall implementation doesn't support the flags parameter (though it might in future versions [1]). Fchmodat in the syscall package takes the parameter and (wrongly) passes it on to the syscall which will ignore it. According to the POSIX.1-2008 manual page [2], AT_SYMLINK_NOFOLLOW is the only valid value for the flags parameter and EOPNOTSUPP should be returned in case changing the mode of a symbolic link is not supported by the underlying system. EINVAL should be returned for any other value of the flags parameter. [1] https://patchwork.kernel.org/patch/9596301/ [2] http://pubs.opengroup.org/onlinepubs/9699919799/functions/chmod.html Updates #20130 Updates #25845 Change-Id: I1021dd0e6a4f4cb3557cb1c1b34dd618c378cda6 Reviewed-on: https://go-review.googlesource.com/118658 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2018-06-04syscall: fix EpollWait for arm64Wei Xiao
The SYS_EPOLL_WAIT syscall doesn't exist on arm64. This CL implements EpollWait with SYS_EPOLL_PWAIT syscall. Change-Id: Ica9107a58d7da45351fe2e900f59bec5b7b18f39 Reviewed-on: https://go-review.googlesource.com/115735 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2018-04-19syscall: avoid extra syscall on send/recvmsg on LinuxJason A. Donenfeld
By simply rearranging the logic, we avoid the overhead of a superfluous call to getsockopt. For, if p is already non empty, there's no point in having to check if we need to attach dummy payload. This has performance benefits when using send/recvmsg for high speed communications. Change-Id: Id85cff17328ecbf6d09dd52fbeeaa691dbe69b75 Reviewed-on: https://go-review.googlesource.com/108338 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2018-02-22syscall: remove list of unimplemented syscallsTobias Klauser
The syscall package is frozen and we don't want to encourage anyone to implement these syscalls. Change-Id: I6b6e33e32a4b097da6012226aa15300735e50e9f Reviewed-on: https://go-review.googlesource.com/96315 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2018-02-13syscall: support syscalls without error return on LinuxTobias Klauser
Add the rawSyscallNoError wrapper function which is used for Linux syscalls that don't return an error and convert all applicable occurences of RawSyscall to use it instead. Fixes #22924 Change-Id: Iff1eddb54573d459faa01471f10398b3d38528dd Reviewed-on: https://go-review.googlesource.com/84485 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2018-01-31syscall: use SYS_GETDENTS64 on linux/mips64{,le}Tobias Klauser
The getdents64 syscall is only available for mips64/mips64le starting with Linux kernel 3.10. Since mips64le requires at least 4.8 according to [1] (regarding #16848) using it should be fine. [1] https://golang.org/wiki/MinimumRequirements This CL changes the binary layout of type Dirent for mips64/mips64le, but not the public API. But since the currently used layout doesn't match the struct linux_dirent returned by the getdents syscall this should be fine as well. Fixes #23624 Change-Id: Iaa7306fa6e4442ad2fed41c60b37627a7314f117 Reviewed-on: https://go-review.googlesource.com/91055 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
2017-10-27syscall: simplify return in Futimesat and MountTobias Klauser
Directly return error instead of assigning to err and then returning. Change-Id: Ie5c466cac70cc6d52ee72ebba3e497e0da8a5797 Reviewed-on: https://go-review.googlesource.com/73531 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-10-26syscall: remove unnecessary use of unsafe.Pointer.Christopher Koch
Change-Id: I43b32fbca8761d33927e7d0541bba123df0e0122 Reviewed-on: https://go-review.googlesource.com/73556 Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-09-27syscall: make Exit call runtime.exitAlex Brainman
syscall.Exit and runtime.exit do the same thing. Why duplicate code? CL 45115 fixed bug where windows runtime.exit was correct, but syscall.Exit was broken. So CL 45115 fixed windows syscall.Exit by calling runtime.exit. Austin suggested that all OSes should do the same, and this CL implements his idea. While making changes, I discovered that nacl syscall.Exit returned error func Exit(code int) (err error) and I changed it into func Exit(code int) like all other OSes. I assumed it was a mistake and it is OK to do because cmd/api does not complain about it. Also I changed plan9 runtime.exit to accept int32 just like all other OSes do. Change-Id: I12f6022ad81406566cf9befcc6edc382eebd413b Reviewed-on: https://go-review.googlesource.com/66170 TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: David du Colombier <0intro@gmail.com>
2017-09-26syscall: allow abstract unix socket to use the full Path lenNicolas BRULEZ
The previous implementation forced all Unix socket to have a name strictly shorter than len(sa.raw.Path) to allow a terminating NULL byte to be added. This requirement does not apply to abstract socket names under Linux, so for this case we allow the full length. Fixes #21965 Change-Id: I1d1f58b6b6172d589428c7230cfeae984de78b4b Reviewed-on: https://go-review.googlesource.com/66190 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-08-29syscall: drop dummy byte for oob in unixgram SendmsgNLuca Bruno
This commit relaxes SendmsgN behavior of introducing a dummy 1-byte payload when sending ancillary-only messages. The fake payload is not needed for SOCK_DGRAM type sockets, and actually breaks interoperability with other fd-passing software (journald is one known example). This introduces an additional check to avoid injecting dummy payload in such case. Full reference at https:/golang.org/issue/6476#issue-51285243 Fixes #6476 Change-Id: I19a974b4e7920e002bd0556259ab766572358520 Reviewed-on: https://go-review.googlesource.com/45872 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-08-15syscall: add missing int flag argument to utimensatYuval Pavel Zholkover
Fixes #21437 Change-Id: I55fbf5114ae1bb7f4aa1a20450e8d5309756cd5b Reviewed-on: https://go-review.googlesource.com/55430 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-02-13syscall: delete the "use" function and calls in non-generated files.Sameer Ajmani
Delete use stub from asm.s, leaving only a dummy file. Deleting the file causes Windows build to fail. Fixes #16607 Change-Id: Ic5a55e042e588f1e1bc6605a3d309d1eabdeb288 Reviewed-on: https://go-review.googlesource.com/36716 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-11-08syscall: fix name of prlimit parametersBrad Fitzpatrick
Fixes #17606 Change-Id: I040c7621cef265d44b58f16556e6d58660a2245d Reviewed-on: https://go-review.googlesource.com/32889 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2016-09-20syscall: validate ParseDirent inputsDamien Neil
Don't panic, crash, or return references to uninitialized memory when ParseDirent is passed invalid input. Move common dirent parsing to syscall.go with minimal platform-specific functions in syscall_$GOOS.go. Fixes #15653 Change-Id: I5602475e02321fe381064488401c14b33bec6886 Reviewed-on: https://go-review.googlesource.com/23780 Run-TryBot: Damien Neil <dneil@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-03-02all: single space after period.Brad Fitzpatrick
The tree's pretty inconsistent about single space vs double space after a period in documentation. Make it consistently a single space, per earlier decisions. This means contributors won't be confused by misleading precedence. This CL doesn't use go/doc to parse. It only addresses // comments. It was generated with: $ perl -i -npe 's,^(\s*// .+[a-z]\.) +([A-Z]),$1 $2,' $(git grep -l -E '^\s*//(.+\.) +([A-Z])') $ go test go/doc -update Change-Id: Iccdb99c37c797ef1f804a94b22ba5ee4b500c4f7 Reviewed-on: https://go-review.googlesource.com/20022 Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Dave Day <djd@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-11-12syscall: added support for linux/mips64{,le}Yao Zhang
Syscall getdents64 is relatively new in linux/mips64, only since kernel version 3.10. To support older kernel, syscall getdents is used for mips64. Change-Id: I892b05dff7d93e7ddb0d700abd6a5e6d4084ab4c Reviewed-on: https://go-review.googlesource.com/14449 Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Minux Ma <minux@golang.org>
2015-10-30syscall: correct parameter name of Setgid on linuxMarvin Stenger
Change parameter name from uid to gid, to fix an obvious copy-paste error. Change-Id: Iba13a45c87fde9625b82976a7d7901af4b705230 Reviewed-on: https://go-review.googlesource.com/16474 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-05-09syscall: fix InotifyInit on linux/arm64Shenghou Ma
There is no SYS_INOTIFY_INIT on linux/arm64, only SYS_INOTIFY_INIT1. Change-Id: I97f430f2c2b910fb19dce495ff1adf591b8634fc Reviewed-on: https://go-review.googlesource.com/9870 Run-TryBot: Minux Ma <minux@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Dave Cheney <dave@cheney.net>
2015-03-26syscall: change Dup,Dup2,Dup3 to use Syscall, not RawSyscallIan Lance Taylor
This avoids hanging when a Go program uses a FUSE filesystem and the dup system call has to close a file descriptor. When dup uses RawSyscall then the goroutine calling dup will occupy a scheduler slot (a p structure) during the call, and may block waiting for some other goroutine to respond to the close call on the FUSE filesystem. Changing to Syscall avoids the problem. This makes Dup a tiny bit slower but is quite unlikely to make a difference for any real programs. Fixes #10202. Change-Id: If6490a8f9b3c9cfed6acbfb4bfd1eaeac62ced17 Reviewed-on: https://go-review.googlesource.com/8095 Reviewed-by: Rob Pike <r@golang.org>
2015-03-24syscall: use Getpgid to emulate Getpgrp on linuxShenghou Ma
Fixes newly introduced test on linux/arm64 because linux/arm64 doesn't have the getpgrp syscall. Getpgid(0) is documented to be equivalent to Getpgrp. Change-Id: I8f30f4f8de8c32fe04a29c9c4a9330d4e4e6b46d Signed-off-by: Shenghou Ma <minux@golang.org> Reviewed-on: https://go-review.googlesource.com/8022 Reviewed-by: Aram Hăvărneanu <aram@mgk.ro> Reviewed-by: Rob Pike <r@golang.org>
2015-02-26syscall: Reimplement linux syscalls in terms of their *at replacements.Dave Cheney
Updates #9974 This proposal tackles the body of syscalls which have been replaced, and are now deprecated in linux. This is needed for the arm64 port as arm64 is the first linux architecture to remove the "legacy" forms of these syscalls. The *AT variants were added in kernel 2.6.16, so well before our 2.6.23 cutoff (hey, it'll even work on RHEL5). Discussion: https://groups.google.com/forum/#!topic/golang-dev/zpeFtN2z5Fc Change-Id: I473a7c9a295d6f776fcdc75dcce06cbe9e3564ee Reviewed-on: https://go-review.googlesource.com/5837 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-02-25syscall: split implementation of Dup2 per linux GOOSDave Cheney
Updates #9974 This proposal moves the definition of Dup2 from the generic syscall_linux.go to the GOOS specific variants. This is in preparation for the arm64 port. For all existing platforms Dup2 is not affected. When arm64 is added we'll use either a forwarding method to Dup3 or //sysnb Dup2(oldfd int, newfd int) (err error) = SYS_DUP3 Because mksycall.pl does not sort symbols before generating the output file the diff includes some unavoidable code moves as Dup2 is processed latter in the run. Discussion: https://groups.google.com/forum/#!topic/golang-dev/zpeFtN2z5Fc Change-Id: Icdedf55bb29e749c4230e1ee371bf9d0bd0cfb38 Reviewed-on: https://go-review.googlesource.com/5835 Reviewed-by: Minux Ma <minux@golang.org> Run-TryBot: Dave Cheney <dave@cheney.net>
2015-02-25syscall: split implementation of Pipe/Pipe2 per GOOSDave Cheney
Updates #9974 This proposal moves the definition of Pipe an Pipe2 from the generic syscall_linux.go to the GOOS specific variants. This is in preparation for the arm64 port. For platforms where pipe2(2) is not supported in the minimum 2.6.23 kernel, amd64 and 386, we retain pipe(2). For all other platforms pipe(2) is removed and Pipe forwards to pipe2(2). Because mksycall.pl does not sort symbols before generating the output file the diff includes some unavoidable code moves as Pipe and Pipe2 are processed latter in the run. Discussion: https://groups.google.com/forum/#!topic/golang-dev/zpeFtN2z5Fc Change-Id: Ie26d6761eeb9760dbaff974ee8bc0d57a9ceaee4 Reviewed-on: https://go-review.googlesource.com/5833 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
2014-09-08syscall: keep allocated C string live across call to SyscallRuss Cox
Given: p := alloc() fn_taking_ptr(p) p is NOT recorded as live at the call to fn_taking_ptr: it's not needed by the code following the call. p was passed to fn_taking_ptr, and fn_taking_ptr must keep it alive as long as it needs it. In practice, fn_taking_ptr will keep its own arguments live for as long as the function is executing. But if instead you have: p := alloc() i := uintptr(unsafe.Pointer(p)) fn_taking_int(i) p is STILL NOT recorded as live at the call to fn_taking_int: it's not needed by the code following the call. fn_taking_int is responsible for keeping its own arguments live, but fn_taking_int is written to take an integer, so even though fn_taking_int does keep its argument live, that argument does not keep the allocated memory live, because the garbage collector does not dereference integers. The shorter form: p := alloc() fn_taking_int(uintptr(unsafe.Pointer(p))) and the even shorter form: fn_taking_int(uintptr(unsafe.Pointer(alloc()))) are both the same as the 3-line form above. syscall.Syscall is like fn_taking_int: it is written to take a list of integers, and yet those integers are sometimes pointers. If there is no other copy of those pointers being kept live, the memory they point at may be garbage collected during the call to syscall.Syscall. This is happening on Solaris: for whatever reason, the timing is such that the garbage collector manages to free the string argument to the open(2) system call before the system call has been invoked. Change the system call wrappers to insert explicit references that will keep the allocations alive in the original frame (and therefore preserve the memory) until after syscall.Syscall has returned. Should fix Solaris flakiness. This is not a problem for cgo, because cgo wrappers have correctly typed arguments. LGTM=iant, khr, aram, rlh R=iant, khr, bradfitz, aram, rlh CC=dvyukov, golang-codereviews, r https://golang.org/cl/139360044
2014-09-08build: move package sources from src/pkg to srcRuss Cox
Preparation was in CL 134570043. This CL contains only the effect of 'hg mv src/pkg/* src'. For more about the move, see golang.org/s/go14nopkg.