Skip to content

Commit e985ba8

Browse files
Elias Naurbradfitz
authored andcommitted
syscall: avoid "64"-postfixed libSystem syscalls on iOS
The stat(2) man page contain this comment about the 64-bit versions of the system file functions: "Platforms that were released after these updates only have the newer variants available to them. These platforms have the macro _DARWIN_FEATURE_ONLY_64_BIT_INODE defined." It turns out that on iOS the _DARWIN_FEATURE_ONLY_64_BIT_INODE is defined and that even though the "64"-postfixed versions are accessible they are deemed private. Apps that refer to private API are not admissible on App Store, and after the Go runtime started using libSystem instead of direct syscalls, the App Store submission checks reject apps built with Go tip. The fix is simple: use the non-postfixed versions on iOS. getdirentries(2) is not changed; it is not available at all on iOS and needs replacement. Updates #28984 Change-Id: Icb8d44e271456acaa1913ba486fcf5b569722fa9 Reviewed-on: https://go-review.googlesource.com/c/151938 Run-TryBot: Elias Naur <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Keith Randall <[email protected]>
1 parent a37d95c commit e985ba8

13 files changed

+448
-430
lines changed

src/syscall/syscall_darwin.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -267,8 +267,6 @@ func Kill(pid int, signum Signal) (err error) { return kill(pid, int(signum), 1)
267267
//sys Fchown(fd int, uid int, gid int) (err error)
268268
//sys Flock(fd int, how int) (err error)
269269
//sys Fpathconf(fd int, name int) (val int, err error)
270-
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_fstat64
271-
//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_fstatfs64
272270
//sys Fsync(fd int) (err error)
273271
// Fsync is not called for os.File.Sync(). Please see internal/poll/fd_fsync_darwin.go
274272
//sys Ftruncate(fd int, length int64) (err error)
@@ -291,7 +289,6 @@ func Kill(pid int, signum Signal) (err error) { return kill(pid, int(signum), 1)
291289
//sys Lchown(path string, uid int, gid int) (err error)
292290
//sys Link(path string, link string) (err error)
293291
//sys Listen(s int, backlog int) (err error)
294-
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_lstat64
295292
//sys Mkdir(path string, mode uint32) (err error)
296293
//sys Mkfifo(path string, mode uint32) (err error)
297294
//sys Mknod(path string, mode uint32, dev int) (err error)
@@ -324,8 +321,6 @@ func Kill(pid int, signum Signal) (err error) { return kill(pid, int(signum), 1)
324321
//sysnb Setsid() (pid int, err error)
325322
//sysnb Settimeofday(tp *Timeval) (err error)
326323
//sysnb Setuid(uid int) (err error)
327-
//sys Stat(path string, stat *Stat_t) (err error) = SYS_stat64
328-
//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_statfs64
329324
//sys Symlink(path string, link string) (err error)
330325
//sys Sync() (err error)
331326
//sys Truncate(path string, length int64) (err error)
@@ -346,7 +341,6 @@ func Kill(pid int, signum Signal) (err error) { return kill(pid, int(signum), 1)
346341
//sys fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (val int, err error) = SYS_fcntl
347342
//sys unlinkat(fd int, path string, flags int) (err error)
348343
//sys openat(fd int, path string, flags int, perm uint32) (fdret int, err error)
349-
//sys fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_fstatat64
350344

351345
func init() {
352346
execveDarwin = execve

src/syscall/syscall_darwin_386.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ func setTimeval(sec, usec int64) Timeval {
1414
return Timeval{Sec: int32(sec), Usec: int32(usec)}
1515
}
1616

17+
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_fstat64
18+
//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_fstatfs64
1719
//sysnb Gettimeofday(tp *Timeval) (err error)
20+
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_lstat64
21+
//sys Stat(path string, stat *Stat_t) (err error) = SYS_stat64
22+
//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_statfs64
23+
//sys fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_fstatat64
1824

1925
func SetKevent(k *Kevent_t, fd, mode, flags int) {
2026
k.Ident = uint32(fd)

src/syscall/syscall_darwin_amd64.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ func setTimeval(sec, usec int64) Timeval {
1414
return Timeval{Sec: sec, Usec: int32(usec)}
1515
}
1616

17+
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_fstat64
18+
//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_fstatfs64
1719
//sysnb Gettimeofday(tp *Timeval) (err error)
20+
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_lstat64
21+
//sys Stat(path string, stat *Stat_t) (err error) = SYS_stat64
22+
//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_statfs64
23+
//sys fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_fstatat64
1824

1925
func SetKevent(k *Kevent_t, fd, mode, flags int) {
2026
k.Ident = uint64(fd)

src/syscall/syscall_darwin_arm.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ func setTimeval(sec, usec int64) Timeval {
1414
return Timeval{Sec: int32(sec), Usec: int32(usec)}
1515
}
1616

17+
//sys Fstat(fd int, stat *Stat_t) (err error)
18+
//sys Fstatfs(fd int, stat *Statfs_t) (err error)
1719
//sysnb Gettimeofday(tp *Timeval) (err error)
20+
//sys Lstat(path string, stat *Stat_t) (err error)
21+
//sys Stat(path string, stat *Stat_t) (err error)
22+
//sys Statfs(path string, stat *Statfs_t) (err error)
23+
//sys fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
1824

1925
func SetKevent(k *Kevent_t, fd, mode, flags int) {
2026
k.Ident = uint32(fd)

src/syscall/syscall_darwin_arm64.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ func setTimeval(sec, usec int64) Timeval {
1414
return Timeval{Sec: int64(sec), Usec: int32(usec)}
1515
}
1616

17+
//sys Fstat(fd int, stat *Stat_t) (err error)
18+
//sys Fstatfs(fd int, stat *Statfs_t) (err error)
1719
//sysnb Gettimeofday(tp *Timeval) (err error)
20+
//sys Lstat(path string, stat *Stat_t) (err error)
21+
//sys Stat(path string, stat *Stat_t) (err error)
22+
//sys Statfs(path string, stat *Statfs_t) (err error)
23+
//sys fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
1824

1925
func SetKevent(k *Kevent_t, fd, mode, flags int) {
2026
k.Ident = uint64(fd)

src/syscall/zsyscall_darwin_386.go

Lines changed: 94 additions & 94 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/syscall/zsyscall_darwin_386.s

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,6 @@ TEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0
9191
JMP libc_flock(SB)
9292
TEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0
9393
JMP libc_fpathconf(SB)
94-
TEXT ·libc_fstat64_trampoline(SB),NOSPLIT,$0-0
95-
JMP libc_fstat64(SB)
96-
TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0
97-
JMP libc_fstatfs64(SB)
9894
TEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0
9995
JMP libc_fsync(SB)
10096
TEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0
@@ -137,8 +133,6 @@ TEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0
137133
JMP libc_link(SB)
138134
TEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0
139135
JMP libc_listen(SB)
140-
TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0
141-
JMP libc_lstat64(SB)
142136
TEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0
143137
JMP libc_mkdir(SB)
144138
TEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0
@@ -203,10 +197,6 @@ TEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0
203197
JMP libc_settimeofday(SB)
204198
TEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0
205199
JMP libc_setuid(SB)
206-
TEXT ·libc_stat64_trampoline(SB),NOSPLIT,$0-0
207-
JMP libc_stat64(SB)
208-
TEXT ·libc_statfs64_trampoline(SB),NOSPLIT,$0-0
209-
JMP libc_statfs64(SB)
210200
TEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0
211201
JMP libc_symlink(SB)
212202
TEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0
@@ -243,7 +233,17 @@ TEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0
243233
JMP libc_unlinkat(SB)
244234
TEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0
245235
JMP libc_openat(SB)
246-
TEXT ·libc_fstatat64_trampoline(SB),NOSPLIT,$0-0
247-
JMP libc_fstatat64(SB)
236+
TEXT ·libc_fstat64_trampoline(SB),NOSPLIT,$0-0
237+
JMP libc_fstat64(SB)
238+
TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0
239+
JMP libc_fstatfs64(SB)
248240
TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0
249241
JMP libc_gettimeofday(SB)
242+
TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0
243+
JMP libc_lstat64(SB)
244+
TEXT ·libc_stat64_trampoline(SB),NOSPLIT,$0-0
245+
JMP libc_stat64(SB)
246+
TEXT ·libc_statfs64_trampoline(SB),NOSPLIT,$0-0
247+
JMP libc_statfs64(SB)
248+
TEXT ·libc_fstatat64_trampoline(SB),NOSPLIT,$0-0
249+
JMP libc_fstatat64(SB)

0 commit comments

Comments
 (0)