<> <> <> <> <> <> <<>> <> <> <> <> DIRECTORY ProcessorFace USING [GetProcessorType], UnixSysCalls, UnixSysCallExtensions, UnixTypes ; UnixSysCallsImpl: CEDAR PROGRAM IMPORTS ProcessorFace EXPORTS UnixSysCalls, UnixSysCallExtensions ~ { OPEN UnixSysCallExtensions, UnixTypes; <> <> <> <> <> <> <> <<>> <> <> <> <> Close: PUBLIC PROC [fd: FD] RETURNS [RES] ~ { close: PROC [fd: FD] RETURNS [RES] ~ TRUSTED MACHINE CODE { "XR_Close" }; RETURN[ close[fd] ]; }; <> <> <> <> <> <> <> FSync: PUBLIC PROC [fd: FD] RETURNS [RES] ~ { fsync: PROC [fd: FD] RETURNS [RES] ~ TRUSTED MACHINE CODE { "XR_FSync" }; RETURN[ fsync[fd] ]; }; <> <> <<>> GetDEnts: PUBLIC UNSAFE PROC [fd: FD, buf: CHARPtr, nBytes: INT] RETURNS [INT] ~ UNCHECKED { getdents: UNSAFE PROC [fd: FD, buf: CHARPtr, nBytes: INT] RETURNS [INT] ~ UNCHECKED MACHINE CODE { "XR_GetDEnts" }; RETURN[ getdents[fd, buf, nBytes] ]; }; <> GetDTableSize: PUBLIC PROC RETURNS [INT] ~ { getdtablesize: PROC RETURNS [INT] ~ TRUSTED MACHINE CODE { "XR_GetDTableSize" }; RETURN[ getdtablesize[] ]; }; GetDTableSize1: PUBLIC PROC [kind: FDKind] RETURNS [INT] ~ { GetDTableSize1Inner: PROC [kind: FDKind] RETURNS [INT] ~ TRUSTED MACHINE CODE { "XR_GetDTableSize1" }; RETURN[ GetDTableSize1Inner[kind] ]; }; <> <> <> <> <> <> <> <> GetTimeOfDay: PUBLIC UNSAFE PROC [tp: TimeValPtr, tzp: TimeZonePtr] RETURNS [RES] ~ UNCHECKED { gettimeofday: UNSAFE PROC [tp: TimeValPtr, tzp: TimeZonePtr] RETURNS [RES] ~ UNCHECKED MACHINE CODE { "XR_GetTimeOfDay" }; RETURN[ gettimeofday[tp, tzp] ]; }; <> LSeek: PUBLIC PROC [d: FD, offset: INT, whence: Whence] RETURNS [INT] ~ { lseek: PROC [d: FD, offset: INT, whence: Whence] RETURNS [INT] ~ TRUSTED MACHINE CODE { "XR_LSeek" }; RETURN[ lseek[d, offset, whence] ]; }; MMap: PUBLIC UNSAFE PROC [addr: RawVM, nbytes: CARD, prot: Protections, flags: MMapFlags, d: FD, offset: CARD] RETURNS [RES] ~ { <> mmap: PROC [addr: RawVM, nbytes: CARD, prot: Protections, flags: INT, d: FD, offset: CARD] RETURNS [RawVM] ~ TRUSTED MACHINE CODE { ".XR_MMap" -- the proc is really in , but the constants we need are in }; ConstructMMapFlags: PROC [shared, private, fixed: BOOL] RETURNS [INT] ~ TRUSTED MACHINE CODE { "+#define CONSTRUCT_MMAP_FLAGS(shared, private, fixed) ( ((word)(shared))*((word)(MAP_SHARED)) + ((word)(private))*((word)(MAP_PRIVATE)) + ((word)(fixed))*((word)(MAP_FIXED)))\n"; ".CONSTRUCT_MMAP_FLAGS"; }; RETURN[ IF mmap[addr, nbytes, prot, ConstructMMapFlags[shared: flags.shared, private: flags.private, fixed: flags.fixed], d, offset] = addr THEN success ELSE failure ]; }; MUnmap: PUBLIC UNSAFE PROC [addr: RawVM, nbytes: CARD] RETURNS [RES] ~ { munmap: PROC [addr: RawVM, nbytes: CARD] RETURNS [RES] ~ TRUSTED MACHINE CODE { "XR_MUnmap" }; RETURN[ munmap[addr, nbytes] ]; }; <> <<>> <> <> <> <> <> Open: PUBLIC PROC [path: CHARPtr, flags: FileFlags, mode: Mode] RETURNS [FD] ~ { open: PROC [path: CHARPtr, flags: FileFlags, mode: Mode] RETURNS [FD] ~ TRUSTED MACHINE CODE { "XR_Open" }; RETURN[ open[path, flags, mode] ]; }; <> <<>> <> <<>> <> Read: PUBLIC UNSAFE PROC [d: FD, buf: CHARPtr, nBytes: INT] RETURNS [INT] ~ UNCHECKED { read: UNSAFE PROC [d: FD, buf: CHARPtr, nBytes: INT] RETURNS [INT] ~ UNCHECKED MACHINE CODE { "XR_Read" }; RETURN[ read[d, buf, nBytes] ]; }; <> <> <