From 101fb3d9b3250759f383c9e6fe86460f10ee499c Mon Sep 17 00:00:00 2001 From: Justine Tunney Date: Fri, 19 Jul 2024 22:26:49 -0700 Subject: [PATCH] Make some new Windows 10 memory APIs available --- .../MapViewOfFile3.S | 2 +- .../VirtualAlloc2.S | 2 +- libc/nt/BUILD.mk | 21 +++++++++++++++++++ libc/nt/enum/memflags.h | 1 + libc/nt/master.sh | 8 +++++-- 5 files changed, 30 insertions(+), 4 deletions(-) rename libc/nt/{kernel32 => API-MS-Win-Core-Memory-l1-1-6}/MapViewOfFile3.S (79%) rename libc/nt/{kernel32 => API-MS-Win-Core-Memory-l1-1-6}/VirtualAlloc2.S (79%) diff --git a/libc/nt/kernel32/MapViewOfFile3.S b/libc/nt/API-MS-Win-Core-Memory-l1-1-6/MapViewOfFile3.S similarity index 79% rename from libc/nt/kernel32/MapViewOfFile3.S rename to libc/nt/API-MS-Win-Core-Memory-l1-1-6/MapViewOfFile3.S index 2b242dfd3..059fe827c 100644 --- a/libc/nt/kernel32/MapViewOfFile3.S +++ b/libc/nt/API-MS-Win-Core-Memory-l1-1-6/MapViewOfFile3.S @@ -1,5 +1,5 @@ #include "libc/nt/codegen.h" -.imp kernel32,__imp_MapViewOfFile3,MapViewOfFile3 +.imp API-MS-Win-Core-Memory-l1-1-6,__imp_MapViewOfFile3,MapViewOfFile3 .text.windows .ftrace1 diff --git a/libc/nt/kernel32/VirtualAlloc2.S b/libc/nt/API-MS-Win-Core-Memory-l1-1-6/VirtualAlloc2.S similarity index 79% rename from libc/nt/kernel32/VirtualAlloc2.S rename to libc/nt/API-MS-Win-Core-Memory-l1-1-6/VirtualAlloc2.S index 77b2af26c..755aafb20 100644 --- a/libc/nt/kernel32/VirtualAlloc2.S +++ b/libc/nt/API-MS-Win-Core-Memory-l1-1-6/VirtualAlloc2.S @@ -1,5 +1,5 @@ #include "libc/nt/codegen.h" -.imp kernel32,__imp_VirtualAlloc2,VirtualAlloc2 +.imp API-MS-Win-Core-Memory-l1-1-6,__imp_VirtualAlloc2,VirtualAlloc2 .text.windows .ftrace1 diff --git a/libc/nt/BUILD.mk b/libc/nt/BUILD.mk index feaa79e24..f6bd28be4 100644 --- a/libc/nt/BUILD.mk +++ b/libc/nt/BUILD.mk @@ -158,6 +158,27 @@ $(LIBC_NT_SYNCHRONIZATION_A).pkg: \ #─────────────────────────────────────────────────────────────────────────────── +LIBC_NT_ARTIFACTS += LIBC_NT_MEMORY_A +LIBC_NT_MEMORY = $(LIBC_NT_MEMORY_A_DEPS) $(LIBC_NT_MEMORY_A) +LIBC_NT_MEMORY_A = o/$(MODE)/libc/nt/memory.a +LIBC_NT_MEMORY_A_SRCS := $(wildcard libc/nt/API-MS-Win-Core-Memory-l1-1-6/*.S) +LIBC_NT_MEMORY_A_OBJS = $(LIBC_NT_MEMORY_A_SRCS:%.S=o/$(MODE)/%.o) +LIBC_NT_MEMORY_A_CHECKS = $(LIBC_NT_MEMORY_A).pkg +LIBC_NT_MEMORY_A_DIRECTDEPS = LIBC_NT_KERNEL32 +LIBC_NT_MEMORY_A_DEPS := \ + $(call uniq,$(foreach x,$(LIBC_NT_MEMORY_A_DIRECTDEPS),$($(x)))) + +$(LIBC_NT_MEMORY_A): \ + libc/nt/API-MS-Win-Core-Memory-l1-1-6/ \ + $(LIBC_NT_MEMORY_A).pkg \ + $(LIBC_NT_MEMORY_A_OBJS) + +$(LIBC_NT_MEMORY_A).pkg: \ + $(LIBC_NT_MEMORY_A_OBJS) \ + $(foreach x,$(LIBC_NT_MEMORY_A_DIRECTDEPS),$($(x)_A).pkg) + +#─────────────────────────────────────────────────────────────────────────────── + LIBC_NT_ARTIFACTS += LIBC_NT_USER32_A LIBC_NT_USER32 = $(LIBC_NT_USER32_A_DEPS) $(LIBC_NT_USER32_A) LIBC_NT_USER32_A = o/$(MODE)/libc/nt/user32.a diff --git a/libc/nt/enum/memflags.h b/libc/nt/enum/memflags.h index fffb09ef9..7d7f11f61 100644 --- a/libc/nt/enum/memflags.h +++ b/libc/nt/enum/memflags.h @@ -16,6 +16,7 @@ #define kNtMemLargePages 0x20000000 #define kNtMem4mbPages 0x80000000 +#define kNtMemReservePlaceholder 0x00040000 #define kNtMemReplacePlaceholder 0x00004000 #endif /* COSMOPOLITAN_LIBC_NT_ENUM_MEMFLAGS_H_ */ diff --git a/libc/nt/master.sh b/libc/nt/master.sh index 21a07cdcd..4f44cc057 100755 --- a/libc/nt/master.sh +++ b/libc/nt/master.sh @@ -205,7 +205,6 @@ imp 'LoadResource' LoadResource kernel32 2 imp 'LocalFree' LocalFree kernel32 1 imp 'LockFile' LockFile kernel32 5 imp 'LockResource' LockResource kernel32 1 -imp 'MapViewOfFile3' MapViewOfFile3 kernel32 9 imp 'MoveFile' MoveFileW kernel32 2 imp 'MultiByteToWideChar' MultiByteToWideChar kernel32 6 imp 'OfferVirtualMemory' OfferVirtualMemory kernel32 3 @@ -296,7 +295,6 @@ imp 'UnmapViewOfFile2' UnmapViewOfFile2 kernel32 2 imp 'UnmapViewOfFileEx' UnmapViewOfFileEx kernel32 3 imp 'UpdateProcThreadAttribute' UpdateProcThreadAttribute kernel32 7 imp 'VirtualAlloc' VirtualAlloc kernel32 4 -imp 'VirtualAlloc2' VirtualAlloc2 kernel32 7 imp 'VirtualAllocEx' VirtualAllocEx kernel32 5 imp 'VirtualFree' VirtualFree kernel32 3 imp 'VirtualLock' VirtualLock kernel32 2 @@ -629,6 +627,12 @@ imp 'WaitOnAddress' WaitOnAddress API-MS-Win-Core-Synch-l1-2-0 4 imp 'WakeByAddressAll' WakeByAddressAll API-MS-Win-Core-Synch-l1-2-0 1 imp 'WakeByAddressSingle' WakeByAddressSingle API-MS-Win-Core-Synch-l1-2-0 1 +# API-MS-Win-Core-Memory-l1-1-6.dll (Windows 10+) +# +# Name Actual DLL Arity +imp 'MapViewOfFile3' MapViewOfFile3 API-MS-Win-Core-Memory-l1-1-6 9 +imp 'VirtualAlloc2' VirtualAlloc2 API-MS-Win-Core-Memory-l1-1-6 7 + # NTDLL.DLL # BEYOND THE PALE #