From 40eb3b9d5d7df65181c0b229282120443cdbec64 Mon Sep 17 00:00:00 2001 From: Justine Tunney Date: Sat, 1 Jul 2023 05:10:12 -0700 Subject: [PATCH] Fully support OpenBSD 7.3 This change (1) upgrades to OpenBSD's newer kernel ABIs, and (2) modifies APE to have a read-only data segment. Doing this required creating APE Loader v1.1, which is backwards and forwards compatible with the previous version. If you've run the following commands in the past to install your APE Loader systemwide, then you need to run them again. Ad-hoc installations shouldn't be impacted. It's also recommended that APE binaries be remade after upgrading, since they embed old versions of the APE Loader. ape/apeuninstall.sh ape/apeinstall.sh This change does more than just fix OpenBSD. The new loader is smarter and more reliable. We're now able create much tinier ELF and Mach-O data structures than we could before. Both APE Loader and execvpe() will now normalize ambiguous argv[0] resolution the same way as the UNIX shell. Badness with TLS linkage has been solved. Fixes #826 --- README.md | 3 +- ape/ape-m1.c | 19 +- ape/ape.S | 104 +++-- ape/ape.lds | 292 +++++++------- ape/ape.mk | 7 +- ape/apeuninstall.sh | 23 +- ape/loader-elf.S | 146 +++---- ape/loader-macho.S | 162 ++++---- ape/loader-macho.lds | 42 -- ape/loader.c | 625 +++++++++++++----------------- ape/loader.h | 20 - ape/loader.lds | 22 +- build/bootstrap/ape.elf | Bin 4224 -> 7169 bytes build/bootstrap/ape.macho | Bin 4096 -> 6815 bytes build/bootstrap/cocmd.com | Bin 73728 -> 115432 bytes build/bootstrap/compile.com | Bin 114688 -> 127792 bytes build/definitions.mk | 7 +- libc/calls/calls.mk | 1 + libc/calls/copy_file_range.c | 2 +- libc/calls/execlp.c | 20 +- libc/calls/execve-sysv.c | 6 +- libc/calls/execvpe.c | 31 +- libc/calls/lseek.c | 9 +- libc/crt/crt.S | 24 +- libc/sysv/calls/__sys_mmap.S | 2 +- libc/sysv/calls/sys_ftruncate.S | 2 +- libc/sysv/calls/sys_lseek.S | 2 +- libc/sysv/calls/sys_pread.S | 2 +- libc/sysv/calls/sys_preadv.S | 2 +- libc/sysv/calls/sys_pwrite.S | 2 +- libc/sysv/calls/sys_pwritev.S | 2 +- libc/sysv/calls/sys_truncate.S | 2 +- libc/sysv/consts.sh | 16 +- libc/sysv/consts/__NR_ftruncate.S | 2 +- libc/sysv/consts/__NR_lseek.S | 2 +- libc/sysv/consts/__NR_mmap.S | 2 +- libc/sysv/consts/__NR_pread.S | 2 +- libc/sysv/consts/__NR_preadv.S | 2 +- libc/sysv/consts/__NR_pwrite.S | 2 +- libc/sysv/consts/__NR_pwritev.S | 2 +- libc/sysv/consts/__NR_truncate.S | 2 +- libc/sysv/macros.internal.h | 2 + libc/sysv/syscalls.sh | 18 +- libc/testlib/showerror.c | 7 +- libc/testlib/testmain.c | 3 + test/libc/calls/write_test.c | 3 + test/libc/release/test.mk | 24 ++ tool/emacs/cosmo-c-builtins.el | 5 +- 48 files changed, 772 insertions(+), 903 deletions(-) delete mode 100644 ape/loader-macho.lds delete mode 100644 ape/loader.h diff --git a/README.md b/README.md index 38cc79483..8a9ee2a18 100644 --- a/README.md +++ b/README.md @@ -264,6 +264,7 @@ printf 'main() { printf("hello world\\n"); }\n' >hello.c gcc -g -Os -static -nostdlib -nostdinc -fno-pie -no-pie -mno-red-zone \ -fno-omit-frame-pointer -pg -mnop-mcount -mno-tls-direct-seg-refs -gdwarf-4 \ -o hello.com.dbg hello.c -fuse-ld=bfd -Wl,-T,ape.lds -Wl,--gc-sections \ + -Wl,-z,common-page-size=0x1000 -Wl,-z,max-page-size=0x1000 \ -include cosmopolitan.h crt.o ape-no-modify-self.o cosmopolitan.a objcopy -S -O binary hello.com.dbg hello.com ``` @@ -427,7 +428,7 @@ server. You're welcome to join us! | Linux | 2.6.18 | 2007 | | Windows | 8 [1] | 2012 | | Mac OS X | 15.6 | 2018 | -| OpenBSD | 6.4 | 2018 | +| OpenBSD | 7 | 2021 | | FreeBSD | 13 | 2020 | | NetBSD | 9.2 | 2021 | diff --git a/ape/ape-m1.c b/ape/ape-m1.c index 7319eef38..bf615566c 100644 --- a/ape/ape-m1.c +++ b/ape/ape-m1.c @@ -59,7 +59,7 @@ struct Syslib { #define TROUBLESHOOT 0 -#define ELFCLASS64 2 +#define ELFCLASS32 1 #define ELFDATA2LSB 1 #define EM_AARCH64 183 #define ET_EXEC 2 @@ -431,7 +431,7 @@ __attribute__((__noreturn__)) static void Spawn(const char *exe, int fd, codesize = 0; for (i = e->e_phnum; i--;) { if (p[i].p_type == PT_DYNAMIC) { - Pexit(exe, 0, "not a real executable"); + Pexit(exe, 0, "not a static executable"); } if (p[i].p_type != PT_LOAD) { continue; @@ -525,14 +525,15 @@ __attribute__((__noreturn__)) static void Spawn(const char *exe, int fd, static void TryElf(struct ApeLoader *M, const char *exe, int fd, long *sp, long *bp, char *execfn) { - unsigned long n; - if (Read32(M->ehdr.buf) == Read32("\177ELF") && - M->ehdr.ehdr.e_type == ET_EXEC && M->ehdr.ehdr.e_machine == EM_AARCH64 && - M->ehdr.ehdr.e_ident[EI_CLASS] == ELFCLASS64 && - M->ehdr.ehdr.e_ident[EI_DATA] == ELFDATA2LSB && - (n = M->ehdr.ehdr.e_phnum * sizeof(M->phdr.phdr)) <= + unsigned size; + if (Read32(M->ehdr.buf) == Read32("\177ELF") && // + M->ehdr.ehdr.e_type == ET_EXEC && // + M->ehdr.ehdr.e_machine == EM_AARCH64 && // + M->ehdr.ehdr.e_ident[EI_CLASS] != ELFCLASS32 && // + M->ehdr.ehdr.e_phentsize >= sizeof(M->phdr.phdr) && // + (size = (unsigned)M->ehdr.ehdr.e_phnum * M->ehdr.ehdr.e_phentsize) <= sizeof(M->phdr.buf) && - pread(fd, M->phdr.buf, n, M->ehdr.ehdr.e_phoff) == n) { + pread(fd, M->phdr.buf, size, M->ehdr.ehdr.e_phoff) == size) { long auxv[][2] = { {AT_PHDR, (long)&M->phdr.phdr}, // {AT_PHENT, M->ehdr.ehdr.e_phentsize}, // diff --git a/ape/ape.S b/ape/ape.S index 10613668c..ced18bff4 100644 --- a/ape/ape.S +++ b/ape/ape.S @@ -43,6 +43,7 @@ #include "libc/nt/pedef.internal.h" #include "libc/runtime/pc.internal.h" #include "ape/ape.internal.h" +#include "libc/thread/tls.h" #include "libc/sysv/consts/prot.h" #define USE_SYMBOL_HACK 1 @@ -599,7 +600,7 @@ apesh: .ascii "\n@\n#'\"\n" // sixth edition shebang // There isn't a one-size-fits-all approach for this, thus we // present two choices. .ascii "o=\"$(command -v \"$0\")\"\n" -// Try to use a system-wide APE loader. +// Try to use system-wide APE loader. .ascii "[ x\"$1\" != x--assimilate ] && " .ascii "type ape >/dev/null 2>&1 && " .ascii "exec ape \"$o\" \"$@\"\n" @@ -609,7 +610,7 @@ apesh: .ascii "\n@\n#'\"\n" // sixth edition shebang // extract the loader into a temp folder, and use it to // load the APE without modifying it. .ascii "[ x\"$1\" != x--assimilate ] && {\n" - .ascii "t=\"${TMPDIR:-${HOME:-.}}/.ape\"\n" + .ascii "t=\"${TMPDIR:-${HOME:-.}}/.ape-1.1\"\n" .ascii "[ -x \"$t\" ] || {\n" .ascii "mkdir -p \"${t%/*}\" &&\n" .ascii "dd if=\"$o\" of=\"$t.$$\" skip=" @@ -622,7 +623,7 @@ apesh: .ascii "\n@\n#'\"\n" // sixth edition shebang .ascii "dd if=\"$t.$$\"" .ascii " of=\"$t.$$\"" .ascii " skip=6" - .ascii " count=10" + .ascii " count=6" .ascii " bs=64" .ascii " conv=notrunc" .ascii " 2>/dev/null\n" @@ -746,6 +747,15 @@ ape_loader_end: .long PT_LOAD .long PF_R|PF_X + .stub ape_cod_offset,quad + .stub ape_cod_vaddr,quad + .stub ape_cod_paddr,quad + .stub ape_cod_filesz,quad + .stub ape_cod_memsz,quad + .stub ape_cod_align,quad + + .long PT_LOAD + .long PF_R .stub ape_rom_offset,quad .stub ape_rom_vaddr,quad .stub ape_rom_paddr,quad @@ -868,8 +878,8 @@ ape_macho: .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 6 // number of load commands + .long 70f-10f // size of all load commands .long MAC_NOUNDEFS // flags .long 0 // reserved 10: .long MAC_LC_SEGMENT_64 @@ -880,26 +890,27 @@ ape_macho: 20: .long MAC_LC_SEGMENT_64 .long 30f-20b .ascin "__TEXT",16 + .stub ape_cod_vaddr,quad + .stub ape_cod_memsz,quad + .stub ape_cod_offset,quad + .stub ape_cod_filesz,quad + .long PROT_EXEC|PROT_READ|PROT_WRITE // maxprot + .long PROT_EXEC|PROT_READ // initprot + .long 0 // segment section count + .long 0 // flags +30: .long MAC_LC_SEGMENT_64 + .long 40f-30b + .ascin "__RODATA",16 .stub ape_rom_vaddr,quad .stub ape_rom_memsz,quad .stub ape_rom_offset,quad .stub ape_rom_filesz,quad .long PROT_EXEC|PROT_READ|PROT_WRITE // maxprot - .long PROT_EXEC|PROT_READ // initprot - .long 1 // segment section count + .long PROT_READ // initprot + .long 0 // segment section count .long 0 // flags -210: .ascin "__text",16 // section name (.text) - .ascin "__TEXT",16 - .stub ape_text_vaddr,quad - .stub ape_text_memsz,quad - .stub ape_text_offset,long - .long 12 // align 2**12 = 4096 - .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 +40: .long MAC_LC_SEGMENT_64 + .long 50f-40b .ascin "__DATA",16 .stub ape_ram_vaddr,quad .stub ape_ram_memsz,quad @@ -907,39 +918,19 @@ ape_macho: .stub ape_ram_filesz,quad .long PROT_EXEC|PROT_READ|PROT_WRITE // maxprot .long PROT_READ|PROT_WRITE // initprot - .long 2 // segment section count + .long 0 // segment section count .long 0 // flags -310: .ascin "__data",16 // section name (.data) - .ascin "__DATA",16 - .stub ape_data_vaddr,quad - .stub ape_data_memsz,quad - .stub ape_data_offset,long - .long 12 // align 2**12 = 4096 - .long 0 // reloc table offset - .long 0 // relocation count - .long 0 // section type & attributes - .long 0,0,0 // reserved -320: .ascin "__bss",16 // section name (.bss) - .ascin "__DATA",16 - .stub ape_bss_vaddr,quad // virtual address - .stub ape_bss_memsz,quad // memory size - .long 0 // file 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 +50: .long MAC_LC_UUID + .long 60f-50b .stub ape_uuid1,quad .stub ape_uuid2,quad -50: .long MAC_LC_UNIXTHREAD - .long 60f-50b // cmdsize +60: .long MAC_LC_UNIXTHREAD + .long 70f-60b // cmdsize .long MAC_THREAD_NEXGEN32E // flavaflav - .long (520f-510f)/4 // count -510: .quad 0 // rax - .quad IMAGE_BASE_VIRTUAL // rbx - .quad _HOSTXNU // rcx + .long (620f-610f)/4 // count +610: .quad 0 // rax + .quad 0 // rbx + .quad 0 // rcx .quad 0 // rdx .quad 0 // rdi .quad 0 // rsi @@ -953,13 +944,13 @@ ape_macho: .quad 0 // r13 .quad 0 // r14 .quad 0 // r15 - .quad _start // rip + .quad _apple // rip .quad 0 // rflags .quad 0 // cs .quad 0 // fs .quad 0 // gs -520: -60: +620: +70: .endobj ape_macho,globl,hidden .previous /* .macho */ @@ -1785,7 +1776,6 @@ kernel: movabs $ape_stack_vaddr,%rsp .ldsvar v_ape_realbytes .ldsvar v_ape_highsectors .ldsvar ape_idata_ro - .ldsvar ape_pad_rodata .ldsvar ape_piro .ldsvar ape_piro_end .type ape_macho_end,@object @@ -1829,12 +1819,6 @@ ape_pad_text: ape_pad_privileged: .previous - .section .ape.pad.rodata,"a",@progbits - .type ape_pad_rodata,@object - .hidden ape_pad_rodata -ape_pad_rodata: - .previous - .section .ape.pad.data,"a",@progbits .type ape_pad_data,@object .hidden ape_pad_data @@ -1877,5 +1861,9 @@ __bss_start: __bss_end: .previous + .section .fstls,"awT",@nobits + .align TLS_ALIGNMENT + .previous + .end  \ No newline at end of file diff --git a/ape/ape.lds b/ape/ape.lds index dd1ff57cc..a5f5a4e4d 100644 --- a/ape/ape.lds +++ b/ape/ape.lds @@ -206,10 +206,10 @@ ENTRY(_start) PHDRS { Head PT_LOAD FLAGS(PF_X|PF_R); - Rom PT_LOAD FLAGS(PF_X|PF_R); - Ram PT_LOAD FLAGS(PF_W|PF_R); + Cod PT_LOAD FLAGS(PF_X|PF_R); + Rom PT_LOAD FLAGS(PF_R); Tls PT_TLS FLAGS(PF_W|PF_R); - Bss PT_LOAD FLAGS(PF_W|PF_R); + Ram PT_LOAD FLAGS(PF_W|PF_R); stack PT_GNU_STACK FLAGS(PF_W|PF_R); } @@ -221,7 +221,7 @@ SECTIONS { /*BEGIN: bsd addressability guarantee */ .head SEGMENT_START("text-segment", IMAGE_BASE_VIRTUAL) + SKEW : AT(IMAGE_BASE_REAL) { - HIDDEN(__executable_start = .); + __executable_start = .; /* Real Mode */ KEEP(*(.head)) @@ -230,9 +230,9 @@ SECTIONS { /* Executable & Linkable Format */ . = ALIGN(__SIZEOF_POINTER__); - HIDDEN(ape_phdrs = .); + ape_phdrs = .; KEEP(*(.elf.phdrs)) - HIDDEN(ape_phdrs_end = .); + ape_phdrs_end = .; KEEP(*(.emushprologue)) KEEP(*(.emush)) @@ -240,25 +240,29 @@ SECTIONS { /* OpenBSD */ . = ALIGN(__SIZEOF_POINTER__); - HIDDEN(ape_note = .); + ape_note = .; KEEP(*(.note.openbsd.ident)) KEEP(*(.note.netbsd.ident)) - HIDDEN(ape_note_end = .); + ape_note_end = .; /* Portable Executable */ KEEP(*(.pe.header)) - HIDDEN(ape_pe_sections = .); + ape_pe_sections = .; KEEP(*(.pe.sections)) - HIDDEN(ape_pe_sections_end = .); + ape_pe_sections_end = .; /* Mach-O */ KEEP(*(.macho)) . = ALIGN(__SIZEOF_POINTER__); - HIDDEN(ape_macho_end = .); + ape_macho_end = .; + + /* APE loader */ + KEEP(*(.ape.loader)) + . = ALIGN(CODE_GRANULE); KEEP(*(.ape.pad.head)) . = ALIGN(SupportsWindows() || SupportsMetal() ? CONSTANT(COMMONPAGESIZE) : 16); - HIDDEN(_ehead = .); + _ehead = .; } :Head /*BEGIN: nt addressability guarantee */ @@ -268,10 +272,7 @@ SECTIONS { /* Code that needs to be addressable in Real Mode */ *(.text.real) KEEP(*(SORT_BY_NAME(.sort.text.real.*))) - /* Code we want earlier in the binary w/o modifications */ - KEEP(*(.ape.loader)) - . = ALIGN(CODE_GRANULE); - HIDDEN(_ereal = .); + _ereal = .; /*END: realmode addressability guarantee */ /*BEGIN: morphable code */ . += CODE_GRANULE; @@ -318,9 +319,14 @@ SECTIONS { __privileged_end = .; . += . > 0 ? CODE_GRANULE : 0; + KEEP(*(.ape.pad.text)) + . = ALIGN(CONSTANT(COMMONPAGESIZE)); +/*END: Read Only Data (only needed for initialization) */ + } :Cod + /*BEGIN: Read Only Data */ - KEEP(*(.ape.pad.rodata)); + .rodata . : { KEEP(*(.rodata.pytab.0)); KEEP(*(.rodata.pytab.1)); KEEP(*(.rodata.pytab.2)); @@ -329,10 +335,6 @@ SECTIONS { *(.ubsan.types) *(.ubsan.data) - /* Unit Test & Fixture Registry */ - -/*BEGIN: Read only data that needn't be mapped after initialization */ - /* Legal Notices */ #if !defined(IM_FEELING_NAUGHTY) || defined(EMBED_NOTICES) KEEP(*(.commentprologue)) @@ -340,26 +342,28 @@ SECTIONS { KEEP(*(.commentepilogue)) #endif +/*BEGIN: read-only data that's only needed for initialization */ + /* Windows DLL Import Directory */ KEEP(*(.idata.ro)); KEEP(*(SORT_BY_NAME(.idata.ro.*))) . = ALIGN(__SIZEOF_POINTER__); - PROVIDE_HIDDEN(__init_array_start = .); + __init_array_start = .; KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP(*(.ctors)) KEEP(*(.init_array)) KEEP(*(.preinit_array)) - PROVIDE_HIDDEN(__init_array_end = .); + __init_array_end = .; . = ALIGN(__SIZEOF_POINTER__); - PROVIDE_HIDDEN(__fini_array_start = .); + __fini_array_start = .; KEEP(*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP(*(.fini_array)) KEEP(*(.dtors)) - PROVIDE_HIDDEN(__fini_array_end = .); + __fini_array_end = .; /* Encoded Data Structures w/ Linear Initialization Order */ KEEP(*(.initroprologue)) @@ -367,40 +371,39 @@ SECTIONS { KEEP(*(.initroepilogue)) KEEP(*(SORT_BY_NAME(.sort.rodata.*))) - KEEP(*(.ape.pad.text)) - . = ALIGN(CONSTANT(COMMONPAGESIZE)); - HIDDEN(_etext = .); - PROVIDE_HIDDEN(etext = .); -/*END: Read Only Data (only needed for initialization) */ - } :Rom +/*END: read-only data that's only needed for initialization */ - . = DATA_SEGMENT_ALIGN(CONSTANT(MAXPAGESIZE), CONSTANT(COMMONPAGESIZE)); + } :Rom /* initialization image for thread-local storage, this is copied */ /* out to actual TLS areas at runtime, so just make it read-only */ - .tdata : { + .tdata . : { _tdata_start = .; *(SORT_BY_ALIGNMENT(.tdata)) *(SORT_BY_ALIGNMENT(.tdata.*)) _tdata_end = .; + KEEP(*(.ape.pad.rodata)) . = ALIGN(CONSTANT(COMMONPAGESIZE)); + _etext = .; + PROVIDE(etext = .); } :Tls :Rom /*END: Read Only Data */ + . = DATA_SEGMENT_ALIGN(CONSTANT(MAXPAGESIZE), CONSTANT(COMMONPAGESIZE)); + . = DATA_SEGMENT_RELRO_END(0, .); + /* this only tells the linker about the layout of uninitialized */ /* TLS data, and does not advance the linker's location counter */ .tbss : { _tbss_start = .; *(SORT_BY_ALIGNMENT(.tbss)) *(SORT_BY_ALIGNMENT(.tbss.*)) - . = ALIGN(TLS_ALIGNMENT); + KEEP(*(.fstls)) /* the %fs register is based on this location */ _tbss_end = .; } :Tls - . = DATA_SEGMENT_RELRO_END(0, .); - - .data : { + .data . : { /*BEGIN: Read/Write Data */ KEEP(*(SORT_BY_NAME(.piro.data.sort.iat.*))) /*BEGIN: NT FORK COPYING */ @@ -427,23 +430,22 @@ SECTIONS { KEEP(*(.piro.pad.data)) KEEP(*(.dataepilogue)) /*END: NT FORK COPYING */ - HIDDEN(_edata = .); - PROVIDE_HIDDEN(edata = .); - HIDDEN(_ezip = .); /* <-- very deprecated */ - . = ALIGN(CONSTANT(COMMONPAGESIZE)); + _edata = .; + PROVIDE(edata = .); + _ezip = .; /* <-- very deprecated */ } :Ram /*END: file content that's loaded by o/s */ /*END: file content */ /*BEGIN: bss memory that's addressable */ - .bss ALIGN(64) : { + .bss : { /*BEGIN: NT FORK COPYING */ KEEP(*(.bssprologue)) KEEP(*(SORT_BY_NAME(.piro.bss.init.*))) *(.piro.bss) KEEP(*(SORT_BY_NAME(.piro.bss.sort.*))) - HIDDEN(__piro_end = .); + __piro_end = .; . += . > 0 ? CODE_GRANULE : 0; /*END: Post-Initialization Read-Only */ @@ -455,11 +457,13 @@ SECTIONS { KEEP(*(SORT_BY_NAME(.sort.bss.*))) KEEP(*(.bssepilogue)) + + . = ALIGN(64); + /*END: NT FORK COPYING */ - . = ALIGN(CONSTANT(COMMONPAGESIZE)); - HIDDEN(_end = .); - PROVIDE_HIDDEN(end = .); - } :Bss + _end = .; + PROVIDE(end = .); + } :Ram . = DATA_SEGMENT_END(.); @@ -527,67 +531,60 @@ PFSTUB4(ape_elf_phnum, (ape_phdrs_end - ape_phdrs) / 56); PFSTUB4(ape_elf_shnum, 0); PFSTUB4(ape_elf_shstrndx, 0); -HIDDEN(_tls_size = _tbss_end - _tdata_start); -HIDDEN(_tdata_size = _tdata_end - _tdata_start); -HIDDEN(_tbss_size = _tbss_end - _tbss_start); -HIDDEN(_tbss_offset = _tbss_start - _tdata_start); -HIDDEN(_tls_content = (_tdata_end - _tdata_start) + (_tbss_end - _tbss_start)); -HIDDEN(_tls_align = 1); +_tls_size = _tbss_end - _tdata_start; +_tdata_size = _tdata_end - _tdata_start; +_tbss_size = _tbss_end - _tbss_start; +_tbss_offset = _tbss_start - _tdata_start; +_tls_content = (_tdata_end - _tdata_start) + (_tbss_end - _tbss_start); +_tls_align = 1; -HIDDEN(ape_rom_offset = 0); -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 = CONSTANT(COMMONPAGESIZE)); -HIDDEN(ape_rom_rva = RVA(ape_rom_vaddr)); +ape_cod_offset = 0; +ape_cod_vaddr = ADDR(.head); +ape_cod_paddr = LOADADDR(.head); +ape_cod_filesz = SIZEOF(.head) + SIZEOF(.text); +ape_cod_memsz = ape_cod_filesz; +ape_cod_align = CONSTANT(COMMONPAGESIZE); +ape_cod_rva = RVA(ape_cod_vaddr); -HIDDEN(ape_ram_offset = ape_rom_offset + ape_rom_filesz); -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 = CONSTANT(COMMONPAGESIZE)); -HIDDEN(ape_ram_rva = RVA(ape_ram_vaddr)); +ape_rom_offset = ape_cod_offset + ape_cod_filesz; +ape_rom_vaddr = ADDR(.rodata); +ape_rom_paddr = LOADADDR(.rodata); +ape_rom_filesz = SIZEOF(.rodata) + SIZEOF(.tdata); +ape_rom_memsz = ape_rom_filesz; +ape_rom_align = CONSTANT(COMMONPAGESIZE); +ape_rom_rva = RVA(ape_rom_vaddr); -HIDDEN(ape_stack_pf = DEFINED(ape_stack_pf) ? ape_stack_pf : PF_R | PF_W); -HIDDEN(ape_stack_prot = _PF2PROT(ape_stack_pf)); -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 : APE_STACKSIZE); -HIDDEN(ape_stack_align = 16); +ape_ram_offset = ape_rom_offset + ape_rom_filesz; +ape_ram_vaddr = ADDR(.data); +ape_ram_paddr = LOADADDR(.data); +ape_ram_filesz = SIZEOF(.data); +ape_ram_memsz = SIZEOF(.data) + SIZEOF(.bss); +ape_ram_align = CONSTANT(COMMONPAGESIZE); +ape_ram_rva = RVA(ape_ram_vaddr); -HIDDEN(ape_note_offset = ape_rom_offset + (ape_note - ape_rom_vaddr)); -HIDDEN(ape_note_vaddr = ape_note); -HIDDEN(ape_note_paddr = ape_rom_paddr + ape_note_offset); -HIDDEN(ape_note_filesz = ape_note_end - ape_note); -HIDDEN(ape_note_memsz = ape_note_filesz); -HIDDEN(ape_note_align = __SIZEOF_POINTER__); +ape_stack_pf = DEFINED(ape_stack_pf) ? ape_stack_pf : PF_R | PF_W; +ape_stack_prot = _PF2PROT(ape_stack_pf); +ape_stack_offset = 0; +ape_stack_vaddr = DEFINED(ape_stack_vaddr) ? ape_stack_vaddr : 0x700000000000; +ape_stack_paddr = ape_ram_paddr + ape_ram_filesz; +ape_stack_filesz = 0; +ape_stack_memsz = DEFINED(ape_stack_memsz) ? ape_stack_memsz : APE_STACKSIZE; +ape_stack_align = 16; -HIDDEN(ape_text_offset = ape_rom_offset + LOADADDR(.text) - ape_rom_paddr); -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 = CONSTANT(COMMONPAGESIZE)); -HIDDEN(ape_text_rva = RVA(ape_text_vaddr)); +ape_note_offset = ape_cod_offset + (ape_note - ape_cod_vaddr); +ape_note_vaddr = ape_note; +ape_note_paddr = ape_cod_paddr + ape_note_offset; +ape_note_filesz = ape_note_end - ape_note; +ape_note_memsz = ape_note_filesz; +ape_note_align = __SIZEOF_POINTER__; -HIDDEN(ape_data_offset = ape_ram_offset + LOADADDR(.data) - ape_ram_paddr); -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 = CONSTANT(COMMONPAGESIZE)); -HIDDEN(ape_data_rva = RVA(ape_data_vaddr)); - -HIDDEN(ape_bss_offset = ape_ram_offset + LOADADDR(.bss) - ape_ram_paddr); -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 = CONSTANT(COMMONPAGESIZE)); +ape_text_offset = ape_cod_offset + LOADADDR(.text) - ape_cod_paddr; +ape_text_paddr = LOADADDR(.text); +ape_text_vaddr = ADDR(.text); +ape_text_filesz = SIZEOF(.text) + SIZEOF(.rodata) + SIZEOF(.tdata); +ape_text_memsz = ape_text_filesz; +ape_text_align = CONSTANT(COMMONPAGESIZE); +ape_text_rva = RVA(ape_text_vaddr); /* 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 */ @@ -602,17 +599,17 @@ SHSTUB2(ape_loader_dd_count, #define IDENTITY(X) X -#define APE_DECLARE_FIXED_DECIMAL(F, X) \ - HIDDEN(X##_quad = DEFINED(X) ? ((F(X) < 1000000000 ? 32 : F(X) / 1000000000 % 10 + 48) << 000 | \ - (F(X) < 100000000 ? 32 : F(X) / 100000000 % 10 + 48) << 010 | \ - (F(X) < 10000000 ? 32 : F(X) / 10000000 % 10 + 48) << 020 | \ - (F(X) < 1000000 ? 32 : F(X) / 1000000 % 10 + 48) << 030 | \ - (F(X) < 100000 ? 32 : F(X) / 100000 % 10 + 48) << 040 | \ - (F(X) < 10000 ? 32 : F(X) / 10000 % 10 + 48) << 050 | \ - (F(X) < 1000 ? 32 : F(X) / 1000 % 10 + 48) << 060 | \ - (F(X) < 100 ? 32 : F(X) / 100 % 10 + 48) << 070) : 0); \ - HIDDEN(X##_short = DEFINED(X) ? ((F(X) < 10 ? 32 : F(X) / 10 % 10 + 48) << 000 | \ - (F(X) % 10 + 48) << 010) : 0) +#define APE_DECLARE_FIXED_DECIMAL(F, X) \ + X##_quad = DEFINED(X) ? ((F(X) < 1000000000 ? 32 : F(X) / 1000000000 % 10 + 48) << 000 | \ + (F(X) < 100000000 ? 32 : F(X) / 100000000 % 10 + 48) << 010 | \ + (F(X) < 10000000 ? 32 : F(X) / 10000000 % 10 + 48) << 020 | \ + (F(X) < 1000000 ? 32 : F(X) / 1000000 % 10 + 48) << 030 | \ + (F(X) < 100000 ? 32 : F(X) / 100000 % 10 + 48) << 040 | \ + (F(X) < 10000 ? 32 : F(X) / 10000 % 10 + 48) << 050 | \ + (F(X) < 1000 ? 32 : F(X) / 1000 % 10 + 48) << 060 | \ + (F(X) < 100 ? 32 : F(X) / 100 % 10 + 48) << 070) : 0; \ + X##_short = DEFINED(X) ? ((F(X) < 10 ? 32 : F(X) / 10 % 10 + 48) << 000 | \ + (F(X) % 10 + 48) << 010) : 0 APE_DECLARE_FIXED_DECIMAL(RVA, blink_linux_aarch64); APE_DECLARE_FIXED_DECIMAL(IDENTITY, blink_linux_aarch64_size); @@ -622,13 +619,12 @@ APE_DECLARE_FIXED_DECIMAL(IDENTITY, blink_xnu_aarch64_size); #endif /* APE_IS_SHELL_SCRIPT */ #if SupportsMetal() -HIDDEN(v_ape_realsectors = - MIN(0x70000 - IMAGE_BASE_REAL, ROUNDUP(RVA(_ezip), 512)) / 512); -HIDDEN(v_ape_realbytes = v_ape_realsectors * 512); -HIDDEN(v_ape_realdwords = v_ape_realsectors * (512 / 4)); -HIDDEN(v_ape_allsectors = ROUNDUP(RVA(_ezip), 512) / 512); -HIDDEN(v_ape_allbytes = v_ape_allsectors * 512); -HIDDEN(v_ape_highsectors = MIN(0xffff, v_ape_allsectors - v_ape_realsectors)); +v_ape_realsectors = MIN(0x70000 - IMAGE_BASE_REAL, ROUNDUP(RVA(_ezip), 512)) / 512; +v_ape_realbytes = v_ape_realsectors * 512; +v_ape_realdwords = v_ape_realsectors * (512 / 4); +v_ape_allsectors = ROUNDUP(RVA(_ezip), 512) / 512; +v_ape_allbytes = v_ape_allsectors * 512; +v_ape_highsectors = MIN(0xffff, v_ape_allsectors - v_ape_realsectors); TSSDESCSTUB2(_tss, _tss, _tss_end ? _tss_end - _tss - 1 : 0); #endif @@ -650,19 +646,8 @@ TSSDESCSTUB2(_tss, _tss, _tss_end ? _tss_end - _tss - 1 : 0); KMH(ape_uuid1, X); \ XORSHIFT(ape_uuid2, X); \ KMH(ape_uuid2, X) -HIDDEN(ape_uuid1 = 88172645463325252); -HIDDEN(ape_uuid2 = 88172645463325252); -CHURN(ape_bss_align); -CHURN(ape_bss_filesz); -CHURN(ape_bss_memsz); -CHURN(ape_bss_offset); -CHURN(ape_bss_paddr); -CHURN(ape_data_filesz); -CHURN(ape_data_memsz); -CHURN(ape_data_offset); -CHURN(ape_data_paddr); -CHURN(ape_data_rva); -CHURN(ape_data_vaddr); +ape_uuid1 = 88172645463325252; +ape_uuid2 = 88172645463325252; CHURN(ape_elf_entry); CHURN(ape_elf_phnum); CHURN(ape_elf_phoff); @@ -691,7 +676,14 @@ CHURN(ape_rom_memsz); CHURN(ape_rom_offset); CHURN(ape_rom_paddr); CHURN(ape_rom_rva); -CHURN(ape_rom_vaddr); +CHURN(ape_cod_vaddr); +CHURN(ape_cod_align); +CHURN(ape_cod_filesz); +CHURN(ape_cod_memsz); +CHURN(ape_cod_offset); +CHURN(ape_cod_paddr); +CHURN(ape_cod_rva); +CHURN(ape_cod_vaddr); CHURN(ape_text_align); CHURN(ape_text_filesz); CHURN(ape_text_memsz); @@ -724,22 +716,22 @@ CHURN(WinMain); #if SupportsWindows() || SupportsMetal() #define LINK_WINDOWS (SupportsWindows() && !DEFINED(EfiMain)) PFSTUB4(ape_pe_offset, ape_pe - ape_mz); -HIDDEN(ape_pe_optsz = ape_pe_sections - (ape_pe + 24)); -HIDDEN(ape_pe_shnum = (ape_pe_sections_end - ape_pe_sections) / 40); -HIDDEN(ape_pe_base = IMAGE_BASE_VIRTUAL); -HIDDEN(ape_idata = LINK_WINDOWS ? RVA(ape_idata_iat) : 0); -HIDDEN(ape_idata_iatsize = LINK_WINDOWS ? ape_idata_iatend - ape_idata_iat : 0); -HIDDEN(ape_idata = LINK_WINDOWS ? RVA(ape_idata_idt) : 0); -HIDDEN(ape_idata_idtsize = LINK_WINDOWS ? ape_idata_idtend - ape_idata_idt : 0); -HIDDEN(v_ntversion = LINK_WINDOWS ? 6 : 1); -HIDDEN(v_ntdllchar = LINK_WINDOWS ? 288 : 0); -HIDDEN(v_ntsubversion = LINK_WINDOWS ? 6 : 5); -HIDDEN(v_ntsubsystem = (LINK_WINDOWS - ? (DEFINED(GetMessage) - ? kNtImageSubsystemWindowsGui - : kNtImageSubsystemWindowsCui) - : kNtImageSubsystemEfiApplication)); -HIDDEN(ape_pe_entry = LINK_WINDOWS ? WinMain : EfiMain); +ape_pe_optsz = ape_pe_sections - (ape_pe + 24); +ape_pe_shnum = (ape_pe_sections_end - ape_pe_sections) / 40; +ape_pe_base = IMAGE_BASE_VIRTUAL; +ape_idata = LINK_WINDOWS ? RVA(ape_idata_iat) : 0; +ape_idata_iatsize = LINK_WINDOWS ? ape_idata_iatend - ape_idata_iat : 0; +ape_idata = LINK_WINDOWS ? RVA(ape_idata_idt) : 0; +ape_idata_idtsize = LINK_WINDOWS ? ape_idata_idtend - ape_idata_idt : 0; +v_ntversion = LINK_WINDOWS ? 6 : 1; +v_ntdllchar = LINK_WINDOWS ? 288 : 0; +v_ntsubversion = LINK_WINDOWS ? 6 : 5; +v_ntsubsystem = (LINK_WINDOWS + ? (DEFINED(GetMessage) + ? kNtImageSubsystemWindowsGui + : kNtImageSubsystemWindowsCui) + : kNtImageSubsystemEfiApplication); +ape_pe_entry = LINK_WINDOWS ? WinMain : EfiMain; #endif #if SupportsXnu() diff --git a/ape/ape.mk b/ape/ape.mk index f92a695a6..60c52d8b2 100644 --- a/ape/ape.mk +++ b/ape/ape.mk @@ -86,7 +86,6 @@ APE_LOADER_FLAGS = \ -Os \ -ffreestanding \ -mgeneral-regs-only \ - -mno-red-zone \ -fno-ident \ -fno-gnu-unique \ -c \ @@ -178,14 +177,14 @@ o/$(MODE)/ape/ape-copy-self.o: \ $(OUTPUT_OPTION) \ -DAPE_NO_MODIFY_SELF $< -o/$(MODE)/ape/loader.o: ape/loader.c ape/loader.h +o/$(MODE)/ape/loader.o: ape/loader.c @$(COMPILE) -AOBJECTIFY.c $(CC) -DSUPPORT_VECTOR=0b01111001 -g $(APE_LOADER_FLAGS) o/$(MODE)/ape/loader-gcc.asm: ape/loader.c @$(COMPILE) -AOBJECTIFY.c $(CC) -DSUPPORT_VECTOR=0b01111001 -S -g0 $(APE_LOADER_FLAGS) o/$(MODE)/ape/loader-clang.asm: ape/loader.c @$(COMPILE) -AOBJECTIFY.c $(CLANG) -DSUPPORT_VECTOR=0b01111001 -S -g0 $(APE_LOADER_FLAGS) -o/$(MODE)/ape/loader-xnu.o: ape/loader.c ape/loader.h +o/$(MODE)/ape/loader-xnu.o: ape/loader.c @$(COMPILE) -AOBJECTIFY.c $(CC) -DSUPPORT_VECTOR=0b00001000 -g $(APE_LOADER_FLAGS) o/$(MODE)/ape/loader-xnu-gcc.asm: ape/loader.c @$(COMPILE) -AOBJECTIFY.c $(CC) -DSUPPORT_VECTOR=0b00001000 -S -g0 $(APE_LOADER_FLAGS) @@ -212,7 +211,7 @@ o/$(MODE)/ape/ape.macho.dbg: private \ o/$(MODE)/ape/ape.macho.dbg: \ o/$(MODE)/ape/loader-xnu.o \ o/$(MODE)/ape/loader-macho.o \ - ape/loader-macho.lds + ape/loader.lds @$(ELFLINK) .PHONY: o/$(MODE)/ape diff --git a/ape/apeuninstall.sh b/ape/apeuninstall.sh index 5cad154a8..a1526ad89 100755 --- a/ape/apeuninstall.sh +++ b/ape/apeuninstall.sh @@ -11,7 +11,7 @@ fi echo "APE Uninstaller intends to run (in pseudo-shell)" echo echo " sudo echo -1 into /proc/sys/fs/binfmt_misc/APE*" - echo " sudo rm -f /usr/bin/ape ~/.ape o/tmp/.ape /tmp/.ape" + echo " sudo rm -f /usr/bin/ape ~/.ape /tmp/.ape # etc." echo echo "You may then use ape/apeinstall.sh to reinstall it" echo @@ -23,4 +23,23 @@ for f in /proc/sys/fs/binfmt_misc/APE*; do $SUDO sh -c "echo -1 >$f" || exit fi done -$SUDO rm -f /usr/bin/ape ~/.ape o/tmp/.ape o/tmp/ape /tmp/.ape /tmp/ape || exit + +# system installation +if [ -f /usr/bin/ape ]; then + $SUDO rm -f /usr/bin/ape +fi + +# legacy installations +rm -f o/tmp/ape /tmp/ape "${TMPDIR:-/tmp}/ape" + +# ad-hoc installations +for x in .ape \ + .ape-1.1 \ + .ape-blink-0.9.2 \ + .ape-blink-1.0.0; do + rm -f \ + ~/$x \ + /tmp/$x \ + o/tmp/$x \ + "${TMPDIR:-/tmp}/$x" +done diff --git a/ape/loader-elf.S b/ape/loader-elf.S index 86c19ffc8..37a4086e3 100644 --- a/ape/loader-elf.S +++ b/ape/loader-elf.S @@ -25,6 +25,8 @@ // APE Loader Executable Structure // Linux, FreeBSD, NetBSD, OpenBSD + .section .head + .balign 8 ehdr: .ascii "\177ELF" .byte ELFCLASS64 @@ -49,21 +51,21 @@ ehdr: .ascii "\177ELF" .balign 8 phdrs: .long PT_LOAD // p_type - .long PF_R|PF_X // p_flags + .long PF_R // p_flags .quad 0 // p_offset .quad ehdr // p_vaddr .quad ehdr // p_paddr - .quad filesz // p_filesz - .quad filesz // p_memsz + .quad rosize // p_filesz + .quad rosize // 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 + .long PF_X // p_flags + .quad rosize // p_offset + .quad text // p_vaddr + .quad text // p_paddr + .quad textsz // p_filesz + .quad textsz // p_memsz .quad 4096 // p_align .long PT_GNU_STACK // p_type @@ -72,7 +74,7 @@ phdrs: .long PT_LOAD // p_type .quad 0 // p_vaddr .quad 0 // p_paddr .quad 0 // p_filesz - .quad 0 // p_memsz + .quad 8*1024*1024 // p_memsz .quad 16 // p_align .long PT_NOTE // p_type @@ -101,7 +103,7 @@ note: .long 2f-1f notesize = . - note .balign 64,0 // for ape.S dd - .org 0x180 // for ape.S dd + .org 64*6 // for ape.S dd // APE Loader XNU Header // @@ -113,8 +115,8 @@ 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 4 // number of load commands + .long 50f-10f // size of all load commands .long MAC_NOUNDEFS // flags .long 0 // reserved 10: .long MAC_LC_SEGMENT_64 @@ -126,56 +128,25 @@ macho: .long 0xFEEDFACE+1 .long 30f-20b .ascin "__TEXT",16 .quad ehdr // vaddr - .quad 4096 // memsz + .quad filesz // 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 // 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 -30: .long MAC_LC_SEGMENT_64 +30: .long MAC_LC_UUID .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) - .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 -40: .long MAC_LC_UUID - .long 50f-40b .quad 0x3fb29ee4ac6c87aa // uuid1 - .quad 0xdd2c9bb866d9eef8 // uuid2 -50: .long MAC_LC_UNIXTHREAD - .long 60f-50b // cmdsize + .quad 0xdd2c9bb866d9eef9 // uuid2 +40: .long MAC_LC_UNIXTHREAD + .long 50f-40b // cmdsize .long MAC_THREAD_NEXGEN32E // flavaflav - .long (520f-510f)/4 // count -510: .quad 0 // rax + .long (420f-410f)/4 // count +410: .quad 0 // rax .quad 0 // rbx .quad 0 // rcx - .quad _HOSTXNU // rdx + .quad 0 // rdx .quad 0 // rdi .quad 0 // rsi .quad 0 // rbp @@ -188,62 +159,41 @@ macho: .long 0xFEEDFACE+1 .quad 0 // r13 .quad 0 // r14 .quad 0 // r15 - .quad _start // rip + .quad _apple // rip .quad 0 // rflags .quad 0 // cs .quad 0 // fs .quad 0 // gs -520: -60: +420: +50: .endobj macho .balign 64,0 // for ape.S dd - .org 0x400 // for ape.S dd + .org 64*12 // for ape.S dd -// Ape Loader Entrpoint -// -// This is normally called by the operating system. However it may -// be called by the Actually Portable Executables themselves, when -// re-executing a program. Just do this: -// -// memcpy(0x200000, loader) -// lea handoff(%rip),%rcx -// lea argblock(%rip),%rsp -// jmp 0x200400 -// -// @see APE_LOADER_ENTRY -// @see ape/loader.h -_start: - -// Hack for detecting M1 Rosetta environment. -// https://github.com/jart/cosmopolitan/issues/429#issuecomment-1166704377 - cmp $-1,%ebx - jne 0f - cmp $+1,%edx - jne 0f - mov $_HOSTXNU,%dl - xor %ecx,%ecx - -0: mov %rsp,%rsi + .text +_apple: mov $_HOSTXNU,%dl // xnu's not unix! +_start: mov %rsp,%rsi // save real stack + sub $1024*1024,%rsp // room for allocs jmp ApeLoader .endfn _start,globl + .endfn _apple,globl -// System Call Entrpoint +// Invokes system call. // -// This function is used by the APE loader to make system calls. -// We also pass a reference to this function to the APE binary's -// _start() function. It's needed because on OpenBSD, msyscall() -// restricts which pages can issue system calls, and it can only -// be called once. Therefore if we want to be load and re-load a -// binary multiple times without calling the system execve(), we -// need to be able to handover the SYSCALL function. We hardcode -// this to a fixed address, but that shouldn't be used, since we -// would ideally want to move it to a random page in the future. -__syscall_loader: +// This function has eight parameters. The first seven are for +// arguments passed along to the system call. The eight is for +// the magic number that indicates which system call is called +// +// The return value follows the Linux kernel convention, where +// errors are returned as `-errno`. BSD systems are normalized +// to follow this convention automatically. +SystemCall: + mov %rcx,%r10 + mov 16(%rsp),%eax clc syscall - jc 1f - ret -1: neg %rax - ret - .endfn __syscall_loader,globl + jnc 1f + neg %rax +1: ret + .endfn SystemCall,globl diff --git a/ape/loader-macho.S b/ape/loader-macho.S index 6d2b31e96..9adc82d42 100644 --- a/ape/loader-macho.S +++ b/ape/loader-macho.S @@ -23,116 +23,88 @@ // APE Loader Executable Structure for XNU - .balign 4096 + .section .head + + .balign 64 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 4 // number of load commands + .long 50f-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 macho # 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**3 = 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 + .quad macho // vaddr + .quad filesz // memsz + .quad 0 // file offset + .quad filesz // file size + .long PROT_EXEC|PROT_READ|PROT_WRITE // maxprot + .long PROT_EXEC|PROT_READ // initprot + .long 0 // segment section count + .long 0 // flags +30: .long MAC_LC_UUID .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) - .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 -40: .long MAC_LC_UUID - .long 50f-40b - .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 -520: -60: + .quad 0x3fb29ee4ac6c87aa // uuid1 + .quad 0xdd2c9bb866d9eef8 // uuid2 +40: .long MAC_LC_UNIXTHREAD + .long 50f-40b // cmdsize + .long MAC_THREAD_NEXGEN32E // flavaflav + .long (420f-410f)/4 // count +410: .quad 0 // rax + .quad 0 // rbx + .quad 0 // rcx + .quad 0 // 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 +420: +50: .endobj macho,globl .balign 64 -_start: - -// Hack for detecting M1 Rosetta environment. -// https://github.com/jart/cosmopolitan/issues/429#issuecomment-1166704377 - cmp $-1,%ebx - jne 0f - cmp $+1,%edx - jne 0f - mov $_HOSTXNU,%dl - xor %ecx,%ecx - -0: mov %rsp,%rsi +_start: mov $_HOSTXNU,%dl // xnu's not unix! + mov %rsp,%rsi // save real stack + sub $1024*1024,%rsp // room for allocs jmp ApeLoader .endfn _start,globl -__syscall_loader: +// Invokes system call. +// +// This function has eight parameters. The first seven are for +// arguments passed along to the system call. The eight is for +// the magic number that indicates which system call is called +// +// The return value follows the Linux kernel convention, where +// errors are returned as `-errno`. BSD systems are normalized +// to follow this convention automatically. +SystemCall: + mov %rcx,%r10 + mov 16(%rsp),%eax clc syscall - jc 1f - ret -1: neg %rax - ret - .endfn __syscall_loader,globl + jnc 1f + neg %rax +1: ret + .endfn SystemCall,globl diff --git a/ape/loader-macho.lds b/ape/loader-macho.lds deleted file mode 100644 index 973c182a5..000000000 --- a/ape/loader-macho.lds +++ /dev/null @@ -1,42 +0,0 @@ -/*-*- mode: ld-script; indent-tabs-mode: nil; tab-width: 2; coding: utf-8 -*-│ -│vi: set et sts=2 tw=2 fenc=utf-8 :vi│ -╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2021 Justine Alexandra Roberts Tunney │ -│ │ -│ Permission to use, copy, modify, and/or distribute this software for │ -│ any purpose with or without fee is hereby granted, provided that the │ -│ above copyright notice and this permission notice appear in all copies. │ -│ │ -│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ -│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ -│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ -│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ -│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ -│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ -│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ -│ PERFORMANCE OF THIS SOFTWARE. │ -╚─────────────────────────────────────────────────────────────────────────────*/ -ENTRY(_start) - -SECTIONS { - . = 0x200000; - .text : { - *(.text) - *(.rodata .rodata.*) - . = ALIGN(4096); - } - filesz = . - macho; - textsz = . - _start; - .bss ALIGN(4096) : { - bss = .; - *(.bss) - . = ALIGN(4096); - } - memsz = . - macho; - /DISCARD/ : { - *(.*) - } -} - -bsssize = SIZEOF(.bss); -textoff = _start - macho; diff --git a/ape/loader.c b/ape/loader.c index 44d4550c4..103775969 100644 --- a/ape/loader.c +++ b/ape/loader.c @@ -16,11 +16,6 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "ape/loader.h" - -#define SET_EXE_FILE 0 /* needs root ;_; */ -#define TROUBLESHOOT 0 -#define TROUBLESHOOT_OS LINUX /** * @fileoverview APE Loader for GNU/Systemd/XNU/FreeBSD/NetBSD/OpenBSD @@ -110,7 +105,7 @@ #define MAP_ANONYMOUS (IsLinux() ? 32 : 4096) #define AT_EXECFN_LINUX 31 #define AT_EXECFN_NETBSD 2014 -#define ELFCLASS64 2 +#define ELFCLASS32 1 #define ELFDATA2LSB 1 #define EM_NEXGEN32E 62 #define ET_EXEC 2 @@ -127,6 +122,10 @@ #define PR_SET_MM 35 #define PR_SET_MM_EXE_FILE 13 +#define Min(X, Y) ((Y) > (X) ? (X) : (Y)) +#define Roundup(X, K) (((X) + (K)-1) & -(K)) +#define Rounddown(X, K) ((X) & -(K)) + #define Read32(S) \ ((unsigned)(255 & (S)[3]) << 030 | (unsigned)(255 & (S)[2]) << 020 | \ (unsigned)(255 & (S)[1]) << 010 | (unsigned)(255 & (S)[0]) << 000) @@ -141,14 +140,6 @@ (unsigned long)(255 & (S)[1]) << 010 | \ (unsigned long)(255 & (S)[0]) << 000) -struct PathSearcher { - char os; - unsigned long namelen; - const char *name; - const char *syspath; - char path[1024]; -}; - struct ElfEhdr { unsigned char e_ident[16]; unsigned short e_type; @@ -177,26 +168,43 @@ struct ElfPhdr { unsigned long p_align; }; -extern char ehdr[]; -extern char _end[]; -static void *syscall_; -static struct PathSearcher ps; -extern char __syscall_loader[]; +union ElfEhdrBuf { + struct ElfEhdr ehdr; + char buf[4096]; +}; -#if SET_EXE_FILE -static char relocated; -#endif +union ElfPhdrBuf { + struct ElfPhdr phdr; + char buf[4096]; +}; + +struct PathSearcher { + int os; + const char *name; + const char *syspath; + unsigned long namelen; + char path[1024]; +}; + +struct ApeLoader { + union ElfEhdrBuf ehdr; + union ElfPhdrBuf phdr; + struct PathSearcher ps; +}; + +long SystemCall(long arg1, // + long arg2, // + long arg3, // + long arg4, // + long arg5, // + long arg6, // + long arg7, // + long magi); static int ToLower(int c) { return 'A' <= c && c <= 'Z' ? c + ('a' - 'A') : c; } -char *MemCpy(char *d, const char *s, unsigned long n) { - unsigned long i = 0; - for (; i < n; ++i) d[i] = s[i]; - return d + n; -} - static unsigned long StrLen(const char *s) { unsigned long n = 0; while (*s++) ++n; @@ -212,6 +220,22 @@ static const char *MemChr(const char *s, unsigned char c, unsigned long n) { return 0; } +static void *MemMove(void *a, const void *b, unsigned long n) { + char *d = a; + unsigned long i; + const char *s = b; + if (d > s) { + for (i = n; i--;) { + d[i] = s[i]; + } + } else { + for (i = 0; i < n; ++i) { + d[i] = s[i]; + } + } + return d; +} + static char *GetEnv(char **p, const char *s) { unsigned long i, j; if (p) { @@ -256,168 +280,105 @@ static char *Itoa(char p[21], long x) { return Utoa(p, x); } -#if TROUBLESHOOT -const char *DescribeOs(int os) { - if (IsLinux()) { - return "GNU/SYSTEMD"; - } else if (IsXnu()) { - return "XNU"; - } else if (IsFreebsd()) { - return "FREEBSD"; - } else if (IsOpenbsd()) { - return "OPENBSD"; - } else if (IsNetbsd()) { - return "NETBSD"; - } else { - return "WUT"; - } -} -#endif - __attribute__((__noreturn__)) static void Exit(int rc, int os) { - asm volatile("call\t*%2" - : /* no outputs */ - : "a"((IsLinux() ? 60 : 1) | (IsXnu() ? 0x2000000 : 0)), "D"(rc), - "rm"(syscall_) - : "memory"); + SystemCall(rc, 0, 0, 0, 0, 0, 0, + (IsLinux() ? 60 : 1) | (IsXnu() ? 0x2000000 : 0)); __builtin_unreachable(); } -static void Close(int fd, int os) { - int ax, di; - asm volatile("call\t*%4" - : "=a"(ax), "=D"(di) - : "0"((IsLinux() ? 3 : 6) | (IsXnu() ? 0x2000000 : 0)), "1"(fd), - "rm"(syscall_) - : "rcx", "rdx", "rsi", "r8", "r9", "r10", "r11", "memory", "cc"); +static int Close(int fd, int os) { + return SystemCall(fd, 0, 0, 0, 0, 0, 0, + (IsLinux() ? 3 : 6) | (IsXnu() ? 0x2000000 : 0)); } -static int Read(int fd, void *data, int size, int os) { - long si; - int ax, di, dx; - asm volatile("call\t*%8" - : "=a"(ax), "=D"(di), "=S"(si), "=d"(dx) - : "0"((IsLinux() ? 0 : 3) | (IsXnu() ? 0x2000000 : 0)), "1"(fd), - "2"(data), "3"(size), "rm"(syscall_) - : "rcx", "r8", "r9", "r10", "r11", "memory"); - return ax; +static long Pread(int fd, void *data, unsigned long size, long off, int os) { + long magi; + if (IsLinux()) { + magi = 0x011; + } else if (IsXnu()) { + magi = 0x2000099; + } else if (IsFreebsd()) { + magi = 0x1db; + } else if (IsOpenbsd()) { + magi = 0x0a9; // OpenBSD v7.3+ + } else if (IsNetbsd()) { + magi = 0x0ad; + } else { + __builtin_unreachable(); + } + return SystemCall(fd, (long)data, size, off, off, 0, 0, magi); } -static void Write(int fd, const void *data, int size, int os) { - long si; - int ax, di, dx; - asm volatile("call\t*%8" - : "=a"(ax), "=D"(di), "=S"(si), "=d"(dx) - : "0"((IsLinux() ? 1 : 4) | (IsXnu() ? 0x2000000 : 0)), "1"(fd), - "2"(data), "3"(size), "rm"(syscall_) - : "rcx", "r8", "r9", "r10", "r11", "memory", "cc"); +static long Write(int fd, const void *data, unsigned long size, int os) { + return SystemCall(fd, (long)data, size, 0, 0, 0, 0, + (IsLinux() ? 1 : 4) | (IsXnu() ? 0x2000000 : 0)); } -static void Execve(const char *prog, char **argv, char **envp, int os) { - long ax, di, si, dx; - asm volatile("call\t*%8" - : "=a"(ax), "=D"(di), "=S"(si), "=d"(dx) - : "0"(59 | (IsXnu() ? 0x2000000 : 0)), "1"(prog), "2"(argv), - "3"(envp), "rm"(syscall_) - : "rcx", "r8", "r9", "r10", "r11", "memory", "cc"); +static int Execve(const char *prog, char **argv, char **envp, int os) { + return SystemCall((long)prog, (long)argv, (long)envp, 0, 0, 0, 0, + 59 | (IsXnu() ? 0x2000000 : 0)); } static int Access(const char *path, int mode, int os) { - int ax, si; - long dx, di; - asm volatile("call\t*%7" - : "=a"(ax), "=D"(di), "=S"(si), "=d"(dx) - : "0"((IsLinux() ? 21 : 33) | (IsXnu() ? 0x2000000 : 0)), - "1"(path), "2"(mode), "rm"(syscall_) - : "rcx", "r8", "r9", "r10", "r11", "memory", "cc"); - return ax; + return SystemCall((long)path, mode, 0, 0, 0, 0, 0, + (IsLinux() ? 21 : 33) | (IsXnu() ? 0x2000000 : 0)); } -static int Msyscall(long p, long n, int os) { - int ax; - long di, si; - if (!IsOpenbsd()) { - return 0; +static int Msyscall(long p, unsigned long n, int os) { + if (IsOpenbsd()) { + return SystemCall(p, n, 0, 0, 0, 0, 0, 37); } else { - asm volatile("call\t*%6" - : "=a"(ax), "=D"(di), "=S"(si) - : "0"(37), "1"(p), "2"(n), "rm"(syscall_) - : "rcx", "rdx", "r8", "r9", "r10", "r11", "memory", "cc"); - return ax; + return 0; } } static int Open(const char *path, int flags, int mode, int os) { - long di; - int ax, dx, si; - asm volatile("call\t*%8" - : "=a"(ax), "=D"(di), "=S"(si), "=d"(dx) - : "0"((IsLinux() ? 2 : 5) | (IsXnu() ? 0x2000000 : 0)), - "1"(path), "2"(flags), "3"(mode), "rm"(syscall_) - : "rcx", "r8", "r9", "r10", "r11", "memory", "cc"); - return ax; + return SystemCall((long)path, flags, mode, 0, 0, 0, 0, + (IsLinux() ? 2 : 5) | (IsXnu() ? 0x2000000 : 0)); } -__attribute__((__noinline__)) static long Mmap(long addr, long size, int prot, - int flags, int fd, long off, - int os) { - long ax, di, si, dx; - register int flags_ asm("r10") = flags; - register int fd_ asm("r8") = fd; - register long off_ asm("r9") = off; - asm volatile("push\t%%r9\n\t" - "push\t%%r9\n\t" - "call\t*%7\n\t" - "pop\t%%r9\n\t" - "pop\t%%r9" - : "=a"(ax), "=D"(di), "=S"(si), "=d"(dx), "+r"(flags_), - "+r"(fd_), "+r"(off_) - : "rm"(syscall_), - "0"((IsLinux() ? 9 - : IsFreebsd() ? 477 - : 197) | - (IsXnu() ? 0x2000000 : 0)), - "1"(addr), "2"(size), "3"(prot) - : "rcx", "r11", "memory", "cc"); - return ax; -} - -int MunmapLinux(const void *addr, unsigned long size) { - int ax; - asm volatile("syscall" - : "=a"(ax) - : "0"(11), "D"(addr), "S"(size) - : "rcx", "r11", "memory"); - return ax; -} - -int PrctlLinux(int op, long a, long b, long c, long d) { - int rc; - asm volatile("mov\t%5,%%r10\n\t" - "mov\t%6,%%r8\n\t" - "syscall" - : "=a"(rc) - : "0"(157), "D"(op), "S"(a), "d"(b), "g"(c), "g"(d) - : "rcx", "r8", "r10", "r11", "memory"); - return rc; -} - -static void Emit(int os, const char *s) { - Write(2, s, StrLen(s), os); -} - -static void Perror(int os, const char *c, int rc, const char *s) { - char ibuf[21]; - Emit(os, "ape error: "); - Emit(os, c); - Emit(os, ": "); - Emit(os, s); - if (rc) { - Emit(os, " failed errno="); - Itoa(ibuf, -rc); - Emit(os, ibuf); +static long Mmap(void *addr, unsigned long size, int prot, int flags, int fd, + long off, int os) { + long magi; + if (IsLinux()) { + magi = 9; + } else if (IsXnu()) { + magi = 0x2000000 | 197; + } else if (IsFreebsd()) { + magi = 477; + } else if (IsOpenbsd()) { + magi = 49; // OpenBSD v7.3+ + } else if (IsNetbsd()) { + magi = 197; + } else { + __builtin_unreachable(); } - Emit(os, "\n"); + return SystemCall((long)addr, size, prot, flags, fd, off, off, magi); +} + +static long Print(int os, int fd, const char *s, ...) { + int c; + unsigned n; + char b[512]; + __builtin_va_list va; + __builtin_va_start(va, s); + for (n = 0; s; s = __builtin_va_arg(va, const char *)) { + while ((c = *s++)) { + if (n < sizeof(b)) { + b[n++] = c; + } + } + } + __builtin_va_end(va); + return Write(fd, b, n, os); +} + +static void Perror(int os, const char *thing, long rc, const char *reason) { + char ibuf[21]; + ibuf[0] = 0; + if (rc) Itoa(ibuf, -rc); + Print(os, 2, "ape error: ", thing, ": ", reason, + rc ? " failed w/ errno " : "", ibuf, "\n", 0l); } __attribute__((__noreturn__)) static void Pexit(int os, const char *c, int rc, @@ -432,6 +393,15 @@ static int StrCmp(const char *l, const char *r) { return (l[i] & 255) - (r[i] & 255); } +static void *MemSet(void *a, int c, unsigned long n) { + char *d = a; + unsigned long i; + for (i = 0; i < n; ++i) { + d[i] = c; + } + return d; +} + static char EndsWithIgnoreCase(const char *p, unsigned long n, const char *s) { unsigned long i, m; if (n >= (m = StrLen(s))) { @@ -458,8 +428,8 @@ static char AccessCommand(struct PathSearcher *ps, const char *suffix, suffixlen = StrLen(suffix); if (pathlen + 1 + ps->namelen + suffixlen + 1 > sizeof(ps->path)) return 0; if (pathlen && ps->path[pathlen - 1] != '/') ps->path[pathlen++] = '/'; - MemCpy(ps->path + pathlen, ps->name, ps->namelen); - MemCpy(ps->path + pathlen + ps->namelen, suffix, suffixlen + 1); + MemMove(ps->path + pathlen, ps->name, ps->namelen); + MemMove(ps->path + pathlen + ps->namelen, suffix, suffixlen + 1); return !Access(ps->path, X_OK, ps->os); } @@ -507,37 +477,30 @@ static char *Commandv(struct PathSearcher *ps, int os, const char *name, } __attribute__((__noreturn__)) static void Spawn(int os, const char *exe, int fd, - long *sp, char *page, - struct ElfEhdr *e) { + long *sp, struct ElfEhdr *e, + struct ElfPhdr *p) { long rc; - unsigned long i; int prot, flags; - struct ElfPhdr *p; long code, codesize; - if (e->e_type != ET_EXEC) { - Pexit(os, exe, 0, "ELF e_type != ET_EXEC"); - } - if (e->e_machine != EM_NEXGEN32E) { - Pexit(os, exe, 0, "ELF e_machine != EM_NEXGEN32E"); - } - if (e->e_ident[EI_CLASS] != ELFCLASS64) { - Pexit(os, exe, 0, "ELF e_ident[EI_CLASS] != ELFCLASS64"); - } - if (e->e_ident[EI_DATA] != ELFDATA2LSB) { - Pexit(os, exe, 0, "ELF e_ident[EI_DATA] != ELFDATA2LSB"); - } - if (e->e_phoff + e->e_phnum * sizeof(*p) > 0x1000) { - Pexit(os, exe, 0, "ELF phdrs need to be in first page"); - } + unsigned long a, b, i; + code = 0; codesize = 0; - for (p = (struct ElfPhdr *)(page + e->e_phoff), i = e->e_phnum; i--;) { + for (i = e->e_phnum; i--;) { if (p[i].p_type == PT_DYNAMIC) { - Pexit(os, exe, 0, "not a real executable"); + Pexit(os, exe, 0, "not a static executable"); } - if (p[i].p_type != PT_LOAD) continue; - if ((p[i].p_vaddr | p[i].p_filesz | p[i].p_memsz | p[i].p_offset) & 0xfff) { - Pexit(os, exe, 0, "APE phdrs must be 4096-aligned and 4096-padded"); + if (p[i].p_type != PT_LOAD) { + continue; + } + if (!p[i].p_memsz) { + continue; + } + if (p[i].p_vaddr & 4095) { + Pexit(os, exe, 0, "APE phdr addr must be 4096-aligned"); + } + if (p[i].p_offset & 4095) { + Pexit(os, exe, 0, "APE phdr offset must be 4096-aligned"); } prot = 0; flags = MAP_FIXED | MAP_PRIVATE; @@ -552,16 +515,20 @@ __attribute__((__noreturn__)) static void Spawn(int os, const char *exe, int fd, code = p[i].p_vaddr; codesize = p[i].p_filesz; } - if (p[i].p_memsz > p[i].p_filesz) { - if ((rc = Mmap(p[i].p_vaddr + p[i].p_filesz, p[i].p_memsz - p[i].p_filesz, - prot, flags | MAP_ANONYMOUS, -1, 0, os)) < 0) { - Pexit(os, exe, rc, "bss mmap()"); + if (p[i].p_filesz) { + if ((rc = Mmap((void *)p[i].p_vaddr, p[i].p_filesz, prot, flags, fd, + p[i].p_offset, os)) < 0) { + Pexit(os, exe, rc, "image mmap"); + } + if ((a = Min(-p[i].p_filesz & 4095, p[i].p_memsz - p[i].p_filesz))) { + MemSet((void *)(p[i].p_vaddr + p[i].p_filesz), 0, a); } } - if (p[i].p_filesz) { - if ((rc = Mmap(p[i].p_vaddr, p[i].p_filesz, prot, flags, fd, - p[i].p_offset, os)) < 0) { - Pexit(os, exe, rc, "image mmap()"); + if ((b = Roundup(p[i].p_memsz, 4096)) > + (a = Roundup(p[i].p_filesz, 4096))) { + if ((rc = Mmap((void *)p[i].p_vaddr + a, b - a, prot, + flags | MAP_ANONYMOUS, -1, 0, os)) < 0) { + Pexit(os, exe, rc, "bss mmap"); } } } @@ -569,34 +536,15 @@ __attribute__((__noreturn__)) static void Spawn(int os, const char *exe, int fd, Pexit(os, exe, 0, "ELF needs PT_LOAD phdr w/ PF_X"); } -#if SET_EXE_FILE - // change /proc/pid/exe to new executable path - if (IsLinux() && relocated) { - MunmapLinux((char *)0x200000, (long)(_end - ehdr)); - PrctlLinux(PR_SET_MM, PR_SET_MM_EXE_FILE, fd, 0, 0); - } -#endif - Close(fd, os); - - // authorize only the loaded program to issue system calls. if this - // fails, then we pass a link to our syscall function to the program - // since it probably means a userspace program executed this loader - // and passed us a custom syscall function earlier. - if (Msyscall(code, codesize, os) != -1) { - syscall_ = 0; - } - -#if TROUBLESHOOT - Emit(TROUBLESHOOT_OS, "preparing to jump\n"); -#endif + Msyscall(code, codesize, os); // we clear all the general registers we can to have some wiggle room // to extend the behavior of this loader in the future. we don't need // to clear the xmm registers since the ape loader should be compiled // with the -mgeneral-regs-only flag. - register void *r8 asm("r8") = syscall_; asm volatile("xor\t%%eax,%%eax\n\t" + "xor\t%%r8d,%%r8d\n\t" "xor\t%%r9d,%%r9d\n\t" "xor\t%%r10d,%%r10d\n\t" "xor\t%%r11d,%%r11d\n\t" @@ -612,28 +560,36 @@ __attribute__((__noreturn__)) static void Spawn(int os, const char *exe, int fd, "xor\t%%ebp,%%ebp\n\t" "ret" : /* no outputs */ - : "D"(IsFreebsd() ? sp : 0), "S"(e->e_entry), "d"(sp), "c"(os), - "r"(r8) + : "D"(IsFreebsd() ? sp : 0), "S"(e->e_entry), "d"(sp), "c"(os) : "memory"); __builtin_unreachable(); } -__attribute__((__noreturn__)) void ApeLoader(long di, long *sp, char dl, - struct ApeLoader *handoff) { +static void TryElf(struct ApeLoader *M, const char *exe, int fd, long *sp, + int os) { + unsigned size; + if (Read32(M->ehdr.buf) == Read32("\177ELF") && // + M->ehdr.ehdr.e_type == ET_EXEC && // + M->ehdr.ehdr.e_machine == EM_NEXGEN32E && // + M->ehdr.ehdr.e_ident[EI_CLASS] != ELFCLASS32 && // + M->ehdr.ehdr.e_phentsize >= sizeof(M->phdr.phdr) && // + (size = (unsigned)M->ehdr.ehdr.e_phnum * M->ehdr.ehdr.e_phentsize) <= + sizeof(M->phdr.buf) && + Pread(fd, M->phdr.buf, size, M->ehdr.ehdr.e_phoff, os) == size) { + Spawn(os, exe, fd, sp, &M->ehdr.ehdr, &M->phdr.phdr); + } +} + +__attribute__((__noreturn__)) void ApeLoader(long di, long *sp, char dl) { int rc; - long *auxv; - struct ElfEhdr *eh; - int c, i, fd, os, argc; - char *p, *exe, *prog, **argv, **envp, *page; - static union { - struct ElfEhdr ehdr; - char p[0x1000]; - } u; + unsigned i, n; + int c, fd, os, argc; + struct ApeLoader *M; + long *auxv, *ap, *ew; + char *p, *exe, *prog, **argv, **envp; // detect freebsd - if (handoff) { - os = handoff->os; - } else if (SupportsXnu() && dl == XNU) { + if (SupportsXnu() && dl == XNU) { os = XNU; } else if (SupportsFreebsd() && di) { os = FREEBSD; @@ -653,134 +609,109 @@ __attribute__((__noreturn__)) void ApeLoader(long di, long *sp, char dl, } } - // get syscall function pointer - if (handoff && handoff->systemcall) { - syscall_ = handoff->systemcall; + // detect openbsd + if (SupportsOpenbsd() && !os && !auxv[0]) { + os = OPENBSD; + } + + // detect netbsd and find end of words + for (ap = auxv; ap[0]; ap += 2) { + if (SupportsNetbsd() && !os && ap[0] == AT_EXECFN_NETBSD) { + os = NETBSD; + } + } + ew = ap + 1; + + // allocate loader memory + n = sizeof(*M) / sizeof(long); + MemMove(sp - n, sp, (char *)ew - (char *)sp); + sp -= n, argv -= n, envp -= n, auxv -= n; + M = (struct ApeLoader *)(ew - n); + + // default operating system + if (!os) { + os = LINUX; + } + + // we can load via shell, shebang, or binfmt_misc + if (argc >= 3 && !StrCmp(argv[1], "-")) { + // if the first argument is a hyphen then we give the user the + // power to change argv[0] or omit it entirely. most operating + // systems don't permit the omission of argv[0] but we do, b/c + // it's specified by ANSI X3.159-1988. + prog = (char *)sp[3]; + argc = sp[3] = sp[0] - 3; + argv = (char **)((sp += 3) + 1); + } else if (argc < 2) { + Print(os, 2, + "usage: ape PROG [ARGV1,ARGV2,...]\n" + " ape - PROG [ARGV0,ARGV1,...]\n" + "αcτµαlly pδrταblε εxεcµταblε loader v1.1\n" + "copyright 2022 justine alexandra roberts tunney\n" + "https://justine.lol/ape.html\n", + 0l); + Exit(1, os); } else { - syscall_ = __syscall_loader; + prog = (char *)sp[2]; + argc = sp[1] = sp[0] - 1; + argv = (char **)((sp += 1) + 1); } - if (handoff) { - // we were called by ape_execve() - // no argument parsing is needed - // no path searching is needed - exe = handoff->prog; - fd = handoff->fd; - exe = handoff->prog; - page = handoff->page; - eh = (struct ElfEhdr *)handoff->page; - } else { - - // detect openbsd - if (SupportsOpenbsd() && !os && !auxv[0]) { - os = OPENBSD; - } - - // detect netbsd - if (SupportsNetbsd() && !os) { - for (; auxv[0]; auxv += 2) { - if (auxv[0] == AT_EXECFN_NETBSD) { - os = NETBSD; - break; - } - } - } - - // default operating system - if (!os) { - os = LINUX; - } - -#if SET_EXE_FILE - if (IsLinux() && !relocated) { - char *b1 = (char *)0x200000; - char *b2 = (char *)0x300000; - void (*pApeLoader)(long, long *, char, struct ApeLoader *); - Mmap((long)b2, (long)(_end - ehdr), PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0, os); - relocated = 1; - MemCpy(b2, b1, (long)(_end - ehdr)); - pApeLoader = (void *)((char *)&ApeLoader - b1 + b2); - pApeLoader(di, sp, dl, handoff); - } -#endif - - // we can load via shell, shebang, or binfmt_misc - if (argc >= 3 && !StrCmp(argv[1], "-")) { - // if the first argument is a hyphen then we give the user the - // power to change argv[0] or omit it entirely. most operating - // systems don't permit the omission of argv[0] but we do, b/c - // it's specified by ANSI X3.159-1988. - prog = (char *)sp[3]; - argc = sp[3] = sp[0] - 3; - argv = (char **)((sp += 3) + 1); - } else if (argc < 2) { - Emit(os, "usage: ape PROG [ARGV1,ARGV2,...]\n" - " ape - PROG [ARGV0,ARGV1,...]\n" - "αcτµαlly pδrταblε εxεcµταblε loader v1.o\n" - "copyright 2022 justine alexandra roberts tunney\n" - "https://justine.lol/ape.html\n"); - Exit(1, os); - } else { - prog = (char *)sp[2]; - argc = sp[1] = sp[0] - 1; - argv = (char **)((sp += 1) + 1); - } - - if (!(exe = Commandv(&ps, os, prog, GetEnv(envp, "PATH")))) { - Pexit(os, prog, 0, "not found (maybe chmod +x)"); - } else if ((fd = Open(exe, O_RDONLY, 0, os)) < 0) { - Pexit(os, exe, fd, "open"); - } else if ((rc = Read(fd, u.p, sizeof(u.p), os)) < 0) { - Pexit(os, exe, rc, "read"); - } else if (rc != sizeof(u.p) && Read32(u.p) != Read32("\177ELF")) { - Pexit(os, exe, 0, "too small"); - } - - page = u.p; - eh = &u.ehdr; + // resolve path of executable and read its first page + if (!(exe = Commandv(&M->ps, os, prog, GetEnv(envp, "PATH")))) { + Pexit(os, prog, 0, "not found (maybe chmod +x)"); + } else if ((fd = Open(exe, O_RDONLY, 0, os)) < 0) { + Pexit(os, exe, fd, "open"); + } else if ((rc = Pread(fd, M->ehdr.buf, sizeof(M->ehdr.buf), 0, os)) < 0) { + Pexit(os, exe, rc, "read"); + } else if (rc != sizeof(M->ehdr.buf)) { + Pexit(os, exe, 0, "too small"); } -#if TROUBLESHOOT - Emit(TROUBLESHOOT_OS, "os = "); - Emit(TROUBLESHOOT_OS, DescribeOs(os)); - Emit(TROUBLESHOOT_OS, "\n"); - for (i = 0; i < argc; ++i) { - Emit(TROUBLESHOOT_OS, "argv = "); - Emit(TROUBLESHOOT_OS, argv[i]); - Emit(TROUBLESHOOT_OS, "\n"); + // change argv[0] to resolved path if it's ambiguous + if (argc > 0 && *prog != '/' && *exe == '/' && !StrCmp(prog, argv[0])) { + argv[0] = exe; } -#endif - if ((IsXnu() && Read32(page) == 0xFEEDFACE + 1) || - (!IsXnu() && Read32(page) == Read32("\177ELF"))) { + // ape intended behavior + // 1. if file is a native executable, try to run it natively + // 2. if ape, will scan shell script for elf printf statements + // 3. shell script may have multiple lines producing elf headers + // 4. all elf printf lines must exist in the first 4096 bytes of file + // 5. elf program headers may appear anywhere in the binary + if ((IsXnu() && Read32(M->ehdr.buf) == 0xFEEDFACE + 1) || + (!IsXnu() && Read32(M->ehdr.buf) == Read32("\177ELF"))) { Close(fd, os); Execve(exe, argv, envp, os); } - - // TODO(jart): Parse Mach-O for old APE binary support on XNU. - for (p = page; p < page + sizeof(u.p); ++p) { - if (Read64(p) != Read64("printf '")) continue; - for (i = 0, p += 8; p + 3 < page + sizeof(u.p) && (c = *p++) != '\'';) { - if (c == '\\') { - if ('0' <= *p && *p <= '7') { - c = *p++ - '0'; + if (Read64(M->ehdr.buf) == Read64("MZqFpD='") || + Read64(M->ehdr.buf) == Read64("jartsr='")) { + for (p = M->ehdr.buf; p < M->ehdr.buf + sizeof(M->ehdr.buf); ++p) { + if (Read64(p) != Read64("printf '")) { + continue; + } + for (i = 0, p += 8; + p + 3 < M->ehdr.buf + sizeof(M->ehdr.buf) && (c = *p++) != '\'';) { + if (c == '\\') { if ('0' <= *p && *p <= '7') { - c *= 8; - c += *p++ - '0'; + c = *p++ - '0'; if ('0' <= *p && *p <= '7') { c *= 8; c += *p++ - '0'; + if ('0' <= *p && *p <= '7') { + c *= 8; + c += *p++ - '0'; + } } } } + M->ehdr.buf[i++] = c; + } + if (i >= sizeof(M->ehdr.ehdr)) { + TryElf(M, exe, fd, sp, os); } - page[i++] = c; - } - if (i >= 64 && Read32(page) == Read32("\177ELF")) { - Spawn(os, exe, fd, sp, page, eh); } } - - Pexit(os, exe, 0, "could not find printf elf in first page"); + TryElf(M, exe, fd, sp, os); + Pexit(os, exe, 0, "Not an acceptable APE/ELF executable for x86-64"); } diff --git a/ape/loader.h b/ape/loader.h deleted file mode 100644 index 1892401c9..000000000 --- a/ape/loader.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef COSMOPOLITAN_APE_LOADER_H_ -#define COSMOPOLITAN_APE_LOADER_H_ - -#define APE_LOADER_BASE 0x200000 -#define APE_LOADER_SIZE 0x200000 -#define APE_LOADER_ENTRY 0x200400 -#define APE_LOADER_BSS (4096 * 2) -#define APE_LOADER_STACK 0x7f0000000000 -#define APE_BLOCK_BASE 0x7e0000000000 -#define APE_BLOCK_SIZE 0x000200000000 - -struct ApeLoader { - int fd; - int os; - char *prog; - char *page; - void *systemcall; -}; - -#endif /* COSMOPOLITAN_APE_LOADER_H_ */ diff --git a/ape/loader.lds b/ape/loader.lds index 0e3488386..326bbfeb3 100644 --- a/ape/loader.lds +++ b/ape/loader.lds @@ -20,24 +20,20 @@ ENTRY(_start) SECTIONS { . = 0x200000; - .text : { - *(.text) + .rodata : { + KEEP(*(.head)) *(.rodata .rodata.*) - . = ALIGN(64); - } - filesz = . - ehdr; - textsz = . - _start; - .bss ALIGN(4096) : { - bss = .; - *(.bss) . = ALIGN(4096); } - _end = .; - memsz = _end - ehdr; + .text : { + text = .; + *(.text) + } /DISCARD/ : { *(.*) } } -bsssize = SIZEOF(.bss); -textoff = _start - ehdr; +textsz = SIZEOF(.text); +rosize = SIZEOF(.rodata); +filesz = SIZEOF(.rodata) + SIZEOF(.text); diff --git a/build/bootstrap/ape.elf b/build/bootstrap/ape.elf index acdb60d3f91b8893478f6f9345b6778d986b8277..3218e7f76f5b94176d8e742a9397a3ac2233d96b 100755 GIT binary patch literal 7169 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 literal 4224 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 Vf}zH5_}Ey$+|x}epIS0|;UAr&-zxwB diff --git a/build/bootstrap/ape.macho b/build/bootstrap/ape.macho index a151b59c68c17af9cac19e00dc417e3590120cc2..e29b98751101a54ba9369352d2a0670603341576 100755 GIT binary patch literal 6815 zcmeHMU2qfE6~2;XBOJpTa1xV*X4@*0xCM(PgjxTQNRXLBTT~f+!ZOF zPBN3XzIbQ$=bU@)Ip==o=UUfiCNJKcfsiQ=A!LTz0{62fV8EMR^WnyD*VK6U)vhhB zb!#Yh>cvhazV`dJo@&>o>ZxM6`MRfH*(>y6_bx~$EOGtqtOpa5E95~)oClvGWn4_eC=$K zt@kzt{B>-bo%M&q!4QkQEq?kL3Rkiy7?M~o8sdngfN%!&hTe?h7@easc1>DzB^E zVT7eVBnRu*hnl^+0eN3TbEuB}{;o04v8nGp+>o=`L=_ z#l^WHF2zlFno!zwS=ZsG@FqBi5Xn9prf+SZjfFSXqPAxZe$=+opkFoUQ%;+e9tVg- zw3T9*Q~`s>C3wmIF^!6D7v+Wo+liGhxs@tM&S5qtVuSOBy!HL<%Ymeg18l*Ho4JF5$HOip9ckCn-pZSOrkU@1Uc96Pd+lCF}1uA&v4MFm)ocb2Tc`kBlH zFgq{?X0@sibl1s<;f^b>{ zn#QaE2v0XWzb5(3l&rzsPd{0(cbQ5k^@ zibPNU@{+FeoA}Mxkz`_7$O$L&T5|wj(-}0RBa1Y`xjMt6NY$lg75#-%qt(6_M0UOue@pAZ<64cXt@o(Em(ae4N^EZ zA?*~&He0FSd&f<($L4~ChLf;#er>w@qONbR!Lhigg23(~u<$Tg82uf{VD&{~zN%2y zF?k!8jX*+nd_bMSjzP?z^AxHBT!d&C-W{6@fxwX7${=KBdNz2vWi!~@JsX^S2`G{neFKtD z(BHyJreahw5_7o?I>0OihMDLA;HZ0SMSTXQ8v#?S%B9CBB|>Ja)wJxPoQwiZxw!M( zc^CJQi@WIJCR`j8(mPyg12@54OhVp1wDlQ&8~+Tyov%sq)dIOLkgF~(wVw9~WaNo1 z%RJit1U-?t>Q=p_PifT_vuH};j!AmZ*cNdEP;;JW-($MpF3o&mz-eObf*u#NMpjUF zT1E2VliHqqlz#tnU3cg4rGmE3B$B`9m~Q}+R~*)!Z_}udv2J*q`yh{Kmr2mpXmrOE z?Ti;Py1sdPEYAEqz6Bgk@*ALCKotq(v-MCXPh)jsDdfJDmfLLR=u#6Dn{v}Gk7ed@ zDeM@L9suSXXoSkmZSvTFi$z;SICdmsTA%eHn;oToy#NxtKf8cR3dz zwfW}?RE2X)(b%$;`V@Ww+)Y$<3X`x38#_XS%h(0#l~wPIY4?ohJ}O2)OrUHb@T`P1H#)z;+df#`y@_S)7t|Row46$tkGsRw!Tu%18o}OPOay?amY6 zCUi5y3$>SeE0R&HKqMIdY(xBN;CBen2yGoSe*{aphbWP z&EiWCsr1gQt{b}nH`GJ>KlWvt;4g}oDg3$Wf|O0GX{arj+5l6xlLX+=`MLqYtgXPQ zGB%gke&8s3Z1rF!t zM8{Zbx7#5jCiXLs6O@xyZo;j(^2im@ajMnFGkq>3Xl|2|eNbAbWVgvH_^$OP<&(wj zlQY_u@Lg^*)0fcJj)07rvhD{~9@Cf7ER-vfe#$Ha1_)Sy*%^J9E=(YAVSOO;3wSG& UkG0PK%B7rx2n+hjQ4fUlKdR@hI{*Lx literal 4096 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 a6_TH0K5&-(%rB0c{^!TdJHP3O=kQ;HI+-E> literal 73728 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⋙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 TG2k)aG2k)aG2k)qKV;zF+E9Bu diff --git a/build/definitions.mk b/build/definitions.mk index 2b515e927..e041cdbcd 100644 --- a/build/definitions.mk +++ b/build/definitions.mk @@ -91,7 +91,7 @@ VM = o/third_party/qemu/qemu-aarch64 HOSTS ?= pi silicon else ARCH = x86_64 -HOSTS ?= freebsd openbsd netbsd rhel7 rhel5 xnu win10 +HOSTS ?= freebsd openbsd openbsd73 netbsd rhel7 rhel5 xnu win10 endif ifeq ($(PREFIX),) @@ -241,7 +241,10 @@ DEFAULT_LDFLAGS = \ -nostdlib \ --gc-sections \ --build-id=none \ - --no-dynamic-linker #--cref -Map=$@.map + --no-dynamic-linker + +# # generate linker report files +# DEFAULT_LDFLAGS += --cref -Map=$@.map ifeq ($(ARCH), aarch64) DEFAULT_LDFLAGS += \ diff --git a/libc/calls/calls.mk b/libc/calls/calls.mk index bba78da4b..987f3d879 100644 --- a/libc/calls/calls.mk +++ b/libc/calls/calls.mk @@ -123,6 +123,7 @@ endif o/$(MODE)/libc/calls/execl.o \ o/$(MODE)/libc/calls/execle.o \ o/$(MODE)/libc/calls/execlp.o \ +o/$(MODE)/libc/calls/execvpe.o \ o/$(MODE)/libc/calls/statfs.o \ o/$(MODE)/libc/calls/fstatfs.o \ o/$(MODE)/libc/calls/execve-sysv.o \ diff --git a/libc/calls/copy_file_range.c b/libc/calls/copy_file_range.c index be6cb8164..cf20058e2 100644 --- a/libc/calls/copy_file_range.c +++ b/libc/calls/copy_file_range.c @@ -124,6 +124,6 @@ ssize_t copy_file_range(int infd, int64_t *opt_in_out_inoffset, int outfd, END_CANCELLATION_POINT; STRACE("copy_file_range(%d, %s, %d, %s, %'zu, %#x) → %'ld% m", infd, DescribeInOutInt64(rc, opt_in_out_inoffset), outfd, - DescribeInOutInt64(rc, opt_in_out_outoffset), uptobytes, flags); + DescribeInOutInt64(rc, opt_in_out_outoffset), uptobytes, flags, rc); return rc; } diff --git a/libc/calls/execlp.c b/libc/calls/execlp.c index a2d97538d..962f20f46 100644 --- a/libc/calls/execlp.c +++ b/libc/calls/execlp.c @@ -19,6 +19,7 @@ #include "libc/calls/calls.h" #include "libc/mem/alloca.h" #include "libc/runtime/runtime.h" +#include "libc/str/str.h" #include "libc/sysv/errfuns.h" /** @@ -40,10 +41,16 @@ int execlp(const char *prog, const char *arg, ... /*, NULL*/) { char **argv; va_list va, vb; char pathbuf[PATH_MAX]; - if (!(exe = commandv(prog, pathbuf, sizeof(pathbuf)))) return -1; + + // resolve path of executable + if (!(exe = commandv(prog, pathbuf, sizeof(pathbuf)))) { + return -1; + } + + // turn varargs into array va_copy(vb, va); va_start(va, arg); - for (i = 0; va_arg(va, const char *); ++i) donothing; + for (i = 0; va_arg(va, const char *); ++i) (void)0; va_end(va); argv = alloca((i + 2) * sizeof(char *)); va_start(vb, arg); @@ -52,5 +59,14 @@ int execlp(const char *prog, const char *arg, ... /*, NULL*/) { if (!(argv[i] = va_arg(vb, const char *))) break; } va_end(vb); + + // change argv[0] to resolved path if it's ambiguous + // otherwise the program won't have much luck finding itself + if (argv[0] && *prog != '/' && *exe == '/' && !strcmp(prog, argv[0])) { + argv[0] = exe; + } + + // execute program + // tail call shouldn't be possible return execv(exe, argv); } diff --git a/libc/calls/execve-sysv.c b/libc/calls/execve-sysv.c index b99b976a2..095a23161 100644 --- a/libc/calls/execve-sysv.c +++ b/libc/calls/execve-sysv.c @@ -85,9 +85,9 @@ int sys_execve(const char *prog, char *const argv[], char *const envp[]) { (CanExecute((ape = "/usr/bin/ape")) || CanExecute((ape = Join(firstnonnull(getenv("TMPDIR"), firstnonnull(getenv("HOME"), ".")), - ".ape", buf))) || - CanExecute( - (ape = Join(firstnonnull(getenv("HOME"), "."), ".ape", buf))))) { + ".ape-1.1", buf))) || + CanExecute((ape = Join(firstnonnull(getenv("HOME"), "."), ".ape-1.1", + buf))))) { shargs[0] = ape; shargs[1] = "-"; shargs[2] = prog; diff --git a/libc/calls/execvpe.c b/libc/calls/execvpe.c index 1b067cce1..891388f2e 100644 --- a/libc/calls/execvpe.c +++ b/libc/calls/execvpe.c @@ -19,7 +19,9 @@ #include "libc/calls/calls.h" #include "libc/dce.h" #include "libc/intrin/asan.internal.h" +#include "libc/mem/alloca.h" #include "libc/mem/mem.h" +#include "libc/str/str.h" #include "libc/sysv/errfuns.h" /** @@ -35,9 +37,32 @@ * @vforksafe */ int execvpe(const char *prog, char *const argv[], char *const *envp) { - char *exe; + size_t i; + char *exe, **argv2; char pathbuf[PATH_MAX]; - if (IsAsan() && !__asan_is_valid_str(prog)) return efault(); - if (!(exe = commandv(prog, pathbuf, sizeof(pathbuf)))) return -1; + + // validate memory + if (IsAsan() && + (!__asan_is_valid_str(prog) || !__asan_is_valid_strlist(argv))) { + return efault(); + } + + // resolve path of executable + if (!(exe = commandv(prog, pathbuf, sizeof(pathbuf)))) { + return -1; + } + + // change argv[0] to resolved path if it's ambiguous + // otherwise the program won't have much luck finding itself + if (argv[0] && *prog != '/' && *exe == '/' && !strcmp(prog, argv[0])) { + for (i = 0; argv[i++];) (void)0; + argv2 = alloca(i * sizeof(*argv)); + memcpy(argv2, argv, i * sizeof(*argv)); + argv2[0] = exe; + argv = argv2; + } + + // execute program + // tail call shouldn't be possible return execve(exe, argv, envp); } diff --git a/libc/calls/lseek.c b/libc/calls/lseek.c index ca6bbffa5..098fd3713 100644 --- a/libc/calls/lseek.c +++ b/libc/calls/lseek.c @@ -25,6 +25,7 @@ #include "libc/intrin/strace.internal.h" #include "libc/intrin/weaken.h" #include "libc/log/backtrace.internal.h" +#include "libc/sysv/errfuns.h" #include "libc/zipos/zipos.internal.h" /** @@ -79,12 +80,14 @@ int64_t lseek(int fd, int64_t offset, int whence) { if (fd < g_fds.n && g_fds.p[fd].kind == kFdZip) { rc = _weaken(__zipos_lseek)( (struct ZiposHandle *)(intptr_t)g_fds.p[fd].handle, offset, whence); - } else if (!IsWindows() && !IsOpenbsd() && !IsNetbsd()) { + } else if (IsLinux() || IsXnu() || IsFreebsd() || IsOpenbsd()) { rc = sys_lseek(fd, offset, whence, 0); - } else if (IsOpenbsd() || IsNetbsd()) { + } else if (IsNetbsd()) { rc = sys_lseek(fd, offset, offset, whence); - } else { + } else if (IsWindows()) { rc = sys_lseek_nt(fd, offset, whence); + } else { + rc = enosys(); } STRACE("lseek(%d, %'ld, %s) → %'ld% m", fd, offset, DescribeWhence(whence), rc); diff --git a/libc/crt/crt.S b/libc/crt/crt.S index 2a554ab4c..acd7c2000 100644 --- a/libc/crt/crt.S +++ b/libc/crt/crt.S @@ -22,6 +22,16 @@ #include "libc/runtime/internal.h" .section .start,"ax",@progbits +#if SupportsXnu() && defined(__x86_64__) +// XNU AMD64 Entrypoint +// +// @note Rosetta barely implements MAC_LC_UNIXTHREAD +// @note Rosetta sets many registers to weird values +_apple: mov $_HOSTXNU,%cl + jmp 1f + .endfn _apple,weak,hidden +#endif + // System Five userspace program entrypoint. // // @param rsp is [n,argv₀..argvₙ₋₁,0,envp₀..,0,auxv₀..,0,..] @@ -32,18 +42,6 @@ _start: #ifdef __x86_64__ -#if SupportsXnu() -// Hack for detecting M1 Rosetta environment. -// https://github.com/jart/cosmopolitan/issues/429#issuecomment-1166704377 - cmp $-1,%ebx - jne 0f - cmp $+1,%edx - jne 0f - mov $_HOSTXNU,%cl - xor %edi,%edi -0: -#endif - #if SupportsFreebsd() // detect free besiyata dishmaya test %rdi,%rdi @@ -54,7 +52,7 @@ _start: #endif // set operating system when already detected - mov %cl,__hostos(%rip) +1: mov %cl,__hostos(%rip) // get startup timestamp as early as possible // its used by --strace flag and kprintf() %T diff --git a/libc/sysv/calls/__sys_mmap.S b/libc/sysv/calls/__sys_mmap.S index b755700cb..13c9ea4cf 100644 --- a/libc/sysv/calls/__sys_mmap.S +++ b/libc/sysv/calls/__sys_mmap.S @@ -1,2 +1,2 @@ #include "libc/sysv/macros.internal.h" -.scall __sys_mmap,0x0c50c51dd20c5009,222,197,globl,hidden +.scall __sys_mmap,0x0c50311dd20c5009,222,197,globl,hidden diff --git a/libc/sysv/calls/sys_ftruncate.S b/libc/sysv/calls/sys_ftruncate.S index cfc07882a..72a0a5271 100644 --- a/libc/sysv/calls/sys_ftruncate.S +++ b/libc/sysv/calls/sys_ftruncate.S @@ -1,2 +1,2 @@ #include "libc/sysv/macros.internal.h" -.scall sys_ftruncate,0x8c98c99e028c984d,46,201,globl,hidden +.scall sys_ftruncate,0x8c98a89e028c984d,46,201,globl,hidden diff --git a/libc/sysv/calls/sys_lseek.S b/libc/sysv/calls/sys_lseek.S index 801f686de..be69cf837 100644 --- a/libc/sysv/calls/sys_lseek.S +++ b/libc/sysv/calls/sys_lseek.S @@ -1,2 +1,2 @@ #include "libc/sysv/macros.internal.h" -.scall sys_lseek,0x0c70c71de20c7008,62,199,globl,hidden +.scall sys_lseek,0x0c70a61de20c7008,62,199,globl,hidden diff --git a/libc/sysv/calls/sys_pread.S b/libc/sysv/calls/sys_pread.S index 3e5c635f7..76ab54a36 100644 --- a/libc/sysv/calls/sys_pread.S +++ b/libc/sysv/calls/sys_pread.S @@ -1,2 +1,2 @@ #include "libc/sysv/macros.internal.h" -.scall sys_pread,0x8ad8ad9db2899811,67,153,globl,hidden +.scall sys_pread,0x8ad8a99db2899811,67,153,globl,hidden diff --git a/libc/sysv/calls/sys_preadv.S b/libc/sysv/calls/sys_preadv.S index 5c8c1d5b9..4995aaed0 100644 --- a/libc/sysv/calls/sys_preadv.S +++ b/libc/sysv/calls/sys_preadv.S @@ -1,2 +1,2 @@ #include "libc/sysv/macros.internal.h" -.scall sys_preadv,0x92190b9212a1c927,69,540,globl,hidden +.scall sys_preadv,0x9218ab9212a1c927,69,540,globl,hidden diff --git a/libc/sysv/calls/sys_pwrite.S b/libc/sysv/calls/sys_pwrite.S index 7493fbecf..00d8fc5ca 100644 --- a/libc/sysv/calls/sys_pwrite.S +++ b/libc/sysv/calls/sys_pwrite.S @@ -1,2 +1,2 @@ #include "libc/sysv/macros.internal.h" -.scall sys_pwrite,0x8ae8ae9dc289a812,68,154,globl,hidden +.scall sys_pwrite,0x8ae8aa9dc289a812,68,154,globl,hidden diff --git a/libc/sysv/calls/sys_pwritev.S b/libc/sysv/calls/sys_pwritev.S index c4338ef62..c9692bf80 100644 --- a/libc/sysv/calls/sys_pwritev.S +++ b/libc/sysv/calls/sys_pwritev.S @@ -1,2 +1,2 @@ #include "libc/sysv/macros.internal.h" -.scall sys_pwritev,0x92290c9222a1d928,70,541,globl,hidden +.scall sys_pwritev,0x9228ac9222a1d928,70,541,globl,hidden diff --git a/libc/sysv/calls/sys_truncate.S b/libc/sysv/calls/sys_truncate.S index e75465ae2..4a3fcf6d0 100644 --- a/libc/sysv/calls/sys_truncate.S +++ b/libc/sysv/calls/sys_truncate.S @@ -1,2 +1,2 @@ #include "libc/sysv/macros.internal.h" -.scall sys_truncate,0x8c88c89df28c884c,45,200,globl,hidden +.scall sys_truncate,0x8c88a79df28c884c,45,200,globl,hidden diff --git a/libc/sysv/consts.sh b/libc/sysv/consts.sh index 963d90a25..3f48294f1 100755 --- a/libc/sysv/consts.sh +++ b/libc/sysv/consts.sh @@ -1706,16 +1706,16 @@ syscon nr __NR_fstat 0x0005 0x0050 0x2000153 0x0153 0x0227 0x0035 syscon nr __NR_lstat 0x0006 0x0fff 0x2000154 0x0154 0x0028 0x0028 0x1b9 0xfff syscon nr __NR_poll 0x0007 0x0fff 0x20000e6 0x00e6 0x00d1 0x00fc 0x0d1 0xfff syscon nr __NR_ppoll 0x010f 0x0049 0xfff 0xfff 0x0221 0x006d 0xfff 0xfff -syscon nr __NR_lseek 0x0008 0x003e 0x20000c7 0x00c7 0x01de 0x00c7 0x0c7 0xfff -syscon nr __NR_mmap 0x0009 0x00de 0x20000c5 0x00c5 0x01dd 0x00c5 0x0c5 0xfff +syscon nr __NR_lseek 0x0008 0x003e 0x20000c7 0x00c7 0x01de 0x00a6 0x0c7 0xfff # OpenBSD 7.3+ +syscon nr __NR_mmap 0x0009 0x00de 0x20000c5 0x00c5 0x01dd 0x0031 0x0c5 0xfff # OpenBSD 7.3+ syscon nr __NR_msync 0x001a 0x00e3 0x2000041 0x0041 0x0041 0x0100 0x115 0xfff syscon nr __NR_mprotect 0x000a 0x00e2 0x200004a 0x004a 0x004a 0x004a 0x04a 0xfff syscon nr __NR_munmap 0x000b 0x00d7 0x2000049 0x0049 0x0049 0x0049 0x049 0xfff syscon nr __NR_sigaction 0x000d 0x0086 0x200002e 0x002e 0x01a0 0x002e 0x154 0xfff syscon nr __NR_sigprocmask 0x000e 0x0087 0x2000149 0x0149 0x0154 0x0030 0x125 0xfff syscon nr __NR_ioctl 0x0010 0x001d 0x2000036 0x0036 0x0036 0x0036 0x036 0xfff -syscon nr __NR_pread 0x0011 0x0043 0x2000099 0x0099 0x01db 0x00ad 0x0ad 0xfff -syscon nr __NR_pwrite 0x0012 0x0044 0x200009a 0x009a 0x01dc 0x00ae 0x0ae 0xfff +syscon nr __NR_pread 0x0011 0x0043 0x2000099 0x0099 0x01db 0x00a9 0x0ad 0xfff # OpenBSD 7.3+ +syscon nr __NR_pwrite 0x0012 0x0044 0x200009a 0x009a 0x01dc 0x00aa 0x0ae 0xfff # OpenBSD 7.3+ syscon nr __NR_readv 0x0013 0x0041 0x2000078 0x0078 0x0078 0x0078 0x078 0xfff syscon nr __NR_writev 0x0014 0x0042 0x2000079 0x0079 0x0079 0x0079 0x079 0xfff syscon nr __NR_access 0x0015 0x0fff 0x2000021 0x0021 0x0021 0x0021 0x021 0xfff @@ -1779,8 +1779,8 @@ syscon nr __NR_fcntl 0x0048 0x0019 0x200005c 0x005c 0x005c 0x005c syscon nr __NR_flock 0x0049 0x0020 0x2000083 0x0083 0x0083 0x0083 0x083 0xfff syscon nr __NR_fsync 0x004a 0x0052 0x200005f 0x005f 0x005f 0x005f 0x05f 0xfff syscon nr __NR_fdatasync 0x004b 0x0053 0x20000bb 0x00bb 0x0226 0x005f 0x0f1 0xfff -syscon nr __NR_truncate 0x004c 0x002d 0x20000c8 0x00c8 0x01df 0x00c8 0x0c8 0xfff -syscon nr __NR_ftruncate 0x004d 0x002e 0x20000c9 0x00c9 0x01e0 0x00c9 0x0c9 0xfff +syscon nr __NR_truncate 0x004c 0x002d 0x20000c8 0x00c8 0x01df 0x00a7 0x0c8 0xfff # OpenBSD 7.3+ +syscon nr __NR_ftruncate 0x004d 0x002e 0x20000c9 0x00c9 0x01e0 0x00a8 0x0c9 0xfff # OpenBSD 7.3+ syscon nr __NR_getcwd 0x004f 0x0011 0xfff 0xfff 0x0146 0x0130 0x128 0xfff syscon nr __NR_chdir 0x0050 0x0031 0x200000c 0x000c 0x000c 0x000c 0x00c 0xfff syscon nr __NR_fchdir 0x0051 0x0032 0x200000d 0x000d 0x000d 0x000d 0x00d 0xfff @@ -1964,8 +1964,8 @@ syscon nr __NR_sync_file_range 0x0115 0x0054 0xfff 0xfff 0xfff 0xfff syscon nr __NR_vmsplice 0x0116 0x004b 0xfff 0xfff 0xfff 0xfff 0xfff 0xfff syscon nr __NR_migrate_pages 0x0100 0x00ee 0xfff 0xfff 0xfff 0xfff 0xfff 0xfff syscon nr __NR_move_pages 0x0117 0x00ef 0xfff 0xfff 0xfff 0xfff 0xfff 0xfff -syscon nr __NR_preadv 0x0127 0x0045 0xfff 0xfff 0x0121 0x010b 0x121 0xfff -syscon nr __NR_pwritev 0x0128 0x0046 0xfff 0xfff 0x0122 0x010c 0x122 0xfff +syscon nr __NR_preadv 0x0127 0x0045 0xfff 0xfff 0x0121 0x00ab 0x121 0xfff # OpenBSD 7.3+ +syscon nr __NR_pwritev 0x0128 0x0046 0xfff 0xfff 0x0122 0x00aa 0x122 0xfff # OpenBSD 7.3+ syscon nr __NR_utimensat 0x0118 0x0058 0xfff 0xfff 0x0223 0x0054 0x1d3 0xfff syscon nr __NR_fallocate 0x011d 0x002f 0xfff 0xfff 0xfff 0xfff 0xfff 0xfff syscon nr __NR_posix_fallocate 0xfff 0xfff 0xfff 0xfff 0x0212 0xfff 0x1df 0xfff diff --git a/libc/sysv/consts/__NR_ftruncate.S b/libc/sysv/consts/__NR_ftruncate.S index d8087ca18..87e88ccfa 100644 --- a/libc/sysv/consts/__NR_ftruncate.S +++ b/libc/sysv/consts/__NR_ftruncate.S @@ -1,2 +1,2 @@ #include "libc/sysv/consts/syscon.internal.h" -.syscon nr,__NR_ftruncate,0x004d,0x002e,0x20000c9,0x00c9,0x01e0,0x00c9,0x0c9,0xfff +.syscon nr,__NR_ftruncate,0x004d,0x002e,0x20000c9,0x00c9,0x01e0,0x00a8,0x0c9,0xfff diff --git a/libc/sysv/consts/__NR_lseek.S b/libc/sysv/consts/__NR_lseek.S index 00860cbfa..ae5351fff 100644 --- a/libc/sysv/consts/__NR_lseek.S +++ b/libc/sysv/consts/__NR_lseek.S @@ -1,2 +1,2 @@ #include "libc/sysv/consts/syscon.internal.h" -.syscon nr,__NR_lseek,0x0008,0x003e,0x20000c7,0x00c7,0x01de,0x00c7,0x0c7,0xfff +.syscon nr,__NR_lseek,0x0008,0x003e,0x20000c7,0x00c7,0x01de,0x00a6,0x0c7,0xfff diff --git a/libc/sysv/consts/__NR_mmap.S b/libc/sysv/consts/__NR_mmap.S index 2e3c8bc75..800992f3a 100644 --- a/libc/sysv/consts/__NR_mmap.S +++ b/libc/sysv/consts/__NR_mmap.S @@ -1,2 +1,2 @@ #include "libc/sysv/consts/syscon.internal.h" -.syscon nr,__NR_mmap,0x0009,0x00de,0x20000c5,0x00c5,0x01dd,0x00c5,0x0c5,0xfff +.syscon nr,__NR_mmap,0x0009,0x00de,0x20000c5,0x00c5,0x01dd,0x0031,0x0c5,0xfff diff --git a/libc/sysv/consts/__NR_pread.S b/libc/sysv/consts/__NR_pread.S index 5d071aac8..ddf74c805 100644 --- a/libc/sysv/consts/__NR_pread.S +++ b/libc/sysv/consts/__NR_pread.S @@ -1,2 +1,2 @@ #include "libc/sysv/consts/syscon.internal.h" -.syscon nr,__NR_pread,0x0011,0x0043,0x2000099,0x0099,0x01db,0x00ad,0x0ad,0xfff +.syscon nr,__NR_pread,0x0011,0x0043,0x2000099,0x0099,0x01db,0x00a9,0x0ad,0xfff diff --git a/libc/sysv/consts/__NR_preadv.S b/libc/sysv/consts/__NR_preadv.S index 77f9e97ab..c911ba8ed 100644 --- a/libc/sysv/consts/__NR_preadv.S +++ b/libc/sysv/consts/__NR_preadv.S @@ -1,2 +1,2 @@ #include "libc/sysv/consts/syscon.internal.h" -.syscon nr,__NR_preadv,0x0127,0x0045,0xfff,0xfff,0x0121,0x010b,0x121,0xfff +.syscon nr,__NR_preadv,0x0127,0x0045,0xfff,0xfff,0x0121,0x00ab,0x121,0xfff diff --git a/libc/sysv/consts/__NR_pwrite.S b/libc/sysv/consts/__NR_pwrite.S index 1d9ca0b36..90cd9021b 100644 --- a/libc/sysv/consts/__NR_pwrite.S +++ b/libc/sysv/consts/__NR_pwrite.S @@ -1,2 +1,2 @@ #include "libc/sysv/consts/syscon.internal.h" -.syscon nr,__NR_pwrite,0x0012,0x0044,0x200009a,0x009a,0x01dc,0x00ae,0x0ae,0xfff +.syscon nr,__NR_pwrite,0x0012,0x0044,0x200009a,0x009a,0x01dc,0x00aa,0x0ae,0xfff diff --git a/libc/sysv/consts/__NR_pwritev.S b/libc/sysv/consts/__NR_pwritev.S index 19cae2166..7e9a5405c 100644 --- a/libc/sysv/consts/__NR_pwritev.S +++ b/libc/sysv/consts/__NR_pwritev.S @@ -1,2 +1,2 @@ #include "libc/sysv/consts/syscon.internal.h" -.syscon nr,__NR_pwritev,0x0128,0x0046,0xfff,0xfff,0x0122,0x010c,0x122,0xfff +.syscon nr,__NR_pwritev,0x0128,0x0046,0xfff,0xfff,0x0122,0x00aa,0x122,0xfff diff --git a/libc/sysv/consts/__NR_truncate.S b/libc/sysv/consts/__NR_truncate.S index 856786287..cfd85a49c 100644 --- a/libc/sysv/consts/__NR_truncate.S +++ b/libc/sysv/consts/__NR_truncate.S @@ -1,2 +1,2 @@ #include "libc/sysv/consts/syscon.internal.h" -.syscon nr,__NR_truncate,0x004c,0x002d,0x20000c8,0x00c8,0x01df,0x00c8,0x0c8,0xfff +.syscon nr,__NR_truncate,0x004c,0x002d,0x20000c8,0x00c8,0x01df,0x00a7,0x0c8,0xfff diff --git a/libc/sysv/macros.internal.h b/libc/sysv/macros.internal.h index ed3f80ce0..20c53f379 100644 --- a/libc/sysv/macros.internal.h +++ b/libc/sysv/macros.internal.h @@ -50,6 +50,8 @@ ldr w9,[x9,#:lo12:__hostos] tbz x9,#3,1f // !IsXnu() mov x16,#\arm_xnu // apple ordinal + mov x9,#0 // clear carry flag + adds x9,x9,#0 // clear carry flag svc #0 // issue system call bcs 1f b _sysret diff --git a/libc/sysv/syscalls.sh b/libc/sysv/syscalls.sh index c1620fed3..90c7253b1 100755 --- a/libc/sysv/syscalls.sh +++ b/libc/sysv/syscalls.sh @@ -42,8 +42,8 @@ scall __sys_fstat 0x1b80352272153005 0x050 globl hidden # needs __stat2linux() scall __sys_lstat 0x1b90280282154006 0xfff globl hidden # needs __stat2linux(); blocked on Android scall __sys_poll 0x8d18fc8d128e6807 0xfff globl hidden scall sys_ppoll 0xfff86da21ffff90f 0x049 globl hidden # consider INTON/INTOFF tutorial in examples/unbourne.c -scall sys_lseek 0x0c70c71de20c7008 0x03e globl hidden # netbsd+openbsd:evilpad -scall __sys_mmap 0x0c50c51dd20c5009 0x0de globl hidden # netbsd+openbsd:pad +scall sys_lseek 0x0c70a61de20c7008 0x03e globl hidden # netbsd:evilpad, OpenBSD 7.3+ +scall __sys_mmap 0x0c50311dd20c5009 0x0de globl hidden # netbsd:pad, OpenBSD 7.3+ scall sys_msync 0x915900841284181a 0x0e3 globl hidden scall sys_mprotect 0x04a04a04a204a00a 0x0e2 globl hidden scall __sys_munmap 0x049049049204900b 0x0d7 globl hidden @@ -51,8 +51,8 @@ scall sys_sigaction 0x15402e1a0202e00d 0x086 globl hidden # rt_sigaction on Lun scall __sys_sigprocmask 0x125030154214900e 0x087 globl hidden # a.k.a. rt_sigprocmask, openbsd:byvalue, a.k.a. pthread_sigmask scall sys_ioctl 0x0360360362036010 0x01d globl hidden scall sys_ioctl_cp 0x8368368362836810 0x01d globl hidden # intended for TCSBRK -scall sys_pread 0x8ad8ad9db2899811 0x043 globl hidden # a.k.a. pread64; netbsd+openbsd:pad -scall sys_pwrite 0x8ae8ae9dc289a812 0x044 globl hidden # a.k.a. pwrite64; netbsd+openbsd:pad +scall sys_pread 0x8ad8a99db2899811 0x043 globl hidden # a.k.a. pread64; netbsd:pad, OpenBSD 7.3+ +scall sys_pwrite 0x8ae8aa9dc289a812 0x044 globl hidden # a.k.a. pwrite64; netbsd:pad, OpenBSD 7.3+ scall sys_readv 0x8788788782878813 0x041 globl hidden scall sys_writev 0x8798798792879814 0x042 globl hidden scall __sys_pipe 0x02a10721e202a016 0x03b globl hidden # NOTE: pipe2() on FreeBSD and Linux Aarch64; XNU is pipe(void)→eax:edx @@ -118,8 +118,8 @@ scall __sys_fcntl_cp 0x85c85c85c285c848 0x019 globl hidden # intended for F_SET scall sys_flock 0x8838838832883849 0x020 globl hidden scall sys_fsync 0x85f85f85f285f84a 0x052 globl hidden scall sys_fdatasync 0x8f185fa2628bb84b 0x053 globl hidden # fsync() on openbsd -scall sys_truncate 0x8c88c89df28c884c 0x02d globl hidden # netbsd+openbsd:pad -scall sys_ftruncate 0x8c98c99e028c984d 0x02e globl hidden # netbsd+openbsd:pad +scall sys_truncate 0x8c88a79df28c884c 0x02d globl hidden # netbsd:pad, OpenBSD 7.3+ +scall sys_ftruncate 0x8c98a89e028c984d 0x02e globl hidden # netbsd:pad, OpenBSD 7.3+ scall sys_getcwd 0x128130146ffff04f 0x011 globl hidden scall sys_chdir 0x00c00c00c200c050 0x031 globl hidden scall sys_fchdir 0x00d00d00d200d051 0x032 globl hidden @@ -296,8 +296,8 @@ scall sys_vmsplice 0xfffffffffffff116 0x04b globl hidden scall sys_migrate_pages 0xfffffffffffff100 0x0ee globl # no wrapper; numa numa yay scall sys_move_pages 0xfffffffffffff117 0x0ef globl # no wrapper; NOTE: We view Red Hat versions as "epochs" for all distros. #──────────────────────RHEL 5.0 LIMIT──────────────────────────────── # ←┬─ last distro with gplv2 licensed compiler c. 2007 -scall sys_preadv 0x92190b9212a1c927 0x045 globl hidden # ├─ last distro with system v shell script init -scall sys_pwritev 0x92290c9222a1d928 0x046 globl hidden # ├─ rob landley unleashes busybox gpl lawsuits +scall sys_preadv 0x9218ab9212a1c927 0x045 globl hidden # ├─ last distro with system v shell script init +scall sys_pwritev 0x9228ac9222a1d928 0x046 globl hidden # ├─ rob landley unleashes busybox gpl lawsuits scall __sys_utimensat 0x1d3054223ffff118 0x058 globl hidden # ├─ python modules need this due to pep513 scall sys_fallocate 0xfffffffffffff91d 0x02f globl # ├─ end of life 2020-11-30 (extended) scall sys_posix_fallocate 0x9dffffa12fffffff 0xfff globl hidden # └─ cosmopolitan supports rhel5+ @@ -774,7 +774,7 @@ scall sys_rtprio_thread 0xffffff1d2fffffff 0xfff globl # no wrapper #scall getrtable 0xfff137ffffffffff 0xfff globl #scall getthrid 0xfff12bffffffffff 0xfff globl #scall kbind 0xfff056ffffffffff 0xfff globl -#scall mquery 0xfff11effffffffff 0xfff globl # openbsd:pad +#scall mquery 0xfff11effffffffff 0xfff globl # openbsd:pad (todo) #scall obreak 0x011011ffffffffff 0xfff globl #scall sendsyslog 0xfff070ffffffffff 0xfff globl #scall setrtable 0xfff136ffffffffff 0xfff globl diff --git a/libc/testlib/showerror.c b/libc/testlib/showerror.c index 42a894edd..5edb74e41 100644 --- a/libc/testlib/showerror.c +++ b/libc/testlib/showerror.c @@ -16,6 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/assert.h" #include "libc/calls/calls.h" #include "libc/errno.h" #include "libc/fmt/fmt.h" @@ -49,9 +50,9 @@ void testlib_showerror(const char *file, int line, const char *func, "\t\t got %s\n" "\t%s%s\n" "\t%s%s\n", - RED2, UNBOLD, BLUE1, file, (long)line, RESET, method, func, - g_fixturename, hostname, getpid(), gettid(), code, v1, symbol, v2, - SUBTLE, strerror(errno), GetProgramExecutableName(), RESET); + RED2, UNBOLD, BLUE1, file, line, RESET, method, func, g_fixturename, + hostname, getpid(), gettid(), code, v1, symbol, v2, SUBTLE, + strerror(errno), GetProgramExecutableName(), RESET); free(v1); free(v2); } diff --git a/libc/testlib/testmain.c b/libc/testlib/testmain.c index e6dbc0582..75f92c486 100644 --- a/libc/testlib/testmain.c +++ b/libc/testlib/testmain.c @@ -16,6 +16,8 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ +#include "ape/sections.internal.h" +#include "libc/assert.h" #include "libc/calls/calls.h" #include "libc/calls/struct/rlimit.h" #include "libc/calls/struct/sigaction.h" @@ -49,6 +51,7 @@ #include "libc/sysv/consts/f.h" #include "libc/sysv/consts/o.h" #include "libc/sysv/consts/poll.h" +#include "libc/sysv/consts/prot.h" #include "libc/sysv/consts/rlimit.h" #include "libc/sysv/consts/sig.h" #include "libc/testlib/testlib.h" diff --git a/test/libc/calls/write_test.c b/test/libc/calls/write_test.c index aaad1fb68..f1f4c20c3 100644 --- a/test/libc/calls/write_test.c +++ b/test/libc/calls/write_test.c @@ -18,6 +18,7 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/assert.h" #include "libc/calls/calls.h" +#include "libc/calls/cp.internal.h" #include "libc/calls/internal.h" #include "libc/calls/struct/iovec.h" #include "libc/calls/struct/iovec.internal.h" @@ -100,8 +101,10 @@ BENCH(write, bench) { ASSERT_SYS(0, 3, open("/dev/null", O_WRONLY)); EZBENCH2("write", donothing, write(3, "hello", 5)); EZBENCH2("writev", donothing, writev(3, &(struct iovec){"hello", 5}, 1)); + BEGIN_CANCELLATION_POINT; EZBENCH2("sys_write", donothing, sys_write(3, "hello", 5)); EZBENCH2("sys_writev", donothing, sys_writev(3, &(struct iovec){"hello", 5}, 1)); + END_CANCELLATION_POINT; ASSERT_SYS(0, 0, close(3)); } diff --git a/test/libc/release/test.mk b/test/libc/release/test.mk index 986a79f09..9db6fe7d3 100644 --- a/test/libc/release/test.mk +++ b/test/libc/release/test.mk @@ -35,8 +35,11 @@ o/$(MODE)/test/libc/release/smoke.o: \ -Os \ -fno-pie \ -nostdinc \ + -Wl,--gc-sections \ -fno-omit-frame-pointer \ -include o/cosmopolitan.h \ + -Wl,-z,max-page-size=0x1000 \ + -Wl,-z,common-page-size=0x1000 \ $< o/$(MODE)/test/libc/release/smoke.com.dbg: \ @@ -49,6 +52,9 @@ o/$(MODE)/test/libc/release/smoke.com.dbg: \ -static \ -no-pie \ -nostdlib \ + --gc-sections \ + -z max-page-size=0x1000 \ + -z common-page-size=0x1000 \ -T o/$(MODE)/ape/public/ape.lds \ o/$(MODE)/test/libc/release/smoke.o \ o/$(MODE)/libc/crt/crt.o \ @@ -66,6 +72,9 @@ o/$(MODE)/test/libc/release/smoke-nms.com.dbg: \ -static \ -no-pie \ -nostdlib \ + --gc-sections \ + -z max-page-size=0x1000 \ + -z common-page-size=0x1000 \ -T o/$(MODE)/ape/public/ape.lds \ o/$(MODE)/test/libc/release/smoke.o \ o/$(MODE)/libc/crt/crt.o \ @@ -84,6 +93,9 @@ o/$(MODE)/test/libc/release/smoke-chibicc.com.dbg: \ -static \ -no-pie \ -nostdlib \ + --gc-sections \ + -z max-page-size=0x1000 \ + -z common-page-size=0x1000 \ -T o/$(MODE)/ape/public/ape.lds \ o/$(MODE)/test/libc/release/smoke-chibicc.o \ o/$(MODE)/libc/crt/crt.o \ @@ -121,6 +133,9 @@ o/$(MODE)/test/libc/release/smokecxx.com.dbg: \ -static \ -no-pie \ -nostdlib \ + --gc-sections \ + -z max-page-size=0x1000 \ + -z common-page-size=0x1000 \ -T o/$(MODE)/ape/public/ape.lds \ o/$(MODE)/test/libc/release/smokecxx.o \ o/$(MODE)/libc/crt/crt.o \ @@ -138,7 +153,10 @@ o/$(MODE)/test/libc/release/smokecxx.o: \ -Os \ -fno-pie \ -nostdinc \ + -Wl,--gc-sections \ -fno-omit-frame-pointer \ + -z max-page-size=0x1000 \ + -z common-page-size=0x1000 \ -include o/cosmopolitan.h \ test/libc/release/smokecxx.cc @@ -152,6 +170,9 @@ o/$(MODE)/test/libc/release/smokeansi.com.dbg: \ -static \ -no-pie \ -nostdlib \ + --gc-sections \ + -z max-page-size=0x1000 \ + -z common-page-size=0x1000 \ -T o/$(MODE)/ape/public/ape.lds \ o/$(MODE)/test/libc/release/smokeansi.o \ o/$(MODE)/libc/crt/crt.o \ @@ -170,8 +191,11 @@ o/$(MODE)/test/libc/release/smokeansi.o: \ -static \ -fno-pie \ -nostdinc \ + -Wl,--gc-sections \ -fno-omit-frame-pointer \ -include o/cosmopolitan.h \ + -Wl,-z,max-page-size=0x1000 \ + -Wl,-z,common-page-size=0x1000 \ test/libc/release/smoke.c # TODO(jart): Rewrite these shell scripts as C code. diff --git a/tool/emacs/cosmo-c-builtins.el b/tool/emacs/cosmo-c-builtins.el index 7612015cb..d70bed890 100644 --- a/tool/emacs/cosmo-c-builtins.el +++ b/tool/emacs/cosmo-c-builtins.el @@ -45,7 +45,10 @@ '("__builtin_va_list")) (gcc-builtin-functions - '("__builtin_add_overflow" + '("__builtin_va_start" + "__builtin_va_arg" + "__builtin_va_end" + "__builtin_add_overflow" "__builtin_add_overflow_p" "__builtin_alloc" "__builtin_alloca"