mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-02 17:28:30 +00:00
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:
parent
29bf8b1a30
commit
4f98ad1054
79 changed files with 707 additions and 197 deletions
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue