mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-29 00:32:29 +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
9
third_party/dlmalloc/dlmalloc.c
vendored
9
third_party/dlmalloc/dlmalloc.c
vendored
|
@ -380,9 +380,14 @@ int dlmalloc_sys_trim(struct MallocState *m, size_t pad) {
|
|||
size_t newsize = sp->size - extra;
|
||||
(void)newsize; /* placate people compiling -Wunused-variable */
|
||||
/* Prefer mremap, fall back to munmap */
|
||||
if ((mremap(sp->base, sp->size, newsize, 0, 0) != MAP_FAILED) ||
|
||||
(munmap(sp->base + newsize, extra) == 0)) {
|
||||
int err = errno;
|
||||
if (mremap(sp->base, sp->size, newsize, 0, 0) != MAP_FAILED) {
|
||||
released = extra;
|
||||
} else {
|
||||
errno = err;
|
||||
if (!munmap(sp->base + newsize, extra)) {
|
||||
released = extra;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#include "libc/errno.h"
|
||||
#include "third_party/dlmalloc/dlmalloc.internal.h"
|
||||
|
||||
/* Realloc using mmap */
|
||||
|
@ -12,7 +13,9 @@ mchunkptr dlmalloc_mmap_resize(mstate m, mchunkptr oldp, size_t nb, int flags) {
|
|||
size_t offset = oldp->prev_foot;
|
||||
size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD;
|
||||
size_t newmmsize = mmap_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK);
|
||||
int err = errno;
|
||||
char *cp = mremap((char *)oldp - offset, oldmmsize, newmmsize, flags, 0);
|
||||
errno = err;
|
||||
if (cp != CMFAIL) {
|
||||
mchunkptr newp = (mchunkptr)(cp + offset);
|
||||
size_t psize = newmmsize - offset - MMAP_FOOT_PAD;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue