sys_file.$O\
OFILES=$(RT0OFILES) $(LIBOFILES)
-HFILES=runtime.h
+OS_H=$(GOARCH)_$(GOOS).h
+HFILES=runtime.h $(OS_H_)
install: rt0 $(LIB)
cp $(RT0OFILES) $(GOROOT)/lib
%.$O: %.c
$(CC) $<
+sys_file.$O: sys_file.c $(OS_H)
+ $(CC) -D$(GOARCH)_$(GOOS) $<
+
%.$O: %.s
$(AS) $<
--- /dev/null
+// Copyright 2009 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.
+
+/*
+ * System structs for Darwin, amd64
+ */
+
+typedef uint32 dev_t;
+typedef uint64 ino_t;
+typedef uint16 mode_t;
+typedef uint16 nlink_t;
+typedef uint32 uid_t;
+typedef uint32 gid_t;
+typedef int64 off_t;
+typedef int32 blksize_t;
+typedef int64 blkcnt_t;
+typedef int64 time_t;
+
+struct timespec {
+ time_t tv_sec;
+ int64 tv_nsec;
+};
+
+struct stat { // really a stat64
+ dev_t st_dev;
+ mode_t st_mode;
+ nlink_t st_nlink;
+ ino_t st_ino;
+ uid_t st_uid;
+ gid_t st_gid;
+ dev_t st_rdev;
+ struct timespec st_atimespec;
+ struct timespec st_mtimespec;
+ struct timespec st_ctimespec;
+ struct timespec st_birthtimespec;
+ off_t st_size;
+ blkcnt_t st_blocks;
+ blksize_t st_blksize;
+ uint32 st_flags;
+ uint32 st_gen;
+ int64 st_qspare[2];
+};
--- /dev/null
+// Copyright 2009 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.
+
+/*
+ * System structs for Darwin, amd64
+ */
+
+typedef uint64 dev_t;
+typedef uint64 ino_t;
+typedef uint32 mode_t;
+typedef uint64 nlink_t;
+typedef uint32 uid_t;
+typedef uint32 gid_t;
+typedef int64 off_t;
+typedef int64 blksize_t;
+typedef int64 blkcnt_t;
+typedef int64 time_t;
+
+struct timespec {
+ time_t tv_sec;
+ int64 tv_nsec;
+};
+
+struct stat {
+ dev_t st_dev; /* ID of device containing file */
+ ino_t st_ino; /* inode number */
+ mode_t st_mode; /* protection */
+ nlink_t st_nlink; /* number of hard links */
+ uid_t st_uid; /* user ID of owner */
+ gid_t st_gid; /* group ID of owner */
+ dev_t st_rdev;
+ dev_t st_rdev; /* device ID (if special file) */
+ struct timespec st_atime; /* time of last access */
+ struct timespec st_mtime; /* time of last modification */
+ struct timespec st_ctime; /* time of last status change */
+ off_t st_size; /* total size, in bytes */
+ blkcnt_t st_blocks; /* number of blocks allocated */
+ blksize_t st_blksize; /* blocksize for filesystem I/O */
+};
TEXT open(SB),1,$-8
MOVQ 8(SP), DI
MOVL 16(SP), SI
- MOVL $5, AX // syscall entry
+ MOVQ $0, R10
+ MOVL $(0x2000000+5), AX // syscall entry
SYSCALL
RET
TEXT close(SB),1,$-8
MOVL 8(SP), DI
- MOVL $6, AX // syscall entry
+ MOVL $(0x2000000+6), AX // syscall entry
SYSCALL
RET
TEXT fstat(SB),1,$-8
MOVL 8(SP), DI
MOVQ 16(SP), SI
- MOVL $189, AX // syscall entry
+ MOVL $(0x2000000+339), AX // syscall entry; really fstat64
SYSCALL
RET
MOVL 8(SP), DI
MOVQ 16(SP), SI
MOVL 24(SP), DX
- MOVL $3, AX // syscall entry
+ MOVL $(0x2000000+3), AX // syscall entry
SYSCALL
RET
// license that can be found in the LICENSE file.
#include "runtime.h"
-
-typedef uint64 dev_t;
-typedef uint64 ino_t;
-typedef uint32 mode_t;
-typedef uint64 nlink_t;
-typedef uint32 uid_t;
-typedef uint32 gid_t;
-typedef int64 off_t;
-typedef int64 blksize_t;
-typedef int64 blkcnt_t;
-typedef int64 time_t;
-
-struct timespec {
- time_t tv_sec;
- int64 tv_nsec;
-};
-
-struct stat {
- dev_t st_dev; /* ID of device containing file */
- ino_t st_ino; /* inode number */
- nlink_t st_nlink; /* number of hard links */
- mode_t st_mode; /* protection */
- uid_t st_uid; /* user ID of owner */
- gid_t st_gid; /* group ID of owner */
- int32 pad0;
- dev_t st_rdev; /* device ID (if special file) */
- off_t st_size; /* total size, in bytes */
- blksize_t st_blksize; /* blocksize for filesystem I/O */
- blkcnt_t st_blocks; /* number of blocks allocated */
- struct timespec st_atime; /* time of last access */
- struct timespec st_mtime; /* time of last modification */
- struct timespec st_ctime; /* time of last status change */
-};
+#include "sys_structs.h"
void
sys·readfile(string filein, string fileout, bool okout)
--- /dev/null
+// Copyright 2009 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.
+
+#ifdef amd64_linux
+ #include "amd64_linux.h"
+#else
+ #ifdef amd64_darwin
+ #include "amd64_darwin.h"
+ #endif
+#else
+ You_need_to_write_the_syscall_header
+#endif