diff --git a/ape/ape.S b/ape/ape.S index 480953974..6dd6e08e2 100644 --- a/ape/ape.S +++ b/ape/ape.S @@ -730,7 +730,7 @@ ape.macho: / ││││││││││┌5:HIGH_ENTROPY_VA / │││││││││││rrrrr .LDLLSTD = 0b0000000100100000 -.LDLLPIE = 0b0000000001000000 +.LDLLPIE = 0b0000000001100000 .LDLLEXE = .LDLLSTD / ┌31:Writeable ┌─────────────────────────┐ diff --git a/libc/nt/memory.h b/libc/nt/memory.h index b8dfe3e91..391ac328c 100644 --- a/libc/nt/memory.h +++ b/libc/nt/memory.h @@ -29,7 +29,7 @@ │ cosmopolitan § new technology » memory ─╬─│┼ ╚────────────────────────────────────────────────────────────────────────────│*/ -#define kNtNumaNoPreferredNode 0xffffffff +#define kNtNumaNoPreferredNode 0xffffffffu #if !(__ASSEMBLER__ + __LINKER__ + 0) COSMOPOLITAN_C_START_ diff --git a/libc/runtime/memtrack.h b/libc/runtime/memtrack.h index 40c734f88..0d1d8cce4 100644 --- a/libc/runtime/memtrack.h +++ b/libc/runtime/memtrack.h @@ -1,13 +1,26 @@ #ifndef COSMOPOLITAN_LIBC_RUNTIME_MEMTRACK_H_ #define COSMOPOLITAN_LIBC_RUNTIME_MEMTRACK_H_ +#include "libc/dce.h" #include "libc/macros.h" +#include "libc/nt/enum/version.h" +#include "libc/nt/struct/teb.h" #include "libc/runtime/runtime.h" #if !(__ASSEMBLER__ + __LINKER__ + 0) COSMOPOLITAN_C_START_ -#define kAutomapStart 0x0000100080000000 // asan can't spread its poison here -#define kAutomapSize 0x00000fff80000000 -#define kFixedmapStart 0x0000200000000000 +#define _kAutomapStart 0x0000100080000000 // asan can't spread its poison here +#define _kAutomapSize 0x00000fff80000000 +#define _kFixedmapStart 0x0000200000000000 + +/* + * TODO: Why can't we allocate addresses above 4GB on Windows 7 x64? + * https://github.com/jart/cosmopolitan/issues/19 + */ +#define MEMTRACK_ADDRESS(NORMAL, WIN7) \ + (!(IsWindows() && NtGetVersion() < kNtVersionWindows10) ? NORMAL : WIN7) +#define kAutomapStart MEMTRACK_ADDRESS(_kAutomapStart, 0x10000000) +#define kAutomapSize MEMTRACK_ADDRESS(_kAutomapSize, 0x40000000) +#define kFixedmapStart MEMTRACK_ADDRESS(_kFixedmapStart, 0x40000000) struct MemoryIntervals { int i; diff --git a/libc/runtime/winmain.greg.c b/libc/runtime/winmain.greg.c index 4554bd16e..a7b16e07f 100644 --- a/libc/runtime/winmain.greg.c +++ b/libc/runtime/winmain.greg.c @@ -43,6 +43,12 @@ #include "libc/sysv/consts/map.h" #include "libc/sysv/consts/prot.h" +/* + * TODO: Why can't we allocate addresses above 4GB on Windows 7 x64? + * https://github.com/jart/cosmopolitan/issues/19 + */ +#define ADDRESS 0x77700000 /*0000*/ + struct WinArgs { char *argv[512]; char *envp[512]; @@ -128,7 +134,7 @@ static textwindows wontreturn void WinMainNew(void) { NormalizeCmdExe(); *(/*unconst*/ int *)&__hostos = WINDOWS; size = ROUNDUP(STACKSIZE + sizeof(struct WinArgs), FRAMESIZE); - data = (intptr_t)AllocateMemory((char *)0x777000000000, size, &_mmi.p[0].h); + data = (intptr_t)AllocateMemory((char *)ADDRESS, size, &_mmi.p[0].h); _mmi.p[0].x = data >> 16; _mmi.p[0].y = (data >> 16) + ((size >> 16) - 1); _mmi.p[0].prot = PROT_READ | PROT_WRITE;