about summary refs log tree commit diff stats
path: root/bootstrap.md
blob: ca9320e5a1c3febf055d1369e5f986d630b03004 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## Running

`bootstrap` currently has the following sub-commands:

- `bootstrap help`: some helpful documentation to have at your fingertips.

- `bootstrap test`: runs all automated tests.

- `bootstrap translate <input files> -o <output ELF binary>`: translates `.subx`
  files into an executable ELF binary.

- `bootstrap run <ELF binary> <args>`: simulates running the ELF binaries emitted
  by `bootstrap translate`. Useful for testing and debugging.

  Remember, not all 32-bit Linux binaries are guaranteed to run. I'm not
  building general infrastructure here for all of the x86 instruction set.
  SubX is about programming with a small, regular subset of 32-bit x86.
olor: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
c{0: 0 (((sleep)) ((for-some-cycles literal)) ((1 literal))) -- nil
c{0: 1 (((1 integer)) <- ((copy)) ((0 literal))) -- nil
c{0: 2 (((1 integer)) <- ((copy)) ((0 literal))) -- nil
c{1: 0 ✓ (((sleep)) ((for-some-cycles literal)) ((1 literal)))
c{1: 1 ✓ (((1 integer)) <- ((copy)) ((0 literal)))
c{1: 2 ✓ (((1 integer)) <- ((copy)) ((0 literal)))
c{0: 0 (((2 integer)) <- ((copy)) ((0 literal))) -- nil
c{0: 1 (((2 integer)) <- ((copy)) ((0 literal))) -- nil
c{1: 0 ✓ (((2 integer)) <- ((copy)) ((0 literal)))
c{1: 1 ✓ (((2 integer)) <- ((copy)) ((0 literal)))
cn0: convert-names in f1
cn0: (((sleep)) ((for-some-cycles literal)) ((1 literal))) nil nil
cn0: checking arg ((for-some-cycles literal))
cn0: checking arg ((1 literal))
cn0: (((1 integer)) <- ((copy)) ((0 literal))) nil nil
cn0: checking arg ((0 literal))
cn0: checking oarg ((1 integer))
maybe-add: ((1 integer))
cn0: (((1 integer)) <- ((copy)) ((0 literal))) nil nil
cn0: checking arg ((0 literal))
cn0: checking oarg ((1 integer))
maybe-add: ((1 integer))
cn0: convert-names in f2
cn0: (((2 integer)) <- ((copy)) ((0 literal))) nil nil
cn0: checking arg ((0 literal))
cn0: checking oarg ((2 integer))
maybe-add: ((2 integer))
cn0: (((2 integer)) <- ((copy)) ((0 literal))) nil nil
cn0: checking arg ((0 literal))
cn0: checking oarg ((2 integer))
maybe-add: ((2 integer))
cn1: (((sleep)) ((for-some-cycles literal)) ((1 literal)))
cn1: (((1 integer)) <- ((copy)) ((0 literal)))
cn1: (((1 integer)) <- ((copy)) ((0 literal)))
cn1: (((2 integer)) <- ((copy)) ((0 literal)))
cn1: (((2 integer)) <- ((copy)) ((0 literal)))
schedule: f1
run: f1 0: (((sleep)) ((for-some-cycles literal)) ((1 literal)))
run: f1 0: sleeping until 2
schedule: pushing f1 to sleep queue
schedule: f2
run: f2 0: (((2 integer)) <- ((copy)) ((0 literal)))
run: f2 0: 0 => ((2 integer))
mem: ((2 integer)): 2 <= 0
run: f2 1: (((2 integer)) <- ((copy)) ((0 literal)))
run: f2 1: 0 => ((2 integer))
mem: ((2 integer)): 2 <= 0
schedule: done with routine nil
schedule: waking up f1
schedule: f1
run: f1 1: (((1 integer)) <- ((copy)) ((0 literal)))
run: f1 1: 0 => ((1 integer))
mem: ((1 integer)): 1 <= 0
run: f1 2: (((1 integer)) <- ((copy)) ((0 literal)))
run: f1 2: 0 => ((1 integer))
mem: ((1 integer)): 1 <= 0
schedule: done with routine nil