1
0
mirror of https://github.com/golang/go synced 2024-11-25 06:07:58 -07:00

make readfile work on darwin

parameterize the system interface a bit

SVN=124981
This commit is contained in:
Rob Pike 2008-06-26 15:26:27 -07:00
parent 2b8db5a439
commit 66b240c7a4
6 changed files with 107 additions and 38 deletions

View 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) $<

View File

@ -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];
};

40
src/runtime/amd64_linux.h Normal file
View File

@ -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 */
};

View 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

View 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)

13
src/runtime/sys_structs.h Normal file
View File

@ -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