diff --git a/ape/aarch64.lds b/ape/aarch64.lds index 274f22cb4..472ff5b02 100644 --- a/ape/aarch64.lds +++ b/ape/aarch64.lds @@ -2,7 +2,7 @@ │vi: set et sts=2 tw=2 fenc=utf-8 :vi│ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/thread/tls.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" ENTRY(_start) OUTPUT_ARCH(aarch64) @@ -12,8 +12,9 @@ OUTPUT_FORMAT("elf64-littleaarch64", SECTIONS { - __executable_start = SEGMENT_START("text-segment", IMAGE_BASE_VIRTUAL); - . = SEGMENT_START("text-segment", IMAGE_BASE_VIRTUAL) + SIZEOF_HEADERS; + . = SEGMENT_START("text-segment", IMAGE_BASE_VIRTUAL); + __executable_start = .; + . += SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } @@ -271,7 +272,7 @@ SECTIONS { } } -ape_stack_memsz = DEFINED(ape_stack_memsz) ? ape_stack_memsz : STACKSIZE; +ape_stack_memsz = DEFINED(ape_stack_memsz) ? ape_stack_memsz : APE_STACKSIZE; _tls_size = _tbss_end - _tdata_start; _tdata_size = _tdata_end - _tdata_start; _tbss_size = _tbss_end - _tbss_start; diff --git a/ape/ape.lds b/ape/ape.lds index 7f27a43d9..ca92b2741 100644 --- a/ape/ape.lds +++ b/ape/ape.lds @@ -182,7 +182,7 @@ #include "libc/nt/pedef.internal.h" #include "libc/thread/tls.h" #include "ape/ape.internal.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" /* uncomment if .com.dbg won't execute on your kernel (will break .com file) */ /* #define APE_FIX_COM_DBG */ @@ -257,7 +257,7 @@ SECTIONS { HIDDEN(ape_macho_end = .); KEEP(*(.ape.pad.head)) - . = ALIGN(SupportsWindows() || SupportsMetal() ? PAGESIZE : 16); + . = ALIGN(SupportsWindows() || SupportsMetal() ? 4096 : 16); HIDDEN(_ehead = .); } :Head @@ -311,7 +311,7 @@ SECTIONS { /* Privileged code invulnerable to magic */ KEEP(*(.ape.pad.privileged)); - . = ALIGN(__privileged_end > __privileged_start ? PAGESIZE : 1); + . = ALIGN(__privileged_end > __privileged_start ? 4096 : 1); /*END: morphable code */ __privileged_start = .; *(.privileged) @@ -367,7 +367,7 @@ SECTIONS { KEEP(*(SORT_BY_NAME(.sort.rodata.*))) KEEP(*(.ape.pad.text)) - . = ALIGN(PAGESIZE); + . = ALIGN(4096); HIDDEN(_etext = .); PROVIDE_HIDDEN(etext = .); /*END: Read Only Data (only needed for initialization) */ @@ -380,7 +380,7 @@ SECTIONS { *(SORT_BY_ALIGNMENT(.tdata)) *(SORT_BY_ALIGNMENT(.tdata.*)) _tdata_end = .; - . = ALIGN(PAGESIZE); + . = ALIGN(4096); } :Tls :Rom /*END: Read Only Data */ @@ -395,7 +395,7 @@ SECTIONS { _tbss_end = .; } :Tls - .data ALIGN(PAGESIZE) : { + .data ALIGN(4096) : { /*BEGIN: Read/Write Data */ KEEP(*(SORT_BY_NAME(.piro.data.sort.iat.*))) /*BEGIN: NT FORK COPYING */ @@ -426,7 +426,7 @@ SECTIONS { PROVIDE_HIDDEN(edata = .); KEEP(*(SORT_BY_NAME(.zip.*))) HIDDEN(_ezip = .); - . = ALIGN(PAGESIZE); + . = ALIGN(4096); } :Ram /*END: file content that's loaded by o/s */ @@ -452,7 +452,7 @@ SECTIONS { KEEP(*(.bssepilogue)) /*END: NT FORK COPYING */ - . = ALIGN(PAGESIZE); + . = ALIGN(4096); HIDDEN(_end = .); PROVIDE_HIDDEN(end = .); } :Bss @@ -525,7 +525,7 @@ HIDDEN(ape_rom_vaddr = ADDR(.head)); HIDDEN(ape_rom_paddr = LOADADDR(.head)); HIDDEN(ape_rom_filesz = LOADADDR(.data) - ape_rom_paddr); HIDDEN(ape_rom_memsz = ADDR(.data) - ADDR(.head)); -HIDDEN(ape_rom_align = PAGESIZE); +HIDDEN(ape_rom_align = 4096); HIDDEN(ape_rom_rva = RVA(ape_rom_vaddr)); HIDDEN(ape_ram_offset = ape_rom_offset + ape_rom_filesz); @@ -533,7 +533,7 @@ HIDDEN(ape_ram_vaddr = ADDR(.data)); HIDDEN(ape_ram_paddr = LOADADDR(.data)); HIDDEN(ape_ram_filesz = SIZEOF(.data)); HIDDEN(ape_ram_memsz = ADDR(.bss) + SIZEOF(.bss) - ape_ram_vaddr); -HIDDEN(ape_ram_align = PAGESIZE); +HIDDEN(ape_ram_align = 4096); HIDDEN(ape_ram_rva = RVA(ape_ram_vaddr)); HIDDEN(ape_stack_pf = DEFINED(ape_stack_pf) ? ape_stack_pf : PF_R | PF_W); @@ -542,7 +542,7 @@ HIDDEN(ape_stack_offset = ape_ram_offset + ape_ram_filesz); HIDDEN(ape_stack_vaddr = DEFINED(ape_stack_vaddr) ? ape_stack_vaddr : 0x700000000000); HIDDEN(ape_stack_paddr = ape_ram_paddr + ape_ram_filesz); HIDDEN(ape_stack_filesz = 0); -HIDDEN(ape_stack_memsz = DEFINED(ape_stack_memsz) ? ape_stack_memsz : STACKSIZE); +HIDDEN(ape_stack_memsz = DEFINED(ape_stack_memsz) ? ape_stack_memsz : APE_STACKSIZE); HIDDEN(ape_stack_align = 16); HIDDEN(ape_note_offset = ape_rom_offset + (ape_note - ape_rom_vaddr)); @@ -557,7 +557,7 @@ HIDDEN(ape_text_paddr = LOADADDR(.text)); HIDDEN(ape_text_vaddr = ADDR(.text)); HIDDEN(ape_text_filesz = SIZEOF(.text) + SIZEOF(.tdata)); HIDDEN(ape_text_memsz = SIZEOF(.text) + SIZEOF(.tdata)); -HIDDEN(ape_text_align = PAGESIZE); +HIDDEN(ape_text_align = 4096); HIDDEN(ape_text_rva = RVA(ape_text_vaddr)); HIDDEN(ape_data_offset = ape_ram_offset + LOADADDR(.data) - ape_ram_paddr); @@ -565,7 +565,7 @@ HIDDEN(ape_data_paddr = LOADADDR(.data)); HIDDEN(ape_data_vaddr = ADDR(.data)); HIDDEN(ape_data_filesz = SIZEOF(.data)); HIDDEN(ape_data_memsz = SIZEOF(.data)); -HIDDEN(ape_data_align = PAGESIZE); +HIDDEN(ape_data_align = 4096); HIDDEN(ape_data_rva = RVA(ape_data_vaddr)); HIDDEN(ape_bss_offset = ape_ram_offset + LOADADDR(.bss) - ape_ram_paddr); @@ -573,7 +573,7 @@ HIDDEN(ape_bss_paddr = LOADADDR(.bss)); HIDDEN(ape_bss_vaddr = ADDR(.bss)); HIDDEN(ape_bss_filesz = 0); HIDDEN(ape_bss_memsz = SIZEOF(.bss)); -HIDDEN(ape_bss_align = PAGESIZE); +HIDDEN(ape_bss_align = 4096); /* we roundup here because xnu wants the file load segments page-aligned */ /* but we don't want to add the nop padding to the ape program, so we'll */ @@ -581,7 +581,7 @@ HIDDEN(ape_bss_align = PAGESIZE); SHSTUB2(ape_loader_dd_skip, DEFINED(ape_loader) ? RVA(ape_loader) / 64 : 0); SHSTUB2(ape_loader_dd_count, DEFINED(ape_loader_end) - ? ROUNDUP(ape_loader_end - ape_loader, PAGESIZE) / 64 + ? ROUNDUP(ape_loader_end - ape_loader, 4096) / 64 : 0); #if defined(APE_IS_SHELL_SCRIPT) && !IsTiny() diff --git a/ape/config.h b/ape/config.h deleted file mode 100644 index 01879423c..000000000 --- a/ape/config.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef COSMOPOLITAN_APE_CONFIG_H_ -#define COSMOPOLITAN_APE_CONFIG_H_ -#if !(__ASSEMBLER__ + __LINKER__ + 0) - -#define STATIC_SYMBOL(NAME, VALUE) \ - asm(".equ\t" NAME "," VALUE "\n\t" \ - ".globl\t" NAME) - -#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ -#endif /* COSMOPOLITAN_APE_CONFIG_H_ */ diff --git a/ape/loader-elf.S b/ape/loader-elf.S index 1de72a5ea..86c19ffc8 100644 --- a/ape/loader-elf.S +++ b/ape/loader-elf.S @@ -32,57 +32,57 @@ ehdr: .ascii "\177ELF" .byte 1 .byte ELFOSABI_FREEBSD .quad 0 - .word ET_EXEC # e_type - .word EM_NEXGEN32E # e_machine - .long 1 # e_version - .quad _start # e_entry - .quad phdrs - ehdr # e_phoff - .quad 0 # e_shoff - .long 0 # e_flags - .word 64 # e_ehsize - .word 56 # e_phentsize - .word 4 # e_phnum - .word 0 # e_shentsize - .word 0 # e_shnum - .word 0 # e_shstrndx + .word ET_EXEC // e_type + .word EM_NEXGEN32E // e_machine + .long 1 // e_version + .quad _start // e_entry + .quad phdrs - ehdr // e_phoff + .quad 0 // e_shoff + .long 0 // e_flags + .word 64 // e_ehsize + .word 56 // e_phentsize + .word 4 // e_phnum + .word 0 // e_shentsize + .word 0 // e_shnum + .word 0 // e_shstrndx .endobj ehdr,globl .balign 8 -phdrs: .long PT_LOAD # p_type - .long PF_R|PF_X # p_flags - .quad 0 # p_offset - .quad ehdr # p_vaddr - .quad ehdr # p_paddr - .quad filesz # p_filesz - .quad filesz # p_memsz - .quad PAGESIZE # p_align +phdrs: .long PT_LOAD // p_type + .long PF_R|PF_X // p_flags + .quad 0 // p_offset + .quad ehdr // p_vaddr + .quad ehdr // p_paddr + .quad filesz // p_filesz + .quad filesz // p_memsz + .quad 4096 // p_align - .long PT_LOAD # p_type - .long PF_R|PF_W # p_flags - .quad 0 # p_offset - .quad bss # p_vaddr - .quad bss # p_paddr - .quad 0 # p_filesz - .quad bsssize # p_memsz - .quad PAGESIZE # p_align + .long PT_LOAD // p_type + .long PF_R|PF_W // p_flags + .quad 0 // p_offset + .quad bss // p_vaddr + .quad bss // p_paddr + .quad 0 // p_filesz + .quad bsssize // p_memsz + .quad 4096 // p_align - .long PT_GNU_STACK # p_type - .long PF_R|PF_W # p_flags - .quad 0 # p_offset - .quad 0 # p_vaddr - .quad 0 # p_paddr - .quad 0 # p_filesz - .quad 0 # p_memsz - .quad 16 # p_align + .long PT_GNU_STACK // p_type + .long PF_R|PF_W // p_flags + .quad 0 // p_offset + .quad 0 // p_vaddr + .quad 0 // p_paddr + .quad 0 // p_filesz + .quad 0 // p_memsz + .quad 16 // p_align - .long PT_NOTE # p_type - .long PF_R # p_flags - .quad note - ehdr # p_offset - .quad note # p_vaddr - .quad note # p_paddr - .quad notesize # p_filesz - .quad notesize # p_memsz - .quad 8 # p_align + .long PT_NOTE // p_type + .long PF_R // p_flags + .quad note - ehdr // p_offset + .quad note // p_vaddr + .quad note // p_paddr + .quad notesize // p_filesz + .quad notesize // p_memsz + .quad 8 // p_align .endobj phdrs note: .long 2f-1f @@ -100,8 +100,8 @@ note: .long 2f-1f 4: .endobj note notesize = . - note - .balign 64,0 # for ape.S dd - .org 0x180 # for ape.S dd + .balign 64,0 // for ape.S dd + .org 0x180 // for ape.S dd // APE Loader XNU Header // @@ -113,92 +113,92 @@ macho: .long 0xFEEDFACE+1 .long MAC_CPU_NEXGEN32E .long MAC_CPU_NEXGEN32E_ALL .long MAC_EXECUTE - .long 5 # number of load commands - .long 60f-10f # size of all load commands - .long MAC_NOUNDEFS # flags - .long 0 # reserved + .long 5 // number of load commands + .long 60f-10f // size of all load commands + .long MAC_NOUNDEFS // flags + .long 0 // reserved 10: .long MAC_LC_SEGMENT_64 - .long 20f-10b # unmaps first page dir - .ascin "__PAGEZERO",16 # consistent with linux - .quad 0,0x200000,0,0 # which forbids mem <2m + .long 20f-10b // unmaps first page dir + .ascin "__PAGEZERO",16 // consistent with linux + .quad 0,0x200000,0,0 // which forbids mem <2m .long 0,0,0,0 20: .long MAC_LC_SEGMENT_64 .long 30f-20b .ascin "__TEXT",16 - .quad ehdr # vaddr - .quad 4096 # memsz - .quad 0 # file offset - .quad filesz # file size - .long PROT_EXEC|PROT_READ|PROT_WRITE # maxprot - .long PROT_EXEC|PROT_READ # initprot - .long 1 # segment section count - .long 0 # flags -210: .ascin "__text",16 # section name (.text) + .quad ehdr // vaddr + .quad 4096 // memsz + .quad 0 // file offset + .quad filesz // file size + .long PROT_EXEC|PROT_READ|PROT_WRITE // maxprot + .long PROT_EXEC|PROT_READ // initprot + .long 1 // segment section count + .long 0 // flags +210: .ascin "__text",16 // section name (.text) .ascin "__TEXT",16 - .quad _start # vaddr - .quad textsz # memsz - .long textoff # offset - .long 6 # align 2**6 = 64 - .long 0 # reloc table offset - .long 0 # relocation count - .long MAC_S_ATTR_SOME_INSTRUCTIONS # section type & attributes - .long 0,0,0 # reserved + .quad _start // vaddr + .quad textsz // memsz + .long textoff // offset + .long 6 // align 2**6 = 64 + .long 0 // reloc table offset + .long 0 // relocation count + .long MAC_S_ATTR_SOME_INSTRUCTIONS // section type & attributes + .long 0,0,0 // reserved 30: .long MAC_LC_SEGMENT_64 .long 40f-30b .ascin "__DATA",16 - .quad bss # vaddr - .quad bsssize # memsz - .quad 0 # offset - .quad 0 # file size - .long PROT_EXEC|PROT_READ|PROT_WRITE # maxprot - .long PROT_READ|PROT_WRITE # initprot - .long 1 # segment section count - .long 0 # flags -310: .ascin "__bss",16 # section name (.bss) + .quad bss // vaddr + .quad bsssize // memsz + .quad 0 // offset + .quad 0 // file size + .long PROT_EXEC|PROT_READ|PROT_WRITE // maxprot + .long PROT_READ|PROT_WRITE // initprot + .long 1 // segment section count + .long 0 // flags +310: .ascin "__bss",16 // section name (.bss) .ascin "__DATA",16 - .quad bss # vaddr - .quad bsssize # memsz - .long 0 # offset - .long 12 # align 2**12 = 4096 - .long 0 # reloc table offset - .long 0 # relocation count - .long MAC_S_ZEROFILL # section type & attributes - .long 0,0,0 # reserved + .quad bss // vaddr + .quad bsssize // memsz + .long 0 // offset + .long 12 // align 2**12 = 4096 + .long 0 // reloc table offset + .long 0 // relocation count + .long MAC_S_ZEROFILL // section type & attributes + .long 0,0,0 // reserved 40: .long MAC_LC_UUID .long 50f-40b - .quad 0x3fb29ee4ac6c87aa # uuid1 - .quad 0xdd2c9bb866d9eef8 # uuid2 + .quad 0x3fb29ee4ac6c87aa // uuid1 + .quad 0xdd2c9bb866d9eef8 // uuid2 50: .long MAC_LC_UNIXTHREAD - .long 60f-50b # cmdsize - .long MAC_THREAD_NEXGEN32E # flavaflav - .long (520f-510f)/4 # count -510: .quad 0 # rax - .quad 0 # rbx - .quad 0 # rcx - .quad _HOSTXNU # rdx - .quad 0 # rdi - .quad 0 # rsi - .quad 0 # rbp - .quad 0 # rsp - .quad 0 # r8 - .quad 0 # r9 - .quad 0 # r10 - .quad 0 # r11 - .quad 0 # r12 - .quad 0 # r13 - .quad 0 # r14 - .quad 0 # r15 - .quad _start # rip - .quad 0 # rflags - .quad 0 # cs - .quad 0 # fs - .quad 0 # gs + .long 60f-50b // cmdsize + .long MAC_THREAD_NEXGEN32E // flavaflav + .long (520f-510f)/4 // count +510: .quad 0 // rax + .quad 0 // rbx + .quad 0 // rcx + .quad _HOSTXNU // rdx + .quad 0 // rdi + .quad 0 // rsi + .quad 0 // rbp + .quad 0 // rsp + .quad 0 // r8 + .quad 0 // r9 + .quad 0 // r10 + .quad 0 // r11 + .quad 0 // r12 + .quad 0 // r13 + .quad 0 // r14 + .quad 0 // r15 + .quad _start // rip + .quad 0 // rflags + .quad 0 // cs + .quad 0 // fs + .quad 0 // gs 520: 60: .endobj macho - .balign 64,0 # for ape.S dd - .org 0x400 # for ape.S dd + .balign 64,0 // for ape.S dd + .org 0x400 // for ape.S dd // Ape Loader Entrpoint // diff --git a/ape/loader.h b/ape/loader.h index 45a7ae2b1..1892401c9 100644 --- a/ape/loader.h +++ b/ape/loader.h @@ -4,7 +4,7 @@ #define APE_LOADER_BASE 0x200000 #define APE_LOADER_SIZE 0x200000 #define APE_LOADER_ENTRY 0x200400 -#define APE_LOADER_BSS (PAGESIZE * 2) +#define APE_LOADER_BSS (4096 * 2) #define APE_LOADER_STACK 0x7f0000000000 #define APE_BLOCK_BASE 0x7e0000000000 #define APE_BLOCK_SIZE 0x000200000000 diff --git a/examples/auto-launch-gdb-on-crash.c b/examples/auto-launch-gdb-on-crash.c index efd2070ed..add7fc942 100644 --- a/examples/auto-launch-gdb-on-crash.c +++ b/examples/auto-launch-gdb-on-crash.c @@ -7,7 +7,7 @@ │ • http://creativecommons.org/publicdomain/zero/1.0/ │ ╚─────────────────────────────────────────────────────────────────*/ #endif -#include "libc/log/log.h" +#include "libc/runtime/runtime.h" /** * Automatically launches GDB Debugger TUI during crash. diff --git a/examples/clock.c b/examples/clock.c index 3c2719930..ef3574f33 100644 --- a/examples/clock.c +++ b/examples/clock.c @@ -8,7 +8,7 @@ ╚─────────────────────────────────────────────────────────────────*/ #endif #include "libc/calls/struct/timespec.h" -#include "libc/log/log.h" +#include "libc/runtime/runtime.h" #include "libc/stdio/stdio.h" #include "libc/time/time.h" diff --git a/examples/crashreport.c b/examples/crashreport.c index b8daf4488..35f656557 100644 --- a/examples/crashreport.c +++ b/examples/crashreport.c @@ -8,8 +8,8 @@ ╚─────────────────────────────────────────────────────────────────*/ #endif #include "libc/intrin/kprintf.h" -#include "libc/log/log.h" #include "libc/math.h" +#include "libc/runtime/runtime.h" #include "libc/runtime/symbols.internal.h" /** diff --git a/examples/crashreport2.c b/examples/crashreport2.c index 5ac2c7a66..78a8c266a 100644 --- a/examples/crashreport2.c +++ b/examples/crashreport2.c @@ -9,7 +9,7 @@ #endif #include "libc/calls/calls.h" #include "libc/calls/struct/sigset.h" -#include "libc/log/log.h" +#include "libc/runtime/runtime.h" #include "libc/stdio/stdio.h" /** diff --git a/examples/nesemu1.cc b/examples/nesemu1.cc index 099fbe79d..1f4417de4 100644 --- a/examples/nesemu1.cc +++ b/examples/nesemu1.cc @@ -41,7 +41,7 @@ #include "libc/time/time.h" #include "libc/x/xasprintf.h" #include "libc/x/xsigaction.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "libc/zipos/zipos.internal.h" #include "third_party/getopt/getopt.h" #include "third_party/libcxx/vector" diff --git a/examples/stackoverflow.c b/examples/stackoverflow.c index 30c621502..adffaa9c0 100644 --- a/examples/stackoverflow.c +++ b/examples/stackoverflow.c @@ -10,7 +10,7 @@ #include "libc/calls/calls.h" #include "libc/limits.h" #include "libc/log/check.h" -#include "libc/log/log.h" +#include "libc/runtime/runtime.h" #include "libc/runtime/stack.h" #include "libc/stdio/stdio.h" #include "libc/sysv/consts/prot.h" diff --git a/examples/symtab.c b/examples/symtab.c index 2c11eb964..66ee4bace 100644 --- a/examples/symtab.c +++ b/examples/symtab.c @@ -8,7 +8,7 @@ ╚─────────────────────────────────────────────────────────────────*/ #endif #include "libc/intrin/kprintf.h" -#include "libc/log/log.h" +#include "libc/runtime/runtime.h" /** * @fileoverview example of how to embed symbol table in .com file diff --git a/libc/calls/openpty.c b/libc/calls/openpty.c index b2d2ae1ca..bbd6944c2 100644 --- a/libc/calls/openpty.c +++ b/libc/calls/openpty.c @@ -30,7 +30,7 @@ #include "libc/dce.h" #include "libc/intrin/asan.internal.h" #include "libc/intrin/kprintf.h" -#include "libc/log/rop.h" +#include "libc/log/rop.internal.h" #include "libc/str/str.h" #include "libc/sysv/consts/at.h" #include "libc/sysv/consts/o.h" diff --git a/libc/calls/pledge-linux.c b/libc/calls/pledge-linux.c index e959037f9..c429fcace 100644 --- a/libc/calls/pledge-linux.c +++ b/libc/calls/pledge-linux.c @@ -20,9 +20,9 @@ #include "libc/calls/calls.h" #include "libc/calls/pledge.internal.h" #include "libc/calls/prctl.internal.h" -#include "libc/calls/struct/bpf.h" -#include "libc/calls/struct/filter.h" -#include "libc/calls/struct/seccomp.h" +#include "libc/calls/struct/bpf.internal.h" +#include "libc/calls/struct/filter.internal.h" +#include "libc/calls/struct/seccomp.internal.h" #include "libc/calls/struct/sigaction.h" #include "libc/calls/syscall_support-sysv.internal.h" #include "libc/intrin/bsr.h" diff --git a/libc/calls/seccomp.c b/libc/calls/seccomp.c index 904c4cec8..79d53f1ef 100644 --- a/libc/calls/seccomp.c +++ b/libc/calls/seccomp.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/calls/struct/seccomp.h" +#include "libc/calls/struct/seccomp.internal.h" #include "libc/calls/calls.h" #include "libc/calls/syscall-sysv.internal.h" #include "libc/dce.h" diff --git a/libc/calls/struct/bpf.h b/libc/calls/struct/bpf.internal.h similarity index 100% rename from libc/calls/struct/bpf.h rename to libc/calls/struct/bpf.internal.h diff --git a/libc/calls/struct/filter.h b/libc/calls/struct/filter.internal.h similarity index 100% rename from libc/calls/struct/filter.h rename to libc/calls/struct/filter.internal.h diff --git a/libc/calls/struct/seccomp.h b/libc/calls/struct/seccomp.internal.h similarity index 100% rename from libc/calls/struct/seccomp.h rename to libc/calls/struct/seccomp.internal.h diff --git a/libc/calls/struct/sigaction.h b/libc/calls/struct/sigaction.h index 51e93380d..b3105782d 100644 --- a/libc/calls/struct/sigaction.h +++ b/libc/calls/struct/sigaction.h @@ -25,7 +25,7 @@ struct sigaction { /* cosmo abi */ sighandler_t signal(int, sighandler_t); int sigaction(int, const struct sigaction *, struct sigaction *); -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) && defined(COSMO) void _init_onntconsoleevent(void); void _init_wincrash(void); diff --git a/libc/calls/struct/timespec.h b/libc/calls/struct/timespec.h index 8aa213a42..357f995ab 100644 --- a/libc/calls/struct/timespec.h +++ b/libc/calls/struct/timespec.h @@ -1,24 +1,5 @@ #ifndef COSMOPOLITAN_LIBC_CALLS_STRUCT_TIMESPEC_H_ #define COSMOPOLITAN_LIBC_CALLS_STRUCT_TIMESPEC_H_ - -#ifdef COSMO -#define timespec_get __timespec_get -#define timespec_getres __timespec_getres -#define timespec_cmp __timespec_cmp -#define timespec_tomicros __timespec_tomicros -#define timespec_tomillis __timespec_tomillis -#define timespec_tonanos __timespec_tonanos -#define timespec_add __timespec_add -#define timespec_fromnanos __timespec_fromnanos -#define timespec_frommicros __timespec_frommicros -#define timespec_frommillis __timespec_frommillis -#define timespec_real __timespec_real -#define timespec_mono __timespec_mono -#define timespec_sleep __timespec_sleep -#define timespec_sleep_until __timespec_sleep_until -#define timespec_sub __timespec_sub -#endif /* COSMO */ - #if !(__ASSEMBLER__ + __LINKER__ + 0) COSMOPOLITAN_C_START_ @@ -32,7 +13,6 @@ int clock_gettime(int, struct timespec *); int clock_nanosleep(int, int, const struct timespec *, struct timespec *); int futimens(int, const struct timespec[2]); int nanosleep(const struct timespec *, struct timespec *); -int sys_futex(int *, int, int, const struct timespec *, int *); int utimensat(int, const char *, const struct timespec[2], int); #ifdef COSMO @@ -55,6 +35,7 @@ struct timespec timespec_mono(void); struct timespec timespec_sleep(struct timespec); int timespec_sleep_until(struct timespec); struct timespec timespec_sub(struct timespec, struct timespec) pureconst; +int sys_futex(int *, int, int, const struct timespec *, int *); #endif /* COSMO */ COSMOPOLITAN_C_END_ diff --git a/libc/calls/struct/timeval.h b/libc/calls/struct/timeval.h index c66fc8e3e..6fe993db1 100644 --- a/libc/calls/struct/timeval.h +++ b/libc/calls/struct/timeval.h @@ -2,17 +2,6 @@ #define COSMOPOLITAN_LIBC_CALLS_STRUCT_TIMEVAL_H_ #include "libc/calls/struct/timespec.h" #include "libc/time/struct/timezone.h" - -#ifdef COSMO -#define timeval_cmp __timeval_cmp -#define timeval_frommicros __timeval_frommicros -#define timeval_frommillis __timeval_frommillis -#define timeval_add __timeval_add -#define timeval_sub __timeval_sub -#define timespec_totimeval __timespec_totimeval -#define timeval_totimespec __timeval_totimespec -#endif /* COSMO */ - #if !(__ASSEMBLER__ + __LINKER__ + 0) COSMOPOLITAN_C_START_ diff --git a/libc/calls/unveil.c b/libc/calls/unveil.c index 8f48da9e2..3ca8c473f 100644 --- a/libc/calls/unveil.c +++ b/libc/calls/unveil.c @@ -20,9 +20,9 @@ #include "libc/calls/blockcancel.internal.h" #include "libc/calls/calls.h" #include "libc/calls/landlock.h" -#include "libc/calls/struct/bpf.h" -#include "libc/calls/struct/filter.h" -#include "libc/calls/struct/seccomp.h" +#include "libc/calls/struct/bpf.internal.h" +#include "libc/calls/struct/filter.internal.h" +#include "libc/calls/struct/seccomp.internal.h" #include "libc/calls/struct/stat.h" #include "libc/calls/struct/stat.internal.h" #include "libc/calls/syscall-sysv.internal.h" diff --git a/libc/dos.h b/libc/dos.internal.h similarity index 100% rename from libc/dos.h rename to libc/dos.internal.h diff --git a/libc/integral/c.inc b/libc/integral/c.inc index ec2e1ee24..52009d484 100644 --- a/libc/integral/c.inc +++ b/libc/integral/c.inc @@ -152,8 +152,9 @@ typedef struct { #define libcesque dontthrow nocallback #define memcpyesque libcesque #define strlenesque libcesque nosideeffect paramsnonnull() -#define vallocesque \ - libcesque dontdiscard returnsaligned((GUARDSIZE)) returnspointerwithnoaliases +#define vallocesque \ + libcesque dontdiscard returnsaligned((APE_PAGESIZE)) \ + returnspointerwithnoaliases #define reallocesque libcesque returnsaligned((16)) #define mallocesque reallocesque returnspointerwithnoaliases #define interruptfn nocallersavedregisters forcealignargpointer diff --git a/libc/integral/normalize.inc b/libc/integral/normalize.inc index 415ac5060..d767020eb 100644 --- a/libc/integral/normalize.inc +++ b/libc/integral/normalize.inc @@ -66,27 +66,26 @@ #define __BIGGEST_ALIGNMENT__ 16 #endif -/* TODO(jart): Remove this in favor of GetStackSize() */ #ifdef COSMO -#define STACKSIZE 262144 /* 256kb stack */ +/* Programs should call GetStackSize() */ +#define APE_STACKSIZE 262144 /* default 256kb stack */ +#define FRAMESIZE 0x10000 +#define PAGESIZE 0x1000 /* i386+ */ #else -#define STACKSIZE 8388608 /* 8mb stack */ +#define APE_STACKSIZE 8388608 /* default 8mb stack */ #endif +#define APE_PAGESIZE 0x10000 /* i386+ */ +#define APE_GUARDSIZE 0x4000 /* b/c apple m1 */ -#define BIGPAGESIZE 0x200000 -#define FRAMESIZE 0x10000 /* 8086 */ -#define GUARDSIZE 0x4000 /* b/c apple m1 */ -#define PAGESIZE 0x1000 /* i386+ */ -#define BUFSIZ 0x1000 /* best stdio default */ -#define CACHELINE 0x40 /* nexgen32e */ -#define CHAR_BIT 8 /* b/c von neumann */ -#define ARG_MAX 0xfffe /* for argv and envp; see CreateProcess (32767*2) */ -#define PATH_MAX 1024 /* b/c _XOPEN_PATH_MAX */ -#define NAME_MAX 255 /* 511 on netbsd */ -#define CHILD_MAX 16 /* only if malloc isn't linked */ -#define OPEN_MAX 16 /* only if malloc isn't linked */ -#define ATEXIT_MAX 32 /* only if malloc isn't linked */ -#define NSIG 128 /* b/c freebsd */ +#define BUFSIZ 0x1000 /* best stdio default */ +#define CHAR_BIT 8 /* b/c von neumann */ +#define ARG_MAX 0xfffe /* for argv and envp; see CreateProcess (32767*2) */ +#define PATH_MAX 1024 /* b/c _XOPEN_PATH_MAX */ +#define NAME_MAX 255 /* 511 on netbsd */ +#define CHILD_MAX 16 /* only if malloc isn't linked */ +#define OPEN_MAX 16 /* only if malloc isn't linked */ +#define ATEXIT_MAX 32 /* only if malloc isn't linked */ +#define NSIG 128 /* b/c freebsd */ #if defined(__LP64__) && !defined(__INT64_TYPE__) #include "libc/integral/lp64.inc" diff --git a/libc/intrin/asan.c b/libc/intrin/asan.c index 70ba27212..3be913f80 100644 --- a/libc/intrin/asan.c +++ b/libc/intrin/asan.c @@ -1465,7 +1465,7 @@ static textstartup void __asan_shadow_mapping(struct MemoryIntervals *m, static textstartup void __asan_shadow_existing_mappings(void) { __asan_shadow_mapping(&_mmi, 0); __asan_map_shadow(GetStackAddr(), GetStackSize()); - __asan_poison((void *)GetStackAddr(), GUARDSIZE, kAsanStackOverflow); + __asan_poison((void *)GetStackAddr(), APE_GUARDSIZE, kAsanStackOverflow); } forceinline ssize_t __write_str(const char *s) { @@ -1492,7 +1492,7 @@ void __asan_init(int argc, char **argv, char **envp, intptr_t *auxv) { __asan_shadow_existing_mappings(); __asan_map_shadow((uintptr_t)__executable_start, _end - __executable_start); __asan_map_shadow(0, 4096); - __asan_poison(0, GUARDSIZE, kAsanNullPage); + __asan_poison(0, APE_GUARDSIZE, kAsanNullPage); if (!IsWindows()) { sys_mprotect((void *)0x7fff8000, 0x10000, PROT_READ); } diff --git a/libc/intrin/describeseccompoperation.c b/libc/intrin/describeseccompoperation.c index 69808d1ab..b4418030d 100644 --- a/libc/intrin/describeseccompoperation.c +++ b/libc/intrin/describeseccompoperation.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/calls/struct/seccomp.h" +#include "libc/calls/struct/seccomp.internal.h" #include "libc/intrin/describeflags.internal.h" const char *DescribeSeccompOperation(int x) { diff --git a/libc/intrin/kprintf.greg.c b/libc/intrin/kprintf.greg.c index 2898da3d5..ce4bf01e4 100644 --- a/libc/intrin/kprintf.greg.c +++ b/libc/intrin/kprintf.greg.c @@ -184,7 +184,7 @@ privileged bool kisdangerous(const void *p) { if (IsStackFrame(frame)) return false; if (kismapped(frame)) return false; } - if (GetStackAddr() + GUARDSIZE <= (uintptr_t)p && + if (GetStackAddr() + APE_GUARDSIZE <= (uintptr_t)p && (uintptr_t)p < GetStackAddr() + GetStackSize()) { return false; } diff --git a/libc/isystem/cosmo.h b/libc/isystem/cosmo.h new file mode 100644 index 000000000..4e7e5d580 --- /dev/null +++ b/libc/isystem/cosmo.h @@ -0,0 +1,67 @@ +#ifndef COSMOPOLITAN_LIBC_ISYSTEM_COSMO_H_ +#define COSMOPOLITAN_LIBC_ISYSTEM_COSMO_H_ + +#ifdef COSMO +#define COSMO_ALREADY_DEFINED +#else +#define COSMO +#endif + +/** + * @fileoverview Curated Cosmopolitan non-POSIX C Libraries + * + * Users of the `cosmocc` toolchain can say, for example: + * + * #include + * + * int main(int argc, char *argv[]) { + * ShowCrashReports(); + * kprintf("hello world\n"); + * } + * + * Which will define the best stuff from Cosmopolitan Libc, which + * includes core runtime services, third party libraries we've curated, + * as well as internal libraries we made that are good enough to share. + * + * @see tool/script/cosmocc + */ + +#include "libc/calls/calls.h" +#include "libc/calls/struct/timespec.h" +#include "libc/calls/struct/timeval.h" +#include "libc/dce.h" +#include "libc/fmt/itoa.h" +#include "libc/fmt/leb128.h" +#include "libc/intrin/bsf.h" +#include "libc/intrin/bsr.h" +#include "libc/intrin/kprintf.h" +#include "libc/intrin/likely.h" +#include "libc/intrin/tpenc.h" +#include "libc/intrin/weaken.h" +#include "libc/mem/critbit0.h" +#include "libc/mem/gc.h" +#include "libc/mem/hook.internal.h" +#include "libc/nexgen32e/rdtsc.h" +#include "libc/nexgen32e/stackframe.h" +#include "libc/nexgen32e/x86feature.h" +#include "libc/runtime/morph.h" +#include "libc/runtime/runtime.h" +#include "libc/runtime/stack.h" +#include "libc/runtime/symbols.internal.h" +#include "libc/stdio/append.h" +#include "libc/stdio/rand.h" +#include "libc/str/blake2.h" +#include "libc/str/highwayhash64.h" +#include "libc/str/slice.h" +#include "libc/str/thompike.h" +#include "libc/str/unicode.h" +#include "libc/str/utf16.h" +#include "libc/sysv/errfuns.h" + +#ifdef COSMO_ALREADY_DEFINED +#undef COSMO_ALREADY_DEFINED +#else +#undef COSMO +#endif + +#endif /* COSMOPOLITAN_LIBC_ISYSTEM_COSMO_H_ */ diff --git a/libc/log/log.h b/libc/log/log.h index d3b5ff22d..df18056a8 100644 --- a/libc/log/log.h +++ b/libc/log/log.h @@ -43,8 +43,6 @@ const char *commandvenv(const char *, const char *); int LogKprintfToFile(const char *); const char *GetAddr2linePath(void); const char *GetGdbPath(void); -void ShowCrashReports(void); -int MakeProcessNice(void); bool32 IsDebuggerPresent(bool); bool IsRunningUnderMake(void); const char *GetSiCodeName(int, int); diff --git a/libc/log/oncrash_amd64.c b/libc/log/oncrash_amd64.c index a2690bbf2..40bfde820 100644 --- a/libc/log/oncrash_amd64.c +++ b/libc/log/oncrash_amd64.c @@ -226,7 +226,7 @@ relegated void ShowCrashReport(int err, int sig, struct siginfo *si, " %s %s %s %s\n", !__nocolor ? "\e[30;101m" : "", !__nocolor ? "\e[0m" : "", sig, (ctx && (ctx->uc_mcontext.rsp >= GetStaticStackAddr(0) && - ctx->uc_mcontext.rsp <= GetStaticStackAddr(0) + GUARDSIZE)) + ctx->uc_mcontext.rsp <= GetStaticStackAddr(0) + APE_GUARDSIZE)) ? "Stack Overflow" : GetSiCodeName(sig, si->si_code), host, getpid(), gettid(), program_invocation_name, names.sysname, diff --git a/libc/log/oncrash_arm64.c b/libc/log/oncrash_arm64.c index cb61579c9..8d9b9ede8 100644 --- a/libc/log/oncrash_arm64.c +++ b/libc/log/oncrash_arm64.c @@ -184,7 +184,7 @@ relegated void __oncrash_arm64(int sig, struct siginfo *si, void *arg) { gethostname(host, sizeof(host)); reset = !__nocolor ? RESET : ""; strong = !__nocolor ? STRONG : ""; - if (ctx && (ctx->uc_mcontext.sp & (GetStackSize() - 1)) <= GUARDSIZE) { + if (ctx && (ctx->uc_mcontext.sp & (GetStackSize() - 1)) <= APE_GUARDSIZE) { kind = "Stack Overflow"; } else { kind = GetSiCodeName(sig, si->si_code); diff --git a/libc/log/rop.h b/libc/log/rop.internal.h similarity index 100% rename from libc/log/rop.h rename to libc/log/rop.internal.h diff --git a/libc/mach.h b/libc/mach.internal.h similarity index 100% rename from libc/mach.h rename to libc/mach.internal.h diff --git a/libc/mem/balloc.c b/libc/mem/balloc.c index a21ba63be..9017963fb 100644 --- a/libc/mem/balloc.c +++ b/libc/mem/balloc.c @@ -21,9 +21,6 @@ /* TODO(jart): delete */ -#define kGuard GUARDSIZE -#define kGrain FRAMESIZE - /** * Allocates page-guarded buffer. * diff --git a/libc/nexgen32e/loadxmm.S b/libc/nexgen32e/loadxmm.S index 56d568fb0..90223ae4f 100644 --- a/libc/nexgen32e/loadxmm.S +++ b/libc/nexgen32e/loadxmm.S @@ -17,7 +17,6 @@ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/macros.internal.h" -.privileged // Loads XMM registers from buffer. // diff --git a/libc/nexgen32e/longerjmp.S b/libc/nexgen32e/longerjmp.S index 3f219e370..129ee4b93 100644 --- a/libc/nexgen32e/longerjmp.S +++ b/libc/nexgen32e/longerjmp.S @@ -17,14 +17,16 @@ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/macros.internal.h" -.privileged // Loads previously saved processor state. // // @param rdi points to the jmp_buf // @param rsi is returned by setlongerjmp() invocation // @noreturn + .ftrace1 longerjmp: + .ftrace2 +#ifdef __x86_64__ mov $1,%eax mov %rsi,%rdx mov (%rdi),%rsp @@ -35,4 +37,22 @@ longerjmp: mov 40(%rdi),%r14 mov 48(%rdi),%r15 jmp *56(%rdi) +#elif defined(__aarch64__) + ldp x19,x20,[x0,#0] + ldp x21,x22,[x0,#16] + ldp x23,x24,[x0,#32] + ldp x25,x26,[x0,#48] + ldp x27,x28,[x0,#64] + ldp x29,x30,[x0,#80] + ldr x2,[x0,#104] + mov sp,x2 + ldp d8 ,d9,[x0,#112] + ldp d10,d11,[x0,#128] + ldp d12,d13,[x0,#144] + ldp d14,d15,[x0,#160] + mov x0,x1 + br x30 +#else +#error "unsupported architecture" +#endif .endfn longerjmp,globl diff --git a/libc/nexgen32e/longjmp.S b/libc/nexgen32e/longjmp.S index 0d6fa0770..23f344f2f 100644 --- a/libc/nexgen32e/longjmp.S +++ b/libc/nexgen32e/longjmp.S @@ -57,6 +57,8 @@ longjmp: cmp w1,0 csinc w0,w1,wzr,ne br x30 +#else +#error "unsupported architecture" #endif .endfn longjmp,globl .alias longjmp,_longjmp diff --git a/libc/nexgen32e/savexmm.S b/libc/nexgen32e/savexmm.S index 8bdd863b8..47f940021 100644 --- a/libc/nexgen32e/savexmm.S +++ b/libc/nexgen32e/savexmm.S @@ -17,7 +17,6 @@ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/macros.internal.h" -.privileged // Stores XMM registers to buffer. // diff --git a/libc/nexgen32e/setjmp.S b/libc/nexgen32e/setjmp.S index c8312a33e..15aab0417 100644 --- a/libc/nexgen32e/setjmp.S +++ b/libc/nexgen32e/setjmp.S @@ -27,7 +27,8 @@ // @note code built w/ microsoft abi compiler can't call this // @see longjmp(), _gclongjmp() .ftrace1 -setjmp: .ftrace2 +setjmp: + .ftrace2 #ifdef __x86_64__ lea 8(%rsp),%rax mov %rax,(%rdi) @@ -40,6 +41,7 @@ setjmp: .ftrace2 mov (%rsp),%rax mov %rax,56(%rdi) xor %eax,%eax + ret #elif defined(__aarch64__) stp x19,x20,[x0,#0] stp x21,x22,[x0,#16] @@ -54,7 +56,9 @@ setjmp: .ftrace2 stp d12,d13,[x0,#144] stp d14,d15,[x0,#160] mov x0,#0 -#endif ret +#else +#error "unsupported architecture" +#endif .endfn setjmp,globl .alias setjmp,_setjmp diff --git a/libc/nexgen32e/setlongerjmp.S b/libc/nexgen32e/setlongerjmp.S index 7dfdcf318..b40fcc57c 100644 --- a/libc/nexgen32e/setlongerjmp.S +++ b/libc/nexgen32e/setlongerjmp.S @@ -24,7 +24,10 @@ // @return eax contains 0 when set, and 1 if jumped // @return rdx contains value passed to longerjmp() // @returnstwice + .ftrace1 setlongerjmp: + .ftrace2 +#ifdef __x86_64__ lea 8(%rsp),%rax mov %rax,(%rdi) mov %rbx,8(%rdi) @@ -38,4 +41,23 @@ setlongerjmp: xor %eax,%eax xor %edx,%edx ret +#elif defined(__aarch64__) + stp x19,x20,[x0,#0] + stp x21,x22,[x0,#16] + stp x23,x24,[x0,#32] + stp x25,x26,[x0,#48] + stp x27,x28,[x0,#64] + stp x29,x30,[x0,#80] + mov x2,sp + str x2,[x0,#104] + stp d8,d9,[x0,#112] + stp d10,d11,[x0,#128] + stp d12,d13,[x0,#144] + stp d14,d15,[x0,#160] + mov x0,#0 + mov x1,#0 + ret +#else +#error "unsupported architecture" +#endif .endfn setlongerjmp,globl diff --git a/libc/nexgen32e/zip.S b/libc/nexgen32e/zip.S index 0b22e8a21..455ef7541 100644 --- a/libc/nexgen32e/zip.S +++ b/libc/nexgen32e/zip.S @@ -18,7 +18,7 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/macros.internal.h" #include "ape/relocations.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" // ZIP Central Directory. .section .zip.3,"",@progbits diff --git a/libc/runtime/getsymboltable.c b/libc/runtime/getsymboltable.c index fc03ebcf7..2480af9cc 100644 --- a/libc/runtime/getsymboltable.c +++ b/libc/runtime/getsymboltable.c @@ -28,7 +28,7 @@ #include "libc/str/str.h" #include "libc/thread/thread.h" #include "libc/x/x.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "libc/zipos/zipos.internal.h" #include "third_party/puff/puff.h" diff --git a/libc/runtime/memtrack.internal.h b/libc/runtime/memtrack.internal.h index ecfb3f85c..f2fc9f30a 100644 --- a/libc/runtime/memtrack.internal.h +++ b/libc/runtime/memtrack.internal.h @@ -5,6 +5,7 @@ #include "libc/intrin/nopl.internal.h" #include "libc/macros.internal.h" #include "libc/nt/version.h" +#include "libc/runtime/runtime.h" #include "libc/runtime/stack.h" #include "libc/sysv/consts/ss.h" #include "libc/thread/tls.h" diff --git a/libc/runtime/mmap.c b/libc/runtime/mmap.c index 60315a988..966366baa 100644 --- a/libc/runtime/mmap.c +++ b/libc/runtime/mmap.c @@ -367,10 +367,10 @@ noasan inline void *_Mmap(void *addr, size_t size, int prot, int flags, int fd, // however this 1mb behavior oddly enough is smart enough to not // apply if the mapping is a manually-created guard page. int e = errno; - if ((dm = sys_mmap(p + size - GUARDSIZE, GUARDSIZE, prot, + if ((dm = sys_mmap(p + size - APE_GUARDSIZE, APE_GUARDSIZE, prot, f | MAP_GROWSDOWN_linux, fd, off)) .addr != MAP_FAILED) { - _npassert(sys_mmap(p, GUARDSIZE, PROT_NONE, + _npassert(sys_mmap(p, APE_GUARDSIZE, PROT_NONE, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) .addr == p); dm.addr = p; @@ -398,11 +398,11 @@ noasan inline void *_Mmap(void *addr, size_t size, int prot, int flags, int fd, if (needguard) { if (!IsWindows()) { // make windows fork() code simpler - mprotect(p, GUARDSIZE, PROT_NONE); + mprotect(p, APE_GUARDSIZE, PROT_NONE); } if (IsAsan()) { __repstosb((void *)(((intptr_t)p >> 3) + 0x7fff8000), - kAsanStackOverflow, GUARDSIZE / 8); + kAsanStackOverflow, APE_GUARDSIZE / 8); } } } diff --git a/libc/runtime/runtime.h b/libc/runtime/runtime.h index a2df2632b..deab3f780 100644 --- a/libc/runtime/runtime.h +++ b/libc/runtime/runtime.h @@ -41,19 +41,10 @@ extern bool __isworker; void mcount(void); int daemon(int, int); -int _freestack(void *); -void _bt(const char *, ...); -int _cocmd(int, char **, char **); unsigned long getauxval(unsigned long); -void *_mapanon(size_t) attributeallocsize((1)) mallocesque; -void *_mapshared(size_t) attributeallocsize((1)) mallocesque; -void *_mapstack(void) returnsaligned((FRAMESIZE)) mallocesque; int setjmp(jmp_buf) libcesque returnstwice paramsnonnull(); void longjmp(jmp_buf, int) libcesque wontreturn paramsnonnull(); -axdx_t setlongerjmp(jmp_buf) -libcesque returnstwice paramsnonnull(); -void longerjmp(jmp_buf, intptr_t) libcesque wontreturn paramsnonnull(); int _setjmp(jmp_buf) libcesque returnstwice paramsnonnull(); int sigsetjmp(sigjmp_buf, int) libcesque returnstwice paramsnonnull(); @@ -62,8 +53,6 @@ void _longjmp(jmp_buf, int) libcesque wontreturn paramsnonnull(); void exit(int) wontreturn; void _exit(int) libcesque wontreturn; void _Exit(int) libcesque wontreturn; -void _Exitr(int) libcesque wontreturn; -void _Exit1(int) libcesque wontreturn; void quick_exit(int) wontreturn; void abort(void) wontreturn; int __cxa_atexit(void *, void *, void *) libcesque; @@ -92,38 +81,61 @@ int vhangup(void); int getdtablesize(void); int sethostname(const char *, size_t); int acct(const char *); + +#ifdef COSMO +/* utilities */ void _intsort(int *, size_t); void _longsort(long *, size_t); -bool _isheap(void *); -int NtGetVersion(void) pureconst; +/* diagnostics */ +void ShowCrashReports(void); +void __printargs(const char *); int _getcpucount(void) pureconst; -long _missingno(); -void __oom_hook(size_t); -void _loadxmm(void *); -void _peekall(void); -void _savexmm(void *); -void _weakfree(void *); -int _OpenExecutable(void); int ftrace_install(void); int ftrace_enabled(int); int strace_enabled(int); -long _GetResourceLimit(int); +void _bt(const char *, ...); +void __print_maps(void); long _GetMaxFd(void); +/* builtin shell language */ +int _cocmd(int, char **, char **); +/* executable program */ char *GetProgramExecutableName(void); char *GetInterpreterExecutableName(char *, size_t); -void __printargs(const char *); -void __paginate(int, const char *); -int __arg_max(void); -void __print_maps(void); -void __warn_if_powersave(void); -const char *__describe_os(void); +int _OpenExecutable(void); bool _IsDynamicExecutable(const char *); +/* execution control */ +int MakeProcessNice(void); +axdx_t setlongerjmp(jmp_buf) +libcesque returnstwice paramsnonnull(); +void longerjmp(jmp_buf, intptr_t) libcesque wontreturn paramsnonnull(); +void __warn_if_powersave(void); +void _Exitr(int) libcesque wontreturn; +void _Exit1(int) libcesque wontreturn; void _restorewintty(void); +void __paginate(int, const char *); +void _loadxmm(void *); +void _savexmm(void *); +long _missingno(); +/* memory management */ +void _weakfree(void *); +void *_mapanon(size_t) attributeallocsize((1)) mallocesque; +void *_mapshared(size_t) attributeallocsize((1)) mallocesque; +void *_mapstack(void) returnsaligned((FRAMESIZE)) mallocesque; +int _freestack(void *); +void __oom_hook(size_t); +void _peekall(void); +bool _isheap(void *); +/* portability */ +int NtGetVersion(void) pureconst; +bool IsGenuineBlink(void); +bool IsCygwin(void); const char *GetCpuidOs(void); const char *GetCpuidEmulator(void); void GetCpuidBrand(char[13], uint32_t); -bool IsGenuineBlink(void); -bool IsCygwin(void); +long _GetResourceLimit(int); +const char *__describe_os(void); +int __arg_max(void); +#endif COSMOPOLITAN_C_END_ #endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ diff --git a/libc/runtime/stack.h b/libc/runtime/stack.h index 2293c0443..a3a6bbcad 100644 --- a/libc/runtime/stack.h +++ b/libc/runtime/stack.h @@ -1,18 +1,15 @@ #ifndef COSMOPOLITAN_LIBC_RUNTIME_STACK_H_ #define COSMOPOLITAN_LIBC_RUNTIME_STACK_H_ -#include "ape/config.h" -#include "libc/dce.h" -#include "libc/nt/version.h" -#include "libc/runtime/runtime.h" #if !(__ASSEMBLER__ + __LINKER__ + 0) +#ifdef COSMO /** * Tunes APE stack maximum size. * - * This defaults to `STACKSIZE`. The bottom-most page will be protected - * to ensure your stack does not magically grow beyond this value. It's - * possible to detect stack overflows, by calling `ShowCrashReports()`. - * Your stack size must be a power of two; the linker will check this. + * The bottom-most page will be protected to ensure your stack does not + * magically grow beyond this value. It's possible to detect stack + * overflows, by calling `ShowCrashReports()`. Your stack size must be a + * power of two; the linker will check this. * * If you want to know how much stack your programs needs, then * @@ -24,7 +21,7 @@ * @see ape/ape.lds */ #define STATIC_STACK_SIZE(BYTES) \ - STATIC_SYMBOL("ape_stack_memsz", _STACK_STRINGIFY(BYTES) _STACK_EXTRA) + _STACK_SYMBOL("ape_stack_memsz", _STACK_STRINGIFY(BYTES) _STACK_EXTRA) /** * Tunes APE stack virtual address. @@ -46,7 +43,7 @@ * @see ape/ape.lds */ #define STATIC_STACK_ADDR(ADDR) \ - STATIC_SYMBOL("ape_stack_vaddr", _STACK_STRINGIFY(ADDR)) + _STACK_SYMBOL("ape_stack_vaddr", _STACK_STRINGIFY(ADDR)) /** * Makes program stack executable if declared, e.g. @@ -63,11 +60,14 @@ * printf("result %d should be 7\n", func()); * } */ -#define STATIC_EXEC_STACK() STATIC_SYMBOL("ape_stack_pf", "7") +#define STATIC_EXEC_STACK() _STACK_SYMBOL("ape_stack_pf", "7") #define _STACK_STRINGIFY(ADDR) #ADDR +#define _STACK_SYMBOL(NAME, VALUE) \ + asm(".equ\t" NAME "," VALUE "\n\t" \ + ".globl\t" NAME) -#if IsAsan() +#ifdef __SANITIZE_ADDRESS__ #define _STACK_EXTRA "*2" #else #define _STACK_EXTRA "" @@ -125,7 +125,7 @@ extern char ape_stack_align[] __attribute__((__weak__)); * Returns true if at least `n` bytes of stack are available. */ #define HaveStackMemory(n) \ - ((intptr_t)__builtin_frame_address(0) >= GetStackAddr() + GUARDSIZE + (n)) + ((intptr_t)__builtin_frame_address(0) >= GetStackAddr() + APE_GUARDSIZE + (n)) forceinline void CheckLargeStackAllocation(void *p, ssize_t n) { for (; n > 0; n -= 4096) { @@ -133,6 +133,7 @@ forceinline void CheckLargeStackAllocation(void *p, ssize_t n) { } } +#endif /* COSMO */ COSMOPOLITAN_C_END_ #endif /* GNU ELF */ #endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ diff --git a/libc/runtime/symbols.internal.h b/libc/runtime/symbols.internal.h index 5ea80ebdc..6030d103b 100644 --- a/libc/runtime/symbols.internal.h +++ b/libc/runtime/symbols.internal.h @@ -1,10 +1,9 @@ #ifndef COSMOPOLITAN_LIBC_SYMBOLS_H_ #define COSMOPOLITAN_LIBC_SYMBOLS_H_ -#include "libc/intrin/bits.h" #if !(__ASSEMBLER__ + __LINKER__ + 0) COSMOPOLITAN_C_START_ -#define SYMBOLS_MAGIC READ32LE("SYMT") +#define SYMBOLS_MAGIC 0x544d5953 /* SYMT */ #define SYMBOLS_ABI 1 struct Symbol { diff --git a/libc/sock/nointernet.c b/libc/sock/nointernet.c index 3773030f8..ce9ac094d 100644 --- a/libc/sock/nointernet.c +++ b/libc/sock/nointernet.c @@ -18,9 +18,9 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/assert.h" #include "libc/calls/calls.h" -#include "libc/calls/struct/bpf.h" -#include "libc/calls/struct/filter.h" -#include "libc/calls/struct/seccomp.h" +#include "libc/calls/struct/bpf.internal.h" +#include "libc/calls/struct/filter.internal.h" +#include "libc/calls/struct/seccomp.internal.h" #include "libc/calls/struct/sigaction.h" #include "libc/calls/struct/sigset.h" #include "libc/calls/syscall_support-sysv.internal.h" diff --git a/libc/stdio/append.h b/libc/stdio/append.h index 49817097b..525a09b97 100644 --- a/libc/stdio/append.h +++ b/libc/stdio/append.h @@ -1,6 +1,5 @@ #ifndef COSMOPOLITAN_LIBC_STDIO_APPEND_H_ #define COSMOPOLITAN_LIBC_STDIO_APPEND_H_ -#include "libc/fmt/pflink.h" #ifdef COSMO #define APPEND_COOKIE 21578 diff --git a/libc/stdio/dirstream.c b/libc/stdio/dirstream.c index 76d0f57a6..ad6618e63 100644 --- a/libc/stdio/dirstream.c +++ b/libc/stdio/dirstream.c @@ -38,7 +38,7 @@ #include "libc/sysv/consts/s.h" #include "libc/sysv/errfuns.h" #include "libc/thread/thread.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "libc/zipos/zipos.internal.h" /** diff --git a/libc/str/getzipcdircomment.c b/libc/str/getzipcdircomment.c index b738b4e05..5b1f68fec 100644 --- a/libc/str/getzipcdircomment.c +++ b/libc/str/getzipcdircomment.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/zip.h" +#include "libc/zip.internal.h" /** * Returns comment of zip central directory. diff --git a/libc/str/getzipcdircommentsize.c b/libc/str/getzipcdircommentsize.c index 78165b245..e0b2fc867 100644 --- a/libc/str/getzipcdircommentsize.c +++ b/libc/str/getzipcdircommentsize.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/zip.h" +#include "libc/zip.internal.h" /** * Returns comment of zip central directory. diff --git a/libc/str/getzipcdiroffset.c b/libc/str/getzipcdiroffset.c index c50ff6d7a..1728b8bf6 100644 --- a/libc/str/getzipcdiroffset.c +++ b/libc/str/getzipcdiroffset.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/zip.h" +#include "libc/zip.internal.h" /** * Returns offset of zip central directory. diff --git a/libc/str/getzipcdirrecords.c b/libc/str/getzipcdirrecords.c index 722bd31d8..8093a536b 100644 --- a/libc/str/getzipcdirrecords.c +++ b/libc/str/getzipcdirrecords.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/zip.h" +#include "libc/zip.internal.h" /** * Returns number of records in zip central directory. diff --git a/libc/str/getzipcdirsize.c b/libc/str/getzipcdirsize.c index 67985c214..45b70868a 100644 --- a/libc/str/getzipcdirsize.c +++ b/libc/str/getzipcdirsize.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/zip.h" +#include "libc/zip.internal.h" /** * Returns size of zip central directory. diff --git a/libc/str/getzipcfilecompressedsize.c b/libc/str/getzipcfilecompressedsize.c index 9391bcce7..816bbae85 100644 --- a/libc/str/getzipcfilecompressedsize.c +++ b/libc/str/getzipcfilecompressedsize.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/zip.h" +#include "libc/zip.internal.h" /** * Returns compressed size in bytes from zip central directory header. diff --git a/libc/str/getzipcfilemode.c b/libc/str/getzipcfilemode.c index 7a51b551d..695326d51 100644 --- a/libc/str/getzipcfilemode.c +++ b/libc/str/getzipcfilemode.c @@ -18,7 +18,7 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/nt/enum/fileflagandattributes.h" #include "libc/sysv/consts/s.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" static int ConvertWindowsToUnixMode(int x) { int m; diff --git a/libc/str/getzipcfileoffset.c b/libc/str/getzipcfileoffset.c index 59f519fb3..53e070e7d 100644 --- a/libc/str/getzipcfileoffset.c +++ b/libc/str/getzipcfileoffset.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/zip.h" +#include "libc/zip.internal.h" /** * Returns offset of local file header. diff --git a/libc/str/getzipcfiletimestamps.c b/libc/str/getzipcfiletimestamps.c index ff3ee8c6d..12640aa8f 100644 --- a/libc/str/getzipcfiletimestamps.c +++ b/libc/str/getzipcfiletimestamps.c @@ -17,7 +17,7 @@ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/fmt/conv.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" static inline int pop(int x) { return !!(x & 1) + !!(x & 2) + !!(x & 4); diff --git a/libc/str/getzipcfileuncompressedsize.c b/libc/str/getzipcfileuncompressedsize.c index 0db56764b..afdab1c2d 100644 --- a/libc/str/getzipcfileuncompressedsize.c +++ b/libc/str/getzipcfileuncompressedsize.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/zip.h" +#include "libc/zip.internal.h" /** * Returns uncompressed size in bytes from zip central directory header. diff --git a/libc/str/getzipeocd.c b/libc/str/getzipeocd.c index 8645f4d70..49893f185 100644 --- a/libc/str/getzipeocd.c +++ b/libc/str/getzipeocd.c @@ -17,7 +17,7 @@ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/intrin/bits.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" typedef char v16qi __attribute__((__vector_size__(16))); typedef short v8hi __attribute__((__vector_size__(16))); diff --git a/libc/str/getziplfilecompressedsize.c b/libc/str/getziplfilecompressedsize.c index e2b978333..bb53119ea 100644 --- a/libc/str/getziplfilecompressedsize.c +++ b/libc/str/getziplfilecompressedsize.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/zip.h" +#include "libc/zip.internal.h" /** * Returns compressed size in bytes from zip local file header. diff --git a/libc/str/getziplfileuncompressedsize.c b/libc/str/getziplfileuncompressedsize.c index 2afb9deea..be3295ed2 100644 --- a/libc/str/getziplfileuncompressedsize.c +++ b/libc/str/getziplfileuncompressedsize.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/zip.h" +#include "libc/zip.internal.h" /** * Returns uncompressed size in bytes from zip local file header. diff --git a/libc/str/iszipeocd32.c b/libc/str/iszipeocd32.c index e5b9c987c..ceb9d906a 100644 --- a/libc/str/iszipeocd32.c +++ b/libc/str/iszipeocd32.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/zip.h" +#include "libc/zip.internal.h" /** * Determines if ZIP EOCD record seems legit. diff --git a/libc/str/iszipeocd64.c b/libc/str/iszipeocd64.c index b6c03d002..5619381f1 100644 --- a/libc/str/iszipeocd64.c +++ b/libc/str/iszipeocd64.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/zip.h" +#include "libc/zip.internal.h" /** * Returns kZipOk if zip64 end of central directory header seems legit. diff --git a/libc/sysv/systemfive.S b/libc/sysv/systemfive.S index 5219a3e6f..dad20dd1f 100644 --- a/libc/sysv/systemfive.S +++ b/libc/sysv/systemfive.S @@ -415,7 +415,7 @@ _init_systemfive_pid: mov (%rdi),%eax testb $_HOSTWINDOWS|_HOSTMETAL,(%rcx) jnz 1f - mov __NR_getpid,%eax + mov __NR_getpid(%rip),%eax syscall 1: stosq .endfn _init_systemfive_pid @@ -433,7 +433,7 @@ _init_systemfive_sigsys: push %rax push %rax push $SIG_IGN // sigaction_meta size 48 - mov __NR_sigaction,%eax // mag + mov __NR_sigaction(%rip),%eax // mag mov SIGSYS,%edi // sig mov %rsp,%rsi // new xor %edx,%edx // old diff --git a/libc/thread/pthread_attr_init.c b/libc/thread/pthread_attr_init.c index d56845dd9..111f6ca4e 100644 --- a/libc/thread/pthread_attr_init.c +++ b/libc/thread/pthread_attr_init.c @@ -27,7 +27,7 @@ errno_t pthread_attr_init(pthread_attr_t *attr) { *attr = (pthread_attr_t){ .__stacksize = GetStackSize(), - .__guardsize = GUARDSIZE, + .__guardsize = APE_GUARDSIZE, }; return 0; } diff --git a/libc/thread/pthread_create.c b/libc/thread/pthread_create.c index 73068aa45..c9ea50aa6 100644 --- a/libc/thread/pthread_create.c +++ b/libc/thread/pthread_create.c @@ -174,12 +174,12 @@ static errno_t pthread_create_impl(pthread_t *thread, pt->flags = PT_OWNSTACK; pt->attr.__stacksize = MAX(pt->attr.__stacksize, GetStackSize()); pt->attr.__stacksize = _roundup2pow(pt->attr.__stacksize); - pt->attr.__guardsize = ROUNDUP(pt->attr.__guardsize, GUARDSIZE); - if (pt->attr.__guardsize + GUARDSIZE >= pt->attr.__stacksize) { + pt->attr.__guardsize = ROUNDUP(pt->attr.__guardsize, APE_GUARDSIZE); + if (pt->attr.__guardsize + APE_GUARDSIZE >= pt->attr.__stacksize) { _pthread_free(pt); return EINVAL; } - if (pt->attr.__guardsize == GUARDSIZE) { + if (pt->attr.__guardsize == APE_GUARDSIZE) { // user is wisely using smaller stacks with default guard size pt->attr.__stackaddr = mmap(0, pt->attr.__stacksize, PROT_READ | PROT_WRITE, diff --git a/libc/thread/thread.h b/libc/thread/thread.h index 1485ca135..654b3f700 100644 --- a/libc/thread/thread.h +++ b/libc/thread/thread.h @@ -2,7 +2,7 @@ #define COSMOPOLITAN_LIBC_THREAD_THREAD_H_ #define PTHREAD_KEYS_MAX 128 -#define PTHREAD_STACK_MIN FRAMESIZE +#define PTHREAD_STACK_MIN 65536 #define PTHREAD_DESTRUCTOR_ITERATIONS 4 #define PTHREAD_BARRIER_SERIAL_THREAD 31337 diff --git a/libc/zip.internal.h b/libc/zip.internal.h new file mode 100644 index 000000000..dd1480f28 --- /dev/null +++ b/libc/zip.internal.h @@ -0,0 +1,221 @@ +#ifndef COSMOPOLITAN_LIBC_ZIP_H_ +#define COSMOPOLITAN_LIBC_ZIP_H_ +#include "libc/calls/struct/timespec.h" +#include "libc/intrin/bits.h" +#include "libc/macros.internal.h" +#include "libc/str/str.h" + +/** + * @fileoverview PKZIP Data Structures. + */ + +#define kZipOk 0 +#define kZipErrorEocdNotFound -1 +#define kZipErrorEocdOffsetOverflow -2 +#define kZipErrorEocdMagicNotFound -3 +#define kZipErrorEocdSizeOverflow -4 +#define kZipErrorEocdDiskMismatch -5 +#define kZipErrorCdirRecordsMismatch -6 +#define kZipErrorCdirRecordsOverflow -7 +#define kZipErrorCdirOffsetPastEocd -8 +#define kZipErrorCdirLocatorMagic -9 +#define kZipErrorCdirLocatorOffset -10 +#define kZipErrorRaceCondition -11 +#define kZipErrorMapFailed -12 +#define kZipErrorOpenFailed -13 + +#define kZipAlign 2 + +#define kZipCosmopolitanVersion kZipEra2001 + +#define kZipOsDos 0 +#define kZipOsAmiga 1 +#define kZipOsOpenvms 2 +#define kZipOsUnix 3 +#define kZipOsVmcms 4 +#define kZipOsAtarist 5 +#define kZipOsOs2hpfs 6 +#define kZipOsMacintosh 7 +#define kZipOsZsystem 8 +#define kZipOsCpm 9 +#define kZipOsWindowsntfs 10 +#define kZipOsMvsos390zos 11 +#define kZipOsVse 12 +#define kZipOsAcornrisc 13 +#define kZipOsVfat 14 +#define kZipOsAltmvs 15 +#define kZipOsBeos 16 +#define kZipOsTandem 17 +#define kZipOsOs400 18 +#define kZipOsOsxdarwin 19 + +#define kZipEra1989 10 /* PKZIP 1.0 */ +#define kZipEra1993 20 /* PKZIP 2.0: deflate/subdir/etc. support */ +#define kZipEra2001 45 /* PKZIP 4.5: kZipExtraZip64 support */ + +#define kZipIattrBinary 0 /* first bit not set */ +#define kZipIattrText 1 /* first bit set */ + +#define kZipCompressionNone 0 +#define kZipCompressionDeflate 8 + +#define kZipCdirHdrMagic 0x06054b50 /* PK♣♠ "PK\5\6" */ +#define kZipCdirHdrMinSize 22 +#define kZipCdirAlign kZipAlign +#define kZipCdirHdrLinkableSize 294 + +#define kZipCdir64HdrMagic 0x06064b50 /* PK♣♠ "PK\6\6" */ +#define kZipCdir64HdrMinSize 56 +#define kZipCdir64LocatorMagic 0x07064b50 /* PK♠• "PK\6\7" */ +#define kZipCdir64LocatorSize 20 + +#define kZipCfileHdrMagic 0x02014b50 /* PK☺☻ "PK\1\2" */ +#define kZipCfileHdrMinSize 46 +#define kZipCfileOffsetGeneralflag 8 +#define kZipCfileOffsetCompressionmethod 10 +#define kZipCfileOffsetLastmodifiedtime 12 +#define kZipCfileOffsetLastmodifieddate 14 +#define kZipCfileOffsetCrc32 16 +#define kZipCfileOffsetCompressedsize 20 +#define kZipCfileOffsetUncompressedsize 24 +#define kZipCfileOffsetExternalattributes 38 +#define kZipCfileOffsetOffset 42 + +#define kZipLfileHdrMagic 0x04034b50 /* PK♥♦ "PK\3\4" */ +#define kZipLfileHdrMinSize 30 +#define kZipLfileOffsetGeneralflag 6 +#define kZipLfileOffsetCompressionmethod 8 +#define kZipLfileOffsetLastmodifiedtime 10 +#define kZipLfileOffsetLastmodifieddate 12 +#define kZipLfileOffsetCrc32 14 +#define kZipLfileOffsetCompressedsize 18 +#define kZipLfileOffsetUncompressedsize 22 + +#define kZipGflagUtf8 0x800 + +#define kZipExtraHdrSize 4 +#define kZipExtraZip64 0x0001 +#define kZipExtraNtfs 0x000a +#define kZipExtraUnix 0x000d +#define kZipExtraExtendedTimestamp 0x5455 +#define kZipExtraInfoZipNewUnixExtra 0x7875 + +#define kZipCfileMagic "PK\001\002" + +#if !(__ASSEMBLER__ + __LINKER__ + 0) + +/* end of central directory record */ +#define ZIP_CDIR_MAGIC(P) READ32LE(P) +#define ZIP_CDIR_DISK(P) READ16LE((P) + 4) +#define ZIP_CDIR_STARTINGDISK(P) READ16LE((P) + 6) +#define ZIP_CDIR_RECORDSONDISK(P) READ16LE((P) + 8) +#define ZIP_CDIR_RECORDS(P) READ16LE((P) + 10) +#define ZIP_CDIR_SIZE(P) READ32LE((P) + 12) +#define ZIP_CDIR_OFFSET(P) READ32LE((P) + 16) +#define ZIP_CDIR_COMMENTSIZE(P) READ16LE((P) + 20) +#define ZIP_CDIR_COMMENT(P) ((P) + 22) /* recommend stopping at nul */ +#define ZIP_CDIR_HDRSIZE(P) (ZIP_CDIR_COMMENTSIZE(P) + kZipCdirHdrMinSize) + +/* zip64 end of central directory record */ +#define ZIP_CDIR64_MAGIC(P) READ32LE(P) +#define ZIP_CDIR64_HDRSIZE(P) (READ64LE((P) + 4) + 12) +#define ZIP_CDIR64_VERSIONMADE(P) READ16LE((P) + 12) +#define ZIP_CDIR64_VERSIONNEED(P) READ16LE((P) + 14) +#define ZIP_CDIR64_DISK(P) READ32LE((P) + 16) +#define ZIP_CDIR64_STARTINGDISK(P) READ32LE((P) + 20) +#define ZIP_CDIR64_RECORDSONDISK(P) READ64LE((P) + 24) +#define ZIP_CDIR64_RECORDS(P) READ64LE((P) + 32) +#define ZIP_CDIR64_SIZE(P) READ64LE((P) + 40) +#define ZIP_CDIR64_OFFSET(P) READ64LE((P) + 48) +#define ZIP_CDIR64_COMMENTSIZE(P) \ + (ZIP_CDIR64_HDRSIZE(P) >= 56 ? ZIP_CDIR64_HDRSIZE(P) - 56 : 0) +#define ZIP_CDIR64_COMMENT(P) ((P) + 56) /* recommend stopping at nul */ +#define ZIP_LOCATE64_MAGIC(P) READ32LE(P) +#define ZIP_LOCATE64_STARTINGDISK(P) READ32LE((P) + 4) +#define ZIP_LOCATE64_OFFSET(P) READ64LE((P) + 8) +#define ZIP_LOCATE64_TOTALDISKS(P) READ32LE((P) + 12) + +/* central directory file header */ +#define ZIP_CFILE_MAGIC(P) READ32LE(P) +#define ZIP_CFILE_VERSIONMADE(P) (255 & (P)[4]) +#define ZIP_CFILE_FILEATTRCOMPAT(P) (255 & (P)[5]) +#define ZIP_CFILE_VERSIONNEED(P) (255 & (P)[6]) +#define ZIP_CFILE_OSNEED(P) (255 & (P)[7]) +#define ZIP_CFILE_GENERALFLAG(P) READ16LE((P) + kZipCfileOffsetGeneralflag) +#define ZIP_CFILE_COMPRESSIONMETHOD(P) \ + READ16LE((P) + kZipCfileOffsetCompressionmethod) +#define ZIP_CFILE_LASTMODIFIEDTIME(P) \ + READ16LE((P) + kZipCfileOffsetLastmodifiedtime) /* @see DOS_TIME() */ +#define ZIP_CFILE_LASTMODIFIEDDATE(P) \ + READ16LE((P) + kZipCfileOffsetLastmodifieddate) /* @see DOS_DATE() */ +#define ZIP_CFILE_CRC32(P) READ32LE((P) + kZipCfileOffsetCrc32) +#define ZIP_CFILE_COMPRESSEDSIZE(P) READ32LE(P + kZipCfileOffsetCompressedsize) +#define ZIP_CFILE_UNCOMPRESSEDSIZE(P) \ + READ32LE((P) + kZipCfileOffsetUncompressedsize) +#define ZIP_CFILE_NAMESIZE(P) READ16LE((P) + 28) +#define ZIP_CFILE_EXTRASIZE(P) READ16LE((P) + 30) +#define ZIP_CFILE_COMMENTSIZE(P) READ16LE((P) + 32) +#define ZIP_CFILE_DISK(P) READ16LE((P) + 34) +#define ZIP_CFILE_INTERNALATTRIBUTES(P) READ16LE((P) + 36) +#define ZIP_CFILE_EXTERNALATTRIBUTES(P) \ + READ32LE((P) + kZipCfileOffsetExternalattributes) +#define ZIP_CFILE_OFFSET(P) READ32LE((P) + kZipCfileOffsetOffset) +#define ZIP_CFILE_NAME(P) ((const char *)((P) + 46)) /* not nul-terminated */ +#define ZIP_CFILE_EXTRA(P) ((P) + 46 + ZIP_CFILE_NAMESIZE(P)) +#define ZIP_CFILE_COMMENT(P) \ + ((const char *)((P) + 46 + ZIP_CFILE_NAMESIZE(P) + \ + ZIP_CFILE_EXTRASIZE(P))) /* recommend stopping at nul */ +#define ZIP_CFILE_HDRSIZE(P) \ + (ZIP_CFILE_NAMESIZE(P) + ZIP_CFILE_EXTRASIZE(P) + ZIP_CFILE_COMMENTSIZE(P) + \ + kZipCfileHdrMinSize) + +/* local file header */ +#define ZIP_LFILE_MAGIC(P) READ32LE(P) +#define ZIP_LFILE_VERSIONNEED(P) (255 & (P)[4]) +#define ZIP_LFILE_OSNEED(P) (255 & (P)[5]) +#define ZIP_LFILE_GENERALFLAG(P) READ16LE((P) + kZipLfileOffsetGeneralflag) +#define ZIP_LFILE_COMPRESSIONMETHOD(P) \ + READ16LE((P) + kZipLfileOffsetCompressionmethod) +#define ZIP_LFILE_LASTMODIFIEDTIME(P) \ + READ16LE((P) + kZipLfileOffsetLastmodifiedtime) /* @see DOS_TIME() */ +#define ZIP_LFILE_LASTMODIFIEDDATE(P) \ + READ16LE((P) + kZipLfileOffsetLastmodifieddate) /* @see DOS_DATE() */ +#define ZIP_LFILE_CRC32(P) READ32LE((P) + kZipLfileOffsetCrc32) +#define ZIP_LFILE_COMPRESSEDSIZE(P) \ + READ32LE((P) + kZipLfileOffsetCompressedsize) +#define ZIP_LFILE_UNCOMPRESSEDSIZE(P) \ + READ32LE((P) + kZipLfileOffsetUncompressedsize) +#define ZIP_LFILE_NAMESIZE(P) READ16LE((P) + 26) +#define ZIP_LFILE_EXTRASIZE(P) READ16LE((P) + 28) +#define ZIP_LFILE_NAME(P) ((const char *)((P) + 30)) +#define ZIP_LFILE_EXTRA(P) ((P) + 30 + ZIP_LFILE_NAMESIZE(P)) +#define ZIP_LFILE_HDRSIZE(P) \ + (ZIP_LFILE_NAMESIZE(P) + ZIP_LFILE_EXTRASIZE(P) + kZipLfileHdrMinSize) +#define ZIP_LFILE_CONTENT(P) ((P) + ZIP_LFILE_HDRSIZE(P)) +#define ZIP_LFILE_SIZE(P) (ZIP_LFILE_HDRSIZE(P) + ZIP_LFILE_COMPRESSEDSIZE(P)) + +#define ZIP_EXTRA_HEADERID(P) READ16LE(P) +#define ZIP_EXTRA_CONTENTSIZE(P) READ16LE((P) + 2) +#define ZIP_EXTRA_CONTENT(P) ((P) + 4) +#define ZIP_EXTRA_SIZE(P) (ZIP_EXTRA_CONTENTSIZE(P) + kZipExtraHdrSize) + +void *GetZipEocd(const uint8_t *, size_t, int *); +uint8_t *FindEmbeddedApe(const uint8_t *, size_t); +int IsZipEocd32(const uint8_t *, size_t, size_t); +int IsZipEocd64(const uint8_t *, size_t, size_t); +int GetZipCfileMode(const uint8_t *); +uint64_t GetZipCdirOffset(const uint8_t *); +uint64_t GetZipCdirRecords(const uint8_t *); +void *GetZipCdirComment(const uint8_t *); +uint64_t GetZipCdirSize(const uint8_t *); +uint64_t GetZipCdirCommentSize(const uint8_t *); +uint64_t GetZipCfileUncompressedSize(const uint8_t *); +uint64_t GetZipCfileCompressedSize(const uint8_t *); +uint64_t GetZipCfileOffset(const uint8_t *); +uint64_t GetZipLfileUncompressedSize(const uint8_t *); +uint64_t GetZipLfileCompressedSize(const uint8_t *); +void GetZipCfileTimestamps(const uint8_t *, struct timespec *, + struct timespec *, struct timespec *, int); + +#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ +#endif /* COSMOPOLITAN_LIBC_ZIP_H_ */ diff --git a/libc/zipos/access.c b/libc/zipos/access.c index d0e5bab5c..18daf6f39 100644 --- a/libc/zipos/access.c +++ b/libc/zipos/access.c @@ -20,7 +20,7 @@ #include "libc/calls/struct/stat.h" #include "libc/sysv/consts/ok.h" #include "libc/sysv/errfuns.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "libc/zipos/zipos.internal.h" // TODO: this should check parent directory components diff --git a/libc/zipos/fcntl.c b/libc/zipos/fcntl.c index aa0d673cf..c1d215e4d 100644 --- a/libc/zipos/fcntl.c +++ b/libc/zipos/fcntl.c @@ -21,7 +21,7 @@ #include "libc/sysv/consts/fd.h" #include "libc/sysv/consts/o.h" #include "libc/sysv/errfuns.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "libc/zipos/zipos.internal.h" #define ZIPOS __zipos_get() diff --git a/libc/zipos/find.c b/libc/zipos/find.c index a64c3499c..1c81d31c9 100644 --- a/libc/zipos/find.c +++ b/libc/zipos/find.c @@ -20,7 +20,7 @@ #include "libc/assert.h" #include "libc/runtime/runtime.h" #include "libc/str/str.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "libc/zipos/zipos.internal.h" // TODO(jart): improve time complexity here diff --git a/libc/zipos/fstat.c b/libc/zipos/fstat.c index 059dec50e..fd0a04a91 100644 --- a/libc/zipos/fstat.c +++ b/libc/zipos/fstat.c @@ -18,7 +18,7 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/assert.h" #include "libc/sysv/errfuns.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "libc/zipos/zipos.internal.h" /** diff --git a/libc/zipos/get.c b/libc/zipos/get.c index 110f978b2..1824c83d3 100644 --- a/libc/zipos/get.c +++ b/libc/zipos/get.c @@ -28,7 +28,7 @@ #include "libc/sysv/consts/o.h" #include "libc/sysv/consts/prot.h" #include "libc/thread/thread.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "libc/zipos/zipos.internal.h" #ifdef __x86_64__ diff --git a/libc/zipos/lseek.c b/libc/zipos/lseek.c index 34fb4f35d..c1db16489 100644 --- a/libc/zipos/lseek.c +++ b/libc/zipos/lseek.c @@ -19,7 +19,7 @@ #include "libc/calls/calls.h" #include "libc/sysv/errfuns.h" #include "libc/thread/thread.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "libc/zipos/zipos.internal.h" /** diff --git a/libc/zipos/open.c b/libc/zipos/open.c index 595196a06..d632c049f 100644 --- a/libc/zipos/open.c +++ b/libc/zipos/open.c @@ -41,7 +41,7 @@ #include "libc/sysv/consts/sig.h" #include "libc/sysv/errfuns.h" #include "libc/thread/thread.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "libc/zipos/zipos.internal.h" static char *mapend; diff --git a/libc/zipos/read.c b/libc/zipos/read.c index 472a8007f..1dd00826a 100644 --- a/libc/zipos/read.c +++ b/libc/zipos/read.c @@ -21,7 +21,7 @@ #include "libc/intrin/safemacros.internal.h" #include "libc/str/str.h" #include "libc/thread/thread.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "libc/zipos/zipos.internal.h" static size_t GetIovSize(const struct iovec *iov, size_t iovlen) { diff --git a/libc/zipos/stat-impl.c b/libc/zipos/stat-impl.c index 0b98c3491..7ed80385e 100644 --- a/libc/zipos/stat-impl.c +++ b/libc/zipos/stat-impl.c @@ -21,7 +21,7 @@ #include "libc/str/str.h" #include "libc/sysv/consts/s.h" #include "libc/sysv/errfuns.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "libc/zipos/zipos.internal.h" int __zipos_stat_impl(struct Zipos *zipos, size_t cf, struct stat *st) { diff --git a/net/turfwar/turfwar.c b/net/turfwar/turfwar.c index fe3b5dea0..a9f62f323 100644 --- a/net/turfwar/turfwar.c +++ b/net/turfwar/turfwar.c @@ -73,7 +73,7 @@ #include "libc/time/struct/tm.h" #include "libc/x/x.h" #include "libc/x/xasprintf.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "net/http/escape.h" #include "net/http/http.h" #include "net/http/ip.h" diff --git a/test/libc/calls/pledge2_test.c b/test/libc/calls/pledge2_test.c index f3d18c651..c59ad7b19 100644 --- a/test/libc/calls/pledge2_test.c +++ b/test/libc/calls/pledge2_test.c @@ -18,7 +18,7 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/calls/calls.h" #include "libc/calls/pledge.internal.h" -#include "libc/calls/struct/seccomp.h" +#include "libc/calls/struct/seccomp.internal.h" #include "libc/calls/syscall_support-sysv.internal.h" #include "libc/dce.h" #include "libc/errno.h" diff --git a/test/libc/calls/pledge_test.c b/test/libc/calls/pledge_test.c index 0f93f872f..8cd01dbd4 100644 --- a/test/libc/calls/pledge_test.c +++ b/test/libc/calls/pledge_test.c @@ -20,10 +20,10 @@ #include "libc/calls/internal.h" #include "libc/calls/ioctl.h" #include "libc/calls/pledge.internal.h" -#include "libc/calls/struct/bpf.h" -#include "libc/calls/struct/filter.h" +#include "libc/calls/struct/bpf.internal.h" +#include "libc/calls/struct/filter.internal.h" #include "libc/calls/struct/flock.h" -#include "libc/calls/struct/seccomp.h" +#include "libc/calls/struct/seccomp.internal.h" #include "libc/calls/struct/sigaction.h" #include "libc/calls/struct/sigset.h" #include "libc/calls/struct/stat.h" diff --git a/test/libc/calls/seccomp_test.c b/test/libc/calls/seccomp_test.c index fe7add636..585d9e92b 100644 --- a/test/libc/calls/seccomp_test.c +++ b/test/libc/calls/seccomp_test.c @@ -18,10 +18,10 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/calls/calls.h" #include "libc/calls/internal.h" -#include "libc/calls/struct/bpf.h" -#include "libc/calls/struct/filter.h" +#include "libc/calls/struct/bpf.internal.h" +#include "libc/calls/struct/filter.internal.h" #include "libc/calls/struct/iovec.h" -#include "libc/calls/struct/seccomp.h" +#include "libc/calls/struct/seccomp.internal.h" #include "libc/calls/syscall_support-sysv.internal.h" #include "libc/errno.h" #include "libc/runtime/runtime.h" diff --git a/test/libc/calls/setrlimit_test.c b/test/libc/calls/setrlimit_test.c index bcddac05c..75eedfb86 100644 --- a/test/libc/calls/setrlimit_test.c +++ b/test/libc/calls/setrlimit_test.c @@ -128,8 +128,8 @@ TEST(setrlimit, testMemoryLimit) { ASSERT_NE(-1, (wstatus = xspawn(0))); if (wstatus == -2) { ASSERT_EQ(0, SetKernelEnforcedMemoryLimit(MEM)); - for (gotsome = i = 0; i < (MEM * 2) / GUARDSIZE; ++i) { - p = mmap(0, GUARDSIZE, PROT_READ | PROT_WRITE, + for (gotsome = i = 0; i < (MEM * 2) / APE_GUARDSIZE; ++i) { + p = mmap(0, APE_GUARDSIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE | MAP_POPULATE, -1, 0); if (p != MAP_FAILED) { gotsome = true; @@ -141,7 +141,7 @@ TEST(setrlimit, testMemoryLimit) { ASSERT_EQ(ENOMEM, errno); _Exit(0); } - rngset(p, GUARDSIZE, _rand64, -1); + rngset(p, APE_GUARDSIZE, _rand64, -1); } _Exit(1); } @@ -161,15 +161,15 @@ TEST(setrlimit, testVirtualMemoryLimit) { ASSERT_NE(-1, (wstatus = xspawn(0))); if (wstatus == -2) { ASSERT_EQ(0, setrlimit(RLIMIT_AS, &(struct rlimit){MEM, MEM})); - for (i = 0; i < (MEM * 2) / GUARDSIZE; ++i) { - p = sys_mmap(0, GUARDSIZE, PROT_READ | PROT_WRITE, + for (i = 0; i < (MEM * 2) / APE_GUARDSIZE; ++i) { + p = sys_mmap(0, APE_GUARDSIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE | MAP_POPULATE, -1, 0) .addr; if (p == MAP_FAILED) { ASSERT_EQ(ENOMEM, errno); _Exit(0); } - rngset(p, GUARDSIZE, _rand64, -1); + rngset(p, APE_GUARDSIZE, _rand64, -1); } _Exit(1); } @@ -191,15 +191,15 @@ TEST(setrlimit, testDataMemoryLimit) { ASSERT_NE(-1, (wstatus = xspawn(0))); if (wstatus == -2) { ASSERT_EQ(0, setrlimit(RLIMIT_DATA, &(struct rlimit){MEM, MEM})); - for (i = 0; i < (MEM * 2) / GUARDSIZE; ++i) { - p = sys_mmap(0, GUARDSIZE, PROT_READ | PROT_WRITE, + for (i = 0; i < (MEM * 2) / APE_GUARDSIZE; ++i) { + p = sys_mmap(0, APE_GUARDSIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE | MAP_POPULATE, -1, 0) .addr; if (p == MAP_FAILED) { ASSERT_EQ(ENOMEM, errno); _Exit(0); } - rngset(p, GUARDSIZE, _rand64, -1); + rngset(p, APE_GUARDSIZE, _rand64, -1); } _Exit(1); } diff --git a/test/libc/runtime/mmap_test.c b/test/libc/runtime/mmap_test.c index 2ab9fa6b3..d668a9185 100644 --- a/test/libc/runtime/mmap_test.c +++ b/test/libc/runtime/mmap_test.c @@ -34,6 +34,7 @@ #include "libc/mem/mem.h" #include "libc/runtime/memtrack.internal.h" #include "libc/runtime/runtime.h" +#include "libc/runtime/stack.h" #include "libc/stdio/rand.h" #include "libc/stdio/stdio.h" #include "libc/str/str.h" @@ -150,17 +151,18 @@ TEST(mmap, testMapFixed_destroysEverythingInItsPath) { TEST(mmap, customStackMemory_isAuthorized) { char *stack; uintptr_t w, r; - ASSERT_NE(MAP_FAILED, (stack = mmap(NULL, STACKSIZE, PROT_READ | PROT_WRITE, - MAP_ANONYMOUS | MAP_STACK, -1, 0))); + ASSERT_NE(MAP_FAILED, + (stack = mmap(NULL, GetStackSize(), PROT_READ | PROT_WRITE, + MAP_ANONYMOUS | MAP_STACK, -1, 0))); asm("mov\t%%rsp,%0\n\t" "mov\t%2,%%rsp\n\t" "push\t%3\n\t" "pop\t%1\n\t" "mov\t%0,%%rsp" : "=&r"(w), "=&r"(r) - : "rm"(stack + STACKSIZE - 8), "i"(123)); + : "rm"(stack + GetStackSize() - 8), "i"(123)); ASSERT_EQ(123, r); - EXPECT_SYS(0, 0, munmap(stack, STACKSIZE)); + EXPECT_SYS(0, 0, munmap(stack, GetStackSize())); } #endif /* __x86_64__ */ diff --git a/test/libc/runtime/mprotect_test.c b/test/libc/runtime/mprotect_test.c index d9de99f48..69914f1c1 100644 --- a/test/libc/runtime/mprotect_test.c +++ b/test/libc/runtime/mprotect_test.c @@ -114,9 +114,9 @@ void TearDown(void) { } TEST(mprotect, testOkMemory) { - char *p = gc(memalign(GUARDSIZE, GUARDSIZE)); + char *p = gc(memalign(APE_GUARDSIZE, APE_GUARDSIZE)); p[0] = 0; - ASSERT_NE(-1, mprotect(p, GUARDSIZE, PROT_READ | PROT_WRITE)); + ASSERT_NE(-1, mprotect(p, APE_GUARDSIZE, PROT_READ | PROT_WRITE)); p[0] = 1; EXPECT_EQ(1, p[0]); EXPECT_FALSE(gotsegv); @@ -125,19 +125,19 @@ TEST(mprotect, testOkMemory) { TEST(mprotect, testSegfault_writeToReadOnlyAnonymous) { volatile char *p; - p = gc(memalign(GUARDSIZE, GUARDSIZE)); + p = gc(memalign(APE_GUARDSIZE, APE_GUARDSIZE)); EXPECT_FALSE(gotsegv); p[0] = 1; EXPECT_FALSE(gotsegv); EXPECT_FALSE(gotbusted); - EXPECT_NE(-1, mprotect(p, GUARDSIZE, PROT_READ)); + EXPECT_NE(-1, mprotect(p, APE_GUARDSIZE, PROT_READ)); _missingno(p[0]); EXPECT_FALSE(gotsegv); EXPECT_FALSE(gotbusted); p[0] = 2; EXPECT_TRUE(gotsegv | gotbusted); EXPECT_EQ(1, p[0]); - EXPECT_NE(-1, mprotect(p, GUARDSIZE, PROT_READ | PROT_WRITE)); + EXPECT_NE(-1, mprotect(p, APE_GUARDSIZE, PROT_READ | PROT_WRITE)); } TEST(mprotect, testExecOnly_canExecute) { @@ -157,33 +157,33 @@ TEST(mprotect, testExecOnly_canExecute) { TEST(mprotect, testProtNone_cantEvenRead) { volatile char *p; - p = gc(memalign(GUARDSIZE, GUARDSIZE)); - EXPECT_NE(-1, mprotect(p, GUARDSIZE, PROT_NONE)); + p = gc(memalign(APE_GUARDSIZE, APE_GUARDSIZE)); + EXPECT_NE(-1, mprotect(p, APE_GUARDSIZE, PROT_NONE)); _missingno(p[0]); EXPECT_TRUE(gotsegv | gotbusted); - EXPECT_NE(-1, mprotect(p, GUARDSIZE, PROT_READ | PROT_WRITE)); + EXPECT_NE(-1, mprotect(p, APE_GUARDSIZE, PROT_READ | PROT_WRITE)); } TEST(mprotect, testExecJit_actuallyWorks) { - int (*p)(void) = gc(memalign(GUARDSIZE, GUARDSIZE)); + int (*p)(void) = gc(memalign(APE_GUARDSIZE, APE_GUARDSIZE)); memcpy(p, kRet31337, sizeof(kRet31337)); - EXPECT_NE(-1, mprotect(p, GUARDSIZE, PROT_EXEC)); + EXPECT_NE(-1, mprotect(p, APE_GUARDSIZE, PROT_EXEC)); EXPECT_EQ(31337, p()); EXPECT_FALSE(gotsegv); EXPECT_FALSE(gotbusted); - EXPECT_NE(-1, mprotect(p, GUARDSIZE, PROT_READ | PROT_WRITE)); + EXPECT_NE(-1, mprotect(p, APE_GUARDSIZE, PROT_READ | PROT_WRITE)); } TEST(mprotect, testRwxMap_vonNeumannRules) { if (IsOpenbsd()) return; // boo if (IsXnuSilicon()) return; // boo - int (*p)(void) = gc(memalign(GUARDSIZE, GUARDSIZE)); + int (*p)(void) = gc(memalign(APE_GUARDSIZE, APE_GUARDSIZE)); memcpy(p, kRet31337, sizeof(kRet31337)); - EXPECT_NE(-1, mprotect(p, GUARDSIZE, PROT_READ | PROT_WRITE | PROT_EXEC)); + EXPECT_NE(-1, mprotect(p, APE_GUARDSIZE, PROT_READ | PROT_WRITE | PROT_EXEC)); EXPECT_EQ(31337, p()); EXPECT_FALSE(gotsegv); EXPECT_FALSE(gotbusted); - EXPECT_NE(-1, mprotect(p, GUARDSIZE, PROT_READ | PROT_WRITE)); + EXPECT_NE(-1, mprotect(p, APE_GUARDSIZE, PROT_READ | PROT_WRITE)); } TEST(mprotect, testExecuteFlatFileMapOpenedAsReadonly) { @@ -218,13 +218,13 @@ TEST(mprotect, testFileMap_canChangeToExecWhileOpenInRdwrMode) { } TEST(mprotect, testBadProt_failsEinval) { - volatile char *p = gc(memalign(GUARDSIZE, GUARDSIZE)); + volatile char *p = gc(memalign(APE_GUARDSIZE, APE_GUARDSIZE)); EXPECT_EQ(-1, mprotect(p, 9999, -1)); EXPECT_EQ(EINVAL, errno); } TEST(mprotect, testZeroSize_doesNothing) { - volatile char *p = gc(memalign(GUARDSIZE, GUARDSIZE)); + volatile char *p = gc(memalign(APE_GUARDSIZE, APE_GUARDSIZE)); EXPECT_NE(-1, mprotect(p, 0, PROT_READ)); p[0] = 1; EXPECT_FALSE(gotsegv); diff --git a/third_party/getopt/getopt.h b/third_party/getopt/getopt.h index 90572bc23..f69aedeb4 100644 --- a/third_party/getopt/getopt.h +++ b/third_party/getopt/getopt.h @@ -1,6 +1,5 @@ #ifndef COSMOPOLITAN_THIRD_PARTY_GETOPT_GETOPT_H_ #define COSMOPOLITAN_THIRD_PARTY_GETOPT_GETOPT_H_ -#ifdef COSMO #define no_argument 0 #define required_argument 1 @@ -12,8 +11,8 @@ COSMOPOLITAN_C_START_ extern char *optarg; extern int optind, opterr, optopt, optreset; -int getopt(int, char *const[], const char *); -int getsubopt(char **, char *const *, char **); +int getopt(int, char *const[], const char *) paramsnonnull(); +int getsubopt(char **, char *const *, char **) paramsnonnull(); struct option { const char *name; @@ -28,5 +27,4 @@ int getopt_long_only(int, char *const *, const char *, const struct option *, COSMOPOLITAN_C_END_ #endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ -#endif /* COSMO */ #endif /* COSMOPOLITAN_THIRD_PARTY_GETOPT_GETOPT_H_ */ diff --git a/third_party/getopt/getsubopt.c b/third_party/getopt/getsubopt.c index 274ed088a..e1309ff85 100644 --- a/third_party/getopt/getsubopt.c +++ b/third_party/getopt/getsubopt.c @@ -48,9 +48,6 @@ getsubopt(char **optionp, char * const *tokens, char **valuep) suboptarg = *valuep = NULL; - if (!optionp || !*optionp) - return(-1); - /* skip leading white-space, commas */ for (p = *optionp; *p && (*p == ',' || *p == ' ' || *p == '\t'); ++p); diff --git a/third_party/lua/luaencodejsondata.c b/third_party/lua/luaencodejsondata.c index f92546617..badfb16ba 100644 --- a/third_party/lua/luaencodejsondata.c +++ b/third_party/lua/luaencodejsondata.c @@ -21,7 +21,7 @@ #include "libc/intrin/bits.h" #include "libc/intrin/likely.h" #include "libc/log/log.h" -#include "libc/log/rop.h" +#include "libc/log/rop.internal.h" #include "libc/mem/gc.internal.h" #include "libc/mem/mem.h" #include "libc/runtime/stack.h" @@ -169,7 +169,7 @@ static int SerializeTable(lua_State *L, char **buf, int idx, bool multi; bool isarray; lua_Unsigned n; - if (UNLIKELY(!HaveStackMemory(GUARDSIZE))) { + if (UNLIKELY(!HaveStackMemory(APE_GUARDSIZE))) { z->reason = "out of stack"; return -1; } diff --git a/third_party/lua/luaencodeluadata.c b/third_party/lua/luaencodeluadata.c index c4441cf1f..b8a76a062 100644 --- a/third_party/lua/luaencodeluadata.c +++ b/third_party/lua/luaencodeluadata.c @@ -19,7 +19,7 @@ #include "libc/assert.h" #include "libc/fmt/itoa.h" #include "libc/intrin/bits.h" -#include "libc/log/rop.h" +#include "libc/log/rop.internal.h" #include "libc/math.h" #include "libc/mem/mem.h" #include "libc/runtime/stack.h" @@ -353,7 +353,7 @@ static int SerializeTable(lua_State *L, char **buf, int idx, int rc; bool multi; intptr_t rsp, bot; - if (UNLIKELY(!HaveStackMemory(GUARDSIZE))) { + if (UNLIKELY(!HaveStackMemory(APE_GUARDSIZE))) { z->reason = "out of stack"; return -1; } diff --git a/third_party/lua/lunix.c b/third_party/lua/lunix.c index d055b570e..ecd28016a 100644 --- a/third_party/lua/lunix.c +++ b/third_party/lua/lunix.c @@ -24,7 +24,7 @@ #include "libc/calls/ioctl.h" #include "libc/calls/makedev.h" #include "libc/calls/pledge.h" -#include "libc/calls/struct/bpf.h" +#include "libc/calls/struct/bpf.internal.h" #include "libc/calls/struct/dirent.h" #include "libc/calls/struct/flock.h" #include "libc/calls/struct/itimerval.h" diff --git a/third_party/lua/serialize.c b/third_party/lua/serialize.c index bf0302346..d83727953 100644 --- a/third_party/lua/serialize.c +++ b/third_party/lua/serialize.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/log/rop.h" +#include "libc/log/rop.internal.h" #include "libc/stdio/append.h" #include "third_party/lua/cosmo.h" #include "third_party/lua/lua.h" diff --git a/third_party/make/function.c b/third_party/make/function.c index 51323124b..e94888216 100644 --- a/third_party/make/function.c +++ b/third_party/make/function.c @@ -24,7 +24,7 @@ this program. If not, see . */ #include "third_party/make/os.h" #include "third_party/make/commands.h" #include "libc/mem/critbit0.h" -#include "libc/log/rop.h" +#include "libc/log/rop.internal.h" #include "libc/runtime/runtime.h" #include "third_party/make/debug.h" diff --git a/third_party/make/job.c b/third_party/make/job.c index 29ae16217..17fe1bc90 100644 --- a/third_party/make/job.c +++ b/third_party/make/job.c @@ -24,9 +24,9 @@ this program. If not, see . */ #include "libc/calls/calls.h" #include "libc/calls/pledge.h" #include "libc/calls/pledge.internal.h" -#include "libc/calls/struct/bpf.h" -#include "libc/calls/struct/filter.h" -#include "libc/calls/struct/seccomp.h" +#include "libc/calls/struct/bpf.internal.h" +#include "libc/calls/struct/filter.internal.h" +#include "libc/calls/struct/seccomp.internal.h" #include "libc/calls/struct/sysinfo.h" #include "libc/calls/struct/timeval.h" #include "libc/dce.h" @@ -42,7 +42,7 @@ this program. If not, see . */ #include "libc/intrin/safemacros.internal.h" #include "libc/log/backtrace.internal.h" #include "libc/log/log.h" -#include "libc/log/rop.h" +#include "libc/log/rop.internal.h" #include "libc/macros.internal.h" #include "libc/nexgen32e/kcpuids.h" #include "libc/runtime/runtime.h" diff --git a/third_party/make/main.c b/third_party/make/main.c index 5a91ac8c4..1034534d6 100644 --- a/third_party/make/main.c +++ b/third_party/make/main.c @@ -28,9 +28,9 @@ this program. If not, see . */ #include "third_party/make/rule.h" /**/ #include "libc/calls/calls.h" -#include "libc/calls/struct/bpf.h" -#include "libc/calls/struct/filter.h" -#include "libc/calls/struct/seccomp.h" +#include "libc/calls/struct/bpf.internal.h" +#include "libc/calls/struct/filter.internal.h" +#include "libc/calls/struct/seccomp.internal.h" #include "libc/calls/syscall_support-sysv.internal.h" #include "libc/dce.h" #include "libc/limits.h" diff --git a/third_party/python/Modules/mmapmodule.c b/third_party/python/Modules/mmapmodule.c index df3017f1b..a18dc160e 100644 --- a/third_party/python/Modules/mmapmodule.c +++ b/third_party/python/Modules/mmapmodule.c @@ -8,6 +8,7 @@ #include "libc/calls/calls.h" #include "libc/calls/weirdtypes.h" #include "libc/mem/mem.h" +#include "libc/runtime/runtime.h" #include "libc/runtime/sysconf.h" #include "libc/sysv/consts/map.h" #include "libc/sysv/consts/msync.h" diff --git a/third_party/python/pyobj.c b/third_party/python/pyobj.c index e8bbc8129..0f119402b 100644 --- a/third_party/python/pyobj.c +++ b/third_party/python/pyobj.c @@ -35,7 +35,7 @@ #include "libc/sysv/consts/o.h" #include "libc/time/time.h" #include "libc/x/x.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "third_party/getopt/getopt.h" #include "third_party/python/Include/abstract.h" #include "third_party/python/Include/bytesobject.h" diff --git a/tool/build/lib/elfwriter_zip.c b/tool/build/lib/elfwriter_zip.c index 2a7f17021..b11a2295f 100644 --- a/tool/build/lib/elfwriter_zip.c +++ b/tool/build/lib/elfwriter_zip.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/dos.h" +#include "libc/dos.internal.h" #include "libc/fmt/conv.h" #include "libc/limits.h" #include "libc/log/check.h" @@ -29,7 +29,7 @@ #include "libc/time/struct/tm.h" #include "libc/x/x.h" #include "libc/x/xasprintf.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "net/http/http.h" #include "third_party/zlib/zlib.h" #include "tool/build/lib/elfwriter.h" diff --git a/tool/build/lib/loader.c b/tool/build/lib/loader.c index 2f6e643b0..2282cc62b 100644 --- a/tool/build/lib/loader.c +++ b/tool/build/lib/loader.c @@ -16,6 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ +#include "tool/build/lib/loader.h" #include "libc/calls/calls.h" #include "libc/calls/struct/stat.h" #include "libc/elf/elf.h" @@ -34,7 +35,6 @@ #include "third_party/xed/x86.h" #include "tool/build/lib/argv.h" #include "tool/build/lib/endian.h" -#include "tool/build/lib/loader.h" #include "tool/build/lib/machine.h" #include "tool/build/lib/memory.h" @@ -105,7 +105,7 @@ static void LoadBin(struct Machine *m, intptr_t base, const char *prog, .p_vaddr = base, .p_paddr = base, .p_filesz = codesize, - .p_memsz = ROUNDUP(codesize + FRAMESIZE, BIGPAGESIZE), + .p_memsz = ROUNDUP(codesize + FRAMESIZE, 0x200000), .p_align = PAGESIZE, }; LoadElfLoadSegment(m, code, codesize, &phdr); diff --git a/tool/build/pledge.c b/tool/build/pledge.c index fa24f16ae..32756dda7 100644 --- a/tool/build/pledge.c +++ b/tool/build/pledge.c @@ -23,7 +23,7 @@ #include "libc/calls/pledge.internal.h" #include "libc/calls/struct/rlimit.h" #include "libc/calls/struct/sched_param.h" -#include "libc/calls/struct/seccomp.h" +#include "libc/calls/struct/seccomp.internal.h" #include "libc/calls/struct/stat.h" #include "libc/calls/struct/sysinfo.h" #include "libc/calls/syscall-sysv.internal.h" @@ -373,24 +373,6 @@ int UnveilIfExists(const char *path, const char *perm) { return -1; } -void MakeProcessNice(void) { - if (!g_nice) return; - if (setpriority(PRIO_PROCESS, 0, 19) == -1) { - kprintf("error: setpriority(PRIO_PROCESS, 0, 19) failed: %m\n"); - exit(23); - } - if (ioprio_set(IOPRIO_WHO_PROCESS, 0, - IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0)) == -1) { - kprintf("error: ioprio_set() failed: %m\n"); - exit(23); - } - struct sched_param p = {sched_get_priority_min(SCHED_IDLE)}; - if (sched_setscheduler(0, SCHED_IDLE, &p) == -1) { - kprintf("error: sched_setscheduler(SCHED_IDLE) failed: %m\n"); - exit(23); - } -} - void ApplyFilesystemPolicy(unsigned long ipromises) { const char *p; diff --git a/tool/build/zipbase.c b/tool/build/zipbase.c index c562a8b6e..a7d63d82a 100644 --- a/tool/build/zipbase.c +++ b/tool/build/zipbase.c @@ -16,7 +16,7 @@ #include "libc/sysv/consts/map.h" #include "libc/sysv/consts/o.h" #include "libc/sysv/consts/prot.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" int main(int argc, char *argv[]) { diff --git a/tool/build/zipobj.c b/tool/build/zipobj.c index 0a0d880f2..d55e90ab4 100644 --- a/tool/build/zipobj.c +++ b/tool/build/zipobj.c @@ -36,7 +36,7 @@ #include "libc/sysv/consts/s.h" #include "libc/time/time.h" #include "libc/x/x.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "third_party/getopt/getopt.h" #include "tool/build/lib/elfwriter.h" #include "tool/build/lib/stripcomponents.h" diff --git a/tool/decode/lib/zipnames.c b/tool/decode/lib/zipnames.c index 39f028f7d..5df403c1b 100644 --- a/tool/decode/lib/zipnames.c +++ b/tool/decode/lib/zipnames.c @@ -17,7 +17,7 @@ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/nt/enum/fileflagandattributes.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "tool/decode/lib/zipnames.h" const struct IdName kZipCompressionNames[] = { diff --git a/tool/decode/scrubdox.c b/tool/decode/scrubdox.c index 3f1a1c12a..bb5256e2b 100644 --- a/tool/decode/scrubdox.c +++ b/tool/decode/scrubdox.c @@ -70,10 +70,10 @@ ├────────────┼─────────────┼────────────────────────────────┼────────────┤ │ [ ? ] │ About │ this page │ │ └────────────┴─────────────┴────────────────────────────────┴────────────┘ */ -#include "libc/log/log.h" #include "libc/macros.internal.h" #include "libc/mem/gc.h" #include "libc/mem/mem.h" +#include "libc/runtime/runtime.h" #include "libc/stdio/stdio.h" #include "libc/str/str.h" #include "libc/str/strwidth.h" diff --git a/tool/decode/zip.c b/tool/decode/zip.c index 2e28fcfaa..35cbe9d77 100644 --- a/tool/decode/zip.c +++ b/tool/decode/zip.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "libc/calls/calls.h" #include "libc/calls/struct/stat.h" #include "libc/fmt/conv.h" diff --git a/tool/decode/zip2.c b/tool/decode/zip2.c index c35c8c05d..7a247ced9 100644 --- a/tool/decode/zip2.c +++ b/tool/decode/zip2.c @@ -30,7 +30,7 @@ #include "libc/sysv/consts/prot.h" #include "libc/x/xasprintf.h" #include "libc/x/xiso8601.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "tool/decode/lib/asmcodegen.h" #include "tool/decode/lib/disassemblehex.h" #include "tool/decode/lib/zipnames.h" diff --git a/tool/emacs/c.lang b/tool/emacs/c.lang index 0177782db..cdaef059c 100644 --- a/tool/emacs/c.lang +++ b/tool/emacs/c.lang @@ -1773,12 +1773,9 @@ Keywords={ "__SAUCE__", "PAGESIZE", "FRAMESIZE", -"BIGPAGESIZE", -"STACKSIZE", "ARG_MAX", "PATH_MAX", "BUFSIZ", -"CACHELINE", "CHAR_BIT", "NAME_MAX", "NSIG", diff --git a/tool/emacs/cosmo-cpp-constants.el b/tool/emacs/cosmo-cpp-constants.el index a13576eda..b4d3da5b1 100644 --- a/tool/emacs/cosmo-cpp-constants.el +++ b/tool/emacs/cosmo-cpp-constants.el @@ -177,14 +177,12 @@ (defconst cosmo-cpp-constants-cosmopolitan '("__SAUCE__" "PAGESIZE" - "GUARDSIZE" + "APE_STACKSIZE" + "APE_GUARDSIZE" "FRAMESIZE" - "BIGPAGESIZE" - "STACKSIZE" "ARG_MAX" "PATH_MAX" "BUFSIZ" - "CACHELINE" "CHAR_BIT" "NAME_MAX" "NSIG" diff --git a/tool/net/ljson.c b/tool/net/ljson.c index cecefebb2..eeb017ae7 100644 --- a/tool/net/ljson.c +++ b/tool/net/ljson.c @@ -98,7 +98,7 @@ static struct DecodeJson Parse(struct lua_State *L, const char *p, if (UNLIKELY(!depth)) { return (struct DecodeJson){-1, "maximum depth exceeded"}; } - if (UNLIKELY(!HaveStackMemory(GUARDSIZE))) { + if (UNLIKELY(!HaveStackMemory(APE_GUARDSIZE))) { return (struct DecodeJson){-1, "out of stack"}; } for (a = p, d = +1; p < e;) { diff --git a/tool/net/redbean.c b/tool/net/redbean.c index 71edb1655..a07e2b023 100644 --- a/tool/net/redbean.c +++ b/tool/net/redbean.c @@ -34,7 +34,7 @@ #include "libc/dce.h" #include "libc/dns/dns.h" #include "libc/dns/hoststxt.h" -#include "libc/dos.h" +#include "libc/dos.internal.h" #include "libc/errno.h" #include "libc/fmt/conv.h" #include "libc/fmt/itoa.h" @@ -104,7 +104,7 @@ #include "libc/thread/tls.h" #include "libc/x/x.h" #include "libc/x/xasprintf.h" -#include "libc/zip.h" +#include "libc/zip.internal.h" #include "net/http/escape.h" #include "net/http/http.h" #include "net/http/ip.h" diff --git a/tool/net/sandbox.h b/tool/net/sandbox.h index 0fb1efb65..b7ab746a7 100644 --- a/tool/net/sandbox.h +++ b/tool/net/sandbox.h @@ -1,8 +1,8 @@ #ifndef COSMOPOLITAN_TOOL_NET_SANDBOX_H_ #define COSMOPOLITAN_TOOL_NET_SANDBOX_H_ -#include "libc/calls/struct/bpf.h" -#include "libc/calls/struct/filter.h" -#include "libc/calls/struct/seccomp.h" +#include "libc/calls/struct/bpf.internal.h" +#include "libc/calls/struct/filter.internal.h" +#include "libc/calls/struct/seccomp.internal.h" #include "libc/sysv/consts/audit.h" // clang-format off diff --git a/tool/viz/cpuid.c b/tool/viz/cpuid.c index ed02f717f..a59bc205d 100644 --- a/tool/viz/cpuid.c +++ b/tool/viz/cpuid.c @@ -19,13 +19,13 @@ #include "libc/intrin/bits.h" #include "libc/intrin/kprintf.h" #include "libc/log/color.internal.h" -#include "libc/log/log.h" #include "libc/mem/gc.h" #include "libc/nexgen32e/cpuid4.internal.h" #include "libc/nexgen32e/nexgen32e.h" #include "libc/nexgen32e/rdtscp.h" #include "libc/nexgen32e/x86feature.h" #include "libc/nexgen32e/x86info.h" +#include "libc/runtime/runtime.h" #include "libc/stdio/stdio.h" #include "libc/time/time.h" #include "libc/x/xasprintf.h" diff --git a/tool/viz/life.c b/tool/viz/life.c index f68b27ff4..d5e7fa240 100644 --- a/tool/viz/life.c +++ b/tool/viz/life.c @@ -481,17 +481,17 @@ static void *NewBoard(size_t *out_size) { char *p; size_t s, n, k; s = (byn * bxn) >> 3; - k = GUARDSIZE + ROUNDUP(s, GUARDSIZE); - n = ROUNDUP(k + GUARDSIZE, FRAMESIZE); + k = APE_GUARDSIZE + ROUNDUP(s, APE_GUARDSIZE); + n = ROUNDUP(k + APE_GUARDSIZE, FRAMESIZE); p = _mapanon(n); - mprotect(p, GUARDSIZE, 0); + mprotect(p, APE_GUARDSIZE, 0); mprotect(p + k, n - k, 0); if (out_size) *out_size = n; - return p + GUARDSIZE; + return p + APE_GUARDSIZE; } static void FreeBoard(void *p, size_t n) { - munmap((char *)p - GUARDSIZE, n); + munmap((char *)p - APE_GUARDSIZE, n); } static void AllocateBoardsWithHardwareAcceleratedMemorySafety(void) { diff --git a/tool/viz/ntmaster.c b/tool/viz/ntmaster.c index 20c7f748b..2761448bf 100644 --- a/tool/viz/ntmaster.c +++ b/tool/viz/ntmaster.c @@ -16,9 +16,9 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/log/log.h" #include "libc/macros.internal.h" #include "libc/mem/mem.h" +#include "libc/runtime/runtime.h" #include "libc/stdio/stdio.h" #include "libc/str/str.h" #include "libc/x/xgetline.h"