boot2

Playing with the boostrap
git clone https://git.ryansepassi.com/git/boot2.git
Log | Files | Refs

commit 380392d8175de35bb9df00c78c176708a7be61dd
parent 5804adb9c84acf6eb8e80dc06626dd3354df8ce5
Author: Ryan Sepassi <rsepassi@gmail.com>
Date:   Tue, 21 Apr 2026 08:59:08 -0700

rm kaem

Diffstat:
MREADME.md | 5++---
Dsrc/kaem-minimal.M1 | 1313-------------------------------------------------------------------------------
Dtests/kaem.run | 3---
3 files changed, 2 insertions(+), 1319 deletions(-)

diff --git a/README.md b/README.md @@ -17,11 +17,10 @@ C source. ## Layout ``` -docs/ design docs (PLAN, SEED, P1, C1, LISP) -src/ real programs (lisp.M1, kaem-minimal.M1) + p1_gen.py +docs/ design docs (PLAN, SEED, P1, LISP) +src/ real programs (lisp.M1) + p1_gen.py tests/ smoke programs (hello.M1, demo.M1) + fixtures lisp/ lisp test fixtures (*.scm + *.expected) - kaem.run smoke input for kaem-minimal bootstrap.sh hex0-seed → M0/hex2-0/catm toolchain build populate-upstream.sh host-side copy of upstream seeds + sources into build/upstream/ lint.sh M1 undefined-token guard diff --git a/src/kaem-minimal.M1 b/src/kaem-minimal.M1 @@ -1,1313 +0,0 @@ -## kaem-minimal.M1 — P1 port of stage0-posix's kaem-minimal. -## -## Line-oriented shell: for each non-blank, non-comment line, tokenize -## and clone+execve+wait4. Aborts on non-zero child status. -## -## Grammar (matches stage0-posix/High Level Prototypes/kaem-minimal.c): -## ' ' / '\t' → token separator -## '\n' → end of command -## '#' → rest of line is a comment -## '"..."' → raw string; newlines, #, spaces kept literal -## '\\<c>' → drops backslash and the following char, ends token -## -## Usage: -## kaem-minimal [script] (default: kaem.run) -## -## Deviations from full kaem: no ${VAR} expansion, no VAR=value envars, -## no PATH search, no builtins (cd/echo/set/exec/if/…), no pipes, no -## redirection. "Read a line, exec it, check status" — enough to drive -## the P1 build pipeline in place of `sh -ec '…'`. -## -## Syscall surface (8): read, write, close, exit, openat, clone, execve, -## waitid. Uses openat(AT_FDCWD, …) because `open` is amd64-only; uses -## clone(SIGCHLD) instead of fork and waitid instead of wait4 because -## aarch64/riscv64 don't expose fork/wait4 in the asm-generic table. -## -## Buffers live in the single PT_LOAD segment (flags=7 = RWX), zero- -## filled at build time — the ELF loader maps them into writable pages. - - -## ---- _start ---------------------------------------------------------- -## argv/envp walk on entry: kernel layout at sp is -## [sp+0] argc -## [sp+8..] argv[0..argc-1], then NULL -## [after] envp[0..k-1], then NULL -## So envp = sp + 8*(argc+2). -:_start - P1_MOV_R3_SP - P1_LD_R0_R3_0 ## r0 = argc - - ## envp = sp + 8*(argc+2). Save for execve later. - P1_ADDI_R1_R0_2 - P1_SHLI_R1_R1_3 - P1_ADD_R2_R3_R1 ## r2 = envp pointer - P1_LI_R1 - &envp_ptr - P1_ST_R2_R1_0 - - ## filename = argc>=2 ? argv[1] : "kaem.run" - P1_LI_R1 - '02000000' - P1_LI_BR - &_start_default_script - P1_BLT_R0_R1 ## argc < 2 → default - P1_LD_R2_R3_16 ## r2 = argv[1] - P1_LI_BR - &_start_open_script - P1_B - -:_start_default_script - P1_LI_R2 - &default_filename - -:_start_open_script - ## openat(AT_FDCWD=-100, path=r2, flags=O_RDONLY=0, mode=0) - ## LI zero-extends, but the kernel reads dirfd as int32 — low 32 - ## bits 0xFFFFFF9C decode as -100 on all three arches. - P1_LI_R0 - SYS_OPENAT - P1_LI_R1 - '9CFFFFFF' - P1_LI_R3 - '00000000' - P1_LI_R4 - '00000000' - P1_SYSCALL ## r0 = fd or <0 errno - - ## fd < 0 → openfail - P1_LI_R1 - '00000000' - P1_LI_BR - &_start_openfail - P1_BLT_R0_R1 - - ## Slurp the whole file into read_buf. - P1_LI_R1 - &script_fd - P1_ST_R0_R1_0 ## stash fd so we can close after read - - P1_MOV_R1_R0 ## r1 = fd - P1_LI_R2 - &read_buf ## r2 = buf - P1_LI_R3 - &read_buf_end - P1_SUB_R3_R3_R2 ## r3 = capacity - P1_LI_BR - &read_file_all - P1_CALL ## r0 = bytes_read - - P1_LI_R1 - &src_len - P1_ST_R0_R1_0 - P1_LI_R1 - &src_pos - P1_LI_R2 - '00000000' - P1_ST_R2_R1_0 - - ## close(fd) - P1_LI_R0 - SYS_CLOSE - P1_LI_R1 - &script_fd - P1_LD_R1_R1_0 - P1_SYSCALL - -:_start_loop - ## Per-command reset. - P1_LI_R1 - &token_count - P1_LI_R2 - '00000000' - P1_ST_R2_R1_0 - P1_LI_R1 - &token_arena_next - P1_LI_R2 - &token_arena - P1_ST_R2_R1_0 - P1_LI_R1 - &current_token_ptr - P1_LI_R2 - '00000000' - P1_ST_R2_R1_0 - - ## Peek first; EOF → done. - P1_LI_BR - &peek_char - P1_CALL - P1_LI_R1 - '00000000' - P1_ADDI_R1_R1_NEG1 - P1_LI_BR - &_start_done - P1_BEQ_R0_R1 - - ## Tokenize one logical command (until '\n' or EOF). - P1_LI_BR - &collect_command - P1_CALL - - ## No tokens → blank or all-comment line; skip spawn. - P1_LI_R1 - &token_count - P1_LD_R1_R1_0 - P1_LI_R2 - '00000000' - P1_LI_BR - &_start_loop - P1_BEQ_R1_R2 - - P1_LI_BR - &emit_verbose - P1_CALL - - P1_LI_BR - &spawn_and_wait - P1_CALL - - P1_LI_BR - &_start_loop - P1_B - -:_start_done - P1_LI_R0 - SYS_EXIT - P1_LI_R1 - '00000000' - P1_SYSCALL - -:_start_openfail - P1_LI_R0 - SYS_WRITE - P1_LI_R1 - '02000000' - P1_LI_R2 - &msg_openfail - P1_LI_R3 - &msg_openfail_end - P1_SUB_R3_R3_R2 - P1_SYSCALL - P1_LI_R0 - SYS_EXIT - P1_LI_R1 - '01000000' - P1_SYSCALL - - -## ---- read_file_all(r1=fd, r2=buf, r3=cap) -> r0 = total_bytes ------ -## Read loop. r4-r7 are callee-saved AND preserved across SYSCALL, so -## we can park state there across each read() call. No PROLOGUE needed: -## we only issue syscalls, never CALL. -:read_file_all - P1_MOV_R4_R1 ## r4 = fd - P1_MOV_R5_R2 ## r5 = cur buf ptr - P1_MOV_R6_R3 ## r6 = remaining capacity - P1_LI_R7 - '00000000' ## r7 = total_read - -:read_file_all_loop - ## Capacity exhausted → stop (caller already sized generously). - P1_LI_R1 - '00000000' - P1_LI_BR - &read_file_all_done - P1_BEQ_R6_R1 - - P1_LI_R0 - SYS_READ - P1_MOV_R1_R4 - P1_MOV_R2_R5 - P1_MOV_R3_R6 - P1_SYSCALL ## r0 = n (0=EOF, <0=err) - - ## n <= 0 → done. Check < 0 first, then == 0. - P1_LI_R1 - '00000000' - P1_LI_BR - &read_file_all_done - P1_BLT_R0_R1 - P1_LI_BR - &read_file_all_done - P1_BEQ_R0_R1 - - P1_ADD_R5_R5_R0 ## buf += n - P1_SUB_R6_R6_R0 ## cap -= n - P1_ADD_R7_R7_R0 ## total += n - P1_LI_BR - &read_file_all_loop - P1_B - -:read_file_all_done - P1_MOV_R0_R7 - P1_RET - - -## ---- peek_char() -> r0 = byte (0..255) or -1 on EOF ---------------- -:peek_char - P1_LI_R1 - &src_pos - P1_LD_R1_R1_0 ## r1 = pos - P1_LI_R2 - &src_len - P1_LD_R2_R2_0 ## r2 = len - P1_LI_BR - &peek_char_inb - P1_BLT_R1_R2 - P1_LI_R0 - '00000000' - P1_ADDI_R0_R0_NEG1 - P1_RET -:peek_char_inb - P1_LI_R2 - &read_buf - P1_ADD_R2_R2_R1 ## r2 = &read_buf[pos] - P1_LB_R0_R2_0 - P1_RET - - -## ---- advance_char() — consume current char ------------------------ -:advance_char - P1_LI_R1 - &src_pos - P1_LD_R2_R1_0 - P1_ADDI_R2_R2_1 - P1_ST_R2_R1_0 - P1_RET - - -## ---- arena_putc(r1 = byte) ---------------------------------------- -## Append one byte to the token_arena at token_arena_next, bump the -## cursor. Opens a new token (sets current_token_ptr) if none is open. -:arena_putc - P1_LI_R2 - &current_token_ptr - P1_LD_R3_R2_0 ## r3 = current_token_ptr - P1_LI_R0 - '00000000' - P1_LI_BR - &arena_putc_have_open - P1_BNE_R3_R0 - ## No open token — open one: current_token_ptr = token_arena_next. - P1_LI_R3 - &token_arena_next - P1_LD_R3_R3_0 - P1_ST_R3_R2_0 - -:arena_putc_have_open - P1_LI_R2 - &token_arena_next - P1_LD_R3_R2_0 ## r3 = cursor - P1_SB_R1_R3_0 ## *cursor = byte - P1_ADDI_R3_R3_1 - P1_ST_R3_R2_0 ## cursor++ - P1_RET - - -## ---- end_token() — close the currently open token if any --------- -## Null-terminates the token in arena, records its start ptr in -## argv_out[token_count], bumps token_count, clears current_token_ptr. -## No-op if no token is open (e.g. trailing separator). -:end_token - P1_LI_R1 - &current_token_ptr - P1_LD_R2_R1_0 ## r2 = start ptr (or 0) - P1_LI_R3 - '00000000' - P1_LI_BR - &end_token_none - P1_BEQ_R2_R3 - - ## Write NUL to arena[cursor], bump cursor. - P1_LI_R1 - &token_arena_next - P1_LD_R3_R1_0 ## r3 = cursor - P1_LI_R0 - '00000000' - P1_SB_R0_R3_0 - P1_ADDI_R3_R3_1 - P1_ST_R3_R1_0 - - ## argv_out[token_count] = start; token_count++. - P1_LI_R1 - &token_count - P1_LD_R3_R1_0 ## r3 = count - P1_SHLI_R0_R3_3 ## r0 = count*8 - P1_LI_R1 - &argv_out - P1_ADD_R1_R1_R0 ## r1 = &argv_out[count] - P1_ST_R2_R1_0 ## store start ptr - - P1_LI_R1 - &token_count - P1_LD_R3_R1_0 - P1_ADDI_R3_R3_1 - P1_ST_R3_R1_0 ## count++ - - ## current_token_ptr = 0. - P1_LI_R1 - &current_token_ptr - P1_LI_R2 - '00000000' - P1_ST_R2_R1_0 - -:end_token_none - P1_RET - - -## ---- collect_token() — read a plain word into the arena ---------- -## Called when the peek-char is a non-space, non-special, non-quote -## byte. Consumes chars until a separator/newline/EOF/#/"/\\ and -## leaves the token open (caller invokes end_token at the dispatch). -:collect_token - P1_PROLOGUE -:collect_token_loop - P1_LI_BR - &peek_char - P1_CALL ## r0 = c - - ## EOF → end of token. - P1_LI_R1 - '00000000' - P1_ADDI_R1_R1_NEG1 - P1_LI_BR - &collect_token_done - P1_BEQ_R0_R1 - ## '\n' - P1_LI_R1 - '0A000000' - P1_LI_BR - &collect_token_done - P1_BEQ_R0_R1 - ## ' ' - P1_LI_R1 - '20000000' - P1_LI_BR - &collect_token_done - P1_BEQ_R0_R1 - ## '\t' - P1_LI_R1 - '09000000' - P1_LI_BR - &collect_token_done - P1_BEQ_R0_R1 - ## '#' — comment starts mid-token too (kaem-minimal semantics). - P1_LI_R1 - '23000000' - P1_LI_BR - &collect_token_done - P1_BEQ_R0_R1 - ## '"' — string terminates plain token. - P1_LI_R1 - '22000000' - P1_LI_BR - &collect_token_done - P1_BEQ_R0_R1 - ## '\\' — also terminates plain token (collect_command handles the - ## skip+drop outside). - P1_LI_R1 - '5C000000' - P1_LI_BR - &collect_token_done - P1_BEQ_R0_R1 - - ## Otherwise: copy into arena, consume, continue. - P1_MOV_R1_R0 - P1_LI_BR - &arena_putc - P1_CALL - P1_LI_BR - &advance_char - P1_CALL - P1_LI_BR - &collect_token_loop - P1_B - -:collect_token_done - P1_EPILOGUE - P1_RET - - -## ---- collect_string() — read a "..." raw literal ----------------- -## Enters with the opening '"' still under peek. Consumes it, then -## copies bytes verbatim into the arena until the closing '"'. The -## closing quote is consumed. Leaves the token open. -:collect_string - P1_PROLOGUE - ## eat opening '"'. - P1_LI_BR - &advance_char - P1_CALL - - ## Ensure the token is opened even for empty strings "" — call - ## arena_putc with 0 bytes wouldn't open. Force-open by writing - ## then rolling back: simpler path is a direct "open if closed" - ## flag, but arena_putc already opens on first call. For empty - ## strings we rely on end_token() to skip if no token is open - ## (kaem-minimal behavior: empty "" emits no token). - -:collect_string_loop - P1_LI_BR - &peek_char - P1_CALL - ## EOF mid-string: match kaem-minimal by just stopping (it would - ## abort; for our Makefile use this is benign). - P1_LI_R1 - '00000000' - P1_ADDI_R1_R1_NEG1 - P1_LI_BR - &collect_string_done - P1_BEQ_R0_R1 - ## closing '"' - P1_LI_R1 - '22000000' - P1_LI_BR - &collect_string_close - P1_BEQ_R0_R1 - - ## Any other byte: copy literally. - P1_MOV_R1_R0 - P1_LI_BR - &arena_putc - P1_CALL - P1_LI_BR - &advance_char - P1_CALL - P1_LI_BR - &collect_string_loop - P1_B - -:collect_string_close - P1_LI_BR - &advance_char - P1_CALL ## eat closing '"' -:collect_string_done - P1_EPILOGUE - P1_RET - - -## ---- collect_comment() — skip '#' through end of line ------------ -## Called with the '#' under peek. Consumes '#' and everything up to -## but NOT including '\n' (so collect_command's outer loop sees '\n' -## and terminates the command). -:collect_comment - P1_PROLOGUE - P1_LI_BR - &advance_char - P1_CALL ## eat '#' -:collect_comment_loop - P1_LI_BR - &peek_char - P1_CALL - P1_LI_R1 - '00000000' - P1_ADDI_R1_R1_NEG1 - P1_LI_BR - &collect_comment_done - P1_BEQ_R0_R1 ## EOF → done - P1_LI_R1 - '0A000000' - P1_LI_BR - &collect_comment_done - P1_BEQ_R0_R1 ## '\n' → leave it - P1_LI_BR - &advance_char - P1_CALL - P1_LI_BR - &collect_comment_loop - P1_B -:collect_comment_done - P1_EPILOGUE - P1_RET - - -## ---- collect_command() — tokenize one logical line -------------- -## Top of collect_command: -## - separator ' ' or '\t' → end_token, advance, continue -## - '\n' → end_token, advance, return -## - EOF → end_token, return -## - '#' → end_token, collect_comment, continue (next iter hits \n) -## - '"' → collect_string (keeps token open across quotes) -## - '\\' → advance twice (drop \\ and next char), end_token, continue -## - else → collect_token (grows token) -:collect_command - P1_PROLOGUE -:collect_command_loop - P1_LI_BR - &peek_char - P1_CALL ## r0 = c - - ## EOF → close any open token and return. - P1_LI_R1 - '00000000' - P1_ADDI_R1_R1_NEG1 - P1_LI_BR - &collect_command_done - P1_BEQ_R0_R1 - ## '\n' - P1_LI_R1 - '0A000000' - P1_LI_BR - &collect_command_eat_nl - P1_BEQ_R0_R1 - ## ' ' - P1_LI_R1 - '20000000' - P1_LI_BR - &collect_command_sep - P1_BEQ_R0_R1 - ## '\t' - P1_LI_R1 - '09000000' - P1_LI_BR - &collect_command_sep - P1_BEQ_R0_R1 - ## '#' - P1_LI_R1 - '23000000' - P1_LI_BR - &collect_command_comment - P1_BEQ_R0_R1 - ## '"' - P1_LI_R1 - '22000000' - P1_LI_BR - &collect_command_str - P1_BEQ_R0_R1 - ## '\\' - P1_LI_R1 - '5C000000' - P1_LI_BR - &collect_command_bslash - P1_BEQ_R0_R1 - - ## Plain char — start/continue a token. - P1_LI_BR - &collect_token - P1_CALL - P1_LI_BR - &collect_command_loop - P1_B - -:collect_command_sep - P1_LI_BR - &end_token - P1_CALL - P1_LI_BR - &advance_char - P1_CALL - P1_LI_BR - &collect_command_loop - P1_B - -:collect_command_comment - P1_LI_BR - &end_token - P1_CALL - P1_LI_BR - &collect_comment - P1_CALL - P1_LI_BR - &collect_command_loop - P1_B - -:collect_command_str - P1_LI_BR - &collect_string - P1_CALL - P1_LI_BR - &collect_command_loop - P1_B - -:collect_command_bslash - ## Drop the backslash, then drop the next char (if any), then end - ## the token. Two advance_chars + end_token, per kaem-minimal.c. - P1_LI_BR - &advance_char - P1_CALL - P1_LI_BR - &peek_char - P1_CALL - P1_LI_R1 - '00000000' - P1_ADDI_R1_R1_NEG1 - P1_LI_BR - &collect_command_bslash_end - P1_BEQ_R0_R1 - P1_LI_BR - &advance_char - P1_CALL -:collect_command_bslash_end - P1_LI_BR - &end_token - P1_CALL - P1_LI_BR - &collect_command_loop - P1_B - -:collect_command_eat_nl - P1_LI_BR - &end_token - P1_CALL - P1_LI_BR - &advance_char - P1_CALL - -:collect_command_done - P1_LI_BR - &end_token - P1_CALL - P1_EPILOGUE - P1_RET - - -## ---- strlen(r1 = cstr) -> r0 = length --------------------------- -:strlen - P1_LI_R0 - '00000000' -:strlen_loop - P1_ADD_R2_R0_R1 - P1_LB_R3_R2_0 - P1_LI_R2 - '00000000' - P1_LI_BR - &strlen_done - P1_BEQ_R3_R2 - P1_ADDI_R0_R0_1 - P1_LI_BR - &strlen_loop - P1_B -:strlen_done - P1_RET - - -## ---- write_cstr(r1 = cstr, r2 = fd) ----------------------------- -## strlen + one SYS_WRITE. Uses r4 to carry fd, r5 to carry ptr across -## the strlen CALL (r4/r5 are callee-saved, preserved by strlen). -:write_cstr - P1_PROLOGUE - P1_MOV_R4_R2 ## r4 = fd - P1_MOV_R5_R1 ## r5 = cstr - P1_LI_BR - &strlen - P1_CALL ## r0 = len - - P1_MOV_R3_R0 ## r3 = count - P1_MOV_R2_R5 ## r2 = buf - P1_MOV_R1_R4 ## r1 = fd - P1_LI_R0 - SYS_WRITE - P1_SYSCALL - P1_EPILOGUE - P1_RET - - -## ---- emit_verbose() — print " +> tok1 tok2 ... tokN\n" to fd 1 - -## Walks argv_out[0..token_count-1], emitting each token preceded by -## a separator (" +> " before the first, " " before the rest), then -## a trailing newline. -:emit_verbose - P1_PROLOGUE_N2 - ## slot1 = i (loop index). slot2 = fd const (not strictly needed - ## but cheap to keep). - P1_MOV_R3_SP - P1_LI_R1 - '00000000' - P1_ST_R1_R3_8 ## i = 0 - - ## " +> " prefix. - P1_LI_R0 - SYS_WRITE - P1_LI_R1 - '01000000' - P1_LI_R2 - &msg_verbose_prefix - P1_LI_R3 - '04000000' - P1_SYSCALL - -:emit_verbose_loop - P1_MOV_R3_SP - P1_LD_R1_R3_8 ## r1 = i - P1_LI_R2 - &token_count - P1_LD_R2_R2_0 - P1_LI_BR - &emit_verbose_done - P1_BEQ_R1_R2 ## i == count → done - - ## If i > 0, write a separating space. - P1_LI_R2 - '00000000' - P1_LI_BR - &emit_verbose_skip_space - P1_BEQ_R1_R2 - P1_LI_R0 - SYS_WRITE - P1_LI_R1 - '01000000' - P1_LI_R2 - &msg_space - P1_LI_R3 - '01000000' - P1_SYSCALL - -:emit_verbose_skip_space - ## Write argv_out[i] as a C string. - P1_MOV_R3_SP - P1_LD_R1_R3_8 ## r1 = i - P1_SHLI_R1_R1_3 ## r1 = i*8 - P1_LI_R2 - &argv_out - P1_ADD_R1_R1_R2 - P1_LD_R1_R1_0 ## r1 = argv_out[i] - P1_LI_R2 - '01000000' ## fd = 1 - P1_LI_BR - &write_cstr - P1_CALL - - P1_MOV_R3_SP - P1_LD_R1_R3_8 - P1_ADDI_R1_R1_1 - P1_ST_R1_R3_8 ## i++ - P1_LI_BR - &emit_verbose_loop - P1_B - -:emit_verbose_done - ## Trailing newline. - P1_LI_R0 - SYS_WRITE - P1_LI_R1 - '01000000' - P1_LI_R2 - &msg_newline - P1_LI_R3 - '01000000' - P1_SYSCALL - P1_EPILOGUE_N2 - P1_RET - - -## ---- spawn_and_wait() — clone + execve + waitid --------------- -## Builds a NULL-terminated argv in argv_out (the token pointers are -## already there; just stamp a NULL past the last one). Then: -## pid = clone(SIGCHLD, 0, 0, 0, 0) -## if pid == 0: -## execve(argv_out[0], argv_out, envp); _exit(127) -## else: -## waitid(P_PID, pid, &siginfo_buf, WEXITED, 0) -## if siginfo_buf.si_status byte != 0 → die -## Uses waitid rather than wait4 because wait4 is not in the generic -## Linux syscall table that aarch64/riscv64 share (aarch64 #260 is -## 32-bit-compat only). waitid is uniform: amd64=247, aarch64=95, -## riscv64=95. -:spawn_and_wait - P1_PROLOGUE - - ## Stamp NULL into argv_out[token_count]. - P1_LI_R1 - &token_count - P1_LD_R1_R1_0 - P1_SHLI_R1_R1_3 - P1_LI_R2 - &argv_out - P1_ADD_R1_R1_R2 ## r1 = &argv_out[count] - P1_LI_R2 - '00000000' - P1_ST_R2_R1_0 - - ## clone(flags=SIGCHLD=17, stack=0, ptid=0, ctid=0, tls=0) - ## Arg order past arg3 differs slightly across arches (aarch64/ - ## riscv64 swap tls and ctid relative to amd64) but all args >= 4 - ## are 0 here so the divergence is benign. - P1_LI_R0 - SYS_CLONE - P1_LI_R1 - '11000000' ## SIGCHLD = 17 - P1_LI_R2 - '00000000' - P1_LI_R3 - '00000000' - P1_LI_R4 - '00000000' - P1_LI_R5 - '00000000' - P1_LI_R6 - '00000000' - P1_SYSCALL ## r0 = pid (parent) or 0 (child) - - ## Child? - P1_LI_R1 - '00000000' - P1_LI_BR - &spawn_child - P1_BEQ_R0_R1 - - ## Parent: waitid(P_PID=1, pid, &siginfo_buf, WEXITED=4, rusage=0). - ## Move pid into r2 before we clobber r0 with the syscall number. - P1_MOV_R2_R0 ## r2 = id = pid - P1_LI_R0 - SYS_WAITID - P1_LI_R1 - '01000000' ## idtype = P_PID = 1 - P1_LI_R3 - &siginfo_buf ## siginfo_t out - P1_LI_R4 - '04000000' ## options = WEXITED = 4 - P1_LI_R5 - '00000000' ## rusage = NULL - P1_SYSCALL - - ## Check si_status (32-bit int at siginfo_buf+24). For CLD_EXITED - ## it holds the exit code; for CLD_KILLED it holds the signal - ## number. Either way we only pass if every byte is 0, and exit - ## codes / signal numbers are < 256 so the low byte is sufficient. - P1_LI_R1 - &siginfo_buf - P1_LB_R1_R1_24 - P1_LI_R2 - '00000000' - P1_LI_BR - &spawn_ok - P1_BEQ_R1_R2 - - ## Print abort message to stderr, exit 1. - P1_LI_R0 - SYS_WRITE - P1_LI_R1 - '02000000' - P1_LI_R2 - &msg_abort - P1_LI_R3 - &msg_abort_end - P1_SUB_R3_R3_R2 - P1_SYSCALL - P1_LI_R0 - SYS_EXIT - P1_LI_R1 - '01000000' - P1_SYSCALL - -:spawn_ok - P1_EPILOGUE - P1_RET - -:spawn_child - ## execve(argv_out[0], argv_out, envp) - P1_LI_R1 - &argv_out - P1_LD_R1_R1_0 ## r1 = filename = argv_out[0] - P1_LI_R2 - &argv_out ## r2 = argv - P1_LI_R3 - &envp_ptr - P1_LD_R3_R3_0 ## r3 = envp - P1_LI_R0 - SYS_EXECVE - P1_SYSCALL - - ## execve returned → failure. exit(127) so the parent's wait4 - ## sees a non-zero status and aborts. - P1_LI_R0 - SYS_EXIT - P1_LI_R1 - '7F000000' - P1_SYSCALL - - -## ==================================================================== -## Constant pool + mutable globals + zero-filled arenas. -## All live in the single PT_LOAD segment (flags=7 RWX), so the arenas -## are writable in place. -## ==================================================================== - -## ---- Constant strings ----------------------------------------------- -:default_filename -"kaem.run" -'00' - -:msg_verbose_prefix -" +> " - -:msg_space -" " - -:msg_newline -" -" - -:msg_openfail -"kaem: cannot open script -" -:msg_openfail_end - -:msg_abort -"Subprocess error -ABORTING HARD -" -:msg_abort_end - - -## ---- Mutable globals (8 bytes each, 8-aligned so LD/ST work) ------- -## Listed after strings so they're likely 8-aligned; if not, the code -## still accesses them via 8-byte LD/ST which is aligned on amd64 and -## requires 8-alignment on aarch64/riscv64. See P1.md §"Data alignment". -## (Per-arch layout is deterministic but not identical; if this trips -## a #SIGBUS on aarch64, insert a single-byte padding label above.) -:globals_pad -'00' -'00' -'00' -'00' -'00' -'00' -'00' - -:script_fd -'0000000000000000' - -:envp_ptr -'0000000000000000' - -:src_pos -'0000000000000000' - -:src_len -'0000000000000000' - -:token_count -'0000000000000000' - -:token_arena_next -'0000000000000000' - -:current_token_ptr -'0000000000000000' - -## siginfo_t output buffer for waitid — 128 bytes. si_status (the -## exit code / signal number) lives at offset 24. -:siginfo_buf -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -:siginfo_buf_end - - -## ---- argv_out — NULL-terminated C argv for execve ---------------- -## 128 slots × 8 = 1024 bytes. Enough headroom for any realistic -## command in a build script; kaem.run lines rarely exceed a dozen. -:argv_out -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -:argv_out_end - - -## ---- token_arena — byte pool for token text -------------------- -## 4096 bytes: far more than any shell line we're likely to emit. -## Reset on every command; never spills across commands. -:token_arena -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -:token_arena_end - - -## ---- read_buf — file slurp buffer ------------------------------- -## 16 KiB covers any reasonable build script. At 128 bytes per line -## this is 128 lines × 32 hex chars. -:read_buf -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -:read_buf_end - -:ELF_end - diff --git a/tests/kaem.run b/tests/kaem.run @@ -1,3 +0,0 @@ -/bin/echo hello -/bin/echo "world" -/bin/true