mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-08-21 09:02:17 +00:00
Implement signal handler tail recursion
GNU Make on Windows now appears to be working reliably. This change also fixes a bug where, after fork the Windows thread handle wasn't reset and that caused undefined behavior using SetThreadContext() with our signals
This commit is contained in:
parent
a657f3e878
commit
cdf556e7d2
15 changed files with 627 additions and 77 deletions
|
@ -598,6 +598,10 @@ imp 'PdhOpenQuery' PdhOpenQueryW pdh 3 # Creates a new query that is
|
|||
# PSAPI.DLL
|
||||
#
|
||||
# Name Actual DLL Arity
|
||||
imp 'EnumProcessModules' EnumProcessModules psapi 4
|
||||
imp 'EnumProcessModulesEx' EnumProcessModulesEx psapi 5
|
||||
imp 'EnumProcesses' EnumProcesses psapi 3
|
||||
imp 'GetModuleBaseName' GetModuleBaseNameW psapi 4
|
||||
imp 'GetProcessImageFileName' GetProcessImageFileNameW psapi 3
|
||||
imp 'GetProcessMemoryInfo' GetProcessMemoryInfo psapi 3
|
||||
|
||||
|
|
|
@ -78,6 +78,17 @@ int64_t CreateToolhelp32Snapshot(uint32_t dwFlags, uint32_t th32ProcessID);
|
|||
bool32 Process32First(int64_t hSnapshot, struct NtProcessEntry32 *in_out_lppe);
|
||||
bool32 Process32Next(int64_t hSnapshot, struct NtProcessEntry32 *out_lppe);
|
||||
|
||||
bool32 EnumProcesses(uint32_t *out_lpidProcess, uint32_t cb,
|
||||
uint32_t *out_lpcbNeeded) paramsnonnull();
|
||||
bool32 EnumProcessModules(int64_t hProcess, int64_t *out_lphModule, uint32_t cb,
|
||||
uint32_t *out_lpcbNeeded) paramsnonnull();
|
||||
bool32 EnumProcessModulesEx(int64_t hProcess, int64_t *out_lphModule,
|
||||
uint32_t cb, uint32_t *out_lpcbNeeded,
|
||||
uint32_t dwFilterFlag) paramsnonnull();
|
||||
uint32_t GetModuleBaseName(int64_t hProcess, int64_t opt_hModule,
|
||||
char16_t *out_lpBaseName, uint32_t nSize)
|
||||
paramsnonnull();
|
||||
|
||||
#if ShouldUseMsabiAttribute()
|
||||
#include "libc/nt/thunk/process.inc"
|
||||
#endif /* ShouldUseMsabiAttribute() */
|
||||
|
|
18
libc/nt/psapi/EnumProcessModules.S
Normal file
18
libc/nt/psapi/EnumProcessModules.S
Normal file
|
@ -0,0 +1,18 @@
|
|||
#include "libc/nt/codegen.h"
|
||||
.imp psapi,__imp_EnumProcessModules,EnumProcessModules
|
||||
|
||||
.text.windows
|
||||
.ftrace1
|
||||
EnumProcessModules:
|
||||
.ftrace2
|
||||
#ifdef __x86_64__
|
||||
push %rbp
|
||||
mov %rsp,%rbp
|
||||
mov __imp_EnumProcessModules(%rip),%rax
|
||||
jmp __sysv2nt
|
||||
#elif defined(__aarch64__)
|
||||
mov x0,#0
|
||||
ret
|
||||
#endif
|
||||
.endfn EnumProcessModules,globl
|
||||
.previous
|
18
libc/nt/psapi/EnumProcessModulesEx.S
Normal file
18
libc/nt/psapi/EnumProcessModulesEx.S
Normal file
|
@ -0,0 +1,18 @@
|
|||
#include "libc/nt/codegen.h"
|
||||
.imp psapi,__imp_EnumProcessModulesEx,EnumProcessModulesEx
|
||||
|
||||
.text.windows
|
||||
.ftrace1
|
||||
EnumProcessModulesEx:
|
||||
.ftrace2
|
||||
#ifdef __x86_64__
|
||||
push %rbp
|
||||
mov %rsp,%rbp
|
||||
mov __imp_EnumProcessModulesEx(%rip),%rax
|
||||
jmp __sysv2nt6
|
||||
#elif defined(__aarch64__)
|
||||
mov x0,#0
|
||||
ret
|
||||
#endif
|
||||
.endfn EnumProcessModulesEx,globl
|
||||
.previous
|
18
libc/nt/psapi/EnumProcesses.S
Normal file
18
libc/nt/psapi/EnumProcesses.S
Normal file
|
@ -0,0 +1,18 @@
|
|||
#include "libc/nt/codegen.h"
|
||||
.imp psapi,__imp_EnumProcesses,EnumProcesses
|
||||
|
||||
.text.windows
|
||||
.ftrace1
|
||||
EnumProcesses:
|
||||
.ftrace2
|
||||
#ifdef __x86_64__
|
||||
push %rbp
|
||||
mov %rsp,%rbp
|
||||
mov __imp_EnumProcesses(%rip),%rax
|
||||
jmp __sysv2nt
|
||||
#elif defined(__aarch64__)
|
||||
mov x0,#0
|
||||
ret
|
||||
#endif
|
||||
.endfn EnumProcesses,globl
|
||||
.previous
|
18
libc/nt/psapi/GetModuleBaseNameW.S
Normal file
18
libc/nt/psapi/GetModuleBaseNameW.S
Normal file
|
@ -0,0 +1,18 @@
|
|||
#include "libc/nt/codegen.h"
|
||||
.imp psapi,__imp_GetModuleBaseNameW,GetModuleBaseNameW
|
||||
|
||||
.text.windows
|
||||
.ftrace1
|
||||
GetModuleBaseName:
|
||||
.ftrace2
|
||||
#ifdef __x86_64__
|
||||
push %rbp
|
||||
mov %rsp,%rbp
|
||||
mov __imp_GetModuleBaseNameW(%rip),%rax
|
||||
jmp __sysv2nt
|
||||
#elif defined(__aarch64__)
|
||||
mov x0,#0
|
||||
ret
|
||||
#endif
|
||||
.endfn GetModuleBaseName,globl
|
||||
.previous
|
Loading…
Add table
Add a link
Reference in a new issue