Commit 7906e311 authored by Russ Cox's avatar Russ Cox

syscall: force O_LARGEFILE in Linux open system call

Fixes #717.

R=adg, PeterGo
CC=golang-dev
https://golang.org/cl/1032041
parent 4aaddf8a
...@@ -100,30 +100,36 @@ _* | *_ | _) ...@@ -100,30 +100,36 @@ _* | *_ | _)
exit 1 exit 1
;; ;;
freebsd_386) freebsd_386)
mkerrors="$mkerrors -f -m32"
mksyscall="./mksyscall.sh -l32" mksyscall="./mksyscall.sh -l32"
mksysnum="./mksysnum_freebsd.sh /usr/src/sys/kern/syscalls.master" mksysnum="./mksysnum_freebsd.sh /usr/src/sys/kern/syscalls.master"
mktypes="godefs -gsyscall -f-m32" mktypes="godefs -gsyscall -f-m32"
;; ;;
freebsd_amd64) freebsd_amd64)
mkerrors="$mkerrors -f -m64"
mksysnum="./mksysnum_freebsd.sh /usr/src/sys/kern/syscalls.master" mksysnum="./mksysnum_freebsd.sh /usr/src/sys/kern/syscalls.master"
mktypes="godefs -gsyscall -f-m64" mktypes="godefs -gsyscall -f-m64"
;; ;;
darwin_386) darwin_386)
mkerrors="$mkerrors -f -m32"
mksyscall="./mksyscall.sh -l32" mksyscall="./mksyscall.sh -l32"
mksysnum="./mksysnum_darwin.sh /home/rsc/pub/xnu-1228/bsd/kern/syscalls.master" mksysnum="./mksysnum_darwin.sh /home/rsc/pub/xnu-1228/bsd/kern/syscalls.master"
mktypes="godefs -gsyscall -f-m32" mktypes="godefs -gsyscall -f-m32"
;; ;;
darwin_amd64) darwin_amd64)
mkerrors="$mkerrors -f -m64"
mksysnum="./mksysnum_darwin.sh /home/rsc/pub/xnu-1228/bsd/kern/syscalls.master" mksysnum="./mksysnum_darwin.sh /home/rsc/pub/xnu-1228/bsd/kern/syscalls.master"
mktypes="godefs -gsyscall -f-m64" mktypes="godefs -gsyscall -f-m64"
mkerrors="./mkerrors.sh" mkerrors="./mkerrors.sh"
;; ;;
linux_386) linux_386)
mkerrors="$mkerrors -f -m32"
mksyscall="./mksyscall.sh -l32" mksyscall="./mksyscall.sh -l32"
mksysnum="./mksysnum_linux.sh /usr/include/asm/unistd_32.h" mksysnum="./mksysnum_linux.sh /usr/include/asm/unistd_32.h"
mktypes="godefs -gsyscall -f-m32" mktypes="godefs -gsyscall -f-m32"
;; ;;
linux_amd64) linux_amd64)
mkerrors="$mkerrors -f -m64"
mksysnum="./mksysnum_linux.sh /usr/include/asm/unistd_64.h" mksysnum="./mksysnum_linux.sh /usr/include/asm/unistd_64.h"
mktypes="godefs -gsyscall -f-m64" mktypes="godefs -gsyscall -f-m64"
;; ;;
......
...@@ -61,6 +61,18 @@ includes=' ...@@ -61,6 +61,18 @@ includes='
#include <signal.h> #include <signal.h>
' '
ccflags=""
next=false
for i
do
if $next; then
ccflags="$ccflags $i"
next=false
elif [ "$i" = "-f" ]; then
next=true
fi
done
# Write godefs input. # Write godefs input.
( (
indirect="includes_$(uname)" indirect="includes_$(uname)"
...@@ -70,7 +82,7 @@ includes=' ...@@ -70,7 +82,7 @@ includes='
# The gcc command line prints all the #defines # The gcc command line prints all the #defines
# it encounters while processing the input # it encounters while processing the input
echo "${!indirect} $includes" | $GCC -x c - -E -dM | echo "${!indirect} $includes" | $GCC -x c - -E -dM $ccflags |
awk ' awk '
$1 != "#define" || $2 ~ /\(/ {next} $1 != "#define" || $2 ~ /\(/ {next}
...@@ -94,7 +106,7 @@ includes=' ...@@ -94,7 +106,7 @@ includes='
# Pull out just the error names for later. # Pull out just the error names for later.
errors=$( errors=$(
echo '#include <errno.h>' | $GCC -x c - -E -dM | echo '#include <errno.h>' | $GCC -x c - -E -dM $ccflags |
awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' | awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' |
sort sort
) )
...@@ -102,7 +114,7 @@ errors=$( ...@@ -102,7 +114,7 @@ errors=$(
echo '// mkerrors.sh' "$@" echo '// mkerrors.sh' "$@"
echo '// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT' echo '// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT'
echo echo
godefs -gsyscall "$@" _const.c godefs "$@" -gsyscall "$@" _const.c
# Run C program to print error strings. # Run C program to print error strings.
( (
...@@ -155,4 +167,4 @@ main(void) ...@@ -155,4 +167,4 @@ main(void)
' '
) >_errors.c ) >_errors.c
gcc -o _errors _errors.c && ./_errors && rm -f _errors.c _errors _const.c gcc $ccflags -o _errors _errors.c && ./_errors && rm -f _errors.c _errors _const.c
...@@ -19,6 +19,11 @@ const OS = "linux" ...@@ -19,6 +19,11 @@ const OS = "linux"
* Wrapped * Wrapped
*/ */
//sys open(path string, mode int, perm int) (fd int, errno int)
func Open(path string, mode int, perm int) (fd int, errno int) {
return open(path, mode|O_LARGEFILE, perm)
}
//sys pipe(p *[2]_C_int) (errno int) //sys pipe(p *[2]_C_int) (errno int)
func Pipe(p []int) (errno int) { func Pipe(p []int) (errno int) {
if len(p) != 2 { if len(p) != 2 {
...@@ -576,7 +581,6 @@ func PtraceDetach(pid int) (errno int) { return ptrace(PTRACE_DETACH, pid, 0, 0) ...@@ -576,7 +581,6 @@ func PtraceDetach(pid int) (errno int) { return ptrace(PTRACE_DETACH, pid, 0, 0)
//sys Mknod(path string, mode int, dev int) (errno int) //sys Mknod(path string, mode int, dev int) (errno int)
//sys Mknodat(dirfd int, path string, mode int, dev int) (errno int) //sys Mknodat(dirfd int, path string, mode int, dev int) (errno int)
//sys Nanosleep(time *Timespec, leftover *Timespec) (errno int) //sys Nanosleep(time *Timespec, leftover *Timespec) (errno int)
//sys Open(path string, mode int, perm int) (fd int, errno int)
//sys Openat(dirfd int, path string, flags int, mode int) (fd int, errno int) //sys Openat(dirfd int, path string, flags int, mode int) (fd int, errno int)
//sys Pause() (errno int) //sys Pause() (errno int)
//sys PivotRoot(newroot string, putold string) (errno int) = SYS_PIVOT_ROOT //sys PivotRoot(newroot string, putold string) (errno int) = SYS_PIVOT_ROOT
......
// mkerrors.sh // mkerrors.sh -f -m32
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT // MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
// godefs -gsyscall _const.c // godefs -f -m32 -gsyscall -f -m32 _const.c
// MACHINE GENERATED - DO NOT EDIT. // MACHINE GENERATED - DO NOT EDIT.
...@@ -49,6 +49,7 @@ const ( ...@@ -49,6 +49,7 @@ const (
EAFNOSUPPORT = 0x61 EAFNOSUPPORT = 0x61
EAGAIN = 0xb EAGAIN = 0xb
EALREADY = 0x72 EALREADY = 0x72
EAX = 0x6
EBADE = 0x34 EBADE = 0x34
EBADF = 0x9 EBADF = 0x9
EBADFD = 0x4d EBADFD = 0x4d
...@@ -57,7 +58,9 @@ const ( ...@@ -57,7 +58,9 @@ const (
EBADRQC = 0x38 EBADRQC = 0x38
EBADSLT = 0x39 EBADSLT = 0x39
EBFONT = 0x3b EBFONT = 0x3b
EBP = 0x5
EBUSY = 0x10 EBUSY = 0x10
EBX = 0
ECANCELED = 0x7d ECANCELED = 0x7d
ECHILD = 0xa ECHILD = 0xa
ECHRNG = 0x2c ECHRNG = 0x2c
...@@ -65,15 +68,19 @@ const ( ...@@ -65,15 +68,19 @@ const (
ECONNABORTED = 0x67 ECONNABORTED = 0x67
ECONNREFUSED = 0x6f ECONNREFUSED = 0x6f
ECONNRESET = 0x68 ECONNRESET = 0x68
ECX = 0x1
EDEADLK = 0x23 EDEADLK = 0x23
EDEADLOCK = 0x23 EDEADLOCK = 0x23
EDESTADDRREQ = 0x59 EDESTADDRREQ = 0x59
EDI = 0x4
EDOM = 0x21 EDOM = 0x21
EDOTDOT = 0x49 EDOTDOT = 0x49
EDQUOT = 0x7a EDQUOT = 0x7a
EDX = 0x2
EEXIST = 0x11 EEXIST = 0x11
EFAULT = 0xe EFAULT = 0xe
EFBIG = 0x1b EFBIG = 0x1b
EFL = 0xe
EHOSTDOWN = 0x70 EHOSTDOWN = 0x70
EHOSTUNREACH = 0x71 EHOSTUNREACH = 0x71
EIDRM = 0x2b EIDRM = 0x2b
...@@ -82,6 +89,7 @@ const ( ...@@ -82,6 +89,7 @@ const (
EINTR = 0x4 EINTR = 0x4
EINVAL = 0x16 EINVAL = 0x16
EIO = 0x5 EIO = 0x5
EIP = 0xc
EISCONN = 0x6a EISCONN = 0x6a
EISDIR = 0x15 EISDIR = 0x15
EISNAM = 0x78 EISNAM = 0x78
...@@ -172,7 +180,9 @@ const ( ...@@ -172,7 +180,9 @@ const (
EREMOTEIO = 0x79 EREMOTEIO = 0x79
ERESTART = 0x55 ERESTART = 0x55
EROFS = 0x1e EROFS = 0x1e
ES = 0x8
ESHUTDOWN = 0x6c ESHUTDOWN = 0x6c
ESI = 0x3
ESOCKTNOSUPPORT = 0x5e ESOCKTNOSUPPORT = 0x5e
ESPIPE = 0x1d ESPIPE = 0x1d
ESRCH = 0x3 ESRCH = 0x3
...@@ -198,8 +208,8 @@ const ( ...@@ -198,8 +208,8 @@ const (
F_GETFD = 0x1 F_GETFD = 0x1
F_GETFL = 0x3 F_GETFL = 0x3
F_GETLEASE = 0x401 F_GETLEASE = 0x401
F_GETLK = 0x5 F_GETLK = 0xc
F_GETLK64 = 0x5 F_GETLK64 = 0xc
F_GETOWN = 0x9 F_GETOWN = 0x9
F_GETSIG = 0xb F_GETSIG = 0xb
F_LOCK = 0x1 F_LOCK = 0x1
...@@ -209,10 +219,10 @@ const ( ...@@ -209,10 +219,10 @@ const (
F_SETFD = 0x2 F_SETFD = 0x2
F_SETFL = 0x4 F_SETFL = 0x4
F_SETLEASE = 0x400 F_SETLEASE = 0x400
F_SETLK = 0x6 F_SETLK = 0xd
F_SETLK64 = 0x6 F_SETLK64 = 0xd
F_SETLKW = 0x7 F_SETLKW = 0xe
F_SETLKW64 = 0x7 F_SETLKW64 = 0xe
F_SETOWN = 0x8 F_SETOWN = 0x8
F_SETSIG = 0xa F_SETSIG = 0xa
F_SHLCK = 0x8 F_SHLCK = 0x8
...@@ -344,7 +354,7 @@ const ( ...@@ -344,7 +354,7 @@ const (
O_DSYNC = 0x1000 O_DSYNC = 0x1000
O_EXCL = 0x80 O_EXCL = 0x80
O_FSYNC = 0x1000 O_FSYNC = 0x1000
O_LARGEFILE = 0 O_LARGEFILE = 0x8000
O_NDELAY = 0x800 O_NDELAY = 0x800
O_NOATIME = 0x40000 O_NOATIME = 0x40000
O_NOCTTY = 0x100 O_NOCTTY = 0x100
...@@ -356,7 +366,6 @@ const ( ...@@ -356,7 +366,6 @@ const (
O_SYNC = 0x1000 O_SYNC = 0x1000
O_TRUNC = 0x200 O_TRUNC = 0x200
O_WRONLY = 0x1 O_WRONLY = 0x1
PTRACE_ARCH_PRCTL = 0x1e
PTRACE_ATTACH = 0x10 PTRACE_ATTACH = 0x10
PTRACE_CONT = 0x7 PTRACE_CONT = 0x7
PTRACE_DETACH = 0x11 PTRACE_DETACH = 0x11
...@@ -396,6 +405,8 @@ const ( ...@@ -396,6 +405,8 @@ const (
PTRACE_SET_THREAD_AREA = 0x1a PTRACE_SET_THREAD_AREA = 0x1a
PTRACE_SINGLESTEP = 0x9 PTRACE_SINGLESTEP = 0x9
PTRACE_SYSCALL = 0x18 PTRACE_SYSCALL = 0x18
PTRACE_SYSEMU = 0x1f
PTRACE_SYSEMU_SINGLESTEP = 0x20
PTRACE_TRACEME = 0 PTRACE_TRACEME = 0
SHUT_RD = 0 SHUT_RD = 0
SHUT_RDWR = 0x2 SHUT_RDWR = 0x2
...@@ -540,7 +551,7 @@ const ( ...@@ -540,7 +551,7 @@ const (
WNOHANG = 0x1 WNOHANG = 0x1
WNOTHREAD = 0x20000000 WNOTHREAD = 0x20000000
WNOWAIT = 0x1000000 WNOWAIT = 0x1000000
WORDSIZE = 0x40 WORDSIZE = 0x20
WSTOPPED = 0x2 WSTOPPED = 0x2
WUNTRACED = 0x2 WUNTRACED = 0x2
) )
......
// mkerrors.sh // mkerrors.sh -f -m64
// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT // MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
// godefs -gsyscall _const.c // godefs -f -m64 -gsyscall -f -m64 _const.c
// MACHINE GENERATED - DO NOT EDIT. // MACHINE GENERATED - DO NOT EDIT.
......
...@@ -5,6 +5,13 @@ package syscall ...@@ -5,6 +5,13 @@ package syscall
import "unsafe" import "unsafe"
func open(path string, mode int, perm int) (fd int, errno int) {
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(mode), uintptr(perm))
fd = int(r0)
errno = int(e1)
return
}
func pipe(p *[2]_C_int) (errno int) { func pipe(p *[2]_C_int) (errno int) {
_, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) _, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
errno = int(e1) errno = int(e1)
...@@ -314,13 +321,6 @@ func Nanosleep(time *Timespec, leftover *Timespec) (errno int) { ...@@ -314,13 +321,6 @@ func Nanosleep(time *Timespec, leftover *Timespec) (errno int) {
return return
} }
func Open(path string, mode int, perm int) (fd int, errno int) {
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(mode), uintptr(perm))
fd = int(r0)
errno = int(e1)
return
}
func Openat(dirfd int, path string, flags int, mode int) (fd int, errno int) { func Openat(dirfd int, path string, flags int, mode int) (fd int, errno int) {
r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(flags), uintptr(mode), 0, 0) r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(flags), uintptr(mode), 0, 0)
fd = int(r0) fd = int(r0)
......
...@@ -5,6 +5,13 @@ package syscall ...@@ -5,6 +5,13 @@ package syscall
import "unsafe" import "unsafe"
func open(path string, mode int, perm int) (fd int, errno int) {
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(mode), uintptr(perm))
fd = int(r0)
errno = int(e1)
return
}
func pipe(p *[2]_C_int) (errno int) { func pipe(p *[2]_C_int) (errno int) {
_, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) _, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
errno = int(e1) errno = int(e1)
...@@ -314,13 +321,6 @@ func Nanosleep(time *Timespec, leftover *Timespec) (errno int) { ...@@ -314,13 +321,6 @@ func Nanosleep(time *Timespec, leftover *Timespec) (errno int) {
return return
} }
func Open(path string, mode int, perm int) (fd int, errno int) {
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(mode), uintptr(perm))
fd = int(r0)
errno = int(e1)
return
}
func Openat(dirfd int, path string, flags int, mode int) (fd int, errno int) { func Openat(dirfd int, path string, flags int, mode int) (fd int, errno int) {
r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(flags), uintptr(mode), 0, 0) r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(flags), uintptr(mode), 0, 0)
fd = int(r0) fd = int(r0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment