5851
Rename a few scripts to be more consistent. I'm also starting to feel the urge to bud off `subx run` into its own program, say tools/emulate_x86. It doesn't really rely on the SubX notation at all. And then I could rename `subx translate` to `translate_subx_bootstrap`. Only problem: the commands in the Readme get verbose. But the Readme is gonna need surgery soon anyway to put translate_mu front and center.
This commit is contained in:
parent
7ca19e4e1d
commit
23fd294d85
|
@ -63,9 +63,10 @@ $emit:name:
|
|||
eb/jump $emit:end/disp8
|
||||
# otherwise emit-hex(out, parse-hex-int(datum), width)
|
||||
# (Weird shit can happen here if the datum of 'word' isn't either a valid
|
||||
# name or a hex number. `emit` is mostly used by ntranslate, which is
|
||||
# currently designed to only receive legal SubX programs. We just want to
|
||||
# make sure that valid names aren't treated as (valid) hex numbers.)
|
||||
# name or a hex number. `emit` is mostly used by translate_subx, which
|
||||
# is currently designed to only receive legal SubX programs. We just
|
||||
# want to make sure that valid names aren't treated as (valid) hex
|
||||
# numbers.)
|
||||
$emit:hex-int:
|
||||
# . var value/eax : int = parse-hex-int(datum)
|
||||
# . . push args
|
||||
|
|
|
@ -118,16 +118,16 @@ You can use SubX to translate itself. For example, running natively on Linux:
|
|||
42
|
||||
|
||||
# or, automating the above steps
|
||||
$ ./ntranslate init.linux examples/ex1.subx
|
||||
$ ./translate_subx init.linux examples/ex1.subx
|
||||
$ ./a.elf
|
||||
$ echo $?
|
||||
42
|
||||
```
|
||||
|
||||
Or, running in a VM on other platforms:
|
||||
Or, running in a VM on other platforms (much slower):
|
||||
|
||||
```sh
|
||||
$ ./translate init.linux ex1.subx # generates identical a.elf to above
|
||||
$ ./translate_subx_emulated init.linux ex1.subx # generates identical a.elf to above
|
||||
$ ./subx run a.elf
|
||||
$ echo $?
|
||||
42
|
||||
|
@ -433,8 +433,7 @@ runnable on a Linux system running on Intel x86 processors, either 32- or
|
|||
files into an executable ELF binary.
|
||||
|
||||
* `subx run <ELF binary>`: simulates running the ELF binaries emitted by `subx
|
||||
translate`. Useful for debugging, and also enables more thorough testing of
|
||||
`translate`.
|
||||
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.
|
||||
|
|
|
@ -18,7 +18,7 @@ then
|
|||
fi
|
||||
|
||||
echo "=== building SubX binary"
|
||||
./ntranslate $*
|
||||
./translate_subx $*
|
||||
mv a.elf init
|
||||
chmod +x init
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ then
|
|||
fi
|
||||
|
||||
echo "=== building SubX binary"
|
||||
./ntranslate $*
|
||||
./translate_subx $*
|
||||
mv a.elf init
|
||||
chmod +x init
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Just a test stub for mu-init.subx
|
||||
#
|
||||
# Try it out like this:
|
||||
# $ ./ntranslate init.linux 0*.subx mu-init.subx mu-init-test.subx
|
||||
# $ ./translate_subx init.linux 0*.subx mu-init.subx mu-init-test.subx
|
||||
# $ ./a.elf # should run all tests
|
||||
|
||||
main: # args : (address array kernel-string) -> result/ebx : int
|
||||
|
|
|
@ -304,7 +304,7 @@ echo "== translating using SubX (native only)"
|
|||
for n in `seq 1 12`
|
||||
do
|
||||
echo ex$n
|
||||
./ntranslate init.$OS examples/ex$n.subx
|
||||
./translate_subx init.$OS examples/ex$n.subx
|
||||
diff examples/ex$n a.elf
|
||||
done
|
||||
|
||||
|
@ -313,7 +313,7 @@ done
|
|||
for app in factorial crenshaw2-1 crenshaw2-1b handle
|
||||
do
|
||||
echo $app
|
||||
./ntranslate init.$OS 0*.subx apps/$app.subx
|
||||
./translate_subx init.$OS 0*.subx apps/$app.subx
|
||||
diff apps/$app a.elf
|
||||
done
|
||||
|
||||
|
@ -322,13 +322,13 @@ done
|
|||
for app in hex survey pack assort dquotes tests sigils calls braces
|
||||
do
|
||||
echo $app
|
||||
./ntranslate init.$OS 0*.subx apps/subx-params.subx apps/$app.subx
|
||||
./translate_subx init.$OS 0*.subx apps/subx-params.subx apps/$app.subx
|
||||
diff apps/$app a.elf
|
||||
done
|
||||
|
||||
# Mu translator
|
||||
echo mu
|
||||
./ntranslate init.$OS 0*.subx apps/mu.subx
|
||||
./translate_subx init.$OS 0*.subx apps/mu.subx
|
||||
diff apps/mu a.elf
|
||||
|
||||
exit 0
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
#!/bin/sh
|
||||
# Translate given Mu programs into ELF binaries.
|
||||
# Linux only for now.
|
||||
|
||||
set -e
|
||||
|
||||
cat $* |apps/mu > a.subx
|
||||
|
||||
./ntranslate init.linux 0*.subx mu-init.subx a.subx
|
||||
./translate_subx init.linux 0*.subx mu-init.subx a.subx
|
||||
|
|
|
@ -31,8 +31,8 @@ cat a.tests |apps/assort > a.assort
|
|||
|
||||
cat a.assort |apps/dquotes > a.dquotes
|
||||
|
||||
# A little hack. We want ntranslate to always emit identical binaries to the
|
||||
# C++ translator. The C++ translator assorts segments before it processes
|
||||
# A little hack. We want translate_subx to always emit identical binaries to
|
||||
# the C++ translator. The C++ translator assorts segments before it processes
|
||||
# string literals, so we follow the same order above.
|
||||
#
|
||||
# However, dquotes currently emits a separate data segment for string literals.
|
|
@ -7,13 +7,13 @@
|
|||
# 1. The self-hosted translator 'translate' runs in emulated mode and can
|
||||
# run on Linux or BSD or Mac. However, syntax sugar passes (sigils and
|
||||
# calls) can be very slow to run emulated.
|
||||
# 2. The self-hosted translator 'ntranslate' runs natively on Linux. It is
|
||||
# 2. The self-hosted translator 'translate_subx' runs natively on Linux. It is
|
||||
# fast, but you get no trace for runs and zero error-checking on the code
|
||||
# emitted by sigils and calls. Which could still be buggy.
|
||||
#
|
||||
# This script is a hack to get the best of all worlds. We run natively what we
|
||||
# must, and leverage as much debug information as possible. This arrangement
|
||||
# is snappy but requires Linux just like 'ntranslate'. You also are on your
|
||||
# is snappy but requires Linux just like 'translate_subx'. You also are on your
|
||||
# own to mentally map desugared instructions in traces and error messages back
|
||||
# to the original sources.
|
||||
|
Loading…
Reference in New Issue