X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Fld-acess_src%2Fexports.c;h=7e13134bc6dd06f56b194d842fda58e54ada9518;hb=9d234f984c149fcc6b1f5aab21a0ca227c060e32;hp=957a86e5c0bf1ab25cc98542f0e0fb31b019cf8e;hpb=49fee999ebaa079cbd48a98edd2323f7b0bbb03c;p=tpg%2Facess2.git diff --git a/AcessNative/ld-acess_src/exports.c b/AcessNative/ld-acess_src/exports.c index 957a86e5..7e13134b 100644 --- a/AcessNative/ld-acess_src/exports.c +++ b/AcessNative/ld-acess_src/exports.c @@ -11,12 +11,11 @@ #include #include -#define DEBUG(v...) Debug(v) +#define DEBUG(v...) do{}while(0)//Debug(v) #define PAGE_SIZE 4096 typedef struct sFILE FILE; -extern FILE *stderr; extern void exit(int) __attribute__ ((noreturn)); extern int printf(const char *, ...); extern int fprintf(FILE *,const char *, ...); @@ -29,12 +28,16 @@ extern int giSyscall_ClientID; // Needed for execve extern void _InitSyscalls(void); extern void _CloseSyscalls(void); +extern void Warning(const char *Format, ...); extern void Debug(const char *Format, ...); extern int AllocateMemory(uintptr_t VirtAddr, size_t ByteCount); // === CONSTANTS === #define NATIVE_FILE_MASK 0x40000000 +// === GLOBALS === +int acess__errno; + // === CODE === // --- VFS Calls int acess_chdir(const char *Path) @@ -68,7 +71,7 @@ int acess_reopen(int FD, const char *Path, int Flags) { size_t acess_read(int FD, void *Dest, size_t Bytes) { if(FD & NATIVE_FILE_MASK) return native_read(FD & (NATIVE_FILE_MASK-1), Dest, Bytes); - if( FD > 2 ) +// if( FD > 2 ) DEBUG("read(0x%x, 0x%x, *%p)", FD, Bytes, Dest); return _Syscall(SYS_READ, ">i >i 2 ) +// if( FD > 2 ) DEBUG("write(0x%x, 0x%x, %p\"%.*s\")", FD, Bytes, Src, Bytes, (char*)Src); return _Syscall(SYS_WRITE, ">i >i >d", FD, Bytes, Bytes, Src); } @@ -92,6 +95,7 @@ int acess_seek(int FD, int64_t Ofs, int Dir) { uint64_t acess_tell(int FD) { if(FD & NATIVE_FILE_MASK) return native_tell( FD & (NATIVE_FILE_MASK-1) ); + DEBUG("tell(0x%x)", FD); return _Syscall(SYS_TELL, ">i", FD); } @@ -115,8 +119,8 @@ int acess_finfo(int fd, t_sysFInfo *info, int maxacls) { ); } -int acess_readdir(int fd, char *dest) { - DEBUG("readdir(%i, %p)", fd, dest); +int acess_SysReadDir(int fd, char *dest) { + DEBUG("SysReadDir(%i, %p)", fd, dest); return _Syscall(SYS_READDIR, ">i i >s >i", fd, name, flags); } int acess__SysGetACL(int fd, t_sysACL *dest) { + DEBUG("%s(0x%x, %p)", __func__, fd, dest); return _Syscall(SYS_GETACL, ">i s >s >s >s", Device, Directory, Type, Options); } @@ -169,10 +176,14 @@ uint64_t acess__SysAllocate(uint vaddr) // --- Process Management --- int acess_clone(int flags, void *stack) { + #ifdef __WIN32__ + Warning("Win32 does not support anything like fork(2), cannot emulate"); + exit(-1); + #else extern int fork(void); if(flags & CLONE_VM) { int ret, newID, kernel_tid=0; - printf("USERSIDE fork()\n"); + Debug("USERSIDE fork()"); newID = _Syscall(SYS_AN_FORK, "i i >d", DestTID, Length, Data); } -int acess_SysGetMessage(int *SourceTID, void *Data) +int acess_SysGetMessage(int *SourceTID, int BufLen, void *Data) { -// static __thread int lastlen = 1024; - int lastlen; - - lastlen = _Syscall(SYS_GETMSG, "i", Mask); } @@ -287,7 +300,7 @@ void acess__SysDebug(const char *Format, ...) va_start(args, Format); - printf("[_SysDebug %i]", giSyscall_ClientID); + printf("[_SysDebug %i] ", giSyscall_ClientID); vprintf(Format, args); printf("\n"); @@ -303,7 +316,7 @@ void acess__exit(int Status) // === Symbol List === -#define DEFSYM(name) {#name, acess_##name} +#define DEFSYM(name) {#name, &acess_##name} const tSym caBuiltinSymbols[] = { DEFSYM(_exit), @@ -317,7 +330,7 @@ const tSym caBuiltinSymbols[] = { DEFSYM(tell), DEFSYM(ioctl), DEFSYM(finfo), - DEFSYM(readdir), + DEFSYM(SysReadDir), DEFSYM(select), DEFSYM(_SysOpenChild), DEFSYM(_SysGetACL), @@ -339,7 +352,9 @@ const tSym caBuiltinSymbols[] = { DEFSYM(_SysAllocate), DEFSYM(_SysDebug), DEFSYM(_SysSetFaultHandler), - DEFSYM(_SysWaitEvent) + DEFSYM(_SysWaitEvent), + + DEFSYM(_errno) }; const int ciNumBuiltinSymbols = sizeof(caBuiltinSymbols)/sizeof(caBuiltinSymbols[0]);