From 5892336827c331b47914f52bf2561281aa2a5b9c Mon Sep 17 00:00:00 2001 From: Kyle Hayes Date: Thu, 7 May 2026 11:54:05 -0700 Subject: [PATCH 1/3] Add trailing newline to remove format warning. --- tests/test_yafl_watermark.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_yafl_watermark.c b/tests/test_yafl_watermark.c index 286da27..4b2a7ad 100644 --- a/tests/test_yafl_watermark.c +++ b/tests/test_yafl_watermark.c @@ -128,4 +128,4 @@ int main(void) { printf("\nAll watermark tests passed!\n"); return 0; -} \ No newline at end of file +} From 23c1f1ed05163fb21973a91368e6dbcf50404b28 Mon Sep 17 00:00:00 2001 From: Kyle Hayes Date: Thu, 7 May 2026 12:04:48 -0700 Subject: [PATCH 2/3] Removing and cleaning up unneeded files. --- VERSION | 2 +- append_badges.py | 67 ------------------------------------- codecov.yml | 2 -- consolidate.py | 80 --------------------------------------------- fix_ci.py | 34 ------------------- parse_workflows.py | 7 ---- tmp.yml | 0 workflows.tar.gz | Bin 9575 -> 0 bytes 8 files changed, 1 insertion(+), 191 deletions(-) delete mode 100644 append_badges.py delete mode 100644 codecov.yml delete mode 100644 consolidate.py delete mode 100644 fix_ci.py delete mode 100644 parse_workflows.py delete mode 100644 tmp.yml delete mode 100644 workflows.tar.gz diff --git a/VERSION b/VERSION index 09a3acf..bcaffe1 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.6.0 \ No newline at end of file +0.7.0 \ No newline at end of file diff --git a/append_badges.py b/append_badges.py deleted file mode 100644 index 40f1e8b..0000000 --- a/append_badges.py +++ /dev/null @@ -1,67 +0,0 @@ -import yaml - -with open('.github/workflows/ci.yml', 'r') as f: - data = yaml.safe_load(f) - -jobs = data.get('jobs', {}) -job_names = [k for k in jobs.keys() if k != 'generate-badges'] - -steps = [ - {"uses": "actions/checkout@v4", "with": {"ref": "badges"}}, - {"name": "Set up directory", "run": "mkdir -p status"} -] - -for j in job_names: - run_script = f"""if [ "${{{{ needs.{j}.result }}}}" == "success" ]; then - COLOR="brightgreen" - TEXT="passing" -else - COLOR="red" - TEXT="failing" -fi -cat > status/{j}.svg << 'SVGEOF' - - - - - - - - - - - - - - - {j} - ${{TEXT}} - - -SVGEOF -""" - steps.append({ - "name": f"Generate badge for {j}", - "run": run_script - }) - -steps.append({ - "name": "Commit and push badges", - "run": 'git config user.name "GitHub Actions"\ngit config user.email "actions@github.com"\ngit add status/*.svg\ngit diff --quiet && git diff --staged --quiet || (git commit -m "Update build status badges [skip ci]" && git push origin badges)' -}) - -badge_job = { - 'needs': list(job_names), - 'if': 'always()', - 'runs-on': 'ubuntu-latest', - 'steps': steps -} - -data['jobs']['generate-badges'] = badge_job - -class MyDumper(yaml.Dumper): - def increase_indent(self, flow=False, indentless=False): - return super(MyDumper, self).increase_indent(flow, False) - -with open('.github/workflows/ci.yml', 'w') as f: - yaml.dump(data, f, Dumper=MyDumper, sort_keys=False, default_flow_style=False) diff --git a/codecov.yml b/codecov.yml deleted file mode 100644 index b3ed978..0000000 --- a/codecov.yml +++ /dev/null @@ -1,2 +0,0 @@ -ignore: - - "tests" \ No newline at end of file diff --git a/consolidate.py b/consolidate.py deleted file mode 100644 index 780b2d4..0000000 --- a/consolidate.py +++ /dev/null @@ -1,80 +0,0 @@ -import glob, yaml, os - -def get_workflows(): - workflows = glob.glob('.github/workflows/*.yml') - ignores = ['coverage.yml', 'release.yml', 'update-version-readme.yml', 'ci.yml'] - return [w for w in workflows if os.path.basename(w) not in ignores] - -def process_workflow(filepath): - with open(filepath, 'r') as f: - data = yaml.safe_load(f) - - target_name = data.get('name') - jobs = data.get('jobs', {}) - - combined_steps = [] - ordered_job_keys = [] - for prefix in ['setup', 'build', 'test']: - for k in list(jobs.keys()): - if k.startswith(prefix) and k not in ordered_job_keys: - ordered_job_keys.append(k) - for k in list(jobs.keys()): - if k not in ordered_job_keys: - ordered_job_keys.append(k) - - runs_on = None - - for k in ordered_job_keys: - job = jobs[k] - if not runs_on: - runs_on = job.get('runs-on') - - steps = job.get('steps', []) - for step in steps: - if 'uses' in step: - uses = step['uses'] - if 'actions/upload-artifact' in uses: continue - if 'actions/download-artifact' in uses: continue - if 'actions/checkout' in uses: - if any('actions/checkout' in s.get('uses', '') for s in combined_steps): - continue - combined_steps.append(step) - - combined_job = { - 'runs-on': runs_on, - 'steps': combined_steps - } - - for k in ordered_job_keys: - for extra_key in ['container', 'services', 'env']: - if extra_key in jobs[k] and extra_key not in combined_job: - combined_job[extra_key] = jobs[k][extra_key] - - return target_name, combined_job - -all_combined_jobs = {} -workflows_to_delete = get_workflows() - -for w in workflows_to_delete: - tname, cjob = process_workflow(w) - # the job_key should be a valid github actions job ID - job_key = os.path.basename(w).replace('.yml', '') - all_combined_jobs[job_key] = cjob - -ci_data = { - 'name': 'CI', - 'on': { - 'push': None, - 'pull_request': None - }, - 'jobs': all_combined_jobs -} - -class MyDumper(yaml.Dumper): - def increase_indent(self, flow=False, indentless=False): - return super(MyDumper, self).increase_indent(flow, False) - -with open('.github/workflows/ci.yml', 'w') as f: - yaml.dump(ci_data, f, Dumper=MyDumper, sort_keys=False, default_flow_style=False) - -print("Wrote ci.yml. Processed", len(workflows_to_delete), "workflows.") diff --git a/fix_ci.py b/fix_ci.py deleted file mode 100644 index 21daea6..0000000 --- a/fix_ci.py +++ /dev/null @@ -1,34 +0,0 @@ -import yaml - -with open('.github/workflows/ci.yml', 'r') as f: - data = yaml.safe_load(f) - -for job_name, job_info in data['jobs'].items(): - if job_name == 'generate-badges': continue - - seen_step_names = set() - new_steps = [] - - for step in job_info.get('steps', []): - if 'name' in step: - name = step['name'] - - # Skip redundant executable permission restore - if name == 'Restore execute permissions': continue - if step.get('run') and 'chmod +x build/bin' in str(step.get('run', '')): continue - - # Skip duplicated setup/install steps - if name in seen_step_names: continue - - seen_step_names.add(name) - - new_steps.append(step) - - job_info['steps'] = new_steps - -class MyDumper(yaml.Dumper): - def increase_indent(self, flow=False, indentless=False): - return super(MyDumper, self).increase_indent(flow, False) - -with open('.github/workflows/ci.yml', 'w') as f: - yaml.dump(data, f, Dumper=MyDumper, sort_keys=False, default_flow_style=False) diff --git a/parse_workflows.py b/parse_workflows.py deleted file mode 100644 index 999512c..0000000 --- a/parse_workflows.py +++ /dev/null @@ -1,7 +0,0 @@ -import os, glob, yaml - -workflows = glob.glob('.github/workflows/*.yml') -workflows = [w for w in workflows if 'coverage' not in w and 'update-version' not in w and 'release' not in w] - -# We will collect the matrix entries -print("Parsing workflows...") diff --git a/tmp.yml b/tmp.yml deleted file mode 100644 index e69de29..0000000 diff --git a/workflows.tar.gz b/workflows.tar.gz deleted file mode 100644 index b9f922e1b1f53392eae5238eba7f57fb5478e67b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9575 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 Date: Thu, 7 May 2026 12:05:36 -0700 Subject: [PATCH 3/3] Remove excess documents. --- docs/streamline-plan.md | 96 ----------------------------------------- 1 file changed, 96 deletions(-) delete mode 100644 docs/streamline-plan.md diff --git a/docs/streamline-plan.md b/docs/streamline-plan.md deleted file mode 100644 index ec875d1..0000000 --- a/docs/streamline-plan.md +++ /dev/null @@ -1,96 +0,0 @@ -# Streamlining Summary - -## Summary - -The coroutine-layer streamlining work is implemented across the C runtime, assembly backends, and toolchain selection files. YAFL now uses `yafl_switch(yafl_t *save, yafl_t target, void *data)` and `yafl_make_context()` internally, which removes `transfer_t`, removes `pending_arg`, and keeps the hot path at a save/restore plus direct data handoff. - -The public API in `include/yafl.h` stays unchanged. All of the streamlining work remains below that surface. - -## Status - -- `src/yafl.c` now uses direct `void *` handoff through `yafl_switch`. -- Assembly sources and exported symbols are renamed to `switch_*` / `make_context_*` and `yafl_switch` / `yafl_make_context`. -- Toolchain `ASM_FILES` lists point at the renamed files. -- The host arm64 build and test suite pass after the refactor. - -## Implemented Design - -### Low-level switch primitive - -The internal switch ABI is now: - -`void *yafl_switch(yafl_t *save, yafl_t target, void *data)` - -- `*save` receives the current suspended context. -- `target` is the context to resume. -- `data` is delivered directly both as the resumed return value and as the first-entry argument. - -This removes the synthetic transport struct and the Windows-specific hidden struct-return plumbing that existed in the old backend model. - -### Initial context creation - -The initial saved context is created by: - -`yafl_t yafl_make_context(void *sp, size_t size, yafl_entry_t fn)` - -Each backend-specific `make_context_*` file prepares the initial stack/register image for a new fiber and installs the `finish:` fallback path that terminates the process if a fiber entry function unexpectedly returns through the raw frame. - -### C runtime changes - -- `yafl_transfer_t` is removed. -- `pending_arg` is removed from `struct yafl_fiber`. -- `fiber_entry_trampoline()` now receives the first resume argument directly and discovers the active fiber through TLS. -- `yafl_fiber_resume()` and `yafl_fiber_suspend()` use direct `void *` handoff through `yafl_switch()`. -- Fiber stack cleanup and watermark reinitialization are both routed through helpers so failure paths stay linear. - -### Assembly and naming changes - -- All internal switch-family files are renamed from `jump_*` to `switch_*`. -- All initial-context files are renamed from `make_*` to `make_context_*`. -- Exported assembly symbols are renamed from `jump_fcontext` / `make_fcontext` to `yafl_switch` / `yafl_make_context`. -- Toolchain `ASM_FILES` lists in `toolchains/*.cmake` point at the renamed files. - -### Backend scope - -The direct-data `yafl_switch` model is implemented across the maintained backends in the tree, including x86_64, arm64, i386, arm, riscv64, loongarch64, mips32, mips64, ppc32, ppc64, s390x, and sparc64. - -The guiding backend rule is unchanged across architectures: save-via-pointer, restore-target-from-second-argument, and pass `data` directly. - -## Validation - -- Host arm64 library build succeeds. -- Host tests pass: `test_yafl_basic`, `test_yafl_suspend_resume`, `test_yafl_guard`, `test_yafl_many`, and `test_yafl_watermark`. -- Maintained sources no longer carry live `transfer_t`, `pending_arg`, `jump_fcontext`, or `make_fcontext` implementation references. -- Non-host assembly validation is opportunistic and depends on the locally available target assemblers. - -## Remaining Follow-up - -- Keep generated coverage artifacts in sync with the source tree when coverage is regenerated. -- Expand cross-target validation when additional target toolchains are available. - -## Decisions - -1. **Do not move the C trampoline into assembly** - - That would hardcode `struct yafl_fiber` offsets into every backend. - - The resulting code would be harder to audit and not meaningfully faster. - -2. **Do not collapse the initial-context primitive and the switch primitive into one assembly entry point** - - `yafl_switch` is the hot path. - - `yafl_make_context` runs only during fiber creation. - - Combining them would trade a tiny amount of source reduction for a branchier and less legible hot path. - -3. **Do not merge ELF and Mach-O assembly files even when they currently match** - - OS-level context requirements may diverge later, including support for wider architectural state such as AVX or other OS-managed register state. - - Keep separate per-OS source files so those changes can land without re-splitting shared assembly later. - -4. **Do not introduce runtime architecture dispatch to reduce file count** - - The current per-target selection in the toolchain files keeps the build explicit and predictable. - - Runtime selection would increase complexity without helping performance. - -## Relevant Files - -- `src/yafl.c` — current C runtime implementation of the streamlined switch semantics. -- `include/yafl.h` — no public API changes are required. -- `src/asm/*/switch_*` — backend switch-family sources implementing `yafl_switch`. -- `src/asm/*/make_context_*` — backend entry-context sources implementing `yafl_make_context`. -- `toolchains/*.cmake` — backend selection for the renamed assembly sources.