]> Cypherpunks repositories - gostls13.git/commitdiff
make readfile work on darwin
authorRob Pike <r@golang.org>
Thu, 26 Jun 2008 22:26:27 +0000 (15:26 -0700)
committerRob Pike <r@golang.org>
Thu, 26 Jun 2008 22:26:27 +0000 (15:26 -0700)
parameterize the system interface a bit

SVN=124981

src/runtime/Makefile
src/runtime/amd64_darwin.h [new file with mode: 0644]
src/runtime/amd64_linux.h [new file with mode: 0644]
src/runtime/rt0_amd64_darwin.s
src/runtime/sys_file.c
src/runtime/sys_structs.h [new file with mode: 0644]

index cc1e8c2ea417f88d6389eadb93f5e3f02befce75..d555132f46a5350dca481065d461aa275644875a 100644 (file)
@@ -19,7 +19,8 @@ LIBOFILES=\
        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
@@ -38,5 +39,8 @@ clean:
 %.$O:  %.c
        $(CC) $<
 
+sys_file.$O:   sys_file.c $(OS_H)
+       $(CC) -D$(GOARCH)_$(GOOS) $<
+
 %.$O:  %.s
        $(AS) $<
diff --git a/src/runtime/amd64_darwin.h b/src/runtime/amd64_darwin.h
new file mode 100644 (file)
index 0000000..4bb906b
--- /dev/null
@@ -0,0 +1,43 @@
+// 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];
+};
diff --git a/src/runtime/amd64_linux.h b/src/runtime/amd64_linux.h
new file mode 100644 (file)
index 0000000..afabf6a
--- /dev/null
@@ -0,0 +1,40 @@
+// 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 */
+};
index ad2e70843b5a39815e927027a440d996460d3dc6..fda8ce7d707decbede9a972d7e0b4b3e1c0b0d72 100644 (file)
@@ -60,20 +60,21 @@ TEXT        sys·write(SB),1,$-8
 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
 
@@ -81,7 +82,7 @@ TEXT  read(SB),1,$-8
        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
 
index 80dec3da801599aa2b5f5ba71977b52b6a1cffa2..c4994947d841a13259dd45742912ddea8f75ffd9 100644 (file)
@@ -3,39 +3,7 @@
 // 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)
diff --git a/src/runtime/sys_structs.h b/src/runtime/sys_structs.h
new file mode 100644 (file)
index 0000000..117fae2
--- /dev/null
@@ -0,0 +1,13 @@
+// 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