Unbloat build config

- 10.5% reduction of o//depend dependency graph
- 8.8% reduction in latency of make command
- Fix issue with temporary file cleanup

There's a new -w option in compile.com that turns off the recent
Landlock output path workaround for "good commands" which do not
unlink() the output file like GNU tooling does.

Our new GNU Make unveil sandboxing appears to have zero overhead
in the grand scheme of things. Full builds are pretty fast since
the only thing that's actually slowed us down is probably libcxx

    make -j16 MODE=rel
    RL: took 85,732,063µs wall time
    RL: ballooned to 323,612kb in size
    RL: needed 828,560,521µs cpu (11% kernel)
    RL: caused 39,080,670 page faults (99% memcpy)
    RL: 350,073 context switches (72% consensual)
    RL: performed 0 reads and 11,494,960 write i/o operations

pledge() and unveil() no longer consider ENOSYS to be an error.
These functions have also been added to Python's cosmo module.

This change also removes some WIN32 APIs and System Five magnums
which we're not using and it's doubtful anyone else would be too
This commit is contained in:
Justine Tunney 2022-08-10 01:32:17 -07:00
parent 133c693650
commit ae5d06dc53
1423 changed files with 2213 additions and 5560 deletions

View file

@ -255,12 +255,12 @@ o/$(MODE)/hdrs-old.txt: o/$(MODE)/.x $(MAKEFILES) $(call uniq,$(foreach x,$(HDRS
TAGS: .UNSANDBOXED = 1
TAGS: o/$(MODE)/srcs-old.txt $(SRCS)
@$(RM) $@
@$(COMPILE) -ATAGS -T$@ $(TAGS) $(TAGSFLAGS) -L $< -o $@
@$(TAGS) $(TAGSFLAGS) -L $< -o $@
HTAGS: .UNSANDBOXED = 1
HTAGS: o/$(MODE)/hdrs-old.txt $(HDRS)
@$(RM) $@
@$(COMPILE) -ATAGS -T$@ build/htags -L $< -o $@
@build/htags -L $< -o $@
loc: .UNSANDBOXED = 1
loc: o/$(MODE)/tool/build/summy.com
@ -297,10 +297,8 @@ COSMOPOLITAN_OBJECTS = \
LIBC_NT_PSAPI \
LIBC_NT_POWRPROF \
LIBC_NT_PDH \
LIBC_NT_SHELL32 \
LIBC_NT_GDI32 \
LIBC_NT_COMDLG32 \
LIBC_NT_NETAPI32 \
LIBC_NT_URL \
LIBC_NT_USER32 \
LIBC_NT_NTDLL \

Binary file not shown.

Binary file not shown.

View file

@ -27,4 +27,4 @@ o/$(MODE)/%.com.ok: \
o/$(MODE)/tool/build/runit.com \
o/$(MODE)/tool/build/runitd.com \
o/$(MODE)/%.com
@$(COMPILE) -ATEST -tT$@ $^ $(HOSTS)
@$(COMPILE) -ATEST -wtT$@ $^ $(HOSTS)

View file

@ -20,15 +20,12 @@ o/%.o: %.s ; @$(COMPILE) -AOBJECTIFY.s $(OBJECTIFY.s) $(
o/%.o: o/%.s ; @$(COMPILE) -AOBJECTIFY.s $(OBJECTIFY.s) $(OUTPUT_OPTION) $<
o/%.s: %.S ; @$(COMPILE) -APREPROCESS $(PREPROCESS) $(OUTPUT_OPTION) $<
o/%.s: o/%.S ; @$(COMPILE) -APREPROCESS $(PREPROCESS) $(OUTPUT_OPTION) $<
o/%.i: %.S ; @$(COMPILE) -APREPROCESS $(PREPROCESS) $(OUTPUT_OPTION) $<
o/%.o: %.S ; @$(COMPILE) -AOBJECTIFY.S $(OBJECTIFY.S) $(OUTPUT_OPTION) $<
o/%.o: o/%.S ; @$(COMPILE) -AOBJECTIFY.S $(OBJECTIFY.S) $(OUTPUT_OPTION) $<
o/%.s: %.i ; @$(COMPILE) -ACOMPILE.i $(COMPILE.i) $(OUTPUT_OPTION) $<
o/%.s: o/%.i ; @$(COMPILE) -ACOMPILE.i $(COMPILE.i) $(OUTPUT_OPTION) $<
o/%.lds: %.lds ; @$(COMPILE) -APREPROCESS $(PREPROCESS.lds) $(OUTPUT_OPTION) $<
o/%.inc: %.h ; @$(COMPILE) -APREPROCESS $(PREPROCESS) $(OUTPUT_OPTION) -D__ASSEMBLER__ -P $<
o/%.greg.o: %.greg.c ; @$(COMPILE) -AOBJECTIFY.greg $(OBJECTIFY.greg.c) $(OUTPUT_OPTION) $<
o/%.zip.o: o/% ; @$(COMPILE) -AZIPOBJ $(ZIPOBJ) $(ZIPOBJ_FLAGS) $(OUTPUT_OPTION) $<
o/%.zip.o: o/% ; @$(COMPILE) -wAZIPOBJ $(ZIPOBJ) $(ZIPOBJ_FLAGS) $(OUTPUT_OPTION) $<
o/$(MODE)/%: o/$(MODE)/%.dbg ; @$(COMPILE) -AOBJCOPY -T$@ $(OBJCOPY) -S -O binary $< $@
o/$(MODE)/%.o: %.s ; @$(COMPILE) -AOBJECTIFY.s $(OBJECTIFY.s) $(OUTPUT_OPTION) $<
@ -39,32 +36,20 @@ o/$(MODE)/%.o: %.f ; @$(COMPILE) -AOBJECTIFY.f $(OBJECTIFY.f) $(
o/$(MODE)/%.o: %.F ; @$(COMPILE) -AOBJECTIFY.F $(OBJECTIFY.F) $(OUTPUT_OPTION) $<
o/$(MODE)/%.ss: %.c ; @$(COMPILE) -ACOMPILE.c $(COMPILE.c) $(OUTPUT_OPTION) $<
o/$(MODE)/%.ss: o/$(MODE)/%.c ; @$(COMPILE) -AOBJECTIFY.s $(COMPILE.c) $(OUTPUT_OPTION) $<
o/$(MODE)/%.i: %.S ; @$(COMPILE) -APREPROCESS $(PREPROCESS) $(OUTPUT_OPTION) $<
o/$(MODE)/%.i: %.c ; @$(COMPILE) -APREPROCESS $(PREPROCESS) $(OUTPUT_OPTION) $<
o/$(MODE)/%.i: %.cc ; @$(COMPILE) -APREPROCESS $(PREPROCESS) $(OUTPUT_OPTION) $<
o/$(MODE)/%.i: o/$(MODE)/%.c ; @$(COMPILE) -APREPROCESS $(PREPROCESS) $(OUTPUT_OPTION) $<
o/$(MODE)/%.h: %.c ; @$(COMPILE) -AAMALGAMATE $(PREPROCESS) $(OUTPUT_OPTION) -fdirectives-only -P $<
o/$(MODE)/%.h: o/$(MODE)/%.c ; @$(COMPILE) -AAMALGAMATE $(PREPROCESS) $(OUTPUT_OPTION) -fdirectives-only -P $<
o/$(MODE)/%.o: %.S ; @$(COMPILE) -AOBJECTIFY.S $(OBJECTIFY.S) $(OUTPUT_OPTION) $<
o/$(MODE)/%.o: o/$(MODE)/%.S ; @$(COMPILE) -AOBJECTIFY.S $(OBJECTIFY.S) $(OUTPUT_OPTION) $<
o/$(MODE)/%.s: %.i ; @$(COMPILE) -ACOMPILE.i $(COMPILE.i) $(OUTPUT_OPTION) $<
o/$(MODE)/%.s: o/$(MODE)/%.i ; @$(COMPILE) -ACOMPILE.i $(COMPILE.i) $(OUTPUT_OPTION) $<
o/$(MODE)/%.o: %.cc ; @$(COMPILE) -AOBJECTIFY.cxx $(OBJECTIFY.cxx) $(OUTPUT_OPTION) $<
o/$(MODE)/%.lds: %.lds ; @$(COMPILE) -APREPROCESS $(PREPROCESS.lds) $(OUTPUT_OPTION) $<
o/$(MODE)/%.cxx.o: %.c ; @$(COMPILE) -AOBJECTIFY.cxx $(OBJECTIFY.cxx) -xc++ $(OUTPUT_OPTION) $<
o/$(MODE)/%.o: %.greg.c ; @$(COMPILE) -AOBJECTIFY.greg $(OBJECTIFY.greg.c) $(OUTPUT_OPTION) $<
o/$(MODE)/%.greg.o: %.greg.c ; @$(COMPILE) -AOBJECTIFY.greg $(OBJECTIFY.greg.c) $(OUTPUT_OPTION) $<
o/$(MODE)/%.ansi.o: %.ansi.c ; @$(COMPILE) -AOBJECTIFY.ansi $(OBJECTIFY.ansi.c) $(OUTPUT_OPTION) $<
o/$(MODE)/%.ansi.o: %.c ; @$(COMPILE) -AOBJECTIFY.ansi $(OBJECTIFY.ansi.c) $(OUTPUT_OPTION) $<
o/$(MODE)/%.c99.o: %.c99.c ; @$(COMPILE) -AOBJECTIFY.c99 $(OBJECTIFY.c99.c) $(OUTPUT_OPTION) $<
o/$(MODE)/%.c11.o: %.c11.c ; @$(COMPILE) -AOBJECTIFY.c11 $(OBJECTIFY.c11.c) $(OUTPUT_OPTION) $<
o/$(MODE)/%.c2x.o: %.c2x.c ; @$(COMPILE) -AOBJECTIFY.c2x $(OBJECTIFY.c2x.c) $(OUTPUT_OPTION) $<
o/$(MODE)/%.initabi.o: %.initabi.c ; @$(COMPILE) -AOBJECTIFY.init $(OBJECTIFY.initabi.c) $(OUTPUT_OPTION) $<
o/$(MODE)/%.ncabi.o: %.ncabi.c ; @$(COMPILE) -AOBJECTIFY.nc $(OBJECTIFY.ncabi.c) $(OUTPUT_OPTION) $<
o/$(MODE)/%.real.o: %.c ; @$(COMPILE) -AOBJECTIFY.real $(OBJECTIFY.real.c) $(OUTPUT_OPTION) $<
o/$(MODE)/%.runs: o/$(MODE)/% ; @$(COMPILE) -ACHECK -tT$@ $< $(TESTARGS)
o/$(MODE)/%.zip.o: % ; @$(COMPILE) -AZIPOBJ $(ZIPOBJ) $(ZIPOBJ_FLAGS) $(OUTPUT_OPTION) $<
o/$(MODE)/%.zip.o: % ; @$(COMPILE) -wAZIPOBJ $(ZIPOBJ) $(ZIPOBJ_FLAGS) $(OUTPUT_OPTION) $<
o/$(MODE)/%-gcc.asm: %.c ; @$(COMPILE) -AOBJECTIFY.c $(OBJECTIFY.c) -S -g0 $(OUTPUT_OPTION) $<
o/$(MODE)/%-gcc.asm: %.cc ; @$(COMPILE) -AOBJECTIFY.c $(OBJECTIFY.cxx) -S -g0 $(OUTPUT_OPTION) $<
o/$(MODE)/%-clang.asm: %.c ; @$(COMPILE) -AOBJECTIFY.c $(OBJECTIFY.c) -S -g0 $(OUTPUT_OPTION) $<
@ -73,66 +58,66 @@ o/$(MODE)/%-clang.asm: CC = $(CLANG)
o/%.o: %.cc
@$(COMPILE) -AOBJECTIFY.cxx $(OBJECTIFY.cxx) $(OUTPUT_OPTION) $<
@$(COMPILE) -AFIXUPOBJ -T$@ $(FIXUPOBJ) $@
@$(COMPILE) -AFIXUPOBJ -wT$@ $(FIXUPOBJ) $@
o/%.o: o/%.cc
@$(COMPILE) -AOBJECTIFY.cxx $(OBJECTIFY.cxx) $(OUTPUT_OPTION) $<
@$(COMPILE) -AFIXUPOBJ -T$@ $(FIXUPOBJ) $@
@$(COMPILE) -AFIXUPOBJ -wT$@ $(FIXUPOBJ) $@
o/$(MODE)/%.o: %.c
@$(COMPILE) -AOBJECTIFY.c $(OBJECTIFY.c) $(OUTPUT_OPTION) $<
@$(COMPILE) -AFIXUPOBJ -T$@ $(FIXUPOBJ) $@
@$(COMPILE) -AFIXUPOBJ -wT$@ $(FIXUPOBJ) $@
o/$(MODE)/%.o: o/$(MODE)/%.c
@$(COMPILE) -AOBJECTIFY.c $(OBJECTIFY.c) $(OUTPUT_OPTION) $<
@$(COMPILE) -AFIXUPOBJ -T$@ $(FIXUPOBJ) $@
@$(COMPILE) -AFIXUPOBJ -wT$@ $(FIXUPOBJ) $@
o/$(MODE)/%.o: o/$(MODE)/%.cc
@$(COMPILE) -AOBJECTIFY.cxx $(OBJECTIFY.cxx) $(OUTPUT_OPTION) $<
@$(COMPILE) -AFIXUPOBJ -T$@ $(FIXUPOBJ) $@
@$(COMPILE) -AFIXUPOBJ -wT$@ $(FIXUPOBJ) $@
o/%.a:
$(file >$(TMPDIR)/$(subst /,_,$@),$^)
@$(COMPILE) -AARCHIVE -T$@ $(AR) $(ARFLAGS) $@ @$(TMPDIR)/$(subst /,_,$@)
@$(COMPILE) -AARCHIVE -wT$@ $(AR) $(ARFLAGS) $@ @$(TMPDIR)/$(subst /,_,$@)
o/%.pkg:
$(file >$(TMPDIR)/$(subst /,_,$@).args,$(filter %.o,$^))
@$(COMPILE) -APACKAGE -T$@ $(PKG) $(OUTPUT_OPTION) $(addprefix -d,$(filter %.pkg,$^)) @$(TMPDIR)/$(subst /,_,$@)
@$(COMPILE) -APACKAGE -wT$@ $(PKG) $(OUTPUT_OPTION) $(addprefix -d,$(filter %.pkg,$^)) @$(TMPDIR)/$(subst /,_,$@)
o/$(MODE)/%.pkg:
$(file >$(TMPDIR)/$(subst /,_,$@),$(filter %.o,$^))
@$(COMPILE) -APACKAGE -T$@ $(PKG) $(OUTPUT_OPTION) $(addprefix -d,$(filter %.pkg,$^)) @$(TMPDIR)/$(subst /,_,$@)
@$(COMPILE) -APACKAGE -wT$@ $(PKG) $(OUTPUT_OPTION) $(addprefix -d,$(filter %.pkg,$^)) @$(TMPDIR)/$(subst /,_,$@)
o/$(MODE)/%.o: %.py o/$(MODE)/third_party/python/pyobj.com
@$(COMPILE) -APYOBJ o/$(MODE)/third_party/python/pyobj.com $(PYFLAGS) -o $@ $<
@$(COMPILE) -wAPYOBJ o/$(MODE)/third_party/python/pyobj.com $(PYFLAGS) -o $@ $<
o/$(MODE)/%.pyc: %.py o/$(MODE)/third_party/python/pycomp.com
@$(COMPILE) -APYCOMP o/$(MODE)/third_party/python/pycomp.com $(PYCFLAGS) -o $@ $<
@$(COMPILE) -wAPYCOMP o/$(MODE)/third_party/python/pycomp.com $(PYCFLAGS) -o $@ $<
o/$(MODE)/%.lua: %.lua o/$(MODE)/third_party/lua/luac.com
@$(COMPILE) -ALUAC o/$(MODE)/third_party/lua/luac.com -s -o $@ $<
@$(COMPILE) -wALUAC o/$(MODE)/third_party/lua/luac.com -s -o $@ $<
o/$(MODE)/%.lua.runs: %.lua o/$(MODE)/tool/net/redbean.com
@$(COMPILE) -ALUA -tT$@ o/$(MODE)/tool/net/redbean.com $(LUAFLAGS) -i $<
@$(COMPILE) -wALUA -tT$@ o/$(MODE)/tool/net/redbean.com $(LUAFLAGS) -i $<
o/$(MODE)/%: o/$(MODE)/%.com o/$(MODE)/tool/build/cp.com o/$(MODE)/tool/build/assimilate.com
@$(COMPILE) -ACP -T$@ o/$(MODE)/tool/build/cp.com $< $@
@$(COMPILE) -AASSIMILATE -T$@ o/$(MODE)/tool/build/assimilate.com $@
@$(COMPILE) -wACP -wT$@ o/$(MODE)/tool/build/cp.com $< $@
@$(COMPILE) -wAASSIMILATE -wT$@ o/$(MODE)/tool/build/assimilate.com $@
# TODO(jart): find a way to generate dependencies
# or alternatively disable sandboxing
o/%.h.ok: %.h
@$(COMPILE) -ACHECK.h -T$@ build/bootstrap/touch.com $@
@$(COMPILE) -wACHECK.h -T$@ build/bootstrap/touch.com $@
# @$(COMPILE) -ACHECK.h $(COMPILE.c) -xc -g0 -o $@ $<
o/$(MODE)/%.h.ok: %.h
@$(COMPILE) -ACHECK.h -T$@ build/bootstrap/touch.com $@
@$(COMPILE) -wACHECK.h -T$@ build/bootstrap/touch.com $@
# @$(COMPILE) -ACHECK.h $(COMPILE.c) -xc -g0 -o $@ $<
o/$(MODE)/%.hh.ok: %.hh
@$(COMPILE) -ACHECK.h -T$@ build/bootstrap/touch.com $@
@$(COMPILE) -wACHECK.h -T$@ build/bootstrap/touch.com $@
# @$(COMPILE) -ACHECK.h $(COMPILE.cxx) -xc++ -g0 -o $@ $<
o/%.okk: %
@$(COMPILE) -ACHECK.h -T$@ build/bootstrap/touch.com $@
@$(COMPILE) -wACHECK.h -T$@ build/bootstrap/touch.com $@
# @$(COMPILE) -ACHECK.h $(COMPILE.cxx) -xc++ -g0 -o $@ $<
o/$(MODE)/%.okk: %
@$(COMPILE) -ACHECK.h -T$@ build/bootstrap/touch.com $@
@$(COMPILE) -wACHECK.h -T$@ build/bootstrap/touch.com $@
# @$(COMPILE) -ACHECK.h $(COMPILE.cxx) -xc++ -g0 -o $@ $<

View file

@ -21,6 +21,7 @@
#include "libc/bits/weaken.h"
#include "libc/calls/calls.h"
#include "libc/calls/termios.h"
#include "libc/dce.h"
#include "libc/fmt/fmt.h"
#include "libc/mem/mem.h"
#include "libc/runtime/runtime.h"

View file

@ -18,6 +18,7 @@
#include "libc/log/internal.h"
#include "libc/log/log.h"
#include "libc/macros.internal.h"
#include "libc/mem/mem.h"
#include "libc/runtime/internal.h"
#include "libc/runtime/runtime.h"
#include "libc/stdio/append.internal.h"

View file

@ -12,6 +12,7 @@
#include "libc/mem/mem.h"
#include "libc/runtime/gc.internal.h"
#include "libc/stdio/stdio.h"
#include "libc/str/str.h"
#include "third_party/zlib/zlib.h"
#define CHUNK 32768

View file

@ -17,6 +17,7 @@
#include "libc/log/gdb.h"
#include "libc/log/log.h"
#include "libc/macros.internal.h"
#include "libc/mem/mem.h"
#include "libc/runtime/gc.internal.h"
#include "libc/runtime/runtime.h"
#include "libc/str/str.h"

View file

@ -35,7 +35,9 @@
#include "libc/fmt/conv.h"
#include "libc/fmt/fmt.h"
#include "libc/log/log.h"
#include "libc/mem/mem.h"
#include "libc/stdio/stdio.h"
#include "libc/str/str.h"
enum { PICOL_OK, PICOL_ERR, PICOL_RETURN, PICOL_BREAK, PICOL_CONTINUE };
enum { PT_ESC, PT_STR, PT_CMD, PT_VAR, PT_SEP, PT_EOL, PT_EOF };

View file

@ -96,7 +96,7 @@ o/$(MODE)/examples/pylife/pylife.com.dbg: \
o/$(MODE)/examples/pylife/pylife.o \
$(CRT) \
$(APE_NO_MODIFY_SELF)
$(LINK) $(LINKARGS) -o $@
@$(COMPILE) -ALINK.ape $(LINK) $(LINKARGS) -o $@
# # Unwrap the APE .COM binary, that's embedded within the linked file
# # NOTE: This line can be commented out, since it's in build/rules.mk

View file

@ -16,6 +16,7 @@
#include "libc/log/log.h"
#include "libc/runtime/gc.h"
#include "libc/stdio/stdio.h"
#include "libc/str/str.h"
#include "libc/sysv/consts/s.h"
#include "libc/x/x.h"

View file

@ -10,7 +10,9 @@
#include "libc/calls/calls.h"
#include "libc/fmt/fmt.h"
#include "libc/log/check.h"
#include "libc/mem/mem.h"
#include "libc/stdio/append.internal.h"
#include "libc/str/str.h"
/**
* @fileoverview Fast Growable Strings Tutorial

View file

@ -14,9 +14,11 @@
#include "libc/fmt/nf32.h"
#include "libc/log/check.h"
#include "libc/macros.internal.h"
#include "libc/mem/mem.h"
#include "libc/runtime/runtime.h"
#include "libc/stdio/append.internal.h"
#include "libc/stdio/stdio.h"
#include "libc/str/str.h"
#include "libc/sysv/consts/itimer.h"
#include "libc/sysv/consts/sig.h"
#include "libc/time/time.h"

View file

@ -23,9 +23,10 @@
* Converts timespec interval to microseconds.
*/
int64_t _timespec_tomicros(struct timespec x) {
int64_t us;
if (!__builtin_add_overflow(x.tv_sec, x.tv_nsec / 1000, &us)) {
return us;
int64_t ns;
if (!__builtin_mul_overflow(x.tv_sec, 1000000ul, &ns) &&
!__builtin_add_overflow(ns, x.tv_nsec / 1000, &ns)) {
return ns;
} else {
return INT64_MAX;
}

View file

@ -23,9 +23,10 @@
* Converts timespec interval to milliseconds.
*/
int64_t _timespec_tomillis(struct timespec x) {
int64_t us;
if (!__builtin_add_overflow(x.tv_sec, x.tv_nsec / 1000000, &us)) {
return us;
int64_t ns;
if (!__builtin_mul_overflow(x.tv_sec, 1000ul, &ns) &&
!__builtin_add_overflow(ns, x.tv_nsec / 1000000, &ns)) {
return ns;
} else {
return INT64_MAX;
}

View file

@ -0,0 +1,33 @@
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi
Copyright 2022 Justine Alexandra Roberts Tunney
Permission to use, copy, modify, and/or distribute this software for
any purpose with or without fee is hereby granted, provided that the
above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/calls/struct/timespec.h"
#include "libc/limits.h"
/**
* Converts timespec interval to nanoseconds.
*/
int64_t _timespec_tonanos(struct timespec x) {
int64_t ns;
if (!__builtin_mul_overflow(x.tv_sec, 1000000000ul, &ns) &&
!__builtin_add_overflow(ns, x.tv_nsec, &ns)) {
return ns;
} else {
return INT64_MAX;
}
}

View file

@ -33,6 +33,7 @@
* - /tmp/
*
* This guarantees trailing slash.
* We also guarantee `kTmpPath` won't be longer than `PATH_MAX / 2`.
*/
char kTmpPath[PATH_MAX];
@ -46,7 +47,7 @@ __attribute__((__constructor__)) static void kTmpPathInit(void) {
uint32_t n;
char16_t path16[PATH_MAX];
if ((s = getenv("TMPDIR")) && (n = strlen(s)) < PATH_MAX) {
if ((s = getenv("TMPDIR")) && (n = strlen(s)) < PATH_MAX / 2) {
memcpy(kTmpPath, s, n);
if (n && kTmpPath[n - 1] != '/') {
kTmpPath[n + 0] = '/';

View file

@ -47,8 +47,9 @@
#define Eperm 1
#define Sigabrt 6
#define Enosys 38
#define Einval 22
#define Sigsys 31
#define Enosys 38
#define Sig_Setmask 2
#define Sa_Siginfo 4
#define Sa_Restorer 0x04000000
@ -84,6 +85,356 @@ struct Filter {
struct sock_filter p[700];
};
static const struct thatispacked SyscallName {
uint16_t n;
const char *const s;
} kSyscallName[] = {
{__NR_linux_exit, "exit"}, //
{__NR_linux_exit_group, "exit_group"}, //
{__NR_linux_read, "read"}, //
{__NR_linux_write, "write"}, //
{__NR_linux_open, "open"}, //
{__NR_linux_close, "close"}, //
{__NR_linux_stat, "stat"}, //
{__NR_linux_fstat, "fstat"}, //
{__NR_linux_lstat, "lstat"}, //
{__NR_linux_poll, "poll"}, //
{__NR_linux_ppoll, "ppoll"}, //
{__NR_linux_brk, "brk"}, //
{__NR_linux_sigreturn, "sigreturn"}, //
{__NR_linux_lseek, "lseek"}, //
{__NR_linux_mmap, "mmap"}, //
{__NR_linux_msync, "msync"}, //
{__NR_linux_mprotect, "mprotect"}, //
{__NR_linux_munmap, "munmap"}, //
{__NR_linux_sigaction, "sigaction"}, //
{__NR_linux_sigprocmask, "sigprocmask"}, //
{__NR_linux_ioctl, "ioctl"}, //
{__NR_linux_pread, "pread"}, //
{__NR_linux_pwrite, "pwrite"}, //
{__NR_linux_readv, "readv"}, //
{__NR_linux_writev, "writev"}, //
{__NR_linux_access, "access"}, //
{__NR_linux_pipe, "pipe"}, //
{__NR_linux_select, "select"}, //
{__NR_linux_pselect6, "pselect6"}, //
{__NR_linux_sched_yield, "sched_yield"}, //
{__NR_linux_mremap, "mremap"}, //
{__NR_linux_mincore, "mincore"}, //
{__NR_linux_madvise, "madvise"}, //
{__NR_linux_shmget, "shmget"}, //
{__NR_linux_shmat, "shmat"}, //
{__NR_linux_shmctl, "shmctl"}, //
{__NR_linux_dup, "dup"}, //
{__NR_linux_dup2, "dup2"}, //
{__NR_linux_pause, "pause"}, //
{__NR_linux_nanosleep, "nanosleep"}, //
{__NR_linux_getitimer, "getitimer"}, //
{__NR_linux_setitimer, "setitimer"}, //
{__NR_linux_alarm, "alarm"}, //
{__NR_linux_getpid, "getpid"}, //
{__NR_linux_sendfile, "sendfile"}, //
{__NR_linux_socket, "socket"}, //
{__NR_linux_connect, "connect"}, //
{__NR_linux_accept, "accept"}, //
{__NR_linux_sendto, "sendto"}, //
{__NR_linux_recvfrom, "recvfrom"}, //
{__NR_linux_sendmsg, "sendmsg"}, //
{__NR_linux_recvmsg, "recvmsg"}, //
{__NR_linux_shutdown, "shutdown"}, //
{__NR_linux_bind, "bind"}, //
{__NR_linux_listen, "listen"}, //
{__NR_linux_getsockname, "getsockname"}, //
{__NR_linux_getpeername, "getpeername"}, //
{__NR_linux_socketpair, "socketpair"}, //
{__NR_linux_setsockopt, "setsockopt"}, //
{__NR_linux_getsockopt, "getsockopt"}, //
{__NR_linux_fork, "fork"}, //
{__NR_linux_vfork, "vfork"}, //
{__NR_linux_execve, "execve"}, //
{__NR_linux_wait4, "wait4"}, //
{__NR_linux_kill, "kill"}, //
{__NR_linux_clone, "clone"}, //
{__NR_linux_tkill, "tkill"}, //
{__NR_linux_futex, "futex"}, //
{__NR_linux_set_robust_list, "set_robust_list"}, //
{__NR_linux_get_robust_list, "get_robust_list"}, //
{__NR_linux_uname, "uname"}, //
{__NR_linux_semget, "semget"}, //
{__NR_linux_semop, "semop"}, //
{__NR_linux_semctl, "semctl"}, //
{__NR_linux_shmdt, "shmdt"}, //
{__NR_linux_msgget, "msgget"}, //
{__NR_linux_msgsnd, "msgsnd"}, //
{__NR_linux_msgrcv, "msgrcv"}, //
{__NR_linux_msgctl, "msgctl"}, //
{__NR_linux_fcntl, "fcntl"}, //
{__NR_linux_flock, "flock"}, //
{__NR_linux_fsync, "fsync"}, //
{__NR_linux_fdatasync, "fdatasync"}, //
{__NR_linux_truncate, "truncate"}, //
{__NR_linux_ftruncate, "ftruncate"}, //
{__NR_linux_getcwd, "getcwd"}, //
{__NR_linux_chdir, "chdir"}, //
{__NR_linux_fchdir, "fchdir"}, //
{__NR_linux_rename, "rename"}, //
{__NR_linux_mkdir, "mkdir"}, //
{__NR_linux_rmdir, "rmdir"}, //
{__NR_linux_creat, "creat"}, //
{__NR_linux_link, "link"}, //
{__NR_linux_unlink, "unlink"}, //
{__NR_linux_symlink, "symlink"}, //
{__NR_linux_readlink, "readlink"}, //
{__NR_linux_chmod, "chmod"}, //
{__NR_linux_fchmod, "fchmod"}, //
{__NR_linux_chown, "chown"}, //
{__NR_linux_fchown, "fchown"}, //
{__NR_linux_lchown, "lchown"}, //
{__NR_linux_umask, "umask"}, //
{__NR_linux_gettimeofday, "gettimeofday"}, //
{__NR_linux_getrlimit, "getrlimit"}, //
{__NR_linux_getrusage, "getrusage"}, //
{__NR_linux_sysinfo, "sysinfo"}, //
{__NR_linux_times, "times"}, //
{__NR_linux_ptrace, "ptrace"}, //
{__NR_linux_syslog, "syslog"}, //
{__NR_linux_getuid, "getuid"}, //
{__NR_linux_getgid, "getgid"}, //
{__NR_linux_getppid, "getppid"}, //
{__NR_linux_getpgrp, "getpgrp"}, //
{__NR_linux_setsid, "setsid"}, //
{__NR_linux_getsid, "getsid"}, //
{__NR_linux_getpgid, "getpgid"}, //
{__NR_linux_setpgid, "setpgid"}, //
{__NR_linux_geteuid, "geteuid"}, //
{__NR_linux_getegid, "getegid"}, //
{__NR_linux_getgroups, "getgroups"}, //
{__NR_linux_setgroups, "setgroups"}, //
{__NR_linux_setreuid, "setreuid"}, //
{__NR_linux_setregid, "setregid"}, //
{__NR_linux_setuid, "setuid"}, //
{__NR_linux_setgid, "setgid"}, //
{__NR_linux_setresuid, "setresuid"}, //
{__NR_linux_setresgid, "setresgid"}, //
{__NR_linux_getresuid, "getresuid"}, //
{__NR_linux_getresgid, "getresgid"}, //
{__NR_linux_sigpending, "sigpending"}, //
{__NR_linux_sigsuspend, "sigsuspend"}, //
{__NR_linux_sigaltstack, "sigaltstack"}, //
{__NR_linux_mknod, "mknod"}, //
{__NR_linux_mknodat, "mknodat"}, //
{__NR_linux_statfs, "statfs"}, //
{__NR_linux_fstatfs, "fstatfs"}, //
{__NR_linux_getpriority, "getpriority"}, //
{__NR_linux_setpriority, "setpriority"}, //
{__NR_linux_mlock, "mlock"}, //
{__NR_linux_munlock, "munlock"}, //
{__NR_linux_mlockall, "mlockall"}, //
{__NR_linux_munlockall, "munlockall"}, //
{__NR_linux_setrlimit, "setrlimit"}, //
{__NR_linux_chroot, "chroot"}, //
{__NR_linux_sync, "sync"}, //
{__NR_linux_acct, "acct"}, //
{__NR_linux_settimeofday, "settimeofday"}, //
{__NR_linux_mount, "mount"}, //
{__NR_linux_reboot, "reboot"}, //
{__NR_linux_quotactl, "quotactl"}, //
{__NR_linux_setfsuid, "setfsuid"}, //
{__NR_linux_setfsgid, "setfsgid"}, //
{__NR_linux_capget, "capget"}, //
{__NR_linux_capset, "capset"}, //
{__NR_linux_sigtimedwait, "sigtimedwait"}, //
{__NR_linux_rt_sigqueueinfo, "rt_sigqueueinfo"}, //
{__NR_linux_personality, "personality"}, //
{__NR_linux_ustat, "ustat"}, //
{__NR_linux_sysfs, "sysfs"}, //
{__NR_linux_sched_setparam, "sched_setparam"}, //
{__NR_linux_sched_getparam, "sched_getparam"}, //
{__NR_linux_sched_setscheduler, "sched_setscheduler"}, //
{__NR_linux_sched_getscheduler, "sched_getscheduler"}, //
{__NR_linux_sched_get_priority_max, "sched_get_priority_max"}, //
{__NR_linux_sched_get_priority_min, "sched_get_priority_min"}, //
{__NR_linux_sched_rr_get_interval, "sched_rr_get_interval"}, //
{__NR_linux_vhangup, "vhangup"}, //
{__NR_linux_modify_ldt, "modify_ldt"}, //
{__NR_linux_pivot_root, "pivot_root"}, //
{__NR_linux__sysctl, "_sysctl"}, //
{__NR_linux_prctl, "prctl"}, //
{__NR_linux_arch_prctl, "arch_prctl"}, //
{__NR_linux_adjtimex, "adjtimex"}, //
{__NR_linux_umount2, "umount2"}, //
{__NR_linux_swapon, "swapon"}, //
{__NR_linux_swapoff, "swapoff"}, //
{__NR_linux_sethostname, "sethostname"}, //
{__NR_linux_setdomainname, "setdomainname"}, //
{__NR_linux_iopl, "iopl"}, //
{__NR_linux_ioperm, "ioperm"}, //
{__NR_linux_init_module, "init_module"}, //
{__NR_linux_delete_module, "delete_module"}, //
{__NR_linux_gettid, "gettid"}, //
{__NR_linux_readahead, "readahead"}, //
{__NR_linux_setxattr, "setxattr"}, //
{__NR_linux_fsetxattr, "fsetxattr"}, //
{__NR_linux_getxattr, "getxattr"}, //
{__NR_linux_fgetxattr, "fgetxattr"}, //
{__NR_linux_listxattr, "listxattr"}, //
{__NR_linux_flistxattr, "flistxattr"}, //
{__NR_linux_removexattr, "removexattr"}, //
{__NR_linux_fremovexattr, "fremovexattr"}, //
{__NR_linux_lsetxattr, "lsetxattr"}, //
{__NR_linux_lgetxattr, "lgetxattr"}, //
{__NR_linux_llistxattr, "llistxattr"}, //
{__NR_linux_lremovexattr, "lremovexattr"}, //
{__NR_linux_sched_setaffinity, "sched_setaffinity"}, //
{__NR_linux_sched_getaffinity, "sched_getaffinity"}, //
{__NR_linux_io_setup, "io_setup"}, //
{__NR_linux_io_destroy, "io_destroy"}, //
{__NR_linux_io_getevents, "io_getevents"}, //
{__NR_linux_io_submit, "io_submit"}, //
{__NR_linux_io_cancel, "io_cancel"}, //
{__NR_linux_lookup_dcookie, "lookup_dcookie"}, //
{__NR_linux_epoll_create, "epoll_create"}, //
{__NR_linux_epoll_wait, "epoll_wait"}, //
{__NR_linux_epoll_ctl, "epoll_ctl"}, //
{__NR_linux_getdents, "getdents"}, //
{__NR_linux_set_tid_address, "set_tid_address"}, //
{__NR_linux_restart_syscall, "restart_syscall"}, //
{__NR_linux_semtimedop, "semtimedop"}, //
{__NR_linux_fadvise, "fadvise"}, //
{__NR_linux_timer_create, "timer_create"}, //
{__NR_linux_timer_settime, "timer_settime"}, //
{__NR_linux_timer_gettime, "timer_gettime"}, //
{__NR_linux_timer_getoverrun, "timer_getoverrun"}, //
{__NR_linux_timer_delete, "timer_delete"}, //
{__NR_linux_clock_settime, "clock_settime"}, //
{__NR_linux_clock_gettime, "clock_gettime"}, //
{__NR_linux_clock_getres, "clock_getres"}, //
{__NR_linux_clock_nanosleep, "clock_nanosleep"}, //
{__NR_linux_tgkill, "tgkill"}, //
{__NR_linux_mbind, "mbind"}, //
{__NR_linux_set_mempolicy, "set_mempolicy"}, //
{__NR_linux_get_mempolicy, "get_mempolicy"}, //
{__NR_linux_mq_open, "mq_open"}, //
{__NR_linux_mq_unlink, "mq_unlink"}, //
{__NR_linux_mq_timedsend, "mq_timedsend"}, //
{__NR_linux_mq_timedreceive, "mq_timedreceive"}, //
{__NR_linux_mq_notify, "mq_notify"}, //
{__NR_linux_mq_getsetattr, "mq_getsetattr"}, //
{__NR_linux_kexec_load, "kexec_load"}, //
{__NR_linux_waitid, "waitid"}, //
{__NR_linux_add_key, "add_key"}, //
{__NR_linux_request_key, "request_key"}, //
{__NR_linux_keyctl, "keyctl"}, //
{__NR_linux_ioprio_set, "ioprio_set"}, //
{__NR_linux_ioprio_get, "ioprio_get"}, //
{__NR_linux_inotify_init, "inotify_init"}, //
{__NR_linux_inotify_add_watch, "inotify_add_watch"}, //
{__NR_linux_inotify_rm_watch, "inotify_rm_watch"}, //
{__NR_linux_openat, "openat"}, //
{__NR_linux_mkdirat, "mkdirat"}, //
{__NR_linux_fchownat, "fchownat"}, //
{__NR_linux_utime, "utime"}, //
{__NR_linux_utimes, "utimes"}, //
{__NR_linux_futimesat, "futimesat"}, //
{__NR_linux_fstatat, "fstatat"}, //
{__NR_linux_unlinkat, "unlinkat"}, //
{__NR_linux_renameat, "renameat"}, //
{__NR_linux_linkat, "linkat"}, //
{__NR_linux_symlinkat, "symlinkat"}, //
{__NR_linux_readlinkat, "readlinkat"}, //
{__NR_linux_fchmodat, "fchmodat"}, //
{__NR_linux_faccessat, "faccessat"}, //
{__NR_linux_unshare, "unshare"}, //
{__NR_linux_splice, "splice"}, //
{__NR_linux_tee, "tee"}, //
{__NR_linux_sync_file_range, "sync_file_range"}, //
{__NR_linux_vmsplice, "vmsplice"}, //
{__NR_linux_migrate_pages, "migrate_pages"}, //
{__NR_linux_move_pages, "move_pages"}, //
{__NR_linux_preadv, "preadv"}, //
{__NR_linux_pwritev, "pwritev"}, //
{__NR_linux_utimensat, "utimensat"}, //
{__NR_linux_fallocate, "fallocate"}, //
{__NR_linux_accept4, "accept4"}, //
{__NR_linux_dup3, "dup3"}, //
{__NR_linux_pipe2, "pipe2"}, //
{__NR_linux_epoll_pwait, "epoll_pwait"}, //
{__NR_linux_epoll_create1, "epoll_create1"}, //
{__NR_linux_perf_event_open, "perf_event_open"}, //
{__NR_linux_inotify_init1, "inotify_init1"}, //
{__NR_linux_rt_tgsigqueueinfo, "rt_tgsigqueueinfo"}, //
{__NR_linux_signalfd, "signalfd"}, //
{__NR_linux_signalfd4, "signalfd4"}, //
{__NR_linux_eventfd, "eventfd"}, //
{__NR_linux_eventfd2, "eventfd2"}, //
{__NR_linux_timerfd_create, "timerfd_create"}, //
{__NR_linux_timerfd_settime, "timerfd_settime"}, //
{__NR_linux_timerfd_gettime, "timerfd_gettime"}, //
{__NR_linux_recvmmsg, "recvmmsg"}, //
{__NR_linux_fanotify_init, "fanotify_init"}, //
{__NR_linux_fanotify_mark, "fanotify_mark"}, //
{__NR_linux_prlimit, "prlimit"}, //
{__NR_linux_name_to_handle_at, "name_to_handle_at"}, //
{__NR_linux_open_by_handle_at, "open_by_handle_at"}, //
{__NR_linux_clock_adjtime, "clock_adjtime"}, //
{__NR_linux_syncfs, "syncfs"}, //
{__NR_linux_sendmmsg, "sendmmsg"}, //
{__NR_linux_setns, "setns"}, //
{__NR_linux_getcpu, "getcpu"}, //
{__NR_linux_process_vm_readv, "process_vm_readv"}, //
{__NR_linux_process_vm_writev, "process_vm_writev"}, //
{__NR_linux_kcmp, "kcmp"}, //
{__NR_linux_finit_module, "finit_module"}, //
{__NR_linux_sched_setattr, "sched_setattr"}, //
{__NR_linux_sched_getattr, "sched_getattr"}, //
{__NR_linux_renameat2, "renameat2"}, //
{__NR_linux_seccomp, "seccomp"}, //
{__NR_linux_getrandom, "getrandom"}, //
{__NR_linux_memfd_create, "memfd_create"}, //
{__NR_linux_kexec_file_load, "kexec_file_load"}, //
{__NR_linux_bpf, "bpf"}, //
{__NR_linux_execveat, "execveat"}, //
{__NR_linux_userfaultfd, "userfaultfd"}, //
{__NR_linux_membarrier, "membarrier"}, //
{__NR_linux_mlock2, "mlock2"}, //
{__NR_linux_copy_file_range, "copy_file_range"}, //
{__NR_linux_preadv2, "preadv2"}, //
{__NR_linux_pwritev2, "pwritev2"}, //
{__NR_linux_pkey_mprotect, "pkey_mprotect"}, //
{__NR_linux_pkey_alloc, "pkey_alloc"}, //
{__NR_linux_pkey_free, "pkey_free"}, //
{__NR_linux_statx, "statx"}, //
{__NR_linux_io_pgetevents, "io_pgetevents"}, //
{__NR_linux_rseq, "rseq"}, //
{__NR_linux_pidfd_send_signal, "pidfd_send_signal"}, //
{__NR_linux_io_uring_setup, "io_uring_setup"}, //
{__NR_linux_io_uring_enter, "io_uring_enter"}, //
{__NR_linux_io_uring_register, "io_uring_register"}, //
{__NR_linux_open_tree, "open_tree"}, //
{__NR_linux_move_mount, "move_mount"}, //
{__NR_linux_fsopen, "fsopen"}, //
{__NR_linux_fsconfig, "fsconfig"}, //
{__NR_linux_fsmount, "fsmount"}, //
{__NR_linux_fspick, "fspick"}, //
{__NR_linux_pidfd_open, "pidfd_open"}, //
{__NR_linux_clone3, "clone3"}, //
{__NR_linux_close_range, "close_range"}, //
{__NR_linux_openat2, "openat2"}, //
{__NR_linux_pidfd_getfd, "pidfd_getfd"}, //
{__NR_linux_faccessat2, "faccessat2"}, //
{__NR_linux_process_madvise, "process_madvise"}, //
{__NR_linux_epoll_pwait2, "epoll_pwait2"}, //
{__NR_linux_mount_setattr, "mount_setattr"}, //
{__NR_linux_quotactl_fd, "quotactl_fd"}, //
{__NR_linux_landlock_create_ruleset, "landlock_create_ruleset"}, //
{__NR_linux_landlock_add_rule, "landlock_add_rule"}, //
{__NR_linux_landlock_restrict_self, "landlock_restrict_self"}, //
{__NR_linux_memfd_secret, "memfd_secret"}, //
{__NR_linux_process_mrelease, "process_mrelease"}, //
{__NR_linux_futex_waitv, "futex_waitv"}, //
{__NR_linux_set_mempolicy_home_node, "set_mempolicy_home_node"}, //
};
static const uint16_t kPledgeDefault[] = {
__NR_linux_exit, // thread return / exit()
};
@ -584,6 +935,16 @@ static privileged void KillThisThread(void) {
: "rcx", "r11", "memory");
}
static privileged const char *GetSyscallName(uint16_t n) {
int i;
for (i = 0; i < ARRAYLEN(kSyscallName); ++i) {
if (kSyscallName[i].n == n) {
return kSyscallName[i].s;
}
}
return "unknown";
}
static privileged int HasSyscall(struct Pledges *p, uint16_t n) {
int i;
for (i = 0; i < p->len; ++i) {
@ -606,23 +967,16 @@ static privileged void OnSigSys(int sig, siginfo_t *si, ucontext_t *ctx) {
FixCpy(ord, si->si_syscall, 12);
HexCpy(rip, ctx->uc_mcontext.rip);
for (found = i = 0; i < ARRAYLEN(kPledge); ++i) {
switch (HasSyscall(kPledge + i, si->si_syscall)) {
case 1:
Log("error: should pledge ", kPledge[i].name, //
" (ord=", ord, " rip=", rip, ")\n", 0);
found = true;
break;
case 2:
Log("error: maybe pledge ", kPledge[i].name, //
" (ord=", ord, " rip=", rip, ")\n", 0);
found = true;
break;
default:
break;
if (HasSyscall(kPledge + i, si->si_syscall)) {
Log("error: pledge ", kPledge[i].name, " for ",
GetSyscallName(si->si_syscall), " (ord=", ord, " rip=", rip, ")\n",
0);
found = true;
}
}
if (!found) {
Log("error: bad syscall (ord=", ord, " rip=", rip, ")\n", 0);
Log("error: bad syscall (", GetSyscallName(si->si_syscall), " ord=", ord,
" rip=", rip, ")\n", 0);
}
switch (mode) {
case kPledgeModeKillProcess:
@ -1554,8 +1908,8 @@ static privileged void AppendPledge(struct Filter *f, //
privileged int sys_pledge_linux(unsigned long ipromises, //
enum PledgeMode mode, //
bool want_msyscall) { //
int i, rc = -1;
struct Filter f;
int i, e, rc = -1;
struct sock_filter sf[1] = {BPF_STMT(BPF_RET | BPF_K, 0)};
CheckLargeStackAllocation(&f, sizeof(f));
f.n = 0;
@ -1610,10 +1964,24 @@ privileged int sys_pledge_linux(unsigned long ipromises, //
AppendFilter(&f, PLEDGE(sf));
}
// drop privileges
//
// PR_SET_SECCOMP (Linux 2.6.23+) will refuse to work if
// PR_SET_NO_NEW_PRIVS (Linux 3.5+) wasn't called so we punt the error
// detection to the seccomp system call below.
Prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
// register our seccomp filter with the kernel
if ((rc = Prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) != -1) {
struct sock_fprog sandbox = {.len = f.n, .filter = f.p};
rc = Prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &sandbox, 0, 0);
struct sock_fprog sandbox = {.len = f.n, .filter = f.p};
rc = Prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &sandbox, 0, 0);
// the EINVAL error could mean a lot of things. it could mean the bpf
// code is broken. it could also mean we're running on RHEL5 which
// doesn't have SECCOMP support. since we don't consider lack of
// system support for security to be an error, we distinguish these
// two cases by running a simpler SECCOMP operation.
if (rc == -Einval && Prctl(PR_GET_SECCOMP, 0, 0, 0, 0) == -Einval) {
rc = 0; // -Enosys
}
return rc;

View file

@ -28,14 +28,20 @@
#include "libc/sysv/errfuns.h"
/**
* Restricts system operations, e.g.
* Permits system operations, e.g.
*
* pledge("stdio rfile tty", 0);
* if (pledge("stdio rfile tty", 0)) {
* perror("pledge");
* exit(1);
* }
*
* Pledging causes most system calls to become unavailable. Your system
* call policy is enforced by the kernel (which means it can propagate
* across execve() if permitted). Root access is not required. Support
* is limited to Linux and OpenBSD.
* is limited to Linux 2.6.23+ (c. RHEL6) and OpenBSD. If your kernel
* isn't supported, then pledge() will return 0 and do nothing rather
* than raising ENOSYS. We don't consider lack of system support to be
* an error, because the specified operations will be permitted.
*
* The promises you give pledge() define which system calls are allowed.
* Error messages are logged when sandbox violations occur that well you
@ -213,14 +219,13 @@
* be weakened to have execute permissions too.
*
* @return 0 on success, or -1 w/ errno
* @raise ENOSYS if host os isn't Linux or OpenBSD
* @raise EINVAL if `execpromises` on Linux isn't a subset of `promises`
* @raise EINVAL if `promises` allows exec and `execpromises` is null
* @threadsafe
* @vforksafe
*/
int pledge(const char *promises, const char *execpromises) {
int rc;
int e, rc;
unsigned long ipromises, iexecpromises;
if (!ParsePromises(promises, &ipromises) &&
!ParsePromises(execpromises, &iexecpromises)) {
@ -239,7 +244,12 @@ int pledge(const char *promises, const char *execpromises) {
if (rc > -4096u) errno = -rc, rc = -1;
}
} else {
e = errno;
rc = sys_pledge(promises, execpromises);
if (rc && errno == ENOSYS) {
errno = e;
rc = 0;
}
}
if (!rc && !__vforked &&
(IsOpenbsd() || (IsLinux() && getpid() == gettid()))) {

View file

@ -8,6 +8,7 @@ struct timespec {
};
int sys_futex(int *, int, int, const struct timespec *, int *);
int64_t _timespec_tonanos(struct timespec) pureconst;
int64_t _timespec_tomicros(struct timespec) pureconst;
int64_t _timespec_tomillis(struct timespec) pureconst;
struct timespec _timespec_frommicros(int64_t) pureconst;

View file

@ -93,13 +93,15 @@ _Thread_local static struct {
} State;
static int unveil_final(void) {
int rc;
int e, rc;
struct sock_fprog sandbox = {
.filter = kUnveilBlacklist,
.len = ARRAYLEN(kUnveilBlacklist),
};
if ((rc = prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) != -1 &&
(rc = landlock_restrict_self(State.fd, 0)) != -1 &&
e = errno;
prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
errno = e;
if ((rc = landlock_restrict_self(State.fd, 0)) != -1 &&
(rc = sys_close(State.fd)) != -1 &&
(rc = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &sandbox)) != -1) {
State.fd = 0;
@ -117,9 +119,11 @@ static int err_close(int rc, int fd) {
static int unveil_init(void) {
int rc, fd;
State.fs_mask = UNVEIL_READ | UNVEIL_WRITE | UNVEIL_EXEC | UNVEIL_CREATE;
if ((rc = landlock_create_ruleset(0, 0, LANDLOCK_CREATE_RULESET_VERSION)) <
0) {
if (errno == EOPNOTSUPP) errno = ENOSYS;
if ((rc = landlock_create_ruleset(0, 0, LANDLOCK_CREATE_RULESET_VERSION)) ==
-1) {
if (errno == EOPNOTSUPP) {
errno = ENOSYS;
}
return -1;
}
if (rc < 2) {
@ -250,7 +254,7 @@ int sys_unveil_linux(const char *path, const char *permissions) {
}
/**
* Restricts filesystem operations, e.g.
* Makes files accessible, e.g.
*
* unveil(".", "r"); // current directory + children are visible
* unveil("/etc", "r"); // make /etc readable too
@ -264,6 +268,10 @@ int sys_unveil_linux(const char *path, const char *permissions) {
* should become unhidden. When you're finished, you call `unveil(0,0)`
* which commits your policy.
*
* This function requires OpenBSD or Linux 5.13+. We don't consider lack
* of system support to be an ENOSYS error, because the files will still
* become unveiled. Therefore we return 0 in such cases.
*
* There are some differences between unveil() on Linux versus OpenBSD.
*
* 1. Build your policy and lock it in one go. On OpenBSD, policies take
@ -333,8 +341,6 @@ int sys_unveil_linux(const char *path, const char *permissions) {
* the pledge promise "cpath".
*
* @return 0 on success, or -1 w/ errno
* @raise ENOSYS if host os isn't Linux or OpenBSD
* @raise ENOSYS if Landlock isn't supported on this kernel
* @raise EINVAL if one argument is set and the other is not
* @raise EINVAL if an invalid character in `permissions` was found
* @raise EPERM if unveil() is called after locking
@ -343,12 +349,17 @@ int sys_unveil_linux(const char *path, const char *permissions) {
* @threadsafe
*/
int unveil(const char *path, const char *permissions) {
int rc;
int e, rc;
e = errno;
if (IsLinux()) {
rc = sys_unveil_linux(path, permissions);
} else {
rc = sys_unveil(path, permissions);
}
if (rc == -1 && errno == ENOSYS) {
errno = e;
rc = 0;
}
STRACE("unveil(%#s, %#s) → %d% m", path, permissions, rc);
return rc;
}

View file

@ -26,6 +26,7 @@
*/
#include "libc/dns/prototxt.h"
#include "libc/nt/systeminfo.h"
#include "libc/str/str.h"
textwindows char *GetNtProtocolsTxtPath(char *pathbuf, uint32_t size) {
/* protocol, not plural */

View file

@ -26,6 +26,7 @@
*/
#include "libc/dns/servicestxt.h"
#include "libc/nt/systeminfo.h"
#include "libc/str/str.h"
textwindows char *GetNtServicesTxtPath(char *pathbuf, uint32_t size) {
const char *const kWinHostsPath = "\\drivers\\etc\\services";

View file

@ -26,6 +26,7 @@
*/
#include "libc/dns/ent.h"
#include "libc/dns/prototxt.h"
#include "libc/mem/mem.h"
struct protoent *getprotobyname(const char *name) {
static struct protoent *ptr0, pe0;

View file

@ -26,6 +26,7 @@
*/
#include "libc/dns/ent.h"
#include "libc/dns/prototxt.h"
#include "libc/mem/mem.h"
struct protoent *getprotobynumber(int proto) {
static struct protoent *ptr1, pe1;

View file

@ -25,10 +25,13 @@
OTHER DEALINGS IN THE SOFTWARE.
*/
#include "libc/bits/safemacros.internal.h"
#include "libc/dce.h"
#include "libc/dns/prototxt.h"
#include "libc/errno.h"
#include "libc/fmt/conv.h"
#include "libc/macros.internal.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
/**
* Opens and searches /etc/protocols to find number for a given name.

View file

@ -25,10 +25,13 @@
OTHER DEALINGS IN THE SOFTWARE.
*/
#include "libc/bits/safemacros.internal.h"
#include "libc/dce.h"
#include "libc/dns/prototxt.h"
#include "libc/errno.h"
#include "libc/fmt/conv.h"
#include "libc/macros.internal.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
/**
* Opens and searches /etc/protocols to find name for a given number.

View file

@ -25,10 +25,13 @@
OTHER DEALINGS IN THE SOFTWARE.
*/
#include "libc/bits/safemacros.internal.h"
#include "libc/dce.h"
#include "libc/dns/servicestxt.h"
#include "libc/errno.h"
#include "libc/fmt/conv.h"
#include "libc/macros.internal.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
/**
* Opens and searches /etc/services to find port for a given name.

View file

@ -25,10 +25,13 @@
OTHER DEALINGS IN THE SOFTWARE.
*/
#include "libc/bits/safemacros.internal.h"
#include "libc/dce.h"
#include "libc/dns/servicestxt.h"
#include "libc/errno.h"
#include "libc/fmt/conv.h"
#include "libc/macros.internal.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
/**
* Opens and searches /etc/services to find name for a given port.

View file

@ -17,6 +17,7 @@
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/fmt/fmt.h"
#include "libc/str/str.h"
int __xpg_strerror_r(int a, char *b, size_t c) {
return strerror_r(a, b, c);

View file

@ -1,10 +1,5 @@
#ifndef COSMOPOLITAN_LIBC_FMT_PFLINK_H_
#define COSMOPOLITAN_LIBC_FMT_PFLINK_H_
#include "libc/dce.h"
#include "libc/mem/mem.h"
#include "libc/runtime/runtime.h"
#include "libc/str/str.h"
#include "libc/unicode/unicode.h"
#if !(__ASSEMBLER__ + __LINKER__ + 0)
#ifndef __STRICT_ANSI__
@ -23,8 +18,8 @@
if (___PFLINK(FMT, strpbrk, "faAeg")) STATIC_YOINK("__fmt_dtoa"); \
if (___PFLINK(FMT, strpbrk, "cmrqs")) { \
if (___PFLINK(FMT, strstr, "%m")) STATIC_YOINK("strerror"); \
if (!IsTiny() && (___PFLINK(FMT, strstr, "%*") || \
___PFLINK(FMT, strpbrk, "0123456789"))) { \
if (___PFLINK(FMT, strstr, "%*") || \
___PFLINK(FMT, strpbrk, "0123456789")) { \
STATIC_YOINK("strnwidth"); \
STATIC_YOINK("strnwidth16"); \
STATIC_YOINK("wcsnwidth"); \
@ -63,36 +58,8 @@
* respects by disabling all the esoteric tuning in headers like this.
*/
#pragma GCC diagnostic ignored "-Wformat-security"
#endif /* __GNUC__ + 0 < 6 */
#else
#define PFLINK(FMT) FMT
#define SFLINK(FMT) FMT
#ifdef __GNUC__
__asm__(".section .yoink\n\t"
"nopl\t__fmt_dtoa(%rip)\n\t"
"nopl\tkCp437(%rip)\n\t"
"nopl\tstrerror(%rip)\n\t"
"nopl\tstrnwidth(%rip)\n\t"
"nopl\tstrnwidth16(%rip)\n\t"
"nopl\twcsnwidth(%rip)\n\t"
"nopl\tmalloc(%rip)\n\t"
"nopl\tcalloc(%rip)\n\t"
"nopl\t__grow(%rip)\n\t"
".previous");
#else
static long __pflink(long x) {
x |= kCp437[0];
x |= __fmt_dtoa(0, 0, 0, 0, 0, 0);
x |= strnwidth(0, 0, 0);
x |= strnwidth16(0, 0, 0);
x |= wcsnwidth(0, 0, 0);
x |= malloc(0);
x |= __grow(0, 0, 0, 0);
x |= (intptr_t)strerror(0);
x |= (intptr_t)calloc(0, 0);
return x;
}
#endif
#endif /* __STRICT_ANSI__ */
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
#endif /* COSMOPOLITAN_LIBC_FMT_PFLINK_H_ */

View file

@ -18,6 +18,7 @@
*/
#include "libc/fmt/conv.h"
#include "libc/fmt/fmt.h"
#include "libc/str/str.h"
static int GetExponent(int c) {
switch (c) {

View file

@ -17,7 +17,9 @@
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/bits/safemacros.internal.h"
#include "libc/dce.h"
#include "libc/fmt/fmt.h"
#include "libc/str/str.h"
/**
* Converts errno value to string non-reentrantly.

View file

@ -18,6 +18,7 @@
*/
#include "libc/fmt/fmt.h"
#include "libc/nt/runtime.h"
#include "libc/str/str.h"
/**
* Converts errno value to string.

View file

@ -21,6 +21,7 @@
#include "libc/limits.h"
#include "libc/macros.internal.h"
#include "libc/runtime/runtime.h"
#include "libc/str/str.h"
struct SprintfStr {
char *p;

View file

@ -39,6 +39,7 @@
#include "libc/log/log.h"
#include "libc/macros.internal.h"
#include "libc/mem/hook/hook.internal.h"
#include "libc/mem/mem.h"
#include "libc/nexgen32e/gc.internal.h"
#include "libc/nexgen32e/stackframe.h"
#include "libc/nt/enum/version.h"
@ -195,8 +196,7 @@ static uint64_t __asan_roundup2pow(uint64_t x) {
static char *__asan_utf8cpy(char *p, unsigned c) {
uint64_t z;
z = tpenc(c);
do
*p++ = z;
do *p++ = z;
while ((z >>= 8));
return p;
}
@ -947,8 +947,7 @@ static void __asan_trace(struct AsanTrace *bt, const struct StackFrame *bp) {
if (!__asan_checka(SHADOW(bp), sizeof(*bp) >> 3).kind) {
addr = bp->addr;
if (addr == weakaddr("__gc") && weakaddr("__gc")) {
do
--gi;
do --gi;
while ((addr = garbage->p[gi].ret) == weakaddr("__gc"));
}
bt->p[i] = addr;

View file

@ -1,7 +1,5 @@
#ifndef COSMOPOLITAN_LIBC_RUNTIME_PTHREAD_H_
#define COSMOPOLITAN_LIBC_RUNTIME_PTHREAD_H_
#include "libc/calls/struct/timespec.h"
#include "libc/dce.h"
#define PTHREAD_KEYS_MAX 64
@ -84,7 +82,6 @@ int pthread_mutex_init(pthread_mutex_t *, const pthread_mutexattr_t *);
int pthread_mutex_lock(pthread_mutex_t *);
int pthread_mutex_unlock(pthread_mutex_t *);
int pthread_mutex_trylock(pthread_mutex_t *);
int pthread_mutex_timedlock(pthread_mutex_t *, const struct timespec *);
int pthread_mutex_destroy(pthread_mutex_t *);
int pthread_mutex_consistent(pthread_mutex_t *);
int pthread_mutexattr_init(pthread_mutexattr_t *);
@ -94,8 +91,6 @@ int pthread_mutexattr_settype(pthread_mutexattr_t *, int);
int pthread_cond_init(pthread_cond_t *, const pthread_condattr_t *);
int pthread_cond_destroy(pthread_cond_t *);
int pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *);
int pthread_cond_timedwait(pthread_cond_t *, pthread_mutex_t *,
const struct timespec *);
int pthread_cond_broadcast(pthread_cond_t *);
int pthread_cancel(pthread_t);
int pthread_cond_signal(pthread_cond_t *);
@ -103,10 +98,8 @@ int pthread_rwlock_init(pthread_rwlock_t *, const pthread_rwlockattr_t *);
int pthread_rwlock_destroy(pthread_rwlock_t *);
int pthread_rwlock_rdlock(pthread_rwlock_t *);
int pthread_rwlock_tryrdlock(pthread_rwlock_t *);
int pthread_rwlock_timedrdlock(pthread_rwlock_t *, const struct timespec *);
int pthread_rwlock_wrlock(pthread_rwlock_t *);
int pthread_rwlock_trywrlock(pthread_rwlock_t *);
int pthread_rwlock_timedwrlock(pthread_rwlock_t *, const struct timespec *);
int pthread_rwlock_unlock(pthread_rwlock_t *);
int pthread_key_create(pthread_key_t *, pthread_key_dtor);
int pthread_key_delete(pthread_key_t);
@ -139,9 +132,8 @@ void *pthread_getspecific(pthread_key_t);
#define pthread_mutex_unlock(mutex) \
((mutex)->attr == PTHREAD_MUTEX_NORMAL \
? (__atomic_store_n(&(mutex)->lock, 0, __ATOMIC_RELAXED), \
((IsLinux() || IsOpenbsd()) && \
__atomic_load_n(&(mutex)->waits, __ATOMIC_RELAXED) && \
_pthread_mutex_wake(mutex)), \
__atomic_load_n(&(mutex)->waits, __ATOMIC_RELAXED) && \
_pthread_mutex_wake(mutex), \
0) \
: pthread_mutex_unlock(mutex))
#endif

View file

@ -19,6 +19,7 @@
#include "libc/assert.h"
#include "libc/bits/atomic.h"
#include "libc/calls/calls.h"
#include "libc/dce.h"
#include "libc/errno.h"
#include "libc/intrin/kprintf.h"
#include "libc/intrin/pthread.h"

View file

@ -17,9 +17,15 @@
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/bits/atomic.h"
#include "libc/dce.h"
#include "libc/intrin/futex.internal.h"
#include "libc/intrin/pthread.h"
int _pthread_mutex_wake(pthread_mutex_t *mutex) {
return _futex_wake(&mutex->lock, 1);
if ((IsLinux() || IsOpenbsd()) &&
atomic_load_explicit(&mutex->waits, memory_order_relaxed) > 0) {
return _futex_wake(&mutex->lock, 1);
} else {
return 0;
}
}

View file

@ -24,6 +24,7 @@
#include "libc/nt/enum/formatmessageflags.h"
#include "libc/nt/enum/lang.h"
#include "libc/nt/process.h"
#include "libc/str/str.h"
/**
* Converts errno value to string with explicit windows errno too.

View file

@ -2,6 +2,7 @@
#define LIBC_ISYSTEM_STDIO_H_
#include "libc/calls/calls.h"
#include "libc/fmt/fmt.h"
#include "libc/stdio/lock.h"
#include "libc/stdio/stdio.h"
#include "libc/stdio/temp.h"
#endif

View file

@ -24,6 +24,7 @@
#include "libc/math.h"
#include "libc/runtime/runtime.h"
#include "libc/stdio/stdio.h"
#include "libc/str/str.h"
static double GetTotal(const struct countbranch *p) {
return p->total;

View file

@ -19,6 +19,7 @@
#include "libc/errno.h"
#include "libc/log/log.h"
#include "libc/stdio/stdio.h"
#include "libc/str/str.h"
/**
* Writes error messages to standard error.

View file

@ -24,6 +24,7 @@
#include "libc/macros.internal.h"
#include "libc/runtime/stack.h"
#include "libc/runtime/symbols.internal.h"
#include "libc/str/str.h"
#include "libc/sysv/consts/map.h"
#include "libc/sysv/consts/prot.h"
#include "libc/sysv/consts/sa.h"

View file

@ -33,6 +33,7 @@
#include "libc/math.h"
#include "libc/nexgen32e/nexgen32e.h"
#include "libc/runtime/runtime.h"
#include "libc/stdio/lock.h"
#include "libc/stdio/stdio.h"
#include "libc/str/str.h"
#include "libc/sysv/consts/fileno.h"

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp gdi32,__imp_GdiCurrentProcessSplWow64,GdiCurrentProcessSplWow64,1510

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp kernel32,__imp_GetSystemWow64DirectoryA,GetSystemWow64DirectoryA,0

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp kernel32,__imp_GetSystemWow64DirectoryW,GetSystemWow64DirectoryW,0

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp kernel32,__imp_IsWow64Process,IsWow64Process,0

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp kernel32,__imp_Wow64DisableWow64FsRedirection,Wow64DisableWow64FsRedirection,0

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp kernel32,__imp_Wow64EnableWow64FsRedirection,Wow64EnableWow64FsRedirection,1545

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp kernel32,__imp_Wow64GetThreadContext,Wow64GetThreadContext,1546

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp kernel32,__imp_Wow64GetThreadSelectorEntry,Wow64GetThreadSelectorEntry,1547

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp kernel32,__imp_Wow64RevertWow64FsRedirection,Wow64RevertWow64FsRedirection,0

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp kernel32,__imp_Wow64SetThreadContext,Wow64SetThreadContext,1549

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp kernel32,__imp_Wow64SuspendThread,Wow64SuspendThread,1550

View file

@ -667,8 +667,6 @@ imp 'GetSystemTimePreciseAsFileTime' GetSystemTimePreciseAsFileTime kernel3
imp 'GetSystemTimes' GetSystemTimes kernel32 0 3
imp 'GetSystemWindowsDirectory' GetSystemWindowsDirectoryW kernel32 0
imp 'GetSystemWindowsDirectoryA' GetSystemWindowsDirectoryA kernel32 0
imp 'GetSystemWow64Directory' GetSystemWow64DirectoryW kernel32 0
imp 'GetSystemWow64DirectoryA' GetSystemWow64DirectoryA kernel32 0
imp 'GetTapeParameters' GetTapeParameters kernel32 756
imp 'GetTapePosition' GetTapePosition kernel32 757
imp 'GetTapeStatus' GetTapeStatus kernel32 758
@ -809,7 +807,6 @@ imp 'IsValidLanguageGroup' IsValidLanguageGroup kernel32 0
imp 'IsValidLocale' IsValidLocale kernel32 0
imp 'IsValidLocaleName' IsValidLocaleName kernel32 0
imp 'IsValidNLSVersion' IsValidNLSVersion kernel32 0
imp 'IsWow64Process' IsWow64Process kernel32 0
imp 'K32EmptyWorkingSet' K32EmptyWorkingSet kernel32 0
imp 'K32EnumDeviceDrivers' K32EnumDeviceDrivers kernel32 0
imp 'K32EnumPageFiles' K32EnumPageFilesW kernel32 0
@ -1305,13 +1302,6 @@ imp 'WerpNotifyLoadStringResourceWorker' WerpNotifyLoadStringResourceWorker
imp 'WerpNotifyUseStringResourceWorker' WerpNotifyUseStringResourceWorker kernel32 1541
imp 'WideCharToMultiByte' WideCharToMultiByte kernel32 1553 8
imp 'WinExec' WinExec kernel32 1543
imp 'Wow64DisableWow64FsRedirection' Wow64DisableWow64FsRedirection kernel32 0
imp 'Wow64EnableWow64FsRedirection' Wow64EnableWow64FsRedirection kernel32 1545
imp 'Wow64GetThreadContext' Wow64GetThreadContext kernel32 1546
imp 'Wow64GetThreadSelectorEntry' Wow64GetThreadSelectorEntry kernel32 1547
imp 'Wow64RevertWow64FsRedirection' Wow64RevertWow64FsRedirection kernel32 0
imp 'Wow64SetThreadContext' Wow64SetThreadContext kernel32 1549
imp 'Wow64SuspendThread' Wow64SuspendThread kernel32 1550
imp 'WriteConsole' WriteConsoleW kernel32 0 5
imp 'WriteConsoleA' WriteConsoleA kernel32 0 5
imp 'WriteConsoleInput' WriteConsoleInputW kernel32 0 4
@ -2598,7 +2588,6 @@ imp 'IsWindowInDestroy' IsWindowInDestroy user32 2087
imp 'IsWindowRedirectedForPrint' IsWindowRedirectedForPrint user32 2088
imp 'IsWindowUnicode' IsWindowUnicode user32 2089
imp 'IsWindowVisible' IsWindowVisible user32 2090 1
imp 'IsWow64Message' IsWow64Message user32 2091
imp 'IsZoomed' IsZoomed user32 2092 1
imp 'KillTimer' KillTimer user32 2093 2
imp 'LoadAccelerators' LoadAcceleratorsW user32 2095
@ -3376,7 +3365,6 @@ imp 'GdiConvertRegion' GdiConvertRegion gdi32 1506
imp 'GdiConvertToDevmode' GdiConvertToDevmodeW gdi32 1507
imp 'GdiCreateLocalEnhMetaFile' GdiCreateLocalEnhMetaFile gdi32 1508
imp 'GdiCreateLocalMetaFilePict' GdiCreateLocalMetaFilePict gdi32 1509
imp 'GdiCurrentProcessSplWow64' GdiCurrentProcessSplWow64 gdi32 1510
imp 'GdiDeleteLocalDC' GdiDeleteLocalDC gdi32 1511
imp 'GdiDeleteSpoolFileHandle' GdiDeleteSpoolFileHandle gdi32 1512
imp 'GdiDescribePixelFormat' GdiDescribePixelFormat gdi32 1513
@ -4095,89 +4083,6 @@ imp 'InitializeProcessForWsWatch' InitializeProcessForWsWatch psapi 0
imp 'QueryWorkingSet' QueryWorkingSet psapi 0
imp 'QueryWorkingSetEx' QueryWorkingSetEx psapi 0
# NETAPI32.DLL
#
# Name Actual DLL Hint Arity
imp 'I_BrowserSetNetlogonState' I_BrowserSetNetlogonState netapi32 34
imp 'NetAccessAdd' NetAccessAdd netapi32 71
imp 'NetAccessDel' NetAccessDel netapi32 72
imp 'NetAccessEnum' NetAccessEnum netapi32 73
imp 'NetAccessGetInfo' NetAccessGetInfo netapi32 74
imp 'NetAccessGetUserPerms' NetAccessGetUserPerms netapi32 75
imp 'NetAccessSetInfo' NetAccessSetInfo netapi32 76
imp 'NetAlertRaise' NetAlertRaise netapi32 79
imp 'NetAlertRaiseEx' NetAlertRaiseEx netapi32 80
imp 'NetAuditClear' NetAuditClear netapi32 85
imp 'NetAuditRead' NetAuditRead netapi32 86
imp 'NetAuditWrite' NetAuditWrite netapi32 87
imp 'NetConfigGet' NetConfigGet netapi32 88
imp 'NetConfigGetAll' NetConfigGetAll netapi32 89
imp 'NetConfigSet' NetConfigSet netapi32 90
imp 'NetErrorLogClear' NetErrorLogClear netapi32 124
imp 'NetErrorLogRead' NetErrorLogRead netapi32 125
imp 'NetErrorLogWrite' NetErrorLogWrite netapi32 126
imp 'NetMessageBufferSend' NetMessageBufferSend netapi32 161
imp 'NetMessageNameAdd' NetMessageNameAdd netapi32 162
imp 'NetMessageNameDel' NetMessageNameDel netapi32 163
imp 'NetMessageNameEnum' NetMessageNameEnum netapi32 164
imp 'NetMessageNameGetInfo' NetMessageNameGetInfo netapi32 165
imp 'NetRegisterDomainNameChangeNotification' NetRegisterDomainNameChangeNotification netapi32 169
imp 'NetReplExportDirAdd' NetReplExportDirAdd netapi32 175
imp 'NetReplExportDirDel' NetReplExportDirDel netapi32 176
imp 'NetReplExportDirEnum' NetReplExportDirEnum netapi32 177
imp 'NetReplExportDirGetInfo' NetReplExportDirGetInfo netapi32 178
imp 'NetReplExportDirLock' NetReplExportDirLock netapi32 179
imp 'NetReplExportDirSetInfo' NetReplExportDirSetInfo netapi32 180
imp 'NetReplExportDirUnlock' NetReplExportDirUnlock netapi32 181
imp 'NetReplGetInfo' NetReplGetInfo netapi32 182
imp 'NetReplImportDirAdd' NetReplImportDirAdd netapi32 183
imp 'NetReplImportDirDel' NetReplImportDirDel netapi32 184
imp 'NetReplImportDirEnum' NetReplImportDirEnum netapi32 185
imp 'NetReplImportDirGetInfo' NetReplImportDirGetInfo netapi32 186
imp 'NetReplImportDirLock' NetReplImportDirLock netapi32 187
imp 'NetReplImportDirUnlock' NetReplImportDirUnlock netapi32 188
imp 'NetReplSetInfo' NetReplSetInfo netapi32 189
imp 'NetServerEnum' NetServerEnum netapi32 202
imp 'NetServerEnumEx' NetServerEnumEx netapi32 203
imp 'NetServiceControl' NetServiceControl netapi32 210
imp 'NetServiceEnum' NetServiceEnum netapi32 211
imp 'NetServiceGetInfo' NetServiceGetInfo netapi32 212
imp 'NetServiceInstall' NetServiceInstall netapi32 213
imp 'NetStatisticsGet' NetStatisticsGet netapi32 227
imp 'NetUnregisterDomainNameChangeNotification' NetUnregisterDomainNameChangeNotification netapi32 229
imp 'NetWkstaGetInfo' NetWkstaGetInfo netapi32 248
imp 'NetWkstaSetInfo' NetWkstaSetInfo netapi32 249
imp 'Netbios' Netbios netapi32 257
imp 'NetpAddTlnFtinfoEntry' NetpAddTlnFtinfoEntry netapi32 258
imp 'NetpAllocFtinfoEntry' NetpAllocFtinfoEntry netapi32 259
imp 'NetpAssertFailed' NetpAssertFailed netapi32 260
imp 'NetpCleanFtinfoContext' NetpCleanFtinfoContext netapi32 261
imp 'NetpCloseConfigData' NetpCloseConfigData netapi32 262
imp 'NetpCopyFtinfoContext' NetpCopyFtinfoContext netapi32 263
imp 'NetpDbgPrint' NetpDbgPrint netapi32 264
imp 'NetpGetConfigBool' NetpGetConfigBool netapi32 265
imp 'NetpGetConfigDword' NetpGetConfigDword netapi32 266
imp 'NetpGetConfigTStrArray' NetpGetConfigTStrArray netapi32 267
imp 'NetpGetConfigValue' NetpGetConfigValue netapi32 268
imp 'NetpGetFileSecurity' NetpGetFileSecurity netapi32 269
imp 'NetpHexDump' NetpHexDump netapi32 270
imp 'NetpInitFtinfoContext' NetpInitFtinfoContext netapi32 271
imp 'NetpIsUncComputerNameValid' NetpIsUncComputerNameValid netapi32 273
imp 'NetpMergeFtinfo' NetpMergeFtinfo netapi32 274
imp 'NetpNetBiosReset' NetpNetBiosReset netapi32 275
imp 'NetpNetBiosStatusToApiStatus' NetpNetBiosStatusToApiStatus netapi32 276
imp 'NetpOpenConfigData' NetpOpenConfigData netapi32 277
imp 'NetpSetFileSecurity' NetpSetFileSecurity netapi32 278
imp 'RxNetAccessAdd' RxNetAccessAdd netapi32 288
imp 'RxNetAccessDel' RxNetAccessDel netapi32 289
imp 'RxNetAccessEnum' RxNetAccessEnum netapi32 290
imp 'RxNetAccessGetInfo' RxNetAccessGetInfo netapi32 291
imp 'RxNetAccessGetUserPerms' RxNetAccessGetUserPerms netapi32 292
imp 'RxNetAccessSetInfo' RxNetAccessSetInfo netapi32 293
imp 'RxNetServerEnum' RxNetServerEnum netapi32 294
imp 'RxNetUserPasswordSet' RxNetUserPasswordSet netapi32 295
imp 'RxRemoteApi' RxRemoteApi netapi32 296
# URL.DLL
#
# Name Actual DLL Hint Arity
@ -4192,265 +4097,6 @@ imp 'InetIsOffline' InetIsOffline url 106
imp 'MIMEAssociationDialog' MIMEAssociationDialogW url 108
imp 'MailToProtocolHandler' MailToProtocolHandler url 109
# SHELL32.DLL
#
# Name Actual DLL Hint Arity
imp 'AppCompat_RunDLLW' AppCompat_RunDLLW shell32 255
imp 'AssocCreateForClasses' AssocCreateForClasses shell32 263
imp 'AssocGetDetailsOfPropKey' AssocGetDetailsOfPropKey shell32 267
imp 'CDefFolderMenu_Create2' CDefFolderMenu_Create2 shell32 701
imp 'CIDLData_CreateFromIDArray' CIDLData_CreateFromIDArray shell32 83
imp 'CStorageItem_GetValidatedStorageItemObject' CStorageItem_GetValidatedStorageItemObject shell32 937
imp 'CheckEscapes' CheckEscapesW shell32 268
imp 'CommandLineToArgv' CommandLineToArgvW shell32 269
imp 'Control_RunDLL' Control_RunDLL shell32 272
imp 'Control_RunDLLAsUser' Control_RunDLLAsUserW shell32 274
imp 'Control_RunDLLW' Control_RunDLLW shell32 275
imp 'DAD_AutoScroll' DAD_AutoScroll shell32 129
imp 'DAD_DragEnterEx' DAD_DragEnterEx shell32 131
imp 'DAD_DragEnterEx2' DAD_DragEnterEx2 shell32 22
imp 'DAD_DragLeave' DAD_DragLeave shell32 132
imp 'DAD_DragMove' DAD_DragMove shell32 134
imp 'DAD_SetDragImage' DAD_SetDragImage shell32 136
imp 'DAD_ShowDragImage' DAD_ShowDragImage shell32 137
imp 'DllGetActivationFactory' DllGetActivationFactory shell32 277
imp 'DllGetVersion' DllGetVersion shell32 279
imp 'DllInstall' DllInstall shell32 280
imp 'DllRegisterServer' DllRegisterServer shell32 281
imp 'DllUnregisterServer' DllUnregisterServer shell32 282
imp 'DoEnvironmentSubst' DoEnvironmentSubstW shell32 284
imp 'DragAcceptFiles' DragAcceptFiles shell32 285
imp 'DragFinish' DragFinish shell32 286
imp 'DragQueryFile' DragQueryFileW shell32 290
imp 'DragQueryFileAor' DragQueryFileAorW shell32 289
imp 'DragQueryPoint' DragQueryPoint shell32 291
imp 'DriveType' DriveType shell32 64
imp 'DuplicateIcon' DuplicateIcon shell32 292
imp 'ExtractAssociatedIcon' ExtractAssociatedIconW shell32 296
imp 'ExtractAssociatedIconEx' ExtractAssociatedIconExW shell32 295
imp 'ExtractIcon' ExtractIconW shell32 301
imp 'ExtractIconEx' ExtractIconExW shell32 300
imp 'FindExecutable' FindExecutableW shell32 303
imp 'FreeIconList' FreeIconList shell32 304
imp 'GetCurrentProcessExplicitAppUserModelID' GetCurrentProcessExplicitAppUserModelID shell32 305
imp 'GetFileNameFromBrowse' GetFileNameFromBrowse shell32 63
imp 'GetSystemPersistedStorageItemList' GetSystemPersistedStorageItemList shell32 919
imp 'ILAppendID' ILAppendID shell32 154
imp 'ILClone' ILClone shell32 18
imp 'ILCloneFirst' ILCloneFirst shell32 19
imp 'ILCombine' ILCombine shell32 25
imp 'ILCreateFromPath' ILCreateFromPathW shell32 190
imp 'ILFindChild' ILFindChild shell32 24
imp 'ILFindLastID' ILFindLastID shell32 16
imp 'ILFree' ILFree shell32 155
imp 'ILGetNext' ILGetNext shell32 153
imp 'ILGetSize' ILGetSize shell32 152
imp 'ILIsEqual' ILIsEqual shell32 21
imp 'ILIsParent' ILIsParent shell32 23
imp 'ILLoadFromStreamEx' ILLoadFromStreamEx shell32 846
imp 'ILRemoveLastID' ILRemoveLastID shell32 17
imp 'ILSaveToStream' ILSaveToStream shell32 27
imp 'InitNetworkAddressControl' InitNetworkAddressControl shell32 306
imp 'InternalExtractIconList' InternalExtractIconListW shell32 308
imp 'IsDesktopExplorerProcess' IsDesktopExplorerProcess shell32 942
imp 'IsLFNDrive' IsLFNDriveW shell32 42
imp 'IsNetDrive' IsNetDrive shell32 66
imp 'IsProcessAnExplorer' IsProcessAnExplorer shell32 941
imp 'IsUserAnAdmin' IsUserAnAdmin shell32 680
imp 'LaunchMSHelp_RunDLLW' LaunchMSHelp_RunDLLW shell32 309
imp 'OpenAs_RunDLL' OpenAs_RunDLL shell32 81
imp 'OpenAs_RunDLLW' OpenAs_RunDLLW shell32 133
imp 'OpenRegStream' OpenRegStream shell32 85
imp 'Options_RunDLL' Options_RunDLL shell32 310
imp 'Options_RunDLLW' Options_RunDLLW shell32 312
imp 'PathCleanupSpec' PathCleanupSpec shell32 171
imp 'PathGetShortPath' PathGetShortPath shell32 92
imp 'PathIsExe' PathIsExe shell32 43
imp 'PathIsSlow' PathIsSlowW shell32 239
imp 'PathMakeUniqueName' PathMakeUniqueName shell32 47
imp 'PathQualify' PathQualify shell32 49
imp 'PathResolve' PathResolve shell32 51
imp 'PathYetAnotherMakeUniqueName' PathYetAnotherMakeUniqueName shell32 75
imp 'PickIconDlg' PickIconDlg shell32 62
imp 'PifMgr_CloseProperties' PifMgr_CloseProperties shell32 13
imp 'PifMgr_GetProperties' PifMgr_GetProperties shell32 10
imp 'PifMgr_OpenProperties' PifMgr_OpenProperties shell32 9
imp 'PifMgr_SetProperties' PifMgr_SetProperties shell32 11
imp 'PrepareDiscForBurnRunDll' PrepareDiscForBurnRunDllW shell32 135
imp 'PrintersGetCommand_RunDLL' PrintersGetCommand_RunDLL shell32 138
imp 'PrintersGetCommand_RunDLLW' PrintersGetCommand_RunDLLW shell32 150
imp 'ReadCabinetState' ReadCabinetState shell32 654
imp 'RealDriveType' RealDriveType shell32 524
imp 'RealShellExecute' RealShellExecuteW shell32 226
imp 'RealShellExecuteEx' RealShellExecuteExW shell32 208
imp 'RegenerateUserEnvironment' RegenerateUserEnvironment shell32 313
imp 'RestartDialog' RestartDialog shell32 59
imp 'RestartDialogEx' RestartDialogEx shell32 730
imp 'RunAsNewUser_RunDLLW' RunAsNewUser_RunDLLW shell32 314
imp 'SHAddDefaultPropertiesByExt' SHAddDefaultPropertiesByExt shell32 315
imp 'SHAddFromPropSheetExtArray' SHAddFromPropSheetExtArray shell32 167
imp 'SHAddToRecentDocs' SHAddToRecentDocs shell32 316
imp 'SHAlloc' SHAlloc shell32 196
imp 'SHAppBarMessage' SHAppBarMessage shell32 317
imp 'SHAssocEnumHandlers' SHAssocEnumHandlers shell32 318
imp 'SHAssocEnumHandlersForProtocolByApplication' SHAssocEnumHandlersForProtocolByApplication shell32 319
imp 'SHBindToFolderIDListParent' SHBindToFolderIDListParent shell32 320
imp 'SHBindToFolderIDListParentEx' SHBindToFolderIDListParentEx shell32 321
imp 'SHBindToObject' SHBindToObject shell32 322
imp 'SHBindToParent' SHBindToParent shell32 323
imp 'SHBrowseForFolder' SHBrowseForFolderW shell32 326
imp 'SHCLSIDFromString' SHCLSIDFromString shell32 147
imp 'SHChangeNotification_Lock' SHChangeNotification_Lock shell32 644
imp 'SHChangeNotification_Unlock' SHChangeNotification_Unlock shell32 645
imp 'SHChangeNotify' SHChangeNotify shell32 327
imp 'SHChangeNotifyDeregister' SHChangeNotifyDeregister shell32 4
imp 'SHChangeNotifyRegister' SHChangeNotifyRegister shell32 2
imp 'SHChangeNotifyRegisterThread' SHChangeNotifyRegisterThread shell32 328
imp 'SHChangeNotifySuspendResume' SHChangeNotifySuspendResume shell32 329
imp 'SHCloneSpecialIDList' SHCloneSpecialIDList shell32 89
imp 'SHCoCreateInstanceWorker' SHCoCreateInstanceWorker shell32 330
imp 'SHCreateAssociationRegistration' SHCreateAssociationRegistration shell32 331
imp 'SHCreateCategoryEnum' SHCreateCategoryEnum shell32 332
imp 'SHCreateDataObject' SHCreateDataObject shell32 333
imp 'SHCreateDefaultContextMenu' SHCreateDefaultContextMenu shell32 334
imp 'SHCreateDefaultExtractIcon' SHCreateDefaultExtractIcon shell32 335
imp 'SHCreateDefaultPropertiesOp' SHCreateDefaultPropertiesOp shell32 336
imp 'SHCreateDirectory' SHCreateDirectory shell32 165
imp 'SHCreateDirectoryEx' SHCreateDirectoryExW shell32 338
imp 'SHCreateDrvExtIcon' SHCreateDrvExtIcon shell32 339
imp 'SHCreateFileExtractIcon' SHCreateFileExtractIconW shell32 743
imp 'SHCreateItemFromIDList' SHCreateItemFromIDList shell32 340
imp 'SHCreateItemFromParsingName' SHCreateItemFromParsingName shell32 341
imp 'SHCreateItemFromRelativeName' SHCreateItemFromRelativeName shell32 342
imp 'SHCreateItemInKnownFolder' SHCreateItemInKnownFolder shell32 343
imp 'SHCreateItemWithParent' SHCreateItemWithParent shell32 344
imp 'SHCreateLocalServerRunDll' SHCreateLocalServerRunDll shell32 345
imp 'SHCreateProcessAsUser' SHCreateProcessAsUserW shell32 346
imp 'SHCreatePropSheetExtArray' SHCreatePropSheetExtArray shell32 168
imp 'SHCreateQueryCancelAutoPlayMoniker' SHCreateQueryCancelAutoPlayMoniker shell32 347
imp 'SHCreateShellFolderView' SHCreateShellFolderView shell32 256
imp 'SHCreateShellFolderViewEx' SHCreateShellFolderViewEx shell32 174
imp 'SHCreateShellItem' SHCreateShellItem shell32 348
imp 'SHCreateShellItemArray' SHCreateShellItemArray shell32 349
imp 'SHCreateShellItemArrayFromDataObject' SHCreateShellItemArrayFromDataObject shell32 350
imp 'SHCreateShellItemArrayFromIDLists' SHCreateShellItemArrayFromIDLists shell32 351
imp 'SHCreateShellItemArrayFromShellItem' SHCreateShellItemArrayFromShellItem shell32 352
imp 'SHCreateStdEnumFmtEtc' SHCreateStdEnumFmtEtc shell32 74
imp 'SHDefExtractIcon' SHDefExtractIconW shell32 6
imp 'SHDestroyPropSheetExtArray' SHDestroyPropSheetExtArray shell32 169
imp 'SHDoDragDrop' SHDoDragDrop shell32 88
imp 'SHEmptyRecycleBin' SHEmptyRecycleBinW shell32 487
imp 'SHEnableServiceObject' SHEnableServiceObject shell32 488
imp 'SHEnumerateUnreadMailAccounts' SHEnumerateUnreadMailAccountsW shell32 489
imp 'SHEvaluateSystemCommandTemplate' SHEvaluateSystemCommandTemplate shell32 490
imp 'SHExtractIcons' SHExtractIconsW shell32 491
imp 'SHFileOperation' SHFileOperationW shell32 494
imp 'SHFindFiles' SHFindFiles shell32 90
imp 'SHFind_InitMenuPopup' SHFind_InitMenuPopup shell32 149
imp 'SHFlushSFCache' SHFlushSFCache shell32 526
imp 'SHFormatDrive' SHFormatDrive shell32 495
imp 'SHFree' SHFree shell32 195
imp 'SHFreeNameMappings' SHFreeNameMappings shell32 496
imp 'SHGetAttributesFromDataObject' SHGetAttributesFromDataObject shell32 750
imp 'SHGetDataFromIDList' SHGetDataFromIDListW shell32 498
imp 'SHGetDesktopFolder' SHGetDesktopFolder shell32 499
imp 'SHGetDiskFreeSpaceEx' SHGetDiskFreeSpaceExW shell32 502
imp 'SHGetDriveMedia' SHGetDriveMedia shell32 503
imp 'SHGetFileInfo' SHGetFileInfoW shell32 506
imp 'SHGetFolderLocation' SHGetFolderLocation shell32 507
imp 'SHGetFolderPath' SHGetFolderPathW shell32 512
imp 'SHGetFolderPathAndSubDir' SHGetFolderPathAndSubDirW shell32 510
imp 'SHGetFolderPathEx' SHGetFolderPathEx shell32 511
imp 'SHGetIDListFromObject' SHGetIDListFromObject shell32 513
imp 'SHGetIconOverlayIndex' SHGetIconOverlayIndexW shell32 515
imp 'SHGetImageList' SHGetImageList shell32 727
imp 'SHGetInstanceExplorer' SHGetInstanceExplorer shell32 516
imp 'SHGetItemFromDataObject' SHGetItemFromDataObject shell32 517
imp 'SHGetItemFromObject' SHGetItemFromObject shell32 518
imp 'SHGetKnownFolderIDList' SHGetKnownFolderIDList shell32 519
imp 'SHGetKnownFolderItem' SHGetKnownFolderItem shell32 527
imp 'SHGetKnownFolderPath' SHGetKnownFolderPath shell32 528
imp 'SHGetLocalizedName' SHGetLocalizedName shell32 529
imp 'SHGetMalloc' SHGetMalloc shell32 530
imp 'SHGetNameFromIDList' SHGetNameFromIDList shell32 531
imp 'SHGetNewLinkInfo' SHGetNewLinkInfoW shell32 180
imp 'SHGetPathFromIDList' SHGetPathFromIDListW shell32 536
imp 'SHGetPathFromIDListEx' SHGetPathFromIDListEx shell32 535
imp 'SHGetPropertyStoreForWindow' SHGetPropertyStoreForWindow shell32 537
imp 'SHGetPropertyStoreFromIDList' SHGetPropertyStoreFromIDList shell32 538
imp 'SHGetPropertyStoreFromParsingName' SHGetPropertyStoreFromParsingName shell32 539
imp 'SHGetRealIDL' SHGetRealIDL shell32 98
imp 'SHGetSetFolderCustomSettings' SHGetSetFolderCustomSettings shell32 709
imp 'SHGetSetSettings' SHGetSetSettings shell32 68
imp 'SHGetSettings' SHGetSettings shell32 540
imp 'SHGetSpecialFolderLocation' SHGetSpecialFolderLocation shell32 541
imp 'SHGetSpecialFolderPath' SHGetSpecialFolderPathW shell32 543
imp 'SHGetStockIconInfo' SHGetStockIconInfo shell32 544
imp 'SHGetTemporaryPropertyForItem' SHGetTemporaryPropertyForItem shell32 545
imp 'SHGetUnreadMailCount' SHGetUnreadMailCountW shell32 546
imp 'SHHandleUpdateImage' SHHandleUpdateImage shell32 193
imp 'SHHelpShortcuts_RunDLL' SHHelpShortcuts_RunDLL shell32 228
imp 'SHHelpShortcuts_RunDLLW' SHHelpShortcuts_RunDLLW shell32 238
imp 'SHILCreateFromPath' SHILCreateFromPath shell32 28
imp 'SHInvokePrinterCommand' SHInvokePrinterCommandW shell32 548
imp 'SHIsFileAvailableOffline' SHIsFileAvailableOffline shell32 549
imp 'SHLimitInputEdit' SHLimitInputEdit shell32 747
imp 'SHLoadInProc' SHLoadInProc shell32 550
imp 'SHLoadNonloadedIconOverlayIdentifiers' SHLoadNonloadedIconOverlayIdentifiers shell32 551
imp 'SHMapPIDLToSystemImageListIndex' SHMapPIDLToSystemImageListIndex shell32 77
imp 'SHMultiFileProperties' SHMultiFileProperties shell32 716
imp 'SHObjectProperties' SHObjectProperties shell32 178
imp 'SHOpenFolderAndSelectItems' SHOpenFolderAndSelectItems shell32 552
imp 'SHOpenPropSheet' SHOpenPropSheetW shell32 80
imp 'SHOpenWithDialog' SHOpenWithDialog shell32 553
imp 'SHParseDisplayName' SHParseDisplayName shell32 554
imp 'SHPathPrepareForWrite' SHPathPrepareForWriteW shell32 556
imp 'SHPropStgCreate' SHPropStgCreate shell32 685
imp 'SHPropStgReadMultiple' SHPropStgReadMultiple shell32 688
imp 'SHPropStgWriteMultiple' SHPropStgWriteMultiple shell32 689
imp 'SHQueryRecycleBin' SHQueryRecycleBinW shell32 558
imp 'SHQueryUserNotificationState' SHQueryUserNotificationState shell32 559
imp 'SHRemoveLocalizedName' SHRemoveLocalizedName shell32 560
imp 'SHReplaceFromPropSheetExtArray' SHReplaceFromPropSheetExtArray shell32 170
imp 'SHResolveLibrary' SHResolveLibrary shell32 561
imp 'SHRestricted' SHRestricted shell32 100
imp 'SHSetDefaultProperties' SHSetDefaultProperties shell32 562
imp 'SHSetFolderPath' SHSetFolderPathW shell32 232
imp 'SHSetInstanceExplorer' SHSetInstanceExplorer shell32 176
imp 'SHSetKnownFolderPath' SHSetKnownFolderPath shell32 563
imp 'SHSetLocalizedName' SHSetLocalizedName shell32 564
imp 'SHSetTemporaryPropertyForItem' SHSetTemporaryPropertyForItem shell32 565
imp 'SHSetUnreadMailCount' SHSetUnreadMailCountW shell32 566
imp 'SHShellFolderView_Message' SHShellFolderView_Message shell32 73
imp 'SHShowManageLibraryUI' SHShowManageLibraryUI shell32 567
imp 'SHSimpleIDListFromPath' SHSimpleIDListFromPath shell32 162
imp 'SHStartNetConnectionDialog' SHStartNetConnectionDialogW shell32 14
imp 'SHTestTokenMembership' SHTestTokenMembership shell32 245
imp 'SHUpdateImage' SHUpdateImageW shell32 192
imp 'SHUpdateRecycleBinIcon' SHUpdateRecycleBinIcon shell32 568
imp 'SHValidateUNC' SHValidateUNC shell32 173
imp 'SetCurrentProcessExplicitAppUserModelID' SetCurrentProcessExplicitAppUserModelID shell32 569
imp 'SheChangeDirEx' SheChangeDirExW shell32 571
imp 'SheSetCurDrive' SheSetCurDrive shell32 573
imp 'ShellAbout' ShellAboutW shell32 575
imp 'ShellExec_RunDLL' ShellExec_RunDLL shell32 576
imp 'ShellExec_RunDLLW' ShellExec_RunDLLW shell32 578
imp 'ShellExecute' ShellExecuteW shell32 583
imp 'ShellExecuteEx' ShellExecuteExW shell32 582
imp 'ShellHookProc' ShellHookProc shell32 584
imp 'Shell_GetCachedImageIndex' Shell_GetCachedImageIndexW shell32 586
imp 'Shell_GetImageLists' Shell_GetImageLists shell32 71
imp 'Shell_MergeMenus' Shell_MergeMenus shell32 67
imp 'Shell_NotifyIcon' Shell_NotifyIconW shell32 590
imp 'Shell_NotifyIconGetRect' Shell_NotifyIconGetRect shell32 589
imp 'SignalFileOpen' SignalFileOpen shell32 103
imp 'StgMakeUniqueName' StgMakeUniqueName shell32 682
imp 'UsersLibrariesFolderUI_CreateInstance' UsersLibrariesFolderUI_CreateInstance shell32 615
imp 'WOWShellExecute' WOWShellExecute shell32 616
imp 'WaitForExplorerRestart' WaitForExplorerRestartW shell32 617
imp 'Win32DeleteFile' Win32DeleteFile shell32 164
imp 'WriteCabinetState' WriteCabinetState shell32 652
# NTDLL.DLL
# BEYOND THE PALE
#
@ -5748,7 +5394,6 @@ imp 'RtlQueryValidationRunlevel' RtlQueryValidationRunlevel ntdll 1311
imp 'RtlQueryWnfMetaNotification' RtlQueryWnfMetaNotification ntdll 1312
imp 'RtlQueryWnfStateData' RtlQueryWnfStateData ntdll 1313
imp 'RtlQueryWnfStateDataWithExplicitScope' RtlQueryWnfStateDataWithExplicitScope ntdll 1314
imp 'RtlQueueApcWow64Thread' RtlQueueApcWow64Thread ntdll 1315
imp 'RtlQueueWorkItem' RtlQueueWorkItem ntdll 1316
imp 'RtlRaiseCustomSystemEventTrigger' RtlRaiseCustomSystemEventTrigger ntdll 1317
imp 'RtlRaiseException' RtlRaiseException ntdll 1318
@ -5971,24 +5616,6 @@ imp 'RtlWeaklyEnumerateEntryHashTable' RtlWeaklyEnumerateEntryHashTable ntdl
imp 'RtlWerpReportException' RtlWerpReportException ntdll 1535
imp 'RtlWnfCompareChangeStamp' RtlWnfCompareChangeStamp ntdll 1536
imp 'RtlWnfDllUnloadCallback' RtlWnfDllUnloadCallback ntdll 1537
imp 'RtlWow64CallFunction64' RtlWow64CallFunction64 ntdll 1538
imp 'RtlWow64EnableFsRedirection' RtlWow64EnableFsRedirection ntdll 1539
imp 'RtlWow64EnableFsRedirectionEx' RtlWow64EnableFsRedirectionEx ntdll 1540
imp 'RtlWow64GetCpuAreaInfo' RtlWow64GetCpuAreaInfo ntdll 1541
imp 'RtlWow64GetCurrentCpuArea' RtlWow64GetCurrentCpuArea ntdll 1542
imp 'RtlWow64GetCurrentMachine' RtlWow64GetCurrentMachine ntdll 1543
imp 'RtlWow64GetEquivalentMachineCHPE' RtlWow64GetEquivalentMachineCHPE ntdll 1544
imp 'RtlWow64GetProcessMachines' RtlWow64GetProcessMachines ntdll 1545
imp 'RtlWow64GetSharedInfoProcess' RtlWow64GetSharedInfoProcess ntdll 1546
imp 'RtlWow64GetThreadContext' RtlWow64GetThreadContext ntdll 1547
imp 'RtlWow64GetThreadSelectorEntry' RtlWow64GetThreadSelectorEntry ntdll 1548
imp 'RtlWow64IsWowGuestMachineSupported' RtlWow64IsWowGuestMachineSupported ntdll 1549
imp 'RtlWow64LogMessageInEventLogger' RtlWow64LogMessageInEventLogger ntdll 1550
imp 'RtlWow64PopAllCrossProcessWork' RtlWow64PopAllCrossProcessWork ntdll 1551
imp 'RtlWow64PopCrossProcessWork' RtlWow64PopCrossProcessWork ntdll 1552
imp 'RtlWow64PushCrossProcessWork' RtlWow64PushCrossProcessWork ntdll 1553
imp 'RtlWow64SetThreadContext' RtlWow64SetThreadContext ntdll 1554
imp 'RtlWow64SuspendThread' RtlWow64SuspendThread ntdll 1555
imp 'RtlWriteMemoryStream' RtlWriteMemoryStream ntdll 1556
imp 'RtlWriteNonVolatileMemory' RtlWriteNonVolatileMemory ntdll 1557
imp 'RtlWriteRegistryValue' RtlWriteRegistryValue ntdll 1558
@ -6028,7 +5655,6 @@ imp 'RtlpNtOpenKey' RtlpNtOpenKey ntdll 1591
imp 'RtlpNtQueryValueKey' RtlpNtQueryValueKey ntdll 1592
imp 'RtlpNtSetValueKey' RtlpNtSetValueKey ntdll 1593
imp 'RtlpQueryDefaultUILanguage' RtlpQueryDefaultUILanguage ntdll 1594
imp 'RtlpQueryProcessDebugInformationFromWow64' RtlpQueryProcessDebugInformationFromWow64 ntdll 1595
imp 'RtlpQueryProcessDebugInformationRemote' RtlpQueryProcessDebugInformationRemote ntdll 1596
imp 'RtlpRefreshCachedUILanguage' RtlpRefreshCachedUILanguage ntdll 1597
imp 'RtlpSetInstallLanguage' RtlpSetInstallLanguage ntdll 1598

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_I_BrowserSetNetlogonState,I_BrowserSetNetlogonState,34

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetAccessAdd,NetAccessAdd,71

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetAccessDel,NetAccessDel,72

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetAccessEnum,NetAccessEnum,73

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetAccessGetInfo,NetAccessGetInfo,74

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetAccessGetUserPerms,NetAccessGetUserPerms,75

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetAccessSetInfo,NetAccessSetInfo,76

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetAlertRaise,NetAlertRaise,79

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetAlertRaiseEx,NetAlertRaiseEx,80

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetAuditClear,NetAuditClear,85

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetAuditRead,NetAuditRead,86

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetAuditWrite,NetAuditWrite,87

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetConfigGet,NetConfigGet,88

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetConfigGetAll,NetConfigGetAll,89

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetConfigSet,NetConfigSet,90

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetErrorLogClear,NetErrorLogClear,124

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetErrorLogRead,NetErrorLogRead,125

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetErrorLogWrite,NetErrorLogWrite,126

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetMessageBufferSend,NetMessageBufferSend,161

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetMessageNameAdd,NetMessageNameAdd,162

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetMessageNameDel,NetMessageNameDel,163

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetMessageNameEnum,NetMessageNameEnum,164

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetMessageNameGetInfo,NetMessageNameGetInfo,165

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetRegisterDomainNameChangeNotification,NetRegisterDomainNameChangeNotification,169

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplExportDirAdd,NetReplExportDirAdd,175

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplExportDirDel,NetReplExportDirDel,176

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplExportDirEnum,NetReplExportDirEnum,177

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplExportDirGetInfo,NetReplExportDirGetInfo,178

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplExportDirLock,NetReplExportDirLock,179

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplExportDirSetInfo,NetReplExportDirSetInfo,180

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplExportDirUnlock,NetReplExportDirUnlock,181

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplGetInfo,NetReplGetInfo,182

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplImportDirAdd,NetReplImportDirAdd,183

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplImportDirDel,NetReplImportDirDel,184

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplImportDirEnum,NetReplImportDirEnum,185

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplImportDirGetInfo,NetReplImportDirGetInfo,186

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplImportDirLock,NetReplImportDirLock,187

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplImportDirUnlock,NetReplImportDirUnlock,188

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetReplSetInfo,NetReplSetInfo,189

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetServerEnum,NetServerEnum,202

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetServerEnumEx,NetServerEnumEx,203

View file

@ -1,2 +0,0 @@
.include "o/libc/nt/codegen.inc"
.imp netapi32,__imp_NetServiceControl,NetServiceControl,210

Some files were not shown because too many files have changed in this diff Show more