Improve system call support on NT

- Improve i/o perf on New Technology
- Code cleanup on read() for New Technology
- Fix bad bug with dup() of socket on New Technology
- Clean up some more strace errors on New Technology
This commit is contained in:
Justine Tunney 2022-04-07 20:30:04 -07:00
parent 29bf8b1a30
commit 4f98ad1054
79 changed files with 707 additions and 197 deletions

View file

@ -161,6 +161,8 @@ static struct InterruptibleCall g_fsgs_icall;
*/
int arch_prctl(int code, int64_t addr) {
void *fn = arch_prctl_fsgsbase;
#if 0
if (!g_fsgs_once) {
g_fsgs_once = true;
if (X86_HAVE(FSGSBASE)) {
@ -180,6 +182,8 @@ int arch_prctl(int code, int64_t addr) {
if (g_fsgs_once == 2) {
return arch_prctl_fsgsbase(code, addr);
}
#endif
switch (__hostos) {
case METAL:
return arch_prctl_msr(code, addr);

View file

@ -114,10 +114,12 @@ noasan static struct SymbolTable *GetSymbolTableFromElf(void) {
* @return symbol table, or NULL w/ errno on first call
*/
noasan struct SymbolTable *GetSymbolTable(void) {
int ft, st;
struct Zipos *z;
static struct SymbolTable *t;
if (!t) {
++g_ftrace;
ft = g_ftrace, g_ftrace = 0;
st = __strace, __strace = 0;
if (weaken(__zipos_get) && (z = weaken(__zipos_get)())) {
if ((t = GetSymbolTableFromZip(z))) {
t->names = (uint32_t *)((char *)t + t->names_offset);
@ -127,7 +129,8 @@ noasan struct SymbolTable *GetSymbolTable(void) {
if (!t) {
t = GetSymbolTableFromElf();
}
--g_ftrace;
g_ftrace = ft;
__strace = st;
}
return t;
}

View file

@ -22,7 +22,10 @@
#include "libc/nt/files.h"
#include "libc/nt/memory.h"
#include "libc/runtime/memtrack.internal.h"
#include "libc/sysv/consts/map.h"
#include "libc/sysv/consts/msync.h"
#include "libc/sysv/consts/o.h"
#include "libc/sysv/consts/prot.h"
#define ADDR(x) ((char *)((int64_t)((uint64_t)(x) << 32) >> 16))
@ -41,13 +44,7 @@ noasan textwindows int sys_msync_nt(char *addr, size_t size, int flags) {
rc = -1;
break;
}
if (flags & MS_SYNC) {
if (!FlushFileBuffers(_mmi.p[i].h)) {
// TODO(jart): what's up with this?
// rc = -1;
// break;
}
}
// TODO(jart): FlushFileBuffers too on g_fds handle if MS_SYNC?
} else {
break;
}