mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-30 00:08:30 +00:00
Improve signals and memory protection
- Document sigaction() - Simplify New Technology fork() code - Testing and many bug fixes for mprotect() - Distribute Intel Xed ILD in the amalgamation - Turn Xed enums into defines to avoid DWARF bloat - Improve polyfilling of SA_SIGINFO on BSDs and fix bugs - setpgid(getpid(), getpid()) on Windows will ignore CTRL-C - Work around issues relating to NT mappings being executable - Permit automatic executable stack override via `ape_stack_pf`
This commit is contained in:
parent
c95c9d9508
commit
f684e348d4
76 changed files with 1844 additions and 1121 deletions
|
@ -18,20 +18,30 @@
|
|||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/calls/internal.h"
|
||||
#include "libc/nt/enum/pageflags.h"
|
||||
#include "libc/runtime/directmap.internal.h"
|
||||
#include "libc/sysv/consts/prot.h"
|
||||
|
||||
privileged uint32_t __prot2nt(int prot, int flags) {
|
||||
privileged uint32_t __prot2nt(int prot, bool iscow) {
|
||||
switch (prot & (PROT_READ | PROT_WRITE | PROT_EXEC)) {
|
||||
case PROT_READ:
|
||||
return kNtPageReadonly;
|
||||
case PROT_EXEC:
|
||||
case PROT_EXEC | PROT_READ:
|
||||
return kNtPageExecuteRead;
|
||||
case PROT_WRITE:
|
||||
case PROT_READ | PROT_WRITE:
|
||||
return kNtPageReadwrite;
|
||||
case PROT_READ | PROT_EXEC:
|
||||
return kNtPageExecuteRead;
|
||||
if (iscow) {
|
||||
return kNtPageWritecopy;
|
||||
} else {
|
||||
return kNtPageReadwrite;
|
||||
}
|
||||
case PROT_WRITE | PROT_EXEC:
|
||||
case PROT_READ | PROT_WRITE | PROT_EXEC:
|
||||
return kNtPageExecuteReadwrite;
|
||||
if (iscow) {
|
||||
return kNtPageExecuteWritecopy;
|
||||
} else {
|
||||
return kNtPageExecuteReadwrite;
|
||||
}
|
||||
default:
|
||||
return kNtPageNoaccess;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue